From 51e8f84023b210218c846e0d9cfa7e2caf7b099b Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Wed, 13 Mar 2013 01:51:47 +0100 Subject: [PATCH 01/99] Added a new function islandora_user_access() to simplify access callbacks. This function will check the given object/datastream against the given permissions and required content models using the given user. If no user is given the user identified by the GET token will be used, if no token is present the global user will be used. --- islandora.module | 82 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/islandora.module b/islandora.module index 94aedbe0..57ee5d9b 100644 --- a/islandora.module +++ b/islandora.module @@ -334,6 +334,88 @@ function islandora_forms($form_id) { return $forms; } +/** + * Checks whether the user can access the given object. + * + * Checks for repository access, object/datastream existance, namespace access, + * user permissions, content models. + * + * Will check the given user or the user repersented by the GET token parameter, + * failing that it will use the global user. + * + * @global $user + * + * @param mixed $object + * The FedoraObject or FedoraDatastream to test for accessibility, if NULL + * is given the object is assumed to not exist or be inaccessible. + * @param array $permissions + * The required user permissions. + * @param array $content_models + * The required content models. + * @param bool $access_any + * (optional) TRUE to grant access if any single requirement is met from both + * the permissions and content models parameters. FALSE if all requirements + * must be met from both the permissions and content model parameters. + * @param object $account + * (optional) The account to check, if not given check the GET parameters for + * a token to restore the user. If no GET parameter is present use currently + * logged in user. + * + * @return bool + * TRUE if the user is allowed to access this object/datastream, FALSE + * otherwise. + */ +function islandora_user_access($object, array $permissions, $content_models = array(), $access_any = TRUE, $account = NULL) { + module_load_include('inc', 'islandora', 'includes/utilities'); + $is_repository_accessible = &drupal_static(__FUNCTION__); + // If the repository is inaccessible then access always fails. + if (!isset($is_repository_accessible)) { + $is_repository_accessible = islandora_describe_repository(); + if (!$is_repository_accessible) { + // Only display the inaccessible message once. + islandora_display_repository_inaccessible_message(); + return FALSE; + } + } + if (!$is_repository_accessible || !is_object($object)) { + return FALSE; + } + // Determine the user account to test against. + if (!isset($account)) { + $token = filter_input(INPUT_GET, 'token', FILTER_SANITIZE_STRING); + if ($token) { + module_load_include('inc', 'islandora', 'includes/authtokens'); + $user = islandora_validate_object_token($object->id, $datastream->id, $token); + if ($user) { + $account = user_load($user->uid); + } + } + else { + global $user; + $account = $user; + } + } + // Determine what has been passed as $object. + if (is_subclass_of($object, 'FedoraObject')) { + $object = $object; + } + elseif (is_subclass_of($object, 'FedoraDatastream')) { + $datastream = $object; + $object = $datstream->parent; + } + // Check for access. + $accessible_namespace = islandora_namespace_accessible($object->id); + if ($access_any) { + $has_required_permissions = islandora_user_access_any($permissions, $account); + $has_required_content_models = empty($content_models) ? TRUE : count(array_intersect($object->models, $content_models)) > 0; + } + else { + $has_required_permissions = islandora_user_access_all($permissions, $account); + $has_required_content_models = count(array_diff($content_models, $object->models)) == 0; + } + return $accessible_namespace && $has_required_permissions && $has_required_content_models; +} + /** * Checks whether the user can access the given object. * From 6aa5226e58816e668a29e5bc30673d24bea4d17e Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Fri, 8 Mar 2013 15:25:20 +0100 Subject: [PATCH 02/99] Removed default ingest menu, ingest configuration can now take a object. Was not in use and excepting any parameters for the ingest process via GET was not very safe. Also the ingest configuration can now take an NewFedoraObject rather than building one from the configuration options. The old way is still supported for now though. --- includes/ingest.form.inc | 21 +++++++++-------- includes/ingest.menu.inc | 49 ---------------------------------------- 2 files changed, 12 insertions(+), 58 deletions(-) delete mode 100644 includes/ingest.menu.inc diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 9434e9e4..ca6af592 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -96,15 +96,18 @@ function islandora_ingest_form_init_form_state_storage(array &$form_state, array */ function islandora_ingest_form_prepare_new_object(array $configuration) { module_load_include('inc', 'islandora', 'includes/utilities'); - // ID is more specific than namespace so it will take precedence. - $id = isset($configuration['namespace']) ? $configuration['namespace'] : 'islandora'; - $id = isset($configuration['id']) ? $configuration['id'] : $id; - $label = isset($configuration['label']) ? $configuration['label'] : 'New Object'; - $relationship_map = function($o) { - return array('relationship' => 'isMemberOfCollection', 'pid' => $o); - }; - $relationships = empty($configuration['collections']) ? array() : array_map($relationship_map, $configuration['collections']); - return islandora_prepare_new_object($id, $label, array(), array(), $relationships); + if (empty($configuration['object'])) { + // ID is more specific than namespace so it will take precedence. + $id = isset($configuration['namespace']) ? $configuration['namespace'] : 'islandora'; + $id = isset($configuration['id']) ? $configuration['id'] : $id; + $label = isset($configuration['label']) ? $configuration['label'] : 'New Object'; + $relationship_map = function($o) { + return array('relationship' => 'isMemberOfCollection', 'pid' => $o); + }; + $relationships = empty($configuration['collections']) ? array() : array_map($relationship_map, $configuration['collections']); + return islandora_prepare_new_object($id, $label, array(), array(), $relationships); + } + return $configuration['object']; } /** diff --git a/includes/ingest.menu.inc b/includes/ingest.menu.inc deleted file mode 100644 index a6f79891..00000000 --- a/includes/ingest.menu.inc +++ /dev/null @@ -1,49 +0,0 @@ -'; - // Redirect back to referer or top level collection. - drupal_goto($redirect); - } -} - -/** - * Fetches the ingest configuration from the $_GET parameters. - * - * Generic parameters as accepted by all ingest processes, other modules may - * add to this list. - * id -> The pid of the object to create. optional. - * models -> Comma delimited list of all the content models the created object - * should have. - * collections -> Comma delimited list of all the collections the created - * object should belong to. - * - * @return array - * The configuration options used to build the multi-paged ingest process. - */ -function islandora_ingest_get_configuration() { - $configuration = $_GET; - unset($configuration['q']); - $convert_to_array_keys = array_intersect(array('models', 'collections'), array_keys($configuration)); - foreach ($convert_to_array_keys as $key) { - $configuration[$key] = explode(',', $configuration[$key]); - } - return $configuration; -} From e7cc486d182a70ed1e1983d4011af85dd85e0d2f Mon Sep 17 00:00:00 2001 From: Jonathan Green Date: Wed, 13 Mar 2013 01:31:09 -0300 Subject: [PATCH 03/99] First try at getting travis building. --- .travis.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..ff5b51f5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,26 @@ +language: php +php: + - 5.3 +before_script: + - mysql -u root -e 'create database drupal;' + - mysql -u root -e "create database fedora;" + - mysql -u root -e "GRANT ALL PRIVILEGES ON fedora.* To 'fedora'@'localhost' IDENTIFIED BY 'fedora';" + - mysql -u root -e "GRANT ALL PRIVILEGES ON drupal.* To 'drupal'@'localhost' IDENTIFIED BY 'drupal';" + - git clone git://github.com/Islandora/islandora_tomcat.git + - cd islandora_tomcat + - export CATALINA_HOME='.' + - ./bin/startup.sh + - cd .. + - pyrus channel-discover pear.drush.org + - pyrus install drush/drush + - phpenv rehash + - drush dl --yes drupal + - cd drupal-* + - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes + - drush en --yes simpletest + - drush cc all + - drush runserver --server=builtin 80 & + - sleep 4 + - drush vset --yes simpletest_verbose FALSE +script: + - drush test-run Syslog --xml --uri=http://127.0.0.1:8080 From ff0ed13e1f950fac62987e355d1ec8092e80861c Mon Sep 17 00:00:00 2001 From: Jonathan Green Date: Wed, 13 Mar 2013 02:52:53 -0300 Subject: [PATCH 04/99] Added a config for travis-ci This config will let islandora work with travis-ci. travis more travis This one should work. Test travis with apache. added sudo Added chown Fixed permissions... i hope.w Apache config back to non-apache Another try at a travis config Added some debug output woot Another update Added some debug data to sort out whats up with travis. more debug another More debug Perhaps this will finally work Revert "More debug" This reverts commit 508e993f4b02f7f3c9eb0d978514d0be89abbc78. Revert "another" This reverts commit cbf280eb4ebd22dda90788752787250a0ef71361. Revert "more debug" This reverts commit e6ce86ad77fdb89807c426adaa04a90a9955f343. Revert "Added some debug data to sort out whats up with travis." This reverts commit 5cb8e5b2f5dd20896f501a70167495b42d8f77f4. Holy jumping jesus it works. --- .travis.yml | 19 ++++++++++++++----- tests/travis.test_config.ini | 6 ++++++ 2 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 tests/travis.test_config.ini diff --git a/.travis.yml b/.travis.yml index ff5b51f5..fa7e5ca9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,26 +1,35 @@ language: php php: - 5.3 -before_script: +before_install: - mysql -u root -e 'create database drupal;' - mysql -u root -e "create database fedora;" - mysql -u root -e "GRANT ALL PRIVILEGES ON fedora.* To 'fedora'@'localhost' IDENTIFIED BY 'fedora';" - mysql -u root -e "GRANT ALL PRIVILEGES ON drupal.* To 'drupal'@'localhost' IDENTIFIED BY 'drupal';" + - cd $HOME + - sudo apt-get update -qq + - sudo apt-get install -qq php5-cgi + - sudo apt-get install -qq php5-mysql + - git clone git://github.com/Islandora/tuque.git - git clone git://github.com/Islandora/islandora_tomcat.git - cd islandora_tomcat - export CATALINA_HOME='.' - ./bin/startup.sh - - cd .. + - cd $HOME - pyrus channel-discover pear.drush.org - pyrus install drush/drush - phpenv rehash - drush dl --yes drupal - cd drupal-* - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes + - drush runserver 8081 > /dev/null & + - ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora + - mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini + - mkdir sites/all/libraries + - ln -s $HOME/tuque sites/all/libraries/tuque - drush en --yes simpletest + - drush en --user=1 --yes islandora - drush cc all - - drush runserver --server=builtin 80 & - sleep 4 - - drush vset --yes simpletest_verbose FALSE script: - - drush test-run Syslog --xml --uri=http://127.0.0.1:8080 + - drush test-run --uri=http://127.0.0.1:8081 Islandora diff --git a/tests/travis.test_config.ini b/tests/travis.test_config.ini new file mode 100644 index 00000000..61d63713 --- /dev/null +++ b/tests/travis.test_config.ini @@ -0,0 +1,6 @@ +[fedora] +fedora_url = "http://localhost:8080/fedora" +use_drupal_filter = TRUE +drupal_filter_file = "/home/travis/islandora_tomcat/fedora/server/config/filter-drupal.xml" +admin_user = "fedoraAdmin" +admin_pass = "fedoraAdmin" From d77c53492a7954f7daa7303728eea8698d338f24 Mon Sep 17 00:00:00 2001 From: Steve Osguthorpe Date: Mon, 18 Mar 2013 17:17:44 +0000 Subject: [PATCH 05/99] Created $keys variable to be passed by reference to stop PHP warning being shown. --- includes/ingest.form.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 9434e9e4..5742f3be 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -144,7 +144,8 @@ function islandora_ingest_form_get_step(array &$form_state, $step_id = NULL) { function islandora_ingest_form_get_current_step_id(array &$form_state) { if (empty($form_state['islandora']['step_id'])) { $steps = islandora_ingest_form_get_steps($form_state); - return array_shift(array_keys($steps)); + $keys = array_keys($steps); + return array_shift($keys); } return $form_state['islandora']['step_id']; } From 736c809c2eed3106c44f333b2e1ddd7082c53967 Mon Sep 17 00:00:00 2001 From: William Panting Date: Tue, 19 Mar 2013 17:25:56 -0300 Subject: [PATCH 06/99] Revived islandora_hooks_test module to get hook tests working --- tests/islandora_hooks_test.info | 7 ++ tests/islandora_hooks_test.module | 152 ++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 tests/islandora_hooks_test.info create mode 100644 tests/islandora_hooks_test.module diff --git a/tests/islandora_hooks_test.info b/tests/islandora_hooks_test.info new file mode 100644 index 00000000..9d211978 --- /dev/null +++ b/tests/islandora_hooks_test.info @@ -0,0 +1,7 @@ +name = Islandora Hook testing +description = Tests Hooks. Do not enable. +core = 7.x +package = Testing +hidden = TRUE +dependencies[] = islandora +files[] = islandora_hooks_test.module diff --git a/tests/islandora_hooks_test.module b/tests/islandora_hooks_test.module new file mode 100644 index 00000000..315b88ee --- /dev/null +++ b/tests/islandora_hooks_test.module @@ -0,0 +1,152 @@ +id == 'test:testIngestedObjectHook') { + $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_INGESTED_HOOK] = TRUE; + if ($object->label == 'block') { + $context['block'] = TRUE; + } + } + break; + + case 'modify': + if ($object->id == 'test:testModifiedObjectHook') { + $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_MODIFIED_HOOK] = TRUE; + if (isset($context['params']['label']) && $context['params']['label'] == 'block') { + $context['block'] = TRUE; + } + } + elseif ($object->id == 'test:testPurgedObjectHook') { + $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE; + if (isset($context['params']['label']) && $context['params']['label'] == 'block') { + $context['block'] = TRUE; + } + elseif (isset($context['params']['label']) && $context['params']['label'] == 'delete') { + $context['delete'] = TRUE; + } + } + break; + + case 'purge': + if ($object->id == 'test:testPurgedObjectHook') { + $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE; + if ($object->label == 'block') { + $context['block'] = TRUE; + } + elseif ($object->label == 'delete') { + $context['delete'] = TRUE; + } + } + break; + } +} + +/** + * Implements hook_islandora_object_alter(). + */ +function islandora_hooks_test_islandora_datastream_alter(AbstractFedoraObject $object, AbstractFedoraDatastream $datastream, array &$context) { + switch ($context['action']) { + case 'ingest': + if ($object->id == 'test:testIngestedDatastreamHook') { + $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_INGESTED_HOOK] = TRUE; + if ($datastream->label == 'block') { + $context['block'] = TRUE; + } + } + break; + + case 'modify': + if ($object->id == 'test:testModifiedDatastreamHook') { + $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_MODIFIED_HOOK] = TRUE; + if (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'block') { + $context['block'] = TRUE; + } + } + elseif ($object->id == 'test:testPurgedDatastreamHook') { + $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE; + if (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'block') { + $context['block'] = TRUE; + } + elseif (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'delete') { + $context['delete'] = TRUE; + } + } + break; + + case 'purge': + if ($object->id == 'test:testPurgedDatastreamHook') { + $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE; + if ($datastream->label == 'block') { + $context['block'] = TRUE; + } + elseif ($datastream->label == 'delete') { + $context['delete'] = TRUE; + } + } + break; + } +} + +/** + * Implements hook_islandora_object_ingested(). + */ +function islandora_hooks_test_islandora_object_ingested(FedoraObject $object) { + if ($object->id == 'test:testIngestedObjectHook') { + $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_INGESTED_HOOK] = TRUE; + } +} + +/** + * Implements hook_islandora_object_modified(). + */ +function islandora_hooks_test_islandora_object_modified(FedoraObject $object) { + if ($object->id == 'test:testModifiedObjectHook') { + $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_MODIFIED_HOOK] = TRUE; + } +} + +/** + * Implements hook_islandora_object_purged(). + */ +function islandora_hooks_test_islandora_object_purged($pid) { + if ($pid == 'test:testPurgedObjectHook') { + $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE; + } +} + +/** + * Implements hook_islandora_datastream_ingested(). + */ +function islandora_hooks_test_islandora_datastream_ingested(FedoraObject $object, FedoraDatastream $datastream) { + if ($object->id == 'test:testIngestedDatastreamHook' && $datastream->id == "TEST") { + $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_INGESTED_HOOK] = TRUE; + } +} + +/** + * Implements hook_islandora_datastream_modified(). + */ +function islandora_hooks_test_islandora_datastream_modified(FedoraObject $object, FedoraDatastream $datastream) { + if ($object->id == 'test:testModifiedDatastreamHook' && $datastream->id == "TEST") { + $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_MODIFIED_HOOK] = TRUE; + } +} + +/** + * Implements hook_islandora_datastream_purged(). + */ +function islandora_hooks_test_islandora_datastream_purged(FedoraObject $object, $dsid) { + if ($object->id == 'test:testPurgedDatastreamHook' && $dsid == "TEST") { + $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE; + } +} From f5c1729cd2de266b2ed82d61a960385a6b80e340 Mon Sep 17 00:00:00 2001 From: William Panting Date: Fri, 22 Mar 2013 10:11:35 -0300 Subject: [PATCH 07/99] test setup docs --- tests/README.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/README.txt b/tests/README.txt index 797d788b..3e7fe11d 100644 --- a/tests/README.txt +++ b/tests/README.txt @@ -1,3 +1,4 @@ You can define your own configurations specific to your enviroment by copying default.test_config.ini to test_config.ini, making your changes in the copied -file. \ No newline at end of file +file. These test need write access to the system's $FEDORA_HOME/server/config +directory as they need to temporarily replace the filter-drupal.xml file. \ No newline at end of file From 822c9211a27671b9efae05c0fb9e124ca6dc2124 Mon Sep 17 00:00:00 2001 From: William Panting Date: Fri, 22 Mar 2013 10:28:11 -0300 Subject: [PATCH 08/99] need access to the filter file too --- tests/README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/README.txt b/tests/README.txt index 3e7fe11d..c03004ae 100644 --- a/tests/README.txt +++ b/tests/README.txt @@ -1,4 +1,4 @@ You can define your own configurations specific to your enviroment by copying default.test_config.ini to test_config.ini, making your changes in the copied file. These test need write access to the system's $FEDORA_HOME/server/config -directory as they need to temporarily replace the filter-drupal.xml file. \ No newline at end of file +directory as well as the filter-drupal.xml file. \ No newline at end of file From e8f5b8190a62533c9bbff335666121fd2afed191 Mon Sep 17 00:00:00 2001 From: Daniel Lamb Date: Wed, 27 Mar 2013 16:45:21 +0000 Subject: [PATCH 09/99] Buildfile and Doxyfile --- build.xml | 164 +++++++++++++++++++++---------------------------- build/Doxyfile | 3 + 2 files changed, 72 insertions(+), 95 deletions(-) diff --git a/build.xml b/build.xml index 854d3a0a..273f8ca8 100644 --- a/build.xml +++ b/build.xml @@ -1,110 +1,84 @@ - + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - + + + - - - - - - + + + + + + + + + + - - - - - - - + + + + + - - - - - - - - + + + + + - - - - - - - - + + + + + - - - - - - - - - - + + + + + - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - + + + + + diff --git a/build/Doxyfile b/build/Doxyfile index 1d4e3693..f41dc285 100644 --- a/build/Doxyfile +++ b/build/Doxyfile @@ -27,6 +27,9 @@ DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = Islandora 7.x +# Put the git hash here using sed before generating the documentation. +PROJECT_NUMBER = + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location From 2c829f0241a289732efbc4ca56dfccc9bca61bd1 Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Tue, 26 Mar 2013 07:10:03 +0100 Subject: [PATCH 10/99] Cleaned up and moved grid/list display logic into islandora, since its now used in several modules. --- css/islandora.objects.css | 39 ++++++++++++++++++ islandora.module | 23 +++++++++++ theme/islandora-objects-grid.tpl.php | 17 ++++++++ theme/islandora-objects-list.tpl.php | 29 +++++++++++++ theme/islandora-objects.tpl.php | 15 +++++++ theme/theme.inc | 61 ++++++++++++++++++++++++++++ 6 files changed, 184 insertions(+) create mode 100644 css/islandora.objects.css create mode 100644 theme/islandora-objects-grid.tpl.php create mode 100644 theme/islandora-objects-list.tpl.php create mode 100644 theme/islandora-objects.tpl.php diff --git a/css/islandora.objects.css b/css/islandora.objects.css new file mode 100644 index 00000000..5e03d3f7 --- /dev/null +++ b/css/islandora.objects.css @@ -0,0 +1,39 @@ +/** + * @file + * Styles for rendering grids/lists of objects. + */ +.islandora-objects-display-switch { + float: right; +} +.islandora-objects-grid-item { + display: inline-block; + width: 20%; + min-width: 100px; + min-height: 180px; + display: -moz-inline-stack; + display: inline-block; + vertical-align: top; + margin: 1.5em 1.84%; + zoom: 1; + *display: inline; + _height: 180px; +} +.islandora-objects-list-item { + padding-bottom: 1.5em; + border-bottom: 1px solid #ddd; +} +.islandora-objects-list-item .islandora-object-thumb { + clear: left; + float: left; + padding: 3px 0 0; + text-align: center; + width: 100px; +} +.islandora-objects-list-item .islandora-object-caption, .islandora-objects-list-item .islandora-object-description { + margin: 0 0 0 130px; + padding-top: 2px; + padding-bottom: 2px; +} +.islandora-object-thumb img { + width: 100%; +} diff --git a/islandora.module b/islandora.module index 94aedbe0..f800cf6d 100644 --- a/islandora.module +++ b/islandora.module @@ -286,6 +286,29 @@ function islandora_theme() { 'file' => 'theme/theme.inc', 'variables' => array('object' => NULL, 'content' => array()), ), + // Render a bunch of objects as either a grid or a list. + 'islandora_objects' => array( + 'file' => 'theme/theme.inc', + 'template' => 'theme/islandora-objects', + 'variables' => array( + 'objects' => NULL, + 'display' => NULL, + 'page_size' => 20, + 'limit' => 10, + ), + ), + // Render a bunch of objects as a grid. + 'islandora_objects_grid' => array( + 'file' => 'theme/theme.inc', + 'template' => 'theme/islandora-objects-grid', + 'variables' => array('objects' => NULL), + ), + // Render a bunch of objects as a list. + 'islandora_objects_list' => array( + 'file' => 'theme/theme.inc', + 'template' => 'theme/islandora-objects-list', + 'variables' => array('objects' => NULL), + ), ); } diff --git a/theme/islandora-objects-grid.tpl.php b/theme/islandora-objects-grid.tpl.php new file mode 100644 index 00000000..e6d7e140 --- /dev/null +++ b/theme/islandora-objects-grid.tpl.php @@ -0,0 +1,17 @@ + +
+ +
+
+
+
+
+
+ +
diff --git a/theme/islandora-objects-list.tpl.php b/theme/islandora-objects-list.tpl.php new file mode 100644 index 00000000..67f5f02d --- /dev/null +++ b/theme/islandora-objects-list.tpl.php @@ -0,0 +1,29 @@ + +
+ + + +
+
+
+ +
+
+ + + +
+
+ +
+
+
+ + +
diff --git a/theme/islandora-objects.tpl.php b/theme/islandora-objects.tpl.php new file mode 100644 index 00000000..5b55eb88 --- /dev/null +++ b/theme/islandora-objects.tpl.php @@ -0,0 +1,15 @@ + +
+ + $display_links, 'attributes' => array('class' => array('links', 'inline')))); ?> + + + + +
diff --git a/theme/theme.inc b/theme/theme.inc index 87e44fc1..7c43deef 100644 --- a/theme/theme.inc +++ b/theme/theme.inc @@ -157,3 +157,64 @@ function islandora_preprocess_islandora_object_print(array &$variables) { function theme_islandora_object_print(array &$variables) { return drupal_render($variables['content']); } + +/** + * Implements hook_preprocess_theme(). + */ +function islandora_preprocess_islandora_objects(array &$variables) { + module_load_include('inc', 'islandora_paged_content', 'includes/utilities'); + $display = (empty($_GET['display'])) ? 'grid' : $_GET['display']; + $grid_display = $display == 'grid'; + $list_display = !$grid_display; + $query_params = drupal_get_query_parameters($_GET); + $variables['display_links'] = array( + array( + 'title' => t('Grid view'), + 'href' => url($_GET['q'], array('absolute' => TRUE)), + 'attributes' => array( + 'class' => $grid_display ? 'active' : '', + ), + 'query' => array('display' => 'grid') + $query_params, + ), + array( + 'title' => t('List view'), + 'href' => url($_GET['q'], array('absolute' => TRUE)), + 'attributes' => array( + 'class' => $list_display ? 'active' : '', + ), + 'query' => array('display' => 'list') + $query_params, + ), + ); + // Pager. + $objects = $variables['objects']; + $limit = $variables['limit']; + $page_size = $variables['page_size']; + $page = pager_default_initialize(count($objects), $limit); + $objects = array_slice($objects, $page * $limit, $limit); + $variables['pager'] = theme('pager', array('quantity' => 10)); + // Content. + $map_objects = function($o) { + $o = islandora_object_load($o); + $url = "islandora/object/{$o->id}"; + $link_options = array('html' => TRUE, 'attributes' => array('title' => $o->label)); + $img = theme_image(array('path' => url("$url/datastream/TN/view"), 'attributes' => array())); + $description = NULL; + $dc = DublinCore::importFromXMLString($o['DC']->content); + if ($dc) { + $dc = $dc->asArray(); + $description = $dc['dc:description']['value']; + } + return array( + 'label' => $o->label, + 'class' => drupal_strtolower(preg_replace('/[^A-Za-z0-9]/', '-', $o->id)), + 'link' => l($o->label, $url, $link_options), + 'thumb' => l($img, $url, $link_options), + 'description' => $description, + ); + }; + $objects = array_map($map_objects, $objects); + $theme = $grid_display ? 'islandora_objects_grid' : 'islandora_objects_list'; + $variables['content'] = theme($theme, array('objects' => $objects)); + $module_path = drupal_get_path('module', 'islandora'); + drupal_add_css("$module_path/css/islandora.objects.css"); +} From 212e113700ab5ed1da4ca2e2dee92480bf17363e Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 28 Mar 2013 12:14:58 -0300 Subject: [PATCH 11/99] Updated travis config a bit --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index fa7e5ca9..a93edb4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,7 @@ before_install: - drush dl --yes drupal - cd drupal-* - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes - - drush runserver 8081 > /dev/null & + - drush runserver localhost:8081 > /dev/null & - ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora - mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini - mkdir sites/all/libraries @@ -32,4 +32,4 @@ before_install: - drush cc all - sleep 4 script: - - drush test-run --uri=http://127.0.0.1:8081 Islandora + - sudo -u www-data drush test-run --uri=http://localhost:8081 Islandora From 1f915cad127373b3fe7e042cd514c6ad7437fe0a Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 28 Mar 2013 12:27:19 -0300 Subject: [PATCH 12/99] Another try at travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index a93edb4b..8fae0457 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ before_install: - pyrus channel-discover pear.drush.org - pyrus install drush/drush - phpenv rehash + - sudo -u www-data phpenv rehash - drush dl --yes drupal - cd drupal-* - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes From ff8a7aa301316872f515e551ee1444469d7856fd Mon Sep 17 00:00:00 2001 From: daitken Date: Thu, 28 Mar 2013 12:39:35 -0300 Subject: [PATCH 13/99] object_properties.form.inc grammar fixes --- includes/object_properties.form.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/includes/object_properties.form.inc b/includes/object_properties.form.inc index 29875d28..0898db0c 100644 --- a/includes/object_properties.form.inc +++ b/includes/object_properties.form.inc @@ -30,7 +30,7 @@ function islandora_object_properties_form(array $form, array &$form_state, Fedor '#title' => t('Item Label'), '#default_value' => $object->label, '#required' => 'TRUE', - '#description' => t('A Human readable label'), + '#description' => t('A human-readable label'), // Double the normal length. '#size' => 120, // Max length for a Fedora Label. @@ -43,14 +43,14 @@ function islandora_object_properties_form(array $form, array &$form_state, Fedor '#title' => t('Owner'), '#default_value' => $object->owner, '#required' => FALSE, - '#description' => t('The owner id'), + '#description' => t('The owner\'s account name'), '#type' => 'textfield', ), 'object_state' => array( '#title' => t('State'), '#default_value' => $object->state, '#required' => TRUE, - '#description' => t('The items state one of active, inactive or deleted'), + '#description' => t('The object\'s state (active, inactive or deleted)'), '#type' => 'select', '#options' => array('A' => 'Active', 'I' => 'Inactive', 'D' => 'Deleted'), ), From 815e3dc9bb9442047662b207a4fd2975999e8d43 Mon Sep 17 00:00:00 2001 From: daitken Date: Thu, 28 Mar 2013 12:43:35 -0300 Subject: [PATCH 14/99] add_datastream.form.inc grammar fixes --- includes/add_datastream.form.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/add_datastream.form.inc b/includes/add_datastream.form.inc index fa94148f..d19d5757 100644 --- a/includes/add_datastream.form.inc +++ b/includes/add_datastream.form.inc @@ -39,7 +39,7 @@ function islandora_add_datastream_form(array $form, array &$form_state, FedoraOb '#collapsed' => FALSE, 'dsid' => array( '#title' => 'Datastream ID', - '#description' => t("An ID for this stream that is unique to this object. Must start with a letter and contain only alphanumeric characters and dashes and underscores. Datastreams that are defined by the content model don't currently exist: @unused_dsids.", array('@unused_dsids' => $unused_datastreams)), + '#description' => t("An ID for this stream that is unique to this object. Must start with a letter and contain only alphanumeric characters, dashes and underscores. The following datastreams are defined by this content model but don't currently exist: @unused_dsids.", array('@unused_dsids' => $unused_datastreams)), ), '#type' => 'textfield', '#size' => 64, @@ -57,7 +57,7 @@ function islandora_add_datastream_form(array $form, array &$form_state, FedoraOb '#required' => TRUE, '#size' => 64, '#maxlength' => 64, - '#description' => t('A Human readable label'), + '#description' => t('A human-readable label'), '#type' => 'textfield', '#element_validate' => array('islandora_add_datastream_form_field_does_not_contain_a_forward_slash'), ), From 2763f2b267f80d42a1c0d8e8bf1ac66c0c5369d8 Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Thu, 28 Mar 2013 12:44:35 -0300 Subject: [PATCH 15/99] Use build_hook_list so we get correct hook_names when altering. --- includes/tuque_wrapper.inc | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/includes/tuque_wrapper.inc b/includes/tuque_wrapper.inc index 8bd3c3e6..9904af60 100644 --- a/includes/tuque_wrapper.inc +++ b/includes/tuque_wrapper.inc @@ -35,10 +35,7 @@ $islandora_module_path = drupal_get_path('module', 'islandora'); * Allow modules to alter an object before a mutable event occurs. */ function islandora_alter_object(AbstractFedoraObject $object, array &$context) { - $types = array('islandora_object'); - foreach ($object->models as $model) { - $types[] = "{$model}_islandora_object"; - } + $types = islandora_build_hook_list('islandora_object', $object->models); drupal_alter($types, $object, $context); } @@ -46,11 +43,11 @@ function islandora_alter_object(AbstractFedoraObject $object, array &$context) { * Allow modules to alter a datastream before a mutable event occurs. */ function islandora_alter_datastream(AbstractFedoraObject $object, AbstractDatastream $datastream, array &$context) { - $types = array('islandora_datastream'); + $types = array(); foreach ($object->models as $model) { - $types[] = "{$model}_{$datastream->id}_islandora_datastream"; + $types[] = "{$model}_{$datastream->id}"; } - drupal_alter($types, $object, $datastream, $context); + drupal_alter(islandora_build_hook_list('islandora_datastream', $types), $object, $datastream, $context); } /** From ac50236252628003e5a8cb50d21a2fe75f489036 Mon Sep 17 00:00:00 2001 From: daitken Date: Thu, 28 Mar 2013 12:49:05 -0300 Subject: [PATCH 16/99] admin.form.inc grammar fixes --- includes/admin.form.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/admin.form.inc b/includes/admin.form.inc index d3bccd5a..a1f22652 100644 --- a/includes/admin.form.inc +++ b/includes/admin.form.inc @@ -146,7 +146,7 @@ function islandora_repository_admin(array $form, array &$form_state) { '#type' => 'textfield', '#title' => t('PID namespaces allowed in this Drupal install'), '#default_value' => variable_get('islandora_pids_allowed', 'default: demo: changeme: ilives: islandora-book: books: newspapers: '), - '#description' => t('A space separated list of PID namespaces that users are permitted to access from this Drupal installation.
This could be more than a simple namespace ie demo:mydemos.
islandora: is reserved and is always allowed.'), + '#description' => t('A list of PID namespaces, separated by spaces, that users are permitted to access from this Drupal installation.
This could be more than a simple namespace, e.g. demo:mydemos.
The namespace islandora: is reserved, and is always allowed.'), '#weight' => 0, ); } From af933e66ff97e3316b7f5cbaacdbdc24f564c1b6 Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Thu, 28 Mar 2013 12:52:55 -0300 Subject: [PATCH 17/99] Add module_loads just incase and more consistency. --- includes/tuque_wrapper.inc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/includes/tuque_wrapper.inc b/includes/tuque_wrapper.inc index 9904af60..8e4e8a0f 100644 --- a/includes/tuque_wrapper.inc +++ b/includes/tuque_wrapper.inc @@ -35,14 +35,15 @@ $islandora_module_path = drupal_get_path('module', 'islandora'); * Allow modules to alter an object before a mutable event occurs. */ function islandora_alter_object(AbstractFedoraObject $object, array &$context) { - $types = islandora_build_hook_list('islandora_object', $object->models); - drupal_alter($types, $object, $context); + module_load_include('inc', 'islandora', 'includes/utilities'); + drupal_alter(islandora_build_hook_list('islandora_object', $object->models) ,$object, $context); } /** * Allow modules to alter a datastream before a mutable event occurs. */ function islandora_alter_datastream(AbstractFedoraObject $object, AbstractDatastream $datastream, array &$context) { + module_load_include('inc', 'islandora', 'includes/utilities'); $types = array(); foreach ($object->models as $model) { $types[] = "{$model}_{$datastream->id}"; From 8204d1f8fd8a8409701003a45fa4c77305ddedb0 Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Mon, 1 Apr 2013 16:33:49 +0200 Subject: [PATCH 18/99] Standards Compliance --- tests/islandora_manage_permissions.test | 64 ++++++++++++++----------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/tests/islandora_manage_permissions.test b/tests/islandora_manage_permissions.test index 76f43a6d..5e20b374 100644 --- a/tests/islandora_manage_permissions.test +++ b/tests/islandora_manage_permissions.test @@ -1,7 +1,17 @@ 'Islandora Manage Permissions', @@ -10,69 +20,65 @@ class IslandoraPermissionsTestCase extends IslandoraWebTestCase { ); } + /** + * Prepares enviroment for testing. + * + * @see IslandoraWebTestCase::setUp() + */ public function setUp() { parent::setUp(array('islandora')); } + /** + * Test manage permissions. + */ public function testManagePermissions() { - - - // permission FEDORA_VIEW_OBJECTS - // create a user with permission + // Test permission FEDORA_VIEW_OBJECTS. + // Create a user with permission. $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS)); - // log the user in + // Log the user in. $this->drupalLogin($user); $this->clickLink(t('Islandora Repository')); $this->assertNoLink('Manage', 'Manage tab is not on current page.'); - - - // permission FEDORA_VIEW_OBJECTS, FEDORA_MANAGE_PROPERTIES + + // Test permission FEDORA_VIEW_OBJECTS, FEDORA_MANAGE_PROPERTIES. $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS, FEDORA_MANAGE_PROPERTIES)); - // log the user in $this->drupalLogin($user); $this->clickLink(t('Islandora Repository')); $this->assertLink('Manage', 0, 'Manage tab is on current page.'); $this->clickLink(t('Manage')); $this->assertLink('Properties', 0, 'Properties tab is on current page.'); $this->assertNoLink('Datastreams', 'Datastreams tab is not on current page.'); - $this->assertNoLink('Collection','Collection tab is not on current page.'); + $this->assertNoLink('Collection', 'Collection tab is not on current page.'); - - // permission FEDORA_VIEW_OBJECTS, FEDORA_ADD_DS + // Test permission FEDORA_VIEW_OBJECTS, FEDORA_ADD_DS. $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS, FEDORA_ADD_DS)); - // log the user in $this->drupalLogin($user); $this->clickLink(t('Islandora Repository')); $this->assertLink('Manage', 0, 'Manage tab is on current page.'); $this->clickLink(t('Manage')); $this->assertLink('Datastreams', 0, 'Datastreams tab is on current page.'); $this->assertNoLink('Properties', 'Properties tab is not on current page.'); - $this->assertNoLink('Collection','Collection tab is not on current page.'); - - - // permission FEDORA_VIEW_OBJECTS, FEDORA_METADATA_EDIT + $this->assertNoLink('Collection', 'Collection tab is not on current page.'); + + // Test permission FEDORA_VIEW_OBJECTS, FEDORA_METADATA_EDIT. $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS, FEDORA_METADATA_EDIT)); - // log the user in - $this->drupalLogin($user); + $this->drupalLogin($user); $this->clickLink(t('Islandora Repository')); $this->assertLink('Manage', 0, 'Manage tab is on current page.'); $this->clickLink(t('Manage')); $this->assertLink('Datastreams', 0, 'Datastreams tab is on current page.'); $this->assertNoLink('Properties', 'Properties tab is not on current page.'); - $this->assertNoLink('Collection','Collection tab is not on current page.'); - - - // permission FEDORA_VIEW_OBJECTS, FEDORA_PURGE + $this->assertNoLink('Collection', 'Collection tab is not on current page.'); + + // Test permission FEDORA_VIEW_OBJECTS, FEDORA_PURGE. $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS, FEDORA_PURGE)); - // log the user in $this->drupalLogin($user); $this->clickLink(t('Islandora Repository')); $this->assertLink('Manage', 0, 'Manage tab is on current page.'); $this->clickLink(t('Manage')); $this->assertLink('Datastreams', 0, 'Datastreams tab is on current page.'); $this->assertNoLink('Properties', 'Properties tab is not on current page.'); - $this->assertNoLink('Collection','Collection tab is not on current page.'); - + $this->assertNoLink('Collection', 'Collection tab is not on current page.'); } - - } \ No newline at end of file +} From 68bbbe163e3e67fddb4adf26eb4fd02a31d1597b Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Mon, 1 Apr 2013 17:30:41 +0200 Subject: [PATCH 19/99] Added tests for islandora_user_access(). Caught a spelling mistake as part of the testing writing. --- islandora.module | 2 +- tests/islandora_manage_permissions.test | 52 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/islandora.module b/islandora.module index 57ee5d9b..47fed2e6 100644 --- a/islandora.module +++ b/islandora.module @@ -401,7 +401,7 @@ function islandora_user_access($object, array $permissions, $content_models = ar } elseif (is_subclass_of($object, 'FedoraDatastream')) { $datastream = $object; - $object = $datstream->parent; + $object = $datastream->parent; } // Check for access. $accessible_namespace = islandora_namespace_accessible($object->id); diff --git a/tests/islandora_manage_permissions.test b/tests/islandora_manage_permissions.test index 5e20b374..72aebd89 100644 --- a/tests/islandora_manage_permissions.test +++ b/tests/islandora_manage_permissions.test @@ -81,4 +81,56 @@ class IslandoraPermissionsTestCase extends IslandoraWebTestCase { $this->assertNoLink('Properties', 'Properties tab is not on current page.'); $this->assertNoLink('Collection', 'Collection tab is not on current page.'); } + + /** + * Test generic access functions. + * + * Note that we can't test with the Global user as SimpleTest doesn't support + * it. Therefore we can't test the authtoken support. + */ + public function testAccessFunctions() { + $object = islandora_object_load(variable_get('islandora_repository_pid', 'islandora:root')); + // Test islandora_user_access(); + // Test no object/permissions. + $ret = islandora_user_access(NULL, array()); + $this->assertFalse($ret, 'User access denied when no object/permissions are provided.'); + // Test with object no permissions. + $ret = islandora_user_access($object, array()); + $this->assertFalse($ret, 'User access denied when no permissions are provided.'); + // Test access with matching permission. + $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS)); + $ret = islandora_user_access($object, array(FEDORA_VIEW_OBJECTS), array(), TRUE, $user); + $this->assertTrue($ret, 'User access granted when permissions match.'); + // Test access with matching permission but access any is FALSE. + $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS)); + $ret = islandora_user_access($object, array(FEDORA_VIEW_OBJECTS, FEDORA_PURGE), array(), FALSE, $user); + $this->assertFalse($ret, 'User access denied for matching permission but with access any set to FALSE.'); + // Test access with non-matching permission. + $user = $this->drupalCreateUser(array(FEDORA_PURGE)); + $ret = islandora_user_access($object, array(FEDORA_VIEW_OBJECTS), array(), TRUE, $user); + $this->assertFalse($ret, 'User access denied when permissions did not match.'); + // Test access with both permissions and content model. + $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS)); + $model = $object->models; + $model = reset($model); + $ret = islandora_user_access($object, array(FEDORA_VIEW_OBJECTS), array($model), TRUE, $user); + $this->assertTrue($ret, 'User access granted for matching permission and model.'); + // Test access with matching permissions and non-matching content model. + $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS)); + $ret = islandora_user_access($object, array(FEDORA_VIEW_OBJECTS), array('islandora:obviouslyNotACModel'), TRUE, $user); + $this->assertFalse($ret, 'User access denied for matching permission and non-matching model.'); + // Test access with all matching permissions and one matching model but + // access any is FALSE. + $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS, FEDORA_PURGE)); + $model = $object->models; + $model = reset($model); + $ret = islandora_user_access($object, array(FEDORA_VIEW_OBJECTS, FEDORA_PURGE), array($model, 'islandora:obviouslyNotACModel'), FALSE, $user); + $this->assertFalse($ret, 'User access denied for all matching permissions and one matching model but with access any set to FALSE.'); + $ret = islandora_user_access($object, array(FEDORA_VIEW_OBJECTS, FEDORA_PURGE), array($model), FALSE, $user); + $this->assertTrue($ret, 'User access granted for all matching permissions and matching models with access any set to FALSE.'); + // Test passing in a Datastream. + $user = $this->drupalCreateUser(array(FEDORA_VIEW_OBJECTS, FEDORA_PURGE)); + $ret = islandora_user_access($object['DC'], array(FEDORA_VIEW_OBJECTS), array(), TRUE, $user); + $this->assertTrue($ret, 'User access granted for matching permissions, with a datastream given instead of an object.'); + } } From 90b9b6ceb602ac68b2c4daa9b0548d3321b09b55 Mon Sep 17 00:00:00 2001 From: Jonathan Green Date: Tue, 2 Apr 2013 19:33:43 +0000 Subject: [PATCH 20/99] Some updates of tests for Travis --- tests/hooks.test | 2 +- tests/web_test_case.inc | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/hooks.test b/tests/hooks.test index 0a667fee..bc3020f3 100644 --- a/tests/hooks.test +++ b/tests/hooks.test @@ -32,7 +32,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { * @see IslandoraWebTestCase::setUp() */ public function setUp() { - parent::setUp('islandora_hooks_test', 'devel'); + parent::setUp('islandora_hooks_test'); $this->repository = $this->admin->repository; $this->purgeTestObjects(); } diff --git a/tests/web_test_case.inc b/tests/web_test_case.inc index a513de43..3651e3db 100644 --- a/tests/web_test_case.inc +++ b/tests/web_test_case.inc @@ -18,6 +18,10 @@ class IslandoraWebTestCase extends DrupalWebTestCase { // Always enable islandora. $args[] = 'islandora'; parent::setUp($args); + // Its possible test are running before class autoloading + module_load_include('inc', 'islandora', 'includes/tuque'); + module_load_include('inc', 'islandora', 'includes/tuque_wrapper'); + $this->configuration = $this->getTestConfiguration(); if ($this->configuration['use_drupal_filter']) { $this->backUpDrupalFilter(); From b1e57b16d89d95af9abe96cc13dfc29103638927 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Tue, 2 Apr 2013 16:38:57 -0300 Subject: [PATCH 21/99] Another change to the travis-ci config --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8fae0457..c5284425 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ before_install: - sudo apt-get install -qq php5-cgi - sudo apt-get install -qq php5-mysql - git clone git://github.com/Islandora/tuque.git - - git clone git://github.com/Islandora/islandora_tomcat.git + - git clone -b 3.5 git://github.com/Islandora/islandora_tomcat.git - cd islandora_tomcat - export CATALINA_HOME='.' - ./bin/startup.sh @@ -23,7 +23,7 @@ before_install: - drush dl --yes drupal - cd drupal-* - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes - - drush runserver localhost:8081 > /dev/null & + - drush runserver localhost:8081 &>/dev/null & - ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora - mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini - mkdir sites/all/libraries @@ -33,4 +33,4 @@ before_install: - drush cc all - sleep 4 script: - - sudo -u www-data drush test-run --uri=http://localhost:8081 Islandora + - drush test-run --uri=http://localhost:8081 Islandora From 12dcbb5b17340653c249c14b00e117ca642994a3 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Tue, 2 Apr 2013 16:44:01 -0300 Subject: [PATCH 22/99] Another travis config change --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c5284425..b1c550de 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,6 @@ before_install: - pyrus channel-discover pear.drush.org - pyrus install drush/drush - phpenv rehash - - sudo -u www-data phpenv rehash - drush dl --yes drupal - cd drupal-* - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes From 54acff362ba344c81c8897fca5830797af839afe Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Wed, 3 Apr 2013 12:06:11 -0300 Subject: [PATCH 23/99] Handle downloading of clips in core (ONTIME-1262). --- islandora.module | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/islandora.module b/islandora.module index 05a3a57b..43b363fe 100644 --- a/islandora.module +++ b/islandora.module @@ -245,6 +245,14 @@ function islandora_menu() { 'type' => MENU_SUGGESTED_ITEM, 'access arguments' => array(FEDORA_INGEST), ); + $items['islandora/object/%islandora_object/download_clip'] = array( + 'page callback' => 'islandora_download_clip', + 'page arguments' => array(2), + 'type' => MENU_CALLBACK, + 'access callback' => 'islandora_object_access_callback', + 'access arguments' => array(FEDORA_VIEW_OBJECTS, 2), + 'load arguments' => array(2), + ); return $items; } @@ -1073,3 +1081,25 @@ function islandora_print_object(FedoraObject $object) { drupal_set_title($object->label); return theme('islandora_object_print', array('object' => $object)); } + +/** + * Menu callback downloads the given clip. + */ +function islandora_download_clip(FedoraObject $object) { + if (isset($_GET['clip'])) { + $is_https = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on'; + $http_protocol = $is_https ? 'https' : 'http'; + $url = $http_protocol . '://' . $_SERVER['HTTP_HOST'] . $_GET['clip']; + $filename = $object->label; + header("Content-Disposition: attachment; filename=\"{$filename}.jpg\""); + header("Content-type: image/jpeg"); + header("Content-Transfer-Encoding: binary"); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_URL, $url); + $response = curl_exec ($ch); + curl_close($ch); + } + exit(); +} \ No newline at end of file From 0b0acd0759dc323b060872d1c5e341d6bdc321fc Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Wed, 3 Apr 2013 12:08:00 -0300 Subject: [PATCH 24/99] New line and codesniffer changes. --- islandora.module | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/islandora.module b/islandora.module index 43b363fe..c9ea373b 100644 --- a/islandora.module +++ b/islandora.module @@ -120,7 +120,7 @@ function islandora_menu() { FEDORA_METADATA_EDIT, FEDORA_ADD_DS, FEDORA_PURGE, - FEDORA_INGEST + FEDORA_INGEST, ), 2), ); @@ -1098,8 +1098,8 @@ function islandora_download_clip(FedoraObject $object) { curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_URL, $url); - $response = curl_exec ($ch); + $response = curl_exec($ch); curl_close($ch); } exit(); -} \ No newline at end of file +} From 13efc16b6a57720d9c07913a2c87174773a52920 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 15:31:53 -0300 Subject: [PATCH 25/99] Updated travis config again --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b1c550de..b0883342 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: php php: - - 5.3 + - 5.3.3 before_install: - mysql -u root -e 'create database drupal;' - mysql -u root -e "create database fedora;" @@ -8,8 +8,6 @@ before_install: - mysql -u root -e "GRANT ALL PRIVILEGES ON drupal.* To 'drupal'@'localhost' IDENTIFIED BY 'drupal';" - cd $HOME - sudo apt-get update -qq - - sudo apt-get install -qq php5-cgi - - sudo apt-get install -qq php5-mysql - git clone git://github.com/Islandora/tuque.git - git clone -b 3.5 git://github.com/Islandora/islandora_tomcat.git - cd islandora_tomcat From 35117d4f3046d8e5fb63b87edbaf74951893ca2d Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 15:40:33 -0300 Subject: [PATCH 26/99] added another updated travis config --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b0883342..6455bb7f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: php php: - - 5.3.3 + - 5.4 before_install: - mysql -u root -e 'create database drupal;' - mysql -u root -e "create database fedora;" @@ -20,7 +20,7 @@ before_install: - drush dl --yes drupal - cd drupal-* - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes - - drush runserver localhost:8081 &>/dev/null & + - drush runserver --server=builtin localhost:8081 &>/dev/null & - ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora - mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini - mkdir sites/all/libraries From 258688747606cefd664a704164ce51db37c927e3 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 15:54:45 -0300 Subject: [PATCH 27/99] Updated travis to build with different fedora versions --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 6455bb7f..e9909ebe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,9 @@ language: php php: - 5.4 +env: + - FEDORA_VERSION="3.5" + - FEDORA_VERSION="3.6.2" before_install: - mysql -u root -e 'create database drupal;' - mysql -u root -e "create database fedora;" From 2ac9ce5507d3bee1d8911b8569641105ec5778b0 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 16:11:53 -0300 Subject: [PATCH 28/99] Updated travis to build with different fedora versions --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e9909ebe..ffd4d8df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ before_install: - cd $HOME - sudo apt-get update -qq - git clone git://github.com/Islandora/tuque.git - - git clone -b 3.5 git://github.com/Islandora/islandora_tomcat.git + - git clone -b $FEDORA_VERSION git://github.com/Islandora/islandora_tomcat.git - cd islandora_tomcat - export CATALINA_HOME='.' - ./bin/startup.sh From 64ff24a0853c4978e76f93f8e7744e30f9c73924 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 16:27:36 -0300 Subject: [PATCH 29/99] Updated travis to build with different fedora versions --- .travis.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ffd4d8df..6626bf0e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,15 @@ language: php php: + - 5.3.3 - 5.4 env: - FEDORA_VERSION="3.5" - - FEDORA_VERSION="3.6.2" before_install: - mysql -u root -e 'create database drupal;' - mysql -u root -e "create database fedora;" - mysql -u root -e "GRANT ALL PRIVILEGES ON fedora.* To 'fedora'@'localhost' IDENTIFIED BY 'fedora';" - mysql -u root -e "GRANT ALL PRIVILEGES ON drupal.* To 'drupal'@'localhost' IDENTIFIED BY 'drupal';" - cd $HOME - - sudo apt-get update -qq - git clone git://github.com/Islandora/tuque.git - git clone -b $FEDORA_VERSION git://github.com/Islandora/islandora_tomcat.git - cd islandora_tomcat @@ -23,7 +22,7 @@ before_install: - drush dl --yes drupal - cd drupal-* - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes - - drush runserver --server=builtin localhost:8081 &>/dev/null & + - drush runserver localhost:8081 &>/dev/null & - ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora - mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini - mkdir sites/all/libraries From 031d1579ad71771ef415dbf260a6ddb561974c88 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 16:53:37 -0300 Subject: [PATCH 30/99] Updated travis to build with different fedora versions --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6626bf0e..277a591b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,7 @@ before_install: - drush dl --yes drupal - cd drupal-* - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes - - drush runserver localhost:8081 &>/dev/null & + - drush runserver --php-cgi=$HOME/.phpenv/shims/php-cgi localhost:8081 &>/dev/null & - ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora - mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini - mkdir sites/all/libraries From 80aa8ed756df0dfb020f496eae5ddaadb566394f Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 17:15:18 -0300 Subject: [PATCH 31/99] moved travis setup to a script --- .travis.yml | 27 +-------------------------- tests/travis_setup.sh | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 26 deletions(-) create mode 100755 tests/travis_setup.sh diff --git a/.travis.yml b/.travis.yml index 277a591b..1adb38a4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,31 +5,6 @@ php: env: - FEDORA_VERSION="3.5" before_install: - - mysql -u root -e 'create database drupal;' - - mysql -u root -e "create database fedora;" - - mysql -u root -e "GRANT ALL PRIVILEGES ON fedora.* To 'fedora'@'localhost' IDENTIFIED BY 'fedora';" - - mysql -u root -e "GRANT ALL PRIVILEGES ON drupal.* To 'drupal'@'localhost' IDENTIFIED BY 'drupal';" - - cd $HOME - - git clone git://github.com/Islandora/tuque.git - - git clone -b $FEDORA_VERSION git://github.com/Islandora/islandora_tomcat.git - - cd islandora_tomcat - - export CATALINA_HOME='.' - - ./bin/startup.sh - - cd $HOME - - pyrus channel-discover pear.drush.org - - pyrus install drush/drush - - phpenv rehash - - drush dl --yes drupal - - cd drupal-* - - drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes - - drush runserver --php-cgi=$HOME/.phpenv/shims/php-cgi localhost:8081 &>/dev/null & - - ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora - - mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini - - mkdir sites/all/libraries - - ln -s $HOME/tuque sites/all/libraries/tuque - - drush en --yes simpletest - - drush en --user=1 --yes islandora - - drush cc all - - sleep 4 + - $TRAVIS_BUILD_DIR/test/setup_travis.sh script: - drush test-run --uri=http://localhost:8081 Islandora diff --git a/tests/travis_setup.sh b/tests/travis_setup.sh new file mode 100755 index 00000000..936aea0d --- /dev/null +++ b/tests/travis_setup.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +mysql -u root -e 'create database drupal;' +mysql -u root -e "create database fedora;" +mysql -u root -e "GRANT ALL PRIVILEGES ON fedora.* To 'fedora'@'localhost' IDENTIFIED BY 'fedora';" +mysql -u root -e "GRANT ALL PRIVILEGES ON drupal.* To 'drupal'@'localhost' IDENTIFIED BY 'drupal';" +cd $HOME +git clone git://github.com/Islandora/tuque.git +git clone -b $FEDORA_VERSION git://github.com/Islandora/islandora_tomcat.git +cd islandora_tomcat +export CATALINA_HOME='.' +./bin/startup.sh +cd $HOME +pyrus channel-discover pear.drush.org +pyrus install drush/drush +phpenv rehash +drush dl --yes drupal +cd drupal-* +drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes +drush runserver --php-cgi=$HOME/.phpenv/shims/php-cgi localhost:8081 &>/dev/null & +ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora +mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini +mkdir sites/all/libraries +ln -s $HOME/tuque sites/all/libraries/tuque +drush en --yes simpletest +drush en --user=1 --yes islandora +drush cc all +sleep 4 From f4c758684b977b672b84152a6f1913039265ff7f Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 17:18:24 -0300 Subject: [PATCH 32/99] Minor mistake from previous travis config --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1adb38a4..acc9a0dc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,6 @@ php: env: - FEDORA_VERSION="3.5" before_install: - - $TRAVIS_BUILD_DIR/test/setup_travis.sh + - $TRAVIS_BUILD_DIR/tests/setup_travis.sh script: - drush test-run --uri=http://localhost:8081 Islandora From 3b5e7cda938c3adb2171816cb79605ea94d80bf5 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 17:20:42 -0300 Subject: [PATCH 33/99] Another dumb path error --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index acc9a0dc..dcd11c3e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,6 @@ php: env: - FEDORA_VERSION="3.5" before_install: - - $TRAVIS_BUILD_DIR/tests/setup_travis.sh + - $TRAVIS_BUILD_DIR/tests/travis_setup.sh script: - drush test-run --uri=http://localhost:8081 Islandora From 6e49122ad090a815663227c85c37092d943e77ca Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 17:27:15 -0300 Subject: [PATCH 34/99] should work again --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index dcd11c3e..99d605b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,5 +6,6 @@ env: - FEDORA_VERSION="3.5" before_install: - $TRAVIS_BUILD_DIR/tests/travis_setup.sh + - cd drupal-* script: - drush test-run --uri=http://localhost:8081 Islandora From 28b66eaf8e5a33e040c520c49a7d853320f3c390 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 17:34:35 -0300 Subject: [PATCH 35/99] another update for paths --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 99d605b4..96872f5c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,6 @@ env: - FEDORA_VERSION="3.5" before_install: - $TRAVIS_BUILD_DIR/tests/travis_setup.sh - - cd drupal-* + - cd $HOME/drupal-* script: - drush test-run --uri=http://localhost:8081 Islandora From 9d714e1c81ab7e67040514d73f79dbadcd687cff Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 17:56:16 -0300 Subject: [PATCH 36/99] Added some branch exclusions. Renamed readme. --- .travis.yml | 3 +++ README.txt => README.md | 0 2 files changed, 3 insertions(+) rename README.txt => README.md (100%) diff --git a/.travis.yml b/.travis.yml index 96872f5c..e5ced01d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,9 @@ language: php php: - 5.3.3 - 5.4 +branches: + only: + - 7.x env: - FEDORA_VERSION="3.5" before_install: diff --git a/README.txt b/README.md similarity index 100% rename from README.txt rename to README.md From a501d8a6495caf7ba15a58cb79b44539a3008448 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 19:41:47 -0300 Subject: [PATCH 37/99] Added Jenkins status to readme --- README.md | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index ce276d7b..dceaec0e 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,10 @@ -CONTENTS OF THIS FILE ---------------------- - - * summary - * requirements - * installation - * configuration - * customization - * troubleshooting - * faq - * contact - * sponsors +BUILD STATUS +------------ +Current build status: +[![Build Status](https://travis-ci.org/Islandora/islandora.png?branch=7.x)](https://travis-ci.org/Islandora/islandora) +CI Server: +http://jenkins.discoverygarden.ca:8080 SUMMARY ------- From 092133272e6c910936db36b1e7e4411a28f0a9e6 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 20:09:18 -0300 Subject: [PATCH 38/99] Added codesniffer to travisci When code is pushed it is now failed if it fails codesniffer. Also pushed a number of coding standards fixes so that this commit will build correctly. --- .travis.yml | 3 ++- includes/object_properties.form.inc | 4 ++-- includes/tuque_wrapper.inc | 2 +- islandora.install | 5 +++-- islandora.module | 2 +- tests/travis_setup.sh | 3 +++ tests/web_test_case.inc | 3 ++- theme/islandora-objects.tpl.php | 8 +++++++- 8 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index e5ced01d..dc0a8794 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,5 +10,6 @@ env: before_install: - $TRAVIS_BUILD_DIR/tests/travis_setup.sh - cd $HOME/drupal-* -script: +script: + - drush dcs sites/all/modules/islandora - drush test-run --uri=http://localhost:8081 Islandora diff --git a/includes/object_properties.form.inc b/includes/object_properties.form.inc index 0898db0c..c9de5e8f 100644 --- a/includes/object_properties.form.inc +++ b/includes/object_properties.form.inc @@ -43,14 +43,14 @@ function islandora_object_properties_form(array $form, array &$form_state, Fedor '#title' => t('Owner'), '#default_value' => $object->owner, '#required' => FALSE, - '#description' => t('The owner\'s account name'), + '#description' => t("The owner's account name"), '#type' => 'textfield', ), 'object_state' => array( '#title' => t('State'), '#default_value' => $object->state, '#required' => TRUE, - '#description' => t('The object\'s state (active, inactive or deleted)'), + '#description' => t("The object's state (active, inactive or deleted)"), '#type' => 'select', '#options' => array('A' => 'Active', 'I' => 'Inactive', 'D' => 'Deleted'), ), diff --git a/includes/tuque_wrapper.inc b/includes/tuque_wrapper.inc index 8e4e8a0f..4d989e9f 100644 --- a/includes/tuque_wrapper.inc +++ b/includes/tuque_wrapper.inc @@ -36,7 +36,7 @@ $islandora_module_path = drupal_get_path('module', 'islandora'); */ function islandora_alter_object(AbstractFedoraObject $object, array &$context) { module_load_include('inc', 'islandora', 'includes/utilities'); - drupal_alter(islandora_build_hook_list('islandora_object', $object->models) ,$object, $context); + drupal_alter(islandora_build_hook_list('islandora_object', $object->models), $object, $context); } /** diff --git a/islandora.install b/islandora.install index 9a1825b5..caff7d75 100644 --- a/islandora.install +++ b/islandora.install @@ -10,13 +10,14 @@ */ function islandora_requirements($phase) { $requirements = array(); - // Ensure translations don't break at install time + + // Ensure translations don't break at install time. $t = get_t(); if (!class_exists('XSLTProcessor', FALSE)) { $requirements['islandora_xsltprocessor']['title'] = $t('Islandora XSLTProcessor Prerequisite'); $requirements['islandora_xsltprocessor']['value'] = $t('Not installed'); - $link = l($t('PHP XSL extension'), 'http://us2.php.net/manual/en/book.xsl.php', array('attributes' => array('target'=>'_blank'))); + $link = l($t('PHP XSL extension'), 'http://us2.php.net/manual/en/book.xsl.php', array('attributes' => array('target' => '_blank'))); $requirements['islandora_xsltprocessor']['description'] = $t('The !xsllink is required. Check your installed PHP extensions and php.ini file.', array('!xsllink' => $link)); $requirements['islandora_xsltprocessor']['severity'] = REQUIREMENT_ERROR; } diff --git a/islandora.module b/islandora.module index 05a3a57b..981189bc 100644 --- a/islandora.module +++ b/islandora.module @@ -120,7 +120,7 @@ function islandora_menu() { FEDORA_METADATA_EDIT, FEDORA_ADD_DS, FEDORA_PURGE, - FEDORA_INGEST + FEDORA_INGEST, ), 2), ); diff --git a/tests/travis_setup.sh b/tests/travis_setup.sh index 936aea0d..abbaccd2 100755 --- a/tests/travis_setup.sh +++ b/tests/travis_setup.sh @@ -13,6 +13,7 @@ export CATALINA_HOME='.' cd $HOME pyrus channel-discover pear.drush.org pyrus install drush/drush +pyrus install pear/PHP_CodeSniffer phpenv rehash drush dl --yes drupal cd drupal-* @@ -22,6 +23,8 @@ ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini mkdir sites/all/libraries ln -s $HOME/tuque sites/all/libraries/tuque +drush dl --yes coder +drush en --yes coder_review drush en --yes simpletest drush en --user=1 --yes islandora drush cc all diff --git a/tests/web_test_case.inc b/tests/web_test_case.inc index 3651e3db..8a5b9a00 100644 --- a/tests/web_test_case.inc +++ b/tests/web_test_case.inc @@ -18,7 +18,8 @@ class IslandoraWebTestCase extends DrupalWebTestCase { // Always enable islandora. $args[] = 'islandora'; parent::setUp($args); - // Its possible test are running before class autoloading + + // Its possible test are running before class autoloading. module_load_include('inc', 'islandora', 'includes/tuque'); module_load_include('inc', 'islandora', 'includes/tuque_wrapper'); diff --git a/theme/islandora-objects.tpl.php b/theme/islandora-objects.tpl.php index 5b55eb88..f1893ef6 100644 --- a/theme/islandora-objects.tpl.php +++ b/theme/islandora-objects.tpl.php @@ -7,7 +7,13 @@ ?>
- $display_links, 'attributes' => array('class' => array('links', 'inline')))); ?> + $display_links, + 'attributes' => array('class' => array('links', 'inline')), + ) + ); + ?> From b9d0eaebb09a171e82eca34a9d174e63aa93447c Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 20:15:17 -0300 Subject: [PATCH 39/99] Added a lint to travis. Just in case. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index dc0a8794..124d7ce9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,5 +11,6 @@ before_install: - $TRAVIS_BUILD_DIR/tests/travis_setup.sh - cd $HOME/drupal-* script: + - ant lint - drush dcs sites/all/modules/islandora - drush test-run --uri=http://localhost:8081 Islandora From d67c95f90174876700121d3b56aea8062c65a29f Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 4 Apr 2013 20:22:27 -0300 Subject: [PATCH 40/99] Fixed ant path issue --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 124d7ce9..0c5fe32a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,6 @@ before_install: - $TRAVIS_BUILD_DIR/tests/travis_setup.sh - cd $HOME/drupal-* script: - - ant lint + - ant -buildfile sites/all/modules/islandora/build.xml lint - drush dcs sites/all/modules/islandora - drush test-run --uri=http://localhost:8081 Islandora From a55d03c12a20a3943876c6ea68d91ffd2208156d Mon Sep 17 00:00:00 2001 From: Jonathan Green Date: Fri, 5 Apr 2013 10:03:54 -0300 Subject: [PATCH 41/99] Update README.md Removed 8080 from the jenkins URL. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dceaec0e..fd2663b7 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Current build status: [![Build Status](https://travis-ci.org/Islandora/islandora.png?branch=7.x)](https://travis-ci.org/Islandora/islandora) CI Server: -http://jenkins.discoverygarden.ca:8080 +http://jenkins.discoverygarden.ca SUMMARY ------- From 82fa859e3ba62a73330281c96a07092f52ddceff Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Fri, 5 Apr 2013 12:57:58 -0300 Subject: [PATCH 42/99] Coding style fixes. --- islandora.module | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/islandora.module b/islandora.module index c9ea373b..64c81628 100644 --- a/islandora.module +++ b/islandora.module @@ -1077,7 +1077,7 @@ function islandora_entity_property_info() { * @return array * A renderable array. */ -function islandora_print_object(FedoraObject $object) { +function islandora_print_object(AbstractObject $object) { drupal_set_title($object->label); return theme('islandora_object_print', array('object' => $object)); } @@ -1085,7 +1085,7 @@ function islandora_print_object(FedoraObject $object) { /** * Menu callback downloads the given clip. */ -function islandora_download_clip(FedoraObject $object) { +function islandora_download_clip(AbstractObject $object) { if (isset($_GET['clip'])) { $is_https = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on'; $http_protocol = $is_https ? 'https' : 'http'; From 54401f71e0d736b02e38dd8ad03c5d6bf9f58690 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Fri, 5 Apr 2013 14:24:40 -0300 Subject: [PATCH 43/99] Work around to handle the PHP-native stream wrappers. --- includes/utilities.inc | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index f061f72c..05c5320f 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -465,20 +465,41 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr if (isset($ds['control_group']) && in_array($ds['control_group'], $groups)) { $control_group = $ds['control_group']; } - $ds_uri = FALSE; + + $as_file = FALSE; if (file_valid_uri($ds['datastream_file'])) { + // A local file with as a Drupal file/stream wrapper URI. $datastream_file = $ds['datastream_file']; - $ds_uri = TRUE; + $as_file = TRUE; + } + elseif (is_readable($ds['datastream_file'])) { + // A local file as a filesystem path. + $datastream_file = drupal_realpath($ds['datastream_file']); + $as_file = TRUE; } else { - $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); + $scheme = parse_url($ds['datastream_file'], PHP_URL_SCHEME); + if (in_array($scheme, stream_get_wrappers())) { + // A URI which gets handled by one of the PHP-native stream wrappers. + $datastream_file = $ds['datastream_file']; + $as_file = TRUE; + } + else { + // XXX: Dunno... No promises? Let's try to make a URL out of whatever + // this is. + $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); + watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), but it does not appear to be readable. We will pass the path through url(), and pass along as such.', array( + '%file' => $datastream_file, + ), WATCHDOG_WARNING); + } } + $datastream = $object->constructDatastream($dsid, $control_group); $datastream->label = $label; $datastream->mimetype = $mimetype; switch ($control_group) { case 'M': - if ($ds_uri) { + if ($as_file) { $datastream->setContentFromFile($datastream_file); } else { @@ -490,8 +511,10 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr $datastream->setContentFromString(file_get_contents($datastream_file)); break; } + $object->ingestDatastream($datastream); } + return $object; } From 13e8839d5002c2a95b515c24c0be4b6b3958e40e Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Sat, 6 Apr 2013 16:36:04 -0300 Subject: [PATCH 44/99] Allow breadcrumbs to reliably be generated multiple times. --- includes/breadcrumb.inc | 88 +++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index dd8544a8..94dbd122 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -25,13 +25,8 @@ * drupal_set_breadcrumb(). */ function islandora_get_breadcrumbs($object) { - $breadcrumbs = array(); - islandora_get_breadcrumbs_recursive($object->id, $breadcrumbs, $object->repository); - if (isset($breadcrumbs[0])) { - // Remove the actual object. - unset($breadcrumbs[0]); - } - $breadcrumbs = array_reverse($breadcrumbs); + $breadcrumbs = islandora_get_breadcrumbs_recursive($object->id, $object->repository); + array_pop($breadcrumbs); return $breadcrumbs; } @@ -40,9 +35,6 @@ function islandora_get_breadcrumbs($object) { * * @todo Make fully recursive... * - * @todo Could use some clean up, can't be called multiple times safely due to - * the use of static variables. - * * @param string $pid * THe object id whose parent will be fetched for the next link. * @param array $breadcrumbs @@ -50,39 +42,44 @@ function islandora_get_breadcrumbs($object) { * @param FedoraRepository $repository * The fedora repository. */ -function islandora_get_breadcrumbs_recursive($pid, array &$breadcrumbs, FedoraRepository $repository) { +function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, array &$context = NULL) { // Before executing the query, we have a base case of accessing the top-level // collection. - static $max_level = 10; - static $level = -1; - - if (count($breadcrumbs) === 0) { - $level = $max_level; + if ($context === NULL) { + $context['level'] = 10; } $root = variable_get('islandora_repository_pid', 'islandora:root'); if ($pid == $root) { - $breadcrumbs[] = l(menu_get_active_title(), 'islandora'); - $breadcrumbs[] = l(t('Home'), ''); + return array( + l(t('Home'), ''), + l(menu_get_active_title(), 'islandora'), + ); } else { - $query_string = 'select $parentObject $title $content from <#ri> - where ( - $title - and $parentObject $content - and ( - $parentObject - or $parentObject - or $parentObject - ) - and $parentObject - ) - minus $content - minus $parentObject - order by $title desc'; - $results = $repository->ri->itqlQuery($query_string); + $query_string = << +WHERE { + ?object ?title ; + { + ?object ?parentObject . + } + UNION { + ?object ?parentObject . + } + UNION { + ?object ?parentObject . + } + ?parentObject . + FILTER (sameTerm(?object, )) + FILTER (!sameTerm(?object, ?parentObject)) +} +ORDER BY ?title +EOQ; + $results = $repository->ri->sparqlQuery($query_string); - if (count($results) > 0 && $level > 0) { + if (count($results) > 0 && $context['level'] > 0) { $parent = $results[0]['parentObject']['value']; $this_title = $results[0]['title']['value']; @@ -90,16 +87,23 @@ function islandora_get_breadcrumbs_recursive($pid, array &$breadcrumbs, FedoraRe $this_title = t('-'); } - $breadcrumbs[] = l($this_title, "islandora/object/$pid"); - - $level--; - islandora_get_breadcrumbs_recursive($parent, $breadcrumbs, $repository); + $context['level']--; + return array_merge( + islandora_get_breadcrumbs_recursive($parent, $repository, $context), + array( + l($this_title, "islandora/object/$pid"), + ) + ); } else { - // Add an non-link, as we don't know how to get back to the root. - $breadcrumbs[] = '...'; - // And render the last two links and break (on the next pass). - islandora_get_breadcrumbs_recursive($root, $breadcrumbs, $repository); + // Add an non-link, as we don't know how to get back to the root, and + // render the last two links and break (on the next pass). + return array_merge( + islandora_get_breadcrumbs_recursive($root, $repository), + array( + '...' + ) + ); } } } From 7c9b20237bb8a2487a79040f1baed9a19ca37c10 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Sat, 6 Apr 2013 16:40:08 -0300 Subject: [PATCH 45/99] Add content model dependant call of hook_islandora_object_view_alter(). --- islandora.api.php | 13 +++++++++++++ islandora.module | 5 +++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/islandora.api.php b/islandora.api.php index 5e976194..a4fe1552 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -50,6 +50,19 @@ function hook_CMODEL_PID_islandora_view_object($object) { function hook_islandora_view_object_alter(&$object, &$rendered) { } +/** + * Alter display output if the object has the given model. + * + * @see hook_islandora_view_object_alter() + * @param FedoraObject $object + * A Tuque FedoraObject being operated on. + * @param array $rendered + * An arr of rendered views. + */ +function hook_CMODEL_PID_islandora_view_object_alter(&$object, &$rendered) { + +} + /** * Generate an object's management display. * diff --git a/islandora.module b/islandora.module index 981189bc..eafa271a 100644 --- a/islandora.module +++ b/islandora.module @@ -675,7 +675,8 @@ function islandora_view_object(FedoraObject $object) { $page_number = (empty($_GET['page'])) ? '1' : $_GET['page']; $page_size = (empty($_GET['pagesize'])) ? '10' : $_GET['pagesize']; $output = array(); - foreach (islandora_build_hook_list(ISLANDORA_VIEW_HOOK, $object->models) as $hook) { + $hooks = islandora_build_hook_list(ISLANDORA_VIEW_HOOK, $object->models); + foreach ($hooks as $hook) { // @todo Remove page number and size from this hook, implementers of the // hook should use drupal page handling directly. $temp = module_invoke_all($hook, $object, $page_number, $page_size); @@ -688,7 +689,7 @@ function islandora_view_object(FedoraObject $object) { $output = islandora_default_islandora_view_object($object); } arsort($output); - drupal_alter(ISLANDORA_VIEW_HOOK, $object, $output); + drupal_alter($hooks, $object, $output); return implode('', $output); } From fa569990643c0e29a42df7b73a78411b3361a1df Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Sat, 6 Apr 2013 17:17:20 -0300 Subject: [PATCH 46/99] Revert "Work around to handle the PHP-native stream wrappers." This reverts commit 54401f71e0d736b02e38dd8ad03c5d6bf9f58690. --- includes/utilities.inc | 31 ++++--------------------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 05c5320f..f061f72c 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -465,41 +465,20 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr if (isset($ds['control_group']) && in_array($ds['control_group'], $groups)) { $control_group = $ds['control_group']; } - - $as_file = FALSE; + $ds_uri = FALSE; if (file_valid_uri($ds['datastream_file'])) { - // A local file with as a Drupal file/stream wrapper URI. $datastream_file = $ds['datastream_file']; - $as_file = TRUE; - } - elseif (is_readable($ds['datastream_file'])) { - // A local file as a filesystem path. - $datastream_file = drupal_realpath($ds['datastream_file']); - $as_file = TRUE; + $ds_uri = TRUE; } else { - $scheme = parse_url($ds['datastream_file'], PHP_URL_SCHEME); - if (in_array($scheme, stream_get_wrappers())) { - // A URI which gets handled by one of the PHP-native stream wrappers. - $datastream_file = $ds['datastream_file']; - $as_file = TRUE; - } - else { - // XXX: Dunno... No promises? Let's try to make a URL out of whatever - // this is. - $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); - watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), but it does not appear to be readable. We will pass the path through url(), and pass along as such.', array( - '%file' => $datastream_file, - ), WATCHDOG_WARNING); - } + $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); } - $datastream = $object->constructDatastream($dsid, $control_group); $datastream->label = $label; $datastream->mimetype = $mimetype; switch ($control_group) { case 'M': - if ($as_file) { + if ($ds_uri) { $datastream->setContentFromFile($datastream_file); } else { @@ -511,10 +490,8 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr $datastream->setContentFromString(file_get_contents($datastream_file)); break; } - $object->ingestDatastream($datastream); } - return $object; } From 945d8f4188a2a6dcb4d856035d830f40f6e85a9d Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Sat, 6 Apr 2013 17:19:44 -0300 Subject: [PATCH 47/99] Revert back to iTQL query for breadcrumbs. --- includes/breadcrumb.inc | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index 94dbd122..497caeaa 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -57,27 +57,21 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, ); } else { - $query_string = << -WHERE { - ?object ?title ; - { - ?object ?parentObject . - } - UNION { - ?object ?parentObject . - } - UNION { - ?object ?parentObject . - } - ?parentObject . - FILTER (sameTerm(?object, )) - FILTER (!sameTerm(?object, ?parentObject)) -} -ORDER BY ?title -EOQ; - $results = $repository->ri->sparqlQuery($query_string); + $query_string = 'select $parentObject $title $content from <#ri> + where ( + $title + and $parentObject $content + and ( + $parentObject + or $parentObject + or $parentObject + ) + and $parentObject + ) + minus $content + minus $parentObject + order by $title desc'; + $results = $repository->ri->itqlQuery($query_string); if (count($results) > 0 && $context['level'] > 0) { $parent = $results[0]['parentObject']['value']; From 068535ce95f8f5680dfd252586ea30f34ba60eb3 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Sat, 6 Apr 2013 17:31:03 -0300 Subject: [PATCH 48/99] Fixes for Travis... Oops. --- includes/breadcrumb.inc | 6 ++---- islandora.api.php | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index 497caeaa..01d4b9f7 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -36,9 +36,7 @@ function islandora_get_breadcrumbs($object) { * @todo Make fully recursive... * * @param string $pid - * THe object id whose parent will be fetched for the next link. - * @param array $breadcrumbs - * The list of existing bread-crumb links in reverse order. + * The object id whose parent will be fetched for the next link. * @param FedoraRepository $repository * The fedora repository. */ @@ -95,7 +93,7 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, return array_merge( islandora_get_breadcrumbs_recursive($root, $repository), array( - '...' + '...', ) ); } diff --git a/islandora.api.php b/islandora.api.php index a4fe1552..b47bbcdc 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -54,13 +54,13 @@ function hook_islandora_view_object_alter(&$object, &$rendered) { * Alter display output if the object has the given model. * * @see hook_islandora_view_object_alter() + * * @param FedoraObject $object * A Tuque FedoraObject being operated on. * @param array $rendered * An arr of rendered views. */ function hook_CMODEL_PID_islandora_view_object_alter(&$object, &$rendered) { - } /** From f9586f9f9b05b4653b82ea733aeb289d751972bd Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Mon, 8 Apr 2013 18:36:54 -0300 Subject: [PATCH 49/99] Fix where the context failed to get passed. --- includes/breadcrumb.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index 01d4b9f7..5a21b86c 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -91,7 +91,7 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, // Add an non-link, as we don't know how to get back to the root, and // render the last two links and break (on the next pass). return array_merge( - islandora_get_breadcrumbs_recursive($root, $repository), + islandora_get_breadcrumbs_recursive($root, $repository, $context), array( '...', ) From 12bd3005841d4f87ed08deec52d73f01b021d9ad Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Mon, 8 Apr 2013 18:52:40 -0300 Subject: [PATCH 50/99] Flesh out inline function documentation. --- includes/breadcrumb.inc | 8 ++++++++ islandora.api.php | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index 5a21b86c..6fdf9e4a 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -39,6 +39,14 @@ function islandora_get_breadcrumbs($object) { * The object id whose parent will be fetched for the next link. * @param FedoraRepository $repository * The fedora repository. + * @param array $context + * An associative array of context for internal use when recursing. Currently + * only used to track a single value: + * - level: The number of child-parent relationships to follow. Defaults to + * 10. + * + * @return array + * An array of links representing the breadcrumb trail, "root" first. */ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, array &$context = NULL) { // Before executing the query, we have a base case of accessing the top-level diff --git a/islandora.api.php b/islandora.api.php index b47bbcdc..d1d58f4f 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -45,7 +45,7 @@ function hook_CMODEL_PID_islandora_view_object($object) { * @param FedoraObject $object * A Tuque FedoraObject being operated on. * @param array $rendered - * An arr of rendered views. + * The array of rendered views. */ function hook_islandora_view_object_alter(&$object, &$rendered) { } @@ -58,7 +58,7 @@ function hook_islandora_view_object_alter(&$object, &$rendered) { * @param FedoraObject $object * A Tuque FedoraObject being operated on. * @param array $rendered - * An arr of rendered views. + * The array of rendered views. */ function hook_CMODEL_PID_islandora_view_object_alter(&$object, &$rendered) { } From 8ef10660538411a0107707510388f35bdeb11bfb Mon Sep 17 00:00:00 2001 From: Islandora Date: Tue, 9 Apr 2013 13:42:17 -0300 Subject: [PATCH 51/99] Updated islandora_prepare_new_object to work with file system paths instead of a url. --- includes/utilities.inc | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index f061f72c..05c5320f 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -465,20 +465,41 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr if (isset($ds['control_group']) && in_array($ds['control_group'], $groups)) { $control_group = $ds['control_group']; } - $ds_uri = FALSE; + + $as_file = FALSE; if (file_valid_uri($ds['datastream_file'])) { + // A local file with as a Drupal file/stream wrapper URI. $datastream_file = $ds['datastream_file']; - $ds_uri = TRUE; + $as_file = TRUE; + } + elseif (is_readable($ds['datastream_file'])) { + // A local file as a filesystem path. + $datastream_file = drupal_realpath($ds['datastream_file']); + $as_file = TRUE; } else { - $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); + $scheme = parse_url($ds['datastream_file'], PHP_URL_SCHEME); + if (in_array($scheme, stream_get_wrappers())) { + // A URI which gets handled by one of the PHP-native stream wrappers. + $datastream_file = $ds['datastream_file']; + $as_file = TRUE; + } + else { + // XXX: Dunno... No promises? Let's try to make a URL out of whatever + // this is. + $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); + watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), but it does not appear to be readable. We will pass the path through url(), and pass along as such.', array( + '%file' => $datastream_file, + ), WATCHDOG_WARNING); + } } + $datastream = $object->constructDatastream($dsid, $control_group); $datastream->label = $label; $datastream->mimetype = $mimetype; switch ($control_group) { case 'M': - if ($ds_uri) { + if ($as_file) { $datastream->setContentFromFile($datastream_file); } else { @@ -490,8 +511,10 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr $datastream->setContentFromString(file_get_contents($datastream_file)); break; } + $object->ingestDatastream($datastream); } + return $object; } From 663589d8fcf05074f772f913753d546a4b4a6136 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Wed, 10 Apr 2013 11:31:56 -0300 Subject: [PATCH 52/99] added function to create tableselect form item for content model selection --- includes/utilities.inc | 98 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 17 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index f061f72c..ae7f4b61 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -124,8 +124,7 @@ function islandora_describe_repository($url = NULL) { try { $info = $connection->api->a->describeRepository(); return $info; - } - catch (RepositoryException $e) { + } catch (RepositoryException $e) { return FALSE; } } @@ -204,13 +203,13 @@ function islandora_escape_pid_for_function($pid) { // Apparently, case doesn't matter for function calls in PHP, so let's not // really worry about changing the case. return str_replace( - // Any PID characters which are not valid in the name of a PHP function. - array( - ':', - '-', - ), - '_', - $pid + // Any PID characters which are not valid in the name of a PHP function. + array( + ':', + '-', + ), + '_', + $pid ); } @@ -281,16 +280,15 @@ function islandora_namespace_accessible($id) { function islandora_get_parents_from_rels_ext(FedoraObject $object) { try { $collections = array_merge( - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); - } - catch (RepositoryException $e) { + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); + } catch (RepositoryException $e) { // @todo some logging would be nice, not sure what this throws. return array(); } $map = function($o) { - return islandora_object_load($o['object']['value']); - }; + return islandora_object_load($o['object']['value']); + }; $collections = array_map($map, $collections); return array_filter($collections); } @@ -505,7 +503,7 @@ function islandora_display_repository_inaccessible_message() { $text = t('Islandora configuration'); $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', - array('!link' => $link)); + array('!link' => $link)); drupal_set_message($message, 'error', FALSE); } @@ -731,10 +729,76 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { $label = $result['label']['value']; $namespace = islandora_get_namespace($content_model); $ignore = $ignore_system_namespace && $namespace == 'fedora-system'; - $ignore |= !islandora_namespace_accessible($namespace); + $ignore |= ! islandora_namespace_accessible($namespace); if (!$ignore) { $content_models[$content_model] = array('pid' => $content_model, 'label' => $label); } } return $content_models; } + +/** + * Returns Drupal tableselect element allowing selection of one or more Content Models + * Primarily useful for Admin screens + * @param string $variable + * the name of the Drupal variable holding selected content models + * Content models held in this variable will appear at the top of the displyed list + * @return array Drupal form element allowing content model selection + */ + +function islandora_content_model_select_table_form_element($variable) { + $connection = islandora_get_tuque_connection(); + $restricted = variable_get('islandora_namespace_restriction_enforced', FALSE); + $allowed_string = variable_get('islandora_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'; + + $list = $connection->repository->ri->itqlQuery($query, 'unlimited'); + $other_list = islandora_get_content_models(TRUE); + $options = array(); + + foreach ($other_list as $pid => $label) { + if ($pid) { + $item_namespace = explode(':', $pid); + if (!$restricted || in_array($item_namespace[0], $allowed)) { + + if (!preg_match('/fedora-system/', $pid)) { + $options[$pid] = $label; + } + } + } + } + + $selected = variable_get($variable, array('')); + foreach ($selected as $cmodel) { + $options = array($cmodel => $options[$cmodel]) + $options; + } + foreach ($options as $key => $value) { + $rows[$key] = array( + 'pid' => $key, + 'title' => $value, + ); + in_array($key, $selected) ? $defaults[$key] = TRUE : $defaults[$key] = FALSE; + } + $header = array( + 'pid' => array('data' => t('PID')), + 'title' => array('data' => t('Content Model')), + ); +//build and return table element + return array( + '#type' => 'tableselect', + '#header' => $header, + '#options' => $rows, + '#default_value' => $defaults, + ); +} \ No newline at end of file From 128cc45ac3b59116c7ba2843ceb706a9416df4bf Mon Sep 17 00:00:00 2001 From: Islandora Date: Wed, 10 Apr 2013 14:31:25 -0300 Subject: [PATCH 53/99] Updated comments in islandora_prepare_new_object() function. --- includes/utilities.inc | 15 +++++++++------ islandora.module | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 05c5320f..27c53150 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -485,12 +485,15 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr $as_file = TRUE; } else { - // XXX: Dunno... No promises? Let's try to make a URL out of whatever - // this is. + // Schema does not match available php stream wrapper. Attempt to + // set datastream_file by url for the given scheme. Https (SSL) can + // cause this to fail, and trigger an output log in watchdog. $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); - watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), but it does not appear to be readable. We will pass the path through url(), and pass along as such.', array( - '%file' => $datastream_file, - ), WATCHDOG_WARNING); + watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), ' . + ' but it does not appear to be readable. We will pass the path through' . + ' url(), and pass along as such.', + array('%file' => $datastream_file, ) , + WATCHDOG_WARNING); } } @@ -529,7 +532,7 @@ function islandora_display_repository_inaccessible_message() { $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', array('!link' => $link)); - drupal_set_message($message, 'error', FALSE); + drupal_set_message(check_plain($message), 'error', FALSE); } /** diff --git a/islandora.module b/islandora.module index 981189bc..e54fe0d6 100644 --- a/islandora.module +++ b/islandora.module @@ -964,7 +964,7 @@ function islandora_delete_object(FedoraObject &$object) { $object = NULL; return TRUE; } - catch(Exception $e) { + catch (Exception $e) { // Exception message gets logged in Tuque Wrapper. return FALSE; } From 66d0b6404d8ac63cabb8e4f02b44472c00fdabf2 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Wed, 10 Apr 2013 20:50:36 -0300 Subject: [PATCH 54/99] Some modifications, remove duplicate code, run copy paste detector --- .travis.yml | 1 + tests/islandora_test.info | 6 -- tests/islandora_test.module | 152 ------------------------------------ 3 files changed, 1 insertion(+), 158 deletions(-) delete mode 100644 tests/islandora_test.info delete mode 100644 tests/islandora_test.module diff --git a/.travis.yml b/.travis.yml index 0c5fe32a..d95cfb54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,4 +13,5 @@ before_install: script: - ant -buildfile sites/all/modules/islandora/build.xml lint - drush dcs sites/all/modules/islandora + - phpcpd sites/all/modules/islandora - drush test-run --uri=http://localhost:8081 Islandora diff --git a/tests/islandora_test.info b/tests/islandora_test.info deleted file mode 100644 index c6cb57ad..00000000 --- a/tests/islandora_test.info +++ /dev/null @@ -1,6 +0,0 @@ -name = Islandora Test Module -description = Tests Hooks. Do not enable. -core = 7.x -package = Testing -hidden = TRUE -dependencies[] = islandora diff --git a/tests/islandora_test.module b/tests/islandora_test.module deleted file mode 100644 index 315b88ee..00000000 --- a/tests/islandora_test.module +++ /dev/null @@ -1,152 +0,0 @@ -id == 'test:testIngestedObjectHook') { - $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_INGESTED_HOOK] = TRUE; - if ($object->label == 'block') { - $context['block'] = TRUE; - } - } - break; - - case 'modify': - if ($object->id == 'test:testModifiedObjectHook') { - $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_MODIFIED_HOOK] = TRUE; - if (isset($context['params']['label']) && $context['params']['label'] == 'block') { - $context['block'] = TRUE; - } - } - elseif ($object->id == 'test:testPurgedObjectHook') { - $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE; - if (isset($context['params']['label']) && $context['params']['label'] == 'block') { - $context['block'] = TRUE; - } - elseif (isset($context['params']['label']) && $context['params']['label'] == 'delete') { - $context['delete'] = TRUE; - } - } - break; - - case 'purge': - if ($object->id == 'test:testPurgedObjectHook') { - $_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE; - if ($object->label == 'block') { - $context['block'] = TRUE; - } - elseif ($object->label == 'delete') { - $context['delete'] = TRUE; - } - } - break; - } -} - -/** - * Implements hook_islandora_object_alter(). - */ -function islandora_hooks_test_islandora_datastream_alter(AbstractFedoraObject $object, AbstractFedoraDatastream $datastream, array &$context) { - switch ($context['action']) { - case 'ingest': - if ($object->id == 'test:testIngestedDatastreamHook') { - $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_INGESTED_HOOK] = TRUE; - if ($datastream->label == 'block') { - $context['block'] = TRUE; - } - } - break; - - case 'modify': - if ($object->id == 'test:testModifiedDatastreamHook') { - $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_MODIFIED_HOOK] = TRUE; - if (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'block') { - $context['block'] = TRUE; - } - } - elseif ($object->id == 'test:testPurgedDatastreamHook') { - $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE; - if (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'block') { - $context['block'] = TRUE; - } - elseif (isset($context['params']['dsLabel']) && $context['params']['dsLabel'] == 'delete') { - $context['delete'] = TRUE; - } - } - break; - - case 'purge': - if ($object->id == 'test:testPurgedDatastreamHook') { - $_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE; - if ($datastream->label == 'block') { - $context['block'] = TRUE; - } - elseif ($datastream->label == 'delete') { - $context['delete'] = TRUE; - } - } - break; - } -} - -/** - * Implements hook_islandora_object_ingested(). - */ -function islandora_hooks_test_islandora_object_ingested(FedoraObject $object) { - if ($object->id == 'test:testIngestedObjectHook') { - $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_INGESTED_HOOK] = TRUE; - } -} - -/** - * Implements hook_islandora_object_modified(). - */ -function islandora_hooks_test_islandora_object_modified(FedoraObject $object) { - if ($object->id == 'test:testModifiedObjectHook') { - $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_MODIFIED_HOOK] = TRUE; - } -} - -/** - * Implements hook_islandora_object_purged(). - */ -function islandora_hooks_test_islandora_object_purged($pid) { - if ($pid == 'test:testPurgedObjectHook') { - $_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_PURGED_HOOK] = TRUE; - } -} - -/** - * Implements hook_islandora_datastream_ingested(). - */ -function islandora_hooks_test_islandora_datastream_ingested(FedoraObject $object, FedoraDatastream $datastream) { - if ($object->id == 'test:testIngestedDatastreamHook' && $datastream->id == "TEST") { - $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_INGESTED_HOOK] = TRUE; - } -} - -/** - * Implements hook_islandora_datastream_modified(). - */ -function islandora_hooks_test_islandora_datastream_modified(FedoraObject $object, FedoraDatastream $datastream) { - if ($object->id == 'test:testModifiedDatastreamHook' && $datastream->id == "TEST") { - $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_MODIFIED_HOOK] = TRUE; - } -} - -/** - * Implements hook_islandora_datastream_purged(). - */ -function islandora_hooks_test_islandora_datastream_purged(FedoraObject $object, $dsid) { - if ($object->id == 'test:testPurgedDatastreamHook' && $dsid == "TEST") { - $_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_PURGED_HOOK] = TRUE; - } -} From 3f71651af4cd0395683f679c8950af81da8559b5 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Wed, 10 Apr 2013 20:51:03 -0300 Subject: [PATCH 55/99] Add travis_setup --- tests/travis_setup.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/travis_setup.sh b/tests/travis_setup.sh index abbaccd2..041eb57f 100755 --- a/tests/travis_setup.sh +++ b/tests/travis_setup.sh @@ -12,8 +12,10 @@ export CATALINA_HOME='.' ./bin/startup.sh cd $HOME pyrus channel-discover pear.drush.org +pyrus channel-discover pear.phpqatools.org pyrus install drush/drush pyrus install pear/PHP_CodeSniffer +pyrus install pear.phpunit.de/phpcpd phpenv rehash drush dl --yes drupal cd drupal-* From 010fd655a9edbb1d6090680f072c2807ab911612 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Wed, 10 Apr 2013 20:57:44 -0300 Subject: [PATCH 56/99] Added dependancy --- tests/travis_setup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/travis_setup.sh b/tests/travis_setup.sh index 041eb57f..b870edb3 100755 --- a/tests/travis_setup.sh +++ b/tests/travis_setup.sh @@ -13,6 +13,7 @@ export CATALINA_HOME='.' cd $HOME pyrus channel-discover pear.drush.org pyrus channel-discover pear.phpqatools.org +pyrus channel-discover pear.netpirates.net pyrus install drush/drush pyrus install pear/PHP_CodeSniffer pyrus install pear.phpunit.de/phpcpd From 86631a3787ca69d893cf90367e1bb8f8d60308fc Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Wed, 10 Apr 2013 23:26:48 -0300 Subject: [PATCH 57/99] Some minor travis changes --- .travis.yml | 1 + tests/travis_setup.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d95cfb54..3592876e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ branches: env: - FEDORA_VERSION="3.5" before_install: + - ISLANDORA_DIR=$TRAVIS_BUILD_DIR - $TRAVIS_BUILD_DIR/tests/travis_setup.sh - cd $HOME/drupal-* script: diff --git a/tests/travis_setup.sh b/tests/travis_setup.sh index b870edb3..c0a5f0f2 100755 --- a/tests/travis_setup.sh +++ b/tests/travis_setup.sh @@ -22,7 +22,7 @@ drush dl --yes drupal cd drupal-* drush si standard --db-url=mysql://drupal:drupal@localhost/drupal --yes drush runserver --php-cgi=$HOME/.phpenv/shims/php-cgi localhost:8081 &>/dev/null & -ln -s $TRAVIS_BUILD_DIR sites/all/modules/islandora +ln -s $ISLANDORA_DIR sites/all/modules/islandora mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/islandora/tests/test_config.ini mkdir sites/all/libraries ln -s $HOME/tuque sites/all/libraries/tuque From 11d3cc64ee98080a1211a883711c64688f54a0cb Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Wed, 10 Apr 2013 23:36:12 -0300 Subject: [PATCH 58/99] Export environment variable --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3592876e..6a42dda0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ branches: env: - FEDORA_VERSION="3.5" before_install: - - ISLANDORA_DIR=$TRAVIS_BUILD_DIR + - export ISLANDORA_DIR=$TRAVIS_BUILD_DIR - $TRAVIS_BUILD_DIR/tests/travis_setup.sh - cd $HOME/drupal-* script: From e6cb85bbb19852423a02715b13645c935afc3e4a Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 11 Apr 2013 00:25:30 -0300 Subject: [PATCH 59/99] Updated phpcpd command --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6a42dda0..7ded78f4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,5 +14,5 @@ before_install: script: - ant -buildfile sites/all/modules/islandora/build.xml lint - drush dcs sites/all/modules/islandora - - phpcpd sites/all/modules/islandora + - phpcpd --names *.module,*.inc,*.test sites/all/modules/islandora - drush test-run --uri=http://localhost:8081 Islandora From f9667e66fa2acfb170fec261ff8b4d8827b7b097 Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Thu, 11 Apr 2013 09:46:17 -0300 Subject: [PATCH 60/99] Crufty menu path that was left behind. --- islandora.module | 7 ------- 1 file changed, 7 deletions(-) diff --git a/islandora.module b/islandora.module index 64c81628..d7ac4684 100644 --- a/islandora.module +++ b/islandora.module @@ -238,13 +238,6 @@ function islandora_menu() { 'access arguments' => array(FEDORA_VIEW_OBJECTS, 2), 'load arguments' => array(2), ); - $items['islandora/ingest'] = array( - 'title' => 'Add an Object', - 'page callback' => 'islandora_ingest_callback', - 'file' => 'includes/ingest.menu.inc', - 'type' => MENU_SUGGESTED_ITEM, - 'access arguments' => array(FEDORA_INGEST), - ); $items['islandora/object/%islandora_object/download_clip'] = array( 'page callback' => 'islandora_download_clip', 'page arguments' => array(2), From 7175316d11157dc67c68684a46b50b3e2fd3e173 Mon Sep 17 00:00:00 2001 From: Islandora Date: Thu, 11 Apr 2013 10:32:14 -0300 Subject: [PATCH 61/99] Corrected coding standards violations. --- includes/ingest.form.inc | 4 ++-- includes/tuque_wrapper.inc | 8 ++++---- includes/utilities.inc | 12 ++++++------ tests/hooks.test | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 0f8e843e..db031dc0 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -35,7 +35,7 @@ function islandora_ingest_form(array $form, array &$form_state, array $configura islandora_ingest_form_init_form_state_storage($form_state, $configuration); return islandora_ingest_form_execute_step($form, $form_state); } - catch(Exception $e) { + catch (Exception $e) { drupal_set_message($e->getMessage(), 'error'); return array(array( '#markup' => l(t('Back'), 'javascript:window.history.back();', array('external' => TRUE)))); @@ -242,7 +242,7 @@ function islandora_ingest_get_approximate_steps(array $configuration) { try { islandora_ingest_form_validate_configuration($configuration); } - catch(InvalidArgumentException $e) { + catch (InvalidArgumentException $e) { // Don't log or display exception. return array(); } diff --git a/includes/tuque_wrapper.inc b/includes/tuque_wrapper.inc index 4d989e9f..14a770e2 100644 --- a/includes/tuque_wrapper.inc +++ b/includes/tuque_wrapper.inc @@ -205,7 +205,7 @@ class IslandoraFedoraApiM extends FedoraApiM { } return $ret; } - catch(Exception $e) { + catch (Exception $e) { watchdog('islandora', 'Failed to modify datastream @dsid from @pid
code: @code
message: @msg', array( '@pid' => $pid, '@dsid' => $dsid, @@ -239,7 +239,7 @@ class IslandoraFedoraApiM extends FedoraApiM { } return $ret; } - catch(Exception $e) { + catch (Exception $e) { watchdog('islandora', 'Failed to modify object: @pid
code: @code
message: @msg', array( '@pid' => $pid, '@code' => $e->getCode(), @@ -281,7 +281,7 @@ class IslandoraFedoraApiM extends FedoraApiM { return $ret; } } - catch(Exception $e) { + catch (Exception $e) { watchdog('islandora', 'Failed to purge datastream @dsid from @pid
code: @code
message: @msg', array( '@pid' => $pid, '@dsid' => $dsid, @@ -325,7 +325,7 @@ class IslandoraFedoraApiM extends FedoraApiM { return $ret; } } - catch(Exception $e) { + catch (Exception $e) { watchdog('islandora', 'Failed to purge object @pid
code: @code
message: @msg', array( '@pid' => $pid, '@code' => $e->getCode(), diff --git a/includes/utilities.inc b/includes/utilities.inc index 27c53150..ec155eb9 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -486,13 +486,13 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr } else { // Schema does not match available php stream wrapper. Attempt to - // set datastream_file by url for the given scheme. Https (SSL) can + // set datastream_file by url for the given scheme. Https (SSL) can // cause this to fail, and trigger an output log in watchdog. $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); - watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), ' . - ' but it does not appear to be readable. We will pass the path through' . - ' url(), and pass along as such.', - array('%file' => $datastream_file, ) , + watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), ' . + ' but it does not appear to be readable. We will pass the path through' . + ' url(), and pass along as such.', + array('%file' => $datastream_file), WATCHDOG_WARNING); } } @@ -531,7 +531,7 @@ function islandora_display_repository_inaccessible_message() { $text = t('Islandora configuration'); $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', - array('!link' => $link)); + array('!link' => $link)); drupal_set_message(check_plain($message), 'error', FALSE); } diff --git a/tests/hooks.test b/tests/hooks.test index bc3020f3..3133d656 100644 --- a/tests/hooks.test +++ b/tests/hooks.test @@ -67,7 +67,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $object->label = "Don't Block"; $this->repository->purgeObject($object->id); } - catch(Exception $e) { + catch (Exception $e) { // Meh... Either it didn't exist or the purge failed. } } @@ -95,7 +95,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $this->fail('Blocked ingest should throw an Exception.'); $this->repository->purgeObject($object->id); } - catch(Exception $e) { + catch (Exception $e) { $this->pass('Ingest blocked and exception thrown.'); $this->assert($_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_INGESTED_HOOK], 'Called "hook_islandora_object_alter" when blocking ingesting via FedoraRepository::ingestObject.'); $this->assertFalse($_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_INGESTED_HOOK], 'Did not called ISLANDORA_OBJECT_INGESTED_HOOK when blocking ingesting via FedoraRepository::ingestObject.'); @@ -115,7 +115,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $object->label = 'block'; $this->fail('Blocked modify should throw an Exception.'); } - catch(Exception $e) { + catch (Exception $e) { $this->pass('Modify blocked and exception thrown.'); $this->assertNotEqual($object->label, 'block', 'Modification did not stick.'); $this->assert($_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_MODIFIED_HOOK], 'Called "hook_islandora_object_alter" when blocking modifying via set magic functions.'); @@ -149,7 +149,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $this->repository->purgeObject($object->id); $this->fail('Blocked modify should throw an Exception.'); } - catch(Exception $e) { + catch (Exception $e) { $this->pass('Modify blocked and exception thrown.'); $this->assert($_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_PURGED_HOOK], 'Called "hook_islandora_object_alter" when blocking purge via FedoraRepository::purgeObject.'); $this->assertFalse($_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_PURGED_HOOK], 'Called ISLANDORA_OBJECT_PURGED_HOOK when blocking purge via FedoraRepository::purgeObject.'); @@ -191,7 +191,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $ds->label = 'block'; $this->fail('Blocked modify should throw an Exception.'); } - catch(Exception $e) { + catch (Exception $e) { $this->pass('Modify blocked and exception thrown.'); $this->assert($_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_MODIFIED_HOOK], 'Called "hook_islandora_datastream_alter" when blocking modifying via set magic functions.'); $this->assertFALSE($_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_MODIFIED_HOOK], 'Called ISLANDORA_DATASTREAM_MODIFIED_HOOK when blocking modifying via set magic functions.'); From 1d1e72e1e79c39d9209ceaabfad5d818d4fee4ac Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Thu, 11 Apr 2013 13:44:43 -0300 Subject: [PATCH 62/99] simplified method --- includes/utilities.inc | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index ae7f4b61..4d51c05e 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -745,7 +745,6 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { * Content models held in this variable will appear at the top of the displyed list * @return array Drupal form element allowing content model selection */ - function islandora_content_model_select_table_form_element($variable) { $connection = islandora_get_tuque_connection(); $restricted = variable_get('islandora_namespace_restriction_enforced', FALSE); @@ -756,29 +755,7 @@ function islandora_content_model_select_table_form_element($variable) { $allowed[] = trim($namespace); } } - $query = 'select $object $title from <#ri> - where ($object $title - and ($object - or $object ) - and $object ) - order by $title'; - - $list = $connection->repository->ri->itqlQuery($query, 'unlimited'); - $other_list = islandora_get_content_models(TRUE); - $options = array(); - - foreach ($other_list as $pid => $label) { - if ($pid) { - $item_namespace = explode(':', $pid); - if (!$restricted || in_array($item_namespace[0], $allowed)) { - - if (!preg_match('/fedora-system/', $pid)) { - $options[$pid] = $label; - } - } - } - } - + $options = islandora_get_content_models(TRUE); $selected = variable_get($variable, array('')); foreach ($selected as $cmodel) { $options = array($cmodel => $options[$cmodel]) + $options; From 74beb0ca6591a14a6cf2cce57836c961d0506173 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Thu, 11 Apr 2013 14:48:31 -0300 Subject: [PATCH 63/99] coder changes --- includes/utilities.inc | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 4d51c05e..a7ec74e0 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -124,7 +124,8 @@ function islandora_describe_repository($url = NULL) { try { $info = $connection->api->a->describeRepository(); return $info; - } catch (RepositoryException $e) { + } + catch (RepositoryException $e) { return FALSE; } } @@ -282,7 +283,8 @@ function islandora_get_parents_from_rels_ext(FedoraObject $object) { $collections = array_merge( $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); - } catch (RepositoryException $e) { + } + catch (RepositoryException $e) { // @todo some logging would be nice, not sure what this throws. return array(); } @@ -398,7 +400,7 @@ function islandora_get_datastreams_requirements_from_content_model(FedoraObject $xml = new SimpleXMLElement($object[DS_COMP_STREAM]->content); foreach ($xml->dsTypeModel as $ds) { $dsid = (string) $ds['ID']; - $optional = strtolower((string) $ds['optional']); + $optional = drupal_strtolower((string) $ds['optional']); $mime = array(); foreach ($ds->form as $form) { $mime[] = (string) $form['MIME']; @@ -740,12 +742,12 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { /** * Returns Drupal tableselect element allowing selection of one or more Content Models * Primarily useful for Admin screens - * @param string $variable + * @param string $drupal_variable * the name of the Drupal variable holding selected content models * Content models held in this variable will appear at the top of the displyed list * @return array Drupal form element allowing content model selection */ -function islandora_content_model_select_table_form_element($variable) { +function islandora_content_model_select_table_form_element($drupal_variable) { $connection = islandora_get_tuque_connection(); $restricted = variable_get('islandora_namespace_restriction_enforced', FALSE); $allowed_string = variable_get('islandora_pids_allowed', 'default: demo: changeme: islandora:'); @@ -756,7 +758,7 @@ function islandora_content_model_select_table_form_element($variable) { } } $options = islandora_get_content_models(TRUE); - $selected = variable_get($variable, array('')); + $selected = variable_get($drupal_variable, array('')); foreach ($selected as $cmodel) { $options = array($cmodel => $options[$cmodel]) + $options; } @@ -772,10 +774,12 @@ function islandora_content_model_select_table_form_element($variable) { 'title' => array('data' => t('Content Model')), ); //build and return table element - return array( + $element = array( '#type' => 'tableselect', '#header' => $header, '#options' => $rows, '#default_value' => $defaults, ); + + return $element; } \ No newline at end of file From 2e02f32402c9356e63aedf82c363f42f65baf6a8 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 11 Apr 2013 14:52:06 -0300 Subject: [PATCH 64/99] Some changes for travis --- tests/scripts/line_endings.sh | 14 ++++++++++++++ tests/{ => scripts}/travis_setup.sh | 0 2 files changed, 14 insertions(+) create mode 100755 tests/scripts/line_endings.sh rename tests/{ => scripts}/travis_setup.sh (100%) diff --git a/tests/scripts/line_endings.sh b/tests/scripts/line_endings.sh new file mode 100755 index 00000000..b72dde22 --- /dev/null +++ b/tests/scripts/line_endings.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +RETURN=0 +FILES=`find -L $1 -name "*.info" -o -name "*.txt" -o -name "*.md"` +echo "Testing for files with DOS line endings..." +for FILE in $FILES +do + file $FILE | grep CRLF + if [ $? == 0 ] + then + RETURN=1 + fi +done +exit $RETURN diff --git a/tests/travis_setup.sh b/tests/scripts/travis_setup.sh similarity index 100% rename from tests/travis_setup.sh rename to tests/scripts/travis_setup.sh From c3baf652d24b5066bf4b130a3a9ba4a3d6b4bcfa Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 11 Apr 2013 14:53:50 -0300 Subject: [PATCH 65/99] added missing .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7ded78f4..a7bd2a84 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,10 +9,11 @@ env: - FEDORA_VERSION="3.5" before_install: - export ISLANDORA_DIR=$TRAVIS_BUILD_DIR - - $TRAVIS_BUILD_DIR/tests/travis_setup.sh + - $TRAVIS_BUILD_DIR/tests/scripts/travis_setup.sh - cd $HOME/drupal-* script: - ant -buildfile sites/all/modules/islandora/build.xml lint + - $ISLANDORA_DIR/tests/scripts/line_endings.sh sites/all/modules/islandora - drush dcs sites/all/modules/islandora - phpcpd --names *.module,*.inc,*.test sites/all/modules/islandora - drush test-run --uri=http://localhost:8081 Islandora From 177aaced8685de682dbbc5c71d098e5fc5be1692 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Thu, 11 Apr 2013 14:55:29 -0300 Subject: [PATCH 66/99] format changes --- includes/utilities.inc | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index a7ec74e0..ea0fc849 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -204,13 +204,13 @@ function islandora_escape_pid_for_function($pid) { // Apparently, case doesn't matter for function calls in PHP, so let's not // really worry about changing the case. return str_replace( - // Any PID characters which are not valid in the name of a PHP function. - array( - ':', - '-', - ), - '_', - $pid + // Any PID characters which are not valid in the name of a PHP function. + array( + ':', + '-', + ), + '_', + $pid ); } @@ -281,16 +281,16 @@ function islandora_namespace_accessible($id) { function islandora_get_parents_from_rels_ext(FedoraObject $object) { try { $collections = array_merge( - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); } catch (RepositoryException $e) { // @todo some logging would be nice, not sure what this throws. return array(); } $map = function($o) { - return islandora_object_load($o['object']['value']); - }; + return islandora_object_load($o['object']['value']); + }; $collections = array_map($map, $collections); return array_filter($collections); } @@ -400,7 +400,7 @@ function islandora_get_datastreams_requirements_from_content_model(FedoraObject $xml = new SimpleXMLElement($object[DS_COMP_STREAM]->content); foreach ($xml->dsTypeModel as $ds) { $dsid = (string) $ds['ID']; - $optional = drupal_strtolower((string) $ds['optional']); + $optional = strtolower((string) $ds['optional']); $mime = array(); foreach ($ds->form as $form) { $mime[] = (string) $form['MIME']; @@ -505,7 +505,7 @@ function islandora_display_repository_inaccessible_message() { $text = t('Islandora configuration'); $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', - array('!link' => $link)); + array('!link' => $link)); drupal_set_message($message, 'error', FALSE); } @@ -731,7 +731,7 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { $label = $result['label']['value']; $namespace = islandora_get_namespace($content_model); $ignore = $ignore_system_namespace && $namespace == 'fedora-system'; - $ignore |= ! islandora_namespace_accessible($namespace); + $ignore |= !islandora_namespace_accessible($namespace); if (!$ignore) { $content_models[$content_model] = array('pid' => $content_model, 'label' => $label); } From 3b9ae796ef06725459f822b6a7251adfb275ef4d Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Thu, 11 Apr 2013 15:18:05 -0300 Subject: [PATCH 67/99] code sniffer compliant --- includes/utilities.inc | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index ea0fc849..11c65b50 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -740,12 +740,15 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { } /** - * Returns Drupal tableselect element allowing selection of one or more Content Models - * Primarily useful for Admin screens + * Returns Drupal tableselect element allowing selection of Content Models. + * * @param string $drupal_variable * the name of the Drupal variable holding selected content models - * Content models held in this variable will appear at the top of the displyed list - * @return array Drupal form element allowing content model selection + * Content models held in this variable will appear at the top of + * the displayed list + * + * @return array + * Drupal form element allowing content model selection */ function islandora_content_model_select_table_form_element($drupal_variable) { $connection = islandora_get_tuque_connection(); @@ -773,7 +776,7 @@ function islandora_content_model_select_table_form_element($drupal_variable) { 'pid' => array('data' => t('PID')), 'title' => array('data' => t('Content Model')), ); -//build and return table element + // Build and return table element. $element = array( '#type' => 'tableselect', '#header' => $header, @@ -782,4 +785,4 @@ function islandora_content_model_select_table_form_element($drupal_variable) { ); return $element; -} \ No newline at end of file +} From b4b33df1f5eed4f07ef37861e6aeaf6012d7eef9 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Thu, 11 Apr 2013 15:36:50 -0300 Subject: [PATCH 68/99] removed space, coding standards --- includes/utilities.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 11c65b50..54fe9317 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -776,7 +776,7 @@ function islandora_content_model_select_table_form_element($drupal_variable) { 'pid' => array('data' => t('PID')), 'title' => array('data' => t('Content Model')), ); - // Build and return table element. + // Build and return table element. $element = array( '#type' => 'tableselect', '#header' => $header, From bc5717f16eed0fd5b33e5a8650866b5a239620ea Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Fri, 12 Apr 2013 03:48:30 -0300 Subject: [PATCH 69/99] Fix a couple code-style issues in inline comments. --- includes/utilities.inc | 58 ++++++++++--------------- tests/islandora_manage_permissions.test | 2 +- 2 files changed, 23 insertions(+), 37 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index ec155eb9..f7363bbe 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -380,18 +380,13 @@ function islandora_get_datastreams_requirements_from_models(array $models) { * determine what datastreams are required. * * @return array - * The DS-COMPOSITE-MODEL defined datastreams that are required for the given - * object. - * - * @code - * array( - * 'DC' => array( - * 'id' => 'DC', - * 'mime' => 'text/xml', - * 'optional' => FALSE, - * ) - * ) - * @endcode + * An associative array mapping datastream IDs to associative arrays + * containing the values parsed from the DS-COMPOSITE-MODEL on the given + * object--of the form: + * - DSID: A datastream ID being described. + * - "id": A string containing ID of the datastream. + * - "mime": A array containing MIME-types the stream may have. + * - "optional": A boolean indicating if the given stream is optional. */ function islandora_get_datastreams_requirements_from_content_model(FedoraObject $object) { if (empty($object[DS_COMP_STREAM])) { @@ -621,33 +616,24 @@ function islandora_system_settings_form_default_value($name, $default_value, arr /** * Returns basic information about DS-COMPOSITE-MODEL. * + * @deprecated + * The pre-existing--and more flexible-- + * islandora_get_datastreams_requirements_from_content_model() should be + * preferred, as it addresses the case where a stream can be allowed to have + * one of a set of mimetypes (this functions appears to only return the last + * declared mimetype for a given datastream). + * * @param string $pid - * PID of content model containing DS_COMP stream. + * The PID of content model containing DS_COMP stream. * * @return array - * array of values in the following form - * - * [DC] => Array - * ( - * [mimetype] => text/xml - * ) - * - * [MODS] => Array - * ( - * [optional] => true - * [mimetype] => text/xml - * ) - * - * [RELS-EXT] => Array - * ( - * [mimetype] => application/rdf+xml - * ) - * - * [RELS-INT] => Array - * ( - * [optional] => true - * [mimetype] => application/rdf+xml - * ) + * An associative array mapping datastream IDs to an associative array + * representing the parsed DS-COMPOSITE-MODEL of the form: + * - DSID: A string containing the datastream ID. + * - "mimetype": A string containing the last mimetype declared for the + * given datastream ID. + * - "optional": An optional boolean indicating that the given datastream + * is optional. */ function islandora_get_comp_ds_mappings($pid) { $cm_object = islandora_object_load($pid); diff --git a/tests/islandora_manage_permissions.test b/tests/islandora_manage_permissions.test index 72aebd89..8fc1549f 100644 --- a/tests/islandora_manage_permissions.test +++ b/tests/islandora_manage_permissions.test @@ -90,7 +90,7 @@ class IslandoraPermissionsTestCase extends IslandoraWebTestCase { */ public function testAccessFunctions() { $object = islandora_object_load(variable_get('islandora_repository_pid', 'islandora:root')); - // Test islandora_user_access(); + // Test islandora_user_access(). // Test no object/permissions. $ret = islandora_user_access(NULL, array()); $this->assertFalse($ret, 'User access denied when no object/permissions are provided.'); From 1b404273c33ef0fbafbcd91790021c7d93e42ff2 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Fri, 12 Apr 2013 04:24:25 -0300 Subject: [PATCH 70/99] Address issues from the translation coder report. --- includes/solution_packs.inc | 115 +++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 47 deletions(-) diff --git a/includes/solution_packs.inc b/includes/solution_packs.inc index e1cf8478..a455680d 100644 --- a/includes/solution_packs.inc +++ b/includes/solution_packs.inc @@ -187,30 +187,48 @@ function islandora_solution_pack_form_submit(array $form, array &$form_state) { */ function islandora_solution_pack_batch_operation_reingest_object(NewFedoraObject $object, array &$context) { $existing_object = islandora_object_load($object->id); + $deleted = FALSE; if ($existing_object) { $deleted = islandora_delete_object($existing_object); if (!$deleted) { $object_link = l($existing_object->label, "islandora/object/{$existing_object->id}"); - drupal_set_message(t('Failed to purge existing object !object_link.', array( + drupal_set_message(filter_xss(t('Failed to purge existing object !object_link.', array( '!object_link' => $object_link, - )), 'error'); + ))), 'error'); // Failed to purge don't attempt to ingest. return; } } + // Object was deleted or did not exist. $pid = $object->id; $label = $object->label; - $action = $deleted ? 'reinstalled' : 'installed'; $object_link = l($label, "islandora/object/{$pid}"); $object = islandora_add_object($object); - $msg = $object ? "Successfully $action !object_link." : "Failed to $action @label identified by @pid."; + $params = array( + '@pid' => $pid, + '@label' => $label, + '!object_link' => $object_link, + ); + + $msg = ''; + if ($object) { + if ($deleted) { + $msg = t('Successfully reinstalled !object_link.', $params); + } + else { + $msg = t('Successfully installed !object_link.', $params); + } + } + elseif ($deleted) { + $msg = t('Failed to reinstall @label, identified by @pid.', $params); + } + else { + $msg = t('Failed to install @label, identified by @pid.', $params); + } + $status = $object ? 'status' : 'error'; - drupal_set_message(t($msg, array( - '@pid' => $pid, - '@label' => $label, - '!object_link' => $object_link, - )), $status); + drupal_set_message(filter_xss($msg), $status); } /** @@ -237,33 +255,37 @@ function islandora_install_solution_pack($module, $op = 'install') { islandora_uninstall_solution_pack($module); return; } + + $t = get_t(); + + // Some general replacements. + $admin_link = l($t('Solution Pack admin'), 'admin/islandora/solution_packs'); + $config_link = l($t('Islandora configuration'), 'admin/islandora/configure'); + $t_params = array( + '@module' => $module_name, + '!config_link' => $config_link, + '!admin_link' => $admin_link, + ); + module_load_include('module', 'islandora', 'islandora'); module_load_include('inc', 'islandora', 'includes/utilities'); module_load_include('module', $module, $module); $info_file = drupal_get_path('module', $module) . "/{$module}.info"; $info_array = drupal_parse_info_file($info_file); $module_name = $info_array['name']; - $admin_link = l(t('Solution Pack admin'), 'admin/islandora/solution_packs'); - $config_link = l(t('Islandora configuration'), 'admin/islandora/configure'); if (!islandora_describe_repository()) { - $msg = '@module: Did not install any objects. Could not connect to the '; - $msg .= 'repository. Please check the settings on the !config_link page '; - $msg .= 'and install the required objects manually on the !admin_link page.'; - drupal_set_message(st($msg, array( - '@module' => $module_name, - '!config_link' => $config_link, - '@admin_link' => $admin_link, - )), 'error'); + $msg = $t('@module: Did not install any objects. Could not connect to the repository. Please check the settings on the !config_link page and install the required objects manually on the !admin_link page.', $t_params); + drupal_set_message(filter_xss($msg), 'error'); return; } $connection = islandora_get_tuque_connection(); $required_objects = module_invoke($module, 'islandora_required_objects', $connection); $objects = $required_objects[$module]['objects']; $status_messages = array( - 'up_to_date' => 'The object already exists and is up-to-date', - 'missing_datastream' => 'The object already exists but is missing a datastream. Please reinstall the object on the !admin_link page', - 'out_of_date' => 'The object already exists but is out-of-date. Please update the object on the !admin_link page', - 'modified_datastream' => 'The object already exists but datastreams are modified. Please reinstall the object on the !admin_link page', + 'up_to_date' => $t('The object already exists and is up-to-date.', $t_params), + 'missing_datastream' => $t('The object already exists but is missing a datastream. Please reinstall the object on the !admin_link page.', $t_params), + 'out_of_date' => $t('The object already exists but is out-of-date. Please update the object on the !admin_link page.', $t_params), + 'modified_datastream' => $t('The object already exists but datastreams are modified. Please reinstall the object on the !admin_link page.', $t_params), ); foreach ($objects as $object) { $query = $connection->api->a->findObjects('query', 'pid=' . $object->id); @@ -272,26 +294,25 @@ function islandora_install_solution_pack($module, $op = 'install') { $object_link = l($label, "islandora/object/{$object->id}"); if ($already_exists) { $object_status = islandora_check_object_status($object); - $status_msg = $status_messages[$object_status['status']]; - drupal_set_message(st("@module: Did not install !object_link. $status_msg.", array( - '@module' => $module_name, + $here_params = array( + '!summary' => $t("@module: Did not install !object_link.", array( '!object_link' => $object_link, - '!admin_link' => $admin_link, - )), 'warning'); + ) + $t_params), + '!description' => $status_messages[$object_status['status']], + ); + drupal_set_message(filter_xss(format_string('!summary !description', $here_params)), 'warning'); } else { $object = islandora_add_object($object); if ($object) { - drupal_set_message(t('@module: Successfully installed. !object_link.', array( - '@module' => $module_name, + drupal_set_message(filter_xss($t('@module: Successfully installed. !object_link.', array( '!object_link' => $object_link, - )), 'status'); + ) + $t_params)), 'status'); } else { - drupal_set_message(t('@module: Failed to install. @label.', array( - '@module' => $module_name, + drupal_set_message($t('@module: Failed to install. @label.', array( '@label' => $label, - )), 'warning'); + ) + $t_params), 'warning'); } } } @@ -307,21 +328,20 @@ function islandora_install_solution_pack($module, $op = 'install') { * directly for each solution pack. */ function islandora_uninstall_solution_pack($module) { + $t = get_t(); module_load_include('module', 'islandora', 'islandora'); module_load_include('inc', 'islandora', 'includes/utilities'); module_load_include('module', $module, $module); - $config_link = l(t('Islandora configuration'), 'admin/islandora/configure'); + $config_link = l($t('Islandora configuration'), 'admin/islandora/configure'); $info_file = drupal_get_path('module', $module) . "/{$module}.info"; $info_array = drupal_parse_info_file($info_file); $module_name = $info_array['name']; if (!islandora_describe_repository()) { - $msg = '@module: Did not uninstall any objects. Could not connect to the '; - $msg .= 'repository. Please check the settings on the !config_link page '; - $msg .= 'and uninstall the required objects manually if necessary.'; - drupal_set_message(st($msg, array( - '@module' => $module_name, - '!config_link' => $config_link, - )), 'error'); + $msg = $t('@module: Did not uninstall any objects. Could not connect to the repository. Please check the settings on the !config_link page and uninstall the required objects manually if necessary.', array( + '@module' => $module_name, + '!config_link' => $config_link, + )); + drupal_set_message(filter_xss($msg), 'error'); return; } $connection = islandora_get_tuque_connection(); @@ -334,12 +354,13 @@ function islandora_uninstall_solution_pack($module) { }; $existing_objects = array_filter($objects, $filter); foreach ($existing_objects as $object) { - $msg = '@module: Did not remove !object_link. It may be used by other sites.'; $object_link = l($object->label, "islandora/object/{$object->id}"); - drupal_set_message(st($msg, array( - '!object_link' => $object_link, - '@module' => $module_name, - )), 'warning'); + $msg = $t('@module: Did not remove !object_link. It may be used by other sites.', array( + '!object_link' => $object_link, + '@module' => $module_name, + )); + + drupal_set_message(filter_xss($msg), 'warning'); } } From e0362cea25c8071ce44b7948ea58f7824300354d Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Fri, 12 Apr 2013 04:47:35 -0300 Subject: [PATCH 71/99] Fix a variable name. --- includes/solution_packs.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/solution_packs.inc b/includes/solution_packs.inc index a455680d..aa09c8a4 100644 --- a/includes/solution_packs.inc +++ b/includes/solution_packs.inc @@ -262,7 +262,7 @@ function islandora_install_solution_pack($module, $op = 'install') { $admin_link = l($t('Solution Pack admin'), 'admin/islandora/solution_packs'); $config_link = l($t('Islandora configuration'), 'admin/islandora/configure'); $t_params = array( - '@module' => $module_name, + '@module' => $module, '!config_link' => $config_link, '!admin_link' => $admin_link, ); From c5d7485153cb44192e0ac45f54364f1ce0cf4ca1 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 12 Apr 2013 09:46:29 -0300 Subject: [PATCH 72/99] Converted CM query to sparql to allow for unlabeled Content Models --- includes/utilities.inc | 75 +++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 54fe9317..7e5a339a 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -124,8 +124,7 @@ function islandora_describe_repository($url = NULL) { try { $info = $connection->api->a->describeRepository(); return $info; - } - catch (RepositoryException $e) { + } catch (RepositoryException $e) { return FALSE; } } @@ -204,13 +203,13 @@ function islandora_escape_pid_for_function($pid) { // Apparently, case doesn't matter for function calls in PHP, so let's not // really worry about changing the case. return str_replace( - // Any PID characters which are not valid in the name of a PHP function. - array( - ':', - '-', - ), - '_', - $pid + // Any PID characters which are not valid in the name of a PHP function. + array( + ':', + '-', + ), + '_', + $pid ); } @@ -281,16 +280,15 @@ function islandora_namespace_accessible($id) { function islandora_get_parents_from_rels_ext(FedoraObject $object) { try { $collections = array_merge( - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); - } - catch (RepositoryException $e) { + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); + } catch (RepositoryException $e) { // @todo some logging would be nice, not sure what this throws. return array(); } $map = function($o) { - return islandora_object_load($o['object']['value']); - }; + return islandora_object_load($o['object']['value']); + }; $collections = array_map($map, $collections); return array_filter($collections); } @@ -505,7 +503,7 @@ function islandora_display_repository_inaccessible_message() { $text = t('Islandora configuration'); $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', - array('!link' => $link)); + array('!link' => $link)); drupal_set_message($message, 'error', FALSE); } @@ -718,20 +716,23 @@ function islandora_get_allowed_namespaces() { function islandora_get_content_models($ignore_system_namespace = TRUE) { module_load_include('inc', 'islandora', 'includes/utilities'); $tuque = islandora_get_tuque_connection(); - $query = 'select $object $label from <#ri> - where ($object $label - and ($object - or $object ) - and $object ) - order by $label'; + $query = 'PREFIX fm: + SELECT ?object ?label + FROM <#ri> + WHERE { + ?object fm:hasModel ; + OPTIONAL{ + ?object fm:label ?label + } + }'; $content_models = array(); - $results = $tuque->repository->ri->itqlQuery($query, 'unlimited'); + $results = $tuque->repository->ri->sparqlQuery($query, 'unlimited'); foreach ($results as $result) { $content_model = $result['object']['value']; $label = $result['label']['value']; $namespace = islandora_get_namespace($content_model); $ignore = $ignore_system_namespace && $namespace == 'fedora-system'; - $ignore |= !islandora_namespace_accessible($namespace); + $ignore |= ! islandora_namespace_accessible($namespace); if (!$ignore) { $content_models[$content_model] = array('pid' => $content_model, 'label' => $label); } @@ -760,17 +761,25 @@ function islandora_content_model_select_table_form_element($drupal_variable) { $allowed[] = trim($namespace); } } - $options = islandora_get_content_models(TRUE); - $selected = variable_get($drupal_variable, array('')); - foreach ($selected as $cmodel) { - $options = array($cmodel => $options[$cmodel]) + $options; + $defaults = array(); + $options = array(); + $options = $options + islandora_get_content_models(TRUE); + + foreach($options as $option){ + $content_models[$option['pid']] = $option['label']; } - foreach ($options as $key => $value) { - $rows[$key] = array( - 'pid' => $key, - 'title' => $value, + + $selected = array_values(variable_get($drupal_variable, array(''))); + foreach($selected as $selection){ + $content_models = array($selection => $content_models[$selection]) + $content_models; + } + + foreach ($content_models as $pid => $label) { + $rows[$pid] = array( + 'pid' => $pid, + 'title' => $label, ); - in_array($key, $selected) ? $defaults[$key] = TRUE : $defaults[$key] = FALSE; + in_array($pid, $selected) ? $defaults[$pid] = TRUE : $defaults[$pid] = FALSE; } $header = array( 'pid' => array('data' => t('PID')), From cb3e9b083d50a9cf29dce7ba383c7875d4c8be79 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 12 Apr 2013 09:59:51 -0300 Subject: [PATCH 73/99] Converted CM query to sparql to allow for unlabeled Content Models --- includes/utilities.inc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 7e5a339a..cd2cbd86 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -762,8 +762,9 @@ function islandora_content_model_select_table_form_element($drupal_variable) { } } $defaults = array(); - $options = array(); - $options = $options + islandora_get_content_models(TRUE); + $rows = array(); + $content_models = array(); + $options = islandora_get_content_models(TRUE); foreach($options as $option){ $content_models[$option['pid']] = $option['label']; @@ -771,7 +772,9 @@ function islandora_content_model_select_table_form_element($drupal_variable) { $selected = array_values(variable_get($drupal_variable, array(''))); foreach($selected as $selection){ - $content_models = array($selection => $content_models[$selection]) + $content_models; + if(isset($content_models[$selection])){ + $content_models = array($selection => $content_models[$selection]) + $content_models; + } } foreach ($content_models as $pid => $label) { @@ -791,6 +794,7 @@ function islandora_content_model_select_table_form_element($drupal_variable) { '#header' => $header, '#options' => $rows, '#default_value' => $defaults, + '#empty' => t("There are no content models in this Fedora Repository.") ); return $element; From 0731a26e15c303516c08d04d4c739631f7459ccb Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 12 Apr 2013 10:57:28 -0300 Subject: [PATCH 74/99] Made query more robust --- includes/utilities.inc | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index cd2cbd86..f5922ddc 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -717,14 +717,24 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { module_load_include('inc', 'islandora', 'includes/utilities'); $tuque = islandora_get_tuque_connection(); $query = 'PREFIX fm: + PREFIX fr: SELECT ?object ?label FROM <#ri> WHERE { - ?object fm:hasModel ; + {?object fm:hasModel ; + fm:state + OPTIONAL{ + ?object fm:label ?label + } + } + UNION + {?object fr:isMemberOfCollection ; + fm:state OPTIONAL{ ?object fm:label ?label } - }'; + } + }'; $content_models = array(); $results = $tuque->repository->ri->sparqlQuery($query, 'unlimited'); foreach ($results as $result) { @@ -754,18 +764,11 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { function islandora_content_model_select_table_form_element($drupal_variable) { $connection = islandora_get_tuque_connection(); $restricted = variable_get('islandora_namespace_restriction_enforced', FALSE); - $allowed_string = variable_get('islandora_pids_allowed', 'default: demo: changeme: islandora:'); - $namespaces = explode(':', $allowed_string); - foreach ($namespaces as $namespace) { - if ($namespace) { - $allowed[] = trim($namespace); - } - } $defaults = array(); $rows = array(); $content_models = array(); + $options = islandora_get_content_models(TRUE); - foreach($options as $option){ $content_models[$option['pid']] = $option['label']; } From 273e591f6e33b3da45a202b419876238be193754 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 12 Apr 2013 11:01:41 -0300 Subject: [PATCH 75/99] reverted auto-formatting --- includes/utilities.inc | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index f5922ddc..90117d59 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -124,7 +124,8 @@ function islandora_describe_repository($url = NULL) { try { $info = $connection->api->a->describeRepository(); return $info; - } catch (RepositoryException $e) { + } + catch (RepositoryException $e) { return FALSE; } } @@ -203,13 +204,13 @@ function islandora_escape_pid_for_function($pid) { // Apparently, case doesn't matter for function calls in PHP, so let's not // really worry about changing the case. return str_replace( - // Any PID characters which are not valid in the name of a PHP function. - array( - ':', - '-', - ), - '_', - $pid + // Any PID characters which are not valid in the name of a PHP function. + array( + ':', + '-', + ), + '_', + $pid ); } @@ -280,15 +281,16 @@ function islandora_namespace_accessible($id) { function islandora_get_parents_from_rels_ext(FedoraObject $object) { try { $collections = array_merge( - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); - } catch (RepositoryException $e) { + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); + } + catch (RepositoryException $e) { // @todo some logging would be nice, not sure what this throws. return array(); } $map = function($o) { - return islandora_object_load($o['object']['value']); - }; + return islandora_object_load($o['object']['value']); + }; $collections = array_map($map, $collections); return array_filter($collections); } @@ -503,7 +505,7 @@ function islandora_display_repository_inaccessible_message() { $text = t('Islandora configuration'); $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', - array('!link' => $link)); + array('!link' => $link)); drupal_set_message($message, 'error', FALSE); } From c431a070f32213247a44716af63f248070a0348e Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 12 Apr 2013 11:18:49 -0300 Subject: [PATCH 76/99] minor formatting changes --- includes/utilities.inc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 90117d59..52186681 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -744,7 +744,7 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { $label = $result['label']['value']; $namespace = islandora_get_namespace($content_model); $ignore = $ignore_system_namespace && $namespace == 'fedora-system'; - $ignore |= ! islandora_namespace_accessible($namespace); + $ignore |= !islandora_namespace_accessible($namespace); if (!$ignore) { $content_models[$content_model] = array('pid' => $content_model, 'label' => $label); } @@ -771,13 +771,13 @@ function islandora_content_model_select_table_form_element($drupal_variable) { $content_models = array(); $options = islandora_get_content_models(TRUE); - foreach($options as $option){ + foreach ($options as $option){ $content_models[$option['pid']] = $option['label']; } $selected = array_values(variable_get($drupal_variable, array(''))); - foreach($selected as $selection){ - if(isset($content_models[$selection])){ + foreach ($selected as $selection){ + if (isset($content_models[$selection])){ $content_models = array($selection => $content_models[$selection]) + $content_models; } } @@ -799,7 +799,7 @@ function islandora_content_model_select_table_form_element($drupal_variable) { '#header' => $header, '#options' => $rows, '#default_value' => $defaults, - '#empty' => t("There are no content models in this Fedora Repository.") + '#empty' => t("There are no content models in this Fedora Repository."), ); return $element; From 37071f0ec084e1f950a4fcb7bebca080676ac611 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 12 Apr 2013 11:31:48 -0300 Subject: [PATCH 77/99] minor formatting changes --- includes/utilities.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 52186681..f1d221fc 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -771,13 +771,13 @@ function islandora_content_model_select_table_form_element($drupal_variable) { $content_models = array(); $options = islandora_get_content_models(TRUE); - foreach ($options as $option){ + foreach ($options as $option) { $content_models[$option['pid']] = $option['label']; } $selected = array_values(variable_get($drupal_variable, array(''))); - foreach ($selected as $selection){ - if (isset($content_models[$selection])){ + foreach ($selected as $selection) { + if (isset($content_models[$selection])) { $content_models = array($selection => $content_models[$selection]) + $content_models; } } From 8f5cf316041f997ddb5be9502668c6ec704342c1 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Mon, 15 Apr 2013 20:01:16 -0300 Subject: [PATCH 78/99] used constants, removed unused variable --- includes/utilities.inc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index f1d221fc..df924dce 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -718,8 +718,8 @@ function islandora_get_allowed_namespaces() { function islandora_get_content_models($ignore_system_namespace = TRUE) { module_load_include('inc', 'islandora', 'includes/utilities'); $tuque = islandora_get_tuque_connection(); - $query = 'PREFIX fm: - PREFIX fr: + $query = "PREFIX fm: <" . FEDORA_MODEL_URI . "> + PREFIX fr: <" . FEDORA_RELS_EXT_URI . "> SELECT ?object ?label FROM <#ri> WHERE { @@ -736,7 +736,7 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { ?object fm:label ?label } } - }'; + }"; $content_models = array(); $results = $tuque->repository->ri->sparqlQuery($query, 'unlimited'); foreach ($results as $result) { @@ -765,7 +765,6 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { */ function islandora_content_model_select_table_form_element($drupal_variable) { $connection = islandora_get_tuque_connection(); - $restricted = variable_get('islandora_namespace_restriction_enforced', FALSE); $defaults = array(); $rows = array(); $content_models = array(); From 5deab4f3e3df5ba6a62009e17f29772125bcf70c Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Tue, 16 Apr 2013 13:25:58 -0300 Subject: [PATCH 79/99] Update to ingest_steps to add the callback type and logic associated with that. --- includes/ingest.form.inc | 187 ++++++++++++++++++++++++++++++++++++--- islandora.api.php | 33 +++++-- 2 files changed, 202 insertions(+), 18 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index db031dc0..9a6c2b9c 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -188,6 +188,8 @@ function islandora_ingest_form_get_next_step_id(array &$form_state) { */ function islandora_ingest_form_get_previous_step_id(array &$form_state) { $step_id = islandora_ingest_form_get_current_step_id($form_state); + $step = islandora_ingest_form_get_step($form_state, $step_id); + $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); $index = array_search($step_id, $step_ids); if ($index !== FALSE && --$index >= 0) { @@ -270,10 +272,10 @@ function islandora_ingest_get_approximate_steps(array $configuration) { * @return array * The form definition of the current step. */ -function islandora_ingest_form_execute_step(array $form, array &$form_state) { +function islandora_ingest_form_execute_step(array $form, array &$form_state, $step_id = NULL) { // Load any required files for the current step. islandora_ingest_form_load_include($form_state); - $step = islandora_ingest_form_get_step($form_state); + $step = isset($step_id) ? islandora_ingest_form_get_step($form_state) : islandora_ingest_form_get_step($form_state, $step_id); switch ($step['type']) { case 'form': $args = array($form, &$form_state); @@ -284,10 +286,36 @@ function islandora_ingest_form_execute_step(array $form, array &$form_state) { case 'batch': // @todo Implement if possible. break; + + case 'callback': + call_user_func_array($step['do_function']['function'], $step['do_function']['args']); + $next_step = islandora_ingest_form_get_next_step_id($form_state); + if ($next_step) { + islandora_ingest_form_increment_step($form_state); + return islandora_ingest_form_execute_step($form, $form_state, $next_step); + } } return array(); } +/** + * Handles occurances where a callback is executed to grab the next form type. + * + * @param array $form_state + * The Drupal form state. + * @param array $step + * Describes the current step. + * + * @return array + * The stepified Drupal form definition for the given step. + */ +function islandora_ingest_callback_stepify(array &$form_state, $step) { + $next_step = islandora_ingest_form_get_step($form_state, $step); + $form = call_user_func_array($next_step['form_id'], $args); + islandora_ingest_form_increment_step($form_state); + return islandora_ingest_form_stepify($form, $form_state, $next_step); +} + /** * Append Prev/Next buttons submit/validation handlers etc. * @@ -297,7 +325,7 @@ function islandora_ingest_form_execute_step(array $form, array &$form_state) { * The Drupal form state. * * @return array - * The stepified drupal form definition for the given step. + * The stepified Drupal form definition for the given step. */ function islandora_ingest_form_stepify(array $form, array &$form_state, $step) { $first_step = islandora_ingest_form_on_first_step($form_state); @@ -307,7 +335,6 @@ function islandora_ingest_form_stepify(array $form, array &$form_state, $step) { // Allow for a hook_form_FORM_ID_alter(). drupal_alter(array('form_' . $step['form_id'], 'form'), $form, $form_state, $step['form_id']); - return $form; } @@ -336,10 +363,28 @@ function islandora_ingest_form_on_first_step(array &$form_state) { * TRUE if we are currently on the last step, FALSE otherwise. */ function islandora_ingest_form_on_last_step(array &$form_state) { - $step_id = islandora_ingest_form_get_current_step_id($form_state); - $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); - $count = count($step_ids); - return array_search($step_id, $step_ids) == --$count; + $next_id = islandora_ingest_form_get_next_step_id($form_state); + if (!$next_id) { + return TRUE; + } + else { + $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); + $next_step_num = array_search($next_id, $step_ids); + $callback_chain = TRUE; + + while ($next_step_num < count($step_ids)) { + $next_step = islandora_ingest_form_get_step($form_state, $step_ids[$next_step_num]); + // Still is a form somewhere down our chain. + if ($next_step['type'] === 'form') { + $callback_chain = FALSE; + break; + } + else { + $next_step_num++; + } + } + return $callback_chain; + } } /** @@ -358,9 +403,35 @@ function islandora_ingest_form_previous_button(array &$form_state) { // to undo whatever its submit handler did. $prev_step_id = islandora_ingest_form_get_previous_step_id($form_state); $prev_step = islandora_ingest_form_get_step($form_state, $prev_step_id); - $form_id = $prev_step['form_id']; - $submit_callback = $form_id . '_undo_submit'; - $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_undo_submit'); + + if ($prev_step['type'] === 'form') { + $form_id = $prev_step['form_id']; + $submit_callback = $form_id . '_undo_submit'; + $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_undo_submit'); + } + elseif ($prev_step['type'] === 'callback') { + // Need to check if we have one or more callbacks at the start of our steps. + $steps = islandora_ingest_form_get_steps($form_state); + $keys = array_keys($steps); + $form = FALSE; + $current_step = array_search($prev_step_id, $keys); + while ($current_step >= 0 && !$form) { + $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); + if ($step['type'] === 'form') { + $form = TRUE; + break; + } + $current_step--; + } + // Only render a previous button if there a form somewhere behind us in our + // history chain. + if ($form) { + $submit = array('islandora_ingest_form_callback_previous'); + } + else { + return; + } + } return array( '#type' => 'submit', '#value' => t('Previous'), @@ -377,6 +448,38 @@ function islandora_ingest_form_previous_button(array &$form_state) { ); } +/** + * Handles the execution of "undoing" callbacks until a form type is reached. + * + * @param array $form + * The Drupal form. + * @param array $form_state + * The Drupal form state. + */ +function islandora_ingest_form_callback_previous(array $form, array &$form_state) { + // Arbitrarily move at least 1 back. + islandora_ingest_form_decrement_step($form_state); + $step_id = islandora_ingest_form_get_current_step_id($form_state); + $steps = islandora_ingest_form_get_steps($form_state); + $keys = array_keys($steps); + $current_step = array_search($step_id, $keys); + + $form = FALSE; + + while ($current_step >= 0 && !$form) { + $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); + islandora_ingest_form_decrement_step($form_state); + if ($step['type'] === 'callback') { + call_user_func_array($step['undo_function']['function'], $step['undo_function']['args']); + } + else { + $form = TRUE; + } + $current_step--; + } + $form_state['rebuild'] = TRUE; +} + /** * The submit handler for the ingest form previous button. * @@ -446,8 +549,10 @@ function islandora_ingest_form_next_submit(array $form, array &$form_state) { */ function islandora_ingest_form_stash_info(array &$form_state) { $storage = &islandora_ingest_form_get_step_storage($form_state); - $storage['values'] = $form_state['values']; - unset($form_state['values']); + if ($storage) { + $storage['values'] = $form_state['values']; + unset($form_state['values']); + } } /** @@ -479,6 +584,15 @@ function islandora_ingest_form_ingest_button(array &$form_state) { $validate = function_exists($validate_callback) ? array($validate_callback) : NULL; $submit_callback = $form_id . '_submit'; $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_submit') : array('islandora_ingest_form_submit'); + + // Because of callback shananigans we have to check if there are a chain of + // n callbacks that are weighted after the current step. + $next_id = islandora_ingest_form_get_next_step_id($form_state); + + if ($next_id) { + $submit[] = 'islandora_ingest_form_callback_ingest'; + } + return array( '#type' => 'submit', '#name' => 'ingest', @@ -513,6 +627,28 @@ function islandora_ingest_form_submit(array $form, array &$form_state) { } } +/** + * Execute any callbacks that are weighted at end of the ingest steps on ingest. + * + * @param array $form + * The Drupal form. + * @param array $form_state + * The Drupal form state. + */ +function islandora_ingest_form_callback_ingest(array $form, array &$form_state) { + $next_id = islandora_ingest_form_get_next_step_id($form_state); + $steps = islandora_ingest_form_get_steps($form_state); + $keys = array_keys($steps); + $current_step = array_search($next_id, $keys); + + // Execute our n chain of callbacks. + while ($current_step < count($steps)) { + $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); + call_user_func_array($step['do_function']['function'], $step['do_function']['args']); + $current_step++; + } +} + /** * Gets a reference to the stored NewFedoraObject's. * @@ -635,6 +771,31 @@ function islandora_ingest_form_get_steps(array &$form_state) { foreach (islandora_build_hook_list(ISLANDORA_INGEST_STEP_HOOK, $shared_storage['models']) as $hook) { drupal_alter($hook, $steps, $form_state); } + // Check to see if the callback functions are implemented (existed). Remove + // any implementations from the steps that are incorrectly defined. + foreach ($steps as $key => $step) { + $watchdog = FALSE; + if ($step['type'] === 'callback') { + if (!isset($step['do_function']) || !isset($step['undo_function'])) { + $watchdog = TRUE; + } + elseif (!isset($step['do_function']['function']) || !isset($step['undo_function']['function'])) { + $watchdog = TRUE; + } + + if ($watchdog) { + watchdog('islandora', 'The @module module is incorrectly implementing the + callback functionality of islandora_ingest_steps. The step @step has + not been included in the list of steps.', array( + '@module' => $step['module'], + '@step' => $key, + ), WATCHDOG_ERROR); + dd('errorsaursu'); + unset($steps[$key]); + } + } + } uasort($steps, 'drupal_sort_weight'); + return $steps; } diff --git a/islandora.api.php b/islandora.api.php index d1d58f4f..fbe49be6 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -386,15 +386,26 @@ function hook_islandora_undeletable_datastreams(array $models) { * @return array * An associative array of associative arrays which define each step in the * ingest process. Each step should consist of a unique name mapped to an - * array of properties (keys) including: - * - type: The type of step. Currently, only "form" is implemented. - * - weight: The "weight" of this step--heavier(/"larger") values sink to the - * end of the process while smaller(/"lighter") values are executed first. + * array of properties (keys) which take different paramaters based upon type: + * - type: Type of step. Only "form" and "callback" are implemented so far. + * Required "form" type specific parameters: * - form_id: The form building function to call to get the form structure * for this step. * - args: An array of arguments to pass to the form building function. - * And may optionally include both: + * Required "callback" type specific parameters: + * - do_function: An associate array including: + * - 'function': The callback function to be called. + * - 'args': An array of arguments to pass to the callback function. + * - undo_function: An associate array including: + * - 'function': The callback function to be called to reverse the + * executed action in the ingest steps. + * - 'args': An array of arguments to pass to the callback function. + * Shared parameters between both types: + * - weight: The "weight" of this step--heavier(/"larger") values sink to the + * end of the process while smaller(/"lighter") values are executed first. + * Both types may optionally include: * - module: A module from which we want to load an include. + * "Form type" may optionally include: * - file: A file to include (relative to the module's path, including the * file's extension). */ @@ -406,6 +417,18 @@ function hook_islandora_ingest_steps(array $form_state) { 'form_id' => 'my_cool_form', 'args' => array('arg_one', 'numero deux'), ), + 'my_cool_step_callback' => array( + 'type' => 'callback', + 'weight' => 2, + 'do_function' => array( + 'function' => 'my_cool_execute_function', + 'args' => array('arg_one', 'numero deux'), + ), + 'undo_function' => array( + 'function' => 'my_cool_undo_function', + 'args' => array('arg_one', 'numero deux'), + ), + ), ); } /** From a462a4448cd50bb4d075ac97f4c146ace5940bab Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Tue, 16 Apr 2013 16:48:37 -0300 Subject: [PATCH 80/99] Ingest functionality of the ingest form is now a callback. --- includes/ingest.form.inc | 22 ++++++++++++++-------- islandora.api.php | 2 +- islandora.module | 18 ++++++++++++++++++ 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 9a6c2b9c..53c48639 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -288,7 +288,9 @@ function islandora_ingest_form_execute_step(array $form, array &$form_state, $st break; case 'callback': - call_user_func_array($step['do_function']['function'], $step['do_function']['args']); + $args = array(&$form_state); + $args = isset($step['do_function']['args']) ? array_merge($args, $step['do_function']['args']) : $args; + call_user_func_array($step['do_function']['function'], $args); $next_step = islandora_ingest_form_get_next_step_id($form_state); if ($next_step) { islandora_ingest_form_increment_step($form_state); @@ -470,7 +472,9 @@ function islandora_ingest_form_callback_previous(array $form, array &$form_state $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); islandora_ingest_form_decrement_step($form_state); if ($step['type'] === 'callback') { - call_user_func_array($step['undo_function']['function'], $step['undo_function']['args']); + $args = array(&$form_state); + $args = isset($step['undo_function']['args']) ? array_merge($args, $step['undo_function']['args']) : $args; + call_user_func_array($step['undo_function']['function'], $args); } else { $form = TRUE; @@ -583,7 +587,10 @@ function islandora_ingest_form_ingest_button(array &$form_state) { $validate_callback = $form_id . '_validate'; $validate = function_exists($validate_callback) ? array($validate_callback) : NULL; $submit_callback = $form_id . '_submit'; - $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_submit') : array('islandora_ingest_form_submit'); + $submit = array(); + if (function_exists($submit_callback)) { + $submit[] = $submit_callback; + } // Because of callback shananigans we have to check if there are a chain of // n callbacks that are weighted after the current step. @@ -607,12 +614,10 @@ function islandora_ingest_form_ingest_button(array &$form_state) { * * Attempts to ingest every object built by the previous steps. * - * @param array $form - * The Drupal form. * @param array $form_state * The Drupal form state. */ -function islandora_ingest_form_submit(array $form, array &$form_state) { +function islandora_ingest_form_ingest(array &$form_state) { foreach ($form_state['islandora']['objects'] as $object) { try { islandora_add_object($object); @@ -644,7 +649,9 @@ function islandora_ingest_form_callback_ingest(array $form, array &$form_state) // Execute our n chain of callbacks. while ($current_step < count($steps)) { $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); - call_user_func_array($step['do_function']['function'], $step['do_function']['args']); + $args = array(&$form_state); + $args = isset($step['do_function']['args']) ? array_merge($args, $step['do_function']['args']) : $args; + call_user_func_array($step['do_function']['function'], $args); $current_step++; } } @@ -790,7 +797,6 @@ function islandora_ingest_form_get_steps(array &$form_state) { '@module' => $step['module'], '@step' => $key, ), WATCHDOG_ERROR); - dd('errorsaursu'); unset($steps[$key]); } } diff --git a/islandora.api.php b/islandora.api.php index fbe49be6..f6fd02a7 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -405,7 +405,7 @@ function hook_islandora_undeletable_datastreams(array $models) { * end of the process while smaller(/"lighter") values are executed first. * Both types may optionally include: * - module: A module from which we want to load an include. - * "Form type" may optionally include: + * "Form" type may optionally include: * - file: A file to include (relative to the module's path, including the * file's extension). */ diff --git a/islandora.module b/islandora.module index ad9e569e..6f1d0144 100644 --- a/islandora.module +++ b/islandora.module @@ -1097,3 +1097,21 @@ function islandora_download_clip(AbstractObject $object) { } exit(); } + +/** + * Implements hook_islandora_ingest_steps(). + */ +function islandora_islandora_ingest_steps(&$form_state) { + return array( + 'islandora_ingest_form_submit' => array( + 'type' => 'callback', + 'weight' => 50, + 'do_function' => array( + 'function' => 'islandora_ingest_form_ingest', + ), + 'undo_function' => array( + 'function' => 'islandora_ingest_form_undo_ingest', + ), + ), + ); +} From 69ce869b818dcd9bfad37bed2879160755541913 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Wed, 17 Apr 2013 11:01:08 -0300 Subject: [PATCH 81/99] removed unused variable --- includes/utilities.inc | 1 - 1 file changed, 1 deletion(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index df924dce..90676923 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -764,7 +764,6 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { * Drupal form element allowing content model selection */ function islandora_content_model_select_table_form_element($drupal_variable) { - $connection = islandora_get_tuque_connection(); $defaults = array(); $rows = array(); $content_models = array(); From d11075a1e695f3b424c8331e6a5419b3f6ffb62f Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Thu, 18 Apr 2013 09:30:10 -0300 Subject: [PATCH 82/99] API documentation update, minor revisions to ingest form. --- includes/ingest.form.inc | 11 ++++++----- islandora.api.php | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 53c48639..8462deef 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -26,7 +26,8 @@ * be related. * - models: An array of content model PIDs, to which the new object might * subscribe - * + * - parent: The parent of the child to be ingested. This is needed for XACML + * to correctly apply the parent's POLICY to children. * @return array * The form definition of the current step. */ @@ -373,8 +374,8 @@ function islandora_ingest_form_on_last_step(array &$form_state) { $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); $next_step_num = array_search($next_id, $step_ids); $callback_chain = TRUE; - - while ($next_step_num < count($step_ids)) { + $num_steps = count($step_ids); + while ($next_step_num < $num_steps) { $next_step = islandora_ingest_form_get_step($form_state, $step_ids[$next_step_num]); // Still is a form somewhere down our chain. if ($next_step['type'] === 'form') { @@ -645,9 +646,9 @@ function islandora_ingest_form_callback_ingest(array $form, array &$form_state) $steps = islandora_ingest_form_get_steps($form_state); $keys = array_keys($steps); $current_step = array_search($next_id, $keys); - + $num_steps = count($steps); // Execute our n chain of callbacks. - while ($current_step < count($steps)) { + while ($current_step < $num_steps) { $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); $args = array(&$form_state); $args = isset($step['do_function']['args']) ? array_merge($args, $step['do_function']['args']) : $args; diff --git a/islandora.api.php b/islandora.api.php index f6fd02a7..17db59ad 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -304,7 +304,7 @@ function hook_islandora_datastream_modified(FedoraObject $object, FedoraDatastre } /** - * Notify modules that the given datastream was ingested. + * Notify modules that the given datastream was modified. * * @see hook_islandora_datastream_modified() */ From 2d32249ab8e190a210fedfafdfb45205dfe38cd2 Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Thu, 18 Apr 2013 10:28:06 -0300 Subject: [PATCH 83/99] Missing newline, crufty func. --- includes/ingest.form.inc | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 8462deef..31cff4e5 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -28,6 +28,7 @@ * subscribe * - parent: The parent of the child to be ingested. This is needed for XACML * to correctly apply the parent's POLICY to children. + * * @return array * The form definition of the current step. */ @@ -301,24 +302,6 @@ function islandora_ingest_form_execute_step(array $form, array &$form_state, $st return array(); } -/** - * Handles occurances where a callback is executed to grab the next form type. - * - * @param array $form_state - * The Drupal form state. - * @param array $step - * Describes the current step. - * - * @return array - * The stepified Drupal form definition for the given step. - */ -function islandora_ingest_callback_stepify(array &$form_state, $step) { - $next_step = islandora_ingest_form_get_step($form_state, $step); - $form = call_user_func_array($next_step['form_id'], $args); - islandora_ingest_form_increment_step($form_state); - return islandora_ingest_form_stepify($form, $form_state, $next_step); -} - /** * Append Prev/Next buttons submit/validation handlers etc. * From 852968fe4b43fe6b0458f203dbff8c725b4c8ffc Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 18 Apr 2013 15:20:12 -0300 Subject: [PATCH 84/99] Some codesniffer modifications. --- .travis.yml | 2 +- includes/ingest.form.inc | 2 +- includes/utilities.inc | 9 ++++----- islandora.api.php | 24 ++++++++++++------------ tests/scripts/travis_setup.sh | 2 ++ 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/.travis.yml b/.travis.yml index a7bd2a84..7b537cfc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,6 @@ before_install: script: - ant -buildfile sites/all/modules/islandora/build.xml lint - $ISLANDORA_DIR/tests/scripts/line_endings.sh sites/all/modules/islandora - - drush dcs sites/all/modules/islandora + - drush coder-review --reviews=production,security,style,i18n,potx,sniffer sites/all/modules/islandora - phpcpd --names *.module,*.inc,*.test sites/all/modules/islandora - drush test-run --uri=http://localhost:8081 Islandora diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index db031dc0..62b09381 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -507,7 +507,7 @@ function islandora_ingest_form_submit(array $form, array &$form_state) { catch (Exception $e) { // If post hooks throws it may already exist at this point but may be // invalid, so don't say failed. - watchdog('islandora', $e->getMessage(), NULL, WATCHDOG_ERROR); + watchdog('islandora', 'Exception Message: @exception.', array('@exception' => $e->getMessage()), WATCHDOG_ERROR); drupal_set_message(t('A problem occured while ingesting "@label" (ID: @pid), please notifiy the administrator.', array('@label' => $object->label, '@pid' => $object->id)), 'error'); } } diff --git a/includes/utilities.inc b/includes/utilities.inc index f7363bbe..4c83837a 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -484,11 +484,10 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr // set datastream_file by url for the given scheme. Https (SSL) can // cause this to fail, and trigger an output log in watchdog. $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); - watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), ' . - ' but it does not appear to be readable. We will pass the path through' . - ' url(), and pass along as such.', - array('%file' => $datastream_file), - WATCHDOG_WARNING); + watchdog('islandora', + 'Attempting to ingest %file in islandora_prepare_new_object(), but it does not appear to be readable. We will pass the path through url(), and pass along as such.', + array('%file' => $datastream_file), + WATCHDOG_WARNING); } } diff --git a/islandora.api.php b/islandora.api.php index d1d58f4f..a0ddde5c 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -35,7 +35,7 @@ function hook_islandora_view_object($object, $user, $page_number, $page_size) { * @return array * An array whose values are markup. */ -function hook_CMODEL_PID_islandora_view_object($object) { +function hook_cmodel_pid_islandora_view_object($object) { } @@ -60,7 +60,7 @@ function hook_islandora_view_object_alter(&$object, &$rendered) { * @param array $rendered * The array of rendered views. */ -function hook_CMODEL_PID_islandora_view_object_alter(&$object, &$rendered) { +function hook_cmodel_pid_islandora_view_object_alter(&$object, &$rendered) { } /** @@ -87,7 +87,7 @@ function hook_islandora_edit_object($object) { * @return array * An array whose values are markup. */ -function hook_CMODEL_PID_islandora_edit_object($object) { +function hook_cmodel_pid_islandora_edit_object($object) { } /** @@ -138,7 +138,7 @@ function hook_islandora_object_alter(AbstractFedoraObject $object, array &$conte * * @see hook_islandora_object_alter() */ -function hook_CMODEL_PID_islandora_object_alter(AbstractFedoraObject $object, array &$context) { +function hook_cmodel_pid_islandora_object_alter(AbstractFedoraObject $object, array &$context) { } /** @@ -187,7 +187,7 @@ function hook_islandora_datastream_alter(AbstractFedoraObject $object, AbstractF * * @see hook_islandora_datastream_alter() */ -function hook_CMODEL_PID_DSID_islandora_datastream_alter(AbstractFedoraObject $object, AbstractFedoraDatastream $datastream, array &$context) { +function hook_cmodel_pid_DSID_islandora_datastream_alter(AbstractFedoraObject $object, AbstractFedoraDatastream $datastream, array &$context) { } /** @@ -211,7 +211,7 @@ function hook_islandora_object_ingested(FedoraObject $object) { * * @see hook_islandora_object_ingested() */ -function hook_CMODEL_PID_islandora_object_ingested(FedoraObject $object) { +function hook_cmodel_pid_islandora_object_ingested(FedoraObject $object) { } /** @@ -236,7 +236,7 @@ function hook_islandora_object_modified(FedoraObject $object) { * * @see hook_islandora_object_modified() */ -function hook_CMODEL_PID_islandora_object_modified(FedoraObject $object) { +function hook_cmodel_pid_islandora_object_modified(FedoraObject $object) { } /** @@ -256,7 +256,7 @@ function hook_islandora_object_purged($pid) { * * @see hook_islandora_object_purged() */ -function hook_CMODEL_PID_islandora_object_purged($pid) { +function hook_cmodel_pid_islandora_object_purged($pid) { } /** @@ -281,7 +281,7 @@ function hook_islandora_datastream_ingested(FedoraObject $object, FedoraDatastre * * @see hook_islandora_object_ingested() */ -function hook_CMODEL_PID_DSID_islandora_datastream_ingested(FedoraObject $object, FedoraDatastream $datastream) { +function hook_cmodel_pid_DSID_islandora_datastream_ingested(FedoraObject $object, FedoraDatastream $datastream) { } /** @@ -308,7 +308,7 @@ function hook_islandora_datastream_modified(FedoraObject $object, FedoraDatastre * * @see hook_islandora_datastream_modified() */ -function hook_CMODEL_PID_islandora_datastream_modified(FedoraObject $object, FedoraDatastream $datastream) { +function hook_cmodel_pid_islandora_datastream_modified(FedoraObject $object, FedoraDatastream $datastream) { } /** @@ -330,7 +330,7 @@ function hook_islandora_datastream_purged(FedoraObject $object, $dsid) { * * @see hook_islandora_datastream_purged() */ -function hook_CMODEL_PID_islandora_datastream_purged(FedoraObject $object, $dsid) { +function hook_cmodel_pid_islandora_datastream_purged(FedoraObject $object, $dsid) { } /** @@ -418,5 +418,5 @@ function hook_islandora_ingest_steps(array $form_state) { * * @see hook_islandora_ingest_steps() */ -function hook_CMODEL_PID_islandora_ingest_steps(array $form_state) { +function hook_cmodel_pid_islandora_ingest_steps(array $form_state) { } diff --git a/tests/scripts/travis_setup.sh b/tests/scripts/travis_setup.sh index c0a5f0f2..c3515198 100755 --- a/tests/scripts/travis_setup.sh +++ b/tests/scripts/travis_setup.sh @@ -27,8 +27,10 @@ mv sites/all/modules/islandora/tests/travis.test_config.ini sites/all/modules/is mkdir sites/all/libraries ln -s $HOME/tuque sites/all/libraries/tuque drush dl --yes coder +drush dl --yes potx drush en --yes coder_review drush en --yes simpletest +drush en --yes potx drush en --user=1 --yes islandora drush cc all sleep 4 From 49c489a83cfb18d8602556170f33f0eebb35ed7b Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Thu, 18 Apr 2013 20:10:46 +0200 Subject: [PATCH 85/99] Code Review - Refactor and fixes. --- includes/ingest.form.inc | 336 ++++++++++++++++++--------------------- islandora.module | 18 --- 2 files changed, 155 insertions(+), 199 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 31cff4e5..a94aaa30 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -135,6 +135,50 @@ function islandora_ingest_form_get_step(array &$form_state, $step_id = NULL) { return NULL; } +/** + * Gets the next step. + * + * If the current step is not defined, its assumed to be the first step. + * + * @param array $form_state + * The Drupal form state. + * @param string $step + * The step relative to the result, if not provided the current step is used. + * + * @return string + * The next step if found, NULL otherwise. + */ +function islandora_ingest_form_get_next_step(array &$form_state, array $step = NULL) { + $step = isset($step) ? $step : islandora_ingest_form_get_step($form_state); + $next_step_id = islandora_ingest_form_get_next_step_id($form_state, $step['id']); + if ($next_step_id) { + return islandora_ingest_form_get_step($form_state, $next_step_id); + } + return NULL; +} + +/** + * Gets the next step. + * + * If the current step is not defined, its assumed to be the first step. + * + * @param array $form_state + * The Drupal form state. + * @param string $step + * The step relative to the result, if not provided the current step is used. + * + * @return string + * The next step if found, NULL otherwise. + */ +function islandora_ingest_form_get_previous_step(array &$form_state, array $step = NULL) { + $step = isset($step) ? $step : islandora_ingest_form_get_step($form_state); + $next_step_id = islandora_ingest_form_get_previous_step_id($form_state, $step['id']); + if ($next_step_id) { + return islandora_ingest_form_get_step($form_state, $next_step_id); + } + return NULL; +} + /** * Gets the ID of the current step. * @@ -162,12 +206,15 @@ function islandora_ingest_form_get_current_step_id(array &$form_state) { * * @param array $form_state * The Drupal form state. + * @param string $step_id + * The ID of the step relative to the result, if not provided the current + * step_id is used. * * @return string * The next step ID if found, NULL otherwise. */ -function islandora_ingest_form_get_next_step_id(array &$form_state) { - $step_id = islandora_ingest_form_get_current_step_id($form_state); +function islandora_ingest_form_get_next_step_id(array &$form_state, $step_id = NULL) { + $step_id = isset($step_id) ? $step_id : islandora_ingest_form_get_current_step_id($form_state); $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); $index = array_search($step_id, $step_ids); $count = count($step_ids); @@ -184,14 +231,15 @@ function islandora_ingest_form_get_next_step_id(array &$form_state) { * * @param array $form_state * The Drupal form state. + * @param string $step_id + * The ID of the step relative to the result, if not provided the current + * step_id is used. * * @return string * The previous step ID if found, NULL otherwise. */ -function islandora_ingest_form_get_previous_step_id(array &$form_state) { - $step_id = islandora_ingest_form_get_current_step_id($form_state); - $step = islandora_ingest_form_get_step($form_state, $step_id); - +function islandora_ingest_form_get_previous_step_id(array &$form_state, $step_id = NULL) { + $step_id = isset($step_id) ? $step_id : islandora_ingest_form_get_current_step_id($form_state); $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); $index = array_search($step_id, $step_ids); if ($index !== FALSE && --$index >= 0) { @@ -237,13 +285,15 @@ function islandora_ingest_form_decrement_step(array &$form_state) { * Build a list of steps given only configuration. * * XXX: This is used to give an indication of whether there are any steps for a - * given list of content models. + * given configuration. * * @param array $configuration * The list of key/value pairs of configuration. */ function islandora_ingest_get_approximate_steps(array $configuration) { try { + // @todo, we need to expand the configuration before we can validate it? + // I think this need some thinking. islandora_ingest_form_validate_configuration($configuration); } catch (InvalidArgumentException $e) { @@ -279,29 +329,72 @@ function islandora_ingest_form_execute_step(array $form, array &$form_state, $st islandora_ingest_form_load_include($form_state); $step = isset($step_id) ? islandora_ingest_form_get_step($form_state) : islandora_ingest_form_get_step($form_state, $step_id); switch ($step['type']) { + case 'callback': + // Execute all the consecutive callbacks, and move then attempt to process + // the next step. + islandora_ingest_form_execute_consecutive_callback_steps($form, $form_state, $step); + return islandora_ingest_form_execute_step($form, $form_state); + case 'form': - $args = array($form, &$form_state); - $args = isset($step['args']) ? array_merge($args, $step['args']) : $args; - $form = call_user_func_array($step['form_id'], $args); - return islandora_ingest_form_stepify($form, $form_state, $step); + return islandora_ingest_form_execute_form_step($form, $form_state, $step); case 'batch': // @todo Implement if possible. break; - - case 'callback': - $args = array(&$form_state); - $args = isset($step['do_function']['args']) ? array_merge($args, $step['do_function']['args']) : $args; - call_user_func_array($step['do_function']['function'], $args); - $next_step = islandora_ingest_form_get_next_step_id($form_state); - if ($next_step) { - islandora_ingest_form_increment_step($form_state); - return islandora_ingest_form_execute_step($form, $form_state, $next_step); - } } return array(); } +/** + * Assumes the given $step is a 'form' step. + */ +function islandora_ingest_form_execute_form_step(array $form, array &$form_state, array $step) { + $args = array($form, &$form_state); + $args = isset($step['args']) ? array_merge($args, $step['args']) : $args; + $form = call_user_func_array($step['form_id'], $args); + return islandora_ingest_form_stepify($form, $form_state, $step); +} + +/** + * Assumes the given $step is a 'callback' step. + */ +function islandora_ingest_form_execute_consecutive_callback_steps(array $form, array &$form_state, array $step) { + do { + islandora_ingest_form_execute_callback_step($form, $form_state, $step); + islandora_ingest_form_increment_step($form_state); + $step = islandora_ingest_form_get_step($form_state); + } while (isset($step) && $step['type'] == 'callback'); +} + +/** + * Assumes the given $step is a 'callback' step. + */ +function islandora_ingest_form_execute_callback_step(array $form, array &$form_state, array $step) { + $args = array(&$form_state); + $args = isset($step['do_function']['args']) ? array_merge($args, $step['do_function']['args']) : $args; + call_user_func_array($step['do_function']['function'], $args); +} + +/** + * Assumes the given $step is a 'callback' step. + */ +function islandora_ingest_form_undo_consecutive_callback_steps(array $form, array &$form_state, array $step) { + do { + islandora_ingest_form_undo_callback_step($form, $form_state, $step); + islandora_ingest_form_decrement_step($form_state); + $step = islandora_ingest_form_get_step($form_state); + } while (isset($step) && $step['type'] == 'callback'); +} + +/** + * Assumes the given $step is a 'callback' step. + */ +function islandora_ingest_form_undo_callback_step(array $form, array &$form_state, array $step) { + $args = array(&$form_state); + $args = isset($step['undo_function']['args']) ? array_merge($args, $step['undo_function']['args']) : $args; + call_user_func_array($step['undo_function']['function'], $args); +} + /** * Append Prev/Next buttons submit/validation handlers etc. * @@ -314,18 +407,17 @@ function islandora_ingest_form_execute_step(array $form, array &$form_state, $st * The stepified Drupal form definition for the given step. */ function islandora_ingest_form_stepify(array $form, array &$form_state, $step) { - $first_step = islandora_ingest_form_on_first_step($form_state); - $last_step = islandora_ingest_form_on_last_step($form_state); - $form['prev'] = $first_step ? NULL : islandora_ingest_form_previous_button($form_state); - $form['next'] = $last_step ? islandora_ingest_form_ingest_button($form_state) : islandora_ingest_form_next_button($form_state); - + $first_form_step = islandora_ingest_form_on_first_form_step($form_state); + $last_form_step = islandora_ingest_form_on_last_form_step($form_state); + $form['prev'] = $first_form_step ? NULL : islandora_ingest_form_previous_button($form_state); + $form['next'] = $last_form_step ? islandora_ingest_form_ingest_button($form_state) : islandora_ingest_form_next_button($form_state); // Allow for a hook_form_FORM_ID_alter(). drupal_alter(array('form_' . $step['form_id'], 'form'), $form, $form_state, $step['form_id']); return $form; } /** - * Checks if we are on the first step. + * Checks if we are on the first form step. * * @param array $form_state * The Drupal form state. @@ -333,14 +425,16 @@ function islandora_ingest_form_stepify(array $form, array &$form_state, $step) { * @return bool * TRUE if we are currently on the first step, FALSE otherwise. */ -function islandora_ingest_form_on_first_step(array &$form_state) { - $step_id = islandora_ingest_form_get_current_step_id($form_state); - $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); - return array_search($step_id, $step_ids) == 0; +function islandora_ingest_form_on_first_form_step(array &$form_state) { + $step = NULL; + do { + $step = islandora_ingest_form_get_previous_step($form_state, $step); + } while (isset($step) && $step['type'] != 'form'); + return !$step; } /** - * Checks if we are on the last step. + * Checks if we are on the last form step. * * @param array $form_state * The Drupal form state. @@ -348,29 +442,12 @@ function islandora_ingest_form_on_first_step(array &$form_state) { * @return bool * TRUE if we are currently on the last step, FALSE otherwise. */ -function islandora_ingest_form_on_last_step(array &$form_state) { - $next_id = islandora_ingest_form_get_next_step_id($form_state); - if (!$next_id) { - return TRUE; - } - else { - $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); - $next_step_num = array_search($next_id, $step_ids); - $callback_chain = TRUE; - $num_steps = count($step_ids); - while ($next_step_num < $num_steps) { - $next_step = islandora_ingest_form_get_step($form_state, $step_ids[$next_step_num]); - // Still is a form somewhere down our chain. - if ($next_step['type'] === 'form') { - $callback_chain = FALSE; - break; - } - else { - $next_step_num++; - } - } - return $callback_chain; - } +function islandora_ingest_form_on_last_form_step(array &$form_state) { + $step = NULL; + do { + $step = islandora_ingest_form_get_next_step($form_state, $step); + } while (isset($step) && $step['type'] != 'form'); + return !$step; } /** @@ -387,37 +464,10 @@ function islandora_ingest_form_on_last_step(array &$form_state) { function islandora_ingest_form_previous_button(array &$form_state) { // Before we move back to the previous step we should tell the previous step // to undo whatever its submit handler did. - $prev_step_id = islandora_ingest_form_get_previous_step_id($form_state); - $prev_step = islandora_ingest_form_get_step($form_state, $prev_step_id); - - if ($prev_step['type'] === 'form') { - $form_id = $prev_step['form_id']; - $submit_callback = $form_id . '_undo_submit'; - $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_undo_submit'); - } - elseif ($prev_step['type'] === 'callback') { - // Need to check if we have one or more callbacks at the start of our steps. - $steps = islandora_ingest_form_get_steps($form_state); - $keys = array_keys($steps); - $form = FALSE; - $current_step = array_search($prev_step_id, $keys); - while ($current_step >= 0 && !$form) { - $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); - if ($step['type'] === 'form') { - $form = TRUE; - break; - } - $current_step--; - } - // Only render a previous button if there a form somewhere behind us in our - // history chain. - if ($form) { - $submit = array('islandora_ingest_form_callback_previous'); - } - else { - return; - } - } + $prev_step = islandora_ingest_form_get_previous_step($form_state); + $form_id = $prev_step['form_id']; + $submit_callback = $form_id . '_undo_submit'; + $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_previous_submit'); return array( '#type' => 'submit', '#value' => t('Previous'), @@ -434,40 +484,6 @@ function islandora_ingest_form_previous_button(array &$form_state) { ); } -/** - * Handles the execution of "undoing" callbacks until a form type is reached. - * - * @param array $form - * The Drupal form. - * @param array $form_state - * The Drupal form state. - */ -function islandora_ingest_form_callback_previous(array $form, array &$form_state) { - // Arbitrarily move at least 1 back. - islandora_ingest_form_decrement_step($form_state); - $step_id = islandora_ingest_form_get_current_step_id($form_state); - $steps = islandora_ingest_form_get_steps($form_state); - $keys = array_keys($steps); - $current_step = array_search($step_id, $keys); - - $form = FALSE; - - while ($current_step >= 0 && !$form) { - $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); - islandora_ingest_form_decrement_step($form_state); - if ($step['type'] === 'callback') { - $args = array(&$form_state); - $args = isset($step['undo_function']['args']) ? array_merge($args, $step['undo_function']['args']) : $args; - call_user_func_array($step['undo_function']['function'], $args); - } - else { - $form = TRUE; - } - $current_step--; - } - $form_state['rebuild'] = TRUE; -} - /** * The submit handler for the ingest form previous button. * @@ -482,6 +498,11 @@ function islandora_ingest_form_callback_previous(array $form, array &$form_state */ function islandora_ingest_form_previous_submit(array $form, array &$form_state) { islandora_ingest_form_decrement_step($form_state); + $step = islandora_ingest_form_get_step($form_state); + // Undo all callbacks that occured after the previous step. + if ($step['type'] == 'callback') { + islandora_ingest_form_undo_consecutive_callback_steps($form, $form_state, $step); + } $form_state['rebuild'] = TRUE; } @@ -571,19 +592,7 @@ function islandora_ingest_form_ingest_button(array &$form_state) { $validate_callback = $form_id . '_validate'; $validate = function_exists($validate_callback) ? array($validate_callback) : NULL; $submit_callback = $form_id . '_submit'; - $submit = array(); - if (function_exists($submit_callback)) { - $submit[] = $submit_callback; - } - - // Because of callback shananigans we have to check if there are a chain of - // n callbacks that are weighted after the current step. - $next_id = islandora_ingest_form_get_next_step_id($form_state); - - if ($next_id) { - $submit[] = 'islandora_ingest_form_callback_ingest'; - } - + $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_submit') : array('islandora_ingest_form_submit'); return array( '#type' => 'submit', '#name' => 'ingest', @@ -601,7 +610,14 @@ function islandora_ingest_form_ingest_button(array &$form_state) { * @param array $form_state * The Drupal form state. */ -function islandora_ingest_form_ingest(array &$form_state) { +function islandora_ingest_form_submit(array $form, array &$form_state) { + // Execute any remainng callbacks. + islandora_ingest_form_increment_step($form_state); + $step = islandora_ingest_form_get_step($form_state); + if (isset($step) && $step['type'] == 'callback') { + islandora_ingest_form_execute_consecutive_callback_steps($form, $form_state, $step); + } + // Ingest the objects. foreach ($form_state['islandora']['objects'] as $object) { try { islandora_add_object($object); @@ -616,30 +632,6 @@ function islandora_ingest_form_ingest(array &$form_state) { } } -/** - * Execute any callbacks that are weighted at end of the ingest steps on ingest. - * - * @param array $form - * The Drupal form. - * @param array $form_state - * The Drupal form state. - */ -function islandora_ingest_form_callback_ingest(array $form, array &$form_state) { - $next_id = islandora_ingest_form_get_next_step_id($form_state); - $steps = islandora_ingest_form_get_steps($form_state); - $keys = array_keys($steps); - $current_step = array_search($next_id, $keys); - $num_steps = count($steps); - // Execute our n chain of callbacks. - while ($current_step < $num_steps) { - $step = islandora_ingest_form_get_step($form_state, $keys[$current_step]); - $args = array(&$form_state); - $args = isset($step['do_function']['args']) ? array_merge($args, $step['do_function']['args']) : $args; - call_user_func_array($step['do_function']['function'], $args); - $current_step++; - } -} - /** * Gets a reference to the stored NewFedoraObject's. * @@ -752,6 +744,8 @@ function islandora_ingest_form_get_steps(array &$form_state) { $shared_storage = &islandora_ingest_form_get_shared_storage($form_state); foreach (islandora_build_hook_list(ISLANDORA_INGEST_STEP_HOOK, $shared_storage['models']) as $hook) { // Required for pass by reference. + // @todo Change this around so that it isn't passed by reference, there + // Is an alter below that can handle that requirement. foreach (module_implements($hook) as $module) { $function = $module . '_' . $hook; $module_steps = (array) $function($form_state); @@ -762,30 +756,10 @@ function islandora_ingest_form_get_steps(array &$form_state) { foreach (islandora_build_hook_list(ISLANDORA_INGEST_STEP_HOOK, $shared_storage['models']) as $hook) { drupal_alter($hook, $steps, $form_state); } - // Check to see if the callback functions are implemented (existed). Remove - // any implementations from the steps that are incorrectly defined. - foreach ($steps as $key => $step) { - $watchdog = FALSE; - if ($step['type'] === 'callback') { - if (!isset($step['do_function']) || !isset($step['undo_function'])) { - $watchdog = TRUE; - } - elseif (!isset($step['do_function']['function']) || !isset($step['undo_function']['function'])) { - $watchdog = TRUE; - } - - if ($watchdog) { - watchdog('islandora', 'The @module module is incorrectly implementing the - callback functionality of islandora_ingest_steps. The step @step has - not been included in the list of steps.', array( - '@module' => $step['module'], - '@step' => $key, - ), WATCHDOG_ERROR); - unset($steps[$key]); - } - } + // Add any defaults. + foreach ($steps as $key => &$step) { + $step['id'] = $key; } uasort($steps, 'drupal_sort_weight'); - return $steps; } diff --git a/islandora.module b/islandora.module index 6f1d0144..ad9e569e 100644 --- a/islandora.module +++ b/islandora.module @@ -1097,21 +1097,3 @@ function islandora_download_clip(AbstractObject $object) { } exit(); } - -/** - * Implements hook_islandora_ingest_steps(). - */ -function islandora_islandora_ingest_steps(&$form_state) { - return array( - 'islandora_ingest_form_submit' => array( - 'type' => 'callback', - 'weight' => 50, - 'do_function' => array( - 'function' => 'islandora_ingest_form_ingest', - ), - 'undo_function' => array( - 'function' => 'islandora_ingest_form_undo_ingest', - ), - ), - ); -} From 44b8b384c9e493960e7ea4aa56dc02fce6b34040 Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Thu, 18 Apr 2013 17:02:21 -0300 Subject: [PATCH 86/99] Notice and comment fix. --- includes/ingest.form.inc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index a94aaa30..f39d38ff 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -158,7 +158,7 @@ function islandora_ingest_form_get_next_step(array &$form_state, array $step = N } /** - * Gets the next step. + * Gets the previous step. * * If the current step is not defined, its assumed to be the first step. * @@ -465,9 +465,14 @@ function islandora_ingest_form_previous_button(array &$form_state) { // Before we move back to the previous step we should tell the previous step // to undo whatever its submit handler did. $prev_step = islandora_ingest_form_get_previous_step($form_state); - $form_id = $prev_step['form_id']; - $submit_callback = $form_id . '_undo_submit'; - $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_previous_submit'); + if ($prev_step['type'] == 'form') { + $form_id = $prev_step['form_id']; + $submit_callback = $form_id . '_undo_submit'; + $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_previous_submit'); + } + else { + $submit = array('islandora_ingest_form_previous_submit'); + } return array( '#type' => 'submit', '#value' => t('Previous'), @@ -611,7 +616,7 @@ function islandora_ingest_form_ingest_button(array &$form_state) { * The Drupal form state. */ function islandora_ingest_form_submit(array $form, array &$form_state) { - // Execute any remainng callbacks. + // Execute any remaining callbacks. islandora_ingest_form_increment_step($form_state); $step = islandora_ingest_form_get_step($form_state); if (isset($step) && $step['type'] == 'callback') { From a3c38b8d4a128d28cadd8808c7e9991e6e89d56f Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 18 Apr 2013 17:19:28 -0300 Subject: [PATCH 87/99] Code review changes --- .travis.yml | 2 +- islandora.api.php | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7b537cfc..adedf7b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,6 @@ before_install: script: - ant -buildfile sites/all/modules/islandora/build.xml lint - $ISLANDORA_DIR/tests/scripts/line_endings.sh sites/all/modules/islandora - - drush coder-review --reviews=production,security,style,i18n,potx,sniffer sites/all/modules/islandora + - drush coder-review --reviews=production,security,style,i18n,potx,sniffer islandora - phpcpd --names *.module,*.inc,*.test sites/all/modules/islandora - drush test-run --uri=http://localhost:8081 Islandora diff --git a/islandora.api.php b/islandora.api.php index a0ddde5c..d1d58f4f 100644 --- a/islandora.api.php +++ b/islandora.api.php @@ -35,7 +35,7 @@ function hook_islandora_view_object($object, $user, $page_number, $page_size) { * @return array * An array whose values are markup. */ -function hook_cmodel_pid_islandora_view_object($object) { +function hook_CMODEL_PID_islandora_view_object($object) { } @@ -60,7 +60,7 @@ function hook_islandora_view_object_alter(&$object, &$rendered) { * @param array $rendered * The array of rendered views. */ -function hook_cmodel_pid_islandora_view_object_alter(&$object, &$rendered) { +function hook_CMODEL_PID_islandora_view_object_alter(&$object, &$rendered) { } /** @@ -87,7 +87,7 @@ function hook_islandora_edit_object($object) { * @return array * An array whose values are markup. */ -function hook_cmodel_pid_islandora_edit_object($object) { +function hook_CMODEL_PID_islandora_edit_object($object) { } /** @@ -138,7 +138,7 @@ function hook_islandora_object_alter(AbstractFedoraObject $object, array &$conte * * @see hook_islandora_object_alter() */ -function hook_cmodel_pid_islandora_object_alter(AbstractFedoraObject $object, array &$context) { +function hook_CMODEL_PID_islandora_object_alter(AbstractFedoraObject $object, array &$context) { } /** @@ -187,7 +187,7 @@ function hook_islandora_datastream_alter(AbstractFedoraObject $object, AbstractF * * @see hook_islandora_datastream_alter() */ -function hook_cmodel_pid_DSID_islandora_datastream_alter(AbstractFedoraObject $object, AbstractFedoraDatastream $datastream, array &$context) { +function hook_CMODEL_PID_DSID_islandora_datastream_alter(AbstractFedoraObject $object, AbstractFedoraDatastream $datastream, array &$context) { } /** @@ -211,7 +211,7 @@ function hook_islandora_object_ingested(FedoraObject $object) { * * @see hook_islandora_object_ingested() */ -function hook_cmodel_pid_islandora_object_ingested(FedoraObject $object) { +function hook_CMODEL_PID_islandora_object_ingested(FedoraObject $object) { } /** @@ -236,7 +236,7 @@ function hook_islandora_object_modified(FedoraObject $object) { * * @see hook_islandora_object_modified() */ -function hook_cmodel_pid_islandora_object_modified(FedoraObject $object) { +function hook_CMODEL_PID_islandora_object_modified(FedoraObject $object) { } /** @@ -256,7 +256,7 @@ function hook_islandora_object_purged($pid) { * * @see hook_islandora_object_purged() */ -function hook_cmodel_pid_islandora_object_purged($pid) { +function hook_CMODEL_PID_islandora_object_purged($pid) { } /** @@ -281,7 +281,7 @@ function hook_islandora_datastream_ingested(FedoraObject $object, FedoraDatastre * * @see hook_islandora_object_ingested() */ -function hook_cmodel_pid_DSID_islandora_datastream_ingested(FedoraObject $object, FedoraDatastream $datastream) { +function hook_CMODEL_PID_DSID_islandora_datastream_ingested(FedoraObject $object, FedoraDatastream $datastream) { } /** @@ -308,7 +308,7 @@ function hook_islandora_datastream_modified(FedoraObject $object, FedoraDatastre * * @see hook_islandora_datastream_modified() */ -function hook_cmodel_pid_islandora_datastream_modified(FedoraObject $object, FedoraDatastream $datastream) { +function hook_CMODEL_PID_islandora_datastream_modified(FedoraObject $object, FedoraDatastream $datastream) { } /** @@ -330,7 +330,7 @@ function hook_islandora_datastream_purged(FedoraObject $object, $dsid) { * * @see hook_islandora_datastream_purged() */ -function hook_cmodel_pid_islandora_datastream_purged(FedoraObject $object, $dsid) { +function hook_CMODEL_PID_islandora_datastream_purged(FedoraObject $object, $dsid) { } /** @@ -418,5 +418,5 @@ function hook_islandora_ingest_steps(array $form_state) { * * @see hook_islandora_ingest_steps() */ -function hook_cmodel_pid_islandora_ingest_steps(array $form_state) { +function hook_CMODEL_PID_islandora_ingest_steps(array $form_state) { } From 2d0bba2611839a6c1513d12b6ed713edc0c9927d Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Fri, 19 Apr 2013 01:13:28 +0200 Subject: [PATCH 88/99] Prevent inifite loop when a callbacks is the last step to be executed. Fix's an error in my logic. Now instead of having a null step ID mean that it is the first step. The step ID gets initialized when the form is first build and NULL is changed to mean that all steps have been executed. Also added some comments. --- includes/ingest.form.inc | 127 +++++++++++++++++++++++++++++---------- 1 file changed, 96 insertions(+), 31 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 3619808a..435bff7c 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -84,9 +84,42 @@ function islandora_ingest_form_init_form_state_storage(array &$form_state, array 'shared_storage' => $configuration, 'step_storage' => array(), ); + // Must be called after $form_state['islandora'] is initialized, otherwise, the values + // in 'islandora' would not be availible to the step hooks. + $form_state['islandora']['step_id'] = islandora_ingest_form_get_first_step_id($form_state); } } +/** + * Get the first step ID. + * + * @param array $form_state + * The Drupal form state. + * + * @return string + * The 'id' of the very first step. + */ +function islandora_ingest_form_get_first_step_id(array &$form_state) { + $steps = islandora_ingest_form_get_steps($form_state); + $keys = array_keys($steps); + return array_shift($keys); +} + +/** + * Get the last step ID. + * + * @param array $form_state + * The Drupal form state. + * + * @return string + * The 'id' of the very last step. + */ +function islandora_ingest_form_get_last_step_id(array &$form_state) { + $steps = islandora_ingest_form_get_steps($form_state); + $keys = array_keys($steps); + return array_pop($keys); +} + /** * Prepares a new object based on the given configuration. * @@ -115,13 +148,12 @@ function islandora_ingest_form_prepare_new_object(array $configuration) { /** * Gets the given/current step. * - * The current step is returned if no step ID is given. If the current step is - * not defined it's assume to be the first step. + * If the current step is not defined it's assumed that all steps have executed. * * @param array $form_state * The Drupal form state. * @param string $step_id - * The ID of the step. + * The ID of the step. The current step is returned if no step ID is given. * * @return array * The given/current step if found, NULL otherwise. @@ -138,7 +170,7 @@ function islandora_ingest_form_get_step(array &$form_state, $step_id = NULL) { /** * Gets the next step. * - * If the current step is not defined, its assumed to be the first step. + * If the current step is not defined it's assumed that all steps have executed. * * @param array $form_state * The Drupal form state. @@ -151,16 +183,13 @@ function islandora_ingest_form_get_step(array &$form_state, $step_id = NULL) { function islandora_ingest_form_get_next_step(array &$form_state, array $step = NULL) { $step = isset($step) ? $step : islandora_ingest_form_get_step($form_state); $next_step_id = islandora_ingest_form_get_next_step_id($form_state, $step['id']); - if ($next_step_id) { - return islandora_ingest_form_get_step($form_state, $next_step_id); - } - return NULL; + return isset($next_step_id) ? islandora_ingest_form_get_step($form_state, $next_step_id) : NULL; } /** * Gets the previous step. * - * If the current step is not defined, its assumed to be the first step. + * If the current step is not defined it's assumed that all steps have executed. * * @param array $form_state * The Drupal form state. @@ -172,17 +201,14 @@ function islandora_ingest_form_get_next_step(array &$form_state, array $step = N */ function islandora_ingest_form_get_previous_step(array &$form_state, array $step = NULL) { $step = isset($step) ? $step : islandora_ingest_form_get_step($form_state); - $next_step_id = islandora_ingest_form_get_previous_step_id($form_state, $step['id']); - if ($next_step_id) { - return islandora_ingest_form_get_step($form_state, $next_step_id); - } - return NULL; + $previous_step_id = islandora_ingest_form_get_previous_step_id($form_state, $step['id']); + return isset($previous_step_id) ? islandora_ingest_form_get_step($form_state, $previous_step_id) : NULL; } /** * Gets the ID of the current step. * - * If a current step is not defined, its assumed to be the first step. + * If the current step is not defined it's assumed that all steps have executed. * * @param array $form_state * The Drupal form state. @@ -191,18 +217,13 @@ function islandora_ingest_form_get_previous_step(array &$form_state, array $step * The step ID. */ function islandora_ingest_form_get_current_step_id(array &$form_state) { - if (empty($form_state['islandora']['step_id'])) { - $steps = islandora_ingest_form_get_steps($form_state); - $keys = array_keys($steps); - return array_shift($keys); - } return $form_state['islandora']['step_id']; } /** * Gets the ID of the next step. * - * If a current step is not defined, its assumed to be the first step. + * If the current step is not defined it's assumed that all steps have executed. * * @param array $form_state * The Drupal form state. @@ -227,7 +248,8 @@ function islandora_ingest_form_get_next_step_id(array &$form_state, $step_id = N /** * Gets the ID of the previous step. * - * If a current step is not defined, its assumed to be the first step. + * If the current step is not defined it's assumed that all steps have executed. + * In such cases the last step will be returned. * * @param array $form_state * The Drupal form state. @@ -240,6 +262,11 @@ function islandora_ingest_form_get_next_step_id(array &$form_state, $step_id = N */ function islandora_ingest_form_get_previous_step_id(array &$form_state, $step_id = NULL) { $step_id = isset($step_id) ? $step_id : islandora_ingest_form_get_current_step_id($form_state); + // If the current step is not defined it's assumed that all steps have executed. + // so return the very last step. + if ($step_id == NULL) { + return islandora_ingest_form_get_last_step_id($form_state); + } $step_ids = array_keys(islandora_ingest_form_get_steps($form_state)); $index = array_search($step_id, $step_ids); if ($index !== FALSE && --$index >= 0) { @@ -259,11 +286,9 @@ function islandora_ingest_form_increment_step(array &$form_state) { // of the current step could have added/removed a step. drupal_static_reset('islandora_ingest_form_get_steps'); $next_step_id = islandora_ingest_form_get_next_step_id($form_state); - if (isset($next_step_id)) { - islandora_ingest_form_stash_info($form_state); - $form_state['islandora']['step_id'] = $next_step_id; - islandora_ingest_form_grab_info($form_state); - } + islandora_ingest_form_stash_info($form_state); + $form_state['islandora']['step_id'] = $next_step_id; + islandora_ingest_form_grab_info($form_state); } /** @@ -274,6 +299,7 @@ function islandora_ingest_form_increment_step(array &$form_state) { */ function islandora_ingest_form_decrement_step(array &$form_state) { $previous_step_id = islandora_ingest_form_get_previous_step_id($form_state); + // Don't decrement passed the first step. if (isset($previous_step_id)) { islandora_ingest_form_stash_info($form_state); $form_state['islandora']['step_id'] = $previous_step_id; @@ -346,7 +372,17 @@ function islandora_ingest_form_execute_step(array $form, array &$form_state, $st } /** - * Assumes the given $step is a 'form' step. + * Execute the given 'form' step. + * + * Assumes the given step is a 'form' step. + * + * @param array $form + * The Drupal form. + * @param array $form_state + * The Drupal form state. + * + * @return array + * The form definition of the given step. */ function islandora_ingest_form_execute_form_step(array $form, array &$form_state, array $step) { $args = array($form, &$form_state); @@ -356,7 +392,14 @@ function islandora_ingest_form_execute_form_step(array $form, array &$form_state } /** - * Assumes the given $step is a 'callback' step. + * Execute the given 'callback' step and any consecutive 'callback' steps. + * + * Assumes the given step is a 'callback' step. + * + * @param array $form + * The Drupal form. + * @param array $form_state + * The Drupal form state. */ function islandora_ingest_form_execute_consecutive_callback_steps(array $form, array &$form_state, array $step) { do { @@ -367,7 +410,14 @@ function islandora_ingest_form_execute_consecutive_callback_steps(array $form, a } /** - * Assumes the given $step is a 'callback' step. + * Execute the given 'callback' step. + * + * Assumes the given step is a 'callback' step. + * + * @param array $form + * The Drupal form. + * @param array $form_state + * The Drupal form state. */ function islandora_ingest_form_execute_callback_step(array $form, array &$form_state, array $step) { $args = array(&$form_state); @@ -376,7 +426,14 @@ function islandora_ingest_form_execute_callback_step(array $form, array &$form_s } /** + * Undo the given 'callback' step and any consecutive 'callback' steps. + * * Assumes the given $step is a 'callback' step. + * + * @param array $form + * The Drupal form. + * @param array $form_state + * The Drupal form state. */ function islandora_ingest_form_undo_consecutive_callback_steps(array $form, array &$form_state, array $step) { do { @@ -387,7 +444,14 @@ function islandora_ingest_form_undo_consecutive_callback_steps(array $form, arra } /** + * Undo the given 'callback' step. + * * Assumes the given $step is a 'callback' step. + * + * @param array $form + * The Drupal form. + * @param array $form_state + * The Drupal form state. */ function islandora_ingest_form_undo_callback_step(array $form, array &$form_state, array $step) { $args = array(&$form_state); @@ -691,7 +755,8 @@ function &islandora_ingest_form_get_step_storage(array &$form_state, $step_id = } return $form_state['islandora']['step_storage'][$step_id]; } - return NULL; + $undefined_step_storage = array(); + return $undefined_step_storage; } /** From 0791f5d5f4ded8f5d7422d471bd5080f148a1799 Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Fri, 19 Apr 2013 01:50:38 +0200 Subject: [PATCH 89/99] Undo previous form when callbacks steps exist between it and the current step. Added two functions for navigating by 'form' steps rather than steps. --- includes/ingest.form.inc | 53 ++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 435bff7c..fb26d72a 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -490,11 +490,7 @@ function islandora_ingest_form_stepify(array $form, array &$form_state, $step) { * TRUE if we are currently on the first step, FALSE otherwise. */ function islandora_ingest_form_on_first_form_step(array &$form_state) { - $step = NULL; - do { - $step = islandora_ingest_form_get_previous_step($form_state, $step); - } while (isset($step) && $step['type'] != 'form'); - return !$step; + return !islandora_ingest_form_get_previous_form_step($form_state); } /** @@ -507,11 +503,41 @@ function islandora_ingest_form_on_first_form_step(array &$form_state) { * TRUE if we are currently on the last step, FALSE otherwise. */ function islandora_ingest_form_on_last_form_step(array &$form_state) { + return !islandora_ingest_form_get_next_form_step($form_state); +} + +/** + * Get the previous form step relative to the current step. + * + * @param array $form_state + * The Drupal form state. + * + * @return array + * The previous form step if one exists, NULL otherwise. + */ +function islandora_ingest_form_get_previous_form_step(array &$form_state) { + $step = NULL; + do { + $step = islandora_ingest_form_get_previous_step($form_state, $step); + } while (isset($step) && $step['type'] != 'form'); + return $step; +} + +/** + * Get the next form step relative to the current step. + * + * @param array $form_state + * The Drupal form state. + * + * @return array + * The next form step if one exists, NULL otherwise. + */ +function islandora_ingest_form_get_next_form_step(array &$form_state) { $step = NULL; do { $step = islandora_ingest_form_get_next_step($form_state, $step); } while (isset($step) && $step['type'] != 'form'); - return !$step; + return $step; } /** @@ -526,17 +552,12 @@ function islandora_ingest_form_on_last_form_step(array &$form_state) { * The previous button for the ingest form. */ function islandora_ingest_form_previous_button(array &$form_state) { - // Before we move back to the previous step we should tell the previous step + // Before we move back to the previous step we should tell the previous steps // to undo whatever its submit handler did. - $prev_step = islandora_ingest_form_get_previous_step($form_state); - if ($prev_step['type'] == 'form') { - $form_id = $prev_step['form_id']; - $submit_callback = $form_id . '_undo_submit'; - $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_previous_submit'); - } - else { - $submit = array('islandora_ingest_form_previous_submit'); - } + $prev_form_step = islandora_ingest_form_get_previous_form_step(); + $form_id = $prev_form_step['form_id']; + $submit_callback = $form_id . '_undo_submit'; + $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_previous_submit'); return array( '#type' => 'submit', '#value' => t('Previous'), From 69fb08dd73bcc139730e150b16205cc7f24cf00c Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Fri, 19 Apr 2013 01:54:43 +0200 Subject: [PATCH 90/99] Coding standards. --- includes/ingest.form.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index fb26d72a..b26fc875 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -84,8 +84,8 @@ function islandora_ingest_form_init_form_state_storage(array &$form_state, array 'shared_storage' => $configuration, 'step_storage' => array(), ); - // Must be called after $form_state['islandora'] is initialized, otherwise, the values - // in 'islandora' would not be availible to the step hooks. + // Must be called after $form_state['islandora'] is initialized, otherwise, + // the values in 'islandora' would not be availible to the step hooks. $form_state['islandora']['step_id'] = islandora_ingest_form_get_first_step_id($form_state); } } @@ -262,8 +262,8 @@ function islandora_ingest_form_get_next_step_id(array &$form_state, $step_id = N */ function islandora_ingest_form_get_previous_step_id(array &$form_state, $step_id = NULL) { $step_id = isset($step_id) ? $step_id : islandora_ingest_form_get_current_step_id($form_state); - // If the current step is not defined it's assumed that all steps have executed. - // so return the very last step. + // If the current step is not defined it's assumed that all steps have + // executed. So return the very last step. if ($step_id == NULL) { return islandora_ingest_form_get_last_step_id($form_state); } From 07c4c35e9a86f5c13fd87e008eb0f49e314909aa Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Fri, 19 Apr 2013 02:30:19 +0200 Subject: [PATCH 91/99] Missing Argument --- includes/ingest.form.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index b26fc875..5c9e3e55 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -554,7 +554,7 @@ function islandora_ingest_form_get_next_form_step(array &$form_state) { function islandora_ingest_form_previous_button(array &$form_state) { // Before we move back to the previous step we should tell the previous steps // to undo whatever its submit handler did. - $prev_form_step = islandora_ingest_form_get_previous_form_step(); + $prev_form_step = islandora_ingest_form_get_previous_form_step($form_state); $form_id = $prev_form_step['form_id']; $submit_callback = $form_id . '_undo_submit'; $submit = function_exists($submit_callback) ? array($submit_callback, 'islandora_ingest_form_previous_submit') : array('islandora_ingest_form_previous_submit'); From 3da2fdcb9f46dd1ae8ad6485680eb8b610e8e3ae Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 19 Apr 2013 09:48:45 -0300 Subject: [PATCH 92/99] added default, changed sorting --- includes/utilities.inc | 52 +++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 90676923..d1b32d4e 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -204,13 +204,13 @@ function islandora_escape_pid_for_function($pid) { // Apparently, case doesn't matter for function calls in PHP, so let's not // really worry about changing the case. return str_replace( - // Any PID characters which are not valid in the name of a PHP function. - array( - ':', - '-', - ), - '_', - $pid + // Any PID characters which are not valid in the name of a PHP function. + array( + ':', + '-', + ), + '_', + $pid ); } @@ -281,16 +281,16 @@ function islandora_namespace_accessible($id) { function islandora_get_parents_from_rels_ext(FedoraObject $object) { try { $collections = array_merge( - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); } catch (RepositoryException $e) { // @todo some logging would be nice, not sure what this throws. return array(); } $map = function($o) { - return islandora_object_load($o['object']['value']); - }; + return islandora_object_load($o['object']['value']); + }; $collections = array_map($map, $collections); return array_filter($collections); } @@ -505,7 +505,7 @@ function islandora_display_repository_inaccessible_message() { $text = t('Islandora configuration'); $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', - array('!link' => $link)); + array('!link' => $link)); drupal_set_message($message, 'error', FALSE); } @@ -744,7 +744,7 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { $label = $result['label']['value']; $namespace = islandora_get_namespace($content_model); $ignore = $ignore_system_namespace && $namespace == 'fedora-system'; - $ignore |= !islandora_namespace_accessible($namespace); + $ignore |= ! islandora_namespace_accessible($namespace); if (!$ignore) { $content_models[$content_model] = array('pid' => $content_model, 'label' => $label); } @@ -759,11 +759,12 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { * the name of the Drupal variable holding selected content models * Content models held in this variable will appear at the top of * the displayed list - * + * @param array $default_values_array + * default values to display if $drupal_variable is unset * @return array * Drupal form element allowing content model selection */ -function islandora_content_model_select_table_form_element($drupal_variable) { +function islandora_content_model_select_table_form_element($drupal_variable, $default_values_array = array('')) { $defaults = array(); $rows = array(); $content_models = array(); @@ -773,19 +774,24 @@ function islandora_content_model_select_table_form_element($drupal_variable) { $content_models[$option['pid']] = $option['label']; } - $selected = array_values(variable_get($drupal_variable, array(''))); - foreach ($selected as $selection) { - if (isset($content_models[$selection])) { - $content_models = array($selection => $content_models[$selection]) + $content_models; - } - } - + $selected = array_values(variable_get($drupal_variable, $default_values_array)); + $comparator = function ($a, $b) use ($selected) { + $a_val = $b_val = 0; + if (in_array($a, $selected)) { + $a_val = 1; + } + if (in_array($b, $selected)) { + $b_val = 1; + } + return $a_val = $b_val; + }; + uksort($content_models, $comparator); foreach ($content_models as $pid => $label) { $rows[$pid] = array( 'pid' => $pid, 'title' => $label, ); - in_array($pid, $selected) ? $defaults[$pid] = TRUE : $defaults[$pid] = FALSE; + $defaults[$pid] = in_array($pid, $selected); } $header = array( 'pid' => array('data' => t('PID')), From b58fd31f9c179c8c83124c797af2eaf384b8d4eb Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 19 Apr 2013 11:38:40 -0300 Subject: [PATCH 93/99] formatting, made query more efficient --- includes/utilities.inc | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index d1b32d4e..5b60df50 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -204,7 +204,7 @@ function islandora_escape_pid_for_function($pid) { // Apparently, case doesn't matter for function calls in PHP, so let's not // really worry about changing the case. return str_replace( - // Any PID characters which are not valid in the name of a PHP function. + // Any PID characters which are not valid in the name of a PHP function. array( ':', '-', @@ -281,8 +281,8 @@ function islandora_namespace_accessible($id) { function islandora_get_parents_from_rels_ext(FedoraObject $object) { try { $collections = array_merge( - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), - $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'), + $object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOf')); } catch (RepositoryException $e) { // @todo some logging would be nice, not sure what this throws. @@ -724,17 +724,14 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { FROM <#ri> WHERE { {?object fm:hasModel ; - fm:state - OPTIONAL{ - ?object fm:label ?label + fm:state fm:Active } - } - UNION - {?object fr:isMemberOfCollection ; - fm:state - OPTIONAL{ - ?object fm:label ?label + UNION{ + ?object fr:isMemberOfCollection ; + fm:state fm:Active } + OPTIONAL{ + ?object fm:label ?label } }"; $content_models = array(); @@ -744,7 +741,7 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { $label = $result['label']['value']; $namespace = islandora_get_namespace($content_model); $ignore = $ignore_system_namespace && $namespace == 'fedora-system'; - $ignore |= ! islandora_namespace_accessible($namespace); + $ignore |= !islandora_namespace_accessible($namespace); if (!$ignore) { $content_models[$content_model] = array('pid' => $content_model, 'label' => $label); } @@ -776,15 +773,15 @@ function islandora_content_model_select_table_form_element($drupal_variable, $de $selected = array_values(variable_get($drupal_variable, $default_values_array)); $comparator = function ($a, $b) use ($selected) { - $a_val = $b_val = 0; - if (in_array($a, $selected)) { - $a_val = 1; - } - if (in_array($b, $selected)) { - $b_val = 1; - } - return $a_val = $b_val; - }; + $a_val = $b_val = 0; + if (in_array($a, $selected)) { + $a_val = 1; + } + if (in_array($b, $selected)) { + $b_val = 1; + } + return $a_val = $b_val; + }; uksort($content_models, $comparator); foreach ($content_models as $pid => $label) { $rows[$pid] = array( From 84aa0c58f4181132b17fecad2108ecbd39e3bfc0 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 19 Apr 2013 14:46:11 -0300 Subject: [PATCH 94/99] changed operator --- includes/utilities.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index 5b60df50..ca1867d3 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -778,9 +778,9 @@ function islandora_content_model_select_table_form_element($drupal_variable, $de $a_val = 1; } if (in_array($b, $selected)) { - $b_val = 1; + $b_val - 1; } - return $a_val = $b_val; + return $a_val - $b_val; }; uksort($content_models, $comparator); foreach ($content_models as $pid => $label) { From 553810a133fbb6ed8f05bd78f7ac5d53ac5d9d8e Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 19 Apr 2013 14:48:29 -0300 Subject: [PATCH 95/99] changed operator --- includes/utilities.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index ca1867d3..d40b044a 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -778,9 +778,9 @@ function islandora_content_model_select_table_form_element($drupal_variable, $de $a_val = 1; } if (in_array($b, $selected)) { - $b_val - 1; + $b_val = 1; } - return $a_val - $b_val; + return $b_val - $a_val; }; uksort($content_models, $comparator); foreach ($content_models as $pid => $label) { From 4512238721b7983273a4a35385b015a3b9bbd7b0 Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Fri, 19 Apr 2013 16:48:01 -0300 Subject: [PATCH 96/99] Fix bug due to alternate menu titles. --- includes/breadcrumb.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/includes/breadcrumb.inc b/includes/breadcrumb.inc index 6fdf9e4a..9db4824c 100644 --- a/includes/breadcrumb.inc +++ b/includes/breadcrumb.inc @@ -57,9 +57,10 @@ function islandora_get_breadcrumbs_recursive($pid, FedoraRepository $repository, $root = variable_get('islandora_repository_pid', 'islandora:root'); if ($pid == $root) { + $item = menu_get_item('islandora'); return array( l(t('Home'), ''), - l(menu_get_active_title(), 'islandora'), + l($item['title'], 'islandora'), ); } else { From 9496b0e5fda04424717ff201c8921ecedd116607 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 19 Apr 2013 17:01:31 -0300 Subject: [PATCH 97/99] formatting --- includes/utilities.inc | 1 - 1 file changed, 1 deletion(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index d40b044a..6d20dff5 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -765,7 +765,6 @@ function islandora_content_model_select_table_form_element($drupal_variable, $de $defaults = array(); $rows = array(); $content_models = array(); - $options = islandora_get_content_models(TRUE); foreach ($options as $option) { $content_models[$option['pid']] = $option['label']; From f9e406471593e71ae36ef872474ffb96de9036c4 Mon Sep 17 00:00:00 2001 From: Alan Stanley Date: Fri, 19 Apr 2013 17:16:32 -0300 Subject: [PATCH 98/99] coder standards --- includes/utilities.inc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/includes/utilities.inc b/includes/utilities.inc index b6bb1854..fbc4585a 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -204,7 +204,7 @@ function islandora_escape_pid_for_function($pid) { // Apparently, case doesn't matter for function calls in PHP, so let's not // really worry about changing the case. return str_replace( - // Any PID characters which are not valid in the name of a PHP function. + // Any PID characters which are not valid in the name of a PHP function. array( ':', '-', @@ -289,8 +289,8 @@ function islandora_get_parents_from_rels_ext(FedoraObject $object) { return array(); } $map = function($o) { - return islandora_object_load($o['object']['value']); - }; + return islandora_object_load($o['object']['value']); + }; $collections = array_map($map, $collections); return array_filter($collections); } @@ -770,6 +770,7 @@ function islandora_get_content_models($ignore_system_namespace = TRUE) { * the displayed list * @param array $default_values_array * default values to display if $drupal_variable is unset + * * @return array * Drupal form element allowing content model selection */ From 79c878a6a67de5d7c931b3980cc47f4deaf9c50c Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Thu, 25 Apr 2013 22:24:32 +0200 Subject: [PATCH 99/99] Added link to customizing ingest steps. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fd2663b7..0515a848 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ should be copied into the Fedora global XACML policies folder. This will allow CONFIGURATION ------------- -The islandora_drupal_filter passes the username of 'anonymous' through to +The islandora_drupal_filter passes the username of 'anonymous' through to Fedora for unauthenticated Drupal Users. A user with the name of 'anonymous' may have XACML policies applied to them that are meant to be applied to Drupal users that are not logged in or vice-versa. This is a potential security issue @@ -47,6 +47,7 @@ Drupal's cron will can be ran to remove expired authentication tokens. CUSTOMIZATION ------------- +[Customize ingest forms](http://github.com/Islandora/islandora/wiki/Multi-paged-Ingest-Forms) TROUBLESHOOTING ---------------