diff --git a/islandora-object.tpl.php b/islandora-object.tpl.php index 44340afa..a89a755d 100644 --- a/islandora-object.tpl.php +++ b/islandora-object.tpl.php @@ -1,7 +1,7 @@ 'admin/islandora.solutionpacks.inc', 'type' => MENU_NORMAL_ITEM, ); - + $items['islandoracm.xsd'] = array( 'title' => 'Islandora Content Model XML Schema Definition', 'page callback' => 'islandora_display_schema', @@ -78,16 +78,16 @@ function islandora_menu() { 'type' => MENU_CALLBACK, 'access arguments' => array(FEDORA_VIEW), ); - + $items['islandora/ingest/%'] = array( - 'title' => t('Ingest object'), + 'title' => 'Ingest object', 'page callback' => 'islandora_ingest_callback', 'page arguments' => array(2), 'file' => 'includes/ingest-menu.inc', 'type' => MENU_CALLBACK, 'access arguments' => array(FEDORA_INGEST), ); - + $items['islandora/object/%'] = array( 'title' => 'Repository', 'page callback' => 'islandora_view_object', @@ -105,7 +105,7 @@ function islandora_menu() { 'type' => MENU_NORMAL_ITEM, 'access arguments' => array(FEDORA_ADD_DS) ); - + $items['islandora/object/%/view'] = array( 'title' => 'Repository', 'page callback' => 'islandora_view_object', @@ -113,7 +113,7 @@ function islandora_menu() { 'type' => MENU_NORMAL_ITEM, 'access arguments' => array(FEDORA_VIEW), ); - + $items['islandora/object/%/edit'] = array( 'title' => 'Repository', 'page callback' => 'islandora_edit_object', @@ -121,14 +121,14 @@ function islandora_menu() { 'type' => MENU_NORMAL_ITEM, 'access arguments' => array(FEDORA_MODIFY_STATE), ); - + $items['islandora/object/%/delete'] = array( 'title' => 'Purge object', 'page callback' => 'islandora_purge_object', 'type' => MENU_CALLBACK, 'access arguments' => array(FEDORA_PURGE), ); - + $items['islandora/object/%/datastream/%'] = array( 'title' => 'View datastream', 'page callback' => 'islandora_datastream_as_attachment', @@ -137,7 +137,7 @@ function islandora_menu() { 'file' => 'utils/datastream.inc', 'access arguments' => array(FEDORA_VIEW), ); - + $items['islandora/object/%/datastream/%/view'] = array( 'title' => 'View datastream', 'page callback' => 'islandora_datastream_as_attachment', @@ -146,7 +146,7 @@ function islandora_menu() { 'file' => 'utils/datastream.inc', 'access arguments' => array(FEDORA_VIEW), ); - + $items['islandora/object/%/datastream/%/download'] = array( 'title' => 'Download datastream', 'page callback' => 'islandora_datastream_as_attachment', @@ -155,7 +155,7 @@ function islandora_menu() { 'file' => 'utils/datastream.inc', 'access arguments' => array(FEDORA_VIEW), ); - + $items['islandora/object/%/datastream/%/edit'] = array( 'title' => 'Edit datastream', 'page callback' => 'islandora_edit_stream', @@ -163,7 +163,7 @@ function islandora_menu() { 'type' => MENU_CALLBACK, 'access arguments' => array(FEDORA_METADATA_EDIT), ); - + $items['islandora/object/%/datastream/%/delete'] = array( 'title' => 'Purge data stream', 'page callback' => 'islandora_purge_stream', @@ -280,15 +280,15 @@ function islandora_view_object($object_id) { } drupal_alter('islandora_view_object', $fedora_object); //modify object if required before it is passed along $arr = module_invoke_all('islandora_view_object', $fedora_object, $user, $page_number, $page_size); //allow submodules to decide how to handle content base on object type - if (empty($arr) ) { + if (empty($arr)) { //TODO: make sure we iterate over the array as they will be more then one cmodel per object - drupal_set_message(t('there was an error loading the view for islandora object %s',array('%s' => $object_id)),'error'); + drupal_set_message(t('there was an error loading the view for islandora object %s', array('%s' => $object_id)), 'error'); return ""; } //module_invoke_all(islandora_display($arr)), $output = ""; - foreach($arr as $key => $value){ - $output .= $key .'
'.$value; //if we have multiple modules handle one cmodel we need to iterate over multiple + 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; //just an example as we could have more then one array element @@ -300,14 +300,14 @@ function islandora_view_object($object_id) { * @param string $object_id * @return string */ -function islandora_islandora_view_object($object){ - $supported_models = islandora_get_types(); +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); + return array('Default Output' => $output); } } @@ -321,7 +321,7 @@ function islandora_theme() { 'template' => 'islandora-object', 'variables' => array('islandora_object' => NULL), ), - ); + ); } /** @@ -377,20 +377,20 @@ function islandora_add_datastream($object_id) { module_invoke_all('islandora_add_datastream', $object); //allow submodules to handle add datastream based on object type } -function islandora_preprocess_islandora_default(&$variables){ +function islandora_preprocess_islandora_default(&$variables) { $islandora_object = $variables['islandora_object']; - module_load_include('inc','islandora','utils/islandora_dublin_core'); - try{ + module_load_include('inc', 'islandora', 'utils/islandora_dublin_core'); + try { $dc = $islandora_object['DC']->content; //$dc_xml = simplexml_load_string($dc); $dc_object = Dublin_Core::import_from_xml_string($dc); - }catch(Exception $e){ - drupal_set_message(t('Error retrieving object %s %t', array('%s' => $islandora_object->id,'%t'=>$e->getMessage())),'error'); + } catch (Exception $e) { + drupal_set_message(t('Error retrieving object %s %t', array('%s' => $islandora_object->id, '%t' => $e->getMessage())), 'error'); } $variables['islandora_dublin_core'] = $dc_object; $variables['islandora_object_label'] = $islandora_object->label; global $base_url; - if(isset($islandora_object['TN'])){ - $variables['islandora_thumbnail_url'] = $base_url.'/islandora/object/'.$islandora_object->id.'/datastream/TN/view'; + if (isset($islandora_object['TN'])) { + $variables['islandora_thumbnail_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/TN/view'; } } diff --git a/islandora_basic_collection/islandora-basic-collection.tpl.php b/islandora_basic_collection/islandora-basic-collection.tpl.php new file mode 100644 index 00000000..16b252bb --- /dev/null +++ b/islandora_basic_collection/islandora-basic-collection.tpl.php @@ -0,0 +1,50 @@ +. + */ +?> +label); + foreach ($variables['islandora_dublin_core'] as $element) { + if (!empty($element)) { + foreach ($element as $key => $value) { + foreach ($value as $v) { + if (!empty($v)) { + print '' . ($key) . ': '; + print($v) . '
'; + } + } + } + } + } + print(''); + print('

Associated Objects

'); + foreach($variables['islandora_associated_objects'] as $associated_objects){ + global $base_url; + $link = l($associated_objects['title']['value'],$base_url.'/islandora/object/'.$associated_objects['object']['value']); + print ($link).'
'; + + } +?> + diff --git a/islandora_basic_collection/islandora_basic_collection.info b/islandora_basic_collection/islandora_basic_collection.info new file mode 100644 index 00000000..fb76c4f2 --- /dev/null +++ b/islandora_basic_collection/islandora_basic_collection.info @@ -0,0 +1,5 @@ +name = "Islandora Basic Collection" +description = "A default Islandora Repository module to handle simple collections" +dependencies[] = islandora +package = Islandora +core = 7.x diff --git a/islandora_basic_collection/islandora_basic_collection.module b/islandora_basic_collection/islandora_basic_collection.module new file mode 100644 index 00000000..e09765a8 --- /dev/null +++ b/islandora_basic_collection/islandora_basic_collection.module @@ -0,0 +1,134 @@ +. + */ + +/** + * Theme registry function + * We supply a pattern so we can overide templates at the theme level if needed. + * we can append a pid to a template and the new template file will be called (the pids + * colon should be replaced with a dash) + * @return array + */ +function islandora_basic_collection_theme($existing, $type, $theme, $path) { + return array( + 'islandora_basic_collection' => array( + 'template' => 'islandora-basic-collection', + 'pattern' => 'islandora_basic_collection__', //we can add pids to the end of this pattern in our preprocess function + // and templates will be able to have have a pid appended to the template name to overide a template on a per object basis + //an example template would be named islandora-basic-image--islandora-27.tpl.phps + 'variables' => array('islandora_object' => NULL), + ) + ); +} + +/** + * tells the main module what types of objects we support. This is used to determine whether or not + * this module should attempt to respond. + * @return array + * array of content model pids that this module supports + */ +function islandora_basic_collection_islandora_get_types() { + return array('info:fedora/islandora:collectionCModel'); +} + +/** + * this modules implentation of view_object hook will handle objects of type islandora:basicImageCModel and info:fedora/islandora:sp_basic_image + * as registered in its return types + * Other modules would handle objects of other types. + * @param Object $object + * a tuque fedora object + * @param object $user + * @param string $page_number + * @param string $page_size + * @return string + * themed html + */ +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 + } + $output = theme('islandora_basic_collection', array('islandora_object' => $object)); + return array('Basic Collection Output' => $output); +} + +/** + * + * @global type $base_url + * @param array $variables + * an array of variables that will be passed to the theme function + */ +function islandora_basic_collection_preprocess_islandora_basic_collection(&$variables) { + $islandora_object = $variables['islandora_object']; + module_load_include('inc', 'islandora', 'utils/islandora_dublin_core'); + try { + $dc = $islandora_object['DC']->content; + $dc_object = Dublin_Core::import_from_xml_string($dc); + } catch (Exception $e) { + drupal_set_message(t('Error retrieving object %s %t', array('%s' => $islandora_object->id, '%t' => $e->getMessage())), 'error'); + } + $variables['islandora_associated_objects'] = islandora_basic_collection_get_objects($islandora_object); + $variables['islandora_dublin_core'] = $dc_object; + $variables['islandora_object_label'] = $islandora_object->label; + $variables['theme_hook_suggestions'][] = 'islandora_basic_collection__' . str_replace(':', '_', $islandora_object->id); + global $base_url; + if (isset($islandora_object['OBJ'])) { + $variables['islandora_image_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/OBJ/view'; + } + 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'])){ + $variables['islandora_medium_size_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/MEDIUM_SIZE/view'; + } + +} + +function islandora_basic_collection_get_objects($object){ + $query = 'select $object $title $content from <#ri> + where ($object $title + and $object $content + and ($object id . '> + or $object id . '>) + and $object ) + minus $content + order by $title'; + $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); + global $user; + try { + $restConnection = new RestConnection($user); + $queryObject = new RepositoryQuery($restConnection->connection); + $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""; + } + return $results; +} + diff --git a/islandora_basic_image/islandora-basic-image--islandora-27.tpl.php b/islandora_basic_image/islandora-basic-image--islandora-27.tpl.php new file mode 100644 index 00000000..8b775078 --- /dev/null +++ b/islandora_basic_image/islandora-basic-image--islandora-27.tpl.php @@ -0,0 +1,55 @@ +. + */ +?> +label); + print ('This template has been overridden by a theme suggestion'); + foreach ($variables['islandora_dublin_core'] as $element) { + if (!empty($element)) { + foreach ($element as $key => $value) { + foreach ($value as $v) { + if (!empty($v)) { + print '' . ($key) . ': '; + print($v) . '
'; + } + } + } + } + } + print(''); +?> + diff --git a/islandora_basic_image/islandora_basic_image.info b/islandora_basic_image/islandora_basic_image.info index b85f14a3..48518184 100644 --- a/islandora_basic_image/islandora_basic_image.info +++ b/islandora_basic_image/islandora_basic_image.info @@ -1,4 +1,5 @@ name = "Islandora Basic Image" description = "A default Islandora Repository module to handle images" dependencies[] = islandora +package = Islandora core = 7.x diff --git a/islandora_basic_image/islandora_basic_image.module b/islandora_basic_image/islandora_basic_image.module index 92fe533a..daffdd75 100644 --- a/islandora_basic_image/islandora_basic_image.module +++ b/islandora_basic_image/islandora_basic_image.module @@ -3,7 +3,7 @@ /* * @file islandora_basic_image.module * - * an Islandora module to handle basic image cmodels (with ISLANDORACM streams) + * an Islandora module to handle basic image cmodels * * * This file is part of Islandora. @@ -22,60 +22,14 @@ * along with the program. If not, see . */ - -/** - * called by theme function and populates a render array for a table view. - * See theme registry. This is also an example function. - * @param array $metadata - * @param array $render_array - * @return array - */ -/* -function islandora_basic_image_render_object($metadata, &$render_array) { - $header = array(t('Label'), t('Value')); - $table_attributes = array('class' => array('islandora_metadata')); - $rows = array(); - foreach ($metadata as $key => $value) { - if (isset($value) && is_array($value)) { - $item_list = array('#items' => $value, '#theme' => 'item_list'); - $rows[] = array($key, array('data' => $item_list)); - } - else { - $rows[] = array($key, $value); - } - } - $render_array['metadata'] = array('#header' => $header, '#theme' => 'table', '#rows' => $rows, '#attributes' => $table_attributes); - - return $render_array; - -}*/ - -/** - * returns a drupal render array as a html string - * This is an example function. We probably want to use a template - * @param array $variables - * @return string - */ -/* -function theme_islandora_basic_image_view_object($variables) { - $object = $variables['object']; - //$metadata = $object->metadata; - $render_array = array('title' => array( - '#type' => 'markup', - '#markup' => '

' . $object->label . '

', - )); - - islandora_basic_image_render_object($object, $render_array); - - return drupal_render($render_array); -}*/ - - /** * Theme registry function + * We supply a pattern so we can overide templates at the theme level if needed. + * we can append a pid to a template and the new template file will be called (the pids + * colon should be replaced with a dash) * @return array */ -function islandora_basic_image_theme() { +function islandora_basic_image_theme($existing, $type, $theme, $path) { return array( 'islandora_basic_image_objects' => array( 'template' => 'islandora-basic-image-view-objects', @@ -83,6 +37,9 @@ function islandora_basic_image_theme() { ), 'islandora_basic_image' => array( 'template' => 'islandora-basic-image', + 'pattern' => 'islandora_basic_image__', //we can add pids to the end of this pattern in our preprocess function + // and templates will be able to have have a pid appended to the template name to overide a template on a per object basis + //an example template would be named islandora-basic-image--islandora-27.tpl.phps 'variables' => array('islandora_object' => NULL), ) ); @@ -92,15 +49,14 @@ function islandora_basic_image_theme() { * tells the main module what types of objects we support. This is used to determine whether or not * this module should attempt to respond. * @return array + * 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'); } - - /** - * this modules implentation of view_object will handle objects of type islandora:basicImageCModel and info:fedora/islandora:sp_basic_image + * this modules implentation of view_object hook will handle objects of type islandora:basicImageCModel and info:fedora/islandora:sp_basic_image * as registered in its return types * Other modules would handle objects of other types. * @param Object $object @@ -116,30 +72,41 @@ function islandora_basic_image_islandora_view_object($object, $user, $page_numbe $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 + return NULL; //we don't handle any of this objects cmodels } $output = theme('islandora_basic_image', array('islandora_object' => $object)); - - return array('Basic Image Output' =>$output); + + return array('Basic Image Output' => $output); } -function islandora_preprocess_islandora_basic_image(&$variables){ +/** + * + * @global type $base_url + * @param array $variables + * an array of variables that will be passed to the theme function + */ +function islandora_basic_image_preprocess_islandora_basic_image(&$variables) { $islandora_object = $variables['islandora_object']; - module_load_include('inc','islandora','utils/islandora_dublin_core'); - try{ + module_load_include('inc', 'islandora', 'utils/islandora_dublin_core'); + try { $dc = $islandora_object['DC']->content; - //$dc_xml = simplexml_load_string($dc); $dc_object = Dublin_Core::import_from_xml_string($dc); - }catch(Exception $e){ - drupal_set_message(t('Error retrieving object %s %t', array('%s' => $islandora_object->id,'%t'=>$e->getMessage())),'error'); + } catch (Exception $e) { + drupal_set_message(t('Error retrieving object %s %t', array('%s' => $islandora_object->id, '%t' => $e->getMessage())), 'error'); } $variables['islandora_dublin_core'] = $dc_object; $variables['islandora_object_label'] = $islandora_object->label; + $variables['theme_hook_suggestions'][] = 'islandora_basic_image__' . str_replace(':', '_', $islandora_object->id); global $base_url; - $variables['islandora_image_url'] = $base_url.'/islandora/object/'.$islandora_object->id.'/datastream/OBJ/view'; - $variables['islandora_thumbnail_url'] = $base_url.'/islandora/object/'.$islandora_object->id.'/datastream/TN/view'; - $variables['islandora_medium_size_url'] = $base_url . '/islandora/object/'.$islandora_object->id.'/datastream/MEDIUM/view'; + if (isset($islandora_object['OBJ'])) { + $variables['islandora_image_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/OBJ/view'; + } + 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'])){ + $variables['islandora_medium_size_url'] = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/MEDIUM_SIZE/view'; + } + } - -?> diff --git a/utils/datastream.inc b/utils/datastream.inc index ba0c4f5c..2f271e60 100644 --- a/utils/datastream.inc +++ b/utils/datastream.inc @@ -1,4 +1,5 @@ $object_id, '%d' => $dsid)), 'error'); return""; } - header('Content-type: '.$fedora_object[$dsid]->mimetype); - header('Content-length: '.$fedora_object[$dsid]->size); + header('Content-type: ' . $fedora_object[$dsid]->mimetype); + header('Content-length: ' . $fedora_object[$dsid]->size); header("Cache-control: private"); $method = arg(5); - if($method =='download'){ - header("Content-Disposition: attachment; filename=\"".$fedora_object[$dsid]->label); + if (isset($method) && $method == 'download') { + header("Content-Disposition: attachment; filename=\"" . $fedora_object[$dsid]->label); } - print ($fedora_object[$dsid]->content); + print($fedora_object[$dsid]->content); exit(); } -?> +