diff options
Diffstat (limited to 'app/Http/Controllers/EditMediaController.php')
| -rw-r--r-- | app/Http/Controllers/EditMediaController.php | 1007 |
1 files changed, 516 insertions, 491 deletions
diff --git a/app/Http/Controllers/EditMediaController.php b/app/Http/Controllers/EditMediaController.php index 4c149b357b..cee32db2a9 100644 --- a/app/Http/Controllers/EditMediaController.php +++ b/app/Http/Controllers/EditMediaController.php @@ -43,593 +43,618 @@ use Throwable; /** * Controller for edit forms and responses. */ -class EditMediaController extends AbstractEditController { - const EDIT_RESTRICTIONS = ['locked']; - const PRIVACY_RESTRICTIONS = ['none', 'privacy', 'confidential']; +class EditMediaController extends AbstractEditController +{ + const EDIT_RESTRICTIONS = ['locked']; + const PRIVACY_RESTRICTIONS = [ + 'none', + 'privacy', + 'confidential', + ]; - /** - * Add a media file to an existing media object. - * - * @param Request $request - * - * @return Response - */ - public function addMediaFile(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); - $xref = $request->get('xref'); - $media = Media::getInstance($xref, $tree); + /** + * Add a media file to an existing media object. + * + * @param Request $request + * + * @return Response + */ + public function addMediaFile(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); + $xref = $request->get('xref'); + $media = Media::getInstance($xref, $tree); - try { - $this->checkMediaAccess($media); - } catch (Exception $ex) { - return new Response(view('modals/error', [ - 'title' => I18N::translate('Add a media file'), - 'error' => $ex->getMessage(), - ])); - } + try { + $this->checkMediaAccess($media); + } catch (Exception $ex) { + return new Response(view('modals/error', [ + 'title' => I18N::translate('Add a media file'), + 'error' => $ex->getMessage(), + ])); + } - return new Response(view('modals/add-media-file', [ - 'max_upload_size' => $this->maxUploadFilesize(), - 'media' => $media, - 'media_types' => $this->mediaTypes(), - 'unused_files' => $this->unusedFiles($tree), - ])); - } + return new Response(view('modals/add-media-file', [ + 'max_upload_size' => $this->maxUploadFilesize(), + 'media' => $media, + 'media_types' => $this->mediaTypes(), + 'unused_files' => $this->unusedFiles($tree), + ])); + } - /** - * Add a media file to an existing media object. - * - * @param Request $request - * - * @return RedirectResponse - */ - public function addMediaFileAction(Request $request): RedirectResponse { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); - $xref = $request->get('xref'); - $media = Media::getInstance($xref, $tree); - $title = $request->get('title'); - $type = $request->get('type'); + /** + * Add a media file to an existing media object. + * + * @param Request $request + * + * @return RedirectResponse + */ + public function addMediaFileAction(Request $request): RedirectResponse + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); + $xref = $request->get('xref'); + $media = Media::getInstance($xref, $tree); + $title = $request->get('title'); + $type = $request->get('type'); - // Tidy whitespace - $type = trim(preg_replace('/\s+/', ' ', $type)); - $title = trim(preg_replace('/\s+/', ' ', $title)); + // Tidy whitespace + $type = trim(preg_replace('/\s+/', ' ', $type)); + $title = trim(preg_replace('/\s+/', ' ', $title)); - if ($media === null || $media->isPendingDeletion() || !$media->canEdit()) { - return new RedirectResponse(route('tree-page', ['ged' => $tree->getName()])); - } + if ($media === null || $media->isPendingDeletion() || !$media->canEdit()) { + return new RedirectResponse(route('tree-page', ['ged' => $tree->getName()])); + } - $file = $this->uploadFile($request); + $file = $this->uploadFile($request); - if ($file === '') { - FlashMessages::addMessage(I18N::translate('There was an error uploading your file.')); + if ($file === '') { + FlashMessages::addMessage(I18N::translate('There was an error uploading your file.')); - return new RedirectResponse($media->url()); - } + return new RedirectResponse($media->url()); + } - $gedcom = '1 FILE ' . $file; - if ($type !== '') { - $gedcom .= "\n2 FORM\n3 TYPE " . $type; - } - if ($title !== '') { - $gedcom .= "\n2 TITL " . $title; - } + $gedcom = '1 FILE ' . $file; + if ($type !== '') { + $gedcom .= "\n2 FORM\n3 TYPE " . $type; + } + if ($title !== '') { + $gedcom .= "\n2 TITL " . $title; + } - $media->createFact($gedcom, true); + $media->createFact($gedcom, true); - // Accept the changes, to keep the filesystem in sync with the GEDCOM data. - FunctionsImport::acceptAllChanges($media->getxref(), $tree); + // Accept the changes, to keep the filesystem in sync with the GEDCOM data. + FunctionsImport::acceptAllChanges($media->getxref(), $tree); - return new RedirectResponse($media->url()); - } + return new RedirectResponse($media->url()); + } - /** - * Edit an existing media file. - * - * @param Request $request - * - * @return Response - */ - public function editMediaFile(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); - $xref = $request->get('xref', ''); - $fact_id = $request->get('fact_id', ''); - $media = Media::getInstance($xref, $tree); + /** + * Edit an existing media file. + * + * @param Request $request + * + * @return Response + */ + public function editMediaFile(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); + $xref = $request->get('xref', ''); + $fact_id = $request->get('fact_id', ''); + $media = Media::getInstance($xref, $tree); - try { - $this->checkMediaAccess($media); - } catch (Exception $ex) { - return new Response(view('modals/error', [ - 'title' => I18N::translate('Edit a media file'), - 'error' => $ex->getMessage(), - ]), Response::HTTP_FORBIDDEN); - } + try { + $this->checkMediaAccess($media); + } catch (Exception $ex) { + return new Response(view('modals/error', [ + 'title' => I18N::translate('Edit a media file'), + 'error' => $ex->getMessage(), + ]), Response::HTTP_FORBIDDEN); + } - foreach ($media->mediaFiles() as $media_file) { - if ($media_file->factId() === $fact_id) { - return new Response(view('modals/edit-media-file', [ - 'media_file' => $media_file, - 'max_upload_size' => $this->maxUploadFilesize(), - 'media' => $media, - 'media_types' => $this->mediaTypes(), - 'unused_files' => $this->unusedFiles($tree), - ])); - } - } + foreach ($media->mediaFiles() as $media_file) { + if ($media_file->factId() === $fact_id) { + return new Response(view('modals/edit-media-file', [ + 'media_file' => $media_file, + 'max_upload_size' => $this->maxUploadFilesize(), + 'media' => $media, + 'media_types' => $this->mediaTypes(), + 'unused_files' => $this->unusedFiles($tree), + ])); + } + } - return new Response('', Response::HTTP_NOT_FOUND); - } + return new Response('', Response::HTTP_NOT_FOUND); + } - /** - * Save an edited media file. - * - * @param Request $request - * - * @return RedirectResponse - */ - public function editMediaFileAction(Request $request): RedirectResponse { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); - $xref = $request->get('xref', ''); - $fact_id = $request->get('fact_id', ''); - $folder = $request->get('folder', ''); - $new_file = $request->get('new_file', ''); - $remote = $request->get('remote', ''); - $title = $request->get('title', ''); - $type = $request->get('type', ''); - $media = Media::getInstance($xref, $tree); + /** + * Save an edited media file. + * + * @param Request $request + * + * @return RedirectResponse + */ + public function editMediaFileAction(Request $request): RedirectResponse + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); + $xref = $request->get('xref', ''); + $fact_id = $request->get('fact_id', ''); + $folder = $request->get('folder', ''); + $new_file = $request->get('new_file', ''); + $remote = $request->get('remote', ''); + $title = $request->get('title', ''); + $type = $request->get('type', ''); + $media = Media::getInstance($xref, $tree); - // Tidy whitespace - $type = trim(preg_replace('/\s+/', ' ', $type)); - $title = trim(preg_replace('/\s+/', ' ', $title)); + // Tidy whitespace + $type = trim(preg_replace('/\s+/', ' ', $type)); + $title = trim(preg_replace('/\s+/', ' ', $title)); - // Media object oes not exist? Media object is read-only? - if ($media === null || $media->isPendingDeletion() || !$media->canEdit()) { - return new RedirectResponse(route('tree-page', ['ged' => $tree->getName()])); - } + // Media object oes not exist? Media object is read-only? + if ($media === null || $media->isPendingDeletion() || !$media->canEdit()) { + return new RedirectResponse(route('tree-page', ['ged' => $tree->getName()])); + } - // Find the fact we are editing. - $media_file = null; - foreach ($media->mediaFiles() as $tmp) { - if ($tmp->factId() === $fact_id) { - $media_file = $tmp; - } - } + // Find the fact we are editing. + $media_file = null; + foreach ($media->mediaFiles() as $tmp) { + if ($tmp->factId() === $fact_id) { + $media_file = $tmp; + } + } - // Media file does not exist? - if ($media_file === null) { - return new RedirectResponse(route('tree-page', ['ged' => $tree->getName()])); - } + // Media file does not exist? + if ($media_file === null) { + return new RedirectResponse(route('tree-page', ['ged' => $tree->getName()])); + } - // We can edit the file as either a URL or a folder/file - if ($remote !== '') { - $file = $remote; - } else { - $new_file = str_replace('\\', '/', $new_file); - $folder = str_replace('\\', '/', $folder); - if ($folder === '') { - $file = $new_file; - } else { - $file = $folder . '/' . $new_file; - } - if (strpos($file, '../') !== false) { - $file = ''; - } - } + // We can edit the file as either a URL or a folder/file + if ($remote !== '') { + $file = $remote; + } else { + $new_file = str_replace('\\', '/', $new_file); + $folder = str_replace('\\', '/', $folder); + if ($folder === '') { + $file = $new_file; + } else { + $file = $folder . '/' . $new_file; + } + if (strpos($file, '../') !== false) { + $file = ''; + } + } - // Invalid filename? Do not change it. - if ($file === '') { - $file = $media_file->filename(); - } + // Invalid filename? Do not change it. + if ($file === '') { + $file = $media_file->filename(); + } - $MEDIA_DIRECTORY = $media->getTree()->getPreference('MEDIA_DIRECTORY'); - $old = $MEDIA_DIRECTORY . $media_file->filename(); - $new = $MEDIA_DIRECTORY . $file; + $MEDIA_DIRECTORY = $media->getTree()->getPreference('MEDIA_DIRECTORY'); + $old = $MEDIA_DIRECTORY . $media_file->filename(); + $new = $MEDIA_DIRECTORY . $file; - // Update the filesystem, if we can. - if (!$media_file->isExternal()) { - // Don't overwrite existing file - if (file_exists(WT_DATA_DIR . $new) && sha1_file(WT_DATA_DIR . $old) !== sha1_file(WT_DATA_DIR . $new)) { - FlashMessages::addMessage(I18N::translate('The media file %1$s could not be renamed to %2$s.', Html::filename($media_file->filename()), Html::filename($file)), 'info'); - $file = $media_file->filename(); - } else { - try { - File::mkdir(WT_DATA_DIR . $MEDIA_DIRECTORY . $folder); - rename(WT_DATA_DIR . $MEDIA_DIRECTORY . $media_file->filename(), WT_DATA_DIR . $MEDIA_DIRECTORY . $file); - FlashMessages::addMessage(I18N::translate('The media file %1$s has been renamed to %2$s.', Html::filename($media_file->filename()), Html::filename($file)), 'info'); - } catch (Throwable $ex) { - FlashMessages::addMessage($ex, 'info'); - FlashMessages::addMessage(I18N::translate('The media file %1$s could not be renamed to %2$s.', Html::filename($media_file->filename()), Html::filename($file)), 'info'); - $file = $media_file->filename(); - } - } - } + // Update the filesystem, if we can. + if (!$media_file->isExternal()) { + // Don't overwrite existing file + if (file_exists(WT_DATA_DIR . $new) && sha1_file(WT_DATA_DIR . $old) !== sha1_file(WT_DATA_DIR . $new)) { + FlashMessages::addMessage(I18N::translate('The media file %1$s could not be renamed to %2$s.', Html::filename($media_file->filename()), Html::filename($file)), 'info'); + $file = $media_file->filename(); + } else { + try { + File::mkdir(WT_DATA_DIR . $MEDIA_DIRECTORY . $folder); + rename(WT_DATA_DIR . $MEDIA_DIRECTORY . $media_file->filename(), WT_DATA_DIR . $MEDIA_DIRECTORY . $file); + FlashMessages::addMessage(I18N::translate('The media file %1$s has been renamed to %2$s.', Html::filename($media_file->filename()), Html::filename($file)), 'info'); + } catch (Throwable $ex) { + FlashMessages::addMessage($ex, 'info'); + FlashMessages::addMessage(I18N::translate('The media file %1$s could not be renamed to %2$s.', Html::filename($media_file->filename()), Html::filename($file)), 'info'); + $file = $media_file->filename(); + } + } + } - $gedcom = $this->createMediaFileGedcom($file, $type, $title); + $gedcom = $this->createMediaFileGedcom($file, $type, $title); - $media->updateFact($fact_id, $gedcom, true); + $media->updateFact($fact_id, $gedcom, true); - // Accept the changes, to keep the filesystem in sync with the GEDCOM data. - if ($old !== $new && !$media_file->isExternal()) { - FunctionsImport::acceptAllChanges($media->getxref(), $tree); - } + // Accept the changes, to keep the filesystem in sync with the GEDCOM data. + if ($old !== $new && !$media_file->isExternal()) { + FunctionsImport::acceptAllChanges($media->getxref(), $tree); + } - return new RedirectResponse($media->url()); - } + return new RedirectResponse($media->url()); + } - /** - * Show a form to create a new media object. - * - * @param Request $request - * - * @return Response - */ - public function createMediaObject(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * Show a form to create a new media object. + * + * @param Request $request + * + * @return Response + */ + public function createMediaObject(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - return new Response(view('modals/create-media-object', [ - 'max_upload_size' => $this->maxUploadFilesize(), - 'media_types' => $this->mediaTypes(), - 'unused_files' => $this->unusedFiles($tree), - ])); - } + return new Response(view('modals/create-media-object', [ + 'max_upload_size' => $this->maxUploadFilesize(), + 'media_types' => $this->mediaTypes(), + 'unused_files' => $this->unusedFiles($tree), + ])); + } - /** - * @param Request $request - * - * @return Response - */ - public function createMediaObjectFromFileAction(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return Response + */ + public function createMediaObjectFromFileAction(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $file = $request->get('file'); - $type = $request->get('type'); - $title = $request->get('title'); - $note = $request->get('note'); + $file = $request->get('file'); + $type = $request->get('type'); + $title = $request->get('title'); + $note = $request->get('note'); - if (preg_match('/\.([a-zA-Z0-9]+)$/', $file, $match)) { - $format = ' ' . $match[1]; - } else { - $format = ''; - } + if (preg_match('/\.([a-zA-Z0-9]+)$/', $file, $match)) { + $format = ' ' . $match[1]; + } else { + $format = ''; + } - $gedcom = "0 @new@ OBJE\n1 FILE " . $file . "\n2 FORM " . $format; + $gedcom = "0 @new@ OBJE\n1 FILE " . $file . "\n2 FORM " . $format; - if ($type !== '') { - $gedcom .= "\n3 TYPE " . $type; - } + if ($type !== '') { + $gedcom .= "\n3 TYPE " . $type; + } - if ($title !== '') { - $gedcom .= "\n2 TITL " . $title; - } + if ($title !== '') { + $gedcom .= "\n2 TITL " . $title; + } - if ($note !== '') { - $gedcom .= "\n1 NOTE " . preg_replace('/\r?\n/', "\n2 CONT ", $note); - } + if ($note !== '') { + $gedcom .= "\n1 NOTE " . preg_replace('/\r?\n/', "\n2 CONT ", $note); + } - $media_object = $tree->createRecord($gedcom); - // Accept the new record. Rejecting it would leave the filesystem out-of-sync with the genealogy - FunctionsImport::acceptAllChanges($media_object->getXref(), $tree); + $media_object = $tree->createRecord($gedcom); + // Accept the new record. Rejecting it would leave the filesystem out-of-sync with the genealogy + FunctionsImport::acceptAllChanges($media_object->getXref(), $tree); - return new RedirectResponse($media_object->url()); - } + return new RedirectResponse($media_object->url()); + } - /** - * Process a form to create a new media object. - * - * @param Request $request - * - * @return JsonResponse - */ - public function createMediaObjectAction(Request $request): JsonResponse { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); - $note = $request->get('note'); - $title = $request->get('title'); - $type = $request->get('type'); - $privacy_restriction = $request->get('privacy-restriction', ''); - $edit_restriction = $request->get('edit-restriction', ''); + /** + * Process a form to create a new media object. + * + * @param Request $request + * + * @return JsonResponse + */ + public function createMediaObjectAction(Request $request): JsonResponse + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); + $note = $request->get('note'); + $title = $request->get('title'); + $type = $request->get('type'); + $privacy_restriction = $request->get('privacy-restriction', ''); + $edit_restriction = $request->get('edit-restriction', ''); - // Tidy whitespace - $type = trim(preg_replace('/\s+/', ' ', $type)); - $title = trim(preg_replace('/\s+/', ' ', $title)); + // Tidy whitespace + $type = trim(preg_replace('/\s+/', ' ', $type)); + $title = trim(preg_replace('/\s+/', ' ', $title)); - // Convert line endings to GEDDCOM continuations - $note = str_replace(["\r\n", "\r", "\n"], "\n1 CONT ", $note); + // Convert line endings to GEDDCOM continuations + $note = str_replace([ + "\r\n", + "\r", + "\n", + ], "\n1 CONT ", $note); - $file = $this->uploadFile($request); + $file = $this->uploadFile($request); - if ($file === '') { - return new JsonResponse(['error_message' => I18N::translate('There was an error uploading your file.')], 406); - } + if ($file === '') { + return new JsonResponse(['error_message' => I18N::translate('There was an error uploading your file.')], 406); + } - $gedcom = "0 @XREF@ OBJE\n" . $this->createMediaFileGedcom($file, $type, $title); + $gedcom = "0 @XREF@ OBJE\n" . $this->createMediaFileGedcom($file, $type, $title); - if ($note !== '') { - $gedcom .= "\n1 NOTE " . preg_replace('/\r?\n/', "\n2 CONT ", $note); - } + if ($note !== '') { + $gedcom .= "\n1 NOTE " . preg_replace('/\r?\n/', "\n2 CONT ", $note); + } - if (in_array($privacy_restriction, self::PRIVACY_RESTRICTIONS)) { - $gedcom .= "\n1 RESN " . $privacy_restriction; - } + if (in_array($privacy_restriction, self::PRIVACY_RESTRICTIONS)) { + $gedcom .= "\n1 RESN " . $privacy_restriction; + } - if (in_array($edit_restriction, self::EDIT_RESTRICTIONS)) { - $gedcom .= "\n1 RESN " . $edit_restriction; - } + if (in_array($edit_restriction, self::EDIT_RESTRICTIONS)) { + $gedcom .= "\n1 RESN " . $edit_restriction; + } - $record = $tree->createRecord($gedcom); + $record = $tree->createRecord($gedcom); - // Accept the new record to keep the filesystem synchronized with the genealogy. - FunctionsImport::acceptAllChanges($record->getXref(), $record->getTree()); + // Accept the new record to keep the filesystem synchronized with the genealogy. + FunctionsImport::acceptAllChanges($record->getXref(), $record->getTree()); - return new JsonResponse([ - 'id' => $record->getXref(), - 'text' => view('selects/media', [ - 'media' => $record, - ]), - 'html' => view('modals/record-created', [ - 'title' => I18N::translate('The media object has been created'), - 'name' => $record->getFullName(), - 'url' => $record->url(), - ]), - ]); - } + return new JsonResponse([ + 'id' => $record->getXref(), + 'text' => view('selects/media', [ + 'media' => $record, + ]), + 'html' => view('modals/record-created', [ + 'title' => I18N::translate('The media object has been created'), + 'name' => $record->getFullName(), + 'url' => $record->url(), + ]), + ]); + } - /** - * @param Request $request - * - * @return Response - */ - public function linkMediaToIndividual(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return Response + */ + public function linkMediaToIndividual(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref'); + $xref = $request->get('xref'); - $media = Media::getInstance($xref, $tree); + $media = Media::getInstance($xref, $tree); - return new Response(view('modals/link-media-to-individual', [ - 'media' => $media, - 'tree' => $tree, - ])); - } + return new Response(view('modals/link-media-to-individual', [ + 'media' => $media, + 'tree' => $tree, + ])); + } - /** - * @param Request $request - * - * @return Response - */ - public function linkMediaToFamily(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return Response + */ + public function linkMediaToFamily(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref'); + $xref = $request->get('xref'); - $media = Media::getInstance($xref, $tree); + $media = Media::getInstance($xref, $tree); - return new Response(view('modals/link-media-to-family', [ - 'media' => $media, - 'tree' => $tree, - ])); - } + return new Response(view('modals/link-media-to-family', [ + 'media' => $media, + 'tree' => $tree, + ])); + } - /** - * @param Request $request - * - * @return Response - */ - public function linkMediaToSource(Request $request): Response { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return Response + */ + public function linkMediaToSource(Request $request): Response + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref'); + $xref = $request->get('xref'); - $media = Media::getInstance($xref, $tree); + $media = Media::getInstance($xref, $tree); - return new Response(view('modals/link-media-to-source', [ - 'media' => $media, - 'tree' => $tree, - ])); - } + return new Response(view('modals/link-media-to-source', [ + 'media' => $media, + 'tree' => $tree, + ])); + } - /** - * @param Request $request - * - * @return RedirectResponse - */ - public function linkMediaToRecordAction(Request $request): RedirectResponse { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); + /** + * @param Request $request + * + * @return RedirectResponse + */ + public function linkMediaToRecordAction(Request $request): RedirectResponse + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); - $xref = $request->get('xref'); - $link = $request->get('link'); + $xref = $request->get('xref'); + $link = $request->get('link'); - $media = Media::getInstance($xref, $tree); - $record = GedcomRecord::getInstance($link, $tree); + $media = Media::getInstance($xref, $tree); + $record = GedcomRecord::getInstance($link, $tree); - $record->createFact('1 OBJE @' . $xref . '@', true); + $record->createFact('1 OBJE @' . $xref . '@', true); - return new RedirectResponse($media->url()); - } + return new RedirectResponse($media->url()); + } - /** - * Convert the media file attributes into GEDCOM format. - * - * @param string $file - * @param string $type - * @param string $title - * - * @return string - */ - private function createMediaFileGedcom(string $file, string $type, string $title): string { - if (preg_match('/\.([a-z0-9]+)/i', $file, $match)) { - $extension = strtolower($match[1]); - $extension = str_replace('jpg', 'jpeg', $extension); - $extension = ' ' . $extension; - } else { - $extension = ''; - } + /** + * Convert the media file attributes into GEDCOM format. + * + * @param string $file + * @param string $type + * @param string $title + * + * @return string + */ + private function createMediaFileGedcom(string $file, string $type, string $title): string + { + if (preg_match('/\.([a-z0-9]+)/i', $file, $match)) { + $extension = strtolower($match[1]); + $extension = str_replace('jpg', 'jpeg', $extension); + $extension = ' ' . $extension; + } else { + $extension = ''; + } - $gedcom = '1 FILE ' . $file; - if ($type !== '') { - $gedcom .= "\n2 FORM" . $extension . "\n3 TYPE " . $type; - } - if ($title !== '') { - $gedcom .= "\n2 TITL " . $title; - } + $gedcom = '1 FILE ' . $file; + if ($type !== '') { + $gedcom .= "\n2 FORM" . $extension . "\n3 TYPE " . $type; + } + if ($title !== '') { + $gedcom .= "\n2 TITL " . $title; + } - return $gedcom; - } + return $gedcom; + } - /** - * What is the largest file a user may upload? - */ - private function maxUploadFilesize(): string { - $bytes = UploadedFile::getMaxFilesize(); - $kb = (int) ($bytes / 1024); + /** + * What is the largest file a user may upload? + */ + private function maxUploadFilesize(): string + { + $bytes = UploadedFile::getMaxFilesize(); + $kb = (int)($bytes / 1024); - return I18N::translate('%s KB', I18N::number($kb)); - } + return I18N::translate('%s KB', I18N::number($kb)); + } - /** - * A list of key/value options for media types. - * - * @param string $current - * - * @return array - */ - private function mediaTypes($current = ''): array { - $media_types = GedcomTag::getFileFormTypes(); + /** + * A list of key/value options for media types. + * + * @param string $current + * + * @return array + */ + private function mediaTypes($current = ''): array + { + $media_types = GedcomTag::getFileFormTypes(); - $media_types = ['' => ''] + [$current => $current] + $media_types; + $media_types = ['' => ''] + [$current => $current] + $media_types; - return $media_types; - } + return $media_types; + } - /** - * Store an uploaded file (or URL), either to be added to a media object - * or to create a media object. - * - * @param Request $request - * - * @return string The value to be stored in the 'FILE' field of the media object. - */ - private function uploadFile(Request $request): string { - /** @var Tree $tree */ - $tree = $request->attributes->get('tree'); - $file_location = $request->get('file_location'); + /** + * Store an uploaded file (or URL), either to be added to a media object + * or to create a media object. + * + * @param Request $request + * + * @return string The value to be stored in the 'FILE' field of the media object. + */ + private function uploadFile(Request $request): string + { + /** @var Tree $tree */ + $tree = $request->attributes->get('tree'); + $file_location = $request->get('file_location'); - switch ($file_location) { - case 'url': - $remote = $request->get('remote'); + switch ($file_location) { + case 'url': + $remote = $request->get('remote'); - if (strpos($remote, '://') !== false) { - return $remote; - } else { - return ''; - } + if (strpos($remote, '://') !== false) { + return $remote; + } else { + return ''; + } - case 'unused': - $unused = $request->get('unused'); - $unused = str_replace('\\', '/', $unused); + case 'unused': + $unused = $request->get('unused'); + $unused = str_replace('\\', '/', $unused); - if (strpos($unused, '../') !== false) { - return ''; - } + if (strpos($unused, '../') !== false) { + return ''; + } - return $unused; + return $unused; - case 'upload': - default: - $media_folder = $tree->getPreference('MEDIA_DIRECTORY'); - $folder = $request->get('folder', ''); - $auto = $request->get('auto', '0'); - $new_file = $request->get('new_file', ''); + case 'upload': + default: + $media_folder = $tree->getPreference('MEDIA_DIRECTORY'); + $folder = $request->get('folder', ''); + $auto = $request->get('auto', '0'); + $new_file = $request->get('new_file', ''); - $uploaded_file = $request->files->get('file'); - if ($uploaded_file === null) { - return ''; - } + $uploaded_file = $request->files->get('file'); + if ($uploaded_file === null) { + return ''; + } - // The filename - $new_file = str_replace('\\', '/', $new_file); - if ($new_file !== '' && strpos($new_file, '/') === false) { - $file = $new_file; - } else { - $file = $uploaded_file->getClientOriginalName(); - } + // The filename + $new_file = str_replace('\\', '/', $new_file); + if ($new_file !== '' && strpos($new_file, '/') === false) { + $file = $new_file; + } else { + $file = $uploaded_file->getClientOriginalName(); + } - // The folder - $folder = str_replace('\\', '/', $folder); - $folder = trim($folder, '/'); - if ($folder !== '') { - $folder .= '/'; - } + // The folder + $folder = str_replace('\\', '/', $folder); + $folder = trim($folder, '/'); + if ($folder !== '') { + $folder .= '/'; + } - // Invalid path? - if (strpos($folder, '../') !== false || !File::mkdir(WT_DATA_DIR . $media_folder . $folder)) { - $auto = '1'; - } + // Invalid path? + if (strpos($folder, '../') !== false || !File::mkdir(WT_DATA_DIR . $media_folder . $folder)) { + $auto = '1'; + } - // Generate a unique name for the file? - if ($auto === '1' || file_exists(WT_DATA_DIR . $media_folder . $folder . $file)) { - $folder = ''; - $extension = $uploaded_file->guessExtension(); - $file = sha1_file($uploaded_file->getPathname()) . '.' . $extension; - } + // Generate a unique name for the file? + if ($auto === '1' || file_exists(WT_DATA_DIR . $media_folder . $folder . $file)) { + $folder = ''; + $extension = $uploaded_file->guessExtension(); + $file = sha1_file($uploaded_file->getPathname()) . '.' . $extension; + } - try { - //if ($uploaded_file->isValid()) { - // $uploaded_file->move(WT_DATA_DIR . $media_folder . $folder, $file); - if (is_uploaded_file($_FILES['file']['tmp_name'])) { - move_uploaded_file($_FILES['file']['tmp_name'], WT_DATA_DIR . $media_folder . $folder . $file); + try { + //if ($uploaded_file->isValid()) { + // $uploaded_file->move(WT_DATA_DIR . $media_folder . $folder, $file); + if (is_uploaded_file($_FILES['file']['tmp_name'])) { + move_uploaded_file($_FILES['file']['tmp_name'], WT_DATA_DIR . $media_folder . $folder . $file); - return $folder . $file; - } - } catch (FileException $ex) { - DebugBar::addThrowable($ex); - } + return $folder . $file; + } + } catch (FileException $ex) { + DebugBar::addThrowable($ex); + } - return ''; - } - } + return ''; + } + } - /** - * A list of media files not already linked to a media object. - * - * @param Tree $tree - * - * @return array - */ - private function unusedFiles(Tree $tree): array { - $used_files = Database::prepare( - "SELECT multimedia_file_refn FROM `##media_file`" . - " WHERE m_file = :tree_id" . - " AND multimedia_file_refn NOT LIKE 'http://%' AND multimedia_file_refn NOT LIKE 'https://%'" - )->execute([ - 'tree_id' => $tree->getTreeId(), - ])->fetchOneColumn(); + /** + * A list of media files not already linked to a media object. + * + * @param Tree $tree + * + * @return array + */ + private function unusedFiles(Tree $tree): array + { + $used_files = Database::prepare( + "SELECT multimedia_file_refn FROM `##media_file`" . + " WHERE m_file = :tree_id" . + " AND multimedia_file_refn NOT LIKE 'http://%' AND multimedia_file_refn NOT LIKE 'https://%'" + )->execute([ + 'tree_id' => $tree->getTreeId(), + ])->fetchOneColumn(); - $disk_files = []; - $media_dir = WT_DATA_DIR . $tree->getPreference('MEDIA_DIRECTORY', 'media/'); - $iter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($media_dir, FilesystemIterator::FOLLOW_SYMLINKS)); + $disk_files = []; + $media_dir = WT_DATA_DIR . $tree->getPreference('MEDIA_DIRECTORY', 'media/'); + $iter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($media_dir, FilesystemIterator::FOLLOW_SYMLINKS)); - foreach ($iter as $file) { - if ($file->isFile()) { - $filename = substr($file->getPathname(), strlen($media_dir)); - // Older versions of webtrees used a couple of special folders. - if (strpos($filename, 'thumbs/') !== 0 && strpos($filename, 'watermarks/') !== 0) { - $disk_files[] = $filename; - } - } - } + foreach ($iter as $file) { + if ($file->isFile()) { + $filename = substr($file->getPathname(), strlen($media_dir)); + // Older versions of webtrees used a couple of special folders. + if (strpos($filename, 'thumbs/') !== 0 && strpos($filename, 'watermarks/') !== 0) { + $disk_files[] = $filename; + } + } + } - $unused_files = array_diff($disk_files, $used_files); + $unused_files = array_diff($disk_files, $used_files); - return array_combine($unused_files, $unused_files); - } + return array_combine($unused_files, $unused_files); + } } |
