Browse Source

Converted CM query to sparql to allow for unlabeled Content Models

pull/307/head
Alan Stanley 12 years ago
parent
commit
c5d7485153
  1. 51
      includes/utilities.inc

51
includes/utilities.inc

@ -124,8 +124,7 @@ function islandora_describe_repository($url = NULL) {
try { try {
$info = $connection->api->a->describeRepository(); $info = $connection->api->a->describeRepository();
return $info; return $info;
} } catch (RepositoryException $e) {
catch (RepositoryException $e) {
return FALSE; return FALSE;
} }
} }
@ -283,8 +282,7 @@ function islandora_get_parents_from_rels_ext(FedoraObject $object) {
$collections = array_merge( $collections = array_merge(
$object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'),
$object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf'));
} } catch (RepositoryException $e) {
catch (RepositoryException $e) {
// @todo some logging would be nice, not sure what this throws. // @todo some logging would be nice, not sure what this throws.
return array(); return array();
} }
@ -718,20 +716,23 @@ function islandora_get_allowed_namespaces() {
function islandora_get_content_models($ignore_system_namespace = TRUE) { function islandora_get_content_models($ignore_system_namespace = TRUE) {
module_load_include('inc', 'islandora', 'includes/utilities'); module_load_include('inc', 'islandora', 'includes/utilities');
$tuque = islandora_get_tuque_connection(); $tuque = islandora_get_tuque_connection();
$query = 'select $object $label from <#ri> $query = 'PREFIX fm: <info:fedora/fedora-system:def/model#>
where ($object <fedora-model:label> $label SELECT ?object ?label
and ($object <fedora-model:hasModel> <info:fedora/fedora-system:ContentModel-3.0> FROM <#ri>
or $object <fedora-rels-ext:isMemberOfCollection> <info:fedora/islandora:ContentModelsCollection>) WHERE {
and $object <fedora-model:state> <info:fedora/fedora-system:def/model#Active>) ?object fm:hasModel <info:fedora/fedora-system:ContentModel-3.0>;
order by $label'; OPTIONAL{
?object fm:label ?label
}
}';
$content_models = array(); $content_models = array();
$results = $tuque->repository->ri->itqlQuery($query, 'unlimited'); $results = $tuque->repository->ri->sparqlQuery($query, 'unlimited');
foreach ($results as $result) { foreach ($results as $result) {
$content_model = $result['object']['value']; $content_model = $result['object']['value'];
$label = $result['label']['value']; $label = $result['label']['value'];
$namespace = islandora_get_namespace($content_model); $namespace = islandora_get_namespace($content_model);
$ignore = $ignore_system_namespace && $namespace == 'fedora-system'; $ignore = $ignore_system_namespace && $namespace == 'fedora-system';
$ignore |= !islandora_namespace_accessible($namespace); $ignore |= ! islandora_namespace_accessible($namespace);
if (!$ignore) { if (!$ignore) {
$content_models[$content_model] = array('pid' => $content_model, 'label' => $label); $content_models[$content_model] = array('pid' => $content_model, 'label' => $label);
} }
@ -760,17 +761,25 @@ function islandora_content_model_select_table_form_element($drupal_variable) {
$allowed[] = trim($namespace); $allowed[] = trim($namespace);
} }
} }
$options = islandora_get_content_models(TRUE); $defaults = array();
$selected = variable_get($drupal_variable, array('')); $options = array();
foreach ($selected as $cmodel) { $options = $options + islandora_get_content_models(TRUE);
$options = array($cmodel => $options[$cmodel]) + $options;
foreach($options as $option){
$content_models[$option['pid']] = $option['label'];
}
$selected = array_values(variable_get($drupal_variable, array('')));
foreach($selected as $selection){
$content_models = array($selection => $content_models[$selection]) + $content_models;
} }
foreach ($options as $key => $value) {
$rows[$key] = array( foreach ($content_models as $pid => $label) {
'pid' => $key, $rows[$pid] = array(
'title' => $value, 'pid' => $pid,
'title' => $label,
); );
in_array($key, $selected) ? $defaults[$key] = TRUE : $defaults[$key] = FALSE; in_array($pid, $selected) ? $defaults[$pid] = TRUE : $defaults[$pid] = FALSE;
} }
$header = array( $header = array(
'pid' => array('data' => t('PID')), 'pid' => array('data' => t('PID')),

Loading…
Cancel
Save