arc-hive-site-omeka-module/Module.php

165 lines
4.8 KiB
PHP

<?php
namespace ArchiveSiteMeta;
use ArchiveSiteMeta\Form\ConfigForm;
use Omeka\Module\AbstractModule;
use Laminas\EventManager\Event;
use Laminas\View\Renderer\PhpRenderer;
use Laminas\EventManager\SharedEventManagerInterface;
use Laminas\ModuleManager\ModuleManager;
use Laminas\ModuleManager\ModuleEvent;
use Laminas\Mvc\MvcEvent;
use Laminas\Mvc\Controller\AbstractController;
use Omeka\Mvc\Controller\Plugin\Messenger;
class Module extends AbstractModule
{
const NAMESPACE = __NAMESPACE__;
const PAGE_LAYOUT = [
'standard' => 'Standard',
'exhibition' => 'Exhibition',
];
const PAGE_TYPE = [
'' => '',
'exhibit' => 'Exhibitions',
];
public function init(ModuleManager $moduleManager): void
{
$moduleManager->getEventManager()->attach(ModuleEvent::EVENT_MERGE_CONFIG,
[$this, 'onEventMergeConfig']);
}
public function onEventMergeConfig(ModuleEvent $event): void
{
// Check if the main site is skipped, else the standard urls apply.
#if (!SLUG_MAIN_SITE) {
# return;
#}
/** @var \Laminas\ModuleManager\Listener\ConfigListener $configListener */
$configListener = $event->getParam('configListener');
// At this point, the config is read only, so it is copied and replaced.
$config = $configListener->getMergedConfig(false);
/*
if (isset($config['view_helpers']['invokables']['Omeka\Form\Element\HtmlTextarea'])) {
unset($config['view_helpers']['invokables']['Omeka\Form\Element\HtmlTextarea']);
}
*/
/*
if (isset($config['block_layouts']['factories']['html'])) {
unset($config['block_layouts']['factories']['html']);
}
if (isset($config['block_layouts']['sorted_names']['html'])) {
unset($config['block_layouts']['sorted_names']['html']);
}
*/
if (isset($config['block_layouts']['invokables']['tableOfContents'])) {
unset($config['block_layouts']['invokables']['tableOfContents']);
}
if (isset($config['block_layouts']['invokables']['browsePreview'])) {
unset($config['block_layouts']['invokables']['browsePreview']);
}
// Manage the routes for the main site when "s/site-slug/" is skipped.
// So copy routes from "site", without starting "/".
/*
foreach ($config['router']['routes']['site']['child_routes'] as $routeName => $options) {
// Skip some routes for pages that are set directly in the config.
if (isset($config['router']['routes']['top']['child_routes'][$routeName])) {
continue;
}
$config['router']['routes']['top']['child_routes'][$routeName] = $options;
$config['router']['routes']['top']['child_routes'][$routeName]['options']['route'] =
ltrim($config['router']['routes']['top']['child_routes'][$routeName]['options']['route'], '/');
}
*/
$configListener->setMergedConfig($config);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getConfigForm(PhpRenderer $renderer)
{
$services = $this->getServiceLocator();
$config = $services->get('Config');
$settings = $services->get('Omeka\Settings');
$form = $services->get('FormElementManager')->get(ConfigForm::class);
$data = [];
$defaultSettings = $config['config']['SiteMeta'];
foreach ($defaultSettings as $name => $value) {
$data[$name] = $settings->get($name, $value);
}
$form->init();
$form->setData($data);
$html = $renderer->render('module/config', [
'form' => $form,
]);
return $html;
}
public function handleConfigForm(AbstractController $controller)
{
//return true;
//if (!parent::handleConfigForm($controller)) {
// return false;
//}
//$services = $this->getServiceLocator();
//$settings = $services->get('Omeka\Settings');
//$a=$b;
$config = $this->getConfig();
#print_r($config);
$encodedString = json_encode($config);
file_put_contents('/tmp/json_array.txt', $encodedString);
var_dump($encodedString);
$space = strtolower(static::NAMESPACE);
if (empty($config['config']['SiteMeta'])) {
return true;
}
$services = $this->getServiceLocator();
$formManager = $services->get('FormElementManager');
$formClass = static::NAMESPACE . '\Form\ConfigForm';
if (!$formManager->has($formClass)) {
return true;
}
$params = $controller->getRequest()->getPost();
$form = $formManager->get($formClass);
$form->init();
$form->setData($params);
if (!$form->isValid()) {
$controller->messenger()->addErrors($form->getMessages());
return false;
}
$params = $form->getData();
$settings = $services->get('Omeka\Settings');
$defaultSettings = $config['config']['SiteMeta'];
//$defaultSettings = $config[$space]['config'];
$params = array_intersect_key($params, $defaultSettings);
foreach ($params as $name => $value) {
$settings->set($name, $value);
}
return true;
}
}