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';
}
?>
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' : '';
?>
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'] );
?>
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="">
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