diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2019-03-07 18:49:27 +0000 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2019-03-07 21:37:35 +0000 |
| commit | e364afe4ae4e316fc4ebd53eccbaff2d29e419a5 (patch) | |
| tree | 9e269d16bd3714e9943169fc4a31c192b065c36c /app/Http | |
| parent | 7d99559cb9c1475576caf7ef2fe79a5aad947d30 (diff) | |
| download | webtrees-e364afe4ae4e316fc4ebd53eccbaff2d29e419a5.tar.gz webtrees-e364afe4ae4e316fc4ebd53eccbaff2d29e419a5.tar.bz2 webtrees-e364afe4ae4e316fc4ebd53eccbaff2d29e419a5.zip | |
Code style and testing
Diffstat (limited to 'app/Http')
19 files changed, 169 insertions, 173 deletions
diff --git a/app/Http/Controllers/AbstractEditController.php b/app/Http/Controllers/AbstractEditController.php index 6fcd14a219..8a819b04e9 100644 --- a/app/Http/Controllers/AbstractEditController.php +++ b/app/Http/Controllers/AbstractEditController.php @@ -86,7 +86,7 @@ abstract class AbstractEditController extends AbstractBaseController * * @return void */ - protected function splitSource() + protected function splitSource(): void { $this->glevelsSOUR = []; $this->tagSOUR = []; @@ -112,15 +112,14 @@ abstract class AbstractEditController extends AbstractBaseController $inSOUR = false; $dest = 'R'; } + } elseif ($this->tag[$i] === 'SOUR') { + $inSOUR = true; + $levelSOUR = $this->glevels[$i]; + $dest = 'S'; } else { - if ($this->tag[$i] === 'SOUR') { - $inSOUR = true; - $levelSOUR = $this->glevels[$i]; - $dest = 'S'; - } else { - $dest = 'R'; - } + $dest = 'R'; } + if ($dest === 'S') { $this->glevelsSOUR[] = $this->glevels[$i]; $this->tagSOUR[] = $this->tag[$i]; @@ -269,7 +268,7 @@ abstract class AbstractEditController extends AbstractBaseController * * @return string */ - protected function addNewFact(Request $request, Tree $tree, $fact) + protected function addNewFact(Request $request, Tree $tree, $fact): string { $FACT = $request->get($fact, ''); $DATE = $request->get($fact . '_DATE', ''); diff --git a/app/Http/Controllers/Admin/ChangesLogController.php b/app/Http/Controllers/Admin/ChangesLogController.php index 76241c3cf5..24c2096a1b 100644 --- a/app/Http/Controllers/Admin/ChangesLogController.php +++ b/app/Http/Controllers/Admin/ChangesLogController.php @@ -203,10 +203,10 @@ class ChangesLogController extends AbstractAdminController '"' . $row->change_time . '"', '"' . $row->status . '"', '"' . $row->xref . '"', - '"' . strtr($row->old_gedcom, '"', '""') . '"', - '"' . strtr($row->new_gedcom, '"', '""') . '"', - '"' . strtr($row->user_name, '"', '""') . '"', - '"' . strtr($row->gedcom_name, '"', '""') . '"', + '"' . str_replace('"', '""', $row->old_gedcom) . '"', + '"' . str_replace('"', '""', $row->new_gedcom) . '"', + '"' . str_replace('"', '""', $row->user_name) . '"', + '"' . str_replace('"', '""', $row->gedcom_name) . '"', ]); }) ->implode("\n"); diff --git a/app/Http/Controllers/Admin/ImportThumbnailsController.php b/app/Http/Controllers/Admin/ImportThumbnailsController.php index 10c333cfca..d6b362e5f9 100644 --- a/app/Http/Controllers/Admin/ImportThumbnailsController.php +++ b/app/Http/Controllers/Admin/ImportThumbnailsController.php @@ -87,7 +87,7 @@ class ImportThumbnailsController extends AbstractAdminController foreach ($media_objects as $media_object) { $prefix = WT_DATA_DIR . $media_object->tree()->getPreference('MEDIA_DIRECTORY'); - $gedcom = "1 FILE " . substr($move_to, strlen($prefix)) . "\n2 FORM " . $extension; + $gedcom = '1 FILE ' . substr($move_to, strlen($prefix)) . "\n2 FORM " . $extension; if ($media_object->firstImageFile() === null) { // The media object doesn't have an image. Add this as a secondary file. diff --git a/app/Http/Controllers/Admin/LocationController.php b/app/Http/Controllers/Admin/LocationController.php index e37826a967..c633843061 100644 --- a/app/Http/Controllers/Admin/LocationController.php +++ b/app/Http/Controllers/Admin/LocationController.php @@ -340,7 +340,7 @@ class LocationController extends AbstractAdminController $filename = $request->files->get('localfile')->getPathName(); } - $fp = fopen($filename, 'r'); + $fp = fopen($filename, 'rb'); if ($fp !== false) { $string = stream_get_contents($fp); @@ -553,7 +553,7 @@ class LocationController extends AbstractAdminController private function exportCSV(string $filename, array $columns, array $places): Response { $response = new StreamedResponse(function () use ($columns, $places) { - $stream = fopen('php://output', 'w'); + $stream = fopen('php://output', 'wb'); if ($stream !== false) { fputcsv($stream, $columns, ';'); @@ -628,7 +628,7 @@ class LocationController extends AbstractAdminController * @return void * @throws Exception */ - private function buildLevel(int $parent_id, array $placename, array &$places) + private function buildLevel(int $parent_id, array $placename, array &$places): void { $level = array_search('', $placename); @@ -740,7 +740,7 @@ class LocationController extends AbstractAdminController ->on('p' . ($n + 1) . '.p_id', '=', 'p' . $n . '.p_parent_id') ->where('p' . ($n + 1) . '.p_place', '=', $place); }); - }; + } return $query->exists(); } diff --git a/app/Http/Controllers/Admin/UpgradeController.php b/app/Http/Controllers/Admin/UpgradeController.php index d332445099..83abfd8db4 100644 --- a/app/Http/Controllers/Admin/UpgradeController.php +++ b/app/Http/Controllers/Admin/UpgradeController.php @@ -252,7 +252,7 @@ class UpgradeController extends AbstractAdminController private function wizardStepExport(Tree $tree): Response { // We store the data in PHP temporary storage. - $stream = fopen('php://temp', 'w+'); + $stream = fopen('php://temp', 'wb+'); $filename = $tree->name() . date('-Y-m-d') . '.ged'; if ($this->filesystem->has($filename)) { diff --git a/app/Http/Controllers/Admin/UsersController.php b/app/Http/Controllers/Admin/UsersController.php index b6e3754eca..2f8e3c2309 100644 --- a/app/Http/Controllers/Admin/UsersController.php +++ b/app/Http/Controllers/Admin/UsersController.php @@ -442,16 +442,18 @@ class UsersController extends AbstractAdminController FlashMessages::addMessage(I18N::translate('Duplicate email address. A user with that email already exists.') . $email, 'danger'); return new RedirectResponse(route('admin-users-edit', ['user_id' => $edit_user->id()])); - } elseif ($edit_user->userName() !== $username && $this->user_service->findByUserName($username) instanceof User) { + } + + if ($edit_user->userName() !== $username && $this->user_service->findByUserName($username) instanceof User) { FlashMessages::addMessage(I18N::translate('Duplicate username. A user with that username already exists. Please choose another username.'), 'danger'); return new RedirectResponse(route('admin-users-edit', ['user_id' => $edit_user->id()])); - } else { - $edit_user - ->setEmail($email) - ->setUserName($username); } + $edit_user + ->setEmail($email) + ->setUserName($username); + return new RedirectResponse(route('admin-users')); } diff --git a/app/Http/Controllers/AdminTreesController.php b/app/Http/Controllers/AdminTreesController.php index b586855853..f3ad902884 100644 --- a/app/Http/Controllers/AdminTreesController.php +++ b/app/Http/Controllers/AdminTreesController.php @@ -479,7 +479,7 @@ class AdminTreesController extends AbstractBaseController if ($record->canShow()) { foreach ($record->mediaFiles() as $media_file) { if (file_exists($media_file->getServerFilename())) { - $fp = fopen($media_file->getServerFilename(), 'r'); + $fp = fopen($media_file->getServerFilename(), 'rb'); $zip_filesystem->writeStream($path . $media_file->filename(), $fp); fclose($fp); } @@ -506,7 +506,7 @@ class AdminTreesController extends AbstractBaseController ); } else { $response = new StreamedResponse(function () use ($tree, $access_level, $media_path, $encoding) { - $stream = fopen('php://output', 'w'); + $stream = fopen('php://output', 'wb'); FunctionsExport::exportGedcom($tree, $stream, $access_level, $media_path, $encoding); fclose($stream); }); @@ -537,7 +537,7 @@ class AdminTreesController extends AbstractBaseController try { // To avoid partial trees on timeout/diskspace/etc, write to a temporary file first - $stream = fopen($filename . '.tmp', 'w'); + $stream = fopen($filename . '.tmp', 'wb'); $tree->exportGedcom($stream); fclose($stream); rename($filename . '.tmp', $filename); diff --git a/app/Http/Controllers/AdminUpgradeController.php b/app/Http/Controllers/AdminUpgradeController.php index 091d214966..4b29207193 100644 --- a/app/Http/Controllers/AdminUpgradeController.php +++ b/app/Http/Controllers/AdminUpgradeController.php @@ -50,7 +50,7 @@ class AdminUpgradeController extends AbstractBaseController 'timeout' => 55, ]; - const LOCK_FILE = 'data/offline.txt'; + private const LOCK_FILE = 'data/offline.txt'; /** @var string */ protected $layout = 'layouts/administration'; @@ -209,7 +209,7 @@ class AdminUpgradeController extends AbstractBaseController $filename = WT_DATA_DIR . $tree->name() . date('-Y-m-d') . '.ged'; try { - $stream = fopen($filename, 'w'); + $stream = fopen($filename, 'wb'); if ($stream !== false) { $tree->exportGedcom($stream); @@ -232,7 +232,7 @@ class AdminUpgradeController extends AbstractBaseController try { $download_url = $this->upgrade_service->downloadUrl(); $zip_file = WT_DATA_DIR . basename($download_url); - $zip_stream = fopen($zip_file, 'w'); + $zip_stream = fopen($zip_file, 'wb'); if ($zip_stream === false) { throw new Exception('Cannot read ZIP file: ' . $zip_file); @@ -338,7 +338,7 @@ class AdminUpgradeController extends AbstractBaseController foreach ($paths as $path) { $src_filesystem->delete($path['path']); - if (($this->timeout_service->isTimeNearlyUp())) { + if ($this->timeout_service->isTimeNearlyUp()) { break; } } diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 9a0bbd58ba..fbe0b7ee89 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -162,7 +162,7 @@ class LoginController extends AbstractBaseController * @return void * @throws Exception */ - private function doLogin(string $username, string $password) + private function doLogin(string $username, string $password): void { if (!$_COOKIE) { Log::addAuthenticationLog('Login failed (no session cookies): ' . $username); diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 01514f7888..2106de7ff7 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -194,7 +194,7 @@ class RegisterController extends AbstractBaseController * @return void * @throws Exception */ - private function doValidateRegistration(string $username, string $email, string $realname, string $comments, string $password) + private function doValidateRegistration(string $username, string $email, string $realname, string $comments, string $password): void { // All fields are required if ($username === '' || $email === '' || $realname === '' || $comments === '' || $password === '') { @@ -253,7 +253,7 @@ class RegisterController extends AbstractBaseController * @return void * @throws NotFoundHttpException */ - private function checkRegistrationAllowed() + private function checkRegistrationAllowed(): void { if (Site::getPreference('USE_REGISTRATION_MODULE') !== '1') { throw new NotFoundHttpException(); diff --git a/app/Http/Controllers/AutocompleteController.php b/app/Http/Controllers/AutocompleteController.php index a658004082..31a7ec8cec 100644 --- a/app/Http/Controllers/AutocompleteController.php +++ b/app/Http/Controllers/AutocompleteController.php @@ -181,12 +181,12 @@ class AutocompleteController extends AbstractBaseController if (empty($data) && $tree->getPreference('GEONAMES_ACCOUNT')) { // No place found? Use an external gazetteer $url = - "http://api.geonames.org/searchJSON" . - "?name_startsWith=" . urlencode($query) . - "&lang=" . WT_LOCALE . - "&fcode=CMTY&fcode=ADM4&fcode=PPL&fcode=PPLA&fcode=PPLC" . - "&style=full" . - "&username=" . $tree->getPreference('GEONAMES_ACCOUNT'); + 'http://api.geonames.org/searchJSON' . + '?name_startsWith=' . urlencode($query) . + '&lang=' . WT_LOCALE . + '&fcode=CMTY&fcode=ADM4&fcode=PPL&fcode=PPLA&fcode=PPLC' . + '&style=full' . + '&username=' . $tree->getPreference('GEONAMES_ACCOUNT'); // try to use curl when file_get_contents not allowed if (ini_get('allow_url_fopen')) { @@ -402,12 +402,12 @@ class AutocompleteController extends AbstractBaseController // No place found? Use an external gazetteer if (empty($results) && $tree->getPreference('GEONAMES_ACCOUNT')) { $url = - "http://api.geonames.org/searchJSON" . - "?name_startsWith=" . urlencode($query) . - "&lang=" . WT_LOCALE . - "&fcode=CMTY&fcode=ADM4&fcode=PPL&fcode=PPLA&fcode=PPLC" . - "&style=full" . - "&username=" . $tree->getPreference('GEONAMES_ACCOUNT'); + 'http://api.geonames.org/searchJSON' . + '?name_startsWith=' . urlencode($query) . + '&lang=' . WT_LOCALE . + '&fcode=CMTY&fcode=ADM4&fcode=PPL&fcode=PPLA&fcode=PPLC' . + '&style=full' . + '&username=' . $tree->getPreference('GEONAMES_ACCOUNT'); // try to use curl when file_get_contents not allowed if (ini_get('allow_url_fopen')) { $json = file_get_contents($url); diff --git a/app/Http/Controllers/BranchesController.php b/app/Http/Controllers/BranchesController.php index 03a3783b53..d00dfff10e 100644 --- a/app/Http/Controllers/BranchesController.php +++ b/app/Http/Controllers/BranchesController.php @@ -256,7 +256,7 @@ class BranchesController extends AbstractBaseController * * @return string */ - private function getDescendantsHtml(Tree $tree, array $individuals, array $ancestors, string $surname, bool $soundex_dm, bool $soundex_std, Individual $individual, Family $parents = null) + private function getDescendantsHtml(Tree $tree, array $individuals, array $ancestors, string $surname, bool $soundex_dm, bool $soundex_std, Individual $individual, Family $parents = null): string { $module = $this->module_service->findByComponent(ModuleChartInterface::class, $tree, Auth::user())->first(function (ModuleInterface $module) { return $module instanceof RelationshipsChartModule; diff --git a/app/Http/Controllers/CalendarController.php b/app/Http/Controllers/CalendarController.php index 419c2d6f86..5ff4568980 100644 --- a/app/Http/Controllers/CalendarController.php +++ b/app/Http/Controllers/CalendarController.php @@ -95,20 +95,18 @@ class CalendarController extends AbstractBaseController } $ged_date = new Date("FROM {$cal} {$match[1]} TO {$cal} {$match[2]}"); $view = 'year'; - } else { + } elseif (preg_match('/^(\d+)(\?+)$/', $year, $match)) { // advanced-year "decade/century wildcard" - if (preg_match('/^(\d+)(\?+)$/', $year, $match)) { - $y1 = $match[1] . str_replace('?', '0', $match[2]); - $y2 = $match[1] . str_replace('?', '9', $match[2]); - $ged_date = new Date("FROM {$cal} {$y1} TO {$cal} {$y2}"); - $view = 'year'; - } else { - if ($year < 0) { - $year = (-$year) . ' B.C.'; - } // need BC to parse date - $ged_date = new Date("{$cal} {$day} {$month} {$year}"); - $year = $ged_date->minimumDate()->year; // need negative year for year entry field. - } + $y1 = $match[1] . str_replace('?', '0', $match[2]); + $y2 = $match[1] . str_replace('?', '9', $match[2]); + $ged_date = new Date("FROM {$cal} {$y1} TO {$cal} {$y2}"); + $view = 'year'; + } else { + if ($year < 0) { + $year = (-$year) . ' B.C.'; + } // need BC to parse date + $ged_date = new Date("{$cal} {$day} {$month} {$year}"); + $year = $ged_date->minimumDate()->year; // need negative year for year entry field. } $cal_date = $ged_date->minimumDate(); @@ -214,19 +212,17 @@ class CalendarController extends AbstractBaseController } $ged_date = new Date("FROM {$cal} {$match[1]} TO {$cal} {$match[2]}"); $view = 'year'; - } else { + } elseif (preg_match('/^(\d+)(\?+)$/', $year, $match)) { // advanced-year "decade/century wildcard" - if (preg_match('/^(\d+)(\?+)$/', $year, $match)) { - $y1 = $match[1] . str_replace('?', '0', $match[2]); - $y2 = $match[1] . str_replace('?', '9', $match[2]); - $ged_date = new Date("FROM {$cal} {$y1} TO {$cal} {$y2}"); - $view = 'year'; - } else { - if ($year < 0) { - $year = (-$year) . ' B.C.'; - } // need BC to parse date - $ged_date = new Date("{$cal} {$day} {$month} {$year}"); - } + $y1 = $match[1] . str_replace('?', '0', $match[2]); + $y2 = $match[1] . str_replace('?', '9', $match[2]); + $ged_date = new Date("FROM {$cal} {$y1} TO {$cal} {$y2}"); + $view = 'year'; + } else { + if ($year < 0) { + $year = (-$year) . ' B.C.'; + } // need BC to parse date + $ged_date = new Date("{$cal} {$day} {$month} {$year}"); } $cal_date = $ged_date->minimumDate(); @@ -443,7 +439,7 @@ class CalendarController extends AbstractBaseController $alt_date = new JalaliDate($cal_date->minimumJulianDay() + $d - 1); break; default: - throw new DomainException("Invalid calendar: " . $convcal); + throw new DomainException('Invalid calendar: ' . $convcal); } if (get_class($alt_date) !== get_class($cal_date) && $alt_date->inValidRange()) { echo '<span class="rtl_cal_day">' . $alt_date->format('%j %M') . '</span>'; diff --git a/app/Http/Controllers/GedcomFileController.php b/app/Http/Controllers/GedcomFileController.php index 991d9281d7..82e38db508 100644 --- a/app/Http/Controllers/GedcomFileController.php +++ b/app/Http/Controllers/GedcomFileController.php @@ -58,11 +58,11 @@ class GedcomFileController extends AbstractBaseController $import_offset = (int) DB::table('gedcom_chunk') ->where('gedcom_id', '=', $tree->id()) ->where('imported', '=', '1') - ->sum(DB::raw("LENGTH(chunk_data)")); + ->sum(DB::raw('LENGTH(chunk_data)')); $import_total = (int) DB::table('gedcom_chunk') ->where('gedcom_id', '=', $tree->id()) - ->sum(DB::raw("LENGTH(chunk_data)")); + ->sum(DB::raw('LENGTH(chunk_data)')); // Finished? if ($import_offset === $import_total) { @@ -106,7 +106,7 @@ class GedcomFileController extends AbstractBaseController // What character set is this? Need to convert it to UTF8 if (preg_match('/[\r\n][ \t]*1 CHAR(?:ACTER)? (.+)/', $data->chunk_data, $match)) { - $charset = trim(strtoupper($match[1])); + $charset = strtoupper(trim($match[1])); } else { $charset = 'ASCII'; } diff --git a/app/Http/Controllers/HomePageController.php b/app/Http/Controllers/HomePageController.php index b41de25d58..ed3c852871 100644 --- a/app/Http/Controllers/HomePageController.php +++ b/app/Http/Controllers/HomePageController.php @@ -795,7 +795,7 @@ class HomePageController extends AbstractBaseController * * @return void */ - private function updateTreeBlocks(int $tree_id, array $main_blocks, array $side_blocks) + private function updateTreeBlocks(int $tree_id, array $main_blocks, array $side_blocks): void { $existing_block_ids = DB::table('block') ->where('gedcom_id', '=', $tree_id) @@ -851,7 +851,7 @@ class HomePageController extends AbstractBaseController * * @return void */ - private function updateUserBlocks(int $user_id, array $main_blocks, array $side_blocks) + private function updateUserBlocks(int $user_id, array $main_blocks, array $side_blocks): void { $existing_block_ids = DB::table('block') ->where('user_id', '=', $user_id) diff --git a/app/Http/Controllers/MediaFileController.php b/app/Http/Controllers/MediaFileController.php index ad556d0c22..5c6d32ad0a 100644 --- a/app/Http/Controllers/MediaFileController.php +++ b/app/Http/Controllers/MediaFileController.php @@ -231,9 +231,8 @@ class MediaFileController extends AbstractBaseController private function glideSignature(): Signature { $glide_key = Site::getPreference('glide-key'); - $signature = SignatureFactory::create($glide_key); - return $signature; + return SignatureFactory::create($glide_key); } /** diff --git a/app/Http/Controllers/PlaceHierarchyController.php b/app/Http/Controllers/PlaceHierarchyController.php index 1115fc6518..5d6126f961 100644 --- a/app/Http/Controllers/PlaceHierarchyController.php +++ b/app/Http/Controllers/PlaceHierarchyController.php @@ -166,7 +166,7 @@ class PlaceHierarchyController extends AbstractBaseController * @return array|null * @throws \Exception */ - private function getHierarchy($tree, $place, $parent) + private function getHierarchy($tree, $place, $parent): ?array { $child_places = $place->getChildPlaces(); $numfound = count($child_places); @@ -177,7 +177,7 @@ class PlaceHierarchyController extends AbstractBaseController return [ 'tree' => $tree, - 'col_class' => "w-" . ($divisor === 2 ? "25" : "50"), + 'col_class' => 'w-' . ($divisor === 2 ? '25' : '50'), 'columns' => array_chunk($child_places, (int) ceil($numfound / $divisor)), 'place' => $place, 'parent' => $parent, @@ -240,7 +240,7 @@ class PlaceHierarchyController extends AbstractBaseController private function breadcrumbs($place): array { $breadcrumbs = []; - if ($place->gedcomName() <> '') { + if ($place->gedcomName() !== '') { $breadcrumbs[] = $place; $parent_place = $place->parent(); while ($parent_place->gedcomName() !== '') { diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 12c8c8a463..0c18f7bc6a 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -273,6 +273,32 @@ class SearchController extends AbstractBaseController } /** + * Convert the query into an array of search terms + * + * @param string $query + * + * @return string[] + */ + private function extractSearchTerms(string $query): array + { + $search_terms = []; + + // Words in double quotes stay together + while (preg_match('/"([^"]+)"/', $query, $match)) { + $search_terms[] = trim($match[1]); + $query = str_replace($match[0], '', $query); + } + + // Other words get treated separately + while (preg_match('/[\S]+/', $query, $match)) { + $search_terms[] = trim($match[0]); + $query = str_replace($match[0], '', $query); + } + + return $search_terms; + } + + /** * The phonetic search. * * @param Request $request @@ -363,11 +389,11 @@ class SearchController extends AbstractBaseController switch ($context) { case 'all': - $records = $this->search_service->searchIndividuals([$tree], [$search])->all(); + $records = $this->search_service->searchIndividuals([$tree], [$search]); $count = $this->replaceRecords($records, $search, $replace); FlashMessages::addMessage(I18N::plural('%s individual has been updated.', '%s individuals have been updated.', $count, I18N::number($count))); - $records = $this->search_service->searchFamilies([$tree], [$search])->all(); + $records = $this->search_service->searchFamilies([$tree], [$search]); $count = $this->replaceRecords($records, $search, $replace); FlashMessages::addMessage(I18N::plural('%s family has been updated.', '%s families have been updated.', $count, I18N::number($count))); @@ -397,17 +423,17 @@ class SearchController extends AbstractBaseController '_AKA', ], $adv_name_tags)); - $records = $this->search_service->searchIndividuals([$tree], [$search])->all(); + $records = $this->search_service->searchIndividuals([$tree], [$search]); $count = $this->replaceIndividualNames($records, $search, $replace, $name_tags); FlashMessages::addMessage(I18N::plural('%s individual has been updated.', '%s individuals have been updated.', $count, I18N::number($count))); break; case 'place': - $records = $this->search_service->searchIndividuals([$tree], [$search])->all(); + $records = $this->search_service->searchIndividuals([$tree], [$search]); $count = $this->replacePlaces($records, $search, $replace); FlashMessages::addMessage(I18N::plural('%s individual has been updated.', '%s individuals have been updated.', $count, I18N::number($count))); - $records = $this->search_service->searchFamilies([$tree], [$search])->all(); + $records = $this->search_service->searchFamilies([$tree], [$search]); $count = $this->replacePlaces($records, $search, $replace); FlashMessages::addMessage(I18N::plural('%s family has been updated.', '%s families have been updated.', $count, I18N::number($count))); break; @@ -424,58 +450,39 @@ class SearchController extends AbstractBaseController } /** - * A structured search. + * @param Collection $records + * @param string $search + * @param string $replace * - * @param Request $request - * @param Tree $tree - * - * @return Response + * @return int */ - public function advanced(Request $request, Tree $tree): Response + private function replaceRecords(Collection $records, string $search, string $replace): int { - $default_fields = array_fill_keys(self::DEFAULT_ADVANCED_FIELDS, ''); - - $fields = $request->get('fields', $default_fields); - $modifiers = $request->get('modifiers', []); - $other_field = $request->get('other_field', ''); - $other_value = $request->get('other_value', ''); - - if ($other_field !== '' && $other_value !== '') { - $fields[$other_field] = $other_value; - } + $count = 0; + $query = preg_quote($search, '/'); - $other_fields = $this->otherFields($fields); - $date_options = $this->dateOptions(); - $name_options = $this->nameOptions(); + foreach ($records as $record) { + $old_record = $record->gedcom(); + $new_record = preg_replace('/(\n\d [A-Z0-9_]+ )' . $query . '/i', '$1' . $replace, $old_record); - if (!empty(array_filter($fields))) { - $individuals = $this->search_service->searchIndividualsAdvanced([$tree], $fields, $modifiers); - } else { - $individuals = []; + if ($new_record !== $old_record) { + $record->updateRecord($new_record, true); + $count++; + } } - $title = I18N::translate('Advanced search'); - - return $this->viewResponse('search-advanced-page', [ - 'date_options' => $date_options, - 'fields' => $fields, - 'individuals' => $individuals, - 'modifiers' => $modifiers, - 'name_options' => $name_options, - 'other_fields' => $other_fields, - 'title' => $title, - ]); + return $count; } /** - * @param GedcomRecord[] $records - * @param string $search - * @param string $replace - * @param string[] $name_tags + * @param Collection $records + * @param string $search + * @param string $replace + * @param string[] $name_tags * * @return int */ - private function replaceIndividualNames(array $records, string $search, string $replace, array $name_tags): int + private function replaceIndividualNames(Collection $records, string $search, string $replace, array $name_tags): int { $pattern = '/(\n\d (?:' . implode('|', $name_tags) . ') (?:.*))' . preg_quote($search, '/') . '/i'; $replacement = '$1' . $replace; @@ -495,13 +502,13 @@ class SearchController extends AbstractBaseController } /** - * @param GedcomRecord[] $records - * @param string $search - * @param string $replace + * @param Collection $records + * @param string $search + * @param string $replace * * @return int */ - private function replacePlaces(array $records, string $search, string $replace): int + private function replacePlaces(Collection $records, string $search, string $replace): int { $pattern = '/(\n\d PLAC\b.* )' . preg_quote($search, '/') . '([,\n])/i'; $replacement = '$1' . $replace . '$2'; @@ -521,28 +528,47 @@ class SearchController extends AbstractBaseController } /** - * @param GedcomRecord[] $records - * @param string $search - * @param string $replace + * A structured search. * - * @return int + * @param Request $request + * @param Tree $tree + * + * @return Response */ - private function replaceRecords(array $records, string $search, string $replace): int + public function advanced(Request $request, Tree $tree): Response { - $count = 0; - $query = preg_quote($search, '/'); + $default_fields = array_fill_keys(self::DEFAULT_ADVANCED_FIELDS, ''); - foreach ($records as $record) { - $old_record = $record->gedcom(); - $new_record = preg_replace('/(\n\d [A-Z0-9_]+ )' . $query . '/i', '$1' . $replace, $old_record); + $fields = $request->get('fields', $default_fields); + $modifiers = $request->get('modifiers', []); + $other_field = $request->get('other_field', ''); + $other_value = $request->get('other_value', ''); - if ($new_record !== $old_record) { - $record->updateRecord($new_record, true); - $count++; - } + if ($other_field !== '' && $other_value !== '') { + $fields[$other_field] = $other_value; } - return $count; + $other_fields = $this->otherFields($fields); + $date_options = $this->dateOptions(); + $name_options = $this->nameOptions(); + + if (!empty(array_filter($fields))) { + $individuals = $this->search_service->searchIndividualsAdvanced([$tree], $fields, $modifiers); + } else { + $individuals = []; + } + + $title = I18N::translate('Advanced search'); + + return $this->viewResponse('search-advanced-page', [ + 'date_options' => $date_options, + 'fields' => $fields, + 'individuals' => $individuals, + 'modifiers' => $modifiers, + 'name_options' => $name_options, + 'other_fields' => $other_fields, + 'title' => $title, + ]); } /** @@ -594,30 +620,4 @@ class SearchController extends AbstractBaseController 'SDX' => I18N::translate('Sounds like'), ]; } - - /** - * Convert the query into an array of search terms - * - * @param string $query - * - * @return string[] - */ - private function extractSearchTerms(string $query): array - { - $search_terms = []; - - // Words in double quotes stay together - while (preg_match('/"([^"]+)"/', $query, $match)) { - $search_terms[] = trim($match[1]); - $query = str_replace($match[0], '', $query); - } - - // Other words get treated separately - while (preg_match('/[\S]+/', $query, $match)) { - $search_terms[] = trim($match[0]); - $query = str_replace($match[0], '', $query); - } - - return $search_terms; - } } diff --git a/app/Http/Middleware/Housekeeping.php b/app/Http/Middleware/Housekeeping.php index bb1423d615..4b579701c6 100644 --- a/app/Http/Middleware/Housekeeping.php +++ b/app/Http/Middleware/Housekeeping.php @@ -87,7 +87,7 @@ class Housekeeping implements MiddlewareInterface * * @return void */ - private function runHousekeeping() + private function runHousekeeping(): void { $data_filesystem = app(FilesystemInterface::class); $root_filesystem = new Filesystem(new Local(WT_ROOT)); |
