| Conditions | 15 |
| Paths | 5 |
| Total Lines | 179 |
| Code Lines | 119 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
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:
If many parameters/temporary variables are present:
| 1 | <?php |
||
| 84 | public function handle(ServerRequestInterface $request): ResponseInterface |
||
| 85 | { |
||
| 86 | $this->fixTreePreferences(); |
||
| 87 | $data_filesystem = Registry::filesystem()->data(); |
||
| 88 | |||
| 89 | $files = Validator::queryParams($request)->isInArray(['local', 'external', 'unused'])->string('files'); |
||
| 90 | |||
| 91 | // Files within this folder |
||
| 92 | $media_folders = $this->media_file_service->allMediaFolders($data_filesystem)->all(); |
||
| 93 | $media_folder = Validator::queryParams($request)->isInArray($media_folders)->string('media_folder'); |
||
| 94 | |||
| 95 | // Show sub-folders within $media_folder |
||
| 96 | $subfolders = Validator::queryParams($request)->isInArray(['include', 'exclude'])->string('subfolders'); |
||
| 97 | |||
| 98 | $search_columns = ['multimedia_file_refn', 'descriptive_title']; |
||
| 99 | |||
| 100 | $sort_columns = [ |
||
| 101 | 0 => 'multimedia_file_refn', |
||
| 102 | 2 => new Expression(DB::concat(['descriptive_title', 'multimedia_file_refn'])), |
||
| 103 | ]; |
||
| 104 | |||
| 105 | // Convert a row from the database into a row for datatables |
||
| 106 | $callback = function (object $row): array { |
||
| 107 | $tree = $this->tree_service->find((int) $row->m_file); |
||
| 108 | $media = Registry::mediaFactory()->make($row->m_id, $tree, $row->m_gedcom); |
||
| 109 | assert($media instanceof Media); |
||
| 110 | |||
| 111 | $is_http = str_starts_with($row->multimedia_file_refn, 'http://'); |
||
| 112 | $is_https = str_starts_with($row->multimedia_file_refn, 'https://'); |
||
| 113 | |||
| 114 | if ($is_http || $is_https) { |
||
| 115 | return [ |
||
| 116 | '<a href="' . e($row->multimedia_file_refn) . '">' . e($row->multimedia_file_refn) . '</a>', |
||
| 117 | view('icons/mime', ['type' => Mime::DEFAULT_TYPE]), |
||
| 118 | $this->mediaObjectInfo($media), |
||
| 119 | ]; |
||
| 120 | } |
||
| 121 | |||
| 122 | try { |
||
| 123 | $path = $row->media_folder . $row->multimedia_file_refn; |
||
| 124 | |||
| 125 | try { |
||
| 126 | $mime_type = Registry::filesystem()->data()->mimeType($path); |
||
| 127 | } catch (UnableToRetrieveMetadata) { |
||
| 128 | $mime_type = Mime::DEFAULT_TYPE; |
||
| 129 | } |
||
| 130 | |||
| 131 | if (str_starts_with($mime_type, 'image/')) { |
||
| 132 | $url = route(AdminMediaFileThumbnail::class, ['path' => $path]); |
||
| 133 | $img = '<img src="' . e($url) . '">'; |
||
| 134 | } else { |
||
| 135 | $img = view('icons/mime', ['type' => $mime_type]); |
||
| 136 | } |
||
| 137 | |||
| 138 | $url = route(AdminMediaFileDownload::class, ['path' => $path]); |
||
| 139 | $img = '<a href="' . e($url) . '" type="' . $mime_type . '" class="gallery">' . $img . '</a>'; |
||
| 140 | } catch (UnableToReadFile) { |
||
| 141 | $url = route(AdminMediaFileThumbnail::class, ['path' => $path]); |
||
| 142 | $img = '<img src="' . e($url) . '">'; |
||
| 143 | } |
||
| 144 | |||
| 145 | return [ |
||
| 146 | e($row->multimedia_file_refn), |
||
| 147 | $img, |
||
| 148 | $this->mediaObjectInfo($media), |
||
| 149 | ]; |
||
| 150 | }; |
||
| 151 | |||
| 152 | switch ($files) { |
||
| 153 | case 'local': |
||
| 154 | $query = DB::table('media_file') |
||
| 155 | ->join('media', static function (JoinClause $join): void { |
||
| 156 | $join |
||
| 157 | ->on('media.m_file', '=', 'media_file.m_file') |
||
| 158 | ->on('media.m_id', '=', 'media_file.m_id'); |
||
| 159 | }) |
||
| 160 | ->leftJoin('gedcom_setting', static function (JoinClause $join): void { |
||
| 161 | $join |
||
| 162 | ->on('gedcom_setting.gedcom_id', '=', 'media.m_file') |
||
| 163 | ->where('setting_name', '=', 'MEDIA_DIRECTORY'); |
||
| 164 | }) |
||
| 165 | ->where('multimedia_file_refn', 'NOT LIKE', 'http://%') |
||
| 166 | ->where('multimedia_file_refn', 'NOT LIKE', 'https://%') |
||
| 167 | ->select([ |
||
| 168 | 'media.*', |
||
| 169 | 'multimedia_file_refn', |
||
| 170 | 'descriptive_title', |
||
| 171 | 'setting_value AS media_folder', |
||
| 172 | ]); |
||
| 173 | |||
| 174 | $query->where(new Expression(DB::concat(['setting_value', 'multimedia_file_refn'])), 'LIKE', $media_folder . '%'); |
||
| 175 | |||
| 176 | if ($subfolders === 'exclude') { |
||
| 177 | $query->where(new Expression(DB::concat(['setting_value', 'multimedia_file_refn'])), 'NOT LIKE', $media_folder . '%/%'); |
||
| 178 | } |
||
| 179 | |||
| 180 | return $this->datatables_service->handleQuery($request, $query, $search_columns, $sort_columns, $callback); |
||
| 181 | |||
| 182 | case 'external': |
||
| 183 | $query = DB::table('media_file') |
||
| 184 | ->join('media', static function (JoinClause $join): void { |
||
| 185 | $join |
||
| 186 | ->on('media.m_file', '=', 'media_file.m_file') |
||
| 187 | ->on('media.m_id', '=', 'media_file.m_id'); |
||
| 188 | }) |
||
| 189 | ->where(static function (Builder $query): void { |
||
| 190 | $query |
||
| 191 | ->where('multimedia_file_refn', 'LIKE', 'http://%') |
||
| 192 | ->orWhere('multimedia_file_refn', 'LIKE', 'https://%'); |
||
| 193 | }) |
||
| 194 | ->select([ |
||
| 195 | 'media.*', |
||
| 196 | 'multimedia_file_refn', |
||
| 197 | 'descriptive_title', |
||
| 198 | new Expression("'' AS media_folder"), |
||
| 199 | ]); |
||
| 200 | |||
| 201 | return $this->datatables_service->handleQuery($request, $query, $search_columns, $sort_columns, $callback); |
||
| 202 | |||
| 203 | case 'unused': |
||
| 204 | // Which trees use which media folder? |
||
| 205 | $media_trees = DB::table('gedcom') |
||
| 206 | ->join('gedcom_setting', 'gedcom_setting.gedcom_id', '=', 'gedcom.gedcom_id') |
||
| 207 | ->where('setting_name', '=', 'MEDIA_DIRECTORY') |
||
| 208 | ->where('gedcom.gedcom_id', '>', 0) |
||
| 209 | ->pluck('setting_value', 'gedcom_name'); |
||
| 210 | |||
| 211 | $disk_files = $this->media_file_service->allFilesOnDisk($data_filesystem, $media_folder, $subfolders === 'include'); |
||
| 212 | $db_files = $this->media_file_service->allFilesInDatabase($media_folder, $subfolders === 'include'); |
||
| 213 | |||
| 214 | // All unused files |
||
| 215 | $unused_files = $disk_files->diff($db_files) |
||
| 216 | ->map(static fn (string $file): array => (array) $file); |
||
| 217 | |||
| 218 | $search_columns = [0]; |
||
| 219 | $sort_columns = [0 => 0]; |
||
| 220 | |||
| 221 | $callback = function (array $row) use ($data_filesystem, $media_trees): array { |
||
| 222 | try { |
||
| 223 | $mime_type = $data_filesystem->mimeType($row[0]) ?: Mime::DEFAULT_TYPE; |
||
| 224 | } catch (FilesystemException | UnableToRetrieveMetadata) { |
||
| 225 | $mime_type = Mime::DEFAULT_TYPE; |
||
| 226 | } |
||
| 227 | |||
| 228 | if (str_starts_with($mime_type, 'image/')) { |
||
| 229 | $url = route(AdminMediaFileThumbnail::class, ['path' => $row[0]]); |
||
| 230 | $img = '<img src="' . e($url) . '">'; |
||
| 231 | } else { |
||
| 232 | $img = view('icons/mime', ['type' => $mime_type]); |
||
| 233 | } |
||
| 234 | |||
| 235 | $url = route(AdminMediaFileDownload::class, ['path' => $row[0]]); |
||
| 236 | $img = '<a href="' . e($url) . '">' . $img . '</a>'; |
||
| 237 | |||
| 238 | // Form to create new media object in each tree |
||
| 239 | $create_form = ''; |
||
| 240 | foreach ($media_trees as $media_tree => $media_directory) { |
||
| 241 | if (str_starts_with($row[0], $media_directory)) { |
||
| 242 | $tmp = substr($row[0], strlen($media_directory)); |
||
| 243 | $create_form .= |
||
| 244 | '<p><a href="#" data-bs-toggle="modal" data-bs-target="#modal-create-media-from-file" data-file="' . e($tmp) . '" data-url="' . e(route(CreateMediaObjectFromFile::class, ['tree' => $media_tree])) . '" onclick="document.getElementById(\'modal-create-media-from-file-form\').action=this.dataset.url; document.getElementById(\'file\').value=this.dataset.file;">' . I18N::translate('Create') . '</a> — ' . e($media_tree) . '<p>'; |
||
| 245 | } |
||
| 246 | } |
||
| 247 | |||
| 248 | $delete_link = '<p><a data-wt-confirm="' . I18N::translate('Are you sure you want to delete “%s”?', e($row[0])) . '" data-wt-post-url="' . e(route(DeletePath::class, [ |
||
| 249 | 'path' => $row[0], |
||
| 250 | ])) . '" href="#">' . I18N::translate('Delete') . '</a></p>'; |
||
| 251 | |||
| 252 | return [ |
||
| 253 | $this->mediaFileInfo($data_filesystem, $row[0]) . $delete_link, |
||
| 254 | $img, |
||
| 255 | $create_form, |
||
| 256 | ]; |
||
| 257 | }; |
||
| 258 | |||
| 259 | return $this->datatables_service->handleCollection($request, $unused_files, $search_columns, $sort_columns, $callback); |
||
| 260 | |||
| 261 | default: |
||
| 262 | throw new HttpNotFoundException(); |
||
| 263 | } |
||
| 382 |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths