Completed
Branch BUG/reg-status-change-recursio... (2db0c9)
by
unknown
20:03 queued 10:32
created

BlockAssetManager   A

Complexity

Total Complexity 31

Size/Duplication

Total Lines 309
Duplicated Lines 27.83 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
dl 86
loc 309
rs 9.92
c 0
b 0
f 0
wmc 31
lcom 1
cbo 5

20 Methods

Rating   Name   Duplication   Size   Complexity  
A getEditorScriptHandle() 0 4 1
A setEditorScriptHandle() 7 7 2
A getEditorStyleHandle() 0 4 1
A setEditorStyleHandle() 7 7 2
A getScriptHandle() 0 4 1
A setScriptHandle() 7 7 2
A getStyleHandle() 0 4 1
A setStyleHandle() 7 7 2
A addAssets() 0 7 1
A addEditorScript() 15 15 2
A addEditorStyle() 14 14 2
A addScript() 15 15 2
A addStyle() 14 14 2
A addDefaultBlockScriptDependencies() 0 11 1
A addDefaultBlockStyleDependencies() 0 7 1
A getEditorScript() 0 4 1
A getEditorStyle() 0 4 1
A getScript() 0 4 1
A getStyle() 0 4 1
A enqueueAssets() 0 14 4

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace EventEspresso\core\services\assets;
4
5
use EventEspresso\core\domain\entities\editor\BlockInterface;
6
use EventEspresso\core\domain\services\assets\CoreAssetManager;
7
use EventEspresso\core\domain\values\assets\BrowserAsset;
8
use EventEspresso\core\domain\values\assets\JavascriptAsset;
9
use EventEspresso\core\domain\values\assets\StylesheetAsset;
10
use EventEspresso\core\exceptions\InvalidDataTypeException;
11
use EventEspresso\core\exceptions\InvalidEntityException;
12
use EventEspresso\core\services\collections\DuplicateCollectionIdentifierException;
13
14
/**
15
 * Class BlockAssetRegister
16
 * Abstract parent for classes that handle asset registration for one or more editor blocks that share the same assets
17
 *
18
 * @package EventEspresso\core\services\editor
19
 * @author  Brent Christensen
20
 * @since   $VID:$
21
 */
22
abstract class BlockAssetManager extends AssetManager implements BlockAssetManagerInterface
23
{
24
25
    /**
26
     * @var string $editor_script_handle
27
     */
28
    private $editor_script_handle;
29
30
    /**
31
     * @var string $editor_style_handle
32
     */
33
    private $editor_style_handle;
34
35
    /**
36
     * @var string $script_handle
37
     */
38
    private $script_handle;
39
40
    /**
41
     * @var string $style_handle
42
     */
43
    private $style_handle;
44
45
46
    /**
47
     * @return string
48
     */
49
    public function getEditorScriptHandle()
50
    {
51
        return $this->editor_script_handle;
52
    }
53
54
55
    /**
56
     * @param string $editor_script_handle
57
     */
58 View Code Duplication
    public function setEditorScriptHandle($editor_script_handle)
59
    {
60
        if(strpos($editor_script_handle, BlockInterface::NAME_SPACE . '-') !== 0) {
61
            $editor_script_handle = BlockInterface::NAME_SPACE . '-' . $editor_script_handle;
62
        }
63
        $this->editor_script_handle = $editor_script_handle;
64
    }
65
66
67
    /**
68
     * @return string
69
     */
70
    public function getEditorStyleHandle()
71
    {
72
        return $this->editor_style_handle;
73
    }
74
75
76
    /**
77
     * @param string $editor_style_handle
78
     */
79 View Code Duplication
    public function setEditorStyleHandle($editor_style_handle)
80
    {
81
        if (strpos($editor_style_handle, BlockInterface::NAME_SPACE . '-') !== 0) {
82
            $editor_style_handle = BlockInterface::NAME_SPACE . '-' . $editor_style_handle;
83
        }
84
        $this->editor_style_handle = $editor_style_handle;
85
    }
86
87
88
    /**
89
     * @return string
90
     */
91
    public function getScriptHandle()
92
    {
93
        return $this->script_handle;
94
    }
95
96
97
    /**
98
     * @param string $script_handle
99
     */
100 View Code Duplication
    public function setScriptHandle($script_handle)
101
    {
102
        if (strpos($script_handle, BlockInterface::NAME_SPACE . '-') !== 0) {
103
            $script_handle = BlockInterface::NAME_SPACE . '-' . $script_handle;
104
        }
105
        $this->script_handle = $script_handle;
106
    }
107
108
109
    /**
110
     * @return string
111
     */
112
    public function getStyleHandle()
113
    {
114
        return $this->style_handle;
115
    }
116
117
118
    /**
119
     * @param string $style_handle
120
     */
121 View Code Duplication
    public function setStyleHandle($style_handle)
122
    {
123
        if (strpos($style_handle, BlockInterface::NAME_SPACE . '-') !== 0) {
124
            $style_handle = BlockInterface::NAME_SPACE . '-' . $style_handle;
125
        }
126
        $this->style_handle = $style_handle;
127
    }
128
129
    /**
130
     * @since $VID:$
131
     * @throws InvalidDataTypeException
132
     * @throws InvalidEntityException
133
     * @throws DuplicateCollectionIdentifierException
134
     */
135
    public function addAssets()
136
    {
137
        $this->addEditorScript($this->getEditorScriptHandle());
138
        $this->addEditorStyle($this->getEditorStyleHandle());
139
        $this->addScript($this->getScriptHandle());
140
        $this->addStyle($this->getStyleHandle());
141
    }
142
143
144
    /**
145
     * @param       $handle
146
     * @param array $dependencies
147
     * @since $VID:$
148
     * @return JavascriptAsset
149
     * @throws InvalidDataTypeException
150
     * @throws InvalidEntityException
151
     * @throws DuplicateCollectionIdentifierException
152
     */
153 View Code Duplication
    public function addEditorScript($handle, array $dependencies = array())
154
    {
155
        if($this->assets->hasJavascriptAsset($handle)){
156
            return $this->assets->getJavascriptAsset($handle);
157
        }
158
        return parent::addJavascript(
159
            $handle,
160
            $this->registry->getJsUrl(
161
                $this->domain->assetNamespace(),
162
                $handle
163
            ),
164
            $this->addDefaultBlockScriptDependencies($dependencies)
165
        )
166
        ->setRequiresTranslation();
167
    }
168
169
170
    /**
171
     * @param        $handle
172
     * @param array  $dependencies
173
     * @since $VID:$
174
     * @return StylesheetAsset
175
     * @throws InvalidDataTypeException
176
     * @throws InvalidEntityException
177
     * @throws DuplicateCollectionIdentifierException
178
     */
179 View Code Duplication
    public function addEditorStyle($handle, array $dependencies = array())
180
    {
181
        if ($this->assets->hasStylesheetAsset($handle)) {
182
            return $this->assets->getStylesheetAsset($handle);
183
        }
184
        return parent::addStylesheet(
185
            $handle,
186
            $this->registry->getCssUrl(
187
                $this->domain->assetNamespace(),
188
                $handle
189
            ),
190
            $this->addDefaultBlockStyleDependencies($dependencies)
191
        );
192
    }
193
194
195
    /**
196
     * @param       $handle
197
     * @param array $dependencies
198
     * @since $VID:$
199
     * @return JavascriptAsset
200
     * @throws InvalidDataTypeException
201
     * @throws InvalidEntityException
202
     * @throws DuplicateCollectionIdentifierException
203
     */
204 View Code Duplication
    public function addScript($handle, array $dependencies = array())
205
    {
206
        if ($this->assets->hasJavascriptAsset($handle)) {
207
            return $this->assets->getJavascriptAsset($handle);
208
        }
209
        return parent::addJavascript(
210
            $handle,
211
            $this->registry->getJsUrl(
212
                $this->domain->assetNamespace(),
213
                $handle
214
            ),
215
            $dependencies + array( CoreAssetManager::JS_HANDLE_EE_COMPONENTS )
216
        )
217
        ->setRequiresTranslation();
218
    }
219
220
221
    /**
222
     * @param        $handle
223
     * @param array  $dependencies
224
     * @since $VID:$
225
     * @return StylesheetAsset
226
     * @throws InvalidDataTypeException
227
     * @throws InvalidEntityException
228
     * @throws DuplicateCollectionIdentifierException
229
     */
230 View Code Duplication
    public function addStyle($handle, array $dependencies = array())
231
    {
232
        if ($this->assets->hasStylesheetAsset($handle)) {
233
            return $this->assets->getStylesheetAsset($handle);
234
        }
235
        return parent::addStylesheet(
236
            $handle,
237
            $this->registry->getCssUrl(
238
                $this->domain->assetNamespace(),
239
                $handle
240
            ),
241
            $dependencies + array( CoreAssetManager::CSS_HANDLE_EE_COMPONENTS )
242
        );
243
    }
244
245
246
    /**
247
     * @param array $dependencies
248
     * @return array
249
     */
250
    protected function addDefaultBlockScriptDependencies(array $dependencies)
251
    {
252
        $dependencies += array(
253
                'wp-blocks',    // Provides useful functions and components for extending the editor
254
                'wp-i18n',      // Provides localization functions
255
                'wp-element',   // Provides React.Component
256
                'wp-components', // Provides many prebuilt components and controls
257
                $this->getScriptHandle(),
258
            );
259
        return $dependencies;
260
    }
261
262
263
    /**
264
     * @param array $dependencies
265
     * @return array
266
     */
267
    protected function addDefaultBlockStyleDependencies(array $dependencies)
268
    {
269
        $dependencies += array(
270
            $this->getStyleHandle()
271
        );
272
        return $dependencies;
273
    }
274
275
276
    /**
277
     * @return JavascriptAsset|null
278
     */
279
    public function getEditorScript()
280
    {
281
        return $this->assets->getJavascriptAsset($this->editor_script_handle);
282
    }
283
284
285
    /**
286
     * @return StylesheetAsset|null
287
     */
288
    public function getEditorStyle()
289
    {
290
        return $this->assets->getStylesheetAsset($this->editor_style_handle);
291
    }
292
293
294
    /**
295
     * @return JavascriptAsset|null
296
     */
297
    public function getScript()
298
    {
299
        return $this->assets->getJavascriptAsset($this->script_handle);
300
    }
301
302
303
    /**
304
     * @return StylesheetAsset|null
305
     */
306
    public function getStyle()
307
    {
308
        return $this->assets->getStylesheetAsset($this->style_handle);
309
    }
310
311
312
    /**
313
     * @return  void
314
     */
315
    public function enqueueAssets()
316
    {
317
        $assets = array(
318
            $this->getEditorScript(),
319
            $this->getEditorStyle(),
320
            $this->getScript(),
321
            $this->getStyle(),
322
        );
323
        foreach ($assets as $asset) {
324
            if ($asset instanceof BrowserAsset && $asset->isRegistered()) {
325
                $asset->enqueueAsset();
326
            }
327
        }
328
    }
329
330
}
331