mimetype); if ($datastream->controlGroup == 'M' || $datastream->controlGroup == 'X') { header('Content-length: ' . $datastream->size); } if ($download) { // Browsers will not append all extensions. $mime_detect = new MimeDetect(); $extension = $mime_detect->getExtension($datastream->mimetype); $filename = $datastream->label . '.' . $extension; header("Content-Disposition: attachment; filename=\"$filename\""); } drupal_page_is_cacheable(FALSE); // Try not to load the file into PHP memory! ob_end_flush(); $datastream->getContent('php://output'); exit(); } /** * Get the human readable size of the given datastream. * * @param AbstractDatastream $datastream * The datastream to check. * * @return string * A human readable size of the given datastream, or '-' if the size could not * be determined. */ function islandora_datastream_get_human_readable_size(AbstractDatastream $datastream) { module_load_include('inc', 'islandora', 'includes/utilities'); $size_is_calculatable = $datastream->controlGroup == 'M' || $datastream->controlGroup == 'X'; return $size_is_calculatable ? islandora_convert_bytes_to_human_readable($datastream->size) : '-'; } /** * Get either the 'view' or 'download' url for the given datastream if possible. * * @param AbstractDatastream $datastream * The datastream to generated the url to. * * @return string * either the 'view' or 'download' url for the given datastream. */ function islandora_datastream_get_url(AbstractDatastream $datastream, $type = 'download') { return $datastream->controlGroup == 'R' ? $datastream->url : "islandora/object/{$datastream->parent->id}/datastream/{$datastream->id}/$type"; } /** * Gets the delete link. * * @param AbstractDatastream $datastream * The datastream to generated the url to. */ function islandora_datastream_get_delete_link(AbstractDatastream $datastream) { $datastreams = module_invoke_all('islandora_undeletable_datastreams', $datastream->parent->models); $can_delete = !in_array($datastream->id, $datastreams) && islandora_datastream_access(FEDORA_PURGE, $datastream); return $can_delete ? l(t('delete'), "islandora/object/{$datastream->parent->id}/datastream/{$datastream->id}/delete") : ''; } /** * Gets the edit link. * * @param AbstractDatastream $datastream * The datastream to generated the url to. */ function islandora_datastream_edit_get_link(AbstractDatastream $datastream) { $edit_registry = module_invoke_all('islandora_edit_datastream_registry', $datastream->parent, $datastream); $can_edit = count($edit_registry) > 0 && islandora_datastream_access(FEDORA_METADATA_EDIT, $datastream); return $can_edit ? l(t('edit'), "islandora/object/{$datastream->parent->id}/datastream/{$datastream->id}/edit") : ''; } /** * Display the edit datastream page. * * @param AbstractDatastream $datastream * The datastream to edit. */ function islandora_edit_datastream(AbstractDatastream $datastream) { $edit_registry = module_invoke_all('islandora_edit_datastream_registry', $datastream->parent, $datastream); $edit_count = count($edit_registry); switch ($edit_count) { case 0: // No edit implementations. drupal_set_message(t('There are no edit methods specified for this datastream.')); drupal_goto("islandora/object/{$object->id}/manage/datastreams"); break; case 1: // One registry implementation, go there. drupal_goto($edit_registry[0]['url']); break; default: // Multiple edit routes registered. return islandora_edit_datastream_registry_render($edit_registry); } } /** * Displays links to all the edit datastream registry items. * * @param array $edit_registry * A list of 'islandora_edit_datastream_registry' values. */ function islandora_edit_datastream_registry_render(array $edit_registry) { $markup = ''; foreach ($edit_registry as $edit_route) { $markup .= l($edit_route['name'], $edit_route['url']) . '
'; } return array( '#type' => 'markup', '#markup' => $markup, ); } /** * Get markup for a download link. * * @param AbstractDatastream $datastream * The datastream for which to generate a link. * * @return string * Either the link markup if the user has access or an empty string if the * user is not allowed to see the given datastream. */ function islandora_datastream_get_download_link(AbstractDatastream $datastream) { $label = t('download'); return islandora_datastream_access(FEDORA_VIEW_OBJECTS, $datastream) ? l($label, islandora_datastream_get_url($datastream, 'download')) : ''; } /** * Get markup for a view link. * * @param AbstractDatastream $datastream * The datastream for which to generate a link. * * @return string * Either the link markup if the user has access or a string containing the * datastream ID if the user is not allowed to see the given datastream. */ function islandora_datastream_get_view_link(AbstractDatastream $datastream) { $label = check_plain($datastream->id); return islandora_datastream_access(FEDORA_VIEW_OBJECTS, $datastream) ? l($label, islandora_datastream_get_url($datastream, 'view')) : $label; }