Passed
Push — develop ( f0643b...64b408 )
by Jens
02:45
created

CmsComponent::getParameter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 4
rs 10
1
<?php
2
namespace library\components {
3
4
    use library\components\cms\DocumentRouting;
5
    use library\crypt\Crypt;
6
    use library\storage\Storage;
7
8
    class CmsComponent extends BaseComponent
9
    {
10
        /*
11
         * var \library\storage\Storage
12
         */
13
        public $storage;
14
15
        const INVALID_CREDENTIALS_MESSAGE = 'Invalid username / password combination';
16
17
        const MAIN_NAV_CLASS = 'default';
18
19
        const PARAMETER_BLACKLIST_IPS = 'blacklistIps';
20
        const PARAMETER_BODY = 'body';
21
        const PARAMETER_BRICK = 'brick';
22
        const PARAMETER_BRICKS = 'bricks';
23
        const PARAMETER_CMS_PREFIX = 'cmsPrefix';
24
        const PARAMETER_DOCUMENT = 'document';
25
        const PARAMETER_DOCUMENTS = 'documents';
26
        const PARAMETER_DOCUMENT_TYPE = 'documentType';
27
        const PARAMETER_DOCUMENT_TYPES = 'documentTypes';
28
        const PARAMETER_ERROR_MESSAGE = 'errorMsg';
29
        const PARAMETER_FILES = 'files';
30
        const PARAMETER_FOLDER = 'folder';
31
        const PARAMETER_IMAGE = 'image';
32
        const PARAMETER_IMAGES = 'images';
33
        const PARAMETER_IMAGE_SET = 'imageSet';
34
        const PARAMETER_MAIN_NAV_CLASS = 'mainNavClass';
35
        const PARAMETER_MY_BRICK_SLUG = 'myBrickSlug';
36
        const PARAMETER_SITEMAP = 'sitemap';
37
        const PARAMETER_SITEMAP_ITEM = 'sitemapItem';
38
        const PARAMETER_SMALLEST_IMAGE = 'smallestImage';
39
        const PARAMETER_STATIC = 'static';
40
        const PARAMETER_USER = 'user';
41
        const PARAMETER_USERS = 'users';
42
        const PARAMETER_USER_RIGHTS = 'userRights';
43
        const PARAMETER_WHITELIST_IPS = 'whitelistIps';
44
45
        const POST_PARAMETER_COMPONENT = 'component';
46
        const POST_PARAMETER_PASSWORD = 'password';
47
        const POST_PARAMETER_SAVE = 'save';
48
        const POST_PARAMETER_TEMPLATE = 'template';
49
        const POST_PARAMETER_TITLE = 'title';
50
        const POST_PARAMETER_USERNAME = 'username';
51
52
        const GET_PARAMETER_PATH = 'path';
53
        const GET_PARAMETER_SLUG = 'slug';
54
55
        const FILES_PARAMETER_FILE = 'file';
56
57
        const SESSION_PARAMETER_CLOUD_CONTROL = 'cloudcontrol';
58
59
        const LOGIN_TEMPLATE_PATH = 'cms/login';
60
61
        const CONTENT_TYPE_APPLICATION_JSON = 'Content-type:application/json';
62
63
        public $subTemplate = null;
64
65
66
        /**
67
         * @param \library\storage\Storage $storage
68
         *
69
         * @return void
70
         */
71
        public function run(Storage $storage)
72
        {
73
            $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::MAIN_NAV_CLASS;
74
            $this->storage = $storage;
75
76
            $remoteAddress = $_SERVER['REMOTE_ADDR'];
77
            $this->checkWhiteList($remoteAddress);
78
            $this->checkBlackList($remoteAddress);
79
80
            $this->checkLogin();
81
82
            $this->parameters[self::PARAMETER_USER_RIGHTS] = $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]->rights;
83
84
            $this->routing();
85
        }
86
87
        /**
88
         * See if a user is logged or wants to log in and
89
         * takes appropriate actions.
90
         *
91
         * @throws \Exception
92
         */
93
        protected function checkLogin()
94
        {
95
            $request = $this->request;
96
97
            if (!isset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL])) {
98
                if (isset($request::$post[self::POST_PARAMETER_USERNAME], $request::$post[self::POST_PARAMETER_PASSWORD])) {
99
                    $user = $this->storage->getUserByUsername($request::$post[self::POST_PARAMETER_USERNAME]);
100
                    $crypt = new Crypt();
101
                    if (empty($user)) {
102
                        $crypt->encrypt($request::$post[self::POST_PARAMETER_PASSWORD], 16); // Buy time, to avoid brute forcing
103
                        $this->parameters[self::PARAMETER_ERROR_MESSAGE] = self::INVALID_CREDENTIALS_MESSAGE;
104
                        $this->showLogin();
105
                    } else {
106
                        $salt = $user->salt;
107
                        $password = $user->password;
108
109
                        $passwordCorrect = $crypt->compare($request::$post[self::POST_PARAMETER_PASSWORD], $password, $salt);
110
111
                        if ($passwordCorrect) {
112
                            $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = $user;
113
                        } else {
114
                            $this->parameters[self::PARAMETER_ERROR_MESSAGE] = self::INVALID_CREDENTIALS_MESSAGE;
115
                            $this->showLogin();
116
                        }
117
                    }
118
                } else {
119
                    $this->showLogin();
120
                }
121
            }
122
        }
123
124
        /**
125
         * Overrides normal behaviour and only renders the
126
         * login screen
127
         *
128
         * @throws \Exception
129
         */
130
        protected function showLogin()
131
        {
132
            $loginTemplatePath = self::LOGIN_TEMPLATE_PATH;
133
            $this->renderTemplate($loginTemplatePath);
134
            ob_end_flush();
135
            exit;
136
        }
137
138
        /**
139
         * As an exception, to keep the initial file structure simple
140
         * the cms implements it's own routing, apart from the regular sitemap functionality
141
         *
142
         * @throws \Exception
143
         */
144
        protected function routing()
145
        {
146
            $relativeCmsUri = $this->getRelativeCmsUri($this->request);
147
148
            $userRights = $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]->rights;
149
150
            if ($relativeCmsUri == '' || $relativeCmsUri == '/') {
151
                $this->subTemplate = 'cms/dashboard';
152
            }
153
154
            $this->logOffRouting($this->request, $relativeCmsUri);
155
156
            $this->apiRouting($relativeCmsUri);
157
158
            if (in_array(self::PARAMETER_DOCUMENTS, $userRights)) {
159
                new DocumentRouting($this->request, $relativeCmsUri, $this);
160
            }
161
162
            if (in_array(self::PARAMETER_SITEMAP, $userRights)) {
163
                $this->sitemapRouting($this->request, $relativeCmsUri);
164
            }
165
166
            if (in_array(self::PARAMETER_IMAGES, $userRights)) {
167
                $this->imagesRouting($this->request, $relativeCmsUri);
168
            }
169
170
            if (in_array(self::PARAMETER_FILES, $userRights)) {
171
                $this->filesRouting($this->request, $relativeCmsUri);
172
            }
173
174
            if (in_array('configuration', $userRights)) {
175
                $this->configurationRouting($this->request, $relativeCmsUri);
176
            }
177
178
            if ($this->subTemplate !== null) {
179
                $this->parameters[self::PARAMETER_BODY] = $this->renderTemplate($this->subTemplate);
180
            }
181
        }
182
183
        /**
184
         * @param $remoteAddress
185
         * @throws \Exception
186
         */
187 View Code Duplication
        private function checkWhiteList($remoteAddress)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
188
        {
189
            if (isset($this->parameters[self::PARAMETER_WHITELIST_IPS])) {
190
                $whitelistIps = explode(',', $this->parameters[self::PARAMETER_WHITELIST_IPS]);
191
                $whitelistIps = array_map("trim", $whitelistIps);
192
                if (!in_array($remoteAddress, $whitelistIps)) {
193
                    throw new \Exception('Ip address ' . $remoteAddress . ' is not on whitelist');
194
                }
195
            }
196
        }
197
198
        /**
199
         * @param $remoteAddress
200
         * @throws \Exception
201
         */
202 View Code Duplication
        private function checkBlackList($remoteAddress)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
203
        {
204
            if (isset($this->parameters[self::PARAMETER_BLACKLIST_IPS])) {
205
                $blacklistIps = explode(',', $this->parameters[self::PARAMETER_BLACKLIST_IPS]);
206
                $blacklistIps = array_map("trim", $blacklistIps);
207
                if (in_array($remoteAddress, $blacklistIps)) {
208
                    throw new \Exception('Ip address ' . $remoteAddress . ' is on blacklist');
209
                }
210
            }
211
        }
212
213
        /**
214
         * @param $request
215
         * @return mixed|string
216
         */
217
        private function getRelativeCmsUri($request)
218
        {
219
            // TODO Use regex match parameter instead of calculating relative uri
220
            $pos = strpos($request::$relativeUri, $this->parameters[self::PARAMETER_CMS_PREFIX]);
221
            $relativeCmsUri = '/';
222
            if ($pos !== false) {
223
                $relativeCmsUri = substr_replace($request::$relativeUri, '', $pos, strlen($this->parameters[self::PARAMETER_CMS_PREFIX]));
224
            }
225
            return $relativeCmsUri;
226
        }
227
228
        /**
229
         * @param \library\cc\Request $request
230
         * @param $relativeCmsUri
231
         */
232
        private function sitemapRouting($request, $relativeCmsUri)
233
        {
234
            if ($relativeCmsUri == '/sitemap') {
235
                $this->subTemplate = 'cms/sitemap';
236
                if (isset($request::$post[self::POST_PARAMETER_SAVE])) {
237
                    $this->storage->saveSitemap($request::$post);
238
                }
239
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
240
                $this->parameters[self::PARAMETER_SITEMAP] = $this->storage->getSitemap();
241
            } elseif ($relativeCmsUri == '/sitemap/new') {
242
                $this->subTemplate = 'cms/sitemap/form';
243
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
244
                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
245
                    $this->storage->addSitemapItem($request::$post);
246
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
247
                    exit;
248
                }
249
            } elseif ($relativeCmsUri == '/sitemap/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
250
                $this->subTemplate = 'cms/sitemap/form';
251
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
252
                $sitemapItem = $this->storage->getSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
253
                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
254
                    $this->storage->saveSitemapItem($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
255
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
256
                    exit;
257
                }
258
                $this->parameters[self::PARAMETER_SITEMAP_ITEM] = $sitemapItem;
259
            } elseif ($relativeCmsUri == '/sitemap/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
260
                $this->storage->deleteSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
261
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
262
                exit;
263
            }
264
        }
265
266
        /**
267
         * @param $request
268
         * @param $relativeCmsUri
269
         */
270
        private function imagesRouting($request, $relativeCmsUri)
271
        {
272
            if ($relativeCmsUri == '/images') {
273
                $this->subTemplate = 'cms/images';
274
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
275
                $this->parameters[self::PARAMETER_IMAGES] = $this->storage->getImages();
276
                $this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
277
            } elseif ($relativeCmsUri == '/images.json') {
278
                header(self::CONTENT_TYPE_APPLICATION_JSON);
279
                die(json_encode($this->storage->getImages()));
280 View Code Duplication
            } elseif ($relativeCmsUri == '/images/new') {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
281
                $this->subTemplate = 'cms/images/form';
282
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
283
                if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
284
                    $this->storage->addImage($_FILES[self::FILES_PARAMETER_FILE]);
285
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/images');
286
                    exit;
287
                }
288
            } elseif ($relativeCmsUri == '/images/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
289
                $this->storage->deleteImageByName($request::$get[self::FILES_PARAMETER_FILE]);
290
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/images');
291
                exit;
292
            } elseif ($relativeCmsUri == '/images/show' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
293
                $this->subTemplate = 'cms/images/show';
294
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
295
                $this->parameters[self::PARAMETER_IMAGE] = $this->storage->getImageByName($request::$get[self::FILES_PARAMETER_FILE]);
296
            }
297
        }
298
299
        /**
300
         * @param $relativeCmsUri
301
         */
302
        private function apiRouting($relativeCmsUri)
303
        {
304
            if ($relativeCmsUri == '/images.json') {
305
                header(self::CONTENT_TYPE_APPLICATION_JSON);
306
                die(json_encode($this->storage->getImages()));
307
            } elseif ($relativeCmsUri == '/files.json') {
308
                header(self::CONTENT_TYPE_APPLICATION_JSON);
309
                die(json_encode($this->storage->getFiles()));
310
            } elseif ($relativeCmsUri == '/documents.json') {
311
                header(self::CONTENT_TYPE_APPLICATION_JSON);
312
                die(json_encode($this->storage->getDocuments()));
313
            }
314
        }
315
316
        /**
317
         * @param $request
318
         * @param $relativeCmsUri
319
         */
320
        private function filesRouting($request, $relativeCmsUri)
321
        {
322
            if ($relativeCmsUri == '/files') {
323
                $this->subTemplate = 'cms/files';
324
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
325
                $this->parameters[self::PARAMETER_FILES] = $this->storage->getFiles();
326 View Code Duplication
            } elseif ($relativeCmsUri == '/files/new') {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
327
                $this->subTemplate = 'cms/files/form';
328
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
329
                if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
330
                    $this->storage->addFile($_FILES[self::FILES_PARAMETER_FILE]);
331
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
332
                    exit;
333
                }
334
            } elseif ($relativeCmsUri == '/files/get' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
335
                $this->downloadFile($request::$get[self::FILES_PARAMETER_FILE]);
336
            } elseif ($relativeCmsUri == '/files/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
337
                $this->storage->deleteFileByName($request::$get[self::FILES_PARAMETER_FILE]);
338
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
339
                exit;
340
            }
341
        }
342
343
        /**
344
         * @param $slug
345
         */
346
        private function downloadFile($slug)
347
        {
348
            $file = $this->storage->getFileByName($slug);
349
            $path = realpath(__DIR__ . '/../../www/files/');
350
            $quoted = sprintf('"%s"', addcslashes(basename($path . '/' . $file->file), '"\\'));
351
            $size = filesize($path . '/' . $file->file);
352
353
            header('Content-Description: File Transfer');
354
            header('Content-Type: ' . $file->type);
355
            header('Content-Disposition: attachment; filename=' . $quoted);
356
            header('Content-Transfer-Encoding: binary');
357
            header('Connection: Keep-Alive');
358
            header('Expires: 0');
359
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
360
            header('Pragma: public');
361
            header('Content-Length: ' . $size);
362
363
            readfile($path . '/' . $file->file);
364
            exit;
365
        }
366
367
        /**
368
         * @param $request
369
         * @param $relativeCmsUri
370
         */
371
        private function configurationRouting($request, $relativeCmsUri)
372
        {
373
            if ($relativeCmsUri == '/configuration') {
374
                $this->subTemplate = 'cms/configuration';
375
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
376
            }
377
378
            $this->usersRouting($request, $relativeCmsUri);
379
            $this->documentTypesRouting($request, $relativeCmsUri);
380
            $this->bricksRouting($request, $relativeCmsUri);
381
            $this->imageSetRouting($request, $relativeCmsUri);
382
            $this->applicationComponentRouting($request, $relativeCmsUri);
383
        }
384
385
386
387
        /**
388
         * @param $request
389
         * @param $relativeCmsUri
390
         */
391 View Code Duplication
        private function usersRouting($request, $relativeCmsUri)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
392
        {
393
            if ($relativeCmsUri == '/configuration/users') {
394
                $this->subTemplate = 'cms/configuration/users';
395
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
396
                $this->parameters[self::PARAMETER_USERS] = $this->storage->getUsers();
397
            } elseif ($relativeCmsUri == '/configuration/users/new') {
398
                $this->subTemplate = 'cms/configuration/users-form';
399
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
400
                if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
401
                    $this->storage->addUser($request::$post);
402
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
403
                    exit;
404
                }
405
            } elseif ($relativeCmsUri == '/configuration/users/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
406
                $this->storage->deleteUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
407
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
408
                exit;
409
            } elseif ($relativeCmsUri == '/configuration/users/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
410
                $this->subTemplate = 'cms/configuration/users-form';
411
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
412
                $this->parameters[self::PARAMETER_USER] = $this->storage->getUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
413
                if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
414
                    $this->storage->saveUser($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
415
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
416
                    exit;
417
                }
418
            }
419
        }
420
421
        /**
422
         * @param $request
423
         * @param $relativeCmsUri
424
         */
425
        private function documentTypesRouting($request, $relativeCmsUri)
426
        {
427
            if ($relativeCmsUri == '/configuration/document-types') {
428
                $this->subTemplate = 'cms/configuration/document-types';
429
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
430
                $this->parameters[self::PARAMETER_DOCUMENT_TYPES] = $this->storage->getDocumentTypes();
431
            } elseif ($relativeCmsUri == '/configuration/document-types/new') {
432
                $this->subTemplate = 'cms/configuration/document-types-form';
433
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
434
                $bricks = $this->storage->getBricks();
435
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
436
                    $this->storage->addDocumentType($request::$post);
437
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
438
                    exit;
439
                }
440
                $this->parameters[self::PARAMETER_BRICKS] = $bricks;
441
            } elseif ($relativeCmsUri == '/configuration/document-types/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
442
                $this->subTemplate = 'cms/configuration/document-types-form';
443
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
444
                $documentType = $this->storage->getDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG], false);
445
                $bricks = $this->storage->getBricks();
446
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
447
                    $this->storage->saveDocumentType($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
448
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
449
                    exit;
450
                }
451
                $this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $documentType;
452
                $this->parameters[self::PARAMETER_BRICKS] = $bricks;
453
            } elseif ($relativeCmsUri == '/configuration/document-types/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
454
                $this->storage->deleteDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG]);
455
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
456
                exit;
457
            }
458
        }
459
460
        /**
461
         * @param $request
462
         * @param $relativeCmsUri
463
         */
464
        private function bricksRouting($request, $relativeCmsUri)
465
        {
466
            if ($relativeCmsUri == '/configuration/bricks') {
467
                $this->subTemplate = 'cms/configuration/bricks';
468
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
469
                $this->parameters[self::PARAMETER_BRICKS] = $this->storage->getBricks();
470
            } elseif ($relativeCmsUri == '/configuration/bricks/new') {
471
                $this->subTemplate = 'cms/configuration/bricks-form';
472
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
473
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
474
                    $this->storage->addBrick($request::$post);
475
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
476
                    exit;
477
                }
478
            } elseif ($relativeCmsUri == '/configuration/bricks/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
479
                $this->subTemplate = 'cms/configuration/bricks-form';
480
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
481
                $brick = $this->storage->getBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
482
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
483
                    $this->storage->saveBrick($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
484
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
485
                    exit;
486
                }
487
                $this->parameters[self::PARAMETER_BRICK] = $brick;
488
            } elseif ($relativeCmsUri == '/configuration/bricks/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
489
                $this->storage->deleteBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
490
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
491
                exit;
492
            } elseif ($relativeCmsUri == '/configuration/image-set') {
493
                $this->subTemplate = 'cms/configuration/image-set';
494
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
495
                $this->parameters[self::PARAMETER_IMAGE_SET] = $this->storage->getImageSet();
496
            }
497
        }
498
499
        /**
500
         * @param $request
501
         * @param $relativeCmsUri
502
         */
503 View Code Duplication
        private function imageSetRouting($request, $relativeCmsUri)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
504
        {
505
            if ($relativeCmsUri == '/configuration/image-set') {
506
                $this->subTemplate = 'cms/configuration/image-set';
507
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
508
                $this->parameters[self::PARAMETER_IMAGE_SET] = $this->storage->getImageSet();
509
            } elseif ($relativeCmsUri == '/configuration/image-set/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
510
                $this->subTemplate = 'cms/configuration/image-set-form';
511
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
512
                $imageSet = $this->storage->getImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
513
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
514
                    $this->storage->saveImageSet($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
515
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
516
                    exit;
517
                }
518
                $this->parameters[self::PARAMETER_IMAGE_SET] = $imageSet;
519
            } elseif ($relativeCmsUri == '/configuration/image-set/new') {
520
                $this->subTemplate = 'cms/configuration/image-set-form';
521
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
522
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
523
                    $this->storage->addImageSet($request::$post);
524
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
525
                    exit;
526
                }
527
            } elseif ($relativeCmsUri == '/configuration/image-set/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
528
                $this->storage->deleteImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
529
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
530
                exit;
531
            }
532
        }
533
534
        /**
535
         * @param $request
536
         * @param $relativeCmsUri
537
         */
538
        private function applicationComponentRouting($request, $relativeCmsUri)
539
        {
540
            if ($relativeCmsUri == '/configuration/application-components') {
541
                $this->subTemplate = 'cms/configuration/application-components';
542
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
543
                $this->parameters['applicationComponents'] = $this->storage->getApplicationComponents();
544
            } elseif ($relativeCmsUri == '/configuration/application-components/new') {
545
                $this->subTemplate = 'cms/configuration/application-components-form';
546
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
547
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
548
                    $this->storage->addApplicationComponent($request::$post);
549
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
550
                    exit;
551
                }
552
            } elseif ($relativeCmsUri == '/configuration/application-components/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
553
                $this->subTemplate = 'cms/configuration/application-components-form';
554
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
555
                $applicationComponent = $this->storage->getApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
556
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
557
                    $this->storage->saveApplicationComponent($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
558
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
559
                    exit;
560
                }
561
                $this->parameters['applicationComponent'] = $applicationComponent;
562
            } elseif ($relativeCmsUri == '/configuration/application-components/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
563
                $this->storage->deleteApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
564
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
565
                exit;
566
            }
567
        }
568
569
        private function logOffRouting($request, $relativeCmsUri)
570
        {
571
            if ($relativeCmsUri == '/log-off') {
572
                $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = null;
573
                unset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]);
574
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX]);
575
                exit;
576
            }
577
        }
578
579
        public function setParameter($parameterName, $parameterValue)
580
        {
581
            $this->parameters[$parameterName] = $parameterValue;
582
        }
583
584
        public function getParameter($parameterName)
585
        {
586
            return $this->parameters[$parameterName];
587
        }
588
    }
589
}