Esempio n. 1
0
 /**
  * Custom saving logic for reservables.
  *
  * @see self::addHooks()
  * @see:wphook save_post
  * @since 0.1.0
  * @todo Make this method simpler and extract some parts elsewhere.
  *
  * @param Integer $post_id Post ID being saved.
  * @param \WP_Post $post Post being saved.
  * @param Boolean $update Is this an update?
  *
  * @return void
  */
 public function saveReservable($post_id, $post, $update)
 {
     if (wp_is_post_revision($post_id)) {
         return;
     }
     if (get_post_type($post_id) !== 'reservable') {
         return;
     }
     $postData = $_POST;
     if (!isset($postData['wprsrv'])) {
         return;
     }
     $wprsrvData = $postData['wprsrv'];
     $reservable = new ReservableObj($post);
     $keysAvailable = ['reservable_active', 'reservable_singleday', 'reservable_disabled_days', 'reservable_disabled_weekdays', 'reservable_loggedin_only', 'reservable_overlapping_days'];
     // Set null values if not given on update.
     foreach ($keysAvailable as $key) {
         if (array_key_exists($key, $wprsrvData)) {
             continue;
         }
         switch ($key) {
             case 'reservable_active':
                 $reservable->setActive(false);
                 break;
             case 'reservable_singleday':
                 $reservable->setSingleDay(false);
                 break;
             case 'reservable_disabled_days':
                 $reservable->setDisabledDaysAdminData(false);
                 break;
             case 'reservable_disabled_weekdays':
                 $reservable->setDisabledWeekdaysData(false);
                 break;
             case 'reservable_loggedin_only':
                 $reservable->setLoginRequired(false);
                 break;
             case 'reservable_overlapping_days':
                 $reservable->setAllowOverlappingReservations(false);
                 break;
         }
     }
     // Update values with given POST.
     foreach ($wprsrvData as $key => $value) {
         switch ($key) {
             case 'reservable_active':
                 $reservable->setActive($value === 'on' ? true : false);
                 break;
             case 'reservable_singleday':
                 $reservable->setSingleDay($value === 'on' ? true : false);
                 break;
             case 'reservable_disabled_days':
                 $disabled = [];
                 for ($i = 0; $i < count($value['start']); $i++) {
                     if (empty($value['start'][$i])) {
                         continue;
                     }
                     $range = ['start' => $value['start'][$i], 'end' => $value['end'][$i], 'reservation_id' => 0];
                     $disabled[] = $range;
                 }
                 $reservable->setDisabledDaysAdminData($disabled);
                 break;
             case 'reservable_disabled_weekdays':
                 $wdays = array_map(function ($item) {
                     return preg_replace('%[^a-zöäå]%', '', $item);
                 }, $value);
                 $reservable->setDisabledWeekdaysData($wdays);
                 break;
             case 'reservable_loggedin_only':
                 $reservable->setLoginRequired($value === 'on' ? true : false);
                 break;
             case 'reservable_overlapping_days':
                 $reservable->setAllowOverlappingReservations($value === 'on' ? true : false);
                 break;
         }
     }
     // Flush caches on save.
     if ($update) {
         $reservable->flushCache();
     }
     /**
      * Hook fired when a reservable is saved to the database.
      *
      * Allows doing additional saving logic for reservables.
      *
      * @since 0.1.0
      *
      * @param Integer $id The reservable post ID.
      * @param ReservableObj $reservable The reservable object.
      * @param Boolean $update Is this an update or a new reservable?
      */
     do_action('wprsrv/reservable/save', $reservable->ID, $reservable, $update);
 }