Skip to content

Commit

Permalink
Added the possibility to limit the references to a pool with a query.
Browse files Browse the repository at this point in the history
  • Loading branch information
Daniel-KM committed Jun 3, 2018
1 parent 849df0d commit 0a4be9b
Show file tree
Hide file tree
Showing 12 changed files with 184 additions and 97 deletions.
72 changes: 8 additions & 64 deletions Module.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,74 +35,17 @@ public function install(ServiceLocatorInterface $serviceLocator)
$this->manageSettings($serviceLocator->get('Omeka\Settings'), 'install');
}

public function upgrade($oldVersion, $newVersion,
ServiceLocatorInterface $serviceLocator
) {
$settings = $serviceLocator->get('Omeka\Settings');
$config = require __DIR__ . '/config/module.config.php';

// The reference plugin is not available during upgrade.
include_once __DIR__ . '/src/Mvc/Controller/Plugin/Reference.php';
$entityManager = $serviceLocator->get('Omeka\EntityManager');
$controllerPluginManager = $serviceLocator->get('ControllerPluginManager');
$api = $controllerPluginManager->get('api');
$referencePlugin = new Mvc\Controller\Plugin\Reference($entityManager, $api);

if (version_compare($oldVersion, '3.4.5', '<')) {
$referenceSlugs = $settings->get('reference_slugs');
foreach ($referenceSlugs as $slug => &$slugData) {
$slugData['term'] = $slugData['id'];
unset($slugData['id']);
}
$settings->set('reference_slugs', $referenceSlugs);

$tree = $settings->get('reference_tree_hierarchy', '');
$settings->set(
'reference_tree_hierarchy',
$referencePlugin->convertTreeToLevels($tree)
);

$defaultConfig = $config[strtolower(__NAMESPACE__)]['config'];
$settings->set(
'reference_resource_name',
$defaultConfig['reference_resource_name']
);
$settings->set(
'reference_total',
$defaultConfig['reference_total']
);
}

if (version_compare($oldVersion, '3.4.7', '<')) {
$tree = $settings->get('reference_tree_hierarchy', '');
$treeString = $referencePlugin->convertFlatLevelsToTree($tree);
$settings->set(
'reference_tree_hierarchy',
$referencePlugin->convertTreeToLevels($treeString)
);

$entityManager = $serviceLocator->get('Omeka\EntityManager');
$repository = $entityManager->getRepository(\Omeka\Entity\SitePageBlock::class);
$blocks = $repository->findBy(['layout' => 'reference']);
foreach ($blocks as $block) {
$data = $block->getData();
if (empty($data['reference']['tree']) || $data['reference']['mode'] !== 'tree') {
continue;
}
$treeString = $referencePlugin->convertFlatLevelsToTree($data['reference']['tree']);
$data['reference']['tree'] = $referencePlugin->convertTreeToLevels($treeString);
$block->setData($data);
$entityManager->persist($block);
}
$entityManager->flush();
}
}

public function uninstall(ServiceLocatorInterface $serviceLocator)
{
$this->manageSettings($serviceLocator->get('Omeka\Settings'), 'uninstall');
}

public function upgrade($oldVersion, $newVersion,
ServiceLocatorInterface $serviceLocator
) {
require_once 'data/scripts/upgrade.php';
}

protected function manageSettings($settings, $process, $key = 'config')
{
$config = require __DIR__ . '/config/module.config.php';
Expand Down Expand Up @@ -217,7 +160,8 @@ public function getConfigForm(PhpRenderer $renderer)
$form->setData($data);
$html = '<p>';
$html .= $renderer->translate('This config allows to create routed pages for all sites.'); // @translate
$html .= ' ' . $renderer->translate('References can be created inside pages via blocks too.'); // @translate
$html .= ' ' . $renderer->translate('References are limited by the pool of the site.'); // @translate
$html .= ' ' . $renderer->translate('References can be created inside pages via blocks too, with any resource pool.'); // @translate
$html .= '</p>';
$html .= $renderer->formCollection($form);
return $html;
Expand Down
1 change: 1 addition & 0 deletions config/module.config.php
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@
'type' => 'properties',
'tree' => [],
'resource_name' => 'items',
'query' => '',
],
'options' => [
'query_type' => 'eq',
Expand Down
4 changes: 2 additions & 2 deletions config/module.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ author_link = "https://github.com/Daniel-KM"
module_link = "https://github.com/Daniel-KM/Omeka-S-module-Reference"
support_link = "https://github.com/Daniel-KM/Omeka-S-module-Reference/issues"
configurable = true
version = "3.4.8"
omeka_version_constraint = "^1.0.0"
version = "3.4.9"
omeka_version_constraint = "^1.1.0"
72 changes: 72 additions & 0 deletions data/scripts/upgrade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php
namespace Reference;

$services = $serviceLocator;
$settings = $services->get('Omeka\Settings');
$connection = $services->get('Omeka\Connection');
$config = require dirname(dirname(__DIR__)) . '/config/module.config.php';

// The reference plugin is not available during upgrade.
include_once dirname(dirname(__DIR__)) . '/src/Mvc/Controller/Plugin/Reference.php';
$entityManager = $services->get('Omeka\EntityManager');
$controllerPluginManager = $services->get('ControllerPluginManager');
$api = $controllerPluginManager->get('api');
$referencePlugin = new Mvc\Controller\Plugin\Reference($entityManager, $api);

if (version_compare($oldVersion, '3.4.5', '<')) {
$referenceSlugs = $settings->get('reference_slugs');
foreach ($referenceSlugs as $slug => &$slugData) {
$slugData['term'] = $slugData['id'];
unset($slugData['id']);
}
$settings->set('reference_slugs', $referenceSlugs);

$tree = $settings->get('reference_tree_hierarchy', '');
$settings->set(
'reference_tree_hierarchy',
$referencePlugin->convertTreeToLevels($tree)
);

$defaultConfig = $config[strtolower(__NAMESPACE__)]['config'];
$settings->set(
'reference_resource_name',
$defaultConfig['reference_resource_name']
);
$settings->set(
'reference_total',
$defaultConfig['reference_total']
);
}

if (version_compare($oldVersion, '3.4.7', '<')) {
$tree = $settings->get('reference_tree_hierarchy', '');
$treeString = $referencePlugin->convertFlatLevelsToTree($tree);
$settings->set(
'reference_tree_hierarchy',
$referencePlugin->convertTreeToLevels($treeString)
);

$repository = $entityManager->getRepository(\Omeka\Entity\SitePageBlock::class);
$blocks = $repository->findBy(['layout' => 'reference']);
foreach ($blocks as $block) {
$data = $block->getData();
if (empty($data['reference']['tree']) || $data['reference']['mode'] !== 'tree') {
continue;
}
$treeString = $referencePlugin->convertFlatLevelsToTree($data['reference']['tree']);
$data['reference']['tree'] = $referencePlugin->convertTreeToLevels($treeString);
$block->setData($data);
$entityManager->persist($block);
}
$entityManager->flush();
}

if (version_compare($oldVersion, '3.4.9', '<')) {
// Append item pool (query) to reference block.
$sql = <<<'SQL'
UPDATE site_page_block
SET data = CONCAT('{"reference":{"order":{"alphabetic":"ASC"},"query":[],', SUBSTR(data, 15))
WHERE layout = "reference";
SQL;
$connection->exec($sql);
}
14 changes: 11 additions & 3 deletions src/Controller/Site/ReferenceController.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,14 @@ public function browseAction()

$resourceName = $settings->get('reference_resource_name', 'resources');

$query = ['site_id' => $this->currentSite()->id()];

$view = new ViewModel();
$view->setVariable('references', $slugs);
$view->setVariable('types', array_keys($types));
$view->setVariable('resourceName', $resourceName);
$view->setVariable('query', $query);
$view->setVariable('site', $this->currentSite());
return $view;
}

Expand All @@ -54,23 +58,25 @@ public function listAction()
$term = $slugData['term'];
$type = $slugData['type'];
$resourceName = $settings->get('reference_resource_name', 'resources');
$query = ['site_id' => $this->currentSite()->id()];

$output = $this->params()->fromQuery('output');
if ($output === 'json') {
$references = $this->reference()->getList($term, $type, $resourceName);
$references = $this->reference()->getList($term, $type, $resourceName, $query);
$view = new JsonModel($references);
return $view;
}

$total = $this->reference()->count($term, $type, $resourceName);
$total = $this->reference()->count($term, $type, $resourceName, $query);

$view = new ViewModel();
$view->setVariable('total', $total);
$view->setVariable('label', $slugData['label']);
$view->setVariable('term', $term);
$view->setVariable('args', [
'type' => $slugData['type'],
'type' => $type,
'resource_name' => $resourceName,
'query' => $query,
]);
$view->setVariable('options', [
'query_type' => $settings->get('reference_query_type', 'eq'),
Expand All @@ -94,6 +100,7 @@ public function treeAction()
$term = $settings->get('reference_tree_term', 'dcterms:subject');
$type = 'properties';
$resourceName = $settings->get('reference_resource_name', 'resources');
$query = ['site_id' => $this->currentSite()->id()];

$references = $settings->get('reference_tree_hierarchy', []);

Expand All @@ -103,6 +110,7 @@ public function treeAction()
'term' => $term,
'type' => $type,
'resource_name' => $resourceName,
'query' => $query,
]);
$view->setVariable('options', [
'query_type' => $settings->get('reference_query_type', 'eq'),
Expand Down
8 changes: 8 additions & 0 deletions src/Form/ReferenceBlockForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,14 @@ public function init()
],
],
]);
$referenceFieldset->add([
'name' => 'query',
'type' => Element\Text::class,
'options' => [
'label' => 'Query to limit resources', // @translate
'info' => 'Limit the reference to a particular subset of resources, for example a site, via an advanced search query.', // @translate
],
]);

$this->add([
'name' => 'o:block[__blockIndex__][o:data][options]',
Expand Down

0 comments on commit 0a4be9b

Please sign in to comment.