#52484 by chx: filter_form needs validation
							parent
							
								
									d797819821
								
							
						
					
					
						commit
						4b663a62af
					
				| 
						 | 
					@ -170,34 +170,36 @@ function drupal_submit_form($form_id, $form, $callback = NULL) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function _form_validate($elements, $form_id = NULL) {
 | 
					function _form_validate($elements, $form_id = NULL) {
 | 
				
			||||||
  /* Validate the current input */
 | 
					  /* Validate the current input */
 | 
				
			||||||
  if (!$elements['#validated'] && ($elements['#input'] || isset($form_id))) {
 | 
					  if (!$elements['#validated']) {
 | 
				
			||||||
    // An empty textfield returns '' so we use empty(). An empty checkbox
 | 
					    if ($elements['#input'] || isset($form_id)) {
 | 
				
			||||||
    // and a textfield could return '0' and empty('0') returns TRUE so we
 | 
					      // An empty textfield returns '' so we use empty(). An empty checkbox
 | 
				
			||||||
    // need a special check for the '0' string.
 | 
					      // and a textfield could return '0' and empty('0') returns TRUE so we
 | 
				
			||||||
    if ($elements['#required'] && empty($elements['#value']) && $elements['#value'] !== '0') {
 | 
					      // need a special check for the '0' string.
 | 
				
			||||||
      form_error($elements, t('%name field is required.', array('%name' => $elements['#title'])));
 | 
					      if ($elements['#required'] && empty($elements['#value']) && $elements['#value'] !== '0') {
 | 
				
			||||||
    }
 | 
					        form_error($elements, t('%name field is required.', array('%name' => $elements['#title'])));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Add legal choice check if element has #options. Can be skipped, but then you must validate your own element.
 | 
					      // Add legal choice check if element has #options. Can be skipped, but then you must validate your own element.
 | 
				
			||||||
    if (isset($elements['#options']) && isset($elements['#value']) && !isset($elements['#DANGEROUS_SKIP_CHECK'])) {
 | 
					      if (isset($elements['#options']) && isset($elements['#value']) && !isset($elements['#DANGEROUS_SKIP_CHECK'])) {
 | 
				
			||||||
      if ($elements['#type'] == 'select') {
 | 
					        if ($elements['#type'] == 'select') {
 | 
				
			||||||
        $options = form_options_flatten($elements['#options']);
 | 
					          $options = form_options_flatten($elements['#options']);
 | 
				
			||||||
      }
 | 
					        }
 | 
				
			||||||
      else {
 | 
					        else {
 | 
				
			||||||
        $options = $elements['#options'];
 | 
					          $options = $elements['#options'];
 | 
				
			||||||
      }
 | 
					        }
 | 
				
			||||||
      if (is_array($elements['#value'])) {
 | 
					        if (is_array($elements['#value'])) {
 | 
				
			||||||
        $value = $elements['#type'] == 'checkboxes' ? array_keys(array_filter($elements['#value'])) : $elements['#value'];
 | 
					          $value = $elements['#type'] == 'checkboxes' ? array_keys(array_filter($elements['#value'])) : $elements['#value'];
 | 
				
			||||||
        foreach ($value as $v) {
 | 
					          foreach ($value as $v) {
 | 
				
			||||||
          if (!isset($options[$v])) {
 | 
					            if (!isset($options[$v])) {
 | 
				
			||||||
            form_error($elements, t('An illegal choice has been detected. Please contact the site administrator.'));
 | 
					              form_error($elements, t('An illegal choice has been detected. Please contact the site administrator.'));
 | 
				
			||||||
            watchdog('form', t('Illegal choice %choice in %name element.', array('%choice' => theme('placeholder', check_plain($v)), '%name' => theme_placeholder(empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'])), WATCHDOG_ERROR));
 | 
					              watchdog('form', t('Illegal choice %choice in %name element.', array('%choice' => theme('placeholder', check_plain($v)), '%name' => theme_placeholder(empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'])), WATCHDOG_ERROR));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					        elseif (!isset($options[$elements['#value']])) {
 | 
				
			||||||
      elseif (!isset($options[$elements['#value']])) {
 | 
					          form_error($elements, t('An illegal choice has been detected. Please contact the site administrator.'));
 | 
				
			||||||
        form_error($elements, t('An illegal choice has been detected. Please contact the site administrator.'));
 | 
					          watchdog('form', t('Illegal choice %choice in %name element.', array('%choice' => theme_placeholder(check_plain($v)), '%name' => theme('placeholder', empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'])), WATCHDOG_ERROR));
 | 
				
			||||||
        watchdog('form', t('Illegal choice %choice in %name element.', array('%choice' => theme_placeholder(check_plain($v)), '%name' => theme('placeholder', empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'])), WATCHDOG_ERROR));
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -802,6 +802,7 @@ function filter_form($value = FILTER_FORMAT_DEFAULT, $weight = NULL, $parents =
 | 
				
			||||||
      '#collapsible' => TRUE,
 | 
					      '#collapsible' => TRUE,
 | 
				
			||||||
      '#collapsed' => TRUE,
 | 
					      '#collapsed' => TRUE,
 | 
				
			||||||
      '#weight' => $weight,
 | 
					      '#weight' => $weight,
 | 
				
			||||||
 | 
					      '#validate' => array('filter_form_validate' => array()),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    // Multiple formats available: display radio buttons with tips.
 | 
					    // Multiple formats available: display radio buttons with tips.
 | 
				
			||||||
    foreach ($formats as $format) {
 | 
					    foreach ($formats as $format) {
 | 
				
			||||||
| 
						 | 
					@ -829,6 +830,16 @@ function filter_form($value = FILTER_FORMAT_DEFAULT, $weight = NULL, $parents =
 | 
				
			||||||
  return $form;
 | 
					  return $form;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function filter_form_validate($form) {
 | 
				
			||||||
 | 
					  foreach (element_children($form) as $key) {
 | 
				
			||||||
 | 
					    if ($form[$key]['#value'] == $form[$key]['#return_value']) {
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  form_error($form, t('An illegal choice has been detected. Please contact the site administrator.'));
 | 
				
			||||||
 | 
					  watchdog('form', t('Illegal choice %choice in %name element.', array('%choice' => theme('placeholder', check_plain($v)), '%name' => theme_placeholder(empty($form['#title']) ? $form['#parents'][0] : $form['#title'])), WATCHDOG_ERROR));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns true if the user is allowed to access this format.
 | 
					 * Returns true if the user is allowed to access this format.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -802,6 +802,7 @@ function filter_form($value = FILTER_FORMAT_DEFAULT, $weight = NULL, $parents =
 | 
				
			||||||
      '#collapsible' => TRUE,
 | 
					      '#collapsible' => TRUE,
 | 
				
			||||||
      '#collapsed' => TRUE,
 | 
					      '#collapsed' => TRUE,
 | 
				
			||||||
      '#weight' => $weight,
 | 
					      '#weight' => $weight,
 | 
				
			||||||
 | 
					      '#validate' => array('filter_form_validate' => array()),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    // Multiple formats available: display radio buttons with tips.
 | 
					    // Multiple formats available: display radio buttons with tips.
 | 
				
			||||||
    foreach ($formats as $format) {
 | 
					    foreach ($formats as $format) {
 | 
				
			||||||
| 
						 | 
					@ -829,6 +830,16 @@ function filter_form($value = FILTER_FORMAT_DEFAULT, $weight = NULL, $parents =
 | 
				
			||||||
  return $form;
 | 
					  return $form;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function filter_form_validate($form) {
 | 
				
			||||||
 | 
					  foreach (element_children($form) as $key) {
 | 
				
			||||||
 | 
					    if ($form[$key]['#value'] == $form[$key]['#return_value']) {
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  form_error($form, t('An illegal choice has been detected. Please contact the site administrator.'));
 | 
				
			||||||
 | 
					  watchdog('form', t('Illegal choice %choice in %name element.', array('%choice' => theme('placeholder', check_plain($v)), '%name' => theme_placeholder(empty($form['#title']) ? $form['#parents'][0] : $form['#title'])), WATCHDOG_ERROR));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns true if the user is allowed to access this format.
 | 
					 * Returns true if the user is allowed to access this format.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue