function content_field_edit_form in Content Construction Kit (CCK) 6.2
Same name and namespace in other branches
- 6.3 includes/content.admin.inc \content_field_edit_form()
Menu callback; presents the field editing page.
5 string references to 'content_field_edit_form'
- content_copy_export in modules/
content_copy/ content_copy.module - Process the export, get field admin forms for all requested fields and save the form values as formatted text.
- content_copy_form_alter in modules/
content_copy/ content_copy.module - Implementation of hook_form_alter(). Intervene to run form through macro when doing export
- content_menu in ./
content.module - Implementation of hook_menu().
- fieldgroup_form_alter in modules/
fieldgroup/ fieldgroup.module - Implementation of hook_form_alter()
- optionwidgets_form_alter in modules/
optionwidgets/ optionwidgets.module - Implementation of hook_form_alter.
File
- includes/
content.admin.inc, line 955 - Administrative interface for content type creation.
Code
function content_field_edit_form(&$form_state, $type_name, $field_name) {
$output = '';
$type = content_types($type_name);
$field = $type['fields'][$field_name];
if ($field['locked']) {
$output = array();
$output['locked'] = array(
'#value' => t('The field %field is locked and cannot be edited.', array(
'%field' => $field['widget']['label'],
)),
);
return $output;
}
$field_types = _content_field_types();
$field_type = $field_types[$field['type']];
$widget_types = _content_widget_types();
$widget_type = $widget_types[$field['widget']['type']];
$title = isset($field['widget']['label']) ? $field['widget']['label'] : $field['field_name'];
drupal_set_title(check_plain($title));
// See if we need to change the widget type or label.
if (isset($form_state['change_basic'])) {
module_load_include('inc', 'content', 'includes/content.crud');
$field_values = content_field_instance_collapse($field);
return content_field_basic_form($form_state, $field_values);
}
$add_new_sequence = isset($_REQUEST['destinations']);
// Remove menu tabs when we are in an 'add new' sequence.
if ($add_new_sequence) {
menu_set_item(NULL, menu_get_item('node'));
}
$form = array();
$form['#field'] = $field;
$form['#type'] = $type;
// Basic iformation : hide when we are in an 'add new' sequence.
$form['basic'] = array(
'#type' => 'fieldset',
'#title' => t('%type basic information', array(
'%type' => $type['name'],
)),
'#access' => !$add_new_sequence,
);
$form['basic']['label'] = array(
'#type' => 'textfield',
'#title' => t('Label'),
'#value' => $field['widget']['label'],
'#disabled' => TRUE,
);
$form['basic']['field_name'] = array(
'#type' => 'hidden',
'#title' => t('Field name'),
'#value' => $field['field_name'],
'#disabled' => TRUE,
);
$form['basic']['type'] = array(
'#type' => 'hidden',
'#title' => t('Field type'),
'#value' => $field['type'],
'#disabled' => TRUE,
);
$widget_options = content_widget_type_options($field['type']);
$form['basic']['widget_type'] = array(
'#type' => 'select',
'#title' => t('Widget type'),
'#options' => $widget_options,
'#default_value' => $field['widget']['type'] ? $field['widget']['type'] : key($widget_options),
'#disabled' => TRUE,
);
$form['basic']['change'] = array(
'#type' => 'submit',
'#value' => t('Change basic information'),
'#submit' => array(
'content_field_edit_form_submit_update_basic',
),
);
$form['widget'] = array(
'#type' => 'fieldset',
'#title' => t('%type settings', array(
'%type' => $type['name'],
)),
'#description' => t('These settings apply only to the %field field as it appears in the %type content type.', array(
'%field' => $field['widget']['label'],
'%type' => $type['name'],
)),
);
$form['widget']['weight'] = array(
'#type' => 'hidden',
'#default_value' => $field['widget']['weight'],
);
$additions = (array) module_invoke($widget_type['module'], 'widget_settings', 'form', $field['widget']);
drupal_alter('widget_settings', $additions, 'form', $field['widget']);
$form['widget'] = array_merge($form['widget'], $additions);
$form['widget']['description'] = array(
'#type' => 'textarea',
'#title' => t('Help text'),
'#default_value' => $field['widget']['description'],
'#rows' => 5,
'#description' => t('Instructions to present to the user below this field on the editing form.<br />Allowed HTML tags: @tags', array(
'@tags' => _content_filter_xss_display_allowed_tags(),
)),
'#required' => FALSE,
);
// Add handling for default value if not provided by field.
if (content_callback('widget', 'default value', $field) == CONTENT_CALLBACK_DEFAULT) {
// Store the original default value for use in programmed forms.
// Set '#default_value' instead of '#value' so programmed values
// can override whatever we set here.
$default_value = isset($field['widget']['default_value']) ? $field['widget']['default_value'] : array();
$default_value_php = isset($field['widget']['default_value_php']) ? $field['widget']['default_value_php'] : '';
$form['widget']['default_value'] = array(
'#type' => 'value',
'#default_value' => $default_value,
);
$form['widget']['default_value_php'] = array(
'#type' => 'value',
'#default_value' => $default_value_php,
);
// We can't tell at the time we build the form if this is a programmed
// form or not, so we always end up adding the default value widget
// even if we won't use it.
$form['widget']['default_value_fieldset'] = array(
'#type' => 'fieldset',
'#title' => t('Default value'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
// Default value widget.
$widget_form = array(
'#node' => (object) array(
'type' => $type_name,
),
);
$widget_form_state = array(
'values' => array(
$field['field_name'] => $default_value,
),
);
// Make sure the default value is not a required field.
$widget_field = $field;
$widget_field['required'] = FALSE;
module_load_include('inc', 'content', 'includes/content.node_form');
$form_element = content_field_form($widget_form, $widget_form_state, $widget_field, 0);
$form['widget']['default_value_fieldset']['default_value_widget'] = $form_element;
$form['widget']['default_value_fieldset']['default_value_widget']['#tree'] = TRUE;
// Set up form info that the default value widget will need to find in the form.
$form['#field_info'] = array(
$widget_field['field_name'] => $widget_field,
);
// Advanced: PHP code.
$form['widget']['default_value_fieldset']['advanced_options'] = array(
'#type' => 'fieldset',
'#title' => t('PHP code'),
'#collapsible' => TRUE,
'#collapsed' => empty($field['widget']['default_value_php']),
);
if (user_access('Use PHP input for field settings (dangerous - grant with care)')) {
$db_info = content_database_info($field);
$columns = array_keys($db_info['columns']);
foreach ($columns as $key => $column) {
$columns[$key] = t("'@column' => value for @column", array(
'@column' => $column,
));
}
$sample = t("return array(\n 0 => array(@columns),\n // You'll usually want to stop here. Provide more values\n // if you want your 'default value' to be multi-valued:\n 1 => array(@columns),\n 2 => ...\n);", array(
'@columns' => implode(', ', $columns),
));
$form['widget']['default_value_fieldset']['advanced_options']['default_value_php'] = array(
'#type' => 'textarea',
'#title' => t('Code'),
'#default_value' => isset($field['widget']['default_value_php']) ? $field['widget']['default_value_php'] : '',
'#rows' => 6,
'#tree' => TRUE,
'#description' => t('Advanced usage only: PHP code that returns a default value. Should not include <?php ?> delimiters. If this field is filled out, the value returned by this code will override any value specified above. Expected format: <pre>!sample</pre>To figure out the expected format, you can use the <em>devel load</em> tab provided by <a href="@link_devel">devel module</a> on a %type content page.', array(
'!sample' => $sample,
'@link_devel' => 'http://www.drupal.org/project/devel',
'%type' => $type_name,
)),
);
}
else {
$form['widget']['default_value_fieldset']['advanced_options']['markup_default_value_php'] = array(
'#type' => 'item',
'#title' => t('Code'),
'#value' => !empty($field['widget']['default_value_php']) ? '<code>' . check_plain($field['widget']['default_value_php']) . '</code>' : t('<none>'),
'#description' => empty($field['widget']['default_value_php']) ? t("You're not allowed to input PHP code.") : t('This PHP code was set by an administrator and will override any value specified above.'),
);
}
}
$form['field'] = array(
'#type' => 'fieldset',
'#title' => t('Global settings'),
'#description' => t('These settings apply to the %field field in every content type in which it appears.', array(
'%field' => $field['widget']['label'],
)),
);
$form['field']['required'] = array(
'#type' => 'checkbox',
'#title' => t('Required'),
'#default_value' => $field['required'],
);
$description = t('Maximum number of values users can enter for this field.');
if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_CORE) {
$description .= '<br/>' . t("'Unlimited' will provide an 'Add more' button so the users can add as many values as they like.");
}
$description .= '<br/><strong>' . t('Warning! Changing this setting after data has been created could result in the loss of data!') . '</strong>';
$form['field']['multiple'] = array(
'#type' => 'select',
'#title' => t('Number of values'),
'#options' => array(
1 => t('Unlimited'),
0 => 1,
) + drupal_map_assoc(range(2, 10)),
'#default_value' => $field['multiple'],
'#description' => $description,
);
$form['field']['previous_field'] = array(
'#type' => 'hidden',
'#value' => serialize($field),
);
$additions = (array) module_invoke($field_type['module'], 'field_settings', 'form', $field);
drupal_alter('field_settings', $additions, 'form', $field);
$form['field'] = array_merge($form['field'], $additions);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save field settings'),
);
$form['type_name'] = array(
'#type' => 'value',
'#value' => $type_name,
);
$form['field_name'] = array(
'#type' => 'value',
'#value' => $field_name,
);
$form['type'] = array(
'#type' => 'value',
'#value' => $field['type'],
);
$form['module'] = array(
'#type' => 'value',
'#value' => $field['module'],
);
$form['widget']['label'] = array(
'#type' => 'value',
'#value' => $field['widget']['label'],
);
$form['widget_module'] = array(
'#type' => 'value',
'#value' => $field['widget']['module'],
);
$form['columns'] = array(
'#type' => 'value',
'#value' => $field['columns'],
);
return $form;
}