You are here

function availability_calendar_field_widget_month_form_validate_line in Availability Calendars 7.5

Same name and namespace in other branches
  1. 7.3 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: "{sid},yyyy-mm-dd,yyyy-mm-dd".

array $element:

bool $allowPastDates: Flag that indicates whether past dates are allowed (true) or not (false, default).

Return value

array|false A keyed array with keys 'from', 'to' and 'state' representing the parsed and validated command line, or FALSE on validation errors.

2 calls to availability_calendar_field_widget_month_form_validate_line()
AvailabilityCalendarFieldHandler::convertAvailabilityString in ./availability_calendar_migrate_field_handlers.inc
Converts a string specifying the availability to an array.
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 203

Code

function availability_calendar_field_widget_month_form_validate_line($line, $element, $allowPastDates = FALSE) {

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

  // Check state: allowed state.
  $state = $parts[0];
  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[1], 5, 2), substr($parts[1], 8, 2), substr($parts[1], 0, 4)) || !$allowPastDates && $parts[1] < 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[2], 5, 2), substr($parts[2], 8, 2), substr($parts[2], 0, 4)) || $parts[2] > date(AC_ISODATE, mktime(0, 0, 0, $month + $months + 1, 0, $year))) {
    return FALSE;
  }
  $from = new DateTime($parts[1]);
  $to = new DateTime($parts[2]);
  if ($from > $to) {
    return FALSE;
  }
  return array(
    'state' => $state,
    'from' => $from,
    'to' => $to,
  );
}