array(
'position' => 'bottom',
'message_text' => '',
'css_style' => 'bootstrap',
'css_class' => 'button',
'accept_text' => '',
'refuse_text' => '',
'refuse_opt' => 'no',
'refuse_code' => '',
'refuse_code_head' => '',
'revoke_cookies' => false,
'revoke_cookies_opt' => 'automatic',
'revoke_text' => '',
'redirection' => false,
'see_more' => 'no',
'link_target' => '_blank',
'time' => 'month',
'hide_effect' => 'fade',
'on_scroll' => false,
'on_scroll_offset' => 100,
'colors' => array(
'text' => '#fff',
'bar' => '#000'
),
'see_more_opt' => array(
'text' => '',
'link_type' => 'page',
'id' => 'empty',
'link' => '',
'sync' => false
),
'script_placement' => 'header',
'translate' => true,
'deactivation_delete' => 'no'
),
'version' => '1.2.46'
);
private $positions = array();
private $styles = array();
private $choices = array();
private $links = array();
private $link_target = array();
private $colors = array();
private $options = array();
private $effects = array();
private $times = array();
private $script_placements = array();
/**
* Constructor.
*/
public function __construct() {
register_activation_hook( __FILE__, array( $this, 'activation' ) );
register_deactivation_hook( __FILE__, array( $this, 'deactivation' ) );
// settings
$this->options = array(
'general' => array_merge( $this->defaults['general'], get_option( 'cookie_notice_options', $this->defaults['general'] ) )
);
if ( ! isset( $this->options['general']['see_more_opt']['sync'] ) )
$this->options['general']['see_more_opt']['sync'] = $this->defaults['general']['see_more_opt']['sync'];
// actions
add_action( 'init', array( $this, 'register_shortcode' ) );
add_action( 'init', array( $this, 'wpsc_add_cookie' ) );
add_action( 'admin_init', array( $this, 'register_settings' ) );
add_action( 'admin_menu', array( $this, 'admin_menu_options' ) );
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
add_action( 'after_setup_theme', array( $this, 'load_defaults' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
add_action( 'wp_enqueue_scripts', array( $this, 'wp_enqueue_scripts' ) );
add_action( 'wp_head', array( $this, 'wp_print_header_scripts' ) );
add_action( 'wp_print_footer_scripts', array( $this, 'wp_print_footer_scripts' ) );
add_action( 'wp_footer', array( $this, 'add_cookie_notice' ), 1000 );
// filters
add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 2 );
add_filter( 'plugin_action_links', array( $this, 'plugin_action_links' ), 10, 2 );
add_filter( 'body_class', array( $this, 'change_body_class' ) );
// load other files
include_once( plugin_dir_path( __FILE__ ) . 'includes/functions.php' );
}
/**
* Load plugin defaults
*/
public function load_defaults() {
$this->positions = array(
'top' => __( 'Top', 'cookie-notice' ),
'bottom' => __( 'Bottom', 'cookie-notice' )
);
$this->styles = array(
'none' => __( 'None', 'cookie-notice' ),
'wp-default' => __( 'WordPress', 'cookie-notice' ),
'bootstrap' => __( 'Bootstrap', 'cookie-notice' )
);
$this->revoke_opts = array(
'automatic' => __( 'Automatic', 'cookie-notice' ),
'manual' => __( 'Manual', 'cookie-notice' )
);
$this->links = array(
'page' => __( 'Page link', 'cookie-notice' ),
'custom' => __( 'Custom link', 'cookie-notice' )
);
$this->link_target = array(
'_blank',
'_self'
);
$this->colors = array(
'text' => __( 'Text color', 'cookie-notice' ),
'bar' => __( 'Bar color', 'cookie-notice' ),
);
$this->times = array(
'hour' => array( __( 'An hour', 'cookie-notice' ), 3600 ),
'day' => array( __( '1 day', 'cookie-notice' ), 86400 ),
'week' => array( __( '1 week', 'cookie-notice' ), 604800 ),
'month' => array( __( '1 month', 'cookie-notice' ), 2592000 ),
'3months' => array( __( '3 months', 'cookie-notice' ), 7862400 ),
'6months' => array( __( '6 months', 'cookie-notice' ), 15811200 ),
'year' => array( __( '1 year', 'cookie-notice' ), 31536000 ),
'infinity' => array( __( 'infinity', 'cookie-notice' ), 2147483647 )
);
$this->effects = array(
'none' => __( 'None', 'cookie-notice' ),
'fade' => __( 'Fade', 'cookie-notice' ),
'slide' => __( 'Slide', 'cookie-notice' )
);
$this->script_placements = array(
'header' => __( 'Header', 'cookie-notice' ),
'footer' => __( 'Footer', 'cookie-notice' ),
);
if ( $this->options['general']['translate'] === true ) {
$this->options['general']['translate'] = false;
$this->options['general']['message_text'] = __( 'We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.', 'cookie-notice' );
$this->options['general']['accept_text'] = __( 'Ok', 'cookie-notice' );
$this->options['general']['refuse_text'] = __( 'No', 'cookie-notice' );
$this->options['general']['revoke_text'] = __( 'Revoke cookies', 'cookie-notice' );
$this->options['general']['see_more_opt']['text'] = __( 'Privacy policy', 'cookie-notice' );
update_option( 'cookie_notice_options', $this->options['general'] );
}
// WPML >= 3.2
if ( defined( 'ICL_SITEPRESS_VERSION' ) && version_compare( ICL_SITEPRESS_VERSION, '3.2', '>=' ) ) {
$this->register_wpml_strings();
// WPML and Polylang compatibility
} elseif ( function_exists( 'icl_register_string' ) ) {
icl_register_string( 'Cookie Notice', 'Message in the notice', $this->options['general']['message_text'] );
icl_register_string( 'Cookie Notice', 'Button text', $this->options['general']['accept_text'] );
icl_register_string( 'Cookie Notice', 'Refuse button text', $this->options['general']['refuse_text'] );
icl_register_string( 'Cookie Notice', 'Revoke button text', $this->options['general']['revoke_text'] );
icl_register_string( 'Cookie Notice', 'Privacy policy text', $this->options['general']['see_more_opt']['text'] );
icl_register_string( 'Cookie Notice', 'Custom link', $this->options['general']['see_more_opt']['link'] );
}
}
/**
* Add new body classes.
*
* @param array $classes Body classes
* @return array
*/
public function change_body_class( $classes ) {
if ( is_admin() )
return $classes;
if ( $this->cookies_set() ) {
$classes[] = 'cookies-set';
if ( $this->cookies_accepted() )
$classes[] = 'cookies-accepted';
else
$classes[] = 'cookies-refused';
} else
$classes[] = 'cookies-not-set';
return $classes;
}
/**
* Register shortcode.
*
* @return void
*/
public function register_shortcode() {
add_shortcode( 'cookies_accepted', array( $this, 'cookies_accepted_shortcode' ) );
add_shortcode( 'cookies_revoke', array( $this, 'cookies_revoke_shortcode' ) );
}
/**
* Register cookies accepted shortcode.
*
* @param array $args
* @param mixed $content
* @return mixed
*/
public function cookies_accepted_shortcode( $args, $content ) {
if ( $this->cookies_accepted() ) {
$scripts = html_entity_decode( trim( wp_kses( $content, $this->get_allowed_html() ) ) );
if ( ! empty( $scripts ) ) {
if ( preg_match_all( '/' . get_shortcode_regex() . '/', $content ) ) {
$scripts = do_shortcode( $scripts );
}
return $scripts;
}
}
return '';
}
/**
* Register cookies accepted shortcode.
*
* @param array $args
* @param mixed $content
* @return mixed
*/
public function cookies_revoke_shortcode( $args, $content ) {
// get options
$options = $this->options['general'];
// defaults
$defaults = array(
'title' => $options['revoke_text'],
'class' => $options['css_class']
);
// combine shortcode arguments
$args = shortcode_atts( $defaults, $args );
// escape class(es)
$args['class'] = esc_attr( $args['class'] );
return '' . esc_html( $args['title'] ) . ' ';
}
/**
* Register WPML (>= 3.2) strings if needed.
*
* @return void
*/
private function register_wpml_strings() {
global $wpdb;
// prepare strings
$strings = array(
'Message in the notice' => $this->options['general']['message_text'],
'Button text' => $this->options['general']['accept_text'],
'Refuse button text' => $this->options['general']['refuse_text'],
'Revoke button text' => $this->options['general']['revoke_text'],
'Privacy policy text' => $this->options['general']['see_more_opt']['text'],
'Custom link' => $this->options['general']['see_more_opt']['link']
);
// get query results
$results = $wpdb->get_col( $wpdb->prepare( "SELECT name FROM " . $wpdb->prefix . "icl_strings WHERE context = %s", 'Cookie Notice' ) );
// check results
foreach( $strings as $string => $value ) {
// string does not exist?
if ( ! in_array( $string, $results, true ) ) {
// register string
do_action( 'wpml_register_single_string', 'Cookie Notice', $string, $value );
}
}
}
/**
* Load textdomain.
*/
public function load_textdomain() {
load_plugin_textdomain( 'cookie-notice', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
/**
* Add submenu.
*/
public function admin_menu_options() {
add_options_page( __( 'Cookie Notice', 'cookie-notice' ), __( 'Cookie Notice', 'cookie-notice' ), apply_filters( 'cn_manage_cookie_notice_cap', 'manage_options' ), 'cookie-notice', array( $this, 'options_page' ) );
}
/**
* Options page output.
*
* @return mixed
*/
public function options_page() {
echo '
' . __( 'Cookie Notice', 'cookie-notice' ) . '
' . __( 'Cookie Notice', 'cookie-notice' ) . ' ' . $this->defaults['version'] . '
' . __( 'Need support?', 'cookie-notice' ) . '
' . sprintf( __( 'If you are having problems with this plugin, please browse it\'s Documentation or talk about them in the Support forum ', 'cookie-notice' ), 'https://www.dfactory.eu/docs/cookie-notice/?utm_source=cookie-notice-settings&utm_medium=link&utm_campaign=docs', 'https://dfactory.eu/support/?utm_source=cookie-notice-settings&utm_medium=link&utm_campaign=support' ) . '
' . __( 'Do you like this plugin?', 'cookie-notice' ) . '
' . sprintf( __( 'Rate it 5 on WordPress.org', 'cookie-notice' ), 'https://wordpress.org/support/plugin/cookie-notice/reviews/?filter=5' ) . ' ' .
sprintf( __( 'Blog about it & link to the plugin page .', 'cookie-notice' ), 'https://dfactory.eu/plugins/cookie-notice?utm_source=cookie-notice-settings&utm_medium=link&utm_campaign=blog-about' ) . ' ' .
sprintf( __( 'Check out our other WordPress plugins .', 'cookie-notice' ), 'https://dfactory.eu/plugins/?utm_source=cookie-notice-settings&utm_medium=link&utm_campaign=other-plugins' ) . '
Created by
';
}
/**
* Regiseter plugin settings.
*/
public function register_settings() {
register_setting( 'cookie_notice_options', 'cookie_notice_options', array( $this, 'validate_options' ) );
// configuration
add_settings_section( 'cookie_notice_configuration', __( 'Configuration', 'cookie-notice' ), array( $this, 'cn_section_configuration' ), 'cookie_notice_options' );
add_settings_field( 'cn_message_text', __( 'Message', 'cookie-notice' ), array( $this, 'cn_message_text' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_accept_text', __( 'Button text', 'cookie-notice' ), array( $this, 'cn_accept_text' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_see_more', __( 'Privacy policy', 'cookie-notice' ), array( $this, 'cn_see_more' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_link_target', __( 'Link target', 'cookie-notice' ), array( $this, 'cn_link_target' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_refuse_opt', __( 'Refuse cookies', 'cookie-notice' ), array( $this, 'cn_refuse_opt' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_revoke_opt', __( 'Revoke cookies', 'cookie-notice' ), array( $this, 'cn_revoke_opt' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_refuse_code', __( 'Script blocking', 'cookie-notice' ), array( $this, 'cn_refuse_code' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_redirection', __( 'Reloading', 'cookie-notice' ), array( $this, 'cn_redirection' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_on_scroll', __( 'On scroll', 'cookie-notice' ), array( $this, 'cn_on_scroll' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_time', __( 'Cookie expiry', 'cookie-notice' ), array( $this, 'cn_time' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_script_placement', __( 'Script placement', 'cookie-notice' ), array( $this, 'cn_script_placement' ), 'cookie_notice_options', 'cookie_notice_configuration' );
add_settings_field( 'cn_deactivation_delete', __( 'Deactivation', 'cookie-notice' ), array( $this, 'cn_deactivation_delete' ), 'cookie_notice_options', 'cookie_notice_configuration' );
// design
add_settings_section( 'cookie_notice_design', __( 'Design', 'cookie-notice' ), array( $this, 'cn_section_design' ), 'cookie_notice_options' );
add_settings_field( 'cn_position', __( 'Position', 'cookie-notice' ), array( $this, 'cn_position' ), 'cookie_notice_options', 'cookie_notice_design' );
add_settings_field( 'cn_hide_effect', __( 'Animation', 'cookie-notice' ), array( $this, 'cn_hide_effect' ), 'cookie_notice_options', 'cookie_notice_design' );
add_settings_field( 'cn_css_style', __( 'Button style', 'cookie-notice' ), array( $this, 'cn_css_style' ), 'cookie_notice_options', 'cookie_notice_design' );
add_settings_field( 'cn_css_class', __( 'Button class', 'cookie-notice' ), array( $this, 'cn_css_class' ), 'cookie_notice_options', 'cookie_notice_design' );
add_settings_field( 'cn_colors', __( 'Colors', 'cookie-notice' ), array( $this, 'cn_colors' ), 'cookie_notice_options', 'cookie_notice_design' );
}
/**
* Section callback: fix for WP < 3.3
*/
public function cn_section_configuration() {}
public function cn_section_design() {}
/**
* Delete plugin data on deactivation.
*/
public function cn_deactivation_delete() {
echo '
options['general']['deactivation_delete'], false ) . '/>' . __( 'Enable if you want all plugin data to be deleted on deactivation.', 'cookie-notice' ) . '
';
}
/**
* Cookie message option.
*/
public function cn_message_text() {
echo '
' . __( 'Enter the cookie notice message.', 'cookie-notice' ) . '
';
}
/**
* Accept cookie label option.
*/
public function cn_accept_text() {
echo '
';
}
/**
* Enable/Disable third party non functional cookies option.
*/
public function cn_refuse_opt() {
echo '
options['general']['refuse_opt'], false ) . ' />' . __( 'Enable to give to the user the possibility to refuse third party non functional cookies.', 'cookie-notice' ) . '
options['general']['refuse_opt'] === 'no' ? ' style="display: none;"' : '' ) . '>
';
}
/**
* Non functional cookies code.
*/
public function cn_refuse_code() {
$allowed_html = $this->get_allowed_html();
$active = ! empty( $this->options['general']['refuse_code'] ) && empty( $this->options['general']['refuse_code_head'] ) ? 'body' : 'head';
echo '
' . __( 'The code to be used in your site header, before the closing head tag.', 'cookie-notice' ) . '
' . __( 'The code to be used in your site footer, before the closing body tag.', 'cookie-notice' ) . '
' . __( 'Enter non functional cookies Javascript code here (for e.g. Google Analitycs) to be used after cookies are accepted.', 'cookie-notice' ) . '' . __( 'To get the cookie notice status use cn_cookies_accepted() function.', 'cookie-notice' ) . '
';
}
/**
* Revoke cookies option.
*/
public function cn_revoke_opt() {
echo '
options['general']['revoke_cookies'], false ) . ' />' . __( 'Enable to give to the user the possibility to revoke their cookie consent (requires "Refuse cookies" option enabled) .', 'cookie-notice' ) . '
';
}
/**
* Redirection on cookie accept.
*/
public function cn_redirection() {
echo '
options['general']['redirection'], false ) . ' />' . __( 'Enable to reload the page after cookies are accepted.', 'cookie-notice' ) . '
';
}
/**
* Privacy policy link option.
*/
public function cn_see_more() {
$pages = get_pages(
array(
'sort_order' => 'ASC',
'sort_column' => 'post_title',
'hierarchical' => 0,
'child_of' => 0,
'parent' => -1,
'offset' => 0,
'post_type' => 'page',
'post_status' => 'publish'
)
);
echo '
options['general']['see_more'], false ) . ' />' . __( 'Enable privacy policy link.', 'cookie-notice' ) . '
' . sprintf( __( 'Need a Cookie Policy? Generate one with iubenda .', 'cookie-notice' ), 'http://iubenda.refr.cc/MXRWXMP' ) . '
options['general']['see_more'] === 'no' ? ' style="display: none;"' : '') . '>
' . __( 'The text of the privacy policy button.', 'cookie-notice' ) . '
';
foreach ( $this->links as $value => $label ) {
$value = esc_attr( $value );
echo '
options['general']['see_more_opt']['link_type'], false ) . ' />' . esc_html( $label ) . ' ';
}
echo '
' . __( 'Select where to redirect user for more information about cookies.', 'cookie-notice' ) . '
options['general']['see_more_opt']['link_type'] === 'custom' ? ' style="display: none;"' : '') . '>
options['general']['see_more_opt']['id'], false ) . '>' . __( '-- select page --', 'cookie-notice' ) . ' ';
if ( $pages ) {
foreach ( $pages as $page ) {
echo '
ID, $this->options['general']['see_more_opt']['id'], false ) . '>' . esc_html( $page->post_title ) . ' ';
}
}
echo '
' . __( 'Select from one of your site\'s pages.', 'cookie-notice' ) . '
';
global $wp_version;
if ( version_compare( $wp_version, '4.9.6', '>=' ) ) {
echo '
options['general']['see_more_opt']['sync'], false ) . ' />' . __( 'Synchronize with WordPress Privacy Policy page.', 'cookie-notice' ) . '';
}
echo '
';
}
/**
* Link target option.
*/
public function cn_link_target() {
echo '
';
foreach ( $this->link_target as $target ) {
echo '
options['general']['link_target'] ) . '>' . esc_html( $target ) . ' ';
}
echo '
' . __( 'Select the privacy policy link target.', 'cookie-notice' ) . '
';
}
/**
* Expiration time option.
*/
public function cn_time() {
echo '
';
foreach ( $this->times as $time => $arr ) {
$time = esc_attr( $time );
echo '
options['general']['time'] ) . '>' . esc_html( $arr[0] ) . ' ';
}
echo '
' . __( 'The amount of time that cookie should be stored for.', 'cookie-notice' ) . '
';
}
/**
* Script placement option.
*/
public function cn_script_placement() {
echo '
';
foreach ( $this->script_placements as $value => $label ) {
echo '
options['general']['script_placement'], false ) . ' />' . esc_html( $label ) . ' ';
}
echo '
' . __( 'Select where all the plugin scripts should be placed.', 'cookie-notice' ) . '
';
}
/**
* Position option.
*/
public function cn_position() {
echo '
';
foreach ( $this->positions as $value => $label ) {
$value = esc_attr( $value );
echo '
options['general']['position'], false ) . ' />' . esc_html( $label ) . '';
}
echo '
' . __( 'Select location for your cookie notice.', 'cookie-notice' ) . '
';
}
/**
* Animation effect option.
*/
public function cn_hide_effect() {
echo '
';
foreach ( $this->effects as $value => $label ) {
$value = esc_attr( $value );
echo '
options['general']['hide_effect'], false ) . ' />' . esc_html( $label ) . '';
}
echo '
' . __( 'Cookie notice acceptance animation.', 'cookie-notice' ) . '
';
}
/**
* On scroll option.
*/
public function cn_on_scroll() {
echo '
options['general']['on_scroll'], false ) . ' />' . __( 'Enable cookie notice acceptance when users scroll.', 'cookie-notice' ) . '
';
}
/**
* CSS style option.
*/
public function cn_css_style() {
echo '
';
foreach ( $this->styles as $value => $label ) {
$value = esc_attr( $value );
echo '
options['general']['css_style'], false ) . ' />' . esc_html( $label ) . '';
}
echo '
' . __( 'Choose buttons style.', 'cookie-notice' ) . '
';
}
/**
* CSS style option.
*/
public function cn_css_class() {
echo '
';
}
/**
* Colors option.
*/
public function cn_colors() {
echo '
';
foreach ( $this->colors as $value => $label ) {
$value = esc_attr( $value );
echo '
' . esc_html( $label ) . '
' .
'
';
}
echo '
';
}
/**
* Validate options.
*
* @param array $input
* @return array
*/
public function validate_options( $input ) {
if ( ! check_admin_referer( 'cookie_notice_options-options') )
return $input;
if ( ! current_user_can( apply_filters( 'cn_manage_cookie_notice_cap', 'manage_options' ) ) )
return $input;
if ( isset( $_POST['save_cookie_notice_options'] ) ) {
// position
$input['position'] = sanitize_text_field( isset( $input['position'] ) && in_array( $input['position'], array_keys( $this->positions ) ) ? $input['position'] : $this->defaults['general']['position'] );
// colors
$input['colors']['text'] = sanitize_text_field( isset( $input['colors']['text'] ) && $input['colors']['text'] !== '' && preg_match( '/^#[a-f0-9]{6}$/', $input['colors']['text'] ) === 1 ? $input['colors']['text'] : $this->defaults['general']['colors']['text'] );
$input['colors']['bar'] = sanitize_text_field( isset( $input['colors']['bar'] ) && $input['colors']['bar'] !== '' && preg_match( '/^#[a-f0-9]{6}$/', $input['colors']['bar'] ) === 1 ? $input['colors']['bar'] : $this->defaults['general']['colors']['bar'] );
// texts
$input['message_text'] = wp_kses_post( isset( $input['message_text'] ) && $input['message_text'] !== '' ? $input['message_text'] : $this->defaults['general']['message_text'] );
$input['accept_text'] = sanitize_text_field( isset( $input['accept_text'] ) && $input['accept_text'] !== '' ? $input['accept_text'] : $this->defaults['general']['accept_text'] );
$input['refuse_text'] = sanitize_text_field( isset( $input['refuse_text'] ) && $input['refuse_text'] !== '' ? $input['refuse_text'] : $this->defaults['general']['refuse_text'] );
$input['revoke_text'] = sanitize_text_field( isset( $input['revoke_text'] ) && $input['revoke_text'] !== '' ? $input['revoke_text'] : $this->defaults['general']['revoke_text'] );
$input['refuse_opt'] = (bool) isset( $input['refuse_opt'] ) ? 'yes' : 'no';
$input['revoke_cookies'] = isset( $input['revoke_cookies'] );
$input['revoke_cookies_opt'] = isset( $input['revoke_cookies_opt'] ) && array_key_exists( $input['revoke_cookies_opt'], $this->revoke_opts ) ? $input['revoke_cookies_opt'] : $this->defaults['general']['revoke_cookies_opt'];
// get allowed HTML
$allowed_html = $this->get_allowed_html();
// body refuse code
$input['refuse_code'] = wp_kses( isset( $input['refuse_code'] ) && $input['refuse_code'] !== '' ? $input['refuse_code'] : $this->defaults['general']['refuse_code'], $allowed_html );
// head refuse code
$input['refuse_code_head'] = wp_kses( isset( $input['refuse_code_head'] ) && $input['refuse_code_head'] !== '' ? $input['refuse_code_head'] : $this->defaults['general']['refuse_code_head'], $allowed_html );
// css button style
$input['css_style'] = sanitize_text_field( isset( $input['css_style'] ) && in_array( $input['css_style'], array_keys( $this->styles ) ) ? $input['css_style'] : $this->defaults['general']['css_style'] );
// css button class
$input['css_class'] = sanitize_text_field( isset( $input['css_class'] ) ? $input['css_class'] : $this->defaults['general']['css_class'] );
// link target
$input['link_target'] = sanitize_text_field( isset( $input['link_target'] ) && in_array( $input['link_target'], array_keys( $this->link_target ) ) ? $input['link_target'] : $this->defaults['general']['link_target'] );
// time
$input['time'] = sanitize_text_field( isset( $input['time'] ) && in_array( $input['time'], array_keys( $this->times ) ) ? $input['time'] : $this->defaults['general']['time'] );
// script placement
$input['script_placement'] = sanitize_text_field( isset( $input['script_placement'] ) && in_array( $input['script_placement'], array_keys( $this->script_placements ) ) ? $input['script_placement'] : $this->defaults['general']['script_placement'] );
// hide effect
$input['hide_effect'] = sanitize_text_field( isset( $input['hide_effect'] ) && in_array( $input['hide_effect'], array_keys( $this->effects ) ) ? $input['hide_effect'] : $this->defaults['general']['hide_effect'] );
// on scroll
$input['on_scroll'] = (bool) isset( $input['on_scroll'] ) ? 'yes' : 'no';
// on scroll
$input['redirection'] = isset( $input['redirection'] );
// on scroll offset
$input['on_scroll_offset'] = absint( isset( $input['on_scroll_offset'] ) && $input['on_scroll_offset'] !== '' ? $input['on_scroll_offset'] : $this->defaults['general']['on_scroll_offset'] );
// deactivation
$input['deactivation_delete'] = (bool) isset( $input['deactivation_delete'] ) ? 'yes' : 'no';
// privacy policy
$input['see_more'] = (bool) isset( $input['see_more'] ) ? 'yes' : 'no';
$input['see_more_opt']['text'] = sanitize_text_field( isset( $input['see_more_opt']['text'] ) && $input['see_more_opt']['text'] !== '' ? $input['see_more_opt']['text'] : $this->defaults['general']['see_more_opt']['text'] );
$input['see_more_opt']['link_type'] = sanitize_text_field( isset( $input['see_more_opt']['link_type'] ) && in_array( $input['see_more_opt']['link_type'], array_keys( $this->links ) ) ? $input['see_more_opt']['link_type'] : $this->defaults['general']['see_more_opt']['link_type'] );
if ( $input['see_more_opt']['link_type'] === 'custom' )
$input['see_more_opt']['link'] = esc_url( $input['see_more'] === 'yes' ? $input['see_more_opt']['link'] : 'empty' );
elseif ( $input['see_more_opt']['link_type'] === 'page' ) {
$input['see_more_opt']['id'] = ( $input['see_more'] === 'yes' ? (int) $input['see_more_opt']['id'] : 'empty' );
$input['see_more_opt']['sync'] = isset( $input['see_more_opt']['sync'] );
if ( $input['see_more_opt']['sync'] )
update_option( 'wp_page_for_privacy_policy', $input['see_more_opt']['id'] );
}
$input['translate'] = false;
// WPML >= 3.2
if ( defined( 'ICL_SITEPRESS_VERSION' ) && version_compare( ICL_SITEPRESS_VERSION, '3.2', '>=' ) ) {
do_action( 'wpml_register_single_string', 'Cookie Notice', 'Message in the notice', $input['message_text'] );
do_action( 'wpml_register_single_string', 'Cookie Notice', 'Button text', $input['accept_text'] );
do_action( 'wpml_register_single_string', 'Cookie Notice', 'Refuse button text', $input['refuse_text'] );
do_action( 'wpml_register_single_string', 'Cookie Notice', 'Revoke button text', $input['revoke_text'] );
do_action( 'wpml_register_single_string', 'Cookie Notice', 'Privacy policy text', $input['see_more_opt']['text'] );
if ( $input['see_more_opt']['link_type'] === 'custom' )
do_action( 'wpml_register_single_string', 'Cookie Notice', 'Custom link', $input['see_more_opt']['link'] );
}
} elseif ( isset( $_POST['reset_cookie_notice_options'] ) ) {
$input = $this->defaults['general'];
add_settings_error( 'reset_cookie_notice_options', 'reset_cookie_notice_options', __( 'Settings restored to defaults.', 'cookie-notice' ), 'updated' );
}
return $input;
}
/**
* Cookie notice output.
*
* @return mixed
*/
public function add_cookie_notice() {
if ( ! $this->cookies_set() || $this->options['general']['refuse_opt'] === 'yes' ) {
// WPML >= 3.2
if ( defined( 'ICL_SITEPRESS_VERSION' ) && version_compare( ICL_SITEPRESS_VERSION, '3.2', '>=' ) ) {
$this->options['general']['message_text'] = apply_filters( 'wpml_translate_single_string', $this->options['general']['message_text'], 'Cookie Notice', 'Message in the notice' );
$this->options['general']['accept_text'] = apply_filters( 'wpml_translate_single_string', $this->options['general']['accept_text'], 'Cookie Notice', 'Button text' );
$this->options['general']['refuse_text'] = apply_filters( 'wpml_translate_single_string', $this->options['general']['refuse_text'], 'Cookie Notice', 'Refuse button text' );
$this->options['general']['revoke_text'] = apply_filters( 'wpml_translate_single_string', $this->options['general']['revoke_text'], 'Cookie Notice', 'Revoke button text' );
$this->options['general']['see_more_opt']['text'] = apply_filters( 'wpml_translate_single_string', $this->options['general']['see_more_opt']['text'], 'Cookie Notice', 'Privacy policy text' );
$this->options['general']['see_more_opt']['link'] = apply_filters( 'wpml_translate_single_string', $this->options['general']['see_more_opt']['link'], 'Cookie Notice', 'Custom link' );
// WPML and Polylang compatibility
} elseif ( function_exists( 'icl_t' ) ) {
$this->options['general']['message_text'] = icl_t( 'Cookie Notice', 'Message in the notice', $this->options['general']['message_text'] );
$this->options['general']['accept_text'] = icl_t( 'Cookie Notice', 'Button text', $this->options['general']['accept_text'] );
$this->options['general']['refuse_text'] = icl_t( 'Cookie Notice', 'Refuse button text', $this->options['general']['refuse_text'] );
$this->options['general']['revoke_text'] = icl_t( 'Cookie Notice', 'Revoke button text', $this->options['general']['revoke_text'] );
$this->options['general']['see_more_opt']['text'] = icl_t( 'Cookie Notice', 'Privacy policy text', $this->options['general']['see_more_opt']['text'] );
$this->options['general']['see_more_opt']['link'] = icl_t( 'Cookie Notice', 'Custom link', $this->options['general']['see_more_opt']['link'] );
}
if ( function_exists( 'icl_object_id' ) )
$this->options['general']['see_more_opt']['id'] = icl_object_id( $this->options['general']['see_more_opt']['id'], 'page', true );
// get cookie container args
$options = apply_filters( 'cn_cookie_notice_args', array(
'position' => $this->options['general']['position'],
'css_style' => $this->options['general']['css_style'],
'css_class' => $this->options['general']['css_class'],
'button_class' => 'cn-button',
'colors' => $this->options['general']['colors'],
'message_text' => $this->options['general']['message_text'],
'accept_text' => $this->options['general']['accept_text'],
'refuse_text' => $this->options['general']['refuse_text'],
'revoke_text' => $this->options['general']['revoke_text'],
'refuse_opt' => $this->options['general']['refuse_opt'],
'see_more' => $this->options['general']['see_more'],
'see_more_opt' => $this->options['general']['see_more_opt'],
'link_target' => $this->options['general']['link_target'],
) );
$options['css_class'] = esc_attr( $options['css_class'] );
// message output
$output = '
'
. '
' . ( $options['refuse_opt'] === 'yes' ? '
' : '' ) . '
';
echo apply_filters( 'cn_cookie_notice_output', $output, $options );
}
}
/**
* Check if cookies are accepted.
*
* @return bool
*/
public static function cookies_accepted() {
return apply_filters( 'cn_is_cookie_accepted', isset( $_COOKIE['cookie_notice_accepted'] ) && $_COOKIE['cookie_notice_accepted'] === 'true' );
}
/**
* Check if cookies are set.
*
* @return boolean Whether cookies are set
*/
public function cookies_set() {
return apply_filters( 'cn_is_cookie_set', isset( $_COOKIE['cookie_notice_accepted'] ) );
}
/**
* Add WP Super Cache cookie.
*/
public function wpsc_add_cookie() {
do_action( 'wpsc_add_cookie', 'cookie_notice_accepted' );
}
/**
* Delete WP Super Cache cookie.
*/
public function wpsc_delete_cookie() {
do_action( 'wpsc_delete_cookie', 'cookie_notice_accepted' );
}
/**
* Get default settings.
*/
public function get_defaults() {
return $this->defaults;
}
/**
* Add links to support forum.
*
* @param array $links
* @param string $file
* @return array
*/
public function plugin_row_meta( $links, $file ) {
if ( ! current_user_can( apply_filters( 'cn_manage_cookie_notice_cap', 'manage_options' ) ) )
return $links;
if ( $file == plugin_basename( __FILE__ ) )
return array_merge( $links, array( sprintf( '%s ', __( 'Support', 'cookie-notice' ) ) ) );
return $links;
}
/**
* Add links to settings page.
*
* @param array $links
* @param string $file
* @return array
*/
public function plugin_action_links( $links, $file ) {
if ( ! current_user_can( apply_filters( 'cn_manage_cookie_notice_cap', 'manage_options' ) ) )
return $links;
if ( $file == plugin_basename( __FILE__ ) )
array_unshift( $links, sprintf( '%s ', admin_url( 'options-general.php?page=cookie-notice' ), __( 'Settings', 'cookie-notice' ) ) );
return $links;
}
/**
* Activate the plugin.
*/
public function activation() {
add_option( 'cookie_notice_options', $this->defaults['general'], '', 'no' );
add_option( 'cookie_notice_version', $this->defaults['version'], '', 'no' );
}
/**
* Deactivate the plugin.
*/
public function deactivation() {
if ( $this->options['general']['deactivation_delete'] === 'yes' ) {
delete_option( 'cookie_notice_options' );
delete_option( 'cookie_notice_version' );
}
// remove WP Super Cache cookie
$this->wpsc_delete_cookie();
}
/**
* Get allowed script blocking HTML.
*
* @return array
*/
public function get_allowed_html() {
return apply_filters(
'cn_refuse_code_allowed_html',
array_merge(
wp_kses_allowed_html( 'post' ),
array(
'script' => array(
'type' => array(),
'src' => array(),
'charset' => array(),
'async' => array()
),
'noscript' => array(),
'style' => array(
'type' => array()
),
'iframe' => array(
'src' => array(),
'height' => array(),
'width' => array(),
'frameborder' => array(),
'allowfullscreen' => array()
)
)
)
);
}
/**
* Load scripts and styles - admin.
*/
public function admin_enqueue_scripts( $page ) {
if ( $page !== 'settings_page_cookie-notice' )
return;
wp_enqueue_script(
'cookie-notice-admin', plugins_url( 'js/admin' . ( ! ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', __FILE__ ), array( 'jquery', 'wp-color-picker' ), $this->defaults['version']
);
wp_localize_script(
'cookie-notice-admin', 'cnArgs', array(
'resetToDefaults' => __( 'Are you sure you want to reset these settings to defaults?', 'cookie-notice' )
)
);
wp_enqueue_style( 'wp-color-picker' );
wp_enqueue_style( 'cookie-notice-admin', plugins_url( 'css/admin' . ( ! ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '.min' : '' ) . '.css', __FILE__ ) );
}
/**
* Load scripts and styles - frontend.
*/
public function wp_enqueue_scripts() {
wp_enqueue_script(
'cookie-notice-front', plugins_url( 'js/front' . ( ! ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '.min' : '' ) . '.js', __FILE__ ), array( 'jquery' ), $this->defaults['version'], isset( $this->options['general']['script_placement'] ) && $this->options['general']['script_placement'] === 'footer' ? true : false
);
wp_localize_script(
'cookie-notice-front',
'cnArgs',
array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'hideEffect' => $this->options['general']['hide_effect'],
'onScroll' => $this->options['general']['on_scroll'],
'onScrollOffset' => $this->options['general']['on_scroll_offset'],
'cookieName' => 'cookie_notice_accepted',
'cookieValue' => 'true',
'cookieTime' => $this->times[$this->options['general']['time']][1],
'cookiePath' => ( defined( 'COOKIEPATH' ) ? COOKIEPATH : '' ),
'cookieDomain' => ( defined( 'COOKIE_DOMAIN' ) ? COOKIE_DOMAIN : '' ),
'redirection' => $this->options['general']['redirection'],
'cache' => defined( 'WP_CACHE' ) && WP_CACHE,
'refuse' => $this->options['general']['refuse_opt'],
'revoke_cookies' => (int) $this->options['general']['revoke_cookies'],
'revoke_cookies_opt' => $this->options['general']['revoke_cookies_opt'],
'secure' => (int) is_ssl()
)
);
wp_enqueue_style( 'cookie-notice-front', plugins_url( 'css/front' . ( ! ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '.min' : '' ) . '.css', __FILE__ ) );
}
/**
* Print non functional JavaScript in body.
*
* @return mixed
*/
public function wp_print_footer_scripts() {
if ( $this->cookies_accepted() ) {
$scripts = apply_filters( 'cn_refuse_code_scripts_html', html_entity_decode( trim( wp_kses( $this->options['general']['refuse_code'], $this->get_allowed_html() ) ) ) );
if ( ! empty( $scripts ) )
echo $scripts;
}
}
/**
* Print non functional JavaScript in header.
*
* @return mixed
*/
public function wp_print_header_scripts() {
if ( $this->cookies_accepted() ) {
$scripts = apply_filters( 'cn_refuse_code_scripts_html', html_entity_decode( trim( wp_kses( $this->options['general']['refuse_code_head'], $this->get_allowed_html() ) ) ) );
if ( ! empty( $scripts ) )
echo $scripts;
}
}
}