3309 lines
117 KiB
PHP
3309 lines
117 KiB
PHP
<?php
|
|
/*100% match*/
|
|
|
|
defined( 'ABSPATH' ) or die( "you do not have access to this page!" );
|
|
|
|
if ( ! class_exists( "cmplz_field" ) ) {
|
|
class cmplz_field {
|
|
private static $_this;
|
|
public $position;
|
|
public $fields;
|
|
public $default_args;
|
|
public $banner;
|
|
public $form_errors = array();
|
|
|
|
function __construct() {
|
|
if ( isset( self::$_this ) ) {
|
|
wp_die( sprintf( '%s is a singleton class and you cannot create a second instance.',
|
|
get_class( $this ) ) );
|
|
}
|
|
|
|
self::$_this = $this;
|
|
//safe before the fields are loaded in config, in init
|
|
add_action( 'plugins_loaded', array( $this, 'process_save' ), 16 );
|
|
add_action( 'cmplz_register_translation', array( $this, 'register_translation' ), 10, 2 );
|
|
add_action( 'complianz_before_label', array( $this, 'before_label' ), 10, 1 );
|
|
add_action( 'complianz_before_label', array( $this, 'show_errors' ), 10, 1 );
|
|
add_action( 'complianz_after_label', array( $this, 'after_label' ), 10, 1 );
|
|
add_action( 'complianz_label_html', array( $this, 'label_html' ), 10, 1 );
|
|
add_action( 'complianz_after_field', array( $this, 'after_field' ), 10, 1 );
|
|
|
|
add_action( 'wp_ajax_cmplz_script_add', array( $this, 'ajax_script_add' ), 10, 1 );
|
|
add_action( 'wp_ajax_cmplz_script_save', array( $this, 'ajax_script_save' ), 10, 1 );
|
|
add_action( 'plugins_loaded', array($this, 'maybe_load_banner'));
|
|
$this->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 '<div class="field-group ' .
|
|
esc_attr( $cols_class ) . ' ' .
|
|
esc_attr( $col_class ) . ' ' .
|
|
esc_attr( $colspan_class ) . ' ' .
|
|
'cmplz-'. $type . ' ' .
|
|
$hidden_class . ' ' .
|
|
$first_class . ' ' .
|
|
$condition_class . ' ' .
|
|
$cmplz_hidden
|
|
. '" ';
|
|
|
|
echo $condition_question;
|
|
echo $condition_answer;
|
|
|
|
echo ' data-fieldname="'.$args['fieldname'].'"><div class="cmplz-field"><div class="cmplz-label">';
|
|
}
|
|
|
|
/**
|
|
* @param array $args
|
|
*/
|
|
public function after_label( $args ){
|
|
?>
|
|
</div>
|
|
|
|
<?php
|
|
if ( $args['type'] === 'button' ) {
|
|
$this->get_comment( $args );
|
|
}
|
|
}
|
|
|
|
public function get_master_label( $args , $classes='') {
|
|
if ( ! isset( $args['master_label'] ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<div class="cmplz-master-label field-group <?php echo $classes?> <?php echo $args['fieldname']?>">
|
|
<div><h2 class="h4"><?php echo esc_html( $args['master_label'] ) ?></h2></div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
public
|
|
function show_errors(
|
|
$args
|
|
) {
|
|
if ( in_array( $args['fieldname'], $this->form_errors ) ) {
|
|
?>
|
|
<div class="cmplz-form-errors">
|
|
<?php _e( "This field is required. Please complete the question before continuing",
|
|
'complianz-gdpr' ) ?>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
public function label_html( $args ) {
|
|
?>
|
|
<label class="<?php if ( $args['disabled'] ) {echo 'cmplz-disabled';} ?>" for="cmplz_<?php echo $args['fieldname'] ?>">
|
|
<div class="cmplz-title-wrap"><?php echo $args['label'] ?></div>
|
|
<div>
|
|
<?php
|
|
if ( isset($args['tooltip']) ) {
|
|
echo cmplz_icon('help', 'default', $args['tooltip']);
|
|
}
|
|
?>
|
|
</div>
|
|
|
|
</label>
|
|
<?php
|
|
}
|
|
|
|
public function after_field( $args ) {
|
|
|
|
if ( $args['type'] !== 'button' ) {
|
|
$this->get_comment( $args );
|
|
}
|
|
echo '</div><!--close after field-->';
|
|
echo '<div class="cmplz-help-warning-wrap">';
|
|
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 '</div>';
|
|
echo '</div>';
|
|
}
|
|
|
|
|
|
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');
|
|
?>
|
|
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
|
|
<input <?php echo $required ?>
|
|
class="validation <?php echo $is_required ?>"
|
|
placeholder="<?php echo esc_html( $args['placeholder'] ) ?>"
|
|
type="text"
|
|
value="<?php echo esc_html( $value ) ?>"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
>
|
|
<?php echo $check_icon ?>
|
|
<?php echo $times_icon ?>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
|
|
<?php
|
|
}
|
|
|
|
public function url( $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');
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<input <?php echo $required ?>
|
|
class="validation <?php echo $is_required ?>"
|
|
placeholder="<?php echo esc_html( $args['placeholder'] ) ?>"
|
|
type="text"
|
|
pattern="(http(s)?(:\/\/))?(www.)?[#a-zA-Z0-9-_\.\/:].*"
|
|
value="<?php echo esc_html( $value ) ?>"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
>
|
|
<?php echo $check_icon ?>
|
|
<?php echo $times_icon ?>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
|
|
<?php
|
|
}
|
|
|
|
public function email( $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');
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<input <?php echo $required ?>
|
|
class="validation <?php echo $is_required ?>"
|
|
placeholder="<?php echo esc_html( $args['placeholder'] ) ?>"
|
|
type="email"
|
|
value="<?php echo esc_html( $value ) ?>"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
>
|
|
<?php echo $check_icon ?>
|
|
<?php echo $times_icon ?>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
|
|
<?php
|
|
}
|
|
|
|
public function phone( $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');
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<input autocomplete="tel" <?php echo $required ?>
|
|
class="validation <?php echo $is_required ?>"
|
|
placeholder="<?php echo esc_html( $args['placeholder'] ) ?>"
|
|
type="text"
|
|
value="<?php echo esc_html( $value ) ?>"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
>
|
|
<?php echo $check_icon ?>
|
|
<?php echo $times_icon ?>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
|
|
<?php
|
|
}
|
|
|
|
public
|
|
function number(
|
|
$args
|
|
) {
|
|
$fieldname = 'cmplz_' . $args['fieldname'];
|
|
$value = $this->get_value( $args['fieldname'],
|
|
$args['default'] );
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<input <?php if ( $args['required'] ) {
|
|
echo 'required';
|
|
} ?>
|
|
class="validation <?php if ( $args['required'] ) {
|
|
echo 'is-required';
|
|
} ?>"
|
|
placeholder="<?php echo esc_html( $args['placeholder'] ) ?>"
|
|
type="number"
|
|
value="<?php echo esc_html( $value ) ?>"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
min="<?php echo esc_attr($args['minimum'])?>" min="<?php echo esc_attr($args['maximum'])?>"step="<?php echo isset($args["validation_step"]) ? intval($args["validation_step"]) : 1?>"
|
|
>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
|
|
public
|
|
function checkbox(
|
|
$args, $force_value = false
|
|
) {
|
|
$fieldname = 'cmplz_' . $args['fieldname'];
|
|
$value = $force_value ?: $this->get_value( $args['fieldname'], $args['default'] );
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<label tabindex="0" class="cmplz-switch">
|
|
<?php
|
|
//we set the hidden input to the actual value if the field is disabled. This ensures that a disabled field value is persistent on save.
|
|
$hidden_value = 0;
|
|
if ( $args['disabled'] ) {
|
|
$hidden_value = $value;
|
|
}
|
|
?>
|
|
<input tabindex="-1" name="<?php echo esc_html( $fieldname ) ?>" type="hidden" value="<?php echo $hidden_value?>" aria-checked="false"/>
|
|
<input tabindex="-1" name="<?php echo esc_html( $fieldname ) ?>" size="40" type="checkbox" aria-checked="<?php echo esc_attr($value)?>"
|
|
<?php if ( $args['disabled'] ) {
|
|
echo 'disabled';
|
|
} ?>
|
|
class="<?php if ( $args['required'] ) {
|
|
echo 'is-required';
|
|
} ?>"
|
|
value="1" <?php checked( 1, $value, true ) ?> />
|
|
<span class="cmplz-slider cmplz-round"></span>
|
|
</label>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
public function multicheckbox( $args )
|
|
{
|
|
if ( ! $this->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';
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<div class="<?php echo $classes ?>" data-cmplz_loadmore_count="<?php echo $args['loadmore']?>">
|
|
<?php if ( ! empty( $args['options'] ) ) {
|
|
foreach ( $args['options'] as $option_key => $option_label )
|
|
{ ?>
|
|
<label tabindex="0" role="button" aria-pressed="false" class="cmplz-checkbox-container <?php echo esc_html($disabled_index[$option_key]) ?>"><?php echo esc_html( $option_label ) ?>
|
|
<input
|
|
name="<?php echo esc_html( $fieldname ) ?>[<?php echo esc_html($option_key) ?>]"
|
|
type="hidden"
|
|
value="0"
|
|
tabindex="-1"
|
|
>
|
|
<input
|
|
name="<?php echo esc_html( $fieldname ) ?>[<?php echo esc_html($option_key) ?>]"
|
|
class="<?php echo esc_html( $fieldname ) ?>[<?php echo esc_html($option_key) ?>]"
|
|
type="checkbox"
|
|
value="1"
|
|
tabindex="-1"
|
|
<?php echo esc_html($value_index[$option_key]) ?>
|
|
>
|
|
<div
|
|
class="checkmark <?php echo esc_html($default_index[$option_key]) ?>"
|
|
<?php echo esc_html($value_index[$option_key]) ?>
|
|
><?php echo $check_icon ?></div>
|
|
</label>
|
|
<?php
|
|
}
|
|
} else {
|
|
cmplz_notice( __( 'No options found', 'complianz-gdpr' ) );
|
|
} ?>
|
|
<?php if ( $args['loadmore'] ) { ?>
|
|
<button class="button cmplz_load_more"><span class="cmplz-load-more"><?php _e("More options", "complianz-gdpr")?></span><span class="cmplz-load-less"><?php _e("Less options", "complianz-gdpr")?></span></button>
|
|
<?php }?>
|
|
</div>
|
|
|
|
<?php do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
public function radio( $args )
|
|
{
|
|
if ( ! $this->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);
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<?php
|
|
if ( ! empty( $options ) ) {
|
|
foreach ( $options as $option_value => $option_label )
|
|
{
|
|
$disabled = $default_class = '';
|
|
if ( is_array($args['disabled']) && in_array($option_value, $args['disabled']) || $args['disabled'] === true ) {
|
|
$disabled = 'disabled';
|
|
}
|
|
?>
|
|
<label tabindex="0" role="button" aria-pressed="false" class="cmplz-radio-container <?php echo $disabled ?>"><?php echo $option_label ?>
|
|
<input tabindex="-1"
|
|
<?php echo $required ?>
|
|
type="radio"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
class="<?php echo esc_html( $fieldname ) ?>"
|
|
value="<?php echo esc_html( $option_value ) ?>"
|
|
<?php if ( $value == $option_value ) echo "checked" ?>
|
|
<?php echo $disabled?>
|
|
>
|
|
<div class="radiobtn <?php echo $disabled ?>"
|
|
<?php echo $required ?>
|
|
><?php echo $check_icon ?></div>
|
|
</label>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
public function document( $args )
|
|
{
|
|
if ( ! $this->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' : '';
|
|
?>
|
|
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args ); ?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<div class="cmplz-document-field" data-fieldname="<?php echo esc_html( $fieldname ) ?>">
|
|
<label tabindex="0" role="button" aria-pressed="false" class="cmplz-radio-container <?php echo $generated_disabled ?>"><?php echo $generate_label ?>
|
|
<input
|
|
<?php echo $generated_disabled ?>
|
|
<?php echo $required ?>
|
|
type="radio"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
value="generated"
|
|
<?php echo $generated ?>
|
|
class="cmplz-document-input"
|
|
tabindex="-1"
|
|
>
|
|
<div class="radiobtn <?php echo $generated_disabled ?>" <?php echo $required ?>><?php echo $check_icon ?></div>
|
|
</label>
|
|
|
|
<label tabindex="0" role="button" aria-pressed="false" class="cmplz-radio-container <?php echo $custom_disabled ?>"><?php echo $custom_label ?>
|
|
<input
|
|
<?php echo $custom_disabled ?>
|
|
<?php echo $required ?>
|
|
type="radio"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
value="custom"
|
|
<?php echo $custom ?>
|
|
class="cmplz-document-input"
|
|
tabindex="-1"
|
|
>
|
|
<div class="radiobtn <?php echo $custom_disabled ?>" <?php echo $custom_disabled ?> <?php echo $required ?>><?php echo $check_icon ?></div>
|
|
</label>
|
|
|
|
<label tabindex="0" role="button" aria-pressed="false" class="cmplz-radio-container <?php echo $url_disabled ?>"><?php echo $url_label ?>
|
|
<input
|
|
<?php echo $url_disabled ?>
|
|
<?php echo $required ?>
|
|
type="radio"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
value="url"
|
|
<?php echo $url ?>
|
|
class="cmplz-document-input"
|
|
tabindex="-1"
|
|
>
|
|
<div class="radiobtn <?php echo $url_disabled ?>" <?php echo $required ?>><?php echo $check_icon ?></div>
|
|
</label>
|
|
|
|
<?php if ( $args['fieldname'] !== 'cookie-statement' ){ ?>
|
|
<label tabindex="0" role="button" aria-pressed="false" class="cmplz-radio-container <?php echo $none_disabled ?>"><?php echo $none_label ?>
|
|
<input
|
|
<?php echo $none_disabled ?>
|
|
<?php echo $required ?>
|
|
type="radio"
|
|
name="<?php echo esc_html( $fieldname ) ?>"
|
|
value="none"
|
|
<?php echo $none ?>
|
|
class="cmplz-document-input"
|
|
tabindex="-1"
|
|
>
|
|
<div class="radiobtn <?php echo $none_disabled ?>" <?php echo $required ?>><?php echo $check_icon ?></div>
|
|
</label>
|
|
<?php } ?>
|
|
|
|
<input
|
|
<?php echo $url_disabled ?>
|
|
type="text"
|
|
class="cmplz-document-custom-url"
|
|
value="<?php echo get_option($fieldname."_custom_page_url")?>"
|
|
placeholder = "https://domain.com/your-policy"
|
|
name="<?php echo esc_html( $fieldname."_custom_page_url" ) ?>"
|
|
<?php echo $show_url_field ?>
|
|
>
|
|
|
|
<select
|
|
<?php echo $custom_disabled ?>
|
|
class="cmplz-document-custom-page"
|
|
name="<?php echo esc_html( $fieldname."_custom_page" ) ?>"
|
|
<?php echo $show_custom_field ?>>
|
|
<option value=""><?php _e("None selected", "complianz-gdpr")?></option>
|
|
<?php foreach ($pages as $ID => $page){
|
|
$selected = $ID==$custom_page_id ? "selected" : ""; ?>
|
|
<option value="<?php echo $ID ?>" <?php echo $selected ?>><?php echo wp_kses_post($page) ?></option>
|
|
<?php } ?>
|
|
</select>
|
|
|
|
</div>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Check if this field should be visible
|
|
* @param $args
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function show_field( $args ) {
|
|
return ( $this->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;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<textarea name="<?php echo esc_html( $fieldname ) ?>"
|
|
<?php if ( $args['required'] ) {
|
|
echo 'required';
|
|
} ?>
|
|
class="validation <?php if ( $args['required'] ) {
|
|
echo 'is-required';
|
|
} ?>"
|
|
placeholder="<?php echo esc_html( $args['placeholder'] ) ?>"><?php echo esc_html( $value ) ?></textarea>
|
|
|
|
<?php echo $check_icon ?>
|
|
<?php echo $times_icon ?>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Show field with editor
|
|
*
|
|
*
|
|
* */
|
|
|
|
public function editor( $args, $step = '' ) {
|
|
$fieldname = 'cmplz_' . $args['fieldname'];
|
|
$args['first'] = true;
|
|
$media = $args['media'] ? true : false;
|
|
|
|
$value = $this->get_value( $args['fieldname'], $args['default'] );
|
|
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<?php
|
|
$settings = array(
|
|
'media_buttons' => $media,
|
|
'editor_height' => 200,
|
|
'textarea_rows' => 15,
|
|
);?>
|
|
<div class="cmplz-editor-container" style="position:relative;">
|
|
<?php wp_editor( $value, $fieldname, $settings ); ?>
|
|
</div>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
public
|
|
function javascript(
|
|
$args
|
|
) {
|
|
$fieldname = 'cmplz_' . $args['fieldname'];
|
|
$value = $this->get_value( $args['fieldname'],
|
|
$args['default'] );
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<div id="<?php echo esc_html( $fieldname ) ?>editor"
|
|
style="height: 200px; width: 100%"><?php echo esc_html($value) ?></div>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<script>
|
|
window.define = ace.define;
|
|
window.require = ace.require;
|
|
var <?php echo esc_html( $fieldname )?> =
|
|
ace.edit("<?php echo esc_html( $fieldname )?>editor");
|
|
<?php echo esc_html( $fieldname )?>.setTheme("ace/theme/tomorrow_night_bright");
|
|
<?php echo esc_html( $fieldname )?>.session.setMode("ace/mode/javascript");
|
|
jQuery(document).ready(function ($) {
|
|
var textarea = $('textarea[name="<?php echo esc_html( $fieldname )?>"]');
|
|
<?php echo esc_html( $fieldname )?>.
|
|
getSession().on("change", function () {
|
|
textarea.val(<?php echo esc_html( $fieldname )?>.getSession().getValue()
|
|
)
|
|
});
|
|
});
|
|
</script>
|
|
<textarea style="display:none"
|
|
name="<?php echo esc_html( $fieldname ) ?>"><?php echo esc_html($value) ?></textarea>
|
|
<?php
|
|
}
|
|
|
|
public function css($args)
|
|
{
|
|
$fieldname = 'cmplz_' . $args['fieldname'];
|
|
|
|
$value = $this->get_value( $args['fieldname'], $args['default'] );
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<div id="<?php echo esc_html( $fieldname ) ?>editor"
|
|
style="height: 290px; width: 100%"><?php echo esc_html($value) ?></div>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<script>
|
|
window.define = ace.define;
|
|
window.require = ace.require;
|
|
var <?php echo esc_html( $fieldname )?> =
|
|
ace.edit("<?php echo esc_html( $fieldname )?>editor");
|
|
<?php echo esc_html( $fieldname )?>.setTheme("ace/theme/tomorrow_night_bright");
|
|
<?php echo esc_html( $fieldname )?>.session.setMode("ace/mode/css");
|
|
jQuery(document).ready(function ($) {
|
|
var textarea = $('textarea[name="<?php echo esc_html( $fieldname )?>"]');
|
|
<?php echo esc_html( $fieldname )?>.
|
|
getSession().on("change", function () {
|
|
textarea.val(<?php echo esc_html( $fieldname )?>.getSession().getValue()
|
|
)
|
|
});
|
|
});
|
|
</script>
|
|
<textarea style="display:none"
|
|
name="<?php echo esc_html( $fieldname ) ?>"><?php echo esc_html($value) ?></textarea>
|
|
<?php
|
|
}
|
|
|
|
|
|
public function colorpicker( $args )
|
|
{
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
$fieldname = 'cmplz_' . $args['fieldname'];
|
|
$args['cols'] = count($args['fields']);
|
|
$values = $this->get_value( $args['fieldname'], $args['default'] );
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<?php
|
|
|
|
foreach ($args['fields'] as $field)
|
|
{
|
|
$value = isset($values[$field['fieldname']]) ? $values[$field['fieldname']] : $args['default'][$field['fieldname']] ?>
|
|
<div class="cmplz-color-picker-wrap">
|
|
|
|
<div class="cmplz-sublabel">
|
|
<label for="<?php echo esc_html($fieldname) . '[' . esc_html( $field['fieldname'] ) . ']' ?>"><?php echo esc_html( $field['label'] ) ?></label>
|
|
</div>
|
|
|
|
<input type="hidden"
|
|
name="<?php echo esc_html($fieldname) . '[' . esc_html( $field['fieldname'] ) . ']' ?>"
|
|
id="<?php echo esc_html($fieldname) . '_' . esc_html( $field['fieldname'] ) . '' ?>"
|
|
value="<?php echo esc_html( $value ) ?>"
|
|
class="cmplz-color-picker-hidden">
|
|
<input type="text"
|
|
name="color_picker_container"
|
|
data-hidden-input='<?php echo esc_html($fieldname) . '_' . esc_html( $field['fieldname'] ) . '' ?>'
|
|
value="<?php echo esc_html( $value ) ?>"
|
|
class="cmplz-color-picker">
|
|
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
public function border_radius( $args )
|
|
{
|
|
if ( ! $this->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);
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<?php
|
|
|
|
$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)
|
|
{
|
|
$options = array('px', '%');
|
|
if (!in_array($values['type'], $options )){
|
|
$values['type']='px';
|
|
}
|
|
?>
|
|
|
|
<div class="cmplz-border-radius-wrap">
|
|
<div class="cmplz-sublabel">
|
|
<label class="cmplz-sublabel" for="<?php echo esc_html( $field['fieldname'] ) ?>"><?php echo esc_html( $field['label'] ) ?></label>
|
|
</div>
|
|
|
|
<input type="number"
|
|
name="<?php echo esc_html( $field['fieldname'] ) ?>"
|
|
value="<?php echo esc_html( $field['value'] ) ?>"
|
|
class="cmplz-border-radius">
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
?>
|
|
|
|
<div class="cmplz-border-input-type-wrap">
|
|
<input
|
|
class="cmplz-border-input-type"
|
|
type="hidden" value="<?php echo esc_html($values['type']) ?>"
|
|
name="<?php echo esc_html($fieldname) . '[type]' ?>">
|
|
<span class="cmplz-border-input-type-pixel <?php echo $values['type'] === '%' ? 'cmplz-grey' : '' ?>">px</span>
|
|
<span class="cmplz-border-input-type-percent <?php echo $values['type'] === 'px' ? 'cmplz-grey' : '' ?>">%</span>
|
|
</div>
|
|
|
|
<?php do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
|
|
public function border_width( $args )
|
|
{
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
|
|
$fieldname = 'cmplz_' . $args['fieldname'];
|
|
$args['cols'] = 5;
|
|
$values = $this->get_value( $args['fieldname'], $args['default'] );
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<?php
|
|
$default_values = array(
|
|
'top' => $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)
|
|
{ ?>
|
|
|
|
<div class="cmplz-border-width-wrap">
|
|
|
|
<div class="cmplz-sublabel">
|
|
<label class="cmplz-sublabel" for="<?php echo esc_html( $field['fieldname'] ) ?>"><?php echo esc_html( $field['label'] ) ?></label>
|
|
</div>
|
|
|
|
<input type="number"
|
|
name="<?php echo esc_html( $field['fieldname'] ) ?>"
|
|
value="<?php echo esc_html( $field['value'] ) ?>"
|
|
class="cmplz-border-width">
|
|
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
?>
|
|
|
|
<div class="cmplz-border-input-type-wrap">
|
|
<span class="cmplz-border-input-type-px">px</span>
|
|
</div>
|
|
|
|
<?php do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
/**
|
|
* Check if a step has any fields
|
|
* @param string $page
|
|
* @param bool $step
|
|
* @param bool $section
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function step_has_fields( $page, $step = false, $section = false ) {
|
|
$fields = COMPLIANZ::$config->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 );
|
|
?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( "cmplz_$callback", $args );?>
|
|
<?php do_action( 'complianz_after_label', $args );?>
|
|
<?php
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
/**
|
|
* A notice field is nothing more than an empty field, with a help notice.
|
|
*
|
|
* @param $args
|
|
*/
|
|
public function notice(
|
|
$args
|
|
) {
|
|
if ( ! $this->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;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<select <?php if ( $args['required'] ) {
|
|
echo 'required';
|
|
} ?> <?php
|
|
if ( !is_array( $args['disabled']) && $args['disabled'] ) echo "disabled";?> name="<?php echo esc_html( $fieldname )?>">
|
|
<option value=""><?php _e( "Choose an option", 'complianz-gdpr' ) ?></option>
|
|
<?php foreach (
|
|
$args['options'] as $option_key => $option_label
|
|
) { ?>
|
|
<option <?php
|
|
if ( is_array( $args['disabled']) && in_array($option_key, $args['disabled']) ) {
|
|
echo "disabled";;
|
|
}?> value="<?php echo esc_html( $option_key ) ?>" <?php echo ( $option_key === $value ) ? "selected" : "" ?>><?php echo esc_html( $option_label ) ?></option>
|
|
<?php } ?>
|
|
</select>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
public
|
|
function label(
|
|
$args
|
|
) {
|
|
|
|
$fieldname = 'cmplz_' . $args['fieldname'];
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Button/Action field
|
|
*
|
|
* @param $args
|
|
*
|
|
* @echo string $html
|
|
*/
|
|
|
|
public
|
|
function button(
|
|
$args
|
|
) {
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
|
|
$red = isset($args['red']) && $args['red'] ? 'button-red' : '';
|
|
$button_label = isset($args['button_label']) ? $args['button_label'] : $args['label'];
|
|
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<?php if ( $args['post_get'] === 'get' ) { ?>
|
|
<a <?php if ( $args['disabled'] )
|
|
echo "disabled" ?>href="<?php echo $args['disabled'] ? "#" : $args['action'] ?>"
|
|
class="button"><?php echo esc_html( $button_label ) ?></a>
|
|
<?php } else if ( $args['post_get'] === 'post' ){ ?>
|
|
<input <?php if ( $args['warn'] )
|
|
echo 'onclick="return confirm(\'' . $args['warn']
|
|
. '\');"' ?> <?php if ( $args['disabled'] )
|
|
echo "disabled" ?> class="button <?php echo esc_html($red) ?>" type="submit"
|
|
name="<?php echo esc_html($args['action']) ?>"
|
|
value="<?php echo esc_html( $button_label ) ?>">
|
|
<?php } else { ?>
|
|
<button <?php if ( $args['disabled'] )
|
|
echo "disabled" ?> class="button <?php echo esc_html($red) ?> <?php echo esc_html($args['action']) ?>" type="button">
|
|
<?php echo esc_html( $button_label ) ?></button>
|
|
<?php } ?>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
/**
|
|
* Upload field
|
|
*
|
|
* @param $args
|
|
*
|
|
* @echo string $html
|
|
*/
|
|
|
|
public
|
|
function upload(
|
|
$args
|
|
) {
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
<div style="flex-grow:1"></div>
|
|
<input type="button" class="upload_button button button-grey" value="<?php _e("Choose file", "complianz-gdpr")?>"/>
|
|
<input type="file" type="submit" name="cmplz-upload-file" style="display: none;">
|
|
|
|
<input <?php if ( $args['disabled'] )
|
|
echo "disabled" ?> class="button" type="submit"
|
|
name="<?php echo esc_html($args['action']) ?>"
|
|
value="<?php _e( 'Import',
|
|
'complianz-gdpr' ) ?>">
|
|
<div class="cmplz-comment"><span class="cmplz-file-chosen"><?php _e("No file chosen", "complianz-gdpr")?></span></div>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
|
|
<?php
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public
|
|
function save_button() {
|
|
wp_nonce_field( 'complianz_save', 'cmplz_nonce' );
|
|
?>
|
|
<th></th>
|
|
<td>
|
|
<input class="button button-primary" type="submit"
|
|
name="cmplz-save"
|
|
value="<?php _e( "Save", 'complianz-gdpr' ) ?>">
|
|
|
|
</td>
|
|
<?php
|
|
}
|
|
|
|
|
|
public
|
|
function multiple(
|
|
$args
|
|
) {
|
|
$values = $this->get_value( $args['fieldname'] );
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<button class="button" type="submit" name="cmplz_add_multiple"
|
|
value="<?php echo esc_html( $args['fieldname'] ) ?>"><?php _e( "Add new",
|
|
'complianz-gdpr' ) ?></button>
|
|
<br /><br />
|
|
<?php
|
|
if ( $values ) {
|
|
foreach ( $values as $key => $value ) {
|
|
?>
|
|
|
|
<div>
|
|
<div>
|
|
<label><?php _e( 'Description',
|
|
'complianz-gdpr' ) ?></label>
|
|
</div>
|
|
<div>
|
|
<textarea class="cmplz_multiple"
|
|
name="cmplz_multiple[<?php echo esc_html( $args['fieldname'] ) ?>][<?php echo esc_html($key) ?>][description]"><?php if ( isset( $value['description'] ) )
|
|
echo esc_html( $value['description'] ) ?></textarea>
|
|
</div>
|
|
|
|
</div>
|
|
<button class="button cmplz-remove" type="submit"
|
|
name="cmplz_remove_multiple[<?php echo esc_html( $args['fieldname'] ) ?>]"
|
|
value="<?php echo esc_html($key) ?>"><?php _e( "Remove",
|
|
'complianz-gdpr' ) ?></button>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
|
|
}
|
|
|
|
|
|
public function cookies( $args )
|
|
{
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
do_action( 'complianz_before_label', $args );
|
|
do_action( 'complianz_after_label', $args );
|
|
?>
|
|
|
|
<div class="cmplz-list-container">
|
|
<div class="cmplz-skeleton"></div>
|
|
</div>
|
|
<button type="button"
|
|
class="button cmplz-edit-item button-primary"
|
|
name="cmplz_add_item"
|
|
data-type='cookie'
|
|
data-action="add"
|
|
value="<?php echo esc_html( $args['fieldname'] ) ?>">
|
|
<?php _e( "Add new cookie", 'complianz-gdpr' ) ?>
|
|
</button>
|
|
|
|
<?php
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
/**
|
|
* @param $language
|
|
*
|
|
* @return string
|
|
*/
|
|
|
|
private function get_language_descriptor( $language, $type = 'cookie' ) {
|
|
$string = $type =='cookie' ? __( 'Cookies in %s', 'complianz-gdpr' ) : __( 'Services in %s', 'complianz-gdpr' );
|
|
if ( isset( COMPLIANZ::$config->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 );?>
|
|
<?php
|
|
|
|
$languages = COMPLIANZ::$cookie_admin->get_supported_languages();
|
|
$count = COMPLIANZ::$cookie_admin->get_supported_languages( true );
|
|
|
|
if ( $count > 1 ) { ?>
|
|
<select id="cmplz_language" data-type="service">
|
|
<?php foreach ( $languages as $language ) { ?>
|
|
<option value="<?php echo esc_html($language) ?>" <?php if ( $default_language === $language ) echo "selected" ?>>
|
|
<?php echo esc_html($this->get_language_descriptor( $language , 'service') ); ?>
|
|
</option>
|
|
<?php } ?>
|
|
</select>
|
|
<?php } else { ?>
|
|
<input type="hidden" id="cmplz_language" data-type="service" value="<?php echo reset( $languages ) ?>">
|
|
<?php } ?>
|
|
<div class="cmplz-list-container">
|
|
<div class="cmplz-skeleton"></div>
|
|
</div>
|
|
|
|
<button type="button"
|
|
class="button cmplz-edit-item button-primary"
|
|
name="cmplz_add_item"
|
|
data-type='service'
|
|
data-action="add"
|
|
value="<?php echo esc_html( $args['fieldname'] ) ?>">
|
|
<?php _e( "Add new service", 'complianz-gdpr' ) ?>
|
|
</button>
|
|
|
|
<?php
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
public
|
|
function processors(
|
|
$args
|
|
) {
|
|
$processing_agreements
|
|
= COMPLIANZ::$processing->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;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<?php
|
|
if ( $values ) {
|
|
foreach ( $values as $key => $value ) {
|
|
$default_index = array(
|
|
'name' => '',
|
|
'country' => '',
|
|
'purpose' => '',
|
|
'data' => '',
|
|
'processing_agreement' => 0,
|
|
);
|
|
|
|
$value = wp_parse_args( $value, $default_index );
|
|
$create_processing_agreement_link = '<a href="' . admin_url( "admin.php?page=cmplz-processing-agreements" ) . '">';
|
|
|
|
$processing_agreement_outside_c = floatval( ( $value['processing_agreement'] ) == - 1 ) ? 'selected' : '';
|
|
$html = '<div class="multiple-field">
|
|
<div>
|
|
<label>'
|
|
. cmplz_sprintf( __( "Name of the %s with whom you share the data",
|
|
'complianz-gdpr' ), $args['label'] ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
name="cmplz_multiple['
|
|
. esc_html( $fieldname ) . '][' . esc_html( $key ) . '][name]"
|
|
value="' . esc_html( $value['name'] ) . '">
|
|
</div>
|
|
<div>
|
|
<label>'
|
|
. cmplz_sprintf( __( 'Select the Processing Agreement you made with this %s, or %screate one%s',
|
|
'complianz-gdpr' ), $args['label'],
|
|
$create_processing_agreement_link, '</a>' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<label>
|
|
<select name="cmplz_multiple['
|
|
. esc_html( $fieldname ) . '][' . esc_html( $key ) . '][processing_agreement]">
|
|
<option value="0">'
|
|
. __( 'No agreement selected', 'complianz-gdpr' ) . '</option>
|
|
<option value="-1" '
|
|
. $processing_agreement_outside_c . '>'
|
|
. __( 'A Processing Agreement outside Complianz Privacy Suite',
|
|
'complianz-gdpr' ) . '</option>';
|
|
foreach ( $processing_agreements as $id => $title ) {
|
|
$selected = ( intval( $value['processing_agreement'] )
|
|
== $id ) ? 'selected' : '';
|
|
$html .= '<option value="' . $id . '" ' . $selected
|
|
. '>' . $title . '</option>';
|
|
}
|
|
$html .= '</select>
|
|
</div>
|
|
<div>
|
|
<label>' . cmplz_sprintf( __( '%s country',
|
|
'complianz-gdpr' ), $args['label'] ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
name="cmplz_multiple['
|
|
. esc_html( $fieldname ) . '][' . esc_html( $key )
|
|
. '][country]"
|
|
value="' . esc_html( $value['country'] ) . '">
|
|
</div>
|
|
|
|
<div>
|
|
<label>' . __( 'Purpose', 'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
name="cmplz_multiple['
|
|
. esc_html( $fieldname ) . '][' . esc_html( $key )
|
|
. '][purpose]"
|
|
value="' . esc_html( $value['purpose'] ) . '">
|
|
</div>';
|
|
if ( $region === 'eu' ) {
|
|
$html .= '
|
|
<div>
|
|
<label>' . __( 'What type of data is shared',
|
|
'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
name="cmplz_multiple['
|
|
. esc_html( $fieldname ) . ']['
|
|
. esc_html( $key ) . '][data]"
|
|
value="' . esc_html( $value['data'] ) . '">
|
|
</div>';
|
|
|
|
}
|
|
$html .= '<div><button class="button button-primary" type="submit" name="cmplz-save">'
|
|
. __( 'Save', 'complianz-gdpr' ) . '</button>
|
|
<button class="button cmplz-remove button-red" type="submit"
|
|
name="cmplz_remove_multiple['
|
|
. esc_html( $fieldname ) . ']"
|
|
value="' . esc_html( $key ) . '">' . __( "Remove",
|
|
'complianz-gdpr' ) . '</button></div>';
|
|
|
|
$html .= '</div>';
|
|
|
|
$title = esc_html( $value['name'] );
|
|
if ( $title == '' ) {
|
|
$title = __( 'New entry', 'complianz-gdpr' );
|
|
cmplz_panel( $title, $html, '', '', true, true );
|
|
} else {
|
|
cmplz_panel( $title, $html );
|
|
}
|
|
|
|
?>
|
|
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
<button class="button" type="submit" class="cmplz-add-new-processor"
|
|
name="cmplz_add_multiple"
|
|
value="<?php echo esc_html( $fieldname ) ?>"><?php cmplz_printf( __( "Add new %s",
|
|
'complianz-gdpr' ), $args['label'] ) ?></button>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
|
|
}
|
|
|
|
public
|
|
function thirdparties(
|
|
$args
|
|
) {
|
|
$values = $this->get_value( $args['fieldname'] );
|
|
if ( ! is_array( $values ) ) {
|
|
$values = array();
|
|
}
|
|
if ( ! $this->show_field( $args ) ) {
|
|
return;
|
|
}
|
|
?>
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<?php
|
|
if ( $values ) {
|
|
foreach ( $values as $key => $value ) {
|
|
$default_index = array(
|
|
'name' => '',
|
|
'country' => '',
|
|
'purpose' => '',
|
|
'data' => '',
|
|
);
|
|
|
|
$value = wp_parse_args( $value, $default_index );
|
|
|
|
$html = '
|
|
<div class="multiple-field">
|
|
<div>
|
|
<label>'
|
|
. __( 'Name of the Third Party with whom you share the data',
|
|
'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
name="cmplz_multiple['
|
|
. esc_html( $args['fieldname'] ) . ']['
|
|
. esc_html( $key ) . '][name]"
|
|
value="' . esc_html( $value['name'] ) . '">
|
|
</div>
|
|
|
|
<div>
|
|
<label>' . __( 'Third Party country',
|
|
'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
name="cmplz_multiple['
|
|
. esc_html( $args['fieldname'] ) . ']['
|
|
. esc_html( $key ) . '][country]"
|
|
value="' . esc_html( $value['country'] ) . '">
|
|
</div>
|
|
|
|
|
|
<div>
|
|
<label>' . __( 'Purpose', 'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
name="cmplz_multiple['
|
|
. esc_html( $args['fieldname'] ) . ']['
|
|
. esc_html( $key ) . '][purpose]"
|
|
value="' . esc_html( $value['purpose'] ) . '">
|
|
</div>
|
|
<div>
|
|
<label>' . __( 'What type of data is shared',
|
|
'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
name="cmplz_multiple['
|
|
. esc_html( $args['fieldname'] ) . ']['
|
|
. esc_html( $key ) . '][data]"
|
|
value="' . esc_html( $value['data'] ) . '">
|
|
</div>
|
|
<div>
|
|
<button class="button button-primary" type="submit" name="cmplz-save">'
|
|
. __( 'Save', 'complianz-gdpr' ) . '</button>
|
|
<button class="button cmplz-remove button-red" type="submit"
|
|
name="cmplz_remove_multiple[' . esc_html( $args['fieldname'] ) . ']"
|
|
value="' . esc_html( $key ) . '">'
|
|
. __( "Remove", 'complianz-gdpr' ) . '</button>
|
|
</div>
|
|
</div>';
|
|
|
|
$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 );
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
<button class="button" type="submit"
|
|
class="cmplz-add-new-thirdparty" name="cmplz_add_multiple"
|
|
value="<?php echo esc_html( $args['fieldname'] ) ?>"><?php _e( "Add new Third Party",
|
|
'complianz-gdpr' ) ?></button>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
|
|
}
|
|
|
|
/**
|
|
* Add a script
|
|
* @param array $args
|
|
*/
|
|
|
|
public function add_script( $args )
|
|
{
|
|
if ( ! $this->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 );
|
|
}
|
|
|
|
?><button type="button" class="button cmplz_script_add" data-type="add_script"><?php _e( "Add new", 'complianz-gdpr' ) ?></button><?php
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
/**
|
|
* Get html block to add a script
|
|
*
|
|
* @param $value
|
|
* @param $i
|
|
* @param false $open
|
|
*
|
|
* @return string|void
|
|
*/
|
|
public function get_add_script_html( $value, $i, $open = false )
|
|
{
|
|
$placeholders = COMPLIANZ::$config->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 = '
|
|
<div class="multiple-field">
|
|
<div>
|
|
<label>' . __( 'Name', 'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="hidden"
|
|
class="cmplz_iframe"
|
|
data-name="iframe"
|
|
name="cmplz_add_script['.$i.'][iframe]"
|
|
value="0">
|
|
<input type="text"
|
|
class="cmplz_name"
|
|
data-name="name"
|
|
name="cmplz_add_script['.$i.'][name]"
|
|
value="' . esc_html( $value['name'] ) . '">
|
|
</div>
|
|
|
|
<div id="cmplz_add_script['.$i.'][editor_div]" style="height: 200px; width: 100%">' . $value['editor'] . '</div>
|
|
<script>
|
|
window.define = ace.define;
|
|
window.require = ace.require;
|
|
var add_script_'.$i.' =
|
|
ace.edit("cmplz_add_script['.$i.'][editor_div]");
|
|
add_script_'.$i.'.setTheme("ace/theme/tomorrow_night_bright");
|
|
add_script_'.$i.'.session.setMode("ace/mode/javascript");
|
|
jQuery(document).ready(function ($) {
|
|
var textarea_'.$i.' = $(\'textarea[name="cmplz_add_script['.$i.'][editor]"]\');
|
|
add_script_'.$i.'.
|
|
getSession().on("change", function () {
|
|
textarea_'.$i.'.val(add_script_'.$i.'.getSession().getValue()
|
|
)
|
|
});
|
|
});
|
|
</script>
|
|
<textarea data-name="editor" style="display:none" name="cmplz_add_script['.$i.'][editor]">' . $value['editor'] . '</textarea>
|
|
|
|
<label class="cmplz-checkbox-container">' . __( 'This script contains an async attribute.', 'complianz-gdpr' ) . '
|
|
<input
|
|
data-name="async"
|
|
name="cmplz_add_script['.$i.'][async]"
|
|
type="hidden"
|
|
value="0">
|
|
<input
|
|
data-name="async"
|
|
name="cmplz_add_script['.$i.'][async]"
|
|
class="cmplz_add_script['.$i.'][async]"
|
|
type="checkbox"
|
|
value="1"
|
|
' . (($value['async'] == 1) ? 'checked' : '') . '>
|
|
<div class="checkmark">' . cmplz_icon('check', 'success') . '</div>
|
|
</label>
|
|
|
|
<div>
|
|
<label><h3>' . __( 'Category', 'complianz-gdpr' ) . '<h3></label>
|
|
</div>
|
|
|
|
<label class="cmplz-radio-container">' . __( 'Statistics', 'complianz-gdpr' ) . '
|
|
<input
|
|
data-name="category"
|
|
type="radio"
|
|
id="statistics"
|
|
name="cmplz_add_script['.$i.'][category]"
|
|
class="cmplz_add_script['.$i.'][category]"
|
|
value="statistics"
|
|
' . (($value['category'] === 'statistics') ? 'checked' : '') . '>
|
|
<div class="radiobtn" required>' . cmplz_icon( 'bullet', 'default', '', 10) . '</div>
|
|
</label>
|
|
<label class="cmplz-radio-container">' . __( 'Marketing', 'complianz-gdpr' ) . '
|
|
<input
|
|
type="radio"
|
|
data-name="category"
|
|
id="marketing"
|
|
name="cmplz_add_script['.$i.'][category]"
|
|
class="cmplz_add_script['.$i.'][category]"
|
|
value="marketing"
|
|
' . (($value['category'] === 'marketing') ? 'checked' : '') . '>
|
|
<div class="radiobtn">' . cmplz_icon( 'bullet', 'default', '', 10) . '</div>
|
|
</label>
|
|
|
|
<div>
|
|
<label><h3>' . __( 'Placeholder', 'complianz-gdpr' ) . '<h3></label>
|
|
</div>
|
|
|
|
<label class="cmplz-checkbox-container">' . __( 'Enable placeholder', 'complianz-gdpr' ) . '
|
|
<input
|
|
data-name="enable_placeholder"
|
|
name="cmplz_add_script['.$i.'][enable_placeholder]"
|
|
type="hidden"
|
|
value="0">
|
|
<input
|
|
data-name="enable_placeholder"
|
|
name="cmplz_add_script['.$i.'][enable_placeholder]"
|
|
class="cmplz_add_script['.$i.'][enable_placeholder]"
|
|
type="checkbox"
|
|
value="1"
|
|
' . (($value['enable_placeholder'] == 1) ? 'checked' : '') . '>
|
|
<div class="checkmark">' . cmplz_icon('check', 'success') . '</div>
|
|
</label>
|
|
<div class="condition-check-1 '. (!$value['enable_placeholder'] ? 'cmplz-hidden' : '') .'" data-condition-answer-1="1" data-condition-question-1="add_script['.$i.'][enable_placeholder]">
|
|
<label>' . __( 'Enter the div class or ID that should be targeted.', 'complianz-gdpr' ) .cmplz_read_more('https://complianz.io/script-center#placeholder/'). '</label>
|
|
</div>
|
|
<div class="condition-check-1 '. (!$value['enable_placeholder'] ? 'cmplz-hidden' : '') .'" data-condition-answer-1="1" data-condition-question-1="add_script['.$i.'][enable_placeholder]">
|
|
<input type="text"
|
|
data-name="placeholder_class"
|
|
name="cmplz_add_script['.$i.'][placeholder_class]"
|
|
value="' . esc_html( $value['placeholder_class'] ) . '">
|
|
</div>
|
|
|
|
<div class="condition-check-1 '. (!$value['enable_placeholder'] ? 'cmplz-hidden' : '') .'" data-condition-answer-1="1" data-condition-question-1="add_script['.$i.'][enable_placeholder]">
|
|
<select data-name="placeholder" name="cmplz_add_script['.$i.'][placeholder]">';
|
|
foreach ( $placeholders as $placeholder => $label ) {
|
|
$selected = ( esc_html( $value['placeholder'] ) === $placeholder ) ? 'selected' : '';
|
|
$html .= '<option value="' . $placeholder . '" ' . $selected . '>' . $label . '</option>';
|
|
}
|
|
$html .= '</select>
|
|
</div>
|
|
|
|
<div class="cmplz-multiple-field-button-footer">
|
|
<button class="button button-primary cmplz_script_save" type="button" data-id="'.$i.'" data-type="add_script" data-action="save">' . __( 'Save', 'complianz-gdpr' ) . '</button>
|
|
<button class="button button-primary button-red cmplz_script_save" type="button" data-id="'.$i.'" data-type="add_script" data-action="remove">' . __( "Remove", 'complianz-gdpr' ) . '</button>
|
|
</div>
|
|
</div>';
|
|
|
|
$title = esc_html( $value['name'] ) !== '' ? esc_html( $value['name'] ) : __( 'New entry', 'complianz-gdpr' ) ;
|
|
|
|
$custom_button = '<div class="cmplz-checkbox cmplz_script_save" data-action="'.$action.'" data-type="add_script" data-id="'.$i.'">
|
|
<input type="hidden"
|
|
value="0"
|
|
name="cmplz_add_script['.$i.'][enable]">
|
|
<input type="checkbox"
|
|
data-name="enable"
|
|
class="cmplz-checkbox"
|
|
size="40"
|
|
value="1"
|
|
name="cmplz_add_script['.$i.'][enable]"
|
|
'.$enabled.'/>
|
|
<label class="cmplz-label" for="cmplz-enable" tabindex="0"></label>
|
|
</div>';
|
|
|
|
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 );
|
|
}
|
|
|
|
?><button type="button" class="button cmplz_script_add" data-type="block_script"><?php _e( "Add new", 'complianz-gdpr' ) ?></button><?php
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
/**
|
|
* Get block script html
|
|
* @param string $value
|
|
* @param int $i
|
|
* @param false $open
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_block_script_html( $value, $i, $open = false )
|
|
{
|
|
$known_script_tags = COMPLIANZ::$cookie_blocker->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 = '
|
|
<div class="multiple-field">
|
|
<div>
|
|
<label>' . __( 'Name', 'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
data-name="name"
|
|
class="cmplz_name"
|
|
name="cmplz_block_script['.$i.'][name]"
|
|
value="' . esc_html( $value['name'] ) . '">
|
|
</div>
|
|
<div>
|
|
<label>' . __( 'URLs that should be blocked before consent.' , 'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div class="cmplz-hidden cmplz-url-template">
|
|
<div><input type="text"
|
|
data-name="urls"
|
|
name="cmplz_block_script['.$i.'][urls][]"
|
|
value=""><button type="button" class="cmplz_remove_url">'.cmplz_icon('minus', 'default').'</button></div></div>
|
|
<div>';
|
|
$counter = 0;
|
|
if ( empty($value['urls'])) $value['urls'] = array(' ');
|
|
|
|
foreach ($value['urls'] as $url ){
|
|
$counter++;
|
|
$html .= '<div><input type="text"
|
|
data-name="urls"
|
|
name="cmplz_block_script['.$i.'][urls][]"
|
|
value="' . esc_html( $url ) . '">';
|
|
if ($counter==1){
|
|
$html .= '<button type="button" class="cmplz_add_url">'.cmplz_icon('plus', 'default').'</button>';
|
|
} else {
|
|
$html .= '<button type="button" class="cmplz_remove_url">'.cmplz_icon('minus', 'default').'</button>';
|
|
}
|
|
$html.='</div>';
|
|
}
|
|
|
|
$html.= '</div>
|
|
<div>
|
|
<label><h3>' . __( 'Category', 'complianz-gdpr' ) . '<h3></label>
|
|
</div>
|
|
|
|
<label class="cmplz-radio-container">' . __( 'Statistics', 'complianz-gdpr' ) . '
|
|
<input
|
|
data-name="category"
|
|
type="radio"
|
|
id="statistics"
|
|
name="cmplz_block_script['.$i.'][category]"
|
|
class="cmplz_block_script['.$i.'][category]"
|
|
value="statistics"
|
|
' . (($value['category'] === 'statistics') ? 'checked' : '') . '>
|
|
<div class="radiobtn" required>' . cmplz_icon( 'bullet', 'default', '', 10) . '</div>
|
|
</label>
|
|
<label class="cmplz-radio-container">' . __( 'Marketing', 'complianz-gdpr' ) . '
|
|
<input
|
|
data-name="category"
|
|
type="radio"
|
|
id="marketing"
|
|
name="cmplz_block_script['.$i.'][category]"
|
|
class="cmplz_block_script['.$i.'][category]"
|
|
value="marketing"
|
|
' . (($value['category'] === 'marketing') ? 'checked' : '') . '>
|
|
<div class="radiobtn">' . cmplz_icon( 'bullet', 'default', '', 10) . '</div>
|
|
</label>
|
|
|
|
<div>
|
|
<label><h3>' . __( 'Placeholder', 'complianz-gdpr' ) . '<h3></label>
|
|
</div>
|
|
|
|
<label class="cmplz-checkbox-container">' . __( 'Enable placeholder', 'complianz-gdpr' ) . '
|
|
<input
|
|
data-name="enable_placeholder"
|
|
name="cmplz_block_script['.$i.'][enable_placeholder]"
|
|
type="hidden"
|
|
value="0">
|
|
<input
|
|
data-name="enable_placeholder"
|
|
name="cmplz_block_script['.$i.'][enable_placeholder]"
|
|
class="cmplz_block_script['.$i.'][enable_placeholder]"
|
|
type="checkbox"
|
|
value="1"
|
|
' . (($value['enable_placeholder'] == 1) ? 'checked' : '') . '>
|
|
<div class="checkmark">' . cmplz_icon('check', 'success') . '</div>
|
|
</label>
|
|
<div class="condition-check-1 '. (!$value['enable_placeholder'] ? 'cmplz-hidden' : '') .'" data-condition-answer-1="1" data-condition-question-1="block_script['.$i.'][enable_placeholder]">
|
|
<label class="cmplz-checkbox-container">' . __( 'The blocked content is an iframe', 'complianz-gdpr' ) . '
|
|
<input
|
|
data-name="iframe"
|
|
name="cmplz_block_script['.$i.'][iframe]"
|
|
type="hidden"
|
|
value="0">
|
|
<input
|
|
data-name="iframe"
|
|
name="cmplz_block_script['.$i.'][iframe]"
|
|
class="cmplz_block_script['.$i.'][iframe]"
|
|
type="checkbox"
|
|
value="1"
|
|
' . (($value['iframe'] == 1) ? 'checked' : '') . '>
|
|
<div class="checkmark">' . cmplz_icon('check', 'success') . '</div>
|
|
</label>
|
|
</div>
|
|
<div class="condition-check-1 '. ($value['iframe'] || !$value['enable_placeholder'] ? 'cmplz-hidden' : '') .'" data-condition-answer-1="" data-condition-question-1="block_script['.$i.'][iframe]" data-condition-answer-2="1" data-condition-question-2="block_script['.$i.'][enable_placeholder]">
|
|
<label>' . __( 'Enter the div class or ID that should be targeted.' , 'complianz-gdpr' ) .cmplz_read_more('https://complianz.io/script-center#placeholder/'). '</label>
|
|
</div>
|
|
<div class="condition-check-1 '. ($value['iframe'] || !$value['enable_placeholder'] ? 'cmplz-hidden' : '') .'" data-condition-answer-1="" data-condition-question-1="block_script['.$i.'][iframe]" data-condition-answer-2="1" data-condition-question-2="block_script['.$i.'][enable_placeholder]">
|
|
<input type="text"
|
|
data-name="placeholder_class"
|
|
name="cmplz_block_script['.$i.'][placeholder_class]"
|
|
value="' . esc_html( $value['placeholder_class'] ) . '">
|
|
</div>
|
|
|
|
<div class="condition-check-1 '. (!$value['enable_placeholder'] ? 'cmplz-hidden' : '') .'" data-condition-answer-1="1" data-condition-question-1="block_script['.$i.'][enable_placeholder]">
|
|
<select name="cmplz_block_script['.$i.'][placeholder]" data-name="placeholder">';
|
|
foreach ( $placeholders as $placeholder => $label ) {
|
|
$selected = ( esc_html( $value['placeholder'] ) === $placeholder ) ? 'selected' : '';
|
|
$html .= '<option value="' . $placeholder . '" ' . $selected . '>' . $label . '</option>';
|
|
}
|
|
$html .= '</select>
|
|
</div>
|
|
|
|
<div>
|
|
<label><h3>' . __( 'Dependency', 'complianz-gdpr' ) . '<h3></label>
|
|
</div>
|
|
|
|
<div>
|
|
<label class="cmplz-checkbox-container">' . __( 'Enable dependency', 'complianz-gdpr' ) . '
|
|
<input
|
|
data-name="enable_dependency"
|
|
name="cmplz_block_script['.$i.'][enable_dependency]"
|
|
type="hidden"
|
|
value="0">
|
|
<input
|
|
data-name="enable_dependency"
|
|
name="cmplz_block_script['.$i.'][enable_dependency]"
|
|
class="cmplz_block_script['.$i.'][enable_dependency]"
|
|
type="checkbox"
|
|
value="1"
|
|
' . (($value['enable_dependency'] == 1) ? 'checked' : '') . '>
|
|
<div class="checkmark">' . cmplz_icon('check', 'success') . '</div>
|
|
</label>
|
|
</div>
|
|
|
|
<div class="condition-check-1 '. (!$value['enable_dependency'] ? 'cmplz-hidden' : '') .'" data-condition-answer-1="1" data-condition-question-1="block_script['.$i.'][enable_dependency]">';
|
|
|
|
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 .= '<select name="cmplz_block_script['.$i.'][dependency]['.$url.']" data-name="dependency" data-url="'.$url.'">
|
|
<option value="0">' . __( 'No dependency', 'complianz-gdpr' ) . '</option>';
|
|
foreach ( $known_script_tags as $script_tag => $item ) {
|
|
$selected = isset($value['dependency'][$url]) && $value['dependency'][$url] === $script_tag ? 'selected' : '';
|
|
$html .= '<option value="' . $script_tag . '" ' . $selected . '>' . $script_tag . '</option>';
|
|
}
|
|
$html .= '</select>';
|
|
$html .= '<div class="cmplz_deps_desc">'. cmplz_sprintf(__('waits for %s', "complianz-gdpr") , '<b>'.esc_html($url).'</b>' ).'</div>';
|
|
}
|
|
|
|
$html .= '</div>
|
|
|
|
<div class="cmplz-multiple-field-button-footer">
|
|
<button class="button button-primary cmplz_script_save" type="button" data-id="'.$i.'" data-type="block_script" data-action="save">' . __( 'Save', 'complianz-gdpr' ) . '</button>
|
|
<button class="button button-primary button-red cmplz_script_save" type="button" data-id="'.$i.'" data-type="block_script" data-action="remove">' . __( "Remove", 'complianz-gdpr' ) . '</button>
|
|
</div>
|
|
</div>';
|
|
|
|
$title = esc_html( $value['name'] ) !== '' ? esc_html( $value['name'] ) : __( 'New entry', 'complianz-gdpr' ) ;
|
|
$custom_button = '<div class="cmplz-checkbox cmplz_script_save" data-action="'.$action.'" data-type="block_script" data-id="'.$i.'">
|
|
<input type="hidden"
|
|
value="0"
|
|
name="cmplz_block_script['.$i.'][enable]">
|
|
<input type="checkbox"
|
|
data-name="enable"
|
|
name="cmplz_block_script['.$i.'][enable]"
|
|
class="cmplz-checkbox"
|
|
size="40"
|
|
value="1"
|
|
'.$enabled.'/>
|
|
<label class="cmplz-label" for="cmplz-enable" tabindex="0"></label>
|
|
</div>';
|
|
|
|
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 );
|
|
}
|
|
|
|
?><button type="button" class="button cmplz_script_add" data-type="whitelist_script"><?php _e( "Add new", 'complianz-gdpr' ) ?></button><?php
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
public function get_whitelist_script_html( $value, $i, $open = false )
|
|
{
|
|
$default_index = array(
|
|
'name' => __("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 = '
|
|
<div class="multiple-field">
|
|
<div>
|
|
<label>' . __( 'Name', 'complianz-gdpr' ) . '</label>
|
|
</div>
|
|
<div>
|
|
<input type="text"
|
|
data-name="name"
|
|
class="cmplz_name"
|
|
name="cmplz_whitelist_script['.$i.'][name]"
|
|
value="' . esc_html( $value['name'] ) . '">
|
|
</div>
|
|
<div>
|
|
<label>' . __( 'URLs that should be whitelisted.' , 'complianz-gdpr' ).cmplz_read_more( 'https://complianz.io/whitelisting-inline-script/' ). '</label>
|
|
</div>
|
|
<div>
|
|
<div class="cmplz-hidden cmplz-url-template">
|
|
<div><input type="text"
|
|
data-name="urls"
|
|
name="cmplz_whitelist_script['.$i.'][urls][]"
|
|
value=""><button type="button" class="cmplz_remove_url">'.cmplz_icon('minus', 'default').'</button></div></div>
|
|
';
|
|
$counter = 0;
|
|
if ( empty($value['urls'])) $value['urls'] = array(' ');
|
|
foreach ($value['urls'] as $url ){
|
|
$counter++;
|
|
$html .= '<div><input type="text"
|
|
data-name="urls"
|
|
name="cmplz_whitelist_script['.$i.'][urls][]"
|
|
value="' . esc_html( $url ) . '">';
|
|
if ($counter==1){
|
|
$html .= '<button type="button" class="cmplz_add_url">'.cmplz_icon('plus', 'default').'</button>';
|
|
} else {
|
|
$html .= '<button type="button" class="cmplz_remove_url">'.cmplz_icon('minus', 'default').'</button>';
|
|
}
|
|
$html.= '</div>';
|
|
}
|
|
|
|
$html.= '</div>
|
|
<div class="cmplz-multiple-field-button-footer">
|
|
<button class="button button-primary cmplz_script_save" type="button" data-id="'.$i.'" data-type="whitelist_script" data-action="save">' . __( 'Save', 'complianz-gdpr' ) . '</button>
|
|
<button class="button button-primary button-red cmplz_script_save" type="button" data-id="'.$i.'" data-type="whitelist_script" data-action="remove">' . __( "Remove", 'complianz-gdpr' ) . '</button>
|
|
</div>
|
|
</div>';
|
|
|
|
$title = esc_html( $value['name'] ) !== '' ? esc_html( $value['name'] ) : __( 'New entry', 'complianz-gdpr' ) ;
|
|
$custom_button = '<div class="cmplz-checkbox cmplz_script_save" data-action="'.$action.'" data-type="whitelist_script" data-id="'.$i.'">
|
|
<input type="hidden"
|
|
value="0"
|
|
name="cmplz_whitelist_script['.$i.'][enable]">
|
|
<input type="checkbox"
|
|
name="cmplz_whitelist_script['.$i.'][enable]"
|
|
class="cmplz-checkbox cmplz-enable"
|
|
size="40"
|
|
value="1"
|
|
data-name="enable"
|
|
'.$enabled.'/>
|
|
<label class="cmplz-label" for="cmplz-enable" tabindex="0"></label>
|
|
</div>';
|
|
|
|
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 );
|
|
?>
|
|
<div class="cmplz-logo-preview cmplz-complianz-logo">
|
|
<?php echo $complianz_logo ?>
|
|
</div>
|
|
<?php
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
public function use_logo_site( $args )
|
|
{
|
|
$site_logo = get_custom_logo();
|
|
|
|
if ( !$site_logo ) {
|
|
$site_logo = __("No site logo configured.", "complianz-gdpr");
|
|
}
|
|
|
|
do_action( 'complianz_before_label', $args );
|
|
do_action( 'complianz_label_html' , $args );
|
|
do_action( 'complianz_after_label', $args );
|
|
|
|
?>
|
|
<input type="hidden" name="cmplz-customizer-url" value="<?php echo wp_customize_url()?>">
|
|
<div class="cmplz-logo-preview cmplz-theme-image">
|
|
<?php echo $site_logo ?>
|
|
</div>
|
|
<?php
|
|
|
|
do_action( 'complianz_after_field', $args );
|
|
}
|
|
|
|
public
|
|
function use_logo_custom($args)
|
|
{
|
|
$src = cmplz_url . '/assets/images/placeholders/default-light.jpg';
|
|
$attachment_id = $this->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 );
|
|
?>
|
|
<div style="flex-grow:1"></div>
|
|
<input type="hidden" name="cmplz_<?php echo esc_html($args['fieldname']) ?>" value="<?php echo intval($attachment_id)?>">
|
|
<div>
|
|
<input <?php if ($args['disabled']) echo "disabled"?> class="button cmplz-image-uploader" type="button" value="<?php _e('Edit', 'complianz-gdpr') ?>">
|
|
</div>
|
|
<div class="cmplz-logo-preview cmplz-clickable">
|
|
<img alt="preview image" src="<?php echo $src?>">
|
|
</div>
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
<?php
|
|
}
|
|
|
|
|
|
public function text_checkbox( $args )
|
|
{
|
|
if ( ! $this->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');
|
|
|
|
?>
|
|
|
|
<?php do_action( 'complianz_before_label', $args ); ?>
|
|
<?php do_action( 'complianz_label_html' , $args );?>
|
|
<?php do_action( 'complianz_after_label', $args ); ?>
|
|
|
|
<div class="cmplz-text">
|
|
<input <?php echo $required ?>
|
|
class="validation <?php echo $is_required ?>"
|
|
placeholder="<?php echo esc_html( $args['placeholder'] ) ?>"
|
|
type="text"
|
|
value="<?php echo esc_html($value['text']) ?>"
|
|
name="<?php echo esc_attr($fieldname) ?>[text]"
|
|
>
|
|
<?php echo $check_icon ?>
|
|
<?php echo $times_icon ?>
|
|
</div>
|
|
|
|
<label class="cmplz-switch">
|
|
<input name="<?php echo esc_attr($fieldname) ?>[show]" type="hidden" value="0"/>
|
|
<input name="<?php echo esc_attr($fieldname) ?>[show]" size="40" type="checkbox"
|
|
<?php if ( $args['disabled'] ) {
|
|
echo 'disabled';
|
|
} ?>
|
|
class="<?php if ( $args['required'] ) {
|
|
echo 'is-required';
|
|
} ?>"
|
|
value="1" <?php checked( 1, $value['show'], true ) ?> />
|
|
<span class="cmplz-slider cmplz-round"></span>
|
|
</label>
|
|
|
|
<?php do_action( 'complianz_after_field', $args ); ?>
|
|
|
|
<?php
|
|
}
|
|
|
|
|
|
/**
|
|
* Get value of this fieldname
|
|
*
|
|
* @param $fieldname
|
|
* @param string $default
|
|
*
|
|
* @return mixed
|
|
*/
|
|
|
|
public function get_default( $fieldname, $default = '' ) {
|
|
return apply_filters( 'cmplz_default_value', $default, $fieldname );
|
|
}
|
|
|
|
/**
|
|
* Get value of this fieldname
|
|
*
|
|
* @param $fieldname
|
|
* @param string $default
|
|
*
|
|
* @return mixed
|
|
*/
|
|
|
|
public function get_value( $fieldname, $default = '' ) {
|
|
$fields = COMPLIANZ::$config->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';
|
|
}
|
|
?>
|
|
<div class="cmplz-comment <?=$warning_class?>"><?php echo $args['comment'] ?></div>
|
|
<?php
|
|
}
|
|
|
|
public function has_errors() {
|
|
if ( count( $this->form_errors ) > 0 ) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
}
|
|
} //class closure
|