| 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.