| Total Complexity | 47 |
| Total Lines | 258 |
| Duplicated Lines | 0 % |
| Changes | 2 | ||
| 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 |
||
| 26 | class BaseResourceFileAction |
||
| 27 | { |
||
| 28 | public static function setLinks(AbstractResource $resource, $em): void |
||
| 126 | } |
||
| 127 | } |
||
| 128 | } |
||
| 129 | /** |
||
| 130 | * Function loaded when creating a resource using the api, then the ResourceListener is executed. |
||
| 131 | */ |
||
| 132 | protected function handleCreateRequest(AbstractResource $resource, ResourceRepository $resourceRepository, Request $request): array |
||
| 133 | { |
||
| 134 | //error_log('handleCreateRequest'); |
||
| 135 | $contentData = $request->getContent(); |
||
| 136 | if (!empty($contentData)) { |
||
| 137 | $contentData = json_decode($contentData, true); |
||
| 138 | $title = $contentData['title'] ?? ''; |
||
| 139 | $comment = $contentData['comment'] ?? ''; |
||
| 140 | $parentResourceNodeId = $contentData['parentResourceNodeId'] ?? 0; |
||
| 141 | $fileType = $contentData['filetype'] ?? ''; |
||
| 142 | $resourceLinkList = $contentData['resourceLinkList'] ?? []; |
||
| 143 | } else { |
||
| 144 | $title = $request->get('title'); |
||
| 145 | $comment = $request->get('comment'); |
||
| 146 | $parentResourceNodeId = (int) $request->get('parentResourceNodeId'); |
||
| 147 | $fileType = $request->get('filetype'); |
||
| 148 | $resourceLinkList = $request->get('resourceLinkList', []); |
||
| 149 | if (!empty($resourceLinkList)) { |
||
| 150 | $resourceLinkList = false === strpos($resourceLinkList, '[') ? json_decode('['.$resourceLinkList.']', true) : json_decode($resourceLinkList, true); |
||
| 151 | if (empty($resourceLinkList)) { |
||
| 152 | $message = 'resourceLinkList is not a valid json. Use for example: [{"cid":1, "visibility":1}]'; |
||
| 153 | |||
| 154 | throw new InvalidArgumentException($message); |
||
| 155 | } |
||
| 156 | } |
||
| 157 | } |
||
| 158 | |||
| 159 | if (empty($fileType)) { |
||
| 160 | throw new Exception('filetype needed: folder or file'); |
||
| 161 | } |
||
| 162 | |||
| 163 | if (0 === $parentResourceNodeId) { |
||
| 164 | throw new Exception('parentResourceNodeId int value needed'); |
||
| 165 | } |
||
| 166 | |||
| 167 | $resource->setParentResourceNode($parentResourceNodeId); |
||
| 168 | |||
| 169 | switch ($fileType) { |
||
| 170 | case 'file': |
||
| 171 | $content = ''; |
||
| 172 | if ($request->request->has('contentFile')) { |
||
| 173 | $content = $request->request->get('contentFile'); |
||
| 174 | } |
||
| 175 | $fileParsed = false; |
||
| 176 | // File upload. |
||
| 177 | if ($request->files->count() > 0) { |
||
| 178 | if (!$request->files->has('uploadFile')) { |
||
| 179 | throw new BadRequestHttpException('"uploadFile" is required'); |
||
| 180 | } |
||
| 181 | |||
| 182 | /** @var UploadedFile $uploadedFile */ |
||
| 183 | $uploadedFile = $request->files->get('uploadFile'); |
||
| 184 | $title = $uploadedFile->getClientOriginalName(); |
||
| 185 | $resource->setUploadFile($uploadedFile); |
||
| 186 | $fileParsed = true; |
||
| 187 | } |
||
| 188 | |||
| 189 | // Get data in content and create a HTML file. |
||
| 190 | if (!$fileParsed && $content) { |
||
| 191 | $uploadedFile = $resourceRepository->createTempUploadedFile($title.'.html', 'text/html', $content); |
||
| 192 | $resource->setUploadFile($uploadedFile); |
||
| 193 | $fileParsed = true; |
||
| 194 | } |
||
| 195 | |||
| 196 | if (!$fileParsed) { |
||
| 197 | throw new InvalidArgumentException('filetype was set to "file" but not upload file found'); |
||
| 198 | } |
||
| 199 | |||
| 200 | break; |
||
| 201 | case 'folder': |
||
| 202 | break; |
||
| 203 | } |
||
| 204 | |||
| 205 | if (empty($title)) { |
||
| 206 | throw new InvalidArgumentException('title is required'); |
||
| 207 | } |
||
| 208 | |||
| 209 | $resource->setResourceName($title); |
||
| 210 | |||
| 211 | // Set resource link list if exists. |
||
| 212 | if (!empty($resourceLinkList)) { |
||
| 213 | $resource->setResourceLinkArray($resourceLinkList); |
||
| 214 | } |
||
| 215 | |||
| 216 | return [ |
||
| 217 | 'filetype' => $fileType, |
||
| 218 | 'comment' => $comment, |
||
| 219 | ]; |
||
| 220 | } |
||
| 221 | |||
| 222 | protected function handleUpdateRequest(AbstractResource $resource, ResourceRepository $repo, Request $request, EntityManager $em) |
||
| 284 | } |
||
| 285 | } |
||
| 286 |
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.