diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2019-01-24 12:44:02 +0000 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2019-01-24 12:49:45 +0000 |
| commit | 63276d8f3b702807b282100a6302f3d6329b2617 (patch) | |
| tree | 030510a7a29942cf403429f938dd6f15c5c8ebfb | |
| parent | 6a83cfe82cf72deb988ef6a54a7440e72b1b45e5 (diff) | |
| download | webtrees-63276d8f3b702807b282100a6302f3d6329b2617.tar.gz webtrees-63276d8f3b702807b282100a6302f3d6329b2617.tar.bz2 webtrees-63276d8f3b702807b282100a6302f3d6329b2617.zip | |
Refactoring module API
42 files changed, 127 insertions, 253 deletions
diff --git a/app/Functions/FunctionsEdit.php b/app/Functions/FunctionsEdit.php index 05cc5cfc18..c29f7b5ad6 100644 --- a/app/Functions/FunctionsEdit.php +++ b/app/Functions/FunctionsEdit.php @@ -583,7 +583,7 @@ class FunctionsEdit 'census_places' => Census::censusPlaces(WT_LOCALE), ]); - $census_assistant = Module::getModuleByClassName(CensusAssistantModule::class); + $census_assistant = Module::findByClass(CensusAssistantModule::class); $record = Individual::getInstance($xref, $tree); if ($census_assistant instanceof CensusAssistantModule && $record instanceof Individual) { diff --git a/app/Http/Controllers/AbstractBaseController.php b/app/Http/Controllers/AbstractBaseController.php index 3fb1c05e31..8a3e3b2ece 100644 --- a/app/Http/Controllers/AbstractBaseController.php +++ b/app/Http/Controllers/AbstractBaseController.php @@ -54,30 +54,6 @@ abstract class AbstractBaseController protected $layout = 'layouts/default'; /** - * Check that a module is enabled for a tree. - * - * @param Tree $tree - * @param string $class_name - * - * @throws NotFoundHttpException - * @return ModuleChartInterface - */ - protected function checkModuleIsActive(Tree $tree, string $class_name): ModuleChartInterface - { - $module = Module::activeCharts($tree) - ->filter(function (ModuleChartInterface $module) use ($class_name): bool { - return $module instanceof $class_name; - }) - ->first(); - - if (!$module instanceof $class_name) { - throw new NotFoundHttpException(I18N::translate('The module ā%sā has been disabled.', $module)); - } - - return $module; - } - - /** * Create a response object from a view. * * @param string $view_name diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 1e3f46dc1f..2fda694bb2 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -34,6 +34,7 @@ use Fisharebest\Webtrees\Media; use Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Module\ModuleBlockInterface; use Fisharebest\Webtrees\Module\ModuleChartInterface; +use Fisharebest\Webtrees\Module\ModuleConfigInterface; use Fisharebest\Webtrees\Module\ModuleInterface; use Fisharebest\Webtrees\Module\ModuleMenuInterface; use Fisharebest\Webtrees\Module\ModuleReportInterface; @@ -127,7 +128,7 @@ class AdminController extends AbstractBaseController 'files_to_delete' => $files_to_delete, 'all_modules' => Module::all(), 'deleted_modules' => $this->deletedModuleNames(), - 'config_modules' => Module::configurableModules(), + 'config_modules' => Module::findByInterface(ModuleConfigInterface::class), ]); } @@ -1039,7 +1040,7 @@ class AdminController extends AbstractBaseController { $component = $request->get('component'); $interface = $request->get('interface'); - $modules = Module::getAllModulesByInterface($interface); + $modules = Module::findByInterface($interface); foreach ($modules as $module) { foreach (Tree::getAll() as $tree) { @@ -1194,7 +1195,7 @@ class AdminController extends AbstractBaseController 'component' => $component, 'component_title' => $component_title, 'interface' => $interface, - 'modules' => Module::getAllModulesByInterface($interface), + 'modules' => Module::findByInterface($interface), 'title' => $title, 'route' => $route, ]); diff --git a/app/Http/Controllers/AdminModuleController.php b/app/Http/Controllers/AdminModuleController.php index d2f5ac2a19..13d0052b27 100644 --- a/app/Http/Controllers/AdminModuleController.php +++ b/app/Http/Controllers/AdminModuleController.php @@ -44,7 +44,7 @@ class AdminModuleController extends AdminController // Check that the module is enabled. // The module itself will need to check any tree-level access, // which may be different for each component (tab, menu, etc.) of the module. - $module = Module::getModuleByName($module_name); + $module = Module::findByName($module_name); // We'll call a function such as Module::getFooBarAction() $verb = strtolower($request->getMethod()); diff --git a/app/Http/Controllers/EditGedcomRecordController.php b/app/Http/Controllers/EditGedcomRecordController.php index 6e616d20b1..6b52df27fe 100644 --- a/app/Http/Controllers/EditGedcomRecordController.php +++ b/app/Http/Controllers/EditGedcomRecordController.php @@ -428,7 +428,7 @@ class EditGedcomRecordController extends AbstractEditController $newged = substr($newged, 1); // Remove leading newline - $census_assistant = Module::getModuleByClassName(CensusAssistantModule::class); + $census_assistant = Module::findByClass(CensusAssistantModule::class); if ($census_assistant instanceof CensusAssistantModule && $record instanceof Individual) { $newged = $census_assistant->updateCensusAssistant($request, $record, $fact_id, $newged, $keep_chan); } diff --git a/app/Http/Controllers/HomePageController.php b/app/Http/Controllers/HomePageController.php index 16a73c6391..ff2194b6ec 100644 --- a/app/Http/Controllers/HomePageController.php +++ b/app/Http/Controllers/HomePageController.php @@ -18,7 +18,6 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\Controllers; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\DebugBar; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Module\ModuleBlockInterface; @@ -104,7 +103,7 @@ class HomePageController extends AbstractBaseController throw new NotFoundHttpException(); } - $module = Module::getModuleByName($block->module_name); + $module = Module::findByName($block->module_name); if (!$module instanceof ModuleBlockInterface) { throw new NotFoundHttpException(); @@ -182,7 +181,7 @@ class HomePageController extends AbstractBaseController throw new NotFoundHttpException('This block does not exist'); } - $module = Module::getModuleByName($block->module_name); + $module = Module::findByName($block->module_name); if (!$module instanceof ModuleBlockInterface) { throw new NotFoundHttpException($block->module_name . ' is not a block'); @@ -230,27 +229,20 @@ class HomePageController extends AbstractBaseController */ public function treePageBlock(Request $request, Tree $tree): Response { - $block_id = (int) $request->get('block_id'); + $block_id = $request->get('block_id'); - $block = DB::table('block') + $block_id = (int) DB::table('block') ->where('block_id', '=', $block_id) ->where('gedcom_id', '=', $tree->id()) - ->whereNull('user_id') - ->first(); + ->value('block_id'); - $module = $this->getBlockModule($tree, $block_id); - if ($block === null || $module === null) { - return new Response('', Response::HTTP_NOT_FOUND); - } + $module = $this->getBlockModule($tree, $block_id); $html = view('layouts/ajax', [ 'content' => $module->getBlock($tree, $block_id, 'gedcom'), ]); - // Use HTTP headers and some jQuery to add debug to the current page. - DebugBar::sendDataInHeaders(); - return new Response($html); } @@ -383,27 +375,19 @@ class HomePageController extends AbstractBaseController */ public function userPageBlock(Request $request, Tree $tree, User $user): Response { - $block_id = (int) $request->get('block_id'); + $block_id = $request->get('block_id'); - $block = DB::table('block') + $block_id = (int) DB::table('block') ->where('block_id', '=', $block_id) ->where('user_id', '=', $user->id()) - ->whereNull('gedcom_id') - ->first(); + ->value('block_id'); $module = $this->getBlockModule($tree, $block_id); - if ($block === null || $module === null) { - return new Response('Block not found', Response::HTTP_NOT_FOUND); - } - $html = view('layouts/ajax', [ 'content' => $module->getBlock($tree, $block_id, 'user'), ]); - // Use HTTP headers and some jQuery to add debug to the current page. - DebugBar::sendDataInHeaders(); - return new Response($html); } @@ -556,21 +540,26 @@ class HomePageController extends AbstractBaseController * @param Tree $tree * @param int $block_id * - * @return ModuleBlockInterface|null + * @return ModuleBlockInterface + * @throws NotFoundHttpException */ - private function getBlockModule(Tree $tree, int $block_id) + private function getBlockModule(Tree $tree, int $block_id): ModuleBlockInterface { - $active_blocks = Module::activeBlocks($tree); + $active_blocks = Module::findByComponent('block', $tree, Auth::user()); $module_name = DB::table('block') - ->join('module', 'block.module_name', '=', 'module.module_name') ->where('block_id', '=', $block_id) - ->where('status', '=', 'enabled') - ->value('module.module_name'); + ->value('module_name'); - return $active_blocks->filter(function (ModuleInterface $module) use ($module_name): bool { + $block = $active_blocks->filter(function (ModuleInterface $module) use ($module_name): bool { return $module->name() === $module_name; })->first(); + + if ($block === null) { + throw new NotFoundHttpException('Block not found'); + } + + return $block; } /** @@ -580,9 +569,9 @@ class HomePageController extends AbstractBaseController */ private function getAvailableTreeBlocks(): Collection { - return Module::getAllModulesByInterface(ModuleBlockInterface::class) + return Module::findByInterface(ModuleBlockInterface::class) ->filter(function (ModuleBlockInterface $block): bool { - return $block->isGedcomBlock(); + return $block->isTreeBlock(); }) ->mapWithKeys(function (ModuleInterface $block): array { return [$block->name() => $block]; @@ -596,7 +585,7 @@ class HomePageController extends AbstractBaseController */ private function getAvailableUserBlocks(): Collection { - return Module::getAllModulesByInterface(ModuleBlockInterface::class) + return Module::findByInterface(ModuleBlockInterface::class) ->filter(function (ModuleBlockInterface $block): bool { return $block->isUserBlock(); }) diff --git a/app/Http/Controllers/IndividualController.php b/app/Http/Controllers/IndividualController.php index 22d252a1f5..fae94deffa 100644 --- a/app/Http/Controllers/IndividualController.php +++ b/app/Http/Controllers/IndividualController.php @@ -162,7 +162,7 @@ class IndividualController extends AbstractBaseController $xref = $request->get('xref', ''); $record = Individual::getInstance($xref, $tree); $tab = $request->get('module'); - $tabs = Module::activeTabs($tree); + $tabs = Module::findByComponent('tab', $tree, Auth::user()); if ($record === null || !array_key_exists($tab, $tabs)) { return new Response('', Response::HTTP_NOT_FOUND); @@ -407,7 +407,7 @@ class IndividualController extends AbstractBaseController */ public function getSidebars(Individual $individual): Collection { - return Module::activeSidebars($individual->tree()) + return Module::findByComponent('sidebar', $individual->tree(), Auth::user()) ->filter(function (ModuleSidebarInterface $sidebar) use ($individual): bool { return $sidebar->hasSidebarContent($individual); }); @@ -423,9 +423,9 @@ class IndividualController extends AbstractBaseController */ public function getTabs(Individual $individual): Collection { - return Module::activeTabs($individual->tree()) - ->filter(function (ModuleTabInterface $sidebar) use ($individual): bool { - return $sidebar->hasTabContent($individual); + return Module::findByComponent('tab', $individual->tree(), Auth::user()) + ->filter(function (ModuleTabInterface $tab) use ($individual): bool { + return $tab->hasTabContent($individual); }); } diff --git a/app/Http/Controllers/ModuleController.php b/app/Http/Controllers/ModuleController.php index 41e50719f2..ac4048b7f7 100644 --- a/app/Http/Controllers/ModuleController.php +++ b/app/Http/Controllers/ModuleController.php @@ -48,7 +48,7 @@ class ModuleController extends AbstractBaseController // Check that the module is enabled. // The module itself will need to check any tree-level access, // which may be different for each component (tab, menu, etc.) of the module. - $module = Module::getModuleByName($module_name); + $module = Module::findByName($module_name); // We'll call a function such as Module::getFooBarAction() $verb = strtolower($request->getMethod()); diff --git a/app/Http/Controllers/ReportEngineController.php b/app/Http/Controllers/ReportEngineController.php index 41c294e27e..af73b1cd0d 100644 --- a/app/Http/Controllers/ReportEngineController.php +++ b/app/Http/Controllers/ReportEngineController.php @@ -288,7 +288,7 @@ class ReportEngineController extends AbstractBaseController { $reports = []; - foreach (Module::activeReports($tree) as $report) { + foreach (Module::findByComponent('report', $tree, Auth::user()) as $report) { $reports[$report->name()] = $report->title(); } diff --git a/app/Http/Middleware/DebugBarData.php b/app/Http/Middleware/DebugBarData.php index 30e2aca489..92bce128c1 100644 --- a/app/Http/Middleware/DebugBarData.php +++ b/app/Http/Middleware/DebugBarData.php @@ -42,7 +42,7 @@ class DebugBarData implements MiddlewareInterface if ($response instanceof RedirectResponse) { // Show the debug data on the next page DebugBar::stackData(); - } elseif ($response instanceof JsonResponse) { + } elseif ($request->isXmlHttpRequest()) { // Use HTTP headers and some jQuery to add debug to the current page. DebugBar::sendDataInHeaders(); } diff --git a/app/Module.php b/app/Module.php index b6ee9848e0..a72273c0a4 100644 --- a/app/Module.php +++ b/app/Module.php @@ -20,13 +20,11 @@ namespace Fisharebest\Webtrees; use Closure; use Fisharebest\Webtrees\Module\ModuleBlockInterface; use Fisharebest\Webtrees\Module\ModuleChartInterface; -use Fisharebest\Webtrees\Module\ModuleConfigInterface; use Fisharebest\Webtrees\Module\ModuleInterface; use Fisharebest\Webtrees\Module\ModuleMenuInterface; use Fisharebest\Webtrees\Module\ModuleReportInterface; use Fisharebest\Webtrees\Module\ModuleSidebarInterface; use Fisharebest\Webtrees\Module\ModuleTabInterface; -use Fisharebest\Webtrees\Module\ModuleThemeInterface; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Support\Collection; use Illuminate\Support\Str; @@ -117,6 +115,16 @@ class Module 'yahrzeit', ]; + // Some types of module have different access levels in different trees. + private const COMPONENTS = [ + 'block' => ModuleBlockInterface::class, + 'chart' => ModuleChartInterface::class, + 'menu' => ModuleMenuInterface::class, + 'report' => ModuleReportInterface::class, + 'sidebar' => ModuleSidebarInterface::class, + 'tab' => ModuleTabInterface::class, + ]; + /** * All modules. * @@ -144,7 +152,7 @@ class Module ->map(function (string $filename) use ($module_info): ?ModuleInterface { try { $module_name = basename(dirname($filename)); - $module = self::loadModule($filename); + $module = self::load($filename); if ($module instanceof ModuleInterface) { $module->setName($module_name); @@ -178,7 +186,8 @@ class Module return null; } }) - ->filter(); + ->filter() + ->sort(self::moduleSorter()); }); } @@ -189,7 +198,7 @@ class Module * * @return mixed */ - private static function loadModule(string $filename) + private static function load(string $filename) { return include $filename; } @@ -243,33 +252,32 @@ class Module } /** - * Get a list of modules which (a) provide a specific function and (b) we have permission to see. + * Modules which (a) provide a specific function and (b) we have permission to see. * - * @param Tree $tree - * @param string $interface * @param string $component + * @param Tree $tree + * @param User $user * - * @return Collection|ModuleBlockInterface[]|ModuleChartInterface[]|ModuleMenuInterface[]|ModuleReportInterface[]|ModuleSidebarInterface[]|ModuleTabInterface[]|ModuleThemeInterface[] + * @return Collection|ModuleBlockInterface[]|ModuleChartInterface[]|ModuleMenuInterface[]|ModuleReportInterface[]|ModuleSidebarInterface[]|ModuleTabInterface[] */ - private static function getActiveModulesByComponent(Tree $tree, string $interface, string $component): Collection + public static function findByComponent(string $component, Tree $tree, User $user): Collection { - return self::all() - ->filter(function (ModuleInterface $module) use ($interface, $component, $tree): bool { - return - $module->isEnabled() && - $module instanceof $interface && - $module->accessLevel($tree, $component) >= Auth::accessLevel($tree); + $interface = self::COMPONENTS[$component]; + + return self::findByInterface($interface) + ->filter(function (ModuleInterface $module) use ($component, $tree, $user): bool { + return $module->accessLevel($tree, $component) >= Auth::accessLevel($tree, $user); }); - } + } /** - * Get a list of all modules, enabled or not, which provide a specific function. + * All modules which provide a specific function. * * @param string $interface * * @return Collection|ModuleInterface[] */ - public static function getAllModulesByInterface(string $interface): Collection + public static function findByInterface(string $interface): Collection { $modules = self::all() ->filter(function (ModuleInterface $module) use ($interface): bool { @@ -285,115 +293,9 @@ class Module case ModuleTabInterface::class: return $modules->sort(self::tabSorter()); - - default: - return $modules->sort(self::moduleSorter()); } - } - - /** - * Get a list of modules which (a) provide a block and (b) we have permission to see. - * - * @param Tree $tree - * - * @return Collection|ModuleBlockInterface[] - */ - public static function activeBlocks(Tree $tree): Collection - { - return self::getActiveModulesByComponent($tree, ModuleBlockInterface::class, 'block') - ->sort(self::moduleSorter()); - } - - /** - * Get a list of modules which (a) provide a chart and (b) we have permission to see. - * - * @param Tree $tree - * - * @return Collection|ModuleChartInterface[] - */ - public static function activeCharts(Tree $tree): Collection - { - return self::getActiveModulesByComponent($tree, ModuleChartInterface::class, 'chart') - ->sort(self::moduleSorter()); - } - - /** - * Get a list of module names which have configuration options. - * - * @return Collection|ModuleConfigInterface[] - */ - public static function configurableModules(): Collection - { - return self::all() - ->filter(function (ModuleInterface $module): bool { - return $module->isEnabled() && $module instanceof ModuleConfigInterface; - }) - ->sort(self::moduleSorter()); - } - - /** - * Get a list of modules which (a) provide a menu and (b) we have permission to see. - * - * @param Tree $tree - * - * @return Collection|ModuleMenuInterface[] - */ - public static function activeMenus(Tree $tree): Collection - { - return self::getActiveModulesByComponent($tree, ModuleMenuInterface::class, 'menu') - ->sort(self::menuSorter()); - } - - /** - * Get a list of modules which (a) provide a report and (b) we have permission to see. - * - * @param Tree $tree - * - * @return Collection|ModuleReportInterface[] - */ - public static function activeReports(Tree $tree): Collection - { - return self::getActiveModulesByComponent($tree, ModuleReportInterface::class, 'report') - ->sort(self::moduleSorter()); - } - - /** - * Get a list of modules which (a) provide a sidebar and (b) we have permission to see. - * - * @param Tree $tree - * - * @return Collection|ModuleSidebarInterface[] - */ - public static function activeSidebars(Tree $tree): Collection - { - return self::getActiveModulesByComponent($tree, ModuleSidebarInterface::class, 'sidebar') - ->sort(self::sidebarSorter()); - } - - /** - * Get a list of modules which (a) provide a tab and (b) we have permission to see. - * - * @param Tree $tree - * - * @return Collection|ModuleTabInterface[] - */ - public static function activeTabs(Tree $tree): Collection - { - return self::getActiveModulesByComponent($tree, ModuleTabInterface::class, 'tab') - ->sort(self::tabSorter()); - } - /** - * Get a list of modules which (a) provide a theme and (b) we have permission to see. - * - * @param Tree $tree - * - * @return Collection|ModuleThemeInterface[] - */ - public static function activeThemes(Tree $tree): Collection - { - return self::getActiveModulesByComponent($tree, ModuleThemeInterface::class, 'theme') - ->sort(self::moduleSorter()); + return $modules; } /** @@ -403,7 +305,7 @@ class Module * * @return ModuleInterface|null */ - public static function getModuleByName(string $module_name): ?ModuleInterface + public static function findByName(string $module_name): ?ModuleInterface { return self::all() ->filter(function (ModuleInterface $module) use ($module_name): bool { @@ -419,7 +321,7 @@ class Module * * @return ModuleInterface|null */ - public static function getModuleByClassName(string $class_name): ?ModuleInterface + public static function findByClass(string $class_name): ?ModuleInterface { return self::all() ->filter(function (ModuleInterface $module) use ($class_name): bool { diff --git a/app/Module/ChartsBlockModule.php b/app/Module/ChartsBlockModule.php index d1a0d145d5..e28c4c482c 100644 --- a/app/Module/ChartsBlockModule.php +++ b/app/Module/ChartsBlockModule.php @@ -88,7 +88,7 @@ class ChartsBlockModule extends AbstractModule implements ModuleInterface, Modul default: case 'pedigree': /** @var PedigreeChartModule $module */ - $module = Module::getModuleByClassName(PedigreeChartModule::class); + $module = Module::findByClass(PedigreeChartModule::class); $title = $module->chartTitle($person); $chart_url = $module->chartUrl($person, [ 'ajax' => true, @@ -103,7 +103,7 @@ class ChartsBlockModule extends AbstractModule implements ModuleInterface, Modul case 'descendants': /** @var DescendancyChartModule $module */ - $module = Module::getModuleByClassName(DescendancyChartModule::class); + $module = Module::findByClass(DescendancyChartModule::class); $title = $module->chartTitle($person); $chart_url = $module->chartUrl($person, [ 'ajax' => true, @@ -118,7 +118,7 @@ class ChartsBlockModule extends AbstractModule implements ModuleInterface, Modul case 'hourglass': /** @var HourglassChartModule $module */ - $module = Module::getModuleByClassName(HourglassChartModule::class); + $module = Module::findByClass(HourglassChartModule::class); $title = $module->chartTitle($person); $chart_url = $module->chartUrl($person, [ 'ajax' => true, @@ -132,7 +132,7 @@ class ChartsBlockModule extends AbstractModule implements ModuleInterface, Modul case 'treenav': /** @var InteractiveTreeModule $module */ - $module = Module::getModuleByClassName(InteractiveTreeModule::class); + $module = Module::findByClass(InteractiveTreeModule::class); $title = I18N::translate('Interactive tree of %s', $person->getFullName()); $tv = new TreeView(); $content = '<script>$("head").append(\'<link rel="stylesheet" href="' . $module->css() . '" type="text/css" />\');</script>'; @@ -185,7 +185,7 @@ class ChartsBlockModule extends AbstractModule implements ModuleInterface, Modul } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/ChartsMenuModule.php b/app/Module/ChartsMenuModule.php index 8e41dbaf04..a6d459b5e1 100644 --- a/app/Module/ChartsMenuModule.php +++ b/app/Module/ChartsMenuModule.php @@ -76,7 +76,7 @@ class ChartsMenuModule extends AbstractModule implements ModuleInterface, Module $request = Request::createFromGlobals(); $xref = $request->get('xref', ''); $individual = Individual::getInstance($xref, $tree) ?? $tree->significantIndividual(Auth::user()); - $submenus = Module::activeCharts($tree) + $submenus = Module::findByComponent('chart', $tree, Auth::user()) ->map(function (ModuleChartInterface $module) use ($individual): Menu { return $module->chartMenu($individual); }); diff --git a/app/Module/FamilyTreeFavoritesModule.php b/app/Module/FamilyTreeFavoritesModule.php index 3cebbddf73..53404c8455 100644 --- a/app/Module/FamilyTreeFavoritesModule.php +++ b/app/Module/FamilyTreeFavoritesModule.php @@ -116,7 +116,7 @@ class FamilyTreeFavoritesModule extends AbstractModule implements ModuleInterfac * * @return bool */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/FamilyTreeNewsModule.php b/app/Module/FamilyTreeNewsModule.php index 02aef58f4e..8e610a833e 100644 --- a/app/Module/FamilyTreeNewsModule.php +++ b/app/Module/FamilyTreeNewsModule.php @@ -105,7 +105,7 @@ class FamilyTreeNewsModule extends AbstractModule implements ModuleInterface, Mo } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/FamilyTreeStatisticsModule.php b/app/Module/FamilyTreeStatisticsModule.php index 0e4e9afd5f..61bef1b007 100644 --- a/app/Module/FamilyTreeStatisticsModule.php +++ b/app/Module/FamilyTreeStatisticsModule.php @@ -187,7 +187,7 @@ class FamilyTreeStatisticsModule extends AbstractModule implements ModuleInterfa } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/HtmlBlockModule.php b/app/Module/HtmlBlockModule.php index 96c9194cb5..3ff4c727a2 100644 --- a/app/Module/HtmlBlockModule.php +++ b/app/Module/HtmlBlockModule.php @@ -127,7 +127,7 @@ class HtmlBlockModule extends AbstractModule implements ModuleInterface, ModuleB } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/IndividualFactsTabModule.php b/app/Module/IndividualFactsTabModule.php index c0abf84d37..74ab353f50 100644 --- a/app/Module/IndividualFactsTabModule.php +++ b/app/Module/IndividualFactsTabModule.php @@ -17,6 +17,7 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; +use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Date; use Fisharebest\Webtrees\Fact; use Fisharebest\Webtrees\Family; @@ -93,7 +94,7 @@ class IndividualFactsTabModule extends AbstractModule implements ModuleInterface break; default: - $use_extra_info_module = Module::activeSidebars($individual->tree()) + $use_extra_info_module = Module::findByComponent('sidebar', $individual->tree(), Auth::user()) ->filter(function (ModuleInterface $module): bool { return $module instanceof ExtraInformationModule; })->isNotEmpty(); diff --git a/app/Module/LoggedInUsersModule.php b/app/Module/LoggedInUsersModule.php index eb9c19da07..c0b6c6938f 100644 --- a/app/Module/LoggedInUsersModule.php +++ b/app/Module/LoggedInUsersModule.php @@ -137,7 +137,7 @@ class LoggedInUsersModule extends AbstractModule implements ModuleInterface, Mod } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/LoginBlockModule.php b/app/Module/LoginBlockModule.php index 011b0d3868..2ead102e5a 100644 --- a/app/Module/LoginBlockModule.php +++ b/app/Module/LoginBlockModule.php @@ -102,7 +102,7 @@ class LoginBlockModule extends AbstractModule implements ModuleInterface, Module } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/ModuleBlockInterface.php b/app/Module/ModuleBlockInterface.php index 9493d4cba8..773264ca18 100644 --- a/app/Module/ModuleBlockInterface.php +++ b/app/Module/ModuleBlockInterface.php @@ -59,7 +59,7 @@ interface ModuleBlockInterface * * @return bool */ - public function isGedcomBlock(): bool; + public function isTreeBlock(): bool; /** * An HTML form to edit block settings diff --git a/app/Module/OnThisDayModule.php b/app/Module/OnThisDayModule.php index da899a2c16..2fa940d90c 100644 --- a/app/Module/OnThisDayModule.php +++ b/app/Module/OnThisDayModule.php @@ -183,7 +183,7 @@ class OnThisDayModule extends AbstractModule implements ModuleInterface, ModuleB } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/RecentChangesModule.php b/app/Module/RecentChangesModule.php index bd9c95d787..794061ed38 100644 --- a/app/Module/RecentChangesModule.php +++ b/app/Module/RecentChangesModule.php @@ -139,7 +139,7 @@ class RecentChangesModule extends AbstractModule implements ModuleInterface, Mod } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/ReportsMenuModule.php b/app/Module/ReportsMenuModule.php index 0e2d34bfff..b8c34f0fc5 100644 --- a/app/Module/ReportsMenuModule.php +++ b/app/Module/ReportsMenuModule.php @@ -77,7 +77,7 @@ class ReportsMenuModule extends AbstractModule implements ModuleInterface, Modul $request = Request::createFromGlobals(); $xref = $request->get('xref', ''); $individual = Individual::getInstance($xref, $tree) ?? $tree->significantIndividual(Auth::user()); - $submenus = Module::activeReports($tree) + $submenus = Module::findByComponent('report', $tree, Auth::user()) ->map(function (ModuleReportInterface $module) use ($individual): Menu { return $module->getReportMenu($individual); }); diff --git a/app/Module/ResearchTaskModule.php b/app/Module/ResearchTaskModule.php index 6a9b0e09cd..70f53e270c 100644 --- a/app/Module/ResearchTaskModule.php +++ b/app/Module/ResearchTaskModule.php @@ -145,7 +145,7 @@ class ResearchTaskModule extends AbstractModule implements ModuleInterface, Modu } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/ReviewChangesModule.php b/app/Module/ReviewChangesModule.php index cd0338a8c4..ac83ee5e58 100644 --- a/app/Module/ReviewChangesModule.php +++ b/app/Module/ReviewChangesModule.php @@ -178,7 +178,7 @@ class ReviewChangesModule extends AbstractModule implements ModuleInterface, Mod } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/SlideShowModule.php b/app/Module/SlideShowModule.php index 79b51c7d31..ea13e01325 100644 --- a/app/Module/SlideShowModule.php +++ b/app/Module/SlideShowModule.php @@ -185,7 +185,7 @@ class SlideShowModule extends AbstractModule implements ModuleInterface, ModuleB } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/ThemeSelectModule.php b/app/Module/ThemeSelectModule.php index 5e63469cdb..3973d27d04 100644 --- a/app/Module/ThemeSelectModule.php +++ b/app/Module/ThemeSelectModule.php @@ -97,7 +97,7 @@ class ThemeSelectModule extends AbstractModule implements ModuleInterface, Modul } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/TopGivenNamesModule.php b/app/Module/TopGivenNamesModule.php index 8849d67a54..d2e8f93d5a 100644 --- a/app/Module/TopGivenNamesModule.php +++ b/app/Module/TopGivenNamesModule.php @@ -141,7 +141,7 @@ class TopGivenNamesModule extends AbstractModule implements ModuleInterface, Mod } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/TopPageViewsModule.php b/app/Module/TopPageViewsModule.php index f35237a6ef..918847f1bf 100644 --- a/app/Module/TopPageViewsModule.php +++ b/app/Module/TopPageViewsModule.php @@ -149,7 +149,7 @@ class TopPageViewsModule extends AbstractModule implements ModuleInterface, Modu * * @return bool */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/TopSurnamesModule.php b/app/Module/TopSurnamesModule.php index 5e16768320..fcf1acf8cc 100644 --- a/app/Module/TopSurnamesModule.php +++ b/app/Module/TopSurnamesModule.php @@ -170,7 +170,7 @@ class TopSurnamesModule extends AbstractModule implements ModuleInterface, Modul } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/UpcomingAnniversariesModule.php b/app/Module/UpcomingAnniversariesModule.php index d34f3e2566..e7529e314f 100644 --- a/app/Module/UpcomingAnniversariesModule.php +++ b/app/Module/UpcomingAnniversariesModule.php @@ -202,7 +202,7 @@ class UpcomingAnniversariesModule extends AbstractModule implements ModuleInterf } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/UserFavoritesModule.php b/app/Module/UserFavoritesModule.php index 771300b949..c670427e59 100644 --- a/app/Module/UserFavoritesModule.php +++ b/app/Module/UserFavoritesModule.php @@ -115,7 +115,7 @@ class UserFavoritesModule extends AbstractModule implements ModuleInterface, Mod * * @return bool */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return false; } diff --git a/app/Module/UserJournalModule.php b/app/Module/UserJournalModule.php index 7cf8eb5a62..2b22ad8eaf 100644 --- a/app/Module/UserJournalModule.php +++ b/app/Module/UserJournalModule.php @@ -105,7 +105,7 @@ class UserJournalModule extends AbstractModule implements ModuleInterface, Modul } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return false; } diff --git a/app/Module/UserMessagesModule.php b/app/Module/UserMessagesModule.php index aea940f690..88d747aad3 100644 --- a/app/Module/UserMessagesModule.php +++ b/app/Module/UserMessagesModule.php @@ -215,7 +215,7 @@ class UserMessagesModule extends AbstractModule implements ModuleInterface, Modu } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return false; } diff --git a/app/Module/UserWelcomeModule.php b/app/Module/UserWelcomeModule.php index 27006dc080..b9a0ebb392 100644 --- a/app/Module/UserWelcomeModule.php +++ b/app/Module/UserWelcomeModule.php @@ -69,7 +69,7 @@ class UserWelcomeModule extends AbstractModule implements ModuleInterface, Modul $individual = Individual::getInstance($gedcomid, $tree); $links = []; - $pedigree_chart = Module::activeCharts($tree) + $pedigree_chart = Module::findByComponent('chart', $tree, Auth::user()) ->filter(function (ModuleInterface $module): bool { return $module instanceof PedigreeChartModule; }); @@ -131,7 +131,7 @@ class UserWelcomeModule extends AbstractModule implements ModuleInterface, Modul } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return false; } diff --git a/app/Module/WelcomeBlockModule.php b/app/Module/WelcomeBlockModule.php index f52556b7f5..e83aeda920 100644 --- a/app/Module/WelcomeBlockModule.php +++ b/app/Module/WelcomeBlockModule.php @@ -69,7 +69,7 @@ class WelcomeBlockModule extends AbstractModule implements ModuleInterface, Modu $links = []; - $pedigree_chart = Module::activeCharts($tree) + $pedigree_chart = Module::findByComponent('chart', $tree, Auth::user()) ->filter(function (ModuleInterface $module): bool { return $module instanceof PedigreeChartModule; }); @@ -127,7 +127,7 @@ class WelcomeBlockModule extends AbstractModule implements ModuleInterface, Modu } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Module/YahrzeitModule.php b/app/Module/YahrzeitModule.php index b3a8fee406..9777aa9a8d 100644 --- a/app/Module/YahrzeitModule.php +++ b/app/Module/YahrzeitModule.php @@ -198,7 +198,7 @@ class YahrzeitModule extends AbstractModule implements ModuleInterface, ModuleBl } /** {@inheritdoc} */ - public function isGedcomBlock(): bool + public function isTreeBlock(): bool { return true; } diff --git a/app/Stats.php b/app/Stats.php index ccf50a0369..395fe41300 100644 --- a/app/Stats.php +++ b/app/Stats.php @@ -22,6 +22,8 @@ use Fisharebest\Webtrees\Functions\FunctionsPrint; use Fisharebest\Webtrees\Functions\FunctionsPrintLists; use Fisharebest\Webtrees\Http\Middleware\PageHitCounter; use Fisharebest\Webtrees\Module\FamilyTreeFavoritesModule; +use Fisharebest\Webtrees\Module\ModuleBlockInterface; +use Fisharebest\Webtrees\Module\ModuleInterface; use Fisharebest\Webtrees\Module\UserFavoritesModule; use PDOException; use stdClass; @@ -6626,12 +6628,10 @@ class Stats */ public function gedcomFavorites(): string { - $module = Module::getModuleByName('gedcom_favorites'); + $module = Module::findByClass(FamilyTreeFavoritesModule::class); if ($module instanceof FamilyTreeFavoritesModule) { - $block = new FamilyTreeFavoritesModule(Webtrees::MODULES_PATH . 'gedcom_favorites'); - - return $block->getBlock($this->tree, 0, ''); + return $module->getBlock($this->tree, 0, ''); } return ''; @@ -6644,10 +6644,10 @@ class Stats */ public function userFavorites(): string { - if (Auth::check() && Module::getModuleByName('user_favorites')) { - $block = new UserFavoritesModule(Webtrees::MODULES_PATH . 'gedcom_favorites'); + $module = Module::findByClass(UserFavoritesModule::class); - return $block->getBlock($this->tree, 0, ''); + if ($module instanceof UserFavoritesModule) { + return $module->getBlock($this->tree, 0, ''); } return ''; @@ -6662,7 +6662,7 @@ class Stats { $count = 0; - $module = Module::getModuleByName('gedcom_favorites'); + $module = Module::findByClass(FamilyTreeFavoritesModule::class); if ($module instanceof FamilyTreeFavoritesModule) { $count = count($module->getFavorites($this->tree)); @@ -6680,7 +6680,7 @@ class Stats { $count = 0; - $module = Module::getModuleByName('user_favorites'); + $module = Module::findByClass(UserFavoritesModule::class); if ($module instanceof UserFavoritesModule) { $count = count($module->getFavorites($this->tree, Auth::user())); @@ -6700,9 +6700,14 @@ class Stats */ public function callBlock(string $block = '', ...$params): string { - $all_blocks = Module::activeBlocks($this->tree); + /** @var ModuleBlockInterface $block */ + $block = Module::findByComponent('block', $this->tree, Auth::user()) + ->filter(function (ModuleInterface $block): bool { + return $block->name() === $block && $block->name() !== 'html'; + }) + ->first; - if (!array_key_exists($block, $all_blocks) || $block == 'html') { + if ($block === null) { return ''; } // Build the config array @@ -6715,7 +6720,7 @@ class Stats $v = array_shift($bits); $cfg[$v] = implode('=', $bits); } - $block = $all_blocks[$block]; + $content = $block->getBlock($this->tree, 0, '', $cfg); return $content; diff --git a/app/Theme/AbstractTheme.php b/app/Theme/AbstractTheme.php index 82d1930eb2..de71a0e7c3 100644 --- a/app/Theme/AbstractTheme.php +++ b/app/Theme/AbstractTheme.php @@ -740,7 +740,7 @@ abstract class AbstractTheme public function individualBoxMenuCharts(Individual $individual): array { $menus = []; - foreach (Module::activeCharts($this->tree) as $chart) { + foreach (Module::findByComponent('chart', $this->tree, Auth::user()) as $chart) { $menu = $chart->chartBoxMenu($individual); if ($menu) { $menus[] = $menu; @@ -853,8 +853,8 @@ abstract class AbstractTheme { global $controller; - $user_favorites_module = Module::getModuleByClassName(UserFavoritesModule::class); - $tree_favorites_module = Module::getModuleByClassName(FamilyTreeFavoritesModule::class); + $user_favorites_module = Module::findByClass(UserFavoritesModule::class); + $tree_favorites_module = Module::findByClass(FamilyTreeFavoritesModule::class); $user_favorites = []; if ($this->tree instanceof Tree && $user_favorites_module instanceof UserFavoritesModule && Auth::check()) { @@ -1036,7 +1036,7 @@ abstract class AbstractTheme { $gedcomid = $this->tree->getUserPreference(Auth::user(), 'gedcomid'); - $pedigree_chart = Module::activeCharts($this->tree) + $pedigree_chart = Module::findByComponent('chart', $this->tree, Auth::user()) ->filter(function (ModuleInterface $module): bool { return $module instanceof PedigreeChartModule; }); @@ -1191,7 +1191,7 @@ abstract class AbstractTheme */ public function primaryMenu(Individual $individual): array { - return Module::activeMenus($this->tree) + return Module::findByComponent('menu', $this->tree, Auth::user()) ->map(function (ModuleMenuInterface $menu): ?Menu { return $menu->getMenu($this->tree); }) diff --git a/resources/views/media-page-menu.phtml b/resources/views/media-page-menu.phtml index df9ecb98de..86a8d4a085 100644 --- a/resources/views/media-page-menu.phtml +++ b/resources/views/media-page-menu.phtml @@ -10,7 +10,7 @@ </button> <div class="dropdown-menu dropdown-menu-right wt-page-menu-items" aria-labelledby="page-menu"> - <?php if (false && Module::getModuleByClassName(CensusAssistantModule::class)) : ?> + <?php if (false && Module::findByClass(CensusAssistantModule::class)) : ?> <a class="dropdown-item menu-obje-link" href="#" onclick="return ilinkitem('<?= e($record->xref()) ?>','manage','<?= e($record->tree()->name()) ?>');"> <?= I18N::translate('Manage the links') ?> </a> diff --git a/resources/views/modules/ckeditor/ckeditor-js.phtml b/resources/views/modules/ckeditor/ckeditor-js.phtml index 5261aa949c..c7feadcc3b 100644 --- a/resources/views/modules/ckeditor/ckeditor-js.phtml +++ b/resources/views/modules/ckeditor/ckeditor-js.phtml @@ -2,7 +2,7 @@ <?php use Fisharebest\Webtrees\Module\CkeditorModule; ?> <?php use Fisharebest\Webtrees\View; ?> -<?php if (Module::getModuleByClassName(CkeditorModule::class)): ?> +<?php if (Module::findByClass(CkeditorModule::class)): ?> <?php View::push('javascript') ?> <script src="<?= e(CkeditorModule::CKEDITOR_PATH) ?>ckeditor.js"></script> <script src="<?= e(CkeditorModule::CKEDITOR_PATH) ?>adapters/jquery.js"></script> |
