From 51e8f84023b210218c846e0d9cfa7e2caf7b099b Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Wed, 13 Mar 2013 01:51:47 +0100 Subject: [PATCH 01/55] 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/55] 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/55] 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/55] 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/55] 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 2c829f0241a289732efbc4ca56dfccc9bca61bd1 Mon Sep 17 00:00:00 2001 From: Nigel Banks Date: Tue, 26 Mar 2013 07:10:03 +0100 Subject: [PATCH 06/55] 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 07/55] 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 08/55] 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 2763f2b267f80d42a1c0d8e8bf1ac66c0c5369d8 Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Thu, 28 Mar 2013 12:44:35 -0300 Subject: [PATCH 09/55] 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 af933e66ff97e3316b7f5cbaacdbdc24f564c1b6 Mon Sep 17 00:00:00 2001 From: Jordan Dukart Date: Thu, 28 Mar 2013 12:52:55 -0300 Subject: [PATCH 10/55] 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 11/55] 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 12/55] 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 13/55] 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 14/55] 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 15/55] 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 16/55] 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 17/55] 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 18/55] 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 19/55] 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 20/55] 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 21/55] 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 22/55] 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 23/55] 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 24/55] 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 25/55] 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 26/55] 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 27/55] 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 28/55] 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 29/55] 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 30/55] 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 31/55] 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 32/55] 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 33/55] 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 34/55] 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 35/55] 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 36/55] 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 37/55] 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 38/55] 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 39/55] 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 40/55] 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 41/55] 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 42/55] 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 43/55] 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 44/55] 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 128cc45ac3b59116c7ba2843ceb706a9416df4bf Mon Sep 17 00:00:00 2001 From: Islandora Date: Wed, 10 Apr 2013 14:31:25 -0300 Subject: [PATCH 45/55] 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 46/55] 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 47/55] 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 48/55] 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 49/55] 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 50/55] 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 51/55] 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 52/55] 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 53/55] 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 2e02f32402c9356e63aedf82c363f42f65baf6a8 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Thu, 11 Apr 2013 14:52:06 -0300 Subject: [PATCH 54/55] 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 55/55] 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