Passed
Push — develop ( 57efa0...f0643b )
by Jens
02:27
created
cloudcontrol/library/components/CmsComponent.php 2 patches
Indentation   +684 added lines, -684 removed lines patch added patch discarded remove patch
@@ -1,691 +1,691 @@
 block discarded – undo
1 1
 <?php
2 2
 namespace library\components {
3 3
 
4
-    use library\crypt\Crypt;
5
-    use library\storage\Storage;
4
+	use library\crypt\Crypt;
5
+	use library\storage\Storage;
6 6
 
7
-    class CmsComponent extends BaseComponent
8
-    {
9
-        /*
7
+	class CmsComponent extends BaseComponent
8
+	{
9
+		/*
10 10
          * var \library\storage\Storage
11 11
          */
12
-        protected $storage;
13
-
14
-        const INVALID_CREDENTIALS_MESSAGE = 'Invalid username / password combination';
15
-
16
-        const MAIN_NAV_CLASS = 'default';
17
-
18
-        const PARAMETER_BLACKLIST_IPS = 'blacklistIps';
19
-        const PARAMETER_BODY = 'body';
20
-        const PARAMETER_BRICK = 'brick';
21
-        const PARAMETER_BRICKS = 'bricks';
22
-        const PARAMETER_CMS_PREFIX = 'cmsPrefix';
23
-        const PARAMETER_DOCUMENT = 'document';
24
-        const PARAMETER_DOCUMENTS = 'documents';
25
-        const PARAMETER_DOCUMENT_TYPE = 'documentType';
26
-        const PARAMETER_DOCUMENT_TYPES = 'documentTypes';
27
-        const PARAMETER_ERROR_MESSAGE = 'errorMsg';
28
-        const PARAMETER_FILES = 'files';
29
-        const PARAMETER_IMAGE = 'image';
30
-        const PARAMETER_IMAGES = 'images';
31
-        const PARAMETER_IMAGE_SET = 'imageSet';
32
-        const PARAMETER_MAIN_NAV_CLASS = 'mainNavClass';
33
-        const PARAMETER_MY_BRICK_SLUG = 'myBrickSlug';
34
-        const PARAMETER_SITEMAP = 'sitemap';
35
-        const PARAMETER_SITEMAP_ITEM = 'sitemapItem';
36
-        const PARAMETER_SMALLEST_IMAGE = 'smallestImage';
37
-        const PARAMETER_STATIC = 'static';
38
-        const PARAMETER_USER = 'user';
39
-        const PARAMETER_USERS = 'users';
40
-        const PARAMETER_USER_RIGHTS = 'userRights';
41
-        const PARAMETER_WHITELIST_IPS = 'whitelistIps';
42
-
43
-        const POST_PARAMETER_COMPONENT = 'component';
44
-        const POST_PARAMETER_PASSWORD = 'password';
45
-        const POST_PARAMETER_SAVE = 'save';
46
-        const POST_PARAMETER_TEMPLATE = 'template';
47
-        const POST_PARAMETER_TITLE = 'title';
48
-        const POST_PARAMETER_USERNAME = 'username';
49
-
50
-        const GET_PARAMETER_PATH = 'path';
51
-        const GET_PARAMETER_SLUG = 'slug';
52
-
53
-        const FILES_PARAMETER_FILE = 'file';
54
-
55
-        const SESSION_PARAMETER_CLOUD_CONTROL = 'cloudcontrol';
56
-
57
-        const LOGIN_TEMPLATE_PATH = 'cms/login';
58
-
59
-        const CONTENT_TYPE_APPLICATION_JSON = 'Content-type:application/json';
60
-
61
-        protected $subTemplate = null;
62
-
63
-
64
-        /**
65
-         * @param \library\storage\Storage $storage
66
-         *
67
-         * @return void
68
-         */
69
-        public function run(Storage $storage)
70
-        {
71
-            $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::MAIN_NAV_CLASS;
72
-            $this->storage = $storage;
73
-
74
-            $remoteAddress = $_SERVER['REMOTE_ADDR'];
75
-            $this->checkWhiteList($remoteAddress);
76
-            $this->checkBlackList($remoteAddress);
77
-
78
-            $this->checkLogin();
79
-
80
-            $this->parameters[self::PARAMETER_USER_RIGHTS] = $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]->rights;
81
-
82
-            $this->routing();
83
-        }
84
-
85
-        /**
86
-         * See if a user is logged or wants to log in and
87
-         * takes appropriate actions.
88
-         *
89
-         * @throws \Exception
90
-         */
91
-        protected function checkLogin()
92
-        {
93
-            $request = $this->request;
94
-
95
-            if (!isset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL])) {
96
-                if (isset($request::$post[self::POST_PARAMETER_USERNAME], $request::$post[self::POST_PARAMETER_PASSWORD])) {
97
-                    $user = $this->storage->getUserByUsername($request::$post[self::POST_PARAMETER_USERNAME]);
98
-                    $crypt = new Crypt();
99
-                    if (empty($user)) {
100
-                        $crypt->encrypt($request::$post[self::POST_PARAMETER_PASSWORD], 16); // Buy time, to avoid brute forcing
101
-                        $this->parameters[self::PARAMETER_ERROR_MESSAGE] = self::INVALID_CREDENTIALS_MESSAGE;
102
-                        $this->showLogin();
103
-                    } else {
104
-                        $salt = $user->salt;
105
-                        $password = $user->password;
106
-
107
-                        $passwordCorrect = $crypt->compare($request::$post[self::POST_PARAMETER_PASSWORD], $password, $salt);
108
-
109
-                        if ($passwordCorrect) {
110
-                            $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = $user;
111
-                        } else {
112
-                            $this->parameters[self::PARAMETER_ERROR_MESSAGE] = self::INVALID_CREDENTIALS_MESSAGE;
113
-                            $this->showLogin();
114
-                        }
115
-                    }
116
-                } else {
117
-                    $this->showLogin();
118
-                }
119
-            }
120
-        }
121
-
122
-        /**
123
-         * Overrides normal behaviour and only renders the
124
-         * login screen
125
-         *
126
-         * @throws \Exception
127
-         */
128
-        protected function showLogin()
129
-        {
130
-            $loginTemplatePath = self::LOGIN_TEMPLATE_PATH;
131
-            $this->renderTemplate($loginTemplatePath);
132
-            ob_end_flush();
133
-            exit;
134
-        }
135
-
136
-        /**
137
-         * As an exception, to keep the initial file structure simple
138
-         * the cms implements it's own routing, apart from the regular sitemap functionality
139
-         *
140
-         * @throws \Exception
141
-         */
142
-        protected function routing()
143
-        {
144
-            $relativeCmsUri = $this->getRelativeCmsUri($this->request);
145
-
146
-            $userRights = $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]->rights;
147
-
148
-            if ($relativeCmsUri == '' || $relativeCmsUri == '/') {
149
-                $this->subTemplate = 'cms/dashboard';
150
-            }
151
-
152
-            $this->logOffRouting($this->request, $relativeCmsUri);
153
-
154
-            $this->apiRouting($relativeCmsUri);
155
-
156
-            if (in_array(self::PARAMETER_DOCUMENTS, $userRights)) {
157
-                $this->documentsRouting($this->request, $relativeCmsUri);
158
-            }
159
-
160
-            if (in_array(self::PARAMETER_SITEMAP, $userRights)) {
161
-                $this->sitemapRouting($this->request, $relativeCmsUri);
162
-            }
163
-
164
-            if (in_array(self::PARAMETER_IMAGES, $userRights)) {
165
-                $this->imagesRouting($this->request, $relativeCmsUri);
166
-            }
167
-
168
-            if (in_array(self::PARAMETER_FILES, $userRights)) {
169
-                $this->filesRouting($this->request, $relativeCmsUri);
170
-            }
171
-
172
-            if (in_array('configuration', $userRights)) {
173
-                $this->configurationRouting($this->request, $relativeCmsUri);
174
-            }
175
-
176
-            if ($this->subTemplate !== null) {
177
-                $this->parameters[self::PARAMETER_BODY] = $this->renderTemplate($this->subTemplate);
178
-            }
179
-        }
180
-
181
-        /**
182
-         * @param $remoteAddress
183
-         * @throws \Exception
184
-         */
185
-        private function checkWhiteList($remoteAddress)
186
-        {
187
-            if (isset($this->parameters[self::PARAMETER_WHITELIST_IPS])) {
188
-                $whitelistIps = explode(',', $this->parameters[self::PARAMETER_WHITELIST_IPS]);
189
-                $whitelistIps = array_map("trim", $whitelistIps);
190
-                if (!in_array($remoteAddress, $whitelistIps)) {
191
-                    throw new \Exception('Ip address ' . $remoteAddress . ' is not on whitelist');
192
-                }
193
-            }
194
-        }
195
-
196
-        /**
197
-         * @param $remoteAddress
198
-         * @throws \Exception
199
-         */
200
-        private function checkBlackList($remoteAddress)
201
-        {
202
-            if (isset($this->parameters[self::PARAMETER_BLACKLIST_IPS])) {
203
-                $blacklistIps = explode(',', $this->parameters[self::PARAMETER_BLACKLIST_IPS]);
204
-                $blacklistIps = array_map("trim", $blacklistIps);
205
-                if (in_array($remoteAddress, $blacklistIps)) {
206
-                    throw new \Exception('Ip address ' . $remoteAddress . ' is on blacklist');
207
-                }
208
-            }
209
-        }
210
-
211
-        /**
212
-         * @param $request
213
-         * @return mixed|string
214
-         */
215
-        private function getRelativeCmsUri($request)
216
-        {
217
-            // TODO Use regex match parameter instead of calculating relative uri
218
-            $pos = strpos($request::$relativeUri, $this->parameters[self::PARAMETER_CMS_PREFIX]);
219
-            $relativeCmsUri = '/';
220
-            if ($pos !== false) {
221
-                $relativeCmsUri = substr_replace($request::$relativeUri, '', $pos, strlen($this->parameters[self::PARAMETER_CMS_PREFIX]));
222
-            }
223
-            return $relativeCmsUri;
224
-        }
225
-
226
-        /**
227
-         * @param $request
228
-         * @param $relativeCmsUri
229
-         */
230
-        private function documentsRouting($request, $relativeCmsUri)
231
-        {
232
-            if ($relativeCmsUri == '/documents') {
233
-                $this->subTemplate = 'cms/documents';
234
-                $this->parameters[self::PARAMETER_DOCUMENTS] = $this->storage->getDocuments();
235
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
236
-            }
237
-            $this->documentRouting($request, $relativeCmsUri);
238
-            $this->folderRouting($request, $relativeCmsUri);
239
-        }
240
-
241
-        /**
242
-         * @param \library\cc\Request $request
243
-         * @param $relativeCmsUri
244
-         */
245
-        private function sitemapRouting($request, $relativeCmsUri)
246
-        {
247
-            if ($relativeCmsUri == '/sitemap') {
248
-                $this->subTemplate = 'cms/sitemap';
249
-                if (isset($request::$post[self::POST_PARAMETER_SAVE])) {
250
-                    $this->storage->saveSitemap($request::$post);
251
-                }
252
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
253
-                $this->parameters[self::PARAMETER_SITEMAP] = $this->storage->getSitemap();
254
-            } elseif ($relativeCmsUri == '/sitemap/new') {
255
-                $this->subTemplate = 'cms/sitemap/form';
256
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
257
-                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
258
-                    $this->storage->addSitemapItem($request::$post);
259
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
260
-                    exit;
261
-                }
262
-            } elseif ($relativeCmsUri == '/sitemap/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
263
-                $this->subTemplate = 'cms/sitemap/form';
264
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
265
-                $sitemapItem = $this->storage->getSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
266
-                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
267
-                    $this->storage->saveSitemapItem($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
268
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
269
-                    exit;
270
-                }
271
-                $this->parameters[self::PARAMETER_SITEMAP_ITEM] = $sitemapItem;
272
-            } elseif ($relativeCmsUri == '/sitemap/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
273
-                $this->storage->deleteSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
274
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
275
-                exit;
276
-            }
277
-        }
278
-
279
-        /**
280
-         * @param $request
281
-         * @param $relativeCmsUri
282
-         */
283
-        private function imagesRouting($request, $relativeCmsUri)
284
-        {
285
-            if ($relativeCmsUri == '/images') {
286
-                $this->subTemplate = 'cms/images';
287
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
288
-                $this->parameters[self::PARAMETER_IMAGES] = $this->storage->getImages();
289
-                $this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
290
-            } elseif ($relativeCmsUri == '/images.json') {
291
-                header(self::CONTENT_TYPE_APPLICATION_JSON);
292
-                die(json_encode($this->storage->getImages()));
293
-            } elseif ($relativeCmsUri == '/images/new') {
294
-                $this->subTemplate = 'cms/images/form';
295
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
296
-                if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
297
-                    $this->storage->addImage($_FILES[self::FILES_PARAMETER_FILE]);
298
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/images');
299
-                    exit;
300
-                }
301
-            } elseif ($relativeCmsUri == '/images/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
302
-                $this->storage->deleteImageByName($request::$get[self::FILES_PARAMETER_FILE]);
303
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/images');
304
-                exit;
305
-            } elseif ($relativeCmsUri == '/images/show' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
306
-                $this->subTemplate = 'cms/images/show';
307
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
308
-                $this->parameters[self::PARAMETER_IMAGE] = $this->storage->getImageByName($request::$get[self::FILES_PARAMETER_FILE]);
309
-            }
310
-        }
311
-
312
-        /**
313
-         * @param $relativeCmsUri
314
-         */
315
-        private function apiRouting($relativeCmsUri)
316
-        {
317
-            if ($relativeCmsUri == '/images.json') {
318
-                header(self::CONTENT_TYPE_APPLICATION_JSON);
319
-                die(json_encode($this->storage->getImages()));
320
-            } elseif ($relativeCmsUri == '/files.json') {
321
-                header(self::CONTENT_TYPE_APPLICATION_JSON);
322
-                die(json_encode($this->storage->getFiles()));
323
-            } elseif ($relativeCmsUri == '/documents.json') {
324
-                header(self::CONTENT_TYPE_APPLICATION_JSON);
325
-                die(json_encode($this->storage->getDocuments()));
326
-            }
327
-        }
328
-
329
-        /**
330
-         * @param $request
331
-         * @param $relativeCmsUri
332
-         */
333
-        private function filesRouting($request, $relativeCmsUri)
334
-        {
335
-            if ($relativeCmsUri == '/files') {
336
-                $this->subTemplate = 'cms/files';
337
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
338
-                $this->parameters[self::PARAMETER_FILES] = $this->storage->getFiles();
339
-            } elseif ($relativeCmsUri == '/files/new') {
340
-                $this->subTemplate = 'cms/files/form';
341
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
342
-                if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
343
-                    $this->storage->addFile($_FILES[self::FILES_PARAMETER_FILE]);
344
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
345
-                    exit;
346
-                }
347
-            } elseif ($relativeCmsUri == '/files/get' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
348
-                $this->downloadFile($request::$get[self::FILES_PARAMETER_FILE]);
349
-            } elseif ($relativeCmsUri == '/files/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
350
-                $this->storage->deleteFileByName($request::$get[self::FILES_PARAMETER_FILE]);
351
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
352
-                exit;
353
-            }
354
-        }
355
-
356
-        /**
357
-         * @param $slug
358
-         */
359
-        private function downloadFile($slug)
360
-        {
361
-            $file = $this->storage->getFileByName($slug);
362
-            $path = realpath(__DIR__ . '/../../www/files/');
363
-            $quoted = sprintf('"%s"', addcslashes(basename($path . '/' . $file->file), '"\\'));
364
-            $size = filesize($path . '/' . $file->file);
365
-
366
-            header('Content-Description: File Transfer');
367
-            header('Content-Type: ' . $file->type);
368
-            header('Content-Disposition: attachment; filename=' . $quoted);
369
-            header('Content-Transfer-Encoding: binary');
370
-            header('Connection: Keep-Alive');
371
-            header('Expires: 0');
372
-            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
373
-            header('Pragma: public');
374
-            header('Content-Length: ' . $size);
375
-
376
-            readfile($path . '/' . $file->file);
377
-            exit;
378
-        }
379
-
380
-        /**
381
-         * @param $request
382
-         * @param $relativeCmsUri
383
-         */
384
-        private function configurationRouting($request, $relativeCmsUri)
385
-        {
386
-            if ($relativeCmsUri == '/configuration') {
387
-                $this->subTemplate = 'cms/configuration';
388
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
389
-            }
390
-
391
-            $this->usersRouting($request, $relativeCmsUri);
392
-            $this->documentTypesRouting($request, $relativeCmsUri);
393
-            $this->bricksRouting($request, $relativeCmsUri);
394
-            $this->imageSetRouting($request, $relativeCmsUri);
395
-            $this->applicationComponentRouting($request, $relativeCmsUri);
396
-        }
397
-
398
-        /**
399
-         * @param $request
400
-         * @param $relativeCmsUri
401
-         * @throws \Exception
402
-         */
403
-        private function documentRouting($request, $relativeCmsUri)
404
-        {
405
-            if ($relativeCmsUri == '/documents/new-document' && isset($request::$get[self::GET_PARAMETER_PATH])) {
406
-                $this->subTemplate = 'cms/documents/document-form';
407
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
408
-                $this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
409
-                if (isset($request::$get[self::PARAMETER_DOCUMENT_TYPE])) {
410
-                    if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$get[self::PARAMETER_DOCUMENT_TYPE], $request::$get[self::GET_PARAMETER_PATH])) {
411
-                        $this->storage->addDocument($request::$post);
412
-                        header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
413
-                        exit;
414
-                    }
415
-                    $this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $this->storage->getDocumentTypeBySlug($request::$get[self::PARAMETER_DOCUMENT_TYPE], true);
416
-                    $this->parameters[self::PARAMETER_BRICKS] = $this->storage->getBricks();
417
-                } else {
418
-                    $documentTypes = $this->storage->getDocumentTypes();
419
-                    if (count($documentTypes) < 1) {
420
-                        throw new \Exception('No Document Types defined yet. <a href="' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types/new">Please do so first.</a>');
421
-                    }
422
-                    $this->parameters[self::PARAMETER_DOCUMENT_TYPES] = $documentTypes;
423
-                }
424
-            } elseif ($relativeCmsUri == '/documents/edit-document' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
425
-                $this->subTemplate = 'cms/documents/document-form';
426
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
427
-                $this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
428
-                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$get[self::GET_PARAMETER_SLUG])) {
429
-                    $this->storage->saveDocument($request::$post);
430
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
431
-                    exit;
432
-                }
433
-                $this->parameters[self::PARAMETER_DOCUMENT] = $this->storage->getDocumentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
434
-                $request::$get[self::GET_PARAMETER_PATH] = $request::$get[self::GET_PARAMETER_SLUG];
435
-                $this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $this->storage->getDocumentTypeBySlug($this->parameters[self::PARAMETER_DOCUMENT]->documentTypeSlug, true);
436
-                $this->parameters[self::PARAMETER_BRICKS] = $this->storage->getBricks();
437
-            } elseif ($relativeCmsUri == '/documents/get-brick' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
438
-                $this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
439
-                $this->subTemplate = 'cms/documents/brick';
440
-                $this->parameters[self::PARAMETER_BRICK] = $this->storage->getBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
441
-                $this->parameters[self::PARAMETER_STATIC] = $request::$get[self::PARAMETER_STATIC] === 'true';
442
-                if (isset($request::$get[self::PARAMETER_MY_BRICK_SLUG])) {
443
-                    $this->parameters[self::PARAMETER_MY_BRICK_SLUG] = $request::$get[self::PARAMETER_MY_BRICK_SLUG];
444
-                }
445
-                $result = new \stdClass();
446
-                $result->body = $this->renderTemplate('cms/documents/brick');
447
-                $result->rteList = isset($GLOBALS['rteList']) ? $GLOBALS['rteList'] : array();
448
-                ob_clean();
449
-                header(self::CONTENT_TYPE_APPLICATION_JSON);
450
-                die(json_encode($result));
451
-            } else if ($relativeCmsUri == '/documents/delete-document' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
452
-                $this->storage->deleteDocumentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
453
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
454
-                exit;
455
-            }
456
-        }
457
-
458
-        /**
459
-         * @param $request
460
-         * @param $relativeCmsUri
461
-         */
462
-        private function folderRouting($request, $relativeCmsUri)
463
-        {
464
-            if ($relativeCmsUri == '/documents/new-folder' && isset($request::$get[self::GET_PARAMETER_PATH])) {
465
-                $this->subTemplate = 'cms/documents/folder-form';
466
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
467
-                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::GET_PARAMETER_PATH])) {
468
-                    $this->storage->addDocumentFolder($request::$post);
469
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
470
-                    exit;
471
-                }
472
-            } else if ($relativeCmsUri == '/documents/edit-folder' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
473
-
474
-                $this->subTemplate = 'cms/documents/folder-form';
475
-                $folder = $this->storage->getDocumentFolderBySlug($request::$get[self::GET_PARAMETER_SLUG]);
476
-
477
-                $path = $request::$get[self::GET_PARAMETER_SLUG];
478
-                $path = explode('/', $path);
479
-                array_pop($path);
480
-                $path = implode('/', $path);
481
-
482
-                $request::$get[self::GET_PARAMETER_PATH] = '/' . $path;
483
-
484
-                if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post['content'])) {
485
-                    $this->storage->saveDocumentFolder($request::$post);
486
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
487
-                    exit;
488
-                }
489
-
490
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
491
-                $this->parameters['folder'] = $folder;
492
-            } else if ($relativeCmsUri == '/documents/delete-folder' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
493
-                $this->storage->deleteDocumentFolderBySlug($request::$get[self::GET_PARAMETER_SLUG]);
494
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
495
-                exit;
496
-            }
497
-        }
498
-
499
-        /**
500
-         * @param $request
501
-         * @param $relativeCmsUri
502
-         */
503
-        private function usersRouting($request, $relativeCmsUri)
504
-        {
505
-            if ($relativeCmsUri == '/configuration/users') {
506
-                $this->subTemplate = 'cms/configuration/users';
507
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
508
-                $this->parameters[self::PARAMETER_USERS] = $this->storage->getUsers();
509
-            } elseif ($relativeCmsUri == '/configuration/users/new') {
510
-                $this->subTemplate = 'cms/configuration/users-form';
511
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
512
-                if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
513
-                    $this->storage->addUser($request::$post);
514
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
515
-                    exit;
516
-                }
517
-            } elseif ($relativeCmsUri == '/configuration/users/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
518
-                $this->storage->deleteUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
519
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
520
-                exit;
521
-            } elseif ($relativeCmsUri == '/configuration/users/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
522
-                $this->subTemplate = 'cms/configuration/users-form';
523
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
524
-                $this->parameters[self::PARAMETER_USER] = $this->storage->getUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
525
-                if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
526
-                    $this->storage->saveUser($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
527
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
528
-                    exit;
529
-                }
530
-            }
531
-        }
532
-
533
-        /**
534
-         * @param $request
535
-         * @param $relativeCmsUri
536
-         */
537
-        private function documentTypesRouting($request, $relativeCmsUri)
538
-        {
539
-            if ($relativeCmsUri == '/configuration/document-types') {
540
-                $this->subTemplate = 'cms/configuration/document-types';
541
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
542
-                $this->parameters[self::PARAMETER_DOCUMENT_TYPES] = $this->storage->getDocumentTypes();
543
-            } elseif ($relativeCmsUri == '/configuration/document-types/new') {
544
-                $this->subTemplate = 'cms/configuration/document-types-form';
545
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
546
-                $bricks = $this->storage->getBricks();
547
-                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
548
-                    $this->storage->addDocumentType($request::$post);
549
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
550
-                    exit;
551
-                }
552
-                $this->parameters[self::PARAMETER_BRICKS] = $bricks;
553
-            } elseif ($relativeCmsUri == '/configuration/document-types/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
554
-                $this->subTemplate = 'cms/configuration/document-types-form';
555
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
556
-                $documentType = $this->storage->getDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG], false);
557
-                $bricks = $this->storage->getBricks();
558
-                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
559
-                    $this->storage->saveDocumentType($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
560
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
561
-                    exit;
562
-                }
563
-                $this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $documentType;
564
-                $this->parameters[self::PARAMETER_BRICKS] = $bricks;
565
-            } elseif ($relativeCmsUri == '/configuration/document-types/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
566
-                $this->storage->deleteDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG]);
567
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
568
-                exit;
569
-            }
570
-        }
571
-
572
-        /**
573
-         * @param $request
574
-         * @param $relativeCmsUri
575
-         */
576
-        private function bricksRouting($request, $relativeCmsUri)
577
-        {
578
-            if ($relativeCmsUri == '/configuration/bricks') {
579
-                $this->subTemplate = 'cms/configuration/bricks';
580
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
581
-                $this->parameters[self::PARAMETER_BRICKS] = $this->storage->getBricks();
582
-            } elseif ($relativeCmsUri == '/configuration/bricks/new') {
583
-                $this->subTemplate = 'cms/configuration/bricks-form';
584
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
585
-                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
586
-                    $this->storage->addBrick($request::$post);
587
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
588
-                    exit;
589
-                }
590
-            } elseif ($relativeCmsUri == '/configuration/bricks/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
591
-                $this->subTemplate = 'cms/configuration/bricks-form';
592
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
593
-                $brick = $this->storage->getBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
594
-                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
595
-                    $this->storage->saveBrick($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
596
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
597
-                    exit;
598
-                }
599
-                $this->parameters[self::PARAMETER_BRICK] = $brick;
600
-            } elseif ($relativeCmsUri == '/configuration/bricks/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
601
-                $this->storage->deleteBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
602
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
603
-                exit;
604
-            } elseif ($relativeCmsUri == '/configuration/image-set') {
605
-                $this->subTemplate = 'cms/configuration/image-set';
606
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
607
-                $this->parameters[self::PARAMETER_IMAGE_SET] = $this->storage->getImageSet();
608
-            }
609
-        }
610
-
611
-        /**
612
-         * @param $request
613
-         * @param $relativeCmsUri
614
-         */
615
-        private function imageSetRouting($request, $relativeCmsUri)
616
-        {
617
-            if ($relativeCmsUri == '/configuration/image-set') {
618
-                $this->subTemplate = 'cms/configuration/image-set';
619
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
620
-                $this->parameters[self::PARAMETER_IMAGE_SET] = $this->storage->getImageSet();
621
-            } elseif ($relativeCmsUri == '/configuration/image-set/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
622
-                $this->subTemplate = 'cms/configuration/image-set-form';
623
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
624
-                $imageSet = $this->storage->getImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
625
-                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
626
-                    $this->storage->saveImageSet($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
627
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
628
-                    exit;
629
-                }
630
-                $this->parameters[self::PARAMETER_IMAGE_SET] = $imageSet;
631
-            } elseif ($relativeCmsUri == '/configuration/image-set/new') {
632
-                $this->subTemplate = 'cms/configuration/image-set-form';
633
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
634
-                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
635
-                    $this->storage->addImageSet($request::$post);
636
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
637
-                    exit;
638
-                }
639
-            } elseif ($relativeCmsUri == '/configuration/image-set/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
640
-                $this->storage->deleteImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
641
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
642
-                exit;
643
-            }
644
-        }
645
-
646
-        /**
647
-         * @param $request
648
-         * @param $relativeCmsUri
649
-         */
650
-        private function applicationComponentRouting($request, $relativeCmsUri)
651
-        {
652
-            if ($relativeCmsUri == '/configuration/application-components') {
653
-                $this->subTemplate = 'cms/configuration/application-components';
654
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
655
-                $this->parameters['applicationComponents'] = $this->storage->getApplicationComponents();
656
-            } elseif ($relativeCmsUri == '/configuration/application-components/new') {
657
-                $this->subTemplate = 'cms/configuration/application-components-form';
658
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
659
-                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
660
-                    $this->storage->addApplicationComponent($request::$post);
661
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
662
-                    exit;
663
-                }
664
-            } elseif ($relativeCmsUri == '/configuration/application-components/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
665
-                $this->subTemplate = 'cms/configuration/application-components-form';
666
-                $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
667
-                $applicationComponent = $this->storage->getApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
668
-                if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
669
-                    $this->storage->saveApplicationComponent($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
670
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
671
-                    exit;
672
-                }
673
-                $this->parameters['applicationComponent'] = $applicationComponent;
674
-            } elseif ($relativeCmsUri == '/configuration/application-components/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
675
-                $this->storage->deleteApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
676
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
677
-                exit;
678
-            }
679
-        }
680
-
681
-        private function logOffRouting($request, $relativeCmsUri)
682
-        {
683
-            if ($relativeCmsUri == '/log-off') {
684
-                $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = null;
685
-                unset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]);
686
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX]);
687
-                exit;
688
-            }
689
-        }
690
-    }
12
+		protected $storage;
13
+
14
+		const INVALID_CREDENTIALS_MESSAGE = 'Invalid username / password combination';
15
+
16
+		const MAIN_NAV_CLASS = 'default';
17
+
18
+		const PARAMETER_BLACKLIST_IPS = 'blacklistIps';
19
+		const PARAMETER_BODY = 'body';
20
+		const PARAMETER_BRICK = 'brick';
21
+		const PARAMETER_BRICKS = 'bricks';
22
+		const PARAMETER_CMS_PREFIX = 'cmsPrefix';
23
+		const PARAMETER_DOCUMENT = 'document';
24
+		const PARAMETER_DOCUMENTS = 'documents';
25
+		const PARAMETER_DOCUMENT_TYPE = 'documentType';
26
+		const PARAMETER_DOCUMENT_TYPES = 'documentTypes';
27
+		const PARAMETER_ERROR_MESSAGE = 'errorMsg';
28
+		const PARAMETER_FILES = 'files';
29
+		const PARAMETER_IMAGE = 'image';
30
+		const PARAMETER_IMAGES = 'images';
31
+		const PARAMETER_IMAGE_SET = 'imageSet';
32
+		const PARAMETER_MAIN_NAV_CLASS = 'mainNavClass';
33
+		const PARAMETER_MY_BRICK_SLUG = 'myBrickSlug';
34
+		const PARAMETER_SITEMAP = 'sitemap';
35
+		const PARAMETER_SITEMAP_ITEM = 'sitemapItem';
36
+		const PARAMETER_SMALLEST_IMAGE = 'smallestImage';
37
+		const PARAMETER_STATIC = 'static';
38
+		const PARAMETER_USER = 'user';
39
+		const PARAMETER_USERS = 'users';
40
+		const PARAMETER_USER_RIGHTS = 'userRights';
41
+		const PARAMETER_WHITELIST_IPS = 'whitelistIps';
42
+
43
+		const POST_PARAMETER_COMPONENT = 'component';
44
+		const POST_PARAMETER_PASSWORD = 'password';
45
+		const POST_PARAMETER_SAVE = 'save';
46
+		const POST_PARAMETER_TEMPLATE = 'template';
47
+		const POST_PARAMETER_TITLE = 'title';
48
+		const POST_PARAMETER_USERNAME = 'username';
49
+
50
+		const GET_PARAMETER_PATH = 'path';
51
+		const GET_PARAMETER_SLUG = 'slug';
52
+
53
+		const FILES_PARAMETER_FILE = 'file';
54
+
55
+		const SESSION_PARAMETER_CLOUD_CONTROL = 'cloudcontrol';
56
+
57
+		const LOGIN_TEMPLATE_PATH = 'cms/login';
58
+
59
+		const CONTENT_TYPE_APPLICATION_JSON = 'Content-type:application/json';
60
+
61
+		protected $subTemplate = null;
62
+
63
+
64
+		/**
65
+		 * @param \library\storage\Storage $storage
66
+		 *
67
+		 * @return void
68
+		 */
69
+		public function run(Storage $storage)
70
+		{
71
+			$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::MAIN_NAV_CLASS;
72
+			$this->storage = $storage;
73
+
74
+			$remoteAddress = $_SERVER['REMOTE_ADDR'];
75
+			$this->checkWhiteList($remoteAddress);
76
+			$this->checkBlackList($remoteAddress);
77
+
78
+			$this->checkLogin();
79
+
80
+			$this->parameters[self::PARAMETER_USER_RIGHTS] = $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]->rights;
81
+
82
+			$this->routing();
83
+		}
84
+
85
+		/**
86
+		 * See if a user is logged or wants to log in and
87
+		 * takes appropriate actions.
88
+		 *
89
+		 * @throws \Exception
90
+		 */
91
+		protected function checkLogin()
92
+		{
93
+			$request = $this->request;
94
+
95
+			if (!isset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL])) {
96
+				if (isset($request::$post[self::POST_PARAMETER_USERNAME], $request::$post[self::POST_PARAMETER_PASSWORD])) {
97
+					$user = $this->storage->getUserByUsername($request::$post[self::POST_PARAMETER_USERNAME]);
98
+					$crypt = new Crypt();
99
+					if (empty($user)) {
100
+						$crypt->encrypt($request::$post[self::POST_PARAMETER_PASSWORD], 16); // Buy time, to avoid brute forcing
101
+						$this->parameters[self::PARAMETER_ERROR_MESSAGE] = self::INVALID_CREDENTIALS_MESSAGE;
102
+						$this->showLogin();
103
+					} else {
104
+						$salt = $user->salt;
105
+						$password = $user->password;
106
+
107
+						$passwordCorrect = $crypt->compare($request::$post[self::POST_PARAMETER_PASSWORD], $password, $salt);
108
+
109
+						if ($passwordCorrect) {
110
+							$_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = $user;
111
+						} else {
112
+							$this->parameters[self::PARAMETER_ERROR_MESSAGE] = self::INVALID_CREDENTIALS_MESSAGE;
113
+							$this->showLogin();
114
+						}
115
+					}
116
+				} else {
117
+					$this->showLogin();
118
+				}
119
+			}
120
+		}
121
+
122
+		/**
123
+		 * Overrides normal behaviour and only renders the
124
+		 * login screen
125
+		 *
126
+		 * @throws \Exception
127
+		 */
128
+		protected function showLogin()
129
+		{
130
+			$loginTemplatePath = self::LOGIN_TEMPLATE_PATH;
131
+			$this->renderTemplate($loginTemplatePath);
132
+			ob_end_flush();
133
+			exit;
134
+		}
135
+
136
+		/**
137
+		 * As an exception, to keep the initial file structure simple
138
+		 * the cms implements it's own routing, apart from the regular sitemap functionality
139
+		 *
140
+		 * @throws \Exception
141
+		 */
142
+		protected function routing()
143
+		{
144
+			$relativeCmsUri = $this->getRelativeCmsUri($this->request);
145
+
146
+			$userRights = $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]->rights;
147
+
148
+			if ($relativeCmsUri == '' || $relativeCmsUri == '/') {
149
+				$this->subTemplate = 'cms/dashboard';
150
+			}
151
+
152
+			$this->logOffRouting($this->request, $relativeCmsUri);
153
+
154
+			$this->apiRouting($relativeCmsUri);
155
+
156
+			if (in_array(self::PARAMETER_DOCUMENTS, $userRights)) {
157
+				$this->documentsRouting($this->request, $relativeCmsUri);
158
+			}
159
+
160
+			if (in_array(self::PARAMETER_SITEMAP, $userRights)) {
161
+				$this->sitemapRouting($this->request, $relativeCmsUri);
162
+			}
163
+
164
+			if (in_array(self::PARAMETER_IMAGES, $userRights)) {
165
+				$this->imagesRouting($this->request, $relativeCmsUri);
166
+			}
167
+
168
+			if (in_array(self::PARAMETER_FILES, $userRights)) {
169
+				$this->filesRouting($this->request, $relativeCmsUri);
170
+			}
171
+
172
+			if (in_array('configuration', $userRights)) {
173
+				$this->configurationRouting($this->request, $relativeCmsUri);
174
+			}
175
+
176
+			if ($this->subTemplate !== null) {
177
+				$this->parameters[self::PARAMETER_BODY] = $this->renderTemplate($this->subTemplate);
178
+			}
179
+		}
180
+
181
+		/**
182
+		 * @param $remoteAddress
183
+		 * @throws \Exception
184
+		 */
185
+		private function checkWhiteList($remoteAddress)
186
+		{
187
+			if (isset($this->parameters[self::PARAMETER_WHITELIST_IPS])) {
188
+				$whitelistIps = explode(',', $this->parameters[self::PARAMETER_WHITELIST_IPS]);
189
+				$whitelistIps = array_map("trim", $whitelistIps);
190
+				if (!in_array($remoteAddress, $whitelistIps)) {
191
+					throw new \Exception('Ip address ' . $remoteAddress . ' is not on whitelist');
192
+				}
193
+			}
194
+		}
195
+
196
+		/**
197
+		 * @param $remoteAddress
198
+		 * @throws \Exception
199
+		 */
200
+		private function checkBlackList($remoteAddress)
201
+		{
202
+			if (isset($this->parameters[self::PARAMETER_BLACKLIST_IPS])) {
203
+				$blacklistIps = explode(',', $this->parameters[self::PARAMETER_BLACKLIST_IPS]);
204
+				$blacklistIps = array_map("trim", $blacklistIps);
205
+				if (in_array($remoteAddress, $blacklistIps)) {
206
+					throw new \Exception('Ip address ' . $remoteAddress . ' is on blacklist');
207
+				}
208
+			}
209
+		}
210
+
211
+		/**
212
+		 * @param $request
213
+		 * @return mixed|string
214
+		 */
215
+		private function getRelativeCmsUri($request)
216
+		{
217
+			// TODO Use regex match parameter instead of calculating relative uri
218
+			$pos = strpos($request::$relativeUri, $this->parameters[self::PARAMETER_CMS_PREFIX]);
219
+			$relativeCmsUri = '/';
220
+			if ($pos !== false) {
221
+				$relativeCmsUri = substr_replace($request::$relativeUri, '', $pos, strlen($this->parameters[self::PARAMETER_CMS_PREFIX]));
222
+			}
223
+			return $relativeCmsUri;
224
+		}
225
+
226
+		/**
227
+		 * @param $request
228
+		 * @param $relativeCmsUri
229
+		 */
230
+		private function documentsRouting($request, $relativeCmsUri)
231
+		{
232
+			if ($relativeCmsUri == '/documents') {
233
+				$this->subTemplate = 'cms/documents';
234
+				$this->parameters[self::PARAMETER_DOCUMENTS] = $this->storage->getDocuments();
235
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
236
+			}
237
+			$this->documentRouting($request, $relativeCmsUri);
238
+			$this->folderRouting($request, $relativeCmsUri);
239
+		}
240
+
241
+		/**
242
+		 * @param \library\cc\Request $request
243
+		 * @param $relativeCmsUri
244
+		 */
245
+		private function sitemapRouting($request, $relativeCmsUri)
246
+		{
247
+			if ($relativeCmsUri == '/sitemap') {
248
+				$this->subTemplate = 'cms/sitemap';
249
+				if (isset($request::$post[self::POST_PARAMETER_SAVE])) {
250
+					$this->storage->saveSitemap($request::$post);
251
+				}
252
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
253
+				$this->parameters[self::PARAMETER_SITEMAP] = $this->storage->getSitemap();
254
+			} elseif ($relativeCmsUri == '/sitemap/new') {
255
+				$this->subTemplate = 'cms/sitemap/form';
256
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
257
+				if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
258
+					$this->storage->addSitemapItem($request::$post);
259
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
260
+					exit;
261
+				}
262
+			} elseif ($relativeCmsUri == '/sitemap/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
263
+				$this->subTemplate = 'cms/sitemap/form';
264
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
265
+				$sitemapItem = $this->storage->getSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
266
+				if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
267
+					$this->storage->saveSitemapItem($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
268
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
269
+					exit;
270
+				}
271
+				$this->parameters[self::PARAMETER_SITEMAP_ITEM] = $sitemapItem;
272
+			} elseif ($relativeCmsUri == '/sitemap/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
273
+				$this->storage->deleteSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
274
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
275
+				exit;
276
+			}
277
+		}
278
+
279
+		/**
280
+		 * @param $request
281
+		 * @param $relativeCmsUri
282
+		 */
283
+		private function imagesRouting($request, $relativeCmsUri)
284
+		{
285
+			if ($relativeCmsUri == '/images') {
286
+				$this->subTemplate = 'cms/images';
287
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
288
+				$this->parameters[self::PARAMETER_IMAGES] = $this->storage->getImages();
289
+				$this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
290
+			} elseif ($relativeCmsUri == '/images.json') {
291
+				header(self::CONTENT_TYPE_APPLICATION_JSON);
292
+				die(json_encode($this->storage->getImages()));
293
+			} elseif ($relativeCmsUri == '/images/new') {
294
+				$this->subTemplate = 'cms/images/form';
295
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
296
+				if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
297
+					$this->storage->addImage($_FILES[self::FILES_PARAMETER_FILE]);
298
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/images');
299
+					exit;
300
+				}
301
+			} elseif ($relativeCmsUri == '/images/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
302
+				$this->storage->deleteImageByName($request::$get[self::FILES_PARAMETER_FILE]);
303
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/images');
304
+				exit;
305
+			} elseif ($relativeCmsUri == '/images/show' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
306
+				$this->subTemplate = 'cms/images/show';
307
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
308
+				$this->parameters[self::PARAMETER_IMAGE] = $this->storage->getImageByName($request::$get[self::FILES_PARAMETER_FILE]);
309
+			}
310
+		}
311
+
312
+		/**
313
+		 * @param $relativeCmsUri
314
+		 */
315
+		private function apiRouting($relativeCmsUri)
316
+		{
317
+			if ($relativeCmsUri == '/images.json') {
318
+				header(self::CONTENT_TYPE_APPLICATION_JSON);
319
+				die(json_encode($this->storage->getImages()));
320
+			} elseif ($relativeCmsUri == '/files.json') {
321
+				header(self::CONTENT_TYPE_APPLICATION_JSON);
322
+				die(json_encode($this->storage->getFiles()));
323
+			} elseif ($relativeCmsUri == '/documents.json') {
324
+				header(self::CONTENT_TYPE_APPLICATION_JSON);
325
+				die(json_encode($this->storage->getDocuments()));
326
+			}
327
+		}
328
+
329
+		/**
330
+		 * @param $request
331
+		 * @param $relativeCmsUri
332
+		 */
333
+		private function filesRouting($request, $relativeCmsUri)
334
+		{
335
+			if ($relativeCmsUri == '/files') {
336
+				$this->subTemplate = 'cms/files';
337
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
338
+				$this->parameters[self::PARAMETER_FILES] = $this->storage->getFiles();
339
+			} elseif ($relativeCmsUri == '/files/new') {
340
+				$this->subTemplate = 'cms/files/form';
341
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
342
+				if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
343
+					$this->storage->addFile($_FILES[self::FILES_PARAMETER_FILE]);
344
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
345
+					exit;
346
+				}
347
+			} elseif ($relativeCmsUri == '/files/get' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
348
+				$this->downloadFile($request::$get[self::FILES_PARAMETER_FILE]);
349
+			} elseif ($relativeCmsUri == '/files/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
350
+				$this->storage->deleteFileByName($request::$get[self::FILES_PARAMETER_FILE]);
351
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
352
+				exit;
353
+			}
354
+		}
355
+
356
+		/**
357
+		 * @param $slug
358
+		 */
359
+		private function downloadFile($slug)
360
+		{
361
+			$file = $this->storage->getFileByName($slug);
362
+			$path = realpath(__DIR__ . '/../../www/files/');
363
+			$quoted = sprintf('"%s"', addcslashes(basename($path . '/' . $file->file), '"\\'));
364
+			$size = filesize($path . '/' . $file->file);
365
+
366
+			header('Content-Description: File Transfer');
367
+			header('Content-Type: ' . $file->type);
368
+			header('Content-Disposition: attachment; filename=' . $quoted);
369
+			header('Content-Transfer-Encoding: binary');
370
+			header('Connection: Keep-Alive');
371
+			header('Expires: 0');
372
+			header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
373
+			header('Pragma: public');
374
+			header('Content-Length: ' . $size);
375
+
376
+			readfile($path . '/' . $file->file);
377
+			exit;
378
+		}
379
+
380
+		/**
381
+		 * @param $request
382
+		 * @param $relativeCmsUri
383
+		 */
384
+		private function configurationRouting($request, $relativeCmsUri)
385
+		{
386
+			if ($relativeCmsUri == '/configuration') {
387
+				$this->subTemplate = 'cms/configuration';
388
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
389
+			}
390
+
391
+			$this->usersRouting($request, $relativeCmsUri);
392
+			$this->documentTypesRouting($request, $relativeCmsUri);
393
+			$this->bricksRouting($request, $relativeCmsUri);
394
+			$this->imageSetRouting($request, $relativeCmsUri);
395
+			$this->applicationComponentRouting($request, $relativeCmsUri);
396
+		}
397
+
398
+		/**
399
+		 * @param $request
400
+		 * @param $relativeCmsUri
401
+		 * @throws \Exception
402
+		 */
403
+		private function documentRouting($request, $relativeCmsUri)
404
+		{
405
+			if ($relativeCmsUri == '/documents/new-document' && isset($request::$get[self::GET_PARAMETER_PATH])) {
406
+				$this->subTemplate = 'cms/documents/document-form';
407
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
408
+				$this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
409
+				if (isset($request::$get[self::PARAMETER_DOCUMENT_TYPE])) {
410
+					if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$get[self::PARAMETER_DOCUMENT_TYPE], $request::$get[self::GET_PARAMETER_PATH])) {
411
+						$this->storage->addDocument($request::$post);
412
+						header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
413
+						exit;
414
+					}
415
+					$this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $this->storage->getDocumentTypeBySlug($request::$get[self::PARAMETER_DOCUMENT_TYPE], true);
416
+					$this->parameters[self::PARAMETER_BRICKS] = $this->storage->getBricks();
417
+				} else {
418
+					$documentTypes = $this->storage->getDocumentTypes();
419
+					if (count($documentTypes) < 1) {
420
+						throw new \Exception('No Document Types defined yet. <a href="' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types/new">Please do so first.</a>');
421
+					}
422
+					$this->parameters[self::PARAMETER_DOCUMENT_TYPES] = $documentTypes;
423
+				}
424
+			} elseif ($relativeCmsUri == '/documents/edit-document' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
425
+				$this->subTemplate = 'cms/documents/document-form';
426
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
427
+				$this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
428
+				if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$get[self::GET_PARAMETER_SLUG])) {
429
+					$this->storage->saveDocument($request::$post);
430
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
431
+					exit;
432
+				}
433
+				$this->parameters[self::PARAMETER_DOCUMENT] = $this->storage->getDocumentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
434
+				$request::$get[self::GET_PARAMETER_PATH] = $request::$get[self::GET_PARAMETER_SLUG];
435
+				$this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $this->storage->getDocumentTypeBySlug($this->parameters[self::PARAMETER_DOCUMENT]->documentTypeSlug, true);
436
+				$this->parameters[self::PARAMETER_BRICKS] = $this->storage->getBricks();
437
+			} elseif ($relativeCmsUri == '/documents/get-brick' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
438
+				$this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
439
+				$this->subTemplate = 'cms/documents/brick';
440
+				$this->parameters[self::PARAMETER_BRICK] = $this->storage->getBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
441
+				$this->parameters[self::PARAMETER_STATIC] = $request::$get[self::PARAMETER_STATIC] === 'true';
442
+				if (isset($request::$get[self::PARAMETER_MY_BRICK_SLUG])) {
443
+					$this->parameters[self::PARAMETER_MY_BRICK_SLUG] = $request::$get[self::PARAMETER_MY_BRICK_SLUG];
444
+				}
445
+				$result = new \stdClass();
446
+				$result->body = $this->renderTemplate('cms/documents/brick');
447
+				$result->rteList = isset($GLOBALS['rteList']) ? $GLOBALS['rteList'] : array();
448
+				ob_clean();
449
+				header(self::CONTENT_TYPE_APPLICATION_JSON);
450
+				die(json_encode($result));
451
+			} else if ($relativeCmsUri == '/documents/delete-document' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
452
+				$this->storage->deleteDocumentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
453
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
454
+				exit;
455
+			}
456
+		}
457
+
458
+		/**
459
+		 * @param $request
460
+		 * @param $relativeCmsUri
461
+		 */
462
+		private function folderRouting($request, $relativeCmsUri)
463
+		{
464
+			if ($relativeCmsUri == '/documents/new-folder' && isset($request::$get[self::GET_PARAMETER_PATH])) {
465
+				$this->subTemplate = 'cms/documents/folder-form';
466
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
467
+				if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::GET_PARAMETER_PATH])) {
468
+					$this->storage->addDocumentFolder($request::$post);
469
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
470
+					exit;
471
+				}
472
+			} else if ($relativeCmsUri == '/documents/edit-folder' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
473
+
474
+				$this->subTemplate = 'cms/documents/folder-form';
475
+				$folder = $this->storage->getDocumentFolderBySlug($request::$get[self::GET_PARAMETER_SLUG]);
476
+
477
+				$path = $request::$get[self::GET_PARAMETER_SLUG];
478
+				$path = explode('/', $path);
479
+				array_pop($path);
480
+				$path = implode('/', $path);
481
+
482
+				$request::$get[self::GET_PARAMETER_PATH] = '/' . $path;
483
+
484
+				if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post['content'])) {
485
+					$this->storage->saveDocumentFolder($request::$post);
486
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
487
+					exit;
488
+				}
489
+
490
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
491
+				$this->parameters['folder'] = $folder;
492
+			} else if ($relativeCmsUri == '/documents/delete-folder' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
493
+				$this->storage->deleteDocumentFolderBySlug($request::$get[self::GET_PARAMETER_SLUG]);
494
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
495
+				exit;
496
+			}
497
+		}
498
+
499
+		/**
500
+		 * @param $request
501
+		 * @param $relativeCmsUri
502
+		 */
503
+		private function usersRouting($request, $relativeCmsUri)
504
+		{
505
+			if ($relativeCmsUri == '/configuration/users') {
506
+				$this->subTemplate = 'cms/configuration/users';
507
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
508
+				$this->parameters[self::PARAMETER_USERS] = $this->storage->getUsers();
509
+			} elseif ($relativeCmsUri == '/configuration/users/new') {
510
+				$this->subTemplate = 'cms/configuration/users-form';
511
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
512
+				if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
513
+					$this->storage->addUser($request::$post);
514
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
515
+					exit;
516
+				}
517
+			} elseif ($relativeCmsUri == '/configuration/users/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
518
+				$this->storage->deleteUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
519
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
520
+				exit;
521
+			} elseif ($relativeCmsUri == '/configuration/users/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
522
+				$this->subTemplate = 'cms/configuration/users-form';
523
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
524
+				$this->parameters[self::PARAMETER_USER] = $this->storage->getUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
525
+				if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
526
+					$this->storage->saveUser($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
527
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
528
+					exit;
529
+				}
530
+			}
531
+		}
532
+
533
+		/**
534
+		 * @param $request
535
+		 * @param $relativeCmsUri
536
+		 */
537
+		private function documentTypesRouting($request, $relativeCmsUri)
538
+		{
539
+			if ($relativeCmsUri == '/configuration/document-types') {
540
+				$this->subTemplate = 'cms/configuration/document-types';
541
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
542
+				$this->parameters[self::PARAMETER_DOCUMENT_TYPES] = $this->storage->getDocumentTypes();
543
+			} elseif ($relativeCmsUri == '/configuration/document-types/new') {
544
+				$this->subTemplate = 'cms/configuration/document-types-form';
545
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
546
+				$bricks = $this->storage->getBricks();
547
+				if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
548
+					$this->storage->addDocumentType($request::$post);
549
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
550
+					exit;
551
+				}
552
+				$this->parameters[self::PARAMETER_BRICKS] = $bricks;
553
+			} elseif ($relativeCmsUri == '/configuration/document-types/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
554
+				$this->subTemplate = 'cms/configuration/document-types-form';
555
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
556
+				$documentType = $this->storage->getDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG], false);
557
+				$bricks = $this->storage->getBricks();
558
+				if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
559
+					$this->storage->saveDocumentType($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
560
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
561
+					exit;
562
+				}
563
+				$this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $documentType;
564
+				$this->parameters[self::PARAMETER_BRICKS] = $bricks;
565
+			} elseif ($relativeCmsUri == '/configuration/document-types/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
566
+				$this->storage->deleteDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG]);
567
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
568
+				exit;
569
+			}
570
+		}
571
+
572
+		/**
573
+		 * @param $request
574
+		 * @param $relativeCmsUri
575
+		 */
576
+		private function bricksRouting($request, $relativeCmsUri)
577
+		{
578
+			if ($relativeCmsUri == '/configuration/bricks') {
579
+				$this->subTemplate = 'cms/configuration/bricks';
580
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
581
+				$this->parameters[self::PARAMETER_BRICKS] = $this->storage->getBricks();
582
+			} elseif ($relativeCmsUri == '/configuration/bricks/new') {
583
+				$this->subTemplate = 'cms/configuration/bricks-form';
584
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
585
+				if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
586
+					$this->storage->addBrick($request::$post);
587
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
588
+					exit;
589
+				}
590
+			} elseif ($relativeCmsUri == '/configuration/bricks/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
591
+				$this->subTemplate = 'cms/configuration/bricks-form';
592
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
593
+				$brick = $this->storage->getBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
594
+				if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
595
+					$this->storage->saveBrick($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
596
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
597
+					exit;
598
+				}
599
+				$this->parameters[self::PARAMETER_BRICK] = $brick;
600
+			} elseif ($relativeCmsUri == '/configuration/bricks/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
601
+				$this->storage->deleteBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
602
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
603
+				exit;
604
+			} elseif ($relativeCmsUri == '/configuration/image-set') {
605
+				$this->subTemplate = 'cms/configuration/image-set';
606
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
607
+				$this->parameters[self::PARAMETER_IMAGE_SET] = $this->storage->getImageSet();
608
+			}
609
+		}
610
+
611
+		/**
612
+		 * @param $request
613
+		 * @param $relativeCmsUri
614
+		 */
615
+		private function imageSetRouting($request, $relativeCmsUri)
616
+		{
617
+			if ($relativeCmsUri == '/configuration/image-set') {
618
+				$this->subTemplate = 'cms/configuration/image-set';
619
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
620
+				$this->parameters[self::PARAMETER_IMAGE_SET] = $this->storage->getImageSet();
621
+			} elseif ($relativeCmsUri == '/configuration/image-set/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
622
+				$this->subTemplate = 'cms/configuration/image-set-form';
623
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
624
+				$imageSet = $this->storage->getImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
625
+				if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
626
+					$this->storage->saveImageSet($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
627
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
628
+					exit;
629
+				}
630
+				$this->parameters[self::PARAMETER_IMAGE_SET] = $imageSet;
631
+			} elseif ($relativeCmsUri == '/configuration/image-set/new') {
632
+				$this->subTemplate = 'cms/configuration/image-set-form';
633
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
634
+				if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
635
+					$this->storage->addImageSet($request::$post);
636
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
637
+					exit;
638
+				}
639
+			} elseif ($relativeCmsUri == '/configuration/image-set/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
640
+				$this->storage->deleteImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
641
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
642
+				exit;
643
+			}
644
+		}
645
+
646
+		/**
647
+		 * @param $request
648
+		 * @param $relativeCmsUri
649
+		 */
650
+		private function applicationComponentRouting($request, $relativeCmsUri)
651
+		{
652
+			if ($relativeCmsUri == '/configuration/application-components') {
653
+				$this->subTemplate = 'cms/configuration/application-components';
654
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
655
+				$this->parameters['applicationComponents'] = $this->storage->getApplicationComponents();
656
+			} elseif ($relativeCmsUri == '/configuration/application-components/new') {
657
+				$this->subTemplate = 'cms/configuration/application-components-form';
658
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
659
+				if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
660
+					$this->storage->addApplicationComponent($request::$post);
661
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
662
+					exit;
663
+				}
664
+			} elseif ($relativeCmsUri == '/configuration/application-components/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
665
+				$this->subTemplate = 'cms/configuration/application-components-form';
666
+				$this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
667
+				$applicationComponent = $this->storage->getApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
668
+				if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
669
+					$this->storage->saveApplicationComponent($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
670
+					header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
671
+					exit;
672
+				}
673
+				$this->parameters['applicationComponent'] = $applicationComponent;
674
+			} elseif ($relativeCmsUri == '/configuration/application-components/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
675
+				$this->storage->deleteApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
676
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
677
+				exit;
678
+			}
679
+		}
680
+
681
+		private function logOffRouting($request, $relativeCmsUri)
682
+		{
683
+			if ($relativeCmsUri == '/log-off') {
684
+				$_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = null;
685
+				unset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]);
686
+				header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX]);
687
+				exit;
688
+			}
689
+		}
690
+	}
691 691
 }
692 692
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +40 added lines, -40 removed lines patch added patch discarded remove patch
@@ -188,7 +188,7 @@  discard block
 block discarded – undo
188 188
                 $whitelistIps = explode(',', $this->parameters[self::PARAMETER_WHITELIST_IPS]);
189 189
                 $whitelistIps = array_map("trim", $whitelistIps);
190 190
                 if (!in_array($remoteAddress, $whitelistIps)) {
191
-                    throw new \Exception('Ip address ' . $remoteAddress . ' is not on whitelist');
191
+                    throw new \Exception('Ip address '.$remoteAddress.' is not on whitelist');
192 192
                 }
193 193
             }
194 194
         }
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
                 $blacklistIps = explode(',', $this->parameters[self::PARAMETER_BLACKLIST_IPS]);
204 204
                 $blacklistIps = array_map("trim", $blacklistIps);
205 205
                 if (in_array($remoteAddress, $blacklistIps)) {
206
-                    throw new \Exception('Ip address ' . $remoteAddress . ' is on blacklist');
206
+                    throw new \Exception('Ip address '.$remoteAddress.' is on blacklist');
207 207
                 }
208 208
             }
209 209
         }
@@ -256,7 +256,7 @@  discard block
 block discarded – undo
256 256
                 $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_SITEMAP;
257 257
                 if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
258 258
                     $this->storage->addSitemapItem($request::$post);
259
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
259
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/sitemap');
260 260
                     exit;
261 261
                 }
262 262
             } elseif ($relativeCmsUri == '/sitemap/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
@@ -265,13 +265,13 @@  discard block
 block discarded – undo
265 265
                 $sitemapItem = $this->storage->getSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
266 266
                 if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::POST_PARAMETER_TEMPLATE], $request::$post[self::POST_PARAMETER_COMPONENT])) {
267 267
                     $this->storage->saveSitemapItem($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
268
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
268
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/sitemap');
269 269
                     exit;
270 270
                 }
271 271
                 $this->parameters[self::PARAMETER_SITEMAP_ITEM] = $sitemapItem;
272 272
             } elseif ($relativeCmsUri == '/sitemap/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
273 273
                 $this->storage->deleteSitemapItemBySlug($request::$get[self::GET_PARAMETER_SLUG]);
274
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/sitemap');
274
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/sitemap');
275 275
                 exit;
276 276
             }
277 277
         }
@@ -295,12 +295,12 @@  discard block
 block discarded – undo
295 295
                 $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_IMAGES;
296 296
                 if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
297 297
                     $this->storage->addImage($_FILES[self::FILES_PARAMETER_FILE]);
298
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/images');
298
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/images');
299 299
                     exit;
300 300
                 }
301 301
             } elseif ($relativeCmsUri == '/images/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
302 302
                 $this->storage->deleteImageByName($request::$get[self::FILES_PARAMETER_FILE]);
303
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/images');
303
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/images');
304 304
                 exit;
305 305
             } elseif ($relativeCmsUri == '/images/show' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
306 306
                 $this->subTemplate = 'cms/images/show';
@@ -341,14 +341,14 @@  discard block
 block discarded – undo
341 341
                 $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_FILES;
342 342
                 if (isset($_FILES[self::FILES_PARAMETER_FILE])) {
343 343
                     $this->storage->addFile($_FILES[self::FILES_PARAMETER_FILE]);
344
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
344
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/files');
345 345
                     exit;
346 346
                 }
347 347
             } elseif ($relativeCmsUri == '/files/get' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
348 348
                 $this->downloadFile($request::$get[self::FILES_PARAMETER_FILE]);
349 349
             } elseif ($relativeCmsUri == '/files/delete' && isset($request::$get[self::FILES_PARAMETER_FILE])) {
350 350
                 $this->storage->deleteFileByName($request::$get[self::FILES_PARAMETER_FILE]);
351
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/files');
351
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/files');
352 352
                 exit;
353 353
             }
354 354
         }
@@ -359,21 +359,21 @@  discard block
 block discarded – undo
359 359
         private function downloadFile($slug)
360 360
         {
361 361
             $file = $this->storage->getFileByName($slug);
362
-            $path = realpath(__DIR__ . '/../../www/files/');
363
-            $quoted = sprintf('"%s"', addcslashes(basename($path . '/' . $file->file), '"\\'));
364
-            $size = filesize($path . '/' . $file->file);
362
+            $path = realpath(__DIR__.'/../../www/files/');
363
+            $quoted = sprintf('"%s"', addcslashes(basename($path.'/'.$file->file), '"\\'));
364
+            $size = filesize($path.'/'.$file->file);
365 365
 
366 366
             header('Content-Description: File Transfer');
367
-            header('Content-Type: ' . $file->type);
368
-            header('Content-Disposition: attachment; filename=' . $quoted);
367
+            header('Content-Type: '.$file->type);
368
+            header('Content-Disposition: attachment; filename='.$quoted);
369 369
             header('Content-Transfer-Encoding: binary');
370 370
             header('Connection: Keep-Alive');
371 371
             header('Expires: 0');
372 372
             header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
373 373
             header('Pragma: public');
374
-            header('Content-Length: ' . $size);
374
+            header('Content-Length: '.$size);
375 375
 
376
-            readfile($path . '/' . $file->file);
376
+            readfile($path.'/'.$file->file);
377 377
             exit;
378 378
         }
379 379
 
@@ -409,7 +409,7 @@  discard block
 block discarded – undo
409 409
                 if (isset($request::$get[self::PARAMETER_DOCUMENT_TYPE])) {
410 410
                     if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$get[self::PARAMETER_DOCUMENT_TYPE], $request::$get[self::GET_PARAMETER_PATH])) {
411 411
                         $this->storage->addDocument($request::$post);
412
-                        header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
412
+                        header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/documents');
413 413
                         exit;
414 414
                     }
415 415
                     $this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $this->storage->getDocumentTypeBySlug($request::$get[self::PARAMETER_DOCUMENT_TYPE], true);
@@ -417,7 +417,7 @@  discard block
 block discarded – undo
417 417
                 } else {
418 418
                     $documentTypes = $this->storage->getDocumentTypes();
419 419
                     if (count($documentTypes) < 1) {
420
-                        throw new \Exception('No Document Types defined yet. <a href="' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types/new">Please do so first.</a>');
420
+                        throw new \Exception('No Document Types defined yet. <a href="'.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/document-types/new">Please do so first.</a>');
421 421
                     }
422 422
                     $this->parameters[self::PARAMETER_DOCUMENT_TYPES] = $documentTypes;
423 423
                 }
@@ -427,7 +427,7 @@  discard block
 block discarded – undo
427 427
                 $this->parameters[self::PARAMETER_SMALLEST_IMAGE] = $this->storage->getSmallestImageSet()->slug;
428 428
                 if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$get[self::GET_PARAMETER_SLUG])) {
429 429
                     $this->storage->saveDocument($request::$post);
430
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
430
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/documents');
431 431
                     exit;
432 432
                 }
433 433
                 $this->parameters[self::PARAMETER_DOCUMENT] = $this->storage->getDocumentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
@@ -450,7 +450,7 @@  discard block
 block discarded – undo
450 450
                 die(json_encode($result));
451 451
             } else if ($relativeCmsUri == '/documents/delete-document' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
452 452
                 $this->storage->deleteDocumentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
453
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
453
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/documents');
454 454
                 exit;
455 455
             }
456 456
         }
@@ -466,7 +466,7 @@  discard block
 block discarded – undo
466 466
                 $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = self::PARAMETER_DOCUMENTS;
467 467
                 if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post[self::GET_PARAMETER_PATH])) {
468 468
                     $this->storage->addDocumentFolder($request::$post);
469
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
469
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/documents');
470 470
                     exit;
471 471
                 }
472 472
             } else if ($relativeCmsUri == '/documents/edit-folder' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
@@ -479,11 +479,11 @@  discard block
 block discarded – undo
479 479
                 array_pop($path);
480 480
                 $path = implode('/', $path);
481 481
 
482
-                $request::$get[self::GET_PARAMETER_PATH] = '/' . $path;
482
+                $request::$get[self::GET_PARAMETER_PATH] = '/'.$path;
483 483
 
484 484
                 if (isset($request::$post[self::POST_PARAMETER_TITLE], $request::$post['content'])) {
485 485
                     $this->storage->saveDocumentFolder($request::$post);
486
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
486
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/documents');
487 487
                     exit;
488 488
                 }
489 489
 
@@ -491,7 +491,7 @@  discard block
 block discarded – undo
491 491
                 $this->parameters['folder'] = $folder;
492 492
             } else if ($relativeCmsUri == '/documents/delete-folder' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
493 493
                 $this->storage->deleteDocumentFolderBySlug($request::$get[self::GET_PARAMETER_SLUG]);
494
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/documents');
494
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/documents');
495 495
                 exit;
496 496
             }
497 497
         }
@@ -511,12 +511,12 @@  discard block
 block discarded – undo
511 511
                 $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
512 512
                 if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
513 513
                     $this->storage->addUser($request::$post);
514
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
514
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/users');
515 515
                     exit;
516 516
                 }
517 517
             } elseif ($relativeCmsUri == '/configuration/users/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
518 518
                 $this->storage->deleteUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
519
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
519
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/users');
520 520
                 exit;
521 521
             } elseif ($relativeCmsUri == '/configuration/users/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
522 522
                 $this->subTemplate = 'cms/configuration/users-form';
@@ -524,7 +524,7 @@  discard block
 block discarded – undo
524 524
                 $this->parameters[self::PARAMETER_USER] = $this->storage->getUserBySlug($request::$get[self::GET_PARAMETER_SLUG]);
525 525
                 if (isset($_POST[self::POST_PARAMETER_USERNAME])) {
526 526
                     $this->storage->saveUser($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
527
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/users');
527
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/users');
528 528
                     exit;
529 529
                 }
530 530
             }
@@ -546,7 +546,7 @@  discard block
 block discarded – undo
546 546
                 $bricks = $this->storage->getBricks();
547 547
                 if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
548 548
                     $this->storage->addDocumentType($request::$post);
549
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
549
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/document-types');
550 550
                     exit;
551 551
                 }
552 552
                 $this->parameters[self::PARAMETER_BRICKS] = $bricks;
@@ -557,14 +557,14 @@  discard block
 block discarded – undo
557 557
                 $bricks = $this->storage->getBricks();
558 558
                 if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
559 559
                     $this->storage->saveDocumentType($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
560
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
560
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/document-types');
561 561
                     exit;
562 562
                 }
563 563
                 $this->parameters[self::PARAMETER_DOCUMENT_TYPE] = $documentType;
564 564
                 $this->parameters[self::PARAMETER_BRICKS] = $bricks;
565 565
             } elseif ($relativeCmsUri == '/configuration/document-types/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
566 566
                 $this->storage->deleteDocumentTypeBySlug($request::$get[self::GET_PARAMETER_SLUG]);
567
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/document-types');
567
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/document-types');
568 568
                 exit;
569 569
             }
570 570
         }
@@ -584,7 +584,7 @@  discard block
 block discarded – undo
584 584
                 $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
585 585
                 if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
586 586
                     $this->storage->addBrick($request::$post);
587
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
587
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/bricks');
588 588
                     exit;
589 589
                 }
590 590
             } elseif ($relativeCmsUri == '/configuration/bricks/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
@@ -593,13 +593,13 @@  discard block
 block discarded – undo
593 593
                 $brick = $this->storage->getBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
594 594
                 if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
595 595
                     $this->storage->saveBrick($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
596
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
596
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/bricks');
597 597
                     exit;
598 598
                 }
599 599
                 $this->parameters[self::PARAMETER_BRICK] = $brick;
600 600
             } elseif ($relativeCmsUri == '/configuration/bricks/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
601 601
                 $this->storage->deleteBrickBySlug($request::$get[self::GET_PARAMETER_SLUG]);
602
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/bricks');
602
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/bricks');
603 603
                 exit;
604 604
             } elseif ($relativeCmsUri == '/configuration/image-set') {
605 605
                 $this->subTemplate = 'cms/configuration/image-set';
@@ -624,7 +624,7 @@  discard block
 block discarded – undo
624 624
                 $imageSet = $this->storage->getImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
625 625
                 if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
626 626
                     $this->storage->saveImageSet($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
627
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
627
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/image-set');
628 628
                     exit;
629 629
                 }
630 630
                 $this->parameters[self::PARAMETER_IMAGE_SET] = $imageSet;
@@ -633,12 +633,12 @@  discard block
 block discarded – undo
633 633
                 $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
634 634
                 if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
635 635
                     $this->storage->addImageSet($request::$post);
636
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
636
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/image-set');
637 637
                     exit;
638 638
                 }
639 639
             } elseif ($relativeCmsUri == '/configuration/image-set/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
640 640
                 $this->storage->deleteImageSetBySlug($request::$get[self::GET_PARAMETER_SLUG]);
641
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/image-set');
641
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/image-set');
642 642
                 exit;
643 643
             }
644 644
         }
@@ -658,7 +658,7 @@  discard block
 block discarded – undo
658 658
                 $this->parameters[self::PARAMETER_MAIN_NAV_CLASS] = 'configuration';
659 659
                 if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
660 660
                     $this->storage->addApplicationComponent($request::$post);
661
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
661
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/application-components');
662 662
                     exit;
663 663
                 }
664 664
             } elseif ($relativeCmsUri == '/configuration/application-components/edit' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
@@ -667,13 +667,13 @@  discard block
 block discarded – undo
667 667
                 $applicationComponent = $this->storage->getApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
668 668
                 if (isset($request::$post[self::POST_PARAMETER_TITLE])) {
669 669
                     $this->storage->saveApplicationComponent($request::$get[self::GET_PARAMETER_SLUG], $request::$post);
670
-                    header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
670
+                    header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/application-components');
671 671
                     exit;
672 672
                 }
673 673
                 $this->parameters['applicationComponent'] = $applicationComponent;
674 674
             } elseif ($relativeCmsUri == '/configuration/application-components/delete' && isset($request::$get[self::GET_PARAMETER_SLUG])) {
675 675
                 $this->storage->deleteApplicationComponentBySlug($request::$get[self::GET_PARAMETER_SLUG]);
676
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX] . '/configuration/application-components');
676
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX].'/configuration/application-components');
677 677
                 exit;
678 678
             }
679 679
         }
@@ -683,7 +683,7 @@  discard block
 block discarded – undo
683 683
             if ($relativeCmsUri == '/log-off') {
684 684
                 $_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL] = null;
685 685
                 unset($_SESSION[self::SESSION_PARAMETER_CLOUD_CONTROL]);
686
-                header('Location: ' . $request::$subfolders . $this->parameters[self::PARAMETER_CMS_PREFIX]);
686
+                header('Location: '.$request::$subfolders.$this->parameters[self::PARAMETER_CMS_PREFIX]);
687 687
                 exit;
688 688
             }
689 689
         }
Please login to merge, or discard this patch.