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