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

DocumentRouting::__construct()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 7
c 1
b 0
f 0
nc 2
nop 3
dl 0
loc 10
rs 9.4285
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 ($relativeCmsUri == '/documents/edit-document' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
44
			$this->editDocumentRoute($request, $cmsComponent);
45
        } elseif ($relativeCmsUri == '/documents/get-brick' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
46
			$this->getBrickRoute($request, $cmsComponent);
47 View Code Duplication
        } else if ($relativeCmsUri == '/documents/delete-document' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
48
			$this->deleteDocumentRoute($request, $cmsComponent);
49
        } else if ($relativeCmsUri == '/documents/publish-document' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
50
			$this->publishDocumentRoute($request, $cmsComponent);
51
		} else if ($relativeCmsUri == '/documents/unpublish-document' && isset($request::$get[CmsComponent::GET_PARAMETER_SLUG])) {
52
			$this->unpublishDocumentRoute($request, $cmsComponent);
53
		}
54
    }
55
56
    /**
57
     * @param $request
58
     * @param $relativeCmsUri
59
     * @param CmsComponent $cmsComponent
60
     */
61
    private function folderRouting($request, $relativeCmsUri, $cmsComponent)
62
    {
63 View Code Duplication
        if ($relativeCmsUri == '/documents/new-folder' && isset($request::$get[CmsComponent::GET_PARAMETER_PATH])) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

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