From 13825faf5f875c9744e2806c5ff81665c6ac0381 Mon Sep 17 00:00:00 2001 From: Paul Pound Date: Wed, 30 May 2012 14:38:27 -0300 Subject: [PATCH 1/2] added ingest to basic image types using a default mods form --- includes/datastream.inc | 1 + includes/islandora.ingest.inc | 2 +- .../includes/image_process.inc | 39 +++++++++++++ .../islandora_basic_image.module | 57 ++++++++++++------- 4 files changed, 79 insertions(+), 20 deletions(-) create mode 100644 islandora_basic_image/includes/image_process.inc diff --git a/includes/datastream.inc b/includes/datastream.inc index 8ac9e9de..3432a2c0 100644 --- a/includes/datastream.inc +++ b/includes/datastream.inc @@ -32,6 +32,7 @@ function islandora_datastream_as_attachment($object_id, $dsid) { if (isset($method) && $method == 'download') { header("Content-Disposition: attachment; filename=\"" . $fedora_object[$dsid]->label); } + //maybe able to use drupal's file transfer here print($fedora_object[$dsid]->content); exit(); } diff --git a/includes/islandora.ingest.inc b/includes/islandora.ingest.inc index b4c44720..7878c9d5 100644 --- a/includes/islandora.ingest.inc +++ b/includes/islandora.ingest.inc @@ -21,7 +21,7 @@ function islandora_ingest_get_object($content_models, $collection_pid, $relation } function islandora_ingest_add_object(&$object) { - $object->repository->ingestObject($object); + //$object->repository->ingestObject($object); module_invoke_all('islandora_ingest_post_ingest', $object); return $object; } \ No newline at end of file diff --git a/islandora_basic_image/includes/image_process.inc b/islandora_basic_image/includes/image_process.inc new file mode 100644 index 00000000..dd729258 --- /dev/null +++ b/islandora_basic_image/includes/image_process.inc @@ -0,0 +1,39 @@ +uri); + $image = image_load($real_path); + if (!empty($image)) { + $scale = image_scale($image, $width, $height, TRUE); + if($scale){ + return image_save($image); + } + } + return FALSE; +} + +/** + * adds a datastream and deletes the tmp file from local file system + * @param object $object + * @param string $dsid + * @param object $file + */ +function islandora_basic_image_add_datastream($object, $dsid, $file) { + try { + $ds = $object->constructDatastream($dsid, 'M'); + $ds->label = $dsid; + $ds->mimeType = $object['OBJ']->mimeType; + $ds->setContentFromFile(drupal_realpath($file->uri)); + $object->ingestDatastream($ds); + file_delete($file); + } catch (exception $e) { + drupal_set_message(t('@message', array('@message' => check_plain($e->getMessage()))), 'error'); + } +} + diff --git a/islandora_basic_image/islandora_basic_image.module b/islandora_basic_image/islandora_basic_image.module index 42bc2611..b1933b02 100644 --- a/islandora_basic_image/islandora_basic_image.module +++ b/islandora_basic_image/islandora_basic_image.module @@ -30,7 +30,7 @@ */ function islandora_basic_image_menu() { $items = array(); - $items['admin/islandora/basic_image'] = array( + $items['admin/islandora/basic_image'] = array( 'title' => 'Islandora Basic Image', 'description' => 'Configure the basic image solution pack.', 'page callback' => 'drupal_get_form', @@ -38,33 +38,33 @@ function islandora_basic_image_menu() { 'page arguments' => array('islandora_basic_image_admin'), 'file' => 'admin/islandora_basic_image.admin.inc', 'type' => MENU_NORMAL_ITEM, - ); + ); /* example menu paths - $items['islandora/object/%/manage/image'] = array( + $items['islandora/object/%/manage/image'] = array( 'title' => 'Manage Image Types', 'page callback' => 'islandora_basic_image_manage_object', 'page arguments' => array(2), - 'type' => MENU_LOCAL_TASK, + 'type' => MENU_LOCAL_TASK, 'access callback' => 'islandora_basic_image_access', 'access arguments' => array(2), ); - - $items['islandora/object/%/view/image'] = array( + + $items['islandora/object/%/view/image'] = array( 'title' => 'Image View 1', 'page callback' => 'islandora_basic_image_view1', 'page arguments' => array(2), - 'type' => MENU_LOCAL_TASK, + 'type' => MENU_LOCAL_TASK, 'access callback' => 'islandora_basic_image_access', 'access arguments' => array(2), ); - $items['islandora/object/%/view/image2'] = array( + $items['islandora/object/%/view/image2'] = array( 'title' => 'Image View 2', 'page callback' => 'islandora_basic_image_view2', 'page arguments' => array(2), 'type' => MENU_LOCAL_TASK, 'access callback' => 'islandora_basic_image_access', 'access arguments' => array(2), - );*/ + ); */ return $items; } @@ -78,9 +78,9 @@ function islandora_basic_image_menu() { * @return string */ /* -function islandora_basic_image_manage_object($object_id){ + function islandora_basic_image_manage_object($object_id){ return 'Image CModel edit function '.$object_id; -}*/ + } */ /** * /** @@ -90,9 +90,9 @@ function islandora_basic_image_manage_object($object_id){ * @return string */ /* -function islandora_basic_image_view1($object_id){ + function islandora_basic_image_view1($object_id){ return 'A view returned by the image cmodel'; -}*/ + } */ /** * An example function needed by this modules hook_menu @@ -100,9 +100,9 @@ function islandora_basic_image_view1($object_id){ * @return string */ /* -function islandora_basic_image_view2($object_id){ + function islandora_basic_image_view2($object_id){ return 'Another view returned by the image cmodel'; -}*/ + } */ /** * determines whether or not to show this modules manage tab @@ -110,22 +110,22 @@ function islandora_basic_image_view2($object_id){ * @param string $object_id * @return boolean */ -function islandora_basic_image_access($object_id){ +function islandora_basic_image_access($object_id) { module_load_include('inc', 'islandora', 'RestConnection'); global $user; - try { + try { $restConnection = new RestConnection($user); $fedora_object = new FedoraObject($object_id, $restConnection->repository); } catch (Exception $e) { return FALSE; } if (!isset($fedora_object)) { - return FALSE; + return FALSE; } $models = $fedora_object->models; $cmodel_list = islandora_basic_image_islandora_get_types(); foreach ($fedora_object->models as $model) { - if (isset($cmodel_list[$model])){ + if (isset($cmodel_list[$model])) { return user_access(FEDORA_MODIFY_STATE); } } @@ -193,6 +193,25 @@ function islandora_basic_image_islandora_view_object($object, $user, $page_numbe return NULL; } + +function islandora_basic_image_islandora_ingest_post_ingest($object) { + module_load_include('inc', 'islandora', 'includes/MimeClass'); + module_load_include('inc', 'islandora_basic_image','includes/image_process'); + $mime_class = new MimeClass(); + $ext = $mime_class->getExtension($object['OBJ']->mimeType); + $file_name = str_replace(':', '-', $object->id); + $original_file = file_save_data($object['OBJ']->content, 'temporary://' . $file_name . 'OBJ.' . $ext); + $tn_file = file_copy($original_file, 'temporary://' . $file_name . 'TN.' . $ext); + if(islandora_basic_image_create_derivative($tn_file, 200, 200)){ + islandora_basic_image_add_datastream($object, 'TN', $tn_file); + } + $medium_file = file_copy($original_file, 'temporary://' . $file_name . 'MEDIUM.' . $ext); + if(islandora_basic_image_create_derivative($medium_file, 500, 700)){ + islandora_basic_image_add_datastream($object, 'MEDIUM_SIZE', $medium_file); + } + +} + /** * * @global type $base_url From 0118ad62083b6a37063f4701e9cefb061daadca1 Mon Sep 17 00:00:00 2001 From: jonathangreen Date: Wed, 30 May 2012 23:36:10 -0300 Subject: [PATCH 2/2] Sundry updates - Added a confirmation to purge. - Fixed collection links - Provided link to full size --- includes/datastream.inc | 2 +- includes/object_properties.inc | 10 +++ islandora.module | 71 +++++++++++-------- .../islandora-basic-image.tpl.php | 4 +- .../islandora_basic_image.module | 3 +- 5 files changed, 55 insertions(+), 35 deletions(-) diff --git a/includes/datastream.inc b/includes/datastream.inc index 55edacbb..598050ff 100644 --- a/includes/datastream.inc +++ b/includes/datastream.inc @@ -42,7 +42,7 @@ function islandora_datastream_as_attachment($object_id, $dsid) { } -function islandora_get_datastream_parents($islandora_object) { +function islandora_datastream_get_parents($islandora_object) { $parent_collections = array(); $repository = $islandora_object->repository; $collections1 = $islandora_object->relationships->get(FEDORA_RELS_EXT_URI, 'isMemberOfCollection'); diff --git a/includes/object_properties.inc b/includes/object_properties.inc index 97dd20a4..3da73a05 100644 --- a/includes/object_properties.inc +++ b/includes/object_properties.inc @@ -53,6 +53,11 @@ function islandora_edit_properties_form_submit($form, &$form_state) { } } +function islandora_edit_properties_form_delete($form, &$form_state) { + $islandora_object = $form_state['values']['pid']; + drupal_goto("islandora/object/$islandora_object/delete"); +} + /** * * @param array $form @@ -99,6 +104,11 @@ function islandora_edit_properties_form($form, &$form_state, $object_id) { '#type' => 'submit', '#value' => 'Update Properties', ); + $form['delete'] = array( + '#type' => 'submit', + '#value' => t('Delete'), + '#submit' => array('islandora_edit_properties_form_delete'), + ); return $form; } diff --git a/islandora.module b/islandora.module index 81df4139..50cb36ba 100644 --- a/islandora.module +++ b/islandora.module @@ -58,31 +58,6 @@ function islandora_menu() { 'type' => MENU_NORMAL_ITEM, 'weight' => 0, ); - /* may not need this - $items['admin/islandora/solution_packs'] = array( - 'title' => 'Solution Packs', - 'description' => 'Install content models and collections required by installed solution packs.', - 'page callback' => 'islandora_solution_packs_page', - 'access arguments' => array(FEDORA_ADD_DS), - 'file' => 'admin/islandora.solutionpacks.inc', - 'type' => MENU_NORMAL_ITEM, - ); */ - - $items['islandoracm.xsd'] = array( - 'title' => 'Islandora Content Model XML Schema Definition', - 'page callback' => 'islandora_display_schema', - 'page arguments' => array('islandoracm.xsd'), - 'type' => MENU_CALLBACK, - 'access arguments' => array(FEDORA_VIEW), - ); - - $items['collection_policy.xsd'] = array( - 'title' => 'Islandora Content Model XML Schema Definition', - 'page callback' => 'islandora_display_schema', - 'page arguments' => array('collection_policy.xsd'), - 'type' => MENU_CALLBACK, - 'access arguments' => array(FEDORA_VIEW), - ); $items['islandora/ingest/%'] = array( 'title' => 'Ingest object', @@ -154,9 +129,9 @@ function islandora_menu() { ); $items['islandora/object/%/delete'] = array( - 'title' => 'Purge object', - 'page callback' => 'islandora_purge_object', - 'page arguments' => array(2), + 'title' => 'Delete object', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('islandora_purge_object', 2), 'type' => MENU_CALLBACK, 'access arguments' => array(FEDORA_PURGE), ); @@ -294,7 +269,10 @@ function islandora_node_access($op, $pid = NULL, $as_user = NULL) { * ID of the object * @return type */ -function islandora_purge_object($object_id) { +function islandora_purge_object_submit($form, &$form_state) { + $object_id = $form_state['values']['pid']; + $collection = $form_state['values']['col']; + module_load_include('inc', 'islandora', 'RestConnection'); global $user; if (!isset($object_id)) { @@ -331,7 +309,38 @@ function islandora_purge_object($object_id) { } } module_invoke_all('islandora_post_purge_object', $object_id, $content_models); //notify modules post deletion - drupal_goto('islandora'); + drupal_goto($collection); +} + +function islandora_purge_object($form, &$form_state, $pid) { + + module_load_include('inc', 'islandora', 'RestConnection'); + module_load_include('inc', 'islandora', 'includes/datastream'); + + $connection = new RestConnection(); + $object = $connection->repository->getObject($pid); + $parent = islandora_datastream_get_parents($object); + $key = array_keys($parent); + + if(count($key) > 0) { + $redirect = "islandora/object/$key[0]"; + } + else { + $redirect = "islandora"; + } + + + // Always provide entity id in the same form key as in the entity edit form. + $form['pid'] = array('#type' => 'value', '#value' => $pid); + $form['col'] = array('#type' => 'value', '#value' => $redirect); + + return confirm_form($form, + t('Are you sure you want to delete %title?', array('%title' => $object->label)), + "islandora/object/$pid", + t('This action cannot be undone.'), + t('Delete'), + t('Cancel') + ); } /** @@ -600,7 +609,7 @@ function islandora_preprocess_islandora_default(&$variables) { module_load_include('inc', 'islandora', 'includes/utilities'); module_load_include('inc', 'islandora', 'includes/datastream'); - $variables['parent_collections'] = islandora_get_datastream_parents($islandora_object); + $variables['parent_collections'] = islandora_datastream_get_parents($islandora_object); $datastreams = array(); foreach ($islandora_object as $ds) { diff --git a/islandora_basic_image/islandora-basic-image.tpl.php b/islandora_basic_image/islandora-basic-image.tpl.php index 44228a7c..73c79ae2 100644 --- a/islandora_basic_image/islandora-basic-image.tpl.php +++ b/islandora_basic_image/islandora-basic-image.tpl.php @@ -21,11 +21,11 @@ * along with the program. If not, see . */ ?> - +
- + TRUE)); ?>

diff --git a/islandora_basic_image/islandora_basic_image.module b/islandora_basic_image/islandora_basic_image.module index 31751da3..3310714a 100644 --- a/islandora_basic_image/islandora_basic_image.module +++ b/islandora_basic_image/islandora_basic_image.module @@ -228,10 +228,11 @@ function islandora_basic_image_preprocess_islandora_basic_image(&$variables) { $variables['dc_array'] = $dc_object->as_formatted_array(); $variables['islandora_object_label'] = $islandora_object->label; $variables['theme_hook_suggestions'][] = 'islandora_basic_image__' . str_replace(':', '_', $islandora_object->id); - $variables['parent_collections'] = islandora_get_datastream_parents($islandora_object); + $variables['parent_collections'] = islandora_datastream_get_parents($islandora_object); global $base_url; if (isset($islandora_object['OBJ'])) { $full_size_url = $base_url . '/islandora/object/' . $islandora_object->id . '/datastream/OBJ/view'; + $variables['islandora_full_url'] = $full_size_url; $variables['islandora_full_img'] = ''; } if (isset($islandora_object['TN'])) {