Server IP : 63.250.38.98 / Your IP : 216.73.216.21 Web Server : LiteSpeed System : Linux premium291.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64 User : samejjip ( 1289) PHP Version : 8.1.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/samejjip/public_html/wp-content/plugins/pixelyoursite/includes/ |
Upload File : |
<?php namespace PixelYourSite; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } abstract class Settings { /** * Options section slug * * @var string */ private $slug; /** * Options values * * @var array */ private $values = array(); /** * Database option key * * @var string */ private $option_key = ''; /** * Default options values * * @var array */ private $defaults = array(); /** * List of all options * * @var array */ private $options = array(); private $defaults_json_path; /** * Constructor * * @param string $slug */ public function __construct( $slug ) { $this->slug = $slug; $this->option_key = 'pys_' . $slug; } public function getSlug() { return $this->slug; } /** * Load options fields and options defaults from specified files * * @param string $fields Path to options fields file * @param string $defaults Path to options defaults file */ public function locateOptions( $fields, $defaults ) { $this->loadJSON( $fields, false ); $this->loadJSON( $defaults, true ); $this->defaults_json_path = $defaults; } public function resetToDefaults() { if ( ! file_exists( $this->defaults_json_path ) ) { return; } // List of fields to preserve $preserve_fields = [ 'enabled', 'tracking_id', 'enable_server_container', 'server_container_url', 'transport_url', 'pixel_id', 'use_server_api', 'advanced_matching_enabled', 'server_access_api_token', 'use_server_api', 'verify_meta_tag', 'gtm_id', 'gtm_just_data_layer', ]; // Load current values $this->maybeLoad(); $current_values = $this->values; // Preserve the values of specified fields $preserved_values = []; foreach ( $preserve_fields as $field ) { if ( isset( $current_values[ $field ] ) ) { $preserved_values[ $field ] = $current_values[ $field ]; } } // Load default values $content = file_get_contents( $this->defaults_json_path ); $default_values = json_decode( $content, true ); // Merge preserved values with default values $merged_values = array_merge( $default_values, $preserved_values ); // Update options with the merged values $this->updateOptions( $merged_values ); } /** * Load options fields or options defaults from specified file * * @param string $file * @param bool $is_defaults */ private function loadJSON( $file, $is_defaults ) { if ( ! file_exists( $file ) ) { return; } $content = file_get_contents( $file ); $values = json_decode( $content, true ); if ( null === $values ) { return; } if ( $is_defaults ) { $this->defaults = $values; } else { $this->options = $values; } } /** * Add new option field * * @param string $key * @param string $field_type * @param mixed $default */ public function addOption( $key, $field_type, $default ) { $this->options[ $key ] = $field_type; $this->defaults[ $key ] = $default; } /** * Gets an option value or its default value * * @param string $key Option key * @param mixed $fallback Option fallback value if no default is set * * @return mixed The value specified for the option or a default value for the option. */ public function getOption( $key, $fallback = null ) { $this->maybeLoad(); // get option default if unset if ( ! isset( $this->values[ $key ] ) ) { $this->values[ $key ] = isset( $this->defaults[ $key ] ) ? $this->defaults[ $key ] : null; } // use fall back value if default is not set if ( null === $this->values[ $key ] && ! is_null( $fallback ) ) { $this->values[ $key ] = $fallback; } return $this->values[ $key ]; } public function setOption($key, $value){ $this->maybeLoad(); if (isset($value) ) { $this->values[ $key ] = $value; } } /** * Load values from database * * @param bool $force Force options load */ private function maybeLoad( $force = false ) { if ( $force || empty( $this->values ) ) { $this->values = get_option( $this->option_key, null ); } // if there are no settings defined, use default values if ( ! is_array( $this->values ) ) { $this->values = $this->defaults; } } public function reloadOptions() { $this->maybeLoad( true ); } /** * Sanitize and save options * * @param null|array $values Optional. If set, options values will be received from param instead of $_POST. */ public function updateOptions( $values = null ) { $this->maybeLoad(); if ( is_array( $values ) ) { $form_data = $values; } else { $form_data = isset( $_POST['pys'][ $this->slug ] ) ? $_POST['pys'][ $this->slug ] : array(); } // save posted fields foreach ( $form_data as $key => $value ) { if ( isset( $this->options[ $key ] ) ) { $this->values[ $key ] = $this->sanitize_form_field( $key, $value ); } } update_option( $this->option_key, $this->values ); } /** * Sanitize form field * * @param string $key Field key * @param array $value Field value * * @return mixed Sanitized field value */ private function sanitize_form_field( $key, $value ) { $type = $this->options[ $key ]; // look for very specific sanitization filter $filter_name = "{$this->option_key}_settings_sanitize_{$key}_field"; if ( has_filter( $filter_name ) ) { return apply_filters( $filter_name, $value ); } // look for a sanitize_FIELDTYPE_field method if ( is_callable( array( $this, 'sanitize_' . $type . '_field' ) ) ) { return $this->{'sanitize_' . $type . '_field'}( $value ); } // fallback to text return $this->sanitize_text_field( $value ); } /** * Output text input * * @param $key * @param string $placeholder * @param bool $disabled * @param bool $hidden * @param bool $empty */ public function render_text_input( $key, $placeholder = '', $disabled = false, $hidden = false, $empty = false, $type = 'standard' ) { $attr_name = "pys[$this->slug][$key]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $attr_value = $empty == false ? $this->getOption( $key ) : ""; $classes = array( "input-$type" ); if ( $hidden ) { $classes[] = 'form-control-hidden'; } $classes = implode( ' ', $classes ); ?> <input <?php disabled( $disabled ); ?> type="text" name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" value="<?php echo esc_attr( $attr_value ); ?>" placeholder="<?php echo esc_attr( $placeholder ); ?>" class="<?php echo esc_attr( $classes ); ?>"> <?php } /** * Output text input * * @param $key * @param string $placeholder * @param bool $disabled * @param bool $hidden * @param bool $empty */ public function render_password_input( $key, $placeholder = '', $disabled = false, $hidden = false, $empty = false, $type = 'standard' ) { $attr_name = "pys[$this->slug][$key]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $attr_value = $empty == false ? $this->getOption( $key ) : ""; $classes = array( "input-$type", "passwordInput" ); if ( $hidden ) { $classes[] = 'form-control-hidden'; } $classes = implode( ' ', $classes ); ?> <div class="password-block"> <input <?php disabled( $disabled ); ?> type="text" name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" value="<?php echo esc_attr( $attr_value ); ?>" placeholder="<?php echo esc_attr( $placeholder ); ?>" class="<?php echo esc_attr( $classes ); ?>" style="display:none;" > <input type="text" class="maskedInput input-<?php echo esc_attr( $type ); ?>" data-value="<?php echo esc_attr( $attr_value ); ?>"> </div> <?php } /** * Output pixel ID input (text) * * @param $key * @param string $placeholder * @param int $index */ public function render_pixel_id( $key, $placeholder = '', $index = 0 ) { $attr_name = "pys[$this->slug][$key][]"; $attr_id = 'pys_' . $this->slug . '_' . $key . '_' . $index; $values = (array) $this->getOption( $key ); $attr_value = isset( $values[ $index ] ) ? $values[ $index ] : null; ?> <input type="text" name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" value="<?php echo esc_attr( $attr_value ); ?>" placeholder="<?php echo esc_attr( $placeholder ); ?>" class="input-standard"> <?php } /** * Output text area input array item * * @param $key * @param string $placeholder * @param int $index */ public function render_text_area_array_item( $key, $placeholder = '', $index = 0, $enabled = true ) { $attr_name = "pys[$this->slug][$key][]"; $attr_id = 'pys_' . $this->slug . '_' . $key . '_' . $index; $values = (array) $this->getOption( $key ); $attr_value = isset( $values[ $index ] ) ? $values[ $index ] : null; ?> <textarea type="text" name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" placeholder="<?php echo esc_attr( $placeholder ); ?>" class="textarea-standard" <?= !$enabled ? 'disabled' : ''; ?>><?php echo esc_attr( $attr_value ); ?></textarea> <?php } /** * Output text input array item * * @param $key * @param string $placeholder * @param int $index */ public function render_text_input_array_item( $key, $placeholder = '', $index = 0,$hidden = false ) { $attr_name = "pys[$this->slug][$key][]"; $attr_id = 'pys_' . $this->slug . '_' . $key . '_' . $index; $values = (array) $this->getOption( $key ); $attr_value = isset( $values[ $index ] ) ? $values[ $index ] : null; ?> <input type=<?=$hidden? "hidden": "text"?> name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" value="<?php echo esc_attr( $attr_value ); ?>" placeholder="<?php echo esc_attr( $placeholder ); ?>" class="input-standard"> <?php } /** * Output text area input * * @param $key * @param string $placeholder * @param bool $disabled * @param bool $hidden */ public function render_text_area_input( $key, $placeholder = '', $disabled = false, $hidden = false ) { $attr_name = "pys[$this->slug][$key]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $attr_value = $this->getOption( $key ); $classes = array( 'form-control' ); if( $hidden ) { $classes[] = 'form-control-hidden'; } $classes = implode( ' ', $classes ); ?> <textarea <?php disabled( $disabled ); ?> name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" rows="5" placeholder="<?php echo esc_attr( $placeholder ); ?>" class="<?php echo esc_attr( $classes ); ?>"><?php esc_html_e( $attr_value ); ?></textarea> <?php } /** * Output checkbox input stylized as switcher * * @param $key * @param bool $collapse * @param bool $disabled */ public function render_switcher_input( $key, $collapse = false, $disabled = false, $default = false, $type = 'secondary') { $attr_name = "pys[$this->slug][$key]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $attr_value = $this->getOption( $key ); $input_class = $label_class = ''; $classes = array( "$type-switch" ); if ( $collapse ) { $classes[] = 'collapse-control'; } if ( $disabled ) { $classes[] = 'disabled'; $attr_name = ""; $attr_value = $default; } if ( $type === 'primary' ) { $input_class = 'primary-switch-input'; $label_class = 'primary-switch-btn'; } elseif ( $type === 'secondary' ) { $input_class = 'custom-switch-input'; $label_class = 'custom-switch-btn'; } $classes = implode( ' ', $classes ); ?> <div class="<?php echo esc_attr( $classes ); ?>"> <?php if ( !$disabled ) : ?> <input type="hidden" name="<?php echo esc_attr( $attr_name ); ?>" value="0"> <?php endif; ?> <?php if ( $collapse ) : ?> <input type="checkbox" name="<?php echo esc_attr( $attr_name ); ?>" value="1" <?php disabled( $disabled, true ); ?> <?php checked( $attr_value, true ); ?> id="<?php echo esc_attr( $attr_id ); ?>" class="<?php echo esc_attr( $input_class ); ?>" data-target="pys_<?php echo esc_attr( $this->slug ); ?>_<?php echo esc_attr( $key ); ?>_panel"> <?php else : ?> <input type="checkbox" name="<?php echo esc_attr( $attr_name ); ?>" value="1" <?php disabled( $disabled, true ); ?> <?php checked( $attr_value, true ); ?> id="<?php echo esc_attr( $attr_id ); ?>" class="<?php echo esc_attr( $input_class ); ?>"> <?php endif; ?> <label class="<?php echo esc_attr( $label_class ); ?>" for="<?php echo esc_attr( $attr_id ); ?>"> <?php if ( $type === 'primary' ) : ?> <span class="<?php echo esc_attr( $label_class ); ?>-slider"></span> <?php endif; ?> </label> </div> <?php } public function render_switcher_input_array( $key, $index = 0 ) { $attr_name = "pys[$this->slug][$key][]"; $attr_id = 'pys_' . $this->slug . '_' . $key . "_" . $index; $attr_values = (array) $this->getOption( $key ); $value = "index_" . $index; $valueIndex = array_search( $value, $attr_values ); $classes = array( 'secondary-switch' ); $classes = implode( ' ', $classes ); ?> <div class="<?php echo esc_attr( $classes ); ?>"> <input type="checkbox" name="<?php echo esc_attr( $attr_name ); ?>" value="<?php echo esc_attr( $value ); ?>" <?php echo $valueIndex !== false ? "checked" : "" ?> id="<?php echo esc_attr( $attr_id ); ?>" class="custom-switch-input <?php echo esc_attr( $key ); ?>"> <label class="custom-switch-btn" for="<?php echo esc_attr( $attr_id ); ?>"></label> </div> <?php } /** * Output checkbox input * * @param $key * @param $label * @param bool $disabled */ public function render_checkbox_input( $key, $label, $disabled = false ) { $attr_name = "pys[$this->slug][$key]"; $attr_value = $this->getOption( $key ); $id = $key . "_" . random_int( 1, 1000000 ); ?> <div class="small-checkbox"> <input type="hidden" name="<?php echo esc_attr( $attr_name ); ?>" value="0"> <input type="checkbox" id="<?php echo esc_attr( $id ); ?>" name="<?php echo esc_attr( $attr_name ); ?>" value="1" class="small-control-input" <?php disabled( $disabled, true ); ?> <?php checked( $attr_value, true ); ?>> <label class="small-control small-checkbox-label" for="<?php echo esc_attr( $id ); ?>"> <span class="small-control-indicator"><i class="icon-check"></i></span> <span class="small-control-description"><?php echo wp_kses_post( $label ); ?></span> </label> </div> <?php } /** * Output checkbox input array * * @param $key * @param $label * @param bool $disabled */ public function render_checkbox_input_revert_array( $key, $label, $value, $disabled = false ) { $attr_name = "pys[$this->slug][$key][]"; $attr_values = (array) $this->getOption( $key ); $isChecked = !in_array( $value, $attr_values ); $id = $key . "_" . random_int( 1, 1000000 ); ?> <div class="small-checkbox"> <input type="hidden" name="<?php echo esc_attr( $attr_name ); ?>" value="<?= $value ?>"> <input type="checkbox" id="<?php echo esc_attr( $id ); ?>" name="<?php echo esc_attr( $attr_name ); ?>" value="<?= "revert_" . $value ?>" class="small-control-input" <?php disabled( $disabled, true ); ?> <?php echo $isChecked ? "checked" : "" ?>> <label class="small-control small-checkbox-label" for="<?php echo esc_attr( $id ); ?>"> <span class="small-control-indicator"><i class="icon-check"></i></span> <span class="small-control-description"><?php echo wp_kses_post( $label ); ?></span> </label> </div> <?php } /** * @throws RandomException */ public function render_checkbox_blacklist_input_array($key, $label, $value, $disabled = false ) { $attr_name = "pys[$this->slug][$key][]"; $attr_values = (array) $this->getOption( $key ); $id = $key . "_" . random_int( 1, 1000000 ); $isChecked = in_array($value, $attr_values, true); ?> <div class="small-checkbox"> <input type="checkbox" id="<?php echo esc_attr( $id ); ?>" name="<?php echo esc_attr( $attr_name ); ?>" value="<?= $value ?>" class="small-control-input" <?php disabled( $disabled, true ); ?> <?php echo $isChecked ? "checked" : "" ?>> <label class="small-control small-checkbox-label" for="<?php echo esc_attr( $id ); ?>"> <span class="small-control-indicator"><i class="icon-check"></i></span> <span class="small-control-description"><?php echo wp_kses_post( $label ); ?></span> </label> </div> <?php } /** * Output radio input * * @param $key * @param $value * @param $label * @param bool $disabled * @param bool $with_pro_badge */ public function render_radio_input( $key, $value, $label, $disabled = false, $with_pro_badge = false ) { $id = $key . "_" . rand( 1, 1000000 ); $attr_name = "pys[$this->slug][$key]"; ?> <div class="radio-standard"> <input type="radio" name="<?php echo esc_attr( $attr_name ); ?>" <?php disabled( $disabled, true ); ?> class="custom-control-input" id="<?php echo esc_attr( $id ); ?>" <?php checked( $this->getOption( $key ), $value ); ?> value="<?php echo esc_attr( $value ); ?>"> <label class="standard-control radio-checkbox-label" for="<?php echo esc_attr( $id ); ?>"> <span class="standard-control-indicator"></span> <span class="standard-control-description"><?php echo wp_kses_post( $label ); ?></span> <?php if ( $with_pro_badge ) { renderCogBadge(); } ?> </label> </div> <?php } /** * Output number input * * @param $key * @param null $placeholder * @param bool $disabled */ public function render_number_input( $key, $placeholder = '', $disabled = false, $max = null, $min = 0, $step = 'any', $suffix = '' ) { $attr_name = "pys[$this->slug][$key]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $attr_value = $this->getOption( $key ); ?> <div class="input-number-wrapper"> <button class="decrease"><i class="icon-minus"></i></button> <input <?php disabled( $disabled ); ?> type="number" name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" value="<?php echo esc_attr( $attr_value ); ?>" placeholder="<?php echo esc_attr( $placeholder ); ?>" min="<?= $min ?>" <?php if ( $max != null ) : ?> max="<?= $max ?>" <?php endif; ?> step="<?= $step ?>" > <button class="increase"><i class="icon-plus"></i></button> </div> <?php } /** * Output number input * * @param $key * @param null $placeholder * @param bool $disabled */ public function render_number_input_percent( $key, $placeholder = '', $disabled = false, $max = null, $min = 0, $step = 'any' ) { $attr_name = "pys[$this->slug][$key]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $attr_value = $this->getOption( $key ); ?> <div class="input-number-wrapper input-number-wrapper-percent"> <button class="decrease"><i class="icon-minus"></i></button> <input <?php disabled( $disabled ); ?> type="number" name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" value="<?php echo esc_attr( $attr_value ); ?>" placeholder="<?php echo esc_attr( $placeholder ); ?>" min="<?= $min ?>" <?php if ( $max != null ) : ?> max="<?= $max ?>" <?php endif; ?> step="<?= $step ?>" > <button class="increase"><i class="icon-plus"></i></button> </div> <?php } /** * Output select input * * @param $key * @param $options * @param bool $disabled * @param null $visibility_target * @param null $visibility_value */ public function render_select_input( $key, $options, $disabled = false, $visibility_target = null, $visibility_value = null ) { $attr_name = "pys[$this->slug][$key]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $classes = array( 'select-standard' ); if ( $visibility_target ) { $classes[] = 'controls-visibility'; } $classes = implode( ' ', $classes ); ?> <div class="select-standard-wrap"> <select class="<?php echo esc_attr( $classes ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" name="<?php echo esc_attr( $attr_name ); ?>" <?php disabled( $disabled ); ?> data-target="<?php echo esc_attr( $visibility_target ); ?>" data-value="<?php echo esc_attr( $visibility_value ); ?>" autocomplete="off"> <option value="" disabled selected>Please, select...</option> <?php foreach ( $options as $option_key => $option_value ) : ?> <option value="<?php echo esc_attr( $option_key ); ?>" <?php selected( $option_key, esc_attr( $this->getOption( $key ) ) ); ?> <?php disabled( $option_key, 'disabled' ); ?>><?php echo esc_attr( $option_value ); ?></option> <?php endforeach; ?> </select> </div> <?php } /** * Output multi select input * * @param $key * @param $values * @param bool $disabled */ public function render_multi_select_input( $key, $values, $disabled = false, $placeholder = "" ) { $attr_name = "pys[$this->slug][$key][]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $selected = $this->getOption( $key ) ? $this->getOption( $key ) : array(); ?> <input type="hidden" name="<?php echo esc_attr( $attr_name ); ?>" value=""> <select class="pys-pysselect2" data-placeholder="<?= $placeholder ?>" name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" <?php disabled( $disabled ); ?> style="width: 100%;" multiple> <?php foreach ( $values as $option_key => $option_value ) : ?> <option value="<?php echo esc_attr( $option_key ); ?>" <?php selected( in_array( $option_key, $selected ) ); ?> <?php disabled( $option_key, 'disabled' ); ?> > <?php echo esc_attr( $option_value ); ?> </option> <?php endforeach; ?> </select> <?php } /** * Output tags select input * * @param $key * @param bool $disabled */ public function render_tags_select_input( $key, $disabled = false ,$default = []) { $attr_name = "pys[$this->slug][$key][]"; $attr_id = 'pys_' . $this->slug . '_' . $key; $tags = $this->getOption( $key ); $tags = is_array( $tags ) ? array_filter( $tags ) : array(); $tags = array_diff($tags,$default); ?> <input type="hidden" name="<?php echo esc_attr( $attr_name ); ?>" value=""> <select class="pys-tags-pysselect2" name="<?php echo esc_attr( $attr_name ); ?>" id="<?php echo esc_attr( $attr_id ); ?>" <?php disabled( $disabled ); ?> style="width: 100%;" multiple> <?php foreach ( $default as $tag ) : ?> <option value="<?php echo esc_attr( $tag ); ?>" selected locked="locked"> <?php echo esc_attr( $tag ); ?> </option> <?php endforeach; ?> <?php foreach ( $tags as $tag ) : ?> <option value="<?php echo esc_attr( $tag ); ?>" selected> <?php echo esc_attr( $tag ); ?> </option> <?php endforeach; ?> </select> <?php } /** * Sanitize text field value * * @param $value * * @return string */ public function sanitize_text_field( $value ) { $value = is_null( $value ) ? '' : $value; return wp_kses_post( trim( stripslashes( $value ) ) ); } /** * Sanitize textarea field value * * @param $value * * @return string */ public function sanitize_textarea_field( $value ){ $value = is_null( $value ) ? '' : $value; return trim( stripslashes( $value ) ); } /** * Sanitize number field value * * @param $value * * @return int */ public function sanitize_number_field( $value ) { return (int) $value; } /** * Sanitize checkbox field value * * @param $value * * @return bool */ public function sanitize_checkbox_field( $value ) { if ( is_bool( $value ) || is_numeric( $value ) ) { return (bool) $value; } else { return false; } } /** * Sanitize radio field value * * @param $value * * @return null|string */ public function sanitize_radio_field( $value ) { return ! is_null( $value ) ? trim( stripslashes( $value ) ) : null; } /** * Sanitize select field value * * @see deepSanitizeTextField() * * @param $value * * @return array|string */ public function sanitize_select_field( $value ) { $value = is_null( $value ) ? '' : $value; return deepSanitizeTextField( stripslashes( $value ) ); } /** * Sanitize tags select value * * @see deepSanitizeTextField() * * @param $value * * @return array */ public function sanitize_multi_select_field( $value ) { return is_array( $value ) ? array_map( 'PixelYourSite\deepSanitizeTextField', $value ) : array(); } /** * @param $value * * @return array */ public function sanitize_tag_select_field( $value ) { return is_array( $value ) ? array_map( 'PixelYourSite\deepSanitizeTextField', $value ) : array(); } /** * Sanitize array field value * * @param $values * * @return array */ public function sanitize_array_field( $values ) { $values = is_array( $values ) ? $values : array(); $sanitized = array(); foreach ( $values as $key => $value ) { $new_value = $this->sanitize_text_field( $value ); if ( ! empty( $new_value ) && ! in_array( $new_value, $sanitized ) ) { $sanitized[ $key ] = $new_value; } } return $sanitized; } /** * Sanitize array field value * * @param $values * * @return array */ public function sanitize_array_textarea_field( $values ) { $values = is_array( $values ) ? $values : array(); $sanitized = array(); foreach ( $values as $key => $value ) { $new_value = $this->sanitize_textarea_field( $value ); if ( ! empty( $new_value ) && ! in_array( $new_value, $sanitized ) ) { $sanitized[ $key ] = $new_value; } } return $sanitized; } /** * Sanitize array field value with duplicates value * * @param $values * * @return array */ public function sanitize_array_v_field( $values ) { $values = is_array( $values ) ? $values : array(); $sanitized = array(); foreach ( $values as $key => $value ) { $new_value = $this->sanitize_text_field( $value ); if ( ! empty( $new_value ) ) { $sanitized[ $key ] = $new_value; } } return $sanitized; } public function render_checkbox_input_array( $key, $label, $index = 0, $disabled = false ) { $attr_name = "pys[$this->slug][$key][]"; $attr_values = (array)$this->getOption( $key ); $value = "index_".$index; $valueIndex = array_search($value,$attr_values); ?> <label class="custom-control custom-checkbox"> <input type="checkbox" name="<?php echo esc_attr( $attr_name ); ?>" value="<?=$value?>" class="custom-control-input" <?php disabled( $disabled, true ); ?> <?=$valueIndex !== false ? "checked" : "" ?>> <span class="custom-control-indicator"></span> <span class="custom-control-description"><?php echo wp_kses_post( $label ); ?></span> </label> <?php } function renderDummyTextInput( $placeholder = '' ) { ?> <input type="text" disabled="disabled" placeholder="<?php esc_html_e( $placeholder ); ?>" class="form-control"> <?php } function renderDummyNumberInput($default = 0) { ?> <input type="number" disabled="disabled" min="0" max="100" class="form-control" value="<?=$default?>"> <?php } function renderDummySwitcher($isEnable = false) { $attr = $isEnable ? " checked='checked'" : ""; ?> <div class="custom-switch disabled"> <input type="checkbox" value="1" <?=$attr?> disabled="disabled" class="custom-switch-input"> <label class="custom-switch-btn"></label> </div> <?php } function renderDummyCheckbox( $label, $with_pro_badge = false ) { ?> <label class="custom-control custom-checkbox <?php echo $with_pro_badge ? 'custom-checkbox-badge' : ''; ?>"> <input type="checkbox" value="1" class="custom-control-input" disabled="disabled"> <span class="custom-control-indicator"></span> <span class="custom-control-description"> <?php echo wp_kses_post( $label ); ?> <?php if ( $with_pro_badge ) { renderProBadge(); } ?> </span> </label> <?php } function renderDummyRadioInput( $label, $checked = false ) { ?> <label class="custom-control custom-radio"> <input type="radio" disabled="disabled" class="custom-control-input" <?php checked( $checked ); ?>> <span class="custom-control-indicator"></span> <span class="custom-control-description"><?php echo wp_kses_post( $label ); ?></span> </label> <?php } function renderDummyTagsFields( $tags = array() ) { ?> <select class="form-control pys-tags-pysselect2" disabled="disabled" style="width: 100%;" multiple> <?php if(!empty($tags)){ foreach ( $tags as $tag ) : ?> <option value="<?php echo esc_attr( $tag ); ?>" selected> <?php echo esc_attr( $tag ); ?> </option> <?php endforeach; } ?> </select> <?php } function renderDummySelectInput( $value, $full_width = false ) { $attr_width = $full_width ? 'width: 100%;' : ''; ?> <select class="form-control form-control-sm" disabled="disabled" autocomplete="off" style="<?php echo esc_attr( $attr_width ); ?>"> <option value="" disabled selected><?php esc_html_e( $value ); ?></option> </select> <?php } function renderProBadge( $url = null,$label = "PRO Feature" ) { if ( ! $url ) { $url = 'https://www.pixelyoursite.com/'; } $url = untrailingslashit( $url ) . '/?utm_source=pys-free-plugin&utm_medium=pro-badge&utm_campaign=pro-feature'; echo ' <a href="' . esc_url( $url ) . '" target="_blank" class="badge badge-pill badge-pro">'.$label.'</a>'; } public function convertTimeToSeconds($timeValue = 24, $type = 'hours') { switch ($type){ case 'hours': $time = $timeValue * 60 * 60; break; case 'minute': $time = $timeValue * 60; break; case 'seconds': $time = $timeValue; break; } return $time; } public function renderValueOptionsBlock($context, $useEnable = true, $usePopover = true, $useBorder = true, $title = '', $disabled = false) { if ( empty( $context ) ) { return; } if ( empty( $title ) ) { $title = 'Value parameter settings:'; } $prefixes = [ 'purchase', 'initiate_checkout', 'complete_registration' ]; if ( count( array_filter( $prefixes, function ( $prefix ) use ( $context ) { return strpos( $context, $prefix ) !== false; } ) ) > 0 ) { $priceText = 'Order\'s total'; $percentText = 'Percent of the order\'s total'; } else { $priceText = 'Product price'; $percentText = 'Percent of the product price'; } ?> <div class="gap-24"> <div class="d-flex align-items-center"> <?php if ( !is_null( $this->getOption( $context . '_value_enabled' ) ) || $useEnable ) : ?> <div class="mr-16"> <?php !$disabled ? $this->render_switcher_input( $context . '_value_enabled', true ) : renderDummySwitcher(); ?> </div> <?php endif; ?> <h4 class="secondary_heading"><?php echo esc_html( $title ); ?></h4> <?php if ( $usePopover ) { renderPopoverButton( $context . '_event_value' ); } ?> </div> <div <?php if ( !is_null( $this->getOption( $context . '_value_enabled' ) ) && !$disabled) { renderCollapseTargetAttributes( $context . '_value_enabled', PYS() ); } ?>> <div class="radio-inputs-wrap-big woo-settings-block"> <?php !$disabled ? $this->render_radio_input( $context . '_value_option', 'price', $priceText ) : renderDummyRadioInput($priceText); ?> <?php if ( strpos( $context, 'edd_' ) !== 0 ) { ?> <?php if ( !isPixelCogActive() ) { ?> <?php !$disabled ? $this->render_radio_input( $context . '_value_option', 'cog', 'Price minus Cost of Goods.', true, true ): renderDummyRadioInput('Price minus Cost of Goods'); ?> <?php } else { ?> <?php !$disabled ? $this->render_radio_input( $context . '_value_option', 'cog', 'Price minus Cost of Goods', false ): renderDummyRadioInput('Price minus Cost of Goods'); ?> <?php } ?> <?php } ?> <div class="grid-table"> <?php renderDummyRadioInput( $percentText ); ?> <?php renderDummyNumberInput( 0 ); ?> <?php !$disabled ? $this->render_radio_input( $context . '_value_option', 'global', 'Use global value' ) : renderDummyRadioInput('Use global value') ; ?> <?php !$disabled ? $this->render_number_input( $context . '_value_global' ) : renderDummyNumberInput(0); ?> </div> </div> <?php if ( $useBorder ) : ?> <div class="line mt-24"></div> <?php endif; ?> </div> </div> <?php } }