FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
booking
/
core
Edit File: form_parser.php
<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly // FixIn: 9.8.0.4. /** * Parse booking form and get shortcode array * * Example: * $form_shortcodes = wpbc_parse_form( $booking_form_fields ); * * * @param $booking_form_configuration - configuration booking form in shortcodes: '[calendar]... <p>Time: [select* rangetime "Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00"] ...' * * @return array * * Return example: [ 0 => [ * 'full_shortcode' => '[selectbox rangetime "10:00 - 11:00" "11:00 - 12:00" "12:00 - 13:00"]', * 'type' => 'select', * 'name' => 'rangetime', * 'options' => '', * 'values_str' => '"10:00 - 11:00" "11:00 - 12:00" "12:00 - 13:00"', * 'values_arr' => [ * 0 => [ 'value' => '10:00 - 11:00' ], * 1 => [ 'value' => '11:00 - 12:00' ], * 2 => [ 'value' => '12:00 - 13:00' ] * ] * ], * 1 => [ * 'full_shortcode' => '[selectbox rangetime "10:00 - 12:00" "12:00 - 14:00"]', <= !!! Several shortcodes with same name - in conditional sections !!! * 'type' => 'select', * 'name' => 'rangetime', * 'options' => '', * 'values_str' => '"10:00 - 12:00" "12:00 - 14:00"', * 'values_arr' => [ * 0 => [ 'value' => '10:00 - 12:00' ], * 1 => [ 'value' => '12:00 - 14:00' ] * ] * ], * ... * 6 => [ * 'full_shortcode' => '[checkbox* term_and_condition use_label_element default:on "I Accept term and conditions@@accept"]', * 'type' => 'checkbox*', * 'name' => 'term_and_condition', * 'options' => 'use_label_element default:on', * 'values_str' => '"I Accept term and conditions@@accept"', * 'values_arr' => [ * 0 => [ 'title' => 'I Accept term and conditions', * 'value' => 'accept', * ] * ] * ], * 7 => [ * full_shortcode = "[checkbox fee]" <== !!! No value !!! * type = "checkbox" * name = "fee" * options = "" * values_str = "" * values_arr = [ ] <== !!! Empty, if no value !!! * ] * ] * */ function wpbc_parse_form( $booking_form_configuration ){ /** * NON-standard shortcodes: * $regex = '%\[\s*(' . $types . ') (\s+[a-zA-Z][0-9a-zA-Z:._-]*) ([-0-9a-zA-Z:#_/|\s]*)?((?:\s*(?:"[^"]*"|\'[^\']*\'))*)?\s*\]%'; * $regex_start_end_time = '%\[\s*(country[*]?|starttime[*]?|endtime[*]?)(\s*[a-zA-Z]*[0-9a-zA-Z:._-]*)([-0-9a-zA-Z:#_/|\s]*)*((?:\s*(?:"[^"]*"|\'[^\']*\'))*)?\s*\]%'; * $regex_submit_ = '%\[\s*submit (\s[-0-9a-zA-Z:#_/\s]*)? (\s+(?:"[^"]*"|\'[^\']*\'))?\s*\]%'; */ // Parse select shortcodes $rx_shortcode_types = 'text[*]?|email[*]?|coupon[*]?|time[*]?|textarea[*]?|select[*]?|selectbox[*]?|checkbox[*]?|radio[*]?|acceptance|captchac|captchar|file[*]?|quiz'; // $rx_shortcode_types= 'select[*]?|selectbox[*]?|checkbox[*]?|radio[*]?'; $rx_shortcode_name = '\s+[a-zA-Z][0-9a-zA-Z:._-]*'; $rx_shortcode_options = '[-0-9a-zA-Z:#_/|\s]*'; $rx_shortcode_values = '(?:\s*(?:"[^"]*"|\'[^\']*\'))*'; $regex = '%\[\s*(' . $rx_shortcode_types . ')(' . $rx_shortcode_name . ')(' . $rx_shortcode_options . ')?(' . $rx_shortcode_values . ')?\s*\]%'; preg_match_all( $regex, $booking_form_configuration, $found_shortcodes, PREG_SET_ORDER ); /** * [ [0] => [radio name id:htmlID class:class_name default:Default Value use_label_element label_first "Title A@@1" "Title Booking@@2" ""Title C"@@3" "Other title@@4"] * [1] => radio * [2] => name * [3] => id:htmlID class:class_name default:Default Value use_label_element label_first * [4] => "Title A@@1" "Title Booking@@2" ""Title C"@@3" "Other title@@4" * ] * OR * [ * [0] => [select* rangetime "Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00" "12:00 PM - 02:00 PM@@12:00 - 14:00" "02:00 PM - 04:00 PM@@14:00 - 16:00" "04:00 PM - 06:00 PM@@16:00 - 18:00" "06:00 PM - 08:00 PM@@18:00 - 20:00"] * [1] => select* * [2] => rangetime * [3] => * [4] => "Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00" "12:00 PM - 02:00 PM@@12:00 - 14:00" "02:00 PM - 04:00 PM@@14:00 - 16:00" "04:00 PM - 06:00 PM@@16:00 - 18:00" "06:00 PM - 08:00 PM@@18:00 - 20:00" * ] */ $form_shortcodes = array(); foreach ( $found_shortcodes as $found_shortcode ) { $shortcode_config = array(); $shortcode_config['full_shortcode'] = trim( $found_shortcode[0] ); $shortcode_config['type'] = trim( $found_shortcode[1] ); $shortcode_config['name'] = trim( $found_shortcode[2] ); $shortcode_config['options'] = trim( $found_shortcode[3] ); $shortcode_config['values_str'] = trim( $found_shortcode[4] ); $shortcode_config['values_arr'] = array(); if ( ! empty( $shortcode_config['values_str'] ) ) { $shortcode_config['values_arr'] = wpbc_parse_form_shortcode_values( $shortcode_config['values_str'] ); } $form_shortcodes[] = $shortcode_config; } return $form_shortcodes; } function wpbc_parse_form_shortcode_values( $shortcode_values ){ $values_arr = array(); // $shortcode_values == '"Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00"... ' $regex = '%(?:"[^"]*"|\'[^\']*\')%'; preg_match_all( $regex, $shortcode_values, $found_values, PREG_PATTERN_ORDER ); /** * $found_values == [ 0 => [ [0] => "Full Day@@00:00 - 24:00" * [1] => "10:00 AM - 12:00 PM@@10:00 - 12:00" * [2] => "12:00 PM - 02:00 PM@@12:00 - 14:00" * [3] => "02:00 PM - 04:00 PM@@14:00 - 16:00" * [4] => "04:00 PM - 06:00 PM@@16:00 - 18:00" * [5] => "06:00 PM - 08:00 PM@@18:00 - 20:00" * ] * ] */ foreach ( $found_values as $found_value ) { $found_value = array_map( function ( $value ) { $value = trim( $value ); $value = trim( $value, '"' ); $value = trim( $value, "'" ); $value = explode( '@@', $value ); return $value; } , $found_value ); foreach ( $found_value as $f_v ) { $value_config_arr = array(); if ( 1 == count( $f_v ) ) { $value_config_arr['value'] = $f_v[0]; } if ( 2 == count( $f_v ) ) { $value_config_arr['title'] = $f_v[0]; $value_config_arr['value'] = $f_v[1]; } $values_arr[] = $value_config_arr; } } return $values_arr; } // ==================================================================================================================== /** * Get parsed array of shortcodes with specific Name * * Example: * $form_shortcodes = wpbc_parse_form__get_shortcodes_with_name( 'rangetime', $booking_form_fields ); * * @param string $shortcode_name 'rangetime' * @param string $booking_form_configuration '[calendar]... <p>Time: [select* rangetime "Full Day@@00:00 - 24:00" "12:00 - 14:00"] ...' * * @return array = [ * [0] => [ * [full_shortcode] => [selectbox rangetime "Full Day@@00:00 - 24:00" "12:00 - 14:00"] * [type] => select * [name] => rangetime * [options] => * [values_str] => "Full Day@@00:00 - 24:00" "12:00 - 14:00" * [values_arr] => [ * [0] => [ * [title] => Full Day * [value] => 00:00 - 24:00 * ] * [1] => [ * [value] => 12:00 - 14:00 * ] * ] * ], * [1] => [ * [full_shortcode] => [selectbox rangetime "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"] * [type] => select * [name] => rangetime * [options] => * [values_str] => "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00" * [values_arr] => [ * [0] => [ * [value] => 14:00 - 16:00 * ] * [1] => [ * [value] => 16:00 - 18:00 * ] * [2] => [ * [value] => 18:00 - 20:00 * ] * ] * ] * , ... * ] */ function wpbc_parse_form__get_shortcodes_with_name( $shortcode_name, $booking_form_configuration ) { $form_shortcodes = wpbc_parse_form( $booking_form_configuration ); $return_shortcode = array(); foreach ( $form_shortcodes as $form_shortcode ) { if ( $shortcode_name == $form_shortcode['name'] ) { $return_shortcode[] = $form_shortcode; } } return $return_shortcode; } /** * Parse booking form and get value of first shortcode with this name. Be careful with conditional form: * where existing several shortcodes with the same name. This function return only first shortcode! * * Example: * $form_shortcodes = wpbc_parse_form__get_first_shortcode_values( 'rangetime', $booking_form_fields ); * * @param string $shortcode_name 'rangetime' * @param string $booking_form_configuration '[calendar]... <p>Time: [select* rangetime "Full Day@@00:00 - 24:00" "10:00 AM - 12:00 PM@@10:00 - 12:00"] ...' * * @return false | array FALSE if no field OR = [ * [0] => [ * [title] => Full Day * [value] => 00:00 - 24:00 * ] * [1] => [ * [title] => 10:00 AM - 12:00 PM * [value] => 10:00 - 12:00 * ] * , ... * ] */ function wpbc_parse_form__get_first_shortcode_values( $shortcode_name, $booking_form_configuration ) { $form_shortcodes = wpbc_parse_form( $booking_form_configuration ); $return_shortcode = array(); foreach ( $form_shortcodes as $form_shortcode ) { if ( $shortcode_name == $form_shortcode['name'] ) { return $form_shortcode['values_arr']; } } return false; }
Save
Back