From f6436d48326c1076efe82d6292b929c77b7a7fa6 Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Tue, 5 Jul 2011 22:35:28 -0300 Subject: [PATCH] Fixes for editing --- fedora_repository.module | 9 +- formClass.inc | 220 ++++++++++++++++----------------------- 2 files changed, 90 insertions(+), 139 deletions(-) diff --git a/fedora_repository.module b/fedora_repository.module index c9b6ad29..90c8b653 100644 --- a/fedora_repository.module +++ b/fedora_repository.module @@ -639,12 +639,9 @@ function fedora_repository_edit_qdc_form_validate($form, &$form_state) { */ function fedora_repository_edit_qdc_form_submit($form, &$form_state) { if ($form_state['storage']['xml']) { - module_load_include('inc', 'xml_form_api', 'XMLForm'); - $xml_form = new XMLForm($form_state); - $doc = $xml_form->submit($form, $form_state); - $document = $doc->document; - dom_document_pretty_print($document); - exit(); + module_load_include('inc', 'islandora_content_model_forms', 'EditObjectMetadataForm'); + $xml_form = new EditObjectMetadataForm($form_state); + $xml_form->submit($form, $form_state); } else { module_load_include('inc', 'fedora_repository', 'ConnectionHelper'); diff --git a/formClass.inc b/formClass.inc index b4d91d12..da62a37a 100644 --- a/formClass.inc +++ b/formClass.inc @@ -512,7 +512,7 @@ class formClass { '#type' => 'select', '#title' => t('Content models available'), '#options' => $potential_models, - '#default_value' => $selected_model, + '#default_value' => $selected_model, '#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. '), ), ), @@ -716,155 +716,109 @@ class formClass { } /** - * Creates a drupal form to edit either the QDC or DC datastream + * Create edit form. + * + * @param string $pid + * @param string $dsid + * @param object $client + * @param array $form_state + * + * @return string */ - function createMetaDataForm($pid, $dsId = NULL, $client, &$form_state) { - if (module_exists('islandora_content_model_forms')) { - // Get the content model. - $content_model = ContentModel::loadFromObject($pid); - $form_names = islandora_content_model_get_form_names($content_model->pid); + function createQDCEditForm($pid, $dsid, $client, &$form_state) { + $dsid = empty($dsid) ? 'QDC' : $dsid; + try { + $params = array('pid' => "$pid", 'dsID' => "$dsid", 'asOfDateTime' => ""); + $object = $client->__soapCall('getDatastreamDissemination', array('parameters' => $params)); + } catch (Exception $e) { + return array(); } - $form_state['storage']['xml'] = false; - if (isset($form_state['storage']['step']) || (isset($form_names) && count($form_names) > 0)) { - // Form Exists... - $form_state['storage']['step'] = isset($form_state['storage']['step']) ? $form_state['storage']['step'] : 1; - switch ($form_state['storage']['step']) { - case 1: - $form['indicator'] = array( - '#type' => 'fieldset', - '#title' => t('Choose edit form.') - ); - $form['indicator']['forms'] = array( - '#type' => 'select', - '#title' => t('Forms'), - '#options' => $form_names, - '#description' => t('Select the form to populate the metadata of the new object.') - ); - $form['submit'] = array( - '#type' => 'submit', - '#submit' => array('fedora_repository_edit_qdc_form_submit'), - '#value' => 'Next' - ); - return $form; - case 2: - // XML Forms - module_load_include('inc', 'xml_form_api', 'XMLForm'); - $xml_form = new XMLForm($form_state); - if (isset($form_state['values']['forms']) || $xml_form->isInitialized()) { - if (!$xml_form->isInitialized()) { - module_load_include('inc', 'xml_form_api', 'XMLFormDefinition'); - module_load_include('inc', 'xml_form_builder', 'FormBuilder'); - $form_name = $form_state['values']['forms']; - $definition = FormBuilder::GetFormDefinition($form_name); - $form = XMLFormDefinition::GetDrupalForm($definition); - $properties = XMLFormDefinition::GetFormProperties($definition); - // XML - $dsid = islandora_content_model_get_dsid($content_model->pid, $form_name); - $params = array('pid' => "$pid", 'dsID' => "$dsid", 'asOfDateTime' => ""); - try { - $object = $client->__soapCAll('getDatastreamDissemination', array('parameters' => $params)); - } catch (Exception $e) { - return array(); // Empty form? - } - $xml = $object->dissemination->stream; - $xml = trim($xml); - // XML - $document = new XMLDocument($properties['document']['root'], $properties['document']['namespaces'], $properties['document']['schema'], $xml); - $xml_form->initialize($form, $document); - } - $form_state['storage']['xml'] = true; - return $xml_form->toArray(); - } - break; - } + $content = $object->dissemination->stream; + $content = trim($content); + $doc = new DOMDocument(); + if (!$doc->loadXML($content)) { + echo "error loading xml"; } - else { - if (!isset($dsId)) { - $dsId = 'QDC'; - } - //$client = getSoapClient(variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl')); - $params = array('pid' => "$pid", 'dsID' => "$dsId", 'asOfDateTime' => ""); - try { - $object = $client->__soapCAll('getDatastreamDissemination', array('parameters' => $params)); - } catch (Exception $e) { - return array(); + $oai_dc = $doc->getElementsByTagName('dc'); + $dcItems = $oai_dc->item(0)->getElementsByTagName('*'); + $form = array(); + for ($i = 0; $i < $dcItems->length; $i++) { + $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) + ); } - - $content = $object->dissemination->stream; - $content = trim($content); - $doc = new DOMDocument(); - if (!$doc->loadXML($content)) { - echo "error loading xml"; + 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) + ); } - - $oai_dc = $doc->getElementsByTagName('dc'); - - $dcItems = $oai_dc->item(0)->getElementsByTagName('*'); - $form = array(); - for ($i = 0; $i < $dcItems->length; $i++) { - $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) - ); - } - elseif ($name == 'dc:title') { - $form["$name" . '-' . "$i"] = array( + else { + if ($oai_dc->item(0)->nodeName != $dcItems->item($i)->parentNode->nodeName) { + $description = strstr($name, ':'); + $form['app_' . "$name" . '-' . "$i"] = array( '#title' => $name, '#type' => 'textfield', - '#required' => 'TRUE', '#default_value' => $dcItems->item($i)->nodeValue, - '#description' => 'Dublin Core ' . substr($dcItems->item($i)->nodeName, 3) + '#description' => 'Dublin Core ' . substr($description, 1) ); } 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) - ); + $field_type = 'textfield'; + $value = $dcItems->item($i)->nodeValue; + if ($name == 'dc:coverage') { + $value = ''; } - else { - $field_type = 'textfield'; - $value = $dcItems->item($i)->nodeValue; - if ($name == 'dc:coverage') { - $value = ''; - } - if ($name == 'dc:rights') { - $field_type = 'textarea'; - } - $description = strstr($name, ':'); - $form["$name" . '-' . "$i"] = array( - '#title' => $name, - '#type' => $field_type, - '#default_value' => $value, - '#description' => 'Dublin Core ' . substr($description, 1) - ); + if ($name == 'dc:rights') { + $field_type = 'textarea'; } + $description = strstr($name, ':'); + $form["$name" . '-' . "$i"] = array( + '#title' => $name, + '#type' => $field_type, + '#default_value' => $value, + '#description' => 'Dublin Core ' . substr($description, 1) + ); } } + } + $form['pid'] = array( + '#type' => 'hidden', + '#value' => "$pid" + ); + $form['dsid'] = array( + '#type' => 'hidden', + '#value' => "$dsid" + ); + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Update Metadata'), + ); + return $form; + } - $form['pid'] = array( - '#type' => 'hidden', - '#value' => "$pid" - ); - $form['dsid'] = array( - '#type' => 'hidden', - '#value' => "$dsId" - ); - $form['submit'] = array( - '#type' => 'submit', - '#value' => t('Update Metadata'), - ); - - return $form; + /** + * Creates a drupal form to edit either the QDC or DC datastream + */ + function createMetaDataForm($pid, $dsid, $client, &$form_state) { + if (module_exists('islandora_content_model_forms')) { + module_load_include('inc', 'islandora_content_model_forms', 'EditObjectMetadataForm'); + try { + $form = new EditObjectMetadataForm($form_state); + return $form->create($pid, $client, $form_state); + } catch (Exception $e) { + $form_state['storage']['xml'] = false; // An error occured revert back to the QDC Form. + } } + return $this->createQDCEditForm($pid, $dsid, $client, $form_state); } /**