Passed
Push — develop ( 64b408...917e37 )
by Jens
02:16
created

CmsComponent::filesRouting()   C

Complexity

Conditions 8
Paths 6

Size

Total Lines 22
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 8
eloc 18
nc 6
nop 2
dl 0
loc 22
rs 6.6037
c 0
b 0
f 0
1
<?php
2
namespace library\components {
3
4
    use library\components\cms\DocumentRouting;
5
    use library\components\cms\ImagesRouting;
6
    use library\crypt\Crypt;
7
    use library\storage\Storage;
8
9
    class CmsComponent extends BaseComponent
10
    {
11
        /*
12
         * var \library\storage\Storage
13
         */
14
        public $storage;
15
16
        const INVALID_CREDENTIALS_MESSAGE = 'Invalid username / password combination';
17
18
        const MAIN_NAV_CLASS = 'default';
19
20
        const PARAMETER_BLACKLIST_IPS = 'blacklistIps';
21
        const PARAMETER_BODY = 'body';
22
        const PARAMETER_BRICK = 'brick';
23
        const PARAMETER_BRICKS = 'bricks';
24
        const PARAMETER_CMS_PREFIX = 'cmsPrefix';
25
        const PARAMETER_DOCUMENT = 'document';
26
        const PARAMETER_DOCUMENTS = 'documents';
27
        const PARAMETER_DOCUMENT_TYPE = 'documentType';
28
        const PARAMETER_DOCUMENT_TYPES = 'documentTypes';
29
        const PARAMETER_ERROR_MESSAGE = 'errorMsg';
30
        const PARAMETER_FILES = 'files';
31
        const PARAMETER_FOLDER = 'folder';
32
        const PARAMETER_IMAGE = 'image';
33
        const PARAMETER_IMAGES = 'images';
34
        const PARAMETER_IMAGE_SET = 'imageSet';
35
        const PARAMETER_MAIN_NAV_CLASS = 'mainNavClass';
36
        const PARAMETER_MY_BRICK_SLUG = 'myBrickSlug';
37
        const PARAMETER_SITEMAP = 'sitemap';
38
        const PARAMETER_SITEMAP_ITEM = 'sitemapItem';
39
        const PARAMETER_SMALLEST_IMAGE = 'smallestImage';
40
        const PARAMETER_STATIC = 'static';
41
        const PARAMETER_USER = 'user';
42
        const PARAMETER_USERS = 'users';
43
        const PARAMETER_USER_RIGHTS = 'userRights';
44
        const PARAMETER_WHITELIST_IPS = 'whitelistIps';
45
46
        const POST_PARAMETER_COMPONENT = 'component';
47
        const POST_PARAMETER_PASSWORD = 'password';
48
        const POST_PARAMETER_SAVE = 'save';
49
        const POST_PARAMETER_TEMPLATE = 'template';
50
        const POST_PARAMETER_TITLE = 'title';
51
        const POST_PARAMETER_USERNAME = 'username';
52
53
        const GET_PARAMETER_PATH = 'path';
54
        const GET_PARAMETER_SLUG = 'slug';
55
56
        const FILES_PARAMETER_FILE = 'file';
57
58
        const SESSION_PARAMETER_CLOUD_CONTROL = 'cloudcontrol';
59
60
        const LOGIN_TEMPLATE_PATH = 'cms/login';
61
62
        const CONTENT_TYPE_APPLICATION_JSON = 'Content-type:application/json';
63
64
        public $subTemplate = null;
65
66
67
        /**
68
         * @param \library\storage\Storage $storage
69
         *
70
         * @return void
71
         */
72
        public function run(Storage $storage)
73
        {
74
            $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::MAIN_NAV_CLASS;
75
            $this->storage = $storage;
76
77
            $remoteAddress = $_SERVER['REMOTE_ADDR'];
78
            $this->checkWhiteList($remoteAddress);
79
            $this->checkBlackList($remoteAddress);
80
81
            $this->checkLogin();
82
83
            $this->parameters[self::PARAMETER_USER_RIGHTS] = $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]->rights;
84
85
            $this->routing();
86
        }
87
88
        /**
89
         * See if a user is logged or wants to log in and
90
         * takes appropriate actions.
91
         *
92
         * @throws \Exception
93
         */
94
        protected function checkLogin()
95
        {
96
            $request = $this->request;
97
98
            if (!isset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL])) {
99
                if (isset($request::$post[self::POST_PARAMETER_USERNAME], $request::$post[self::POST_PARAMETER_PASSWORD])) {
100
                    $user = $this->storage->getUserByUsername($request::$post[self::POST_PARAMETER_USERNAME]);
101
                    $crypt = new Crypt();
102
                    if (empty($user)) {
103
                        $crypt->encrypt($request::$post[self::POST_PARAMETER_PASSWORD], 16); // Buy time, to avoid brute forcing
104
                        $this->parameters[self::PARAMETER_ERROR_MESSAGE] = self::INVALID_CREDENTIALS_MESSAGE;
105
                        $this->showLogin();
106
                    } else {
107
                        $salt = $user->salt;
108
                        $password = $user->password;
109
110
                        $passwordCorrect = $crypt->compare($request::$post[self::POST_PARAMETER_PASSWORD], $password, $salt);
111
112
                        if ($passwordCorrect) {
113
                            $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = $user;
114
                        } else {
115
                            $this->parameters[self::PARAMETER_ERROR_MESSAGE] = self::INVALID_CREDENTIALS_MESSAGE;
116
                            $this->showLogin();
117
                        }
118
                    }
119
                } else {
120
                    $this->showLogin();
121
                }
122
            }
123
        }
124
125
        /**
126
         * Overrides normal behaviour and only renders the
127
         * login screen
128
         *
129
         * @throws \Exception
130
         */
131
        protected function showLogin()
132
        {
133
            $loginTemplatePath = self::LOGIN_TEMPLATE_PATH;
134
            $this->renderTemplate($loginTemplatePath);
135
            ob_end_flush();
136
            exit;
137
        }
138
139
        /**
140
         * As an exception, to keep the initial file structure simple
141
         * the cms implements it's own routing, apart from the regular sitemap functionality
142
         *
143
         * @throws \Exception
144
         */
145
        protected function routing()
146
        {
147
            $relativeCmsUri = $this->getRelativeCmsUri($this->request);
148
149
            $userRights = $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]->rights;
150
151
            if ($relativeCmsUri == '' || $relativeCmsUri == '/') {
152
                $this->subTemplate = 'cms/dashboard';
153
            }
154
155
            $this->logOffRouting($this->request, $relativeCmsUri);
156
157
            $this->apiRouting($relativeCmsUri);
158
159
            if (in_array(self::PARAMETER_DOCUMENTS, $userRights)) {
160
                new DocumentRouting($this->request, $relativeCmsUri, $this);
161
            }
162
163
            if (in_array(self::PARAMETER_SITEMAP, $userRights)) {
164
                $this->sitemapRouting($this->request, $relativeCmsUri);
165
            }
166
167
            if (in_array(self::PARAMETER_IMAGES, $userRights)) {
168
                new ImagesRouting($this->request, $relativeCmsUri, $this);
169
            }
170
171
            if (in_array(self::PARAMETER_FILES, $userRights)) {
172
                $this->filesRouting($this->request, $relativeCmsUri);
173
            }
174
175
            if (in_array('configuration', $userRights)) {
176
                $this->configurationRouting($this->request, $relativeCmsUri);
177
            }
178
179
            if ($this->subTemplate !== null) {
180
                $this->parameters[self::PARAMETER_BODY] = $this->renderTemplate($this->subTemplate);
181
            }
182
        }
183
184
        /**
185
         * @param $remoteAddress
186
         * @throws \Exception
187
         */
188 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...
189
        {
190
            if (isset($this->parameters[self::PARAMETER_WHITELIST_IPS])) {
191
                $whitelistIps = explode(',', $this->parameters[self::PARAMETER_WHITELIST_IPS]);
192
                $whitelistIps = array_map("trim", $whitelistIps);
193
                if (!in_array($remoteAddress, $whitelistIps)) {
194
                    throw new \Exception('Ip address ' . $remoteAddress . ' is not on whitelist');
195
                }
196
            }
197
        }
198
199
        /**
200
         * @param $remoteAddress
201
         * @throws \Exception
202
         */
203 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...
204
        {
205
            if (isset($this->parameters[self::PARAMETER_BLACKLIST_IPS])) {
206
                $blacklistIps = explode(',', $this->parameters[self::PARAMETER_BLACKLIST_IPS]);
207
                $blacklistIps = array_map("trim", $blacklistIps);
208
                if (in_array($remoteAddress, $blacklistIps)) {
209
                    throw new \Exception('Ip address ' . $remoteAddress . ' is on blacklist');
210
                }
211
            }
212
        }
213
214
        /**
215
         * @param $request
216
         * @return mixed|string
217
         */
218
        private function getRelativeCmsUri($request)
219
        {
220
            // TODO Use regex match parameter instead of calculating relative uri
221
            $pos = strpos($request::$relativeUri, $this->parameters[self::PARAMETER_CMS_PREFIX]);
222
            $relativeCmsUri = '/';
223
            if ($pos !== false) {
224
                $relativeCmsUri = substr_replace($request::$relativeUri, '', $pos, strlen($this->parameters[self::PARAMETER_CMS_PREFIX]));
225
            }
226
            return $relativeCmsUri;
227
        }
228
229
        /**
230
         * @param \library\cc\Request $request
231
         * @param $relativeCmsUri
232
         */
233
        private function sitemapRouting($request, $relativeCmsUri)
234
        {
235
            if ($relativeCmsUri == '/sitemap') {
236
                $this->subTemplate = 'cms/sitemap';
237
                if (isset($request::$post[self::POST_PARAMETER_SAVE])) {
238
                    $this->storage->saveSitemap($request::$post);
239
                }
240
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
241
                $this->parameters[self::PARAMETER_SITEMAP] = $this->storage->getSitemap();
242
            } elseif ($relativeCmsUri == '/sitemap/new') {
243
                $this->subTemplate = 'cms/sitemap/form';
244
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
245
                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
246
                    $this->storage->addSitemapItem($request::$post);
247
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
248
                    exit;
249
                }
250
            } elseif ($relativeCmsUri == '/sitemap/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
251
                $this->subTemplate = 'cms/sitemap/form';
252
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
253
                $sitemapItem = $this->storage->getSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
254
                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
255
                    $this->storage->saveSitemapItem($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
256
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
257
                    exit;
258
                }
259
                $this->parameters[self::PARAMETER_SITEMAP_ITEM] = $sitemapItem;
260
            } elseif ($relativeCmsUri == '/sitemap/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
261
                $this->storage->deleteSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
262
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
263
                exit;
264
            }
265
        }
266
267
        /**
268
         * @param $relativeCmsUri
269
         */
270
        private function apiRouting($relativeCmsUri)
271
        {
272
            if ($relativeCmsUri == '/images.json') {
273
                header(self::CONTENT_TYPE_APPLICATION_JSON);
274
                die(json_encode($this->storage->getImages()));
275
            } elseif ($relativeCmsUri == '/files.json') {
276
                header(self::CONTENT_TYPE_APPLICATION_JSON);
277
                die(json_encode($this->storage->getFiles()));
278
            } elseif ($relativeCmsUri == '/documents.json') {
279
                header(self::CONTENT_TYPE_APPLICATION_JSON);
280
                die(json_encode($this->storage->getDocuments()));
281
            }
282
        }
283
284
        /**
285
         * @param $request
286
         * @param $relativeCmsUri
287
         */
288
        private function filesRouting($request, $relativeCmsUri)
289
        {
290
            if ($relativeCmsUri == '/files') {
291
                $this->subTemplate = 'cms/files';
292
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
293
                $this->parameters[self::PARAMETER_FILES] = $this->storage->getFiles();
294
            } elseif ($relativeCmsUri == '/files/new') {
295
                $this->subTemplate = 'cms/files/form';
296
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
297
                if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
298
                    $this->storage->addFile($_FILES[self::FILES_PARAMETER_FILE]);
299
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
300
                    exit;
301
                }
302
            } elseif ($relativeCmsUri == '/files/get' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
303
                $this->downloadFile($request::$get[self::FILES_PARAMETER_FILE]);
304
            } elseif ($relativeCmsUri == '/files/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
305
                $this->storage->deleteFileByName($request::$get[self::FILES_PARAMETER_FILE]);
306
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
307
                exit;
308
            }
309
        }
310
311
        /**
312
         * @param $slug
313
         */
314
        private function downloadFile($slug)
315
        {
316
            $file = $this->storage->getFileByName($slug);
317
            $path = realpath(__DIR__ . '/../../www/files/');
318
            $quoted = sprintf('"%s"', addcslashes(basename($path . '/' . $file->file), '"\\'));
319
            $size = filesize($path . '/' . $file->file);
320
321
            header('Content-Description: File Transfer');
322
            header('Content-Type: ' . $file->type);
323
            header('Content-Disposition: attachment; filename=' . $quoted);
324
            header('Content-Transfer-Encoding: binary');
325
            header('Connection: Keep-Alive');
326
            header('Expires: 0');
327
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
328
            header('Pragma: public');
329
            header('Content-Length: ' . $size);
330
331
            readfile($path . '/' . $file->file);
332
            exit;
333
        }
334
335
        /**
336
         * @param $request
337
         * @param $relativeCmsUri
338
         */
339
        private function configurationRouting($request, $relativeCmsUri)
340
        {
341
            if ($relativeCmsUri == '/configuration') {
342
                $this->subTemplate = 'cms/configuration';
343
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
344
            }
345
346
            $this->usersRouting($request, $relativeCmsUri);
347
            $this->documentTypesRouting($request, $relativeCmsUri);
348
            $this->bricksRouting($request, $relativeCmsUri);
349
            $this->imageSetRouting($request, $relativeCmsUri);
350
            $this->applicationComponentRouting($request, $relativeCmsUri);
351
        }
352
353
354
        /**
355
         * @param $request
356
         * @param $relativeCmsUri
357
         */
358 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...
359
        {
360
            if ($relativeCmsUri == '/configuration/users') {
361
                $this->subTemplate = 'cms/configuration/users';
362
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
363
                $this->parameters[self::PARAMETER_USERS] = $this->storage->getUsers();
364
            } elseif ($relativeCmsUri == '/configuration/users/new') {
365
                $this->subTemplate = 'cms/configuration/users-form';
366
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
367
                if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
368
                    $this->storage->addUser($request::$post);
369
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
370
                    exit;
371
                }
372
            } elseif ($relativeCmsUri == '/configuration/users/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
373
                $this->storage->deleteUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
374
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
375
                exit;
376
            } elseif ($relativeCmsUri == '/configuration/users/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
377
                $this->subTemplate = 'cms/configuration/users-form';
378
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
379
                $this->parameters[self::PARAMETER_USER] = $this->storage->getUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
380
                if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
381
                    $this->storage->saveUser($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
382
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
383
                    exit;
384
                }
385
            }
386
        }
387
388
        /**
389
         * @param $request
390
         * @param $relativeCmsUri
391
         */
392
        private function documentTypesRouting($request, $relativeCmsUri)
393
        {
394
            if ($relativeCmsUri == '/configuration/document-types') {
395
                $this->subTemplate = 'cms/configuration/document-types';
396
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
397
                $this->parameters[self::PARAMETER_DOCUMENT_TYPES] = $this->storage->getDocumentTypes();
398
            } elseif ($relativeCmsUri == '/configuration/document-types/new') {
399
                $this->subTemplate = 'cms/configuration/document-types-form';
400
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
401
                $bricks = $this->storage->getBricks();
402
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
403
                    $this->storage->addDocumentType($request::$post);
404
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
405
                    exit;
406
                }
407
                $this->parameters[self::PARAMETER_BRICKS] = $bricks;
408
            } elseif ($relativeCmsUri == '/configuration/document-types/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
409
                $this->subTemplate = 'cms/configuration/document-types-form';
410
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
411
                $documentType = $this->storage->getDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG], false);
412
                $bricks = $this->storage->getBricks();
413
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
414
                    $this->storage->saveDocumentType($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
415
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
416
                    exit;
417
                }
418
                $this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $documentType;
419
                $this->parameters[self::PARAMETER_BRICKS] = $bricks;
420
            } elseif ($relativeCmsUri == '/configuration/document-types/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
421
                $this->storage->deleteDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG]);
422
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
423
                exit;
424
            }
425
        }
426
427
        /**
428
         * @param $request
429
         * @param $relativeCmsUri
430
         */
431
        private function bricksRouting($request, $relativeCmsUri)
432
        {
433
            if ($relativeCmsUri == '/configuration/bricks') {
434
                $this->subTemplate = 'cms/configuration/bricks';
435
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
436
                $this->parameters[self::PARAMETER_BRICKS] = $this->storage->getBricks();
437
            } elseif ($relativeCmsUri == '/configuration/bricks/new') {
438
                $this->subTemplate = 'cms/configuration/bricks-form';
439
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
440
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
441
                    $this->storage->addBrick($request::$post);
442
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
443
                    exit;
444
                }
445
            } elseif ($relativeCmsUri == '/configuration/bricks/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
446
                $this->subTemplate = 'cms/configuration/bricks-form';
447
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
448
                $brick = $this->storage->getBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
449
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
450
                    $this->storage->saveBrick($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
451
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
452
                    exit;
453
                }
454
                $this->parameters[self::PARAMETER_BRICK] = $brick;
455
            } elseif ($relativeCmsUri == '/configuration/bricks/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
456
                $this->storage->deleteBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
457
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
458
                exit;
459
            } elseif ($relativeCmsUri == '/configuration/image-set') {
460
                $this->subTemplate = 'cms/configuration/image-set';
461
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
462
                $this->parameters[self::PARAMETER_IMAGE_SET] = $this->storage->getImageSet();
463
            }
464
        }
465
466
        /**
467
         * @param $request
468
         * @param $relativeCmsUri
469
         */
470 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...
471
        {
472
            if ($relativeCmsUri == '/configuration/image-set') {
473
                $this->subTemplate = 'cms/configuration/image-set';
474
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
475
                $this->parameters[self::PARAMETER_IMAGE_SET] = $this->storage->getImageSet();
476
            } elseif ($relativeCmsUri == '/configuration/image-set/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
477
                $this->subTemplate = 'cms/configuration/image-set-form';
478
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
479
                $imageSet = $this->storage->getImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
480
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
481
                    $this->storage->saveImageSet($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
482
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
483
                    exit;
484
                }
485
                $this->parameters[self::PARAMETER_IMAGE_SET] = $imageSet;
486
            } elseif ($relativeCmsUri == '/configuration/image-set/new') {
487
                $this->subTemplate = 'cms/configuration/image-set-form';
488
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
489
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
490
                    $this->storage->addImageSet($request::$post);
491
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
492
                    exit;
493
                }
494
            } elseif ($relativeCmsUri == '/configuration/image-set/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
495
                $this->storage->deleteImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
496
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
497
                exit;
498
            }
499
        }
500
501
        /**
502
         * @param $request
503
         * @param $relativeCmsUri
504
         */
505
        private function applicationComponentRouting($request, $relativeCmsUri)
506
        {
507
            if ($relativeCmsUri == '/configuration/application-components') {
508
                $this->subTemplate = 'cms/configuration/application-components';
509
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
510
                $this->parameters['applicationComponents'] = $this->storage->getApplicationComponents();
511
            } elseif ($relativeCmsUri == '/configuration/application-components/new') {
512
                $this->subTemplate = 'cms/configuration/application-components-form';
513
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
514
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
515
                    $this->storage->addApplicationComponent($request::$post);
516
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
517
                    exit;
518
                }
519
            } elseif ($relativeCmsUri == '/configuration/application-components/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
520
                $this->subTemplate = 'cms/configuration/application-components-form';
521
                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
522
                $applicationComponent = $this->storage->getApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
523
                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
524
                    $this->storage->saveApplicationComponent($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
525
                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
526
                    exit;
527
                }
528
                $this->parameters['applicationComponent'] = $applicationComponent;
529
            } elseif ($relativeCmsUri == '/configuration/application-components/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
530
                $this->storage->deleteApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
531
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
532
                exit;
533
            }
534
        }
535
536
        private function logOffRouting($request, $relativeCmsUri)
537
        {
538
            if ($relativeCmsUri == '/log-off') {
539
                $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = null;
540
                unset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]);
541
                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX]);
542
                exit;
543
            }
544
        }
545
546
        public function setParameter($parameterName, $parameterValue)
547
        {
548
            $this->parameters[$parameterName] = $parameterValue;
549
        }
550
551
        public function getParameter($parameterName)
552
        {
553
            return $this->parameters[$parameterName];
554
        }
555
    }
556
}