Browse Source

Include an autocomplete path for content models that used to live in islandora_xml_forms.

pull/342/head
Jordan Dukart 11 years ago
parent
commit
7c72ee10a2
  1. 73
      includes/content_model.autocomplete.inc
  2. 12
      islandora.module

73
includes/content_model.autocomplete.inc

@ -0,0 +1,73 @@
<?php
/**
* Autocomplete the content model name.
*
* @param string $string
* A search string.
* @return string
* The rendered JSON results.
*/
function islandora_content_model_autocomplete($string) {
$content_models = islandora_get_content_model_names();
$output = array();
foreach ($content_models as $model => $label) {
if (preg_match("/{$string}/i", $label) !== 0) {
$output[$model] = $label;
}
}
return drupal_json_output($output);
}
/**
* Gets a map of form names suitable for use as select #options.
*/
function islandora_get_content_model_names() {
$results = islandora_query_content_models();
$ret = array();
foreach ($results as $result) {
$ret[$result['model']['value']] = "{$result['label']['value']} ({$result['model']['value']})";
}
return $ret;
}
/**
* Perform a resource index query to determine get a list of content models.
*
* Only returns content models with at least one subscribing object.
*
* @return array
* An array of RI results, as given by the Tuque RI query interface.
*/
function islandora_query_content_models() {
$connection = islandora_get_tuque_connection();
if ($connection) {
$query = 'select $model $label from <#ri> where
$model <fedora-model:hasModel> <info:fedora/fedora-system:ContentModel-3.0> and $model <fedora-model:label> $label
minus $model <mulgara:is><info:fedora/fedora-system:FedoraObject-3.0>
minus $model <mulgara:is><info:fedora/fedora-system:ContentModel-3.0>
minus $model <mulgara:is><info:fedora/fedora-system:ServiceDefinition-3.0>
minus $model <mulgara:is><info:fedora/fedora-system:ServiceDeployment-3.0>';
$results = $connection->repository->ri->itqlQuery($query);
return $results;
}
return array();
}
/**
* Minor array transformation.
*
* @param array $content
* The array of results as returned from Tuque's RI query interface.
* @return array
* An array of results in a more usable format.
*/
function islandora_parse_query($content) {
$content_models = array();
foreach ($content as $model) {
$content_models[] = $model['object']['value'];
}
$content_models = array_unique($content_models);
$content_models = array_values($content_models);
return $content_models;
}

12
islandora.module

@ -52,6 +52,9 @@ define('ISLANDORA_DATASTREAM_MODIFIED_HOOK', 'islandora_datastream_modified');
define('ISLANDORA_DATASTREAM_PURGED_HOOK', 'islandora_datastream_purged'); define('ISLANDORA_DATASTREAM_PURGED_HOOK', 'islandora_datastream_purged');
define('ISLANDORA_INGEST_STEP_HOOK', 'islandora_ingest_steps'); define('ISLANDORA_INGEST_STEP_HOOK', 'islandora_ingest_steps');
// Autocomplete paths.
define('ISLANDORA_CONTENT_MODELS_AUTOCOMPLETE', 'islandora/autocomplete/content-models');
/** /**
* Implements hook_menu(). * Implements hook_menu().
* *
@ -246,6 +249,15 @@ function islandora_menu() {
'access arguments' => array(FEDORA_VIEW_OBJECTS, 2), 'access arguments' => array(FEDORA_VIEW_OBJECTS, 2),
'load arguments' => array(2), 'load arguments' => array(2),
); );
$items[ISLANDORA_CONTENT_MODELS_AUTOCOMPLETE] = array(
'title' => 'Autocomplete callback',
'description' => 'Autocomplete a Fedora content model PID.',
'file' => 'includes/content_model.autocomplete.inc',
'page callback' => 'islandora_content_model_autocomplete',
'page arguments' => array(3),
'access arguments' => array('administer site configuration'),
'type' => MENU_CALLBACK,
);
return $items; return $items;
} }

Loading…
Cancel
Save