Index: viewfield.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/viewfield/viewfield.module,v retrieving revision 1.21 diff -u -p -r1.21 viewfield.module --- viewfield.module 30 Nov 2009 04:12:35 -0000 1.21 +++ viewfield.module 6 Apr 2010 23:32:16 -0000 @@ -56,13 +56,16 @@ function viewfield_field_settings($op, $ $form['super_default_widget']['#tree'] = TRUE; unset($form['super_default_widget']['#weight']); return $form; + case 'validate': if ($field['force_default'] && $field['multiple']) { 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'); + case 'database columns': return array( 'vname' => array('type' => 'varchar', 'not null' => FALSE, 'length' => 32), @@ -86,6 +89,7 @@ function viewfield_field($op, &$node, $f } } break; + case 'sanitize': foreach ($items as $delta => $item) { $item = empty($item['vname']) || $field['widget']['force_default'] ? $field['super_default_widget'] : $item; @@ -187,11 +191,12 @@ 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']; - $node = isset($form['#node']) ? $form['#node'] : (object) array('type' => $field['type_name']); - $field_settings = !isset($node->uid); // 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); + if ($field['widget']['force_default'] && !$field_settings) { $element['vname'] = array( '#type' => 'value', @@ -204,7 +209,7 @@ function viewfield_select_process($eleme } else { // Display the form to let the user pick a view. - $options = _viewfield_potential_references($field_settings, $field, $element['#delta']); + $options = _viewfield_potential_references($field, $element['#delta']); // Provide our own overriding of defaults. if ($field['super_default'] && !$field_settings) { $element['override_default'] = array( @@ -265,7 +270,7 @@ function viewfield_select_process($eleme /** * Prepare a list of views for selection. */ -function _viewfield_potential_references($field_settings = TRUE, $field = array(), $delta = 0) { +function _viewfield_potential_references($field, $delta = 0) { $options = array(); $field['allowed_views'] = isset($field['allowed_views']) ? array_filter($field['allowed_views']) : array(); $field['allowed_views'] = empty($field['allowed_views']) ? array_keys(views_get_all_views()) : $field['allowed_views']; @@ -275,11 +280,8 @@ function _viewfield_potential_references $options[$view->name .'|'. $display->id] = $view->name .' - '. $display->display_title; } } - // Add a null option for non-required or multiple fields: handle multiple - // views by adding an empty option, otherwise at each submit the user would - // add a new view. If the field is required AND multiple the first widget has - // no empty choice. - if (!$field_settings && (!$field['required'] || ($field['multiple'] && $delta > 0))) { + // Add a '0' option for non-required or subsequent values of multiple fields. + if (!$field['required'] || ($field['multiple'] && $delta > 0)) { array_unshift($options, '<'. t('none') .'>'); } return $options; Index: includes/viewfield.views.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/viewfield/includes/viewfield.views.inc,v retrieving revision 1.1 diff -u -p -r1.1 viewfield.views.inc --- includes/viewfield.views.inc 7 Apr 2009 18:42:31 -0000 1.1 +++ includes/viewfield.views.inc 6 Apr 2010 23:31:57 -0000 @@ -13,8 +13,8 @@ */ function viewfield_views_query_alter(&$view, &$query) { global $_viewfield_stack; - if ((!empty($_viewfield_stack)) && (in_array('node', $query->table_queue))) { - $placeholders = array_fill(0, count($_viewfield_stack), '%d'); - $query->add_where(0, 'node.nid NOT IN ('. implode(',', $placeholders) .')', $_viewfield_stack); + if (!empty($_viewfield_stack) && in_array('node', $query->table_queue)) { + $placeholders = db_placeholders($_viewfield_stack); + $query->add_where(0, "node.nid NOT IN ($placeholders)", $_viewfield_stack); } }