By sfmerv on
I can get the text box to show when I use this module with cck. I have already ran coder and the only error I have left is this
Line 131: hook no longer exists, use hook_form_alter() to swap your own validation handler (Drupal Docs)
$db_info = content_database_info($field);
<?php
/**
* @author Ryan Hughes <ryan@linuxbox.com>
*/
/**
* @file
* autocomplete module for cck
*
* allows for autocomplete to be added to text fields in ccK
*
*/
// $Id: textfield_autocomplete.module,v 1.1 2007/08/31 16:18:43 linuxbox Exp $
/**
* Implementation of hook_menu().
*/
function textfield_autocomplete_menu() {
$items['textfield_autocomplete'] = array(
'title' => 'Textfield Autocomplete',
'page callback' => 'drupal_get_form',
// 'page arguments' => array('aggregator_form_feed', 2),
// NOTE: as of Drupal 6.2, all menu items are *required* to have
// access control.
'access arguments' => array('administer access control'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implementation of hook_widget_info().
*/
function textfield_autocomplete_widget_info() {
return array(
'autocomplete' => array(
'label' => 'Text Field With Autocomplete',
'field types' => array('text'),
),
);
}
/**
* Implementation of hook_widget().
*/
function textfield_autocomplete_widget($op, &$node, $field, &$items) {
switch ($op) {
case 'form':
$form = array();
$form[$field['field_name']] = array('#tree' => TRUE);
if ($field['multiple']) {
$form[$field['field_name']]['#type'] = 'fieldset';
$form[$field['field_name']]['#description'] = t($field['widget']['description']);
$delta = 0;
foreach ($items as $data) {
if ($data['value']) {
$form[$field['field_name']][$delta]['value'] = array(
'#type' => 'textfield',
'#title' => ($delta == 0) ? t($field['widget']['label']) : '',
'#default_value' => $data['value'],
'#required' => ($delta == 0) ? $field['required'] : FALSE,
'#maxlength' => $field['max_length'] ? $field['max_length'] : NULL,
'#weight' => $field['widget']['weight'],
'#autocomplete_path' => 'textfield_autocomplete/'. $field['field_name'],
);
if ($field['text_processing']) {
$form[$field['field_name']][$delta]['format'] = filter_form($data['format'], $form[$field['field_name']][$delta]['value']['#weight'] + 1, array($field['field_name'], $delta, 'format'));
}
$delta++;
} // if this is an item with a value
} // foreach item
foreach (range($delta, $delta + 2) as $delta) {
$form[$field['field_name']][$delta]['value'] = array(
'#type' => 'textfield',
'#title' => ($delta == 0) ? t($field['widget']['label']) : '',
'#default_value' => '',
'#required' => ($delta == 0) ? $field['required'] : FALSE,
'#maxlength' => $field['max_length'] ? $field['max_length'] : NULL,
'#weight' => $field['widget']['weight'],
'#autocomplete_path' => 'textfield_autocomplete/'. $field['field_name'],
);
if ($field['text_processing']) {
$form[$field['field_name']][$delta]['format'] = filter_form($items[$delta]['format'], $form[$field['field_name']][$delta]['value']['#weight'] + 1, array($field['field_name'], $delta, 'format'));
}
} // foreach item in the range of (end - end+2)
} // if it's multiple
else {
$form[$field['field_name']][0]['value'] = array(
'#type' => 'textfield',
'#title' => t($field['widget']['label']),
'#default_value' => isset($items[0]['value']) ? $items[0]['value'] : '',
'#required' => $field['required'],
'#description' => t($field['widget']['description']),
'#maxlength' => $field['max_length'] ? $field['max_length'] : NULL,
'#weight' => $field['widget']['weight'],
'#autocomplete_path' => 'textfield_autocomplete/'. $field['field_name'],
);
if ($field['text_processing']) {
$form[$field['field_name']][0]['format'] = filter_form($items[0]['format'], $form[$field['field_name']][0]['value']['#weight'] + 1, array($field['field_name'], 0, 'format'));
}
} // else it's not multiple
return $form;
case 'process form values':
// Don't save empty fields except the first value
foreach ($items as $delta => $item) {
if ($item['value'] == '' && $delta > 0) {
unset($items[$delta]);
}
}
break;
} // switch op
} // function textfield_autocomplete_widget
/**
* Callback to return the values for autocomplete.
*/
function textfield_autocomplete($fieldname, $startswith) {
/*
$items = func_get_args();
$items = array_combine($items, $items);
echo drupal_to_js($items);
die();
*/
$field = content_fields($fieldname);
$db_info = content_database_info($field);
$getdatafrom[$db_info['table']][$db_info['columns']['value']['column']] = TRUE;
$items = array();
foreach ($getdatafrom as $table => $columns) {
$cols = array_keys($columns);
// I do this self-join business because I want the latest version ID.
// So I join with itself, saying I want all the pairs of
// (a row, a row with a greater version id).
// Then I cut it down, saying I only want ones where the one with the
// greater version id is null.
// Taken together, it's like saying "Give me all the ones such that there
// is no row with a greater version id."
// Doing it this way means that I don't have to do a subselect, which can
// be slow.
$likes = array();
$likes_vals = array();
foreach ($cols as $col) {
$likes[] = "A.". $col ." LIKE '%s%%'";
$likes_vals[] = $startswith;
} // foreach likes
$query = "SELECT DISTINCT A.". implode(', A.', $cols) ."FROM {". $table ."} A LEFT JOIN {". $table ."} B ON (A.nid=B.nid AND B.vid > A.vid) WHERE B.vid IS NULL AND ". implode(" AND ", $likes);
$result = db_query($query, $likes_vals);
while ($row = db_fetch_array($result)) {
foreach ($row as $colname => $colval) {
$items[] = $colval;
} // foreach col value
} // while there's rows
} // foreach table
if ($items) {
$items = array_combine($items, $items);
}
echo drupal_to_js($items);
die();
} // function nonsense_autocomplete