diff --git a/CollectionPolicy.inc b/CollectionPolicy.inc index cb769085..be92f8b7 100644 --- a/CollectionPolicy.inc +++ b/CollectionPolicy.inc @@ -181,6 +181,21 @@ class CollectionPolicy extends XMLDatastream { return $ret; } + + /** + * Constructor + * NOTE: Use the static constructor methods whenever possible. + * + * @param string $xmlStr + * @param string $pid + * @param string $dsid + * @return XMLDatastream $cm + */ + public function __construct($xmlStr, $pid = NULL, $dsid = NULL) { + parent::__construct($xmlStr,$pid,$dsid); + $this->name= 'Collection Policy'; + } + /** * Attempts to convert from the old XML schema to the new by * traversing the XML DOM and building a new DOM. When done diff --git a/ContentModel.inc b/ContentModel.inc index b952e2c7..5ed33d59 100644 --- a/ContentModel.inc +++ b/ContentModel.inc @@ -101,7 +101,7 @@ class ContentModel extends XMLDatastream { return $ret; } - + /** * Ingests a minimum Content Model to the specified pid/dsid. @@ -224,7 +224,7 @@ class ContentModel extends XMLDatastream { parent::__construct($xmlStr, $pid, $dsid); $this->pid_namespace = $pid_namespace; - $this->name = $name; + $this->name = ($name == NULL)?'Islandora Content Model':$name; } /** @@ -1372,9 +1372,10 @@ class ContentModel extends XMLDatastream { * Executes the form handler from the element of . * * @param &$formData + * @param &$form_state * @return boolean $success */ - public function execFormHandler(&$data) { + public function execFormHandler(&$data,&$form_state) { $ret = FALSE; if ($this->validate()) { $method =$this->xml->getElementsByTagName('ingest_form')->item(0)->getElementsByTagName('form_builder_method')->item(0); @@ -1396,7 +1397,7 @@ class ContentModel extends XMLDatastream { self::$errors[] = 'Execute Form Handler: method \''. $className .'->'. $methodName .'\' does not exist.'; } else { - $class->$methodName($data); + $class->$methodName($data,$form_state); $ret = TRUE; } } @@ -1855,11 +1856,10 @@ class ContentModel extends XMLDatastream { $methodsEl = $rule->getElementsByTagName('ingest_methods')->item(0); $methods = $methodsEl->getElementsByTagName('ingest_method'); for ($i=0; !$found && $i < $methods->length; $i++) { - if ($methods->item($i)->getAttribute('module') == $module && $methods->item($i)->getAttribute('file') == $file && $methods->item($i)->getAttribute('class') == $class && $methods->item($i)->getAttribute('method') == $method) { + if (( trim($methods->item($i)->getAttribute('module')) == $module || (trim($methods->item($i)->getAttribute('module')) == '' && $module == 'fedora_repository')) && trim($methods->item($i)->getAttribute('file')) == $file && trim($methods->item($i)->getAttribute('class')) == $class && trim($methods->item($i)->getAttribute('method')) == $method) { $found = $methods->item($i); } } - if ($found !== FALSE) { $methodEl = $found; $paramsEl = $found->getElementsByTagName('parameters'); diff --git a/ObjectHelper.inc b/ObjectHelper.inc index 80d354df..d4b4799a 100644 --- a/ObjectHelper.inc +++ b/ObjectHelper.inc @@ -54,25 +54,26 @@ class ObjectHelper { return ' '; } - if (!fedora_repository_access(OBJECTHELPER :: $OBJECT_HELPER_VIEW_FEDORA, $pid, $user)) { drupal_set_message(t("You do not have access Fedora objects within the attempted namespace."), 'error'); drupal_access_denied(); return ' '; } - - 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 ' '; - } - $cmDatastreams = $cm->listDatastreams(); + + if (variable_get('fedora_object_restrict_datastreams', TRUE) == 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 ' '; + } - 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 ' '; + $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 ' '; + } } module_load_include('inc', 'fedora_repository', 'api/fedora_item'); @@ -405,11 +406,12 @@ class ObjectHelper { * */ function get_formatted_datastream_list($object_pid, $contentModels, &$fedoraItem) { - global $fedoraUser, $fedoraPass, $base_url; + global $fedoraUser, $fedoraPass, $base_url, $user; module_load_include('inc', 'fedora_repository', 'ConnectionHelper'); 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); @@ -426,21 +428,29 @@ class ObjectHelper { $hasOBJStream = NULL; $hasTNStream = FALSE; $dataStreamBody = "
\n"; + + $cmDatastreams = array(); + if (variable_get('fedora_object_restrict_datastreams', TRUE) == TRUE && ($cm = ContentModel::loadFromObject($object_pid)) !== FALSE) { + $cmDatastreams = $cm->listDatastreams(); + } $dataStreamBody .= $this->get_parent_objects_asHTML($object_pid); $dataStreamBody .= ''; foreach ($object as $datastream) { foreach ($datastream as $datastreamValue) { - 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', TRUE) == 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"; diff --git a/XMLDatastream.inc b/XMLDatastream.inc index e99cbbca..77c357de 100644 --- a/XMLDatastream.inc +++ b/XMLDatastream.inc @@ -223,7 +223,7 @@ printerWindow.document.write(text); module_load_include('inc', 'Fedora_Repository', 'api/fedora_item'); if ($this->validate()) { $item = new Fedora_Item($this->pid); - $item->modify_datastream_by_value($this->dumpXml(), $this->dsid, $this->name, NULL); + $item->modify_datastream_by_value($this->dumpXml(), $this->dsid, $this->name, 'application/xml'); return TRUE; } return FALSE; diff --git a/content_modeller/islandora_content_modeller.module b/content_modeller/islandora_content_modeller.module index 8d64e84e..4c1a4b6a 100644 --- a/content_modeller/islandora_content_modeller.module +++ b/content_modeller/islandora_content_modeller.module @@ -2684,8 +2684,9 @@ function icm_model_add_ingestFormElement(&$form_state,$params=null) 'other_select'=>t('Select (with \'other\' option)'), 'datepicker'=>t('Datepicker'), 'copyright'=>t('Creative-Commons Copyright Chooser'), - 'hidden'=>t('Hidden'), - 'file'=>t('File Upload (browse)'), + 'hidden'=>t('Hidden'), + 'file'=>t('File Upload (browse)'), + 'markup'=>t('HTML Markup (no field)'), ), '#description'=> t('The type of form element to display.') ); @@ -2849,8 +2850,9 @@ function icm_model_edit_ingestFormElement(&$form_state,$params=null) 'other_select'=>t('Select (with \'other\' option)'), 'datepicker'=>t('Datepicker'), 'copyright'=>t('Creative-Commons Copyright Chooser'), - 'hidden'=>t('Hidden'), - 'file'=>t('File Upload (browse)'), + 'hidden'=>t('Hidden'), + 'file'=>t('File Upload (browse)'), + 'markup'=>t('HTML Markup (no field)'), ), '#description'=> t('The type of form element to display.
Warning: Changing the type from "Select" or "Radio" to anything else will cause any authoritative list to be permanently removed.') ); diff --git a/content_models/islandora_largeimages.xml b/content_models/islandora_largeimages.xml index 6a152ad4..a0bbfe9b 100644 --- a/content_models/islandora_largeimages.xml +++ b/content_models/islandora_largeimages.xml @@ -1,298 +1,358 @@ - - - - - - - - - - - - - - -ingest - -fedoraAdmin -2010-01-26T21:29:20.416Z -Created with Admin GUI "New Object" command - - - -addDatastream -COLLECTION_POLICY -fedoraAdmin -2010-01-26T21:30:55.607Z -DatastreamsPane generated this logMessage. - - - -addDatastream -RELS-EXT -fedoraAdmin -2010-01-26T21:33:14.125Z - - - - -modifyDatastreamByValue -COLLECTION_POLICY -fedoraAdmin -2010-03-04T12:50:05.983Z - - - - -modifyDatastreamByValue -COLLECTION_POLICY -fedoraAdmin -2010-03-11T21:01:44.921Z - - - - - - - - - - - Large Image Collection - islandora:largeimages - - - - - - - - - - - islandora:slide - islandora:slideCModel - ISLANDORACM - - - - isMemberOfCollection - - dc.description - - dc.title - dc.title - - - dc.creator - dc.creator - - - dc.description - dc.description - - - dc.date - dc.date - - - dc.identifier - dc.identifier - - - dc.language - dc.language - - - dc.publisher - dc.publisher - - - dc.rights - dc.rights - - - dc.subject - dc.subject - - - dc.relation - dc.relation - - - dcterms.temporal - dcterms.temporal - - - dcterms.spatial - dcterms.spatial - - - fgs.DS.first.text - Full Text - - - - - - - - - - - islandora:slide - islandora:slideCModel - ISLANDORACM - - - islandora:herb - islandora:herbCModel - ISLANDORACM - - - isMemberOfCollection - - dc.description - - dc.title - dc.title - - - dc.creator - dc.creator - - - dc.description - dc.description - - - dc.date - dc.date - - - dc.identifier - dc.identifier - - - dc.language - dc.language - - - dc.publisher - dc.publisher - - - dc.rights - dc.rights - - - dc.subject - dc.subject - - - dc.relation - dc.relation - - - dcterms.temporal - dcterms.temporal - - - dcterms.spatial - dcterms.spatial - - - fgs.DS.first.text - Full Text - - - - - - - - - - - islandora:slide - islandora:slideCModel - ISLANDORACM - - - isMemberOfCollection - - dc.description - - dc.title - dc.title - - - dc.creator - dc.creator - - - dc.description - dc.description - - - dc.date - dc.date - - - dc.identifier - dc.identifier - - - dc.language - dc.language - - - dc.publisher - dc.publisher - - - dc.rights - dc.rights - - - dc.subject - dc.subject - - - dc.relation - dc.relation - - - dcterms.temporal - dcterms.temporal - - - dcterms.spatial - dcterms.spatial - - - fgs.DS.first.text - Full Text - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + ingest + + fedoraAdmin + 2010-01-26T21:29:20.416Z + Created with Admin GUI "New Object" command + + + + addDatastream + COLLECTION_POLICY + fedoraAdmin + 2010-01-26T21:30:55.607Z + DatastreamsPane generated this logMessage. + + + + addDatastream + RELS-EXT + fedoraAdmin + 2010-01-26T21:33:14.125Z + + + + + modifyDatastreamByValue + COLLECTION_POLICY + fedoraAdmin + 2010-03-04T12:50:05.983Z + + + + + modifyDatastreamByValue + COLLECTION_POLICY + fedoraAdmin + 2010-03-11T21:01:44.921Z + + + + + ingest + + admin + 2010-12-10T17:29:47.073Z + Fedora Object Ingested + + + + addDatastream + TN + admin + 2010-12-10T17:29:47.200Z + Ingested object TN + + + + modifyDatastreamByValue + COLLECTION_POLICY + fedoraAdmin + 2010-12-10T17:32:17.345Z + + + + + + + + + + + Large Image Collection + islandora:largeimages + + + + + + + + + + + islandora:slide + islandora:slideCModel + ISLANDORACM + + + isMemberOfCollection + + dc.description + + dc.title + dc.title + + + dc.creator + dc.creator + + + dc.description + dc.description + + + dc.date + dc.date + + + dc.identifier + dc.identifier + + + dc.language + dc.language + + + dc.publisher + dc.publisher + + + dc.rights + dc.rights + + + dc.subject + dc.subject + + + dc.relation + dc.relation + + + dcterms.temporal + dcterms.temporal + + + dcterms.spatial + dcterms.spatial + + + fgs.DS.first.text + Full Text + + + + + + + + + + + islandora:slide + islandora:slideCModel + ISLANDORACM + + + islandora:herb + islandora:herbCModel + ISLANDORACM + + + isMemberOfCollection + + dc.description + + dc.title + dc.title + + + dc.creator + dc.creator + + + dc.description + dc.description + + + dc.date + dc.date + + + dc.identifier + dc.identifier + + + dc.language + dc.language + + + dc.publisher + dc.publisher + + + dc.rights + dc.rights + + + dc.subject + dc.subject + + + dc.relation + dc.relation + + + dcterms.temporal + dcterms.temporal + + + dcterms.spatial + dcterms.spatial + + + fgs.DS.first.text + Full Text + + + + + + + + + + + islandora:slide + islandora:slideCModel + ISLANDORACM + + + isMemberOfCollection + + dc.description + + dc.title + dc.title + + + dc.creator + dc.creator + + + dc.description + dc.description + + + dc.date + dc.date + + + dc.identifier + dc.identifier + + + dc.language + dc.language + + + dc.publisher + dc.publisher + + + dc.rights + dc.rights + + + dc.subject + dc.subject + + + dc.relation + dc.relation + + + dcterms.temporal + dcterms.temporal + + + dcterms.spatial + dcterms.spatial + + + fgs.DS.first.text + Full Text + + + + + + + + + + + + + dc.title + dc.creator + dc.description + dc.date + dc.identifier + dc.language + dc.publisher + dc.rights + dc.subject + dc.relation + dcterms.temporal + dcterms.spatial + Full Text + + isMemberOfCollection + + + + + + + + + + + + + + + + + + + + + + diff --git a/fedora_repository.module b/fedora_repository.module index f1035519..c881e854 100644 --- a/fedora_repository.module +++ b/fedora_repository.module @@ -144,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'])); + $err = (!$cm->execFormHandler($form_state['values'],$form_state)); $_SESSION['fedora_ingest_files'] = ''; //empty this variable diff --git a/formClass.inc b/formClass.inc index 8505f402..20840ba7 100644 --- a/formClass.inc +++ b/formClass.inc @@ -77,8 +77,14 @@ class formClass { '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; + } $items['fedora/repository'] = array( -// 'title' => t('Digital repository'), + 'title' => $repository_title, 'page callback' => 'repository_page', 'type' => MENU_NORMAL_ITEM, // 'page arguments'=>array(1), @@ -361,13 +367,22 @@ class formClass { ); */ - $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.'), - ); + $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.'), + ); + + + $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.'), + ); + $form['fedora_object_display_description'] = array( @@ -377,6 +392,13 @@ class formClass { '#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', TRUE), + '#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', diff --git a/form_elements/includes/people.inc b/form_elements/includes/people.inc index 9d44055f..f19bf9b8 100644 --- a/form_elements/includes/people.inc +++ b/form_elements/includes/people.inc @@ -40,12 +40,15 @@ function _ife_find_people_element($form, &$keys = array()) { } function ife_people_ahah() { + + if (!isset($_POST['form_build_id'])) return; $form_state = array('storage' => NULL, 'submitted' => FALSE); $form_build_id = $_POST['form_build_id']; $form = form_get_cache($form_build_id, $form_state); + $args = $form['#parameters']; $form_id = array_shift($args); $form['#post'] = $_POST; @@ -57,10 +60,11 @@ function ife_people_ahah() { $form['#post'] = $_POST; drupal_process_form($form_id, $form, $form_state); - + +// ob_start(); echo '
';   echo $_POST['form_build_id']."\n"; var_dump($form_state);   echo '
'; $dump = ob_get_contents(); ob_end_clean(); + $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id); $qt_form = _ife_find_people_element($form); -// ob_start(); echo '
'; echo $form_state['clicked_button']['#parents'][2]; var_dump($form_state['storage']['people']); echo'
'; $dump = ob_get_contents(); ob_end_clean(); unset($qt_form['#prefix'], $qt_form['#suffix']); // Prevent duplicate wrappers. $javascript = drupal_add_js(NULL, NULL, 'header'); @@ -105,7 +109,7 @@ function ife_remove_person_submit($form, &$form_state) { unset($form_state['submit_handlers']); form_execute_handlers('submit', $form, $form_state); $form_state['storage']['people'] = $people; - $form_state['rebuild'] = TRUE; + //$form_state['rebuild'] = TRUE; } @@ -117,6 +121,7 @@ function ife_add_person_submit($form, &$form_state) { $keys = array(); $qt_form = _ife_find_people_element($form, $keys); $peopleVals = &$form_state['values']; + while (count($keys) > 0) { $key = array_pop($keys); if (isset($peopleVals[$key])) { @@ -129,12 +134,16 @@ function ife_add_person_submit($form, &$form_state) { foreach ($peopleVals['people'] as $val) { $people[] = $val; } - $people[] = array('name' => '', 'date'=>'', 'role' => '', 'subject' => ''); + + //only add new person if we are not adding from repository. + if (!isset($form_state['post']['add_from_repository']) || trim($form_state['post']['add_from_repository']) == '') { + $people[] = array('name' => '', 'date'=>'', 'role' => '', 'subject' => ''); + } unset($form_state['submit_handlers']); form_execute_handlers('submit', $form, $form_state); $form_state['storage']['people'] = $people; - $form_state['rebuild'] = TRUE; + // $form_state['rebuild'] = TRUE; } @@ -147,12 +156,14 @@ function ife_add_org_submit($form, &$form_state) { $keys = array(); $qt_form = _ife_find_people_element($form, $keys); $peopleVals = &$form_state['values']; + while (count($keys) > 0) { $key = array_pop($keys); if (isset($peopleVals[$key])) { $peopleVals = &$peopleVals[$key]; } } + if (!is_array($peopleVals['people'])) $peopleVals['people'] = array(); @@ -164,7 +175,7 @@ function ife_add_org_submit($form, &$form_state) { unset($form_state['submit_handlers']); form_execute_handlers('submit', $form, $form_state); $form_state['storage']['people'] = $people; - $form_state['rebuild'] = TRUE; + //$form_state['rebuild'] = TRUE; } @@ -194,7 +205,7 @@ function ife_add_conf_submit($form, &$form_state) { unset($form_state['submit_handlers']); form_execute_handlers('submit', $form, $form_state); $form_state['storage']['people'] = $people; - $form_state['rebuild'] = TRUE; + //$form_state['rebuild'] = TRUE; } diff --git a/form_elements/islandora_form_elements.module b/form_elements/islandora_form_elements.module index 75214db0..e174693b 100644 --- a/form_elements/islandora_form_elements.module +++ b/form_elements/islandora_form_elements.module @@ -129,7 +129,7 @@ function ife_fieldset_children_has_value($el) function ife_people_process($element,$edit,&$form_state) { - + $element['#tree'] = TRUE; $element['#prefix'] = '
'; $element['#suffix'] = '
'; @@ -141,7 +141,6 @@ function ife_people_process($element,$edit,&$form_state) '#theme' => 'people_items', ); - if (isset($form_state['post'][$element['#name']]['add_from_repository']) && trim($form_state['post'][$element['#name']]['add_from_repository']) != '') { $people= array(); @@ -156,7 +155,7 @@ function ife_people_process($element,$edit,&$form_state) $json = json_decode($form_state['post'][$element['#name']]['add_from_repository']); $person=array(); -// ob_start(); echo '
'; var_dump($json); echo '
'; drupal_set_message(ob_get_contents()); ob_end_clean(); + switch ($json->type) { diff --git a/plugins/Exiftool.inc b/plugins/Exiftool.inc index d4feac7a..ec6d7ad0 100644 --- a/plugins/Exiftool.inc +++ b/plugins/Exiftool.inc @@ -32,32 +32,35 @@ class Exiftool { function displayMetadata() { $output=''; - $exifDom = DOMDocument::loadXML($this->item->get_datastream_dissemination('EXIF')); - if ($exifDom != NULL) { - $description = $exifDom->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#','Description'); - if ($description->length > 0) { - $description=$description->item(0); - $output .= ''; + $exif = $this->item->get_datastream_dissemination('EXIF'); + if (trim($exif) != '') { + $exifDom = DOMDocument::loadXML($this->item->get_datastream_dissemination('EXIF')); + if ($exifDom != NULL) { + $description = $exifDom->getElementsByTagNameNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#','Description'); + if ($description->length > 0) { + $description=$description->item(0); + $output .= ''; - $fieldset = array( - '#title' => t("!text", array('!text' => 'Technical Metadata')), - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#value' => $output - ); - $output = theme('fieldset', $fieldset); - } - } + $fieldset = array( + '#title' => t("!text", array('!text' => 'Technical Metadata')), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#value' => $output + ); + $output = theme('fieldset', $fieldset); + } + } + } return $output; } diff --git a/plugins/FormBuilder.inc b/plugins/FormBuilder.inc index 7cb8acdc..dbedda75 100644 --- a/plugins/FormBuilder.inc +++ b/plugins/FormBuilder.inc @@ -312,12 +312,17 @@ class FormBuilder { ); foreach ($elements as $element) { - $el = array( - '#title' => $element['label'], - '#required' => ($element['required'] ? 1 : 0), - '#description' => $element['description'], - '#type' => $element['type'] - ); + + if ($element['type'] == 'markup') { + $el = array('#value'=> $element['description']); + } else { + $el = array( + '#title' => $element['label'], + '#required' => ($element['required'] ? 1 : 0), + '#description' => $element['description'], + '#type' => $element['type'] + ); + } $name = explode('][', $element['name']); $elLocation = &$form['indicator2']; diff --git a/plugins/ModsFormBuilder.inc b/plugins/ModsFormBuilder.inc index 47dab34c..d3907d38 100644 --- a/plugins/ModsFormBuilder.inc +++ b/plugins/ModsFormBuilder.inc @@ -231,10 +231,12 @@ class ModsFormBuilder extends FormBuilder { } - function handleModsForm($form_values) { + function handleModsForm(&$form_values,&$form_state) { module_load_include('inc', 'fedora_repository', 'api/fedora_item'); module_load_include('inc', 'fedora_repository', 'CollectionPolicy'); + $form_state['storage']['people']=NULL; //clears out old entities for the next run of the formbuilder. + $dom = new DomDocument("1.0", "UTF-8"); $dom->formatOutput = TRUE; $pid=$form_values['pid']; @@ -272,7 +274,7 @@ class ModsFormBuilder extends FormBuilder { // header('Content-type: application/xml'); // echo $dom->saveXML(); exit(); - + try { $object = Fedora_Item::ingest_from_FOXML($dom); //for some reason, ingest_from_FOXML does not generate a JMS message diff --git a/workflow_client/plugins/exif.inc b/workflow_client/plugins/exif.inc new file mode 100644 index 00000000..d53e83f3 --- /dev/null +++ b/workflow_client/plugins/exif.inc @@ -0,0 +1,66 @@ + 0) { + $this->setMessage(t('Missing parameter(s) "%params" for exif process on "%pid"', array('%params' => join(',', $missing_params), '%pid' => $pid))); + return FALSE; + } + + module_load_include('inc', 'fedora_repository', 'api/fedora_item'); + module_load_include('inc', 'fedora_repository', 'ObjectHelper'); + + $item = new fedora_item($pid); + $dslist = $item->get_datastreams_list_as_array(); + if (!isset($dslist[$parameters['dsid']])) { + $this->setMessage(t('Datastream "%dsid" could not be found for exif process on "%pid"', array('%dsid' => $parameters['dsid'], '%pid' => $pid))); + return FALSE; + } + + $ds = $dslist[$parameters['dsid']]; + $file = '/tmp/'. $ds['label']; + $dest_ds = isset($parameters['dest_ds']) ? $parameters['dest_ds'] : 'EXIF'; + + $objectHelper = new ObjectHelper(); + $objectHelper->makeObject($pid, $parameters['dsid'], FALSE, NULL, $file); + + if (!file_exists($file)) { + $this->setMessage('couldnt get datastream '. $parameters['dsid'] .' as '. $file); + return FALSE; + } + + $system = getenv('System'); + $returnValue=TRUE; + $output=array(); + + $command = '/usr/local/exif/exiftool -X '. $file; + exec($command, $output, $returnValue); + + if ($returnValue == '0') { + if (isset($dslist[$dest_ds])) { + $item->purge_datastream($dest_ds); + } + + $ret = $item->add_datastream_from_string(join("\n",$output), $dest_ds, 'EXIF_Technical_Metadata.xml' , 'text/xml', 'X','Added by workflow process EXIF.'); + @unlink($file); + @unlink($file . $file_suffix); + + if (!$ret) { + $this->setMessage(t('Unable to add datastream "%dsid" to "%pid".', array('%dsid' => $dest_ds, '%pid' => $pid))); + return FALSE; + } + + return TRUE; + + } + } +} diff --git a/workflow_client/plugins/solr_index.inc b/workflow_client/plugins/solr_index.inc index 2c45901d..0b770462 100644 --- a/workflow_client/plugins/solr_index.inc +++ b/workflow_client/plugins/solr_index.inc @@ -27,6 +27,8 @@ class solr_index extends Process { } module_load_include('inc', 'fedora_repository', 'api/fedora_item'); + module_load_include('inc', 'fedora_repository', 'ContentModel'); + $xsltDom = NULL; if (isset($parameters['xslt'])) { list($template_pid, $template_dsid) = explode('/', $parameters['xslt']); @@ -44,6 +46,11 @@ class solr_index extends Process { $xsltDom->load(drupal_get_path('module', 'islandora_workflow_client') .'/xsl/'. trim($parameters['xslt_file'])); } + if ($xsdlDom === FALSE) { + $this->setMessage(t('Unable to load xslt.')); + return FALSE; + } + $item = new fedora_item($pid); $dslist = $item->get_datastreams_list_as_array(); if (!isset($dslist[$parameters['dsid']])) { @@ -59,9 +66,12 @@ class solr_index extends Process { $proc = new XSLTProcessor(); $proc->importStylesheet($xsltDom); - $solrDoc = $proc->transformToXML($dom); - - $solrDom = DOMDocument::loadXML($solrDoc); + $solrDom = $proc->transformToDOC($dom); + + if ($solrDoc === FALSE) { + $this->setMessage(t('Document transform failed.')); + return FALSE; + } $doc = $solrDom->getElementsByTagName('doc'); if ($doc->length > 0) { $doc=$doc->item(0); @@ -72,13 +82,19 @@ class solr_index extends Process { $field->setAttribute('name', 'workflow_process_t'); $doc->appendChild($field); } - + + if (($cm = ContentModel::loadFromObject($pid)) !== FALSE) { + $field=$solrDom->createElement('field', $cm->pid); + $field->setAttribute('name', 'cmodel_t'); + $doc->appendChild($field); + } + if (isset($dslist['DC'])) { - $dc = $item->get_datastream('DC'); - $field=$solrDom->createElement('field',$dc->createDate); - $field->setAttribute('name','created_d'); - $doc->appendChild($field); + $dc = $item->get_datastream('DC'); + $field=$solrDom->createElement('field',$dc->createDate); + $field->setAttribute('name','created_d'); + $doc->appendChild($field); } }