Passed
Push — develop ( 5c0545...627810 )
by Jens
02:44
created

DocumentRouting::documentRouting()   B

Complexity

Conditions 9
Paths 8

Size

Total Lines 14
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

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