From 663589d8fcf05074f772f913753d546a4b4a6136 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Wed, 10 Apr 2013 11:31:56 -0300 Subject: [PATCH] added function to create tableselect form item for content model selection --- includes/utilities.inc | 98 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 17 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index f061f72c..ae7f4b61 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -124,8 +124,7 @@ function islandora_describe_repository($url = NULL) { try { $info = $connection->api->a->describeRepository(); return $info; - } - catch (RepositoryException $e) { + } catch (RepositoryException $e) { return FALSE; } } @@ -204,13 +203,13 @@ function islandora_escape_pid_for_function($pid) { // Apparently, case doesn't matter for function calls in PHP, so let's not // really worry about changing the case. return str_replace( - // Any PID characters which are not valid in the name of a PHP function. - array( - ':', - '-', - ), - '_', - $pid + // Any PID characters which are not valid in the name of a PHP function. + array( + ':', + '-', + ), + '_', + $pid ); } @@ -281,16 +280,15 @@ function islandora_namespace_accessible($id) { function islandora_get_parents_from_rels_ext(FedoraObject $object) { try { $collections = array_merge( - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); - } - catch (RepositoryException $e) { + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); + } catch (RepositoryException $e) { // @todo some logging would be nice, not sure what this throws. return array(); } $map = function($o) { - return islandora_object_load($o['object']['value']); - }; + return islandora_object_load($o['object']['value']); + }; $collections = array_map($map, $collections); return array_filter($collections); } @@ -505,7 +503,7 @@ function islandora_display_repository_inaccessible_message() { $text = t('Islandora configuration'); $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', - array('!link' => $link)); + array('!link' => $link)); drupal_set_message($message, 'error', FALSE); } @@ -731,10 +729,76 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { $label = $result['label']['value']; $namespace = islandora_get_namespace($content_model); $ignore = $ignore_system_namespace && $namespace == 'fedora-system'; - $ignore |= !islandora_namespace_accessible($namespace); + $ignore |= ! islandora_namespace_accessible($namespace); if (!$ignore) { $content_models[$content_model] = array('pid' => $content_model, 'label' => $label); } } return $content_models; } + +/** + * Returns Drupal tableselect element allowing selection of one or more Content Models + * Primarily useful for Admin screens + * @param string $variable + * the name of the Drupal variable holding selected content models + * Content models held in this variable will appear at the top of the displyed list + * @return array Drupal form element allowing content model selection + */ + +function islandora_content_model_select_table_form_element($variable) { + $connection = islandora_get_tuque_connection(); + $restricted = variable_get('islandora_namespace_restriction_enforced', FALSE); + $allowed_string = variable_get('islandora_pids_allowed', 'default: demo: changeme: islandora:'); + $namespaces = explode(':', $allowed_string); + foreach ($namespaces as $namespace) { + if ($namespace) { + $allowed[] = trim($namespace); + } + } + $query = 'select $object $title from <#ri> + where ($object $title + and ($object + or $object ) + and $object ) + order by $title'; + + $list = $connection->repository->ri->itqlQuery($query, 'unlimited'); + $other_list = islandora_get_content_models(TRUE); + $options = array(); + + foreach ($other_list as $pid => $label) { + if ($pid) { + $item_namespace = explode(':', $pid); + if (!$restricted || in_array($item_namespace[0], $allowed)) { + + if (!preg_match('/fedora-system/', $pid)) { + $options[$pid] = $label; + } + } + } + } + + $selected = variable_get($variable, array('')); + foreach ($selected as $cmodel) { + $options = array($cmodel => $options[$cmodel]) + $options; + } + foreach ($options as $key => $value) { + $rows[$key] = array( + 'pid' => $key, + 'title' => $value, + ); + in_array($key, $selected) ? $defaults[$key] = TRUE : $defaults[$key] = FALSE; + } + $header = array( + 'pid' => array('data' => t('PID')), + 'title' => array('data' => t('Content Model')), + ); +//build and return table element + return array( + '#type' => 'tableselect', + '#header' => $header, + '#options' => $rows, + '#default_value' => $defaults, + ); +} \ No newline at end of file