Esempio n. 1
0
 /**
  * Validate given metadata for a new reservation.
  *
  * @static
  * @since 0.1.0
  * @todo Make this more usable for other parts of the plugin maybe?
  *
  * @param mixed[] $meta Metadata to validate.
  *
  * @return mixed[]
  */
 protected static function validateMeta($meta)
 {
     $required = ['reserver_email' => ['email', _x('email address', 'validation error label', 'wprsrv')], 'start_date' => ['date', _x('starting date or time', 'validation error label', 'wprsrv')], 'end_date' => ['date', _x('ending date or time', 'validation error label', 'wprsrv')]];
     $errors = [];
     foreach ($required as $key => $type) {
         if (!array_key_exists($key, $meta)) {
             $errors[] = sprintf(_x('Missing field: %s', 'validation error', 'wprsrv'), $type[1]);
         }
         $value = $meta[$key];
         switch ($type) {
             case 'integer':
                 if (!preg_match('%^[0-9]+$%', $value)) {
                     $errors[] = sprintf(_x('Invalid number value for %s', 'validation error', 'wprsrv'), $type[1]);
                 }
                 break;
             case 'date':
                 if (!is_numeric(strtotime($value)) || strtotime($value) < 1000) {
                     $errors[] = sprintf(_x('Invalid date or time value for %s', 'validation error', 'wprsrv'), $type[1]);
                 }
                 break;
             case 'email':
                 if (!is_email($value)) {
                     $errors[] = sprintf(_x('Invalid email value for %s', 'validation error', 'wprsrv'), $type[1]);
                 }
                 break;
         }
     }
     $reservable = new Reservable($meta['reservable_id']);
     $dayOverlapErrorMessage = _x('Given reservation date range contains a date that has already been reserved', 'validation error', 'wprsrv');
     if (!$reservable->allowsOverlappingReservations()) {
         if ($reservable->hasReservationInDateRange($meta['start_date'], $meta['end_date'])) {
             $errors[] = $dayOverlapErrorMessage;
         }
     } else {
         if (!$reservable->canReserveOverlapping($meta['start_date'], $meta['end_date'])) {
             $errors[] = $dayOverlapErrorMessage;
         }
     }
     return $errors;
 }
Esempio n. 2
0
        <tr>
            <th class="wprsrv-mainlabel" scope="row">
                <label for="wprsrv-reservable-allow-overlapping"><?php 
_ex('Allow reservation overlaps', 'reservable metabox form', 'wprsrv');
?>
</label>
                <em><?php 
_e('Allow the reservable&rsquo;s reservations&rsquo; starting and ending dates to overlap. E.g. reservations end at 11:00 and a new reservation can begin at 16:00 at the same day.', 'wprsrv');
?>
</em>
            </th>
            <td>
                <label for="wprsrv-reservable-allow-overlapping">
                    <input type="checkbox" name="wprsrv[reservable_overlapping_days]" <?php 
echo $reservable->allowsOverlappingReservations() ? 'checked' : '';
?>
 id="wprsrv-reservable-allow-overlapping">
                    <?php 
_e('Allow overlapping reservation days', 'wprsrv');
?>
                </label>
            </td>
        </tr>

        <tr>
            <th class="wprsrv-mainlabel" scope="row">
                <label for="wprsrv-reservable-disabled-days"><?php 
_ex('Disabled days', 'reservable metabox form', 'wprsrv');
?>
</label>