public function testCreatingReservation() { $this->generateReservables(); $reservable = $this->generatedReservables[0]; $reservationData = ['post_type' => 'reservation', 'post_title' => 'Test reservation', 'post_status' => 'reservation_pending']; $reservationMeta = ['start_date' => '2016-01-07', 'end_date' => '2016-01-08', 'reserver_email' => '*****@*****.**']; $reservation = Reservation::create($reservationData, $reservationMeta, $reservable); $this->assertInstanceOf(Reservation::class, $reservation); $reservation->accept(); $this->assertTrue($reservation->isAccepted()); }
protected function generateReservations() { if (empty($this->generatedReservables)) { $this->generateReservables(); } $resData = [['post' => ['post_title' => 'Test reservation'], 'meta' => ['start_date' => '2016-01-07', 'end_date' => '2016-01-10', 'reserver_email' => '*****@*****.**', 'user_id' => 1], 'reservable' => $this->generatedReservables[0]], ['post' => ['post_title' => 'Test reservation 2'], 'meta' => ['start_date' => '2016-02-10', 'end_date' => '2016-02-15', 'reserver_email' => '*****@*****.**', 'user_id' => 1], 'reservable' => $this->generatedReservables[array_rand($this->generatedReservables)]]]; foreach ($resData as $reservationData) { $reservation = Reservation::create($reservationData['post'], $reservationData['meta'], $reservationData['reservable']); $this->generatedReservations[] = $reservation; } }
/** * Save reservation status updates in wp-admin. * * @since 0.2.0 * @see:wphook save_post_$post_type * * @param Integer $reservationId Post ID for reservation. * @param \WP_Post $reservationPost Reservation WP_Post object. * @param Boolean $update Is this a new reservation or an update? * * @return void */ public function saveReservationStatuses($reservationId, $reservationPost, $update) { if (!$update) { return; } $reservation = new \Wprsrv\PostTypes\Objects\Reservation($reservationPost); $shouldAccept = isset($_POST['accept-reservation']); $shouldDecline = isset($_POST['decline-reservation']); // Prevent infinite loop. remove_action('save_post_reservation', [$this, 'saveReservationStatuses'], 25); if ($shouldAccept) { $reservation->accept(); } elseif ($shouldDecline) { $reservation->decline(); } // Infinite loop danger over, re-enable. add_action('save_post_reservation', [$this, 'saveReservationStatuses'], 25, 3); }
* * @since 0.1.0 * @return void */ add_action('wp_ajax_wprsrv_decline_reservation', function () { if (!isset($_POST) || !isset($_POST['post_id'])) { echo 1; exit; } $post = $_POST; $postId = $post['post_id']; if (!$postId) { echo 1; exit; } $reservation = new Reservation($postId); $reservation->decline(); $reservation->getReservable()->flushCache(); echo 0; exit; }); /** * AJAX * Flush cache for a reservable. * * @since 0.1.0 * @return void */ add_action('wp_ajax_wprsrv_flush_reservable_cache', function () { if (!isset($_POST) || !isset($_POST['post_id'])) { echo 1;
/** * Validate that the reservation to be exported fits into the export date range. * * @since 0.2.0 * @access protected * * @param \Wprsrv\PostTypes\Objects\Reservation $reservation Reservation to * validate. * * @return Boolean */ protected function reservationIsInDateRange(Reservation $reservation) { if (empty($this->dateRange)) { return true; } if (isset($this->dateRange['start']) && $reservation->getEndDate('Y-m-d') > $this->dateRange['start']) { return false; } if (isset($this->dateRange['end']) && $reservation->getStartDate('Y-m-d') < $this->dateRange['end']) { return false; } return true; }
/** * Create a new reservation from the form. * * @access protected * @since 0.1.0 * @todo Pickle this up to smaller methods and pass some control over to the * reservation object class. * * @param mixed[] $data Data for reservation. * * @return void */ protected function createReservation($data) { $reservable = $this->reservable; $reservation_meta_data = ['reservable_id' => $reservable->ID, 'reserver_email' => $data['wprsrv-reserver-email'], 'reserver_name' => $data['wprsrv-reserver-name']]; if ($reservable->isSingleDay()) { $reservation_meta_data['start_date'] = $data['wprsrv-reservation-date']; $reservation_meta_data['end_date'] = $data['wprsrv-reservation-date']; $reservation_meta_data['reservation_date'] = $data['wprsrv-reservation-date']; } else { $reservation_meta_data['start_date'] = $data['wprsrv-reservation-date-start']; $reservation_meta_data['end_date'] = $data['wprsrv-reservation-date-end']; } if ($reservable->isSingleDay()) { $reservationTitle = [$reservable->post_title, ': ', $reservation_meta_data['start_date'], ', by ', $reservation_meta_data['reserver_email']]; } else { $reservationTitle = [$reservable->post_title, ': ', $reservation_meta_data['start_date'], ' to ', $reservation_meta_data['end_date'], ', by ', $reservation_meta_data['reserver_email']]; } $reservationTitle = implode('', $reservationTitle); $reservation_post_data = ['post_type' => 'reservation', 'post_title' => $reservationTitle, 'post_status' => 'reservation_pending', 'post_content' => $data['wprsrv-reservation-description']]; try { $reservation = Reservation::create($reservation_post_data, $reservation_meta_data, $reservable); } catch (\InvalidArgumentException $iae) { $_POST['reservation_notice'] = _x('The data you gave looked invalid, please check your fields and try again.', 'reservation form error', 'wprsrv'); return; } catch (\Exception $e) { \Wprsrv\wprsrv()->logger->critical('Could not create new reservation: {msg}', ['msg' => print_r($e, true)]); $_POST['reservation_notice'] = _x('Sorry, something went wrong in the reservation system, please try again.', 'reservation form error', 'wprsrv'); return; } if ($reservation instanceof Reservation) { $this->reservation = $reservation; } else { return; } $_POST['reservation_success'] = _x('Thank you for your reservation. You will get a confirmation email in a few moments.', 'reservation form success', 'wprsrv'); }
/** * Handle failed email sends. * * @since 0.1.0 * * @param String $emailType Type of email that failed. * @param ReservationObj $reservation Reservation for which the email failed. * * @return void */ public function emailSendFailed($emailType, $reservation) { $reservation->addNote(sprintf(_x('Reservation email notification failed. Attempted to send a `%s` email.', 'note content for new declined reservation', 'wprsrv'), $emailType)); }