PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.8.16
VikBooking Hotel Booking Engine & PMS v1.8.16
1.8.16 1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 All 37 releases
← All changes | admin/views/calendar/view.html.php +275 -0 1.6.2 → 1.8.16 View file →
@@ -1,0 +1,275 @@
1 +<?php
2 +/**
3 + * @package VikBooking
4 + * @subpackage com_vikbooking
5 + * @author Alessio Gaggii - e4j - Extensionsforjoomla.com
6 + * @copyright Copyright (C) 2018 e4j - Extensionsforjoomla.com. All rights reserved.
7 + * @license GNU General Public License version 2 or later; see LICENSE
8 + * @link https://vikwp.com
9 + */
10 +
11 +defined('ABSPATH') or die('No script kiddies please!');
12 +
13 +// import Joomla view library
14 +jimport('joomla.application.component.view');
15 +
16 +class VikBookingViewCalendar extends JViewVikBooking
17 +{
18 + public function display($tpl = null)
19 + {
20 + // Set the toolbar
21 + $this->addToolBar();
22 +
23 + if (!JFactory::getUser()->authorise('core.vbo.availability', 'com_vikbooking') && !JFactory::getUser()->authorise('core.vbo.bookings', 'com_vikbooking')) {
24 + VBOHttpDocument::getInstance()->close(403, JText::translate('JERROR_ALERTNOAUTHOR'));
25 + }
26 +
27 + $cid = VikRequest::getVar('cid', array(0));
28 + $aid = $cid[0];
29 +
30 + $app = JFactory::getApplication();
31 + $dbo = JFactory::getDbo();
32 + $session = JFactory::getSession();
33 +
34 + $rid = $session->get('vbCalRid', '');
35 + $aid = !empty($rid) && empty($aid) ? $rid : $aid;
36 + if (empty($aid)) {
37 + $q = "SELECT `id` FROM `#__vikbooking_rooms` ORDER BY `#__vikbooking_rooms`.`name` ASC";
38 + $dbo->setQuery($q, 0, 1);
39 + $aid = $dbo->loadResult();
40 + }
41 + if (empty($aid)) {
42 + VikError::raiseWarning('', 'No Rooms.');
43 + $app->redirect("index.php?option=com_vikbooking&task=rooms");
44 + $app->close();
45 + }
46 +
47 + $session->set('vbCalRid', $aid);
48 + $pvmode = VikRequest::getString('vmode', '', 'request');
49 + $cur_vmode = $session->get('vikbookingvmode', "");
50 + if (!empty($pvmode) && ctype_digit($pvmode)) {
51 + $session->set('vikbookingvmode', $pvmode);
52 + } elseif (empty($cur_vmode)) {
53 + $session->set('vikbookingvmode', "12");
54 + }
55 + $vmode = (int)$session->get('vikbookingvmode', "12");
56 +
57 + // new reservation ID default status
58 + $new_res_id = 0;
59 +
60 + $q = "SELECT * FROM `#__vikbooking_rooms` WHERE `id`=".$dbo->quote($aid);
61 + $dbo->setQuery($q, 0, 1);
62 + $room = $dbo->loadAssoc();
63 + if (!$room) {
64 + $session->set('vbCalRid', '');
65 + VikError::raiseWarning('', 'No Rooms.');
66 + $app->redirect("index.php?option=com_vikbooking&task=rooms");
67 + $app->close();
68 + }
69 +
70 + $q = "SELECT `id`,`name`,`img`,`units` FROM `#__vikbooking_rooms` ORDER BY `#__vikbooking_rooms`.`name` ASC;";
71 + $dbo->setQuery($q);
72 + $allc = $dbo->loadAssocList();
73 +
74 + $q = "SELECT `id`,`name` FROM `#__vikbooking_gpayments` ORDER BY `#__vikbooking_gpayments`.`name` ASC;";
75 + $dbo->setQuery($q);
76 + $payments = $dbo->loadAssocList();
77 +
78 + /**
79 + * Split stay data for booking.
80 + *
81 + * @since 1.16.0 (J) - 1.6.0 (WP)
82 + */
83 + $split_stay_data = VikRequest::getVar('split_stay_data', array());
84 +
85 + $actnow = time();
86 + $forced_reason = '';
87 + $forcebooking = VikRequest::getInt('forcebooking', 0, 'request');
88 + $pcheckindate = VikRequest::getString('checkindate', '', 'request');
89 + $pcheckoutdate = VikRequest::getString('checkoutdate', '', 'request');
90 + $pcheckinh = VikRequest::getString('checkinh', '', 'request');
91 + $pcheckinm = VikRequest::getString('checkinm', '', 'request');
92 + $pcheckouth = VikRequest::getString('checkouth', '', 'request');
93 + $pcheckoutm = VikRequest::getString('checkoutm', '', 'request');
94 + $pcustdata = VikRequest::getString('custdata', '', 'request');
95 + $pcustmail = VikRequest::getString('custmail', '', 'request');
96 + $padults = VikRequest::getInt('adults', 0, 'request');
97 + $pchildren = VikRequest::getInt('children', 0, 'request');
98 + $psetclosed = VikRequest::getInt('setclosed', 0, 'request');
99 + $psetunitsclosed = VikRequest::getInt('setunitsclosed', 0, 'request');
100 + $num_rooms = VikRequest::getInt('num_rooms', 0, 'request');
101 + $num_rooms = empty($num_rooms) || $num_rooms <= 0 ? 1 : $num_rooms;
102 + $pordstatus = VikRequest::getString('newstatus', '', 'request');
103 + $pordstatus = (empty($pordstatus) || !in_array($pordstatus, array('confirmed', 'standby')) ? 'confirmed' : $pordstatus);
104 + $pordstatus = intval($psetclosed) > 0 ? 'confirmed' : $pordstatus;
105 + $pcountrycode = VikRequest::getString('countrycode', '', 'request');
106 + $pstate = VikRequest::getString('state', '', 'request');
107 + $pt_first_name = VikRequest::getString('t_first_name', '', 'request');
108 + $pt_last_name = VikRequest::getString('t_last_name', '', 'request');
109 + $pphone = VikRequest::getString('phone', '', 'request');
110 + $pcustomer_id = VikRequest::getInt('customer_id', 0, 'request');
111 + $ppaymentid = VikRequest::getString('payment', '', 'request');
112 + $pcust_cost = VikRequest::getFloat('cust_cost', 0, 'request');
113 + $proomcost = VikRequest::getFloat('roomcost', 0, 'request');
114 + $pidprice = VikRequest::getInt('idprice', 0, 'request');
115 + $id_tariff = 0;
116 + $ptotalpnight = VikRequest::getString('totalpnight', 'total', 'request');
117 + $ptaxid = VikRequest::getInt('taxid', 0, 'request');
118 + $pcloseothers = VikRequest::getVar('closeothers', array());
119 +
120 + /**
121 + * Mark the units as closed in case of a regular reservation for no customers.
122 + *
123 + * @since 1.16.6 (J) - 1.6.6 (WP)
124 + */
125 + if ($psetunitsclosed && ($psetclosed || $pordstatus != 'confirmed' || $pcustomer_id)) {
126 + $psetunitsclosed = 0;
127 + }
128 +
129 + $paymentmeth = '';
130 + if (!empty($ppaymentid) && $payments) {
131 + foreach ($payments as $pay) {
132 + if (intval($pay['id']) == intval($ppaymentid)) {
133 + $paymentmeth = $pay['id'].'='.$pay['name'];
134 + break;
135 + }
136 + }
137 + }
138 +
139 + // check if a new booking should be created
140 + if (!empty($pcheckindate) && !empty($pcheckoutdate)) {
141 + // validate basic information submitted
142 + $can_create_res = true;
143 + if (!VikBooking::dateIsValid($pcheckindate) || !VikBooking::dateIsValid($pcheckoutdate)) {
144 + $can_create_res = false;
145 + VikError::raiseWarning('', JText::translate('ERRINVDATESEASON'));
146 + }
147 +
148 + // get stay timestamps
149 + $first = VikBooking::getDateTimestamp($pcheckindate, $pcheckinh, $pcheckinm);
150 + $second = VikBooking::getDateTimestamp($pcheckoutdate, $pcheckouth, $pcheckoutm);
151 +
152 + if ($first >= $second) {
153 + $can_create_res = false;
154 + VikError::raiseWarning('', 'Invalid Dates: current server time is '.date('Y-m-d H:i', $actnow).'. Reservation requested from '.date('Y-m-d H:i', $first).' to '.date('Y-m-d H:i', $second));
155 + }
156 +
157 + // count nights of stay
158 + $secdiff = $second - $first;
159 + $daysdiff = $secdiff / 86400;
160 + if (is_int($daysdiff)) {
161 + if ($daysdiff < 1) {
162 + $daysdiff = 1;
163 + }
164 + } else {
165 + if ($daysdiff < 1) {
166 + $daysdiff = 1;
167 + } else {
168 + $sum = floor($daysdiff) * 86400;
169 + $newdiff = $secdiff - $sum;
170 + $maxhmore = VikBooking::getHoursMoreRb() * 3600;
171 + if ($maxhmore >= $newdiff) {
172 + $daysdiff = floor($daysdiff);
173 + } else {
174 + $daysdiff = ceil($daysdiff);
175 + }
176 + }
177 + }
178 +
179 + if ($can_create_res) {
180 + /**
181 + * Get an instance of the reservation model by injecting all values.
182 + *
183 + * @since 1.16.0 (J) - 1.6.0 (WP)
184 + */
185 + $model_res = VBOModelReservation::getInstance([
186 + 'force_booking' => $forcebooking,
187 + 'split_stay' => $split_stay_data,
188 + 'set_closed' => $psetclosed,
189 + 'units_closed' => $psetunitsclosed,
190 + 'close_others' => $pcloseothers,
191 + 'status' => $pordstatus,
192 + 'checkin' => $first,
193 + 'checkout' => $second,
194 + 'checkin_h' => $pcheckinh,
195 + 'checkin_m' => $pcheckinm,
196 + 'checkout_h' => $pcheckouth,
197 + 'checkout_m' => $pcheckoutm,
198 + 'nights' => $daysdiff,
199 + 'num_rooms' => $num_rooms,
200 + 'adults' => $padults,
201 + 'children' => $pchildren,
202 + 'id_payment' => $paymentmeth,
203 + ])->setCustomer([
204 + 'id' => $pcustomer_id,
205 + 'first_name' => $pt_first_name,
206 + 'last_name' => $pt_last_name,
207 + 'data' => $pcustdata,
208 + 'email' => $pcustmail,
209 + 'country' => $pcountrycode,
210 + 'state' => $pstate,
211 + 'phone' => $pphone,
212 + ])->setRoom([
213 + 'id' => $room['id'],
214 + 'cust_cost' => $pcust_cost,
215 + 'total_or_pnight' => $ptotalpnight,
216 + 'room_cost' => $proomcost,
217 + 'id_price' => $pidprice,
218 + 'id_tax' => $ptaxid,
219 + ]);
220 +
221 + // store the reservation
222 + $model_res->create();
223 +
224 + // get the new booking ID
225 + $res_id = $model_res->getNewBookingID();
226 + if (!$res_id) {
227 + VikError::raiseWarning('', $model_res->getError());
228 + $app->redirect("index.php?option=com_vikbooking&task=calendar");
229 + $app->close();
230 + }
231 +
232 + // check if any action for the Channel Manager should be displayed
233 + $vcm_action = $model_res->getChannelManagerAction();
234 + if ($vcm_action) {
235 + VikError::raiseNotice('', $vcm_action);
236 + }
237 +
238 + if ($pordstatus == 'standby') {
239 + // redirect only if the booking status is pending
240 + $app->enqueueMessage(JText::translate('VBQUICKRESWARNSTANDBY'));
241 + $app->redirect("index.php?option=com_vikbooking&task=editbusy&cid[]=" . $res_id);
242 + $app->close();
243 + }
244 +
245 + // set new reservation ID
246 + $new_res_id = $res_id;
247 + }
248 + }
249 +
250 + $mints = mktime(0, 0, 0, date('m'), 1, date('Y'));
251 + $q = "SELECT `b`.*,`ob`.`idorder`,`o`.`closure` FROM `#__vikbooking_busy` AS `b` LEFT JOIN `#__vikbooking_ordersbusy` `ob` ON `ob`.`idbusy`=`b`.`id` LEFT JOIN `#__vikbooking_orders` `o` ON `o`.`id`=`ob`.`idorder` WHERE `b`.`idroom`=".(int)$room['id']." AND (`b`.`checkin`>=".$mints." OR `b`.`checkout`>=".$mints.") AND `ob`.`idorder` IS NOT NULL;";
252 + $dbo->setQuery($q);
253 + $busy = $dbo->loadAssocList();
254 +
255 + $this->room = $room;
256 + $this->new_res_id = $new_res_id;
257 + $this->allc = $allc;
258 + $this->payments = $payments;
259 + $this->busy = $busy;
260 + $this->vmode = $vmode;
261 +
262 + // Display the template
263 + parent::display($tpl);
264 + }
265 +
266 + /**
267 + * Sets the toolbar
268 + */
269 + protected function addToolBar()
270 + {
271 + JToolBarHelper::title(JText::translate('VBMAINCALTITLE'), 'vikbooking');
272 + JToolBarHelper::cancel( 'canceledorder', JText::translate('VBBACK'));
273 + JToolBarHelper::spacer();
274 + }
275 +}