From 2392fe83a22500daf610cfc672e018ef53cc968e Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Tue, 11 Jan 2011 12:01:05 -0400 Subject: [PATCH 01/10] added opt-out for pid namespace restriction --- xsl/unfilteredresults.xsl.xml | 269 ++++++++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 xsl/unfilteredresults.xsl.xml diff --git a/xsl/unfilteredresults.xsl.xml b/xsl/unfilteredresults.xsl.xml new file mode 100644 index 00000000..110f5ea5 --- /dev/null +++ b/xsl/unfilteredresults.xsl.xml @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Total Hits = + + , + + Number of Hits/page = + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+ +

Your search yielded no results

+ +
+
    +
  • Check if your spelling is correct.
  • + +
  • Remove quotes around phrases to match each word individually: + "blue smurf" will match less than + blue smurf. +
  • +
  • Consider loosening your query with + OR: + blue smurf will match less than + blue OR smurf. +
  • +
+
+ +
+ +
+
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + fedora/repository/ + /-/ + + + + + + fedora/repository/ + /TN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + fedora/repository/ + /-/ + + + + + +
+
+ + + Score:( + ) + +
+ + + + + fedora/repository/ + /-/ + + + + + +
+ + +
+ + Text Stream + + + + + +
+ + + + + + + +
+ + + +
+ +
From eab0289dde2df3e579b143620e0ca5f19ced7961 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Tue, 11 Jan 2011 16:15:54 -0400 Subject: [PATCH 02/10] Code cleanup following addition of namespace restriction flag --- ObjectHelper.inc | 5 + SearchClass.inc | 94 ++----------------- api/fedora_item.inc | 3 +- api/fedora_utils.inc | 5 +- fedora_repository.module | 11 ++- formClass.inc | 43 +++++---- ilives/fedora_ilives.module | 1 + plugins/fedora_attach/fedora_attach.admin.inc | 6 +- 8 files changed, 53 insertions(+), 115 deletions(-) diff --git a/ObjectHelper.inc b/ObjectHelper.inc index 0aa76e68..3d59c795 100644 --- a/ObjectHelper.inc +++ b/ObjectHelper.inc @@ -606,7 +606,12 @@ class ObjectHelper { function fedora_repository_access($op, $pid) { global $user; + $returnValue = FALSE; + $isRestricted = variable_get('fedora_namespace_restriction_enforced',TRUE); + if(!$isRestricted){ + return TRUE; + } if ($pid == NULL) { $pid = variable_get('fedora_repository_pid', 'islandora:top'); } diff --git a/SearchClass.inc b/SearchClass.inc index 21fa114e..85a91968 100644 --- a/SearchClass.inc +++ b/SearchClass.inc @@ -208,42 +208,7 @@ class SearchClass { } - /* - function custom_search($query,$pathToXslt=NULL){ - module_load_include('php', 'Fedora_Repository', 'ObjectHelper'); - module_load_include('inc', 'Fedora_Repository', 'api/fedora_utils'); - if (user_access('view fedora collection')) { - $numberOfHistPerPage = '1000';//hack for IR they do not want next button - $luceneQuery = NULL; - //demo search string ?operation=gfindObjects&indexName=DemoOnLucene&query=fgs.DS.first.text%3Achristmas&hitPageStart=11&hitPageSize=10 - - - $indexName = variable_get('fedora_index_name', 'DemoOnLucene'); - $query=htmlentities(urlencode($query)); - - $searchUrl = variable_get('fedora_fgsearch_url', 'http://localhost:8080/fedoragsearch/rest'); - $searchString = '?operation=gfindObjects&indexName=' . $indexName . '&restXslt=copyXml&query=' . $query; - $searchString .= '&hitPageSize='.$numberOfHistPerPage.'&hitPageStart=1'; - //$searchString = htmlentities($searchString); - $searchUrl .= $searchString; - - $objectHelper = new ObjectHelper(); - - $resultData = do_curl($searchUrl,1); - //var_dump($resultData);exit(0); - // $doc = new DOMDocument(); - // $doc->loadXML($resultData); - if($pathToXslt==NULL) { - $output.=$this->applyLuceneXSLT($resultData,$query); - }else{ - $output.=$this->applySpecifiedXSLT($resultData,$pathToXslt); - } - - return $output; - - } - } - */ + function custom_search($query, $startPage=1, $xslt= '/xsl/advanced_search_results.xsl', $numberOfHistPerPage = 50) { module_load_include('inc', 'fedora_repository', 'ObjectHelper'); @@ -327,53 +292,7 @@ class SearchClass { } } //default function for lucene results - /* - function applyLuceneXSLT($resultData, $query = NULL){ - $path = drupal_get_path('module', 'Fedora_Repository'); - $proc = NULL; - if (!$resultData) { - drupal_set_message(t('No Results!')); - return ' '; //no results - } - try { - $proc = new XsltProcessor(); - } - catch (Exception $e) { - drupal_set_message(t('Error loading results xslt! ') . $e->getMessage()) ; - return ' '; - } - - //inject into xsl stylesheet - if(isset($query)){ - $proc->setParameter('', 'fullQuery', $query); - } - $proc->setParameter('', 'searchToken', drupal_get_token('fedora_repository_advanced_search')); //token generated by Drupal, keeps tack of what tab etc we are on - $proc->setParameter('', 'searchUrl', url('search') . '/fedora_repository'); //needed in our xsl - $proc->setParameter('', 'objectsPage', base_path()); - $proc->setParameter('', 'allowedPidNameSpaces', variable_get('fedora_pids_allowed', 'demo: changeme:')); - $proc->registerPHPFunctions(); - $xsl = new DomDocument(); - - $test= $xsl->load($path . '/xsl/results.xsl'); - if (!isset($test)) { - drupal_set_message(t('Error loading search results XSLT!')); - return t('Error loading search results XSLT.'); - } - - $input = new DomDocument(); - $didLoadOk = $input->loadXML($resultData); - - if (!isset($didLoadOk)) { - drupal_set_message(t('Error loading search results!')); - return t('Error loading search results.'); - } - else { - $proc->importStylesheet($xsl); - $newdom = $proc->transformToDoc($input); - return $newdom->saveXML(); - } - } - */ + /** * apply an xslt to lucene gsearch search results @@ -385,6 +304,11 @@ class SearchClass { */ function applyLuceneXSLT($resultData, $startPage = 1, $xslt_file = '/xsl/results.xsl', $query=NULL) { $path = drupal_get_path('module', 'Fedora_Repository'); + $test = $xslt_file; + $isRestricted = variable_get('fedora_namespace_restriction_enforced',TRUE); + if(!isRestricted && $xslt_file == null){ + $xslt_file = '/xsl/unfilteredresults.xsl'; + } $proc = NULL; if (!$resultData) { //drupal_set_message(t('No Results!')); @@ -405,7 +329,7 @@ class SearchClass { $proc->setParameter('', 'searchToken', drupal_get_token('fedora_repository_advanced_search')); //token generated by Drupal, keeps tack of what tab etc we are on $proc->setParameter('', 'searchUrl', url('search') . '/fedora_repository'); //needed in our xsl $proc->setParameter('', 'objectsPage', base_path()); - $proc->setParameter('', 'allowedPidNameSpaces', variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: ')); + $proc->setParameter('', 'allowedPidNameSpaces', variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: ')); $proc->setParameter('', 'hitPageStart', $startPage); $proc->registerPHPFunctions(); $xsl = new DomDocument(); @@ -450,7 +374,7 @@ class SearchClass { $proc->setParameter('', 'userID', $user->uid); $proc->setParameter('', 'searchUrl', url('search') . '/fedora_repository'); //needed in our xsl $proc->setParameter('', 'objectsPage', base_path()); - $proc->setParameter('', 'allowedPidNameSpaces', variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: ')); + $proc->setParameter('', 'allowedPidNameSpaces', variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: ')); $proc->setParameter('', 'orderBy', $orderBy); $xsl = new DomDocument(); diff --git a/api/fedora_item.inc b/api/fedora_item.inc index 463ba6df..dfe5a4b6 100644 --- a/api/fedora_item.inc +++ b/api/fedora_item.inc @@ -557,9 +557,10 @@ class Fedora_Item { } static function get_next_PID_in_namespace( $pid_namespace = '') { + if (empty($pid_namespace)) { // Just get the first one in the config settings. - $allowed_namespaces = explode(" ", variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: ')); + $allowed_namespaces = explode(" ", variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: ')); $pid_namespace = $allowed_namespaces[0]; if (!empty($pid_namespace)) { $pid_namespace = substr($pid_namespace, 0, strpos($pid_namespace, ":")); diff --git a/api/fedora_utils.inc b/api/fedora_utils.inc index 825192a3..24f96af1 100644 --- a/api/fedora_utils.inc +++ b/api/fedora_utils.inc @@ -72,7 +72,7 @@ function fedora_available() { //return (strpos($ret, 'wsdl:definitions') != FALSE); module_load_include('inc', 'fedora_repository', 'ConnectionHelper'); - + return true; try { @@ -84,11 +84,10 @@ function fedora_available() { $result = $soap_client->__soapCall('describeRepository', array()); } - print 'why am I here?'; return TRUE; } catch (SoapFault $e) { - print 'what now?'; + watchdog(t("FEDORA_REPOSITORY"), t("Error trying to get SOAP client connection.")); return FALSE; diff --git a/fedora_repository.module b/fedora_repository.module index ab6740ad..9f7a2ae2 100644 --- a/fedora_repository.module +++ b/fedora_repository.module @@ -961,6 +961,7 @@ function fedora_repository_search($op = 'search', $keys = NULL) { */ function fedora_repository_search_page($resultData) { $path = drupal_get_path('module', 'fedora_repository'); + $isRestricted = variable_get('fedora_namespace_restriction_enforced',TRUE); $proc = NULL; if (!$resultData[0][0]['data']) { return ''; //no results @@ -986,8 +987,13 @@ function fedora_repository_search_page($resultData) { $proc->setParameter('', 'allowedPidNameSpaces', variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: ')); $proc->registerPHPFunctions(); $xsl = new DomDocument(); - $xsl->load($path . '/xsl/results.xsl'); - $quimby = $xsl; + if($isRestricted){ + $xsl->load($path . '/xsl/results.xsl'); + } + else{ + $xsl->load($path . '/xsl/unfilteredresults.xsl'); + } + $input = new DomDocument(); $didLoadOk = $input->loadXML(utf8_encode($resultData[0][0]['data'])); @@ -1193,6 +1199,7 @@ function theme_fedora_repository_mnpl_advanced_search_form($form) { function fedora_repository_mnpl_advanced_search($query, $startPage = 1) { module_load_include('inc', 'fedora_repository', 'SearchClass'); $searchClass = new SearchClass(); + $retVal = $searchClass->custom_search($query, $startPage); return $searchClass->custom_search($query, $startPage); } diff --git a/formClass.inc b/formClass.inc index 356f31f3..f287ec4a 100644 --- a/formClass.inc +++ b/formClass.inc @@ -325,31 +325,30 @@ class formClass { '#weight' => 0 ); - /* - $form['fedora_default_display_pid'] = array( - '#type' => 'textfield', - '#title' => t('Fedora Default Display Object Pid' ), - '#default_value' => variable_get('fedora_default_display_pid', 'demo:10'), - '#description' => t('Object Pid of an Image to show if the requested pid/datastream cannot be found'), - '#required' => TRUE, - '#weight' => 0 - ); - $form['fedora_default_display_dsid'] = array( - '#type' => 'textfield', - '#title' => t('Fedora Default Display Datastream ID' ), - '#default_value' => variable_get('fedora_default_display_dsid', 'TN'), - '#description' => t('Object Datastream id of an Image to show if the requested pid/datastream cannot be found'), - '#required' => TRUE, - '#weight' => 0 - ); - */ - $form['fedora_pids_allowed'] = array( + + $form['fedora_namespace'] = array( + '#type' => 'fieldset', + + ); + $form['fedora_namespace']['fedora_namespace_restriction_enforced'] = array( + '#weight' => -1, + '#type' => 'radios', + '#title' => t('Enforce namespace restrictions'), + '#options' => array( + TRUE => t('Enabled'), + FALSE => t('Disabled') + ), + '#description' => t('Allow administrator to restrict user\'s access to the PID namepaces listed below' ), + '#default_value' => variable_get('fedora_namespace_restriction_enforced',TRUE) + ); + + $form['fedora_namespace']['fedora_pids_allowed'] = array( '#type' => 'textfield', '#title' => t('PID namespaces allowed in this Drupal install'), - '#default_value' => variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: '), - '#description' => t('The PID namespaces that you are allowed to see from this Drupal install. In reality this can be more than a namespace as it could include demo:mydemos etc. Can be a space seperated list to include more than one PID namespace.'), - '#required' => TRUE, + '#default_value' => variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: '), + '#description' => t('A space separated list PID namespaces that users are permitted to access from this Drupal installation.
This could be more than a simple namespace ie demo:mydemos.'), + '#weight' => 0 ); /* diff --git a/ilives/fedora_ilives.module b/ilives/fedora_ilives.module index 46022943..55a9953d 100644 --- a/ilives/fedora_ilives.module +++ b/ilives/fedora_ilives.module @@ -548,6 +548,7 @@ function install_book_content_model_objects() { module_load_include('inc', 'fedora_repository', 'api/fedora_item'); $allowed_pids_str = variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: '); $allowed_pids = explode(' ', $allowed_pids_str); + if (!in_array('ilives:', $allowed_pids)) { variable_set('fedora_pids_allowed', $allowed_pids_str . ' ilives:'); diff --git a/plugins/fedora_attach/fedora_attach.admin.inc b/plugins/fedora_attach/fedora_attach.admin.inc index 655dee51..30c378af 100644 --- a/plugins/fedora_attach/fedora_attach.admin.inc +++ b/plugins/fedora_attach/fedora_attach.admin.inc @@ -14,10 +14,12 @@ * @see system_settings_form(). */ function fedora_attach_admin() { - $options = drupal_map_assoc(explode(" ", variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: '))); + $options = drupal_map_assoc(explode(" ", variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: '))); $default_value = variable_get('fedora_attach_pid_namespace', 'default:'); + $isRestricted = variable_get('fedora_namespace_restriction_enforced',TRUE); - if (!in_array($default_value, $options)) { + + if (!in_array($default_value, $options) && $isRestricted) { drupal_set_message( "The value last set here ($default_value) is not in the list of available PID namespaces (perhaps it has changed?). Please choose a valid option from the list.", 'warning' ); } From 6bdb57c521bb30b3c46a53b17e9c8570a6ad6abd Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Tue, 11 Jan 2011 16:30:34 -0400 Subject: [PATCH 03/10] corrected filename for unfilteredresults.xml --- xsl/unfilteredresults.xsl.xml | 269 ---------------------------------- 1 file changed, 269 deletions(-) delete mode 100644 xsl/unfilteredresults.xsl.xml diff --git a/xsl/unfilteredresults.xsl.xml b/xsl/unfilteredresults.xsl.xml deleted file mode 100644 index 110f5ea5..00000000 --- a/xsl/unfilteredresults.xsl.xml +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Total Hits = - - , - - Number of Hits/page = - - - -
- -
- - - - - - - - - - - - - - - - -
- - -
- -
- -

Your search yielded no results

- -
-
    -
  • Check if your spelling is correct.
  • - -
  • Remove quotes around phrases to match each word individually: - "blue smurf" will match less than - blue smurf. -
  • -
  • Consider loosening your query with - OR: - blue smurf will match less than - blue OR smurf. -
  • -
-
- -
- -
-
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
-
- -
- - - - - - - - - - - - - - - - fedora/repository/ - /-/ - - - - - - fedora/repository/ - /TN - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - fedora/repository/ - /-/ - - - - - -
-
- - - Score:( - ) - -
- - - - - fedora/repository/ - /-/ - - - - - -
- - -
- - Text Stream - - - - - -
- - - - - - - -
- - - -
- -
From b1d843d810aecacd0c39cf22c03c948dd45fdcd4 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Tue, 11 Jan 2011 16:37:27 -0400 Subject: [PATCH 04/10] Corrected filename --- xsl/unfilteredresults.xsl | 269 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 xsl/unfilteredresults.xsl diff --git a/xsl/unfilteredresults.xsl b/xsl/unfilteredresults.xsl new file mode 100644 index 00000000..110f5ea5 --- /dev/null +++ b/xsl/unfilteredresults.xsl @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Total Hits = + + , + + Number of Hits/page = + + + +
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+ +

Your search yielded no results

+ +
+
    +
  • Check if your spelling is correct.
  • + +
  • Remove quotes around phrases to match each word individually: + "blue smurf" will match less than + blue smurf. +
  • +
  • Consider loosening your query with + OR: + blue smurf will match less than + blue OR smurf. +
  • +
+
+ +
+ +
+
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + fedora/repository/ + /-/ + + + + + + fedora/repository/ + /TN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + fedora/repository/ + /-/ + + + + + +
+
+ + + Score:( + ) + +
+ + + + + fedora/repository/ + /-/ + + + + + +
+ + +
+ + Text Stream + + + + + +
+ + + + + + + +
+ + + +
+ +
From 38833546e3e945b0ad8b0f78e25974054a1c8bfb Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Wed, 12 Jan 2011 12:11:54 -0400 Subject: [PATCH 05/10] added path to admin page for admin users only on page denied error. --- fedora_repository.module | 70 +++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/fedora_repository.module b/fedora_repository.module index 9f7a2ae2..d4134410 100644 --- a/fedora_repository.module +++ b/fedora_repository.module @@ -105,7 +105,6 @@ function fedora_repository_ingest_object($collection_pid=NULL, $collection_label drupal_set_message(t("This collection PID $collection_pid is not valid"), 'error'); return ' '; } - } if ($collection_pid == NULL) { @@ -145,7 +144,7 @@ function fedora_repository_ingest_form_submit($form, &$form_state) { $form_state['values']['content_model_pid'] = $contentModelPid; $form_state['values']['relationship'] = $relationship; - $err = (!$cm->execFormHandler($form_state['values'],$form_state)); + $err = (!$cm->execFormHandler($form_state['values'], $form_state)); $_SESSION['fedora_ingest_files'] = ''; //empty this variable @@ -241,19 +240,19 @@ function fedora_repository_purge_object_form(&$form_state, $pid, $referrer) { '#type' => 'hidden', '#value' => "$pid" ); - if (!strstr( drupal_get_destination(), urlencode('fedora/repository'))) { + if (!strstr(drupal_get_destination(), urlencode('fedora/repository'))) { $form['referrer'] = array( '#type' => 'hidden', '#value' => $referrer, ); } - if(!isset($form_state['storage']['confirm'])) { + if (!isset($form_state['storage']['confirm'])) { // do your normal $form definition here $form['submit'] = array( '#type' => 'image_button', - '#src' => drupal_get_path('module', 'fedora_repository').'/images/purge_big.png', + '#src' => drupal_get_path('module', 'fedora_repository') . '/images/purge_big.png', '#value' => t('Purge'), '#suffix' => 'Purge this object', ); @@ -261,10 +260,9 @@ function fedora_repository_purge_object_form(&$form_state, $pid, $referrer) { $collectionPid = $_SESSION['fedora_collection']; } //$form['#redirect'] = $referrer; - + return $form; - } - else { + } else { // ALSO do $form definition here. Your final submit handler (after user clicks Yes, I Confirm) will only see $form_state info defined here. Form you create here passed as param1 to confirm_form return confirm_form($form, 'Confirm Purge Object', $referrer, 'Are you sure you want to delete this object? This action cannot be undone.', 'Delete', 'Cancel'); //Had better luck leaving off last param 'name' @@ -409,8 +407,7 @@ function fedora_repository_purge_object_form_submit($form, &$form_state) { if (!isset($form_state['storage']['confirm'])) { $form_state['storage']['confirm'] = TRUE; // this will cause the form to be rebuilt, entering the confirm part of the form $form_state['rebuild'] = TRUE; // along with this - } - else { + } else { // this is where you do your processing after they have pressed the confirm button $params = array( "pid" => $pid, @@ -435,8 +432,7 @@ function fedora_repository_purge_object_form_submit($form, &$form_state) { } if (!empty($form_state['values']['referrer'])) { $form_state['redirect'] = $form_state['values']['referrer']; - } - else { + } else { $form_state['redirect'] = "fedora/repository/$collectionPid/"; } } @@ -757,17 +753,23 @@ function fedora_repository_get_items($pid = NULL, $dsId = NULL, $collection = NU module_load_include('inc', 'fedora_repository', 'api/fedora_utils'); global $user; - if ($pid &!validPid($pid)) { + if ($pid & !validPid($pid)) { drupal_set_message(t("Invalid PID!"), 'error'); return ' '; } - if ($dsId &!validDsid($dsId)) { + if ($dsId & !validDsid($dsId)) { drupal_set_message(t("Invalid dsID!"), 'error'); return ' '; } if (!fedora_repository_access(OBJECTHELPER::$OBJECT_HELPER_VIEW_FEDORA, $pid, $user)) { - drupal_set_message(t("You do not have access to Fedora objects within the attempted namespace or access to Fedora denied!"), 'error'); + //drupal_set_message(t("You do not have access to Fedora objects within the attempted namespace or access to Fedora denied"), 'error'); + + if (user_access('access administration pages')) { + drupal_set_message(t("PIDs may be added to allowed namespaces, or all namespace restrictions removed !here", array('!here' => l('here', 'admin/settings/fedora_repository'))), 'warning'); + } + drupal_access_denied(); + exit; return ' '; } @@ -841,11 +843,16 @@ function repository_page($pid = NULL, $dsId = NULL, $collection = NULL, $pageNum } function repository_service($pid = NULL, $servicePid = NULL, $serviceMethod = NULL) { - module_load_include('inc','fedora_repository', 'api/fedora_item'); - module_load_include('inc','fedora_repository', 'ObjectHelper'); + module_load_include('inc', 'fedora_repository', 'api/fedora_item'); + module_load_include('inc', 'fedora_repository', 'ObjectHelper'); global $user; + if (!fedora_repository_access(OBJECTHELPER::$OBJECT_HELPER_VIEW_FEDORA, $pid, $user)) { - drupal_set_message(t("You do not have access to Fedora objects within the attempted namespace or access to Fedora denied!"), 'error'); + //drupal_set_message(t("You do not have access to Fedora objects within the attempted namespace or access to Fedora denied"), 'error'); + drupal_access_denied(); + if (user_access('access administration pages')) { + drupal_set_message(t("PIDs may be added to allowed namespaces, or all namespace restrictions removed !here", array('!here' => l('here', 'admin/settings/fedora_repository'))), 'error'); + } return ' '; } if ($pid == NULL) { @@ -858,15 +865,13 @@ function repository_service($pid = NULL, $servicePid = NULL, $serviceMethod = NU return ' '; } - - $item = new Fedora_Item($pid); - if ($item !== false) - { - echo $item->get_dissemination($servicePid,$serviceMethod); + + $item = new Fedora_Item($pid); + if ($item !== false) { + echo $item->get_dissemination($servicePid, $serviceMethod); } exit(); - } //Search Stuff ******************************************************************** @@ -961,7 +966,7 @@ function fedora_repository_search($op = 'search', $keys = NULL) { */ function fedora_repository_search_page($resultData) { $path = drupal_get_path('module', 'fedora_repository'); - $isRestricted = variable_get('fedora_namespace_restriction_enforced',TRUE); + $isRestricted = variable_get('fedora_namespace_restriction_enforced', TRUE); $proc = NULL; if (!$resultData[0][0]['data']) { return ''; //no results @@ -987,13 +992,12 @@ function fedora_repository_search_page($resultData) { $proc->setParameter('', 'allowedPidNameSpaces', variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: ')); $proc->registerPHPFunctions(); $xsl = new DomDocument(); - if($isRestricted){ + if ($isRestricted) { $xsl->load($path . '/xsl/results.xsl'); - } - else{ + } else { $xsl->load($path . '/xsl/unfilteredresults.xsl'); } - + $input = new DomDocument(); $didLoadOk = $input->loadXML(utf8_encode($resultData[0][0]['data'])); @@ -1280,7 +1284,7 @@ function fedora_repository_demo_objects_form() { } } else { $form['install_demos']['smileynote'] = array( - '#value' => '

If you install the '.l('fedora demo objects', 'https://wiki.duraspace.org/display/FCR30/Demonstration+Objects').' Islandora can display them as a collection.

' + '#value' => '

If you install the ' . l('fedora demo objects', 'https://wiki.duraspace.org/display/FCR30/Demonstration+Objects') . ' Islandora can display them as a collection.

' ); } @@ -1295,11 +1299,11 @@ function fedora_repository_demo_objects_form() { '#prefix' => '

Demo collections already installed in this repository:

    ', '#suffix' => '
', ); - + if (!empty($existing_demos)) { foreach ($existing_demos as $pid => $demo_object) { - - $form['existing_demos'][$demo_object->pid] = array ( + + $form['existing_demos'][$demo_object->pid] = array( '#prefix' => '
  • ', '#value' => l($demo_object->pid, $demo_object->url()), '#suffix' => '
  • ', From ce049c07300b678d2580e022d0c4354e25f292c8 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 14 Jan 2011 10:32:37 -0400 Subject: [PATCH 06/10] Ensured that both namespace user permissions are checked --- ObjectHelper.inc | 266 +++++++++++++++++++++++------------------------ 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/ObjectHelper.inc b/ObjectHelper.inc index 3d59c795..55e285ca 100644 --- a/ObjectHelper.inc +++ b/ObjectHelper.inc @@ -32,7 +32,7 @@ class ObjectHelper { //$this->fedoraPass = $connectionHelper->getPassword(); } - /** + /** * Grabs a stream from fedora sets the mimetype and returns it. $dsID is the * datastream id. If $forceSoap is set, the function will always buffer the datastream from fedora. Otherwise, it will * try and use a redirect if possible. @@ -41,7 +41,7 @@ class ObjectHelper { */ function makeObject($pid, $dsID, $asAttachment = FALSE, $label = NULL, $filePath=FALSE, $version=NULL, $forceSoap = FALSE) { global $user; - module_load_include('inc','fedora_repository','ContentModel'); + module_load_include('inc', 'fedora_repository', 'ContentModel'); if ($pid == NULL || $dsID == NULL) { drupal_set_message(t("no pid or dsid given to create an object with"), 'error'); return ' '; @@ -58,21 +58,21 @@ class ObjectHelper { drupal_set_message(t("You do not have access Fedora objects within the attempted namespace."), 'error'); drupal_access_denied(); return ' '; - } + } - - if (variable_get('fedora_object_restrict_datastreams', FALSE) == TRUE ) { + + if (variable_get('fedora_object_restrict_datastreams', FALSE) == TRUE) { if (($cm = ContentModel::loadFromObject($pid)) == FALSE) { - drupal_set_message(t("You do not have access to objects without an Islandora Content Model."), 'error'); - drupal_access_denied(); - return ' '; + drupal_set_message(t("You do not have access to objects without an Islandora Content Model."), 'error'); + drupal_access_denied(); + return ' '; } $cmDatastreams = $cm->listDatastreams(); - if ( !((isset($user) && in_array('administrator',$user->roles)) || in_array($dsID,$cmDatastreams))) { - drupal_set_message(t("You do not have access to the specified datastream."), 'error'); - drupal_access_denied(); - return ' '; + if (!((isset($user) && in_array('administrator', $user->roles)) || in_array($dsID, $cmDatastreams))) { + drupal_set_message(t("You do not have access to the specified datastream."), 'error'); + drupal_access_denied(); + return ' '; } } @@ -81,9 +81,9 @@ class ObjectHelper { if (isset($item->datastreams[$dsID])) { - $mimeType=$item->datastreams[$dsID]['MIMEType']; - if ($label == NULL) { - $label = $item->datastreams[$dsID]['label']; + $mimeType = $item->datastreams[$dsID]['MIMEType']; + if ($label == NULL) { + $label = $item->datastreams[$dsID]['label']; } } else { drupal_not_found(); @@ -94,7 +94,7 @@ class ObjectHelper { if ((!isset($user)) || $user->uid == 0) { $fedoraUser = 'anonymous'; $fedoraPass = 'anonymous'; - $contentSize= 0; + $contentSize = 0; } else { $fedoraUser = $user->name; $fedoraPass = $user->pass; @@ -102,7 +102,7 @@ class ObjectHelper { $contentSize = $dataStreamInfo->datastream->size; } - if (function_exists("curl_init")) { + if (function_exists("curl_init")) { if (!isset($mimeType)) { $pid = variable_get('fedora_default_display_pid', 'demo:10'); $dsID = variable_get('fedora_default_display_dsid', 'TN'); @@ -137,10 +137,10 @@ class ObjectHelper { fclose($fp); } else { - header("Content-type: $mimeType"); - if ($contentSize > 0) { - header("Content-length: $contentSize"); - } + header("Content-type: $mimeType"); + if ($contentSize > 0) { + header("Content-length: $contentSize"); + } if ($asAttachment) { $suggestedFileName = "$label"; @@ -165,18 +165,18 @@ class ObjectHelper { header('Content-Disposition: attachment; filename="' . $suggestedFileName . '"'); } - - if ( (isset($user) && $user->uid != 0) || $forceSoap || isset($_SERVER['HTTPS'])) { - curl_exec($ch); - } else { - header('Location: '.$url); - } + + if ((isset($user) && $user->uid != 0) || $forceSoap || isset($_SERVER['HTTPS'])) { + curl_exec($ch); + } else { + header('Location: ' . $url); + } } curl_close($ch); } else { drupal_set_message(t('No curl support.'), 'error'); } - } + } //Gets collection objects t function getCollectionInfo($pid, $query = NULL) { @@ -258,14 +258,14 @@ class ObjectHelper { $item = new Fedora_Item($pid); if (user_access(ObjectHelper :: $PURGE_FEDORA_OBJECTSANDSTREAMS)) { - $allow=TRUE; - if (module_exists('fedora_fesl')) { - $allow= fedora_fesl_check_roles($pid,'write'); + $allow = TRUE; + if (module_exists('fedora_fesl')) { + $allow = fedora_fesl_check_roles($pid, 'write'); } if ($allow) { - $purgeImage = 'purge datastream'; + $purgeImage = 'purge datastream'; } } else { $purgeImage = ' '; @@ -274,16 +274,16 @@ class ObjectHelper { // Add an icon to replace a datastream // @TODO Note: using l(theme_image(..), ...); for these image links (and other links) may remove the need to have clean urls enabled. - $replaceImage= ' '; + $replaceImage = ' '; if (user_access(ObjectHelper :: $ADD_FEDORA_STREAMS)) { - $allow=TRUE; - if (module_exists('fedora_fesl')) { - $allow= fedora_fesl_check_roles($pid,'write'); + $allow = TRUE; + if (module_exists('fedora_fesl')) { + $allow = fedora_fesl_check_roles($pid, 'write'); } if ($allow) { - $replaceImage = 'label . '" href="' . $base_url . '/fedora/repository/replaceStream/' . $pid . '/' . $dataStreamValue->ID . '/' . $dataStreamValue->label . '">replace datastream'; + $replaceImage = 'label . '" href="' . $base_url . '/fedora/repository/replaceStream/' . $pid . '/' . $dataStreamValue->ID . '/' . $dataStreamValue->label . '">replace datastream'; } - } + } $content = ''; $id = $dataStreamValue->ID; @@ -292,7 +292,7 @@ class ObjectHelper { $mimeType = $dataStreamValue->MIMEType; $view = '' . t('View') . ''; + '" target="_blank" >' . t('View') . ''; $action = "$base_url/fedora/repository/object_download/" . drupal_urlencode($pid) . '/' . $id . '/' . drupal_urlencode(preg_replace('/\//i', '${1}_', $label)); // Necessary to handle the case of Datastream labels that contain slashes. Ugh. $downloadVersion = '
    '; if (user_access(ObjectHelper :: $EDIT_FEDORA_METADATA)) { @@ -331,25 +331,25 @@ class ObjectHelper { $dsId = 'QDC'; $params = array( - 'pid' => "$pid", - 'dsID' => "$dsId", - 'asOfDateTime' => "" + 'pid' => "$pid", + 'dsID' => "$dsId", + 'asOfDateTime' => "" ); try { $object = $client->__soapCAll('getDatastreamDissemination', array( - 'parameters' => $params - )); + 'parameters' => $params + )); } catch (Exception $e) { try { //probably no QDC so we will try for the DC stream. $dsId = 'DC'; $params = array( - 'pid' => "$pid", - 'dsID' => "$dsId", - 'asOfDateTime' => "" + 'pid' => "$pid", + 'dsID' => "$dsId", + 'asOfDateTime' => "" ); $object = $client->__soapCAll('getDatastreamDissemination', array( - 'parameters' => $params - )); + 'parameters' => $params + )); } catch (exception $e2) { drupal_set_message($e2->getMessage(), 'error'); return; @@ -380,13 +380,13 @@ class ObjectHelper { $baseUrl = base_path(); //$baseUrl=substr($baseUrl, 0, (strpos($baseUrl, "/")-1)); if (user_access(ObjectHelper :: $EDIT_FEDORA_METADATA)) { - $allow=TRUE; - if (module_exists('fedora_fesl')) { - $allow= fedora_fesl_check_roles($pid,'write'); + $allow = TRUE; + if (module_exists('fedora_fesl')) { + $allow = fedora_fesl_check_roles($pid, 'write'); } if ($allow) { - $output .= '
    ' . t('Edit Meta Data') . ''; + $output .= '
    ' . t('Edit Meta Data') . ''; } } return $output; @@ -411,7 +411,7 @@ class ObjectHelper { module_load_include('inc', 'fedora_repository', 'ObjectHelper'); module_load_include('inc', 'fedora_repository', 'api/fedora_item'); module_load_include('inc', 'fedora_repository', 'ContentModel'); - + $path = drupal_get_path('module', 'fedora_repository'); $dataStreamBody = ''; $fedoraItem = new Fedora_Item($object_pid); @@ -428,47 +428,47 @@ class ObjectHelper { $hasOBJStream = NULL; $hasTNStream = FALSE; $dataStreamBody = "
    \n"; - + $cmDatastreams = array(); if (variable_get('fedora_object_restrict_datastreams', FALSE) == TRUE && ($cm = ContentModel::loadFromObject($object_pid)) !== FALSE) { - $cmDatastreams = $cm->listDatastreams(); + $cmDatastreams = $cm->listDatastreams(); } $dataStreamBody .= $this->get_parent_objects_asHTML($object_pid); $dataStreamBody .= ''; foreach ($object as $datastream) { foreach ($datastream as $datastreamValue) { - - if (variable_get('fedora_object_restrict_datastreams', FALSE) == FALSE || ((isset($user) && in_array('administrator',$user->roles)) || in_array($datastreamValue->ID,$cmDatastreams))) { - if ($datastreamValue->ID == 'OBJ') { - $hasOBJStream = '1'; - $mainStreamLabel = $datastreamValue->label; - $mainStreamLabel = str_replace("_", " ", $mainStreamLabel); - } - if ($datastreamValue->ID == 'TN') { - $hasTNStream = TRUE; - } - //create the links to each datastream - $dataStreamBody .= $this->create_link_for_ds($object_pid, $datastreamValue); //"\n"; - } + + if (variable_get('fedora_object_restrict_datastreams', FALSE) == FALSE || ((isset($user) && in_array('administrator', $user->roles)) || in_array($datastreamValue->ID, $cmDatastreams))) { + if ($datastreamValue->ID == 'OBJ') { + $hasOBJStream = '1'; + $mainStreamLabel = $datastreamValue->label; + $mainStreamLabel = str_replace("_", " ", $mainStreamLabel); + } + if ($datastreamValue->ID == 'TN') { + $hasTNStream = TRUE; + } + //create the links to each datastream + $dataStreamBody .= $this->create_link_for_ds($object_pid, $datastreamValue); //"\n"; + } } } $dataStreamBody .= "

    ' . t("!text", array('!text' => $availableDataStreamsText)) . '

    $key :$value
    $key :$value
    \n"; //if they have access let them add a datastream if (user_access(ObjectHelper :: $ADD_FEDORA_STREAMS)) { - $allow=TRUE; - if (module_exists('fedora_fesl')) { - $allow= fedora_fesl_check_roles($object_pid,'write'); - } - if ($allow) { - $dataStreamBody .= drupal_get_form('add_stream_form', $object_pid); - } + $allow = TRUE; + if (module_exists('fedora_fesl')) { + $allow = fedora_fesl_check_roles($object_pid, 'write'); + } + if ($allow) { + $dataStreamBody .= drupal_get_form('add_stream_form', $object_pid); + } } $fieldset = array( - '#title' => t("!text", array('!text' => $availableDataStreamsText)), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#value' => $dataStreamBody + '#title' => t("!text", array('!text' => $availableDataStreamsText)), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#value' => $dataStreamBody ); $dataStreamBody = '
    ' . theme('fieldset', $fieldset) . '
    '; } @@ -493,15 +493,15 @@ class ObjectHelper { $content .= $dataStreamBody; if (user_access(ObjectHelper :: $PURGE_FEDORA_OBJECTSANDSTREAMS)) { - $allow=TRUE; - if (module_exists('fedora_fesl')) { - $allow= fedora_fesl_check_roles($object_pid,'write'); - } - if ($allow) { - //$purgeObject = '' . t('Purge Object') . '' . t('Purge Object') . ''; - $purgeObject = drupal_get_form('fedora_repository_purge_object_form', $object_pid, check_plain(substr(request_uri(), strlen(base_path())))); - } + $allow = TRUE; + if (module_exists('fedora_fesl')) { + $allow = fedora_fesl_check_roles($object_pid, 'write'); + } + if ($allow) { + //$purgeObject = '' . t('Purge Object') . '' . t('Purge Object') . ''; + $purgeObject = drupal_get_form('fedora_repository_purge_object_form', $object_pid, check_plain(substr(request_uri(), strlen(base_path())))); + } } else { $purgeObject = ' '; } @@ -540,9 +540,9 @@ class ObjectHelper { try { $client = $soapHelper->getSoapClient(variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl')); $params = array( - 'pid' => "$pid", - 'dsID' => "$dsid", - 'asOfDateTime' => "" + 'pid' => "$pid", + 'dsID' => "$dsid", + 'asOfDateTime' => "" ); if (!isset($client)) { @@ -602,20 +602,21 @@ class ObjectHelper { /* * determines whether we can see the object or not + * checks PID namespace permissions, and user permissions */ function fedora_repository_access($op, $pid) { global $user; $returnValue = FALSE; - $isRestricted = variable_get('fedora_namespace_restriction_enforced',TRUE); - if(!$isRestricted){ - return TRUE; + $isRestricted = variable_get('fedora_namespace_restriction_enforced', TRUE); + if (!$isRestricted) { + $returnValue = TRUE; } if ($pid == NULL) { $pid = variable_get('fedora_repository_pid', 'islandora:top'); } - $nameSpaceAllowed = explode(" ", variable_get('fedora_pids_allowed', 'default: demo: changeme: Islandora: ilives: ')); + $nameSpaceAllowed = explode(" ", variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: ')); $pos = NULL; foreach ($nameSpaceAllowed as $nameSpace) { $pos = stripos($pid, $nameSpace); @@ -729,19 +730,18 @@ class ObjectHelper { $collectionPolicyExists = $objectHelper->getMimeType($pid, CollectionPolicy::getDefaultDSID()); if (user_access(ObjectHelper :: $INGEST_FEDORA_OBJECTS) && $collectionPolicyExists) { if (!empty($collectionPolicyExists)) { - $allow=TRUE; - if (module_exists('fedora_fesl')) { - $allow= fedora_fesl_check_roles($pid,'write'); - } - if ($allow) { - // $ingestObject = ' $collectionName, '!collection_pid' => $collection_pid)) . '" href="' . base_path() . - 'fedora/ingestObject/' . $collection_pid . '/' . $collectionName . '">' . t('Add a New Object') . '' . t(' Add to this Collection'); - } - } - } - else { + $allow = TRUE; + if (module_exists('fedora_fesl')) { + $allow = fedora_fesl_check_roles($pid, 'write'); + } + if ($allow) { + // $ingestObject = ' $collectionName, '!collection_pid' => $collection_pid)) . '" href="' . base_path() . + 'fedora/ingestObject/' . $collection_pid . '/' . $collectionName . '">' . t('Add a New Object') . '' . t(' Add to this Collection'); + } + } + } else { $ingestObject = ' '; } @@ -751,20 +751,20 @@ class ObjectHelper { $objectListOut = ''; if (isset($objectList)) { $object_list_fieldset = array( - '#title' => t('Items in this collection'), - '#collapsible' => TRUE, - '#collapsed' => FALSE, - '#value' => (isset($objectList) ? $objectList : ''), //collection list + '#title' => t('Items in this collection'), + '#collapsible' => TRUE, + '#collapsed' => FALSE, + '#value' => (isset($objectList) ? $objectList : ''), //collection list ); $objectListOut = theme('fieldset', $object_list_fieldset); } } else { //$collectionName=''; $collection_fieldset = array( - '#title' => "", - '#collapsible' => TRUE, - '#collapsed' => FALSE, - '#value' => $datastreams, + '#title' => "", + '#collapsible' => TRUE, + '#collapsed' => FALSE, + '#value' => $datastreams, ); $objectListOut = ''; //no collection objects to show so don't show field set } @@ -805,10 +805,10 @@ class ObjectHelper { $metaDataText = t('Description'); $body = $this->getQDC($pid); $fieldset = array( - '#title' => t("!metaDataText", array('!metaDataText' => $metaDataText)), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#value' => $body + '#title' => t("!metaDataText", array('!metaDataText' => $metaDataText)), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#value' => $body ); $output .= theme('fieldset', $fieldset); } @@ -949,10 +949,10 @@ class ObjectHelper { // Get pid, title and description for children of object $pid $query_string = 'select $o $title from <#ri> ' . // $query_string = 'select $o $title $desc from <#ri> '. - 'where $s $o ' . - 'and $o $title ' . + 'where $s $o ' . + 'and $o $title ' . // 'and $o $desc '. - 'and ( '; + 'and ( '; foreach ($pids as $pid) { $query_string .= '$s or '; @@ -1017,11 +1017,11 @@ class ObjectHelper { $url = variable_get('fedora_repository_url', 'http://localhost:8080/fedora/risearch'); $url .= "?type=tuples&flush=TRUE&format=CSV&limit=1&offset=0&lang=itql&stream=on&query=" . $query_string; - $result = preg_split('/[\r\n]+/',do_curl($url)); - array_shift($result); // throw away first line - $matches =str_getcsv(join("\n",$result)); + $result = preg_split('/[\r\n]+/', do_curl($url)); + array_shift($result); // throw away first line + $matches = str_getcsv(join("\n", $result)); if ($matches !== NULL) { - $parent = preg_replace('/^info:fedora\//','',$matches[0]); + $parent = preg_replace('/^info:fedora\//', '', $matches[0]); $breadcrumbs[] = l($matches[1], 'fedora/repository/' . $pid); if ($parent == variable_get('fedora_repository_pid', 'islandora:top')) { $breadcrumbs[] = l(t('Home'), ''); // l(t('Digital repository'), 'fedora/repository'); @@ -1033,9 +1033,9 @@ class ObjectHelper { function warnIfMisconfigured($app) { $messMap = array( - 'Kakadu' => 'Full installation instructions for Kakadu can be found + 'Kakadu' => 'Full installation instructions for Kakadu can be found Here', - 'ImageMagick' => 'Check the path settings in the configuration of your imageapi module.
    + 'ImageMagick' => 'Check the path settings in the configuration of your imageapi module.
    Further details can be found Here', ); From 026d16222aac4ea34b8d8e98a7208e3a18d543b1 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Sat, 29 Jan 2011 15:25:32 -0400 Subject: [PATCH 07/10] Allows namespace lockdown from settings.php --- ObjectHelper.inc | 6 +- api/fedora_item.inc | 272 ++++++++------- fedora_repository.module | 346 ++++++++++--------- formClass.inc | 701 +++++++++++++++++---------------------- 4 files changed, 628 insertions(+), 697 deletions(-) diff --git a/ObjectHelper.inc b/ObjectHelper.inc index 55e285ca..381e22b7 100644 --- a/ObjectHelper.inc +++ b/ObjectHelper.inc @@ -611,7 +611,7 @@ class ObjectHelper { $returnValue = FALSE; $isRestricted = variable_get('fedora_namespace_restriction_enforced', TRUE); if (!$isRestricted) { - $returnValue = TRUE; + $namespaceAccess = TRUE; } if ($pid == NULL) { $pid = variable_get('fedora_repository_pid', 'islandora:top'); @@ -621,10 +621,10 @@ class ObjectHelper { foreach ($nameSpaceAllowed as $nameSpace) { $pos = stripos($pid, $nameSpace); if ($pos === 0) { - $returnValue = TRUE; + $namespaceAccess = TRUE; } } - if ($returnValue) { + if ($namespaceAccess) { $user_access = user_access($op); if ($user_access == NULL) { return FALSE; diff --git a/api/fedora_item.inc b/api/fedora_item.inc index dfe5a4b6..ec2d4bf5 100644 --- a/api/fedora_item.inc +++ b/api/fedora_item.inc @@ -2,19 +2,18 @@ // $Id$ -define ('RELS_EXT_URI', 'info:fedora/fedora-system:def/relations-external#'); -define ("FEDORA_MODEL_URI", 'info:fedora/fedora-system:def/model#'); +define('RELS_EXT_URI', 'info:fedora/fedora-system:def/relations-external#'); +define("FEDORA_MODEL_URI", 'info:fedora/fedora-system:def/model#'); class Fedora_Item { + public $pid = NULL; // The $pid of the fedora object represented by an instance of this class. public $objectProfile = NULL; private $datastreams_list = NULL; // A SimpleXML object to store a list of this item's datastreams public $datastreams = NULL; - private static $connection_helper = NULL; private static $instantiated_pids = array(); - - + /** * Create an object to represent an item in the Fedora repository. * Throws a SOAPException if the PID is not in the repository. @@ -29,32 +28,34 @@ class Fedora_Item { $this->pid = $pid; if (isset(Fedora_Item::$instantiated_pids[$pid])) { - $this->objectProfile =& Fedora_Item::$instantiated_pids[$pid]->objectProfile; - $this->datastreams =& Fedora_Item::$instantiated_pids[$pid]->datastreams; - $this->datastreams_list =& Fedora_Item::$instantiated_pids[$pid]->datastreams_list; - } else { + $this->objectProfile = & Fedora_Item::$instantiated_pids[$pid]->objectProfile; + $this->datastreams = & Fedora_Item::$instantiated_pids[$pid]->datastreams; + $this->datastreams_list = & Fedora_Item::$instantiated_pids[$pid]->datastreams_list; + } + else { if (empty(self::$connection_helper)) { - self::$connection_helper = new ConnectionHelper(); + self::$connection_helper = new ConnectionHelper(); } - + $raw_objprofile = $this->soap_call('getObjectProfile', array('pid' => $this->pid, 'asOfDateTime' => "")); if (!empty($raw_objprofile)) { - $this->objectProfile = $raw_objprofile->objectProfile; - $this->datastreams = $this->get_datastreams_list_as_array(); - } else { - $this->objectProfile = ''; - $this->datastreams = array(); + $this->objectProfile = $raw_objprofile->objectProfile; + $this->datastreams = $this->get_datastreams_list_as_array(); } - Fedora_Item::$instantiated_pids[$pid]=&$this; + else { + $this->objectProfile = ''; + $this->datastreams = array(); + } + Fedora_Item::$instantiated_pids[$pid] = &$this; } } - + function exists() { return (!empty($this->objectProfile)); } - function add_datastream_from_file($datastream_file, $datastream_id, $datastream_label = NULL, $datastream_mimetype = '', $controlGroup = 'M',$logMessage = null) { + function add_datastream_from_file($datastream_file, $datastream_id, $datastream_label = NULL, $datastream_mimetype = '', $controlGroup = 'M', $logMessage = null) { module_load_include('inc', 'fedora_repository', 'MimeClass'); if (empty($datastream_mimetype)) { // Get mime type from the file extension. @@ -67,7 +68,7 @@ class Fedora_Item { $datastream_url = drupal_urlencode($datastream_file); $url = file_create_url($datastream_url); - $return_value = $this->add_datastream_from_url($url, $datastream_id, $datastream_label, $datastream_mimetype, $controlGroup,$logMessage); + $return_value = $this->add_datastream_from_url($url, $datastream_id, $datastream_label, $datastream_mimetype, $controlGroup, $logMessage); if ($original_path != $datastream_file) { file_delete($datastream_file); @@ -75,12 +76,12 @@ class Fedora_Item { return $return_value; } - function add_datastream_from_url($datastream_url, $datastream_id, $datastream_label = NULL, $datastream_mimetype = '', $controlGroup = 'M',$logMessage = null) { - if (empty( $datastream_label)) { + function add_datastream_from_url($datastream_url, $datastream_id, $datastream_label = NULL, $datastream_mimetype = '', $controlGroup = 'M', $logMessage = null) { + if (empty($datastream_label)) { $datastream_label = $datastream_id; } - $params = array( + $params = array( 'pid' => $this->pid, 'dsID' => $datastream_id, 'altIDs' => NULL, @@ -93,19 +94,19 @@ class Fedora_Item { 'dsState' => 'A', 'checksumType' => 'DISABLED', 'checksum' => 'none', - 'logMessage' => ($logMessage != null)?$logMessage: 'Ingested object '. $datastream_id + 'logMessage' => ($logMessage != null) ? $logMessage : 'Ingested object ' . $datastream_id ); - return $this->soap_call( 'addDataStream', $params )->datastreamID; + return $this->soap_call('addDataStream', $params)->datastreamID; } - function add_datastream_from_string($str, $datastream_id, $datastream_label = NULL, $datastream_mimetype = 'text/xml', $controlGroup = 'M',$logMessage = null) { + function add_datastream_from_string($str, $datastream_id, $datastream_label = NULL, $datastream_mimetype = 'text/xml', $controlGroup = 'M', $logMessage = null) { $dir = sys_get_temp_dir(); $tmpfilename = tempnam($dir, 'fedoratmp'); $tmpfile = fopen($tmpfilename, 'w'); fwrite($tmpfile, $str, strlen($str)); fclose($tmpfile); - $returnvalue = $this->add_datastream_from_file($tmpfilename, $datastream_id, $datastream_label, $datastream_mimetype, $controlGroup,$logMessage); + $returnvalue = $this->add_datastream_from_file($tmpfilename, $datastream_id, $datastream_label, $datastream_mimetype, $controlGroup, $logMessage); unlink($tmpfilename); return $returnvalue; } @@ -118,10 +119,10 @@ class Fedora_Item { */ function add_relationship($relationship, $object, $namespaceURI = RELS_EXT_URI) { $ds_list = $this->get_datastreams_list_as_array(); - + if (empty($ds_list['RELS-EXT'])) { $this->add_datastream_from_string(' - + ', 'RELS-EXT', 'Fedora object-to-object relationship metadata', 'text/xml', 'X'); } @@ -133,32 +134,32 @@ class Fedora_Item { } $relsextxml = new DomDocument(); - + $relsextxml->loadXML($relsext); $description = $relsextxml->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'Description'); if ($description->length == 0) { $description = $relsextxml->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'description'); } - $description=$description->item(0); - + $description = $description->item(0); + // Create the new relationship node. $newrel = $relsextxml->createElementNS($namespaceURI, $relationship); - + $newrel->setAttribute('rdf:resource', $object); - + $description->appendChild($newrel); - $this->modify_datastream_by_value( $relsextxml->saveXML(), 'RELS-EXT', "Fedora Object-to-Object Relationship Metadata", 'text/xml'); + $this->modify_datastream_by_value($relsextxml->saveXML(), 'RELS-EXT', "Fedora Object-to-Object Relationship Metadata", 'text/xml'); //print ($description->dump_node()); /* - $params = array( 'pid' => $this->pid, - 'relationship' => $relationship, - 'object' => $object, - 'isLiteral' => FALSE, - 'datatype' => '', - ); + $params = array( 'pid' => $this->pid, + 'relationship' => $relationship, + 'object' => $object, + 'isLiteral' => FALSE, + 'datatype' => '', + ); - return $this->soap_call( 'addRelationship', $params ); - */ + return $this->soap_call( 'addRelationship', $params ); + */ } /** @@ -205,7 +206,7 @@ class Fedora_Item { } } if ($modified) { - $this->modify_datastream_by_value( $relsextxml->saveXML(), 'RELS-EXT', "Fedora Object-to-Object Relationship Metadata", 'text/xml'); + $this->modify_datastream_by_value($relsextxml->saveXML(), 'RELS-EXT', "Fedora Object-to-Object Relationship Metadata", 'text/xml'); } return $modified; //print ($description->dump_node()); @@ -231,7 +232,7 @@ class Fedora_Item { */ static function find_objects_by_pattern($pattern = '*', $field = 'pid', $max_results = 100, $resultFields = array()) { module_load_include('inc', 'fedora_repository', 'api/fedora_utils'); - + $pattern = drupal_urlencode($pattern); $done = FALSE; $cursor = 0; @@ -248,8 +249,8 @@ class Fedora_Item { $url .= "/objects?pid=true&title=truesessionToken=$session_token&resultFormat=xml&maxResults=$max_results"; } - if (count($resultFields) > 0) { - $url .= '&'.join('=true&',$resultFields).'=true'; + if (count($resultFields) > 0) { + $url .= '&' . join('=true&', $resultFields) . '=true'; } $resultxml = do_curl($url); @@ -266,15 +267,15 @@ class Fedora_Item { $done = TRUE; } foreach ($resultelements->resultList->objectFields as $obj) { - - $ret = (string)$obj->title; - if (count($resultFields) > 0) { - $ret = array('title' => $ret); - foreach ($resultFields as $field) { - $ret[$field]=(string)$obj->$field; - } - } - $results[(string)$obj->pid] = $ret; + + $ret = (string) $obj->title; + if (count($resultFields) > 0) { + $ret = array('title' => $ret); + foreach ($resultFields as $field) { + $ret[$field] = (string) $obj->$field; + } + } + $results[(string) $obj->pid] = $ret; $cursor++; if ($cursor >= $max_results) { $done = TRUE; @@ -311,24 +312,24 @@ class Fedora_Item { 'asOfDateTime' => $as_of_date_time, ); $object = self::soap_call('getDatastream', $params); - + return $object->datastream; } function get_datastream_history($dsid) { $params = array( - 'pid' => $this->pid, - 'dsID' => $dsid + 'pid' => $this->pid, + 'dsID' => $dsid ); $object = self::soap_call('getDatastreamHistory', $params); $ret = FALSE; if (!empty($object)) { $ret = $object->datastream; - } - - return $ret; + } + + return $ret; } - + function get_dissemination($service_definition_pid, $method_name, $parameters = array(), $as_of_date_time = null) { $params = array( 'pid' => $this->pid, @@ -365,36 +366,36 @@ class Fedora_Item { //} return $this->datastreams_list; } + /** * * DatastreamControlGroup controlGroup - String restricted to the values of "X", "M", "R", or "E" (InlineXML,Managed Content,Redirect, or External Referenced). - * String ID - The datastream ID (64 characters max). - * String versionID - The ID of the most recent datastream version - * String[] altIDs - Alternative IDs for the datastream, if any. - * String label - The Label of the datastream. - * boolean versionable - Whether the datastream is versionable. - * String MIMEType - The mime-type for the datastream, if set. - * String formatURI - The format uri for the datastream, if set. - * String createDate - The date the first version of the datastream was created. - * long size - The size of the datastream in Fedora. Only valid for inline XML metadata and managed content datastreams. - * String state - The state of the datastream. Will be "A" (active), "I" (inactive) or "D" (deleted). - * String location - If the datastream is an external reference or redirect, the url to the contents. TODO: Managed? - * String checksumType - The algorithm used to compute the checksum. One of "DEFAULT", "DISABLED", "MD5", "SHA-1", "SHA-256", "SHA-385", "SHA-512". - * String checksum - The value of the checksum represented as a hexadecimal string. + * String ID - The datastream ID (64 characters max). + * String versionID - The ID of the most recent datastream version + * String[] altIDs - Alternative IDs for the datastream, if any. + * String label - The Label of the datastream. + * boolean versionable - Whether the datastream is versionable. + * String MIMEType - The mime-type for the datastream, if set. + * String formatURI - The format uri for the datastream, if set. + * String createDate - The date the first version of the datastream was created. + * long size - The size of the datastream in Fedora. Only valid for inline XML metadata and managed content datastreams. + * String state - The state of the datastream. Will be "A" (active), "I" (inactive) or "D" (deleted). + * String location - If the datastream is an external reference or redirect, the url to the contents. TODO: Managed? + * String checksumType - The algorithm used to compute the checksum. One of "DEFAULT", "DISABLED", "MD5", "SHA-1", "SHA-256", "SHA-385", "SHA-512". + * String checksum - The value of the checksum represented as a hexadecimal string. * * @param string $dsid * @return datastream object * get the mimetype size etc. in one shot. instead of iterating throught the datastream list for what we need */ - function get_datastream_info($dsid,$as_of_date_time = ""){ - $params = array( + function get_datastream_info($dsid, $as_of_date_time = "") { + $params = array( 'pid' => $this->pid, - 'dsID' => $dsid, + 'dsID' => $dsid, 'asOfDateTime' => $as_of_date_time ); return $this->soap_call('getDatastream', $params); - } /** @@ -427,14 +428,14 @@ class Fedora_Item { } $ds_list[$ds->ID]['label'] = $ds->label; $ds_list[$ds->ID]['MIMEType'] = $ds->MIMEType; - $ds_list[$ds->ID]['URL'] = $this->url() . '/'. $ds->ID . '/'. drupal_urlencode($ds->label); + $ds_list[$ds->ID]['URL'] = $this->url() . '/' . $ds->ID . '/' . drupal_urlencode($ds->label); } } else { $ds = $this->datastreams_list->datastreamDef; $ds_list[$ds->ID]['label'] = $ds->label; $ds_list[$ds->ID]['MIMEType'] = $ds->MIMEType; - $ds_list[$ds->ID]['URL'] = $this->url().'/'.$ds->ID.'/'.drupal_urlencode($ds->label); + $ds_list[$ds->ID]['URL'] = $this->url() . '/' . $ds->ID . '/' . drupal_urlencode($ds->label); } } @@ -454,7 +455,7 @@ class Fedora_Item { foreach ($datastream_list as $datastream) { foreach ($datastream as $datastreamValue) { if ($datastreamValue->ID == $dsid) { - return $datastreamValue->MIMEType; + return $datastreamValue->MIMEType; } } } @@ -472,8 +473,7 @@ class Fedora_Item { $relationships = array(); try { $relsext = $this->get_datastream_dissemination('RELS-EXT'); - } - catch (exception $e) { + } catch (exception $e) { drupal_set_message("Error retrieving RELS-EXT of object $pid", 'error'); return $relationships; } @@ -510,12 +510,12 @@ class Fedora_Item { // Verify the array format and that it isn't empty. if (!empty($relationships)) { $relsextxml = '' - . ''; + . ''; foreach ($relationships as $rel) { - if (empty($rel['subject']) || empty($rel['predicate']) || empty($rel['object']) || $rel['subject'] != 'info:fedora/'. $this->pid) { + if (empty($rel['subject']) || empty($rel['predicate']) || empty($rel['object']) || $rel['subject'] != 'info:fedora/' . $this->pid) { // drupal_set_message should use parameterized variables, not interpolated. - drupal_set_message("Error with relationship format: ". $rel['subject'] . " - ". $rel['predicate'] . ' - '. $rel['object'], "error"); + drupal_set_message("Error with relationship format: " . $rel['subject'] . " - " . $rel['predicate'] . ' - ' . $rel['object'], "error"); return FALSE; } } @@ -539,25 +539,25 @@ class Fedora_Item { return $this->soap_call('purgeObject', $params); } - function purge_datastream( $dsID, $start_date = NULL, $end_date = NULL, $log_message = 'Purged datastream using Islandora API', $force = FALSE) { + function purge_datastream($dsID, $start_date = NULL, $end_date = NULL, $log_message = 'Purged datastream using Islandora API', $force = FALSE) { $params = array( 'pid' => $this->pid, 'dsID' => $dsID, 'startDT' => $start_date, 'endDT' => $end_date, 'logMessage' => $log_message, - 'force' => $force, + 'force' => $force, ); return $this->soap_call('purgeDatastream', $params); } function url() { global $base_url; - return $base_url . '/fedora/repository/'. $this->pid . (!empty($this->objectProfile) ? '/-/'. drupal_urlencode($this->objectProfile->objLabel) : ''); + return $base_url . '/fedora/repository/' . $this->pid . (!empty($this->objectProfile) ? '/-/' . drupal_urlencode($this->objectProfile->objLabel) : ''); } - static function get_next_PID_in_namespace( $pid_namespace = '') { - + static function get_next_PID_in_namespace($pid_namespace = '') { + if (empty($pid_namespace)) { // Just get the first one in the config settings. $allowed_namespaces = explode(" ", variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: ')); @@ -569,7 +569,7 @@ class Fedora_Item { $pid_namespace = 'default'; } } - + $params = array( 'numPIDs' => '', 'pidNamespace' => $pid_namespace, @@ -587,7 +587,7 @@ class Fedora_Item { static function ingest_from_FOXML_file($foxml_file) { $foxml = new DOMDocument(); - $foxml->load( $foxml_file ); + $foxml->load($foxml_file); return self::ingest_from_FOXML($foxml); } @@ -601,9 +601,9 @@ class Fedora_Item { } try { - self::ingest_from_FOXML_file( $path . '/'. $file ); - } - catch (exception $e) { + self::ingest_from_FOXML_file($path . '/' . $file); + } catch (exception $e) { + } } // Close @@ -611,20 +611,20 @@ class Fedora_Item { } function modify_object($label = '', $state = null, $ownerId = null, $logMessage = 'Modified by Islandora API', $quiet=TRUE) { - - $params = array( + + $params = array( 'pid' => $this->pid, 'ownerId' => $ownerId, 'state' => $state, 'label' => $label, 'logMessage' => $logMessage ); - - return self::soap_call('modifyObject', $params, $quiet); + + return self::soap_call('modifyObject', $params, $quiet); } - - function modify_datastream_by_reference($external_url, $dsid, $label, $mime_type, $force = FALSE, $logMessage = 'Modified by Islandora API',$quiet=FALSE) { - $params = array( + + function modify_datastream_by_reference($external_url, $dsid, $label, $mime_type, $force = FALSE, $logMessage = 'Modified by Islandora API', $quiet=FALSE) { + $params = array( 'pid' => $this->pid, 'dsID' => $dsid, 'altIDs' => NULL, @@ -637,11 +637,11 @@ class Fedora_Item { 'logMessage' => $logMessage, 'force' => $force ); - return self::soap_call('modifyDatastreamByReference', $params, $quiet); + return self::soap_call('modifyDatastreamByReference', $params, $quiet); } - - function modify_datastream_by_value($content, $dsid, $label, $mime_type, $force = FALSE, $logMessage = 'Modified by Islandora API',$quiet=FALSE) { - $params = array( + + function modify_datastream_by_value($content, $dsid, $label, $mime_type, $force = FALSE, $logMessage = 'Modified by Islandora API', $quiet=FALSE) { + $params = array( 'pid' => $this->pid, 'dsID' => $dsid, 'altIDs' => NULL, @@ -654,10 +654,10 @@ class Fedora_Item { 'logMessage' => $logMessage, 'force' => $force ); - return self::soap_call('modifyDatastreamByValue', $params,$quiet); + return self::soap_call('modifyDatastreamByValue', $params, $quiet); } - static function soap_call( $function_name, $params_array, $quiet = FALSE ) { + static function soap_call($function_name, $params_array, $quiet = FALSE) { if (!self::$connection_helper) { module_load_include('inc', 'fedora_repository', 'ConnectionHelper'); self::$connection_helper = new ConnectionHelper(); @@ -685,25 +685,25 @@ class Fedora_Item { watchdog(t("FEDORA_REPOSITORY"), t("Error trying to get SOAP client connection.")); return NULL; } - } - catch (exception $e) { - if (!$quiet) { - - if (preg_match('/org\.fcrepo\.server\.security\.xacml\.pep\.AuthzDeniedException/',$e->getMessage())) { - drupal_set_message(t('Error: Insufficient permissions to call SOAP function !fn.', array('!fn' => $function_name) ), 'error'); - } else { - drupal_set_message(t("Error trying to call SOAP function $function_name. Check watchdog logs for more information."), 'error'); - } - - watchdog(t("FEDORA_REPOSITORY"), t("Error Trying to call SOAP function !fn: !e", array('!fn' => $function_name, '!e' => $e)), NULL, WATCHDOG_ERROR); - } - return NULL; + } catch (exception $e) { + if (!$quiet) { + + if (preg_match('/org\.fcrepo\.server\.security\.xacml\.pep\.AuthzDeniedException/', $e->getMessage())) { + drupal_set_message(t('Error: Insufficient permissions to call SOAP function !fn.', array('!fn' => $function_name)), 'error'); + } + else { + drupal_set_message(t("Error trying to call SOAP function $function_name. Check watchdog logs for more information."), 'error'); + } + + watchdog(t("FEDORA_REPOSITORY"), t("Error Trying to call SOAP function !fn: !e", array('!fn' => $function_name, '!e' => $e)), NULL, WATCHDOG_ERROR); + } + return NULL; } break; default: try { - $soap_client = self::$connection_helper->getSoapClient( variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl')); + $soap_client = self::$connection_helper->getSoapClient(variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl')); if (!empty($soap_client)) { $result = $soap_client->__soapCall($function_name, array('parameters' => $params_array)); } @@ -711,19 +711,17 @@ class Fedora_Item { watchdog(t("FEDORA_REPOSITORY"), t("Error trying to get SOAP client connection.")); return NULL; } - } - catch (exception $e) { - - if (!$quiet) { - watchdog(t("FEDORA_REPOSITORY"), t("Error trying to call SOAP function !fn: !e", array('!fn' => $function_name, '!e' => $e)), NULL, WATCHDOG_ERROR); - } - return NULL; + } catch (exception $e) { + + if (!$quiet) { + watchdog(t("FEDORA_REPOSITORY"), t("Error trying to call SOAP function !fn: !e", array('!fn' => $function_name, '!e' => $e)), NULL, WATCHDOG_ERROR); + } + return NULL; } } return $result; } - /** * Creates the minimal FOXML for a new Fedora object, which is then passed to * ingest_from_FOXML to be added to the repository. @@ -767,7 +765,7 @@ class Fedora_Item { $owner_property = $foxml->createElement("foxml:property"); $owner_property->setAttribute("NAME", "info:fedora/fedora-system:def/model#ownerId"); - $owner_property->setAttribute("VALUE", $owner ); + $owner_property->setAttribute("VALUE", $owner); $object_properties->appendChild($state_property); $object_properties->appendChild($label_property); @@ -779,7 +777,7 @@ class Fedora_Item { } static function ingest_new_item($pid = '', $state = 'A', $label = '', $owner = '') { - return self::ingest_from_FOXML(self::create_object_FOXML( $pid, $state, $label, $owner)); + return self::ingest_from_FOXML(self::create_object_FOXML($pid, $state, $label, $owner)); } static function fedora_item_exists($pid) { @@ -787,9 +785,9 @@ class Fedora_Item { return $item->exists(); } - /******************************************************** + /* * ****************************************************** * Relationship Functions - ********************************************************/ + * ****************************************************** */ /** * Returns an associative array of relationships that this item has diff --git a/fedora_repository.module b/fedora_repository.module index d4134410..6dec17e6 100644 --- a/fedora_repository.module +++ b/fedora_repository.module @@ -58,9 +58,9 @@ function fedora_repository_purge_object($pid = NULL, $name = NULL) { return ''; } $output = t('Are you sure you wish to purge object %name %pid!
    This cannot be undone
    ', - array( - '%name' => $name, - '%pid' => $pid) + array( + '%name' => $name, + '%pid' => $pid) ); $output .= drupal_get_form('fedora_repository_purge_object_form', $pid); @@ -101,7 +101,8 @@ function fedora_repository_ingest_object($collection_pid=NULL, $collection_label if (!validPid($collection_pid)) { if (validPid(urldecode($collection_pid))) { $collection_pid = urldecode($collection_pid); - } else { + } + else { drupal_set_message(t("This collection PID $collection_pid is not valid"), 'error'); return ' '; } @@ -202,10 +203,11 @@ function fedora_repository_ingest_form_validate($form, &$form_state) { if (!empty($file)) { if (!in_array($dformat, $allowedMimeTypes)) { form_set_error('ingest-file-location', t('The uploaded file\'s mimetype (' . $dformat . ') is not associated with this Content Model. The allowed types are ' . - implode(' ', $allowedMimeTypes))); + implode(' ', $allowedMimeTypes))); file_delete($file); return; - } elseif (!$cm->execIngestRules($file, $dformat)) { + } + elseif (!$cm->execIngestRules($file, $dformat)) { drupal_set_message(t('Error following Content Model Rules'), 'error'); foreach (ContentModel::$errors as $err) { drupal_set_message($err, 'error'); @@ -237,13 +239,13 @@ function fedora_repository_purge_object_form(&$form_state, $pid, $referrer) { global $base_url; // $form['#redirect'] = "fedora/repository/$collectionPid/"; $form['pid'] = array( - '#type' => 'hidden', - '#value' => "$pid" + '#type' => 'hidden', + '#value' => "$pid" ); if (!strstr(drupal_get_destination(), urlencode('fedora/repository'))) { $form['referrer'] = array( - '#type' => 'hidden', - '#value' => $referrer, + '#type' => 'hidden', + '#value' => $referrer, ); } if (!isset($form_state['storage']['confirm'])) { @@ -251,10 +253,10 @@ function fedora_repository_purge_object_form(&$form_state, $pid, $referrer) { $form['submit'] = array( - '#type' => 'image_button', - '#src' => drupal_get_path('module', 'fedora_repository') . '/images/purge_big.png', - '#value' => t('Purge'), - '#suffix' => 'Purge this object', + '#type' => 'image_button', + '#src' => drupal_get_path('module', 'fedora_repository') . '/images/purge_big.png', + '#value' => t('Purge'), + '#suffix' => 'Purge this object', ); if ($collectionPid == NULL) { $collectionPid = $_SESSION['fedora_collection']; @@ -262,7 +264,8 @@ function fedora_repository_purge_object_form(&$form_state, $pid, $referrer) { //$form['#redirect'] = $referrer; return $form; - } else { + } + else { // ALSO do $form definition here. Your final submit handler (after user clicks Yes, I Confirm) will only see $form_state info defined here. Form you create here passed as param1 to confirm_form return confirm_form($form, 'Confirm Purge Object', $referrer, 'Are you sure you want to delete this object? This action cannot be undone.', 'Delete', 'Cancel'); //Had better luck leaving off last param 'name' @@ -366,9 +369,9 @@ function add_stream_form_validate($form, &$form_state) { return FALSE; } $validators = array( - // 'file_validate_is_image' => array(), - // 'file_validate_image_resolution' => array('85x85'), - // 'file_validate_size' => array(30 * 1024), + // 'file_validate_is_image' => array(), + // 'file_validate_image_resolution' => array('85x85'), + // 'file_validate_size' => array(30 * 1024), ); $fileObject = file_save_upload('add-stream-file-location', $validators); @@ -393,8 +396,8 @@ function fedora_repository_purge_stream($pid = NULL, $dsId = NULL, $name = NULL) } $output = t('Are you sure you wish to purge this datastream %name
    ', - array( - '%name' => $name) + array( + '%name' => $name) ); $output .= drupal_get_form('fedora_repository_purge_stream_form', $pid, $dsId); return $output; @@ -407,12 +410,13 @@ function fedora_repository_purge_object_form_submit($form, &$form_state) { if (!isset($form_state['storage']['confirm'])) { $form_state['storage']['confirm'] = TRUE; // this will cause the form to be rebuilt, entering the confirm part of the form $form_state['rebuild'] = TRUE; // along with this - } else { + } + else { // this is where you do your processing after they have pressed the confirm button $params = array( - "pid" => $pid, - "logMessage" => "Purged", - "force" => "" + "pid" => $pid, + "logMessage" => "Purged", + "force" => "" ); try { $soapHelper = new ConnectionHelper(); @@ -422,7 +426,8 @@ function fedora_repository_purge_object_form_submit($form, &$form_state) { } catch (exception $e) { if (preg_match('/org\.fcrepo\.server\.security\.xacml\.pep\.AuthzDeniedException/', $e->getMessage())) { drupal_set_message(t('Error: Insufficient permissions to purge object.'), 'error'); - } else { + } + else { drupal_set_message(t($e->getMessage()), 'error'); } return; @@ -432,7 +437,8 @@ function fedora_repository_purge_object_form_submit($form, &$form_state) { } if (!empty($form_state['values']['referrer'])) { $form_state['redirect'] = $form_state['values']['referrer']; - } else { + } + else { $form_state['redirect'] = "fedora/repository/$collectionPid/"; } } @@ -440,16 +446,16 @@ function fedora_repository_purge_object_form_submit($form, &$form_state) { function fedora_repository_purge_stream_form(&$form_state, $pid, $dsId) { $form['pid'] = array( - '#type' => 'hidden', - '#value' => "$pid" + '#type' => 'hidden', + '#value' => "$pid" ); $form['dsid'] = array( - '#type' => 'hidden', - '#value' => "$dsId" + '#type' => 'hidden', + '#value' => "$dsId" ); $form['submit'] = array( - '#type' => 'submit', - '#value' => t('Purge') + '#type' => 'submit', + '#value' => t('Purge') ); return $form; @@ -538,19 +544,19 @@ function fedora_repository_replace_stream_form_submit($form, &$form_state) { $controlGroup = "M"; $function = 'modifyDatastreamByReference'; $params = array( - 'pid' => $pid, - 'dsID' => $dsid, - 'altIDs' => "", - 'dsLabel' => $dsLabel, - 'MIMEType' => $dformat, - 'formatURI' => "URL", - 'dsLocation' => $streamUrl, - 'controlGroup' => "$controlGroup", - 'dsState' => "A", - 'checksumType' => "DISABLED", - 'checksum' => "none", - 'logMessage' => "datastream replaced", - 'force' => FALSE, + 'pid' => $pid, + 'dsID' => $dsid, + 'altIDs' => "", + 'dsLabel' => $dsLabel, + 'MIMEType' => $dformat, + 'formatURI' => "URL", + 'dsLocation' => $streamUrl, + 'controlGroup' => "$controlGroup", + 'dsState' => "A", + 'checksumType' => "DISABLED", + 'checksum' => "none", + 'logMessage' => "datastream replaced", + 'force' => FALSE, ); if ($dformat == 'text/xml') { @@ -685,13 +691,13 @@ function fedora_repository_edit_qdc_form_submit($form, &$form_state) { function fedora_repository_perm() { module_load_include('inc', 'fedora_repository', 'ObjectHelper'); return array( - OBJECTHELPER::$OBJECT_HELPER_VIEW_FEDORA, - OBJECTHELPER::$EDIT_FEDORA_METADATA, - OBJECTHELPER::$PURGE_FEDORA_OBJECTSANDSTREAMS, - OBJECTHELPER::$ADD_FEDORA_STREAMS, - OBJECTHELPER::$INGEST_FEDORA_OBJECTS, - OBJECTHELPER::$EDIT_TAGS_DATASTREAM, - OBJECTHELPER::$VIEW_DETAILED_CONTENT_LIST, + OBJECTHELPER::$OBJECT_HELPER_VIEW_FEDORA, + OBJECTHELPER::$EDIT_FEDORA_METADATA, + OBJECTHELPER::$PURGE_FEDORA_OBJECTSANDSTREAMS, + OBJECTHELPER::$ADD_FEDORA_STREAMS, + OBJECTHELPER::$INGEST_FEDORA_OBJECTS, + OBJECTHELPER::$EDIT_TAGS_DATASTREAM, + OBJECTHELPER::$VIEW_DETAILED_CONTENT_LIST, ); } @@ -764,12 +770,12 @@ function fedora_repository_get_items($pid = NULL, $dsId = NULL, $collection = NU } if (!fedora_repository_access(OBJECTHELPER::$OBJECT_HELPER_VIEW_FEDORA, $pid, $user)) { //drupal_set_message(t("You do not have access to Fedora objects within the attempted namespace or access to Fedora denied"), 'error'); - + if (user_access('access administration pages')) { drupal_set_message(t("PIDs may be added to allowed namespaces, or all namespace restrictions removed !here", array('!here' => l('here', 'admin/settings/fedora_repository'))), 'warning'); } - drupal_access_denied(); - exit; + drupal_access_denied(); + exit; return ' '; } @@ -936,7 +942,8 @@ function fedora_repository_search($op = 'search', $keys = NULL) { $searchQuery = NULL; if (isset($type) && strcmp($type, ':')) { $searchQuery = $type . ':' . $keys; - } else { + } + else { $searchQuery = $keys; } //$searchQuery.=" AND (PID:vre OR PID:vre:ref OR PID:demo OR PID:changeme)"; @@ -950,10 +957,10 @@ function fedora_repository_search($op = 'search', $keys = NULL) { $resultData = do_curl($searchUrl); $results[] = array( - array( - 'data' => $resultData, - 'colspan' => 2 - ) + array( + 'data' => $resultData, + 'colspan' => 2 + ) ); return $results; } @@ -977,10 +984,10 @@ function fedora_repository_search_page($resultData) { $proc = new XsltProcessor(); } catch (Exception $e) { $out[] = array( - array( - 'data' => $e->getMessage(), - 'colspan' => 2 - ) + array( + 'data' => $e->getMessage(), + 'colspan' => 2 + ) ); return $out; } @@ -994,7 +1001,8 @@ function fedora_repository_search_page($resultData) { $xsl = new DomDocument(); if ($isRestricted) { $xsl->load($path . '/xsl/results.xsl'); - } else { + } + else { $xsl->load($path . '/xsl/unfilteredresults.xsl'); } @@ -1003,29 +1011,30 @@ function fedora_repository_search_page($resultData) { if (!$didLoadOk) { $results[] = array( - array( - 'data' => 'Error parsing results', - 'colspan' => 2 - ) + array( + 'data' => 'Error parsing results', + 'colspan' => 2 + ) ); - } else { + } + else { $xsl = $proc->importStylesheet($xsl); $newdom = $proc->transformToDoc($input); $results[] = array( - array( - 'data' => $newdom->saveHTML(), - 'colspan' => 2 - ) + array( + 'data' => $newdom->saveHTML(), + 'colspan' => 2 + ) ); } $header = array( - array( - 'data' => t('Collection results'), - NULL, - ), - (NULL) + array( + 'data' => t('Collection results'), + NULL, + ), + (NULL) ); $output .= theme('table', $header, $results); @@ -1053,17 +1062,17 @@ function fedora_repository_form_alter(&$form, &$form_state, $form_id) { $form['basic']['inline']['keys']['#default_value'] = $default_value; // Keyword boxes: $form['advanced'] = array( - '#type' => 'fieldset', - '#title' => t('Advanced search'), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#attributes' => array( - 'class' => 'search-advanced' - ), + '#type' => 'fieldset', + '#title' => t('Advanced search'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#attributes' => array( + 'class' => 'search-advanced' + ), ); $form['advanced']['keywords'] = array( - '#prefix' => '
    ', - '#suffix' => '
    ', + '#prefix' => '
    ', + '#suffix' => '
    ', ); $xmlDoc = new DomDocument(); $xmlDoc->load($path . '/searchTerms.xml'); @@ -1072,15 +1081,15 @@ function fedora_repository_form_alter(&$form, &$form_state, $form_id) { $types = $searchClass->get_search_terms_array(); $form['advanced']['type'] = array( - '#type' => 'select', - '#title' => t('Choose a field to search'), - '#prefix' => '
    ', '#suffix' => '
    ', '#options' => $types, - '#default_value' => $type, + '#type' => 'select', + '#title' => t('Choose a field to search'), + '#prefix' => '
    ', '#suffix' => '
    ', '#options' => $types, + '#default_value' => $type, ); $form['advanced']['submit'] = array( - '#type' => 'submit', - '#value' => t('Advanced search'), - '#prefix' => '
    ', '#suffix' => '
    ', + '#type' => 'submit', + '#value' => t('Advanced search'), + '#prefix' => '
    ', '#suffix' => '
    ', ); $form['#validate'][] = 'fedora_repository_search_validate'; } @@ -1114,7 +1123,7 @@ function fedora_repository_block($op = 'list', $delta = 0, $edit = array()) { // This is used to provide a list of possible blocks to the administrator, // end users will not see these descriptions. $blocks[0] = array( - 'info' => t('Repository advanced search block'), + 'info' => t('Repository advanced search block'), ); return $blocks; case 'configure': @@ -1128,11 +1137,11 @@ function fedora_repository_block($op = 'list', $delta = 0, $edit = array()) { // All we need to provide is a text field, Drupal will take care of // the other block configuration options and the save button. $form['fedora_repository_advanced_block_repeat'] = array( - '#type' => 'textfield', - '#title' => t('Number of times to repeat search fields'), - '#size' => 5, - '#description' => t('The number of times you would like the search blocks to be repeated'), - '#default_value' => variable_get('fedora_repository_advanced_block_repeat', t('3')), + '#type' => 'textfield', + '#title' => t('Number of times to repeat search fields'), + '#size' => 5, + '#description' => t('The number of times you would like the search blocks to be repeated'), + '#default_value' => variable_get('fedora_repository_advanced_block_repeat', t('3')), ); break; } @@ -1166,16 +1175,16 @@ function fedora_repository_block($op = 'list', $delta = 0, $edit = array()) { function fedora_repository_theme() { return array( - 'fedora_repository_mnpl_advanced_search_form' => array( - 'arguments' => array( - 'form' => NULL, - ), + 'fedora_repository_mnpl_advanced_search_form' => array( + 'arguments' => array( + 'form' => NULL, ), - 'fedora_repository_time' => array( - 'arguments' => array( - 'element' => NULL - ), + ), + 'fedora_repository_time' => array( + 'arguments' => array( + 'element' => NULL ), + ), ); } @@ -1237,18 +1246,18 @@ function fedora_repository_demo_objects_form() { $existing_demos = array(); $form['install_demos'] = array( - '#title' => t('Islandora Demo Collections'), - '#type' => 'fieldset', - '#description' => t('Install demo image and document collections and content models.'), + '#title' => t('Islandora Demo Collections'), + '#type' => 'fieldset', + '#description' => t('Install demo image and document collections and content models.'), ); $demo_objects = array(); // Check if the top-level islandora collection exists. If not, display a button to ingest. $form['install_demos']['demo_collections'] = array( - '#type' => 'checkboxes', - '#title' => t('Collections to ingest'), - '#options' => array(), - '#description' => t('Choose which demo collections you would like ingested into the repository.'), + '#type' => 'checkboxes', + '#title' => t('Collections to ingest'), + '#options' => array(), + '#description' => t('Choose which demo collections you would like ingested into the repository.'), ); foreach (array( @@ -1267,7 +1276,8 @@ function fedora_repository_demo_objects_form() { if (empty($demo_objects[$available_demo]->objectProfile)) { //The demo objects collection does not exist in the repository, display a button to ingest them. $form['install_demos']['demo_collections']['#options'][$available_demo] = $available_demo_desc; - } else { + } + else { array_push($existing_demos, $demo_objects[$available_demo]); } } @@ -1279,34 +1289,36 @@ function fedora_repository_demo_objects_form() { $datastreams_list = $smiley_stuff->get_datastreams_list_as_array(); if (empty($datastreams_list['COLLECTION_VIEW'])) { $form['install_demos']['demo_collections']['#options']['demo:SmileyStuff'] = 'Add Islandora Collection View to Fedora Smiley Stuff Collection'; - } else { + } + else { $demo_objects['demo:SmileyStuff'] = $smiley_stuff; } - } else { + } + else { $form['install_demos']['smileynote'] = array( - '#value' => '

    If you install the ' . l('fedora demo objects', 'https://wiki.duraspace.org/display/FCR30/Demonstration+Objects') . ' Islandora can display them as a collection.

    ' + '#value' => '

    If you install the ' . l('fedora demo objects', 'https://wiki.duraspace.org/display/FCR30/Demonstration+Objects') . ' Islandora can display them as a collection.

    ' ); } $form['install_demos']['ingest'] = array( - '#type' => 'submit', - '#name' => 'install_demos', - '#value' => 'Install Selected Demos', - '#disabled' => (empty($form['install_demos']['demo_collections']['#options'])) ? TRUE : FALSE, + '#type' => 'submit', + '#name' => 'install_demos', + '#value' => 'Install Selected Demos', + '#disabled' => (empty($form['install_demos']['demo_collections']['#options'])) ? TRUE : FALSE, ); $form['existing_demos'] = array( - '#prefix' => '

    Demo collections already installed in this repository:

      ', - '#suffix' => '
    ', + '#prefix' => '

    Demo collections already installed in this repository:

      ', + '#suffix' => '
    ', ); if (!empty($existing_demos)) { foreach ($existing_demos as $pid => $demo_object) { $form['existing_demos'][$demo_object->pid] = array( - '#prefix' => '
  • ', - '#value' => l($demo_object->pid, $demo_object->url()), - '#suffix' => '
  • ', + '#prefix' => '
  • ', + '#value' => l($demo_object->pid, $demo_object->url()), + '#suffix' => '
  • ', ); } } @@ -1411,7 +1423,7 @@ function fedora_repository_demo_objects_form_submit($form, &$form_state) { if (!empty($form_state['values']['demo_collections']['islandora:largeimages'])) { $error = ''; foreach (array('islandora_jp2Sdep-slideCModel.xml', 'islandora_mods2htmlSdef.xml', 'islandora_mods2htmlSdep.xml', - 'islandora_slideCModel.xml', 'islandora_viewerSdep-slideCModel.xml', 'ilives_jp2Sdef.xml', 'ilives_viewerSdef.xml') as $foxml_file) { + 'islandora_slideCModel.xml', 'islandora_viewerSdep-slideCModel.xml', 'ilives_jp2Sdef.xml', 'ilives_viewerSdef.xml') as $foxml_file) { try { $item = Fedora_Item::ingest_from_FOXML_file(drupal_get_path('module', 'fedora_repository') . '/content_models/' . $foxml_file); } catch (exception $e) { @@ -1439,8 +1451,8 @@ function fedora_repository_demo_objects_form_submit($form, &$form_state) { function fedora_repository_elements() { $type['fedora_repository_time'] = array( - "#input" => TRUE, - "#process" => array("fedora_repository_expand_time"), + "#input" => TRUE, + "#process" => array("fedora_repository_expand_time"), ); return $type; @@ -1451,8 +1463,8 @@ function fedora_repository_expand_time($element) { // default value is present it will override value if (empty($element['#default_value'])) { $element['#value'] = array( - 'hour' => intval(format_date(time(), 'custom', 'h')), - 'minute' => intval(format_date(time(), 'custom', 'i')), + 'hour' => intval(format_date(time(), 'custom', 'h')), + 'minute' => intval(format_date(time(), 'custom', 'i')), ); } @@ -1475,9 +1487,9 @@ function fedora_repository_expand_time($element) { } $element[$type] = array( - '#type' => 'select', - '#default_value' => $element['#value'][$type], - '#options' => $options, + '#type' => 'select', + '#default_value' => $element['#value'][$type], + '#options' => $options, ); } @@ -1531,7 +1543,8 @@ function fedora_repository_basket_form($form_state, $pids) { $form['pid'] = array(); $form['title'] = array(); $form['desc'] = array(); - } else { + } + else { return; } @@ -1545,28 +1558,28 @@ function fedora_repository_basket_form($form_state, $pids) { } $form['remove'] = array( - '#type' => 'checkboxes', - '#options' => $cbs, + '#type' => 'checkboxes', + '#options' => $cbs, ); $form['remove_submit'] = array( - '#type' => 'submit', - '#value' => t('Remove selected'), + '#type' => 'submit', + '#value' => t('Remove selected'), ); $form['remove_all'] = array( - '#type' => 'submit', - '#value' => t('Empty basket'), + '#type' => 'submit', + '#value' => t('Empty basket'), ); $form['submit'] = array( - '#type' => 'submit', - '#value' => t('Export selected'), + '#type' => 'submit', + '#value' => t('Export selected'), ); $form['submit_all'] = array( - '#type' => 'submit', - '#value' => t('Export all'), + '#type' => 'submit', + '#value' => t('Export all'), ); return $form; @@ -1574,22 +1587,23 @@ function fedora_repository_basket_form($form_state, $pids) { function theme_fedora_repository_basket_form($form) { $header = array( - theme('table_select_header_cell'), - t('PID'), - t('Title'), - t('Description'), + theme('table_select_header_cell'), + t('PID'), + t('Title'), + t('Description'), ); if (isset($form['pid']) && is_array($form['pid'])) { foreach (element_children($form['pid']) as $key) { $rows[] = array( - drupal_render($form['remove'][$key]), - drupal_render($form['pid'][$key]), - drupal_render($form['title'][$key]), - drupal_render($form['desc'][$key]), + drupal_render($form['remove'][$key]), + drupal_render($form['pid'][$key]), + drupal_render($form['title'][$key]), + drupal_render($form['desc'][$key]), ); } - } else { + } + else { $rows[] = array(array('data' => t('Your basket is empty.'), 'colspan' => '4')); } @@ -1627,7 +1641,8 @@ function fedora_repository_basket_form_submit($form, &$form_state) { if ($form_state['values']['op'] == $form_state['values']['submit_all']) { $msg = t("All objects exported to staging area"); $pids = _fedora_repository_get_basket_pids(); - } elseif ($form_state['values']['op'] == $form_state['values']['submit']) { + } + elseif ($form_state['values']['op'] == $form_state['values']['submit']) { $msg = t("Selected objects exported to staging area"); $pids = array_filter($form_state['values']['remove']); } @@ -1662,7 +1677,8 @@ function fedora_repository_basket_form_submit($form, &$form_state) { drupal_set_message($msg, $success ? 'info' : 'error'); //_fedora_repository_empty_basket(); - } else { + } + else { drupal_set_message(t("No objects selected or basket empty"), 'error'); } @@ -1712,7 +1728,8 @@ function fedora_repository_add_to_basket($pid, $warn = TRUE, $searchResultsFlag if (!isset($_SESSION['basket'])) { $_SESSION['basket'] = array(); $_SESSION['basket']['unprocessed'] = array($pid => $pid); - } else { + } + else { $_SESSION['basket']['unprocessed'][$pid] = $pid; } @@ -1746,9 +1763,9 @@ function theme_add_to_basket_link($pid, $type = 'object') { */ if (!_is_added_to_basket($pid)) { return l( - theme('image', drupal_get_path('module', 'Fedora_Repository') . '/images/' . $save, t("Add to basket"), t("Add this @object to my basket", array('@object' => $object))), - "fedora/repository/addToBasket/" . $path, - array('html' => TRUE) + theme('image', drupal_get_path('module', 'Fedora_Repository') . '/images/' . $save, t("Add to basket"), t("Add this @object to my basket", array('@object' => $object))), + "fedora/repository/addToBasket/" . $path, + array('html' => TRUE) ); } @@ -1764,7 +1781,8 @@ function fedora_repository_display_schema($file) { $path = drupal_get_path('module', 'fedora_repository'); if (strtolower(substr($file, -3)) == 'xsd' && file_exists($path . '/' . $file)) { drupal_goto($path . '/' . $file); - } else { + } + else { drupal_goto(); } return; diff --git a/formClass.inc b/formClass.inc index f287ec4a..c655e588 100644 --- a/formClass.inc +++ b/formClass.inc @@ -4,9 +4,6 @@ /* * Created on Jan 22, 2008 - * - * To change the template for this generated file go to - * Window - Preferences - PHPeclipse - PHP - Code Templates */ class formClass { @@ -24,201 +21,175 @@ class formClass { $items = array(); $items['admin/settings/fedora_repository'] = array( - 'title' => t('Fedora collection list'), - 'description' => t('Enter the Fedora Collection information here'), - 'page callback' => 'drupal_get_form', - 'page arguments' => array('fedora_repository_admin'), - //'access' => user_access('access administration pages'), - 'access arguments' => array('administer site configuration'), - 'type' => MENU_NORMAL_ITEM, - // 'type' => MENU_DEFAULT_LOCAL_TASK, + 'title' => t('Fedora collection list'), + 'description' => t('Enter the Fedora Collection information here'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('fedora_repository_admin'), + 'access arguments' => array('administer site configuration'), + 'type' => MENU_NORMAL_ITEM, ); $items['admin/settings/fedora_repository/collection'] = array( - 'title' => t('Collection list'), - 'description' => t('Enter the Fedora collection information here.'), - 'access arguments' => array('administer site configuration'), - 'type' => MENU_DEFAULT_LOCAL_TASK, - 'weight' => 0, + 'title' => t('Collection list'), + 'description' => t('Enter the Fedora collection information here.'), + 'access arguments' => array('administer site configuration'), + 'type' => MENU_DEFAULT_LOCAL_TASK, + 'weight' => 0, ); $items['admin/settings/fedora_repository/demoobjects'] = array( - 'title' => t('Install demos'), - 'description' => t('Install example content models and collections to get started using Islandora and Fedora.'), - 'page callback' => 'fedora_repository_install_demos_page', - 'access arguments' => array('add fedora datastreams'), - 'type' => MENU_LOCAL_TASK, + 'title' => t('Install demos'), + 'description' => t('Install example content models and collections to get started using Islandora and Fedora.'), + 'page callback' => 'fedora_repository_install_demos_page', + 'access arguments' => array('add fedora datastreams'), + 'type' => MENU_LOCAL_TASK, ); $items['islandoracm.xsd'] = array( - 'title' => t('Islandoracm XML Schema Definition'), - 'page callback' => 'fedora_repository_display_schema', - 'page arguments' => array('islandoracm.xsd'), - 'type' => MENU_CALLBACK, - // 'page arguments'=>array(1), - 'access arguments' => array('view fedora collection'), - // 'access' => TRUE - ); - + 'title' => t('Islandoracm XML Schema Definition'), + 'page callback' => 'fedora_repository_display_schema', + 'page arguments' => array('islandoracm.xsd'), + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection'), + ); + $items['collection_policy.xsd'] = array( - 'title' => t('Islandoracm XML Schema Definition'), - 'page callback' => 'fedora_repository_display_schema', - 'page arguments' => array('collection_policy.xsd'), - 'type' => MENU_CALLBACK, - // 'page arguments'=>array(1), - 'access arguments' => array('view fedora collection'), - // 'access' => TRUE - ); - + 'title' => t('Islandoracm XML Schema Definition'), + 'page callback' => 'fedora_repository_display_schema', + 'page arguments' => array('collection_policy.xsd'), + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection'), + ); + $items['fedora'] = array( - // 'title' => t('Digital repository'), - 'page callback' => 'repository_page', - 'type' => MENU_CALLBACK, - // 'page arguments'=>array(1), - 'access arguments' => array('view fedora collection'), - // 'access' => TRUE - ); - $repository_title = variable_get('fedora_repository_title','Digital repository'); - if (trim($repository_title)!= '') { - $respository_title=t($repository_title); - } else { - $repository_title= NULL; + 'page callback' => 'repository_page', + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection'), + ); + $repository_title = variable_get('fedora_repository_title', 'Digital repository'); + if (trim($repository_title) != '') { + $respository_title = t($repository_title); + } + else { + $repository_title = NULL; } $items['fedora/repository'] = array( - 'title' => $repository_title, - 'page callback' => 'repository_page', - 'type' => MENU_NORMAL_ITEM, - // 'page arguments'=>array(1), - 'access arguments' => array('view fedora collection'), - // 'access' => TRUE + 'title' => $repository_title, + 'page callback' => 'repository_page', + 'type' => MENU_NORMAL_ITEM, + 'access arguments' => array('view fedora collection'), + // 'access' => TRUE ); $items['fedora/repository/service'] = array( - 'page callback' => 'repository_service', - 'type' => MENU_CALLBACK, - 'access arguments' => array('view fedora collection'), + 'page callback' => 'repository_service', + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection'), ); $items['fedora/repository/object_download'] = array( - 'title' => t('Download object'), - 'page callback' => 'fedora_object_as_attachment', - 'type' => MENU_CALLBACK, - 'access arguments' => array('view fedora collection') + 'title' => t('Download object'), + 'page callback' => 'fedora_object_as_attachment', + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection') ); $items['fedora/repository/editmetadata'] = array( - 'title' => t('Edit metadata'), - 'page callback' => 'fedora_repository_edit_qdc_page', - // 'page arguments' => array(1), - //'type' => MENU_LOCAL_TASK, - 'type' => MENU_CALLBACK, - 'access arguments' => array('edit fedora meta data') + 'title' => t('Edit metadata'), + 'page callback' => 'fedora_repository_edit_qdc_page', + // 'page arguments' => array(1), + //'type' => MENU_LOCAL_TASK, + 'type' => MENU_CALLBACK, + 'access arguments' => array('edit fedora meta data') ); $items['fedora/repository/purgeStream'] = array( - 'title' => t('Purge data stream'), - 'page callback' => 'fedora_repository_purge_stream', - 'type' => MENU_CALLBACK, - 'access arguments' => array('purge objects and datastreams') + 'title' => t('Purge data stream'), + 'page callback' => 'fedora_repository_purge_stream', + 'type' => MENU_CALLBACK, + 'access arguments' => array('purge objects and datastreams') ); $items['fedora/repository/replaceStream'] = array( - 'title' => t('Replace Stream'), - 'page callback' => 'fedora_repository_replace_stream', + 'title' => t('Replace Stream'), + 'page callback' => 'fedora_repository_replace_stream', // 'callback arguments' => array(3, 4), - 'type' => MENU_CALLBACK, + 'type' => MENU_CALLBACK, // 'access callback' => 'fedora_repository_user_access', - 'access arguments' => array('add fedora datastreams'), + 'access arguments' => array('add fedora datastreams'), ); $items['fedora/repository/purgeObject'] = array( - 'title' => t('Purge object'), - 'page callback' => 'fedora_repository_purge_object', - // 'type' => MENU_LOCAL_TASK, - 'type' => MENU_CALLBACK, - 'access arguments' => array('purge objects and datastreams') + 'title' => t('Purge object'), + 'page callback' => 'fedora_repository_purge_object', + // 'type' => MENU_LOCAL_TASK, + 'type' => MENU_CALLBACK, + 'access arguments' => array('purge objects and datastreams') ); $items['fedora/repository/addStream'] = array( - 'title' => t('Add stream'), - 'page callback' => 'add_stream', - // 'type' => MENU_LOCAL_TASK, - 'type' => MENU_CALLBACK, - 'access arguments' => array('add fedora datastreams') + 'title' => t('Add stream'), + 'page callback' => 'add_stream', + // 'type' => MENU_LOCAL_TASK, + 'type' => MENU_CALLBACK, + 'access arguments' => array('add fedora datastreams') ); $items['fedora/repository/collection'] = array( - 'title' => t('Collection view'), - 'page callback' => 'fedora_collection_view', - 'type' => MENU_CALLBACK, - 'access argruments' => array('view fedora collection') + 'title' => t('Collection view'), + 'page callback' => 'fedora_collection_view', + 'type' => MENU_CALLBACK, + 'access argruments' => array('view fedora collection') ); //new for mnpl****************************************** $items['fedora/repository/mnpl_advanced_search'] = array( - 'title' => t('Repository advanced search'), - 'page callback' => 'fedora_repository_mnpl_advanced_search', - 'type' => MENU_CALLBACK, - 'access arguments' => array('view fedora collection') + 'title' => t('Repository advanced search'), + 'page callback' => 'fedora_repository_mnpl_advanced_search', + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection') ); $items['fedora/ingestObject'] = array( - 'title' => t('Ingest object'), - 'page callback' => 'fedora_repository_ingest_object', - 'type' => MENU_CALLBACK, - 'access arguments' => array('add fedora datastreams') + 'title' => t('Ingest object'), + 'page callback' => 'fedora_repository_ingest_object', + 'type' => MENU_CALLBACK, + 'access arguments' => array('add fedora datastreams') ); $items['fedora/repository/list_terms'] = array( - 'title' => t('List terms'), - 'page callback' => 'fedora_repository_list_terms', - 'type' => MENU_CALLBACK, - 'access arguments' => array('view fedora collection') + 'title' => t('List terms'), + 'page callback' => 'fedora_repository_list_terms', + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection') ); $items['fedora/tagging/add_tag/js'] = array( - 'page callback' => 'fedora_tagging_add_tag_js', - 'access arguments' => array('edit tags datastream'), - 'type' => MENU_CALLBACK, + 'page callback' => 'fedora_tagging_add_tag_js', + 'access arguments' => array('edit tags datastream'), + 'type' => MENU_CALLBACK, ); /* Export functionality */ $items['fedora/basket'] = array( - 'title' => t('Fedora Basket'), - 'description' => t('View and download objects added to your basket'), - 'page callback' => 'fedora_repository_basket', - 'access arguments' => array('view fedora collection'), - 'type' => MENU_CALLBACK, + 'title' => t('Fedora Basket'), + 'description' => t('View and download objects added to your basket'), + 'page callback' => 'fedora_repository_basket', + 'access arguments' => array('view fedora collection'), + 'type' => MENU_CALLBACK, ); $items['fedora/repository/addToBasket'] = array( - 'page callback' => 'fedora_repository_add_to_basket', - 'type' => MENU_CALLBACK, - 'access arguments' => array('view fedora collection'), + 'page callback' => 'fedora_repository_add_to_basket', + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection'), ); $items['fedora/repository/removeFromBasket'] = array( - 'page callback' => 'fedora_repository_remove_from_basket', - 'type' => MENU_CALLBACK, - 'access arguments' => array('view fedora collection'), + 'page callback' => 'fedora_repository_remove_from_basket', + 'type' => MENU_CALLBACK, + 'access arguments' => array('view fedora collection'), ); $items['fedora/repository/add_search_results_to_basket'] = array( - 'page callback' => 'fedora_repository_add_search_results_to_basket', - 'type' => MENU_CALLBACK, - 'access arguments' => array('view fedora collection'), - ); - - /* - $items['fedora/item'] = array ( - 'title' => t('Repository Item'), + 'page callback' => 'fedora_repository_add_search_results_to_basket', + 'type' => MENU_CALLBACK, 'access arguments' => array('view fedora collection'), - 'page callback' => 'fedora_repository_item', - 'type' => MENU_NORMAL_ITEM, - ); - - $item['feodra/item/view'] = array ( - 'title' => t('View Repository Item'), - 'access arguments' => array('view fedora collection'), - 'type' => MENU_DEFAULT_LOCAL_TASK, - 'weight' => 0, - ); - */ + ); - // $items = array_merge($items,$irItems); return $items; } @@ -228,193 +199,182 @@ class formClass { return; } module_load_include('inc', 'fedora_repository', 'api/fedora_utils'); - module_load_include('inc', 'fedora_repository', 'ObjectHelper'); + module_load_include('inc', 'fedora_repository', 'ObjectHelper'); $form = array(); $form['fedora_repository_name'] = array( - '#type' => 'textfield', - '#title' => t('Default collection name'), - '#default_value' => variable_get('fedora_repository_name', 'Islandora demos collection'), - '#description' => t('The Name of the collection to grab the list of items from'), - '#required' => TRUE, - '#weight' => -2 + '#type' => 'textfield', + '#title' => t('Default collection name'), + '#default_value' => variable_get('fedora_repository_name', 'Islandora demos collection'), + '#description' => t('The Name of the collection to grab the list of items from'), + '#required' => TRUE, + '#weight' => -2 ); $form['fedora_repository_pid'] = array( - '#type' => 'textfield', - '#title' => t('Default collection PID'), - '#default_value' => variable_get('fedora_repository_pid', 'islandora:top'), - '#description' => t('The PID of the collection object to grab the list of items from'), - '#required' => TRUE, - '#weight' => -2 + '#type' => 'textfield', + '#title' => t('Default collection PID'), + '#default_value' => variable_get('fedora_repository_pid', 'islandora:top'), + '#description' => t('The PID of the collection object to grab the list of items from'), + '#required' => TRUE, + '#weight' => -2 ); $form['fedora_collection_model_pid'] = array( - '#type' => 'textfield', - '#title' => t('Default Collection Model PID'), - '#default_value' => variable_get('fedora_collection_model_pid', 'islandora:collectionCModel'), - '#description' => t('The PID of the default Collection Model Object'), - '#required' => TRUE, - '#weight' => -2 + '#type' => 'textfield', + '#title' => t('Default Collection Model PID'), + '#default_value' => variable_get('fedora_collection_model_pid', 'islandora:collectionCModel'), + '#description' => t('The PID of the default Collection Model Object'), + '#required' => TRUE, + '#weight' => -2 ); $form['fedora_content_model_collection_pid'] = array( - '#type' => 'textfield', - '#title' => t('Default Content Model Collection PID'), - '#default_value' => variable_get('fedora_content_model_collection_pid', 'islandora:ContentModelCollection'), - '#description' => t('The PID of the Content Model Collection Object'), - '#required' => TRUE, - '#weight' => -2 + '#type' => 'textfield', + '#title' => t('Default Content Model Collection PID'), + '#default_value' => variable_get('fedora_content_model_collection_pid', 'islandora:ContentModelCollection'), + '#description' => t('The PID of the Content Model Collection Object'), + '#required' => TRUE, + '#weight' => -2 ); $form['fedora_repository_url'] = array( - '#type' => 'textfield', - '#title' => t('Fedora RISearch URL'), - '#default_value' => variable_get('fedora_repository_url', - 'http://localhost:8080/fedora/risearch'), - '#description' => t('The url of the Fedora server'), '#required' => TRUE, - '#weight' => 0 + '#type' => 'textfield', + '#title' => t('Fedora RISearch URL'), + '#default_value' => variable_get('fedora_repository_url', + 'http://localhost:8080/fedora/risearch'), + '#description' => t('The url of the Fedora server'), '#required' => TRUE, + '#weight' => 0 ); $form['fedora_fgsearch_url'] = array( - '#type' => 'textfield', - '#title' => t('Fedora Lucene search URL'), - '#default_value' => variable_get('fedora_fgsearch_url', 'http://localhost:8080/fedoragsearch/rest'), - '#description' => t('The url of the Lucene Fedora server'), - '#required' => TRUE, - '#weight' => 0 + '#type' => 'textfield', + '#title' => t('Fedora Lucene search URL'), + '#default_value' => variable_get('fedora_fgsearch_url', 'http://localhost:8080/fedoragsearch/rest'), + '#description' => t('The url of the Lucene Fedora server'), + '#required' => TRUE, + '#weight' => 0 ); $form['fedora_index_name'] = array( - '#type' => 'textfield', - '#title' => t('Fedora Lucene index name'), - '#default_value' => variable_get('fedora_index_name', 'BasicIndex'), - '#description' => t('The name of the Lucene index to search'), - '#required' => TRUE, - '#weight' => 0 + '#type' => 'textfield', + '#title' => t('Fedora Lucene index name'), + '#default_value' => variable_get('fedora_index_name', 'BasicIndex'), + '#description' => t('The name of the Lucene index to search'), + '#required' => TRUE, + '#weight' => 0 ); $form['fedora_soap_url'] = array( - '#type' => 'textfield', - '#title' => t('Fedora SOAP Url'), - '#default_value' => variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl'), - '#description' => t('The URL to use for SOAP connections'), - '#required' => TRUE, - '#weight' => 0, - // '#suffix' => '

    '. (fedora_available() ? ''. t('Successfully connected to Fedora server at ') : ' '. t('Unable to connect to Fedora server at ')) . variable_get('fedora_soap_url', '') . '

    ', - '#suffix' => '

    ' . (fedora_available() ? '' . t('Successfully connected to Fedora server at !fedora_soap_url', array('!fedora_soap_url' => variable_get('fedora_soap_url', ''))) : ' ' . t('Unable to connect to Fedora server at !fedora_soap_url

    ', array('!fedora_soap_url' => variable_get('fedora_soap_url', '')))), + '#type' => 'textfield', + '#title' => t('Fedora SOAP Url'), + '#default_value' => variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl'), + '#description' => t('The URL to use for SOAP connections'), + '#required' => TRUE, + '#weight' => 0, + '#suffix' => '

    ' . (fedora_available() ? '' . t('Successfully connected to Fedora server at !fedora_soap_url', array('!fedora_soap_url' => variable_get('fedora_soap_url', ''))) : ' ' . t('Unable to connect to Fedora server at !fedora_soap_url

    ', array('!fedora_soap_url' => variable_get('fedora_soap_url', '')))), ); $form['fedora_base_url'] = array( - '#type' => 'textfield', - '#title' => t('Fedora base URL'), - '#default_value' => variable_get('fedora_base_url', 'http://localhost:8080/fedora'), - '#description' => t('The URL to use for REST-type connections'), - '#required' => TRUE, - '#weight' => 0, + '#type' => 'textfield', + '#title' => t('Fedora base URL'), + '#default_value' => variable_get('fedora_base_url', 'http://localhost:8080/fedora'), + '#description' => t('The URL to use for REST-type connections'), + '#required' => TRUE, + '#weight' => 0, ); $form['fedora_soap_manage_url'] = array( - '#type' => 'textfield', - '#title' => t('Fedora SOAP management URL'), - '#default_value' => variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl'), '#description' => t('The URL to use for SOAP API-M connections'), - '#required' => TRUE, - '#weight' => 0 + '#type' => 'textfield', + '#title' => t('Fedora SOAP management URL'), + '#default_value' => variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl'), '#description' => t('The URL to use for SOAP API-M connections'), + '#required' => TRUE, + '#weight' => 0 ); $form['fedora_solr_search_url'] = array( - '#type' => 'textfield', - '#title' => t('Fedora Solr search URL'), - '#default_value' => variable_get('fedora_solr_search_url', 'http://localhost:8080/solr'), '#description' => t('The URL to use for Solr searching'), - '#required' => TRUE, - '#weight' => 0 + '#type' => 'textfield', + '#title' => t('Fedora Solr search URL'), + '#default_value' => variable_get('fedora_solr_search_url', 'http://localhost:8080/solr'), '#description' => t('The URL to use for Solr searching'), + '#required' => TRUE, + '#weight' => 0 ); - - - $form['fedora_namespace'] = array( +// will allow admin user to remove namepsace restrictions if not explicitly disallowed in settings.php + if (variable_get('allow_open_namespace', TRUE)) { + $form['fedora_namespace'] = array( '#type' => 'fieldset', + ); - ); - $form['fedora_namespace']['fedora_namespace_restriction_enforced'] = array( + $form['fedora_namespace']['fedora_namespace_restriction_enforced'] = array( '#weight' => -1, '#type' => 'radios', '#title' => t('Enforce namespace restrictions'), '#options' => array( - TRUE => t('Enabled'), - FALSE => t('Disabled') + TRUE => t('Enabled'), + FALSE => t('Disabled') ), - '#description' => t('Allow administrator to restrict user\'s access to the PID namepaces listed below' ), - '#default_value' => variable_get('fedora_namespace_restriction_enforced',TRUE) - ); + '#description' => t('Allow administrator to restrict user\'s access to the PID namepaces listed below'), + '#default_value' => variable_get('fedora_namespace_restriction_enforced', TRUE) + ); - $form['fedora_namespace']['fedora_pids_allowed'] = array( + $form['fedora_namespace']['fedora_pids_allowed'] = array( '#type' => 'textfield', '#title' => t('PID namespaces allowed in this Drupal install'), '#default_value' => variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: '), '#description' => t('A space separated list PID namespaces that users are permitted to access from this Drupal installation.
    This could be more than a simple namespace ie demo:mydemos.'), - '#weight' => 0 - ); - /* - $form['fedora_admin_user'] = array( - '#type' => 'textfield', - '#title' => t('A user with the Drupal role administrator'), - '#default_value' => variable_get('fedora_admin_user', 'admin'), - '#description' => t('A user with the administrator role. This is the user the Islandora module will use when admin access is needed for a task, such as creating a collection object for a new user.'), - '#required' => TRUE, '#weight' => 0 ); - - $form['fedora_searchterms_location'] = array( - '#type' => 'file', - '#title' => 'SearchTerms.xml file location', + } + else { + $form['fedora_pids_allowed'] = array( + '#type' => 'textfield', + '#title' => t('PID namespaces allowed in this Drupal install'), + '#default_value' => variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: '), + '#description' => t('A space separated list PID namespaces that users are permitted to access from this Drupal installation.
    This could be more than a simple namespace ie demo:mydemos.'), + '#weight' => 0 ); - */ - + } $form['fedora_repository_title'] = array( - '#type' => 'textfield', - '#title' => t('Fedora Repository Title'), - '#default_value'=> variable_get('fedora_repository_title', 'Digital Repository'), - '#description' => t('The title displayed when viewing collections and objects in /fedora/repository. Leave blank to display no title. Note that the menus must be rebuilt after changing this variable.'), + '#type' => 'textfield', + '#title' => t('Fedora Repository Title'), + '#default_value' => variable_get('fedora_repository_title', 'Digital Repository'), + '#description' => t('The title displayed when viewing collections and objects in /fedora/repository. Leave blank to display no title. Note that the menus must be rebuilt after changing this variable.'), ); - $form['fedora_object_display_title'] = array( - '#type' => 'select', - '#title' => t('Display Object Title Behaviour'), - '#default_value'=> variable_get('fedora_object_display_title', ObjectHelper::$DISPLAY_ALWAYS), - '#options' => array(ObjectHelper::$DISPLAY_ALWAYS=>t('Always'),ObjectHelper::$DISPLAY_NEVER=>t('Never'),ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT=>t('Only if no Content Model display output.')), - '#description' => t('Determines when to display the object (or collection) title when viewing an object/collection page.'), + '#type' => 'select', + '#title' => t('Display Object Title Behaviour'), + '#default_value' => variable_get('fedora_object_display_title', ObjectHelper::$DISPLAY_ALWAYS), + '#options' => array(ObjectHelper::$DISPLAY_ALWAYS => t('Always'), ObjectHelper::$DISPLAY_NEVER => t('Never'), ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT => t('Only if no Content Model display output.')), + '#description' => t('Determines when to display the object (or collection) title when viewing an object/collection page.'), ); - - $form['fedora_object_display_description'] = array( '#type' => 'select', '#title' => t('Display Object Description Behaviour'), - '#default_value'=> variable_get('fedora_object_display_description', ObjectHelper::$DISPLAY_ALWAYS), - '#options' => array(ObjectHelper::$DISPLAY_ALWAYS=>t('Always'),ObjectHelper::$DISPLAY_NEVER=>t('Never'),ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT=>t('Only if no Content Model display output.')), + '#default_value' => variable_get('fedora_object_display_description', ObjectHelper::$DISPLAY_ALWAYS), + '#options' => array(ObjectHelper::$DISPLAY_ALWAYS => t('Always'), ObjectHelper::$DISPLAY_NEVER => t('Never'), ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT => t('Only if no Content Model display output.')), '#description' => t('Determines when to display the default object (or collection) description fieldset when viewing an object/collection page.'), ); - + $form['fedora_object_restrict_datastreams'] = array( '#type' => 'checkbox', '#title' => t('Restrict Access to Fedora Object Datastreams'), - '#default_value'=> variable_get('fedora_object_restrict_datastreams', FALSE), + '#default_value' => variable_get('fedora_object_restrict_datastreams', FALSE), '#description' => t('When enabled, restricts access to fedora object datastreams that are not listed in the Islandora Content Model for the object (unless the user is an administrator).'), - ); + ); $form['fedora_collection_display_list'] = array( '#type' => 'select', '#title' => t('Display Collection List Behaviour'), - '#default_value'=> variable_get('fedora_collection_display_list', ObjectHelper::$DISPLAY_ALWAYS), - '#options' => array(ObjectHelper::$DISPLAY_ALWAYS=>t('Always'),ObjectHelper::$DISPLAY_NEVER=>t('Never'),ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT=>t('Only if no Content Model display output.')), + '#default_value' => variable_get('fedora_collection_display_list', ObjectHelper::$DISPLAY_ALWAYS), + '#options' => array(ObjectHelper::$DISPLAY_ALWAYS => t('Always'), ObjectHelper::$DISPLAY_NEVER => t('Never'), ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT => t('Only if no Content Model display output.')), '#description' => t('Determines when to display the list of objects when viewing a collection page.'), ); - //Export functionality $form['module']['export_area'] = array( - '#type' => 'textfield', - '#title' => t('Export area'), - '#default_value' => variable_get('export_area', file_directory_path() . '/fedora_export_area'), - '#description' => t("Path to the export area. It must be accessible by druapl (i.e. apache user)."), - '#required' => TRUE, + '#type' => 'textfield', + '#title' => t('Export area'), + '#default_value' => variable_get('export_area', file_directory_path() . '/fedora_export_area'), + '#description' => t("Path to the export area. It must be accessible by druapl (i.e. apache user)."), + '#required' => TRUE, ); $form['#attributes'] = array('enctype' => "multipart/form-data"); @@ -450,7 +410,7 @@ class formClass { if (!strcmp(substr($key, 0, 4), 'app_')) { $key = substr($key, 4); $previousElement->appendChild($dom->createElement($key, $value)); - } + } else { $previousElement = $dom->createElement($key, $value); $oai->appendChild($previousElement); @@ -471,14 +431,14 @@ class formClass { $pid = $form_values['pid']; $dsId = $form_values['dsid']; $params = array( - "pid" => $pid, - "dsID" => $dsId, - "altIDs" => "", - "dsLabel" => "Qualified Dublin Core", - "MIMEType" => "text/xml", - "formatURI" => "URL", - "dsContent" => $dom->saveXML(), "checksumType" => "DISABLED", "checksum" => "none", - "logMessage" => "datastream_modified", "force" => "TRUE"); + "pid" => $pid, + "dsID" => $dsId, + "altIDs" => "", + "dsLabel" => "Qualified Dublin Core", + "MIMEType" => "text/xml", + "formatURI" => "URL", + "dsContent" => $dom->saveXML(), "checksumType" => "DISABLED", "checksum" => "none", + "logMessage" => "datastream_modified", "force" => "TRUE"); try { $object = $client->__soapCall('ModifyDatastreamByValue', array($params)); } catch (exception $e) { @@ -543,17 +503,16 @@ class formClass { switch ($form_state['storage']['step']) { case 1: $form['indicator'] = array( - '#type' => 'fieldset', - '#title' => t('Ingest digital object into collection_pid !collection_label Step #1', array('collection_pid' => $collection_pid, '!collection_label' => $collection_label)) + '#type' => 'fieldset', + '#title' => t('Ingest digital object into collection_pid !collection_label Step #1', array('collection_pid' => $collection_pid, '!collection_label' => $collection_label)) ); $form['indicator']['models'] = array(// content models available - '#type' => 'select', - '#title' => t('Content models available'), - '#options' => $modelsForForm, - //'#description' => t('Content models available in this collection. A content model defines what is allowed in a collection and what to do with a file when it is uploaded (An example may creating a thumbnail from an image.).') - '#description' => t('Content models define datastream composition, relationships between this and other content models, and the mandatory behaviors associated with each digital object.
    Additional information may be found here. ') - + '#type' => 'select', + '#title' => t('Content models available'), + '#options' => $modelsForForm, + //'#description' => t('Content models available in this collection. A content model defines what is allowed in a collection and what to do with a file when it is uploaded (An example may creating a thumbnail from an image.).') + '#description' => t('Content models define datastream composition, relationships between this and other content models, and the mandatory behaviors associated with each digital object.
    Additional information may be found here. ') ); break; @@ -577,22 +536,22 @@ class formClass { } $form['collection_pid'] = array( - '#type' => 'hidden', - '#value' => $collection_pid + '#type' => 'hidden', + '#value' => $collection_pid ); if ($form_state['storage']['step'] < 2) { $button_name = t('Next'); - } + } else { $prefix = t('Please be patient. Once you click next there may be a number of files created. Depending on your content model this could take a few minutes to process.
    '); $button_name = t('Ingest'); } $form['submit'] = array( - '#type' => 'submit', - '#submit' => array('fedora_repository_ingest_form_submit'), - '#value' => $button_name + '#type' => 'submit', + '#submit' => array('fedora_repository_ingest_form_submit'), + '#value' => $button_name ); return $form; @@ -632,13 +591,13 @@ class formClass { if ($form_state['submitted'] && $form_state['clicked_button']['#value'] != 'OK') { $form['add_datastream_label'] = array( - '#value' => t('

    The datastream has been uploaded.

    '), - '#weight' => -10, + '#value' => t('

    The datastream has been uploaded.

    '), + '#weight' => -10, ); $form['#redirect'] = "fedora/repository/$pid/"; $form['submit'] = array( - '#type' => 'submit', - '#value' => t('OK') + '#type' => 'submit', + '#value' => t('OK') ); return $form; } @@ -650,68 +609,53 @@ class formClass { } $form['add_datastream_label'] = array( - '#value' => t('

    Add Datastream:

    '), - '#weight' => -10, + '#value' => t('

    Add Datastream:

    '), + '#weight' => -10, ); $form['pid'] = array( - '#type' => 'hidden', - '#value' => "$pid" + '#type' => 'hidden', + '#value' => "$pid" ); - /* - $form['stream_location'] = array ( - '#title' => 'File Location', - '#required' => 'TRUE', - '#description' => 'The path to the file for the new datastream', - //'#prefix' => 'Upload File', - '#type' => 'hidden' - ); - */ $form['stream_label'] = array( - '#title' => 'Datastream Label', - '#required' => 'TRUE', - '#description' => t('A Human readable label'), - '#type' => 'textfield' - ); - // $form['delete_file'] = array ( - // '#title' => 'Remove File After Ingest', - // '#description' => 'Remove the file from the drupal file system after ingest into the Digital Repository.', - // '#type' => 'hidden', - // '#default_value' => 'remove_file', - // '#options' => $options - // ); + '#title' => 'Datastream Label', + '#required' => 'TRUE', + '#description' => t('A Human readable label'), + '#type' => 'textfield' + ); + $form['#attributes']['enctype'] = 'multipart/form-data'; $form['add-stream-file-location'] = array( - '#type' => 'file', - '#title' => t('Upload Document'), - '#size' => 48, - // '#required'=>'TRUE', - '#description' => t('The file to upload.') + '#type' => 'file', + '#title' => t('Upload Document'), + '#size' => 48, + // '#required'=>'TRUE', + '#description' => t('The file to upload.') ); $form['#redirect'] = "fedora/repository/$pid/"; $form['submit'] = array( - '#type' => 'submit', - '#value' => t('Add Datastream') + '#type' => 'submit', + '#value' => t('Add Datastream') ); if (!empty($unused_dsids)) { $form['stream_id'] = array( - '#type' => 'select', - '#title' => t('Datastream ID'), - '#default_value' => variable_get('feed_item_length', 'teaser'), - '#weight' => '-1', - '#description' => t('Datastream IDs defined by the content model.'), + '#type' => 'select', + '#title' => t('Datastream ID'), + '#default_value' => variable_get('feed_item_length', 'teaser'), + '#weight' => '-1', + '#description' => t('Datastream IDs defined by the content model.'), ); $form['stream_id']['#options'] = $unused_dsids; - } + } else { $form['stream_id'] = array( - '#title' => 'Datastream ID', - '#required' => 'TRUE', - '#description' => t('An ID for this stream that is unique to this object. Must start with a letter and contain only alphanumeric characters and dashes and underscores.'), - '#type' => 'textfield', - '#weight' => -1, + '#title' => 'Datastream ID', + '#required' => 'TRUE', + '#description' => t('An ID for this stream that is unique to this object. Must start with a letter and contain only alphanumeric characters and dashes and underscores.'), + '#type' => 'textfield', + '#weight' => -1, ); } return $form; @@ -748,31 +692,31 @@ class formClass { $name = $dcItems->item($i)->nodeName; if ($name == 'dc:description') { $form["$name" . '-' . "$i"] = array( - '#title' => $name, - '#type' => 'textarea', - '#default_value' => $dcItems->item($i)->nodeValue, - '#description' => 'Dublin Core ' . substr($dcItems->item($i)->nodeName, 3) + '#title' => $name, + '#type' => 'textarea', + '#default_value' => $dcItems->item($i)->nodeValue, + '#description' => 'Dublin Core ' . substr($dcItems->item($i)->nodeName, 3) ); - } + } elseif ($name == 'dc:title') { $form["$name" . '-' . "$i"] = array( - '#title' => $name, - '#type' => 'textfield', - '#required' => 'TRUE', - '#default_value' => $dcItems->item($i)->nodeValue, - '#description' => 'Dublin Core ' . substr($dcItems->item($i)->nodeName, 3) + '#title' => $name, + '#type' => 'textfield', + '#required' => 'TRUE', + '#default_value' => $dcItems->item($i)->nodeValue, + '#description' => 'Dublin Core ' . substr($dcItems->item($i)->nodeName, 3) ); - } + } else { if ($oai_dc->item(0)->nodeName != $dcItems->item($i)->parentNode->nodeName) { $description = strstr($name, ':'); $form['app_' . "$name" . '-' . "$i"] = array( - '#title' => $name, - '#type' => 'textfield', - '#default_value' => $dcItems->item($i)->nodeValue, - '#description' => 'Dublin Core ' . substr($description, 1) + '#title' => $name, + '#type' => 'textfield', + '#default_value' => $dcItems->item($i)->nodeValue, + '#description' => 'Dublin Core ' . substr($description, 1) ); - } + } else { $field_type = 'textfield'; $value = $dcItems->item($i)->nodeValue; @@ -784,26 +728,26 @@ class formClass { } $description = strstr($name, ':'); $form["$name" . '-' . "$i"] = array( - '#title' => $name, - '#type' => $field_type, - '#default_value' => $value, - '#description' => 'Dublin Core ' . substr($description, 1) + '#title' => $name, + '#type' => $field_type, + '#default_value' => $value, + '#description' => 'Dublin Core ' . substr($description, 1) ); } } } - // $form['#redirect'] = "fedora/repository/$pid/"; + $form['pid'] = array( - '#type' => 'hidden', - '#value' => "$pid" + '#type' => 'hidden', + '#value' => "$pid" ); $form['dsid'] = array( - '#type' => 'hidden', - '#value' => "$dsId" + '#type' => 'hidden', + '#value' => "$dsId" ); $form['submit'] = array( - '#type' => 'submit', - '#value' => t('Update Metadata'), + '#type' => 'submit', + '#value' => t('Update Metadata'), ); return $form; @@ -817,62 +761,33 @@ class formClass { $form['#attributes']['enctype'] = 'multipart/form-data'; $form['file'] = array( - '#type' => 'file', - '#title' => t('Upload Document'), - '#description' => t('The file to upload.') + '#type' => 'file', + '#title' => t('Upload Document'), + '#description' => t('The file to upload.') ); $form['pid'] = array( - '#type' => 'value', - '#value' => $pid, + '#type' => 'value', + '#value' => $pid, ); $form['dsId'] = array( - '#type' => 'value', - '#value' => $dsId, + '#type' => 'value', + '#value' => $dsId, ); $form['dsLabel'] = array( - '#type' => 'value', - '#value' => $dsLabel, + '#type' => 'value', + '#value' => $dsLabel, ); $form['submit'] = array( - '#type' => 'submit', - '#value' => t('Replace Datastream') + '#type' => 'submit', + '#value' => t('Replace Datastream') ); return $form; } - /* - function createReplaceDataStreamForm($pid, $dsId, &$form_state) { - $form = array(); - - $form['#attributes']['enctype'] = 'multipart/form-data'; - $form['file'] = array( - '#type' => 'file', - '#title' => t('Upload Document'), - '#description' => t('The file to upload.') - ); - - $form['pid'] = array( - '#type' => 'value', - '#value' => $pid, - ); - - $form['dsId'] = array( - '#type' => 'value', - '#value' => $dsId, - ); - - $form['submit']=array( - '#type' => 'submit', - '#value'=>t('Replace Datastream') - ); - - return $form; - } - */ } From 0c6e56485b24243a785bb54abb92289e011baa14 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Wed, 2 Mar 2011 13:14:23 -0400 Subject: [PATCH 08/10] Added simple tests --- tests/fedora_repository.test | 335 ++++++++++++++++++++--------------- 1 file changed, 190 insertions(+), 145 deletions(-) diff --git a/tests/fedora_repository.test b/tests/fedora_repository.test index 216ff4e7..f5cec203 100644 --- a/tests/fedora_repository.test +++ b/tests/fedora_repository.test @@ -1,153 +1,198 @@ 'Fedora Repository', - 'description' => t('The Fedora repository content models.'), - 'group' => t('fedora repository'), - ); - } - - function setUp() { - parent::setUp('fedora_repository'); - - module_load_include('inc', 'fedora_repository', 'api/fedora_item'); - - // Create and login user. - $repository_user = $this->drupalCreateFedoraUser(array('add fedora datastreams', - 'edit fedora meta data', - 'edit tags datastream', - 'ingest new fedora objects', - 'purge objects and datastreams', - 'view fedora collection')); - - - $this->drupalLogin($repository_user); - - } - - /** - * Add an item based on a content model. Initially we will assume that the repository - * will be populated with the default content models and collections that are - * created from the admin settings -> Install Demos page. - * - */ - public function testIngest() { - // Check that the 'Strict PDF' content model exists in the repository. - //$pdf_cm = new Fedora_Item('islandora:strict_pdf'); - - $pid_list = array(); - // Create a collection for ingesting PDF content model objects. - - //$this->drupalGet('fedora/ingestObject/islandora:top/Islandora%20Top-Level%20Collection'); - $ingest_form = array(); - $ingest_form['models'] = 'islandora:collectionCModel/ISLANDORACM'; - - $this->drupalPost('fedora/ingestObject/islandora:top/Islandora%20Top-Level%20Collection', $ingest_form, 'Next'); - - // Add a sample PDF object via the web ingest form. - // Required fields are file location, dc:title and dc:description - $ingest_form_step_2 = array(); - $ingest_form_step_2['dc:title'] = $this->randomName(32); - $ingest_form_step_2['dc:description'] = $this->randomName(256); - - $ingest_form_step_2['files[ingest-file-location]'] = realpath(drupal_get_path('module', 'fedora_repository') . '/tests/test_files/lorem_ipsum.pdf'); - $this->drupalPost(NULL, $ingest_form_step_2, 'Ingest'); - $this->assertText('mimetype (application/pdf) is not associated with this Content Model', 'PDF mime type not accepted in collection content model.', 'message'); - - $this->outputScreenContents('Initial ingest form submit step 2', 'fedora_repository'); - - // Now try ingesting a proper collection policy. - $ingest_form = array(); - $ingest_form['models'] = 'islandora:collectionCModel/ISLANDORACM'; - - $this->drupalPost('fedora/ingestObject/islandora:top/Islandora%20Top-Level%20Collection', $ingest_form, 'Next'); - // Required fields are file location, dc:title and dc:description - $ingest_form_step_2 = array(); - $ingest_form_step_2['dc:title'] = $this->randomName(32); - $ingest_form_step_2['dc:description'] = $this->randomName(256); - $ingest_form_step_2['files[ingest-file-location]'] = realpath(drupal_get_path('module', 'fedora_repository') . '/collection_policies/PDF-COLLECTION POLICY.xml'); - $this->drupalPost(NULL, $ingest_form_step_2, 'Ingest'); - //$this->outputScreenContents('Initial ingest form submit step 2 - PDF collection', 'fedora_repository'); - $this->assertPattern('/Item .* created successfully./', "Verified item created."); - - $pid = $this->getIngestedPid(); - $pid_list[] = $pid; - $this->pass('Now attempting to ingest a PDF into the new collection.'); - // Now try ingesting a PDF - $ingest_form = array(); - $ingest_form['models'] = 'islandora:strict_pdf/ISLANDORACM'; - $this->drupalPost("fedora/ingestObject/$pid/", $ingest_form, 'Next'); - // Required fields are file location, dc:title and dc:description - $ingest_form_step_2 = array(); - $ingest_form_step_2['dc:title'] = "Lorem Ipsum"; - $ingest_form_step_2['dc:description'] = $this->randomName(256); - $ingest_form_step_2['files[ingest-file-location]'] = realpath(drupal_get_path('module', 'fedora_repository') . '/tests/test_files/lorem_ipsum.pdf'); - $this->drupalPost(NULL, $ingest_form_step_2, 'Ingest'); - $pid = $this->getIngestedPid(); - $pid_list[] = $pid; - if (!empty($pid)) { - $this->pass("Successfully ingested PDF object $pid."); - } - $this->cleanUpRepository($pid_list); - } - - private function cleanUpRepository($pid_list = array()) { - $this->pass("This is the PID list to purge: ". implode(", ", $pid_list) ); - foreach ($pid_list as $pid) { - $this->drupalPost("fedora/repository/purgeObject/$pid", array(), 'Purge'); - } - } - - private function getIngestedPid() { - $subject = $this->drupalGetContent(); - $pattern = '/">(.*)<\/a> created successfully./'; - $matches = array(); - $res = preg_match($pattern, $subject, $matches); - return $matches[1]; - } - - private function outputScreenContents($description, $basename) { - // This is a hack to get a directory that won't be cleaned up by SimpleTest. - $file_dir = file_directory_path() . '../simpletest_output_pages'; - if (!is_dir($file_dir)) { - mkdir($file_dir, 0777, TRUE); - } - $output_path = "$file_dir/$basename.". $this->randomName(10) . '.html'; - $rv = file_put_contents($output_path, $this->drupalGetContent()); - $this->pass("$description: Contents of result page are ". l('here', $output_path)); - } - - protected function drupalCreateFedoraUser($permissions = array('access comments', 'access content', 'post comments', 'post comments without approval')) { - // Create a role with the given permission set. - if (!($rid = $this->drupalCreateRole($permissions))) { - return FALSE; - } - - // Create a user assigned to that role. - $edit = array(); - $edit['name'] = 'simpletestuser'; - $edit['mail'] = $edit['name'] . '@example.com'; - $edit['roles'] = array($rid => $rid); - $edit['pass'] = 'simpletestpass'; - $edit['status'] = 1; - - $account = user_save('', $edit); - - $this->assertTrue(!empty($account->uid), t('User created with name %name and pass %pass', array('%name' => $edit['name'], '%pass' => $edit['pass'])), t('User login')); - if (empty($account->uid)) { - return FALSE; - } - - // Add the raw password so that we can log in as this user. - $account->pass_raw = $edit['pass']; - return $account; - } + public static function getInfo() { + return array( + 'name' => 'Fedora Repository', + 'description' => t('The Fedora repository content models.'), + 'group' => t('fedora repository'), + ); + } + + function setUp() { + parent::setUp('fedora_repository'); + + module_load_include('inc', 'fedora_repository', 'api/fedora_item'); + + // Create and login user. + $repository_user = $this->drupalCreateFedoraUser(array('add fedora datastreams', + 'edit fedora meta data', + 'edit tags datastream', + 'ingest new fedora objects', + 'purge objects and datastreams', + 'view fedora collection')); + + $this->repository_user = $repository_user; + $this->drupalLogin($repository_user); + } + + /** + * Add an item based on a content model. Initially we will assume that the repository + * will be populated with the default content models and collections that are + * created from the admin settings -> Install Demos page. + * + */ + public function testIngest() { + // Check that the 'Strict PDF' content model exists in the repository. + //$pdf_cm = new Fedora_Item('islandora:strict_pdf'); + + $pid_list = array(); + // Create a collection for ingesting PDF content model objects. + //$this->drupalGet('fedora/ingestObject/islandora:top/Islandora%20Top-Level%20Collection'); + $ingest_form = array(); + $ingest_form['models'] = 'islandora:collectionCModel/ISLANDORACM'; + + $this->drupalPost('fedora/ingestObject/islandora:top/Islandora%20Top-Level%20Collection', $ingest_form, 'Next'); + + // Add a sample PDF object via the web ingest form. + // Required fields are file location, dc:title and dc:description + $ingest_form_step_2 = array(); + $ingest_form_step_2['dc:title'] = $this->randomName(32); + $ingest_form_step_2['dc:description'] = $this->randomName(256); + + $ingest_form_step_2['files[ingest-file-location]'] = realpath(drupal_get_path('module', 'fedora_repository') . '/tests/test_files/lorem_ipsum.pdf'); + $this->drupalPost(NULL, $ingest_form_step_2, 'Ingest'); + $this->assertText('mimetype (application/pdf) is not associated with this Content Model', 'PDF mime type not accepted in collection content model.', 'message'); + + $this->outputScreenContents('Initial ingest form submit step 2', 'fedora_repository'); + + // Now try ingesting a proper collection policy. + $ingest_form = array(); + $ingest_form['models'] = 'islandora:collectionCModel/ISLANDORACM'; + + $this->drupalPost('fedora/ingestObject/islandora:top/Islandora%20Top-Level%20Collection', $ingest_form, 'Next'); + // Required fields are file location, dc:title and dc:description + $ingest_form_step_2 = array(); + $ingest_form_step_2['dc:title'] = $this->randomName(32); + $ingest_form_step_2['dc:description'] = $this->randomName(256); + $ingest_form_step_2['files[ingest-file-location]'] = realpath(drupal_get_path('module', 'fedora_repository') . '/collection_policies/PDF-COLLECTION POLICY.xml'); + $this->drupalPost(NULL, $ingest_form_step_2, 'Ingest'); + //$this->outputScreenContents('Initial ingest form submit step 2 - PDF collection', 'fedora_repository'); + $this->assertPattern('/Item .* created successfully./', "Verified item created."); + + $pid = $this->getIngestedPid(); + $pid_list[] = $pid; + $this->pass('Now attempting to ingest a PDF into the new collection.'); + // Now try ingesting a PDF + $ingest_form = array(); + $ingest_form['models'] = 'islandora:strict_pdf/ISLANDORACM'; + $this->drupalPost("fedora/ingestObject/$pid/", $ingest_form, 'Next'); + // Required fields are file location, dc:title and dc:description + $ingest_form_step_2 = array(); + $ingest_form_step_2['dc:title'] = "Lorem Ipsum"; + $ingest_form_step_2['dc:description'] = $this->randomName(256); + $ingest_form_step_2['files[ingest-file-location]'] = realpath(drupal_get_path('module', 'fedora_repository') . '/tests/test_files/lorem_ipsum.pdf'); + $this->drupalPost(NULL, $ingest_form_step_2, 'Ingest'); + $pid = $this->getIngestedPid(); + $pid_list[] = $pid; + if (!empty($pid)) { + $this->pass("Successfully ingested PDF object $pid."); + } + $this->cleanUpRepository($pid_list); + } + + public function testPidSpaceRestriction() { + + // give user full permissions + $admin_tester = $this->drupalCreateUser(array('administer site configuration', 'view fedora collection')); + $this->drupalLogin($admin_tester); + //$adminRole = $this->drupalCreateRole(array('administer site configuration','view fedora collection')); + $inVal['fedora_namespace_restriction_enforced'] = TRUE; + $inVal['fedora_pids_allowed'] = 'simpletest:'; + $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); + $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); + + $this->drupalGet('fedora/repository/demo:SmileyStuff/'); + $this->assertPattern('/Access denied/', 'No access to SmileyStuff Collection'); + $inVal['fedora_namespace_restriction_enforced'] = 0; + $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); + $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); + $this->drupalLogin($this->repository_user); + $this->drupalGet('fedora/repository/demo:SmileyStuff/'); + $this->assertPattern('/Collection of Smiley Stuff/', 'Access to SmileyStuff Collection'); + } + + private function cleanUpRepository($pid_list = array()) { + $this->pass("This is the PID list to purge: " . implode(", ", $pid_list)); + foreach ($pid_list as $pid) { + $this->drupalPost("fedora/repository/purgeObject/$pid", array(), 'Purge'); + } + } + + private function getIngestedPid() { + $subject = $this->drupalGetContent(); + $pattern = '/">(.*)<\/a> created successfully./'; + $matches = array(); + $res = preg_match($pattern, $subject, $matches); + return $matches[1]; + } + + private function outputScreenContents($description, $basename) { + // This is a hack to get a directory that won't be cleaned up by SimpleTest. + $file_dir = file_directory_path() . '../simpletest_output_pages'; + if (!is_dir($file_dir)) { + mkdir($file_dir, 0777, TRUE); + } + $output_path = "$file_dir/$basename." . $this->randomName(10) . '.html'; + $rv = file_put_contents($output_path, $this->drupalGetContent()); + $this->pass("$description: Contents of result page are " . l('here', $output_path)); + } + + protected function drupalCreateFedoraUser($permissions = array('access comments', 'access content', 'post comments', 'post comments without approval')) { + // Create a role with the given permission set. + if (!($rid = $this->drupalCreateRole($permissions))) { + return FALSE; + } + + // Create a user assigned to that role. + $edit = array(); + $edit['name'] = 'simpletestuser'; + $edit['mail'] = $edit['name'] . '@example.com'; + $edit['roles'] = array($rid => $rid); + $edit['pass'] = 'simpletestpass'; + $edit['status'] = 1; + + $account = user_save('', $edit); + + $this->assertTrue(!empty($account->uid), t('User created with name %name and pass %pass', array('%name' => $edit['name'], '%pass' => $edit['pass'])), t('User login')); + if (empty($account->uid)) { + return FALSE; + } + + // Add the raw password so that we can log in as this user. + $account->pass_raw = $edit['pass']; + return $account; + } + } + +class FedoraRepositoryClosedNameSpaceTestCase extends DrupalWebTestCase { + + public static function getInfo() { + return array( + 'name' => 'Fedora Repository with closed name space', + 'description' => t('Fails if allow_open_namespace has been set to TRUE in settings.php.'), + 'group' => t('fedora repository'), + ); + } + + function setUp() { + parent::setUp('fedora_repository'); + + } + + function testRestrictedNamePage() { + $admin_tester = $this->drupalCreateUser(array('administer site configuration', 'view fedora collection')); + $this->drupalLogin($admin_tester); + $this->drupalGet('admin/settings/fedora_repository'); + $this->assertNoText('Enforce namespace restrictions:'); + } + +} \ No newline at end of file From eb566f30097b52410a27abf79f41ecf681f3e5b6 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Wed, 2 Mar 2011 13:34:56 -0400 Subject: [PATCH 09/10] Added simple tests --- tests/fedora_repository.test | 96 +++++++++++++++++++++++++++--------- 1 file changed, 74 insertions(+), 22 deletions(-) diff --git a/tests/fedora_repository.test b/tests/fedora_repository.test index f5cec203..e5653d90 100644 --- a/tests/fedora_repository.test +++ b/tests/fedora_repository.test @@ -98,27 +98,6 @@ class FedoraRepositoryTestCase extends DrupalWebTestCase { $this->cleanUpRepository($pid_list); } - public function testPidSpaceRestriction() { - - // give user full permissions - $admin_tester = $this->drupalCreateUser(array('administer site configuration', 'view fedora collection')); - $this->drupalLogin($admin_tester); - //$adminRole = $this->drupalCreateRole(array('administer site configuration','view fedora collection')); - $inVal['fedora_namespace_restriction_enforced'] = TRUE; - $inVal['fedora_pids_allowed'] = 'simpletest:'; - $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); - $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); - - $this->drupalGet('fedora/repository/demo:SmileyStuff/'); - $this->assertPattern('/Access denied/', 'No access to SmileyStuff Collection'); - $inVal['fedora_namespace_restriction_enforced'] = 0; - $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); - $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); - $this->drupalLogin($this->repository_user); - $this->drupalGet('fedora/repository/demo:SmileyStuff/'); - $this->assertPattern('/Collection of Smiley Stuff/', 'Access to SmileyStuff Collection'); - } - private function cleanUpRepository($pid_list = array()) { $this->pass("This is the PID list to purge: " . implode(", ", $pid_list)); foreach ($pid_list as $pid) { @@ -185,7 +164,6 @@ class FedoraRepositoryClosedNameSpaceTestCase extends DrupalWebTestCase { function setUp() { parent::setUp('fedora_repository'); - } function testRestrictedNamePage() { @@ -195,4 +173,78 @@ class FedoraRepositoryClosedNameSpaceTestCase extends DrupalWebTestCase { $this->assertNoText('Enforce namespace restrictions:'); } +} + +class FedoraRepositoryOpenNameSpaceTestCase extends DrupalWebTestCase { + + public static function getInfo() { + return array( + 'name' => 'Fedora Repository with open name space', + 'description' => t('Fails if allow_open_namespace has been set to FALSE in settings.php.'), + 'group' => t('fedora repository'), + ); + } + + function setUp() { + parent::setUp('fedora_repository'); + + module_load_include('inc', 'fedora_repository', 'api/fedora_item'); + + // Create and login user. + $repository_user = $this->drupalCreateFedoraUser(array('add fedora datastreams', + 'edit fedora meta data', + 'edit tags datastream', + 'ingest new fedora objects', + 'purge objects and datastreams', + 'view fedora collection')); + + $this->repository_user = $repository_user; + } + + public function testPidSpaceRestriction() { + + // give user full permissions + $admin_tester = $this->drupalCreateUser(array('administer site configuration', 'view fedora collection')); + $this->drupalLogin($admin_tester); + $inVal['fedora_namespace_restriction_enforced'] = TRUE; + $inVal['fedora_pids_allowed'] = 'simpletest:'; + $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); + $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); + + $this->drupalGet('fedora/repository/demo:SmileyStuff/'); + $this->assertPattern('/Access denied/', 'No access to SmileyStuff Collection'); + $inVal['fedora_namespace_restriction_enforced'] = 0; + $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); + $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); + $this->drupalLogin($this->repository_user); + $this->drupalGet('fedora/repository/demo:SmileyStuff/'); + $this->assertPattern('/Collection of Smiley Stuff/', 'Access to SmileyStuff Collection'); + } + + protected function drupalCreateFedoraUser($permissions = array('access comments', 'access content', 'post comments', 'post comments without approval')) { + // Create a role with the given permission set. + if (!($rid = $this->drupalCreateRole($permissions))) { + return FALSE; + } + + // Create a user assigned to that role. + $edit = array(); + $edit['name'] = 'simpletestuser'; + $edit['mail'] = $edit['name'] . '@example.com'; + $edit['roles'] = array($rid => $rid); + $edit['pass'] = 'simpletestpass'; + $edit['status'] = 1; + + $account = user_save('', $edit); + + $this->assertTrue(!empty($account->uid), t('User created with name %name and pass %pass', array('%name' => $edit['name'], '%pass' => $edit['pass'])), t('User login')); + if (empty($account->uid)) { + return FALSE; + } + + // Add the raw password so that we can log in as this user. + $account->pass_raw = $edit['pass']; + return $account; + } + } \ No newline at end of file From 7d9741105b7ffccd1687f82ce4d333605419c0a0 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Thu, 3 Mar 2011 08:16:58 -0400 Subject: [PATCH 10/10] simple test made conditional the disabling of namespace restriction --- tests/fedora_repository.test | 127 +++++++++-------------------------- 1 file changed, 31 insertions(+), 96 deletions(-) diff --git a/tests/fedora_repository.test b/tests/fedora_repository.test index e5653d90..bcfda906 100644 --- a/tests/fedora_repository.test +++ b/tests/fedora_repository.test @@ -98,6 +98,37 @@ class FedoraRepositoryTestCase extends DrupalWebTestCase { $this->cleanUpRepository($pid_list); } + public function testPidSpaceRestriction() { + + // give user full permissions + + $admin_tester = $this->drupalCreateUser(array('administer site configuration', 'view fedora collection')); + $this->drupalLogin($admin_tester); + $pageContent = $this->drupalGet('admin/settings/fedora_repository'); + $hasOption = preg_match('/Enforce namespace restrictions/', $pageContent); + + + if (!$hasOption) { + $this->pass('Removal of namespace restrictions is disabled'); + } + else { + $this->pass('Removal of namespace restrictions is enabled'); + $inVal['fedora_namespace_restriction_enforced'] = TRUE; + $inVal['fedora_pids_allowed'] = 'simpletest:'; + $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); + $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); + + $this->drupalGet('fedora/repository/islandora:largeimages/'); + $this->assertPattern('/Access denied/', 'No access to Large image Collection Collection'); + $inVal['fedora_namespace_restriction_enforced'] = 0; + $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); + $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); + $this->drupalLogin($this->repository_user); + $this->drupalGet('fedora/repository/islandora:largeimages/'); + $this->assertPattern('/Large Images Collection/', 'Access to Large Images Collection'); + } + } + private function cleanUpRepository($pid_list = array()) { $this->pass("This is the PID list to purge: " . implode(", ", $pid_list)); foreach ($pid_list as $pid) { @@ -152,99 +183,3 @@ class FedoraRepositoryTestCase extends DrupalWebTestCase { } -class FedoraRepositoryClosedNameSpaceTestCase extends DrupalWebTestCase { - - public static function getInfo() { - return array( - 'name' => 'Fedora Repository with closed name space', - 'description' => t('Fails if allow_open_namespace has been set to TRUE in settings.php.'), - 'group' => t('fedora repository'), - ); - } - - function setUp() { - parent::setUp('fedora_repository'); - } - - function testRestrictedNamePage() { - $admin_tester = $this->drupalCreateUser(array('administer site configuration', 'view fedora collection')); - $this->drupalLogin($admin_tester); - $this->drupalGet('admin/settings/fedora_repository'); - $this->assertNoText('Enforce namespace restrictions:'); - } - -} - -class FedoraRepositoryOpenNameSpaceTestCase extends DrupalWebTestCase { - - public static function getInfo() { - return array( - 'name' => 'Fedora Repository with open name space', - 'description' => t('Fails if allow_open_namespace has been set to FALSE in settings.php.'), - 'group' => t('fedora repository'), - ); - } - - function setUp() { - parent::setUp('fedora_repository'); - - module_load_include('inc', 'fedora_repository', 'api/fedora_item'); - - // Create and login user. - $repository_user = $this->drupalCreateFedoraUser(array('add fedora datastreams', - 'edit fedora meta data', - 'edit tags datastream', - 'ingest new fedora objects', - 'purge objects and datastreams', - 'view fedora collection')); - - $this->repository_user = $repository_user; - } - - public function testPidSpaceRestriction() { - - // give user full permissions - $admin_tester = $this->drupalCreateUser(array('administer site configuration', 'view fedora collection')); - $this->drupalLogin($admin_tester); - $inVal['fedora_namespace_restriction_enforced'] = TRUE; - $inVal['fedora_pids_allowed'] = 'simpletest:'; - $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); - $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); - - $this->drupalGet('fedora/repository/demo:SmileyStuff/'); - $this->assertPattern('/Access denied/', 'No access to SmileyStuff Collection'); - $inVal['fedora_namespace_restriction_enforced'] = 0; - $this->drupalPost('admin/settings/fedora_repository', $inVal, 'Save configuration'); - $this->assertPattern('/The configuration options have been saved./', 'The configuration options have been saved.'); - $this->drupalLogin($this->repository_user); - $this->drupalGet('fedora/repository/demo:SmileyStuff/'); - $this->assertPattern('/Collection of Smiley Stuff/', 'Access to SmileyStuff Collection'); - } - - protected function drupalCreateFedoraUser($permissions = array('access comments', 'access content', 'post comments', 'post comments without approval')) { - // Create a role with the given permission set. - if (!($rid = $this->drupalCreateRole($permissions))) { - return FALSE; - } - - // Create a user assigned to that role. - $edit = array(); - $edit['name'] = 'simpletestuser'; - $edit['mail'] = $edit['name'] . '@example.com'; - $edit['roles'] = array($rid => $rid); - $edit['pass'] = 'simpletestpass'; - $edit['status'] = 1; - - $account = user_save('', $edit); - - $this->assertTrue(!empty($account->uid), t('User created with name %name and pass %pass', array('%name' => $edit['name'], '%pass' => $edit['pass'])), t('User login')); - if (empty($account->uid)) { - return FALSE; - } - - // Add the raw password so that we can log in as this user. - $account->pass_raw = $edit['pass']; - return $account; - } - -} \ No newline at end of file