You are here

function availability_calendar_field_widget_month_form_validate_line in Availability Calendars 7.3

Same name and namespace in other branches
  1. 7.5 availability_calendar.widget.inc \availability_calendar_field_widget_month_form_validate_line()
  2. 7.4 availability_calendar.widget.inc \availability_calendar_field_widget_month_form_validate_line()

Validates a single command line.

Parameters

string $line: Command line: "state: <sid> from: yyyy-mm-dd to: yyyy-mm-dd".

Return value

boolean|array An array with key 'from', 'to' and 'state' representing the parsed and validated command line or FALSE on validation errors.

1 call to availability_calendar_field_widget_month_form_validate_line()
availability_calendar_field_widget_month_form_validate in ./availability_calendar.widget.inc
Callback to validate the calendar changes. @link http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....

File

./availability_calendar.widget.inc, line 185

Code

function availability_calendar_field_widget_month_form_validate_line($line, $element) {

  // Basic syntax checking.
  $parts = explode(' ', trim($line));
  if (count($parts) !== 6 || $parts[0] !== 'state:' || $parts[2] !== 'from:' || preg_match('/^[1-2][0-9]{3}-[0-1][0-9]-[0-3][0-9]$/', $parts[3]) !== 1 || $parts[4] !== 'to:' || preg_match('/^[1-2][0-9]{3}-[0-1][0-9]-[0-3][0-9]$/', $parts[5]) !== 1) {
    return FALSE;
  }

  // Check state: allowed state.
  $state = $parts[1];
  if (!array_key_exists($state, $element['availability_states']['#options'])) {
    return FALSE;
  }

  // Check dates: valid dates, in between ranges of the calendar and from <= to.
  $year = date('Y');
  $month = date('m');
  if (!checkdate(substr($parts[3], 5, 2), substr($parts[3], 8, 2), substr($parts[3], 0, 4)) || $parts[3] < date(AC_ISODATE, mktime(0, 0, 0, $month, 1, $year))) {
    return FALSE;
  }
  $months = $element['availability_calendar']['#settings']['show_number_of_months'];
  if (!checkdate(substr($parts[5], 5, 2), substr($parts[5], 8, 2), substr($parts[5], 0, 4)) || $parts[5] > date(AC_ISODATE, mktime(0, 0, 0, $month + $months + 1, 0, $year))) {
    return FALSE;
  }
  $from = new DateTime($parts[3]);
  $to = new DateTime($parts[5]);
  if ($from > $to) {
    return FALSE;
  }
  return array(
    'state' => $state,
    'from' => $from,
    'to' => $to,
  );
}