diff --git a/includes/datastream.inc b/includes/datastream.inc index 46435449..598050ff 100644 --- a/includes/datastream.inc +++ b/includes/datastream.inc @@ -39,9 +39,10 @@ function islandora_datastream_as_attachment($object_id, $dsid) { } catch (Exception $e) { return drupal_not_found(); } + } -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/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/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 e86787c7..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') + ); } /** @@ -500,14 +509,14 @@ function islandora_view_object($object_id = NULL) { drupal_set_message(t('Error getting Islandora object %s', array('%s' => $object_id)), 'error'); return""; } - drupal_alter('islandora_view_object', $fedora_object); //modify object if required before it is passed along + drupal_alter('islandora_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)) { //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'); return ""; } - //module_invoke_all(islandora_display($arr)), + drupal_alter('islandora_display',$arr); $output = ""; foreach ($arr as $key => $value) { $output .= $value; //if we have multiple modules handle one cmodel we need to iterate over multiple @@ -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_collection/islandora_basic_collection.module b/islandora_basic_collection/islandora_basic_collection.module index b8c14825..4a9e8bda 100644 --- a/islandora_basic_collection/islandora_basic_collection.module +++ b/islandora_basic_collection/islandora_basic_collection.module @@ -61,6 +61,26 @@ function islandora_basic_collection_menu() { return $items; } +/** + * Implements hook_menu_local_tasks_alter(). + */ +function islandora_basic_collection_menu_local_tasks_alter(&$data, $router_item, $root_path) { + if (module_exists('islandora_content_model_forms')) { + // Add action link + if ($root_path == 'islandora/object/%/manage/collection') { + $object_id = $router_item['page_arguments'][0]; + $item = menu_get_item("islandora/ingest_form/$object_id"); + $item['title'] = 'Add a repository item'; + if ($item['access']) { + $data['actions']['output'][] = array( + '#theme' => 'menu_local_action', + '#link' => $item, + ); + } + } + } +} + /** * This function is where we create the view for the related menu item * @param type $object_id @@ -222,9 +242,10 @@ function islandora_basic_collection_islandora_view_object($object, $user) { foreach ($object->models as $model) { if (isset($cmodel_list[$model][ISLANDORA_VIEW_HOOK]) && $cmodel_list[$model][ISLANDORA_VIEW_HOOK] == TRUE) { $display = (empty($_GET['display'])) ? 'list' : $_GET['display']; - if($display == 'grid'){ + if ($display == 'grid') { $output = theme('islandora_basic_collection_grid', array('islandora_object' => $object)); - } else { + } + else { $output = theme('islandora_basic_collection', array('islandora_object' => $object)); } return array('Collection View' => $output); @@ -238,7 +259,7 @@ function islandora_basic_collection_islandora_view_object($object, $user) { * currently just calls normal view preprocess as variables are the same * @param type $variables */ -function islandora_basic_collection_preprocess_islandora_basic_collection_grid(&$variables){ +function islandora_basic_collection_preprocess_islandora_basic_collection_grid(&$variables) { islandora_basic_collection_preprocess_islandora_basic_collection($variables); } @@ -266,7 +287,7 @@ function islandora_basic_collection_preprocess_islandora_basic_collection(&$vari $results = islandora_basic_collection_get_objects($islandora_object, $page_number, $page_size); $total_count = count($results); pager_default_initialize($total_count, $page_size); - + $pager = theme('pager', array('quantity' => $total_count)); $variables['pager'] = $pager; $variables['islandora_dublin_core'] = $dc_object; @@ -288,7 +309,7 @@ function islandora_basic_collection_preprocess_islandora_basic_collection(&$vari $associated_objects_array = array(); $start = $page_size * ($page_number); $end = min($start + $page_size, $total_count); - + for ($i = $start; $i < $end; $i++) { $pid = $results[$i]['object']['value']; $fc_object = islandora_basic_collection_get_object($pid); diff --git a/islandora_basic_image/includes/image_process.inc b/islandora_basic_image/includes/image_process.inc new file mode 100644 index 00000000..bcf729df --- /dev/null +++ b/islandora_basic_image/includes/image_process.inc @@ -0,0 +1,60 @@ + $object->id)),'error'); + return ""; + } + $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); + } +} + + +/** + * + * @param object $file + * stdclass + */ +function islandora_basic_image_create_derivative($file, $width, $height) { + $real_path = drupal_realpath($file->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.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 42bc2611..3310714a 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,17 @@ function islandora_basic_image_islandora_view_object($object, $user, $page_numbe return NULL; } +function islandora_basic_image_islandora_ingest_post_ingest($object) { + $cmodel_list = islandora_basic_image_islandora_get_types(); + $models = $object->models; + foreach ($object->models as $model) { + if (isset($cmodel_list[$model])) { + module_load_include('inc', 'islandora_basic_image', 'includes/image_process'); + islandora_basic_image_create_all_derivatives($object); + } + } +} + /** * * @global type $base_url @@ -217,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'])) {