diff --git a/islandora.module b/islandora.module index 49783c30..9d418d29 100644 --- a/islandora.module +++ b/islandora.module @@ -29,6 +29,8 @@ define('FEDORA_ADD_DS', 'add fedora datastreams'); define('FEDORA_INGEST', 'ingest fedora objects'); define('FEDORA_PURGE', 'delete fedora objects and datastreams'); define('FEDORA_MODIFY_STATE', 'modify fedora state'); +define('ISLANDORA_VIEW_HOOK', 'islandora_view_object'); +define('ISLANDORA_EDIT_HOOK', 'islandora_edit_object'); /** * Implementation of hook_menu. @@ -224,6 +226,8 @@ function islandora_purge_object($object_id) { /** * returns an array listing object types provided by sub modules + * The array should contain the cmodels it listens for and the hooks it answers to + * example array ('islandora:collectionCModel' => array ('islandora_edit_object' => TRUE, 'islandora_view_object' => TRUE); * @return array */ function islandora_get_types() { @@ -253,19 +257,26 @@ function islandora_edit_object($object_id) { foreach ($arr as $key => $value) { $output .= $key . '
' . $value; //if we have multiple modules handle one cmodel we need to iterate over multiple } - //we could do another module invoke all here to build the edit tab with a default implemented in this module? - return $output; + return $output; } - /** + * checks to see if any other modules implement this functionality and if there are none * builds a default page for the edit tab + * * @param object $fedora_object * A tuque Fedora Object */ -function islandora_islandora_edit_object($fedora_object){ +function islandora_islandora_edit_object($fedora_object) { + $supported_models = islandora_get_types(); + $output = ""; + foreach ($fedora_object->models as $model) { + if ($supported_models[$model][ISLANDORA_EDIT_HOOK] == TRUE) {//another module is handling the view + return; + } + } $output = theme('islandora_default_edit', array('islandora_object' => $fedora_object)); - return array ('Default Edit output' => $output); + return array('Default Edit output' => $output); } /** @@ -337,13 +348,14 @@ function islandora_view_object($object_id) { */ function islandora_islandora_view_object($object) { $supported_models = islandora_get_types(); - $object_models = $object->models; - $combined_list = array_intersect($supported_models, $object->models); $output = ""; - if (empty($combined_list)) { - $output = theme('islandora_default', array('islandora_object' => $object)); - return array('Default Output' => $output); + foreach ($object->models as $model) { + if ($supported_models[$model][ISLANDORA_VIEW_HOOK] == TRUE) {//another module is handling the view + return; + } } + $output = theme('islandora_default', array('islandora_object' => $object)); + return array('Default Output' => $output); } /** @@ -434,7 +446,6 @@ function islandora_preprocess_islandora_default(&$variables) { } } -function islandora_preprocess_islandora_default_edit(&$variables){ +function islandora_preprocess_islandora_default_edit(&$variables) { //$islandora_object = $variables['islandora_object']; - } \ No newline at end of file diff --git a/islandora_basic_collection/islandora_basic_collection.module b/islandora_basic_collection/islandora_basic_collection.module index e09765a8..0ff65172 100644 --- a/islandora_basic_collection/islandora_basic_collection.module +++ b/islandora_basic_collection/islandora_basic_collection.module @@ -48,7 +48,11 @@ function islandora_basic_collection_theme($existing, $type, $theme, $path) { * array of content model pids that this module supports */ function islandora_basic_collection_islandora_get_types() { - return array('info:fedora/islandora:collectionCModel'); + $types = array(); + $types['info:fedora/islandora:collectionCModel'][ISLANDORA_VIEW_HOOK] = TRUE; + $types['info:fedora/islandora:collectionCModel'][ISLANDORA_EDIT_HOOK] = FALSE; + return $types; + } /** @@ -66,12 +70,14 @@ function islandora_basic_collection_islandora_get_types() { function islandora_basic_collection_islandora_view_object($object, $user, $page_number, $page_size) { //global $user; $cmodel_list = islandora_basic_collection_islandora_get_types(); - $combined_list = array_intersect($cmodel_list, $object->models); - if (empty($combined_list)) { - return NULL; //we don't handle any of this objects cmodels + $models = $object->models; + foreach ($object->models as $model) { + if ($cmodel_list[$model][ISLANDORA_VIEW_HOOK] == TRUE) { + $output = theme('islandora_basic_collection', array('islandora_object' => $object)); + return array('Basic Collection Output' => $output); + } } - $output = theme('islandora_basic_collection', array('islandora_object' => $object)); - return array('Basic Collection Output' => $output); + return NULL; } /** @@ -100,13 +106,12 @@ function islandora_basic_collection_preprocess_islandora_basic_collection(&$vari if (isset($islandora_object['TN'])) { $variables['islandora_thumbnail_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/TN/view'; } - if (isset($islandora_object['MEDIUM_SIZE'])){ + if (isset($islandora_object['MEDIUM_SIZE'])) { $variables['islandora_medium_size_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/MEDIUM_SIZE/view'; } - } -function islandora_basic_collection_get_objects($object){ +function islandora_basic_collection_get_objects($object) { $query = 'select $object $title $content from <#ri> where ($object $title and $object $content @@ -118,13 +123,13 @@ function islandora_basic_collection_get_objects($object){ $page_number = (empty($_GET['page'])) ? '1' : $_GET['page']; $page_size = (empty($_GET['pagesize'])) ? '10' : $_GET['pagesize']; module_load_include('inc', 'islandora', 'RestConnection'); - $query_array = array('query' => $query, 'type' => 'itql','pid' => $object->id, 'page_size'=>$page_size, 'page_number' => $page_number); - drupal_alter('islandora_basic_collection_query',$query_array); + $query_array = array('query' => $query, 'type' => 'itql', 'pid' => $object->id, 'page_size' => $page_size, 'page_number' => $page_number); + drupal_alter('islandora_basic_collection_query', $query_array); global $user; try { $restConnection = new RestConnection($user); $queryObject = new RepositoryQuery($restConnection->connection); - $results = $queryObject->query($query_array['query'],$query_array['type']); + $results = $queryObject->query($query_array['query'], $query_array['type']); } catch (Exception $e) { drupal_set_message(t('Islandora Error getting related objects for %s', array('%s' => $object->id)), 'error'); return""; diff --git a/islandora_basic_image/css/islandora_basic_image.admin.css b/islandora_basic_image/css/islandora_basic_image.admin.css index a7f79c7c..e2ad3040 100644 --- a/islandora_basic_image/css/islandora_basic_image.admin.css +++ b/islandora_basic_image/css/islandora_basic_image.admin.css @@ -1,12 +1,8 @@ /* Document : islandora_basic_collection.admin.css Created on : May 23, 2012, 11:23:06 AM - Author : ppound Description: Purpose of the stylesheet follows. */ -root { - display: block; -} diff --git a/islandora_basic_image/islandora_basic_image.module b/islandora_basic_image/islandora_basic_image.module index daffdd75..de8a619a 100644 --- a/islandora_basic_image/islandora_basic_image.module +++ b/islandora_basic_image/islandora_basic_image.module @@ -52,7 +52,10 @@ function islandora_basic_image_theme($existing, $type, $theme, $path) { * array of content model pids that this module supports */ function islandora_basic_image_islandora_get_types() { - return array('info:fedora/islandora:imgageCModel', 'info:fedora/islandora:sp_basic_image'); + $types = array(); + $types['info:fedora/islandora:sp_basic_image'][ISLANDORA_VIEW_HOOK] = TRUE; + $types['info:fedora/islandora:sp_basic_image'][ISLANDORA_EDIT_HOOK] = TRUE; + return $types; } /** @@ -70,13 +73,14 @@ function islandora_basic_image_islandora_get_types() { function islandora_basic_image_islandora_view_object($object, $user, $page_number, $page_size) { //global $user; $cmodel_list = islandora_basic_image_islandora_get_types(); - $combined_list = array_intersect($cmodel_list, $object->models); - if (empty($combined_list)) { - return NULL; //we don't handle any of this objects cmodels + $models = $object->models; + foreach ($object->models as $model) { + if ($cmodel_list[$model][ISLANDORA_VIEW_HOOK] == TRUE) { + $output = theme('islandora_basic_image', array('islandora_object' => $object)); + return array('Basic Image Output' => $output); + } } - $output = theme('islandora_basic_image', array('islandora_object' => $object)); - - return array('Basic Image Output' => $output); + return NULL; } /** @@ -104,9 +108,8 @@ function islandora_basic_image_preprocess_islandora_basic_image(&$variables) { if (isset($islandora_object['TN'])) { $variables['islandora_thumbnail_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/TN/view'; } - if (isset($islandora_object['MEDIUM_SIZE'])){ + if (isset($islandora_object['MEDIUM_SIZE'])) { $variables['islandora_medium_size_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/MEDIUM_SIZE/view'; } - }