🏨 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>
150 lines
2.6 KiB
PHP
150 lines
2.6 KiB
PHP
<?php
|
|
/**
|
|
* Pipe-related classes.
|
|
*
|
|
* @link https://contactform7.com/selectable-recipient-with-pipes/
|
|
*/
|
|
|
|
|
|
/**
|
|
* Class representing a pair of pipe.
|
|
*/
|
|
class WPCF7_Pipe {
|
|
|
|
public $before = '';
|
|
public $after = '';
|
|
|
|
public function __construct( $text ) {
|
|
$text = (string) $text;
|
|
|
|
$pipe_pos = strpos( $text, '|' );
|
|
|
|
if ( false === $pipe_pos ) {
|
|
$this->before = $this->after = trim( $text );
|
|
} else {
|
|
$this->before = trim( substr( $text, 0, $pipe_pos ) );
|
|
$this->after = trim( substr( $text, $pipe_pos + 1 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Class representing a list of pipes.
|
|
*/
|
|
class WPCF7_Pipes {
|
|
|
|
private $pipes = array();
|
|
|
|
public function __construct( array $texts = null ) {
|
|
foreach ( (array) $texts as $text ) {
|
|
$this->add_pipe( $text );
|
|
}
|
|
}
|
|
|
|
private function add_pipe( $text ) {
|
|
$pipe = new WPCF7_Pipe( $text );
|
|
$this->pipes[] = $pipe;
|
|
}
|
|
|
|
public function merge( self $another ) {
|
|
$this->pipes = array_merge( $this->pipes, $another->pipes );
|
|
}
|
|
|
|
public function do_pipe( $input ) {
|
|
$input_canonical = wpcf7_canonicalize( $input, array(
|
|
'strto' => 'as-is',
|
|
) );
|
|
|
|
foreach ( $this->pipes as $pipe ) {
|
|
$before_canonical = wpcf7_canonicalize( $pipe->before, array(
|
|
'strto' => 'as-is',
|
|
) );
|
|
|
|
if ( $input_canonical === $before_canonical ) {
|
|
return $pipe->after;
|
|
}
|
|
}
|
|
|
|
return $input;
|
|
}
|
|
|
|
public function collect_befores() {
|
|
$befores = array();
|
|
|
|
foreach ( $this->pipes as $pipe ) {
|
|
$befores[] = $pipe->before;
|
|
}
|
|
|
|
return $befores;
|
|
}
|
|
|
|
public function collect_afters() {
|
|
$afters = array();
|
|
|
|
foreach ( $this->pipes as $pipe ) {
|
|
$afters[] = $pipe->after;
|
|
}
|
|
|
|
return $afters;
|
|
}
|
|
|
|
public function zero() {
|
|
return empty( $this->pipes );
|
|
}
|
|
|
|
public function random_pipe() {
|
|
if ( $this->zero() ) {
|
|
return null;
|
|
}
|
|
|
|
return $this->pipes[array_rand( $this->pipes )];
|
|
}
|
|
|
|
public function to_array() {
|
|
return array_map(
|
|
static function ( WPCF7_Pipe $pipe ) {
|
|
return array(
|
|
$pipe->before,
|
|
$pipe->after,
|
|
);
|
|
},
|
|
$this->pipes
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Trait for classes that hold cross-tag WPCF7_Pipes object.
|
|
*/
|
|
trait WPCF7_PipesHolder {
|
|
|
|
protected $pipes;
|
|
|
|
public function get_pipes( $field_name ) {
|
|
if ( isset( $this->pipes[$field_name] ) ) {
|
|
return $this->pipes[$field_name];
|
|
}
|
|
|
|
$result = new WPCF7_Pipes;
|
|
|
|
$tags = $this->scan_form_tags( array(
|
|
'name' => $field_name,
|
|
) );
|
|
|
|
foreach ( $tags as $tag ) {
|
|
if ( $tag->pipes instanceof WPCF7_Pipes ) {
|
|
$result->merge( $tag->pipes );
|
|
}
|
|
}
|
|
|
|
return $this->pipes[$field_name] = $result;
|
|
}
|
|
|
|
public function scan_form_tags() {
|
|
return array();
|
|
}
|
|
|
|
}
|