165 lines
4.8 KiB
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;
|
|
}
|
|
|
|
}
|