Passed
Push — develop ( 1cfb3a...ca7c61 )
by Jens
03:03
created

DocumentRouting::publishDocumentRoute()   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 2
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 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
    }
31
32
33
    /**
34
     * @param $request
35
     * @param $relativeCmsUri
36
     * @param CmsComponent $cmsComponent
37
     * @throws \Exception
38
     */
39
    private function documentRouting($request, $relativeCmsUri, $cmsComponent)
40
    {
41
		if ($relativeCmsUri == '/documents/new-document' && isset($request::$get[CmsComponent::GET_PARAMETER_PATH])) {
42
			$this->documentNewRoute($request, $cmsComponent);
43
		} elseif (isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])){
44
			switch ($relativeCmsUri) {
45
				case '/documents/edit-document': $this->editDocumentRoute($request, $cmsComponent); break;
46
				case '/documents/get-brick': $this->getBrickRoute($request, $cmsComponent); break;
47
				case '/documents/delete-document': $this->deleteDocumentRoute($request, $cmsComponent); break;
48
				case '/documents/publish-document': $this->publishDocumentRoute($request, $cmsComponent); break;
49
				case '/documents/unpublish-document': $this->unpublishDocumentRoute($request, $cmsComponent); break;
50
			}
51
		}
52
    }
53
54
    /**
55
     * @param $request
56
     * @param $relativeCmsUri
57
     * @param CmsComponent $cmsComponent
58
     */
59
    private function folderRouting($request, $relativeCmsUri, $cmsComponent)
60
    {
61
        if ($relativeCmsUri == '/documents/new-folder' && isset($request::$get[CmsComponent::GET_PARAMETER_PATH])) {
62
			$this->newFolderRoute($request, $cmsComponent);
63
        } else if ($relativeCmsUri == '/documents/edit-folder' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
64
			$this->editFolderRoute($request, $cmsComponent);
65
        } else if ($relativeCmsUri == '/documents/delete-folder' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
66
			$this->deleteFolderRoute($request, $cmsComponent);
67
        }
68
    }
69
70
	/**
71
	 * @param $request
72
	 * @param CmsComponent $cmsComponent
73
	 *
74
	 * @throws \Exception
75
	 */
76
	private function documentNewRoute($request, $cmsComponent)
77
	{
78
		$cmsComponent->subTemplate = 'cms/documents/document-form';
79
		$cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
80
		$cmsComponent->setParameter(CmsComponent::PARAMETER_SMALLEST_IMAGE, $cmsComponent->storage->getImageSet()->getSmallestImageSet()->slug);
81
		if (isset($request::$get[CmsComponent::PARAMETER_DOCUMENT_TYPE])) {
82
			if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$get[CmsComponent::PARAMETER_DOCUMENT_TYPE], $request::$get[CmsComponent::GET_PARAMETER_PATH])) {
83
				$cmsComponent->storage->getDocuments()->addDocument($request::$post);
84
				header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
85
				exit;
86
			}
87
			$cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENT_TYPE, $cmsComponent->storage->getDocumentTypes()->getDocumentTypeBySlug($request::$get[CmsComponent::PARAMETER_DOCUMENT_TYPE], true));
88
			$cmsComponent->setParameter(CmsComponent::PARAMETER_BRICKS, $cmsComponent->storage->getBricks()->getBricks());
89
		} else {
90
			$documentTypes = $cmsComponent->storage->getDocumentTypes()->getDocumentTypes();
91
			if (count($documentTypes) < 1) {
92
				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>');
93
			}
94
			$cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENT_TYPES, $documentTypes);
95
		}
96
	}
97
98
	/**
99
	 * @param $request
100
	 * @param CmsComponent $cmsComponent
101
	 */
102
	private function editDocumentRoute($request, $cmsComponent)
103
	{
104
		$cmsComponent->subTemplate = 'cms/documents/document-form';
105
		$cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
106
		$cmsComponent->setParameter(CmsComponent::PARAMETER_SMALLEST_IMAGE, $cmsComponent->storage->getImageSet()->getSmallestImageSet()->slug);
107
		if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
108
			$cmsComponent->storage->getDocuments()->saveDocument($request::$post);
109
			header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
110
			exit;
111
		}
112
		$cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENT, $cmsComponent->storage->getDocuments()->getDocumentBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG], 'unpublished'));
113
		$request::$get[CmsComponent::GET_PARAMETER_PATH] = $request::$get[CmsComponent::GET_PARAMETER_SLUG];
114
		$cmsComponent->setParameter(CmsComponent::PARAMETER_DOCUMENT_TYPE, $cmsComponent->storage->getDocumentTypes()->getDocumentTypeBySlug($cmsComponent->getParameter(CmsComponent::PARAMETER_DOCUMENT)->documentTypeSlug, true));
115
		$cmsComponent->setParameter(CmsComponent::PARAMETER_BRICKS, $cmsComponent->storage->getBricks()->getBricks());
116
	}
117
118
	/**
119
	 * @param $request
120
	 * @param CmsComponent $cmsComponent
121
	 */
122
	private function getBrickRoute($request, $cmsComponent)
123
	{
124
		$cmsComponent->setParameter(CmsComponent::PARAMETER_SMALLEST_IMAGE, $cmsComponent->storage->getImageSet()->getSmallestImageSet()->slug);
125
		$cmsComponent->subTemplate = 'cms/documents/brick';
126
		$cmsComponent->setParameter(CmsComponent::PARAMETER_BRICK, $cmsComponent->storage->getBricks()->getBrickBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]));
127
		$cmsComponent->setParameter(CmsComponent::PARAMETER_STATIC, $request::$get[CmsComponent::PARAMETER_STATIC] === 'true');
128
		if (isset($request::$get[CmsComponent::PARAMETER_MY_BRICK_SLUG])) {
129
			$cmsComponent->setParameter(CmsComponent::PARAMETER_MY_BRICK_SLUG, $request::$get[CmsComponent::PARAMETER_MY_BRICK_SLUG]);
130
		}
131
		$result = new \stdClass();
132
		$result->body = $cmsComponent->renderTemplate('cms/documents/brick');
133
		$result->rteList = isset($GLOBALS['rteList']) ? $GLOBALS['rteList'] : array();
134
		ob_clean();
135
		header(CmsComponent::CONTENT_TYPE_APPLICATION_JSON);
136
		die(json_encode($result));
137
	}
138
139
	/**
140
	 * @param $request
141
	 * @param CmsComponent $cmsComponent
142
	 */
143
	private function deleteDocumentRoute($request, $cmsComponent)
144
	{
145
		$cmsComponent->storage->getDocuments()->deleteDocumentBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
146
		header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
147
		exit;
148
	}
149
150
	/**
151
	 * @param $request
152
	 * @param CmsComponent $cmsComponent
153
	 */
154
	private function newFolderRoute($request, $cmsComponent)
155
	{
156
		$cmsComponent->subTemplate = 'cms/documents/folder-form';
157
		$cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
158
		if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$post[CmsComponent::GET_PARAMETER_PATH])) {
159
			$cmsComponent->storage->addDocumentFolder($request::$post);
160
			header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
161
			exit;
162
		}
163
	}
164
165
	/**
166
	 * @param $request
167
	 * @param CmsComponent $cmsComponent
168
	 */
169
	private function editFolderRoute($request, $cmsComponent)
170
	{
171
		$cmsComponent->subTemplate = 'cms/documents/folder-form';
172
		$folder = $cmsComponent->storage->getDocumentFolderBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
173
174
		$path = $request::$get[CmsComponent::GET_PARAMETER_SLUG];
175
		$path = explode('/', $path);
176
		array_pop($path);
177
		$path = implode('/', $path);
178
179
		$request::$get[CmsComponent::GET_PARAMETER_PATH] = '/' . $path;
180
181
		if (isset($request::$post[CmsComponent::POST_PARAMETER_TITLE], $request::$post['content'])) {
182
			$cmsComponent->storage->saveDocumentFolder($request::$post);
183
			header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
184
			exit;
185
		}
186
187
		$cmsComponent->setParameter(CmsComponent::PARAMETER_MAIN_NAV_CLASS, CmsComponent::PARAMETER_DOCUMENTS);
188
		$cmsComponent->setParameter(CmsComponent::PARAMETER_FOLDER, $folder);
189
	}
190
191
	/**
192
	 * @param $request
193
	 * @param CmsComponent $cmsComponent
194
	 */
195
	private function deleteFolderRoute($request, $cmsComponent)
196
	{
197
		$cmsComponent->storage->deleteDocumentFolderBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
198
		header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
199
		exit;
200
	}
201
202
	/**
203
	 * @param $request
204
	 * @param CmsComponent $cmsComponent
205
	 */
206
	private function publishDocumentRoute($request, $cmsComponent)
207
	{
208
		$cmsComponent->storage->publishDocumentBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
209
		header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
210
		exit;
211
	}
212
213
	/**
214
	 * @param $request
215
	 * @param CmsComponent $cmsComponent
216
	 */
217
	private function unpublishDocumentRoute($request, $cmsComponent)
218
	{
219
		$cmsComponent->storage->unpublishDocumentBySlug($request::$get[CmsComponent::GET_PARAMETER_SLUG]);
220
		header('Location: ' . $request::$subfolders . $cmsComponent->getParameter(CmsComponent::PARAMETER_CMS_PREFIX) . '/documents');
221
		exit;
222
	}
223
}