| Conditions | 8 |
| Paths | 5 |
| Total Lines | 141 |
| Code Lines | 90 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 2 | ||
| Bugs | 0 | Features | 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 |
||
| 147 | public function data(ServerRequestInterface $request): ResponseInterface |
||
| 148 | { |
||
| 149 | $data_filesystem = $request->getAttribute('filesystem.data'); |
||
| 150 | assert($data_filesystem instanceof FilesystemInterface); |
||
| 151 | |||
| 152 | $files = $request->getQueryParams()['files']; // local|external|unused |
||
| 153 | |||
| 154 | // Files within this folder |
||
| 155 | $media_folder = $request->getQueryParams()['media_folder']; |
||
| 156 | |||
| 157 | // Show sub-folders within $media_folder |
||
| 158 | $subfolders = $request->getQueryParams()['subfolders']; // include|exclude |
||
| 159 | |||
| 160 | $search_columns = ['multimedia_file_refn', 'descriptive_title']; |
||
| 161 | |||
| 162 | $sort_columns = [ |
||
| 163 | 0 => 'multimedia_file_refn', |
||
| 164 | 2 => new Expression('descriptive_title || multimedia_file_refn'), |
||
| 165 | ]; |
||
| 166 | |||
| 167 | // Convert a row from the database into a row for datatables |
||
| 168 | $callback = function (stdClass $row): array { |
||
| 169 | /** @var Media $media */ |
||
| 170 | $tree = $this->tree_service->find((int) $row->m_file); |
||
| 171 | $media = Media::getInstance($row->m_id, $tree, $row->m_gedcom); |
||
| 172 | assert($media instanceof Media); |
||
| 173 | |||
| 174 | $media_files = $media->mediaFiles() |
||
| 175 | ->filter(static function (MediaFile $media_file) use ($row): bool { |
||
| 176 | return $media_file->filename() === $row->multimedia_file_refn; |
||
| 177 | }) |
||
| 178 | ->map(static function (MediaFile $media_file): string { |
||
| 179 | return $media_file->displayImage(150, 150, '', []); |
||
| 180 | }) |
||
| 181 | ->first(); |
||
| 182 | |||
| 183 | return [ |
||
| 184 | $row->multimedia_file_refn, |
||
| 185 | $media_files, |
||
| 186 | $this->mediaObjectInfo($media), |
||
| 187 | ]; |
||
| 188 | }; |
||
| 189 | |||
| 190 | switch ($files) { |
||
| 191 | case 'local': |
||
| 192 | $query = DB::table('media_file') |
||
| 193 | ->join('media', static function (JoinClause $join): void { |
||
| 194 | $join |
||
| 195 | ->on('media.m_file', '=', 'media_file.m_file') |
||
| 196 | ->on('media.m_id', '=', 'media_file.m_id'); |
||
| 197 | }) |
||
| 198 | ->join('gedcom_setting', 'gedcom_id', '=', 'media.m_file') |
||
| 199 | ->where('setting_name', '=', 'MEDIA_DIRECTORY') |
||
| 200 | ->where('multimedia_file_refn', 'NOT LIKE', 'http://%') |
||
| 201 | ->where('multimedia_file_refn', 'NOT LIKE', 'https://%') |
||
| 202 | ->select(['media.*', 'multimedia_file_refn', 'descriptive_title']); |
||
| 203 | |||
| 204 | $query->where(new Expression('setting_value || multimedia_file_refn'), 'LIKE', $media_folder . '%'); |
||
| 205 | |||
| 206 | if ($subfolders === 'exclude') { |
||
| 207 | $query->where(new Expression('setting_value || multimedia_file_refn'), 'NOT LIKE', $media_folder . '%/%'); |
||
| 208 | } |
||
| 209 | |||
| 210 | return $this->datatables_service->handleQuery($request, $query, $search_columns, $sort_columns, $callback); |
||
| 211 | |||
| 212 | case 'external': |
||
| 213 | $query = DB::table('media_file') |
||
| 214 | ->join('media', static function (JoinClause $join): void { |
||
| 215 | $join |
||
| 216 | ->on('media.m_file', '=', 'media_file.m_file') |
||
| 217 | ->on('media.m_id', '=', 'media_file.m_id'); |
||
| 218 | }) |
||
| 219 | ->where(static function (Builder $query): void { |
||
| 220 | $query |
||
| 221 | ->where('multimedia_file_refn', 'LIKE', 'http://%') |
||
| 222 | ->orWhere('multimedia_file_refn', 'LIKE', 'https://%'); |
||
| 223 | }) |
||
| 224 | ->select(['media.*', 'multimedia_file_refn', 'descriptive_title']); |
||
| 225 | |||
| 226 | return $this->datatables_service->handleQuery($request, $query, $search_columns, $sort_columns, $callback); |
||
| 227 | |||
| 228 | case 'unused': |
||
| 229 | // Which trees use which media folder? |
||
| 230 | $media_trees = DB::table('gedcom') |
||
| 231 | ->join('gedcom_setting', 'gedcom_setting.gedcom_id', '=', 'gedcom.gedcom_id') |
||
| 232 | ->where('setting_name', '=', 'MEDIA_DIRECTORY') |
||
| 233 | ->where('gedcom.gedcom_id', '>', 0) |
||
| 234 | ->pluck('setting_value', 'gedcom_name'); |
||
| 235 | |||
| 236 | $disk_files = $this->media_file_service->allFilesOnDisk($data_filesystem, $media_folder, $subfolders === 'include'); |
||
| 237 | $db_files = $this->media_file_service->allFilesInDatabase($media_folder, $subfolders === 'include'); |
||
| 238 | |||
| 239 | // All unused files |
||
| 240 | $unused_files = $disk_files->diff($db_files) |
||
| 241 | ->map(static function (string $file): array { |
||
| 242 | return (array) $file; |
||
| 243 | }); |
||
| 244 | |||
| 245 | $search_columns = [0]; |
||
| 246 | |||
| 247 | $sort_columns = [0 => 0]; |
||
| 248 | |||
| 249 | $callback = function (array $row) use ($data_filesystem, $media_folder, $media_trees): array { |
||
| 250 | $mime_type = $data_filesystem->getMimeType($row[0]); |
||
| 251 | |||
| 252 | if (explode('/', $mime_type)[0] === 'image') { |
||
|
|
|||
| 253 | $url = route('unused-media-thumbnail', [ |
||
| 254 | 'path' => $row[0], |
||
| 255 | 'w' => 100, |
||
| 256 | 'h' => 100, |
||
| 257 | ]); |
||
| 258 | $img = '<img src="' . e($url) . '">'; |
||
| 259 | } else { |
||
| 260 | $img = view('icons/mime', ['type' => $mime_type]); |
||
| 261 | } |
||
| 262 | |||
| 263 | // Form to create new media object in each tree |
||
| 264 | $create_form = ''; |
||
| 265 | foreach ($media_trees as $media_tree => $media_directory) { |
||
| 266 | if (Str::startsWith($row[0], $media_directory)) { |
||
| 267 | $tmp = substr($row[0], strlen($media_directory)); |
||
| 268 | $create_form .= |
||
| 269 | '<p><a href="#" data-toggle="modal" data-target="#modal-create-media-from-file" data-file="' . e($tmp) . '" data-url="' . e(route('create-media-from-file', ['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>'; |
||
| 270 | } |
||
| 271 | } |
||
| 272 | |||
| 273 | $delete_link = '<p><a data-confirm="' . I18N::translate('Are you sure you want to delete “%s”?', e($row[0])) . '" data-post-url="' . e(route(DeletePath::class, [ |
||
| 274 | 'path' => $row[0], |
||
| 275 | ])) . '" href="#">' . I18N::translate('Delete') . '</a></p>'; |
||
| 276 | |||
| 277 | return [ |
||
| 278 | $this->mediaFileInfo($media_folder, $row[0]) . $delete_link, |
||
| 279 | $img, |
||
| 280 | $create_form, |
||
| 281 | ]; |
||
| 282 | }; |
||
| 283 | |||
| 284 | return $this->datatables_service->handleCollection($request, $unused_files, $search_columns, $sort_columns, $callback); |
||
| 285 | |||
| 286 | default: |
||
| 287 | throw new BadRequestHttpException(); |
||
| 288 | } |
||
| 471 |