t('Image manipulation functions'), 'page callback' => 'islandora_repository_image_manip', 'type' => MENU_CALLBACK, 'access arguments' => array('view fedora collection'), ); return $items; } /** * Call out to the Drupal ImageAPI module and return the resulting image as a stream. * * @param string $pid * @param string $dsid * @param string $op * @param string $params */ function islandora_repository_image_manip($pid = '', $dsid = '', $op = '', $params = '') { module_load_include('inc', 'Fedora_Repository', 'ObjectHelper'); module_load_include('module', 'imageapi'); $obj = new ObjectHelper(); $mimetype = $obj->getMimeType($pid, $dsid); $ext = substr(strstr($mimetype, '/'), 1); $op = (!empty($_GET['op']) ? $_GET['op'] : ''); $safe_pid = str_replace(':', '_', $pid); $cache_key = 'islandora_repository_image_manip_' . md5($safe_pid . '_' . $dsid . '_' . $ext . '_' . $op . (isset($_GET['width']) ? '_' . $_GET['width'] : '') . (isset($_GET['height']) ? '_' . $_GET['height'] : '')); if (($file = cache_get($cache_key)) === 0) { //added the slash as sys_get_temp_dir in linux does not seem to include the slash $tmp_file_name = sys_get_temp_dir() . '/' . $safe_pid . '_' . $dsid . '.' . $ext; $handle = fopen($tmp_file_name, "w"); $numbytes = fwrite($handle, $obj->getStream($pid, $dsid)); fclose($handle); if ($numbytes == 0) { return; } $image = imageapi_image_open($tmp_file_name); switch ($op) { case 'scale': if (!empty($_GET['height']) || !empty($_GET['width'])) { imageapi_image_scale($image, $_GET['width'], $_GET['height']); } case 'centerscale': if (!empty($_GET['height']) && !empty($_GET['width'])) { imageapi_image_scale_and_crop($image, $_GET['width'], $_GET['height']); } } imageapi_image_close($image); $file = file_get_contents($tmp_file_name); cache_set($cache_key, $file, 'cache', time() + variable_get('fedora_image_blocks_cache_time', 3600)); file_delete($tmp_file_name); } else { $file = $file->data; } header("Content-type: $mimetype"); header('Content-Disposition: attachment; filename="' . $dsid . '.' . $ext . '"'); echo $file; // return "$numbytes bytes written to ".sys_get_temp_dir()."$pid_$dsid.$ext\n"; } /** * Implementation of hook_form_alter * * @param unknown_type $form * @param unknown_type $form_state * @param unknown_type $form_id */ /* function fedora_imageapi_form_alter( &$form, $form_state, $form_id) { switch ( $form_id ) { case 'islandora_repository_admin': $fedora_base_url = $form['fedora_base_url']['#default_value']; $fedora_server_url = substr($fedora_base_url,0,strpos($fedora_base_url,'/',7)); // Add the Djatoka server location. Set it to default to the same server as fedora. $form['djatoka_server_url'] = array ( '#type' => 'textfield', '#title' => '

'.t('Fedora Image API Module').'


'.t('aDORe Djatoka image server resolver URL'), '#default_value' => variable_get('djatoka_server_url', $fedora_server_url.'/adore-djatoka/resolver' ), '#description' => t('The location of your aDORe Djatoka image server, if you have one installed.'), '#weight' => 1, ); $form['openlayers_server_url'] = array( '#type' => 'textfield', '#title' => t('OpenLayers servlet URL'), '#default_value' => variable_get('openlayers_server_url', $fedora_server_url.'/islandora/OpenLayers'), '#description' => t('URL of your installation of the OpenLayers servlet, if you have one.'), '#weight' => 1, ); $form['buttons']['#weight'] = 2; break; } } function show_openlayers_viewer() { $output = 'Hi.'; return $output; } */