oids = $oids; return $this; } /** * Sets the type of synchronization for VCM * * @param string $set_sync_type * * @return self */ public function setSyncType($set_sync_type) { $this->sync_type = !in_array($set_sync_type, array('new', 'modify', 'cancel')) ? 'new' : $set_sync_type; return $this; } /** * Method needed to inject the previous/original status of each booking * before making any sort of update. Useful to inform VCM that the booking was * pending (stand-by) to support Request to Book reservations with some channels. * * @param array $orig_statuses array of original booking statuses. * * @return self * * @since 1.14 (J) - 1.4.0 (WP) * @requires VCM >= 1.8.0 */ public function setOriginalStatuses($orig_statuses) { if (empty($orig_statuses)) { return $this; } if (is_scalar($orig_statuses)) { $orig_statuses = [$orig_statuses]; } if (!is_array($orig_statuses)) { return $this; } $this->orig_statuses = $orig_statuses; return $this; } /** * Sets the original booking array * * @param mixed $obooking JSON+URL encoded string or array * @param boolean $decode */ public function setOriginalBooking($obooking, $decode = false) { if (!empty($obooking)) { $original_booking = $decode === true ? json_decode(urldecode($obooking), true) : $obooking; if (is_array($original_booking) && $original_booking) { $this->orig_booking = $original_booking; } } return $this; } /** * Launch the synchronization with VCM */ public function doSync() { if (!is_array($this->oids) || !$this->oids) { $this->setError('oids is empty.'); return $this->result; } if ($this->sync_type == 'new') { foreach ($this->oids as $okey => $oid) { if (empty($oid)) { continue; } $vcm = new SynchVikBooking($oid); $vcm->setSkipCheckAutoSync(); /** * We attempt to inject the previous status of the booking, if set. * For example, bookings that become confirmed could have been in a * pending (stand-by) status, and VCM should be aware of this change * because some channels may need extra actions. * * @since 1.14 (J) - 1.4.0 (WP) * @requires VCM >= 1.8.0 */ if (!empty($this->orig_statuses[$okey]) && method_exists($vcm, 'setBookingPreviousStatus')) { $vcm->setBookingPreviousStatus($this->orig_statuses[$okey]); } $rq_rs = $vcm->sendRequest(); $this->result = $this->result || $rq_rs ? true : $this->result; } } elseif ($this->sync_type == 'modify') { // only one Booking ID per request as the original booking is transmitted in JSON format or as an array if called via PHP execution. if (is_array($this->orig_booking) && $this->orig_booking) { foreach ($this->oids as $okey => $oid) { if (empty($oid)) { continue; } $vcm = new SynchVikBooking($oid); $vcm->setSkipCheckAutoSync(); $vcm->setFromModification($this->orig_booking); $this->result = $vcm->sendRequest(); break; } } else { $this->setError('orig_booking is empty.'); } } elseif ($this->sync_type == 'cancel') { foreach ($this->oids as $okey => $oid) { if (empty($oid)) { continue; } $vcm = new SynchVikBooking($oid); $vcm->setSkipCheckAutoSync(); $vcm->setFromCancellation(['id' => $oid]); $rq_rs = $vcm->sendRequest(); $this->result = $this->result || $rq_rs ? true : $this->result; } } if ($this->result !== true && !$this->getError()) { $this->setError('VCM returned errors'); } return $this->result; } /** * Sets the class error variable * * @param string $err_str */ private function setError($err_str) { $this->error .= (string)$err_str; } /** * Returns the class error variable */ public function getError() { return $this->error; } }