Hotel Raxa - Advanced Booking System Implementation

🏨 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>
This commit is contained in:
Hotel Raxa Dev
2025-07-11 07:43:22 +02:00
commit 5b1e2453c7
9816 changed files with 2784509 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
<?php
namespace Elementor\Core\Isolation;
interface Plugin_Status_Adapter_Interface {
public function is_plugin_installed( $plugin_path ): bool;
public function get_install_plugin_url( $plugin_path ): string;
public function get_activate_plugin_url( $plugin_path ): string;
}

View File

@@ -0,0 +1,43 @@
<?php
namespace Elementor\Core\Isolation;
class Plugin_Status_Adapter implements Plugin_Status_Adapter_Interface {
public Wordpress_Adapter $wordpress_adapter;
public function __construct( $wordpress_adapter ) {
$this->wordpress_adapter = $wordpress_adapter;
}
public function is_plugin_installed( $plugin_path ): bool {
$installed_plugins = $this->wordpress_adapter->get_plugins();
return isset( $installed_plugins[ $plugin_path ] );
}
public function get_install_plugin_url( $plugin_path ): string {
$slug = dirname( $plugin_path );
$admin_base_url = $this->wordpress_adapter->self_admin_url( 'update.php' );
$admin_url = add_query_arg( [
'action' => 'install-plugin',
'plugin' => $slug,
], $admin_base_url );
return $this->wordpress_adapter->wp_nonce_url( $admin_url, 'install-plugin_' . $slug );
}
public function get_activate_plugin_url( $plugin_path ): string {
$admin_base_url = $this->wordpress_adapter->self_admin_url( 'plugins.php' );
$admin_url = add_query_arg( [
'action' => 'activate',
'plugin' => $plugin_path,
'plugin_status' => 'all',
'paged' => 1,
's' => '',
], $admin_base_url );
return $this->wordpress_adapter->wp_nonce_url( $admin_url, 'activate-plugin_' . $plugin_path );
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace Elementor\Core\Isolation;
interface Wordpress_Adapter_Interface {
public function get_plugins();
public function is_plugin_active( $plugin_path );
public function wp_nonce_url( $url, $action );
public function self_admin_url( $path );
public function get_pages( $args );
public function get_option( $option_key );
public function add_option( $option_key, $option_value );
public function update_option( $option_key, $option_value );
}

View File

@@ -0,0 +1,44 @@
<?php
namespace Elementor\Core\Isolation;
class Wordpress_Adapter implements Wordpress_Adapter_Interface {
public function get_plugins(): array {
return get_plugins();
}
public function is_plugin_active( $plugin_path ): bool {
return is_plugin_active( $plugin_path );
}
public function wp_nonce_url( $url, $action ): string {
return wp_nonce_url( $url, $action );
}
public function self_admin_url( $path ): string {
return self_admin_url( $path );
}
/**
* Retrieves an array of pages (or hierarchical post type items).
*
* @return WP_Post[]|false Array of pages (or hierarchical post type items). Boolean false if the
* specified post type is not hierarchical or the specified status is not
* supported by the post type.
*/
public function get_pages( $args ) : ?array {
return get_pages( $args );
}
public function get_option( $option_key ) {
return get_option( $option_key );
}
public function update_option( $option_key, $option_value ) : void {
update_option( $option_key, $option_value );
}
public function add_option( $option_key, $option_value ) : void {
add_option( $option_key, $option_value );
}
}