You are here

public function AvailabilityCalendarsNodeEditCalendarFormHandler::validateCommand in Availability Calendars 7.2

Validates a single command line.

Parameters

string $change: Command line: state: <string> from: yyyy-mm-dd[(pm)] to: yyyy-mm-dd[(am)]

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 AvailabilityCalendarsNodeEditCalendarFormHandler::validateCommand()
AvailabilityCalendarsNodeEditCalendarFormHandler::validate in ./availability_calendars.node.inc
Callback to validate the form for the styles form.

File

./availability_calendars.node.inc, line 447

Class

AvailabilityCalendarsNodeEditCalendarFormHandler

Code

public function validateCommand($change) {

  // Basic syntax checking.
  $parts = explode(' ', trim($change));
  if (count($parts) !== 6 || $parts[0] !== 'state:' || !array_key_exists($parts[1], $this->settings->states) || $parts[2] !== 'from:' || preg_match('/^[1-2][0-9]{3}-[0-1][0-9]-[0-3][0-9](\\(pm\\))?$/', $parts[3]) !== 1 || $parts[4] !== 'to:' || preg_match('/^[1-2][0-9]{3}-[0-1][0-9]-[0-3][0-9](\\(am\\))?$/', $parts[5]) !== 1) {
    return FALSE;
  }

  // Check dates: valid date, in between ranges of the calendar, no am/pm when no split days
  // allowed, and from <= to (including the pm/am modifier: this prevents the "same day from
  // pm to am" situation.
  $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;
  }
  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 + $this->settings->monthcount + 1, 0, $year))) {
    return FALSE;
  }
  if ($this->settings->splitday == '0' && (strlen($parts[3]) > 10 || strlen($parts[5]) > 10)) {
    return FALSE;
  }
  if ($parts[3] > $parts[5]) {
    return FALSE;
  }
  return array(
    'from' => $parts[3],
    'to' => $parts[5],
    'state' => $parts[1],
  );
}