File manager - Edit - /home/verseaumee/ptitsanes/plugins/extension/solidres/solidres.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; JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_solidres/models', 'SolidresModel'); /** * Solidres Extension Plugin * * @package Solidres * @subpackage Extension.Plugin * @since 1.5 */ class plgExtensionSolidres extends JPlugin { protected $autoloadLanguage = true; /** * The confirmation reservation status * * @var int */ private $confirmationState; /** * Constructor * * @param object &$subject The object to observe * @param array $config An optional associative array of configuration settings. * Recognized key values include 'name', 'group', 'params', 'language' * (this list is not meant to be comprehensive). * * @since 1.5 */ public function __construct(&$subject, $config = array()) { parent::__construct($subject, $config); $this->solidresParams = JComponentHelper::getParams('com_solidres'); $this->confirmationState = $this->solidresParams->get('confirm_state', 5); } /** * Allow to processing of Reservation data after it is saved. * * @param object $data * @param object $table * @param boolean $isNew * @param object $model * * @since 1.6 */ function onReservationAfterSave($data, $table, $isNew, $model) { JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_solidres/tables'); $dbo = JFactory::getDbo(); $srReservation = SRFactory::get('solidres.reservation.reservation'); $srRoomType = SRFactory::get('solidres.roomtype.roomtype'); $query = $dbo->getQuery(true); $reservationId = $table->id; $roomTypePricesMapping = $model->getState($model->getName() . '.room_type_prices_mapping', null); $tariffTable = JTable::getInstance('Tariff', 'SolidresTable'); $roomTable = JTable::getInstance('Room', 'SolidresTable'); $reservationMeta = []; // First if this is a reservation edit, we have to clear the old records first if (!$isNew) { $query->clear(); $query->select('rrx.*, r.room_type_id') ->from($dbo->quoteName('#__sr_reservation_room_xref', 'rrx')) ->leftJoin($dbo->quoteName('#__sr_rooms', 'r') . ' ON r.id = rrx.room_id') ->where('reservation_id = ' . $reservationId); $reservationRooms = $dbo->setQuery($query)->loadAssocList(); $data['previous_data']['rooms'] = $reservationRooms; $query->clear(); $query->delete() ->from($dbo->quoteName('#__sr_reservation_room_details')); // Delete all details of all rooms in this reservations $query->where('reservation_room_id IN (SELECT id FROM ' . $dbo->quoteName('#__sr_reservation_room_xref') . ' WHERE reservation_id = ' . $reservationId . ' )'); $dbo->setQuery($query)->execute(); $query->clear(); $query->delete() ->from($dbo->quoteName('#__sr_reservation_room_xref')) ->where('reservation_id = ' . $reservationId); $dbo->setQuery($query); $dbo->execute(); $query->clear(); $query->delete() ->from($dbo->quoteName('#__sr_reservation_room_extra_xref')) ->where('reservation_id = ' . $reservationId); $dbo->setQuery($query); $dbo->execute(); } // Insert new records $isReservationFailed = false; if (isset($data['room_types']) && is_array($data['room_types'])) { foreach ($data['room_types'] as $roomTypeId => $bookedTariffs) { // If this index not exists, it means this reservation is created by guest if (!isset($data['reservation_room_select'])) { // Find a list of available rooms $availableRoomList = $srRoomType->getListAvailableRoom($roomTypeId, $data['checkin'], $data['checkout'], $table->booking_type, 0, $this->confirmationState); if (empty($availableRoomList)) { $isReservationFailed = true; break; } } foreach ($bookedTariffs as $tariffId => $rooms) { foreach ($rooms as $roomIndex => $room) { // If this index not exists, it means this reservation is created by guest if (!isset($data['reservation_room_select'])) { // Pick the first and assign it $pickedRoom = array_shift($availableRoomList); } else { // In this case, the room index is the room ID $roomTable->load($roomIndex); $pickedRoom = $roomTable; } // Get the tariff info $tariffTable->load($tariffId); // Prepare meta data $reservationMeta['reserved_rooms'][] = $pickedRoom->label; $room['room_id'] = $pickedRoom->id; $room['room_label'] = $pickedRoom->label; if (isset($roomTypePricesMapping)) // For normal booking (both front end and back end) { if ($roomTypePricesMapping[$roomTypeId][$tariffId][$roomIndex]['total_discount'] > 0) { $room['room_price'] = $roomTypePricesMapping[$roomTypeId][$tariffId][$roomIndex]['total_price_tax_incl_discounted']; $room['room_price_tax_incl'] = $roomTypePricesMapping[$roomTypeId][$tariffId][$roomIndex]['total_price_tax_incl_discounted']; $room['room_price_tax_excl'] = $roomTypePricesMapping[$roomTypeId][$tariffId][$roomIndex]['total_price_tax_excl_discounted']; } else { $room['room_price'] = $roomTypePricesMapping[$roomTypeId][$tariffId][$roomIndex]['total_price_tax_incl']; $room['room_price_tax_incl'] = $roomTypePricesMapping[$roomTypeId][$tariffId][$roomIndex]['total_price_tax_incl']; $room['room_price_tax_excl'] = $roomTypePricesMapping[$roomTypeId][$tariffId][$roomIndex]['total_price_tax_excl']; } } $room['tariff_id'] = $tariffId > 0 ? $tariffId : null; $room['tariff_title'] = !empty($tariffTable->title) ? $tariffTable->title : ''; $room['tariff_description'] = !empty($tariffTable->description) ? $tariffTable->description : ''; $srReservation->storeRoom($reservationId, $room); // Insert new records for extras per room if (isset($room['extras'])) { foreach ($room['extras'] as $extraId => $extraDetails) { if (isset($extraDetails['quantity'])) { $srReservation->storeExtra($reservationId, $room['room_id'], $room['room_label'], $extraId, $extraDetails['name'], $extraDetails['quantity'], $extraDetails['total_extra_cost_tax_incl']); } else { $srReservation->storeExtra($reservationId, $room['room_id'], $room['room_label'], $extraId, $extraDetails['name'], null, $extraDetails['total_extra_cost_tax_incl']); } } } } } } } if ($isReservationFailed) { $noRoomReservationStatus = $this->solidresParams->get('default_reservation_no_room_state', 4); $table->state = $noRoomReservationStatus; $table->check(); $table->store(); $model->setState($model->getName() . '.save_failed_reasons', array('RoomNotAvailable')); } // Store extra items (Per booking) if (!$isNew) { $query->clear(); $query->delete()->from($dbo->quoteName('#__sr_reservation_extra_xref'))->where('reservation_id = ' . $reservationId); $dbo->setQuery($query); $dbo->execute(); } if (isset($data['extras'])) { foreach ($data['extras'] as $extraId => $extraDetails) { $reservationExtraData = array( 'reservation_id' => $reservationId, 'extra_id' => $extraId, 'extra_name' => $extraDetails['name'], 'extra_quantity' => (isset($extraDetails['quantity']) ? $extraDetails['quantity'] : null), 'extra_price' => $extraDetails['total_extra_cost_tax_incl'] ); $tableReservationExtra = JTable::getInstance('ReservationExtra', 'SolidresTable'); $tableReservationExtra->bind($reservationExtraData); $tableReservationExtra->check(); $tableReservationExtra->store(); $tableReservationExtra->reset(); } } // Update the quantity of coupon if ($isNew) { if (isset($data['coupon_id']) && $data['coupon_id'] > 0) { $tableCoupon = JTable::getInstance('Coupon', 'SolidresTable'); $tableCoupon->load($data['coupon_id']); if (!is_null($tableCoupon->quantity) && $tableCoupon->quantity > 0) { $tableCoupon->quantity -= 1; $tableCoupon->check(); $tableCoupon->store(); $tableCoupon->reset(); } } } // Store meta data if (!empty($reservationMeta)) { $table->reservation_meta = json_encode($reservationMeta); $table->check(); $table->store(); } // Run event JPluginHelper::importPlugin('solidres'); JFactory::getApplication()->triggerEvent('onReservationAfterSaveComplete', array($data, $table, $isNew, $model)); } /*function onReservationAssetBeforeSave($data, $table, $isNew) {}*/ /** * Allow to processing of ReservationAsset data after it is saved. * * @param object $data The data representing the ReservationAsset. * @param object $table * @param boolean $result * @param boolean $isNew True is this is new data, false if it is existing data. * * @throws Exception * @return boolean * @since 1.6 */ public function onReservationAssetAfterSave($data, $table, $result, $isNew) { $dbo = JFactory::getDbo(); $query = $dbo->getQuery(true); // Process extra fields if ($table->id && $result && isset($data['reservationasset_extra_fields']) && (count($data['reservationasset_extra_fields']))) { try { $query->clear(); $query->delete()->from($dbo->quoteName('#__sr_reservation_asset_fields')); $query->where('reservation_asset_id = ' . $table->id); $query->where("field_key LIKE 'reservationasset_extra_fields.%'"); $dbo->setQuery($query); if (!$dbo->execute()) { throw new Exception($dbo->getErrorMsg()); } $tuples = array(); $order = 1; foreach ($data['reservationasset_extra_fields'] as $k => $v) { $tuples[] = '(' . $table->id . ', ' . $dbo->quote('reservationasset_extra_fields.' . $k) . ', ' . $dbo->quote($v) . ', ' . $order++ . ')'; } $dbo->setQuery('INSERT INTO ' . $dbo->quoteName('#__sr_reservation_asset_fields') . ' VALUES ' . implode(', ', $tuples)); if (!$dbo->execute()) { throw new Exception($dbo->getErrorMsg()); } } catch (JException $e) { $this->_subject->setError($e->getMessage()); return false; } } // end of extra field processing // Process Paylater's payment fields $solidresConfig = new SRConfig(array('scope_id' => $table->id, 'data_namespace' => 'payments/paylater')); $solidresConfig->set(array( 'paylater_enabled' => $data['payments']['paylater_enabled'], 'paylater_is_default' => $data['payments']['paylater_is_default'], 'paylater_frontend_message' => $data['payments']['paylater_frontend_message'], 'paylater_base_rate' => $data['payments']['paylater_base_rate'], 'paylater_base_rate_value' => $data['payments']['paylater_base_rate_value'], )); // Process BankWire's payment fields $solidresConfig = new SRConfig(array('scope_id' => $table->id, 'data_namespace' => 'payments/bankwire')); $solidresConfig->set(array( 'bankwire_enabled' => $data['payments']['bankwire_enabled'], 'bankwire_is_default' => $data['payments']['bankwire_is_default'], 'bankwire_frontend_message' => $data['payments']['bankwire_frontend_message'], 'bankwire_accountname' => $data['payments']['bankwire_accountname'], 'bankwire_accountdetails' => $data['payments']['bankwire_accountdetails'], 'bankwire_base_rate' => $data['payments']['bankwire_base_rate'], 'bankwire_base_rate_value' => $data['payments']['bankwire_base_rate_value'], )); // End of processing payment fields } /** * Allow to processing of unit data after it is saved. * * @param object $data The data representing the unit. * @param object $table * @param boolean $isNew True is this is new data, false if it is existing data. * * @throws Exception * @return void * @since 1.6 */ public function onRoomTypeAfterSave($data, $table, $isNew) { $dbo = JFactory::getDbo(); $query = $dbo->getQuery(true); $srRoomType = SRFactory::get('solidres.roomtype.roomtype'); $nullDate = substr($dbo->getNullDate(), 0, 10); $context = 'com_solidres.edit.roomtype'; // == Processing tariff/prices == // // Check the current currency_id of this roomtype's reservation asset. $query->clear(); $query->select('currency_id'); $query->from($dbo->quoteName('#__sr_reservation_assets')); $query->where('id = ' . (int) $data['reservation_asset_id']); $currencyId = $dbo->setQuery($query)->loadResult(); // Store the default tariff if (isset($data['default_tariff']) && is_array($data['default_tariff'])) { $tariffId = key($data['default_tariff']); $tariffData = array( 'id' => $tariffId > 0 ? $tariffId : null, 'currency_id' => $currencyId, 'customer_group_id' => null, 'valid_from' => $nullDate, 'valid_to' => $nullDate, 'room_type_id' => $table->id, 'title' => $data['standard_tariff_title'], 'description' => $data['standard_tariff_description'], 'd_min' => null, 'd_max' => null, 'p_min' => null, 'p_max' => null, 'type' => 0, // Default is per room per night 'limit_checkin' => '', 'state' => 1 ); foreach ($data['default_tariff'][$tariffId] as $detailId => $detailInfo) { foreach ($detailInfo as $day => $price) { $tariffData['details']['per_room'][$day]['id'] = $detailId > 0 ? $detailId : null; $tariffData['details']['per_room'][$day]['price'] = $price; $tariffData['details']['per_room'][$day]['w_day'] = $day; $tariffData['details']['per_room'][$day]['guest_type'] = null; $tariffData['details']['per_room'][$day]['from_age'] = null; $tariffData['details']['per_room'][$day]['to_age'] = null; } } $tariffModel = JModelLegacy::getInstance('Tariff', 'SolidresModel', array('ignore_request' => true)); $tariffModel->save($tariffData); } // == Processing tariff/prices == // $query->clear(); $query->delete($dbo->quoteName('#__sr_room_type_coupon_xref'))->where('room_type_id = ' . $dbo->quote($table->id)); $dbo->setQuery($query); $result = $dbo->execute(); if (!$result) { JFactory::getApplication()->enqueueMessage('plgExtensionSolidres::onRoomTypeAfterSave: Delete from ' . $dbo->quoteName('#__sr_room_type_coupon_xref') . ' failure', 'warning'); } if (isset($data['coupon_id']) && count($data['coupon_id'])) { foreach ($data['coupon_id'] as $value) { $srRoomType->storeCoupon($table->id, $value); } } $query->clear(); $query->delete($dbo->quoteName('#__sr_room_type_extra_xref'))->where('room_type_id = ' . $dbo->quote($table->id)); $dbo->setQuery($query); $result = $dbo->execute(); if (!$result) { JFactory::getApplication()->enqueueMessage('plgExtensionSolidres::onRoomTypeAfterSave: Delete from ' . $dbo->quoteName('#__sr_room_type_extra_xref') . ' failure', 'warning'); } if (isset($data['extra_id']) && count($data['extra_id'])) { foreach ($data['extra_id'] as $value) { $srRoomType->storeExtra($table->id, $value); } } if (isset($data['rooms']) && count($data['rooms'])) { foreach ($data['rooms'] as $value) { if ($value['id'] == 'new' && !empty($value['label'])) { $srRoomType->storeRoom($table->id, $value['label']); } else if ($value['id'] > 0 && !empty($value['label'])) { $srRoomType->storeRoom($table->id, $value['label'], $value['id']); } } } // Process extra fields if ($table->id && $result && isset($data['roomtype_custom_fields']) && (count($data['roomtype_custom_fields']))) { try { $query->clear(); $query->delete()->from($dbo->quoteName('#__sr_room_type_fields')); $query->where('room_type_id = ' . $table->id); $query->where("field_key LIKE 'roomtype_custom_fields.%'"); $dbo->setQuery($query); if (!$dbo->execute()) { throw new Exception($dbo->getErrorMsg()); } $tuples = array(); $order = 1; foreach ($data['roomtype_custom_fields'] as $k => $v) { $tuples[] = '(' . $table->id . ', ' . $dbo->quote('roomtype_custom_fields.' . $k) . ', ' . $dbo->quote($v) . ', ' . $order++ . ')'; } $dbo->setQuery('INSERT INTO ' . $dbo->quoteName('#__sr_room_type_fields') . ' VALUES ' . implode(', ', $tuples)); if (!$dbo->execute()) { throw new Exception($dbo->getErrorMsg()); } } catch (JException $e) { $this->_subject->setError($e->getMessage()); return false; } } // If this room type is a result of copying, copy complex tariffs $isCopying = JFactory::getApplication()->getUserState($context . '.is_copying_room_type', false); if ($isCopying) { $isCopyingFrom = JFactory::getApplication()->getUserState($context . '.is_copying_room_type_from', false); $query->clear(); $query->select('id')->from($dbo->quoteName('#__sr_tariffs'))->where('room_type_id = ' . (int) $isCopyingFrom) ->where('valid_from != ' . $dbo->quote('0000-00-00')) ->where('valid_to != ' . $dbo->quote('0000-00-00')); $copiedTariffs = $dbo->setQuery($query)->loadObjectList(); foreach ($copiedTariffs as $copiedTariff) { $tariffModel = JModelLegacy::getInstance('Tariff', 'SolidresModel', array('ignore_request' => true)); $copiedTariffData = get_object_vars($tariffModel->getItem($copiedTariff->id)); $copiedTariffData['room_type_id'] = $table->id; $copiedTariffData['id'] = null; if ($copiedTariffData['mode'] == 1) { $copiedTariffData['details'] = json_decode(json_encode($copiedTariffData['details']), true); if (isset($copiedTariffData['details']) && is_array($copiedTariffData['details'])) { foreach ($copiedTariffData['details'] as $type => $months) { $flatten = array(); foreach ($months as $month => $dates) { $flatten = array_merge($flatten, $dates); } $copiedTariffData['details'][$type] = $flatten; } } } foreach ($copiedTariffData['details'] as $tariffType => &$details) { foreach ($details as &$detail) { $detail = (array) $detail; $detail['id'] = null; } } $tariffModel->save($copiedTariffData); } JFactory::getApplication()->setUserState($context . '.is_copying_room_type', false); JFactory::getApplication()->setUserState($context . '.is_copying_room_type_from', false); } } /** * @param JForm $form The form to be altered. * @param array $data The associated data for the form. * * @return boolean * @since 1.6 */ public function onReservationAssetPrepareForm($form, $data) { if (!($form instanceof JForm)) { $this->_subject->setError('JERROR_NOT_A_FORM'); return false; } // Check we are manipulating a valid form. if (!in_array($form->getName(), array('com_solidres.reservationasset'))) { return true; } // Add the registration fields to the form. JForm::addFormPath(__DIR__ . '/fields'); $form->loadFile('reservationasset', false); // Toggle whether the checkin time field is required. if ($this->params->get('param_reservation_asset_checkin_time', 1) > 0) { $form->setFieldAttribute('checkin_time', 'required', $this->params->get('param_reservation_asset_checkin_time') == 2, 'reservationasset_extra_fields'); } else { $form->removeField('checkin_time', 'reservationasset_extra_fields'); } // Toggle whether the checkout time field is required. if ($this->params->get('param_reservation_asset_checkout_time', 1) > 0) { $form->setFieldAttribute('checkout_time', 'required', $this->params->get('param_reservation_asset_checkout_time') == 2, 'reservationasset_extra_fields'); } else { $form->removeField('checkout_time', 'reservationasset_extra_fields'); } // Toggle whether the cancellation prepayment field is required. if ($this->params->get('param_reservation_asset_cancellation_prepayment', 1) > 0) { $form->setFieldAttribute('cancellation_prepayment', 'required', $this->params->get('param_reservation_asset_cancellation_prepayment') == 2, 'reservationasset_extra_fields'); } else { $form->removeField('cancellation_prepayment', 'reservationasset_extra_fields'); } // Toggle whether the children and extra beds field is required. if ($this->params->get('param_reservation_asset_children_and_extra_beds', 1) > 0) { $form->setFieldAttribute('children_and_extra_beds', 'required', $this->params->get('param_reservation_asset_children_and_extra_beds') == 2, 'reservationasset_extra_fields'); } else { $form->removeField('children_and_extra_beds', 'reservationasset_extra_fields'); } // Toggle whether the children and extra beds field is required. if ($this->params->get('param_reservation_asset_pets', 1) > 0) { $form->setFieldAttribute('pets', 'required', $this->params->get('param_reservation_asset_pets') == 2, 'reservationasset_extra_fields'); } else { $form->removeField('pets', 'reservationasset_extra_fields'); } // Toggle whether the facebook field is required. if ($this->params->get('param_reservation_asset_facebook', 1) > 0) { $form->setFieldAttribute('facebook', 'required', $this->params->get('param_reservation_asset_facebook') == 2, 'reservationasset_extra_fields'); } else { $form->removeField('facebook', 'reservationasset_extra_fields'); } // Toggle whether the twitter field is required. if ($this->params->get('param_reservation_asset_twitter', 1) > 0) { $form->setFieldAttribute('twitter', 'required', $this->params->get('param_reservation_asset_twitter') == 2, 'reservationasset_extra_fields'); } else { $form->removeField('twitter', 'reservationasset_extra_fields'); } return true; } /** * @param string $context The context for the data * @param int $data The user id * * @return boolean * @since 1.6 */ public function onReservationAssetPrepareData($context, $data) { // Check we are manipulating a valid form. if (!in_array($context, array('com_solidres.reservationasset'))) { return true; } if (is_object($data)) { $reservationAssetId = isset($data->id) ? $data->id : 0; // Load the custom fields data from the database. $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('field_key, field_value')->from($db->quoteName('#__sr_reservation_asset_fields')); $query->where('reservation_asset_id = ' . (int) $reservationAssetId); $query->where("field_key LIKE 'reservationasset_extra_fields.%'"); $db->setQuery($query); try { $results = $db->loadRowList(); } catch (RuntimeException $e) { $this->_subject->setError($e->getMessage()); return false; } // Merge the custom fields data into current form data $data->reservationasset_extra_fields = array(); foreach ($results as $v) { $k = str_replace('reservationasset_extra_fields.', '', $v[0]); $data->reservationasset_extra_fields[$k] = $v[1]; } // Load the payments config data $solidresConfig = new SRConfig(array('scope_id' => (int) $reservationAssetId)); if (!isset($data->payments)) { $data->payments = null; } $data->payments = array_merge((array) $data->payments, array( 'paylater_enabled' => $solidresConfig->get('payments/paylater/paylater_enabled'), 'paylater_is_default' => $solidresConfig->get('payments/paylater/paylater_is_default'), 'paylater_frontend_message' => $solidresConfig->get('payments/paylater/paylater_frontend_message'), 'paylater_base_rate' => $solidresConfig->get('payments/paylater/paylater_base_rate'), 'paylater_base_rate_value' => $solidresConfig->get('payments/paylater/paylater_base_rate_value'), 'bankwire_enabled' => $solidresConfig->get('payments/bankwire/bankwire_enabled'), 'bankwire_is_default' => $solidresConfig->get('payments/bankwire/bankwire_is_default'), 'bankwire_frontend_message' => $solidresConfig->get('payments/bankwire/bankwire_frontend_message'), 'bankwire_accountname' => $solidresConfig->get('payments/bankwire/bankwire_accountname'), 'bankwire_accountdetails' => $solidresConfig->get('payments/bankwire/bankwire_accountdetails'), 'bankwire_base_rate' => $solidresConfig->get('payments/bankwire/bankwire_base_rate'), 'bankwire_base_rate_value' => $solidresConfig->get('payments/bankwire/bankwire_base_rate_value'), )); } return true; } /** * @param JForm $form The form to be altered. * @param array $data The associated data for the form. * * @return boolean * @since 1.6 */ public function onRoomTypePrepareForm($form, $data) { // Load solidres plugin language if (!($form instanceof JForm)) { $this->_subject->setError('JERROR_NOT_A_FORM'); return false; } // Check we are manipulating a valid form. if (!in_array($form->getName(), array('com_solidres.roomtype'))) { return true; } // Add the registration fields to the form. JForm::addFormPath(__DIR__ . '/fields'); $form->loadFile('roomtype', false); // Toggle whether the checkin time field is required. if ($this->params->get('param_roomtype_room_facilities', 1) > 0) { $form->setFieldAttribute('room_facilities', 'required', $this->params->get('param_roomtype_room_facilities') == 2, 'roomtype_custom_fields'); } else { $form->removeField('room_facilities', 'roomtype_custom_fields'); } // Toggle whether the checkout time field is required. if ($this->params->get('param_roomtype_room_size', 1) > 0) { $form->setFieldAttribute('room_size', 'required', $this->params->get('param_roomtype_room_size') == 2, 'roomtype_custom_fields'); } else { $form->removeField('room_size', 'roomtype_custom_fields'); } // Toggle whether the cancellation prepayment field is required. if ($this->params->get('param_roomtype_bed_size', 1) > 0) { $form->setFieldAttribute('bed_size', 'required', $this->params->get('param_roomtype_bed_size') == 2, 'roomtype_custom_fields'); } else { $form->removeField('bed_size', 'roomtype_custom_fields'); } return true; } /** * @param string $context The context for the data * @param int $data The user id * * @return boolean * @since 1.6 */ public function onRoomTypePrepareData($context, $data) { // Check we are manipulating a valid form. if (!in_array($context, array('com_solidres.roomtype'))) { return true; } if (is_object($data)) { $roomTypeId = isset($data->id) ? $data->id : 0; $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('field_key, field_value')->from($db->quoteName('#__sr_room_type_fields')); $query->where('room_type_id = ' . (int) $roomTypeId); $query->where("field_key LIKE 'roomtype_custom_fields.%'"); $db->setQuery($query); try { $results = $db->loadRowList(); } catch (RuntimeException $e) { $this->_subject->setError($e->getMessage()); return false; } // Merge the profile data. $data->roomtype_custom_fields = array(); foreach ($results as $v) { $k = str_replace('roomtype_custom_fields.', '', $v[0]); $data->roomtype_custom_fields[$k] = $v[1]; } } return true; } /** * Example after save content method * Article is passed by reference, but after the save, so no changes will be saved. * Method is called right after the content is saved * * @param string The context of the content passed to the plugin (added in 1.6) * @param object A JTableContent object * @param bool If the content is just about to be created * @param array Full data of tariff with tariff details included * * @return boolean * @since 1.6 */ public function onTariffAfterSave($context, $table, $isNew, $tariff) { if (!isset($tariff['details'])) { return true; } foreach ($tariff['details'] as $tariffType => $details) { foreach ($details as $detail) { $tariffDetailsTable = JTable::getInstance('TariffDetails', 'SolidresTable'); if (isset($detail['id'])) { $tariffDetailsTable->load($detail['id']); } $detail['tariff_id'] = $table->id; if (($tariff['type'] == 1 || $tariff['type'] == 3) && substr($detail['guest_type'], 0, 5) == 'child') { $detail['from_age'] = $tariff[$detail['guest_type']]['from_age']; $detail['to_age'] = $tariff[$detail['guest_type']]['to_age']; } $tariffDetailsTable->bind($detail); if ($tariffDetailsTable->price == '') { $tariffDetailsTable->price = null; } $tariffDetailsTable->check(); $tariffDetailsTable->store(true); // update null value $tariffDetailsTable->reset(); } } } /** * Hook into reservation state changing event and send outgoing emails * * @param $context * @param $pks * @param $value * @param $oldValue * * @return mixed * * @since 1.8.0 */ public function onReservationChangeState($context, $pks, $value, $oldValue = null) { $solidresConfig = JComponentHelper::getParams('com_solidres'); if ($context != 'com_solidres.changestate' || $solidresConfig->get('send_email_on_reservation_state_change', 1) == 0) { return true; } $acceptedStatuses = $solidresConfig->get('status_trigger_reservation_state_change_email', array(4, 5)); if (!in_array($value, $acceptedStatuses)) { return true; } $solidresReservation = SRFactory::get('solidres.reservation.reservation'); $cancellationState = $solidresConfig->get('cancel_state', 4); // If the reservation's status is changed from any statuses to "Cancelled", send a normal HTML reservation email if ($value == $cancellationState) { return $solidresReservation->sendEmail($pks[0], $value); } else // For other status changes, send a text email to notify user { return $solidresReservation->sendGenericReservationStatusChangeEmail($pks[0]); } } public function onExtraAfterSave($context, $data, $table, $isNew) { $dbo = JFactory::getDbo(); $query = $dbo->getQuery(true); $query->delete($dbo->quoteName('#__sr_extra_coupon_xref'))->where('extra_id = ' . $dbo->quote($table->id)); $dbo->setQuery($query); $result = $dbo->execute(); if (!$result) { JFactory::getApplication()->enqueueMessage('plgExtensionSolidres::onRoomTypeAfterSave: Delete from ' . $dbo->quoteName('#__sr_extra_coupon_xref') . ' failure', 'warning'); } if (isset($data['coupon_id']) && count($data['coupon_id'])) { foreach ($data['coupon_id'] as $value) { $query->clear(); $query->insert($dbo->quoteName('#__sr_extra_coupon_xref')) ->columns(array($dbo->quoteName('extra_id'), $dbo->quoteName('coupon_id'))) ->values((int) $table->id . ',' . (int) $value); $dbo->setQuery($query)->execute(); } } } public function onAjaxSolidres() { JLoader::register('SRWishList', JPATH_ADMINISTRATOR . '/components/com_solidres/helpers/wishlist.php'); JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_solidres/tables'); $app = JFactory::getApplication(); $itemId = (int) $app->input->getUint('itemId'); $scope = $app->input->getString('scope'); $wishList = SRWishList::getInstance($scope); if ($scope == 'experience' && !SRPlugin::isEnabled('experience')) { throw new RuntimeException('The Solidres experience is not enabled.'); } if (strtolower($app->input->getString('type')) == 'add') { if ($scope == 'experience') { JTable::addIncludePath(SRPlugin::getAdminPath('experience') . '/tables'); $itemTable = JTable::getInstance('Experience', 'SolidresTable'); } else { $itemTable = JTable::getInstance('ReservationAsset', 'SolidresTable'); } if ($itemTable->load($itemId)) { $history = $itemTable->getProperties(); $item = $wishList->add($itemId, $history)->load($itemId); $item['history'] = $history; $item['wishListUrl'] = JRoute::_('index.php?option=com_solidres&view=wishlist&scope=' . $scope, false); return json_encode($item); } else { throw new RuntimeException('Item ID ' . $itemId . ' not found'); } } $wishList->clear($itemId); $list = $wishList->load($itemId); return empty($list) ? 0 : count($list); } }
| ver. 1.4 |
Github
|
.
| PHP 8.5.7 | Generation time: 0 |
proxy
|
phpinfo
|
Settings