diff options
35 files changed, 53 insertions, 52 deletions
diff --git a/app/Functions/FunctionsPrint.php b/app/Functions/FunctionsPrint.php index 4914aa470c..da60cfcc7f 100644 --- a/app/Functions/FunctionsPrint.php +++ b/app/Functions/FunctionsPrint.php @@ -488,6 +488,7 @@ class FunctionsPrint 'add_facts' => $translated_addfacts, 'quick_facts' => $quickfacts, 'record' => $record, + 'tree' => $tree, ]); } } diff --git a/app/Http/Controllers/BranchesController.php b/app/Http/Controllers/BranchesController.php index f3260aa8b3..c85ec9971f 100644 --- a/app/Http/Controllers/BranchesController.php +++ b/app/Http/Controllers/BranchesController.php @@ -37,6 +37,7 @@ use Illuminate\Database\Query\JoinClause; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; +use function assert; use function stripos; use function view; @@ -67,6 +68,9 @@ class BranchesController extends AbstractBaseController */ public function page(ServerRequestInterface $request): ResponseInterface { + $tree = $request->getAttribute('tree'); + assert($tree instanceof Tree); + $module = $request->getAttribute('module'); $action = $request->getAttribute('action'); @@ -87,6 +91,7 @@ class BranchesController extends AbstractBaseController 'soundex_std' => $soundex_std, 'surname' => $surname, 'title' => $title, + 'tree' => $tree, 'module' => $module, 'action' => $action, ]); diff --git a/app/Http/Controllers/IndividualController.php b/app/Http/Controllers/IndividualController.php index 2268fd4b1a..9c8526f970 100644 --- a/app/Http/Controllers/IndividualController.php +++ b/app/Http/Controllers/IndividualController.php @@ -163,6 +163,7 @@ class IndividualController extends AbstractBaseController 'tabs' => $this->getTabs($individual), 'significant' => $this->significant($individual), 'title' => $individual->fullName() . ' ' . $individual->getLifeSpan(), + 'tree' => $tree, 'user_link' => $user_link, ]); } diff --git a/app/Http/Controllers/ListController.php b/app/Http/Controllers/ListController.php index 49a58409e0..2f0af7910a 100644 --- a/app/Http/Controllers/ListController.php +++ b/app/Http/Controllers/ListController.php @@ -394,6 +394,7 @@ class ListController extends AbstractBaseController return $this->viewResponse('individual-list-page', [ 'content' => $html, 'title' => $title, + 'tree' => $tree, ]); } @@ -454,6 +455,7 @@ class ListController extends AbstractBaseController 'pages' => $pages, 'subdirs' => $subdirs, 'title' => I18N::translate('Media'), + 'tree' => $tree, 'module' => $module, 'action' => $action, ]); @@ -474,6 +476,7 @@ class ListController extends AbstractBaseController return $this->viewResponse('note-list-page', [ 'notes' => $notes, 'title' => I18N::translate('Shared notes'), + 'tree' => $tree, ]); } @@ -492,6 +495,7 @@ class ListController extends AbstractBaseController return $this->viewResponse('repository-list-page', [ 'repositories' => $repositories, 'title' => I18N::translate('Repositories'), + 'tree' => $tree, ]); } @@ -510,6 +514,7 @@ class ListController extends AbstractBaseController return $this->viewResponse('source-list-page', [ 'sources' => $sources, 'title' => I18N::translate('Sources'), + 'tree' => $tree, ]); } diff --git a/app/Http/Middleware/Router.php b/app/Http/Middleware/Router.php index 315691b9d5..68b2dcc02d 100644 --- a/app/Http/Middleware/Router.php +++ b/app/Http/Middleware/Router.php @@ -84,9 +84,8 @@ class Router implements MiddlewareInterface // No route matched? if ($route === false) { - // Bind the request into the container and the layout + // Bind the request into the container app()->instance(ServerRequestInterface::class, $request); - View::share('request', $request); return $handler->handle($request); } @@ -116,9 +115,8 @@ class Router implements MiddlewareInterface $request = $request->withAttribute($key, $value); } - // Bind the request into the container and the layout + // Bind the request into the container app()->instance(ServerRequestInterface::class, $request); - View::share('request', $request); $dispatcher = new Dispatcher($middleware, app()); diff --git a/app/Http/RequestHandlers/EditRawFactPage.php b/app/Http/RequestHandlers/EditRawFactPage.php index f65c4d2181..d09d6b66f2 100644 --- a/app/Http/RequestHandlers/EditRawFactPage.php +++ b/app/Http/RequestHandlers/EditRawFactPage.php @@ -62,6 +62,7 @@ class EditRawFactPage implements RequestHandlerInterface return $this->viewResponse('edit/raw-gedcom-fact', [ 'fact' => $fact, 'title' => $title, + 'tree' => $tree, ]); } } diff --git a/app/Http/RequestHandlers/EditRawRecordPage.php b/app/Http/RequestHandlers/EditRawRecordPage.php index 2217783ae1..9a40041de1 100644 --- a/app/Http/RequestHandlers/EditRawRecordPage.php +++ b/app/Http/RequestHandlers/EditRawRecordPage.php @@ -57,6 +57,7 @@ class EditRawRecordPage implements RequestHandlerInterface return $this->viewResponse('edit/raw-gedcom-record', [ 'record' => $record, 'title' => $title, + 'tree' => $tree, ]); } } diff --git a/app/Http/RequestHandlers/PasswordResetPage.php b/app/Http/RequestHandlers/PasswordResetPage.php index 63a4eada7b..f5e68d8c55 100644 --- a/app/Http/RequestHandlers/PasswordResetPage.php +++ b/app/Http/RequestHandlers/PasswordResetPage.php @@ -58,12 +58,18 @@ class PasswordResetPage implements RequestHandlerInterface, StatusCodeInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { + $tree = $request->getAttribute('tree'); $title = I18N::translate('Set a new password'); $token = $request->getQueryParams()['token'] ?? ''; $user = $this->user_service->findByToken($token); if ($user instanceof User) { - return $this->viewResponse('password-reset-page', ['title' => $title, 'user' => $user, 'token' => $token]); + return $this->viewResponse('password-reset-page', [ + 'title' => $title, + 'tree' => $tree, + 'user' => $user, + 'token' => $token, + ]); } $message1 = I18N::translate('The password reset link has expired.'); diff --git a/app/Http/RequestHandlers/SearchAdvancedPage.php b/app/Http/RequestHandlers/SearchAdvancedPage.php index 8596fc9d2d..2bec3948fb 100644 --- a/app/Http/RequestHandlers/SearchAdvancedPage.php +++ b/app/Http/RequestHandlers/SearchAdvancedPage.php @@ -174,6 +174,7 @@ class SearchAdvancedPage implements RequestHandlerInterface 'name_options' => $name_options, 'other_fields' => $other_fields, 'title' => $title, + 'tree' => $tree, ]); } diff --git a/app/Http/ViewResponseTrait.php b/app/Http/ViewResponseTrait.php index 3a9fb5a867..e008acb5de 100644 --- a/app/Http/ViewResponseTrait.php +++ b/app/Http/ViewResponseTrait.php @@ -21,6 +21,7 @@ namespace Fisharebest\Webtrees\Http; use Fig\Http\Message\StatusCodeInterface; use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; use function response; use function view; @@ -48,6 +49,7 @@ trait ViewResponseTrait // Render the view $layout_data['content'] = view($view_name, $view_data); + $layout_data['request'] = app(ServerRequestInterface::class); // Most pages use the default layout. Other built-in layouts include admin and ajax. $layout = $this->layout; diff --git a/app/Module/AncestorsChartModule.php b/app/Module/AncestorsChartModule.php index cc62b41601..e6103b2010 100644 --- a/app/Module/AncestorsChartModule.php +++ b/app/Module/AncestorsChartModule.php @@ -29,7 +29,6 @@ use Fisharebest\Webtrees\Services\ChartService; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; - use function app; use function assert; use function max; @@ -230,10 +229,7 @@ class AncestorsChartModule extends AbstractModule implements ModuleChartInterfac } } - return $this->viewResponse('lists/families-table', [ - 'families' => $families, - 'tree' => $tree, - ]); + return $this->viewResponse('lists/families-table', ['families' => $families, 'tree' => $tree]); } } @@ -254,6 +250,7 @@ class AncestorsChartModule extends AbstractModule implements ModuleChartInterfac 'style' => $style, 'styles' => $this->styles(), 'title' => $this->chartTitle($individual), + 'tree' => $tree, ]); } diff --git a/app/Module/CompactTreeChartModule.php b/app/Module/CompactTreeChartModule.php index 95c34a7e0c..6b3ecfe154 100644 --- a/app/Module/CompactTreeChartModule.php +++ b/app/Module/CompactTreeChartModule.php @@ -187,6 +187,7 @@ class CompactTreeChartModule extends AbstractModule implements ModuleChartInterf 'individual' => $individual, 'module' => $this->name(), 'title' => $this->chartTitle($individual), + 'tree' => $tree, ]); } } diff --git a/app/Module/DescendancyChartModule.php b/app/Module/DescendancyChartModule.php index 6c84a5829f..97e11698da 100644 --- a/app/Module/DescendancyChartModule.php +++ b/app/Module/DescendancyChartModule.php @@ -29,7 +29,6 @@ use Fisharebest\Webtrees\Services\ChartService; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; - use function app; use function assert; use function max; @@ -220,10 +219,7 @@ class DescendancyChartModule extends AbstractModule implements ModuleChartInterf case self::CHART_STYLE_FAMILIES: $families = $this->chart_service->descendantFamilies($individual, $generations - 1); - return $this->viewResponse('lists/families-table', [ - 'families' => $families, - 'tree' => $tree, - ]); + return $this->viewResponse('lists/families-table', ['families' => $families, 'tree' => $tree]); } } @@ -244,6 +240,7 @@ class DescendancyChartModule extends AbstractModule implements ModuleChartInterf 'minimum_generations' => self::MINIMUM_GENERATIONS, 'module' => $this->name(), 'title' => $this->chartTitle($individual), + 'tree' => $tree, ]); } diff --git a/app/Module/DescendancyModule.php b/app/Module/DescendancyModule.php index 7b2ae85fea..6ea2a53a7d 100644 --- a/app/Module/DescendancyModule.php +++ b/app/Module/DescendancyModule.php @@ -152,6 +152,7 @@ class DescendancyModule extends AbstractModule implements ModuleSidebarInterface { return view('modules/descendancy/sidebar', [ 'individual_list' => $this->getPersonLi($individual, 1), + 'tree' => $individual->tree(), ]); } diff --git a/app/Module/FamilyBookChartModule.php b/app/Module/FamilyBookChartModule.php index 1d30799570..4bda497af6 100644 --- a/app/Module/FamilyBookChartModule.php +++ b/app/Module/FamilyBookChartModule.php @@ -217,6 +217,7 @@ class FamilyBookChartModule extends AbstractModule implements ModuleChartInterfa 'module' => $this->name(), 'spouses' => $spouses, 'title' => $this->chartTitle($individual), + 'tree' => $tree, ]); } } diff --git a/app/Module/FanChartModule.php b/app/Module/FanChartModule.php index 078a7e5a41..bfdccbf124 100644 --- a/app/Module/FanChartModule.php +++ b/app/Module/FanChartModule.php @@ -236,6 +236,7 @@ class FanChartModule extends AbstractModule implements ModuleChartInterface, Req 'style' => $style, 'styles' => $this->styles(), 'title' => $this->chartTitle($individual), + 'tree' => $tree, 'width' => $width, ]); } diff --git a/app/Module/HourglassChartModule.php b/app/Module/HourglassChartModule.php index e514427e8b..9993102d43 100644 --- a/app/Module/HourglassChartModule.php +++ b/app/Module/HourglassChartModule.php @@ -207,6 +207,7 @@ class HourglassChartModule extends AbstractModule implements ModuleChartInterfac 'module' => $this->name(), 'spouses' => $spouses, 'title' => $this->chartTitle($individual), + 'tree' => $tree, ]); } diff --git a/app/Module/InteractiveTree/TreeView.php b/app/Module/InteractiveTree/TreeView.php index a16a44f80c..2af566dcf6 100644 --- a/app/Module/InteractiveTree/TreeView.php +++ b/app/Module/InteractiveTree/TreeView.php @@ -59,6 +59,7 @@ class TreeView 'module' => 'tree', 'name' => $this->name, 'individual' => $this->drawPerson($individual, $generations, 0, null, '', true), + 'tree' => $individual->tree(), ]); return [ diff --git a/app/Module/LifespansChartModule.php b/app/Module/LifespansChartModule.php index 04f4e1480d..89fb4da047 100644 --- a/app/Module/LifespansChartModule.php +++ b/app/Module/LifespansChartModule.php @@ -202,6 +202,7 @@ class LifespansChartModule extends AbstractModule implements ModuleChartInterfac 'module' => $this->name(), 'reset_url' => $reset_url, 'title' => $this->title(), + 'tree' => $tree, 'xrefs' => $xrefs, ]); } diff --git a/app/Module/LoginBlockModule.php b/app/Module/LoginBlockModule.php index cc3f768d9d..a2dc51bc41 100644 --- a/app/Module/LoginBlockModule.php +++ b/app/Module/LoginBlockModule.php @@ -75,6 +75,7 @@ class LoginBlockModule extends AbstractModule implements ModuleBlockInterface $title = I18N::translate('Sign in'); $content = view('modules/login_block/sign-in', [ 'allow_register' => (bool) Site::getPreference('USE_REGISTRATION_MODULE'), + 'tree' => $tree, ]); } diff --git a/app/Module/PedigreeChartModule.php b/app/Module/PedigreeChartModule.php index b6716cc9bc..4be91fac96 100644 --- a/app/Module/PedigreeChartModule.php +++ b/app/Module/PedigreeChartModule.php @@ -259,6 +259,7 @@ class PedigreeChartModule extends AbstractModule implements ModuleChartInterface 'style' => $style, 'styles' => $this->styles(), 'title' => $this->chartTitle($individual), + 'tree' => $tree, ]); } diff --git a/app/Module/StatisticsChartModule.php b/app/Module/StatisticsChartModule.php index 11dc353f9a..983523e45a 100644 --- a/app/Module/StatisticsChartModule.php +++ b/app/Module/StatisticsChartModule.php @@ -177,6 +177,7 @@ class StatisticsChartModule extends AbstractModule implements ModuleChartInterfa 'module' => $this->name(), 'tabs' => $tabs, 'title' => $this->title(), + 'tree' => $tree, ]); } diff --git a/app/Module/TimelineChartModule.php b/app/Module/TimelineChartModule.php index e4c43f3ca5..a2ab132b11 100644 --- a/app/Module/TimelineChartModule.php +++ b/app/Module/TimelineChartModule.php @@ -240,6 +240,7 @@ class TimelineChartModule extends AbstractModule implements ModuleChartInterface 'reset_url' => $reset_url, 'scale' => $scale, 'title' => $this->title(), + 'tree' => $tree, 'zoom_in_url' => $zoom_in_url, 'zoom_out_url' => $zoom_out_url, ]); diff --git a/app/View.php b/app/View.php index 7e22b07c3d..16e5c85f98 100644 --- a/app/View.php +++ b/app/View.php @@ -36,6 +36,8 @@ use function ob_get_level; use function ob_start; use function sha1; +use const EXTR_OVERWRITE; + /** * Simple view/template class. */ @@ -69,11 +71,6 @@ class View private static $replacements = []; /** - * @var mixed[] Data to be inserted into all views. - */ - private static $shared_data = []; - - /** * @var string Implementation of Blade "stacks". */ private static $stack; @@ -96,19 +93,6 @@ class View } /** - * Shared data that is available to all views. - * - * @param string $key - * @param mixed $value - * - * @return void - */ - public static function share(string $key, $value): void - { - self::$shared_data[$key] = $value; - } - - /** * Implementation of Blade "stacks". * * @see https://laravel.com/docs/5.5/blade#stacks @@ -194,8 +178,7 @@ class View */ public function render(): string { - $variables_for_view = $this->data + self::$shared_data; - extract($variables_for_view, EXTR_SKIP); + extract($this->data, EXTR_OVERWRITE); try { ob_start(); diff --git a/resources/views/individual-page.phtml b/resources/views/individual-page.phtml index 88c2aaa454..cd65e15b3f 100644 --- a/resources/views/individual-page.phtml +++ b/resources/views/individual-page.phtml @@ -46,7 +46,7 @@ use Illuminate\Support\Collection; <?= $individual->fullName() ?><?= $user_link ?>, <?= $individual->getLifeSpan() ?> <?= $age ?> </h2> <?php if ($individual->canEdit()) : ?> - <?= view('individual-page-menu', ['individual' => $individual, 'count_names' => $count_names, 'count_sex' => $count_sex]) ?> + <?= view('individual-page-menu', ['individual' => $individual, 'count_names' => $count_names, 'count_sex' => $count_sex, 'tree' => $tree]) ?> <?php endif ?> </div> diff --git a/resources/views/place-events.phtml b/resources/views/place-events.phtml index 8e4c33fc1b..37766a0431 100644 --- a/resources/views/place-events.phtml +++ b/resources/views/place-events.phtml @@ -31,9 +31,7 @@ <?php if (empty($famlist)) : ?> <p><?= I18N::translate('No results found.') ?></p> <?php else : ?> - <?= view('lists/families-table', [ - 'families' => $famlist, - ]) ?> + <?= view('lists/families-table', ['families' => $famlist, 'tree' => $tree]) ?> <?php endif ?> </div> </div> diff --git a/resources/views/repository-list-page.phtml b/resources/views/repository-list-page.phtml index 38aadbd5e6..19ffc64459 100644 --- a/resources/views/repository-list-page.phtml +++ b/resources/views/repository-list-page.phtml @@ -3,5 +3,5 @@ </h2> <div class="wt-page-content"> - <?= view('lists/repositories-table', ['repositories' => $repositories]) ?> + <?= view('lists/repositories-table', ['repositories' => $repositories, 'tree' => $tree]) ?> </div> diff --git a/resources/views/repository-page.phtml b/resources/views/repository-page.phtml index 9e169db337..ece5b25199 100644 --- a/resources/views/repository-page.phtml +++ b/resources/views/repository-page.phtml @@ -63,7 +63,7 @@ use Fisharebest\Webtrees\I18N; </div> <div class="tab-pane fade" role="tabpanel" id="sources"> - <?= view('lists/sources-table', ['sources' => $sources]) ?> + <?= view('lists/sources-table', ['sources' => $sources, 'tree' => $tree]) ?> </div> </div> </div> diff --git a/resources/views/search-advanced-page.phtml b/resources/views/search-advanced-page.phtml index 72de97fd02..5512e60ae9 100644 --- a/resources/views/search-advanced-page.phtml +++ b/resources/views/search-advanced-page.phtml @@ -81,7 +81,7 @@ use Fisharebest\Webtrees\I18N; <?= I18N::translate('No results found.') ?> </div> <?php else : ?> - <?= view('search-results', ['individuals' => $individuals, 'search_families' => false, 'search_individuals' => true, 'search_notes' => false, 'search_sources' => false, 'search_repositories' => false]) ?> + <?= view('search-results', ['individuals' => $individuals, 'search_families' => false, 'search_individuals' => true, 'search_notes' => false, 'search_sources' => false, 'search_repositories' => false, 'tree' => $tree]) ?> <?php endif ?> <?php endif ?> diff --git a/resources/views/search-general-page.phtml b/resources/views/search-general-page.phtml index 970db3cc80..a8d1cfeb13 100644 --- a/resources/views/search-general-page.phtml +++ b/resources/views/search-general-page.phtml @@ -113,7 +113,7 @@ use Fisharebest\Webtrees\I18N; <?= I18N::translate('No results found.') ?> </div> <?php else : ?> - <?= view('search-results', ['families' => $families, 'individuals' => $individuals, 'notes' => $notes, 'repositories' => $repositories, 'sources' => $sources, 'search_families' => $search_families, 'search_individuals' => $search_individuals, 'search_notes' => $search_notes, 'search_repositories' => $search_repositories, 'search_sources' => $search_sources]) ?> + <?= view('search-results', ['families' => $families, 'individuals' => $individuals, 'notes' => $notes, 'repositories' => $repositories, 'sources' => $sources, 'search_families' => $search_families, 'search_individuals' => $search_individuals, 'search_notes' => $search_notes, 'search_repositories' => $search_repositories, 'search_sources' => $search_sources, 'tree' => $tree]) ?> <?php endif ?> <?php endif ?> diff --git a/resources/views/search-phonetic-page.phtml b/resources/views/search-phonetic-page.phtml index 2b9ff8deab..d328db5928 100644 --- a/resources/views/search-phonetic-page.phtml +++ b/resources/views/search-phonetic-page.phtml @@ -114,7 +114,7 @@ use Fisharebest\Webtrees\I18N; <?= I18N::translate('No results found.') ?> </div> <?php else : ?> - <?= view('search-results', ['individuals' => $individuals, 'search_families' => false, 'search_individuals' => true, 'search_notes' => false, 'search_sources' => false, 'search_repositories' => false]) ?> + <?= view('search-results', ['individuals' => $individuals, 'search_families' => false, 'search_individuals' => true, 'search_notes' => false, 'search_sources' => false, 'search_repositories' => false, 'tree' => $tree]) ?> <?php endif ?> <?php endif ?> diff --git a/resources/views/source-list-page.phtml b/resources/views/source-list-page.phtml index 71dfa710d3..146fb1ef6e 100644 --- a/resources/views/source-list-page.phtml +++ b/resources/views/source-list-page.phtml @@ -3,5 +3,5 @@ </h2> <div class="wt-page-content"> - <?= view('lists/sources-table', ['sources' => $sources]) ?> + <?= view('lists/sources-table', ['sources' => $sources, 'tree' => $tree]) ?> </div> diff --git a/tests/TestCase.php b/tests/TestCase.php index 84cbcdc6c3..b886570ef1 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -174,7 +174,6 @@ class TestCase extends \PHPUnit\Framework\TestCase ->withAttribute('locale', new LocaleEnUs()); app()->instance(ServerRequestInterface::class, $request); - View::share('request', $request); return $request; } @@ -222,8 +221,6 @@ class TestCase extends \PHPUnit\Framework\TestCase $tree->importGedcomFile($stream, $gedcom_file); - View::share('tree', $tree); - $timeout_service = new TimeoutService(microtime(true)); $controller = new GedcomFileController($timeout_service); $request = self::createRequest()->withAttribute('tree', $tree); diff --git a/tests/app/Http/RequestHandlers/LoginPageTest.php b/tests/app/Http/RequestHandlers/LoginPageTest.php index 5493c3073f..45cad5e138 100644 --- a/tests/app/Http/RequestHandlers/LoginPageTest.php +++ b/tests/app/Http/RequestHandlers/LoginPageTest.php @@ -36,7 +36,6 @@ class LoginPageTest extends TestCase public function testLoginPage(): void { $tree_service = new TreeService(); - View::share('tree', null); $request = self::createRequest(); $handler = new LoginPage($tree_service); $response = $handler->handle($request); diff --git a/tests/app/Http/RequestHandlers/PasswordResetPageTest.php b/tests/app/Http/RequestHandlers/PasswordResetPageTest.php index 9c290aebb3..6c853730d9 100644 --- a/tests/app/Http/RequestHandlers/PasswordResetPageTest.php +++ b/tests/app/Http/RequestHandlers/PasswordResetPageTest.php @@ -41,9 +41,7 @@ class PasswordResetPageTest extends TestCase $user_service = $this->createMock(UserService::class); $user_service->expects($this->once())->method('findByToken')->willReturn($user); - View::share('tree', null); - - $request = self::createRequest(); + $request = self::createRequest()->withAttribute('tree', null); $handler = new PasswordResetPage($user_service); $response = $handler->handle($request); |
