Index: image.module =================================================================== --- image.module (revision 6666) +++ image.module (working copy) @@ -51,7 +51,7 @@ * Implementation of hook_perm */ function image_perm() { - return array('create images', 'view original images', 'edit own images', 'edit images'); + return array('create images', 'view original images', 'edit own images', 'edit images', 'download images'); } /** @@ -408,7 +408,8 @@ * upload.module is enabled, users will the 'view uploaded files'permission to * view images. */ -function image_file_download($filename) { +function image_file_download($filename, $download = FALSE) { + $headers = array(); $filepath = file_create_path($filename); $result = db_query("SELECT i.nid, f.filemime, f.filesize FROM {image} i INNER JOIN {files} f ON i.fid = f.fid WHERE f.filepath = '%s'", $filepath); if ($file = db_fetch_object($result)) { @@ -422,10 +423,12 @@ $images = (array) $node->images; unset($images[IMAGE_ORIGINAL]); if (user_access('view original images') || in_array($filepath, $images)) { - return array( - 'Content-Type: '. mime_header_encode($file->filemime), - 'Content-Length: '. (int) $file->filesize, - ); + $headers[] = 'Content-Type: '. mime_header_encode($file->filemime); + $headers[] = 'Content-Length: '. (int) $file->filesize; + if ($download) { + $headers[] = 'Content-Disposition: attachment; filename="'.$filename.'"'; + } + return $headers; } } return -1; @@ -467,6 +470,13 @@ if (!user_access('view original images')) { unset($links['image_size_'. IMAGE_ORIGINAL]); } + if (user_access('download images')) { + $links['image_download'] = array( + 'title' => t('download'), + 'href' => 'image/view/'.$node->nid.'/_original/download', + 'query' => 'size='. IMAGE_ORIGINAL, + ); + } } return $links; @@ -798,7 +808,7 @@ * image/view/$nid/$label * (e.g. image/view/25/thumbnail or image/view/14) */ -function image_fetch($nid = 0, $size = IMAGE_PREVIEW) { +function image_fetch($nid = 0, $size = IMAGE_PREVIEW, $download = FALSE) { if ($size == IMAGE_ORIGINAL && !user_access('view original images')) { return drupal_access_denied(); } @@ -812,7 +822,7 @@ if (isset($node->images[$size])) { $file = $node->images[$size]; - $headers = image_file_download($file); + $headers = image_file_download($file, $download); file_transfer($file, $headers); } }