Commit 823bc499 by Vladislav

#19463 Реализация методов обработки полей РК с заменой переменных

1 parent 39a6af69
......@@ -2,6 +2,7 @@
namespace App\Models;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Pivots\DictionaryCampaignVariable;
use Illuminate\Database\Eloquent\Builder;
......@@ -35,6 +36,25 @@ class Variable extends Model
'default_value',
];
public static function getListVariablesByDictionaryCampaign(DictionaryCampaign $dictionaryCampaign)
{
$variable_list = [];
foreach (Variable::all() as $variable) {
$dictionaryCampaignVariable = $variable->findValue($dictionaryCampaign->getKey());
$value = (
$dictionaryCampaignVariable
? $dictionaryCampaignVariable->value
: $variable->default_value
);
$variable_list[$variable->name] = $value;
}
return $variable_list;
}
public function scopeDefaultOrderBy(Builder $query)
{
return $query->orderBy('name');
......
......@@ -65,22 +65,8 @@ class AddCampaigns extends DirectRequest
'Campaigns' => $this->dictionaryCampaigns->map(function ($dictionaryCampaign) {
/* @var DictionaryCampaign $dictionaryCampaign */
$variable_list = [];
foreach (Variable::all() as $variable) {
$dictionaryCampaignVariable = $variable->findValue($dictionaryCampaign->getKey());
$value = (
$dictionaryCampaignVariable
? $dictionaryCampaignVariable->value
: $variable->default_value
);
$variable_list[$variable->name] = $value;
}
$data = [
'Name' => StrReplaceByVariables::getInstance($dictionaryCampaign->name, $variable_list)->get(),
'Name' => StrReplaceByVariables::getInstance($dictionaryCampaign->name, $dictionaryCampaign)->get(),
'StartDate' => Carbon::now()->format('Y-m-d'),
'TextCampaign' => [
'BiddingStrategy' => [
......
......@@ -2,31 +2,38 @@
namespace App\Service;
use App\Models\Pivots\DictionaryCampaign;
use App\Models\Variable;
class StrReplaceByVariables
{
private $delimer = '%';
private $str;
private $variables;
private $list;
/**
* @param string $str
* @param array $variables
* @param array|DictionaryCampaign $list
*/
public function __construct($str, $variables)
public function __construct($str, $list)
{
foreach ($variables as $key => $variable) {
$variables["{$this->delimer}{$key}{$this->delimer}"] = $variable;
unset($variables[$key]);
if ($list instanceof DictionaryCampaign) {
$dictionaryCampaign = $list;
$list = Variable::getListVariablesByDictionaryCampaign($dictionaryCampaign);
}
foreach ($list as $key => $variable) {
$list["{$this->delimer}{$key}{$this->delimer}"] = $variable;
unset($list[$key]);
}
$this->str = $str;
$this->variables = $variables;
$this->list = $list;
}
static public function getInstance($str, $variables)
static public function getInstance($str, $list)
{
return new static($str, $variables);
return new static($str, $list);
}
/**
......@@ -34,7 +41,7 @@ class StrReplaceByVariables
*/
public function get()
{
return strtr($this->str, $this->variables);
return strtr($this->str, $this->list);
}
}
......@@ -91,22 +91,10 @@ class ReplaceByVariablesTest extends TestCase
$this->assertEquals(2, Variable::count());
$this->assertEquals(1, $this->campaign->dictionaryCampaignVariables->count());
$variable_list = [];
$list = Variable::getListVariablesByDictionaryCampaign($this->dictionaryCampaign);
foreach (Variable::all() as $variable) {
$dictionaryCampaignVariable = $variable->findValue($this->dictionaryCampaign->getKey());
$value = (
$dictionaryCampaignVariable
? $dictionaryCampaignVariable->value
: $variable->default_value
);
$variable_list[$variable->name] = $value;
}
$this->assertEquals('String "custom var value"', StrReplaceByVariables::getInstance('String "%var%"', $variable_list)->get());
$this->assertEquals('String "vartwo value"', StrReplaceByVariables::getInstance('String "%vartwo%"', $variable_list)->get());
$this->assertEquals('String "custom var value"', StrReplaceByVariables::getInstance('String "%var%"', $list)->get());
$this->assertEquals('String "vartwo value"', StrReplaceByVariables::getInstance('String "%vartwo%"', $list)->get());
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!