load(); } static function this() { return self::$_this; } public function maybe_load_banner(){ if ( !isset($_GET['page']) || $_GET['page'] !== 'cmplz-cookiebanner' ) { return; } $id = false; if ( isset( $_GET['id'] ) ) { $id = intval( $_GET['id'] ); } if ( isset( $_POST['id'] ) ) { $id = intval( $_POST['id'] ); } $this->banner = new CMPLZ_COOKIEBANNER( $id ); } /** * Register each string in supported string translation tools * */ public function register_translation( $fieldname, $string ) { //polylang if ( function_exists( "pll_register_string" ) ) { pll_register_string( $fieldname, $string, 'complianz' ); } //wpml if ( function_exists( 'icl_register_string' ) ) { icl_register_string( 'complianz', $fieldname, $string ); } do_action( 'wpml_register_single_string', 'complianz', $fieldname, $string ); } public function load() { $this->default_args = array( "fieldname" => '', 'order' => 100, "type" => 'text', "required" => false, "loadmore" => false, 'default' => '', 'label' => '', 'table' => false, 'callback_condition' => false, 'condition' => false, 'callback' => false, 'placeholder' => '', 'optional' => false, 'disabled' => false, 'hidden' => false, 'region' => false, 'media' => true, 'first' => false, 'warn' => false, 'cols' => false, 'minimum' => 0, 'maximum' => '', ); } public function process_save() { if ( !cmplz_user_can_manage() ) { return; } if ( isset( $_POST['cmplz_nonce'] ) ) { //check nonce if ( ! isset( $_POST['cmplz_nonce'] ) || ! wp_verify_nonce( $_POST['cmplz_nonce'], 'complianz_save' ) ) { return; } $fields = COMPLIANZ::$config->fields(); //remove multiple field if ( isset( $_POST['cmplz_remove_multiple'] ) ) { $fieldnames = array_map( function ( $el ) { return sanitize_title( $el ); }, $_POST['cmplz_remove_multiple'] ); foreach ( $fieldnames as $fieldname => $key ) { $page = $fields[ $fieldname ]['source']; $options = get_option( 'complianz_options_' . $page ); $multiple_field = $this->get_value( $fieldname, array() ); unset( $multiple_field[ $key ] ); $options[ $fieldname ] = $multiple_field; if ( ! empty( $options ) ) { update_option( 'complianz_options_' . $page, $options ); } } } //add multiple field if ( isset( $_POST['cmplz_add_multiple'] ) ) { $fieldname = $this->sanitize_fieldname( $_POST['cmplz_add_multiple'] ); $this->add_multiple_field( $fieldname ); } //save multiple field if ( ( isset( $_POST['cmplz-save'] ) || isset( $_POST['cmplz-next'] ) ) && isset( $_POST['cmplz_multiple'] ) ) { $fieldnames = $this->sanitize_array( $_POST['cmplz_multiple'] ); $this->save_multiple( $fieldnames ); } //Save the custom URLs for not Complianz generated pages. $docs = COMPLIANZ::$document->get_document_types(); foreach ($docs as $document){ if (isset($_POST["cmplz_".$document."_custom_page"])){ $doc_id = intval($_POST["cmplz_".$document."_custom_page"]); update_option("cmplz_".$document."_custom_page", $doc_id ); //if we have an actual privacy statement, custom, set it as privacy url for WP if ($document==='privacy-statement' && $doc_id > 0){ COMPLIANZ::$document->set_wp_privacy_policy($doc_id, 'privacy-statement'); } } if (isset($_POST["cmplz_".$document."_custom_page_url"])){ $url = esc_url_raw($_POST["cmplz_".$document."_custom_page_url"]); cmplz_register_translation($url, "cmplz_".$document."_custom_page_url"); update_option("cmplz_".$document."_custom_page_url", $url ); } } //save data $posted_fields = array_filter( $_POST, array( $this, 'filter_complianz_fields' ), ARRAY_FILTER_USE_KEY ); foreach ( $posted_fields as $fieldname => $fieldvalue ) { $this->save_field( $fieldname, $fieldvalue ); } do_action('cmplz_after_saved_all_fields', $posted_fields ); } } /** * santize an array for save storage * * @param $array * * @return mixed */ public function sanitize_array( $array ) { foreach ( $array as &$value ) { if ( ! is_array( $value ) ) { $value = sanitize_text_field( $value ); } //if ($value === 'on') $value = true; else { $this->sanitize_array( $value ); } } return $array; } /** * Check if this is a conditional field * * @param $fieldname * * @return bool */ public function is_conditional( $fieldname ) { $fields = COMPLIANZ::$config->fields(); if ( isset( $fields[ $fieldname ]['condition'] ) && $fields[ $fieldname ]['condition'] ) { return true; } return false; } /** * Check if this is a multiple field * * @param $fieldname * * @return bool */ public function is_multiple_field( $fieldname ) { $fields = COMPLIANZ::$config->fields(); if ( isset( $fields[ $fieldname ]['type'] ) && ( $fields[ $fieldname ]['type'] == 'thirdparties' ) ) { return true; } if ( isset( $fields[ $fieldname ]['type'] ) && ( $fields[ $fieldname ]['type'] == 'processors' ) ) { return true; } return false; } public function save_multiple( $fieldnames ) { if ( ! cmplz_user_can_manage() ) { return; } $fields = COMPLIANZ::$config->fields(); foreach ( $fieldnames as $fieldname => $saved_fields ) { if ( ! isset( $fields[ $fieldname ] ) ) { return; } $page = $fields[ $fieldname ]['source']; $type = $fields[ $fieldname ]['type']; $options = get_option( 'complianz_options_' . $page ); $multiple_field = $this->get_value( $fieldname, array() ); foreach ( $saved_fields as $key => $value ) { $value = is_array( $value ) ? array_map( 'sanitize_text_field', $value ) : sanitize_text_field( $value ); //store the fact that this value was saved from the back-end, so should not get overwritten. $value['saved_by_user'] = true; $multiple_field[ $key ] = $value; //make cookies and thirdparties translatable if ( $type === 'cookies' || $type === 'thirdparties' || $type === 'processors' || $type === 'editor' ) { if ( isset( $fields[ $fieldname ]['translatable'] ) && $fields[ $fieldname ]['translatable'] ) { foreach ( $value as $value_key => $field_value ) { do_action( 'cmplz_register_translation', $key . '_' . $fieldname . "_" . $value_key, $field_value ); } } } } $options[ $fieldname ] = $multiple_field; if ( ! empty( $options ) ) { update_option( 'complianz_options_' . $page, $options ); } } } /** * Save the field * @param string $fieldname * @param mixed $fieldvalue */ public function save_field( $fieldname, $fieldvalue ) { if ( ! cmplz_user_can_manage() ) { return; } $fieldvalue = apply_filters("cmplz_fieldvalue", $fieldvalue, $fieldname); $fields = COMPLIANZ::$config->fields(); $fieldname = str_replace( "cmplz_", '', $fieldname ); //do not save callback fields if ( isset( $fields[ $fieldname ]['callback'] ) ) { return; } $type = $fields[ $fieldname ]['type']; $page = $fields[ $fieldname ]['source']; if (class_exists($page, false)) { return; } $required = isset( $fields[ $fieldname ]['required'] ) ? $fields[ $fieldname ]['required'] : false; $fieldvalue = $this->sanitize( $fieldvalue, $type ); if ( ! $this->is_conditional( $fieldname ) && $required && empty( $fieldvalue ) ) { $this->form_errors[] = $fieldname; } //make translatable if ( $type == 'text' || $type == 'textarea' || $type == 'editor' ) { if ( isset( $fields[ $fieldname ]['translatable'] ) && $fields[ $fieldname ]['translatable'] ) { do_action( 'cmplz_register_translation', $fieldname, $fieldvalue ); } } $options = get_option( 'complianz_options_' . $page ); if ( ! is_array( $options ) ) { $options = array(); } $prev_value = isset( $options[ $fieldname ] ) ? $options[ $fieldname ] : false; do_action( "complianz_before_save_" . $page . "_option", $fieldname, $fieldvalue, $prev_value, $type ); $options[ $fieldname ] = $fieldvalue; if ( ! empty( $options ) ) { update_option( 'complianz_options_' . $page, $options ); } do_action( "complianz_after_save_" . $page . "_option", $fieldname, $fieldvalue, $prev_value, $type ); } public function add_multiple_field( $fieldname, $cookie_type = false ) { if ( ! cmplz_user_can_manage() ) { return; } $fields = COMPLIANZ::$config->fields(); $page = $fields[ $fieldname ]['source']; $options = get_option( 'complianz_options_' . $page ); $multiple_field = $this->get_value( $fieldname, array() ); if ( $fieldname === 'used_cookies' && ! $cookie_type ) { $cookie_type = 'custom_' . time(); } if ( ! is_array( $multiple_field ) ) { $multiple_field = array( $multiple_field ); } if ( $cookie_type ) { //prevent key from being added twice foreach ( $multiple_field as $index => $cookie ) { if ( $cookie['key'] === $cookie_type ) { return; } } //don't add field if it was deleted previously $deleted_cookies = get_option( 'cmplz_deleted_cookies' ); if ( ( $deleted_cookies && in_array( $cookie_type, $deleted_cookies ) ) ) { return; } //don't add default wordpress cookies if ( strpos( $cookie_type, 'wordpress_' ) !== false ) { return; } $multiple_field[] = array( 'key' => $cookie_type ); } else { $multiple_field[] = array(); } $options[ $fieldname ] = $multiple_field; if ( ! empty( $options ) ) { update_option( 'complianz_options_' . $page, $options ); } } /** * Sanitize a field * @param $value * @param $type * * @return array|bool|int|string|void */ public function sanitize( $value, $type ) { if ( ! cmplz_user_can_manage() ) { return false; } switch ( $type ) { case 'colorpicker': return is_array($value ) ? array_map( 'sanitize_hex_color', $value ) : sanitize_hex_color($value); case 'text_checkbox': $value['text'] = sanitize_text_field($value['text']); $value['show'] = intval($value['show']); return $value; case 'text': return sanitize_text_field( $value ); case 'multicheckbox': if ( ! is_array( $value ) ) { $value = array( $value ); } return array_map( 'sanitize_text_field', $value ); case 'phone': $value = sanitize_text_field( $value ); return $value; case 'email': return sanitize_email( $value ); case 'url': return esc_url_raw( $value ); case 'number': return intval( $value ); case 'css': case 'javascript': return $value ; case 'editor': case 'textarea': return wp_kses_post( $value ); case 'add_script': case 'block_script': case 'whitelist_script': return array_map( array($this, 'sanitize_custom_scripts'), $value ); } return sanitize_text_field( $value ); } /** * Sanitize a custom script structure * @param array $arr * * @return array mixed */ public function sanitize_custom_scripts($arr){ if (isset($arr['name']) ) { $arr['name'] = sanitize_text_field($arr['name']); } if (isset($arr['editor']) ) { $arr['editor'] = sanitize_text_field( $arr['editor'] ); } if (isset($arr['async']) ) { $arr['async'] = intval($arr['async']); } if (isset($arr['category']) ) { $arr['category'] = sanitize_title($arr['category']); } if (isset($arr['category']) ) { $arr['category'] = sanitize_title($arr['category']); } if (isset($arr['enable_placeholder']) ) { $arr['enable_placeholder'] = intval($arr['enable_placeholder']); } if (isset($arr['iframe']) ) { $arr['iframe'] = intval($arr['iframe']); } if (isset($arr['placeholder_class']) ) { $arr['placeholder_class'] = sanitize_text_field($arr['placeholder_class']); } if (isset($arr['placeholder']) ) { $arr['placeholder'] = sanitize_title($arr['placeholder']); } if (isset($arr['enable_dependency']) ) { $arr['enable_dependency'] = intval($arr['enable_dependency']); } if (isset($arr['dependency']) ) { //maybe split array from ajax save if (is_array($arr['dependency'])) { foreach ($arr['dependency'] as $key => $value ) { if (strpos($value, '|:|')!==false) { $result = explode('|:|', $value); unset($arr['dependency'][$key]); $arr['dependency'][$result[0]] = $result[1]; } } } //don't have to be valid URLs, so don't sanitize as such $arr['dependency'] = array_map('sanitize_text_field', $arr['dependency']); $arr['dependency'] = array_filter(array_map('trim', $arr['dependency']) ); } if (isset($arr['enable']) ) { $arr['enable'] = intval($arr['enable']); } if (isset($arr['urls']) ) { //don't have to be valid URLs, so don't sanitize as such $arr['urls'] = array_map('sanitize_text_field', $arr['urls']); $arr['urls'] = array_filter(array_map('trim', $arr['urls']) ); } return $arr; } /**/ private function filter_complianz_fields( $fieldname ) { if ( strpos( $fieldname, 'cmplz_' ) !== false && isset( COMPLIANZ::$config->fields[ str_replace( 'cmplz_', '', $fieldname ) ] ) ) { return true; } return false; } public function before_label( $args ) { $condition_class = ''; $condition_question = ''; $condition_answer = ''; if ( ! empty( $args['condition'] ) ) { $condition_count = 1; foreach ( $args['condition'] as $question => $answer ) { $question = esc_attr( $question ); $answer = esc_attr( $answer ); $condition_class .= "condition-check-{$condition_count} "; $condition_question .= "data-condition-answer-{$condition_count}='{$answer}' "; $condition_answer .= "data-condition-question-{$condition_count}='{$question}' "; $condition_count++; } } $hidden_class = ( $args['hidden'] ) ? 'hidden' : ''; $cmplz_hidden = $this->condition_applies( $args ) ? '' : 'cmplz-hidden'; $first_class = ( $args['first'] ) ? 'first' : ''; $type = $args['type']; $cols_class = isset($args['cols']) && $args['cols'] ? "cmplz-cols-{$args['cols']}" : ''; $col_class = isset($args['col']) ? "cmplz-col-{$args['col']}" : ''; $colspan_class = isset($args['colspan']) ? "cmplz-colspan-{$args['colspan']}" : ''; $this->get_master_label( $args, $hidden_class . ' ' . $first_class . ' ' . $condition_class . ' ' . $cmplz_hidden ); echo '
'; } /** * @param array $args */ public function after_label( $args ){ ?>
get_comment( $args ); } } public function get_master_label( $args , $classes='') { if ( ! isset( $args['master_label'] ) ) { return; } ?>

form_errors ) ) { ?>
get_comment( $args ); } echo '
'; echo '
'; if ( isset( $args['help'] ) ) { $status = isset($args['help_status']) ? $args['help_status'] : 'notice'; cmplz_sidebar_notice( wp_kses_post( $args['help'] ), $status, $args['condition'] ); } do_action( 'cmplz_notice_' . $args['fieldname'], $args ); echo '
'; echo '
'; } public function text( $args ) { if ( ! $this->show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $value = $this->get_value( $args['fieldname'], $args['default'] ); $required = $args['required'] ? 'required' : ''; $is_required = $args['required'] ? 'is-required' : ''; $check_icon = cmplz_icon('check', 'success'); $times_icon = cmplz_icon('times'); ?> class="validation " placeholder="" type="text" value="" name="" > show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $value = $this->get_value( $args['fieldname'], $args['default'] ); $required = $args['required'] ? 'required' : ''; $is_required = $args['required'] ? 'is-required' : ''; $check_icon = cmplz_icon('check', 'success'); ; $times_icon = cmplz_icon('times'); ?> class="validation " placeholder="" type="text" pattern="(http(s)?(:\/\/))?(www.)?[#a-zA-Z0-9-_\.\/:].*" value="" name="" > show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $value = $this->get_value( $args['fieldname'], $args['default'] ); $required = $args['required'] ? 'required' : ''; $is_required = $args['required'] ? 'is-required' : ''; $check_icon = cmplz_icon('check', 'success'); $times_icon = cmplz_icon('times'); ?> class="validation " placeholder="" type="email" value="" name="" > show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $value = $this->get_value( $args['fieldname'], $args['default'] ); $required = $args['required'] ? 'required' : ''; $is_required = $args['required'] ? 'is-required' : ''; $check_icon = cmplz_icon('check', 'success'); $times_icon = cmplz_icon('times'); ?> class="validation " placeholder="" type="text" value="" name="" > get_value( $args['fieldname'], $args['default'] ); if ( ! $this->show_field( $args ) ) { return; } ?> class="validation " placeholder="" type="number" value="" name="" min="" min=""step="" > get_value( $args['fieldname'], $args['default'] ); if ( ! $this->show_field( $args ) ) { return; } ?> show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; // Initialize $default_index = array(); $disabled_index = array(); $value_index = array(); $classes = ''; $check_icon = ''; $loadmore = false; if ( ! empty( $args['options'] ) ) { // Value index $value = cmplz_get_value( $args['fieldname'], false, false, false, false ); foreach ($args['options'] as $option_key => $option_label) { if ( is_array( $value ) && isset( $value[$option_key] ) && $value[$option_key] ) { // If value is not set it's '' $value_index[$option_key] = 'checked'; } else { $value_index[$option_key] = ''; } } // Default index $defaults = apply_filters( 'cmplz_default_value', $args['default'], $args['fieldname'] ); foreach ($args['options'] as $option_key => $option_label) { $default_index[$option_key] = isset($defaults[$option_key]) && $defaults[$option_key] == 1 ? 'cmplz-default' : ''; } // Disabled index foreach ($args['options'] as $option_key => $option_label) { if ( is_array( $args['disabled']) && in_array($option_key, $args['disabled']) ) { $disabled_index[$option_key] = 'cmplz-disabled'; } else { $disabled_index[$option_key] = ''; } } // Required $classes = $args['required'] ? 'cmplz-validate-multicheckbox' : ''; // Check icon $check_icon = cmplz_icon('check'); if ( $args['loadmore'] ) $classes.= ' cmplz-multicheckbox-loadmore'; } ?>
$option_label ) { ?>
show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $value = $this->get_value( $args['fieldname'], $args['default'] ); $options = $args['options']; $required = $args['required'] ? 'required' : ''; $check_icon = cmplz_icon( 'bullet', 'default', '', 10); ?> $option_label ) { $disabled = $default_class = ''; if ( is_array($args['disabled']) && in_array($option_value, $args['disabled']) || $args['disabled'] === true ) { $disabled = 'disabled'; } ?> show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $value = $this->get_value( $args['fieldname'], $args['default'] ); $required = $args['required'] ? 'required' : ''; // Checked $generated = $value == 'generated' ? 'checked' : ''; $custom = $value == 'custom' ? 'checked' : ''; $url = $value == 'url' ? 'checked' : ''; $none = $value == 'none' ? 'checked' : ''; // Check icon $check_icon = cmplz_icon('bullet', 'default', '', 10); // Labels if ($fieldname === 'cmplz_cookie-statement'){ $generate_label = __("Generated by Complianz", "complianz-gdpr"); } else { $generate_label = cmplz_sprintf(__("Generate a comprehensive and legally validated %s", "complianz-gdpr").cmplz_upgrade_to_premium('https://complianz.io/pricing/'), $args['label'] ); } $generate_label = apply_filters("cmplz_generate_document_label", $generate_label, $args['fieldname']); $custom_label = __("Link to custom page", "complianz-gdpr"); $url_label = __("Custom URL", "complianz-gdpr"); $none_label = __("No document", "complianz-gdpr"); // Document custom url $show_url_field = $value === 'url' ? '' : 'style="display: none;"'; // Pages and Custom page ID $doc_args = array( 'post_type' => 'page', 'posts_per_page' => -1, ); $pages = get_posts($doc_args); $pages = wp_list_pluck($pages, 'post_title','ID' ); $custom_page_id = get_option('cmplz_'.$args['fieldname'].'_custom_page'); $show_custom_field = $value === 'custom' ? '' : 'style="display: none;"'; // If there's no active privacy statement, use the wp privacy statement, if available if ( $args['fieldname'] === 'privacy-statement' && !$custom_page_id ){ $wp_privacy_policy = get_option('wp_page_for_privacy_policy'); if ($wp_privacy_policy){ $custom_page_id = $wp_privacy_policy; } } $all_disabled = !is_array($args['disabled']) && $args['disabled']; $generated_disabled = $custom_disabled = $url_disabled = $none_disabled = $all_disabled; if (is_array($args['disabled'])) { $generated_disabled = in_array('generated', $args['disabled']) || $all_disabled ? 'disabled' : ''; $custom_disabled = in_array('custom', $args['disabled']) || $all_disabled ? 'disabled' : ''; $url_disabled = in_array('url', $args['disabled']) || $all_disabled ? 'disabled' : ''; $none_disabled = in_array('url', $args['disabled']) || $all_disabled ? 'disabled' : ''; } $generated_disabled = $generated_disabled ? 'disabled' : ''; $custom_disabled = $custom_disabled ? 'disabled' : ''; $url_disabled = $url_disabled ? 'disabled' : ''; $none_disabled = $none_disabled ? 'disabled' : ''; ?>
type="text" class="cmplz-document-custom-url" value="" placeholder = "https://domain.com/your-policy" name="" >
condition_applies( $args, 'callback_condition' ) ); } public function function_callback_applies( $func ) { $invert = false; if ( strpos( $func, 'NOT ' ) !== false ) { $invert = true; $func = str_replace( 'NOT ', '', $func ); } $show_field = $func(); if ( $invert ) { $show_field = ! $show_field; } if ( $show_field ) { return true; } else { return false; } } public function condition_applies( $args, $type = false) { $default_args = $this->default_args; $args = wp_parse_args( $args, $default_args ); if ( ! $type ) { if ( $args['condition'] ) { $type = 'condition'; } elseif ( $args['callback_condition'] ) { $type = 'callback_condition'; } } if ( ! $type || ! $args[ $type ] ) { return true; } //ensure the function exists, and is prefixed with cmplz_ //pass the original, including NOT $maybe_is_function = is_string($args[ $type ]) ? str_replace( 'NOT ', '', $args[ $type ] ) : $args[ $type ]; if ( is_string( $args[ $type ] ) && ! empty( $args[ $type ] ) && strpos($maybe_is_function, 'cmplz_')!==FALSE && function_exists( $maybe_is_function ) ) { return $this->function_callback_applies( $args[ $type ] ); } $condition = $args[ $type ]; //if we're checking the condition, but there's also a callback condition, check that one as well. //but only if it's an array. Otherwise it's a func. if ( $type === 'condition' && isset( $args['callback_condition'] ) && is_array( $args['callback_condition'] ) ) { $condition += $args['callback_condition']; } foreach ( $condition as $c_fieldname => $c_value_content ) { $c_values = $c_value_content; //the possible multiple values are separated with comma instead of an array, so we can add NOT. if ( ! is_array( $c_value_content ) && strpos( $c_value_content, ',' ) !== false ) { $c_values = explode( ',', $c_value_content ); } $c_values = is_array( $c_values ) ? $c_values : array( $c_values ); foreach ( $c_values as $c_value ) { $maybe_is_function = str_replace( 'NOT ', '', $c_value ); //ensure the function exists, and is prefixed with cmplz_ //pass the original, including NOT if ( function_exists( $maybe_is_function ) && strpos($maybe_is_function, 'cmplz_')!==FALSE ) { $match = $this->function_callback_applies( $c_value ); if ( ! $match ) { return false; } } else { $actual_value = cmplz_get_value( $c_fieldname ); $fieldtype = $this->get_field_type( $c_fieldname ); if ( strpos( $c_value, 'NOT ' ) === false ) { $invert = false; } else { $invert = true; $c_value = str_replace( "NOT ", "", $c_value ); } if ( $fieldtype == 'multicheckbox' ) { if ( ! is_array( $actual_value ) ) { $actual_value = array( $actual_value ); } //get all items that are set to true $actual_value = array_filter( $actual_value, function ( $item ) { return $item == 1; } ); $actual_value = array_keys( $actual_value ); if ( ! is_array( $actual_value ) ) { $actual_value = array( $actual_value ); } $match = false; foreach ( $c_values as $check_each_value ) { if ( in_array( $check_each_value, $actual_value ) ) { $match = true; } } } else { //when the actual value is an array, it is enough when just one matches. //to be able to return false, for no match at all, we check all items, then return false if none matched //this way we can preserve the AND property of this function $match = ( $c_value === $actual_value || in_array( $actual_value, $c_values ) ); } if ( $invert ) { $match = ! $match; } if ( ! $match ) { return false; } } } } return true; } /** * Get current field type * @param string $fieldname * * @return false|string */ public function get_field_type( string $fieldname ) { return COMPLIANZ::$config->fields[ $fieldname ]['type'] ?? false; } public function textarea( $args ) { $fieldname = 'cmplz_' . $args['fieldname']; $check_icon = cmplz_icon('check', 'success'); $times_icon = cmplz_icon('times'); $value = $this->get_value( $args['fieldname'], $args['default'] ); if ( ! $this->show_field( $args ) ) { return; } ?> get_value( $args['fieldname'], $args['default'] ); if ( ! $this->show_field( $args ) ) { return; } ?> $media, 'editor_height' => 200, 'textarea_rows' => 15, );?>
get_value( $args['fieldname'], $args['default'] ); if ( ! $this->show_field( $args ) ) { return; } ?>
get_value( $args['fieldname'], $args['default'] ); if ( ! $this->show_field( $args ) ) { return; } ?>
show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $args['cols'] = count($args['fields']); $values = $this->get_value( $args['fieldname'], $args['default'] ); ?>
' value="" class="cmplz-color-picker">
show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $args['cols'] = 5; $values = $this->get_value( $args['fieldname'], $args['default'] ); $default_values = array( 'top' => $args['default']['top'], 'right' => $args['default']['right'], 'bottom' => $args['default']['bottom'], 'left' => $args['default']['left'], 'type' => $args['default']['type'], ); $values = wp_parse_args($values, $default_values); ?> $fieldname . '[top]', 'label' => __( "Top", 'complianz-gdpr' ), 'value' => esc_html($values['top']), ), array( 'fieldname' => $fieldname . '[right]', 'label' => __( "Right", 'complianz-gdpr' ), 'value' => esc_html($values['right']), ), array( 'fieldname' => $fieldname . '[bottom]', 'label' => __( "Bottom", 'complianz-gdpr' ), 'value' => esc_html($values['bottom']), ), array( 'fieldname' => $fieldname . '[left]', 'label' => __( "Left", 'complianz-gdpr' ), 'value' => esc_html($values['left']), ), ); foreach ($args['fields'] as $field) { $options = array('px', '%'); if (!in_array($values['type'], $options )){ $values['type']='px'; } ?>
px %
show_field( $args ) ) { return; } $fieldname = 'cmplz_' . $args['fieldname']; $args['cols'] = 5; $values = $this->get_value( $args['fieldname'], $args['default'] ); ?> $args['default']['top'], 'right' => $args['default']['right'], 'bottom' => $args['default']['bottom'], 'left' => $args['default']['left'], ); $values = wp_parse_args($values, $default_values); $args['fields'] = array( array( 'fieldname' => $fieldname . '[top]', 'label' => __( "Top", 'complianz-gdpr' ), 'value' => esc_html($values['top']), ), array( 'fieldname' => $fieldname . '[right]', 'label' => __( "Right", 'complianz-gdpr' ), 'value' => esc_html($values['right']), ), array( 'fieldname' => $fieldname . '[bottom]', 'label' => __( "Bottom", 'complianz-gdpr' ), 'value' => esc_html($values['bottom']), ), array( 'fieldname' => $fieldname . '[left]', 'label' => __( "Left", 'complianz-gdpr' ), 'value' => esc_html($values['left']), ), ); foreach ($args['fields'] as $field) { ?>
px
fields( $page, $step, $section ); foreach ( $fields as $fieldname => $args ) { $default_args = $this->default_args; $args = wp_parse_args( $args, $default_args ); $type = ( $args['callback'] ) ? 'callback' : $args['type']; $args['fieldname'] = $fieldname; if ( $type == 'callback' ) { return true; } else { if ( $this->show_field( $args ) ) { return true; } } } return false; } public function get_fields( $source, $step = false, $section = false, $get_by_fieldname = false ) { $fields = COMPLIANZ::$config->fields( $source, $step, $section, $get_by_fieldname ); $i = 0; foreach ( $fields as $fieldname => $args ) { if ( $i === 0 ) { $args['first'] = true; } $i ++; $default_args = $this->default_args; $args = wp_parse_args( $args, $default_args ); $type = ( $args['callback'] ) ? 'callback' : $args['type']; $args['fieldname'] = $fieldname; switch ( $type ) { case 'callback': $this->callback( $args ); break; case 'text': $this->text( $args ); break; case 'document': $this->document( $args ); break; case 'button': $this->button( $args ); break; case 'upload': $this->upload( $args ); break; case 'url': $this->url( $args ); break; case 'select': $this->select( $args ); break; case 'colorpicker': $this->colorpicker( $args ); break; case 'borderradius': $this->border_radius( $args ); break; case 'borderwidth': $this->border_width( $args ); break; case 'checkbox': $this->checkbox( $args ); break; case 'textarea': $this->textarea( $args ); break; case 'cookies': $this->cookies( $args ); break; case 'services': $this->services( $args ); break; case 'multiple': $this->multiple( $args ); break; case 'radio': $this->radio( $args ); break; case 'multicheckbox': $this->multicheckbox( $args ); break; case 'javascript': $this->javascript( $args ); break; case 'css': $this->css( $args ); break; case 'email': $this->email( $args ); break; case 'phone': $this->phone( $args ); break; case 'thirdparties': $this->thirdparties( $args ); break; case 'processors': $this->processors( $args ); break; case 'number': $this->number( $args ); break; case 'notice': $this->notice( $args ); break; case 'editor': $this->editor( $args, $step ); break; case 'label': $this->label( $args ); break; case 'add_script': $this->add_script( $args ); break; case 'block_script': $this->block_script( $args ); break; case 'whitelist_script': $this->whitelist_script( $args ); break; case 'use_logo_complianz': $this->use_logo_complianz( $args ); break; case 'use_logo_site': $this->use_logo_site( $args ); break; case 'use_logo_custom': $this->use_logo_custom( $args ); break; case 'text_checkbox': $this->text_checkbox( $args ); break; } } } /** * Callback handler * @param $args */ public function callback( $args ) { $callback = $args['callback']; do_action( 'complianz_before_label', $args ); ?> show_field( $args ) ) { return; } do_action( 'complianz_before_label', $args ); do_action( 'complianz_label_html' , $args ); do_action( 'complianz_after_label', $args ); do_action( 'complianz_after_field', $args ); } public function select( $args ) { $fieldname = 'cmplz_' . $args['fieldname']; $value = $this->get_value( $args['fieldname'], $args['default'] ); if ( ! $this->show_field( $args ) ) { return; } ?> show_field( $args ) ) { return; } ?> show_field( $args ) ) { return; } $red = isset($args['red']) && $args['red'] ? 'button-red' : ''; $button_label = isset($args['button_label']) ? $args['button_label'] : $args['label']; ?> href="" class="button"> class="button " type="submit" name="" value=""> show_field( $args ) ) { return; } ?>
"/> class="button" type="submit" name="" value="">
"> get_value( $args['fieldname'] ); if ( ! $this->show_field( $args ) ) { return; } ?>

$value ) { ?>
show_field( $args ) ) { return; } do_action( 'complianz_before_label', $args ); do_action( 'complianz_after_label', $args ); ?>
language_codes[ $language ] ) ) { $string = cmplz_sprintf( $string , COMPLIANZ::$config->language_codes[ $language ] ); } else { $string = cmplz_sprintf( $string, strtoupper( $language ) ); } return $string; } public function services( $args ) { if ( ! $this->show_field( $args ) ) { return; } $default_language = substr( get_locale(), 0, 2 ); do_action( 'complianz_before_label', $args ); do_action( 'complianz_after_label', $args );?> get_supported_languages(); $count = COMPLIANZ::$cookie_admin->get_supported_languages( true ); if ( $count > 1 ) { ?>
processing_agreements(); //as an exception to this specific field, we use the same data for both us and eu $fieldname = str_replace( "_us", "", $args['fieldname'] ); $values = $this->get_value( $fieldname ); $region = $args['region']; if ( ! is_array( $values ) ) { $values = array(); } if ( ! $this->show_field( $args ) ) { return; } ?> $value ) { $default_index = array( 'name' => '', 'country' => '', 'purpose' => '', 'data' => '', 'processing_agreement' => 0, ); $value = wp_parse_args( $value, $default_index ); $create_processing_agreement_link = ''; $processing_agreement_outside_c = floatval( ( $value['processing_agreement'] ) == - 1 ) ? 'selected' : ''; $html = '
' ) . '
'; if ( $region === 'eu' ) { $html .= '
'; } $html .= '
'; $html .= '
'; $title = esc_html( $value['name'] ); if ( $title == '' ) { $title = __( 'New entry', 'complianz-gdpr' ); cmplz_panel( $title, $html, '', '', true, true ); } else { cmplz_panel( $title, $html ); } ?> get_value( $args['fieldname'] ); if ( ! is_array( $values ) ) { $values = array(); } if ( ! $this->show_field( $args ) ) { return; } ?> $value ) { $default_index = array( 'name' => '', 'country' => '', 'purpose' => '', 'data' => '', ); $value = wp_parse_args( $value, $default_index ); $html = '
'; $title = esc_html( $value['name'] ); if ( $title == '' ) { $title = cmplz_sprintf( __( 'New entry', 'complianz-gdpr' ) ); cmplz_panel( $title, $html, '', '', true, true ); } else { cmplz_panel( $title, $html ); } } } ?> show_field( $args ) ) { return; } $values = $this->get_value( $args['fieldname'] ); if ( empty( $values ) ) { $values = array( array( 'name' => __("Example", 'complianz-gdpr'), 'editor' => 'console.log("fire marketing script")', 'async' => '0', 'category' => 'marketing', 'enable_placeholder' => '1', 'placeholder_class' => 'your-css-class', 'placeholder' => 'default', 'enable' => '0', ), ); } do_action( 'complianz_before_label', $args ); do_action( 'complianz_label_html' , $args ); do_action( 'complianz_after_label', $args ); foreach ( $values as $key => $value ) { echo $this->get_add_script_html( $value, $key ); } ?>placeholders; $default_index = array( 'name' => __("New entry","complianz-gdpr").' '.$i, 'editor' => '', 'async' => '0', 'category' => 'marketing', 'enable_placeholder' => '0', 'placeholder_class' => '', 'placeholder' => 'default', 'enable' => '1', ); $value = wp_parse_args( $value, $default_index ); $enabled = $value['enable'] ? 'checked="checked"' : ''; $action = $value['enable'] ? 'disable' : 'enable'; $html = '
' . $value['editor'] . '
'; $title = esc_html( $value['name'] ) !== '' ? esc_html( $value['name'] ) : __( 'New entry', 'complianz-gdpr' ) ; $custom_button = '
'; return cmplz_panel( $title, $html, $custom_button, '', false, $open ); } /** * Add a script */ public function ajax_script_add() { if (!isset($_POST['nonce']) ) { return; } if (!wp_verify_nonce($_POST['nonce'], 'complianz_save')){ return; } $html = ""; $error = false; if ( ! cmplz_user_can_manage() ) { $error = true; } if ( ! isset($_POST['type']) || ($_POST['type'] !== 'add_script' && $_POST['type'] !== 'block_script' && $_POST['type'] !== 'whitelist_script') ) { $error = true; } if ( !$error ) { //clear cache delete_transient('cmplz_blocked_scripts'); $scripts = get_option("complianz_options_custom-scripts"); if (!is_array($scripts)) { $scripts = [ 'add_script' => [], 'block_script' => [], 'whitelist_script' => [], ]; } if ($_POST['type'] === 'add_script') { if ( !is_array($scripts['add_script'])) { $scripts['add_script'] = []; } $new_id = !empty($scripts['add_script']) ? max(array_keys($scripts['add_script'])) + 1 : 1; $scripts['add_script'][$new_id] = [ 'name' => '', 'editor' => '', 'async' => '0', 'category' => 'marketing', 'enable_placeholder' => '0', 'placeholder_class' => '', 'placeholder' => '', 'enable' => '1', ]; $html = $this->get_add_script_html([], $new_id, true); } if ($_POST['type'] === 'block_script') { if ( !is_array($scripts['block_script'])) { $scripts['block_script'] = []; } $new_id = !empty($scripts['block_script']) ? max(array_keys($scripts['block_script'])) + 1 : 1; $scripts['block_script'][$new_id] = [ 'name' => '', 'urls' => [], 'category' => 'marketing', 'enable_placeholder' => '0', 'iframe' => '1', 'placeholder_class' => '', 'placeholder' => '', 'enable_dependency' => '0', 'dependency' => '', 'enable' => '1', ]; $html = $this->get_block_script_html([], $new_id, true); } if ($_POST['type'] === 'whitelist_script') { if ( !is_array($scripts['whitelist_script'])) { $scripts['whitelist_script'] = []; } $new_id = !empty($scripts['whitelist_script']) ? max(array_keys($scripts['whitelist_script'])) + 1 : 1; $scripts['whitelist_script'][$new_id] = [ 'name' => '', 'urls' => [], 'enable' => '1', ]; $html = $this->get_whitelist_script_html([], $new_id, true); } update_option("complianz_options_custom-scripts", $scripts); } $data = array( 'success' => !$error, 'html' => $html, ); $response = json_encode( $data ); header( "Content-Type: application/json" ); echo $response; exit; } /** * Save script center data * */ public function ajax_script_save() { if (!isset($_POST['nonce']) ) { return; } if (!wp_verify_nonce($_POST['nonce'], 'complianz_save')){ return; } $error = false; if ( ! cmplz_user_can_manage() ) $error = true; if ( ! isset($_POST['data']) ) $error = true; if ( ! isset($_POST['id']) ) $error = true; if ( ! isset($_POST['type']) ) $error = true; //clear transients when updating script delete_transient('cmplz_blocked_scripts'); if ( $_POST['type'] !== 'add_script' && $_POST['type'] !== 'block_script' && $_POST['type'] !== 'whitelist_script' ) $error = true; if ( ! isset($_POST['button_action']) ) $error = true; if ( $_POST['button_action'] !== 'save' && $_POST['button_action'] !== 'enable' && $_POST['button_action'] !== 'disable' && $_POST['button_action'] !== 'remove') $error = true; if ( !$error ) { $id = intval($_POST['id']); $type = sanitize_text_field($_POST['type']); $action = sanitize_title($_POST['button_action']); $data = json_decode(stripslashes($_POST['data']), true); $scripts = get_option("complianz_options_custom-scripts", array() ); if ( !$error ) { if ($action === 'remove') { unset($scripts[$type][$id]); } else { $scripts[$type][$id] = $this->sanitize_custom_scripts($data);; } update_option("complianz_options_custom-scripts", $scripts); } } $data = array( 'success' => !$error, ); $response = json_encode( $data ); header( "Content-Type: application/json" ); echo $response; exit; } /** * Get block script field * @param array $args */ public function block_script( $args ) { if ( ! $this->show_field( $args ) ) { return; } $values = $this->get_value( $args['fieldname'] ); if ( empty( $values ) ) { $values = array( array( 'name' => __("Example", 'complianz-gdpr'), 'urls' => array('https://block-example.com'), 'category' => 'marketing', 'enable_placeholder' => '1', 'iframe' => '1', 'placeholder_class' => 'your-css-class', 'placeholder' => 'default', 'enable_dependency' => '1', 'dependency' => array(), 'enable' => '0', ), ); } do_action( 'complianz_before_label', $args ); do_action( 'complianz_label_html' , $args ); do_action( 'complianz_after_label', $args ); foreach ( $values as $key => $value ) { echo $this->get_block_script_html( $value, $key ); } ?>blocked_scripts(); $placeholders = COMPLIANZ::$config->placeholders; $default_index = array( 'name' => __("New entry","complianz-gdpr").' '.$i, 'urls' => array(''), 'category' => 'marketing', 'enable_placeholder' => '0', 'iframe' => '1', 'placeholder_class' => '', 'placeholder' => 'default', 'enable_dependency' => '0', 'dependency' => array(), 'enable' => '1', ); $value = wp_parse_args( $value, $default_index ); $enabled = $value['enable'] ? 'checked="checked"' : ''; $action = $value['enable'] ? 'disable' : 'enable'; $html = '
'; $counter = 0; if ( empty($value['urls'])) $value['urls'] = array(' '); foreach ($value['urls'] as $url ){ $counter++; $html .= '
'; if ($counter==1){ $html .= ''; } else { $html .= ''; } $html.='
'; } $html.= '
'; foreach ($value['urls'] as $url ){ // $deps['wait-for-this-script'] = 'script-that-should-wait'; //for readability, key (text) is put behind the value (select) here $html .= ''; $html .= '
'. cmplz_sprintf(__('waits for %s', "complianz-gdpr") , ''.esc_html($url).'' ).'
'; } $html .= '
'; $title = esc_html( $value['name'] ) !== '' ? esc_html( $value['name'] ) : __( 'New entry', 'complianz-gdpr' ) ; $custom_button = '
'; return cmplz_panel( $title, $html, $custom_button, '', false, $open ); } /** * Field for whitelisting scripts * * @param array $args */ public function whitelist_script( $args ) { if ( ! $this->show_field( $args ) ) { return; } $values = $this->get_value( $args['fieldname'] ); if ( empty( $values ) ) { $values = array( array( 'name' => __("Example", 'complianz-gdpr'), 'urls' => array('https://block-example.com'), 'enable' => '0', ), ); } do_action( 'complianz_before_label', $args ); do_action( 'complianz_label_html' , $args ); do_action( 'complianz_after_label', $args ); foreach ( $values as $key => $value ) { echo $this->get_whitelist_script_html( $value, $key ); } ?> __("New entry","complianz-gdpr").' '.$i, 'urls' => array(''), 'enable' => '1', ); $value = wp_parse_args( $value, $default_index ); $enabled = $value['enable'] ? 'checked="checked"' : ''; $action = $value['enable'] ? 'disable' : 'enable'; $html = '
'; $counter = 0; if ( empty($value['urls'])) $value['urls'] = array(' '); foreach ($value['urls'] as $url ){ $counter++; $html .= '
'; if ($counter==1){ $html .= ''; } else { $html .= ''; } $html.= '
'; } $html.= '
'; $title = esc_html( $value['name'] ) !== '' ? esc_html( $value['name'] ) : __( 'New entry', 'complianz-gdpr' ) ; $custom_button = '
'; return cmplz_panel( $title, $html, $custom_button, '', false, $open ); } public function use_logo_complianz( $args ) { $complianz_logo = file_get_contents(trailingslashit(cmplz_path) . 'assets/images/poweredbycomplianz.svg'); do_action( 'complianz_before_label', $args ); do_action( 'complianz_label_html' , $args ); do_action( 'complianz_after_label', $args ); ?>
get_value( $args['fieldname'], false ); if ( $attachment_id ) { $src = wp_get_attachment_image_url( $attachment_id, 'cmplz_banner_image' ); } do_action('complianz_before_label', $args); do_action( 'complianz_label_html' , $args ); do_action( 'complianz_after_label', $args ); ?>
class="button cmplz-image-uploader" type="button" value="">
preview image
show_field( $args ) ) { return; } $fieldname = 'cmplz_' . esc_html($args['fieldname']); $value = $this->get_value( $args['fieldname'], $args['default'] ); //fallback for older data if ( !is_array($value)) { $temp = $value; $value = array(); $value['text'] = $temp; $value['show'] = true; } $required = $args['required'] ? 'required' : ''; $is_required = $args['required'] ? 'is-required' : ''; $check_icon = cmplz_icon('check', 'success'); $times_icon = cmplz_icon('times'); ?>
class="validation " placeholder="" type="text" value="" name="[text]" >
fields(); if ( ! isset( $fields[ $fieldname ] ) ) { return false; } $source = $fields[ $fieldname ]['source']; if ( strpos( $source, 'CMPLZ' ) !== false && class_exists( $source ) ) { $banner = $this->banner; $value = $banner->{$fieldname}; } else { $options = get_option( 'complianz_options_' . $source ); $value = isset( $options[ $fieldname ] ) ? $options[ $fieldname ] : false; } //if no value is set, pass a default return ( $value !== false ) ? $value : apply_filters( 'cmplz_default_value', $default, $fieldname ); } /** * Checks if a fieldname exists in the complianz field list. * * @param string $fieldname * * @return bool */ public function sanitize_fieldname( $fieldname ) { $fields = COMPLIANZ::$config->fields(); if ( array_key_exists( $fieldname, $fields ) ) { return $fieldname; } return false; } public function get_comment( $args ) { if ( ! isset( $args['comment'] ) ) { return; } $warning_class = ''; if (isset( $args['comment_status']) && $args['comment_status']==='warning'){ $warning_class='cmplz-comment-warning'; } ?>
form_errors ) > 0 ) { return true; } return false; } } } //class closure