diff --git a/admin/islandora.admin.inc b/admin/islandora.admin.inc
index 03ef48e7..8194520e 100644
--- a/admin/islandora.admin.inc
+++ b/admin/islandora.admin.inc
@@ -8,6 +8,7 @@
function islandora_repository_admin($form, &$form_state) {
module_load_include('inc', 'islandora', 'includes/tuque');
+ module_load_include('inc', 'islandora', 'includes/utilities');
if (!IslandoraTuque::exists()) {
$message = t('This module requires the !url. Please install sites all libraries folder before continuing.', array('!url' => l(t('Tuque Fedora API'), 'http://github.com/islandora/tuque')));
@@ -24,16 +25,10 @@ function islandora_repository_admin($form, &$form_state) {
$url = variable_get('islandora_base_url', 'http://localhost:8080/fedora');
}
- $connection = new IslandoraTuque(NULL, $url);
- try {
- $info = $connection->api->a->describeRepository();
- $connected = TRUE;
- }
- catch (RepositoryException $e) {
- $connected = FALSE;
- }
-
- if($connected) {
+ // Connect to Fedora
+ $info = islandora_describe_repository($url);
+
+ if($info) {
$confirmation_message = ''
. t('Successfully connected to Fedora Server (Version !version).', array('!version' => $info['repositoryVersion']));
}
diff --git a/includes/utilities.inc b/includes/utilities.inc
index edb49780..afcf5f94 100644
--- a/includes/utilities.inc
+++ b/includes/utilities.inc
@@ -45,4 +45,54 @@ function islandora_control_group_to_human_readable($control_group) {
default:
return $control_group;
}
+}
+
+/**
+ * valid pid ??
+ * @param type $pid
+ * @return boolean
+ */
+function islandora_validate_pid($pid) {
+ $valid = FALSE;
+ if (strlen(trim($pid)) <= 64 && preg_match('/^([A-Za-z0-9]|-|\.)+:(([A-Za-z0-9])|-|\.|~|_|(%[0-9A-F]{2}))+$/', trim($pid))) {
+ $valid = TRUE;
+ }
+
+ return $valid;
+}
+
+/**
+ * Valid Dsid ??
+ * @param type $dsid
+ * @return boolean
+ */
+function islandora_validate_dsid($dsid) {
+ $valid = FALSE;
+ if (strlen(trim($dsid)) <= 64 && preg_match('/^[a-zA-Z0-9\_\-\.]+$/', trim($dsid))) {
+ $valid = TRUE;
+ }
+
+ return $valid;
+}
+
+/* Helper function to describe a Fedora repository.
+ *
+ * Can be used to check if Fedora is available.
+ *
+ * @param $url
+ * A url to a Fedora repository.
+ * @return
+ * Returns an array describing the repository. Returns FALSE if Fedora is down
+ * or if the url is incorrect.
+ */
+function islandora_describe_repository($url) {
+
+ $connection = new IslandoraTuque(NULL, $url);
+ try {
+ $info = $connection->api->a->describeRepository();
+ return $info;
+ }
+ catch (RepositoryException $e) {
+ return FALSE;
+ }
}
\ No newline at end of file
diff --git a/islandora.api.php b/islandora.api.php
index 0f575486..7231dff9 100644
--- a/islandora.api.php
+++ b/islandora.api.php
@@ -1,23 +1,83 @@
t('Ingest Route Name'), 'url' => 'ingest_route/url', 'weight' => 0),
* );
*/
-function hook_islandora_ingest_registry($collection_object) {}
\ No newline at end of file
+function hook_islandora_ingest_registry($collection_object) {}
+
+
+/**
+ * alter an object before it gets used further down the stack
+ * @param type $object
+ * a tuque FedoraObject
+ */
+function hook_islandora_object_alter ($fedora_object){}
+
+/**
+ * insert or remove rendered elements by implementing this function
+ * in your module
+ * @param type $arr
+ * an arr of rendered views
+ */
+function hook_islandora_display_alter ($arr){}
+
+/**
+ *
+ * @param type $islandora_object
+ * a tuque FedoraObject
+ * @param array $content_models
+ * @param string $collection_pid
+ */
+function hook_islandora_ingest_pre_ingest($islandora_object, $content_models, $collection_pid){}
+
diff --git a/islandora.info b/islandora.info
index 6d2cfb99..aae6bc98 100644
--- a/islandora.info
+++ b/islandora.info
@@ -3,5 +3,6 @@ description = "View and manage Fedora objects"
package = Islandora
version = 7.x-dev
core = 7.x
+configure = admin/islandora/configure
stylesheets[all][] = css/islandora.base.css
stylesheets[all][] = css/islandora.theme.css
\ No newline at end of file
diff --git a/islandora_basic_collection/includes/change_content_models.inc b/islandora_basic_collection/includes/change_content_models.inc
index 344d8643..42b7fa76 100644
--- a/islandora_basic_collection/includes/change_content_models.inc
+++ b/islandora_basic_collection/includes/change_content_models.inc
@@ -86,7 +86,7 @@ function islandora_change_content_models_form_submit($form, &$form_state) {
$collection_pid = $form_state['values']['collection_pid'];
$current_content_model_object = islandora_object_load($current_content_model);
- $collection_object = islandora_load_object($form_state['values']['collection_pid']);
+ $collection_object = islandora_object_load($form_state['values']['collection_pid']);
$collection_policy_datastream = $collection_object->getDatastream(variable_get('Islandora_Collection_Policy_DSID', 'COLLECTION_POLICY'));
$policy = new CollectionPolicy($collection_policy_datastream->content);
@@ -105,7 +105,7 @@ function islandora_change_content_models_form_submit($form, &$form_state) {
}
}
if ($add_to_policy) {
- $new_content_model_object = new FedoraObject($new_content_model, $rest_connection->repository);
+ $new_content_model_object = islandora_object_load($new_content_model);
$new_content_model_datastream = $new_content_model_object->getDatastream(variable_get('Islandora_Content_Model_DSID', 'ISLANDORACM'));
$content_models_element = $collection_policy_xml->getElementsByTagName('content_models');
$content_model_element = $content_models_element->item(0)->getElementsByTagName('content_model');
@@ -129,14 +129,14 @@ function islandora_change_content_models_form_submit($form, &$form_state) {
or \$object )
and \$object )";
- $objects = $rest_connection->repository->ri->itqlQuery($query, 'unlimited', '0');
+ $objects = $collection_object->repository->ri->itqlQuery($query, 'unlimited', '0');
$count = 0;
foreach ($objects as $object) {
if (!$object['object']['value']) {
continue;
}
- $fedora_item = new FedoraObject($object['object']['value'], $rest_connection->repository);
+ $fedora_item = islandora_object_load($object['object']['value']);
$fedora_item->relationships->remove(FEDORA_MODEL_URI, 'hasModel', $current_content_model);
$fedora_item->relationships->add(FEDORA_MODEL_URI, 'hasModel', $new_content_model);
$count++;
diff --git a/islandora_basic_collection/includes/child_collection.inc b/islandora_basic_collection/includes/child_collection.inc
index f696286a..68aac2f3 100644
--- a/islandora_basic_collection/includes/child_collection.inc
+++ b/islandora_basic_collection/includes/child_collection.inc
@@ -119,7 +119,20 @@ function islandora_create_child_collection_form($form, &$form_state, $collection
}
function islandora_create_child_collection_form_validate($form, &$form_state) {
-
+ module_load_include('inc', 'islandora', 'includes/utilities');
+ $new_collection_pid = $form_state['values']['new_collection_pid'];
+ if($new_collection_pid) {
+ $valid = islandora_validate_pid($new_collection_pid);
+ if(!$valid) {
+ form_set_error('new_collection_pid', 'Collection PID is Invalid.');
+ }
+ else {
+ $object = islandora_object_load($new_collection_pid);
+ if($object !== NULL) {
+ form_set_error('new_collection_pid', 'Collection PID already exists.');
+ }
+ }
+ }
}
/**
@@ -136,7 +149,7 @@ function islandora_create_child_collection_form_submit($form, &$form_state) {
$new_collection_pid = $form_state['values']['new_collection_pid'];
$this_collection_pid = $form_state['values']['current'];
if(empty($new_collection_pid)) {
- $collection_namespace = substr($this_collection_pid, 0, strpos($this_collection_pid, ":"));
+ $new_collection_pid = substr($this_collection_pid, 0, strpos($this_collection_pid, ":"));
}
$new_collection_label = $form_state['values']['collection_name'];
$namespace = $form_state['values']['collection_namespace'];
@@ -185,5 +198,5 @@ function islandora_create_child_collection_form_submit($form, &$form_state) {
$fedora_object->ingestDatastream($policy_datastream);
$new_fedora_object = islandora_ingest_add_object($fedora_object);
- drupal_goto('/islandora/object/' . $new_collection_pid);
+ drupal_goto('/islandora/object/' . $fedora_object->id);
}
\ No newline at end of file
diff --git a/islandora_basic_collection/includes/collection_management.inc b/islandora_basic_collection/includes/collection_management.inc
index f65da225..e51e76a0 100644
--- a/islandora_basic_collection/includes/collection_management.inc
+++ b/islandora_basic_collection/includes/collection_management.inc
@@ -37,7 +37,7 @@ function get_child_collections($object) {
$query = <<
where \$object
- and \$object
+ and \$object id>
EOD;
$lines = $object->repository->ri->itqlQuery($query, 'unlimited', '0');
@@ -49,7 +49,7 @@ function islandora_collections_get_collection_from_pid($object) {
$query = 'select $parent from <#ri>
where ($object $parent
or $object $parent)
- and $object \'' . $pid . '\'
+ and $object \'' . $object->id . '\'
order by $object';
$object_pids = $object->repository->ri->itqlQuery($query, 'unlimited', '0');
diff --git a/islandora_basic_collection/includes/delete_collection.inc b/islandora_basic_collection/includes/delete_collection.inc
index e6c415cf..6e4a4bb8 100644
--- a/islandora_basic_collection/includes/delete_collection.inc
+++ b/islandora_basic_collection/includes/delete_collection.inc
@@ -67,7 +67,7 @@ function islandora_collection_deletion_form($form, &$form_state, $object) {
function islandora_collection_deletion_form_submit($form, &$form_state) {
$collection_pid = $form_state['values']['current'];
- $fedora_object = islandora_object_load($collection_object);
+ $fedora_object = islandora_object_load($collection_pid);
$parents = $fedora_object->relationships->get(NULL, 'isMemberOfCollection');
$parents = islandora_collections_get_collection_from_pid($fedora_object);
@@ -77,14 +77,14 @@ function islandora_collection_deletion_form_submit($form, &$form_state) {
drupal_goto("islandora/object/" . $parents[0]['parent']['value']);
}
- $child_collections = get_child_collections($collection_pid);
+ $child_collections = get_child_collections($fedora_object);
$populated_child_collections = array();
$pids = @array_filter($form_state['values']['table']);
if (!empty($child_collections)) {
foreach ($child_collections as $child) {
- $child_pids = get_related_items_as_array(islandora_object_load($child), 'isMemberOfCollection');
+ $child_pids = get_related_items_as_array(islandora_object_load($child['object']['value']), 'isMemberOfCollection');
if (!empty($child_pids)) {
$populated_child_collections[] = $child;
}
diff --git a/islandora_basic_collection/includes/manage_policies.inc b/islandora_basic_collection/includes/manage_policies.inc
index 9207edb4..1fa3e68f 100644
--- a/islandora_basic_collection/includes/manage_policies.inc
+++ b/islandora_basic_collection/includes/manage_policies.inc
@@ -137,6 +137,7 @@ function islandora_manage_policies_form_validate($form, &$form_state) {
* @param array $form_state
*/
function islandora_manage_policies_form_submit($form, &$form_state) {
+ module_load_include('module', 'islandora', 'islandora');
$collection_pid = $form_state['values']['parent_collection'];
$collection_object = islandora_object_load($collection_pid);
@@ -166,7 +167,8 @@ function islandora_manage_policies_form_submit($form, &$form_state) {
$cp_namespace = $form_state['values']['new_cp_namespace'];
$cp_content_model = $form_state['values']['content_model_to_add'];
- $content_model_object = new FedoraObject($cp_content_model, $rest_connection->repository);
+
+ $content_model_object = islandora_object_load($cp_content_model);
$content_model_datastream = $content_model_object->getDatastream(variable_get('Islandora_Content_Model_DSID', 'ISLANDORACM'));
$content_models_element = $collection_policy_xml->getElementsByTagName('content_models');
diff --git a/islandora_basic_collection/includes/move_collection.inc b/islandora_basic_collection/includes/move_collection.inc
index 04e31d51..f5a3703e 100644
--- a/islandora_basic_collection/includes/move_collection.inc
+++ b/islandora_basic_collection/includes/move_collection.inc
@@ -64,7 +64,6 @@ function islandora_collection_migrate_form($form, &$form_state, $object) {
* @param array $form_state
*/
function islandora_collection_migrate_form_submit($form, &$form_state) {
-
$pids = array_filter($form_state['values']['table']);
$new_collection = $form_state['values']['new_collection'];
$current = $form_state['values']['current'];
diff --git a/islandora_basic_collection/islandora_basic_collection.info b/islandora_basic_collection/islandora_basic_collection.info
index 7663b814..bf2e6387 100644
--- a/islandora_basic_collection/islandora_basic_collection.info
+++ b/islandora_basic_collection/islandora_basic_collection.info
@@ -3,5 +3,6 @@ description = "A default Islandora Repository module to handle simple collection
dependencies[] = islandora
package = Islandora
core = 7.x
+configure = admin/islandora/basic_collection
stylesheets[all][] = css/islandora_basic_collection.base.css
stylesheets[all][] = css/islandora_basic_collection.theme.css
\ No newline at end of file
diff --git a/islandora_basic_image/islandora_basic_image.info b/islandora_basic_image/islandora_basic_image.info
index 26426dd0..459d1bbc 100644
--- a/islandora_basic_image/islandora_basic_image.info
+++ b/islandora_basic_image/islandora_basic_image.info
@@ -3,5 +3,6 @@ description = "A default Islandora Repository module to handle images"
dependencies[] = islandora
package = Islandora
core = 7.x
+configure = admin/islandora/basic_image
stylesheets[all][] = css/islandora_basic_image.base.css
stylesheets[all][] = css/islandora_basic_image.theme.css
\ No newline at end of file