? 2
? forms.patch
? forms.patch.txt
? forms.tar.bz2
? scratch
? includes/form.inc
? includes/legacy.inc
? sites/forms.drupal.dev
Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.476
diff -u -r1.476 common.inc
--- includes/common.inc 31 Aug 2005 18:37:30 -0000 1.476
+++ includes/common.inc 13 Sep 2005 23:56:41 -0000
@@ -489,38 +489,6 @@
}
/**
- * An unchecked checkbox is not present in $_POST so we fix it here by
- * proving a default value of 0. Also, with form_checkboxes() we expect
- * an array, but HTML does not send the empty array. This is also taken
- * care off.
- */
-function fix_checkboxes() {
- if (isset($_POST['form_array'])) {
- $_POST['edit'] = _fix_checkboxes($_POST['edit'], $_POST['form_array'], array());
- }
- if (isset($_POST['form_zero'])) {
- $_POST['edit'] = _fix_checkboxes($_POST['edit'], $_POST['form_zero'], 0);
- }
-}
-
-function _fix_checkboxes($array1, $array2, $value) {
- if (is_array($array2) && count($array2)) {
- foreach ($array2 as $k => $v) {
- if (is_array($v) && count($v)) {
- $array1[$k] = _fix_checkboxes($array1[$k], $v, $value);
- }
- else if (!isset($array1[$k])) {
- $array1[$k] = $value;
- }
- }
- }
- else {
- $array1 = $value;
- }
- return $array1;
-}
-
-/**
* @name Conversion
* @{
* Converts data structures to different types.
@@ -559,6 +527,41 @@
return $array;
}
+
+/**
+ * Apply a user function recursively to every member of an array
+ *
+ * Taken from PHP Compat package in PEAR.
+ */
+if (!function_exists('array_walk_recursive')) {
+ function array_walk_recursive(&$input, $funcname) {
+ if (!is_callable($funcname)) {
+ if (is_array($funcname)) {
+ $funcname = $funcname[0] . '::' . $funcname[1];
+ }
+ user_error('array_walk_recursive() Not a valid callback ' . $user_func, E_USER_WARNING);
+ return;
+ }
+ if (!is_array($input)) {
+ user_error('array_walk_recursive() The argument should be an array', E_USER_WARNING);
+ return;
+ }
+ $args = func_get_args();
+ foreach ($input as $key => $item) {
+ if (is_array($item)) {
+ array_walk_recursive($item, $funcname, $args);
+ $input[$key] = $item;
+ } else {
+ $args[0] = &$item;
+ $args[1] = &$key;
+ call_user_func_array($funcname, $args);
+ $input[$key] = $item;
+ }
+ }
+ }
+}
+
+
/**
* @} End of "Conversion".
*/
@@ -1009,552 +1012,6 @@
* @} End of "defgroup format".
*/
-/**
- * @defgroup form Form generation
- * @{
- * Functions to enable output of HTML forms and form elements.
- *
- * Drupal uses these functions to achieve consistency in its form presentation,
- * while at the same time simplifying code and reducing the amount of HTML that
- * must be explicitly generated by modules.
- */
-
-/**
- * Generate a form from a set of form elements.
- *
- * @param $form
- * An HTML string containing one or more form elements.
- * @param $method
- * The query method to use ("post" or "get").
- * @param $action
- * The URL to send the form contents to, if not the current page.
- * @param $attributes
- * An associative array of attributes to add to the form tag.
- * @result
- * An HTML string with the contents of $form wrapped in a form tag.
- */
-function form($form, $method = 'post', $action = NULL, $attributes = NULL) {
- if (!$action) {
- $action = request_uri();
- }
- // Anonymous div to satisfy XHTML compliancy.
- return '
\n";
-}
-
-/**
- * File an error against the form element with the specified name.
- */
-function form_set_error($name, $message) {
- $GLOBALS['form'][$name] = $message;
- drupal_set_message($message, 'error');
-}
-
-/**
- * Return an associative array of all errors.
- */
-function form_get_errors() {
- if (array_key_exists('form', $GLOBALS)) {
- return $GLOBALS['form'];
- }
-}
-
-/**
- * Return the error message filed against the form with the specified name.
- */
-function _form_get_error($name) {
- if (array_key_exists('form', $GLOBALS)) {
- return $GLOBALS['form'][$name];
- }
-}
-
-function _form_get_class($name, $required, $error) {
- return $name. ($required ? ' required' : '') . ($error ? ' error' : '');
-}
-
-/**
- * Format a general form item.
- *
- * @param $title
- * The label for the form item.
- * @param $value
- * The contents of the form item.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $id
- * A unique identifier for the form item.
- * @param $required
- * Whether the user must fill in this form element before submitting the form.
- * @param $error
- * An error message to display alongside the form element.
- * @return
- * A themed HTML string representing the form item.
- */
-function form_item($title, $value, $description = NULL, $id = NULL, $required = FALSE, $error = FALSE) {
- return theme('form_element', $title, $value, $description, $id, $required, $error);
-}
-
-/**
- * Format a group of form items.
- *
- * @param $legend
- * The label for the form item group.
- * @param $group
- * The form items within the group, as an HTML string.
- * @param $description
- * Explanatory text to display after the form item group.
- * @param $attributes
- * An associative array of HTML attributes to add to the fieldset tag.
- * @return
- * A themed HTML string representing the form item group.
- */
-function form_group($legend, $group, $description = NULL, $attributes = NULL) {
- return '\n";
-}
-
-/**
- * Format a group of form items.
- *
- * @param $legend
- * The label for the form item group.
- * @param $group
- * The form items within the group, as an HTML string.
- * @param $collapsed
- * A boolean value decided whether the group starts collapsed.
- * @param $description
- * Explanatory text to display after the form item group.
- * @param $attributes
- * An associative array of HTML attributes to add to the fieldset tag.
- * @return
- * A themed HTML string representing the form item group.
- */
-function form_group_collapsible($legend, $group, $collapsed = FALSE, $description = NULL, $attributes = NULL) {
- drupal_add_js('misc/collapse.js');
-
- $attributes['class'] .= ' collapsible';
- if ($collapsed) {
- $attributes['class'] .= ' collapsed';
- }
-
- return '\n";
-}
-
-/**
- * Format a radio button.
- *
- * @param $title
- * The label for the radio button.
- * @param $name
- * The internal name used to refer to the button.
- * @param $value
- * The value that the form element takes on when selected.
- * @param $checked
- * Whether the button will be initially selected when the page is rendered.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $attributes
- * An associative array of HTML attributes to add to the button.
- * @param $required
- * Whether the user must select this radio button before submitting the form.
- * @return
- * A themed HTML string representing the radio button.
- */
-function form_radio($title, $name, $value = 1, $checked = FALSE, $description = NULL, $attributes = NULL, $required = FALSE) {
- $element = '';
- if (!is_null($title)) {
- $element = '';
- }
- return theme('form_element', NULL, $element, $description, $name, $required, _form_get_error($name));
-}
-
-/**
- * Format a set of radio buttons.
- *
- * @param $title
- * The label for the radio buttons as a group.
- * @param $name
- * The internal name used to refer to the buttons.
- * @param $value
- * The currently selected radio button's key.
- * @param $options
- * An associative array of buttons to display. The keys in this array are
- * button values, while the values are the labels to display for each button.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $required
- * Whether the user must select a radio button before submitting the form.
- * @param $attributes
- * An associative array of HTML attributes to add to each button.
- * @return
- * A themed HTML string representing the radio button set.
- */
-function form_radios($title, $name, $value, $options, $description = NULL, $required = FALSE, $attributes = NULL) {
- if (count($options) > 0) {
- $choices = '';
- foreach ($options as $key => $choice) {
- $choices .= ' ';
- }
- return theme('form_element', $title, $choices, $description, NULL, $required, _form_get_error($name));
- }
-}
-
-/**
- * Format a checkbox.
- *
- * @param $title
- * The label for the checkbox.
- * @param $name
- * The internal name used to refer to the button.
- * @param $value
- * The value that the form element takes on when selected.
- * @param $checked
- * Whether the button will be initially selected when the page is rendered.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $attributes
- * An associative array of HTML attributes to add to the button.
- * @param $required
- * Whether the user must check this box before submitting the form.
- * @return
- * A themed HTML string representing the checkbox.
- */
-function form_checkbox($title, $name, $value = 1, $checked = FALSE, $description = NULL, $attributes = NULL, $required = FALSE) {
- $element = '';
- if (!is_null($title)) {
- $element = '';
- }
- return form_hidden($name, 1, 'form_zero') . theme('form_element', NULL, $element, $description, $name, $required, _form_get_error($name));
-}
-
-/**
- * Format a set of checkboxes.
- *
- * @param $title
- * The label for the checkboxes as a group.
- * @param $name
- * The internal name used to refer to the buttons.
- * @param $values
- * A linear array of keys of the initially checked boxes.
- * @param $options
- * An associative array of buttons to display. The keys in this array are
- * button values, while the values are the labels to display for each button.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $attributes
- * An associative array of HTML attributes to add to each button.
- * @param $required
- * Whether the user must check a box before submitting the form.
- * @return
- * A themed HTML string representing the checkbox set.
- */
-function form_checkboxes($title, $name, $values, $options, $description = NULL, $attributes = NULL, $required = FALSE) {
- if (count($options) > 0) {
- if (!isset($values) || $values == 0) {
- $values = array();
- }
- $choices = '';
- foreach ($options as $key => $choice) {
- $choices .= ' ';
- }
- return form_hidden($name, 1, 'form_array') . theme('form_element', $title, $choices, $description, NULL, $required, _form_get_error($name));
- }
-}
-
-/**
- * Format a single-line text field.
- *
- * @param $title
- * The label for the text field.
- * @param $name
- * The internal name used to refer to the field.
- * @param $value
- * The initial value for the field at page load time.
- * @param $size
- * A measure of the visible size of the field (passed directly to HTML).
- * @param $maxlength
- * The maximum number of characters that may be entered in the field.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $attributes
- * An associative array of HTML attributes to add to the form item.
- * @param $required
- * Whether the user must enter some text in the field.
- * @return
- * A themed HTML string representing the field.
- */
-function form_textfield($title, $name, $value, $size, $maxlength, $description = NULL, $attributes = NULL, $required = FALSE) {
- $size = $size ? ' size="'. $size .'"' : '';
- return theme('form_element', $title, '', $description, 'edit-'. $name, $required, _form_get_error($name));
-}
-
-/**
- * Format a single-line text field that uses Ajax for autocomplete.
- *
- * @param $title
- * The label for the text field.
- * @param $name
- * The internal name used to refer to the field.
- * @param $value
- * The initial value for the field at page load time.
- * @param $size
- * A measure of the visible size of the field (passed directly to HTML).
- * @param $maxlength
- * The maximum number of characters that may be entered in the field.
- * @param $callback_path
- * A drupal path for the Ajax autocomplete callback.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $attributes
- * An associative array of HTML attributes to add to the form item.
- * @param $required
- * Whether the user must enter some text in the field.
- * @return
- * A themed HTML string representing the field.
- */
-function form_autocomplete($title, $name, $value, $size, $maxlength, $callback_path, $description = NULL, $attributes = NULL, $required = FALSE) {
- drupal_add_js('misc/autocomplete.js');
-
- $size = $size ? ' size="'. $size .'"' : '';
-
- $output = theme('form_element', $title, '', $description, 'edit-'. $name, $required, _form_get_error($name));
- $output .= '';
-
- return $output;
-}
-
-/**
- * Format a single-line text field that does not display its contents visibly.
- *
- * @param $title
- * The label for the text field.
- * @param $name
- * The internal name used to refer to the field.
- * @param $value
- * The initial value for the field at page load time.
- * @param $size
- * A measure of the visible size of the field (passed directly to HTML).
- * @param $maxlength
- * The maximum number of characters that may be entered in the field.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $attributes
- * An associative array of HTML attributes to add to the form item.
- * @param $required
- * Whether the user must enter some text in the field.
- * @return
- * A themed HTML string representing the field.
- */
-function form_password($title, $name, $value, $size, $maxlength, $description = NULL, $attributes = NULL, $required = FALSE) {
- $size = $size ? ' size="'. $size .'"' : '';
- return theme('form_element', $title, '', $description, 'edit-'. $name, $required, _form_get_error($name));
-}
-
-/**
- * Format a multiple-line text field.
- *
- * @param $title
- * The label for the text field.
- * @param $name
- * The internal name used to refer to the field.
- * @param $value
- * The initial value for the field at page load time.
- * @param $cols
- * The width of the field, in columns of text.
- * @param $rows
- * The height of the field, in rows of text.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $attributes
- * An associative array of HTML attributes to add to the form item.
- * @param $required
- * Whether the user must enter some text in the field.
- * @return
- * A themed HTML string representing the field.
- */
-function form_textarea($title, $name, $value, $cols, $rows, $description = NULL, $attributes = NULL, $required = FALSE) {
- $cols = $cols ? ' cols="'. $cols .'"' : '';
- $pre = '';
- $post = '';
-
- // optionally plug in a WYSIWYG editor
- foreach (module_list() as $module_name) {
- if (module_hook($module_name, 'textarea')) {
- $pre .= module_invoke($module_name, 'textarea', 'pre', $name);
- $post .= module_invoke($module_name, 'textarea', 'post', $name);
- }
- }
-
- return theme('form_element', $title, $pre .''. $post, $description, 'edit-'. $name, $required, _form_get_error($name));
-}
-
-/**
- * Format a dropdown menu or scrolling selection box.
- *
- * @param $title
- * The label for the form element.
- * @param $name
- * The internal name used to refer to the form element.
- * @param $value
- * The key of the currently selected item, or a linear array of keys of all the
- * currently selected items if multiple selections are allowed.
- * @param $options
- * An associative array of buttons to display. The keys in this array are
- * button values, while the values are the labels to display for each button.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $extra
- * Additional HTML to inject into the select element tag.
- * @param $multiple
- * Whether the user may select more than one item.
- * @param $required
- * Whether the user must select a value before submitting the form.
- * @return
- * A themed HTML string representing the form element.
- *
- * It is possible to group options together; to do this, change the format of
- * $options to an associative array in which the keys are group labels, and the
- * values are associative arrays in the normal $options format.
- */
-function form_select($title, $name, $value, $options, $description = NULL, $extra = 0, $multiple = FALSE, $required = FALSE) {
- $select = '';
- foreach ($options as $key => $choice) {
- if (is_array($choice)) {
- $select .= '';
- }
- else {
- $select .= '';
- }
- }
- return theme('form_element', $title, '', $description, 'edit-'. $name, $required, _form_get_error($name));
-}
-
-/**
- * Format a file upload field.
- *
- * @param $title
- * The label for the file upload field.
- * @param $name
- * The internal name used to refer to the field.
- * @param $size
- * A measure of the visible size of the field (passed directly to HTML).
- * @param $description
- * Explanatory text to display after the form item.
- * @param $required
- * Whether the user must upload a file to the field.
- * @return
- * A themed HTML string representing the field.
- *
- * For assistance with handling the uploaded file correctly, see the API
- * provided by file.inc.
- */
-function form_file($title, $name, $size, $description = NULL, $required = FALSE) {
- return theme('form_element', $title, '\n", $description, 'edit-'. $name, $required, _form_get_error($name));
-}
-
-/**
- * Store data in a hidden form field.
- *
- * @param $name
- * The internal name used to refer to the field.
- * @param $value
- * The stored data.
- * @param $edit
- * The array name to prefix to the $name.
- * @param $attributes
- * An array of HTML attributes for the input tag.
- * @return
- * A themed HTML string representing the hidden field.
- *
- * This function can be useful in retaining information between page requests,
- * but be sure to validate the data on the receiving page as it is possible for
- * an attacker to change the value before it is submitted.
- */
-function form_hidden($name, $value, $edit = 'edit', $attributes = NULL) {
- return '\n";
-}
-
-/**
- * Format an action button.
- *
- * @param $value
- * Both the label for the button, and the value passed to the target page
- * when this button is clicked.
- * @param $name
- * The internal name used to refer to the button.
- * @param $type
- * What type to pass to the HTML input tag.
- * @param $attributes
- * An associative array of HTML attributes to add to the form item.
- * @return
- * A themed HTML string representing the button.
- */
-function form_button($value, $name = 'op', $type = 'submit', $attributes = NULL) {
- return '\n";
-}
-
-/**
- * Format a form submit button.
- *
- * @param $value
- * Both the label for the button, and the value passed to the target page
- * when this button is clicked.
- * @param $name
- * The internal name used to refer to the button.
- * @param $attributes
- * An associative array of HTML attributes to add to the form item.
- * @return
- * A themed HTML string representing the button.
- */
-function form_submit($value, $name = 'op', $attributes = NULL) {
- return form_button($value, $name, 'submit', $attributes);
-}
-
-/**
- * Format a weight selection menu.
- *
- * @param $title
- * The label for the form element.
- * @param $name
- * The internal name used to refer to the form element.
- * @param $value
- * The selected weight value at page load time.
- * @param $delta
- * The largest in absolute value the weight can be. For example, if set to 10,
- * weights could range from -10 to 10 inclusive.
- * @param $description
- * Explanatory text to display after the form item.
- * @param $extra
- * Additional HTML to inject into the select element tag.
- * @return
- * A themed HTML string representing the form element.
- */
-function form_weight($title = NULL, $name = 'weight', $value = 0, $delta = 10, $description = NULL, $extra = 0) {
- for ($n = (-1 * $delta); $n <= $delta; $n++) {
- $weights[$n] = $n;
- }
-
- return form_select($title, $name, $value, $weights, $description, $extra);
-}
-
-/**
- * Remove invalid characters from an HTML ID attribute string
- *
- * @param $id
- * The ID to clean
- * @return
- * The cleaned ID
- */
-function form_clean_id($id = NULL) {
- $id = str_replace('][', '-', $id);
- return $id;
-}
-
-/**
- * @} End of "defgroup form".
- */
/**
* Generate an internal Drupal URL.
@@ -1915,6 +1372,8 @@
require_once './includes/file.inc';
require_once './includes/unicode.inc';
require_once './includes/image.inc';
+ require_once './includes/form.inc';
+ require_once './includes/legacy.inc';
// Set the Drupal custom error handler.
set_error_handler('error_handler');
// Emit the correct charset HTTP header.
Index: includes/theme.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.inc,v
retrieving revision 1.258
diff -u -r1.258 theme.inc
--- includes/theme.inc 8 Sep 2005 19:17:34 -0000 1.258
+++ includes/theme.inc 13 Sep 2005 23:56:43 -0000
@@ -959,55 +959,6 @@
}
/**
- * Output a confirmation form
- *
- * This function outputs a complete form for confirming an action. A link is
- * offered to go back to the item that is being changed in case the user changes
- * his/her mind.
- *
- * You should use $_POST['edit'][$name] (where $name is usually 'confirm') to
- * check if the confirmation was successful.
- *
- * @param $question
- * The question to ask the user (e.g. "Are you sure you want to delete the
- * block foo?").
- * @param $path
- * The page to go to if the user denies the action.
- * @param $description
- * Additional text to display (defaults to "This action cannot be undone.").
- * @param $yes
- * A caption for the button which confirms the action (e.g. "Delete",
- * "Replace", ...).
- * @param $no
- * A caption for the link which denies the action (e.g. "Cancel").
- * @param $extra
- * Additional HTML to inject into the form, for example form_hidden()s.
- * @param $name
- * The internal name used to refer to the confirmation item.
- * @return
- * A themed HTML string representing the form.
- */
-function theme_confirm($question, $path, $description = NULL, $yes = NULL, $no = NULL, $extra = NULL, $name = 'confirm') {
- drupal_set_title($question);
-
- if (is_null($description)) {
- $description = t('This action cannot be undone.');
- }
-
- $output .= '
';
+ $output .= form_render($form);
return $output;
}
+function aggregator_page_list_validate($form_id, &$form) {
+ if (!user_access('administer news feeds')) {
+ form_error($form, t('You are not allowed to categorize this feed item.'));
+ }
+}
+
+function aggregator_page_list_execute($form_id, $form) {
+ global $form_values;
+ foreach ($form_values['categories'] as $iid => $selection) {
+ db_query('DELETE FROM {aggregator_category_item} WHERE iid = %d', $iid);
+ foreach ($selection as $cid) {
+ if ($cid) {
+ db_query('INSERT INTO {aggregator_category_item} (cid, iid) VALUES (%d, %d)', $cid, $iid);
+ }
+ }
+ }
+ drupal_set_message(t('The categories have been saved.'));
+ drupal_goto($_GET['q']);
+}
+
+
+
/**
* Menu callback; displays all the feeds used by the aggregator.
*/
Index: modules/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block.module,v
retrieving revision 1.179
diff -u -r1.179 block.module
--- modules/block.module 12 Sep 2005 18:26:59 -0000 1.179
+++ modules/block.module 13 Sep 2005 23:56:48 -0000
@@ -54,15 +54,18 @@
$items = array();
if ($may_cache) {
- $items[] = array('path' => 'admin/block', 'title' => t('blocks'),
+ $items[] = array('path' => 'admin/display/regions', 'title' => t('regions'),
'access' => user_access('administer blocks'),
- 'callback' => 'block_admin');
- $items[] = array('path' => 'admin/block/list', 'title' => t('list'),
+ 'callback' => 'block_admin',
+ 'type' => MENU_LOCAL_TASK);
+ $items[] = array('path' => 'admin/display/regions/list', 'title' => t('list'),
'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10);
- $items[] = array('path' => 'admin/block/configure', 'title' => t('configure block'),
+
+ $items[] = array('path' => 'admin/display/regions/configure', 'title' => t('configure block'),
'access' => user_access('administer blocks'),
'callback' => 'block_admin_configure',
'type' => MENU_CALLBACK);
+
$items[] = array('path' => 'admin/block/delete', 'title' => t('delete block'),
'access' => user_access('administer blocks'),
'callback' => 'block_box_delete',
Index: modules/blog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blog.module,v
retrieving revision 1.226
diff -u -r1.226 blog.module
--- modules/blog.module 7 Sep 2005 20:17:18 -0000 1.226
+++ modules/blog.module 13 Sep 2005 23:56:49 -0000
@@ -42,7 +42,11 @@
*/
function blog_user($type, &$edit, &$user) {
if ($type == 'view' && user_access('edit own blog', $user)) {
- return array(t('History') => form_item(t('Blog'), l(t('view recent blog entries'), "blog/$user->uid", array('title' => t("Read %username's latest blog entries.", array('%username' => $user->name))))));
+ $form['blog'] = array(
+ type => 'item', title => t('Blog'),
+ value => l(t('view recent blog entries'), "blog/$user->uid", array('title' => t("Read %username's latest blog entries.", array('%username' => $user->name))))
+ );
+ return array(t('History') => $form);
}
}
@@ -204,16 +208,17 @@
// Note: $item->description has been validated on aggregation.
$node->body = ''. check_plain($item->title) .' - '. $item->description .' ['. check_plain($item->ftitle) ."]\n";
}
+
}
if (function_exists('taxonomy_node_form')) {
- $output .= implode('', taxonomy_node_form('blog', $node));
+ $form['taxonomy'] = taxonomy_node_form('blog', $node);
}
- $output .= form_textarea(t('Body'), 'body', $node->body, 60, 20, '', NULL, TRUE);
- $output .= filter_form('format', $node->format);
+ $form['body'] = array(type => 'textarea', title => t('Body'), default_value => $node->body, required => TRUE, weight => 1);
+ $form = array_merge($form, filter_form($node->format));
- return $output;
+ return $form;
}
/**
Index: modules/blogapi.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blogapi.module,v
retrieving revision 1.56
diff -u -r1.56 blogapi.module
--- modules/blogapi.module 2 Sep 2005 02:11:41 -0000 1.56
+++ modules/blogapi.module 13 Sep 2005 23:56:54 -0000
@@ -548,11 +548,20 @@
}
function blogapi_settings() {
- $output = form_select(t('XML-RPC Engine'), 'blogapi_engine', variable_get('blogapi_engine', 0), array(0 => 'Blogger', 1 => 'MetaWeblog', 2 => 'Movabletype'), t('RSD or Really-Simple-Discovery is a mechanism which allows external blogger tools to discover the APIs they can use to interact with Drupal. Here you can set the preferred method for blogger tools to interact with your site. The common XML-RPC engines are Blogger, MetaWeblog and Movabletype. If you are not sure which is the correct setting, choose Blogger.'));
+ $form['blogapi_engine'] = array(
+ type => 'select', title => t('XML-RPC Engine'), default_value => variable_get('blogapi_engine', 0),
+ options => array(0 => 'Blogger', 1 => 'MetaWeblog', 2 => 'Movabletype'),
+ description => t('RSD or Really-Simple-Discovery is a mechanism which allows external blogger tools to discover the APIs they can use to interact with Drupal. Here you can set the preferred method for blogger tools to interact with your site. The common XML-RPC engines are Blogger, MetaWeblog and Movabletype. If you are not sure which is the correct setting, choose Blogger.')
+ );
$node_types = node_get_types();
$defaults = isset($node_types['blog']) ? array('blog') : array();
- $output .= form_checkboxes(t('Blog types'), "blogapi_node_types", variable_get('blogapi_node_types', $defaults), $node_types, t('Select the content types for which you wish to enable posting via blogapi. Each type will appear as a different "blog" in the client application (if supported).'), 0, 1);
- return $output;
+ $form['blogapi_node_types'] = array(
+ type => 'checkboxes', title => t('Blog types'), required => TRUE,
+ default_value => variable_get('blogapi_node_types', $defaults), options => $node_types,
+ description => t('Select the content types for which you wish to enable posting via blogapi. Each type will appear as a different "blog" in the client application (if supported).')
+ );
+
+ return $form;
}
function blogapi_menu($may_cache) {
Index: modules/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book.module,v
retrieving revision 1.315
diff -u -r1.315 book.module
--- modules/book.module 6 Sep 2005 18:55:41 -0000 1.315
+++ modules/book.module 13 Sep 2005 23:57:03 -0000
@@ -231,27 +231,38 @@
* Implementation of hook_form().
*/
function book_form(&$node) {
- $output = form_select(t('Parent'), 'parent', ($node->parent ? $node->parent : arg(4)), book_toc($node->nid), t('The parent that this page belongs in. Note that pages whose parent is <top-level> are regarded as independent, top-level books.'));
+ $form['parent'] = array(
+ type => 'select', title => t('Parent'), default_value => ($node->parent ? $node->parent : arg(4)), options => book_toc($node->nid),
+ description => t('The parent that this page belongs in. Note that pages whose parent is <top-level> are regarded as independent, top-level books.')
+ );
if (function_exists('taxonomy_node_form')) {
- $output .= implode('', taxonomy_node_form('book', $node));
+ $form['taxonomy'] = taxonomy_node_form('blog', $node);
}
- $output .= form_textarea(t('Body'), 'body', $node->body, 60, 20, '', NULL, TRUE);
- $output .= filter_form('format', $node->format);
-
- $output .= form_textarea(t('Log message'), 'log', $node->log, 60, 5, t('An explanation of the additions or updates being made to help other authors understand your motivations.'));
+ $form['body'] = array(
+ type => 'textarea', title => t('Body'), default_value => $node->body, required => TRUE
+ );
+ $form = array_merge($form, filter_form($node->format));
+
+ $form['log'] = array(
+ type => 'textarea', title => t('Log message'), default_value => $node->log, required => TRUE, rows => 5,
+ description => t('An explanation of the additions or updates being made to help other authors understand your motivations.')
+ );
if (user_access('administer nodes')) {
- $output .= form_weight(t('Weight'), 'weight', $node->weight, 15, t('Pages at a given level are ordered first by weight and then by title.'));
+ $form['weight'] = array(
+ type => 'weight', title => t('Weight'), default_value => $node->weight, delta => 15,
+ description => t('Pages at a given level are ordered first by weight and then by title.')
+ );
}
else {
// If a regular user updates a book page, we create a new revision
// authored by that user:
- $output .= form_hidden('revision', 1);
+ $form['revision'] = array(type => 'hidden', value => 1);
}
- return $output;
+ return $form;
}
/**
Index: modules/contact.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/contact.module,v
retrieving revision 1.22
diff -u -r1.22 contact.module
--- modules/contact.module 25 Aug 2005 21:14:16 -0000 1.22
+++ modules/contact.module 13 Sep 2005 23:57:05 -0000
@@ -58,7 +58,12 @@
* Implementation of hook_settings().
*/
function contact_settings() {
- return form_textarea(t('Additional information'), 'contact_form_information', variable_get('contact_form_information', t('You can leave us a message using the contact form below.')), 60, 5, t('Information to show on the contact page. Can be anything from submission guidelines to your postal address or telephone number.', array('%form' => url('contact'))));
+ $form['contact_form_information'] = array(
+ type => 'textarea', title => t('Additional information'), cols => 60, rows => 5,
+ default_value => ariable_get('contact_form_information', t('You can leave us a message using the contact form below.')),
+ description => t('Information to show on the contact page. Can be anything from submission guidelines to your postal address or telephone number.', array('%form' => url('contact')))
+ );
+ return $form;
}
/**
Index: modules/drupal.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/drupal.module,v
retrieving revision 1.106
diff -u -r1.106 drupal.module
--- modules/drupal.module 25 Aug 2005 21:14:16 -0000 1.106
+++ modules/drupal.module 13 Sep 2005 23:57:07 -0000
@@ -33,19 +33,28 @@
*/
function drupal_settings() {
// Check if all required fields are present for the Drupal directory
- if ((variable_get('site_name', 'drupal') == 'drupal') || (variable_get('site_name', 'drupal') == ''))
+ if ((variable_get('site_name', 'drupal') == 'drupal') || (variable_get('site_name', 'drupal') == '')) {
form_set_error('drupal_directory', t('You must set the name of your site on the administer » settings page.', array('%url' => url('admin/settings'))));
- else if (variable_get('site_mail', ini_get('sendmail_from')) == '')
+ }
+ else if (variable_get('site_mail', ini_get('sendmail_from')) == '') {
form_set_error('drupal_directory', t('You must set an e-mail address for your site on the administer » settings page.', array('%url' => url('admin/settings'))));
- else if (variable_get('site_slogan', '') == '')
+ }
+ else if (variable_get('site_slogan', '') == '') {
form_set_error('drupal_directory', t('You must set your site slogan on the administer » settings page.', array('%url' => url('admin/settings'))));
- else if (variable_get('site_mission', '') == '')
+ }
+ else if (variable_get('site_mission', '') == '') {
form_set_error('drupal_directory', t('You must set your site mission on the administer » settings page.' , array('%url' => url('admin/settings'))));
+ }
+
+ $form['drupal_server'] = array(type => 'textfield', title => t('Drupal XML-RPC server'), default_value => variable_get('drupal_server', 'http://www.drupal.org/xmlrpc.php'), size => 60, maxlength => 128, description => t('The URL of your root Drupal XML-RPC server.'));
- $output = form_textfield(t('Drupal XML-RPC server'), 'drupal_server', variable_get('drupal_server', 'http://www.drupal.org/xmlrpc.php'), 60, 128, t('The URL of your root Drupal XML-RPC server.'));
- $output .= form_radios(t('Drupal directory'), 'drupal_directory', variable_get('drupal_directory', 0), array(t('Disabled'), t('Enabled')), t("If enabled, your Drupal site will make itself known to the Drupal directory at the specified Drupal XML-RPC server. For this to work properly, you must set your site's name, e-mail address, slogan and mission statement. When the \"Drupal XML-RPC server\" field is set to \"%drupal-xml-rpc\", your web site will get listed on the Drupal sites page. Requires the cron feature to be enabled.", array("%drupal-xml-rpc" => "http://www.drupal.org/xmlrpc.php", "%drupal-sites" => "http://www.drupal.org/drupal-sites/")));
+ $form['drupal_directory'] = array(
+ type => 'radios', title => t('Drupal directory'), default_value => variable_get('drupal_directory', 0),
+ options => array(t('Disabled'), t('Enabled')),
+ description => t("If enabled, your Drupal site will make itself known to the Drupal directory at the specified Drupal XML-RPC server. For this to work properly, you must set your site's name, e-mail address, slogan and mission statement. When the \"Drupal XML-RPC server\" field is set to \"%drupal-xml-rpc\", your web site will get listed on the Drupal sites page. Requires the cron feature to be enabled.", array("%drupal-xml-rpc" => "http://www.drupal.org/xmlrpc.php", "%drupal-sites" => "http://www.drupal.org/drupal-sites/"))
+ );
- return $output;
+ return $form;
}
/**
Index: modules/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter.module,v
retrieving revision 1.71
diff -u -r1.71 filter.module
--- modules/filter.module 25 Aug 2005 21:14:16 -0000 1.71
+++ modules/filter.module 13 Sep 2005 23:57:11 -0000
@@ -726,32 +726,26 @@
* @return
* HTML for the form element.
*/
-function filter_form($name = 'format', $value = FILTER_FORMAT_DEFAULT) {
+function filter_form($value = FILTER_FORMAT_DEFAULT) {
if ($value == FILTER_FORMAT_DEFAULT) {
$value = variable_get('filter_default_format', 1);
}
$formats = filter_formats();
$extra = l(t('More information about formatting options'), 'filter/tips');
-
+
+ $form['format'] = array(type => 'fieldset', title => t('Input format'), collapsible => TRUE, collapsed => TRUE);
if (count($formats) > 1) {
// Multiple formats available: display radio buttons with tips.
- $output = '';
foreach ($formats as $format) {
- $tips = _filter_tips($format->format, false);
-
- // TODO: get support for block-level radios so the is not output?
- $output .= '
';
+ return $output;
}
/**
@@ -1432,7 +1405,7 @@
$node[$field] = $_GET['edit'][$field];
}
}
- $output = node_form($node);
+ $output = node_form(array2object($node));
drupal_set_title(t('Submit %name', array('%name' => node_get_name($node))));
}
else {
Index: modules/page.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/page.module,v
retrieving revision 1.136
diff -u -r1.136 page.module
--- modules/page.module 30 Aug 2005 15:22:29 -0000 1.136
+++ modules/page.module 13 Sep 2005 23:57:19 -0000
@@ -68,15 +68,21 @@
*/
function page_form(&$node) {
if (function_exists('taxonomy_node_form')) {
- $output .= implode('', taxonomy_node_form('page', $node));
+ $form['taxonomy'] = taxonomy_node_form('blog', $node);
}
- $output .= form_textarea(t('Body'), 'body', $node->body, 60, 20, '', NULL, TRUE);
- $output .= filter_form('format', $node->format);
+ $form['body'] = array(
+ type => 'textarea', title => t('Body'), default_value => $node->body, required => TRUE
+ );
+ $form = array_merge($form, filter_form($node->format));
- $output .= form_textarea(t('Log message'), 'log', $node->log, 60, 5, t('An explanation of the additions or updates being made to help other authors understand your motivations.'));
- return $output;
+ $form['log'] = array(
+ type => 'textarea', title => t('Log message'), default_value => $node->log, required => TRUE, rows => 5,
+ description => t('An explanation of the additions or updates being made to help other authors understand your motivations.')
+ );
+
+ return $form;
}
Index: modules/story.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/story.module,v
retrieving revision 1.170
diff -u -r1.170 story.module
--- modules/story.module 29 Aug 2005 19:58:49 -0000 1.170
+++ modules/story.module 13 Sep 2005 23:57:19 -0000
@@ -67,16 +67,22 @@
* Implementation of hook_form().
*/
function story_form(&$node) {
- $output = '';
-
if (function_exists('taxonomy_node_form')) {
- $output .= implode('', taxonomy_node_form('story', $node));
+ $form['taxonomy'] = taxonomy_node_form('blog', $node);
}
- $output .= form_textarea(t('Body'), 'body', $node->body, 60, 20, '', NULL, TRUE);
- $output .= filter_form('format', $node->format);
+ $form['body'] = array(
+ type => 'textarea', title => t('Body'), default_value => $node->body, required => TRUE
+ );
+ $form = array_merge($form, filter_form($node->format));
+
+
+ $form['log'] = array(
+ type => 'textarea', title => t('Log message'), default_value => $node->log, required => TRUE, rows => 5,
+ description => t('An explanation of the additions or updates being made to help other authors understand your motivations.')
+ );
- return $output;
+ return $form;
}
Index: modules/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system.module,v
retrieving revision 1.234
diff -u -r1.234 system.module
--- modules/system.module 13 Sep 2005 19:12:19 -0000 1.234
+++ modules/system.module 13 Sep 2005 23:57:23 -0000
@@ -50,6 +50,35 @@
}
/**
+ * Implementation of hook_elements().
+ */
+function system_elements() {
+ // Top level form
+ $type['form'] = array(method => 'POST', action => request_uri());
+
+ // Inputs
+ $type['checkbox'] = array(input => TRUE, return_value => 1);
+ $type['submit'] = array(input => TRUE, name => 'op', button_type => 'submit');
+ $type['button'] = array(input => TRUE, name => 'op', button_type => 'submit');
+ $type['textfield'] = array(input => TRUE, size => 60, maxlength => 70, autocomplete_path => FALSE);
+ $type['password'] = array(input => TRUE, size => 60, maxlength => 70);
+ $type['textarea'] = array(input => TRUE, cols => 60, rows => 20);
+ $type['radios'] = array(input => TRUE, process => 'expand_radios');
+ $type['radio'] = array(input => TRUE);
+ $type['checkboxes'] = array(input => TRUE, process => 'expand_checkboxes');
+ $type['checkbox'] = array(input => TRUE);
+ $type['select'] = array(input => TRUE);
+ $type['weight'] = array(input => TRUE);
+
+ // Form structure
+ $type['item'] = array();
+ $type['hidden'] = array(input => TRUE);
+ $type['markup'] = array(prefix => '', suffix => '');
+ $type['fieldset'] = array(collapsible => FALSE, collapsed => FALSE);
+ return $type;
+}
+
+/**
* Implementation of hook_menu().
*/
function system_menu($may_cache) {
@@ -180,63 +209,136 @@
function system_view_general() {
// General settings:
- $group = form_textfield(t('Name'), 'site_name', variable_get('site_name', 'drupal'), 60, 70, t('The name of this web site.'));
- $group .= form_textfield(t('E-mail address'), 'site_mail', variable_get('site_mail', ini_get('sendmail_from')), 60, 128, t('A valid e-mail address for this website, used by the auto-mailer during registration, new password requests, notifications, etc.'));
- $group .= form_textfield(t('Slogan'), 'site_slogan', variable_get('site_slogan', ''), 60, 128, t('The slogan of this website. Some themes display a slogan when available.'));
- $group .= form_textarea(t('Mission'), 'site_mission', variable_get('site_mission', ''), 60, 5, t('Your site\'s mission statement or focus.'));
- $group .= form_textarea(t('Footer message'), 'site_footer', variable_get('site_footer', ''), 60, 5, t('This text will be displayed at the bottom of each page. Useful for adding a copyright notice to your pages.'));
- $group .= form_textfield(t('Anonymous user'), 'anonymous', variable_get('anonymous', 'Anonymous'), 60, 70, t('The name used to indicate anonymous users.'));
- $group .= form_textfield(t('Default front page'), 'site_frontpage', variable_get('site_frontpage', 'node'), 60, 70, t('The home page displays content from this relative URL. If you are not using clean URLs, specify the part after "?q=". If unsure, specify "node".'));
+ $form['general'] = array(
+ type => 'fieldset', title => t('General settings'),
+ collapsible => TRUE, collapsed => TRUE
+ );
+ $form['general']['site_name'] = array(
+ type => 'textfield', title => t('Name'), default_value => variable_get('site_name', 'drupal'),
+ description => t('The name of this web site.')
+ );
+ $form['general']['site_mail'] = array(
+ type => 'textfield', title => t('E-mail address'), default_value => variable_get('site_mail', ini_get('sendmail_from')), maxlength => 128,
+ description => t('A valid e-mail address for this website, used by the auto-mailer during registration, new password requests, notifications, etc.')
+ );
+ $form['general']['site_slogan'] = array(
+ type => 'textfield', title => t('Slogan'), default_value => variable_get('site_slogan', ''),
+ maxlength => 128, description => t('The slogan of this website. Some themes display a slogan when available.')
+ );
+
+ $form['general']['site_mission'] = array(
+ type => 'textarea', title => t('Mission'), default_value => variable_get('site_mission', ''),
+ rows => 5, description => t('Your site\'s mission statement or focus.')
+ );
+ $form['general']['site_footer'] = array(
+ type => 'textarea', title => t('Footer message'), default_value => variable_get('site_footer', ''), rows => 5,
+ description => t('This text will be displayed at the bottom of each page. Useful for adding a copyright notice to your pages.')
+ );
+ $form['general']['anonymous'] = array(
+ type => 'textfield', title => t('Anonymous user'), default_value => variable_get('anonymous', 'Anonymous'),
+ description => t('The name used to indicate anonymous users.')
+ );
+ $form['general']['site_frontpage'] = array(
+ type => 'textfield', title => t('Default front page'), default_value => variable_get('site_frontpage', 'node'),
+ description => t('The home page displays content from this relative URL. If you are not using clean URLs, specify the part after "?q=". If unsure, specify "node".')
+ );
// We check for clean URL support using an image on the client side.
- $group .= form_radios(t('Clean URLs'), 'clean_url', variable_get('clean_url', 0), array(t('Disabled'), t('Enabled')), t('This option makes Drupal emit clean URLs (i.e. without ?q= in the URL). You\'ll need ModRewrite support for this to work. See the .htaccess file in Drupal\'s top-level directory for more information.'));
+ $form['general']['clean_url'] = array(
+ type => 'radios', title => t('Clean URLs'), default_value => variable_get('clean_url', 0), options => array(t('Disabled'), t('Enabled')),
+ description => t('This option makes Drupal emit clean URLs (i.e. without ?q= in the URL). You\'ll need ModRewrite support for this to work. See the .htaccess file in Drupal\'s top-level directory for more information.')
+ );
+
variable_set('clean_url_ok', 0);
global $base_url;
// We will use a random URL so there is no way a proxy or a browser could cache the "no such image" answer.
- $group .= '';
-
- $output = form_group_collapsible(t('General settings'), $group, TRUE);
+ $form['general']['clean_url_test'] = array(type => 'markup', value => '');
// Error handling:
+
+ $form['errors'] = array( type => 'fieldset', title =>t('Error handling'), collapsible => TRUE, collapsed => TRUE );
+ $form['errors']['site_403'] = array(
+ type => 'textfield', title => t('Default 403 (access denied) page'), default_value => variable_get('site_403', ''),
+ description => t('This page is displayed when the requested document is denied to the current user. If you are not using clean URLs, specify the part after "?q=". If unsure, specify nothing.')
+ );
+
+ $form['errors']['site_404'] = array(
+ type => 'textfield', title => t('Default 404 (not found) page'), default_value => variable_get('site_404', ''),
+ description => t('This page is displayed when no other content matches the requested document. If you are not using clean URLs, specify the part after "?q=". If unsure, specify nothing.')
+ );
+
+ $form['errors']['error_level'] = array(
+ type => 'select', title => t('Error reporting'), default_value => variable_get('error_level', 1),
+ options => array(t('Write errors to the log'), t('Write errors to the log and to the screen')),
+ description => t('Where Drupal, PHP and SQL errors are logged. On a production server it is recommended that errors are only written to the error log. On a test server it can be helpful to write logs to the screen.')
+ );
+
$period = drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval');
$period['1000000000'] = t('Never');
- $group = form_textfield(t('Default 403 (access denied) page'), 'site_403', variable_get('site_403', ''), 60, 70, t('This page is displayed when the requested document is denied to the current user. If you are not using clean URLs, specify the part after "?q=". If unsure, specify nothing.'));
- $group .= form_textfield(t('Default 404 (not found) page'), 'site_404', variable_get('site_404', ''), 60, 70, t('This page is displayed when no other content matches the requested document. If you are not using clean URLs, specify the part after "?q=". If unsure, specify nothing.'));
- $group .= form_select(t('Error reporting'), 'error_level', variable_get('error_level', 1), array(t('Write errors to the log'), t('Write errors to the log and to the screen')), t('Where Drupal, PHP and SQL errors are logged. On a production server it is recommended that errors are only written to the error log. On a test server it can be helpful to write logs to the screen.'));
- $group .= form_select(t('Discard log entries older than'), 'watchdog_clear', variable_get('watchdog_clear', 604800), $period, t('The time log entries should be kept. Older entries will be automatically discarded. Requires crontab.'));
+ $form['errors']['watchdog_clear'] = array(
+ type => 'select', title => t('Discard log entries older than'), default_value => variable_get('watchdog_clear', 604800), options => $period,
+ description => t('The time log entries should be kept. Older entries will be automatically discarded. Requires crontab.')
+ );
- $output .= form_group_collapsible(t('Error handling'), $group, TRUE);
// Caching:
- $group = form_radios(t('Page cache'), 'cache', variable_get('cache', CACHE_DISABLED), array(CACHE_DISABLED => t('Disabled'), CACHE_ENABLED => t('Enabled')), t("Drupal has a caching mechanism which stores dynamically generated web pages in a database. By caching a web page, Drupal does not have to create the page each time someone wants to view it, instead it takes only one SQL query to display it, reducing response time and the server's load. Only pages requested by \"anonymous\" users are cached. In order to reduce server load and save bandwidth, Drupal stores and sends compressed cached pages."));
+ $form['cache'] = array(type => 'fieldset', title => t('Cache settings'), collapsible => TRUE, collapsed => TRUE);
+
+ $form['cache']['cache'] = array(
+ type => 'radios', title => t('Page cache'), default_value => variable_get('cache', CACHE_DISABLED),
+ options => array(CACHE_DISABLED => t('Disabled'), CACHE_ENABLED => t('Enabled')),
+ description => t("Drupal has a caching mechanism which stores dynamically generated web pages in a database. By caching a web page, Drupal does not have to create the page each time someone wants to view it, instead it takes only one SQL query to display it, reducing response time and the server's load. Only pages requested by \"anonymous\" users are cached. In order to reduce server load and save bandwidth, Drupal stores and sends compressed cached pages.")
+ );
+
$period = drupal_map_assoc(array(0, 60, 180, 300, 600, 900, 1800, 2700, 3600, 10800, 21600, 32400, 43200, 86400), 'format_interval');
$period[0] = t('none');
- $group .= form_select(t('Minimum cache lifetime'), 'cache_lifetime', variable_get('cache_lifetime', 0), $period, t('Enabling the cache will offer a sufficient performance boost for most low-traffic and medium-traffic sites. On high-traffic sites it can become necessary to enforce a minimum cache lifetime. The minimum cache lifetime is the minimum amount of time that will go by before the cache is emptied and recreated. A larger minimum cache lifetime offers better performance, but users will not see new content for a longer period of time.'));
+ $form['cache']['cache_lifetime'] = array(
+ type => 'select', title => t('Minimum cache lifetime'), default_value => variable_get('cache_lifetime', 0), options => $period,
+ description => t('Enabling the cache will offer a sufficient performance boost for most low-traffic and medium-traffic sites. On high-traffic sites it can become necessary to enforce a minimum cache lifetime. The minimum cache lifetime is the minimum amount of time that will go by before the cache is emptied and recreated. A larger minimum cache lifetime offers better performance, but users will not see new content for a longer period of time.')
+ );
- $output .= form_group_collapsible(t('Cache settings'), $group, TRUE);
// File system:
+ $form['files'] = array(type => 'fieldset', title => t('File system settings'), collapsible => TRUE, collapsed => TRUE);
+
$directory_path = variable_get('file_directory_path', 'files');
file_check_directory($directory_path, FILE_CREATE_DIRECTORY, 'file_directory_path');
+ $form['files']['file_directory_path'] = array(
+ type => 'textfield', title => t('File system path'), default_value => $directory_path, maxlength => 255, valid => 'directory',
+ description => t('A file system path where the files will be stored. This directory has to exist and be writable by Drupal. If the download method is set to public this directory has to be relative to Drupal installation directory, and be accessible over the web. When download method is set to private this directory should not be accessible over the web. Changing this location after the site has been in use will cause problems so only change this setting on an existing site if you know what you are doing.')
+ );
+
$directory_temp = variable_get('file_directory_temp', FILE_DIRECTORY_TEMP);
file_check_directory($directory_temp, FILE_CREATE_DIRECTORY, 'file_directory_temp');
+
+ $form['files']['file_directory_tmp'] = array(
+ type => 'textfield', title => t('Temporary directory'), default_value => $directory_temp, maxlength => 255, valid => 'directory',
+ description => t('Location where uploaded files will be kept during previews. Relative paths will be resolved relative to the file system path.')
+ );
+
+ $form['files']['file_downloads'] = array(
+ type => 'radios', title => t('Download method'), default_value => variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC),
+ options => array(FILE_DOWNLOADS_PUBLIC => t('Public - files are available using http directly.'), FILE_DOWNLOADS_PRIVATE => t('Private - files are transferred by Drupal.')),
+ description => t('If you want any sort of access control on the downloading of files, this needs to be set to private. You can change this at any time, however all download URLs will change and there may be unexpected problems so it is not recommended.')
+ );
- $group = form_textfield(t('File system path'), 'file_directory_path', $directory_path, 60, 255, t('A file system path where the files will be stored. This directory has to exist and be writable by Drupal. If the download method is set to public this directory has to be relative to Drupal installation directory, and be accessible over the web. When download method is set to private this directory should not be accessible over the web. Changing this location after the site has been in use will cause problems so only change this setting on an existing site if you know what you are doing.'));
- $group .= form_textfield(t('Temporary directory'), 'file_directory_temp', $directory_temp, 60, 255, t('Location where uploaded files will be kept during previews. Relative paths will be resolved relative to the Drupal installation directory.'));
- $group .= form_radios(t('Download method'), 'file_downloads', variable_get('file_downloads', FILE_DOWNLOADS_PUBLIC), array(FILE_DOWNLOADS_PUBLIC => t('Public - files are available using http directly.'), FILE_DOWNLOADS_PRIVATE => t('Private - files are transferred by Drupal.')), t('If you want any sort of access control on the downloading of files, this needs to be set to private. You can change this at any time, however all download URLs will change and there may be unexpected problems so it is not recommended.'));
- $output .= form_group_collapsible(t('File system settings'), $group, TRUE);
-
+ /*
// Image handling:
- $group = '';
+ $group = array();
$toolkits_available = image_get_available_toolkits();
if (count($toolkits_available) > 1) {
- $group .= form_radios(t('Select an image processing toolkit'), 'image_toolkit', variable_get('image_toolkit', image_get_toolkit()), $toolkits_available);
- }
- $group .= image_toolkit_invoke('settings');
- if ($group) {
- $output .= form_group_collapsible(t('Image handling'), '
'. $group .'
', TRUE);
+ $group['image_toolkit'] = array(
+ type => 'radios', title => t('Select an image processing toolkit'),
+ default_value => variable_get('image_toolkit', image_get_toolkit()), options => $toolkits_available
+ );
+ }
+ $group['toolkit'] = image_toolkit_invoke('settings');
+ if (is_array($group)) {
+ $form['image'] = array(type => 'fieldset', title => t('Image handling'), collapsible => TRUE, collapsed => true);
+ $form['image'] = array_merge($form['image'], $group);
}
+ */
// Date settings:
$zones = _system_zonelist();
@@ -264,19 +366,44 @@
$datelongchoices[$f] = format_date(time(), 'custom', $f);
}
- $group = form_select(t('Default time zone'), 'date_default_timezone', variable_get('date_default_timezone', 0), $zones, t('Select the default site time zone.'));
- $group .= form_radios(t('Configurable time zones'), 'configurable_timezones', variable_get('configurable_timezones', 1), array(t('Disabled'), t('Enabled')), t('Enable or disable user-configurable time zones. When enabled, users can set their own time zone and dates will be updated accordingly.'));
- $group .= form_select(t('Short date format'), 'date_format_short', variable_get('date_format_short', $dateshort[0]), $dateshortchoices, t('The short format of date display.'));
- $group .= form_select(t('Medium date format'), 'date_format_medium', variable_get('date_format_medium', $datemedium[0]), $datemediumchoices, t('The medium sized date display.'));
- $group .= form_select(t('Long date format'), 'date_format_long', variable_get('date_format_long', $datelong[0]), $datelongchoices, t('Longer date format used for detailed display.'));
- $group .= form_select(t('First day of week'), 'date_first_day', variable_get('date_first_day', 0), array(0 => t('Sunday'), 1 => t('Monday'), 2 => t('Tuesday'), 3 => t('Wednesday'), 4 => t('Thursday'), 5 => t('Friday'), 6 => t('Saturday')), t('The first day of the week for calendar views.'));
+ $form['dates'] = array(type => 'fieldset', title => t('Date settings'), collapsible => TRUE, collapsed => TRUE);
+ $form['dates']['date_default_timezone'] = array(
+ type => 'select', title => t('Default time zone'), default_value => variable_get('date_default_timezone', 0),
+ options => $zones, description => t('Select the default site time zone.')
+ );
+
+ $form['dates']['configurable_timezones'] = array(
+ type => 'radios', title => t('Configurable time zones'), default_value => variable_get('configurable_timezones', 1), options => array(t('Disabled'), t('Enabled')),
+ description => t('Enable or disable user-configurable time zones. When enabled, users can set their own time zone and dates will be updated accordingly.')
+ );
+
+ $form['dates']['date_format_short'] = array(
+ type => 'select', title => t('Short date format'), default_value => variable_get('date_format_short', $dateshort[0]),
+ options => $dateshortchoices, description => t('The short format of date display.')
+ );
+
+ $form['dates']['date_format_medium'] = array(
+ type => 'select', title => t('Medium date format'), default_value => variable_get('date_format_medium', $datemedium[0]),
+ options => $datemediumchoices, description => t('The medium sized date display.')
+ );
+
+ $form['dates']['date_format_long'] = array(
+ type => 'select', title => t('Long date format'), default_value => variable_get('date_format_long', $datelong[0]),
+ options => $datelongchoices, description => t('Longer date format used for detailed display.')
+ );
+
+ $form['dates']['date_first_day'] = array(
+ type => 'select', title => t('First day of week'), default_value => variable_get('date_first_day', 0),
+ options => array(0 => t('Sunday'), 1 => t('Monday'), 2 => t('Tuesday'), 3 => t('Wednesday'), 4 => t('Thursday'), 5 => t('Friday'), 6 => t('Saturday')),
+ description => t('The first day of the week for calendar views.')
+ );
- $output .= form_group_collapsible(t('Date settings'), $group, TRUE);
// String handling: report status and errors.
- $output .= form_group_collapsible(t('String handling'), unicode_settings(), TRUE);
+ $form['strings'] = array(type => 'fieldset', title => t('String handling'), collapsible => TRUE, collapsed => TRUE);
+ $form['strings']['settings'] = array_merge($from['strings'], unicode_settings());
- return $output;
+ return $form;
}
/**
@@ -465,6 +592,8 @@
}
/**
+<<<<<<< system.module
+=======
* Generate a list of all the available theme/style combinations.
*/
function system_theme_listing() {
@@ -500,6 +629,7 @@
}
/**
+>>>>>>> 1.234
* Generate a list of all the available modules, as well as update the system list.
*/
function system_module_listing() {
@@ -608,52 +738,134 @@
}
}
-function system_settings_form($form) {
- $form .= form_submit(t('Save configuration'));
- $form .= form_submit(t('Reset to defaults'));
+// Add the submit / reset buttons and run drupal_get_form()
+function system_settings_form($form_id, $form) {
+ $form['buttons']['submit'] = array(type => 'submit', value => t('Save configuration') );
+ $form['buttons']['reset'] = array(type => 'submit', value => t('Reset to defaults') );
- return form($form);
+ return drupal_get_form($form_id, $form, 'system_settings_form');
}
-function system_settings_save() {
+/**
+ * Execute the system_settings_form.
+ */
+function system_settings_form_execute($form_id, $form) {
$op = $_POST['op'];
- $edit = $_POST['edit'];
+ global $form_values;
if ($op == t('Reset to defaults')) {
- if (is_array($edit)) {
- foreach ($edit as $name => $value) {
- variable_del($name);
- }
- }
+ array_walk_recursive($form_values, 'system_settings_reset');
drupal_set_message(t('The configuration options have been reset to their default values.'));
}
else if ($op == t('Save configuration')) {
- if (is_array($edit)) {
- if ($edit['clean_url'] && !variable_get('clean_url_ok', 0)) {
- drupal_set_message(t('It appears your host is not configured correctly for Clean URLs. Please check for ModRewrite support with your administrator.'), 'error');
- $edit['clean_url'] = 0;
- }
- foreach ($edit as $name => $value) {
- variable_set($name, $value);
- }
- }
+ array_walk_recursive($form_values, 'system_settings_save');
drupal_set_message(t('The configuration options have been saved.'));
+
}
- else {
- return;
- }
+
menu_rebuild();
- drupal_goto($_GET['q']);
}
/**
+ * Save all the variables submitted to the system table.
+ */
+function system_settings_save($key, $value) {
+ variable_set($key, $value);
+}
+
+function system_settings_reset($key, $value) {
+ variable_del($key);
+}
+
+/**
+ * Do the clean url validation, changing the form property if it doesn't work.
+ */
+function system_settings_validate($form_id, &$form) {
+ #TODO .. fix here.
+ if ($edit['clean_url'] && !variable_get('clean_url_ok', 0)) {
+ drupal_set_message(t('It appears your host is not configured correctly for Clean URLs. Please check for ModRewrite support with your administrator.'), 'error');
+ $edit['clean_url'] = 0;
+ }
+
+}
+
+
+
+
+/**
* Menu callback; displays a listing of all themes.
*/
function system_themes() {
- system_listing_save();
- $form = system_theme_listing();
- $form .= form_submit(t('Save configuration'));
- return form($form);
+ $themes = system_theme_data();
+ ksort($themes);
+
+ foreach ($themes as $info) {
+ $info->screenshot = dirname($info->filename) . '/screenshot.png';
+ $screenshot = file_exists($info->screenshot) ? theme('image', $info->screenshot, t('Screenshot for %theme theme', array('%theme' => $info->name)), '', array('class' => 'screenshot'), false) : t('no screenshot');
+
+ $form[$info->name]['screenshot'] = array(type => 'markup', value => $screenshot);
+ $form[$info->name]['description'] = array(type => 'item', title => $info->name, value => dirname($info->filename));
+ $options[$info->name] = '';
+ if ($info->status) {
+ $status[] = $info->name;
+ }
+ if ($info->status && (function_exists($info->prefix . '_settings') || function_exists($info->prefix . '_features'))) {
+ $form[$info->name]['operations'] = array(type => 'markup', value => l(t('configure'), 'admin/themes/settings/' . $info->name) );
+ }
+ else {
+ // Dummy element for form_render. Cleaner than adding a check in the theme function.
+ $form[$info->name]['operations'] = array();
+ }
+ }
+
+ $form['status'] = array(type => 'checkboxes', options => $options, default_value => $status);
+ $form['theme_default'] = array(type => 'radios', options => $options, default_value => variable_get('theme_default', 'bluemarine'));
+ $form['buttons']['submit'] = array(type => 'submit', value => t('Save configuration') );
+ $form['buttons']['reset'] = array(type => 'submit', value => t('Reset to defaults') );
+
+ return drupal_get_form('system_themes', $form);
+}
+
+function theme_system_themes($form) {
+ foreach ($form as $key => $element) {
+ $row = array();
+ if (is_array($element['description'])) {
+
+ $row[] = form_render($form[$key]['screenshot']);
+ $row[] = form_render($form[$key]['description']);
+ $row[] = array('data' => form_render($form['status'][$key]), 'align' => 'center');
+ $row[] = array('data' => form_render($form['theme_default'][$key]), 'align' => 'center');
+ $row[] = array('data' => form_render($form[$key]['operations']), 'align' => 'center');
+ }
+ $rows[] = $row;
+ }
+
+ $header = array(t('Screenshot'), t('Name'), t('Enabled'), t('Default'), t('Operations'));
+ $output = theme('table', $header, $rows);
+ $output .= form_render($form);
+ return $output;
+}
+
+
+function system_themes_execute($form_id, $form) {
+ global $form_values;
+
+ db_query("UPDATE {system} SET status = 0 WHERE type = 'theme'");
+
+ if ($_POST['op'] == t('Save configuration')) {
+ variable_set('theme_default', $form_values['theme_default']);
+ if (is_array($form_values['status'])) {
+ foreach ($form_values['status'] as $key => $choice) {
+ if ($key == $choice) {
+ db_query("UPDATE {system} SET status = 1 WHERE type = 'theme' and name = '%s'", $choice);
+ }
+ }
+ }
+ }
+ else {
+ variable_del('theme_default');
+ }
+ drupal_set_message(t('The configuration options have been saved.'));
}
/**
@@ -670,16 +882,16 @@
* Menu callback; displays a module's settings page.
*/
function system_site_settings($module = NULL) {
- system_settings_save();
if ($module) {
$form = module_invoke($module, 'settings');
}
else {
$form = system_view_general();
+ $module = 'system';
}
- return system_settings_form($form);
+ return system_settings_form($module . '_settings_form', $form);
}
/**
@@ -725,7 +937,6 @@
}
}
- system_settings_save();
$form = '';
@@ -864,4 +1075,62 @@
}
+function search_box() {
+ $form[action] = url('search');
+ $form['keys'] = array(type => 'textfield', size=> 15, value => '', attributes => array('alt' => t('Enter the terms you wish to search for.'), 'class' => 'form-text'));
+ $form['submit'] = array(type => 'submit', value => t('search'));
+ return drupal_get_form('search_box', $form);
+}
+
+function theme_search_box($form) {
+ $output = '
';
+ return $output;
+}
+
+/**
+ * Output a confirmation form
+ *
+ * This function outputs a complete form for confirming an action. A link is
+ * offered to go back to the item that is being changed in case the user changes
+ * his/her mind.
+ *
+ * You should use $GLOBALS['form_values']['edit'][$name] (where $name is usually 'confirm') to
+ * check if the confirmation was successful.
+ *
+ * @param $form_id
+ * The unique form identifier. Used by the form API to construct the theme.
+ * @param $form
+ * Additional elements to inject into the form, for example hidden elements.
+ * @param $question
+ * The question to ask the user (e.g. "Are you sure you want to delete the
+ * block foo?").
+ * @param $path
+ * The page to go to if the user denies the action.
+ * @param $description
+ * Additional text to display (defaults to "This action cannot be undone.").
+ * @param $yes
+ * A caption for the button which confirms the action (e.g. "Delete",
+ * "Replace", ...).
+ * @param $no
+ * A caption for the link which denies the action (e.g. "Cancel").
+ * @param $name
+ * The internal name used to refer to the confirmation item.
+ * @return
+ * A themed HTML string representing the form.
+ */
+
+function confirm_form($form_id, $form, $question, $path, $description = NULL, $yes = NULL, $no = NULL, $name = 'confirm') {
+ $descripton = ($description) ? $description : t('This action cannot be undone.');
+ drupal_set_title($quesion);
+ $form[attributes] = array('class' => 'confirmation');
+ $form['description'] = array(value => $description);
+ $form[$name] = array(type => 'hidden', value => 1);
+
+ $form['actions'] = array(prefix => '