Completed
Pull Request — master (#114)
by Bart
02:23
created

Base::getDataTypes()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 15
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 15
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 7
nc 4
nop 0
1
<?php
2
namespace NerdsAndCompany\Schematic\ConsoleCommands;
3
4
use Craft;
5
use yii\base\Behavior;
6
use yii\console\Controller;
7
use NerdsAndCompany\Schematic\Schematic;
8
9
/**
10
 * Schematic FieldLayout Behavior.
11
 *
12
 * Sync Craft Setups.
13
 *
14
 * @author    Nerds & Company
15
 * @copyright Copyright (c) 2015-2018, Nerds & Company
16
 * @license   MIT
17
 *
18
 * @see      http://www.nerds.company
19
 */
20
class Base extends Controller
21
{
22
    public $file = 'config/schema.yml';
23
    public $overrideFile = 'craft/config/override.yml';
24
    public $exclude;
25
    public $include;
26
27
    /**
28
     * {@inheritdoc}
29
     *
30
     * @return array
31
     */
32
    public function options($actionID)
33
    {
34
        return ['file', 'override_file', 'include', 'exclude'];
35
    }
36
37
    /**
38
     * Get the datatypes to import and/or export
39
     *
40
     * @return array
41
     */
42
    protected function getDataTypes()
43
    {
44
        $dataTypes = array_keys(Schematic::DATA_TYPES);
45
46
        // If include is specified.
47
        if ($this->include !== null) {
48
            $dataTypes = $this->applyIncludes($dataTypes);
49
        }
50
51
        // If there are exclusions.
52
        if ($this->exclude !== null) {
53
            $dataTypes = $this->applyExcludes($dataTypes);
54
        }
55
        return $dataTypes;
56
    }
57
58
    /**
59
     * Apply given includes
60
     *
61
     * @param  array $dataTypes
62
     * @return array
63
     */
64
    protected function applyIncludes($dataTypes)
65
    {
66
        $inclusions = explode(',', $this->include);
67
        // Find any invalid data to include.
68
        $invalidIncludes = array_diff($inclusions, $dataTypes);
69
        if (count($invalidIncludes) > 0) {
70
            $errorMessage = 'WARNING: Invalid include(s)';
71
            $errorMessage .= ': '.implode(', ', $invalidIncludes).'.'.PHP_EOL;
72
            $errorMessage .= ' Valid inclusions are '.implode(', ', $dataTypes);
73
74
            // Output an error message outlining what invalid exclusions were specified.
75
            Schematic::warning($errorMessage);
76
        }
77
        // Remove any explicitly included data types from the list of data types to export.
78
        return array_intersect($dataTypes, $inclusions);
79
    }
80
81
    /**
82
     * Apply given excludes
83
     *
84
     * @param  array $dataTypes
85
     * @return array
86
     */
87
    protected function applyExcludes(array $dataTypes)
88
    {
89
        $exclusions = explode(',', $this->exclude);
90
        // Find any invalid data to exclude.
91
        $invalidExcludes = array_diff($exclusions, $dataTypes);
92
        if (count($invalidExcludes) > 0) {
93
            $errorMessage = 'WARNING: Invalid exlude(s)';
94
            $errorMessage .= ': '.implode(', ', $invalidExcludes).'.'.PHP_EOL;
95
            $errorMessage .= ' Valid exclusions are '.implode(', ', $dataTypes);
96
97
            // Output an error message outlining what invalid exclusions were specified.
98
            Schematic::warning($errorMessage);
99
        }
100
        // Remove any explicitly excluded data types from the list of data types to export.
101
        return array_diff($dataTypes, $exclusions);
102
    }
103
}
104