SettingsSheet   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 10
eloc 51
c 1
b 0
f 0
dl 0
loc 96
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getParsersByTypesSettings() 0 2 1
A find() 0 3 1
A getDictionaries() 0 2 1
A behaviors() 0 37 1
A delete() 0 7 2
A getSettings() 0 27 4
1
<?php
2
3
namespace execut\import\models;
4
use execut\crudFields\Behavior;
5
use execut\crudFields\BehaviorStub;
6
use execut\crudFields\fields\HasManyMultipleInput;
7
use execut\crudFields\fields\Hidden;
8
use execut\crudFields\fields\NumberField;
9
use execut\crudFields\ModelsHelperTrait;
10
use execut\import\components\Saver;
11
use execut\import\components\SettingsValueExtractor;
12
use lhs\Yii2SaveRelationsBehavior\SaveRelationsBehavior;
13
use yii\behaviors\TimestampBehavior;
14
use yii\db\Expression;
15
use yii\helpers\ArrayHelper;
16
17
/**
18
 * This is the model class for table "import_settings_sheets".
19
 *
20
 * @property integer $id
21
 * @property string $created
22
 * @property string $updated
23
 * @property string $name
24
 * @property integer $order
25
 * @property string $import_setting_id
26
 *
27
 * @property \execut\import\models\SettingsSet[] $settingsSets
28
 * @property \execut\import\models\Setting $setting
29
 */
30
class SettingsSheet extends base\SettingsSheet
31
{
32
    use BehaviorStub, ModelsHelperTrait;
33
    protected static $settingsByIds = [];
34
35
    public static function find()
36
    {
37
        return new queries\SettingsSheet(static::class);
38
    }
39
40
    public function behaviors()
41
    {
42
        return [
43
            'relationsSaver' => [
44
                'class' => SaveRelationsBehavior::class,
45
                'relations' => [
46
                    'settingsSets'
47
                ],
48
            ],
49
            'fields' => [
50
                'class' => Behavior::class,
51
                'module' => 'import',
52
                'fields' => $this->getStandardFields(['visible'], [
53
                    'import_setting_id' => [
54
                        'class' => Hidden::class,
55
                        'attribute' => 'import_setting_id',
56
                    ],
57
                    'order' => [
58
                        'class' => NumberField::class,
59
                        'attribute' => 'order',
60
                        'defaultValue' => 1,
61
                    ],
62
                    'settingsSets' => [
63
                        'class' => HasManyMultipleInput::class,
64
                        'nameAttribute' => null,
65
                        'required' => true,
66
                        'attribute' => 'settingsSets',
67
                        'relation' => 'settingsSets',
68
                    ],
69
                ]),
70
                'plugins' => \yii::$app->getModule('import')->getSettingsSheetsCrudFieldsPlugins(),
71
            ],
72
            'date' => [
73
                'class' => TimestampBehavior::class,
74
                'createdAtAttribute' => 'created',
75
                'updatedAtAttribute' => 'updated',
76
                'value' => new Expression('NOW()'),
77
            ],
78
        ];
79
    }
80
81
82
    public static function getDictionaries() {
83
        return \yii::$app->getModule('import')->getDictionaries();
84
    }
85
86
    public static function getParsersByTypesSettings() {
87
        return \yii::$app->getModule('import')->getParsersByTypesSettings();
88
    }
89
90
    public function getSettings() {
91
        if (!empty(self::$settingsByIds[$this->id])) {
92
            return self::$settingsByIds[$this->id];
93
        }
94
95
        $settings = [];
96
        $extractor = new SettingsValueExtractor();
97
        $typesSettings = self::getParsersByTypesSettings();
98
        foreach ($this->settingsSets as $set) {
99
            $typeSettings = [];
100
            foreach ($set->settingsValues as $value) {
101
                $extractor->model = $value;
102
                $typeSettings = ArrayHelper::merge($typeSettings, $extractor->extract());
103
            }
104
105
//            foreach ($typeSettings as $setting) {
106
//                foreach ($settings['attributes'] as $attribute) {
107
//                }
108
//            }
109
110
            $settings = ArrayHelper::merge($settings, $typesSettings[$set->type]);
111
            $settings = ArrayHelper::merge($settings, $typeSettings);
112
        }
113
114
        self::$settingsByIds[$this->id] = $settings;
115
116
        return $settings;
117
    }
118
119
    public function delete()
120
    {
121
        foreach ($this->settingsSets as $set) {
122
            $set->delete();
123
        }
124
125
        return parent::delete();
126
    }
127
}
128