diff --git a/CollectionClass.inc b/CollectionClass.inc
index b486f2ce..70a273cd 100644
--- a/CollectionClass.inc
+++ b/CollectionClass.inc
@@ -1,18 +1,16 @@
collectionPolicyStream != NULL) {
return $this->collectionPolicyStream;
@@ -111,11 +104,6 @@ class CollectionClass {
return $this->collectionPolicyStream;
}
- /**
- * getRelationshipElement
- * @param type $collection_pid
- * @return type
- */
function getRelationshipElement($collection_pid) {
$stream = $this->getCollectionPolicyStream($collection_pid);
try {
@@ -128,35 +116,17 @@ class CollectionClass {
return $relationship;
}
- /**
- * getCollectionViewStream ??
- * @param type $collection_pid
- * @return type
- */
function getCollectionViewStream($collection_pid) {
$this->collectionViewStream = $this->getStream($collection_pid, CollectionClass :: $COLLECTION_CLASS_COLLECTION_VIEW_STREAM, 0);
return $this->collectionViewStream;
}
- /**
- * getStream ??
- * @param type $pid
- * @param type $dsid
- * @param type $showError
- * @return type
- */
function getStream($pid, $dsid, $showError = 1) {
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
$item = new fedora_item($pid);
return isset($item->datastreams[$dsid]) ? $item->get_datastream_dissemination($dsid) : NULL;
}
- /**
- * getPidNameSpace ??
- * @param type $pid
- * @param type $dsid
- * @return type
- */
function getPidNameSpace($pid, $dsid) {
$stream = $this->getCollectionPolicyStream($pid);
try {
@@ -248,12 +218,6 @@ class CollectionClass {
return NULL;
}
- /**
- * getAllowedMimeType ??
- * @param type $contentModelPid
- * @param type $contentModel_dsid
- * @return type
- */
function getAllowedMimeTypes($contentModelPid, $contentModel_dsid) {
$stream = $this->getContentModelStream($contentModelPid, $contentModel_dsid);
try {
@@ -320,7 +284,7 @@ class CollectionClass {
$thisClass = new $phpClass ();
$returnValue = $thisClass->$phpMethod($parametersArray, $dsid, $file, $file_ext);
if (!$returnValue) {
- drupal_set_message(t('Error! Failed running content model method !m !rv'), array('!m' => $phpMethod, '!rv' => $returnValue));
+ drupal_set_message('Error! Failed running content model method !m !rv', array('!m' => $phpMethod, '!rv' => $returnValue));
return FALSE;
}
}
@@ -393,13 +357,8 @@ class CollectionClass {
return $thisClass->$phpMethod($form, $ingest_form, $form_state['values'], $form_state);
}
- /**
- * This will also create a personal collection for an existing user if they don't have one
- * not using this function currently.
- *
- * @param type $user
- * @return type
- */
+ //this will also create a personal collection for an existing user if they don't have one
+ //not using this function currently
function createUserCollection(& $user) {
if (isset($user->fedora_personal_pid)) {
return;
@@ -419,8 +378,8 @@ class CollectionClass {
'pidNamespace' => $pidNameSpace
);
$object = $soapClient->__soapCall('getNextPID', array(
- $params
- ));
+ $params
+ ));
} catch (exception $e) {
drupal_set_message(t('Error getting Next PID: !e', array('!e' => $e->getMessage())), 'error');
return FALSE;
@@ -434,7 +393,7 @@ class CollectionClass {
module_load_include('inc', 'fedora_repository', 'plugins/PersonalCollectionClass');
$personalCollectionClass = new PersonalCollectionClass();
if (!$personalCollectionClass->createCollection($user, $pid, $soapClient)) {
- drupal_set_message(t("Did not create a personal collection object for !u"), array('!u' => $user->name));
+ drupal_set_message("Did not create a personal collection object for !u", array('!u' => $user->name));
return FALSE; //creation failed don't save the collection pid in drupal db
}
user_save($user, $personal_collection_pid);
@@ -455,19 +414,10 @@ class CollectionClass {
return $xslContent;
}
- /**
- * showFieldSets ??
- * @global type $base_url
- * @global type $user
- * @param type $page_number
- * @return string
- */
function showFieldSets($page_number) {
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
global $base_url;
-
$tabset = array();
-
global $user;
$objectHelper = new ObjectHelper();
$item = new Fedora_Item($this->pid);
@@ -482,10 +432,16 @@ class CollectionClass {
// Check the form post to see if we are in the middle of an ingest operation.
$show_ingest_tab = (!empty($_POST['form_id']) && $_POST['form_id'] == 'fedora_repository_ingest_form');
$add_to_collection = $this->getIngestInterface();
+ if (!$show_ingest_tab) {
+ $view_selected = true;
+ }
+ drupal_set_message();
+
$tabset['view_tab'] = array(
'#type' => 'tabpage',
'#title' => 'View',
+ '#selected' => $view_selected,
'#content' => $collection_items
);
$tabset['add_tab'] = array(
@@ -496,14 +452,17 @@ class CollectionClass {
// This will be the content of the tab.
'#content' => $add_to_collection,
);
+
+ $tabset['add_collection_tab'] = array(
+ // #type and #title are the minimum requirements.
+ '#type' => 'tabpage',
+ '#title' => t('Add Child Collection'),
+ // This will be the content of the tab.
+ '#content' => drupal_get_form('collection_creation_form', $this->pid),
+ );
return $tabset;
}
- /**
- * getIngestInterface ??
- * @global type $base_url
- * @return string
- */
function getIngestInterface() {
global $base_url;
$objectHelper = new ObjectHelper();
@@ -527,16 +486,6 @@ class CollectionClass {
return $ingestObject;
}
- /**
- * renderCOllection ??
- * @global type $base_url
- * @param type $content
- * @param type $pid
- * @param type $dsId
- * @param type $collection
- * @param int $pageNumber
- * @return type
- */
function renderCollection($content, $pid, $dsId, $collection, $pageNumber = NULL) {
$path = drupal_get_path('module', 'fedora_repository');
global $base_url;
@@ -605,3 +554,124 @@ class CollectionClass {
}
+function collection_creation_form(&$form_state, $parent_collection_pid) {
+ module_load_include('inc', 'fedora_repository', 'api/fedora_utils');
+ $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);
+ }
+ }
+ }
+
+ $content_models = get_content_models_as_option_array();
+ $form['titlebox'] = array(
+ '#type' => 'item',
+ '#value' => t("Create New Child Collection within $collection_pid"),
+ );
+
+ $form['collection_name'] = array(
+ '#title' => "Collection Name",
+ '#type' => 'textfield',
+ '#description' => t("Human readable name for this collection"),
+ );
+ $form['collection_pid'] = array(
+ '#title' => "Collection PID",
+ '#type' => 'textfield',
+ '#size' => 15,
+ '#description' => t("Unique PID for this collection.
Pids take the general form of namespace:collection eg islandora:pamphlets"),
+ );
+ if (!$restricted) {
+ $form['collection_namespace'] = array(
+ '#title' => "Collection Namespace",
+ '#type' => 'textfield',
+ '#size' => 15,
+ '#default_value' => 'default',
+ '#description' => t("Namespace for objects in this collection."),
+ );
+ }
+ else {
+ $form['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' => $parent_collection_pid,
+ );
+ $form['all_content_models'] = array(
+ '#type' => 'hidden',
+ '#value' => implode('~~~',$content_models),
+ );
+
+ $form['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['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Submit')
+ );
+
+
+ return($form);
+}
+
+function collection_creation_form_validate($form, &$form_state) {
+ module_load_include('inc', 'fedora_repository', 'api/fedora_item');
+ $pid = $form_state['values']['collection_pid'];
+ $item = new fedora_item($pid);
+ if ($item->exists()) {
+ drupal_set_message("$pid already exists within your repository. the PID must be unique", 'warning');
+ return;
+ }
+}
+
+function collection_creation_form_submit($form, &$form_state) {
+ global $user;
+ module_load_include('inc', 'fedora_repository', 'api/fedora_item');
+ $module_path = drupal_get_path('module', 'fedora_repository');
+ $thumbnail = drupal_get_path('module', 'Fedora_Repository') . '/images/Crystal_Clear_filesystem_folder_grey.png';
+ $collection_pid = $form_state['values']['collection_pid'];
+ $collection_name = $form_state['values']['collection_name'];
+ $parent_collection = $form_state['values']['parent_collection'];
+ $all_cModels = explode('~~~', $form_state['values']['all_content_models']);
+ $collection_policy = '
+
+
+
+
+
+
+ isMemberOfCollection
+';
+ $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($collection_pid, 'A', $new_collections_label, $user->name);
+ $item->add_relationship('isMemberOfCollection', $parent_collection, RELS_EXT_URI);
+ $item->add_relationship('hasModel', 'islandora:collectionCModel', FEDORA_MODEL_URI);
+ $item->add_datastream_from_string($collection_policy_xml->saveXML(), 'COLLECTION_POLICY');
+ $item->add_datastream_from_file($thumbnail, 'TN');
+ drupal_goto("/fedora/repository/$collection_pid");
+}
\ No newline at end of file
diff --git a/api/fedora_utils.inc b/api/fedora_utils.inc
index 1991e84c..6e7da113 100644
--- a/api/fedora_utils.inc
+++ b/api/fedora_utils.inc
@@ -6,7 +6,6 @@
* @file
* Base utilities used by the Islandora fedora module.
*/
-
/*
* Functions that emulate php5.3 functionality for backwards compatiablity
*/
@@ -156,3 +155,79 @@ function fix_dsid($dsid) {
return $new_dsid;
}
+/**
+ * Function: get_collections_as_option_array
+ *
+ * Description: Returns an associative array of all collection objects in Fedora instance
+ *
+ * @return array
+ */
+function get_collections_as_option_array() {
+ module_load_include('inc', 'fedora_repository', 'api/fedora_utils');
+ $query = 'select $object $title from <#ri>
+ where ($object $title
+ and $object
+ and $object )
+ order by $title';
+ $url = variable_get('fedora_repository_url', 'http://localhost:8080/fedora/risearch');
+ $url .= "?type=tuples&flush=true&format=csv&limit=1000&lang=itql&stream=on&query=";
+ $content = do_curl($url . htmlentities(urlencode($query)));
+ $list = explode("\n", $content);
+ array_shift($list);
+ $list = preg_replace('/info:fedora\//', '', $list);
+ $options = array();
+ foreach ($list as $item) { //removes blanks
+ if ($item) {
+ $parts = explode(',', $item);
+ $options[$parts[0]] = $parts[1];
+ }
+ }
+ unset($options['islandora:ContentModelCollection']);
+ return $options;
+}
+
+/**
+ * Function: get_content_models_as_option_array
+ *
+ * Description: Returns an associative array of all collection objects in Fedora instance
+ *
+ * @return array
+ */
+function get_content_models_as_option_array() {
+ module_load_include('inc', 'fedora_repository', 'api/fedora_item');
+ module_load_include('inc', 'fedora_repository', 'api/fedora_utils');
+ $restricted = variable_get('fedora_namespace_restriction_enforced', 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);
+ }
+ }
+ $query = 'select $object $title from <#ri>
+ where ($object $title
+ and ($object
+ or $object )
+ and $object )
+ order by $title';
+
+ $url = variable_get('fedora_repository_url', 'http://localhost:8080/fedora/risearch');
+ $url .= "?type=tuples&flush=true&format=csv&limit=1000&lang=itql&stream=on&query=";
+ $content = do_curl($url . htmlentities(urlencode($query)));
+ $list = explode("\n", $content);
+ array_shift($list);
+ $list = preg_replace('/info:fedora\//', '', $list);
+ foreach ($list as $item) { //removes blanks
+ if ($item) {
+ $parts = explode(',', $item);
+ $item = new fedora_item($parts[0]);
+ $nameparts = explode(':', $parts[0]);
+ if (!$restricted || in_array($nameparts[0], $allowed))
+ if ($item->get_datastream_dissemination('ISLANDORACM')) {
+ $options[$parts[0]] = $parts[1];
+ }
+ }
+ }
+
+ return $options;
+}
\ No newline at end of file