Total Complexity | 45 |
Total Lines | 338 |
Duplicated Lines | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
Complex classes like BaseResourceFileAction often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use BaseResourceFileAction, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
24 | class BaseResourceFileAction |
||
25 | { |
||
26 | public function setLinks(AbstractResource $resource, $em): void |
||
91 | //$em->persist($resourceNode); |
||
92 | //$em->persist($resource->getResourceNode()); |
||
93 | } |
||
94 | } |
||
95 | } |
||
96 | |||
97 | //$em->persist($resource); |
||
98 | |||
99 | // Use by Chamilo not api platform. |
||
100 | /*$links = $resource->getResourceLinkEntityList(); |
||
101 | if ($links) { |
||
102 | error_log('$resource->getResourceLinkEntityList()'); |
||
103 | foreach ($links as $link) { |
||
104 | $rights = []; |
||
105 | switch ($link->getVisibility()) { |
||
106 | case ResourceLink::VISIBILITY_PENDING: |
||
107 | case ResourceLink::VISIBILITY_DRAFT: |
||
108 | $editorMask = ResourceNodeVoter::getEditorMask(); |
||
109 | $resourceRight = new ResourceRight(); |
||
110 | $resourceRight |
||
111 | ->setMask($editorMask) |
||
112 | ->setRole(ResourceNodeVoter::ROLE_CURRENT_COURSE_TEACHER) |
||
113 | ; |
||
114 | $rights[] = $resourceRight; |
||
115 | |||
116 | break; |
||
117 | } |
||
118 | |||
119 | if (!empty($rights)) { |
||
120 | foreach ($rights as $right) { |
||
121 | $link->addResourceRight($right); |
||
122 | } |
||
123 | } |
||
124 | //error_log('link adding to node: '.$resource->getResourceNode()->getId()); |
||
125 | //error_log('link with user : '.$link->getUser()->getUsername()); |
||
126 | $resource->getResourceNode()->addResourceLink($link); |
||
127 | |||
128 | $em->persist($link); |
||
129 | } |
||
130 | }*/ |
||
131 | } |
||
132 | /** |
||
133 | * Function loaded when creating a resource using the api, then the ResourceListener is executed. |
||
134 | */ |
||
135 | protected function handleCreateRequest(AbstractResource $resource, Request $request, EntityManager $em): array |
||
136 | { |
||
137 | error_log('handleCreateRequest'); |
||
138 | $contentData = $request->getContent(); |
||
139 | if (!empty($contentData)) { |
||
140 | $contentData = json_decode($contentData, true); |
||
141 | $title = $contentData['title'] ?? ''; |
||
142 | $comment = $contentData['comment'] ?? ''; |
||
143 | $parentResourceNodeId = $contentData['parentResourceNodeId'] ?? 0; |
||
144 | $fileType = $contentData['filetype'] ?? ''; |
||
145 | $resourceLinkList = $contentData['resourceLinkList'] ?? []; |
||
146 | } else { |
||
147 | $title = $request->get('title'); |
||
148 | $comment = $request->get('comment'); |
||
149 | $parentResourceNodeId = (int) $request->get('parentResourceNodeId'); |
||
150 | $fileType = $request->get('filetype'); |
||
151 | $resourceLinkList = $request->get('resourceLinkList', []); |
||
152 | if (!empty($resourceLinkList)) { |
||
153 | $resourceLinkList = false === strpos($resourceLinkList, '[') ? json_decode('['.$resourceLinkList.']', true) : json_decode($resourceLinkList, true); |
||
154 | if (empty($resourceLinkList)) { |
||
155 | $message = 'resourceLinkList is not a valid json. Use for example: [{"cid":1, "visibility":1}]'; |
||
156 | |||
157 | throw new InvalidArgumentException($message); |
||
158 | } |
||
159 | } |
||
160 | } |
||
161 | |||
162 | if (empty($fileType)) { |
||
163 | throw new Exception('filetype needed: folder or file'); |
||
164 | } |
||
165 | |||
166 | if (0 === $parentResourceNodeId) { |
||
167 | throw new Exception('parentResourceNodeId int value needed'); |
||
168 | } |
||
169 | |||
170 | $resource->setParentResourceNode($parentResourceNodeId); |
||
171 | |||
172 | switch ($fileType) { |
||
173 | case 'file': |
||
174 | $content = ''; |
||
175 | if ($request->request->has('contentFile')) { |
||
176 | $content = $request->request->get('contentFile'); |
||
177 | } |
||
178 | $fileParsed = false; |
||
179 | // File upload. |
||
180 | if ($request->files->count() > 0) { |
||
181 | if (!$request->files->has('uploadFile')) { |
||
182 | throw new BadRequestHttpException('"uploadFile" is required'); |
||
183 | } |
||
184 | |||
185 | /** @var UploadedFile $uploadedFile */ |
||
186 | $uploadedFile = $request->files->get('uploadFile'); |
||
187 | $title = $uploadedFile->getClientOriginalName(); |
||
188 | $resource->setUploadFile($uploadedFile); |
||
189 | $fileParsed = true; |
||
190 | } |
||
191 | |||
192 | // Get data in content and create a HTML file. |
||
193 | if (!$fileParsed && $content) { |
||
194 | $handle = tmpfile(); |
||
195 | fwrite($handle, $content); |
||
196 | $meta = stream_get_meta_data($handle); |
||
197 | $file = new UploadedFile($meta['uri'], $title.'.html', 'text/html', null, true); |
||
198 | $resource->setUploadFile($file); |
||
199 | $fileParsed = true; |
||
200 | } |
||
201 | |||
202 | if (!$fileParsed) { |
||
203 | throw new InvalidArgumentException('filetype was set to "file" but not upload file found'); |
||
204 | } |
||
205 | |||
206 | break; |
||
207 | case 'folder': |
||
208 | break; |
||
209 | } |
||
210 | |||
211 | if (empty($title)) { |
||
212 | throw new InvalidArgumentException('title is required'); |
||
213 | } |
||
214 | |||
215 | $resource->setResourceName($title); |
||
216 | |||
217 | // Set resource link list if exists. |
||
218 | if (!empty($resourceLinkList)) { |
||
219 | $resource->setResourceLinkArray($resourceLinkList); |
||
220 | $this->setLinks($resource, $em); |
||
221 | } |
||
222 | |||
223 | return [ |
||
224 | 'filetype' => $fileType, |
||
225 | 'comment' => $comment, |
||
226 | ]; |
||
227 | } |
||
228 | |||
229 | protected function handleUpdateRequest(AbstractResource $resource, ResourceRepository $repo, Request $request, EntityManager $em) |
||
362 | } |
||
363 | } |
||
364 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.