🏨 Hotel Booking Enhancements: - Implemented Eagle Booking Advanced Pricing add-on - Added Booking.com-style rate management system - Created professional calendar interface for pricing - Integrated deals and discounts functionality 💰 Advanced Pricing Features: - Dynamic pricing models (per room, per person, per adult) - Base rates, adult rates, and child rates management - Length of stay discounts and early bird deals - Mobile rates and secret deals implementation - Seasonal promotions and flash sales 📅 Availability Management: - Real-time availability tracking - Stop sell and restriction controls - Closed to arrival/departure functionality - Minimum/maximum stay requirements - Automatic sold-out management 💳 Payment Integration: - Maintained Redsys payment gateway integration - Seamless integration with existing Eagle Booking - No modifications to core Eagle Booking plugin 🛠️ Technical Implementation: - Custom database tables for advanced pricing - WordPress hooks and filters integration - AJAX-powered admin interface - Data migration from existing Eagle Booking - Professional calendar view for revenue management 📊 Admin Interface: - Booking.com-style management dashboard - Visual rate and availability calendar - Bulk operations for date ranges - Statistics and analytics dashboard - Modal dialogs for quick editing 🔧 Code Quality: - WordPress coding standards compliance - Secure database operations with prepared statements - Proper input validation and sanitization - Error handling and logging - Responsive admin interface 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
137 lines
4.5 KiB
JavaScript
137 lines
4.5 KiB
JavaScript
/*! elementor - v3.24.0 - 15-10-2024 */
|
|
/******/ (() => { // webpackBootstrap
|
|
/******/ "use strict";
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ "@wordpress/i18n":
|
|
/*!**************************!*\
|
|
!*** external "wp.i18n" ***!
|
|
\**************************/
|
|
/***/ ((module) => {
|
|
|
|
module.exports = wp.i18n;
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
/************************************************************************/
|
|
/******/ // The module cache
|
|
/******/ var __webpack_module_cache__ = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/ // Check if module is in cache
|
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
/******/ if (cachedModule !== undefined) {
|
|
/******/ return cachedModule.exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
/******/ // no module.id needed
|
|
/******/ // no module.loaded needed
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/************************************************************************/
|
|
var __webpack_exports__ = {};
|
|
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
|
(() => {
|
|
/*!************************************************!*\
|
|
!*** ../assets/dev/js/admin/admin-feedback.js ***!
|
|
\************************************************/
|
|
/* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"];
|
|
|
|
|
|
(function ($) {
|
|
'use strict';
|
|
|
|
var ElementorAdminDialogApp = {
|
|
cacheElements: function cacheElements() {
|
|
this.cache = {
|
|
$deactivateLink: $('#the-list').find('[data-slug="elementor"] span.deactivate a'),
|
|
$dialogHeader: $('#elementor-deactivate-feedback-dialog-header'),
|
|
$dialogForm: $('#elementor-deactivate-feedback-dialog-form')
|
|
};
|
|
},
|
|
bindEvents: function bindEvents() {
|
|
var self = this;
|
|
self.cache.$deactivateLink.on('click', function (event) {
|
|
event.preventDefault();
|
|
self.getModal().show();
|
|
});
|
|
},
|
|
deactivate: function deactivate() {
|
|
location.href = this.cache.$deactivateLink.attr('href');
|
|
},
|
|
initModal: function initModal() {
|
|
var self = this,
|
|
modal;
|
|
self.getModal = function () {
|
|
if (!modal) {
|
|
modal = elementorCommon.dialogsManager.createWidget('lightbox', {
|
|
id: 'elementor-deactivate-feedback-modal',
|
|
headerMessage: self.cache.$dialogHeader,
|
|
message: self.cache.$dialogForm,
|
|
hide: {
|
|
onButtonClick: false
|
|
},
|
|
position: {
|
|
my: 'center',
|
|
at: 'center'
|
|
},
|
|
onReady: function onReady() {
|
|
DialogsManager.getWidgetType('lightbox').prototype.onReady.apply(this, arguments);
|
|
this.addButton({
|
|
name: 'submit',
|
|
text: __('Submit & Deactivate', 'elementor'),
|
|
callback: self.sendFeedback.bind(self)
|
|
});
|
|
this.addButton({
|
|
name: 'skip',
|
|
text: __('Skip & Deactivate', 'elementor'),
|
|
callback: function callback() {
|
|
self.deactivate();
|
|
}
|
|
});
|
|
},
|
|
onShow: function onShow() {
|
|
var $dialogModal = $('#elementor-deactivate-feedback-modal'),
|
|
radioSelector = '.elementor-deactivate-feedback-dialog-input';
|
|
$dialogModal.find(radioSelector).on('change', function () {
|
|
$dialogModal.attr('data-feedback-selected', $(this).val());
|
|
});
|
|
$dialogModal.find(radioSelector + ':checked').trigger('change');
|
|
}
|
|
});
|
|
}
|
|
return modal;
|
|
};
|
|
},
|
|
sendFeedback: function sendFeedback() {
|
|
var self = this,
|
|
formData = self.cache.$dialogForm.serialize();
|
|
self.getModal().getElements('submit').text('').addClass('elementor-loading');
|
|
$.post(ajaxurl, formData, this.deactivate.bind(this));
|
|
},
|
|
init: function init() {
|
|
this.initModal();
|
|
this.cacheElements();
|
|
this.bindEvents();
|
|
}
|
|
};
|
|
$(function () {
|
|
ElementorAdminDialogApp.init();
|
|
});
|
|
})(jQuery);
|
|
})();
|
|
|
|
/******/ })()
|
|
;
|
|
//# sourceMappingURL=admin-feedback.js.map
|