Passed
Push — master ( ccaaed...17ba08 )
by Josh
02:25
created

InstallBlender::assignVersion()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Auto Generated from Blender
5
 * Date: 2017/11/10 at 15:29:37 EST -05:00
6
 */
7
8
use \LCI\Blend\Migrations;
9
10
class InstallBlender extends Migrations
11
{
12
    /** @var array  */
13
    protected $blender_table_classes = [
14
        'BlendMigrations'
15
    ];
16
17
    /** @var array  */
18
    protected $blender_events = [
19
        'OnBlendBeforeSave',
20
        'OnBlendAfterSave',
21
        'OnBlendSeed',
22
        'OnBlendLoadRelatedData',
23
        // @TODO replace:
24
        'OnBlendSeedSystemSettings'
25
    ];
26
27
    protected $empty_settings = [
28
        'blend.portable.systemSettings.templates',
29
        'blend.portable.systemSettings.mediaSources',
30
        'blend.portable.systemSettings.resources',
31
32
        'blend.portable.templateVariables.templates',
33
        'blend.portable.templateVariables.mediaSources',
34
        'blend.portable.templateVariables.resources',
35
    ];
36
37
    /**
38
     * Run the migrations.
39
     *
40
     * @return void
41
     */
42
    public function up()
43
    {
44
        // install DB table:
45
        $manager = $this->modx->getManager();
46
47
        // the class table object name
48
        $table_class = $this->blender->getBlendClassObject();
49
        //foreach ($this->blender_table_classes as $table_class) {
50
            if ($manager->createObjectContainer($table_class)) {
51
                $this->blender->out($table_class.' table class has been created');
52
53
            } else {
54
                $this->blender->out($table_class.' table class was not created', true);
0 ignored issues
show
Bug introduced by
true of type true is incompatible with the type integer expected by parameter $verbose of LCI\Blend\Blender::out(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

54
                $this->blender->out($table_class.' table class was not created', /** @scrutinizer ignore-type */ true);
Loading history...
55
            }
56
        //}
57
58
        // install events:
59
        foreach ($this->blender_events as $event_name) {
60
            $this->createSystemEvents($event_name);
61
        }
62
63
        /** @var \LCI\Blend\Blendable\SystemSetting $systemSetting */
64
        $systemSetting = $this->blender->getBlendableLoader()->getBlendableSystemSetting('blend.version');
65
        $systemSetting
66
            ->setSeedsDir($this->getSeedsDir())
67
            ->setFieldValue($this->blender->getVersion())
68
            ->setFieldArea('Blend')
69
            ->blend();
70
71
        foreach ($this->empty_settings as $key) {
72
73
            /** @var \LCI\Blend\Blendable\SystemSetting $systemSetting */
74
            $systemSetting = $this->blender->getBlendableLoader()->getBlendableSystemSetting($key);
75
            $systemSetting
76
                ->setSeedsDir($this->getSeedsDir())
77
                ->setFieldArea('Blend')
78
                ->blend();
79
        }
80
81
        $this->modx->cacheManager->refresh();
82
    }
83
84
    /**
85
     * Reverse the migrations.
86
     *
87
     * @return void
88
     */
89
    public function down()
90
    {
91
        // remove DB Table:
92
        $manager = $this->modx->getManager();
93
94
        // the class table object name
95
        $table_class = $this->blender->getBlendClassObject();
96
        //foreach ($this->blender_table_classes as $table_class) {
97
            if ($manager->removeObjectContainer($table_class)) {
98
                $this->blender->out($table_class.' table class has been dropped');
99
100
            } else {
101
                $this->blender->out($table_class.' table class was not dropped', true);
0 ignored issues
show
Bug introduced by
true of type true is incompatible with the type integer expected by parameter $verbose of LCI\Blend\Blender::out(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

101
                $this->blender->out($table_class.' table class was not dropped', /** @scrutinizer ignore-type */ true);
Loading history...
102
            }
103
        //}
104
105
        // remove events:
106
        foreach ($this->blender_events as $event_name) {
107
            $this->removeSystemEvents($event_name);
108
        }
109
110
        /** @var \LCI\Blend\Blendable\SystemSetting $systemSetting */
111
        $systemSetting = $this->blender->getBlendableLoader()->getBlendableSystemSetting('blend.version');
112
        $systemSetting
113
            ->setSeedsDir($this->getSeedsDir())
114
            ->revertBlend();
115
116
        foreach ($this->empty_settings as $key) {
117
            /** @var \LCI\Blend\Blendable\SystemSetting $systemSetting */
118
            $systemSetting = $this->blender->getBlendableLoader()->getBlendableSystemSetting($key);
119
            $systemSetting
120
                ->setSeedsDir($this->getSeedsDir())
121
                ->revertBlend();
122
        }
123
124
        $this->modx->cacheManager->refresh();
125
    }
126
127
    /**
128
     * @param $event_name
129
     */
130
    protected function createSystemEvents($event_name)
131
    {
132
        $event = $this->modx->getObject('modEvent', ['name' => $event_name]);
133
        if (is_object($event)) {
134
            $this->blender->out($event_name.' event has already been installed', true);
0 ignored issues
show
Bug introduced by
true of type true is incompatible with the type integer expected by parameter $verbose of LCI\Blend\Blender::out(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

134
            $this->blender->out($event_name.' event has already been installed', /** @scrutinizer ignore-type */ true);
Loading history...
135
        } else {
136
            /** @var \modEvent $event */
137
            $event = $this->modx->newObject('modEvent');
138
            $event->set('name', $event_name);
139
            $event->set('service', 1);
140
            $event->set('groupname', 'Resources');// ??
141
142
            if ($event->save()) {
143
                $this->blender->out($event_name.' event has been installed');
144
145
            } else {
146
                $this->blender->out($event_name.' event did not install', true);
147
            }
148
        }
149
    }
150
151
    /**
152
     * @param $event_name
153
     */
154
    protected function removeSystemEvents($event_name)
155
    {
156
        $event = $this->modx->getObject('modEvent', ['name' => $event_name]);
157
        if (is_object($event)) {
158
            if ($event->remove()) {
159
                $this->blender->out($event_name . ' event was removed', true);
0 ignored issues
show
Bug introduced by
true of type true is incompatible with the type integer expected by parameter $verbose of LCI\Blend\Blender::out(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

159
                $this->blender->out($event_name . ' event was removed', /** @scrutinizer ignore-type */ true);
Loading history...
160
            } else {
161
                $this->blender->out($event_name . ' event was not removed', true);
162
            }
163
        } else {
164
            $this->blender->out($event_name . ' event has already been removed', true);
165
        }
166
    }
167
168
    /**
169
     * Method is called on construct, please fill me in
170
     */
171
    protected function assignDescription()
172
    {
173
        $this->description = 'Install of Blender';
174
    }
175
176
    /**
177
     * Method is called on construct, please fill me in
178
     */
179
    protected function assignVersion()
180
    {
181
        $this->version = '0.9.0';
182
    }
183
184
    /**
185
     * Method is called on construct, can change to only run this migration for those types
186
     */
187
    protected function assignType()
188
    {
189
        $this->type = 'master';
190
    }
191
192
    /**
193
     * Method is called on construct, Child class can override and implement this
194
     */
195
    protected function assignSeedsDir()
196
    {
197
        $this->seeds_dir = 'InstallBlender';
198
    }
199
}
200