diff --git theme/viewfield.theme.inc theme/viewfield.theme.inc index 4de252a..c52f492 100644 --- theme/viewfield.theme.inc +++ theme/viewfield.theme.inc @@ -106,7 +106,7 @@ function _viewfield_get_view_args($token_enabled, $vargs, $node) { function theme_viewfield_select($element) { if (!empty($element['#children'])) { - $field = $element['#field_info'][$element['#field_name']]; + $field = $element['#field']; if ($field['multiple'] && $element['#delta'] == 0) { // This is needed only for multiple viewfields. drupal_add_css(drupal_get_path('module', 'viewfield') .'/theme/viewfield.css'); diff --git viewfield.install viewfield.install index ecbf56d..d90b8a4 100644 --- viewfield.install +++ viewfield.install @@ -78,3 +78,16 @@ function viewfield_update_6000() { } return $ret; } + +/** + * Major module clean-up. + * + * - $field['super_default'] is gone, which previously allowed to save nodes + * without any viewfield value, but use the field's configured default value + * automatically. Doesn't make sense, because the configured default value is + * preselected in the form already, and CCK/Field API always stores a value, + * even if it is the same as the default value. + * - $field['super_default_widget'] is equally gone, without replacement, as it + * merely completed aforementioned functionality. + * - $field['widget']['override_default'] is also gone, ditto. + */ diff --git viewfield.module viewfield.module index aabd20e..b653183 100755 --- viewfield.module +++ viewfield.module @@ -4,6 +4,11 @@ /** * @file * Core functions. + * + * @todo $field['token_enabled'] is needless, as we can replace both legacy tokens + * and Token module tokens without conflicts. Also consider to add a hard + * dependency on Token. Double-check potential performance issues mentioned in + * code comments. */ /** @@ -37,11 +42,6 @@ function viewfield_field_settings($op, $field) { '#options' => drupal_map_assoc(array_keys(views_get_all_views())), '#description' => t('Only selected views will be available for content authors. Leave empty to allow all.'), ); - $form['super_default'] = array( - '#type' => 'checkbox', - '#title' => t('Use a common default value for all nodes if the user does not override it on the node form.'), - '#default_value' => $field['super_default'], - ); $form['token_enabled'] = array( '#type' => 'checkbox', '#title' => t('Replace token placeholders'), @@ -49,23 +49,16 @@ function viewfield_field_settings($op, $field) { '#default_value' => $field['token_enabled'], '#access' => module_exists('token'), ); - $form_state = NULL; - $form['#node'] = (object) array('type' => $field['type_name']); - module_load_include('inc', 'content', 'includes/content.node_form'); - $field_form = content_field_form($form, $form_state, $field, 0); - $form['super_default_widget'] = &$field_form[$field['field_name']][0]; - $form['super_default_widget']['#tree'] = TRUE; - unset($form['super_default_widget']['#weight']); return $form; case 'validate': - if ($field['force_default'] && $field['multiple']) { + if ($field['multiple'] && $field['widget']['force_default']) { form_set_error('multiple', t('Multiple views are not supported if force default is enabled.')); } break; case 'save': - return array('allowed_views', 'super_default', 'token_enabled', 'super_default_widget'); + return array('allowed_views', 'token_enabled'); case 'database columns': return array( @@ -82,25 +75,11 @@ function viewfield_field($op, &$node, $field, &$items, $teaser, $page) { switch ($op) { case 'presave': foreach ($items as $delta => $item) { - if ($field['super_default'] && empty($item['override_default']) || $field['widget']['force_default']) { - $items[$delta] = array('vname' => NULL, 'vargs' => NULL); - } - elseif (empty($item['vname'])) { + if (empty($item['vname'])) { unset($items[$delta]); } } break; - - case 'sanitize': - foreach ($items as $delta => $item) { - $item = empty($item['vname']) || $field['widget']['force_default'] ? $field['super_default_widget'] : $item; - if ($field['super_default']) { - $item['override_default'] = !empty($item['vname']); - } - $item['token_enabled'] = _viewfield_token_enabled($field); - $items[$delta] = $item; - } - return array($field['field_name'] => $items); } } @@ -133,7 +112,7 @@ function viewfield_widget_info() { 'field types' => array('viewfield'), 'multiple_values' => CONTENT_HANDLE_CORE, 'callbacks' => array( - 'default value' => CONTENT_CALLBACK_NONE, + 'default value' => CONTENT_CALLBACK_DEFAULT, ), ), ); @@ -154,7 +133,9 @@ function viewfield_widget_settings($op, $widget) { return $form; case 'save': - return array('force_default'); + return array( + 'force_default', + ); } } @@ -162,16 +143,9 @@ function viewfield_widget_settings($op, $widget) { * Implementation of hook_widget(). */ function viewfield_widget(&$form, &$form_state, $field, $items, $delta = 0) { - // Since tabledrag.js currently cannot handle nested tables, if we are - // adding/editing a node we have to show the token help just below the - // viewfield select widget. - if ($delta == 0 && $field['multiple'] && !$field['widget']['force_default'] && _viewfield_token_enabled($field)) { - $form['token_help'] = _viewfield_get_token_help($field); - $form['token_help']['#weight'] = $field['widget']['weight'] + 1; - } $element = array( '#type' => $field['widget']['type'], - '#default_value' => isset($items[$delta]) ? $items[$delta] : $field['super_default_widget'], + '#default_value' => isset($items[$delta]) ? $items[$delta] : NULL, ); return $element; } @@ -191,74 +165,59 @@ function viewfield_elements() { } function viewfield_select_process($element, $edit, $form_state, $form) { - $field = $form['#field_info'][$element['#field_name']]; - $element['#field_info'] = $form['#field_info']; // This form is used for both the default value field in the admin as well as // the node edit form, so we have to make sure we show the default value field // always. - $node = isset($form['#node']) ? $form['#node'] : (object) array('type' => $field['type_name']); - $field_settings = !isset($node->uid); + $is_field_settings_form = !isset($form['#node']); - if ($field['widget']['force_default'] && !$field_settings) { - $element['vname'] = array( - '#type' => 'value', - '#value' => $element['#default_value']['vname'], - ); - $element['vargs'] = array( - '#type' => 'value', - '#value' => $element['#default_value']['vargs'], // All views share args (for now). - ); + $field = $form['#field_info'][$element['#field_name']]; + $element['#field'] = $field; + // Display the form to let the user pick a view. + $options = _viewfield_potential_references($field, $element['#delta']); + $element['vname'] = array( + '#type' => 'select', + '#title' => $element['#title'], + '#options' => $options, + '#default_value' => $element['#default_value']['vname'], + '#required' => $element['#required'], + '#access' => $is_field_settings_form || !$field['widget']['force_default'], + '#description' => $element['#description'], + ); + // If there is only one option, only show arguments. + if (count($options) == 1 && !$is_field_settings_form) { + list($key, $label) = each($options); + $element['vname']['#access'] = FALSE; + $element['vname']['#default_value'] = $key; } - else { - // Display the form to let the user pick a view. - $options = _viewfield_potential_references($field, $element['#delta']); - // Provide our own overriding of defaults. - if ($field['super_default'] && !$field_settings) { - $element['override_default'] = array( - '#type' => 'checkbox', - '#title' => t('Override default'), - '#default_value' => $element['#value']['override_default'], - ); - } - if (count($options) > 1) { - $element['vname'] = array( - '#type' => 'select', - '#options' => $options, - '#default_value' => $element['#default_value']['vname'], - '#title' => $element['#title'], - '#required' => $element['#required'], - '#description' => $element['#description'], + + $element['vargs'] = array( + '#type' => 'textfield', + '#title' => !isset($label) ? t('Arguments') : t('%field (@value) arguments', array( + '%field' => $field['widget']['label'], + '@value' => $label, + )), + '#default_value' => $element['#default_value']['vargs'], + '#access' => $is_field_settings_form || !$field['widget']['force_default'], + '#description' => t('A comma separated list of arguments to pass to the selected view. Wrap arguments containing commas in double quotes. Replace double quotes in arguments with two double quotes.'), + ); + if (module_exists('token') && ($is_field_settings_form || $field['token_enabled'])) { + // Only show token help for first value or in field settings form. + if ($element['#delta'] == 0 && !$field['widget']['force_default']) { + $element['token_help'] = array( + '#type' => 'fieldset', + '#title' => t('Placeholder tokens'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, ); - } - else { - // There's only the one view, so only show the arguments. - list($key, $label) = each($options); - $element['vname'] = array( - '#type' => 'value', - '#value' => $key, + $element['token_help']['tokens'] = array( + '#value' => theme('token_help', 'node'), ); } - $element['vargs'] = array( - '#type' => 'textfield', - '#title' => !isset($label) ? t('Arguments') : t('%field (@value) arguments', array( - '%field' => $field['widget']['label'], - '@value' => $label, - )), - '#default_value' => $element['#default_value']['vargs'], - '#required' => FALSE, - '#description' => t('Provide a comma separated list of arguments to pass to the view. These arguments will be passed to EACH selected view. If an argument contains commas or double quotes, enclose it in double quotes. Replace double quotes that are part of the argument with pairs of double quotes.'), - ); - $token_desc = ($token_enabled = _viewfield_token_enabled($field)) ? - t('Use the syntax [token] if you want to insert a replacement pattern.') : - t('You may use %nid for the node id of the current node. %author for the node author and %viewer for user viewing the node.'); - $element['vargs']['#description'] .= "
\n$token_desc"; - // Since tabledrag.js currently cannot handle nested tables, we show the - // token help inside the fieldset only in the field settings form or in - // single-value mode. - if ($token_enabled && ($field_settings || !$field['multiple'])) { - $element['token_help'] = _viewfield_get_token_help($field); - } } + else { + $element['vargs']['#description'] .= '
' . t('Available tokens: %nid for the id of the current node, %author for the node author, and %viewer for viewing user.'); + } + return $element; } @@ -287,25 +246,6 @@ function _viewfield_potential_references($field, $delta = 0) { } /** - * Return the token replacement help - */ -function _viewfield_get_token_help($field) { - // TODO: Token support right now is a bit hacked on, needs better integration, - // eventually a checkbox to enable/disable use of token-module here. - $token_help = array( - '#title' => t('Token replacement patterns'), - '#type' => 'fieldset', - '#collapsible' => TRUE, - '#collapsed' => TRUE, - '#weight' => $field['widget']['weight'] - ); - $token_help['help'] = array( - '#value' => theme('token_help', 'node'), - ); - return $token_help; -} - -/** * Implementation of hook_theme(). */ function viewfield_theme() { @@ -330,17 +270,3 @@ function viewfield_views_api() { 'path' => drupal_get_path('module', 'viewfield') .'/includes', ); } - -/** - * If the super defaults are enabled return them, otherwise return blank values - */ -function _viewfield_get_super_defaults($field) { - return $field['super_default'] ? $field['super_default_widget'] : array('vname' => NULL, 'vargs' => NULL); -} - -/** - * Check if the token replacements are enabled - */ -function _viewfield_token_enabled($field) { - return $field['token_enabled'] && module_exists('token'); -}