diff --git a/includes/solution_packs.inc b/includes/solution_packs.inc index 21e22619..bf50a1f5 100644 --- a/includes/solution_packs.inc +++ b/includes/solution_packs.inc @@ -435,17 +435,26 @@ function islandora_check_object_status(NewFedoraObject $object_definition) { /** * A form construct to create a viewer selection table. * + * The list of selectable viewers is limited by the $mimetype and the $model + * parameters. When neither are given all defined viewers are listed. If only + * $mimetype is given only viewers that support that mimetype will be listed, + * the same goes for the $model parameter. If both are given, than any viewer + * that supports either the give $mimetype or $model will be listed. + * * @param string $variable_id * The ID of the Drupal variable to save the viewer settings in * @param string $mimetype * The table will be populated with viewers supporting this mimetype + * @param string $model + * The table will be populated with viewers supporting this content model + * * @return * A form api array which defines a themed table to select a viewer. */ -function islandora_viewers_form($variable_id = NULL, $mimetype = NULL) { +function islandora_viewers_form($variable_id = NULL, $mimetype = NULL, $model = NULL) { $form = array(); // get viewers - $viewers = islandora_get_viewers($mimetype); + $viewers = islandora_get_viewers($mimetype, $model); if (!empty($viewers)) { // add option for no viewer $no_viewer = array(); @@ -524,19 +533,32 @@ function islandora_viewers_form($variable_id = NULL, $mimetype = NULL) { /** * Returns all defined viewers. * + * The list of selectable viewers is limited by the $mimetype and the + * $content_model parameters. When neither are given all defined viewers are + * listed. If only $mimetype is given only viewers that support that mimetype + * will be listed, the same goes for the $content_model parameter. If both are + * given, than any viewer that supports either the give $mimetype or $model will + * be listed. + * * @param string $mimetype - * specify a mimetype to return only viewers that support this certain + * Specify a mimetype to return only viewers that support this certain * mimetype. - * @return - * array of viewer definitions, or FALSE if none are found. + * @param string $content_model + * Specify a content model to return only viewers that support the content + * model. + * + * @return array + * Viewer definitions, or FALSE if none are found. */ -function islandora_get_viewers($mimetype = NULL) { +function islandora_get_viewers($mimetype = NULL, $content_model = NULL) { $viewers = array(); // get all viewers $defined_viewers = module_invoke_all('islandora_viewer_info'); // filter viewers by mimetype foreach ($defined_viewers as $key => $value) { - if (in_array($mimetype, $value['mimetype']) OR $mimetype == NULL) { + $value['mimetype'] = isset($value['mimetype']) ? $value['mimetype'] : array(); + $value['model'] = isset($value['model']) ? $value['model'] : array(); + if (in_array($mimetype, $value['mimetype']) OR in_array($content_model, $value['model'])) { $viewers[$key] = $value; } } diff --git a/includes/utilities.inc b/includes/utilities.inc index 066946e9..b2006722 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -382,7 +382,7 @@ function islandora_get_datastreams_requirements_from_content_model(FedoraObject function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastreams = array(), $content_models = array(), $relationships = array()) { global $user; $tuque = islandora_get_tuque_connection(); - $object = $tuque->repository->constructObject($namespace); + $object = isset($namespace) ? $tuque->repository->constructObject($namespace) : new IslandoraNewFedoraObject(NULL, $tuque->repository); $object->owner = isset($user->name) ? $user->name : $object->owner; $object->label = isset($label) ? $label : $object->label; foreach ($content_models as $content_model) { diff --git a/islandora.module b/islandora.module index ff0a7472..ad5b8dba 100644 --- a/islandora.module +++ b/islandora.module @@ -514,7 +514,7 @@ function islandora_object_load($object_id) { $tuque = islandora_get_tuque_connection(); if ($tuque) { try { - $object = $tuque->repository->getObject($object_id); + $object = $tuque->repository->getObject(urldecode($object_id)); drupal_alter('islandora_object', $object); return $object; } catch (Exception $e) {