From 9f15924b025194b217301f1b3fbfe34b7203d476 Mon Sep 17 00:00:00 2001 From: Jim Safley Date: Tue, 11 Jun 2024 20:03:48 -0400 Subject: [PATCH 1/2] Register non-config service names --- .../ServiceManager/AbstractPluginManager.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/application/src/ServiceManager/AbstractPluginManager.php b/application/src/ServiceManager/AbstractPluginManager.php index 7d11b35fe3..1d5e906ac0 100644 --- a/application/src/ServiceManager/AbstractPluginManager.php +++ b/application/src/ServiceManager/AbstractPluginManager.php @@ -38,6 +38,24 @@ public function __construct($configOrContainerInterface = null, array $v3config } } + /** + * Register service names that were set via setFactory(). + */ + public function setFactory($name, $factory) + { + parent::setFactory($name, $factory); + $this->registeredNames[$name] = $name; + } + + /** + * Register service names that were set via setInvokableClass(). + */ + public function setInvokableClass($name, $class = null) + { + parent::setInvokableClass($name, $factory); + $this->registeredNames[$name] = $name; + } + /** * Set the registered names. * From fcacc9a48edd07192aa744ed957a811440a6141f Mon Sep 17 00:00:00 2001 From: Jim Safley Date: Tue, 11 Jun 2024 20:08:01 -0400 Subject: [PATCH 2/2] Set theme-provided resource page block layouts --- application/src/Mvc/MvcListeners.php | 18 ++++++++++ .../ThemeProvidedResourcePageBlockLayout.php | 34 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 application/src/Site/ResourcePageBlockLayout/ThemeProvidedResourcePageBlockLayout.php diff --git a/application/src/Mvc/MvcListeners.php b/application/src/Mvc/MvcListeners.php index 785cb56e15..5c95eddd8a 100644 --- a/application/src/Mvc/MvcListeners.php +++ b/application/src/Mvc/MvcListeners.php @@ -3,6 +3,7 @@ use Omeka\Service\Delegator\SitePaginatorDelegatorFactory; use Omeka\Session\SaveHandler\Db; +use Omeka\Site\ResourcePageBlockLayout\ThemeProvidedResourcePageBlockLayout; use Omeka\Site\Theme\Manager; use Omeka\Site\Theme\Theme; use Laminas\EventManager\EventManagerInterface; @@ -428,6 +429,23 @@ protected function prepareSite(MvcEvent $event) '%s.mo' ); } + + // Set theme-provided resource page block layouts. + $configSpec = $currentTheme->getConfigSpec(); + $layouts = $configSpec['resource_page_block_layouts'] ?? []; + $layouts = is_array($layouts) ? $layouts : []; + $layouts = array_filter($layouts, function ($layout) { + return isset($layout['label']) && is_string($layout['label']) + && isset($layout['compatible_resource_names']) && is_array($layout['compatible_resource_names']) + && isset($layout['partial']) && is_string($layout['partial']); + }); + foreach ($layouts as $layoutName => $layoutSpec) { + $factory = function ($services) use ($currentTheme, $layoutSpec) { + return new ThemeProvidedResourcePageBlockLayout($layoutSpec['label'], $layoutSpec['compatible_resource_names'], $layoutSpec['partial']); + }; + $services->get('Omeka\ResourcePageBlockLayoutManager')->setFactory($layoutName, $factory); + } + return $site; } diff --git a/application/src/Site/ResourcePageBlockLayout/ThemeProvidedResourcePageBlockLayout.php b/application/src/Site/ResourcePageBlockLayout/ThemeProvidedResourcePageBlockLayout.php new file mode 100644 index 0000000000..0aeaf7c646 --- /dev/null +++ b/application/src/Site/ResourcePageBlockLayout/ThemeProvidedResourcePageBlockLayout.php @@ -0,0 +1,34 @@ +label = $label; + $this->compatibleResourceNames = $compatibleResourceNames; + $this->partial = $partial; + } + + public function getLabel() : string + { + return $this->label; + } + + public function getCompatibleResourceNames() : array + { + return $this->compatibleResourceNames; + } + + public function render(PhpRenderer $view, AbstractResourceEntityRepresentation $resource) : string + { + return $view->partial(sprintf('common/resource-page-block-layout/%s', $this->partial), ['resource' => $resource]); + } +}