Passed
Push — develop ( 96efe9...5c0545 )
by Jens
02:56
created

DocumentRouting::valuelistsRoute()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * User: Jens
4
 * Date: 29-1-2017
5
 * Time: 15:23
6
 */
7
8
namespace CloudControl\Cms\components\cms;
9
10
11
use CloudControl\Cms\components\CmsComponent;
12
13
class DocumentRouting implements CmsRouting
14
{
15
    /**
16
     * DocumentRouting constructor.
17
     * @param $request
18
     * @param $relativeCmsUri
19
     * @param CmsComponent $cmsComponent
20
     */
21
    public function __construct($request, $relativeCmsUri, $cmsComponent)
22
    {
23
        if ($relativeCmsUri == '/documents') {
24
            $cmsComponent->subTemplate = 'documents';
25
            $cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENTS, $cmsComponent->storage->getDocuments()->getDocumentsWithState());
26
            $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
27
        }
28
        $this->documentRouting($request, $relativeCmsUri, $cmsComponent);
29
        $this->folderRouting($request, $relativeCmsUri, $cmsComponent);
30
        $this->valuelistsRouting($request, $relativeCmsUri, $cmsComponent);
31
    }
32
33
34
    /**
35
     * @param $request
36
     * @param $relativeCmsUri
37
     * @param CmsComponent $cmsComponent
38
     * @throws \Exception
39
     */
40
    private function documentRouting($request, $relativeCmsUri, $cmsComponent)
41
    {
42
        if ($relativeCmsUri == '/documents/new-document' && isset($request::$get[CmsComponent::GET_PARAMETER_PATH])) {
43
            $this->documentNewRoute($request, $cmsComponent);
44
        } elseif (isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
45
            switch ($relativeCmsUri) {
46
                case '/documents/edit-document':
47
                    $this->editDocumentRoute($request, $cmsComponent);
48
                    break;
49
                case '/documents/get-brick':
50
                    $this->getBrickRoute($request, $cmsComponent);
51
                    break;
52
                case '/documents/delete-document':
53
                    $this->deleteDocumentRoute($request, $cmsComponent);
54
                    break;
55
                case '/documents/publish-document':
56
                    $this->publishDocumentRoute($request, $cmsComponent);
57
                    break;
58
                case '/documents/unpublish-document':
59
                    $this->unpublishDocumentRoute($request, $cmsComponent);
60
                    break;
61
            }
62
        }
63
    }
64
65
    /**
66
     * @param $request
67
     * @param $relativeCmsUri
68
     * @param CmsComponent $cmsComponent
69
     */
70
    private function folderRouting($request, $relativeCmsUri, $cmsComponent)
71
    {
72
        if ($relativeCmsUri == '/documents/new-folder' && isset($request::$get[CmsComponent::GET_PARAMETER_PATH])) {
73
            $this->newFolderRoute($request, $cmsComponent);
74
        } else if ($relativeCmsUri == '/documents/edit-folder' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
75
            $this->editFolderRoute($request, $cmsComponent);
76
        } else if ($relativeCmsUri == '/documents/delete-folder' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
77
            $this->deleteFolderRoute($request, $cmsComponent);
78
        }
79
    }
80
81
    private function valuelistsRouting($request, $relativeCmsUri, $cmsComponent)
82
    {
83
        if ($relativeCmsUri == '/documents/valuelists') {
84
            $this->valuelistsRoute($cmsComponent);
85
        } elseif ($relativeCmsUri == '/documents/valuelists/new') {
86
            $this->newValuelistRoute($request, $cmsComponent);
87
        } elseif ($relativeCmsUri == '/documents/valuelists/edit' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
88
            $this->editValuelistRoute($request, $cmsComponent);
89
        } elseif ($relativeCmsUri == '/documents/valuelists/delete' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
90
            $this->deleteValuelistRoute($request, $cmsComponent);
91
        }
92
    }
93
94
    /**
95
     * @param $request
96
     * @param CmsComponent $cmsComponent
97
     *
98
     * @throws \Exception
99
     */
100
    private function documentNewRoute($request, $cmsComponent)
101
    {
102
        $cmsComponent->subTemplate = 'documents/document-form';
103
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
104
        $cmsComponent->setParameter(CmsComponent::PARAMETER_SMALLEST_IMAGE, $cmsComponent->storage->getImageSet()->getSmallestImageSet()->slug);
105
        if (isset($request::$get[CmsComponent::PARAMETER_DOCUMENT_TYPE])) {
106
            if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$get[CmsComponent::PARAMETER_DOCUMENT_TYPE], $request::$get[CmsComponent::GET_PARAMETER_PATH])) {
107
                $cmsComponent->storage->getDocuments()->addDocument($request::$post);
108
                header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
109
                exit;
110
            }
111
            $cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENT_TYPE, $cmsComponent->storage->getDocumentTypes()->getDocumentTypeBySlug($request::$get[CmsComponent::PARAMETER_DOCUMENT_TYPE], true));
112
            $cmsComponent->setParameter(CmsComponent::PARAMETER_BRICKS, $cmsComponent->storage->getBricks()->getBricks());
113
        } else {
114
            $documentTypes = $cmsComponent->storage->getDocumentTypes()->getDocumentTypes();
115
            if (count($documentTypes) < 1) {
116
                throw new \Exception('No Document Types defined yet. <a href="' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/configuration/document-types/new">Please do so first.</a>');
117
            }
118
            $cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENT_TYPES, $documentTypes);
119
        }
120
    }
121
122
    /**
123
     * @param $request
124
     * @param CmsComponent $cmsComponent
125
     */
126
    private function editDocumentRoute($request, $cmsComponent)
127
    {
128
        $cmsComponent->subTemplate = 'documents/document-form';
129
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
130
        $cmsComponent->setParameter(CmsComponent::PARAMETER_SMALLEST_IMAGE, $cmsComponent->storage->getImageSet()->getSmallestImageSet()->slug);
131
        if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
132
            $cmsComponent->storage->getDocuments()->saveDocument($request::$post);
133
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
134
            exit;
135
        }
136
        $cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENT, $cmsComponent->storage->getDocuments()->getDocumentBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG], 'unpublished'));
137
        $request::$get[CmsComponent::GET_PARAMETER_PATH] = $request::$get[CmsComponent::GET_PARAMETER_SLUG];
138
        $cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENT_TYPE, $cmsComponent->storage->getDocumentTypes()->getDocumentTypeBySlug($cmsComponent->getParameter(CmsComponent::PARAMETER_DOCUMENT)->documentTypeSlug, true));
139
        $cmsComponent->setParameter(CmsComponent::PARAMETER_BRICKS, $cmsComponent->storage->getBricks()->getBricks());
140
    }
141
142
    /**
143
     * @param $request
144
     * @param CmsComponent $cmsComponent
145
     */
146
    private function getBrickRoute($request, $cmsComponent)
147
    {
148
        $cmsComponent->setParameter(CmsComponent::PARAMETER_SMALLEST_IMAGE, $cmsComponent->storage->getImageSet()->getSmallestImageSet()->slug);
149
        $cmsComponent->subTemplate = 'documents/brick';
150
        $cmsComponent->setParameter(CmsComponent::PARAMETER_BRICK, $cmsComponent->storage->getBricks()->getBrickBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]));
151
        $cmsComponent->setParameter(CmsComponent::PARAMETER_STATIC, $request::$get[CmsComponent::PARAMETER_STATIC] === 'true');
152
        if (isset($request::$get[CmsComponent::PARAMETER_MY_BRICK_SLUG])) {
153
            $cmsComponent->setParameter(CmsComponent::PARAMETER_MY_BRICK_SLUG, $request::$get[CmsComponent::PARAMETER_MY_BRICK_SLUG]);
154
        }
155
        $result = new \stdClass();
156
        $result->body = $cmsComponent->renderTemplate('cms/documents/brick');
157
        $result->rteList = isset($GLOBALS['rteList']) ? $GLOBALS['rteList'] : array();
158
        ob_clean();
159
        header(CmsComponent::CONTENT_TYPE_APPLICATION_JSON);
160
        die(json_encode($result));
161
    }
162
163
    /**
164
     * @param $request
165
     * @param CmsComponent $cmsComponent
166
     */
167
    private function deleteDocumentRoute($request, $cmsComponent)
168
    {
169
        $cmsComponent->storage->getDocuments()->deleteDocumentBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
170
        header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
171
        exit;
172
    }
173
174
    /**
175
     * @param $request
176
     * @param CmsComponent $cmsComponent
177
     */
178
    private function newFolderRoute($request, $cmsComponent)
179
    {
180
        $cmsComponent->subTemplate = 'documents/folder-form';
181
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
182
        if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$post[CmsComponent::GET_PARAMETER_PATH])) {
183
            $cmsComponent->storage->addDocumentFolder($request::$post);
184
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
185
            exit;
186
        }
187
    }
188
189
    /**
190
     * @param $request
191
     * @param CmsComponent $cmsComponent
192
     */
193
    private function editFolderRoute($request, $cmsComponent)
194
    {
195
        $cmsComponent->subTemplate = 'documents/folder-form';
196
        $folder = $cmsComponent->storage->getDocumentFolderBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
197
198
        $path = $request::$get[CmsComponent::GET_PARAMETER_SLUG];
199
        $path = explode('/', $path);
200
        array_pop($path);
201
        $path = implode('/', $path);
202
203
        $request::$get[CmsComponent::GET_PARAMETER_PATH] = '/' . $path;
204
205
        if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$post['content'])) {
206
            $cmsComponent->storage->saveDocumentFolder($request::$post);
207
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
208
            exit;
209
        }
210
211
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
212
        $cmsComponent->setParameter(CmsComponent::PARAMETER_FOLDER, $folder);
213
    }
214
215
    /**
216
     * @param $request
217
     * @param CmsComponent $cmsComponent
218
     */
219
    private function deleteFolderRoute($request, $cmsComponent)
220
    {
221
        $cmsComponent->storage->deleteDocumentFolderBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
222
        header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
223
        exit;
224
    }
225
226
    /**
227
     * @param $request
228
     * @param CmsComponent $cmsComponent
229
     */
230
    private function publishDocumentRoute($request, $cmsComponent)
231
    {
232
        $cmsComponent->storage->publishDocumentBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
233
        header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
234
        exit;
235
    }
236
237
    /**
238
     * @param $request
239
     * @param CmsComponent $cmsComponent
240
     */
241
    private function unpublishDocumentRoute($request, $cmsComponent)
242
    {
243
        $cmsComponent->storage->unpublishDocumentBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
244
        header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
245
        exit;
246
    }
247
248
    private function valuelistsRoute($cmsComponent)
249
    {
250
        $cmsComponent->subTemplate = 'documents/valuelists';
251
        $cmsComponent->setParameter(CmsComponent::PARAMETER_VALUELISTS, $cmsComponent->storage->getValuelists()->getValuelists());
252
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
253
    }
254
255
    private function newValuelistRoute($request, $cmsComponent)
256
    {
257
        $cmsComponent->subTemplate = 'documents/valuelist-form';
258
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
259
        if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE])) {
260
            $cmsComponent->storage->getValuelists()->addValuelist($request::$post);
261
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents/valuelists');
262
            exit;
263
        }
264
    }
265
266
    private function editValuelistRoute($request, $cmsComponent)
267
    {
268
        $cmsComponent->subTemplate = 'documents/valuelist-form';
269
        $folder = $cmsComponent->storage->getValuelists()->getValuelistBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
270
271
        if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
272
            $cmsComponent->storage->getValuelists()->saveValuelist($request::$get[CmsComponent::GET_PARAMETER_SLUG], $request::$post);
273
            header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents/valuelists');
274
            exit;
275
        }
276
277
        $cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
278
        $cmsComponent->setParameter(CmsComponent::PARAMETER_VALUELIST, $folder);
279
    }
280
281
    private function deleteValuelistRoute($request, $cmsComponent)
282
    {
283
        $cmsComponent->storage->getValuelists()->deleteValuelistBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
284
        header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents/valuelists');
285
        exit;
286
    }
287
}