From 5c3cc3411ee18639a8107797c1899a9a4db85da7 Mon Sep 17 00:00:00 2001 From: rwincewicz Date: Wed, 30 May 2012 15:52:43 -0300 Subject: [PATCH 1/7] Added policy control to create child collection --- .../includes/ChildCollection.inc | 59 ++++++++++++++----- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/islandora_basic_collection/includes/ChildCollection.inc b/islandora_basic_collection/includes/ChildCollection.inc index 12382cfa..ed6728d9 100644 --- a/islandora_basic_collection/includes/ChildCollection.inc +++ b/islandora_basic_collection/includes/ChildCollection.inc @@ -28,6 +28,9 @@ function islandora_create_child_collection_form($form, &$form_state, $this_colle } } $collection_namespace = substr($this_collection_pid, 0, strpos($this_collection_pid, ":")); + + $content_models = get_content_models_as_option_array(); + unset($content_models['islandora:collectionCModel']); $form['child_creation']['titlebox'] = array( '#type' => 'item', @@ -73,6 +76,13 @@ function islandora_create_child_collection_form($form, &$form_state, $this_colle '#value' => $this_collection_pid, ); + $form['child_creation']['content_models'] = array( + '#title' => "Choose allowable content models for this collection", + '#type' => 'checkboxes', + '#options' => $content_models, + '#description' => t("Content models describe the behaviours of objects with which they are associated."), + ); + $form['child_creation']['submit'] = array( '#type' => 'submit', '#value' => t('Create collection'), @@ -86,16 +96,42 @@ function islandora_create_child_collection_form_validate($form, &$form_state) { } function islandora_create_child_collection_form_submit($form, &$form_state) { - global $base_url; + global $base_root; module_load_include('inc', 'islandora', '/includes/islandora.ingest'); - $thumbnail = $base_url . '/' . drupal_get_path('module', 'islandora_basic_collection') . '/Crystal_Clear_filesystem_folder_grey.png'; + $thumbnail = $base_root . '/' . drupal_get_path('module', 'islandora_basic_collection') . '/Crystal_Clear_filesystem_folder_grey.png'; $new_collection_pid = $form_state['values']['new_collection_pid']; $new_collection_label = $form_state['values']['collection_name']; $namespace = $form_state['values']['collection_namespace']; // $all_cModels = get_content_models_as_option_array(); - $content_models = array(array('pid' => 'islandora:collectionCModel')); - $relationship = 'isMemberOfCollection'; + $content_models = array('islandora:collectionCModel'); + $relationship = array( + 'uri' => FEDORA_RELS_EXT_URI, + 'value' => 'isMemberOfCollection', + ); + $collection_policy = ' + + + + + + + + isMemberOfCollection +'; + + $content_models = $form_state['values']['content_models']; + $collection_policy_xml = new SimpleXMLElement($collection_policy); + foreach ($content_models as $content_model) { + if ($content_model) { + $node = $collection_policy_xml->content_models->addChild('content_model'); + $node->addAttribute('dsid', 'ISLANDORACM'); + $node->addAttribute('name', $all_cModels[$content_model]); + $node->addAttribute('namespace', $pid_namespace . ':1'); + $node->addAttribute('pid', $content_model); + } + } + $fedora_object = islandora_ingest_get_object($content_models, $form_state['values']['current'], $relationship, $new_collection_pid); $fedora_object->label = $new_collection_label; $thumbnail_datastream = $fedora_object->constructDatastream('TN'); @@ -103,18 +139,11 @@ function islandora_create_child_collection_form_submit($form, &$form_state) { $thumbnail_datastream->label = 'Thumbnail'; $thumbnail_datastream->mimetype = 'image/png'; $fedora_object->ingestDatastream($thumbnail_datastream); + $policy_datastream = $fedora_object->constructDatastream(variable_get('Islandora_Collection_Policy_DSID', 'COLLECTION_POLICY'), 'X'); + $policy_datastream->setContentFromString($collection_policy_xml->saveXML()); + $policy_datastream->label = 'Collection policy'; + $fedora_object->ingestDatastream($policy_datastream); $new_fedora_object = islandora_ingest_add_object($fedora_object); -// $content_models = $form_state['values']['content_models']; -// $collection_policy_xml = simplexml_load_string($collection_policy); -// foreach ($content_models as $content_model) { -// if ($content_model) { -// $node = $collection_policy_xml->content_models->addChild('content_model'); -// $node->addAttribute('dsid', 'ISLANDORACM'); -// $node->addAttribute('name', $all_cModels[$content_model]); -// $node->addAttribute('namespace', $pid_namespace . ':1'); -// $node->addAttribute('pid', $content_model); -// } -// } drupal_goto('/islandora/object/' . $new_collection_pid); } \ No newline at end of file From 8c4ca4fb1e97f71410186fae7c1ca14d37802279 Mon Sep 17 00:00:00 2001 From: rwincewicz Date: Thu, 31 May 2012 08:03:06 -0300 Subject: [PATCH 2/7] Added collection policy creation to create child collection --- .../includes/ChildCollection.inc | 89 ++-- .../includes/CollectionManagement.inc | 431 +----------------- 2 files changed, 48 insertions(+), 472 deletions(-) diff --git a/islandora_basic_collection/includes/ChildCollection.inc b/islandora_basic_collection/includes/ChildCollection.inc index ed6728d9..5780f296 100644 --- a/islandora_basic_collection/includes/ChildCollection.inc +++ b/islandora_basic_collection/includes/ChildCollection.inc @@ -28,7 +28,7 @@ function islandora_create_child_collection_form($form, &$form_state, $this_colle } } $collection_namespace = substr($this_collection_pid, 0, strpos($this_collection_pid, ":")); - + $content_models = get_content_models_as_option_array(); unset($content_models['islandora:collectionCModel']); @@ -81,8 +81,8 @@ function islandora_create_child_collection_form($form, &$form_state, $this_colle '#type' => 'checkboxes', '#options' => $content_models, '#description' => t("Content models describe the behaviours of objects with which they are associated."), - ); - + ); + $form['child_creation']['submit'] = array( '#type' => 'submit', '#value' => t('Create collection'), @@ -92,24 +92,21 @@ function islandora_create_child_collection_form($form, &$form_state, $this_colle } function islandora_create_child_collection_form_validate($form, &$form_state) { - + } function islandora_create_child_collection_form_submit($form, &$form_state) { - global $base_root; + global $base_url; module_load_include('inc', 'islandora', '/includes/islandora.ingest'); - $thumbnail = $base_root . '/' . drupal_get_path('module', 'islandora_basic_collection') . '/Crystal_Clear_filesystem_folder_grey.png'; - $new_collection_pid = $form_state['values']['new_collection_pid']; - $new_collection_label = $form_state['values']['collection_name']; - $namespace = $form_state['values']['collection_namespace']; -// $all_cModels = get_content_models_as_option_array(); - $content_models = array('islandora:collectionCModel'); - $relationship = array( - 'uri' => FEDORA_RELS_EXT_URI, - 'value' => 'isMemberOfCollection', - ); + $thumbnail = $base_url . '/' . drupal_get_path('module', 'islandora_basic_collection') . '/Crystal_Clear_filesystem_folder_grey.png'; + $new_collection_pid = $form_state['values']['new_collection_pid']; + $new_collection_label = $form_state['values']['collection_name']; + $namespace = $form_state['values']['collection_namespace']; + $all_cModels = get_content_models_as_option_array(); + $collection_content_models = array(array('pid' => 'islandora:collectionCModel')); + $relationship = 'isMemberOfCollection'; - $collection_policy = ' + $collection_policy = ' @@ -119,31 +116,37 @@ function islandora_create_child_collection_form_submit($form, &$form_state) { isMemberOfCollection '; - - $content_models = $form_state['values']['content_models']; - $collection_policy_xml = new SimpleXMLElement($collection_policy); - foreach ($content_models as $content_model) { - if ($content_model) { - $node = $collection_policy_xml->content_models->addChild('content_model'); - $node->addAttribute('dsid', 'ISLANDORACM'); - $node->addAttribute('name', $all_cModels[$content_model]); - $node->addAttribute('namespace', $pid_namespace . ':1'); - $node->addAttribute('pid', $content_model); - } - } - - $fedora_object = islandora_ingest_get_object($content_models, $form_state['values']['current'], $relationship, $new_collection_pid); - $fedora_object->label = $new_collection_label; - $thumbnail_datastream = $fedora_object->constructDatastream('TN'); - $thumbnail_datastream->setContentFromUrl($thumbnail); - $thumbnail_datastream->label = 'Thumbnail'; - $thumbnail_datastream->mimetype = 'image/png'; - $fedora_object->ingestDatastream($thumbnail_datastream); - $policy_datastream = $fedora_object->constructDatastream(variable_get('Islandora_Collection_Policy_DSID', 'COLLECTION_POLICY'), 'X'); - $policy_datastream->setContentFromString($collection_policy_xml->saveXML()); - $policy_datastream->label = 'Collection policy'; - $fedora_object->ingestDatastream($policy_datastream); - $new_fedora_object = islandora_ingest_add_object($fedora_object); - - drupal_goto('/islandora/object/' . $new_collection_pid); + + $content_models = $form_state['values']['content_models']; + + $collection_policy_xml = new DOMDocument(); + $collection_policy_xml->loadXML($collection_policy); + + $content_models_element = $collection_policy_xml->getElementsByTagName('content_models'); + $content_model_element = $content_models_element->item(0)->getElementsByTagName('content_model'); + foreach ($content_models as $content_model) { + if ($content_model) { + $content_model_element = $collection_policy_xml->createElement('content_model'); + $content_model_element->setAttribute('name', $all_cModels[$content_model]); + $content_model_element->setAttribute('dsid', variable_get('Islandora_Content_Model_DSID', 'ISLANDORACM')); + $content_model_element->setAttribute('namespace', $namespace . ':1'); + $content_model_element->setAttribute('pid', $content_model); + $content_models_element->item(0)->appendChild($content_model_element); + } + } + drupal_set_message($collection_policy_xml->saveXML()); + $fedora_object = islandora_ingest_get_object($collection_content_models, $form_state['values']['current'], $relationship, $new_collection_pid); + $fedora_object->label = $new_collection_label; + $thumbnail_datastream = $fedora_object->constructDatastream('TN'); + $thumbnail_datastream->setContentFromUrl($thumbnail); + $thumbnail_datastream->label = 'Thumbnail'; + $thumbnail_datastream->mimetype = 'image/png'; + $fedora_object->ingestDatastream($thumbnail_datastream); + $policy_datastream = $fedora_object->constructDatastream(variable_get('Islandora_Collection_Policy_DSID', 'COLLECTION_POLICY'), 'X'); + $policy_datastream->setContentFromString($collection_policy_xml->saveXML()); + $policy_datastream->label = 'Collection policy'; + $fedora_object->ingestDatastream($policy_datastream); + $new_fedora_object = islandora_ingest_add_object($fedora_object); + + drupal_goto('/islandora/object/' . $new_collection_pid); } \ No newline at end of file diff --git a/islandora_basic_collection/includes/CollectionManagement.inc b/islandora_basic_collection/includes/CollectionManagement.inc index d72bf080..52db0dfb 100644 --- a/islandora_basic_collection/includes/CollectionManagement.inc +++ b/islandora_basic_collection/includes/CollectionManagement.inc @@ -5,409 +5,6 @@ * CollectionManagement.inc */ -/** - * collection creation form - * @param array $form_state - * @param string $parent_collection_pid - * @param string $content_models - * @return array - */ -function collection_management_form($this_collection_pid, $content_models) { - module_load_include('inc', 'fedora_repository', 'api/fedora_utils'); - module_load_include('inc', 'fedora_repository', 'CollectionPolicy'); - $restricted = FALSE; - if (variable_get('fedora_namespace_restriction_enforced', TRUE)) { - $restricted = TRUE; - $allowed_string = variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora:'); - $namespaces = explode(':', $allowed_string); - foreach ($namespaces as $namespace) { - if ($namespace) { - $allowed[trim($namespace)] = trim($namespace); - } - } - } - $collection_policy = CollectionPolicy::loadFromCollection($this_collection_pid); - - if ($collection_policy) { - $supported_collection_models = $collection_policy->getContentModels(); - } - $collection_namespace = substr($this_collection_pid, 0, strpos($this_collection_pid, ":")); - - $represented_content_models = get_represented_content_models($this_collection_pid); - $item = new Fedora_Item($this_collection_pid); - $collection_name = $item->objectProfile->objLabel; - $new_content_models = get_content_models_as_option_array(); - $current_models_in_policy = array(); - - if ($supported_collection_models) { - foreach ($supported_collection_models as $supported_model) { - $current_models_in_policy[$supported_model->pid] = $supported_model->pid; - } - } - $cm_options = array(); - $name_mappings = array(); - foreach ($content_models as $content_model) { - if ($content_model->pid != "islandora:collectionCModel") { - $item = new fedora_item($content_model->pid); - $cm_name = $item->objectProfile->objLabel; - $cm_options[$content_model->pid] = $cm_name; - } - } - - if (!empty($current_models_in_policy)) { - $show_delete = TRUE; - } - - - $content_models = get_content_models_as_option_array(); - unset($content_models['islandora:collectionCModel']); - - $form['child_creation'] = array( - '#title' => "Create Child Collection", - '#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => TRUE, - ); - - $form['child_creation']['titlebox'] = array( - '#type' => 'item', - '#value' => t("Create New Child Collection within $this_collection_pid"), - ); - - $form['child_creation']['collection_name'] = array( - '#title' => "Collection Name", - '#type' => 'textfield', - '#description' => t("Human readable name for this collection"), - ); - - $form['child_creation']['new_collection_pid'] = array( - '#title' => "Collection PID", - '#type' => 'textfield', - '#size' => 15, - '#default_value' => Fedora_Item::get_next_PID_in_namespace($collection_namespace), - '#description' => t("Unique PID for this collection.
Pids take the general form of namespace:collection eg islandora:pamphlets"), - ); - if (!$restricted) { - $form['child_creation']['collection_namespace'] = array( - '#title' => "Collection Namespace", - '#type' => 'textfield', - '#size' => 15, - '#default_value' => $collection_namespace, - '#description' => t("Namespace for objects in this collection."), - ); - } - else { - $form['child_creation']['collection_namespace'] = array( - '#title' => "Collection Namespace", - '#type' => 'select', - '#options' => $allowed, - '#default_value' => 'default', - '#description' => t("Namespace for objects in this collection."), - ); - } - $form['parent_collection'] = array( - '#type' => 'hidden', - '#value' => $this_collection_pid, - ); - - $form['collection_pid'] = array( - '#type' => 'hidden', - '#value' => $this_collection_pid, - ); - $form['child_creation']['content_models'] = array( - '#title' => "Choose allowable content models for this collection", - '#type' => 'checkboxes', - '#options' => $content_models, - '#description' => t("Content models describe the behaviours of objects with which they are associated."), - ); - - - $form['child_creation']['submit'] = array( - '#type' => 'submit', - '#value' => t('Create Collection'), - '#id' => 'create_child' - ); - $form['manage_collection_policy'] = array( - '#title' => "Manage Collection Policies", - '#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => TRUE, - ); - - $form['manage_collection_policy']['add'] = array( - '#title' => "Add Content Model to Collection Policy", - '#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => $show_delete, - ); - - $new_options = array(); - if (is_array($content_models) && is_array($cm_options)) { - $new_options = array_diff_key($content_models, $cm_options); - } - - $form ['manage_collection_policy']['add']['content_model_to_add'] = array( - '#title' => "Choose Content Model", - '#type' => 'select', - '#options' => $new_options, - '#description' => t("Choose content model to add to this collection policy."), - ); - - $form ['manage_collection_policy']['add']['new_cp_namespace'] = array( - '#title' => "Choose Namespace", - '#type' => 'textfield', - '#size' => 15, - '#default_value' => $collection_namespace, - '#description' => t("Choose namespace for objects in this collection associated with this content model"), - ); - $form['manage_collection_policy']['add']['submit'] = array( - '#type' => 'submit', - '#value' => t('Add Content Model to Collection Policy'), - '#id' => 'add_cm' - ); - - if (count($current_models_in_policy) > 0) { - $form['manage_collection_policy']['remove'] = array( - '#title' => "Delete Content Model from Collection Policy", - '#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => TRUE, - ); - - $form ['manage_collection_policy']['remove']['content_models_to_remove'] = array( - '#title' => "Choose Content Model to Remove", - '#type' => 'checkboxes', - '#options' => $current_models_in_policy, - '#description' => t("Choose content models to remove from this collection policy."), - ); - - - $form['manage_collection_policy']['remove']['submit'] = array( - '#type' => 'submit', - '#value' => t('Remove Content Model From Collection Policy'), - '#id' => 'remove_cm' - ); - } - - - $form['change_cmodel'] = array( - '#title' => "Change Content Models", - '#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => TRUE, - ); - - $form['change_cmodel']['titlebox'] = array( - '#type' => 'item', - '#value' => t("Change Content Models within $this_collection_pid"), - ); - - $form['change_cmodel']['current_content_model'] = array( - '#title' => "Choose content model to be changed", - '#type' => 'select', - '#options' => $represented_content_models, - '#description' => t("All objects in this collection with the selected content model will be changed."), - ); - $form['change_cmodel']['new_content_model'] = array( - '#title' => "Choose new content model", - '#type' => 'select', - '#options' => $new_content_models, - '#description' => t("The new content model to be assigned to selected objects."), - ); - $form['change_cmodel']['collection_pid'] = array( - '#type' => 'hidden', - '#value' => $this_collection_pid, - ); - $form['change_cmodel']['submit'] = array( - '#type' => 'submit', - '#value' => t('Change Content Model Associations'), - '#id' => 'change_model', - ); - - return $form; -} - -/** - * collection creation form validate - * @param array $form - * @param array $form_state - */ -function collection_management_form_validate($form, &$form_state) { - if ($form_state['clicked_button']['#id'] == 'create_child') { - module_load_include('inc', 'fedora_repository', 'api/fedora_item'); - module_load_include('inc', 'fedora_repository', 'api/fedora_utils'); - $pid = $form_state['values']['new_collection_pid']; - $item = new fedora_item($pid); - $needs_model = FALSE; - foreach ($form_state['values']['content_models'] as $key => $value) { - if (is_string($value)) { - - $needs_model = FALSE; - } - } - $checked = array_values($form_state['values']['content_models']); - if ($item->exists()) { - form_set_error('new_collection_pid', t("$pid already exists within your repository. the PID must be unique. Click on 'Manage This Collection' tab and enter new value.")); - return; - } - if (!valid_pid($pid)) { - form_set_error('new_collection_pid', t("$pid is not a valid identifier. Click on 'Manage This Collection' tab and enter new value.")); - return; - } - if ($needs_model) { - form_set_error('content_models', t("At least one content model must be selected. Click on 'Manage This Collection' tab and enter content model.")); - return; - } - } - if ($form_state['clicked_button']['#id'] == 'add_cm') { - - $name_parts = explode(":", $form_state['values']['new_cp_namespace']); - $namespace = $name_parts[0] . ":1"; - if (!valid_pid($namespace)) { - form_set_error('new_cp_namespace', t("Namespace must be valid. Click on 'Manage This Collection' tab and enter new value.")); - - return; - } - $form_state['values']['new_cp_namespace'] = $namespace; - } -} - -/** - * collection creation form submit - * @global user $user - * @param arary $form - * @param array $form_state - */ -function collection_management_form_submit($form, &$form_state) { - module_load_include('inc', 'fedora_repository', 'api/fedora_collection'); - module_load_include('inc', 'fedora_repository', 'api/fedora_item'); - module_load_include('inc', 'fedora_repository', 'api/dublin_core'); - global $user; - $collection_pid = $form_state['values']['parent_collection']; - $policy = CollectionPolicy::loadFromCollection($collection_pid, TRUE); - $collection_policy = ' - - - - - - - - isMemberOfCollection -'; - - - // add child collection to policy - if ($form_state['clicked_button']['#id'] == 'create_child') { - $module_path = drupal_get_path('module', 'fedora_repository'); - $thumbnail = drupal_get_path('module', 'Fedora_Repository') . '/images/Crystal_Clear_filesystem_folder_grey.png'; - $new_collection_pid = $form_state['values']['new_collection_pid']; - $new_collection_label = $form_state['values']['collection_name']; - $pid_namespace = $form_state['values']['collection_namespace']; - $all_cModels = get_content_models_as_option_array(); - - $content_models = $form_state['values']['content_models']; - $collection_policy_xml = simplexml_load_string($collection_policy); - foreach ($content_models as $content_model) { - if ($content_model) { - $node = $collection_policy_xml->content_models->addChild('content_model'); - $node->addAttribute('dsid', 'ISLANDORACM'); - $node->addAttribute('name', $all_cModels[$content_model]); - $node->addAttribute('namespace', $pid_namespace . ':1'); - $node->addAttribute('pid', $content_model); - } - } - $item = fedora_item::ingest_new_item($new_collection_pid, 'A', $new_collection_label, $user->name); - $item->add_relationship('isMemberOfCollection', $collection_pid, RELS_EXT_URI); - $item->add_relationship('hasModel', 'islandora:collectionCModel', FEDORA_MODEL_URI); - $item->add_datastream_from_string($collection_policy_xml->saveXML(), 'COLLECTION_POLICY', 'COLLECTION_POLICY', 'text/xml', 'X'); - $item->add_datastream_from_file($thumbnail, 'TN'); - drupal_goto("/fedora/repository/$new_collection_pid"); - } - - - // add content model to collection policy - if ($form_state['clicked_button']['#id'] == 'add_cm') { - if (!$policy) { - $item = new Fedora_Item($collection_pid); - $item->add_datastream_from_string($collection_policy, 'COLLECTION_POLICY', 'COLLECTION_POLICY', 'text/xml', 'X'); - $policy = CollectionPolicy::loadFromCollection($collection_pid, TRUE); - } - - $cp_namespace = $form_state['values']['new_cp_namespace']; - $cp_content_model = $form_state['values']['content_model_to_add']; - $policy->addModel(ContentModel::loadFromModel($cp_content_model), $cp_namespace); - $policy->saveToFedora(); - drupal_set_message("Collection model successfully added"); - } - - //remove content model from collection policy - if ($form_state['clicked_button']['#id'] == 'remove_cm') { - $candidates = $form_state['values']['content_models_to_remove']; - $count = 0; - foreach ($candidates as $candidate) { - if (is_string($candidate)) { - $policy->removeModel(ContentModel::loadFromModel($candidate)); - $count++; - } - } - if ($count > 0) { - $policy->saveToFedora(); - if ($count > 1) { - $s = 's'; - } - drupal_set_message("$count collection model$s removed"); - } - } - - - //change content model on selected objects - if ($form_state['clicked_button']['#id'] == 'change_model') { - $current_content_model = $form_state['values']['current_content_model']; - $new_content_model = $form_state['values']['new_content_model']; - - $add_to_policy = TRUE; - $policy_cms = $policy->getContentModels(); - foreach ($policy_cms as $policy_cm) { - if ($policy_cm->pid == $current_content_model) { - $namespace = $policy_cm->pid_namespace; - } - if ($policy_cm->pid == $new_content_model) { - $add_to_policy = FALSE; - } - } - if ($add_to_policy) { - $policy->addModel(ContentModel::loadFromModel($new_content_model), $namespace); - $policy->saveToFedora(); - } - $query = "select \$object from <#ri> - where (\$object - and (\$object - or \$object ) - and \$object )"; - $query = htmlentities(urlencode($query)); - $content = ''; - - $url = variable_get('fedora_repository_url', 'http://localhost:8080/fedora/risearch'); - $url .= "?type=tuples&flush=TRUE&format=csv&limit=$limit&offset=$offset&lang=itql&stream=on&query=" . $query; - $content .= do_curl($url); - $results = explode("\n", $content); - $object_pids = preg_replace('/^info:fedora\/|"object"/', '', $results); - $count = 0; - foreach ($object_pids as $object_pid) { - if (!$object_pid) { - continue; - } - $item = new fedora_item($object_pid); - $item->purge_relationship('hasModel', $current_content_model); - $item->add_relationship('hasModel', $new_content_model, FEDORA_MODEL_URI); - $count++; - } - drupal_set_message("$current_content_model changed to $new_content_model on $count objects"); - } - -} - /** * deletes PID * @param string $pid @@ -546,22 +143,6 @@ function get_related_items_as_array($collection_pid, $relationship = array('isMe return $results; } - -//function get_related_items_as_array($collection_pid, $relationship = 'isMemberOfCollection', $limit = 10000, $offset = 0, $active_objects_only = TRUE, $cmodel = NULL, $orderby = '$title') { -// $content = get_related_items_as_xml($collection_pid, $relationship, $limit, $offset, $active_objects_only, $cmodel, $orderby); -// if (empty($content)) { -// return array(); -// } -// -// $content = new SimpleXMLElement($content); -// -// $resultsarray = array(); -// foreach ($content->results->result as $result) { -// $resultsarray[] = substr($result->object->attributes()->uri, 12); // Remove 'info:fedora/'. -// } -// return $resultsarray; -//} - /** * gets the name of the content models for the specified object * this now returns an array of pids as in Fedora 3 we can have more then one Cmodel for an object @@ -570,9 +151,7 @@ function get_related_items_as_array($collection_pid, $relationship = array('isMe * @return array */ function get_content_models_list($pid, $include_fedora_system_content_models = FALSE) { -// module_load_include('inc', 'fedora_repository', 'CollectionClass'); -// module_load_include('inc', 'fedora_repository', 'ContentModel'); -// $collectionHelper = new CollectionClass(); + module_load_include('inc', 'islandora', 'RestConnection'); require_once 'sites/all/libraries/tuque/RepositoryQuery.php'; $rest_connection = new RestConnection(); @@ -580,7 +159,6 @@ function get_related_items_as_array($collection_pid, $relationship = array('isMe $query = 'select $object from <#ri> where $object and $object '; -// $content_models = $collectionHelper->getRelatedItems($pid, $query); $content_models = $rest_connection->repository->ri->itqlQuery($query, 'unlimited', '0'); if (empty($content_models)) { @@ -593,16 +171,12 @@ function get_related_items_as_array($collection_pid, $relationship = array('isMe continue; } $cmodels[] = substr(strstr($content_model['object']['uri'], '/'), 1); -// $cm = ContentModel::loadFromModel($cmodel_pid); -// if ($cm) { -// $cmodels[] = $cm; -// } } return $cmodels; } - /** + /** * Function: get_content_models_as_option_array * * Description: Returns an associative array of all available content models in Fedora instance @@ -649,7 +223,6 @@ function get_content_models_as_option_array() { function getContentModels($collection_pid, $showError = TRUE) { module_load_include('inc', 'islandora', 'RestConnection'); $rest_connection = new RestConnection(); -// module_load_include('inc', 'Fedora_Repository', 'ContentModel'); $collection_stream = $this->getCollectionPolicyStream($collection_pid); $collection_object = new FedoraObject($collection_pid, $rest_connection->repository); $collection_stream = $collection_object->getDatastream('COLLECTION_POLICY'); From 52b45beba9c8f17bdb3d674587c656d85fce9cb8 Mon Sep 17 00:00:00 2001 From: rwincewicz Date: Thu, 31 May 2012 09:49:34 -0300 Subject: [PATCH 3/7] Updated islandora.module --- islandora_basic_collection/includes/ChildCollection.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/islandora_basic_collection/includes/ChildCollection.inc b/islandora_basic_collection/includes/ChildCollection.inc index 5780f296..757fb491 100644 --- a/islandora_basic_collection/includes/ChildCollection.inc +++ b/islandora_basic_collection/includes/ChildCollection.inc @@ -142,7 +142,7 @@ function islandora_create_child_collection_form_submit($form, &$form_state) { $thumbnail_datastream->label = 'Thumbnail'; $thumbnail_datastream->mimetype = 'image/png'; $fedora_object->ingestDatastream($thumbnail_datastream); - $policy_datastream = $fedora_object->constructDatastream(variable_get('Islandora_Collection_Policy_DSID', 'COLLECTION_POLICY'), 'X'); + $policy_datastream = $fedora_object->constructDatastream(variable_get('Islandora_Collection_Policy_DSID', 'COLLECTION_POLICY'), 'M'); $policy_datastream->setContentFromString($collection_policy_xml->saveXML()); $policy_datastream->label = 'Collection policy'; $fedora_object->ingestDatastream($policy_datastream); From 75873d3ec14d10b0b5360ab678e92d952e8051d7 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 31 May 2012 11:20:52 -0300 Subject: [PATCH 4/7] Updated ingest function. --- includes/islandora.ingest.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/islandora.ingest.inc b/includes/islandora.ingest.inc index 7878c9d5..b4c44720 100644 --- a/includes/islandora.ingest.inc +++ b/includes/islandora.ingest.inc @@ -21,7 +21,7 @@ function islandora_ingest_get_object($content_models, $collection_pid, $relation } function islandora_ingest_add_object(&$object) { - //$object->repository->ingestObject($object); + $object->repository->ingestObject($object); module_invoke_all('islandora_ingest_post_ingest', $object); return $object; } \ No newline at end of file From cc6f5a956af54500e7e5cffd646eb10d076a70dd Mon Sep 17 00:00:00 2001 From: rwincewicz Date: Thu, 31 May 2012 11:29:20 -0300 Subject: [PATCH 5/7] Fixed collection policy for create child collection function --- islandora.module | 33 +++++++++++++++++-- .../includes/ChildCollection.inc | 3 +- .../includes/MoveCollection.inc | 6 +++- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/islandora.module b/islandora.module index 50cb36ba..035bae28 100644 --- a/islandora.module +++ b/islandora.module @@ -191,8 +191,8 @@ function islandora_menu() { $items['islandora/object/%/datastream/%/delete'] = array( 'title' => 'Purge data stream', - 'page callback' => 'islandora_purge_datastream', - 'page arguments' => array(2, 4), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('islandora_purge_datastream', 2, 4), 'type' => MENU_CALLBACK, 'access arguments' => array(FEDORA_PURGE), ); @@ -412,6 +412,31 @@ function islandora_islandora_edit_object($fedora_object) { return array('Default Edit output' => $output); } + +function islandora_purge_datastream($form, &$form_state, $object_id, $datastream_id) { + module_load_include('inc', 'islandora', 'RestConnection'); + module_load_include('inc', 'islandora', 'includes/datastream'); + + $connection = new RestConnection(); + $object = $connection->repository->getObject($object_id); + $datastream = $object->getDatastream($datastream_id); + + $redirect = "islandora/object/$object_id"; + + // Always provide entity id in the same form key as in the entity edit form. + $form['pid'] = array('#type' => 'value', '#value' => $object_id); + $form['dsid'] = array('#type' => 'value', '#value' => $datastream_id); + $form['col'] = array('#type' => 'value', '#value' => $redirect); + + return confirm_form($form, + t('Are you sure you want to delete the %dsid datastream?', array('%dsid' => $datastream->id)), + "islandora/object/$object_id", + t('This action cannot be undone.'), + t('Delete'), + t('Cancel') + ); +} + /** * Gives the option of purging or deleting a datastream. * @@ -427,8 +452,10 @@ function islandora_islandora_edit_object($fedora_object) { * ID of the datastream * */ -function islandora_purge_datastream($object_id, $datastream_id) { +function islandora_purge_datastream_submit($form, &$form_state) { module_load_include('inc', 'islandora', 'RestConnection'); + $object_id = $form_state['values']['pid']; + $datastream_id = $form_state['values']['dsid']; global $user; if (!isset($datastream_id)) { drupal_set_message(t('Cannot remove datastream, datastream id not set')); diff --git a/islandora_basic_collection/includes/ChildCollection.inc b/islandora_basic_collection/includes/ChildCollection.inc index 757fb491..278d0dc0 100644 --- a/islandora_basic_collection/includes/ChildCollection.inc +++ b/islandora_basic_collection/includes/ChildCollection.inc @@ -134,7 +134,6 @@ function islandora_create_child_collection_form_submit($form, &$form_state) { $content_models_element->item(0)->appendChild($content_model_element); } } - drupal_set_message($collection_policy_xml->saveXML()); $fedora_object = islandora_ingest_get_object($collection_content_models, $form_state['values']['current'], $relationship, $new_collection_pid); $fedora_object->label = $new_collection_label; $thumbnail_datastream = $fedora_object->constructDatastream('TN'); @@ -142,7 +141,7 @@ function islandora_create_child_collection_form_submit($form, &$form_state) { $thumbnail_datastream->label = 'Thumbnail'; $thumbnail_datastream->mimetype = 'image/png'; $fedora_object->ingestDatastream($thumbnail_datastream); - $policy_datastream = $fedora_object->constructDatastream(variable_get('Islandora_Collection_Policy_DSID', 'COLLECTION_POLICY'), 'M'); + $policy_datastream = $fedora_object->constructDatastream(variable_get('Islandora_Collection_Policy_DSID', 'COLLECTION_POLICY'), 'X'); $policy_datastream->setContentFromString($collection_policy_xml->saveXML()); $policy_datastream->label = 'Collection policy'; $fedora_object->ingestDatastream($policy_datastream); diff --git a/islandora_basic_collection/includes/MoveCollection.inc b/islandora_basic_collection/includes/MoveCollection.inc index 26ff05d1..868b9892 100644 --- a/islandora_basic_collection/includes/MoveCollection.inc +++ b/islandora_basic_collection/includes/MoveCollection.inc @@ -17,7 +17,11 @@ function islandora_collection_migrate_form($form, &$form_state, $pid) { $potential_collections = get_collections_as_option_array(); $table = islandora_collection_table($pid); if (!$table) { - return; + $form['no_objects'] = array( + '#type' => 'item', + '#title' => t('No objects found in this collection'), + ); + return $form; } $form = array(); From 822e945ff79830b05806d0642ec354f66fb2eec9 Mon Sep 17 00:00:00 2001 From: rwincewicz Date: Thu, 31 May 2012 11:52:47 -0300 Subject: [PATCH 6/7] Cleanup in collection manager and addition of hook to add in new collection management functions --- .../includes/ChangeContentModels.inc | 2 +- .../includes/ChildCollection.inc | 2 +- .../includes/CollectionManagement.inc | 18 +++++++++--------- .../includes/ManagePolicies.inc | 8 ++++---- .../includes/MoveCollection.inc | 2 +- .../islandora_basic_collection.module | 19 ++++++++++--------- 6 files changed, 26 insertions(+), 25 deletions(-) diff --git a/islandora_basic_collection/includes/ChangeContentModels.inc b/islandora_basic_collection/includes/ChangeContentModels.inc index 4448c57b..6ae8b9b2 100644 --- a/islandora_basic_collection/includes/ChangeContentModels.inc +++ b/islandora_basic_collection/includes/ChangeContentModels.inc @@ -46,7 +46,7 @@ function islandora_change_content_models_form($form, &$form_state, $collection_p $form['change_cmodel']['titlebox'] = array( '#type' => 'item', - '#title' => t("Change Content Models within @collection_pid", array('@collection_pid' => $collection_pid)), + '#title' => t("Change content models within @collection_pid", array('@collection_pid' => $collection_pid)), ); $form['change_cmodel']['current_content_model'] = array( diff --git a/islandora_basic_collection/includes/ChildCollection.inc b/islandora_basic_collection/includes/ChildCollection.inc index 278d0dc0..40955402 100644 --- a/islandora_basic_collection/includes/ChildCollection.inc +++ b/islandora_basic_collection/includes/ChildCollection.inc @@ -34,7 +34,7 @@ function islandora_create_child_collection_form($form, &$form_state, $this_colle $form['child_creation']['titlebox'] = array( '#type' => 'item', - '#title' => t("Create New Child Collection within @collection", array('@collection' => $this_collection_pid)), + '#title' => t("Create new child collection within @collection", array('@collection' => $this_collection_pid)), ); $form['child_creation']['collection_name'] = array( diff --git a/islandora_basic_collection/includes/CollectionManagement.inc b/islandora_basic_collection/includes/CollectionManagement.inc index 52db0dfb..8cfcc046 100644 --- a/islandora_basic_collection/includes/CollectionManagement.inc +++ b/islandora_basic_collection/includes/CollectionManagement.inc @@ -72,7 +72,7 @@ EOD; return $collection_pids; } -function Islandora_collections_get_collection_from_pid($pid) { +function islandora_collections_get_collection_from_pid($pid) { module_load_include('inc', 'islandora', 'RestConnection'); $rest_connection = new RestConnection(); require_once 'sites/all/libraries/tuque/RepositoryQuery.php'; @@ -220,7 +220,7 @@ function get_content_models_as_option_array() { return $options; } - function getContentModels($collection_pid, $showError = TRUE) { + function get_content_models($collection_pid, $show_error = TRUE) { module_load_include('inc', 'islandora', 'RestConnection'); $rest_connection = new RestConnection(); $collection_stream = $this->getCollectionPolicyStream($collection_pid); @@ -229,18 +229,18 @@ function get_content_models_as_option_array() { try { $xml = new SimpleXMLElement($collection_stream); } catch (Exception $e) { - if ($showError) { + if ($show_error) { drupal_set_message(t('@e', array('@e' => check_plain($e->getMessage()))), 'error'); } return NULL; } foreach ($xml->contentmodels->contentmodel as $content_model) { - $contentModel = new ContentModel(); - $contentModel->contentModelDsid = $content_model->dsid; - $contentModel->contentModelPid = $content_model->pid; - $contentModel->pidNamespace = $content_model->pidNamespace; - $contentModel->contentModelName = $content_model['name']; - $models[] = $contentModel; + $content_model_object = new ContentModel(); + $content_model_object->contentModelDsid = $content_model->dsid; + $content_model_object->contentModelPid = $content_model->pid; + $content_model_object->pidNamespace = $content_model->pidNamespace; + $content_model_object->contentModelName = $content_model['name']; + $models[] = $content_model_object; } return $models; } \ No newline at end of file diff --git a/islandora_basic_collection/includes/ManagePolicies.inc b/islandora_basic_collection/includes/ManagePolicies.inc index d4924c1b..60f4d0ce 100644 --- a/islandora_basic_collection/includes/ManagePolicies.inc +++ b/islandora_basic_collection/includes/ManagePolicies.inc @@ -63,14 +63,14 @@ function islandora_manage_policies_form($form, &$form_state, $collection_pid) { ); $form ['manage_collection_policy']['add']['content_model_to_add'] = array( - '#title' => "Choose Content Model", + '#title' => "Choose content model", '#type' => 'select', '#options' => $new_options, '#description' => t("Choose content model to add to this collection policy."), ); $form ['manage_collection_policy']['add']['new_cp_namespace'] = array( - '#title' => "Choose Namespace", + '#title' => "Choose namespace", '#type' => 'textfield', '#size' => 15, '#default_value' => $namespace, @@ -95,14 +95,14 @@ function islandora_manage_policies_form($form, &$form_state, $collection_pid) { if (count($current_models_in_policy) > 0) { $form['manage_collection_policy']['remove'] = array( - '#title' => "Delete Content Model from Collection Policy", + '#title' => "Delete content model from collection policy", '#type' => 'fieldset', '#collapsible' => TRUE, '#collapsed' => TRUE, ); $form ['manage_collection_policy']['remove']['content_models_to_remove'] = array( - '#title' => "Choose Content Model to Remove", + '#title' => "Choose content model to remove", '#type' => 'checkboxes', '#options' => $current_models_in_policy, '#description' => t("Choose content models to remove from this collection policy."), diff --git a/islandora_basic_collection/includes/MoveCollection.inc b/islandora_basic_collection/includes/MoveCollection.inc index 868b9892..e5e3aa7a 100644 --- a/islandora_basic_collection/includes/MoveCollection.inc +++ b/islandora_basic_collection/includes/MoveCollection.inc @@ -31,7 +31,7 @@ function islandora_collection_migrate_form($form, &$form_state, $pid) { ); $form['migrate']['new_collection'] = array( - '#title' => t('New Collection'), + '#title' => t('New collection'), '#description' => t("All content will be migrated from @pid to the selected collection", array('@pid' => $pid)), '#type' => 'select', '#options' => $potential_collections, diff --git a/islandora_basic_collection/islandora_basic_collection.module b/islandora_basic_collection/islandora_basic_collection.module index 4a9e8bda..2574570a 100644 --- a/islandora_basic_collection/islandora_basic_collection.module +++ b/islandora_basic_collection/islandora_basic_collection.module @@ -30,7 +30,7 @@ function islandora_basic_collection_menu() { $items = array(); $items['islandora/object/%/manage/collection'] = array( - 'title' => 'Collection Related', + 'title' => 'Collection related', 'page callback' => 'islandora_basic_collection_manage_object', 'page arguments' => array(2), 'type' => MENU_LOCAL_TASK, @@ -39,7 +39,7 @@ function islandora_basic_collection_menu() { ); $items['admin/islandora/basic_collection'] = array( - 'title' => 'Islandora Basic Collection', + 'title' => 'Islandora basic collection', 'description' => 'Configure the basic Collection solution pack.', 'page callback' => 'drupal_get_form', 'access arguments' => array('administer site configuration'), @@ -105,7 +105,7 @@ function islandora_basic_collection_manage_object($object_id) { ); $form['collection_manager']['create_child_collection'] = array( - '#title' => t('Create Child Collection'), + '#title' => t('Create child collection'), '#type' => 'fieldset', ); @@ -113,7 +113,7 @@ function islandora_basic_collection_manage_object($object_id) { $form['collection_manager']['manage_policies'] = array( '#type' => 'fieldset', - '#title' => t('Manage Collection Policies'), + '#title' => t('Manage collection policies'), '#collapsible' => TRUE, '#collapsed' => TRUE, ); @@ -122,7 +122,7 @@ function islandora_basic_collection_manage_object($object_id) { $form['collection_manager']['change_content_models'] = array( '#type' => 'fieldset', - '#title' => t('Change Content Models'), + '#title' => t('Change content models'), '#collapsible' => TRUE, '#collapsed' => TRUE, ); @@ -131,7 +131,7 @@ function islandora_basic_collection_manage_object($object_id) { $form['collection_manager']['migrate_members'] = array( '#type' => 'fieldset', - '#title' => t('Migrate Members'), + '#title' => t('Migrate members'), '#collapsible' => TRUE, '#collapsed' => TRUE, ); @@ -140,16 +140,17 @@ function islandora_basic_collection_manage_object($object_id) { $form['collection_manager']['delete_members'] = array( '#type' => 'fieldset', - '#title' => t('Delete Members of this Collection'), + '#title' => t('Delete members of this collection'), '#collapsible' => TRUE, '#collapsed' => TRUE, ); $form['collection_manager']['delete_members']['form'] = drupal_get_form('islandora_collection_deletion_form', $object_id); + + // Pass the form around any modules that are interested so that they can add their own collection management functions. + module_invoke_all('islandora_collection_manager', $form); return $form; - -// return 'Collection CModel edit function ' . $object_id; } /** From 8a3b1a74ead31533111d8309ad5debd3cf61acee Mon Sep 17 00:00:00 2001 From: rwincewicz Date: Thu, 31 May 2012 12:01:07 -0300 Subject: [PATCH 7/7] Removed ISLANDORACM from basic image content model --- .../xml/simple_islandora_basic_imageCM.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/islandora_basic_image/xml/simple_islandora_basic_imageCM.xml b/islandora_basic_image/xml/simple_islandora_basic_imageCM.xml index 356f6d52..d41539a6 100644 --- a/islandora_basic_image/xml/simple_islandora_basic_imageCM.xml +++ b/islandora_basic_image/xml/simple_islandora_basic_imageCM.xml @@ -39,9 +39,6 @@ PID="islandora:sp_basic_image">
- -
- @@ -67,9 +64,4 @@ PID="islandora:sp_basic_image"> - - - - - \ No newline at end of file