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

DocumentRouting::documentRouting()   B

Complexity

Conditions 13
Paths 7

Size

Total Lines 16
Code Lines 13

Duplication

Lines 7
Ratio 43.75 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 13
eloc 13
nc 7
nop 3
dl 7
loc 16
rs 7.3977
c 1
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
}