Index: filefield.module =================================================================== --- filefield.module (revision 362) +++ filefield.module (revision 365) @@ -91,6 +91,7 @@ 'fid' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'), 'description' => array('type' => 'varchar', length => 255, 'not null' => TRUE, 'default' => "''", 'sortable' => TRUE), 'list' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'), + 'new_window' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'), ); return $columns; } @@ -101,6 +102,7 @@ 'fid' => 0, 'description' => '', 'list' => 0, + 'new_window' => 0, ); } @@ -285,11 +287,17 @@ '#default_value' => isset($widget['show_list']) ? $widget['show_list'] : 1, '#description' => t('If enabled, the user can choose for each file whether it should be listed or not. If disabled, the "List" checkbox will be hidden and files are always listed.'), ); + $form['new_window'] = array( + '#type' => 'checkbox', + '#title' => t('Open file in new window'), + '#default_value' => isset($widget['new_window']) ? $widget['new_window'] : 1, + '#description' => t('If enabled, clicking on file link will open in a new window.'), + ); return $form; case 'validate': break; case 'save': - return array('file_extensions', 'file_path', 'show_list'); + return array('file_extensions', 'file_path', 'show_list', 'new_window'); } } @@ -477,6 +485,7 @@ '#theme' => 'filefield_form_current', // remember the show_list setting so that the theme function knows '#show_list' => _filefield_is_show_list($field['widget']), + '#new_window' => _filefield_is_new_window($field['widget']), ); foreach($node_field as $delta => $file) { // @todo: split into its own form and theme functions per file like imagefield @@ -541,6 +550,7 @@ : $file['filepath']; $url = file_create_url($filepath); + $url = "". check_plain($url) .""; $form['description'] = array( @@ -577,6 +587,20 @@ '#value' => isset($file['list']) ? $file['list'] : 1, ); } + + // Only show the new window checkbox if the corresponding widget option is enabled. + if (_filefield_is_new_window($field['widget'])) { + $form['new_window'] = array( + '#type' => 'checkbox', + '#default_value' => $file['new_window'], + ); + } + else { + $form['new_window'] = array( + '#type' => 'value', + '#value' => isset($file['new_window']) ? $file['new_window'] : 1, + ); + } $form['filename'] = array('#type' => 'value', '#value' => $file['filename']); $form['filepath'] = array('#type' => 'value', '#value' => $file['filepath']); @@ -625,6 +649,15 @@ return TRUE; } +/** + * Determine whether to show the 'New Window' checkbox or not. + */ +function _filefield_is_new_window($widget) { + if (isset($widget['new_window']) && !$widget['new_window']) { + return FALSE; + } + return TRUE; +} /** * Implementation of hook_field formatter. @@ -665,9 +698,19 @@ } function theme_filefield_form_current($form) { - $header = $form['#show_list'] - ? array(t('Delete'), t('List'), t('Description'), t('Size')) - : array(t('Delete'), t('Description'), t('Size')); + //$header = $form['#show_list'] + // ? array(t('Delete'), t('List'), t('Description'), t('Size')) + // : array(t('Delete'), t('Description'), t('Size')); + $header_array[] = t('Delete'); + if ($form['#show_list']) { + $header_array[] = t('List'); + } + if ($form['#new_window']) { + $header_array[] = t('New Window'); + } + $header_array[] = t('Description'); + $header_array[] = t('Size'); + $header = $header_array; foreach (element_children($form) as $key) { // Don't display (hidden) replaced items. @@ -680,6 +723,9 @@ if ($form['#show_list']) { $row[] = drupal_render($form[$key]['list']); } + if ($form['#new_window']) { + $row[] = drupal_render($form[$key]['new_window']); + } $row[] = drupal_render($form[$key]['icon']). drupal_render($form[$key]['description']). drupal_render($form[$key]['url']); @@ -712,11 +758,11 @@ $path = ($file['fid'] == 'upload') ? file_create_filename($file['filename'], file_create_path($field['widget']['file_path'])) : $file['filepath']; - $url = file_create_url($path); - $name = $file['filename']; $desc = $file['description']; - return ''. check_plain($desc) .''; + $attributes = array(); + if ($file['new_window']): $attributes = array('target' => '_blank'); endif; + return l($desc, $url, $attributes); } return ''; }