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');