예제 #1
0
 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());
 }
예제 #2
0
 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;
     }
 }
예제 #3
0
파일: Reservation.php 프로젝트: rask/wprsrv
 /**
  * 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);
 }
예제 #4
0
파일: functions.php 프로젝트: rask/wprsrv
 *
 * @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;
예제 #5
0
파일: Exporter.php 프로젝트: rask/wprsrv
 /**
  * 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;
 }
예제 #6
0
 /**
  * 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');
 }
예제 #7
0
파일: Reservation.php 프로젝트: rask/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));
 }