Passed
Push — master ( 3f6c85...9c6499 )
by Jens
02:40
created

DocumentRouting::valuelistsRouting()   B

Complexity

Conditions 7
Paths 5

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 9
c 0
b 0
f 0
nc 5
nop 3
dl 0
loc 12
rs 8.2222
1
<?php
2
/**
3
 * User: Jens
4
 * Date: 29-1-2017
5
 * Time: 15:23
6
 */
7
8
namespace library\components\cms;
9
10
11
use library\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 = 'cms/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 = 'cms/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 = 'cms/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 = 'cms/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 = 'cms/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 = 'cms/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 = 'cms/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 = 'cms/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 = 'cms/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
}