????
Current Path : /home/rsfshcom/public_html/wp-content/plugins/metform/utils/ |
Current File : /home/rsfshcom/public_html/wp-content/plugins/metform/utils/util.php |
<?php namespace MetForm\Utils; defined( 'ABSPATH' ) || exit; /** * Global helper class. * * @since 1.0.0 */ class Util{ public static $instance = null; private static $key = 'metform_options'; public static function get_option( $key, $default = '' ) { $data_all = get_option( self::$key ); return ( isset( $data_all[ $key ] ) && $data_all[ $key ] != '' ) ? $data_all[ $key ] : $default; } public static function save_option( $key, $value = '' ) { $data_all = get_option( self::$key ); $data_all[ $key ] = $value; return update_option( self::$key, $data_all ); } public static function get_settings( $key, $default = '' ) { $data_all = self::get_option( 'settings', array() ); return ( isset( $data_all[ $key ] ) && $data_all[ $key ] != '' ) ? $data_all[ $key ] : $default; } public static function save_settings( $new_data = '' ) { $data_old = self::get_option( 'settings', array() ); $data = array_merge( $data_old, $new_data ); return self::save_option( 'settings', $data ); } public static function metform_admin_action() { // Check for nonce security $status = ''; if (!isset($_POST['nonce']) || ! wp_verify_nonce( sanitize_key(wp_unslash($_POST['nonce'])), 'ajax-nonce' ) ) { return; } if ( ! current_user_can( 'manage_options' ) ) { return; } if ( isset( $_POST['settings'] ) ) { $status = self::save_settings( empty( $_POST['settings'] ) ? array() : map_deep( wp_unslash( $_POST['settings'] ) , 'sanitize_text_field' ) ); } if($status){ wp_send_json_success(); }else{ wp_send_json_error(); } exit; } public static function instance() { if ( is_null( self::$instance ) ) { // Fire the class instance self::$instance = new self(); } return self::$instance; } /** * Support For HTML Entities * * @since 1.3.1 * @access public */ public static function react_entity_support($str, $render_on_editor) { if ( !\Elementor\Plugin::$instance->editor->is_edit_mode() || $render_on_editor ): $str = '${ parent.decodeEntities(`'. $str .'`) } '; endif; return $str; } /** * Get metform older version if has any. * * @since 1.0.0 * @access public */ public static function old_version(){ $version = get_option('metform_version'); return null == $version ? -1 : $version; } /** * Set metform installed version as current version. * * @since 1.0.0 * @access public */ public static function set_version(){ } /** * Auto generate classname from path. * * @since 1.0.0 * @access public */ public static function make_classname( $dirname ) { $dirname = pathinfo($dirname, PATHINFO_FILENAME); $class_name = explode( '-', $dirname ); $class_name = array_map( 'ucfirst', $class_name ); $class_name = implode( '_', $class_name ); return $class_name; } public static function google_fonts($font_families = []) { $fonts_url = ''; if ( $font_families ) { $query_args = array( 'family' => urlencode( implode( '|', $font_families ) ) ); $fonts_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' ); } return esc_url_raw( $fonts_url ); } public static function kses( $raw ) { $allowed_tags = array( 'a' => array( 'class' => array(), 'href' => array(), 'rel' => array(), 'title' => array(), 'target' => array(), ), 'abbr' => array( 'title' => array(), ), 'b' => array(), 'blockquote' => array( 'cite' => array(), ), 'cite' => array( 'title' => array(), ), 'code' => array(), 'del' => array( 'datetime' => array(), 'title' => array(), ), 'dd' => array(), 'div' => array( 'class' => array(), 'title' => array(), 'style' => array(), ), 'dl' => array(), 'dt' => array(), 'em' => array(), 'h1' => array( 'class' => array(), ), 'h2' => array( 'class' => array(), ), 'h3' => array( 'class' => array(), ), 'h4' => array( 'class' => array(), ), 'h5' => array( 'class' => array(), ), 'h6' => array( 'class' => array(), ), 'i' => array( 'class' => array(), ), 'img' => array( 'alt' => array(), 'class' => array(), 'height' => array(), 'src' => array(), 'width' => array(), ), 'li' => array( 'class' => array(), ), 'ol' => array( 'class' => array(), ), 'p' => array( 'class' => array(), ), 'q' => array( 'cite' => array(), 'title' => array(), ), 'span' => array( 'class' => array(), 'title' => array(), 'style' => array(), ), 'iframe' => array( 'width' => array(), 'height' => array(), 'scrolling' => array(), 'frameborder' => array(), 'allow' => array(), 'src' => array(), ), 'strike' => array(), 'br' => array(), 'strong' => array(), 'data-wow-duration' => array(), 'data-wow-delay' => array(), 'data-wallpaper-options' => array(), 'data-stellar-background-ratio' => array(), 'ul' => array( 'class' => array(), ), ); if ( function_exists( 'wp_kses' ) ) { // WP is here return wp_kses( $raw, $allowed_tags ); } else { return $raw; } } public static function get_kses_array( ) { $allowed_tags = array( 'a' => array( 'class' => array(), 'href' => array(), 'rel' => array(), 'title' => array(), 'target' => array(), ), 'abbr' => array( 'title' => array(), ), 'b' => array(), 'blockquote' => array( 'cite' => array(), ), 'cite' => array( 'title' => array(), ), 'code' => array(), 'del' => array( 'datetime' => array(), 'title' => array(), ), 'dd' => array(), 'div' => array( 'class' => array(), 'title' => array(), 'style' => array(), ), 'dl' => array(), 'dt' => array(), 'em' => array(), 'h1' => array( 'class' => array(), ), 'h2' => array( 'class' => array(), ), 'h3' => array( 'class' => array(), ), 'h4' => array( 'class' => array(), ), 'h5' => array( 'class' => array(), ), 'h6' => array( 'class' => array(), ), 'i' => array( 'class' => array(), ), 'img' => array( 'alt' => array(), 'class' => array(), 'height' => array(), 'src' => array(), 'width' => array(), ), 'li' => array( 'class' => array(), ), 'ol' => array( 'class' => array(), ), 'p' => array( 'class' => array(), ), 'q' => array( 'cite' => array(), 'title' => array(), ), 'span' => array( 'class' => array(), 'title' => array(), 'style' => array(), ), 'iframe' => array( 'width' => array(), 'height' => array(), 'scrolling' => array(), 'frameborder' => array(), 'allow' => array(), 'src' => array(), ), 'strike' => array(), 'br' => array(), 'strong' => array(), 'data-wow-duration' => array(), 'data-wow-delay' => array(), 'data-wallpaper-options' => array(), 'data-stellar-background-ratio' => array(), 'ul' => array( 'class' => array(), ), ); return $allowed_tags; } public static function kspan($text){ return str_replace(['{', '}'], ['<span>', '</span>'], self::kses($text)); } public static function trim_words($text, $num_words){ return wp_trim_words( $text, $num_words, '' ); } public static function array_push_assoc($array, $key, $value){ $array[$key] = $value; return $array; } public static function render($content){ if (stripos($content, "metform-has-lisence") !== false) { return null; } return $content; } public static function render_elementor_content($content_id){ $elementor_instance = \Elementor\Plugin::instance(); return $elementor_instance->frontend->get_builder_content_for_display( $content_id ); } public static function img_meta($id){ $attachment = get_post($id); if($attachment == null || $attachment->post_type != 'attachment'){ return null; } return [ 'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ), 'caption' => $attachment->post_excerpt, 'description' => $attachment->post_content, 'href' => get_permalink( $attachment->ID ), 'src' => $attachment->guid, 'title' => $attachment->post_title ]; } public static function render_inner_content($content, $id){ return str_replace('.elementor-'.$id.' ', '#elementor .elementor-'.$id.' ', $content); } public static function mfConvertStyleToReactObj($content){ preg_match_all(' /style=("|\')(.*?)("|\')/', $content, $match); if(isset($match) && !empty($match ) && count($match) <= 0) { return $content; } $exception_styled_property_names = [ '--divider-pattern-url' ]; foreach ($match[2] as $item) { $styleData = []; $is_matched_found = false; foreach($exception_styled_property_names as $property_name){ if (strpos($item, $property_name) !== FALSE) { if($property_name === '--divider-pattern-url'){ $is_matched_found = true; $styleData['--divider-pattern-url'] = rtrim(trim(str_replace('--divider-pattern-url:', '', html_entity_decode($item, ENT_QUOTES))), ';'); } } } if(!$is_matched_found){ $styles = explode(';', $item); if(isset($styles) && !empty($styles )){ foreach($styles as $style){ $split = explode(':', $style); $key = isset($split[0]) ? trim($split[0]) : ''; $value = isset($split[1]) ? trim($split[1]) : ''; if(strlen($key) > 0 && strlen($value)){ $styleData["$key"] = $value; } } } } $newStyledData = ''; if(!empty($styleData)){ $newStyledData .= "{ "; foreach($styleData as $key => $value){ $value = addslashes($value); $newStyledData .= "'$key': '{$value}',"; } $newStyledData .= " }"; } //* Replace the old style with new style that capable of react $replaceStyle = (isset($newStyledData) && !empty($newStyledData )) ? 'style=${' . $newStyledData . '}' : ''; $content = preg_replace(array('[style=("|\')('. preg_quote($item) .')("|\')]'), $replaceStyle, $content); } $modified = str_replace('<style>','<style key="1">',$content); return str_replace('data-elementor-type="wp-post"','data-elementor-type="wp-post" key="2"',$modified); } public static function render_form_content($form, $widget_id){ $rest_url = get_rest_url(); $form_unique_name = (is_numeric($form)) ? ($widget_id.'-'.$form) : $widget_id; $form_id = (is_numeric($form)) ? $form : $widget_id; $form_settings = \MetForm\Core\Forms\Action::instance()->get_all_data($form_id); $site_key = !empty($form_settings['mf_recaptcha_site_key']) ? $form_settings['mf_recaptcha_site_key'] : ''; $form_type = isset($form_settings['form_type']) ? $form_settings['form_type'] : 'contact_form'; if(!empty($form_settings['mf_recaptcha_version'])) { if($form_settings['mf_recaptcha_version'] == 'recaptcha-v3') { $site_key = $form_settings['mf_recaptcha_site_key_v3']; } } ob_start(); ?> <div id="metform-wrap-<?php echo esc_attr( $form_unique_name ); ?>" class="mf-form-wrapper" data-form-id="<?php echo esc_attr( $form_id ); ?>" data-action="<?php echo esc_attr($rest_url. "metform/v1/entries/insert/" .$form_id); ?>" data-wp-nonce="<?php echo esc_attr(wp_create_nonce( 'wp_rest' )); ?>" data-form-nonce="<?php echo esc_attr(wp_create_nonce( 'form_nonce' )); ?>" data-quiz-summery = "<?php echo (!empty($form_settings['quiz_summery']) && class_exists('\MetForm_Pro\Base\Package')) ? "true" : "false"; ?>" data-save-progress = "<?php echo (isset($form_settings['mf_save_progress']) && $form_settings['mf_save_progress'] && class_exists('\MetForm_Pro\Base\Package')) ? "true" : "false"; ?>" data-form-type="<?php echo esc_attr($form_type); ?>" data-stop-vertical-effect="<?php echo esc_attr(isset($form_settings['mf_stop_vertical_scrolling']) ? $form_settings['mf_stop_vertical_scrolling'] : '') ?>" ></div> <!----------------------------- * controls_data : find the the props passed indie of data attribute * props.SubmitResponseMarkup : contains the markup of error or success message * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals --------------------------- --> <?php $is_edit_mode = \Elementor\Plugin::$instance->editor->is_edit_mode(); ?> <script type="text/mf" class="mf-template"> function controls_data (value){ let currentWrapper = "mf-response-props-id-<?php echo esc_attr( $form_id ); ?>"; let currentEl = document.getElementById(currentWrapper); return currentEl ? currentEl.dataset[value] : false } let is_edit_mode = '<?php echo esc_attr( $is_edit_mode );?>' ? true : false; let message_position = controls_data('messageposition') || 'top'; let message_successIcon = controls_data('successicon') || ''; let message_errorIcon = controls_data('erroricon') || ''; let message_editSwitch = controls_data('editswitchopen') === 'yes' ? true : false; let message_proClass = controls_data('editswitchopen') === 'yes' ? 'mf_pro_activated' : ''; let is_dummy_markup = is_edit_mode && message_editSwitch ? true : false; return html` <form className="metform-form-content" ref=${parent.formContainerRef} onSubmit=${ validation.handleSubmit( parent.handleFormSubmit ) } > ${is_dummy_markup ? message_position === 'top' ? props.ResponseDummyMarkup(message_successIcon, message_proClass) : '' : ''} ${is_dummy_markup ? ' ' : message_position === 'top' ? props.SubmitResponseMarkup`${parent}${state}${message_successIcon}${message_errorIcon}${message_proClass}` : ''} <!-------------------------------------------------------- *** IMPORTANT / DANGEROUS *** ${html``} must be used as in immediate child of "metform-form-main-wrapper" class otherwise multistep form will not run at all ----------------------------------------------------------> <div className="metform-form-main-wrapper" key=${'hide-form-after-submit'} ref=${parent.formRef}> ${html` <?php $replaceStrings = array( 'from' => array( 'class=', 'for=', 'cellspacing=', 'cellpadding=', 'srcset', 'colspan', '<script>', // Script Start Tag '</script>', // Script End Tag '<br>', '<BR>' ), 'to' => array( 'className=', 'htmlFor=', 'cellSpacing=', 'cellPadding=', 'srcSet', 'colSpan', '${(function(){', // Script Start Tag '})()}', // Script End Tag '<br/>', '<br/>' ), ); $form_content = is_numeric( $form ) ? \MetForm\Utils\Util::render_elementor_content( $form ) : $form; $form_content = \MetForm\Utils\Util::mfConvertStyleToReactObj($form_content); $form_content = str_replace( $replaceStrings['from'], $replaceStrings['to'], $form_content ); $form_content = preg_replace( '/<!--(.|\s)*?-->/', '', $form_content ); // Removes HTML Comments echo $form_content; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- ignore this because of if escape this content does not append in preview and frontend. ?> `} </div> ${is_dummy_markup ? message_position === 'bottom' ? props.ResponseDummyMarkup(message_successIcon, message_proClass) : '' : ''} ${is_dummy_markup ? ' ' : message_position === 'bottom' ? props.SubmitResponseMarkup`${parent}${state}${message_successIcon}${message_errorIcon}${message_proClass}` : ''} </form> ` </script> <?php $output = ob_get_contents(); ob_end_clean(); return $output; } public static function add_param_url($url, $key, $value) { $url = preg_replace('/(.*)(?|&)'. $key .'=[^&]+?(&)(.*)/i', '$1$2$4', $url .'&'); $url = substr($url, 0, -1); if (strpos($url, '?') === false) { return ($url .'?'. $key .'='. $value); } else { return ($url .'&'. $key .'='. $value); } } public static function get_form_settings($key){ $options = get_option('metform_option__settings'); return isset($options[$key]) ? $options[$key] : ''; } public static function metform_content_renderer($content){ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo $content; } /** * Convert a abs path to a URL. * * @since 3.2.0 * @access public */ public static function abs_path_to_url( $path = '' ) { $url = str_replace( wp_normalize_path( untrailingslashit( ABSPATH ) ), site_url(), wp_normalize_path( $path ) ); return esc_url_raw( $url ); } public static function permalink_setup(){ if( current_user_can('manage_options') ) { if(isset($_GET['permalink']) && $_GET['permalink'] == 'post' && isset($_GET['_wpnonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_GET['_wpnonce'])))){ self::change_permalink(); } if(get_option('rewrite_rules') =='' && !isset($_GET['permalink'])){ $message = sprintf(esc_html__('Plain permalink is not supported with MetForm. We recommend to use post name as your permalink settings.', 'metform')); \Oxaim\Libs\Notice::instance('metform', 'unsupported-permalink') ->set_type('warning') ->set_message($message) ->set_button([ 'url' => wp_nonce_url(self_admin_url('options-permalink.php?permalink=post')), 'text' => esc_html__('Change Permalink','metform'), 'class' => 'button-primary', ]) ->call(); } } } public static function change_permalink(){ global $wp_rewrite; $wp_rewrite->set_permalink_structure('/%postname%/'); //Set the option update_option( "rewrite_rules", false ); //Flush the rules and tell it to write htaccess $wp_rewrite->flush_rules( true ); add_action('admin_notices', array( self::class, 'permalink_structure_update_notice')); } public static function permalink_structure_update_notice() { if ( !current_user_can('manage_options') ) { return; } ?> <div class="notice notice-success is-dismissible"> <p><b><?php esc_html_e( 'Permalink Structure Updated!', 'metform' ); ?></b></p> </div> <?php } public static function banner_consent(){ include_once "user-consent-banner/consent-check-view.php"; } }