Issues (97)

src/database/migrations/InstallBlender.php (4 issues)

Labels
Severity
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
        'OnBlendSeedSystemSettings'
24
    ];
25
26
    protected $empty_settings = [
27
        'blend.portable.systemSettings.templates',
28
        'blend.portable.systemSettings.mediaSources',
29
        'blend.portable.systemSettings.resources',
30
31
        'blend.portable.templateVariables.templates',
32
        'blend.portable.templateVariables.mediaSources',
33
        'blend.portable.templateVariables.resources',
34
    ];
35
36
    /**
37
     * Run the migrations.
38
     *
39
     * @return void
40
     */
41
    public function up()
42
    {
43
        // install DB table:
44
        $manager = $this->modx->getManager();
45
46
        // the class table object name
47
        $table_class = $this->blender->getBlendClassObject();
48
        //foreach ($this->blender_table_classes as $table_class) {
49
            if ($manager->createObjectContainer($table_class)) {
50
                $this->blender->out($table_class.' table class has been created');
51
52
            } else {
53
                $this->blender->out($table_class.' table class was not created', true);
0 ignored issues
show
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

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

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

133
            $this->blender->out($event_name.' event has already been installed', /** @scrutinizer ignore-type */ true);
Loading history...
134
        } else {
135
            /** @var \modEvent $event */
136
            $event = $this->modx->newObject('modEvent');
137
            $event->set('name', $event_name);
138
            $event->set('service', 1);
139
            $event->set('groupname', 'Resources');// ??
140
141
            if ($event->save()) {
142
                $this->blender->out($event_name.' event has been installed');
143
144
            } else {
145
                $this->blender->out($event_name.' event did not install', true);
146
            }
147
        }
148
    }
149
150
    /**
151
     * @param $event_name
152
     */
153
    protected function removeSystemEvents($event_name)
154
    {
155
        $event = $this->modx->getObject('modEvent', ['name' => $event_name]);
156
        if (is_object($event)) {
157
            if ($event->remove()) {
158
                $this->blender->out($event_name . ' event was removed', true);
0 ignored issues
show
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

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