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 '';
}