? .DS_Store
? 535440-shorten-random_1.patch
? issue-558928-form-labeling-3.patch
? sites/all/README.txt
? sites/all/modules
? sites/all/profiles
? sites/all/themes
? sites/default/files
? sites/default/private
? sites/default/settings.php
? sites/default/settings.php.actual
Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.368
diff -u -p -r1.368 form.inc
--- includes/form.inc	29 Aug 2009 16:30:14 -0000	1.368
+++ includes/form.inc	31 Aug 2009 05:25:24 -0000
@@ -1514,7 +1514,13 @@ function theme_select($element) {
   $size = $element['#size'] ? ' size="' . $element['#size'] . '"' : '';
   _form_set_class($element, array('form-select'));
   $multiple = $element['#multiple'];
-  return '<select name="' . $element['#name'] . '' . ($multiple ? '[]' : '') . '"' . ($multiple ? ' multiple="multiple" ' : '') . drupal_attributes($element['#attributes']) . ' id="' . $element['#id'] . '" ' . $size . '>' . form_select_options($element) . '</select>';
+  $title = '';
+
+  if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_ATTRIBUTE && !empty($element['#title'])) {
+  $title = ' title="' . $element['#title'] . '"';
+}
+
+  return '<select name="' . $element['#name'] . '' . ($multiple ? '[]' : '') . '"' . ($multiple ? ' multiple="multiple"' : '') . $title . ' ' . drupal_attributes($element['#attributes']) . ' id="' . $element['#id'] . '" ' . $size . '>' . form_select_options($element) . '</select>';
 }
 
 /**
@@ -1654,15 +1660,19 @@ function theme_fieldset($element) {
  */
 function theme_radio($element) {
   _form_set_class($element, array('form-radio'));
+  $title = '';
+
+  if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_ATTRIBUTE && !empty($element['#title'])) {
+  $title = ' title="' . $element['#title'] . '"';
+}
+
   $output = '<input type="radio" ';
   $output .= 'id="' . $element['#id'] . '" ';
-  $output .= 'name="' . $element['#name'] . '" ';
+  $output .= 'name="' . $element['#name'] . '"';
+  $output .= $title . ' ';
   $output .= 'value="' . $element['#return_value'] . '" ';
   $output .= (check_plain($element['#value']) == $element['#return_value']) ? ' checked="checked" ' : ' ';
   $output .= drupal_attributes($element['#attributes']) . ' />';
-  if (!is_null($element['#title'])) {
-    $output = '<label class="option" for="' . $element['#id'] . '">' . $output . ' ' . $element['#title'] . '</label>';
-  }
 
   return $output;
 }
@@ -1990,18 +2000,21 @@ function theme_text_format_wrapper($elem
  */
 function theme_checkbox($element) {
   _form_set_class($element, array('form-checkbox'));
+  $title = '';
+
+  if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_ATTRIBUTE && !empty($element['#title'])) {
+  $title = ' title="' . $element['#title'] . '"';
+}
+
   $checkbox = '<input ';
   $checkbox .= 'type="checkbox" ';
   $checkbox .= 'name="' . $element['#name'] . '" ';
-  $checkbox .= 'id="' . $element['#id'] . '" ' ;
+  $checkbox .= 'id="' . $element['#id'] . '"';
+  $checkbox .= $title . ' ';
   $checkbox .= 'value="' . $element['#return_value'] . '" ';
   $checkbox .= $element['#value'] ? ' checked="checked" ' : ' ';
   $checkbox .= drupal_attributes($element['#attributes']) . ' />';
 
-  if (!is_null($element['#title'])) {
-    $checkbox = '<label class="option" for="' . $element['#id'] . '">' . $checkbox . ' ' . $element['#title'] . '</label>';
-  }
-
   return $checkbox;
 }
 
@@ -2424,6 +2437,12 @@ function theme_textfield($element) {
   $maxlength = empty($element['#maxlength']) ? '' : ' maxlength="' . $element['#maxlength'] . '"';
   $class = array('form-text');
   $extra = '';
+  $title = '';
+
+  if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_ATTRIBUTE && !empty($element['#title'])) {
+  $title = ' title="' . $element['#title'] . '"';
+}
+
   $output = '';
 
   if ($element['#autocomplete_path'] && menu_valid_path(array('link_path' => $element['#autocomplete_path']))) {
@@ -2437,7 +2456,7 @@ function theme_textfield($element) {
     $output .= '<span class="field-prefix">' . $element['#field_prefix'] . '</span> ';
   }
 
-  $output .= '<input type="text"' . $maxlength . ' name="' . $element['#name'] . '" id="' . $element['#id'] . '"' . $size . ' value="' . check_plain($element['#value']) . '"' . drupal_attributes($element['#attributes']) . ' />';
+  $output .= '<input type="text"' . $title . $maxlength . ' name="' . $element['#name'] . '" id="' . $element['#id'] . '"' . $size . ' value="' . check_plain($element['#value']) . '"' . drupal_attributes($element['#attributes']) . ' />';
 
   if (isset($element['#field_suffix'])) {
     $output .= ' <span class="field-suffix">' . $element['#field_suffix'] . '</span>';
@@ -2476,6 +2495,11 @@ function theme_form($element) {
  */
 function theme_textarea($element) {
   $class = array('form-textarea');
+  $title = '';
+
+  if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_ATTRIBUTE && !empty($element['#title'])) {
+  $title = ' title="' . $element['#title'] . '"';
+}
 
   // Add resizable behavior
   if ($element['#resizable'] !== FALSE) {
@@ -2484,7 +2508,7 @@ function theme_textarea($element) {
   }
 
   _form_set_class($element, $class);
-  return '<textarea cols="' . $element['#cols'] . '" rows="' . $element['#rows'] . '" name="' . $element['#name'] . '" id="' . $element['#id'] . '" ' . drupal_attributes($element['#attributes']) . '>' . check_plain($element['#value']) . '</textarea>';
+  return '<textarea cols="' . $element['#cols'] . '" rows="' . $element['#rows'] . '" name="' . $element['#name'] . '" id="' . $element['#id'] . '"' . $title . ' ' . drupal_attributes($element['#attributes']) . '>' . check_plain($element['#value']) . '</textarea>';
 }
 
 /**
@@ -2518,9 +2542,14 @@ function theme_markup($element) {
 function theme_password($element) {
   $size = $element['#size'] ? ' size="' . $element['#size'] . '" ' : '';
   $maxlength = $element['#maxlength'] ? ' maxlength="' . $element['#maxlength'] . '" ' : '';
+  $title = '';
+
+  if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_ATTRIBUTE && !empty($element['#title'])) {
+  $title = ' title="' . $element['#title'] . '"';
+}
 
   _form_set_class($element, array('form-text'));
-  $output = '<input type="password" name="' . $element['#name'] . '" id="' . $element['#id'] . '" ' . $maxlength . $size . drupal_attributes($element['#attributes']) . ' />';
+  $output = '<input type="password" name="' . $element['#name'] . '" id="' . $element['#id'] . '" ' . $title . $maxlength . $size . drupal_attributes($element['#attributes']) . ' />';
   return $output;
 }
 
@@ -2554,7 +2583,13 @@ function form_process_weight($element) {
  */
 function theme_file($element) {
   _form_set_class($element, array('form-file'));
-  return '<input type="file" name="' . $element['#name'] . '"' . ($element['#attributes'] ? ' ' . drupal_attributes($element['#attributes']) : '') . ' id="' . $element['#id'] . '" size="' . $element['#size'] . "\" />\n";
+  $title = '';
+
+  if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_ATTRIBUTE && !empty($element['#title'])) {
+  $title = ' title="' . $element['#title'] . '"';
+}
+
+  return '<input type="file" name="' . $element['#name'] . '"' . $title . ' ' . ($element['#attributes'] ? ' ' . drupal_attributes($element['#attributes']) : '') . ' id="' . $element['#id'] . '" size="' . $element['#size'] . "\" />\n";
 }
 
 /**
@@ -2584,17 +2619,31 @@ function theme_form_element($element) {
   $output = '<div class="' . implode(' ', $class) . '">' . "\n";
   $required = !empty($element['#required']) ? '<span class="form-required" title="' . $t('This field is required.') . '">*</span>' : '';
 
-  if (!empty($element['#title']) && empty($element['#form_element_skip_title'])) {
+  $label = '';
+
+  if (!empty($element['#title'])) {
     $title = $element['#title'];
     if (!empty($element['#id'])) {
-      $output .= ' <label for="' . $element['#id'] . '">' . $t('!title !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n";
+      $label = ' <label for="' . $element['#id'] . '">' . $t('!title !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n";
     }
     else {
-      $output .= ' <label>' . $t('!title !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n";
+      $label= ' <label>' . $t('!title !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n";
     }
   }
 
-  $output .= " " . $element['#children'] . "\n";
+  if ($element['#type'] == 'item') {
+    $output .= '<h3>' . $element['#title'] . '</h3>';
+  }
+
+  if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_BEFORE) {
+    $output .= $label . " " . $element['#children'] . "\n";
+  }
+  else if (isset($element['#show_title']) && $element['#show_title'] == FORM_ELEMENT_SHOW_TITLE_AFTER) {
+    $output .= $element['#children'] . " " . $label . "\n";
+  }
+  else {
+    $output .= " " . $element['#children'] . "\n";
+  }
 
   if (!empty($element['#description'])) {
     $output .= ' <div class="description">' . $element['#description'] . "</div>\n";
Index: modules/locale/locale.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v
retrieving revision 1.257
diff -u -p -r1.257 locale.module
--- modules/locale/locale.module	29 Aug 2009 05:46:03 -0000	1.257
+++ modules/locale/locale.module	31 Aug 2009 05:25:25 -0000
@@ -272,6 +272,7 @@ function locale_language_selector_form($
     '#default_value' => $user_preferred_language->language,
     '#options' => $names,
     '#description' => ($mode == LANGUAGE_NEGOTIATION_PATH) ? t("This account's default language for e-mails, and preferred language for site presentation.") : t("This account's default language for e-mails."),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
   return $form;
 }
@@ -301,6 +302,7 @@ function locale_form_node_type_form_alte
       '#default_value' => variable_get('language_content_type_' . $form['#node_type']->type, 0),
       '#options' => array(t('Disabled'), t('Enabled')),
       '#description' => t('Enable multilingual support for this content type. If enabled, a language selection field will be added to the editing form, allowing you to select from one of the <a href="!languages">enabled languages</a>. If disabled, new posts are saved with the default language. Existing content will not be affected by changing this option.', array('!languages' => url('admin/config/regional/language'))),
+      '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
     );
   }
 }
Index: modules/node/content_types.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/content_types.inc,v
retrieving revision 1.91
diff -u -p -r1.91 content_types.inc
--- modules/node/content_types.inc	24 Aug 2009 19:26:46 -0000	1.91
+++ modules/node/content_types.inc	31 Aug 2009 05:25:26 -0000
@@ -155,7 +155,8 @@ function node_type_form(&$form_state, $t
       DRUPAL_OPTIONAL => t('Optional'),
       DRUPAL_REQUIRED => t('Required'),
     ),
-    );
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
+  );
   $form['submission']['help']  = array(
     '#type' => 'textarea',
     '#title' => t('Explanation or submission guidelines'),
@@ -179,6 +180,7 @@ function node_type_form(&$form_state, $t
       'revision' => t('Create new revision'),
     ),
     '#description' => t('Users with the <em>administer nodes</em> permission will be able to override these options.'),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
   $form['display'] = array(
     '#type' => 'fieldset',
Index: modules/profile/profile.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/profile/profile.module,v
retrieving revision 1.272
diff -u -p -r1.272 profile.module
--- modules/profile/profile.module	29 Aug 2009 05:46:03 -0000	1.272
+++ modules/profile/profile.module	31 Aug 2009 05:25:26 -0000
@@ -158,6 +158,7 @@ function profile_block_configure($delta 
     '#default_value' => variable_get('profile_block_author_fields', array()),
     '#options' => $fields,
     '#description' => t('Select which profile fields you wish to display in the block. Only fields designated as public in the <a href="@profile-admin">profile field configuration</a> are available.', array('@profile-admin' => url('admin/config/people/profile'))),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
   return $form;
 }
Index: modules/simpletest/tests/form_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/form_test.module,v
retrieving revision 1.8
diff -u -p -r1.8 form_test.module
--- modules/simpletest/tests/form_test.module	17 Aug 2009 07:12:16 -0000	1.8
+++ modules/simpletest/tests/form_test.module	31 Aug 2009 05:25:27 -0000
@@ -87,6 +87,7 @@ function form_test_test_form(&$form_stat
     '#type' => 'item',
     '#title' => 'Test Textfield',
     '#markup' => form_clean_id('form_test_form_clean_id_presence'),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
   return $form;
 }
Index: modules/system/system.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.css,v
retrieving revision 1.61
diff -u -p -r1.61 system.css
--- modules/system/system.css	24 Aug 2009 03:11:34 -0000	1.61
+++ modules/system/system.css	31 Aug 2009 05:25:27 -0000
@@ -139,7 +139,9 @@ tr.merge-up, tr.merge-up td, tr.merge-up
   display: block;
   font-weight: bold;
 }
-.form-item label.option {
+.form-item label.option,
+.form-type-checkbox label,
+.form-type-radio label {
   display: inline;
   font-weight: normal;
 }
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.780
diff -u -p -r1.780 system.module
--- modules/system/system.module	29 Aug 2009 05:46:04 -0000	1.780
+++ modules/system/system.module	31 Aug 2009 05:25:30 -0000
@@ -88,6 +88,25 @@ define('REGIONS_ALL', 'all');
 
 
 /**
+ *
+ * Output form element titles as labels before form elements. @see system_elements().
+ */
+define('FORM_ELEMENT_SHOW_TITLE_BEFORE', 'before');
+
+/**
+ *
+ * Output form element titles as labels after form elements. @see system_elements().
+ */
+define('FORM_ELEMENT_SHOW_TITLE_AFTER', 'after');
+
+/**
+ *
+ * Output form element titles as the title attribute of form elements. @see system_elements().
+ */
+define('FORM_ELEMENT_SHOW_TITLE_ATTRIBUTE', 'attribute');
+
+
+/**
  * Implement hook_help().
  */
 function system_help($path, $arg) {
@@ -341,6 +360,7 @@ function system_elements() {
     '#process' => array('form_process_text_format', 'ajax_process_form'),
     '#theme' => 'textfield',
     '#theme_wrappers' => array('form_element'),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
 
   $type['password'] = array(
@@ -350,12 +370,14 @@ function system_elements() {
     '#process' => array('ajax_process_form'),
     '#theme' => 'password',
     '#theme_wrappers' => array('form_element'),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
 
   $type['password_confirm'] = array(
     '#input' => TRUE,
     '#process' => array('form_process_password_confirm'),
     '#theme_wrappers' => array('form_element'),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
 
   $type['textarea'] = array(
@@ -366,6 +388,7 @@ function system_elements() {
     '#process' => array('form_process_text_format', 'ajax_process_form'),
     '#theme' => 'textarea',
     '#theme_wrappers' => array('form_element'),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
 
   $type['radios'] = array(
@@ -381,7 +404,7 @@ function system_elements() {
     '#process' => array('ajax_process_form'),
     '#theme' => 'radio',
     '#theme_wrappers' => array('form_element'),
-    '#form_element_skip_title' => TRUE,
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_AFTER,
   );
 
   $type['checkboxes'] = array(
@@ -398,7 +421,7 @@ function system_elements() {
     '#process' => array('ajax_process_form'),
     '#theme' => 'checkbox',
     '#theme_wrappers' => array('form_element'),
-    '#form_element_skip_title' => TRUE,
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_AFTER,
   );
 
   $type['select'] = array(
@@ -408,6 +431,7 @@ function system_elements() {
     '#process' => array('ajax_process_form'),
     '#theme' => 'select',
     '#theme_wrappers' => array('form_element'),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
 
   $type['weight'] = array(
@@ -430,6 +454,7 @@ function system_elements() {
     '#size' => 60,
     '#theme' => 'file',
     '#theme_wrappers' => array('form_element'),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
 
   $type['tableselect'] = array(
Index: modules/taxonomy/taxonomy.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.admin.inc,v
retrieving revision 1.66
diff -u -p -r1.66 taxonomy.admin.inc
--- modules/taxonomy/taxonomy.admin.inc	23 Aug 2009 01:05:12 -0000	1.66
+++ modules/taxonomy/taxonomy.admin.inc	31 Aug 2009 05:25:31 -0000
@@ -157,6 +157,7 @@ function taxonomy_form_vocabulary(&$form
     '#title' => t('Apply to content types'),
     '#default_value' => $edit['nodes'],
     '#options' => array_map('check_plain', node_type_get_names()),
+    '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
   );
   $form['settings'] = array(
     '#type' => 'fieldset',
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.1036
diff -u -p -r1.1036 user.module
--- modules/user/user.module	29 Aug 2009 21:05:16 -0000	1.1036
+++ modules/user/user.module	31 Aug 2009 05:25:34 -0000
@@ -1878,7 +1878,8 @@ function user_edit_form(&$form_state, $u
       '#type' => 'radios',
       '#title' => t('Status'),
       '#default_value' => isset($edit['status']) ? $edit['status'] : 1,
-      '#options' => array(t('Blocked'), t('Active'))
+      '#options' => array(t('Blocked'), t('Active')),
+      '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
     );
   }
   if (user_access('administer permissions')) {
@@ -1905,6 +1906,7 @@ function user_edit_form(&$form_state, $u
         '#default_value' => $default,
         '#options' => $roles,
         DRUPAL_AUTHENTICATED_RID => $checkbox_authenticated,
+        '#show_title' => FORM_ELEMENT_SHOW_TITLE_BEFORE,
       );
     }
   }
