'first_name', 'name' => 'First name', 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'true', 'isName' => 'true', 'isAddress' => 'false', 'isEmail' => 'false', 'isTerms' => 'false'), array('id' => 'last_name', 'name' => 'Last name', 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'true', 'isName' => 'true', 'isAddress' => 'false', 'isEmail' => 'false', 'isTerms' => 'false'), array('id' => 'email', 'name' => 'Email', 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'true', 'isName' => 'false', 'isAddress' => 'false', 'isEmail' => 'true', 'isTerms' => 'false'), array('id' => 'phone', 'name' => 'Phone', 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'true', 'isName' => 'false', 'isAddress' => 'false', 'isEmail' => 'false', 'isTerms' => 'false'), array('id' => 'zip', 'name' => 'Zip', 'value' => '', 'type' => 'TEXT', 'options' => '', 'required' => 'false', 'isName' => 'false', 'isAddress' => 'false', 'isEmail' => 'false', 'isTerms' => 'false'), array('id' => 'address', 'name' => 'Address', 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'false', 'isName' => 'false', 'isAddress' => 'true', 'isEmail' => 'false', 'isTerms' => 'false'), array('id' => 'terms', 'name' => 'Terms of Service', 'value' => '', 'type' => 'CHECK', 'active' => 'true', 'options' => 'I agree', 'required' => 'false', 'isName' => 'false', 'isAddress' => 'true', 'isEmail' => 'false', 'isTerms' => 'true'), ); public $email_message = array( "new_booking_notification" => array("key" => "new_booking_notification", "subject" => "", "content" => "", 'enable' => '0', 'format' => 'text', 'title' => 'New', 'message' => ''), "booking_approved_notification" => array("key" => "booking_approved_notification", "subject" => "", "content" => "", 'enable' => '0', 'format' => 'text', 'title' => 'Approved', 'message' => ''), "booking_pending_notification" => array("key" => "booking_pending_notification", "subject" => "", "content" => "", 'enable' => '0', 'format' => 'text', 'title' => 'Pending', 'message' => ''), "booking_updated_notification" => array("key" => "booking_updated_notification", "subject" => "", "content" => "", 'enable' => '0', 'format' => 'text', 'title' => 'Updated', 'message' => ''), "booking_reminder_notification" => array("key" => "booking_reminder_notification", "subject" => "", "content" => "", 'enable' => '0', 'format' => 'text', 'title' => 'Reminder', 'message' => ''), "booking_cancellation_notification" => array("key" => "booking_cancellation_notification", "subject" => "", "content" => "", 'enable' => '0', 'format' => 'text', 'title' => 'Canceled', 'message' => ''), "booking_deleted_notification" => array("key" => "booking_deleted_notification", "subject" => "", "content" => "", 'enable' => '0', 'format' => 'text', 'title' => 'Deleted', 'message' => ''), ); public function __construct($prefix, $pluginName, $userRoleName = 'booking_package_user') { $this->prefix = $prefix; $this->pluginName = $pluginName; $this->userRoleName = $userRoleName; } public function setPayWithPayPay($payWithPayPay) { $this->payWithPayPay = $payWithPayPay; } public function setMessagingApp($messagingApp) { $this->messagingApp = $messagingApp; } public function setMaxBookingSlotsPerDay($maxBookingSlotsPerDay) { $this->maxBookingSlotsPerDay = $maxBookingSlotsPerDay; } public function setGuestForDayOfTheWeekRates($guestForDayOfTheWeekRates) { $this->guestForDayOfTheWeekRates = $guestForDayOfTheWeekRates; } public function userFunctions() { $userFunctions = array( 'function_for_member' => array('name' => __('Allow User Accounts', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array('0' => 'Enabled')), 'reject_non_membder' => array('name' => __('Reject Bookings From Non-Registered Users', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array('0' => 'Enabled')), 'visitors_registration_for_member' => array('name' => __('Enable Customer Registration', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array('0' => 'Enabled')), 'check_email_for_member' => array('name' => __('Send Email Verification For Registration and Profile Updates', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array('0' => 'Enabled')), 'accept_subscribers_as_users' => array('name' => __('Accept Subscribers as Users', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array('0' => 'Enabled')), 'accept_contributors_as_users' => array('name' => __('Accept Contributors as Users', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array('0' => 'Enabled')), 'user_toolbar' => array('name' => __('Show Toolbar', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array('0' => 'Enabled')), /** 'subject_email_for_member' => array('Subject of email sent when confirming email address' => 'Active', 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'valueList' => array()), 'body_email_for_member' => array('Body of email sent when confirming email address' => 'Active', 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXTAREA', 'valueList' => array()), **/ 'lost_password' => array('name' => sprintf(__('Enable "%s" Feature', 'booking-package'), __('Lost Password', 'booking-package')), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array('0' => 'Enabled')), ); return $userFunctions; } public function booking_sync() { $booking_syn = array( "iCal" => array( 'ical_active' => array('name' => __('Status', 'booking-package'), 'value' => '0', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('1' => __('Enabled', 'booking-package'), '0' => __('Disabled', 'booking-package'))), 'syncPastCustomersForIcal' => array('name' => __('Data Range', 'booking-package'), 'value' => '0', 'inputLimit' => 1, 'inputType' => 'SELECT', 'valueList' => array( '7' => sprintf(__('Last %s days', 'booking-package'), 7), '14' => sprintf(__('Last %s days', 'booking-package'), 14), '30' => sprintf(__('Last %s days', 'booking-package'), 30), '60' => sprintf(__('Last %s days', 'booking-package'), 60), '90' => sprintf(__('Last %s days', 'booking-package'), 90), '180' => sprintf(__('Last %s days', 'booking-package'), 180), '365' => sprintf(__('Last %s days', 'booking-package'), 365), ) ), 'ical_token' => array('name' => 'URL', 'value' => '', 'inputLimit' => 1, 'inputType' => 'CUSTOMIZE'), ) ); return $booking_syn; } public function defaultFrom() { $form = array( array('id' => 'first_name', 'name' => __('First name', 'booking-package'), 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'true', 'isName' => 'true', 'isAddress' => 'false', 'isEmail' => 'false', 'isTerms' => 'false', 'targetCustomers' => 'customersAndUsers', 'placeholder' => '', 'uri' => '', 'description' => ''), array('id' => 'last_name', 'name' => __('Last name', 'booking-package'), 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'true', 'isName' => 'true', 'isAddress' => 'false', 'isEmail' => 'false', 'isTerms' => 'false', 'targetCustomers' => 'customersAndUsers', 'placeholder' => '', 'uri' => '', 'description' => ''), array('id' => 'email', 'name' => __('Email', 'booking-package'), 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'true', 'isName' => 'false', 'isAddress' => 'false', 'isEmail' => 'true', 'isTerms' => 'false', 'targetCustomers' => 'customersAndUsers', 'placeholder' => '', 'uri' => '', 'description' => ''), array('id' => 'phone', 'name' => __('Phone', 'booking-package'), 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'true', 'isName' => 'false', 'isAddress' => 'false', 'isEmail' => 'false', 'isTerms' => 'false', 'targetCustomers' => 'customersAndUsers', 'placeholder' => '', 'uri' => '', 'description' => ''), array('id' => 'zip', 'name' => __('Zip', 'booking-package'), 'value' => '', 'type' => 'TEXT', 'active' => '', 'options' => '', 'required' => 'false', 'isName' => 'false', 'isAddress' => 'false', 'isEmail' => 'false', 'isTerms' => 'false', 'targetCustomers' => 'customersAndUsers', 'placeholder' => '', 'uri' => '', 'description' => ''), array('id' => 'address', 'name' => __('Address', 'booking-package'), 'value' => '', 'type' => 'TEXT', 'active' => 'true', 'options' => '', 'required' => 'false', 'isName' => 'false', 'isAddress' => 'true', 'isEmail' => 'false', 'isTerms' => 'false', 'targetCustomers' => 'customersAndUsers', 'placeholder' => '', 'uri' => '', 'description' => ''), array('id' => 'terms', 'name' => __('Terms of Service', 'booking-package'), 'value' => '', 'type' => 'CHECK', 'active' => 'true', 'options' => __('I agree', 'booking-package'), 'required' => 'false', 'isName' => 'false', 'isAddress' => 'true', 'isEmail' => 'false', 'isTerms' => 'true', 'targetCustomers' => 'customersAndUsers', 'placeholder' => '', 'uri' => '', 'description' => ''), ); return $form; } public function guestsInputType(){ $guestsInputTypeList = array( 'name' => array('key' => 'name', 'name' => __('Name', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'target' => 'both', 'filterHookKey' => 'dynamicTextModification'), 'description' => array('name' => __('Description', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXTAREA', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => '', 'target' => 'both', 'filterHookKey' => 'dynamicTextModification'), 'active' => array('key' => 'active', 'name' => __('Status', 'booking-package'), 'value' => 'true', 'inputLimit' => 2, 'inputType' => 'CHECK', 'valueList' => array('true' => 'Enabled'), "class" => '', 'target' => 'both'), 'required' => array('key' => 'required', 'name' => __('Required', 'booking-package'), 'value' => '0', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array(1 => __('Yes', 'booking-package'), 0 => __('No', 'booking-package')), 'target' => 'both'), 'costInServices' => array('key' => 'costInServices', 'name' => __('Applicable Price Level', 'booking-package'), 'value' => 'cost_1', 'inputLimit' => 1, 'inputType' => 'SELECT', 'valueList' => array('cost_1' => __(/**'Cost 1'**/ 'Base Price', 'booking-package'), 'cost_2' => sprintf(__('Price %s', 'booking-package'), '2'), 'cost_3' => sprintf(__('Price %s', 'booking-package'), '3'), 'cost_4' => sprintf(__('Price %s', 'booking-package'), '4'), 'cost_5' => sprintf(__('Price %s', 'booking-package'), '5'), 'cost_6' => sprintf(__('Price %s', 'booking-package'), '6')), 'target' => 'day'), 'target' => array('key' => 'target', 'name' => __('Target', 'booking-package'), 'value' => 'adult', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('adult' => __('Adults', 'booking-package'), 'children' => __('Children', 'booking-package')), 'target' => 'hotel'), 'guestsInCapacity' => array('key' => 'guestsInCapacity', 'name' => __('Count Total Guests Toward Availability', 'booking-package'), 'value' => 'adult', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('excluded' => __('Excluded', 'booking-package'), 'included' => __('Included', 'booking-package')), 'target' => 'day'), 'reflectService' => array('key' => 'reflectService', 'name' => __('Enable Quantity-Based Price Adjustment for Services', 'booking-package'), 'value' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'valueList' => array(1 => __('Enabled', 'booking-package'), 0 => __('Disabled', 'booking-package')), 'target' => 'day'), 'reflectAdditional' => array('key' => 'reflectAdditional', 'name' => __('Enable Quantity-Based Price Adjustment for Extra Charges', 'booking-package'), 'value' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'valueList' => array(1 => __('Enabled', 'booking-package'), 0 => __('Disabled', 'booking-package')), 'target' => 'day'), 'json' => array( 'key' => 'json', 'name' => __('Options', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'EXTRA', 'filterHookKey' => 'dynamicTextModification', "optionsType" => array( "number" => array("type" => "TEXT", "value" => "", "target" => "both"), "name" => array("type" => "TEXT", "value" => "", "target" => "both"), "price" => array("type" => "TEXT", "value" => "", "target" => "both"), "prices" => array( "type" => "dayOfTheWeek", "target" => "hotel", "options" => array( array("key" => "priceOnMonday", "name" => __('Monday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 0), array("key" => "priceOnTuesday", "name" => __('Tuesday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 0), array("key" => "priceOnWednesday", "name" => __('Wednesday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 0), array("key" => "priceOnThursday", "name" => __('Thursday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 0), array("key" => "priceOnFriday", "name" => __('Friday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 0), array("key" => "priceOnSaturday", "name" => __('Saturday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 0), array("key" => "priceOnSunday", "name" => __('Sunday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 0), array("key" => "priceOnDayBeforeNationalHoliday", "name" => __('The day Before National holiday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 1), array("key" => "priceOnNationalHoliday", "name" => __('National holiday', 'booking-package'), "type" => "TEXT", "value" => "0", 'isExtensionsValid' => 1), ), ) ), 'titleList' => array( 'number' => __('Number of Guests', 'booking-package'), 'name' => __('Display Text', 'booking-package'), 'price' => __('Extra Charge', 'booking-package'), 'prices' => __('Costs', 'booking-package') ), 'target' => 'both' ), ); if ($this->guestForDayOfTheWeekRates === 0) { unset($guestsInputTypeList['json']['optionsType']['prices']); unset($guestsInputTypeList['json']['titleList']['prices']); } else { unset($guestsInputTypeList['json']['optionsType']['price']); unset($guestsInputTypeList['json']['titleList']['price']); } return $guestsInputTypeList; } public function couponsInputType(){ $month = array( '1' => array('key' => 1, 'name' => __('Jan', 'booking-package')), '2' => array('key' => 2, 'name' => __('Feb', 'booking-package')), '3' => array('key' => 3, 'name' => __('Mar', 'booking-package')), '4' => array('key' => 4, 'name' => __('Apr', 'booking-package')), '5' => array('key' => 5, 'name' => __('May', 'booking-package')), '6' => array('key' => 6, 'name' => __('Jun', 'booking-package')), '7' => array('key' => 7, 'name' => __('Jul', 'booking-package')), '8' => array('key' => 8, 'name' => __('Aug', 'booking-package')), '9' => array('key' => 9, 'name' => __('Sep', 'booking-package')), '10' => array('key' => 10, 'name' => __('Oct', 'booking-package')), '11' => array('key' => 11, 'name' => __('Nov', 'booking-package')), '12' => array('key' => 12, 'name' => __('Dec', 'booking-package')), ); $day = array(); for ($i = 1; $i <= 31; $i++) { $day[$i] = array('key' => $i, 'name' => $i); } $yearList = array(); for ($i = 0; $i <= 10; $i++) { $year = date('Y') + $i; $yearList[$year] = array('key' => $year, 'name' => $year); } $couponsInputTypeList = array( 'id' => array('key' => 'id', 'name' => __('Coupon code', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'target' => 'both'), 'name' => array('key' => 'name', 'name' => __('Name', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'target' => 'both', 'filterHookKey' => 'dynamicTextModification'), 'description' => array('key' => 'description', 'name' => __('Description', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXTAREA', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => '', 'filterHookKey' => 'dynamicTextModification'), 'active' => array('key' => 'active', 'name' => __('Status', 'booking-package'), 'value' => 'true', 'inputLimit' => 2, 'inputType' => 'CHECK', 'valueList' => array('1' => 'Enabled'), "class" => ""), 'target' => array('key' => 'target', 'name' => __('Target', 'booking-package'), 'value' => 'customers', 'inputLimit' => 1, 'inputType' => 'RADIO', 'target' => 'both', 'valueList' => array('visitors' => __('Customers', 'booking-package'), 'users' => __('Users', 'booking-package')), "class" => ""), 'limited' => array('key' => 'limited', 'name' => __('Coupon Usage', 'booking-package'), 'value' => 'unlimited', 'inputLimit' => 1, 'inputType' => 'RADIO', 'target' => 'both', 'valueList' => array('unlimited' => __('Unlimited Usage', 'booking-package'), 'limited' => __('One-Time Use Per User', 'booking-package')), "class" => ""), 'expirationDate' => array( 'key' => 'expirationDate', 'name' => __('Expiration Date', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'expirationDateStatus', 'name' => '', 'value' => '0', 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array('1' => __('Enabled', 'booking-package')), ), 1 => array( 'key' => 'expirationDateFromMonth', 'name' => __('From', 'booking-package') . ': ', 'value' => null, 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $month, ), 2 => array( 'key' => 'expirationDateFromDay', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $day, ), 3 => array( 'key' => 'expirationDateFromYear', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $yearList, ), 4 => array( 'key' => 'expirationDateToMonth', 'name' => __('To', 'booking-package') . ': ', 'value' => null, 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $month, ), 5 => array( 'key' => 'expirationDateToDay', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $day, ), 6 => array( 'key' => 'expirationDateToYear', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $yearList, ), ), ), 'method' => array('key' => 'method', 'name' => __('Discount Type', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => array('subtraction' => __('Fixed Amount Discount', 'booking-package'), 'multiplication' => __('Percentage Discount', 'booking-package'))), 'value' => array('key' => 'value', 'name' => __('Value', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => ''), ); return $couponsInputTypeList; } public function getCurrencies() { $currencies = array ( 'aed' => array('name' => 'AED - United Arab Emirates Dirham', 'ISOdigits' => 2, 'decimals' => 2), 'afn' => array('name' => 'AFN - Afghan Afghani', 'ISOdigits' => 2, 'decimals' => 2), 'all' => array('name' => 'ALL - Albanian Lek', 'ISOdigits' => 2, 'decimals' => 2), 'amd' => array('name' => 'AMD - Armenian Dram', 'ISOdigits' => 2, 'decimals' => 2), 'ang' => array('name' => 'ANG - Netherlands Antillean Guilder', 'ISOdigits' => 2, 'decimals' => 2), 'aoa' => array('name' => 'AOA - Angolan Kwanza', 'ISOdigits' => 2, 'decimals' => 2), 'ars' => array('name' => 'ARS - Argentine Peso', 'ISOdigits' => 2, 'decimals' => 2), 'aud' => array('name' => 'AUD - Australian Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'awg' => array('name' => 'AWG - Aruban Florin', 'ISOdigits' => 2, 'decimals' => 2), 'azn' => array('name' => 'AZN - Azerbaijani Manat', 'ISOdigits' => 2, 'decimals' => 2), 'bam' => array('name' => 'BAM - Bosnia and Herzegovina Convertible Mark', 'ISOdigits' => 2, 'decimals' => 2), 'bbd' => array('name' => 'BBD - Barbadian Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'bdt' => array('name' => 'BDT - Bangladeshi Taka', 'ISOdigits' => 2, 'decimals' => 2), 'bgn' => array('name' => 'BGN - Bulgarian Lev', 'ISOdigits' => 2, 'decimals' => 2), 'bhd' => array('name' => 'BHD - Bahraini Dinar', 'ISOdigits' => 3, 'decimals' => 3), 'bif' => array('name' => 'BIF - Burundian Franc', 'ISOdigits' => 0, 'decimals' => 2), 'bmd' => array('name' => 'BMD - Bermudian Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'bnd' => array('name' => 'BND - Brunei Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'bob' => array('name' => 'BOB - Bolivian Boliviano', 'ISOdigits' => 2, 'decimals' => 2), 'brl' => array('name' => 'BRL - Brazilian Real', 'ISOdigits' => 2, 'decimals' => 2), 'bsd' => array('name' => 'BSD - Bahamian Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'btn' => array('name' => 'BTN - Bhutanese Ngultrum', 'ISOdigits' => 2, 'decimals' => 2), 'bwp' => array('name' => 'BWP - Botswana Pula', 'ISOdigits' => 2, 'decimals' => 2), 'byn' => array('name' => 'BYN - Belarusian Ruble', 'ISOdigits' => 2, 'decimals' => 2), 'bzd' => array('name' => 'BZD - Belize Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'cad' => array('name' => 'CAD - Canadian Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'cdf' => array('name' => 'CDF - Congolese Franc', 'ISOdigits' => 2, 'decimals' => 2), 'chf' => array('name' => 'CHF - Swiss Franc', 'ISOdigits' => 2, 'decimals' => 2), 'ckd' => array('name' => 'CKD - Cook Islands Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'clp' => array('name' => 'CLP - Chilean Peso', 'ISOdigits' => 0, 'decimals' => 0), 'cny' => array('name' => 'CNY - Chinese Yuan', 'ISOdigits' => 2, 'decimals' => 2), 'cop' => array('name' => 'COP - Colombian Peso', 'ISOdigits' => 2, 'decimals' => 2), 'crc' => array('name' => 'CRC - Costa Rican Colon', 'ISOdigits' => 2, 'decimals' => 2), 'cuc' => array('name' => 'CUC - Cuban convertible Peso', 'ISOdigits' => 2, 'decimals' => 2), 'cup' => array('name' => 'CUP - Cuban Peso', 'ISOdigits' => 2, 'decimals' => 2), 'cve' => array('name' => 'CVE - Cabo Verdean Escudo', 'ISOdigits' => 2, 'decimals' => 2), 'czk' => array('name' => 'CZK - Czech Koruna', 'ISOdigits' => 2, 'decimals' => 2), 'djf' => array('name' => 'DJF - Djiboutian Franc', 'ISOdigits' => 0, 'decimals' => 2), 'dkk' => array('name' => 'DKK - Danish Krone', 'ISOdigits' => 2, 'decimals' => 2), 'dop' => array('name' => 'DOP - Dominican Peso', 'ISOdigits' => 2, 'decimals' => 2), 'dzd' => array('name' => 'DZD - Algerian Dinar', 'ISOdigits' => 2, 'decimals' => 2), 'egp' => array('name' => 'EGP - Egyptian Pound', 'ISOdigits' => 2, 'decimals' => 2), 'ehp' => array('name' => 'EHP - Sahrawi Peseta', 'ISOdigits' => 2, 'decimals' => 2), 'ern' => array('name' => 'ERN - Eritrean Nakfa', 'ISOdigits' => 2, 'decimals' => 2), 'etb' => array('name' => 'ETB - Ethiopian Birr', 'ISOdigits' => 2, 'decimals' => 2), 'eur' => array('name' => 'EUR - Euro', 'ISOdigits' => 2, 'decimals' => 2), 'fjd' => array('name' => 'FJD - Fijian Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'fkp' => array('name' => 'FKP - Falkland Islands Pound', 'ISOdigits' => 2, 'decimals' => 2), 'fok' => array('name' => 'FOK - Faroese Króna', 'ISOdigits' => 2, 'decimals' => 2), 'gbp' => array('name' => 'GBP - Pound Sterling', 'ISOdigits' => 2, 'decimals' => 2), 'gel' => array('name' => 'GEL - Georgian Lari', 'ISOdigits' => 2, 'decimals' => 2), 'ggp' => array('name' => 'GGP - Guernsey Pound', 'ISOdigits' => 2, 'decimals' => 2), 'ghs' => array('name' => 'GHS - Ghanaian Cedi', 'ISOdigits' => 2, 'decimals' => 2), 'gip' => array('name' => 'GIP - Gibraltar Pound', 'ISOdigits' => 2, 'decimals' => 2), 'gmd' => array('name' => 'GMD - Gambian Dalasi', 'ISOdigits' => 2, 'decimals' => 2), 'gnf' => array('name' => 'GNF - Guinean Franc', 'ISOdigits' => 0, 'decimals' => 2), 'gtq' => array('name' => 'GTQ - Guatemalan Quetzal', 'ISOdigits' => 2, 'decimals' => 2), 'gyd' => array('name' => 'GYD - Guyanese Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'hkd' => array('name' => 'HKD - Hong Kong Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'hnl' => array('name' => 'HNL - Honduran Lempira', 'ISOdigits' => 2, 'decimals' => 2), 'hrk' => array('name' => 'HRK - Croatian Kuna', 'ISOdigits' => 2, 'decimals' => 2), 'htg' => array('name' => 'HTG - Haitian Gourde', 'ISOdigits' => 2, 'decimals' => 2), 'huf' => array('name' => 'HUF - Hungarian Forint', 'ISOdigits' => 2, 'decimals' => 2), 'idr' => array('name' => 'IDR - Indonesian Rupiah', 'ISOdigits' => 2, 'decimals' => 2), 'ils' => array('name' => 'ILS - Israeli new Shekel', 'ISOdigits' => 2, 'decimals' => 2), 'imp' => array('name' => 'IMP - Manx Pound', 'ISOdigits' => 2, 'decimals' => 2), 'inr' => array('name' => 'INR - Indian Rupee', 'ISOdigits' => 2, 'decimals' => 2), 'iqd' => array('name' => 'IQD - Iraqi Dinar', 'ISOdigits' => 3, 'decimals' => 3), 'irr' => array('name' => 'IRR - Iranian Rial', 'ISOdigits' => 2, 'decimals' => 2), 'isk' => array('name' => 'ISK - Icelandic Krona', 'ISOdigits' => 0, 'decimals' => 2), 'jep' => array('name' => 'JEP - Jersey Pound', 'ISOdigits' => 2, 'decimals' => 2), 'jmd' => array('name' => 'JMD - Jamaican Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'jod' => array('name' => 'JOD - Jordanian Dinar', 'ISOdigits' => 3, 'decimals' => 3), 'jpy' => array('name' => 'JPY - Japanese Yen', 'ISOdigits' => 0, 'decimals' => 2), 'kes' => array('name' => 'KES - Kenyan Shilling', 'ISOdigits' => 2, 'decimals' => 2), 'kgs' => array('name' => 'KGS - Kyrgyzstani Som', 'ISOdigits' => 2, 'decimals' => 2), 'khr' => array('name' => 'KHR - Cambodian Riel', 'ISOdigits' => 2, 'decimals' => 2), 'kid' => array('name' => 'KID - Kiribati Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'kmf' => array('name' => 'KMF - Comorian Franc', 'ISOdigits' => 0, 'decimals' => 2), 'kpw' => array('name' => 'KPW - North Korean Won', 'ISOdigits' => 2, 'decimals' => 2), 'krw' => array('name' => 'KRW - South Korean Won', 'ISOdigits' => 0, 'decimals' => 2), 'kwd' => array('name' => 'KWD - Kuwaiti Dinar', 'ISOdigits' => 3, 'decimals' => 3), 'kyd' => array('name' => 'KYD - Cayman Islands Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'kzt' => array('name' => 'KZT - Kazakhstani Tenge', 'ISOdigits' => 2, 'decimals' => 2), 'lak' => array('name' => 'LAK - Lao Kip', 'ISOdigits' => 2, 'decimals' => 2), 'lbp' => array('name' => 'LBP - Lebanese Pound', 'ISOdigits' => 2, 'decimals' => 2), 'lkr' => array('name' => 'LKR - Sri Lankan Rupee', 'ISOdigits' => 2, 'decimals' => 2), 'lrd' => array('name' => 'LRD - Liberian Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'lsl' => array('name' => 'LSL - Lesotho Loti', 'ISOdigits' => 2, 'decimals' => 2), 'lyd' => array('name' => 'LYD - Libyan Dinar', 'ISOdigits' => 3, 'decimals' => 3), 'mad' => array('name' => 'MAD - Moroccan Dirham', 'ISOdigits' => 2, 'decimals' => 2), 'mdl' => array('name' => 'MDL - Moldovan Leu', 'ISOdigits' => 2, 'decimals' => 2), 'mga' => array('name' => 'MGA - Malagasy Ariary', 'ISOdigits' => 2, 'decimals' => 0), 'mkd' => array('name' => 'MKD - Macedonian Denar', 'ISOdigits' => 2, 'decimals' => 2), 'mmk' => array('name' => 'MMK - Myanmar Kyat', 'ISOdigits' => 2, 'decimals' => 2), 'mnt' => array('name' => 'MNT - Mongolian Tögrög', 'ISOdigits' => 2, 'decimals' => 2), 'mop' => array('name' => 'MOP - Macanese Pataca', 'ISOdigits' => 2, 'decimals' => 2), 'mru' => array('name' => 'MRU - Mauritanian Ouguiya', 'ISOdigits' => 2, 'decimals' => 0), 'mur' => array('name' => 'MUR - Mauritian Rupee', 'ISOdigits' => 2, 'decimals' => 2), 'mvr' => array('name' => 'MVR - Maldivian Rufiyaa', 'ISOdigits' => 2, 'decimals' => 2), 'mwk' => array('name' => 'MWK - Malawian Kwacha', 'ISOdigits' => 2, 'decimals' => 2), 'mxn' => array('name' => 'MXN - Mexican Peso', 'ISOdigits' => 2, 'decimals' => 2), 'myr' => array('name' => 'MYR - Malaysian Ringgit', 'ISOdigits' => 2, 'decimals' => 2), 'mzn' => array('name' => 'MZN - Mozambican Metical', 'ISOdigits' => 2, 'decimals' => 2), 'nad' => array('name' => 'NAD - Namibian Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'ngn' => array('name' => 'NGN - Nigerian Naira', 'ISOdigits' => 2, 'decimals' => 2), 'nio' => array('name' => 'NIO - Nicaraguan Córdoba', 'ISOdigits' => 2, 'decimals' => 2), 'nok' => array('name' => 'NOK - Norwegian Krone', 'ISOdigits' => 2, 'decimals' => 2), 'npr' => array('name' => 'NPR - Nepalese Rupee', 'ISOdigits' => 2, 'decimals' => 2), 'nzd' => array('name' => 'NZD - New Zealand Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'omr' => array('name' => 'OMR - Omani Rial', 'ISOdigits' => 3, 'decimals' => 3), 'pab' => array('name' => 'PAB - Panamanian Balboa', 'ISOdigits' => 2, 'decimals' => 2), 'pen' => array('name' => 'PEN - Peruvian Sol', 'ISOdigits' => 2, 'decimals' => 2), 'pgk' => array('name' => 'PGK - Papua New Guinean Kina', 'ISOdigits' => 2, 'decimals' => 2), 'php' => array('name' => 'PHP - Philippine Peso', 'ISOdigits' => 2, 'decimals' => 2), 'pkr' => array('name' => 'PKR - Pakistani Rupee', 'ISOdigits' => 2, 'decimals' => 2), 'pln' => array('name' => 'PLN - Polish Zloty', 'ISOdigits' => 2, 'decimals' => 2), 'pnd' => array('name' => 'PND - Pitcairn Islands Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'prb' => array('name' => 'PRB - Transnistrian Ruble', 'ISOdigits' => 2, 'decimals' => 2), 'pyg' => array('name' => 'PYG - Paraguayan Guaraní', 'ISOdigits' => 0, 'decimals' => 2), 'qar' => array('name' => 'QAR - Qatari Riyal', 'ISOdigits' => 2, 'decimals' => 2), 'ron' => array('name' => 'RON - Romanian Leu', 'ISOdigits' => 2, 'decimals' => 2), 'rsd' => array('name' => 'RSD - Serbian Dinar', 'ISOdigits' => 2, 'decimals' => 2), 'rub' => array('name' => 'RUB - Russian Ruble', 'ISOdigits' => 2, 'decimals' => 2), 'rwf' => array('name' => 'RWF - Rwandan Franc', 'ISOdigits' => 0, 'decimals' => 2), 'sar' => array('name' => 'SAR - Saudi Riyal', 'ISOdigits' => 2, 'decimals' => 2), 'sbd' => array('name' => 'SBD - Solomon Islands Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'scr' => array('name' => 'SCR - Seychellois Rupee', 'ISOdigits' => 2, 'decimals' => 2), 'sdg' => array('name' => 'SDG - Sudanese Pound', 'ISOdigits' => 2, 'decimals' => 2), 'sek' => array('name' => 'SEK - Swedish Krona', 'ISOdigits' => 2, 'decimals' => 2), 'sgd' => array('name' => 'SGD - Singapore Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'shp' => array('name' => 'SHP - Saint Helena Pound', 'ISOdigits' => 2, 'decimals' => 2), 'sll' => array('name' => 'SLL - Sierra Leonean Leone', 'ISOdigits' => 2, 'decimals' => 2), 'sls' => array('name' => 'SLS - Somaliland Shilling', 'ISOdigits' => 2, 'decimals' => 2), 'sos' => array('name' => 'SOS - Somali Shilling', 'ISOdigits' => 2, 'decimals' => 2), 'srd' => array('name' => 'SRD - Surinamese Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'ssp' => array('name' => 'SSP - South Sudanese Pound', 'ISOdigits' => 2, 'decimals' => 2), 'stn' => array('name' => 'STN - Sao Tome and Príncipe Dobra', 'ISOdigits' => 2, 'decimals' => 2), 'svc' => array('name' => 'SVC - Salvadoran Colón', 'ISOdigits' => 2, 'decimals' => 2), 'syp' => array('name' => 'SYP - Syrian Pound', 'ISOdigits' => 2, 'decimals' => 2), 'szl' => array('name' => 'SZL - Swazi Lilangeni', 'ISOdigits' => 2, 'decimals' => 2), 'thb' => array('name' => 'THB - Thai Baht', 'ISOdigits' => 2, 'decimals' => 2), 'tjs' => array('name' => 'TJS - Tajikistani Somoni', 'ISOdigits' => 2, 'decimals' => 2), 'tmt' => array('name' => 'TMT - Turkmenistan Manat', 'ISOdigits' => 2, 'decimals' => 2), 'tnd' => array('name' => 'TND - Tunisian Dinar', 'ISOdigits' => 3, 'decimals' => 3), 'top' => array('name' => 'TOP - Tongan Paʻanga', 'ISOdigits' => 2, 'decimals' => 2), 'try' => array('name' => 'TRY - Turkish Lira', 'ISOdigits' => 2, 'decimals' => 2), 'ttd' => array('name' => 'TTD - Trinidad and Tobago Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'tvd' => array('name' => 'TVD - Tuvaluan Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'twd' => array('name' => 'TWD - New Taiwan Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'tzs' => array('name' => 'TZS - Tanzanian Shilling', 'ISOdigits' => 2, 'decimals' => 2), 'uah' => array('name' => 'UAH - Ukrainian Hryvnia', 'ISOdigits' => 2, 'decimals' => 2), 'ugx' => array('name' => 'UGX - Ugandan Shilling', 'ISOdigits' => 0, 'decimals' => 2), 'usd' => array('name' => 'USD - United States Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'uyu' => array('name' => 'UYU - Uruguayan Peso', 'ISOdigits' => 2, 'decimals' => 2), 'uzs' => array('name' => 'UZS - Uzbekistani Som', 'ISOdigits' => 2, 'decimals' => 2), 'ved' => array('name' => 'VED - Venezuelan bolívar digital', 'ISOdigits' => 2, 'decimals' => 2), 'ves' => array('name' => 'VES - Venezuelan Bolívar Soberano', 'ISOdigits' => 2, 'decimals' => 2), 'vnd' => array('name' => 'VND - Vietnamese Dong', 'ISOdigits' => 0, 'decimals' => 2), 'vuv' => array('name' => 'VUV - Vanuatu Vatu', 'ISOdigits' => 0, 'decimals' => 0), 'wst' => array('name' => 'WST - Samoan Tala', 'ISOdigits' => 2, 'decimals' => 2), 'xaf' => array('name' => 'XAF - Central African CFA Franc BEAC', 'ISOdigits' => 0, 'decimals' => 2), 'xcd' => array('name' => 'XCD - East Caribbean Dollar', 'ISOdigits' => 2, 'decimals' => 2), 'xof' => array('name' => 'XOF - West African CFA Franc BCEAO', 'ISOdigits' => 0, 'decimals' => 2), 'xpf' => array('name' => 'XPF - CFP Franc (Franc Pacifique)', 'ISOdigits' => 0, 'decimals' => 0), 'yer' => array('name' => 'YER - Yemeni Rial', 'ISOdigits' => 2, 'decimals' => 2), 'zar' => array('name' => 'ZAR - South African Rand', 'ISOdigits' => 2, 'decimals' => 2), 'zmw' => array('name' => 'ZMW - Zambian Kwacha', 'ISOdigits' => 2, 'decimals' => 2), 'zwb' => array('name' => 'ZWB - RTGS Dollar', 'ISOdigits' => 0, 'decimals' => 0), 'zwl' => array('name' => 'ZWL - Zimbabwean Dollar', 'ISOdigits' => 2, 'decimals' => 2), ); return $currencies; } public function getList(){ $list = array( "General" => array( 'site_name' => array('name' => __('Site Name', 'booking-package'), 'value' => 'Site Name', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'account_email_address' => array( 'key' => 'email_address', 'name' => __('Email Address', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'email_to', 'name' => __('Recipient Email Address', 'booking-package') . ': ', 'value' => '', 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 1 => array( 'key' => 'email_title_from', 'name' => __('Sender Name', 'booking-package') . ': ', 'value' => '', 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 2 => array( 'key' => 'email_from', 'name' => __('Sending Email Address', 'booking-package') . ': ', 'value' => '', 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), ), ), /** 'email_to' => array('name' => __('Recipient Email Address', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'email_from' => array('name' => __('Sending Email Address', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'email_title_from' => array('name' => __('Sender Name', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), **/ 'country' => array('name' => __('Country', 'booking-package'), 'value' => 'US', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'SELECT_GROUP', 'valueList' => array()), 'currency' => array('name' => __('Currency', 'booking-package'), 'value' => 'usd', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'SELECT', 'valueList' => array( 'usd' => 'USD - United States of America', 'gbp' => 'GBP - United Kingdom', 'eur' => 'EUR - EU', 'jpy' => 'JPY - 日本円', 'dkk' => 'DKK - Dansk krone', 'cny' => 'CNY - 人民币', 'twd' => 'TWD - 台湾元', 'thb' => 'THB - Thai Baht', 'cop' => 'COP - Peso Colombiano', 'cad' => 'CAD - Canadian Dollar', 'aud' => 'AUD - Australian Dollar', 'huf' => 'HUF - Magyar forint', 'php' => 'PHP - Philippine Peso', 'chf' => 'CHF - Swiss franc', 'czk' => 'CZK - Koruna česká', 'rub' => 'RUB - Российский рубль', 'nzd' => 'NZD - New Zealand Dollar', 'hrk' => 'HRK - Croatian kuna', 'uah' => 'UAH - Українська гривня', 'brl' => 'BRL - Real brasileiro', 'krw' => 'KRW - 한국 원', 'aed' => 'AED - United Arab Emirates', 'gtq' => 'GTQ - Guatemalan Quetzal', 'mxn' => 'MXN - Peso Mexicano', 'ars' => 'ARS - Peso Argentino', 'zar' => 'ZAR - South African Rand', 'try' => 'TRY - Türk Lirası', 'sek' => 'SEK - Svensk krona', 'ron' => 'RON - Leu românesc', 'inr' => 'INR - भारतीय रुपया', 'sgd' => 'SGD - Singapore Dollar', 'idr' => 'IDR - Rupiah Indonesia', ) ), 'timezone' => array('name' => __('Default Timezone', 'booking-package'), 'value' => 'UTC', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'SELECT_TIMEZONE', 'valueList' => array()), 'dateFormat' => array('name' => __('Date Format', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'SELECT', 'valueList' => array()), 'clock' => array('key' => 'clock', 'name' => __('Time Format', 'booking-package'), 'value' => '24hours', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( '12a.m.p.m' => __('09:00 a.m.', 'booking-package'), '12ampm' => __('09:00 am', 'booking-package'), '12AMPM' => __('03:00 PM', 'booking-package'), '24hours' => '17:00' ) ), 'positionTimeDate' => array('key' => 'positionTimeDate', 'name' => __('Position of Date and Time', 'booking-package'), 'value' => 'dateTime', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 'timeDate' => __('Time', 'booking-package') . ' - ' . __('Date', 'booking-package'), 'dateTime' => __('Date', 'booking-package') . ' - ' . __('Time', 'booking-package'), ) ), 'positionOfWeek' => array('name' => __('Position of the Day of the Week', 'booking-package'), 'value' => 'before', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'RADIO', 'valueList' => array('before' => __('Before the date', 'booking-package'), 'after' => __('After the date', 'booking-package'))), 'automaticApprove' => array('name' => __('Automatically Approve Bookings', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'CHECK', 'valueList' => array('1' => __('Enabled', 'booking-package'))), 'dataRetentionPeriod' => array('name' => __('Customer Data Retention Period', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'SELECT', 'valueList' => array( '0' => __('Forever', 'booking-package'), '30' => sprintf(__('%d days', 'booking-package'), 30), '90' => sprintf(__('%d days', 'booking-package'), 90), '180' => sprintf(__('%d days', 'booking-package'), 180), '365' => sprintf(__('%d year', 'booking-package'), 1), '730' => sprintf(__('%d years', 'booking-package'), 2), '1095' => sprintf(__('%d years', 'booking-package'), 3), '1460' => sprintf(__('%d years', 'booking-package'), 4), '1825' => sprintf(__('%d years', 'booking-package'), 5), ) ), 'ajax_url' => array('name' => __('AJAX URL for Public Page', 'booking-package'), 'value' => 'top', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'SELECT', 'valueList' => array( /** 'ajax' => plugins_url() . '/booking-package/ajax.php', **/ 'top' => get_home_url(), 'admin-ajax' => admin_url('admin-ajax.php'), 'rest_url' => rest_url( 'booking-package/v1/request' ), )), 'ajax_nonce_function' => array('name' => __('AJAX Nonce Validation Function', 'booking-package'), 'value' => 'custom_nonce_validation', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('check_ajax_referer' => 'check_ajax_referer()', 'wp_verify_nonce' => 'wp_verify_nonce()', 'custom_nonce_validation' => __('Use custom plugin nonce validation', 'booking-package'))), 'javascriptSyntaxErrorNotification' => array('name' => __('Notify Developers on JavaScript Errors', 'booking-package'), 'deprecated' => false, 'value' => 1, 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'CHECK', 'valueList' => array('1' => __('Automatically notify developers', 'booking-package'))), 'characterCodeOfDownloadFile' => array('name' => __('Download File Character Encoding', 'booking-package'), 'value' => 'UTF-8', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'RADIO', 'valueList' => array('UTF-8' => 'UTF-8', 'EUC-JP' => 'EUC-JP', 'SJIS' => 'SJIS')), 'lineBreakCodesInCsv' => array('name' => __('CSV File Line Break Code', 'booking-package'), 'value' => 'LF', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'RADIO', 'valueList' => array('LF' => 'LF', 'CRLF' => 'CRLF')), 'googleAnalytics' => array('name' => __('Tracking ID for Google Analytics', 'booking-package'), 'deprecated' => true, 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'customizeStatus' => array( 'key' => 'customizeStatus', 'name' => __('Color Settings for Booking Status', 'booking-package'), 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'statusFontColor', 'name' => __('Font Color', 'booking-package') . ': ', 'value' => '#fff', 'inputType' => 'COLOR', 'className' => 'multiple_fields_margin_top', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 1 => array( 'key' => 'statusBackgroundColorForApproved', 'name' => __('Approved background color', 'booking-package') . ': ', 'value' => '#98c878', 'inputType' => 'COLOR', 'className' => 'multiple_fields_margin_top', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 2 => array( 'key' => 'statusBackgroundColorForPending', 'name' => __('Pending background color', 'booking-package') . ': ', 'value' => '#f06767', 'inputType' => 'COLOR', 'className' => 'multiple_fields_margin_top', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 3 => array( 'key' => 'statusBackgroundColorForCanceled', 'name' => __('Canceled background color', 'booking-package') . ': ', 'value' => '#f0c267', 'inputType' => 'COLOR', 'className' => 'multiple_fields_margin_top', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), ), ), ), "Design" => array( 'autoWindowScroll' => array('name' => __('Automatic Scroll to Top of Booking Form', 'booking-package'), 'value' => '1', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'CHECK', 'valueList' => array('1' => __('Enabled', 'booking-package'))), 'headingPosition' => array('name' => __('Use Sticky Positioning for Visitor Calendar', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 0, 'inputLimit' => 2, 'inputType' => 'CHECK', 'valueList' => array('1' => __('Enabled', 'booking-package'))), 'fontSize' => array('name' => __('Font Size', 'booking-package'), 'value' => '16px', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), #'fontColor' => array('name' => __('Font color', 'booking-package'), 'value' => '#969696', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), 'backgroundColor' => array('name' => __('Background Color', 'booking-package'), 'value' => '#FFF', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), 'calendarBackgroundColorWithSchedule' => array('name' => __('Calendar Background (With Schedule)', 'booking-package'), 'value' => '#FFF', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), 'calendarBackgroundColorWithNoSchedule' => array('name' => __('Calendar Background (No Schedule)', 'booking-package'), 'value' => '#EEE', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), 'backgroundColorOfRegularHolidays' => array('name' => __('Background Color of Closed Days', 'booking-package'), 'value' => '#FFD5D5', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), 'scheduleAndServiceBackgroundColor' => array('name' => __('Schedule/Service Item Background', 'booking-package'), 'value' => '#FFF', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), 'backgroundColorOfSelectedLabel' => array('name' => __('Selection Background Color', 'booking-package'), 'value' => '#EAEDF3', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), 'mouseHover' => array('name' => __('Link Hover Background Color', 'booking-package'), 'value' => '#EAEDF3', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), 'borderColor' => array('name' => __('Border Color', 'booking-package'), 'value' => '#ddd', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT', 'js' => 'colorPicker'), ), "twilio" => array( 'twilio_active' => array('name' => __('Active', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('1' => __('Enabled', 'booking-package'), '0' => __('Disabled', 'booking-package'))), 'twilio_sendingMethod' => array('name' => __('Sending Method', 'booking-package'), 'value' => 'phoneNumber', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('phoneNumber' => __('Phone Number', 'booking-package'), 'senderID' => __('Alphanumeric Sender ID', 'booking-package'))), 'twilio_sid' => array('name' => __('Account SID', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'twilio_service_sid' => array('name' => __('Messaging Service SID', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'twilio_token' => array('name' => __('Auth Token', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'twilio_countryCode' => array('name' => __('Country Calling Code', 'booking-package'), 'value' => '', 'placeholder' => '+1', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'twilio_number' => array('name' => __('Phone Number', 'booking-package'), 'value' => '', 'placeholder' => '+11234567890', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), ), "Messaging Services" => array( 'whatsApp' => array( 'key' => 'whatsApp', 'name' => 'WhatsApp', 'target' => 'day', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'whatsApp_active', 'name' => '', 'value' => 0, 'inputType' => 'RADIO', 'inputLimit' => 0, 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package'), 0 => __('Disabled', 'booking-package')), ), 1 => array( 'key' => 'whatsApp_countryCode', 'name' => __('Country Calling Code', 'booking-package') . ': ', 'value' => null, 'inputType' => 'TEXT', 'inputLimit' => 0, 'placeholder' => '+1', 'isExtensionsValid' => 0, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(), ), 2 => array( 'key' => 'whatsApp_phoneId', 'name' => __('Phone Number ID', 'booking-package') . ': ', 'value' => null, 'inputType' => 'TEXT', 'inputLimit' => 0, 'isExtensionsValid' => 0, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(), ), 3 => array( 'key' => 'whatsApp_token', 'name' => __('Token', 'booking-package') . ': ', 'value' => null, 'inputType' => 'TEXT', 'inputLimit' => 0, 'isExtensionsValid' => 0, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(), ), ), ), ), "Stripe" => array( 'stripe_active' => array('name' => __('Active', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('1' => __('Enabled', 'booking-package'), '0' => __('Disabled', 'booking-package'))), 'stripe_public_key' => array('name' => __('Public Key', 'booking-package'), 'value' => '', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'stripe_secret_key' => array('name' => __('Secret Key', 'booking-package'), 'value' => '', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'stripe_capture_method' => array('name' => __('Capture Method for Payment Intent', 'booking-package'), 'value' => 'automatic', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('automatic' => __('Automatic', 'booking-package'), 'manual' => __('Manual', 'booking-package'))), 'stripe_konbini_expiration_date' => array('name' => __('Expiration Time Limit for Convenience Store Payments', 'booking-package'), 'value' => '120', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'SELECT', 'valueList' => array( '60' => sprintf(__('%d minutes', 'booking-package'), 60), '120' => sprintf(__('%d minutes', 'booking-package'), 120), '180' => sprintf(__('%d minutes', 'booking-package'), 180), '360' => sprintf(__('%d minutes', 'booking-package'), 360), '720' => sprintf(__('%d minutes', 'booking-package'), 720), '1440' => sprintf(__('%d day', 'booking-package'), 1), '2880' => sprintf(__('%d days', 'booking-package'), 2), '4320' => sprintf(__('%d days', 'booking-package'), 3), '5760' => sprintf(__('%d days', 'booking-package'), 4), '7200' => sprintf(__('%d days', 'booking-package'), 5), '8640' => sprintf(__('%d days', 'booking-package'), 6), '10080' => sprintf(__('%d days', 'booking-package'), 7), ), ), ), "PayPal" => array( 'paypal_active' => array('name' => __('Active', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('1' => __('Enabled', 'booking-package'), '0' => __('Disabled', 'booking-package'))), 'paypal_live' => array('name' => __('Mode', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('1' => __('Live', 'booking-package'), '0' => __('Test', 'booking-package'))), 'paypal_client_id' => array('name' => __('Client ID', 'booking-package'), 'value' => '', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'paypal_secret_key' => array('name' => __('Secret Key', 'booking-package'), 'value' => '', 'isExtensionsValid' => 1, 'inputLimit' => 1, 'inputType' => 'TEXT'), ), "reCAPTCHA" => array( 'googleReCAPTCHA_active' => array('name' => __('Active', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('1' => __('Enabled', 'booking-package'), '0' => __('Disabled', 'booking-package'))), 'googleReCAPTCHA_site_key' => array('name' => __('Site Key', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'googleReCAPTCHA_Secret_key' => array('name' => __('Secret Key', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'googleReCAPTCHA_version' => array('name' => __('Version', 'booking-package'), 'value' => 'v2', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('v2' => 'v2', 'v3' => 'v3')), ), "hCaptcha" => array( 'hCaptcha_active' => array('name' => __('Active', 'booking-package'), 'value' => '0', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('1' => __('Enabled', 'booking-package'), '0' => __('Disabled', 'booking-package'))), 'hCaptcha_site_key' => array('name' => __('Site Key', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'hCaptcha_Secret_key' => array('name' => __('Secret Key', 'booking-package'), 'value' => '', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'TEXT'), 'hCaptcha_Theme' => array('name' => __('Theme', 'booking-package'), 'value' => 'light', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('light' => __('Light', 'booking-package'), 'dark' => __('Dark', 'booking-package'))), 'hCaptcha_Size' => array('name' => __('Size', 'booking-package'), 'value' => 'normal', 'isExtensionsValid' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('normal' => __('Normal', 'booking-package'), 'compact' => __('Compact', 'booking-package'))), ), ); $newDataFormatList = array(); $dateFormatList = array( array("format" => "m/d/Y / m/Y", "type" => "number"), array("format" => "m-d-Y / m-Y", "type" => "number"), array("format" => "% d, Y / %, Y", "type" => "string"), array("format" => "d/m/Y / m/Y", "type" => "number"), array("format" => "d-m-Y / m-Y", "type" => "number"), array("format" => "d %, Y / %, Y", "type" => "string"), array("format" => "Y/m/d / Y/m", "type" => "number"), array("format" => "Y-m-d / Y-m", "type" => "number"), array("format" => "d.m.Y / m.Y", "type" => "number"), array("format" => "d.m.Y / %.Y", "type" => "string"), array("format" => "d.%.Y / %.Y", "type" => "string"), array("format" => "% d Y / % Y", "type" => "string"), array("format" => "d % Y / % Y", "type" => "string"), array("format" => "d.m.Y / % Y", "type" => "string"), array("format" => "d.%.Y / % Y", "type" => "string"), array("format" => "Y年m月d日 / Y年m月", "type" => "number"), ); $month = __(date('F'), 'booking-package'); for ($i = 0; $i < count($dateFormatList); $i++) { $format = $dateFormatList[$i]; $date = null; if ($format['type'] == 'number') { $date = date($format['format']); } else { $date = date($format['format']); $date = str_replace('%', $month, $date); } $dateFormatList[$i] = $date; } $list['General']['dateFormat']['valueList'] = $dateFormatList; if (class_exists('NumberFormatter') === true) { $currencies_name = array(); $currencies = $this->getCurrencies(); foreach ($currencies as $key => $value) { $currencies_name[$key] = $value['name']; } $list['General']['currency']['valueList'] = $currencies_name; } foreach ((array) $list as $listKey => $listValue) { $category = array(); foreach ((array) $listValue as $key => $value) { if ($value['inputType'] !== 'MULTIPLE_FIELDS') { $optionsValue = get_option($this->prefix . $key); if ($optionsValue !== false) { $value['value'] = $optionsValue; } } else { for ($i = 0; $i < count($value['valueList']); $i++) { $value['valueList'][$i]['key'] = $this->prefix . $value['valueList'][$i]['key']; $optionsValue = get_option($value['valueList'][$i]['key']); if ($optionsValue !== false) { $value['valueList'][$i]['value'] = $optionsValue; } } } $category[$this->prefix . $key] = $value; } $list[$listKey] = $category; } return $list; } public function getBookingSyncList($accountKey = false){ $list = array(); $booking_sync = $this->booking_sync(); foreach ((array) $booking_sync as $listKey => $listValue) { $category = array(); foreach ((array) $listValue as $key => $value) { $optionsValue = get_option($this->prefix.$key); if($optionsValue !== false){ $value['value'] = stripslashes($optionsValue); } $category[$this->prefix.$key] = $value; } $list[$listKey] = $category; } return $list; } public function getMemberSetting($extension = false){ $userFunctions = $this->userFunctions(); foreach ((array) $userFunctions as $key => $input) { $defaultValue = $input['value']; $value = get_option($this->prefix . $key); if ($value !== false) { $userFunctions[$key]['value'] = $value; } else { add_option($this->prefix . $key, sanitize_text_field($defaultValue)); } if ($extension !== true && $input['isExtensionsValid'] == 1) { $userFunctions[$key]['value'] = 0; } } return $userFunctions; } public function getMemberSettingValues(){ $userFunctions = $this->userFunctions(); $values = array( 'function_for_member' => $userFunctions['function_for_member']['value'], 'visitors_registration_for_member' => $userFunctions['visitors_registration_for_member']['value'], 'check_email_for_member' => $userFunctions['check_email_for_member']['value'], 'reject_non_membder' => $userFunctions['reject_non_membder']['value'], 'accept_subscribers_as_users' => $userFunctions['accept_subscribers_as_users']['value'], 'accept_contributors_as_users' => $userFunctions['accept_contributors_as_users']['value'], /** 'accept_authors_as_users' => $userFunctions['accept_authors_as_users']['value'], **/ 'user_toolbar' => $userFunctions['user_toolbar']['value'], 'lost_password' => $userFunctions['lost_password']['value'], ); foreach ((array) $values as $key => $value) { $value = get_option($this->prefix.$key, $value); $values[$key] = $value; } $values['lost_password_url'] = wp_lostpassword_url(get_permalink()); return $values; } public function getEmailForUser() { $list = array( '_' . $this->prefix . 'user_email_registered' => array( 'enable' => 0, 'enableSMS' => 0, 'notifyAdministrator' => 1, 'format' => 'text', 'title' => __('Registered', 'booking-package'), 'subject' => __('Registration Complete', 'booking-package'), 'content' => __('Your registration is complete.', 'booking-package'), 'subjectForAdmin' => __('Registration Complete', 'booking-package'), 'contentForAdmin' => __('Your registration is complete.', 'booking-package'), ), '_' . $this->prefix . 'user_email_updated' => array( 'enable' => 0, 'enableSMS' => 0, 'notifyAdministrator' => 1, 'format' => 'text', 'title' => __('Updated', 'booking-package'), 'subject' => __('User Information Updated', 'booking-package'), 'content' => __('Your user information has been updated.', 'booking-package'), 'subjectForAdmin' => __('User Information Updated', 'booking-package'), 'contentForAdmin' => __('Your user information has been updated.', 'booking-package'), ), '_' . $this->prefix . 'user_email_deleted' => array( 'enable' => 0, 'enableSMS' => 0, 'notifyAdministrator' => 1, 'format' => 'text', 'title' => __('Deleted', 'booking-package'), 'subject' => __('Account Deletion Notification', 'booking-package'), 'content' => __('Your account has been deleted.', 'booking-package'), 'subjectForAdmin' => __('Account Deletion Notification', 'booking-package'), 'contentForAdmin' => __('Your account has been deleted.', 'booking-package'), ), ); $emailMessageList = array(); foreach ($list as $uniqueKey => $object) { $json = get_option($uniqueKey, null); if (is_null($json) === true) { add_option($uniqueKey, json_encode($object)); } else { $object = json_decode($json, true); } $emailMessageList[$uniqueKey] = $object; } $formData = $this->getUserInputFields(); return array('emailMessageList' => $emailMessageList, 'formData' => $formData); } public function getEmailMessageList($accountKey = 1, $calendarName = null, $calendarAccount = null) { if (empty($calendarName)) { $calendarName = 'Your Calendar'; } $enable = 1; $messages = array( 'new_booking_notification' => array( 'enable' => 1, 'subject' => "Booking notification for your visitors [Booking Package]", 'content' => sprintf("Hello,\n\nID: [id] \nFirst Name: [first_name] \nLast Name: [last_name] \nEmail: [email] \nPhone: [phone] \nAddress: [address] \n\nYou can edit this message anytime in the \"Notifications\" tab on the %s.\n\nThank you for trying Booking Package.", $calendarName), 'subjectForAdmin' => 'Booking notification for you [Booking Package]', 'contentForAdmin' => '', ), 'booking_approved_notification' => array('enable' => 0, 'subject' => "", 'content' => "", 'subjectForAdmin' => '', 'contentForAdmin' => '',), 'booking_cancellation_notification' => array('enable' => 0, 'subject' => "", 'content' => "", 'subjectForAdmin' => '', 'contentForAdmin' => '',), 'booking_deleted_notification' => array('enable' => 0, 'subject' => "", 'content' => "", 'subjectForAdmin' => '', 'contentForAdmin' => '',), 'booking_pending_notification' => array('enable' => 0, 'subject' => "", 'content' => "", 'subjectForAdmin' => '', 'contentForAdmin' => '',), 'booking_updated_notification' => array('enable' => 0, 'subject' => "", 'content' => "", 'subjectForAdmin' => '', 'contentForAdmin' => '',), 'booking_reminder_notification' => array('enable' => 0, 'subject' => "", 'content' => "", 'subjectForAdmin' => '', 'contentForAdmin' => '',), ); global $wpdb; $table_name = $wpdb->prefix . "booking_package_email_settings"; $email_message = $this->email_message; foreach ((array) $email_message as $key => $value) { #var_dump($value); $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d AND `mail_id` = %s;", array(intval($accountKey), $value['key'])); $row = $wpdb->get_row($sql, ARRAY_A); if (is_null($row)) { #var_dump($row); $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'mail_id' => sanitize_text_field($value['key']), 'enable' => intval($messages[$key]['enable']), 'data' => date('U'), 'subject' => sanitize_text_field($messages[$key]['subject']), 'content' => htmlspecialchars($messages[$key]['content'], ENT_QUOTES|ENT_HTML5), 'subjectForAdmin' => sanitize_text_field($messages[$key]['subjectForAdmin']), 'contentForAdmin' => htmlspecialchars($messages[$key]['content'], ENT_QUOTES|ENT_HTML5), 'format' => 'text', ), array('%d', '%s', '%d', '%d', '%s', '%s', '%s', '%s', '%s') ); } else { #var_dump($row); $email_message[$key]['enable'] = intval($row['enable']); $email_message[$key]['enableSMS'] = intval($row['enableSMS']); $email_message[$key]['format'] = $row['format']; $email_message[$key]['subjectForAdmin'] = $row['subjectForAdmin']; $email_message[$key]['contentForAdmin'] = ''; if (!is_null($row['contentForAdmin'])) { $email_message[$key]['contentForAdmin'] = htmlspecialchars_decode($row['contentForAdmin'], ENT_QUOTES|ENT_HTML5); } if (!is_null($row['subject'])) { $email_message[$key]['subject'] = $row['subject']; } if (!is_null($row['content'])) { $email_message[$key]['content'] = htmlspecialchars_decode($row['content'], ENT_QUOTES|ENT_HTML5); } $email_message[$key]['attachICalendar'] = intval($row['attachICalendar']); $email_message[$key]['notifyAdministrator'] = intval($row['notifyAdministrator']); $email_message[$key]['subjectForIcalendar'] = $row['subjectForIcalendar']; $email_message[$key]['locationForIcalendar'] = $row['locationForIcalendar']; $email_message[$key]['contentForIcalendar'] = ''; if (!is_null($row['contentForIcalendar'])) { $email_message[$key]['contentForIcalendar'] = htmlspecialchars_decode($row['contentForIcalendar'], ENT_QUOTES|ENT_HTML5); } } #break; } #var_dump($email_message); $response = array('emailMessageList' => $email_message); $response['formData'] = $this->getForm($accountKey, false); return $response; } public function getEmailMessage($keys = null){ $list = array(); foreach ((array) $this->email_message as $key => $value) { $value['key'] = $this->prefix.$key; if($keys == null || in_array("subject", $keys) === true){ $optionsValue = get_option($this->prefix.$key."_subject", ""); if($optionsValue !== false){ $value['subject'] = $optionsValue; } } if($keys == null || in_array("content", $keys) === true){ $optionsValue = get_option($this->prefix.$key."_content", "
No message
"); if($optionsValue !== false){ $value['content'] = $optionsValue; } } if($keys == null || in_array("enable", $keys) === true){ $optionsValue = get_option($this->prefix.$key."_enable", 1); if($optionsValue !== false){ $value['enable'] = $optionsValue; } } if($keys == null || in_array("format", $keys) === true){ $optionsValue = get_option($this->prefix.$key."_format", "html"); if($optionsValue !== false){ $value['format'] = $optionsValue; } } $list[$key] = $value; } return $list; } public function words() { $words = array( __('Rates', 'booking-package'), __('Extra Charges & Taxes', 'booking-package'), __('Expiration Date for Convenience Store Payments', 'booking-package'), ); return $words; } public function getElementForCalendarAccount(){ $preparationTime = array(); for ($i = 0; $i <= 180; $i += 5) { array_push($preparationTime, array('key' => $i, 'name' => sprintf(__("%s minutes", 'booking-package'), $i))); } $calendarAccount = array( 'name' => array('key' => 'name', 'name' => 'Name', 'target' => 'both', 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'option' => 0), 'type' => array( 'key' => 'type', 'name' => 'Select a type', 'target' => 'hidden', 'value' => 'day', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 1, 'optionsList' => array( /** 'cost' => 0, **/ 'hotelCharges' => 0, 'maximumNights' => 0, 'minimumNights' => 0, 'subscriptionIdForStripe' => 1, 'termsOfServiceForSubscription' => 1, /**'enableSubscriptionForStripe' => 1,**/ 'numberOfRoomsAvailable' => 0, 'numberOfPeopleInRoom' => 0, 'includeChildrenInRoom' => 0, 'expressionsCheck' => 0, 'preparationTime' => 1, 'flowOfBooking' => 1, 'courseBool' => 1, 'guestsBool' => 1, 'hasMultipleServices' => 1, 'courseTitle' => 1, 'displayRemainingCapacity' => 1, 'servicesPage' => 1, 'schedulesPage' => 1, 'minimum_guests' => 1, 'maximum_guests' => 1, ), 'valueList' => array( 'day' => 'Booking is completed within 24 hours (hair salon, hospital etc.)', 'hotel' => 'Accommodation (hotels, campgrounds, etc.)' ) ), 'account_email_address' => array( 'key' => 'email_address', 'name' => __('Email Address', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'email_to', 'name' => __('Recipient Email Address', 'booking-package') . ': ', 'value' => '', 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 1 => array( 'key' => 'email_from_title', 'name' => __('Sender Name', 'booking-package') . ': ', 'value' => '', 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 2 => array( 'key' => 'email_from', 'name' => __('Sending Email Address', 'booking-package') . ': ', 'value' => '', 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), ), ), /** 'email_to' => array('key' => 'email_to', 'name' => __('Recipient Email Address', 'booking-package'), 'target' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'option' => 0), 'email_from' => array('key' => 'email_from', 'name' => __('Sending Email Address', 'booking-package'), 'target' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'option' => 0), 'email_from_title' => array('key' => 'email_from_title', 'name' => __('Sender Name', 'booking-package'), 'target' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'option' => 0), **/ 'status' => array('key' => 'status', 'name' => __('Calendar Status', 'booking-package'), 'target' => 'both', 'value' => 'open', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array('open' => __('Enabled', 'booking-package'), 'closed' => __('Disabled', 'booking-package'))), 'maxAccountScheduleDay' => array('key' => 'maxAccountScheduleDay', 'name' => __('Number of Available Days From Today', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '0', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'option' => 0, 'filterHookKey' => 'numberOfAvailableDaysFromToday'), 'unavailableDaysFromToday' => array('key' => 'unavailableDaysFromToday', 'name' => __('Number of Unavailable Days From Today', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '0', 'inputLimit' => 1, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array('0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10', '11' => '11', '12' => '12', '13' => '13', '14' => '14', '15' => '15', '16' => '16', '17' => '17', '18' => '18', '19' => '19', '20' => '20', '21' => '21', '22' => '22', '23' => '23', '24' => '24', '25' => '25', '26' => '26', '27' => '27', '28' => '28', '29' => '29', '30' => '30')), 'maxBookingSlotsPerDay' => array( 'key' => 'maxBookingSlotsPerDay', 'name' => __('Max Booking Slots per Weekday', 'booking-package'), 'target' => 'day', 'disabled' => 0, 'value' => 'false', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'maxBookingSlotsPerDayStatus', 'name' => '', 'value' => null, 'inputType' => 'RADIO', 'class' => 'multiple_fields_margin_top', 'action' => null, 'extensionsValidMessage' => 1, 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package'), 0 => __('Disabled', 'booking-package')), ), 1 => array( 'key' => 'maxBookingSlotsOnMonday', 'name' => __('Monday', 'booking-package'), 'value' => 0, 'inputType' => 'TEXT', 'class' => 'multiple_fields_margin_top', 'action' => null, 'isExtensionsValid' => 0, ), 2 => array( 'key' => 'maxBookingSlotsOnTuesday', 'name' => __('Tuesday', 'booking-package'), 'value' => 0, 'inputType' => 'TEXT', 'class' => 'multiple_fields_margin_top', 'action' => null, 'isExtensionsValid' => 0, ), 3 => array( 'key' => 'maxBookingSlotsOnWednesday', 'name' => __('Wednesday', 'booking-package'), 'value' => 0, 'inputType' => 'TEXT', 'class' => 'multiple_fields_margin_top', 'action' => null, 'isExtensionsValid' => 0, ), 4 => array( 'key' => 'maxBookingSlotsOnThursday', 'name' => __('Thursday', 'booking-package'), 'value' => 0, 'inputType' => 'TEXT', 'class' => 'multiple_fields_margin_top', 'action' => null, 'isExtensionsValid' => 0, ), 5 => array( 'key' => 'maxBookingSlotsOnFriday', 'name' => __('Friday', 'booking-package'), 'value' => 0, 'inputType' => 'TEXT', 'class' => 'multiple_fields_margin_top', 'action' => null, 'isExtensionsValid' => 0, ), 6 => array( 'key' => 'maxBookingSlotsOnSaturday', 'name' => __('Saturday', 'booking-package'), 'value' => 0, 'inputType' => 'TEXT', 'class' => 'multiple_fields_margin_top', 'action' => null, 'isExtensionsValid' => 0, ), 7 => array( 'key' => 'maxBookingSlotsOnSunday', 'name' => __('Sunday', 'booking-package'), 'value' => 0, 'inputType' => 'TEXT', 'class' => 'multiple_fields_margin_top', 'action' => null, 'isExtensionsValid' => 0, ), 8 => array( 'key' => 'maxBookingSlotsOnNationalHoliday', 'name' => __('Public Holiday', 'booking-package'), 'value' => 0, 'inputType' => 'TEXT', 'class' => 'multiple_fields_margin_top', 'action' => null, 'isExtensionsValid' => 0, 'message' => __('To disable the maximum booking slots for a specific weekday, please enter "0".', 'booking-package'), ), ), "message" => '', ), 'calendar_sharing' => array( 'key' => 'calendar_sharing', 'name' => __('Share available time slots from other calendars', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'schedulesSharing', 'name' => '', 'value' => null, 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package')), ), 1 => array( 'key' => 'targetSchedules', 'name' => __('Select the calendar to share', 'booking-package') . ': ', 'value' => '0', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(), ), ), ), 'timezone' => array('key' => 'timezone', 'name' => __('Timezone', 'booking-package'), 'target' => 'both', 'value' => 'open', 'inputLimit' => 1, 'inputType' => 'SELECT_TIMEZONE', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array()), 'startOfWeek' => array('key' => 'startOfWeek', 'name' => __('Week Starts On', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '0', 'inputLimit' => 1, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array('0' => __('Sunday', 'booking-package'), '1' => __('Monday', 'booking-package'), '2' => __('Tuesday', 'booking-package'), '3' => __('Wednesday', 'booking-package'), '4' => __('Thursday', 'booking-package'), '5' => __('Friday', 'booking-package'), '6' => __('Saturday', 'booking-package'))), 'sendBookingVerificationCode' => array( 'key' => 'sendBookingVerificationCode', 'name' => __('Send Booking Verification Code', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'bookingVerificationCode', 'name' => __('For Customers', 'booking-package') . ': ', 'value' => '30', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array( 0 => array('key' => 'emailAndSms', 'name' => __('Enabled', 'booking-package') . ' - ' . __('Email and SMS', 'booking-package')), 1 => array('key' => 'email', 'name' => __('Enabled', 'booking-package') . ' - ' . __('Email', 'booking-package')), 2 => array('key' => 'sms', 'name' => __('Enabled', 'booking-package') . ' - ' . __('SMS', 'booking-package')), 3 => array('key' => 'false', 'name' => __('Disabled', 'booking-package')), ), ), 1 => array( 'key' => 'bookingVerificationCodeToUser', 'name' => __('For Users', 'booking-package') . ': ', 'value' => '30', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array( 0 => array('key' => 'emailAndSms', 'name' => __('Enabled', 'booking-package') . ' - ' . __('Email and SMS', 'booking-package')), 1 => array('key' => 'email', 'name' => __('Enabled', 'booking-package') . ' - ' . __('Email', 'booking-package')), 2 => array('key' => 'sms', 'name' => __('Enabled', 'booking-package') . ' - ' . __('SMS', 'booking-package')), 3 => array('key' => 'false', 'name' => __('Disabled', 'booking-package')), ), ), ), ), 'messagingService' => array('key' => 'messagingService', 'name' => __('Messaging Services', 'booking-package'), 'target' => 'both', 'value' => 'open', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array(0 => __('Disabled', 'booking-package'), /**'facebookMessenger' => 'Facebook Messenger',**/ 'whatsApp' => 'WhatsApp', /**'line' => 'LINE',**/ 'twilio' => 'twilio SMS')), 'paymentMethod' => array('key' => 'paymentMethod', 'name' => __('Payment Methods', 'booking-package'), 'target' => 'both', 'value' => 'open', 'inputLimit' => 1, 'inputType' => 'CHECK', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array('locally' => __('Local Payment', 'booking-package'), 'stripe' => __('Pay with Stripe', 'booking-package'), 'stripe_paypay' => sprintf( __('Pay with %s'), 'PayPay' ), 'stripe_konbini' => __('Pay at a convenience store with Stripe', 'booking-package'), 'paypal' => __('Pay with PayPal', 'booking-package'))), 'subscriptionIdForStripe' => array('key' => 'subscriptionIdForStripe', 'name' => 'Product ID of subscription for Stripe', 'target' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'SUBSCRIPTION', 'optionKeys' => array('subscriptionIdForStripe' => array('title' => 'Product ID', 'inputType' => 'TEXT'), 'enableSubscriptionForStripe' => array('title' => __('Enabled', 'booking-package'), 'inputType' => 'CHECKBOX')), 'isExtensionsValid' => 1, 'option' => 0, 'optionValues' => array("enableSubscriptionForStripe" => "")), 'termsOfServiceForSubscription' => array('key' => 'termsOfServiceForSubscription', 'name' => 'The terms of service for subscription', 'target' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'SUBSCRIPTION', 'optionKeys' => array('termsOfServiceForSubscription' => array('title' => 'URI', 'inputType' => 'TEXT'), 'enableTermsOfServiceForSubscription' => array('title' => __('Enabled', 'booking-package'), 'inputType' => 'CHECKBOX')), 'isExtensionsValid' => 1, 'option' => 0, 'optionValues' => array("enableTermsOfServiceForSubscription" => "")), 'privacyPolicyForSubscription' => array('key' => 'privacyPolicyForSubscription', 'name' => 'The privacy policy for subscription', 'target' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'SUBSCRIPTION', 'optionKeys' => array('privacyPolicyForSubscription' => array('title' => 'URI', 'inputType' => 'TEXT'), 'enablePrivacyPolicyForSubscription' => array('title' => __('Enabled', 'booking-package'), 'inputType' => 'CHECKBOX')), 'isExtensionsValid' => 1, 'option' => 0, 'optionValues' => array("enablePrivacyPolicyForSubscription" => "")), #'subscriptionIdForPayPal' => array('key' => 'subscriptionIdForPayPal', 'name' => 'Subscription ID for PayPal', 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'option' => 0), 'hotelCharges' => array( 'key' => 'hotelCharges', 'name' => __('Rates', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'HOTEL_CHARGES', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'hotelChargeOnMonday', 'name' => __('Monday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 0, ), 1 => array( 'key' => 'hotelChargeOnTuesday', 'name' => __('Tuesday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 0, ), 2 => array( 'key' => 'hotelChargeOnWednesday', 'name' => __('Wednesday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 0, ), 3 => array( 'key' => 'hotelChargeOnThursday', 'name' => __('Thursday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 0, ), 4 => array( 'key' => 'hotelChargeOnFriday', 'name' => __('Friday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 0, ), 5 => array( 'key' => 'hotelChargeOnSaturday', 'name' => __('Saturday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 0, ), 6 => array( 'key' => 'hotelChargeOnSunday', 'name' => __('Sunday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 0, ), 7 => array( 'key' => 'hotelChargeOnDayBeforeNationalHoliday', 'name' => __('Day Before Public Holiday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 1, ), 8 => array( 'key' => 'hotelChargeOnNationalHoliday', 'name' => __('Public Holiday', 'booking-package'), 'value' => 0, 'isExtensionsValid' => 1, ), ), "message" => '', ), 'minimumNights' => array('key' => 'minimumNights', 'name' => __('Minimum Stay (Nights)', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'option' => 0), 'maximumNights' => array('key' => 'maximumNights', 'name' => __('Maximum Stay (Nights)', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'option' => 0), 'numberOfRoomsAvailable' => array('key' => 'numberOfRoomsAvailable', 'name' => __('Number of Available Rooms', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'option' => 0), 'numberOfPeopleInRoom' => array('key' => 'numberOfPeopleInRoom', 'name' => __('Maximum Guests per Room', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => '2', 'inputLimit' => 2, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'option' => 0), 'includeChildrenInRoom' => array('key' => 'includeChildrenInRoom', 'name' => __('Include Children in Maximum Guest Count', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array(1 => 'Include', 0 => 'Exclude')), 'formatNightDay' => array('key' => 'formatNightDay', 'name' => __('Total Stay Display Format', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array(0 => 2 . ' ' . __('nights', 'booking-package'), 1 => sprintf(__('%s nights %s days', 'booking-package'), '2', '3'))), 'expressionsCheck' => array('key' => 'expressionsCheck', 'name' => __('Arrival/Departure Display Format', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array(0 => __('Arrival (Check-in) & Departure (Check-out)', 'booking-package'), 1 => __('Arrival & Departure', 'booking-package'), 2 => __('Check-in & Check-out', 'booking-package'))), 'multipleRooms' => array('key' => 'multipleRooms', 'name' => __('Allow booking of multiple rooms', 'booking-package'), 'target' => 'hotel', 'disabled' => 0, 'value' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array(1 => 'Enabled', 0 => 'Disabled')), 'preparationTimeSetting' => array( 'key' => 'preparationTimeSetting', 'name' => __('Preparation Time', 'booking-package'), 'target' => 'day', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'preparationTime', 'name' => '', 'value' => null, 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => $preparationTime, ), 1 => array( 'key' => 'positionPreparationTime', 'name' => __('Position', 'booking-package') . ': ', 'value' => null, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array('before_after' => __('Before and after the booking time slot', 'booking-package'), 'before' => __('Before the booking time slot', 'booking-package'), 'after' => __('After the booking time slot', 'booking-package')), ), ), ), 'servicesFunction' => array( 'key' => 'servicesFunction', 'name' => __('Service', 'booking-package'), 'target' => 'day', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'courseBool', 'name' => '', 'value' => null, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package'), 0 => __('Disabled', 'booking-package')), ), 1 => array( 'key' => 'flowOfBooking', 'name' => __('Booking steps on the front-end', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array('calendar' => __('Start with date selection', 'booking-package'), 'services' => __('Start with service selection', 'booking-package')), ), 2 => array( 'key' => 'hasMultipleServices', 'name' => __('Allow selecting multiple services', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'extensionsValidMessage' => 1, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package'), 0 => __('Disabled', 'booking-package')), ), ), ), 'minimum_guests' => array( 'key' => 'minimum_guests', 'name' => __('Minimum the number of guests per one booking', 'booking-package'), 'target' => 'day', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'minimumGuests', 'name' => '', 'value' => null, 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package')), ), 1 => array( 'key' => 'minimumGuestsRequiredNo', 'name' => __('Includes "No" selected on "Required" in the Guests', 'booking-package') . ': ', 'value' => null, 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(1 => __('Included', 'booking-package')), ), 2 => array( 'key' => 'minimumGuestsOfValue', 'name' => __('Number of Guests', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(), ), ), ), 'maximum_guests' => array( 'key' => 'maximum_guests', 'name' => __('Maximum the number of guests per one booking', 'booking-package'), 'target' => 'day', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'maximumGuests', 'name' => '', 'value' => null, 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package')), ), 1 => array( 'key' => 'maximumGuestsRequiredNo', 'name' => __('Includes "No" selected on "Required" in the Guests', 'booking-package') . ': ', 'value' => null, 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(1 => __('Included', 'booking-package')), ), 2 => array( 'key' => 'maximumGuestsOfValue', 'name' => __('Number of Guests', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'class' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(), ), ), ), 'displayRemainingSlots' => array( 'key' => 'displayRemainingSlots', 'name' => __('Display Remaining Slots on Calendar', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'message' => __('Use Material icons web font.', 'booking-package'), 'valueList' => array( 0 => array( 'key' => 'displayRemainingSlotsInCalendar', 'name' => __('Display Method', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(0 => __('Disabled', 'booking-package'), 'int' => __('Show numbers', 'booking-package'), 'text' => __('Show text/symbols', 'booking-package')), ), 1 => array( 'key' => 'displayThresholdOfRemainingCapacity', 'name' => __('Remaining slots threshold', 'booking-package') . ': ', 'value' => '50', 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array( 90 => array('key' => 90, 'name' => '90%'), 80 => array('key' => 80, 'name' => '80%'), 70 => array('key' => 70, 'name' => '70%'), 60 => array('key' => 60, 'name' => '60%'), 50 => array('key' => 50, 'name' => '50%'), 40 => array('key' => 40, 'name' => '40%'), 30 => array('key' => 30, 'name' => '30%'), 20 => array('key' => 20, 'name' => '20%'), 10 => array('key' => 10, 'name' => '10%'), ), ), 2 => array( 'key' => 'displayRemainingCapacityHasMoreThenThreshold', 'name' => __('When slots exceed threshold', 'booking-package') . ': ', 'value' => array(), 'inputType' => 'REMAINING_CAPACITY', 'className' => 'multiple_fields_margin_top', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 3 => array( 'key' => 'displayRemainingCapacityHasLessThenThreshold', 'name' => __('When slots are below threshold', 'booking-package') . ': ', 'value' => array(), 'inputType' => 'REMAINING_CAPACITY', 'className' => 'multiple_fields_margin_top', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), 4 => array( 'key' => 'displayRemainingCapacityHas0', 'name' => __('When no slots remain (0%)', 'booking-package') . ': ', 'value' => array(), 'inputType' => 'REMAINING_CAPACITY', 'className' => 'multiple_fields_margin_top', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), ), ), ), 'displayRemainingCapacity' => array('key' => 'displayRemainingCapacity', 'name' => __('Display Remaining Slots per Time Slot', 'booking-package'), 'target' => 'day', 'value' => 0, 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array(1 => 'Enabled', 0 => 'Disabled')), 'fixCalendar' => array('key' => 'fixCalendar', 'name' => __('Fixed Calendar', 'booking-package'), 'target' => 'both', 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'FIX_CALENDAR', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array(0 => 'month', 1 => 'year')), 'insertConfirmedPage' => array('key' => 'insertConfirmedPage', 'name' => __('Insert Booking Confirmation Page Before Completion Page', 'booking-package'), 'target' => 'both', 'value' => '0', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array(1 => 'Enabled', 0 => 'Disabled')), 'blockSameTimeBookingByUser' => array('key' => 'blockSameTimeBookingByUser', 'name' => __('Prevent Multiple Bookings', 'booking-package'), 'target' => 'day', 'value' => '0', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array(1 => 'Enabled', 0 => 'Disabled')), 'bookingReminder' => array('key' => 'bookingReminder', 'name' => __('Reminder Notification Time', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '0', 'inputLimit' => 1, 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'option' => 0, 'filterHookKey' => 'reminderNotificationTime', 'message' => __('Reminders are sent only for \'Approved\' bookings.', 'booking-package'), 'valueList' => array( '60' => sprintf(__('About %d hour before', 'booking-package'), 1), '120' => sprintf(__('About %d hours before', 'booking-package'), 2), '180' => sprintf(__('About %d hours before', 'booking-package'), 3), '240' => sprintf(__('About %d hours before', 'booking-package'), 4), '300' => sprintf(__('About %d hours before', 'booking-package'), 5), '360' => sprintf(__('About %d hours before', 'booking-package'), 6), '420' => sprintf(__('About %d hours before', 'booking-package'), 7), '480' => sprintf(__('About %d hours before', 'booking-package'), 8), '540' => sprintf(__('About %d hours before', 'booking-package'), 9), '600' => sprintf(__('About %d hours before', 'booking-package'), 10), '660' => sprintf(__('About %d hours before', 'booking-package'), 11), '720' => sprintf(__('About %d hours before', 'booking-package'), 12), '1440' => sprintf(__('About %d hours before', 'booking-package'), 24), '2160' => sprintf(__('About %d hours before', 'booking-package'), 36), '2880' => sprintf(__('About %d hours before', 'booking-package'), 48), '3600' => sprintf(__('About %d hours before', 'booking-package'), 60), '4320' => sprintf(__('About %d hours before', 'booking-package'), 72), '5760' => sprintf(__('About %d hours before', 'booking-package'), 96), '7200' => sprintf(__('About %d hours before', 'booking-package'), 120), '8640' => sprintf(__('About %d hours before', 'booking-package'), 144), '10080' => sprintf(__('About %d hours before', 'booking-package'), 168), ) ), 'displayDetailsOfCanceled' => array('key' => 'displayDetailsOfCanceled', 'name' => __('Show Canceled Booking Details on "Booked Customers"', 'booking-package'), 'target' => 'both', 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array(1 => 'Enabled', 0 => 'Disabled')), 'cancellation_of_booking' => array( 'key' => 'cancellation_of_booking', 'name' => __('Allow Customer Cancellations', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'cancellationOfBooking', 'name' => '', 'value' => null, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package'), 0 => __('Disabled', 'booking-package')), ), 1 => array( 'key' => 'allowCancellationVisitor', 'name' => __('Allow Cancellation Up To', 'booking-package') . ': ', 'value' => '30', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, /** 'insertAfterElement' => '%s the booking start time', **/ 'filterHookKey' => 'cancellationLimitTime', 'actions' => null, 'valueList' => array( 30 => array('key' => 30, 'name' => sprintf(__('%s minutes before', 'booking-package'), "30")), 60 => array('key' => 60, 'name' => sprintf(__('%s hour before', 'booking-package'), "1")), 120 => array('key' => 120, 'name' => sprintf(__('%s hours before', 'booking-package'), "2")), 240 => array('key' => 240, 'name' => sprintf(__('%s hours before', 'booking-package'), "4")), 480 => array('key' => 480, 'name' => sprintf(__('%s hours before', 'booking-package'), "8")), 720 => array('key' => 720, 'name' => sprintf(__('%s hours before', 'booking-package'), "12")), 1440 => array('key' => 1440, 'name' => sprintf(__('%s day before', 'booking-package'), "1")), 2880 => array('key' => 2880, 'name' => sprintf(__('%s days before', 'booking-package'), "2")), 4320 => array('key' => 4320, 'name' => sprintf(__('%s days before', 'booking-package'), "3")), 5760 => array('key' => 5760, 'name' => sprintf(__('%s days before', 'booking-package'), "4")), 7200 => array('key' => 7200, 'name' => sprintf(__('%s days before', 'booking-package'), "5")), 8640 => array('key' => 8640, 'name' => sprintf(__('%s days before', 'booking-package'), "6")), 10080 => array('key' => 10080, 'name' => sprintf(__('%s days before', 'booking-package'), "7")), 11520 => array('key' => 11520, 'name' => sprintf(__('%s days before', 'booking-package'), "8")), 12960 => array('key' => 12960, 'name' => sprintf(__('%s days before', 'booking-package'), "9")), 14400 => array('key' => 14400, 'name' => sprintf(__('%s days before', 'booking-package'), "10")), 15840 => array('key' => 15840, 'name' => sprintf(__('%s days before', 'booking-package'), "11")), 17280 => array('key' => 17280, 'name' => sprintf(__('%s days before', 'booking-package'), "12")), 18720 => array('key' => 18720, 'name' => sprintf(__('%s days before', 'booking-package'), "13")), 20160 => array('key' => 20160, 'name' => sprintf(__('%s days before', 'booking-package'), "14")), ), ), 2 => array( 'key' => 'refuseCancellationOfBooking', 'name' => __('Applicable Booking Status', 'booking-package') . ': ', 'value' => '30', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array( 0 => array('key' => 'not_refuse', 'name' => __('Pending and Approved', 'booking-package')), 1 => array('key' => 'pending', 'name' => __('Pending', 'booking-package')), 2 => array('key' => 'approved', 'name' => __('Approved', 'booking-package')), ), ), ), ), /** 'refuseCancellationOfBooking' => array('key' => 'refuseCancellationOfBooking', 'name' => __('Status to approve cancellation of booking', 'booking-package').":", 'target' => 'both', 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'option' => 0, 'valueList' => array( 'not_refuse' => __('Pending and Approved', 'booking-package'), 'pending' => __('Pending', 'booking-package'), 'approved' => __('Approved', 'booking-package'), ) ), **/ 'insertCustomPage' => array( 'key' => 'insertCustomPage', 'name' => __('Insert Custom Page at Each Step', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'message' => __('To add custom pages to the select box, you need to add a custom field named "booking-package" to the page, with a value of "front-end.".', 'booking-package'), 'valueList' => array( 0 => array( 'key' => 'calenarPage', 'name' => __('Calendar', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'target' => 'both', 'actions' => null, 'valueList' => array(), ), 1 => array( 'key' => 'schedulesPage', 'name' => __('Time Slot Selection', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'target' => 'day', 'actions' => null, 'valueList' => array( 90 => array('key' => 90, 'name' => '90%'), 80 => array('key' => 80, 'name' => '80%'), ), ), 2 => array( 'key' => 'servicesPage', 'name' => __('Service Selection', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'target' => 'day', 'actions' => null, 'valueList' => array( 90 => array('key' => 90, 'name' => '90%'), 80 => array('key' => 80, 'name' => '80%'), ), ), 3 => array( 'key' => 'visitorDetailsPage', 'name' => __('Booking Form', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'target' => 'both', 'actions' => null, 'valueList' => array( 90 => array('key' => 90, 'name' => '90%'), 80 => array('key' => 80, 'name' => '80%'), ), ), 4 => array( 'key' => 'confirmDetailsPage', 'name' => __('Booking Confirmation Form', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'target' => 'both', 'actions' => null, 'valueList' => array( 90 => array('key' => 90, 'name' => '90%'), 80 => array('key' => 80, 'name' => '80%'), ), ), 5 => array( 'key' => 'thanksPage', 'name' => __('Booking Completion Form', 'booking-package') . ': ', 'value' => 0, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array( 90 => array('key' => 90, 'name' => '90%'), 80 => array('key' => 80, 'name' => '80%'), ), ), ), ), 'redirect_Page' => array( 'key' => 'redirect_Page', 'name' => __('Redirect After Booking', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'redirectMode', 'name' => '', 'value' => 'page', 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array('page' => __('Pages', 'booking-package'), 'url' => __('URL', 'booking-package')), ), 1 => array( 'key' => 'redirectPage', 'name' => __('Pages', 'booking-package') . ': ', 'value' => null, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'className' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(1 => __('Enabled', 'booking-package')), 'message' => __('To add custom pages to the select box, you need to add a custom field named "booking-package" to the page, with a value of "front-end.".', 'booking-package'), ), 2 => array( 'key' => 'redirectURL', 'name' => __('URL', 'booking-package') . ': ', 'value' => '', 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'className' => 'multiple_fields_margin_top', 'actions' => null, 'valueList' => array(), ), ), ), ); if ($this->payWithPayPay === 0) { unset($calendarAccount['paymentMethod']['valueList']['stripe_paypay']); } if ($this->maxBookingSlotsPerDay === 0) { unset($calendarAccount['maxBookingSlotsPerDay']); } return $calendarAccount; } public function getCourseData(){ $month = array( '1' => array('key' => 1, 'name' => __('Jan', 'booking-package')), '2' => array('key' => 2, 'name' => __('Feb', 'booking-package')), '3' => array('key' => 3, 'name' => __('Mar', 'booking-package')), '4' => array('key' => 4, 'name' => __('Apr', 'booking-package')), '5' => array('key' => 5, 'name' => __('May', 'booking-package')), '6' => array('key' => 6, 'name' => __('Jun', 'booking-package')), '7' => array('key' => 7, 'name' => __('Jul', 'booking-package')), '8' => array('key' => 8, 'name' => __('Aug', 'booking-package')), '9' => array('key' => 9, 'name' => __('Sep', 'booking-package')), '10' => array('key' => 10, 'name' => __('Oct', 'booking-package')), '11' => array('key' => 11, 'name' => __('Nov', 'booking-package')), '12' => array('key' => 12, 'name' => __('Dec', 'booking-package')), ); $day = array(); for ($i = 1; $i <= 31; $i++) { $day[$i] = array('key' => $i, 'name' => $i); } $yearList = array(); for ($i = 0; $i <= 10; $i++) { $year = date('Y') + $i; $yearList[$year] = array('key' => $year, 'name' => $year); } $addNewCourse = array( 'name' => array('name' => __('Name', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => '', 'filterHookKey' => 'dynamicTextModification'), 'description' => array('name' => __('Description', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXTAREA', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => '', 'filterHookKey' => 'dynamicTextModification'), 'active' => array('name' => __('Status', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'CHECK', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => array('true' => __('Enabled', 'booking-package'))), 'target' => array('name' => __('Target', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 0, 'valueList' => array('visitors_users' => __('Customers and Users', 'booking-package'), 'visitors' => __('Customers', 'booking-package'), 'users' => __('Users', 'booking-package'))), 'stopService' => array( 'key' => 'stopService', 'name' => __('Stop Offering This Service Under the Following Conditions', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'message' => sprintf( __("If you select any option other than '%s', the '%s' feature will be disabled.", 'booking-package'), __('Disabled', 'booking-package'), __('Allow selecting multiple services', 'booking-package') ), 'valueList' => array( 0 => array( 'key' => 'stopServiceUnderFollowingConditions', 'name' => /**'Under the following conditions'**/ '', 'value' => null, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array( 'doNotStop' => __('Disabled', 'booking-package'), 'isNotEqual' => sprintf( __("When the '%s' and '%s' values for the time slot do not match.", 'booking-package'), __('Available Slots', 'booking-package'), __('Remaining Slots', 'booking-package') ), 'isEqual' => sprintf( __("When the '%s' and '%s' values for the time slot are equal.", 'booking-package'), __('Available Slots', 'booking-package'), __('Remaining Slots', 'booking-package') ), 'specifiedNumberOfTimes' => __('When the specified booking limit is reached.', 'booking-package'), ), 'className' => 'stopServiceUnderFollowingConditions', ), 1 => array( 'key' => 'doNotStopServiceAsException', 'name' => '', 'value' => null, 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array( 'sameServiceIsNotStopped' => __('Allow booking this service if its start time overlaps with the start time of an existing booking for the same service.', 'booking-package'), ), 'className' => 'doNotStopServiceAsException', ), 2 => array( 'key' => 'stopServiceForDayOfTimes', 'name' => __('Target', 'booking-package') . ': ', 'value' => null, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array( 'day' => __('Total bookings per day', 'booking-package'), 'timeSlot' => __('Bookings per time slot', 'booking-package'), 'startTimeSlot' => __('Maximum bookings per start time slot', 'booking-package'), ), 'className' => 'stopServiceForDayOfTimes', ), 3 => array( 'key' => 'stopServiceForSpecifiedNumberOfTimes', 'name' => __('Limit', 'booking-package') . ': ', 'value' => null, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(), 'className' => 'stopServiceForSpecifiedNumberOfTimes', ), ), ), 'costs' => array( 'key' => 'costs', 'name' => __('Prices', 'booking-package'), 'target' => 'day', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'message' => '', 'valueList' => array( 0 => array( 'key' => 'cost_1', 'name' => __(/**'Cost 1'**/ 'Base Price', 'booking-package'), 'value' => null, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array(), 'className' => 'costs', ), 1 => array( 'key' => 'cost_2', 'name' => sprintf(__('Price %s', 'booking-package'), '2'), 'value' => null, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(), 'className' => 'costs', ), 2 => array( 'key' => 'cost_3', 'name' => sprintf(__('Price %s', 'booking-package'), '3'), 'value' => null, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(), 'className' => 'costs', ), 3 => array( 'key' => 'cost_4', 'name' => sprintf(__('Price %s', 'booking-package'), '4'), 'value' => null, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(), 'className' => 'costs', ), 4 => array( 'key' => 'cost_5', 'name' => sprintf(__('Price %s', 'booking-package'), '5'), 'value' => null, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(), 'className' => 'costs', ), 5 => array( 'key' => 'cost_6', 'name' => sprintf(__('Price %s', 'booking-package'), '6'), 'value' => null, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array(), 'className' => 'costs', ), ), ), 'expirationDate' => array( 'key' => 'expirationDate', 'name' => __('Expiration Date', 'booking-package'), 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 0, 'option' => 0, 'valueList' => array( 0 => array( 'key' => 'expirationDateStatus', 'name' => '', 'value' => '0', 'inputType' => 'CHECK', 'isExtensionsValid' => 0, 'actions' => null, 'valueList' => array('1' => __('Enabled', 'booking-package')), ), 1 => array( 'key' => 'expirationDateFromMonth', 'name' => __('From:', 'booking-package') . ' ', 'value' => null, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $month, ), 2 => array( 'key' => 'expirationDateFromDay', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $day, ), 3 => array( 'key' => 'expirationDateFromYear', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $yearList, ), 4 => array( 'key' => 'expirationDateToMonth', 'name' => __('To:', 'booking-package') . ' ', 'value' => null, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $month, ), 5 => array( 'key' => 'expirationDateToDay', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $day, ), 6 => array( 'key' => 'expirationDateToYear', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $yearList, ), ), ), 'time' => array('name' => __('Duration Time', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => array()), 'timeToProvide' => array('name' => __('Specify the Time Slots for Each Day of the Week', 'booking-package'), 'value' => '0', 'inputLimit' => 2, 'inputType' => 'TIME_TO_PROVIDE', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => array()), 'selectOptions' => array('name' => __('Allow Selecting Multiple Options', 'booking-package'), 'value' => '0', 'inputLimit' => 2, 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => array('1' => __('Enabled', 'booking-package'))), 'options' => array( 'name' => __('Options', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'EXTRA', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 0, 'format' => 'json', 'valueList' => '', 'filterHookKey' => 'dynamicTextModification', "optionsType" => array( "name" => array("type" => "TEXT", "value" => "", "target" => "both"), /** "cost" => array("type" => "TEXT", "value" => "", "target" => "both"), **/ "cost_1" => array("type" => "TEXT", "value" => "", "target" => "both"), "cost_2" => array("type" => "TEXT", "value" => "", "target" => "both"), "cost_3" => array("type" => "TEXT", "value" => "", "target" => "both"), "cost_4" => array("type" => "TEXT", "value" => "", "target" => "both"), "cost_5" => array("type" => "TEXT", "value" => "", "target" => "both"), "cost_6" => array("type" => "TEXT", "value" => "", "target" => "both"), "time" => array("type" => "SELECT", "value" => 0, "target" => "both", "start" => 0, "end" => 725, "addition" => 5, 'unit' => __("%s min", 'booking-package')) ), 'titleList' => array('name' => __('Name', 'booking-package'), /** 'cost' => __('Price', 'booking-package'), **/ 'cost_1' => __(/**'Cost 1'**/ 'Base Price', 'booking-package'), 'cost_2' => sprintf(__('Price %s', 'booking-package'), '2'), 'cost_3' => sprintf(__('Price %s', 'booking-package'), '3'), 'cost_4' => sprintf(__('Price %s', 'booking-package'), '4'), 'cost_5' => sprintf(__('Price %s', 'booking-package'), '5'), 'cost_6' => sprintf(__('Price %s', 'booking-package'), '6'), 'time' => __('Additional Duration', 'booking-package')) ), ); return $addNewCourse; } public function getSubscriptionsData(){ $addSubscriptions = array( 'subscription' => array('name' => 'Subscription', 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => ''), 'name' => array('name' => 'Name', 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => ''), 'active' => array('name' => 'Status', 'value' => '', 'inputLimit' => 2, 'inputType' => 'CHECK', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => array('true' => __('Enabled', 'booking-package'))), 'renewal' => array('name' => 'Automatic subscription renewal', 'value' => '', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'valueList' => array('0' => __('Invalid', 'booking-package'), '1' => __('Valid', 'booking-package')), "message" => ''), 'limit' => array('name' => 'Booking limit', 'value' => '', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'valueList' => array('0' => __('Invalid', 'booking-package'), '1' => __('Valid', 'booking-package')), "message" => ''), 'numberOfTimes' => array('name' => 'Number of times users can book by the following deadline', 'value' => '', 'inputLimit' => 1, 'inputType' => 'SELECT', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => array(1 => '1', 2 => '2')), ); return $addSubscriptions; } public function getTaxesData(){ $month = array( '1' => array('key' => 1, 'name' => __('Jan', 'booking-package')), '2' => array('key' => 2, 'name' => __('Feb', 'booking-package')), '3' => array('key' => 3, 'name' => __('Mar', 'booking-package')), '4' => array('key' => 4, 'name' => __('Apr', 'booking-package')), '5' => array('key' => 5, 'name' => __('May', 'booking-package')), '6' => array('key' => 6, 'name' => __('Jun', 'booking-package')), '7' => array('key' => 7, 'name' => __('Jul', 'booking-package')), '8' => array('key' => 8, 'name' => __('Aug', 'booking-package')), '9' => array('key' => 9, 'name' => __('Sep', 'booking-package')), '10' => array('key' => 10, 'name' => __('Oct', 'booking-package')), '11' => array('key' => 11, 'name' => __('Nov', 'booking-package')), '12' => array('key' => 12, 'name' => __('Dec', 'booking-package')), ); $day = array(); for ($i = 1; $i <= 31; $i++) { $day[$i] = array('key' => $i, 'name' => $i); } $yearList = array(); for ($i = 0; $i <= 10; $i++) { $year = date('Y') + $i; $yearList[$year] = array('key' => $year, 'name' => $year); } $addSubscriptions = array( 'name' => array('name' => __('Name', 'booking-package'), 'type' => 'both', 'gen' => 'both', 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => '', 'filterHookKey' => 'dynamicTextModification'), 'active' => array('name' => __('Status', 'booking-package'), 'type' => 'both', 'gen' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'CHECK', 'isExtensionsValid' => 0, 'isExtensionsValidPanel' => 1, 'valueList' => array('true' => __('Enabled', 'booking-package')), 'actions' => null), 'type' => array('name' => __('Type', 'booking-package'), 'type' => 'both', 'gen' => '1', 'value' => '', 'inputLimit' => 2, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => array('tax' => __('Tax', 'booking-package'), 'surcharge' => __('Extra Charge', 'booking-package')), 'option' => 1, 'optionsList' => array('tax' => 1, 'method' => 1), 'actions' => null), 'tax' => array('name' => __('Tax', 'booking-package'), 'type' => 'tax', 'gen' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => array('tax_exclusive' => __('Tax-exclusive pricing', 'booking-package'), 'tax_inclusive' => __('Tax-inclusive pricing', 'booking-package')), 'actions' => null, 'valueClasses' => array('tax_exclusive' => 'tax_exclusive', 'tax_inclusive' => 'tax_inclusive'), 'disabled' => 1), 'method' => array('name' => __('Calculation Method', 'booking-package'), 'type' => 'tax', 'gen' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => array('addition' => __('Add Fixed Amount', 'booking-package'), 'multiplication' => __('Apply Percentage', 'booking-package')), 'actions' => null, 'valueClasses' => array('addition' => 'calculationMethod', 'multiplication' => 'calculationMethod')), 'target' => array('name' => __('Target', 'booking-package'), 'type' => 'both', 'gen' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => array('room' => __('Per Room', 'booking-package'), 'guest' => __('Per Guest', 'booking-package')), 'actions' => null, 'valueClasses' => array('room' => 'target_room', 'guest' => 'target_guest')), 'scope' => array('name' => __('Range of tax or surcharge', 'booking-package'), 'type' => 'both', 'gen' => 'both', 'value' => '', 'inputLimit' => 2, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => array('day' => __('Per day', 'booking-package'), 'booking' => __('Per one booking', 'booking-package'), 'bookingEachGuests' => __('Per one booking for all guests', 'booking-package')), 'actions' => null), 'value' => array('name' => __('Value', 'booking-package'), 'type' => 'both', 'gen' => 'both', 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 1, 'valueList' => '', 'actions' => null), 'expirationDate' => array( 'key' => 'expirationDate', 'name' => __('Expiration Date', 'booking-package'), 'type' => 'both', 'gen' => 'both', 'target' => 'both', 'disabled' => 0, 'value' => '1', 'inputLimit' => 2, 'inputType' => 'MULTIPLE_FIELDS', 'isExtensionsValid' => 1, 'option' => 0, 'actions' => null, 'valueList' => array( 0 => array( 'key' => 'expirationDateStatus', 'name' => '', 'value' => '0', 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'actions' => null, 'valueList' => array('1' => __('Enabled', 'booking-package')), ), 1 => array( 'key' => 'expirationDateFromMonth', 'name' => __('From', 'booking-package') . ': ', 'value' => null, 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $month, ), 2 => array( 'key' => 'expirationDateFromDay', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $day, ), 3 => array( 'key' => 'expirationDateFromYear', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateFrom', 'actions' => null, 'valueList' => $yearList, ), 4 => array( 'key' => 'expirationDateToMonth', 'name' => __('To', 'booking-package') . ': ', 'value' => null, 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $month, ), 5 => array( 'key' => 'expirationDateToDay', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $day, ), 6 => array( 'key' => 'expirationDateToYear', 'name' => '', 'value' => '', 'inputType' => 'SELECT', 'isExtensionsValid' => 1, 'className' => 'expirationDateTo', 'actions' => null, 'valueList' => $yearList, ), ), ), ); return $addSubscriptions; } public function getOptionsForHotelData(){ $options = array( 'name' => array('name' => __('Name', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 0, 'valueList' => '', 'disabled' => 0, 'filterHookKey' => 'dynamicTextModification'), 'description' => array('name' => __('Description', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXTAREA', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 0, 'valueList' => '', 'target' => 'both', 'filterHookKey' => 'dynamicTextModification'), 'active' => array('name' => __('Status', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'CHECK', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 0, 'valueList' => array('true' => __('Enabled', 'booking-package'))), 'required' => array('key' => 'required', 'name' => 'Required', 'value' => 'true', 'inputLimit' => 1, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 0, 'valueList' => array('true' => __('Yes', 'booking-package'), 'false' => __('No', 'booking-package')), "class" => ""), 'range' => array('name' => __('Pricing Basis', 'booking-package'), 'value' => 'allDays', 'inputLimit' => 2, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 0, 'valueList' => array('allDays' => __('Charge per Day', 'booking-package'), 'oneBooking' => __('Charge Once per Booking', 'booking-package')), 'actions' => null), 'target' => array('name' => __('Calculation Basis', 'booking-package'), 'value' => 'guests', 'inputLimit' => 2, 'inputType' => 'RADIO', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 0, 'valueList' => array('guests' => __('Per Guest', 'booking-package'), 'room' => __('Per Room', 'booking-package')), 'actions' => null), 'json' => array( 'name' => __('Options', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'EXTRA', 'isExtensionsValid' => 1, 'isExtensionsValidPanel' => 0, 'format' => 'json', 'valueList' => '', 'filterHookKey' => 'dynamicTextModification', "optionsType" => array( "name" => array("type" => "TEXT", "value" => "", "target" => "both"), "adult" => array("type" => "TEXT", "value" => "", "target" => "both", "class" => array("optionWithChargeAdult")), "child" => array("type" => "TEXT", "value" => "", "target" => "both", "class" => array("optionWithChargeChild")), "room" => array("type" => "TEXT", "value" => "", "target" => "both", "class" => array("optionWithChargeRoom")) ), 'titleList' => array( 'name' => __('Display Text', 'booking-package'), 'adult' => __('Extra Charge per Adult', 'booking-package'), 'child' => __('Extra Charge per Child', 'booking-package'), 'room' => __('Extra Charge per Room', 'booking-package') ) ), ); return $options; } public function getFormInputTypeForUser() { $input = array( 'id' => array('key' => 'id', 'name' => __('Unique ID', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', "class" => ""), 'name' => array('key' => 'name', 'name' => __('Name', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', "class" => ""), 'uri' => array('key' => 'uri', 'name' => 'URL', 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', "class" => ""), 'placeholder' => array('key' => 'placeholder', 'name' => __('Placeholder Text', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', "class" => ""), 'description' => array('key' => 'description', 'name' => __('Description', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXTAREA', "class" => ""), 'active' => array('key' => 'active', 'name' => __('Status', 'booking-package'), 'value' => array('Enabled'), 'inputLimit' => 2, 'inputType' => 'CHECK', 'valueList' => array(__('Enabled', 'booking-package')), "class" => ""), 'required' => array('key' => 'required', 'name' => __('Required', 'booking-package'), 'value' => array('Enabled'), 'inputLimit' => 1, 'inputType' => 'CHECK', 'valueList' => array(__('Enabled', 'booking-package')), "class" => ""), 'type' => array('key' => 'type', 'name' => __('Type', 'booking-package'), 'value' => 'TEXT', 'inputLimit' => 1, 'inputType' => 'SELECT', 'valueList' => array('TEXT' => 'TEXT', 'SELECT' => 'SELECT', 'CHECK' => 'CHECK', 'RADIO' => 'RADIO', 'TEXTAREA' => 'TEXTAREA'), "class" => ""), 'options' => array('key' => 'options', 'name' => __('Options', 'booking-package'), 'value' => array(''), 'inputLimit' => 2, 'inputType' => 'OPTION', 'format' => 'array', "class" => "", "options" => array("name" => "text"), 'format' => 'jsonString', 'optionsType' => array(array("type" => "TEXT", "value" => "", "target" => "both"))), ); foreach ($input as $key => $value) { $input[$key]['disabled'] = 0; $input[$key]['id'] = $value['key']; $input[$key]['type'] = $value['inputType']; if (isset($value['valueList']) === true) { $input[$key]['options'] = $value['valueList']; } } return $input; } public function getFormInputType(){ $formInputType = array( 'id' => array('key' => 'id', 'name' => __('Unique ID', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', "class" => ""), 'name' => array('key' => 'name', 'name' => __('Name', 'booking-package'), 'value' => '', 'inputLimit' => 1, 'inputType' => 'TEXT', "class" => "", 'filterHookKey' => 'dynamicTextModification'), 'value' => array('key' => 'value', 'name' => __('Value', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', "class" => "hidden_panel"), 'groupId' => array('key' => 'groupId', 'name' => 'Group ID', 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', "class" => ""), #'groupName' => array('key' => 'groupName', 'name' => 'Group name', 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', "class" => ""), 'uri' => array('key' => 'uri', 'name' => 'URL', 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', "class" => "", 'filterHookKey' => 'dynamicTextModification'), 'placeholder' => array('key' => 'placeholder', 'name' => __('Placeholder Text', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXT', "class" => "", 'filterHookKey' => 'dynamicTextModification'), 'description' => array('key' => 'description', 'name' => __('Description', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'TEXTAREA', "class" => "", 'filterHookKey' => 'dynamicTextModification'), 'active' => array('key' => 'active', 'name' => __('Status', 'booking-package'), 'value' => 'true', 'inputLimit' => 2, 'inputType' => 'CHECK', 'valueList' => array('true' => __('Enabled', 'booking-package')), "class" => ""), 'required' => array('key' => 'required', 'name' => __('Required', 'booking-package'), 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('true' => __('Yes - Front-end and Dashboard', 'booking-package'), 'true_frontEnd' => __('Yes - Front-end only', 'booking-package'), 'false' => __('No', 'booking-package')), "class" => ""), 'isName' => array('key' => 'isName', 'name' => sprintf(__('Use as %s Field', 'booking-package'), __('Name', 'booking-package')), 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('true' => __('Yes', 'booking-package'), 'false' => __('No', 'booking-package')), "class" => ""), 'isEmail' => array('key' => 'isEmail', 'name' => sprintf(__('Use as %s Field', 'booking-package'), __('Email', 'booking-package')), 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('true' => __('Yes', 'booking-package'), 'false' => __('No', 'booking-package')), "class" => ""), 'isSMS' => array('key' => 'isSMS', 'name' => sprintf(__('Use as %s Field', 'booking-package'), 'SMS'), 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('true' => __('Yes', 'booking-package'), 'false' => __('No', 'booking-package')), "class" => "", 'message' => sprintf(__('If you select "%s," you will need to change the value of "Messaging Services" in the %s tab.', 'booking-package'), __('Yes', 'booking-package'), __('Settings', 'booking-package'))), 'isAddress' => array('key' => 'isAddress', 'name' => sprintf(__('Use as %s Field', 'booking-package'), __('Location', 'booking-package')), 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('true' => __('Yes', 'booking-package'), 'false' => __('No', 'booking-package')), "class" => ""), 'isTerms' => array('key' => 'isTerms', 'name' => sprintf(__('Use as %s Field', 'booking-package'), __('Agreement (Terms/Privacy)', 'booking-package')), 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('true' => __('Yes', 'booking-package'), 'false' => __('No', 'booking-package')), "class" => ""), 'isAutocomplete' => array('key' => 'isAutocomplete', 'name' => __('Save User Input Values', 'booking-package'), 'value' => 'false', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('true' => __('Yes', 'booking-package'), 'false' => __('No', 'booking-package')), "class" => ""), 'targetCustomers' => array('key' => 'targetCustomers', 'name' => __('Target', 'booking-package'), 'value' => 'customers', 'inputLimit' => 1, 'inputType' => 'RADIO', 'valueList' => array('customersAndUsers' => __('Customers and Users', 'booking-package'), 'visitors' => __('Customers', 'booking-package'), 'users' => __('Users', 'booking-package')), "class" => ""), 'type' => array('key' => 'type', 'name' => __('Type', 'booking-package'), 'value' => 'TEXT', 'inputLimit' => 1, 'inputType' => 'SELECT', 'valueList' => array('TEXT' => 'TEXT', 'SELECT' => 'SELECT', 'CHECK' => 'CHECK', 'RADIO' => 'RADIO', 'TEXTAREA' => 'TEXTAREA'), "class" => ""), 'options' => array('key' => 'options', 'name' => __('Options', 'booking-package'), 'value' => '', 'inputLimit' => 2, 'inputType' => 'OPTION', 'format' => 'array', "class" => "", "options" => array("name" => "text"), 'format' => 'jsonString', 'optionsType' => array(array("type" => "TEXT", "value" => "", "target" => "both")), 'filterHookKey' => 'dynamicTextModification'), ); if ($this->messagingApp === 0) { unset($formInputType['isSMS']['message']); } return $formInputType; } public function updateMemberSetting(){ global $wpdb; $isExtensionsValid = $this->getExtensionsValid(); $user_toolbar = intval(get_option($this->prefix . 'user_toolbar', 0)); if (isset($_POST['user_toolbar']) && intval($_POST['user_toolbar']) != $user_toolbar) { $bool = 'false'; if (intval($_POST['user_toolbar']) == 1) { $bool = 'true'; } $table_name = $wpdb->prefix."booking_package_users"; $sql = $wpdb->prepare("SELECT `key` FROM ".$table_name.";", array()); $rows = $wpdb->get_results($sql, ARRAY_A); for ($i = 0; $i < count($rows); $i++) { $key = intval($rows[$i]['key']); update_user_meta($key, 'show_admin_bar_front', $bool); } } $userFunctions = $this->userFunctions(); foreach ((array) $userFunctions as $key => $input) { if (isset($_POST[$key])) { $value = sanitize_text_field($_POST[$key]); if ($isExtensionsValid !== true && $input['inputType'] == "CHECK") { $value = 0; } if ($input['inputType'] == "TEXTAREA") { $value = sanitize_textarea_field($_POST[$key]); } update_option($this->prefix.$key, $value); $userFunctions[$key]["value"] = $value; } } return $userFunctions; } public function update($post){ $extentionBool = $this->getExtensionsValid(); $list = $this->getList(); if (isset($_POST['type']) && $_POST['type'] == "bookingSync") { $list = $this->getBookingSyncList(); } foreach ((array) $list as $listKey => $listValue) { /** if ($extentionBool === false && $listKey == 'Stripe') { continue; } **/ $category = array(); foreach ((array) $listValue as $key => $value) { if (isset($post[$key]) === true) { $value = ""; if (isset($listValue['inputType']) && $listValue['inputType'] == "TEXTAREA") { $value = sanitize_textarea_field($post[$key]); if ($key == 'booking_package_googleCalendar_json') { $value = array(); $json = json_decode($post[$key], true); foreach ((array) $json as $jsonKey => $jsonValue) { $value[sanitize_text_field($jsonKey)] = sanitize_text_field($jsonValue); } $value = json_encode($value); } } else if (isset($listValue['inputType']) && $listValue['inputType'] == "MULTIPLE_FIELDS") { var_dump($listValue); } else { $value = sanitize_text_field(trim($post[$key])); } #$value = sanitize_text_field($post[$key]); if (get_option($key) === false) { add_option($key, $value); } else { update_option($key, $value); } } if (isset($listValue[$key]['inputType']) && $listValue[$key]['inputType'] == "MULTIPLE_FIELDS") { $options = $listValue[$key]['valueList']; for ($i = 0; $i < count($options); $i++) { $optionKey = $options[$i]['key']; if (isset($post[$optionKey]) === true) { if (get_option($optionKey) === false) { add_option($optionKey, sanitize_text_field($post[$optionKey])); } else { update_option($optionKey, sanitize_text_field($post[$optionKey])); } } } } $category[$key] = $value; } $list[$listKey] = $category; } return $list; } public function refreshToken($key, $home = false){ $key = sanitize_text_field($key); $token = hash('ripemd160', sanitize_text_field($home)); if($home === false){ #$timezone = get_option('timezone_string'); #date_default_timezone_set($timezone); $token = hash('ripemd160', date('U')); } update_option($key, $token); return array('status' => 'success', 'token' => $token, 'key' => $key); } public function initialUserInputFields () { $requiredKeys = array('user_login', 'user_email', 'user_pass'); $initialUserInputFields = array( 'user_login' => array('id' => 'user_login', 'active' => 'true', 'name' => 'Username', 'value' => '', 'isName' => 'true', 'options' => array(), 'description' => '', 'placeholder' => '', 'uri' => '', 'required' => 'true', 'type' => 'TEXT'), 'user_email' => array('id' => 'user_email', 'active' => 'true', 'name' => 'Email', 'value' => '', 'isName' => 'true', 'options' => array(), 'description' => '', 'placeholder' => '', 'uri' => '', 'required' => 'true', 'type' => 'TEXT'), 'user_pass' => array('id' => 'user_pass', 'active' => 'true', 'name' => 'Password', 'value' => '', 'isName' => 'true', 'options' => array(), 'description' => '', 'placeholder' => '', 'uri' => '', 'required' => 'true', 'type' => 'PASSWORD'), 'first_name' => array('id' => 'first_name', 'active' => 'false', 'name' => __('First name', 'Booking-Package'), 'value' => '', 'isName' => 'true', 'options' => array(), 'description' => '', 'placeholder' => '', 'uri' => '', 'required' => 'true', 'type' => 'TEXT'), 'last_name' => array('id' => 'last_name', 'active' => 'false', 'name' => __('Last name', 'booking-package'), 'value' => '', 'isName' => 'true', 'options' => array(), 'description' => '', 'placeholder' => '', 'uri' => '', 'required' => 'true', 'type' => 'TEXT'), ); $userInputFields = get_option("_" . $this->prefix . "getUserInputFields", null); if (empty($userInputFields) === true) { $userInputFields = $initialUserInputFields; add_option("_" . $this->prefix . "getUserInputFields", json_encode($userInputFields)); } else { $userInputFields = json_decode($userInputFields, true); $required = true; for ($i = 0; $i < count($requiredKeys); $i++) { if (array_key_exists($requiredKeys[$i], $userInputFields) === false) { $required = false; break; } } if ($required === false) { $userInputFields = array_merge($initialUserInputFields, $userInputFields); update_option("_" . $this->prefix . "getUserInputFields", json_encode($userInputFields)); } } return array_values($userInputFields); } public function updateUserInputFields($mode) { function checkEnabled($json) { if (count($json['active']) === 0) { $json['active'] = 'false'; } else { $json['active'] = 'true'; } if (count($json['required']) === 0) { $json['required'] = 'false'; } else { $json['required'] = 'true'; } if (array_key_exists('value', $json) === false) { $json['value'] = ''; } return $json; } function updateUserInputFields($items) { $defaultName = array('user_login' => 'Username', 'user_email' => 'Email', 'user_pass' => 'Password'); $userInputFields = array(); for ($i = 0; $i < count($items); $i++) { $item = $items[$i]; if (array_key_exists($item['id'], $defaultName) === true) { $item['name'] = $defaultName[ $item['id'] ]; } $userInputFields[$item['id']] = $item; } return $userInputFields; } $userInputFields = $this->initialUserInputFields(); if ($mode === 'addUserInput') { $json = json_decode(sanitize_text_field( stripslashes($_POST['jsonStr']) ), true); $json = checkEnabled($json); array_push($userInputFields, $json); $userInputFields = updateUserInputFields($userInputFields); update_option("_" . $this->prefix . "getUserInputFields", json_encode($userInputFields)); } else if ($mode === 'editUserInput') { $json = json_decode(sanitize_text_field( stripslashes($_POST['jsonStr']) ), true); $json = checkEnabled($json); if ($json['id'] === 'user_pass') { $json['type'] = 'PASSWORD'; } for ($i = 0; $i < count($userInputFields); $i++) { if ($userInputFields[$i]['id'] === $json['id']) { $userInputFields[$i] = $json; break; } } $userInputFields = updateUserInputFields($userInputFields); update_option("_" . $this->prefix . "getUserInputFields", json_encode($userInputFields)); } else if ($mode === 'deleteUserInput') { array_splice($userInputFields, intval($_POST['index']), 1); $userInputFields = updateUserInputFields($userInputFields); update_option("_" . $this->prefix . "getUserInputFields", json_encode($userInputFields)); } else if ($mode === 'changedOrderUserInput') { $sortedUserInputFields = array(); $json = json_decode(sanitize_text_field( stripslashes($_POST['keys']) ), true); for ($i = 0; $i < count($json); $i++) { $item = (function($id, $userInputFields) { for ($i = 0; $i < count($userInputFields); $i++) { if ($id === $userInputFields[$i]['id']) { return $userInputFields[$i]; } } })($json[$i], $userInputFields); array_push($sortedUserInputFields, $item); } $userInputFields = updateUserInputFields($sortedUserInputFields); update_option("_" . $this->prefix . "getUserInputFields", json_encode($userInputFields)); } return array_values($userInputFields); } public function getUserInputFields() { $userInputFields = $this->initialUserInputFields(); return $userInputFields; } public function getForm($accountKey = 1, $originalActive = false){ global $wpdb; $table_name = $wpdb->prefix."booking_package_form"; #$wpdb->query("DROP TABLE IF EXISTS ".$table_name.";"); $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d;", array(intval($accountKey))); $row = $wpdb->get_row($sql, ARRAY_A); if (is_null($row)) { $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'data' => json_encode($this->defaultFrom()) ), array('%d', '%s') ); return $this->defaultFrom(); } else { $form = array(); $data = json_decode($row['data'], true); if (is_array($data)) { foreach ((array) $data as $key => $value) { if (isset($value['active']) === false) { $value['active'] = ''; } #$options = json_decode($value['options'], true); if (is_string($value['options']) === true) { $value['options'] = explode(',', $value['options']); } if ($originalActive === true) { $value['originalActive'] = $value['active']; } if (isset($value['isAutocomplete']) === false) { $value['isAutocomplete'] = 'true'; } if (isset($value['isSMS']) === false) { $value['isSMS'] = 'false'; } if (isset($value['placeholder']) === false) { $value['placeholder'] = ''; } array_push($form, $value); } } return $form; #return json_decode($row['data'], true); } } /** public function getFormList(){ global $wpdb; $table_name = $wpdb->prefix."booking_package_form"; $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d;", array(intval($accountKey))); } **/ public static function isIndexedArray($array) { if (!is_array($array)) { return false; } if ($array === []) { return true; } return array_keys($array) === range(0, count($array) - 1); } public function getTranslateUserInputField($field, $calendar_account_id) { } public function getTranslateFormField($field, $calendar_account_id, $local, $type = 'form_field') { $keys = ['uri', 'placeholder', 'description']; for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; if (array_key_exists($key, $field) === false) { $field[$key] = ''; } } $string_array = array('name' => $field['name'], 'url' => $field['uri'], 'placeholder' => $field['placeholder'], 'description' => $field['description'], 'options' => $field['options']); $translated_texts = apply_filters('booking_package_get_translate_text', $string_array, $type, $field['id'], intval($calendar_account_id), $local); if (is_array($translated_texts) && array_key_exists('name', $translated_texts) && array_key_exists('url', $translated_texts) && array_key_exists('placeholder', $translated_texts) && array_key_exists('description', $translated_texts) && array_key_exists('options', $translated_texts) ) { $field['name'] = $translated_texts['name']; $field['uri'] = $translated_texts['url']; $field['placeholder'] = $translated_texts['placeholder']; $field['description'] = $translated_texts['description']; if ($this->isIndexedArray($translated_texts['options']) === true && count($field['options']) === count($translated_texts['options'])) { $field['options'] = $translated_texts['options']; } } return $field; } public function getTranslateTax($tax, $calendar_account_id) { $type = 'tax'; if ($tax['type'] === 'surcharge') { $type = 'extra_charge'; } $optionNames = array(); $string_array = array('name' => $tax['name'], 'description' => '', 'options' => $optionNames); $translated_texts = apply_filters('booking_package_get_translate_text', $string_array, $type, intval($tax['key']), intval($calendar_account_id), get_locale()); if (is_array($translated_texts) && array_key_exists('name', $translated_texts) && array_key_exists('description', $translated_texts) && array_key_exists('options', $translated_texts) ) { $tax['name'] = $translated_texts['name']; } return $tax; } public function getTranslateService($service, $calendar_account_id) { $optionNames = array(); $options = json_decode($service['options'], true); for ($i = 0; $i < count($options); $i++) { array_push($optionNames, $options[$i]['name']); } $string_array = array('name' => $service['name'], 'description' => $service['description'], 'options' => $optionNames); $translated_texts = apply_filters('booking_package_get_translate_text', $string_array, 'service', intval($service['key']), intval($calendar_account_id), get_locale()); if (is_array($translated_texts) && array_key_exists('name', $translated_texts) && array_key_exists('description', $translated_texts) && array_key_exists('options', $translated_texts) ) { $service['name'] = $translated_texts['name']; $service['description'] = $translated_texts['description']; if ($this->isIndexedArray($translated_texts['options']) === true && count($optionNames) === count($translated_texts['options'])) { for ($i = 0; $i < count($translated_texts['options']); $i++) { $options[$i]['name'] = $translated_texts['options'][$i]; } $service['options'] = json_encode($options); } } return $service; } public function getTranslateGuest($guest, $calendar_account_id) { $optionNames = array(); $options = json_decode($guest['json'], true); for ($i = 0; $i < count($options); $i++) { array_push($optionNames, $options[$i]['name']); } $string_array = array('name' => $guest['name'], 'description' => $guest['description'], 'options' => $optionNames); $translated_texts = apply_filters('booking_package_get_translate_text', $string_array, 'guest', intval($guest['key']), intval($calendar_account_id), get_locale()); if (is_array($translated_texts) && array_key_exists('name', $translated_texts) && array_key_exists('description', $translated_texts) && array_key_exists('options', $translated_texts) ) { $guest['name'] = $translated_texts['name']; $guest['description'] = $translated_texts['description']; if ($this->isIndexedArray($translated_texts['options']) === true && count($optionNames) === count($translated_texts['options'])) { for ($i = 0; $i < count($translated_texts['options']); $i++) { #$index = $i + 1; $options[$i]['name'] = $translated_texts['options'][$i]; } $guest['json'] = json_encode($options); } } return $guest; } public function getTranslateOption($option, $calendar_account_id) { $optionNames = array(); $choices = json_decode($option['json'], true); for ($i = 0; $i < count($choices); $i++) { array_push($optionNames, $choices[$i]['name']); } $string_array = array('name' => $option['name'], 'description' => $option['description'], 'options' => $optionNames); $translated_texts = apply_filters('booking_package_get_translate_text', $string_array, 'option', intval($option['key']), intval($calendar_account_id), get_locale()); if (is_array($translated_texts) && array_key_exists('name', $translated_texts) && array_key_exists('description', $translated_texts) && array_key_exists('options', $translated_texts) ) { $option['name'] = $translated_texts['name']; $option['description'] = $translated_texts['description']; if ($this->isIndexedArray($translated_texts['options']) === true && count($optionNames) === count($translated_texts['options'])) { for ($i = 0; $i < count($translated_texts['options']); $i++) { $choices[$i]['name'] = $translated_texts['options'][$i]; } $option['json'] = json_encode($choices); } } return $option; } public function getCourseList($accountKey = 1) { global $wpdb; $table_name = $wpdb->prefix . "booking_package_services"; $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); $rows = $wpdb->get_results($sql, ARRAY_A); $isExtensionsValid = $this->getExtensionsValid(); for ($i = 0; $i < count($rows); $i++) { $rows[$i]['timeToProvide'] = json_decode($rows[$i]['timeToProvide'], true); if (is_null($rows[$i]['timeToProvide']) || is_string($rows[$i]['timeToProvide']) || $rows[$i]['timeToProvide'] === false) { $rows[$i]['timeToProvide'] = array(); } $options = json_decode($rows[$i]['options'], true); if (is_array($options)) { if (count($options) > 0 && isset($options[0]['cost_1']) === false) { for ($a = 0; $a < count($options); $a++) { $options[$a]['cost_1'] = $options[$a]['cost']; $options[$a]['cost_2'] = $options[$a]['cost']; $options[$a]['cost_3'] = $options[$a]['cost']; $options[$a]['cost_4'] = $options[$a]['cost']; $options[$a]['cost_5'] = $options[$a]['cost']; $options[$a]['cost_6'] = $options[$a]['cost']; } } $rows[$i]['options'] = json_encode($options); } else { $rows[$i]['options'] = "[]"; } if (is_null($rows[$i]['cost']) === true) { $rows[$i]['cost'] = 0; } if (is_null($rows[$i]['cost_1']) === true) { /** $options = json_decode($rows[$i]['options'], true); for ($a = 0; $a < count($options); $a++) { $options[$a]['cost_1'] = $options[$a]['cost']; $options[$a]['cost_2'] = $options[$a]['cost']; $options[$a]['cost_3'] = $options[$a]['cost']; $options[$a]['cost_4'] = $options[$a]['cost']; $options[$a]['cost_5'] = $options[$a]['cost']; $options[$a]['cost_6'] = $options[$a]['cost']; } $rows[$i]['options'] = $options; **/ $options = json_encode($options); $rows[$i]['cost_1'] = $rows[$i]['cost']; $table_name = $wpdb->prefix . "booking_package_services"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $bool = $wpdb->update( $table_name, array( 'cost_1' => intval($rows[$i]['cost']), 'cost_2' => intval($rows[$i]['cost']), 'cost_3' => intval($rows[$i]['cost']), 'cost_4' => intval($rows[$i]['cost']), 'cost_5' => intval($rows[$i]['cost']), 'cost_6' => intval($rows[$i]['cost']), 'options' => $options, ), array('key' => intval($rows[$i]['key'])), array( '%d', '%d', '%d', '%d', '%d', '%d', '%s', ), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ } if ($isExtensionsValid === false) { $rows[$i]['options'] = "[]"; $rows[$i]['timeToProvide'] = array(); $rows[$i]['stopServiceUnderFollowingConditions'] = 'doNotStop'; $rows[$i]['cost_2'] = $rows[$i]['cost_1']; $rows[$i]['cost_3'] = $rows[$i]['cost_1']; $rows[$i]['cost_4'] = $rows[$i]['cost_1']; $rows[$i]['cost_5'] = $rows[$i]['cost_1']; $rows[$i]['cost_6'] = $rows[$i]['cost_1']; } } /** if ($isExtensionsValid === false) { for($i = 0; $i < count($rows); $i++){ $rows[$i]['options'] = "[]"; } } **/ return $rows; } /** public function getAllCourseList(){ global $wpdb; $table_name = $wpdb->prefix . "booking_package_services"; $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); } **/ public function getCouponsList($accountKey = false) { global $wpdb; $table_name = $wpdb->prefix."booking_package_coupons"; $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `status` = 'active' AND `accountKey` = %d ORDER BY `key` ASC;", array(intval($accountKey))); $rows = $wpdb->get_results($sql, ARRAY_A); return $rows; } public function addCoupons($accountKey = false) { global $wpdb; $id = strtoupper(uniqid('coupon_')); $expirationDate = $this->validExpirationDate(); $expirationDateStatus = $expirationDate['expirationDateStatus']; $expirationDateFrom = $expirationDate['expirationDateFrom']; $expirationDateTo = $expirationDate['expirationDateTo']; $active = 0; if (intval($_POST['active']) == 1) { $active = 1; } $table_name = $wpdb->prefix."booking_package_coupons"; $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'id' => sanitize_text_field($id), 'name' => sanitize_text_field(stripslashes($_POST['name'])), 'target' => sanitize_text_field($_POST['target']), 'limited' => sanitize_text_field($_POST['limited']), 'method' => sanitize_text_field($_POST['method']), 'value' => intval($_POST['value']), 'expirationDateStatus' => intval($expirationDateStatus), 'expirationDateFrom' => intval($expirationDateFrom), 'expirationDateTo' => intval($expirationDateTo), 'description' => sanitize_textarea_field(stripslashes($_POST['description'])), 'active' => intval($active), ), array('%d', '%s', '%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d') ); return $this->getCouponsList($accountKey); } public function deleteCouponsItem($accountKey = false) { global $wpdb; $table_name = $wpdb->prefix . "booking_package_coupons"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'status' => 'deleted', ), array('key' => intval($_POST['key'])), array(), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getCouponsList($accountKey); } public function updateCoupons($accountKey = false) { global $wpdb; $table_name = $wpdb->prefix."booking_package_coupons"; $sql = $wpdb->prepare( "SELECT * FROM ".$table_name." WHERE `status` = 'active' AND `key` = %d ORDER BY `key` ASC;", array(intval($_POST['key'])) ); $coupon = $wpdb->get_row($sql, ARRAY_A); if (!empty($coupon)) { if (!empty($_POST['id']) && $_POST['id'] != $coupon['id']) { $sql = $wpdb->prepare( "SELECT * FROM ".$table_name." WHERE `status` = 'active' AND `accountKey` = %d AND `id` = %s;", array( intval($_POST['key']), sanitize_text_field($_POST['id']) ) ); $row = $wpdb->get_row($sql, ARRAY_A); if (!empty($row)) { $_POST['id'] = $coupon['id']; } } $expirationDate = $this->validExpirationDate(); $expirationDateStatus = $expirationDate['expirationDateStatus']; $expirationDateFrom = $expirationDate['expirationDateFrom']; $expirationDateTo = $expirationDate['expirationDateTo']; $active = 0; if (intval($_POST['active']) == 1) { $active = 1; } try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'id' => sanitize_text_field($_POST['id']), 'name' => sanitize_text_field(stripslashes($_POST['name'])), 'target' => sanitize_text_field($_POST['target']), 'limited' => sanitize_text_field($_POST['limited']), 'method' => sanitize_text_field($_POST['method']), 'value' => intval($_POST['value']), 'expirationDateStatus' => intval($expirationDateStatus), 'expirationDateFrom' => intval($expirationDateFrom), 'expirationDateTo' => intval($expirationDateTo), 'description' => sanitize_textarea_field(stripslashes($_POST['description'])), 'active' => intval($active), ), array('key' => intval($_POST['key'])), array('%s', '%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ } return $this->getCouponsList($accountKey); } public function getListOfDaysOfWeek() { $numberKeys = array(); $guestsList = $this->guestsInputType(); if (isset($guestsList['json']['optionsType']['prices'])) { $dayOfWeeks = $guestsList['json']['optionsType']['prices']['options']; for ($i = 0; $i < count($dayOfWeeks); $i++) { array_push($numberKeys, $dayOfWeeks[$i]['key']); } } return $numberKeys; } public function getObjectOfDaysOfWeek() { $numberObject = array(); $numberKeys = $this->getListOfDaysOfWeek(); for ($i = 0; $i < count($numberKeys); $i++) { $numberObject[$numberKeys[$i]] = 0; } return $numberObject; } public function getStaffList($accountKey = false, $booking = false) { global $wpdb; $table_name = $wpdb->prefix . "booking_package_staff"; return array(); } public function addStaff($accountKey = false) { global $wpdb; $table_name = $wpdb->prefix . "booking_package_staff"; return array(); } public function updateStaff($accountKey = false) { global $wpdb; $table_name = $wpdb->prefix . "booking_package_staff"; return array(); } public function deleteStaffItem($accountKey = false) { global $wpdb; if($accountKey != false){ $table_name = $wpdb->prefix . "booking_package_staff"; #$wpdb->delete($table_name, array('key' => intval($_POST['key'])), array('%d')); return $this->getStaffList($accountKey); } die(); } public function changeStaffRank($accountKey = false) { global $wpdb; if($accountKey != false){ $table_name = $wpdb->prefix . "booking_package_staff"; /** $keyList = explode(",", $_POST['keyList']); for($i = 0; $i < count($keyList); $i++){ $ranking = $i + 1; $wpdb->update( $table_name, array( 'ranking' => intval($ranking) ), array('key' => intval($keyList[$i]), 'accountKey' => intval($accountKey)), array('%d'), array('%d', '%d') ); } **/ return $this->getStaffList($accountKey); } die(); } public function getGuestsList($accountKey = false, $booking = false) { global $wpdb; $numberKeys = $this->getListOfDaysOfWeek(); $isExtensionsValid = $this->getExtensionsValid(); $table_name = $wpdb->prefix . "booking_package_guests"; $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); if ($booking === true) { $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d AND `active` = 'true' ORDER BY ranking ASC;", array(intval($accountKey))); } $rows = $wpdb->get_results($sql, ARRAY_A); foreach ((array) $rows as $key => $value) { $updatePrices = false; $list = array(); if ($booking === true) { $value = $this->getTranslateGuest($value, intval($accountKey) ); $list = json_decode($value['json'], true); array_unshift($list, array("number" => 0, "price" => 0, "name" => __("Select", 'booking-package'))); if ($isExtensionsValid !== true) { $value['costInServices'] = 'cost_1'; $value['reflectService'] = '0'; $value['reflectAdditional'] = '0'; } } else { $list = json_decode($value['json'], true); } for ($i = 0; $i < count($list); $i++) { if (isset($list[$i]['price']) === false) { $list[$i]['price'] = 0; } for ($a = 0; $a < count($numberKeys); $a++) { if (isset($list[$i][$numberKeys[$a]]) === false) { $list[$i][$numberKeys[$a]] = $list[$i]['price']; } if (empty($list[$i][$numberKeys[$a]])) { $list[$i][$numberKeys[$a]] = 0; } if ($isExtensionsValid === false && ($numberKeys[$a] == 'priceOnDayBeforeNationalHoliday' || $numberKeys[$a] == 'priceOnNationalHoliday')) { $list[$i][$numberKeys[$a]] = 0; } } } $value['json'] = json_encode($list); $rows[$key] = $value; } return $rows; } public function checkDuplicateOptionNumbers($options, $uniqueKey = 'number') { $numbers = array(); foreach ($options as $option) { $number = null; if (is_object($option) && isset($option[$uniqueKey])) { $number = $option[$uniqueKey]; } elseif (is_array($option) && isset($option[$uniqueKey])) { $number = $option[$uniqueKey]; } if ($number !== null) { if (in_array($number, $numbers, true)) { return true; } array_push($numbers, $number); } } return false; } public function updateGuests($accountKey = false){ global $wpdb; if ($accountKey != false) { /** $numberKeys = array( 'number', 'price', 'priceOnMonday', 'priceOnTuesday', 'priceOnWednesday', 'priceOnThursday', 'priceOnFriday', 'priceOnSaturday', 'priceOnSunday', 'priceOnDayBeforeNationalHoliday', 'priceOnNationalHoliday', ); **/ $numberKeys = $this->getListOfDaysOfWeek(); array_unshift($numberKeys, 'number', 'price'); $json = array(); if (isset($_POST['json'])) { $jsonList = json_decode(stripslashes($_POST['json']), true); for ($i = 0; $i < count($jsonList); $i++) { $object = array(); foreach ((array) $jsonList[$i] as $key => $value) { $object[sanitize_text_field($key)] = sanitize_text_field($value); $isNumber = array_search($key, $numberKeys); if ($isNumber !== false) { $value = $this->getOnlyNumbers($value); $object[sanitize_text_field($key)] = intval($value); } if ($this->guestForDayOfTheWeekRates === 0) { if ($key !== 'number' && $key !== 'price' && $key !== 'name') { unset($object[sanitize_text_field($key)]); } } } array_push($json, $object); } if ($this->checkDuplicateOptionNumbers($json, 'number') === true) { return array('status' => 'error', 'message' => sprintf(__('The value for \'%s\' in the options must be a unique number that does not duplicate values from other settings.', 'booking-package'), __('Number of Guests', 'booking-package') ) ); } $guestsInCapacity = 'included'; if (isset($_POST['guestsInCapacity'])) { $guestsInCapacity = $_POST['guestsInCapacity']; if (empty($_POST['guestsInCapacity']) === true) { $guestsInCapacity = 'included'; } } $reflectService = 0; if (isset($_POST['reflectService'])) { $reflectService = intval($_POST['reflectService']); } $reflectAdditional = 0; if (isset($_POST['reflectAdditional'])) { $reflectAdditional = intval($_POST['reflectAdditional']); } $costInServices = 'cost_1'; if (isset($_POST['costInServices']) && $this->getExtensionsValid() === true) { $costInServices = $_POST['costInServices']; } $table_name = $wpdb->prefix."booking_package_guests"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'name' => sanitize_text_field(stripslashes($_POST['name'])), 'costInServices' => sanitize_text_field($costInServices), 'target' => sanitize_text_field($_POST['target']), 'guestsInCapacity' => sanitize_text_field($guestsInCapacity), 'json' => json_encode($json), 'required' => intval($_POST['required']), 'reflectService' => intval($reflectService), 'reflectAdditional' => intval($reflectAdditional), 'description' => sanitize_textarea_field(stripslashes($_POST['description'])), 'active' => sanitize_text_field($_POST['active']), ), array('key' => intval($_POST['key'])), array('%s', '%s', '%s', '%s', '%s', '%d', '%d', '%d', '%s', '%s'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ } #return $json; return $this->getGuestsList($accountKey); } die(); } public function addGuests($accountKey = false){ global $wpdb; if ($accountKey != false) { /** $numberKeys = array( 'number', 'price', 'priceOnMonday', 'priceOnTuesday', 'priceOnWednesday', 'priceOnThursday', 'priceOnFriday', 'priceOnSaturday', 'priceOnSunday', 'priceOnDayBeforeNationalHoliday', 'priceOnNationalHoliday', ); **/ $numberKeys = $this->getListOfDaysOfWeek(); array_unshift($numberKeys, 'number', 'price'); $json = array(); if (isset($_POST['json'])) { $jsonList = json_decode(stripslashes($_POST['json']), true); for ($i = 0; $i < count($jsonList); $i++) { $object = array(); foreach ((array) $jsonList[$i] as $key => $value) { $object[sanitize_text_field($key)] = sanitize_text_field($value); $isNumber = array_search($key, $numberKeys); if ($isNumber !== false) { $value = $this->getOnlyNumbers($value); $object[sanitize_text_field($key)] = intval($value); } /** if ($key == 'number' || $key == 'price') { $value = $this->getOnlyNumbers($value); $object[sanitize_text_field($key)] = intval($value); } **/ } array_push($json, $object); } if ($this->checkDuplicateOptionNumbers($json, 'number') === true) { return array('status' => 'error', 'message' => sprintf(__('The value for \'%s\' in the options must be a unique number that does not duplicate values from other settings.', 'booking-package'), __('Number of Guests', 'booking-package') ) ); } $guestsInCapacity = 'included'; if (isset($_POST['guestsInCapacity'])) { $guestsInCapacity = $_POST['guestsInCapacity']; if (empty($_POST['guestsInCapacity']) === true) { $guestsInCapacity = 'included'; } } $reflectService = 0; if (isset($_POST['reflectService'])) { $reflectService = intval($_POST['reflectService']); } $reflectAdditional = 0; if (isset($_POST['reflectAdditional'])) { $reflectAdditional = intval($_POST['reflectAdditional']); } $costInServices = 'cost_1'; if (isset($_POST['costInServices']) && $this->getExtensionsValid() === true) { $costInServices = $_POST['costInServices']; } $table_name = $wpdb->prefix."booking_package_guests"; $sql = $wpdb->prepare("SELECT COUNT(*) FROM ".$table_name." WHERE `accountKey` = %d;", array(intval($accountKey))); $row = $wpdb->get_row($sql, ARRAY_A); $count = $row['COUNT(*)'] + 1; #var_dump($count); $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'name' => sanitize_text_field(stripslashes($_POST['name'])), 'costInServices' => sanitize_text_field($costInServices), 'target' => sanitize_text_field($_POST['target']), 'guestsInCapacity' => sanitize_text_field($guestsInCapacity), 'json' => json_encode($json), 'ranking' => intval($count), 'required' => intval($_POST['required']), 'reflectService' => intval($reflectService), 'reflectAdditional' => intval($reflectAdditional), 'description' => sanitize_textarea_field(stripslashes($_POST['description'])), 'active' => sanitize_text_field($_POST['active']), ), array('%d', '%s', '%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%s') ); } return $this->getGuestsList($accountKey); } die(); } public function deleteGuestsItem($accountKey = false){ global $wpdb; if($accountKey != false){ $table_name = $wpdb->prefix."booking_package_guests"; $wpdb->delete($table_name, array('key' => intval($_POST['key'])), array('%d')); return $this->getGuestsList($accountKey); } die(); } public function changeGuestsRank($accountKey = false){ global $wpdb; if($accountKey != false){ $table_name = $wpdb->prefix . "booking_package_guests"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $keyList = explode(",", $_POST['keyList']); for($i = 0; $i < count($keyList); $i++){ $ranking = $i + 1; $wpdb->update( $table_name, array( 'ranking' => intval($ranking) ), array('key' => intval($keyList[$i]), 'accountKey' => intval($accountKey)), array('%d'), array('%d', '%d') ); } $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getGuestsList($accountKey); } die(); } public function validExpirationDate() { $response = array('expirationDateStatus' => 0, 'expirationDateFrom' => 0, 'expirationDateTo' => 0); if (isset($_POST['expirationDateStatus'])) { if (empty($_POST['expirationDateStatus']) === false) { $response['expirationDateStatus'] = $_POST['expirationDateStatus']; } $response['expirationDateFrom'] = $_POST['expirationDateFromYear'] . sprintf('%02d', $_POST['expirationDateFromMonth']) . sprintf('%02d', $_POST['expirationDateFromDay']); $response['expirationDateTo'] = $_POST['expirationDateToYear'] . sprintf('%02d', $_POST['expirationDateToMonth']) . sprintf('%02d', $_POST['expirationDateToDay']); } return $response; } public function getBlockEmailLists($schedule) { global $wpdb; $response = array(); $dateFormat = intval(get_option($this->prefix."dateFormat", 0)); $positionOfWeek = get_option($this->prefix."positionOfWeek", "before"); $table_name = $wpdb->prefix . "booking_package_block_list"; #$sql = $wpdb->prepare("SELECT * FROM " . $table_name . " ORDER BY date DESC;", array()); $rows = $wpdb->get_results("SELECT * FROM " . $table_name . " ORDER BY date DESC;", ARRAY_A); foreach ((array) $rows as $key => $value) { $value['date'] = $schedule->dateFormat($dateFormat, $positionOfWeek, $value['date'], '', true, true, 'text'); array_push($response, $value); } return $response; } public function addBlockEmail($email, $schedule) { global $wpdb; $lastKey = null; $email = sanitize_text_field(trim($email)); $dateFormat = intval(get_option($this->prefix."dateFormat", 0)); $positionOfWeek = get_option($this->prefix."positionOfWeek", "before"); $date = date("U"); $table_name = $wpdb->prefix . "booking_package_block_list"; $sql = $wpdb->prepare( "SELECT `key` FROM `" . $table_name . "` WHERE `value` = %s;", array($email) ); $row = $wpdb->get_row($sql, ARRAY_A); if (is_null($row)) { $wpdb->insert( $table_name, array( 'type' => 'email', 'value' => $email, 'date' => intval($date), ), array('%s', '%s', '%d') ); $lastKey = $wpdb->insert_id; $date = $schedule->dateFormat($dateFormat, $positionOfWeek, $date, '', true, true, 'text'); $blocskList = $this->getBlockEmailLists($schedule); return array('status' => 'success', 'key' => $lastKey, 'email' => $email, 'date' => $date, 'blocskList' => $blocskList); } return array('status' => 'error', 'message' => sprintf(__('You have already added the "%s".', 'booking-package'), $email)); } public function deleteBlockEmail($key, $schedule) { global $wpdb; $table_name = $wpdb->prefix . "booking_package_block_list"; $wpdb->delete( $table_name, array( 'key' => intval($key) ), array('%d') ); return $this->getBlockEmailLists($schedule); } public function addCourse(){ $accountKey = 1; if (isset($_POST['accountKey'])) { $accountKey = $_POST['accountKey']; } $expirationDate = $this->validExpirationDate(); $expirationDateStatus = $expirationDate['expirationDateStatus']; $expirationDateFrom = $expirationDate['expirationDateFrom']; $expirationDateTo = $expirationDate['expirationDateTo']; $options = array(); if (isset($_POST['options'])) { $jsonList = json_decode(stripslashes($_POST['options']), true); for ($i = 0; $i < count($jsonList); $i++) { $object = array(); foreach ((array) $jsonList[$i] as $key => $value) { if ($key == 'cost_1' || $key == 'cost_2' || $key == 'cost_3' || $key == 'cost_4' || $key == 'cost_5' || $key == 'cost_6') { if (is_int($value) === false) { $value = $this->getOnlyNumbers($value); } } $object[sanitize_text_field($key)] = sanitize_text_field($value); } array_push($options, $object); } if ($this->getExtensionsValid() === false) { $options = array(); } } $timeToProvide = array(); if (isset($_POST['timeToProvide'])) { $jsonList = json_decode(stripslashes($_POST['timeToProvide']), true); for ($i = 0; $i < count($jsonList); $i++) { $object = array(); foreach ((array) $jsonList[$i] as $key => $value) { $object[sanitize_text_field($key)] = sanitize_text_field($value); } array_push($timeToProvide, $object); } if ($this->getExtensionsValid() === false) { $timeToProvide = array(); } } if (!isset($_POST['target'])) { $_POST['target'] = 'visitors_users'; } if (!isset($_POST['stopServiceUnderFollowingConditions'])) { $_POST['stopServiceUnderFollowingConditions'] = 'doNotStop'; $_POST['stopServiceForDayOfTimes'] = 'timeSlot'; $_POST['stopServiceForSpecifiedNumberOfTimes'] = 0; } if (!isset($_POST['doNotStopServiceAsException']) || empty($_POST['doNotStopServiceAsException'])) { $_POST['doNotStopServiceAsException'] = 'hasNotException'; } for ($i = 1; $i <= 6; $i++) { if (!isset($_POST['cost_' . $i])) { $_POST['cost_' . $i] = 0; } if (is_int($_POST['cost_' . $i]) === false) { $_POST['cost_' . $i] = $this->getOnlyNumbers($_POST['cost_' . $i]); } if ($i > 1 && $this->getExtensionsValid() === false) { $_POST['cost_' . $i] = 0; } } global $wpdb; $table_name = $wpdb->prefix . "booking_package_services"; $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'name' => sanitize_text_field($_POST['name']), 'description' => sanitize_textarea_field($_POST['description']), 'cost_1' => intval($_POST['cost_1']), 'cost_2' => intval($_POST['cost_2']), 'cost_3' => intval($_POST['cost_3']), 'cost_4' => intval($_POST['cost_4']), 'cost_5' => intval($_POST['cost_5']), 'cost_6' => intval($_POST['cost_6']), 'time' => intval($_POST['time']), 'ranking' => intval($_POST['rank']), 'active' => sanitize_text_field($_POST['active']), 'target' => sanitize_text_field($_POST['target']), 'selectOptions' => intval($_POST['selectOptions']), 'options' => json_encode($options), 'timeToProvide' => json_encode($timeToProvide), 'expirationDateStatus' => intval($expirationDateStatus), 'expirationDateFrom' => intval($expirationDateFrom), 'expirationDateTo' => intval($expirationDateTo), 'stopServiceUnderFollowingConditions' => sanitize_text_field($_POST['stopServiceUnderFollowingConditions']), 'doNotStopServiceAsException' => sanitize_text_field($_POST['doNotStopServiceAsException']), 'stopServiceForDayOfTimes' => sanitize_text_field($_POST['stopServiceForDayOfTimes']), 'stopServiceForSpecifiedNumberOfTimes' => intval($_POST['stopServiceForSpecifiedNumberOfTimes']), ), array( '%d', '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%d', '%s', '%s', '%d', '%d', '%d', '%s', '%s', '%s', '%d', ) ); /** $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); $rows = $wpdb->get_results($sql, ARRAY_A); return $rows; **/ return $this->getCourseList($accountKey); } public function updateCourse(){ $accountKey = 1; if (isset($_POST['accountKey'])) { $accountKey = $_POST['accountKey']; } $expirationDate = $this->validExpirationDate(); $expirationDateStatus = $expirationDate['expirationDateStatus']; $expirationDateFrom = $expirationDate['expirationDateFrom']; $expirationDateTo = $expirationDate['expirationDateTo']; $options = array(); if (isset($_POST['options'])) { $jsonList = json_decode(stripslashes($_POST['options']), true); for ($i = 0; $i < count($jsonList); $i++) { $object = array(); foreach ((array) $jsonList[$i] as $key => $value) { if ($key == 'cost_1' || $key == 'cost_2' || $key == 'cost_3' || $key == 'cost_4' || $key == 'cost_5' || $key == 'cost_6') { if (is_int($value) === false) { $value = $this->getOnlyNumbers($value); } } $object[sanitize_text_field($key)] = sanitize_text_field($value); } array_push($options, $object); } if ($this->getExtensionsValid() === false) { $options = array(); } } $timeToProvide = array(); if (isset($_POST['timeToProvide'])) { $jsonList = json_decode(stripslashes($_POST['timeToProvide']), true); for ($i = 0; $i < count($jsonList); $i++) { $object = array(); if (is_array($jsonList[$i])) { foreach ((array) $jsonList[$i] as $key => $value) { $object[sanitize_text_field($key)] = sanitize_text_field($value); } } array_push($timeToProvide, $object); } if ($this->getExtensionsValid() === false) { $timeToProvide = array(); } } if (!isset($_POST['target'])) { $_POST['target'] = 'visitors_users'; } if (!isset($_POST['stopServiceUnderFollowingConditions'])) { $_POST['stopServiceUnderFollowingConditions'] = 'doNotStop'; $_POST['stopServiceForDayOfTimes'] = 'timeSlot'; $_POST['stopServiceForSpecifiedNumberOfTimes'] = 0; } if (!isset($_POST['doNotStopServiceAsException']) || empty($_POST['doNotStopServiceAsException'])) { $_POST['doNotStopServiceAsException'] = 'hasNotException'; } for ($i = 1; $i <= 6; $i++) { if (!isset($_POST['cost_' . $i])) { $_POST['cost_' . $i] = 0; } if (is_int($_POST['cost_' . $i]) === false) { $_POST['cost_' . $i] = $this->getOnlyNumbers($_POST['cost_' . $i]); } if ($i > 1 && $this->getExtensionsValid() === false) { $_POST['cost_' . $i] = 0; } } global $wpdb; $table_name = $wpdb->prefix . "booking_package_services"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'name' => sanitize_text_field(stripslashes($_POST['name'])), 'description' => sanitize_textarea_field(stripslashes($_POST['description'])), 'time' => intval($_POST['time']), 'cost_1' => intval($_POST['cost_1']), 'cost_2' => intval($_POST['cost_2']), 'cost_3' => intval($_POST['cost_3']), 'cost_4' => intval($_POST['cost_4']), 'cost_5' => intval($_POST['cost_5']), 'cost_6' => intval($_POST['cost_6']), 'active' => sanitize_text_field($_POST['active']), 'target' => sanitize_text_field($_POST['target']), 'selectOptions' => intval($_POST['selectOptions']), 'options' => json_encode($options), 'timeToProvide' => json_encode($timeToProvide), 'expirationDateStatus' => intval($expirationDateStatus), 'expirationDateFrom' => intval($expirationDateFrom), 'expirationDateTo' => intval($expirationDateTo), 'stopServiceUnderFollowingConditions' => sanitize_text_field($_POST['stopServiceUnderFollowingConditions']), 'doNotStopServiceAsException' => sanitize_text_field($_POST['doNotStopServiceAsException']), 'stopServiceForDayOfTimes' => sanitize_text_field($_POST['stopServiceForDayOfTimes']), 'stopServiceForSpecifiedNumberOfTimes' => intval($_POST['stopServiceForSpecifiedNumberOfTimes']), ), array('key' => intval($_POST['key'])), array( '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%s', '%s', '%d', '%s', '%s', '%d', '%d', '%d', '%s', '%s', '%s', '%d', ), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getCourseList($accountKey); } public function copyCourse() { $accountKey = 1; if(isset($_POST['accountKey'])){ $accountKey = $_POST['accountKey']; } global $wpdb; $table_name = $wpdb->prefix . "booking_package_services"; $tmp_table_name = $table_name."_tmp"; $sql = $wpdb->prepare('SELECT COUNT(`key`) as `count` FROM ' . $table_name . ' WHERE `accountKey` = %d', array(intval($accountKey))); $row = $wpdb->get_row($sql, ARRAY_A); $ranking = $row['count'] + 1; $sql = $wpdb->prepare("CREATE TEMPORARY TABLE " . $tmp_table_name . " SELECT * FROM " . $table_name . " WHERE `key` = %d;", array(intval($_POST['key']))); $wpdb->query($sql); $wpdb->query("ALTER TABLE " . $tmp_table_name . " drop `key`;"); $sql = $wpdb->prepare("UPDATE " . $tmp_table_name . " SET `name` = CONCAT(name, ' Copy'), `ranking` = %d, `active` = '';", array(intval($ranking))); $wpdb->query($sql); #$wpdb->query("UPDATE " . $tmp_table_name . " SET `name` = CONCAT(name, ' Copy'), `active` = '';"); $wpdb->query("INSERT INTO " . $table_name . " SELECT 0," . $tmp_table_name . ".* FROM " . $tmp_table_name . ";"); $wpdb->query("DROP TABLE " . $tmp_table_name . ";"); $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); $rows = $wpdb->get_results($sql, ARRAY_A); return $rows; } public function deleteCourse(){ $accountKey = 1; if(isset($_POST['accountKey'])){ $accountKey = $_POST['accountKey']; } global $wpdb; $table_name = $wpdb->prefix . "booking_package_services"; $wpdb->delete($table_name, array('key' => intval($_POST['key'])), array('%d')); $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); $rows = $wpdb->get_results($sql, ARRAY_A); return $rows; } public function getSubscriptions(){ global $wpdb; $table_name = $wpdb->prefix."booking_package_subscriptions"; $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($_POST['accountKey']))); $rows = $wpdb->get_results($sql, ARRAY_A); $isExtensionsValid = $this->getExtensionsValid(); if ($isExtensionsValid === false) { return array(); } else { return $rows; } } public function addSubscriptions(){ $accountKey = $_POST['accountKey']; if ($this->getExtensionsValid() === false) { return array(); } global $wpdb; $table_name = $wpdb->prefix."booking_package_subscriptions"; $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'name' => sanitize_text_field($_POST['name']), 'subscription' => sanitize_text_field($_POST['subscription']), 'active' => sanitize_text_field($_POST['active']), 'ranking' => intval($_POST['rank']), 'renewal' => intval($_POST['renewal']), 'limit' => intval($_POST['limit']), 'numberOfTimes' => intval($_POST['numberOfTimes']), ), array('%d', '%s', '%s', '%s', '%d', '%d', '%d', '%d') ); $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); $rows = $wpdb->get_results($sql, ARRAY_A); return $rows; } public function updateSubscriptions(){ $accountKey = $_POST['accountKey']; if ($this->getExtensionsValid() === false) { return array(); } global $wpdb; $table_name = $wpdb->prefix . "booking_package_subscriptions"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'name' => sanitize_text_field($_POST['name']), 'active' => sanitize_text_field($_POST['active']), 'renewal' => intval($_POST['renewal']), 'limit' => intval($_POST['limit']), 'numberOfTimes' => intval($_POST['numberOfTimes']), ), array('key' => intval($_POST['key'])), array('%s', '%s', '%d', '%d', '%d'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getSubscriptions(); } public function deleteSubscriptions(){ global $wpdb; $table_name = $wpdb->prefix."booking_package_subscriptions"; $wpdb->delete($table_name, array('key' => intval($_POST['key'])), array('%d')); return $this->getSubscriptions(); } public function changeSubscriptionsRank(){ $keyList = explode(",", $_POST['keyList']); $indexList = explode(",", $_POST['indexList']); global $wpdb; $table_name = $wpdb->prefix . "booking_package_subscriptions"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); for($i = 0; $i < count($keyList); $i++){ $wpdb->update( $table_name, array('ranking' => intval($indexList[$i])), array('key' => intval($keyList[$i])), array('%d'), array('%d') ); } $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getSubscriptions(); } public function getTaxes($accountKey, $sort = 'no') { global $wpdb; $table_name = $wpdb->prefix . "booking_package_taxes"; $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); if ($sort === 'yes') { $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d ORDER BY (type = 'surcharge') DESC, (type = 'tax') DESC, ranking ASC;", array(intval($accountKey))); } if (isset($_POST['taxType']) === true) { $sql = $wpdb->prepare( "SELECT * FROM " . $table_name . " WHERE `accountKey` = %d AND `type` = %s ORDER BY ranking ASC;", array( intval($accountKey), sanitize_text_field($_POST['taxType']) ) ); } $rows = $wpdb->get_results($sql, ARRAY_A); $isExtensionsValid = $this->getExtensionsValid(); if ($isExtensionsValid === false) { return array(); } else { return $rows; } } public function addTax($accountKey) { $_POST['taxType'] = 'tax'; $_POST['type'] = 'tax'; $_POST['scope'] = 'day'; return $this->addTaxAndExtraCharge($accountKey); } public function addExtraCharge($accountKey) { $_POST['taxType'] = 'surcharge'; $_POST['type'] = 'surcharge'; $_POST['method'] = 'addition'; if ( !isset($_POST['scope']) ) { $_POST['scope'] = 'day'; } return $this->addTaxAndExtraCharge($accountKey); } public function addTaxAndExtraCharge($accountKey) { if ($_POST['type'] == 'surcharge') { $_POST['tax'] = 'tax_inclusive'; } $expirationDate = $this->validExpirationDate(); $expirationDateStatus = $expirationDate['expirationDateStatus']; $expirationDateFrom = $expirationDate['expirationDateFrom']; $expirationDateTo = $expirationDate['expirationDateTo']; global $wpdb; $table_name = $wpdb->prefix . "booking_package_taxes"; $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'name' => sanitize_text_field($_POST['name']), 'ranking' => intval($_POST['rank']), 'active' => sanitize_text_field($_POST['active']), 'type' => sanitize_text_field($_POST['type']), 'tax' => sanitize_text_field($_POST['tax']), 'method' => sanitize_text_field($_POST['method']), 'target' => sanitize_text_field($_POST['target']), 'scope' => sanitize_text_field($_POST['scope']), 'value' => floatval($_POST['value']), 'expirationDateStatus' => intval($expirationDateStatus), 'expirationDateFrom' => intval($expirationDateFrom), 'expirationDateTo' => intval($expirationDateTo), 'generation' => intval(2), ), array('%d', '%s', '%d', '%s', '%s', '%s', '%s', '%s', '%s', '%f', '%d', '%d', '%d', '%d') ); return $this->getTaxes($accountKey); } public function updateTax($accountKey) { $_POST['taxType'] = 'tax'; $_POST['type'] = 'tax'; return $this->updateTaxAndExtraCharge($accountKey, 'tax'); } public function updateExtraCharge($accountKey) { $_POST['taxType'] = 'surcharge'; $_POST['type'] = 'surcharge'; $_POST['method'] = 'addition'; return $this->updateTaxAndExtraCharge($accountKey, 'extraChaarge'); } public function updateTaxAndExtraCharge($accountKey, $mode) { $expirationDate = $this->validExpirationDate(); $expirationDateStatus = $expirationDate['expirationDateStatus']; $expirationDateFrom = $expirationDate['expirationDateFrom']; $expirationDateTo = $expirationDate['expirationDateTo']; if (!isset($_POST['active']) || strlen($_POST['active']) == 0) { $_POST['active'] = "false"; } global $wpdb; $table_name = $wpdb->prefix . "booking_package_taxes"; $sql = $wpdb->prepare( "SELECT `key`, `generation` FROM ".$table_name." WHERE `accountKey` = %d AND `key` = %d;", array(intval($accountKey), intval($_POST['key'])) ); $row = $wpdb->get_row($sql, ARRAY_A); $generation = intval($row['generation']); if ($generation == 2) { if ($mode == 'tax') { $_POST['scope'] = 'day'; } else if ($mode == 'extraChaarge') { $_POST['tax'] = 'tax_inclusive'; } } else { if ($_POST['type'] == 'surcharge') { $_POST['tax'] = 'tax_inclusive'; } } try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'name' => sanitize_text_field($_POST['name']), 'active' => sanitize_text_field($_POST['active']), 'type' => sanitize_text_field($_POST['type']), 'tax' => sanitize_text_field($_POST['tax']), 'method' => sanitize_text_field($_POST['method']), 'target' => sanitize_text_field($_POST['target']), 'scope' => sanitize_text_field($_POST['scope']), 'value' => floatval($_POST['value']), 'expirationDateStatus' => intval($expirationDateStatus), 'expirationDateFrom' => intval($expirationDateFrom), 'expirationDateTo' => intval($expirationDateTo), ), array('key' => intval($_POST['key'])), array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%f', '%d', '%d', '%d'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getTaxes($accountKey); } public function deleteTax($accountKey) { $_POST['taxType'] = 'tax'; return $this->deleteTaxAndExtraCharge($accountKey); } public function deleteExtraCharge($accountKey) { $_POST['taxType'] = 'surcharge'; return $this->deleteTaxAndExtraCharge($accountKey); } public function deleteTaxAndExtraCharge($accountKey) { global $wpdb; $table_name = $wpdb->prefix . "booking_package_taxes"; $wpdb->delete($table_name, array('key' => intval($_POST['key'])), array('%d')); return $this->getTaxes($accountKey); } public function addTaxes($accountKey) { if ($_POST['type'] == 'surcharge') { $_POST['tax'] = 'tax_inclusive'; } $expirationDate = $this->validExpirationDate(); $expirationDateStatus = $expirationDate['expirationDateStatus']; $expirationDateFrom = $expirationDate['expirationDateFrom']; $expirationDateTo = $expirationDate['expirationDateTo']; global $wpdb; $table_name = $wpdb->prefix."booking_package_taxes"; $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'name' => sanitize_text_field($_POST['name']), 'ranking' => intval($_POST['rank']), 'active' => sanitize_text_field($_POST['active']), 'type' => sanitize_text_field($_POST['type']), 'tax' => sanitize_text_field($_POST['tax']), 'method' => sanitize_text_field($_POST['method']), 'target' => sanitize_text_field($_POST['target']), 'scope' => sanitize_text_field($_POST['scope']), 'value' => floatval($_POST['value']), 'expirationDateStatus' => intval($expirationDateStatus), 'expirationDateFrom' => intval($expirationDateFrom), 'expirationDateTo' => intval($expirationDateTo), ), array('%d', '%s', '%d', '%s', '%s', '%s', '%s', '%s', '%s', '%f', '%d', '%d', '%d') ); return $this->getTaxes($accountKey); } public function updateTaxes($accountKey) { $expirationDate = $this->validExpirationDate(); $expirationDateStatus = $expirationDate['expirationDateStatus']; $expirationDateFrom = $expirationDate['expirationDateFrom']; $expirationDateTo = $expirationDate['expirationDateTo']; if (!isset($_POST['active']) || strlen($_POST['active']) == 0) { $_POST['active'] = "false"; } if ($_POST['type'] == 'surcharge') { $_POST['tax'] = 'tax_inclusive'; } global $wpdb; $table_name = $wpdb->prefix . "booking_package_taxes"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'name' => sanitize_text_field($_POST['name']), 'active' => sanitize_text_field($_POST['active']), 'type' => sanitize_text_field($_POST['type']), 'tax' => sanitize_text_field($_POST['tax']), 'method' => sanitize_text_field($_POST['method']), 'target' => sanitize_text_field($_POST['target']), 'scope' => sanitize_text_field($_POST['scope']), 'value' => floatval($_POST['value']), 'expirationDateStatus' => intval($expirationDateStatus), 'expirationDateFrom' => intval($expirationDateFrom), 'expirationDateTo' => intval($expirationDateTo), ), array('key' => intval($_POST['key'])), array('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%f', '%d', '%d', '%d'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getTaxes($accountKey); } public function deleteTaxes($accountKey){ global $wpdb; $table_name = $wpdb->prefix."booking_package_taxes"; $wpdb->delete($table_name, array('key' => intval($_POST['key'])), array('%d')); return $this->getTaxes($accountKey); } public function changeTaxesRank($accountKey){ $keyList = explode(",", $_POST['keyList']); $indexList = explode(",", $_POST['indexList']); global $wpdb; $table_name = $wpdb->prefix . "booking_package_taxes"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); for ($i = 0; $i < count($keyList); $i++) { $wpdb->update( $table_name, array('ranking' => intval($indexList[$i])), array('key' => intval($keyList[$i])), array('%d'), array('%d') ); } $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getTaxes($accountKey); } public function getOptionsForHotel($accountKey, $active = false, $booking = false) { global $wpdb; $table_name = $wpdb->prefix . "booking_package_hotel_options"; $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); if ($active === true) { $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d AND `active` = 'true' ORDER BY ranking ASC;", array(intval($accountKey))); } $rows = $wpdb->get_results($sql, ARRAY_A); $isExtensionsValid = $this->getExtensionsValid(); if ($isExtensionsValid === false) { return array(); } else { if ($booking === true) { foreach ((array) $rows as $key => $value) { $value = $this->getTranslateOption($value, intval($accountKey)); $list = json_decode($value['json'], true); array_unshift($list, array("adult" => 0, "child" => 0, "room" => 0, "name" => __("Select", 'booking-package'))); for ($i = 0; $i < count($list); $i++) { $list[$i]['index'] = $i; } $value['json'] = json_encode($list); $rows[$key] = $value; } } return $rows; } } public function addOptionsForHotel($accountKey) { if (!isset($_POST['active']) || strlen($_POST['active']) == 0) { $_POST['active'] = "false"; } $required = 0; if ($_POST['required'] == 'true') { $required = 1; } $json = array(); if (isset($_POST['json'])) { $jsonList = json_decode(stripslashes($_POST['json']), true); for ($i = 0; $i < count($jsonList); $i++) { $object = array(); foreach ((array) $jsonList[$i] as $key => $value) { if ($key == 'adult' || $key == 'child' || $key == 'room') { if (is_int($value) === false) { $value = $this->getOnlyNumbers($value); } } $object[sanitize_text_field($key)] = sanitize_text_field($value); } array_push($json, $object); } } if ($this->getExtensionsValid() === false) { $_POST['active'] = "false"; $json = array(); } global $wpdb; $table_name = $wpdb->prefix . "booking_package_hotel_options"; $wpdb->insert( $table_name, array( 'accountKey' => intval($accountKey), 'name' => sanitize_text_field($_POST['name']), 'ranking' => intval($_POST['rank']), 'active' => sanitize_text_field($_POST['active']), 'required' => intval($required), 'target' => sanitize_text_field($_POST['target']), 'range' => sanitize_text_field($_POST['range']), 'chargeForAdults' => floatval(0), 'chargeForChildren' => floatval(0), 'chargeForRoom' => floatval(0), "description" => sanitize_textarea_field($_POST["description"]), 'json' => json_encode($json), ), array('%d', '%s', '%d', '%s', '%d', '%s', '%s', '%f', '%f', '%f', '%s', '%s') ); return $this->getOptionsForHotel($accountKey); } public function updateOptionsForHotel($accountKey) { if (!isset($_POST['active']) || strlen($_POST['active']) == 0) { $_POST['active'] = "false"; } $required = 0; if ($_POST['required'] == 'true') { $required = 1; } $json = array(); if (isset($_POST['json'])) { $jsonList = json_decode(stripslashes($_POST['json']), true); for ($i = 0; $i < count($jsonList); $i++) { $object = array(); foreach ((array) $jsonList[$i] as $key => $value) { if ($key == 'adult' || $key == 'child' || $key == 'room') { if (is_int($value) === false) { $value = $this->getOnlyNumbers($value); } } $object[sanitize_text_field($key)] = sanitize_text_field($value); } array_push($json, $object); } } if ($this->getExtensionsValid() === false) { $_POST['active'] = "false"; $json = array(); } global $wpdb; $table_name = $wpdb->prefix . "booking_package_hotel_options"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'name' => sanitize_text_field($_POST['name']), 'active' => sanitize_text_field($_POST['active']), 'required' => intval($required), 'range' => sanitize_text_field($_POST['range']), 'chargeForAdults' => floatval(0), 'chargeForChildren' => floatval(0), 'chargeForRoom' => floatval(0), "description" => sanitize_textarea_field($_POST["description"]), 'json' => json_encode($json), ), array('key' => intval($_POST['key'])), array('%s', '%s', '%d', '%s', '%f', '%f', '%f', '%s', '%s'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getOptionsForHotel($accountKey); } public function deleteOptionsForHotel($accountKey){ global $wpdb; $table_name = $wpdb->prefix . "booking_package_hotel_options"; $wpdb->delete($table_name, array('key' => intval($_POST['key'])), array('%d')); return $this->getOptionsForHotel($accountKey); } public function changeOptionsForHotelRank($accountKey){ $keyList = explode(",", $_POST['keyList']); $indexList = explode(",", $_POST['indexList']); global $wpdb; $table_name = $wpdb->prefix . "booking_package_hotel_options"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); for ($i = 0; $i < count($keyList); $i++) { $wpdb->update( $table_name, array('ranking' => intval($indexList[$i])), array('key' => intval($keyList[$i])), array('%d'), array('%d') ); } $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getOptionsForHotel($accountKey); } public function changeCourseRank(){ $accountKey = 1; if (isset($_POST['accountKey'])) { $accountKey = $_POST['accountKey']; } $keyList = explode(",", $_POST['keyList']); $indexList = explode(",", $_POST['indexList']); global $wpdb; $table_name = $wpdb->prefix . "booking_package_services"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); for ($i = 0; $i < count($keyList); $i++) { $wpdb->update( $table_name, array('ranking' => intval($indexList[$i])), array('key' => intval($keyList[$i])), array('%d'), array('%d') ); } $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d ORDER BY ranking ASC;", array(intval($accountKey))); $rows = $wpdb->get_results($sql, ARRAY_A); return $rows; } public function addForm(){ $accountKey = 1; if (isset($_POST['accountKey'])) { $accountKey = $_POST['accountKey']; } if (isset($_POST['isSMS']) === false) { $_POST['isSMS'] = 'false'; } global $wpdb; $table_name = $wpdb->prefix . "booking_package_form"; $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d;", array(intval($accountKey))); $row = $wpdb->get_row($sql, ARRAY_A); if (is_null($row)) { return array('status' => 'error'); } else { $id = strtolower($_POST['id']); $id = preg_replace('/[^0-9a-zA-Z_-]/', '', $id); $id = preg_replace("/^( )|( )$/", "", $id ); #$options = str_replace("\\\"", "\"", sanitize_text_field($_POST['options'])); #$options = str_replace("\'", "'", $options); $options = stripslashes($_POST['options']); $options = sanitize_text_field($options); $options = json_decode($options, true); if (is_null($options) || is_bool($options) === true) { $options = array(); } foreach ($options as $key => $value) { if (is_null($value) || empty($value) || $value == 'null') { unset($options[$key]); } } $options = array_values($options); $data = json_decode($row['data'], true); foreach ((array) $data as $key => $value) { if ($value['id'] == $id) { return array("status" => "error", "message" => "An ID with the same name already exists in the form.", 'id' => $id); } } $item = array( "id" => $id, "name" => sanitize_text_field($_POST["name"]), "description" => sanitize_textarea_field($_POST["description"]), "value" => "", "uri" => sanitize_textarea_field($_POST["uri"]), "type" => sanitize_text_field($_POST["type"]), "active" => sanitize_text_field($_POST["active"]), "options" => $options, "required" => sanitize_text_field($_POST["required"]), "isName" => sanitize_text_field($_POST["isName"]), "isEmail" => sanitize_text_field($_POST["isEmail"]), "isSMS" => sanitize_text_field($_POST["isSMS"]), "isAddress" => sanitize_text_field($_POST["isAddress"]), "isTerms" => sanitize_text_field($_POST["isTerms"]), "isAutocomplete" => sanitize_text_field($_POST["isAutocomplete"]), "placeholder" => sanitize_text_field($_POST["placeholder"]), ); if (isset($_POST['targetCustomers'])) { $item['targetCustomers'] = sanitize_text_field($_POST["targetCustomers"]); } array_push($data, $item); $json = json_encode($data); if (defined('JSON_NUMERIC_CHECK')) { $json = json_encode($data, JSON_NUMERIC_CHECK); } try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array('data' => $json), array('key' => intval($row['key'])), array('%s'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ #return $data; return $this->getForm($accountKey, false); } } public function updateForm(){ $accountKey = 1; if (isset($_POST['accountKey'])) { $accountKey = $_POST['accountKey']; } if (isset($_POST['isSMS']) === false) { $_POST['isSMS'] = 'false'; } global $wpdb; $table_name = $wpdb->prefix . "booking_package_form"; $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d;", array(intval($accountKey))); $row = $wpdb->get_row($sql, ARRAY_A); if (is_null($row)) { return array('status' => 'error'); } else { $id = strtolower($_POST['id']); $id = preg_replace('/[^0-9a-zA-Z_-]/', '', $id); $id = preg_replace("/^( )|( )$/", "", $id ); $input = array(); #$options = str_replace("\\\"", "\"", sanitize_text_field($_POST['options'])); #$options = str_replace("\'", "'", $options); $options = stripslashes($_POST['options']); $options = sanitize_text_field($options); $options = json_decode($options, true); if (is_null($options) || is_bool($options) === true) { $options = array(); } foreach ($options as $key => $value) { if (is_null($value) || empty($value) || $value == 'null') { unset($options[$key]); } } $options = array_values($options); $data = json_decode($row['data']); #for($i = 0; $i < count($data); $i++){ foreach ((array) $data as $i => $value) { if (intval($i) == intval($_POST['key']) && $value->id == $id) { $value->name = sanitize_text_field($_POST['name']); $value->description = sanitize_textarea_field($_POST['description']); $value->uri = sanitize_text_field($_POST['uri']); $value->active = sanitize_text_field($_POST['active']); $value->type = sanitize_text_field($_POST['type']); $value->options = $options; $value->required = sanitize_text_field($_POST['required']); $value->isName = sanitize_text_field($_POST['isName']); $value->isAddress = sanitize_text_field($_POST['isAddress']); $value->isEmail = sanitize_text_field($_POST['isEmail']); $value->isSMS = sanitize_text_field($_POST['isSMS']); $value->isTerms = sanitize_text_field($_POST['isTerms']); $value->isAutocomplete = sanitize_text_field($_POST['isAutocomplete']); $value->placeholder = sanitize_text_field($_POST["placeholder"]); if (isset($_POST['targetCustomers'])) { $value->targetCustomers = sanitize_text_field($_POST['targetCustomers']); } #break; } array_push($input, $value); } $json = json_encode($input); if (defined('JSON_NUMERIC_CHECK')) { $json = json_encode($input, JSON_NUMERIC_CHECK); } try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array('data' => $json), array('key' => intval($row['key'])), array('%s'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getForm($accountKey, false); } } public function deleteFormItem(){ $accountKey = 1; if (isset($_POST['accountKey'])) { $accountKey = $_POST['accountKey']; } global $wpdb; $table_name = $wpdb->prefix."booking_package_form"; $sql = $wpdb->prepare("SELECT * FROM ".$table_name." WHERE `accountKey` = %d;", array(intval($accountKey))); $row = $wpdb->get_row($sql, ARRAY_A); if (is_null($row)) { return array('status' => 'error'); } else { $data = json_decode($row['data']); array_splice($data, intval($_POST['key']), 1); $json = json_encode($data); if (defined('JSON_NUMERIC_CHECK')) { $json = json_encode($data, JSON_NUMERIC_CHECK); } try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array('data' => $json), array('key' => intval($row['key'])), array('%s'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getForm($accountKey, false); } } public function changeFormRank(){ $accountKey = 1; if (isset($_POST['accountKey'])) { $accountKey = $_POST['accountKey']; } $keyList = explode(",", $_POST['keyList']); $indexList = explode(",", $_POST['indexList']); global $wpdb; $table_name = $wpdb->prefix . "booking_package_form"; $sql = $wpdb->prepare("SELECT * FROM " . $table_name . " WHERE `accountKey` = %d;", array(intval($accountKey))); $row = $wpdb->get_row($sql, ARRAY_A); if (is_null($row)) { return array('status' => 'error'); } else { $newData = array(); $data = json_decode($row['data']); foreach ((array) $data as $key => $value) { $search = array_search($value->name, $keyList); $index = intval($indexList[$search]); $newData[$index] = $value; } ksort($newData); $json = json_encode($newData); if (defined('JSON_NUMERIC_CHECK')) { $json = json_encode($newData, JSON_NUMERIC_CHECK); } try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array('data' => $json), array('key' => intval($row['key'])), array('%s'), array('%d') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $newData; } } public function getCss($fileName, $plugin_dir_path) { if (get_option('_' . $this->pluginName . '_css_v') === false) { add_option('_' . $this->pluginName . '_css_v', date('U')); } $upload_dir = wp_upload_dir(); $dirname = $upload_dir['basedir'] . '/' . $this->pluginName; /** if (function_exists('get_sites') && class_exists('WP_Site_Query')) { $id = get_current_blog_id(); $dirname .= '/' . $id; } **/ $css = ""; if (!file_exists($dirname)) { #wp_mkdir_p($dirname); if (wp_mkdir_p($dirname) === true) { $css = file_get_contents($plugin_dir_path . 'css/front_end.css'); file_put_contents($dirname . '/' . $fileName, $css); } else { $css = "There is a problem with directory permissions on wp-content or wp-content/uploads."; } } else { if (file_exists($dirname . '/' . $fileName)) { $css = file_get_contents($dirname . '/' . $fileName); } else { if (wp_mkdir_p($dirname) === true) { $css = file_get_contents($plugin_dir_path . 'css/front_end.css'); file_put_contents($dirname . '/' . $fileName, $css); } else { $css = "There is a problem with directory permissions on wp-content or wp-content/uploads."; } } } return $css; } public function getCssUrl($fileName) { $upload_dir = wp_upload_dir(); $dirname = $upload_dir['baseurl'] . '/' . $this->pluginName; $parseUrl = parse_url($dirname); if ($parseUrl['scheme'] == 'https') { $dirname = str_replace('https://', '//', $dirname); } else if ($parseUrl['scheme'] == 'http') { $dirname = str_replace('http://', '//', $dirname); } /** if (function_exists('get_sites') && class_exists('WP_Site_Query')) { $id = get_current_blog_id(); $dirname .= '/' . $id . '/' . $fileName; } else { $dirname .= '/' . $fileName; } **/ $dirname .= '/' . $fileName; return array('dirname' => $dirname, 'v' => get_option('_' . $this->pluginName . '_css_v')); } public function updateCss($fileName) { update_option('_' . $this->pluginName . '_css_v', date('U')); $upload_dir = wp_upload_dir(); $dirname = $upload_dir['basedir'] . '/' . $this->pluginName; /** if (function_exists('get_sites') && class_exists('WP_Site_Query')) { $id = get_current_blog_id(); $dirname .= '/' . $id; } **/ #$value = str_replace("\\\"", "\"", $_POST['value']); #$value = str_replace("\'", "'", $value); $value = stripslashes($_POST['value']); file_put_contents($dirname . '/' . $fileName, $value); return array("status" => "success"); } public function getJavaScript($fileName, $plugin_dir_path) { if (get_option('_' . $this->pluginName . '_javascript_v') === false) { add_option('_' . $this->pluginName . '_javascript_v', date('U')); } $upload_dir = wp_upload_dir(); $dirname = $upload_dir['basedir'] . '/' . $this->pluginName; $javascript = ""; if (!file_exists($dirname)) { if (wp_mkdir_p($dirname) === true) { $javascript = file_get_contents($plugin_dir_path . 'js/front_end.js'); file_put_contents($dirname . '/' . $fileName, $javascript); } else { $javascript = "//There is a problem with directory permissions on wp-content or wp-content/uploads."; } } else { if (file_exists($dirname . '/' . $fileName)) { $javascript = file_get_contents($dirname . '/' . $fileName); } else { if (wp_mkdir_p($dirname) === true) { $javascript = file_get_contents($plugin_dir_path . 'js/front_end.js'); file_put_contents($dirname . '/' . $fileName, $javascript); } else { $javascript = "//There is a problem with directory permissions on wp-content or wp-content/uploads."; } } } return $javascript; } public function getJavaScriptUrl($fileName) { $upload_dir = wp_upload_dir(); $dirname = $upload_dir['baseurl'] . '/' . $this->pluginName; $parseUrl = parse_url($dirname); if ($parseUrl['scheme'] == 'https') { $dirname = str_replace('https://', '//', $dirname); } else if ($parseUrl['scheme'] == 'http') { $dirname = str_replace('http://', '//', $dirname); } $dirname .= '/' . $fileName; return array('dirname' => $dirname, 'v' => get_option('_' . $this->pluginName . '_javascript_v')); } public function updateJavaScript($fileName) { update_option('_' . $this->pluginName . '_javascript_v', date('U')); $upload_dir = wp_upload_dir(); $dirname = $upload_dir['basedir'] . '/' . $this->pluginName; $value = $_POST['value']; #$value = str_replace("\\\\", "\\", $value); #$value = str_replace("\\\"", "\"", $value); #$value = str_replace("\'", "'", $value); $value = stripslashes($value); file_put_contents($dirname . '/' . $fileName, $value); return array("status" => "success", 'value' => $value); } public function updataEmailMessageForUser() { $id = sanitize_text_field($_POST['id']); $object = get_option($id, null); if (is_null($object) === false) { $object = json_decode($object, true); $object['subject'] = sanitize_text_field($_POST['subject']); $object['content'] = sanitize_textarea_field(htmlspecialchars($_POST['content'], ENT_QUOTES|ENT_HTML5)); $object['subjectForAdmin'] = sanitize_text_field($_POST['subjectForAdmin']); $object['contentForAdmin'] = sanitize_textarea_field(htmlspecialchars($_POST['contentForAdmin'], ENT_QUOTES|ENT_HTML5)); $object['enable'] = intval($_POST['enableEmail']); $object['enableSMS'] = 0; $object['format'] = sanitize_text_field($_POST['format']); $object['notifyAdministrator'] = intval($_POST['notifyAdministrator']); update_option($id, json_encode($object)); } return $this->getEmailForUser(); } public function updateEmailId() { global $wpdb; $table_name = $wpdb->prefix . "booking_package_email_settings"; $update_completed = get_option('_' . $this->prefix . 'updated_email_id', 0); if (intval($update_completed) === 0) { $ids = array( 'mail_new_admin' => 'new_booking_notification', 'mail_approved' => 'booking_approved_notification', 'mail_pending' => 'booking_pending_notification', 'mail_reminder' => 'booking_reminder_notification', 'mail_updated' => 'booking_updated_notification', 'mail_canceled_by_visitor_user' => 'booking_cancellation_notification', 'mail_deleted' => 'booking_deleted_notification', ); $wpdb->query("START TRANSACTION"); try { $params = []; $case_sql = "UPDATE `{$table_name}` SET `mail_id` = CASE `mail_id` "; foreach ($ids as $old_id => $new_id) { $case_sql .= "WHEN %s THEN %s "; $params[] = $old_id; $params[] = $new_id; } $case_sql .= "END"; $where_in_placeholders = implode(', ', array_fill(0, count($ids), '%s')); $sql_template = $case_sql . " WHERE `mail_id` IN (" . $where_in_placeholders . ")"; $final_params = array_merge($params, array_keys($ids)); $final_sql = $wpdb->prepare($sql_template, $final_params); #var_dump($final_sql); $result = $wpdb->query($final_sql); if (false === $result) { throw new Exception('Database update failed.'); } $wpdb->query("COMMIT"); update_option('_' . $this->prefix . 'updated_email_id', 1); return true; } catch (Exception $e) { $wpdb->query("ROLLBACK"); error_log($e->getMessage()); } /** finally { $wpdb->query('UNLOCK TABLES'); }**/ } else { $update_completed = get_option('_' . $this->prefix . 'updated_email_cancellation_id', 0); if (intval($update_completed) === 0) { $sql = $wpdb->prepare( "SELECT * FROM `" . $table_name . "` WHERE `mail_id` = %s AND `enable` = %d AND `enableSMS` = %d ORDER BY `accountKey` ASC;", array('booking_cancellation_notification', 0, 0) ); $rows = $wpdb->get_results($sql, ARRAY_A); $booking_cancellation_notifications = array(); foreach ($rows as $key => $data) { $booking_cancellation_notifications[$data['accountKey']] = $data; } $sql = $wpdb->prepare( "SELECT * FROM `" . $table_name . "` WHERE `mail_id` = %s AND (`enable` = %d OR `enableSMS` = %d) ORDER BY `accountKey` ASC;", array('mail_canceled_by_visitor_user', 1, 1) ); $rows = $wpdb->get_results($sql, ARRAY_A); foreach ($rows as $key => $mail_canceled) { if (isset($booking_cancellation_notifications[ $mail_canceled['accountKey'] ])) { #$sql = $wpdb->prepare("DELETE FROM `" . $table_name . "` WHERE `key` = %d;", array( intval($booking_cancellation_notifications[ $mail_canceled['accountKey'] ]['key']) ) ); #echo $sql . "
\n"; #$wpdb->query($sql); $key_to_delete = intval($booking_cancellation_notifications[$mail_canceled['accountKey']]['key']); $wpdb->delete($table_name, array('key' => $key_to_delete), array('%d')); } $sql = $wpdb->prepare("SELECT * FROM `" . $table_name . "` WHERE `mail_id` = %s AND `accountKey` = %d;", array('booking_cancellation_notification', intval($mail_canceled['accountKey']) ) ); $row = $wpdb->get_var($sql); if (empty($row)) { #$sql = $wpdb->prepare("UPDATE `" . $table_name . "` SET `mail_id` = 'booking_cancellation_notification' WHERE `key` = %d;", array(intval($mail_canceled['key']))); #echo $sql . "
\n"; #$wpdb->query($sql); $wpdb->update( $table_name, array('mail_id' => 'booking_cancellation_notification'), array('key' => intval($mail_canceled['key'])), array('%s'), array('%d') ); } } update_option('_' . $this->prefix . 'updated_email_cancellation_id', 1); return true; } } } public function updataEmailMessageForCalendarAccount(){ $accountKey = intval($_POST['accountKey']); $mail_id = sanitize_text_field($_POST['mail_id']); $subject = sanitize_text_field($_POST['subject']); $content = sanitize_textarea_field(htmlspecialchars($_POST['content'], ENT_QUOTES|ENT_HTML5)); $subjectForAdmin = sanitize_text_field($_POST['subjectForAdmin']); $contentForAdmin = sanitize_textarea_field(htmlspecialchars($_POST['contentForAdmin'], ENT_QUOTES|ENT_HTML5)); $subjectForIcalendar = sanitize_text_field($_POST['subjectForIcalendar']); $locationForIcalendar = sanitize_text_field($_POST['locationForIcalendar']); $contentForIcalendar = sanitize_textarea_field(htmlspecialchars($_POST['contentForIcalendar'], ENT_QUOTES|ENT_HTML5)); $enable = intval($_POST['enableEmail']); $enableSMS = intval($_POST['enableSms']); $format = sanitize_text_field($_POST['format']); global $wpdb; $table_name = $wpdb->prefix . "booking_package_email_settings"; try { $wpdb->query("START TRANSACTION"); $wpdb->query("LOCK TABLES `" . $table_name . "` WRITE"); $wpdb->update( $table_name, array( 'subject' => $subject, 'content' => $content, 'subjectForAdmin' => $subjectForAdmin, 'contentForAdmin' => $contentForAdmin, 'enable' => $enable, 'enableSMS' => $enableSMS, 'format' => $format, 'subjectForIcalendar' => $subjectForIcalendar, 'locationForIcalendar' => $locationForIcalendar, 'contentForIcalendar' => $contentForIcalendar, 'attachICalendar' => intval($_POST['attachICalendar']), 'notifyAdministrator' => intval($_POST['notifyAdministrator']), ), array('accountKey' => $accountKey, 'mail_id' => $mail_id), array('%s', '%s', '%s', '%s', '%d', '%d', '%s', '%s', '%s', '%s', '%d', '%d'), array('%d', '%s') ); $wpdb->query('COMMIT'); $wpdb->query('UNLOCK TABLES'); } catch (Exception $e) { $wpdb->query('ROLLBACK'); $wpdb->query('UNLOCK TABLES'); }/** finally { $wpdb->query('UNLOCK TABLES'); }**/ return $this->getEmailMessageList($accountKey); } public function lookingForSubscription($customer_id, $subscription_id) { global $wpdb; $url = BOOKING_PACKAGE_EXTENSION_URL; $license = array( 'status' => 0, 'subscription_status' => '', 'customer_id' => trim(esc_html($customer_id)), 'subscription_id' => trim(esc_html($subscription_id)), 'url' => get_site_url(), 'expiration_date' => 0, ); $args = array( 'method' => 'POST', 'timeout' => $this->request_timeout, 'body' => array( 'mode' => 'error', 'subscription_mode' => 'lookingForSubscription', 'customer_id_for_subscriptions' => $license['customer_id'], 'subscriptions_id_for_subscriptions' => $license['subscription_id'], 'url' => $license['url'], ) ); $response = wp_remote_request($url . "lookingForSubscription/", $args); $statusCode = wp_remote_retrieve_response_code($response); $response = json_decode(wp_remote_retrieve_body($response), true); $response['url'] = $url; if (intval($statusCode) == 200 && intval($response['status']) == 1) { unset($response['status']); $license['status'] = 1; if (isset($response['subscription_status']) === true) { $license['subscription_status'] = $response['subscription_status']; } $this->updateSubscribeSite(); foreach ((array) $response as $key => $value) { $value = sanitize_text_field($value); if ( $key === 'expiration_date_for_subscriptions' ) { $license['expiration_date'] = intval($value); if ( is_numeric($value) === true ) { $value = $this->encryptValue($value); } } if (get_option('_' . $this->prefix . $key) !== false) { update_option('_' . $this->prefix . $key, $value); } else { $bool = add_option('_' . $this->prefix . $key, $value); } } if ($this->getSubscriptionStatus() !== 'Canceled') { $this->updateSubscriptionStatus('Active'); } if (strtolower( $license['subscription_status'] ) === 'canceled') { $this->updateSubscriptionStatus('Canceled'); } } else { $license['errorCode'] = esc_html($response['errorCode']); $license['errorMessage'] = esc_html($response['errorMessage']); update_option('_' . $this->prefix . 'expiration_date_for_subscriptions', 0); } return $license; } public function upgradePlan($type) { $response = array('status' => 'error'); if ($type === 'get') { $values = array( 'customer_id_for_subscriptions', 'id_for_subscriptions', 'customer_email_for_subscriptions', 'invoice_id_for_subscriptions', 'expiration_date_for_subscriptions' ); for ($i = 0; $i < count($values); $i++) { $key = $values[$i]; $value = get_option('_' . $this->prefix . $key, 0); if (get_option($this->prefix . $key) !== false) { $value = get_option($this->prefix . $key); delete_option($this->prefix . $key); add_option('_' . $this->prefix . $key, $value); } $response[$key] = $value; } $expiration = $response['expiration_date_for_subscriptions']; if ( is_numeric($expiration) === false ) { $expiration = $this->decryptValue($expiration); if ($expiration === false) { $expiration = 0; } if (intval($expiration) === 0) { $expiration = 0; } } else { if (intval($expiration) > 0) { $subscriptionDetails = $this->lookingForSubscription($response['customer_id_for_subscriptions'], $response['id_for_subscriptions']); $expiration = $subscriptionDetails['expiration_date']; if (intval($subscriptionDetails['status']) === 1) { update_option('_' . $this->prefix . 'expiration_date_for_subscriptions', $this->encryptValue($expiration)); $this->updateSubscriptionStatus('Active'); } else { update_option('_' . $this->prefix . 'expiration_date_for_subscriptions', 0); $this->updateSubscriptionStatus('Inactive'); $this->notificationSubscriptionRenewalFailed(true); } } else { #$this->updateSubscriptionStatus('Inactive'); } } $response['expiration_date_for_subscriptions'] = intval($expiration); $response['status'] = 'success'; } else if ($type === 'delete') { $params = array( 'mode' => 'error', 'subscription_mode' => 'cancelSubscription', 'customer_id' => $_POST['customer_id'], 'subscriptions_id' => trim($_POST['subscriptions_id']), ); $args = array( 'method' => 'POST', 'timeout' => $this->request_timeout, 'body' => $params ); $response = wp_remote_request(BOOKING_PACKAGE_EXTENSION_URL . "cancelSubscription/", $args); $statusCode = wp_remote_retrieve_response_code($response); $response = json_decode(wp_remote_retrieve_body($response), true); $response['url'] = BOOKING_PACKAGE_EXTENSION_URL; if ($statusCode == 200 && $response['status'] == 'success') { $this->updateSubscriptionStatus('Canceled'); $response['status'] = 'success'; } } return $response; } public function resetSubscription() { $this->deleteSubscriptionData(); return array('status' => true); } private function deleteSubscriptionData() { $values = array('customer_id_for_subscriptions', 'id_for_subscriptions', 'customer_email_for_subscriptions', 'invoice_id_for_subscriptions', 'expiration_date_for_subscriptions'); for ($i = 0; $i < count($values); $i++) { $key = $values[$i]; if (get_option('_' . $this->prefix . $key) === false) { add_option('_' . $this->prefix . $key, 0); } else { update_option('_' . $this->prefix . $key, 0); } } } public function getSubscriptionStatus() { return get_option('_' . $this->prefix . 'subscription_status', 'Not subscribed'); } private function updateSubscriptionStatus($status) { if (get_option('_' . $this->prefix . 'subscription_status') === false) { add_option('_' . $this->prefix . 'subscription_status', sanitize_text_field($status)); } else { update_option('_' . $this->prefix . 'subscription_status', sanitize_text_field($status)); } } private function getExtensionsValid() { if (is_null($this->isExtensionsValid)) { $this->isExtensionsValid = $this->getSiteStatus(); } return $this->isExtensionsValid; } public function checkLatestInvoice() { $url = BOOKING_PACKAGE_EXTENSION_URL; $latestInvoiceDate = get_option('_' . $this->prefix . 'latestInvoiceDate', null); if ( is_null($latestInvoiceDate) ) { $current_timestamp = time(); $last_month_timestamp = strtotime('last month', $current_timestamp); $latestInvoiceDate = intval(date('Y', $last_month_timestamp) . date('m', $last_month_timestamp)); add_option('_' . $this->prefix . 'latestInvoiceDate', $latestInvoiceDate); } $currentDate = intval(date('Y') . date('m')); $subscriptions = $this->upgradePlan('get'); $expiration_date = $subscriptions['expiration_date_for_subscriptions'] - (3 * 3600); if ($this->getSubscriptionStatus() === 'Active' && $expiration_date < date('U') && $currentDate > intval($latestInvoiceDate)) { $params = array( "subscription_mode" => "checkLatestInvoice", "subscriptions_id" => $subscriptions['id_for_subscriptions'], ); $args = array( 'method' => 'POST', 'timeout' => $this->request_timeout, 'body' => $params ); $response = wp_remote_request($url . "checkLatestInvoice/", $args); $statusCode = wp_remote_retrieve_response_code($response); $response = json_decode(wp_remote_retrieve_body($response)); if ($response->subscription_status === 'active' && $response->invoice_status === 'open') { $this->notificationSubscriptionRenewalFailed(false, __('Your paid subscription payment failed.', 'booking-package')); } update_option('_' . $this->prefix . 'latestInvoiceDate', $currentDate); } } public function notificationSubscriptionRenewalFailed($checkStatusText = true, $subject = null) { $to = get_option($this->prefix . "email_to", null); if (empty($to)) { $to = get_bloginfo('admin_email'); } $sender = trim( get_option($this->prefix . "email_from", null) ); $sender_name = trim( get_option($this->prefix . "email_title_from", null) ); if (empty($sender)) { $sender = trim( get_bloginfo('admin_email') ); $sender_name = trim( get_bloginfo('name') ); } $from = $sender; if (!empty($sender_name) && strlen($sender_name) != 0) { $from = sprintf("%s <%s>", $sender_name, $sender); } $headers = array("From: ".$from."\r\n", "Return-Path: ".$from."\r\n", "Reply-To: ".$from."\r\n"); $text = $this->subscriptionRenewalFailed('text', $checkStatusText); if (empty($text)) { return false; } $text .= "\nURL: " . admin_url(); if ( is_null($subject) ) { $subject = __('Paid Subscription Renewal Failed.', 'booking-package'); } wp_mail(trim( $to ), '[Booking Packgae] ' . $subject, $text, $headers); } public function subscriptionRenewalFailed($type = 'html', $checkStatusText = true) { $status = $this->getSubscriptionStatus(); $text = ''; if ($status === 'Inactive' || $checkStatusText === false) { $text .= '
'; if ($checkStatusText === true) { $text .= '

' . __('Paid Subscription Renewal Failed.', 'booking-package') . '
' . "\n"; } else { $text .= '

' . __('Your paid subscription payment failed.', 'booking-package') . '
' . "\n"; } $text .= '

' . sprintf(__('Please check the status in the WordPress dashboard under %s > %s > %s to find the reason and proceed with renewal.', 'booking-package'), 'Booking Package', __('General Settings', 'booking-package'), __('Paid Subscription', 'booking-package')) . "

\n"; if ($checkStatusText === true) { $text .= '
' . __('If the status shows an issue, payment for your subscription may have failed. ', 'booking-package') . "
\n"; } $text .= sprintf(__('Please check your payment status on the "%s" page and complete the payment if necessary. ', 'booking-package'), __('My billing', 'booking-package')) . "

\n"; if ($checkStatusText === true) { $text .= '
' . sprintf(__('After completing the payment, or if the status is not updated even without a payment issue, click the "%s" button to manually update your subscription.', 'booking-package'), __('Update My Subscription', 'booking-package')) . "
\n"; } $text .= '

'; $text .= '
'; } if ($type === 'text') { $text = strip_tags($text); } return $text; } public function setSubscribeSite($scheme = false) { $unique = get_site_url(); if ($scheme === true) { $unique = wp_hash( preg_replace('#^[^:]+://#', '', $unique) ); if (get_option('_' . $this->prefix . 'unique_without_scheme') === false) { add_option('_' . $this->prefix . 'unique_without_scheme', sanitize_text_field($unique)); } else { #update_option('_' . $this->prefix . 'unique_without_scheme', sanitize_text_field($unique)); } } else { $unique = wp_hash($unique); if (get_option('_' . $this->prefix . 'unique') === false) { add_option('_' . $this->prefix . 'unique', sanitize_text_field($unique)); } else { #update_option('_' . $this->prefix . 'unique', sanitize_text_field($unique)); } } return $unique; } public function setOpensslAlgo($algo) { if (get_option('_' . $this->prefix . 'openssl_algo') === false) { add_option('_' . $this->prefix . 'openssl_algo', sanitize_text_field($algo)); } } public function updateSubscribeSite() { $site = get_site_url(); $unique_without_scheme = wp_hash( preg_replace('#^[^:]+://#', '', $site) ); update_option('_' . $this->prefix . 'unique_without_scheme', sanitize_text_field($unique_without_scheme) ); $unique = wp_hash($site); update_option('_' . $this->prefix . 'unique', sanitize_text_field($unique) ); } public function setPaidSubscription($mode) { $subscriptions = $this->upgradePlan("get"); $isExtensionsValid = $this->getSiteStatus(); if ($isExtensionsValid == true) { if ($mode == 'activation') { $this->lookingForSubscription($subscriptions['customer_id_for_subscriptions'], $subscriptions['id_for_subscriptions']); } else if ($mode == 'deactivation') { $statusCode = $this->cancelPaidSubscriptionAtPeriodEnd($subscriptions['customer_id_for_subscriptions'], $subscriptions['id_for_subscriptions']); } } return $isExtensionsValid; } public function updatePaidSubscription($unique) { $site = get_site_url(); if ($unique !== false && wp_hash($site) === $unique) { $subscriptions = $this->upgradePlan('get'); $response = $this->lookingForSubscription($subscriptions['customer_id_for_subscriptions'], $subscriptions['id_for_subscriptions']); return $response; } return false; } public function validateWpSite($validate = true) { if ($validate === false) { return true; } $site = get_site_url(); $unique = get_option('_' . $this->prefix . 'unique', false); if (empty($unique)) { $unique = $this->setSubscribeSite(false); } $site_without_scheme = preg_replace('#^[^:]+://#', '', $site); $unique_without_scheme = get_option('_' . $this->prefix . 'unique_without_scheme', false); if (empty($unique_without_scheme)) { $unique_without_scheme = $this->setSubscribeSite(true); } if (wp_hash( $site_without_scheme ) !== $unique_without_scheme) { $this->updateSubscribeSite(); $expiration = get_option('_' . $this->prefix . 'expiration_date_for_subscriptions', 0); if ( is_numeric($expiration) === true ) { $value = $this->encryptValue($expiration); if (get_option('_' . $this->prefix . 'expiration_date_for_subscriptions') === false) { add_option('_' . $this->prefix . 'expiration_date_for_subscriptions', $value); } else { update_option('_' . $this->prefix . 'expiration_date_for_subscriptions', $value); } } else { $expiration = $this->decryptValue($expiration); } if (intval($expiration) > 0) { /** $subscriptions = $this->upgradePlan("get"); $statusCode = $this->cancelPaidSubscriptionAtPeriodEnd($subscriptions['customer_id_for_subscriptions'], $subscriptions['id_for_subscriptions']); if (intval($statusCode) == 200) { update_option('_' . $this->prefix . "expiration_date_for_subscriptions", sanitize_text_field('0')); } **/ update_option('_' . $this->prefix . "expiration_date_for_subscriptions", sanitize_text_field('0')); return false; } } return true; } public function getSiteStatus($countExpiration = false) { $url = BOOKING_PACKAGE_EXTENSION_URL; $response = array('status' => 'error'); $statusCode = 0; $subscriptions = $this->upgradePlan('get'); $expiration_date = intval($subscriptions['expiration_date_for_subscriptions']); if ( intval($subscriptions['expiration_date_for_subscriptions']) == 0 && $countExpiration === false ) { if ($this->getSubscriptionStatus() === 'Canceled') { $this->deleteSubscriptionData(); $this->updateSubscriptionStatus('Not subscribed'); } return false; } if ($expiration_date < date('U')) { if ($this->getSubscriptionStatus() === 'Canceled') { $this->deleteSubscriptionData(); $this->updateSubscriptionStatus('Not subscribed'); return false; } $params = array( "subscription_mode" => "updateLicense", "customer_id" => $subscriptions['customer_id_for_subscriptions'], "subscriptions_id" => $subscriptions['id_for_subscriptions'], "site" => get_site_url(), ); $args = array( 'method' => 'POST', 'timeout' => $this->request_timeout, 'body' => $params ); $response = wp_remote_request($url . "updateLicense/", $args); $statusCode = wp_remote_retrieve_response_code($response); $response = json_decode(wp_remote_retrieve_body($response)); $tmp_path = sys_get_temp_dir(); if (intval($statusCode) == 200) { if (intval($response->status) == 1) { $expiration_date = $this->encryptValue( sanitize_text_field($response->expiration_date) ); update_option('_' . $this->prefix . "invoice_id_for_subscriptions", sanitize_text_field($response->invoice_id)); $bool = update_option('_' . $this->prefix . "expiration_date_for_subscriptions", $expiration_date); $subscriptions = $this->upgradePlan('get'); if ($countExpiration === true) { update_option('_' . $this->prefix . 'numberOfVerificationAttemptsForExpiration', 0); } return true; } else if (intval($response->status) == 0) { $bool = update_option('_' . $this->prefix . "expiration_date_for_subscriptions", sanitize_text_field('0')); $this->updateSubscriptionStatus('Inactive'); $this->notificationSubscriptionRenewalFailed(true); return false; } } else { $bool = update_option('_' . $this->prefix . "expiration_date_for_subscriptions", sanitize_text_field('0')); $this->updateSubscriptionStatus('Inactive'); $this->notificationSubscriptionRenewalFailed(true); return false; } } return true; } private function encryptValue($value) { $unique_without_scheme = get_option('_' . $this->prefix . 'unique_without_scheme', false); if ( $unique_without_scheme === false ) { $unique_without_scheme = $this->setSubscribeSite(true); } if (function_exists('openssl_encrypt') === false) { return $value; } $algo = get_option('_' . $this->prefix . 'openssl_algo', 'AES-128-ECB'); $encryptedData = base64_encode(openssl_encrypt($value, $algo, $unique_without_scheme, OPENSSL_RAW_DATA)); return $encryptedData; } private function decryptValue($value) { /** $unique = get_option('_' . $this->prefix . 'unique', false); if ( $unique === false ) { $unique = $this->setSubscribeSite(false); } $algo = get_option('_' . $this->prefix . 'openssl_algo', 'AES-128-ECB'); $decryptedData = openssl_decrypt(base64_decode($value), $algo, $unique, OPENSSL_RAW_DATA); if ( $decryptedData === false ) { $unique_without_scheme = get_option('_' . $this->prefix . 'unique_without_scheme', false); if ( $unique_without_scheme === false || empty($unique_without_scheme)) { $unique_without_scheme = $this->setSubscribeSite(true); } $decryptedData = openssl_decrypt(base64_decode($value), $algo, $unique_without_scheme, OPENSSL_RAW_DATA); if ($decryptedData === false) { return false; } } **/ $algo = get_option('_' . $this->prefix . 'openssl_algo', 'AES-128-ECB'); $unique_without_scheme = get_option('_' . $this->prefix . 'unique_without_scheme', false); if ( $unique_without_scheme === false || empty($unique_without_scheme)) { $unique_without_scheme = $this->setSubscribeSite(true); } $decryptedData = openssl_decrypt(base64_decode($value), $algo, $unique_without_scheme, OPENSSL_RAW_DATA); if ($decryptedData === false) { return false; } return $decryptedData; } public function cancelPaidSubscriptionAtPeriodEnd($customer_id, $subscription_id) { $params = array( "subscription_mode" => "cancelAtPeriodEnd", "customer_id" => trim($customer_id), "subscriptions_id" => trim($subscription_id), ); $args = array( 'method' => 'POST', 'timeout' => $this->request_timeout, 'body' => $params ); $response = wp_remote_request(BOOKING_PACKAGE_EXTENSION_URL . "cancelAtPeriodEnd/", $args); $statusCode = wp_remote_retrieve_response_code($response); $response = json_decode(wp_remote_retrieve_body($response), true); return $statusCode; } public function updateChannelGC($calendarAccountList){ $url_parce = parse_url(get_home_url()); if($url_parce['scheme'] != 'https'){ return false; } $keyList = array(); $calendarIdList = array(); for($i = 0; $i < count($calendarAccountList); $i++){ if($calendarAccountList[$i]['expirationForGoogleWebhook'] < date('U')){ array_push($keyList, $calendarAccountList[$i]['key']); array_push($calendarIdList, $calendarAccountList[$i]['googleCalendarID']); } } if(count($calendarIdList) == 0){ return null; } $calendarIdList = implode(",", $calendarIdList); $googleCalendar = array(); $bookingSync = $this->getBookingSyncList(); $bookingSync = $bookingSync['Google_Calendar']; if(intval($bookingSync['booking_package_googleCalendar_active']['value']) == 1){ if($this->getExtensionsValid(false) === true){ $expiration_for_google_webhook = get_option($this->prefix."expiration_for_google_webhook", 0); $expiration_for_google_webhook -= (1440 * 60) * 2; #$timezone = get_option('timezone_string'); date_default_timezone_set("UTC"); if(date('U') < $expiration_for_google_webhook){ return false; } $host = $url_parce["host"]; $address = get_home_url()."/?webhook=google"; $id = hash('ripemd160', date('U')); $timezone = get_option('timezone_string'); $subscriptions = $this->upgradePlan('get'); $customer_id = $subscriptions['customer_id_for_subscriptions']; $params = array( 'mode' => 'updateChannel', 'customer_id' => $customer_id, 'calendarIdList' => $calendarIdList, /**'calendarId' => $bookingSync['booking_package_calendar_id']['value'], **/ 'service_account' => $bookingSync['booking_package_googleCalendar_json']['value'], 'id' => $id, 'token' => 'target='.hash('ripemd160', microtime()), 'address' => $address, 'timeZone' => get_option('timezone_string') ); #var_dump($params); if(isset($bookingSync['booking_package_googleCalendar_json'])){ $params['calendarId'] = $bookingSync['booking_package_calendar_id']['value']; } $tmp_path = sys_get_temp_dir(); $url = BOOKING_PACKAGE_EXTENSION_URL; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url."googleCalendar/"); curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_path."/".$this->prefix."session.cookie"); curl_setopt($ch, CURLOPT_COOKIEFILE, $tmp_path."/".$this->prefix."session.cookie"); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); ob_start(); $response = curl_exec($ch); $response = ob_get_contents(); ob_end_clean(); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close ($ch); $response = json_decode($response, true); #var_dump($response); if($response['status'] != 'error'){ for($i = 0; $i < count($response); $i++){ $response[$i]['key'] = $keyList[$i]; } if(isset($response['expiration'])){ $response['expiration'] /= 1000; $list = array('id' => 'id_for_google_webhook', 'token' => 'token_for_google_webhook', 'expiration' => 'expiration_for_google_webhook'); foreach ((array) $list as $key => $value) { $optionKey = sanitize_text_field($this->prefix.$value); $optionValue = sanitize_text_field($response[$key]); if(get_option($optionKey) === false){ add_option($optionKey, $optionValue); }else{ update_option($optionKey, $optionValue); } } } }else{ $response = array(); } #var_dump($response); return $response; } } } public function listsGC($accountKey, $googleCalendarID, $timeMin){ if(strlen($googleCalendarID) == 0){ return array(); } $eventList = array(); $bookingSync = $this->getBookingSyncList($accountKey); $bookingSync = $bookingSync['Google_Calendar']; #var_dump($bookingSync); if(intval($bookingSync['booking_package_googleCalendar_active']['value']) == 1){ if($this->getExtensionsValid(false) === true){ $subscriptions = $this->upgradePlan('get'); $customer_id = $subscriptions['customer_id_for_subscriptions']; $params = array( 'mode' => 'lists', 'timeMin' => $timeMin, 'customer_id' => $customer_id, 'calendarId' => $googleCalendarID, 'service_account' => $bookingSync['booking_package_googleCalendar_json']['value'], 'timeZone' => get_option('timezone_string') ); #var_dump($params); $tmp_path = sys_get_temp_dir(); $url = BOOKING_PACKAGE_EXTENSION_URL; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url."googleCalendar/"); #curl_setopt($ch, CURLOPT_USERPWD, $subscriptions['customer_id_for_subscriptions'].":"); curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_path."/".$this->prefix."session.cookie"); curl_setopt($ch, CURLOPT_COOKIEFILE, $tmp_path."/".$this->prefix."session.cookie"); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); ob_start(); $response = curl_exec($ch); $response = ob_get_contents(); ob_end_clean(); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close ($ch); $eventList = json_decode($response); if($eventList->status != 'error'){ } return $eventList; } } } public function pushGC($mode, $accountKey, $type, $id, $googleCalendarID, $sql_start_unixTime, $sql_end_unixTime, $form, $iCalID = false){ if(strlen($googleCalendarID) == 0){ return array(); } $id = intval($id); $googleCalendar = array(); $bookingSync = $this->getBookingSyncList($accountKey); $bookingSync = $bookingSync['Google_Calendar']; if(intval($bookingSync['booking_package_googleCalendar_active']['value']) == 1){ if($this->getExtensionsValid(false) === true){ if(is_null($sql_end_unixTime)){ $sql_end_unixTime = $sql_start_unixTime; } $nameList = array(); $addressList = array(); for($i = 0; $i < count($form); $i++){ if($form[$i]->isName == 'true'){ array_push($nameList, $form[$i]->value); } if($form[$i]->isAddress == 'true'){ array_push($addressList, $form[$i]->value); } } $subscriptions = $this->upgradePlan('get'); $customer_id = $subscriptions['customer_id_for_subscriptions']; $params = array( 'mode' => $mode, 'customer_id' => $customer_id, 'calendarId' => $googleCalendarID, 'service_account' => $bookingSync['booking_package_googleCalendar_json']['value'], 'startTime' => intval($sql_start_unixTime), 'endTime' => intval($sql_end_unixTime), 'form' => json_encode($form), 'timeZone' => get_option('timezone_string'), 'type' => $type ); if($iCalID !== false){ $params['iCalID'] = $iCalID; } #var_dump($params); $tmp_path = sys_get_temp_dir(); $url = BOOKING_PACKAGE_EXTENSION_URL; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url."googleCalendar/"); curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_path."/".$this->prefix."session.cookie"); curl_setopt($ch, CURLOPT_COOKIEFILE, $tmp_path."/".$this->prefix."session.cookie"); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); ob_start(); $response = curl_exec($ch); $response = ob_get_contents(); ob_end_clean(); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close ($ch); #var_dump($response); $googleCalendar = json_decode($response); if($googleCalendar->status != 'error'){ } #var_dump($httpCode); $googleCalendar->responseMode = $mode; if($httpCode >= 400){ $googleCalendar->responseCode = $httpCode; $googleCalendar->responseStatus = 0; }else{ $googleCalendar->responseStatus = 1; } return $googleCalendar; } } } public function deleteGC($accountKey, $id, $googleCalendarID){ if(strlen($googleCalendarID) == 0){ return array(); } if(is_null($id)){ return array("id" => "No ID"); } $googleCalendar = array(); $bookingSync = $this->getBookingSyncList($accountKey); $bookingSync = $bookingSync['Google_Calendar']; if(intval($bookingSync['booking_package_googleCalendar_active']['value']) == 1){ if($this->getExtensionsValid(false) === true){ $timezone = get_option('timezone_string'); $subscriptions = $this->upgradePlan('get'); $customer_id = $subscriptions['customer_id_for_subscriptions']; $params = array( 'mode' => 'delete', 'customer_id' => $customer_id, 'calendarId' => $googleCalendarID, 'service_account' => $bookingSync['booking_package_googleCalendar_json']['value'], 'id' => $id, 'timeZone' => get_option('timezone_string') ); #var_dump($params); $tmp_path = sys_get_temp_dir(); $url = BOOKING_PACKAGE_EXTENSION_URL; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url."googleCalendar/"); #curl_setopt($ch, CURLOPT_USERPWD, $subscriptions['customer_id_for_subscriptions'].":"); curl_setopt($ch, CURLOPT_COOKIEJAR, $tmp_path."/".$this->prefix."session.cookie"); curl_setopt($ch, CURLOPT_COOKIEFILE, $tmp_path."/".$this->prefix."session.cookie"); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); ob_start(); $response = curl_exec($ch); $response = ob_get_contents(); ob_end_clean(); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close ($ch); $response = json_decode($response, true); return $response; } } } public function activation($url, $mode, $version = null, $timezone = null, $site = null){ if (is_null($timezone)) { $timezone = get_option($this->prefix . 'timezone', null); if (is_null($timezone)) { $timezone = get_option('timezone_string', ''); if(is_null($timezone) || strlen($timezone) == 0){ $timezone = 'UTC'; } add_option($this->prefix."timezone", sanitize_text_field($timezone)); } } if (is_null($site)) { $site = get_site_url(); } $id = get_option($this->prefix."activation_id", null); $params = array("mode" => $mode, "timeZone" => $timezone, "local" => get_locale(), "site" => $site); if (!is_null($id) || $id != 0) { $params['id'] = $id; } if (!is_null($version)) { $params['version'] = $version; } $args = array( 'method' => 'POST', 'timeout' => $this->request_timeout, 'body' => $params ); $response = wp_remote_request($url . "activation/", $args); $object = json_decode(wp_remote_retrieve_body($response)); $statusCode = wp_remote_retrieve_response_code($response); if (intval($statusCode) == 200 && $mode == 'activation') { if (get_option($this->prefix."activation_id") === false) { add_option($this->prefix."activation_id", intval($object->key)); } else { update_option($this->prefix."activation_id", intval($object->key)); } } } public function updateRolesOfPlugin() { $manager = $this->prefix . 'manager'; $editor = $this->prefix . 'editor'; if (is_null(get_role($manager))) { $roleArray = array('read' => true, 'level_0' => true, 'booking_package_manager' => true); $object = add_role($manager, 'Booking Package Manager', $roleArray); } if (is_null(get_role($editor))) { $roleArray = array('read' => true, 'level_0' => true, 'booking_package_editor' => true); $object = add_role($editor, 'Booking Package Editor', $roleArray); } } public function deleteRolesOfPlugin() { $roles = array($this->prefix . 'manager', $this->prefix . 'editor'); for ($i = 0; $i < count($roles); $i++) { $role = $roles[$i]; if (!is_null(get_role($role))) { $users = get_users(array('role' => $role)); for ($a = 0; $a < count($users); $a++) { $user = $users[$a]; $user->remove_role($role); } remove_role($role); } } } public function updateRolesOfUser() { $oldRole = $this->prefix . 'member'; $newRole = $this->prefix . 'user'; if (!is_null(get_role($oldRole))) { $users = get_users(array('role' => $oldRole)); for ($i = 0; $i < count($users); $i++) { $user = $users[$i]; #$user->remove_role($oldRole); #$user->add_role($newRole); var_dump($user->get_role_caps()); echo "
\n"; #break; } #remove_role($userRole); #$roleArray = array('read' => true, 'level_0' => true, 'booking_package' => true); #$object = add_role($newRole, 'Booking Package User', $roleArray); } } public function getOnlyNumbers($value) { if (function_exists('mb_convert_kana')) { $value = mb_convert_kana($value, 'n'); } $value = preg_replace('/[^\-0-9]/', '', $value); if (empty($value)) { $value = 0; } return $value; } } ?>