File manager - Edit - /home/verseaumee/royalkarukera/components__9a2a123/com_solidres/controllers/reservationasset.php
Back
<?php /** ------------------------------------------------------------------------ SOLIDRES - Accommodation booking extension for Joomla ------------------------------------------------------------------------ * @author Solidres Team <contact@solidres.com> * @website https://www.solidres.com * @copyright Copyright (C) 2013 - 2019 Solidres. All Rights Reserved. * @license GNU General Public License version 3, or later ------------------------------------------------------------------------ */ defined('_JEXEC') or die; /** * @package Solidres * @subpackage ReservationAsset * @since 0.1.0 */ class SolidresControllerReservationAsset extends JControllerLegacy { private $context; protected $reservationDetails; public function __construct($config = array()) { $config['model_path'] = JPATH_COMPONENT_ADMINISTRATOR . '/models'; parent::__construct($config); $this->app = JFactory::getApplication(); $this->context = 'com_solidres.reservation.process'; // $raid is preferred because it does not conflict with core Joomla multilingual feature $this->reservationAssetId = $this->input->getUint('raid'); if (empty($this->reservationAssetId)) { $this->reservationAssetId = $this->input->getUint('id'); } // Get the default currency JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables', 'SolidresTable'); $tableAsset = JTable::getInstance('ReservationAsset', 'SolidresTable'); $tableAsset->load($this->reservationAssetId); $this->reservationData['currency_id'] = $tableAsset->currency_id; $this->app->setUserState($this->context . '.currency_id', $tableAsset->currency_id); $this->app->setUserState($this->context . '.deposit_required', $tableAsset->deposit_required); $this->app->setUserState($this->context . '.deposit_is_percentage', $tableAsset->deposit_is_percentage); $this->app->setUserState($this->context . '.deposit_amount', $tableAsset->deposit_amount); $this->app->setUserState($this->context . '.deposit_by_stay_length', $tableAsset->deposit_by_stay_length); $this->app->setUserState($this->context . '.deposit_include_extra_cost', $tableAsset->deposit_include_extra_cost); $this->app->setUserState($this->context . '.tax_id', $tableAsset->tax_id); $this->app->setUserState($this->context . '.booking_type', $tableAsset->booking_type); if (isset($tableAsset->params)) { $this->app->setUserState($this->context . '.asset_params', json_decode($tableAsset->params, true)); } $this->app->setUserState($this->context . '.origin', JText::_('SR_RESERVATION_ORIGIN_DIRECT')); $this->app->setUserState($this->context . '.asset_category_id', $tableAsset->category_id); $this->app->setUserState($this->context . '.price_includes_tax', $tableAsset->price_includes_tax); $lang = JFactory::getLanguage(); $lang->load('com_solidres_category_' . $tableAsset->category_id, JPATH_COMPONENT); } /** * Method to get a model object, loading it if required. * * @param string $name The model name. Optional. * @param string $prefix The class prefix. Optional. * @param array $config Configuration array for model. Optional. * * @return object The model. * @since 1.5 */ public function &getModel($name = 'ReservationAsset', $prefix = 'SolidresModel', $config = array()) { $model = parent::getModel($name, $prefix, $config); return $model; } public function checkavailability() { $id = $this->input->getUint('id', 0); $itemId = $this->input->getUInt('Itemid', 0); $roomsOccupancyOptions = $this->input->get('room_opt', array(), 'array'); $roomTypeId = $this->input->getUint('room_type_id', 0); $tariffs = $this->app->getUserState($this->context . '.current_selected_tariffs'); $reservationId = $this->app->getUserState($this->context . '.id', 0); $isAmending = $this->app->getUserState($this->context . '.is_amending', false); $canChangeDate = $this->app->getUserState($this->context . '.can_change_dates', false); $model = $this->getModel(); $solidresConfig = JComponentHelper::getParams('com_solidres'); $showPriceWithTax = $solidresConfig->get('show_price_with_tax', 0); if ($reservationId > 0 && $isAmending && !$canChangeDate) { $checkIn = $this->app->getUserState($this->context . '.checkin'); $checkOut = $this->app->getUserState($this->context . '.checkout'); } else { $checkIn = $this->input->get('checkin', '', 'string'); $checkOut = $this->input->get('checkout', '', 'string'); } if (!empty($checkIn) && !empty($checkOut)) { $config = JFactory::getConfig(); $timezone = new DateTimeZone($config->get('offset')); $checkIn = JDate::getInstance($checkIn, $timezone)->format('Y-m-d', true); $checkOut = JDate::getInstance($checkOut, $timezone)->format('Y-m-d', true); $appliedCoupon = $this->app->getUserState($this->context . '.coupon'); if (is_array($appliedCoupon)) { $solidresCoupon = SRFactory::get('solidres.coupon.coupon'); $customerGroupId = SRUtilities::getCustomerGroupId(); $currentDate = JFactory::getDate(date('Y-m-d'), $timezone)->toUnix(); $checkInDate = JFactory::getDate($checkIn, $timezone)->toUnix(); $isValid = $solidresCoupon->isValid($appliedCoupon['coupon_code'], $id, $currentDate, $checkInDate, $customerGroupId); if (!$isValid) { $this->app->setUserState($this->context . '.coupon', null); } } } $this->app->setUserState($this->context . '.checkin', $checkIn); $this->app->setUserState($this->context . '.checkout', $checkOut); $this->app->setUserState($this->context . '.room_opt', $roomsOccupancyOptions); $this->app->setUserState($this->context . '.activeItemId', $itemId > 0 ? $itemId : null); // If user search for a specific room type if ($roomTypeId > 0 && !empty($checkIn) && !empty($checkOut)) { $this->app->setUserState($this->context . '.prioritizing_room_type_id', $roomTypeId); } else { $this->app->setUserState($this->context . '.prioritizing_room_type_id', null); } $model->setState('id', $id); $model->setState('checkin', $checkIn); $model->setState('checkout', $checkOut); $model->setState('country_id', $this->input->get('country_id', 0, 'int')); $model->setState('geo_state_id', $this->input->get('geo_state_id', 0, 'int')); $model->setState('show_price_with_tax', $showPriceWithTax); $model->setState('tariffs', $tariffs); $model->setState('room_opt', $roomsOccupancyOptions); $model->setState('reservation_id', $reservationId); $document = JFactory::getDocument(); $viewType = $document->getType(); $viewName = 'ReservationAsset'; $viewLayout = 'default'; $this->hit($id); $view = $this->getView($viewName, $viewType, '', array('base_path' => $this->basePath, 'layout' => $viewLayout)); $view->setModel($model, true); $view->document = $document; $view->display(); } /** * Increase the hit counter * * @param $pk * * @return void */ public function hit($pk) { $table = JTable::getInstance('ReservationAsset', 'SolidresTable'); $table->hit($pk); } /** * Get the html output according to the room type quantity selection * * This output contains room specific form like adults and children's quantity (including children's ages) as well * as some other information like room preferences like smoking and room's extra items * * @return string */ public function getRoomTypeForm() { $solidresRoomType = SRFactory::get('solidres.roomtype.roomtype'); $params = JComponentHelper::getParams('com_solidres'); $showTaxIncl = $params->get('show_price_with_tax', 0); $childMaxAge = $params->get('child_max_age_limit', 17); $confirmationState = $params->get('confirm_state', 5); $roomTypeId = $this->input->get('rtid', 0, 'int'); $raId = $this->input->get('raid', 0, 'int'); $tariffId = $this->input->get('tariffid', 0, 'int'); $adjoiningLayer = $this->input->get('adjoininglayer', 0, 'int'); $quantity = $this->input->get('quantity', 0, 'int'); $bookingType = $solidresRoomType->getBookingType($roomTypeId); $modelRoomType = $this->getModel('RoomType'); $modelTariff = $this->getModel('Tariff'); $roomType = $modelRoomType->getItem($roomTypeId); $tariff = $modelTariff->getItem($tariffId); $modelExtras = $this->getModel('Extras', 'SolidresModel', array('ignore_request' => true)); $modelExtras->setState('filter.room_type_id', $roomTypeId); $modelExtras->setState('filter.state', 1); $modelExtras->setState('filter.show_price_with_tax', $showTaxIncl); $modelExtras->setState('list.start', 0); $modelExtras->setState('list.limit', 0); $extras = $modelExtras->getItems(); // Early arrival checking $checkin = $this->app->getUserState($this->context . '.checkin'); $checkout = $this->app->getUserState($this->context . '.checkout'); $allowedEarlyArrivalExtraIds = array(); if (is_array($extras)) { $advancedExtra = SRPlugin::isEnabled('advancedextra'); $nowDateFormatted = JHtml::_('date', 'now', 'Y-m-d'); foreach ($extras as $i => $extra) { $extraParams = new Joomla\Registry\Registry($extra->params); $enableAvailableDates = $extraParams->get('enable_available_dates', 0); if ($advancedExtra && $enableAvailableDates) { $availableDates = json_decode($extraParams->get('available_dates', '{}'), true) ?: []; try { $checkinDate = JFactory::getDate($checkin); $checkoutDate = JFactory::getDate($checkout); $isAvailable = true; while($checkinDate->toUnix() <= $checkoutDate->toUnix()) { if (!in_array($checkinDate->format('Y-m-d'), $availableDates)) { $isAvailable = false; break; } $checkinDate->add(new DateInterval('P1D')); } if (!$isAvailable) { unset($extras[$i]); continue; } } catch (Exception $e) { } } if (8 != $extra->charge_type) { continue; } $distance = $extraParams->get('previous_checkout_distance', 1); $newCheckin = (new DateTime($checkin))->modify("-$distance day"); $availableRooms = $solidresRoomType->getListAvailableRoom($roomTypeId, $newCheckin->format('Y-m-d'), $checkout, $bookingType, 0, $confirmationState); $totalRoomTypeAvailableRooms = is_array($availableRooms) ? count($availableRooms) : 0; $extra->allow_early_arrival = false; if ($totalRoomTypeAvailableRooms >= $quantity) { $extra->allow_early_arrival = true; $allowedEarlyArrivalExtraIds[] = $extra->id; } } $extras = array_values($extras); } $this->app->setUserState($this->context . '.allowed_early_arrival_extra_ids', $allowedEarlyArrivalExtraIds); $this->reservationDetails = $this->app->getUserState($this->context); $form = SRLayoutHelper::getInstance(); $displayData = array( 'assetId' => $raId, 'roomTypeId' => $roomTypeId, 'tariffId' => $tariffId, 'quantity' => $quantity, 'roomType' => $roomType, 'reservationDetails' => $this->reservationDetails, 'extras' => $extras, 'childMaxAge' => $childMaxAge, 'tariff' => $tariff, 'adjoiningLayer' => $adjoiningLayer, ); echo $form->render( 'asset.roomtypeform' . ((defined('SR_LAYOUT_STYLE') && SR_LAYOUT_STYLE != '') ? '_' . SR_LAYOUT_STYLE : ''), $displayData ); $this->app->close(); } /** * Get the availability calendar * * The number of months to be displayed in configured in component's options * * @return string */ public function getAvailabilityCalendar() { JLoader::register('SRCalendar', SRPATH_LIBRARY . '/utilities/calendar.php'); $roomTypeId = $this->input->get('id', 0, 'int'); $params = JComponentHelper::getParams('com_solidres'); $weekStartDay = $params->get('week_start_day', 1) == 1 ? 'monday' : 'sunday'; $calendarStyle = $params->get('availability_calendar_style', 1) == 1 ? 'modern' : 'legacy'; $calendar = new SRCalendar(array('start_day' => $weekStartDay, 'style' => $calendarStyle, 'room_type_id' => $roomTypeId)); $html = ''; $html .= '<span class="legend-busy"></span> ' . JText::_('SR_AVAILABILITY_CALENDAR_BUSY'); $html .= ' <span class="legend-restricted"></span> ' . JText::_('SR_AVAILABILITY_CALENDAR_RESTRICTED'); $period = $params->get('availability_calendar_month_number', 6); for ($i = 0; $i < $period; $i++) { if ($i % 3 == 0 && $i == 0) { $html .= '<div class="' . SR_UI_GRID_CONTAINER . '">'; } else if ($i % 3 == 0) { $html .= '</div><div class="' . SR_UI_GRID_CONTAINER . '">'; } $year = date('Y', strtotime('first day of this month +' . $i . ' month')); $month = date('n', strtotime('first day of this month +' . $i . ' month')); $html .= '<div class="' . SR_UI_GRID_COL_4 . '">' . $calendar->generate($year, $month) . '</div>'; } echo $html; $this->app->close(); } public function getCheckInOutForm() { $solidresConfig = JComponentHelper::getParams('com_solidres'); $systemConfig = JFactory::getConfig(); $datePickerMonthNum = $solidresConfig->get('datepicker_month_number', 3); $weekStartDay = $solidresConfig->get('week_start_day', 1); $dateFormat = $solidresConfig->get('date_format', 'd-m-Y'); $tzoffset = $systemConfig->get('offset'); $tariffId = $this->input->getUInt('tariff_id', 0); $roomtypeId = $this->input->getUInt('roomtype_id', 0); $assetId = $this->input->getUInt('id', 0); $itemId = $this->input->getUInt('Itemid', 0); $modelTariff = JModelLegacy::getInstance('Tariff', 'SolidresModel', array('ignore_request' => true)); $tariff = $modelTariff->getItem($tariffId); $this->reservationDetails = $this->app->getUserState($this->context); $timezone = new DateTimeZone($tzoffset); $checkin = isset($this->reservationDetails->checkin) ? $this->reservationDetails->checkin : null; $checkout = isset($this->reservationDetails->checkout) ? $this->reservationDetails->checkout : null; $currentSelectedTariffs = $this->app->getUserState($this->context . '.current_selected_tariffs'); $currentSelectedTariffs[$roomtypeId][] = $tariffId; $this->app->setUserState($this->context . '.current_selected_tariffs', $currentSelectedTariffs); $jsDateFormat = SRUtilities::convertDateFormatPattern($dateFormat); $bookingType = $this->app->getUserState($this->context . '.booking_type'); $form = SRLayoutHelper::getInstance(); $displayData = array( 'tariff' => $tariff, 'assetId' => $assetId, 'roomTypeId' => $roomtypeId, 'checkIn' => $checkin, 'checkOut' => $checkout, 'minDaysBookInAdvance' => $solidresConfig->get('min_days_book_in_advance', 0), 'maxDaysBookInAdvance' => $solidresConfig->get('max_days_book_in_advance', 0), 'minLengthOfStay' => $solidresConfig->get('min_length_of_stay', 1), 'timezone' => $timezone, 'itemId' => $itemId, 'datePickerMonthNum' => $datePickerMonthNum, 'weekStartDay' => $weekStartDay, 'dateFormat' => $dateFormat, // default format d-m-y 'jsDateFormat' => $jsDateFormat, 'bookingType' => $bookingType, 'enableAutoScroll' => $solidresConfig->get('enable_auto_scroll', 1) ); echo $form->render( 'asset.checkinoutform', $displayData ); $this->app->close(); } public function getCheckInOutFormChangeDates() { $solidresConfig = JComponentHelper::getParams('com_solidres'); $systemConfig = JFactory::getConfig(); $tariffId = $this->input->getUInt('tariff_id', 0); $roomtypeId = $this->input->getUInt('roomtype_id', 0); $assetId = $this->input->getUInt('id', 0); $itemId = $this->input->getUInt('Itemid', 0); $return = $this->input->getString('return', ''); $reservationId = $this->input->getUInt('reservation_id', 0); $modelTariff = JModelLegacy::getInstance('Tariff', 'SolidresModel', array('ignore_request' => true)); $tariff = $modelTariff->getItem($tariffId); $this->reservationDetails = $this->app->getUserState($this->context); $tzoffset = $systemConfig->get('offset'); $timezone = new DateTimeZone($tzoffset); /*$checkin = isset($this->reservationDetails->checkin) ? $this->reservationDetails->checkin : NULL; $checkout = isset($this->reservationDetails->checkout) ? $this->reservationDetails->checkout : NULL;*/ $checkin = $this->input->getString('checkin', ''); $checkout = $this->input->getString('checkout', ''); $datePickerMonthNum = $solidresConfig->get('datepicker_month_number', 3); $weekStartDay = $solidresConfig->get('week_start_day', 1); $currentSelectedTariffs = $this->app->getUserState($this->context . '.current_selected_tariffs'); $currentSelectedTariffs[$roomtypeId][] = $tariffId; $this->app->setUserState($this->context . '.current_selected_tariffs', $currentSelectedTariffs); JLoader::register('SRUtilities', SRPATH_LIBRARY . '/utilities/utilities.php'); $dateFormat = $solidresConfig->get('date_format', 'd-m-Y'); $jsDateFormat = SRUtilities::convertDateFormatPattern($dateFormat); $form = SRLayoutHelper::getInstance(); $displayData = array( 'tariff' => $tariff, 'assetId' => $assetId, 'checkin' => $checkin, 'checkout' => $checkout, 'minDaysBookInAdvance' => $solidresConfig->get('min_days_book_in_advance', 0), 'maxDaysBookInAdvance' => $solidresConfig->get('max_days_book_in_advance', 0), 'minLengthOfStay' => $solidresConfig->get('min_length_of_stay', 1), 'timezone' => $timezone, 'itemId' => $itemId, 'reservationId' => $reservationId, 'datePickerMonthNum' => $datePickerMonthNum, 'weekStartDay' => $weekStartDay, 'dateFormat' => $dateFormat, // default format d-m-y 'jsDateFormat' => $jsDateFormat, 'return' => $return ); echo $form->render('asset.changedates', $displayData); $this->app->close(); } public function startOver() { $id = $this->input->getUint('id'); $solidresConfig = JComponentHelper::getParams('com_solidres'); $enableAutoScroll = $solidresConfig->get('enable_auto_scroll', 1); $this->app->setUserState($this->context . '.room', null); $this->app->setUserState($this->context . '.extra', null); $this->app->setUserState($this->context . '.guest', null); /*$this->app->setUserState($this->context . '.payment', NULL);*/ $this->app->setUserState($this->context . '.discount', null); $this->app->setUserState($this->context . '.deposit', null); $this->app->setUserState($this->context . '.coupon', null); $this->app->setUserState($this->context . '.token', null); $this->app->setUserState($this->context . '.cost', null); $this->app->setUserState($this->context . '.checkin', null); $this->app->setUserState($this->context . '.checkout', null); $this->app->setUserState($this->context . '.room_type_prices_mapping', null); $this->app->setUserState($this->context . '.selected_room_types', null); $this->app->setUserState($this->context . '.reservation_asset_id', null); $this->app->setUserState($this->context . '.current_selected_tariffs', null); $this->app->setUserState($this->context . '.room_opt', null); $this->setRedirect(JRoute::_('index.php?option=com_solidres&view=reservationasset&id=' . $id . ($enableAutoScroll ? '#form' : ''), false)); } }
| ver. 1.4 |
Github
|
.
| PHP 8.5.7 | Generation time: 0 |
proxy
|
phpinfo
|
Settings