These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace Itstructure\FieldWidgets; |
||
4 | |||
5 | use yii\base\{Model, Widget, InvalidConfigException}; |
||
6 | use Itstructure\FieldWidgets\interfaces\LanguageFieldInterface; |
||
7 | |||
8 | /** |
||
9 | * Class TableMultilanguageField |
||
10 | * The Widget class of the translation output for specified field. |
||
11 | * |
||
12 | * @property string $name |
||
13 | * @property string $label |
||
14 | * @property Model $model |
||
15 | * @property LanguageFieldInterface $language |
||
16 | * @property string $default |
||
17 | * |
||
18 | * @package Itstructure\FieldWidgets |
||
19 | */ |
||
20 | class TableMultilanguageField extends Widget |
||
21 | { |
||
22 | /** |
||
23 | * Field name. |
||
24 | * |
||
25 | * @var string |
||
26 | */ |
||
27 | public $name; |
||
28 | |||
29 | /** |
||
30 | * Field label. |
||
31 | * |
||
32 | * @var string |
||
33 | */ |
||
34 | public $label; |
||
35 | |||
36 | /** |
||
37 | * The model of the current field. |
||
38 | * |
||
39 | * @var Model |
||
40 | */ |
||
41 | public $model; |
||
42 | |||
43 | /** |
||
44 | * Model of languages. |
||
45 | * |
||
46 | * @var LanguageFieldInterface |
||
47 | */ |
||
48 | protected $language; |
||
49 | |||
50 | /** |
||
51 | * The value of the empty field is the default. |
||
52 | * |
||
53 | * @var string |
||
54 | */ |
||
55 | public $default = '-'; |
||
56 | |||
57 | /** |
||
58 | * Set the language model. |
||
59 | * |
||
60 | * @param LanguageFieldInterface $language |
||
61 | * |
||
62 | * @return void |
||
63 | */ |
||
64 | public function setLanguage(LanguageFieldInterface $language): void |
||
65 | { |
||
66 | $this->language = $language; |
||
67 | } |
||
68 | |||
69 | /** |
||
70 | * Returns the translation of the field. |
||
71 | * |
||
72 | * @throws InvalidConfigException |
||
73 | * |
||
74 | * @return string |
||
75 | */ |
||
76 | public function run(): string |
||
77 | { |
||
78 | if (null === $this->language) { |
||
79 | throw new InvalidConfigException('Language model is not defined.'); |
||
80 | } |
||
81 | |||
82 | if (strpos($this->name, '.') !== false) { |
||
83 | |||
84 | $out = $this->getDataByPath($this->name); |
||
85 | |||
86 | } else { |
||
87 | $out = $this->model->{$this->name.'_'.$this->language->getShortName()}; |
||
88 | } |
||
89 | |||
90 | return empty($out) ? $this->default : $out; |
||
91 | } |
||
92 | |||
93 | /** |
||
94 | * Obtaining a field translation of another model along a given path through a series |
||
95 | * of entities, separated by a point. |
||
96 | * |
||
97 | * @param $name string, separated by dot. |
||
98 | * |
||
99 | * @return string |
||
100 | */ |
||
101 | private function getDataByPath($name): string |
||
102 | { |
||
103 | $namePath = explode('.', $name); |
||
104 | $out = $this->model; |
||
105 | |||
106 | for ($i=0; $i < count($namePath); $i++) { |
||
0 ignored issues
–
show
|
|||
107 | |||
108 | $out = $i+1 < count($namePath) ? |
||
109 | $out->{$namePath[$i]} : $out->{$namePath[$i].'_'.$this->language->getShortName()}; |
||
110 | |||
111 | if (is_array($out)) { |
||
112 | for ($j=0; $j < count($out); $j++) { |
||
0 ignored issues
–
show
It seems like you are calling the size function
count() as part of the test condition. You might want to compute the size beforehand, and not on each iteration.
If the size of the collection does not change during the iteration, it is generally a good practice to compute it beforehand, and not on each iteration: for ($i=0; $i<count($array); $i++) { // calls count() on each iteration
}
// Better
for ($i=0, $c=count($array); $i<$c; $i++) { // calls count() just once
}
Loading history...
|
|||
113 | $out[$j] = $out[$j]->{$namePath[$i+1].'_'.$this->language->getShortName()}; |
||
114 | } |
||
115 | $out = implode(', ', $out); |
||
116 | break; |
||
117 | } |
||
118 | } |
||
119 | |||
120 | return trim($out, ', '); |
||
121 | } |
||
122 | } |
||
123 |
If the size of the collection does not change during the iteration, it is generally a good practice to compute it beforehand, and not on each iteration: