Index: filefield.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filefield/filefield.module,v retrieving revision 1.199 diff -u -r1.199 filefield.module --- filefield.module 6 Jun 2009 19:58:21 -0000 1.199 +++ filefield.module 10 Jun 2009 19:44:25 -0000 @@ -44,7 +44,15 @@ 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); - + $items['admin/settings/filefield'] = array( + 'title' => 'FileField', + 'description' => 'Configure FileField\'s Content-Disposition header on files downloaded from a filefield.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('filefield_settings'), + 'access arguments' => array('administer site configuration'), + 'file' => 'filefield.admin.inc', + ); + return $items; } @@ -196,6 +204,14 @@ $type = mime_header_encode($file->filemime); // Serve images and text inline for the browser to display rather than download. $disposition = (ereg('^(text/|image/)', $file->filemime) || ereg('flash$', $file->filemime)) ? 'inline' : 'attachment'; + $textarea = variable_get('filefield_inline_types', ''); + $inline_types = preg_split('/[\n\r]+/', $textarea, -1, PREG_SPLIT_NO_EMPTY); + // Make any MIME types matching patterns on settings page be delivered inline + foreach ($inline_types as $inline_type) { + if (ereg($inline_type, $file->filemime)) { + $disposition = 'inline'; + } + } return array( 'Content-Type: '. $type .'; name='. $name, 'Content-Length: '. $file->filesize, Index: filefield.admin.inc =================================================================== RCS file: filefield.admin.inc diff -N filefield.admin.inc --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ filefield.admin.inc 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,37 @@ + 'textarea', + '#title' => t('Additional inline MIME types'), + '#default_value' => variable_get('filefield_inline_types', ''), + '#description' => t('MIME types given here will always be given Content-Disposition: inline. One per line in standard format, e.g. \'audio/midi\' or as regular expressions. '), + ); + $form['#submit'][] = 'filefield_settings_submit'; + return system_settings_form($form); +} + +/** + * Set the filefield_inline_types array based on the string. + */ +function filefield_settings_submit($form, &$form_state) { + + if (isset($form_state['values']['filefield_intypes_textarea'])) { + $textarea = $form_state['values']['filefield_intypes_textarea']; + variable_set('filefield_inline_types', $textarea); + $inline_types = preg_split('/[\n\r]+/', $textarea, -1, PREG_SPLIT_NO_EMPTY); + drupal_set_message(t('Detected @count. Overriding default rules in those cases.', array('@count' => format_plural(count($inline_types), '1 inline type rule', '@count inline type rules')))); + } + else { + variable_del('filefield_inline_types'); + drupal_set_message(t('No inline type rules detected. Using default rules.')); + } +}