Completed
Pull Request — master (#114)
by Bart
03:56
created

Schematic::warning()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace NerdsAndCompany\Schematic;
4
5
use Craft;
6
use craft\base\Model;
7
use yii\base\Module;
8
use NerdsAndCompany\Schematic\Mappers\ElementIndexMapper;
9
use NerdsAndCompany\Schematic\Mappers\ModelMapper;
10
use NerdsAndCompany\Schematic\Mappers\PluginMapper;
11
use NerdsAndCompany\Schematic\Mappers\UserSettingsMapper;
12
13
/**
14
 * Schematic.
15
 *
16
 * Sync Craft Setups.
17
 *
18
 * @author    Nerds & Company
19
 * @copyright Copyright (c) 2015-2018, Nerds & Company
20
 * @license   MIT
21
 *
22
 * @see      http://www.nerds.company
23
 */
24
class Schematic extends Module
25
{
26
    /**
27
     * @var string
28
     */
29
    public $controllerNamespace = 'NerdsAndCompany\Schematic\Controllers';
30
31
    /**
32
     * Initialize the module.
33
     */
34
    public function init()
35
    {
36
        Craft::setAlias('@NerdsAndCompany/Schematic', __DIR__);
37
38
        $config = [
39
            'components' => [
40
                'elementIndexMapper' => [
41
                    'class' => ElementIndexMapper::class,
42
                ],
43
                'modelMapper' => [
44
                    'class' => ModelMapper::class,
45
                ],
46
                'pluginMapper' => [
47
                    'class' => PluginMapper::class,
48
                ],
49
                'userSettingsMapper' => [
50
                    'class' => UserSettingsMapper::class,
51
                ],
52
            ],
53
        ];
54
55
        Craft::configure($this, $config);
56
57
        parent::init();
58
    }
59
60
    /**
61
     * The available datatypes.
62
     *
63
     * @TODO: Make data types and Mapper components configurable.
64
     *
65
     * @var array
66
     */
67
    const DATA_TYPES = [
68
        'sites' => [
69
            'mapper' => 'modelMapper',
70
        ],
71
        'volumes' => [
72
            'mapper' => 'modelMapper',
73
        ],
74
        'assetTransforms' => [
75
            'mapper' => 'modelMapper',
76
        ],
77
        'fields' => [
78
            'mapper' => 'modelMapper',
79
        ],
80
        'plugins' => [
81
            'mapper' => 'pluginMapper',
82
        ],
83
        'sections' => [
84
            'mapper' => 'modelMapper',
85
        ],
86
        'globalSets' => [
87
            'mapper' => 'modelMapper',
88
        ],
89
        'userGroups' => [
90
            'mapper' => 'modelMapper',
91
        ],
92
        'users' => [
93
            'mapper' => 'userSettingsMapper',
94
        ],
95
        'categoryGroups' => [
96
            'mapper' => 'modelMapper',
97
        ],
98
        'tagGroups' => [
99
            'mapper' => 'modelMapper',
100
        ],
101
        'elementIndexSettings' => [
102
            'mapper' => 'elementIndexMapper',
103
        ],
104
    ];
105
106
    /**
107
     * Get records for datatype.
108
     *
109
     * @TODO: Make this more dynamic
110
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
111
     *
112
     * @param string $datatype
113
     *
114
     * @return Model[]
115
     */
116
    public static function getRecords(string $datatype)
117
    {
118
        $records = [];
119
        switch ($datatype) {
120
            case 'assetTransforms':
121
                $records = Craft::$app->assetTransforms->getAllTransforms();
122
                break;
123
            case 'categoryGroups':
124
                $records = Craft::$app->categories->getAllGroups();
125
                break;
126
            case 'fields':
127
                $records = Craft::$app->fields->getAllFields();
128
                break;
129
            case 'globalSets':
130
                $records = Craft::$app->globals->getAllSets();
131
                break;
132
            case 'plugins':
133
                $records = Craft::$app->plugins->getAllPluginInfo();
134
                break;
135
            case 'sections':
136
                $records = Craft::$app->sections->getAllSections();
137
                break;
138
            case 'sites':
139
                $records = Craft::$app->sites->getAllSites();
140
                break;
141
            case 'userGroups':
142
                $records = Craft::$app->userGroups->getAllGroups();
143
                break;
144
            case 'volumes':
145
                $records = Craft::$app->volumes->getAllVolumes();
146
                break;
147
            case 'tagGroups':
148
                $records = Craft::$app->tags->getAllTagGroups();
149
                break;
150
        }
151
152
        return $records;
153
    }
154
155
    /**
156
     * Is force enabled?
157
     *
158
     * @var bool
159
     */
160
    public static $force = false;
161
162
    /**
163
     * Logs an error message.
164
     *
165
     * @param string|array $message the message to be logged. This can be a simple string or a more
166
     *                              complex data structure, such as array.
167
     */
168
    public static function error($message)
169
    {
170
        Craft::error($message, 'schematic');
171
    }
172
173
    /**
174
     * Logs a warning message.
175
     *
176
     * @param string|array $message the message to be logged. This can be a simple string or a more
177
     *                              complex data structure, such as array.
178
     */
179
    public static function warning($message)
180
    {
181
        Craft::warning($message, 'schematic');
182
    }
183
184
    /**
185
     * Logs an info message.
186
     *
187
     * @param string|array $message the message to be logged. This can be a simple string or a more
188
     *                              complex data structure, such as array.
189
     */
190
    public static function info($message)
191
    {
192
        Craft::info($message, 'schematic');
193
    }
194
195
    /**
196
     * Log an import error.
197
     *
198
     * @param Model  $record
199
     * @param string $handle
200
     */
201
    public static function importError(Model $record, string $handle)
202
    {
203
        static::warning('- Error importing '.get_class($record).' '.$handle);
204
        foreach ($record->getErrors() as $errors) {
205
            foreach ($errors as $error) {
206
                static::error('   - '.$error);
207
            }
208
        }
209
    }
210
}
211