*/ define ('SB_VERSION', '3.0.4'); register_activation_hook( __FILE__, 'simple_banner_activate' ); function simple_banner_activate() { add_action('admin_menu', 'simple_banner_menu'); } // Disabled Pages/Posts functions function get_disabled_pages_array($banner_id) { return array_filter(explode(',', get_option('disabled_pages_array' . $banner_id))); } function get_post_object() { return get_posts(array('include' => array(get_the_ID()))); } function get_is_current_page_a_post() { return !empty(get_post_object()); } function get_disabled_on_posts($banner_id) { return get_option('disabled_on_posts' . $banner_id); } function get_is_removed_before_date($banner_id) { $start_after_date = get_option('simple_banner_start_after_date' . $banner_id); if (!$start_after_date) return false; $curr_date = new DateTime('now', new DateTimeZone('UTC')); $start_date = new DateTime($start_after_date); // Compare the dates if ($curr_date < $start_date) { return true; } return false; } function get_is_removed_after_date($banner_id) { $remove_after_date = get_option('simple_banner_remove_after_date' . $banner_id); if (!$remove_after_date) return false; $curr_date = new DateTime('now', new DateTimeZone('UTC')); $end_date = new DateTime($remove_after_date); // Compare the dates if ($curr_date > $end_date) { return true; } return false; } function get_disabled_on_current_page($banner_id) { $disabled_on_current_page = (!empty(get_disabled_pages_array($banner_id)) && in_array(get_the_ID(), get_disabled_pages_array($banner_id))) || (get_disabled_on_posts($banner_id) && get_is_current_page_a_post()) || get_is_removed_before_date($banner_id) || get_is_removed_after_date($banner_id); return $disabled_on_current_page; } add_action( 'wp_enqueue_scripts', 'simple_banner' ); function simple_banner() { // Enqueue the style wp_register_style('simple-banner-style', plugin_dir_url( __FILE__ ) .'simple-banner.css', '', SB_VERSION); wp_enqueue_style('simple-banner-style'); // Set Script parameters $script_params = array( // General settings 'pro_version_enabled' => get_option('pro_version_enabled'), // debug specific parameters 'debug_mode' => get_option('simple_banner_debug_mode'), 'id' => get_the_ID(), 'version' => SB_VERSION, ); $banner_params = array(); for ($i = 1; $i <= get_num_banners(); $i++) { $banner_id = get_banner_id($i); $disabled_on_current_page = get_disabled_on_current_page($banner_id); $banner_params[] = array( 'hide_simple_banner' => get_option('hide_simple_banner' . $banner_id), 'simple_banner_prepend_element' => get_option('simple_banner_prepend_element' . $banner_id), 'simple_banner_position' => get_option('simple_banner_position' . $banner_id), 'header_margin' => $i === 1 ? get_option('header_margin' . $banner_id) : '', 'header_padding' => $i === 1 ? get_option('header_padding' . $banner_id) : '', 'wp_body_open_enabled' => $i === 1 ? get_option('wp_body_open_enabled' . $banner_id) : '', 'wp_body_open' => function_exists('wp_body_open'), 'simple_banner_z_index' => get_option('simple_banner_z_index' . $banner_id), 'simple_banner_text' => get_option('simple_banner_text' . $banner_id), 'disabled_on_current_page' => $disabled_on_current_page, 'disabled_pages_array' => get_disabled_pages_array($banner_id), 'is_current_page_a_post' => get_is_current_page_a_post(), 'disabled_on_posts' => get_disabled_on_posts($banner_id), 'simple_banner_disabled_page_paths' => get_option('simple_banner_disabled_page_paths' . $banner_id), 'simple_banner_font_size' => get_option('simple_banner_font_size' . $banner_id), 'simple_banner_color' => get_option('simple_banner_color' . $banner_id), 'simple_banner_text_color' => get_option('simple_banner_text_color' . $banner_id), 'simple_banner_link_color' => get_option('simple_banner_link_color' . $banner_id), 'simple_banner_close_color' => get_option('simple_banner_close_color' . $banner_id), 'simple_banner_text' => $disabled_on_current_page ? '' : get_option('simple_banner_text' . $banner_id), 'simple_banner_custom_css' => get_option('simple_banner_custom_css' . $banner_id), 'simple_banner_scrolling_custom_css' => get_option('simple_banner_scrolling_custom_css' . $banner_id), 'simple_banner_text_custom_css' => get_option('simple_banner_text_custom_css' . $banner_id), 'simple_banner_button_css' => get_option('simple_banner_button_css' . $banner_id), 'site_custom_css' => get_option('site_custom_css' . $banner_id), 'keep_site_custom_css' => get_option('keep_site_custom_css' . $banner_id), 'site_custom_js' => get_option('site_custom_js' . $banner_id), 'keep_site_custom_js' => get_option('keep_site_custom_js' . $banner_id), 'close_button_enabled' => get_option('close_button_enabled' . $banner_id), 'close_button_expiration' => get_option('close_button_expiration' . $banner_id), 'close_button_cookie_set' => isset($_COOKIE['simplebannerclosed' . $banner_id]), 'current_date' => new DateTime('now', new DateTimeZone('UTC')), 'start_date' => new DateTime(get_option('simple_banner_start_after_date' . $banner_id)), 'end_date' => new DateTime(get_option('simple_banner_remove_after_date' . $banner_id)), 'simple_banner_start_after_date' => get_option('simple_banner_start_after_date' . $banner_id), 'simple_banner_remove_after_date' => get_option('simple_banner_remove_after_date' . $banner_id), 'simple_banner_insert_inside_element' => get_option('simple_banner_insert_inside_element' . $banner_id), ); } $script_params['banner_params'] = $banner_params; // Enqueue the script wp_register_script('simple-banner-script', plugin_dir_url( __FILE__ ) . 'simple-banner.js', array( 'jquery' ), SB_VERSION); wp_add_inline_script('simple-banner-script', 'const simpleBannerScriptParams = ' . wp_json_encode($script_params), 'before'); wp_enqueue_script('simple-banner-script'); } // Use `wp_body_open` action // For now only enabled on Banner #1 if ( function_exists( 'wp_body_open' ) && get_option('wp_body_open_enabled') ) { add_action( 'wp_body_open', 'simple_banner_body_open' ); } function simple_banner_body_open() { // Forcing the banner id concept for refactoring later with multiple ids $banner_id = get_banner_id(1); // if not disabled use wp_body_open $disabled_on_current_page = get_disabled_on_current_page($banner_id); $close_button_enabled = get_option('close_button_enabled' . $banner_id); $closed_cookie = $close_button_enabled && isset($_COOKIE['simplebannerclosed']); $closed_button = $close_button_enabled ? '' : ''; if (!$disabled_on_current_page && !$closed_cookie) { echo '
'; } } // Prevent CSS removal from optimizer plugins by putting a dummy item in the DOM add_action( 'wp_footer', 'prevent_css_removal'); function prevent_css_removal(){ echo ''; } // Add custom CSS/JS add_action( 'wp_head', 'simple_banner_custom_options'); function simple_banner_custom_options() { $pro_enabled = get_option('pro_version_enabled'); for ($i = 1; $i <= get_num_banners(); $i++) { // TODO: Make this all one script $banner_id = get_banner_id($i); $closed_cookie = get_option('close_button_enabled' . $banner_id) && isset($_COOKIE['simplebannerclosed' . $banner_id]); $disabled_on_current_page = get_disabled_on_current_page($banner_id); $banner_is_disabled = $disabled_on_current_page || get_option('hide_simple_banner' . $banner_id) == "yes"; if ($banner_is_disabled || $closed_cookie){ echo ''; } if ($i === 1 && !$banner_is_disabled && !$closed_cookie && get_option('header_margin' . $banner_id) != ""){ echo ''; } if ($i === 1 && !$banner_is_disabled && !$closed_cookie && get_option('header_padding' . $banner_id) != ""){ echo ''; } if (get_option('simple_banner_position' . $banner_id) != ""){ if (get_option('simple_banner_position' . $banner_id) == 'footer'){ echo ''; } else { echo ''; } } if (get_option('simple_banner_font_size' . $banner_id) != ""){ echo ''; } if (get_option('simple_banner_color' . $banner_id) != ""){ echo ''; } else { echo ''; } if (get_option('simple_banner_text_color' . $banner_id) != ""){ echo ''; } else { echo ''; } if (get_option('simple_banner_link_color' . $banner_id) != ""){ echo ''; } else { echo ''; } if (get_option('simple_banner_z_index' . $banner_id) != ""){ echo ''; } else { echo ''; } if (get_option('simple_banner_close_color' . $banner_id) != ""){ echo ''; } if (get_option('simple_banner_custom_css' . $banner_id) != ""){ echo ''; } if (get_option('simple_banner_scrolling_custom_css'.$banner_id.'' . $banner_id) != ""){ echo ''; } if (get_option('simple_banner_text_custom_css' . $banner_id) != ""){ echo ''; } if (get_option('simple_banner_button_css' . $banner_id) != ""){ echo ''; } $remove_site_custom_css = ($banner_is_disabled || $closed_cookie) && get_option('keep_site_custom_css' . $banner_id) == ""; if (!$remove_site_custom_css && get_option('site_custom_css' . $banner_id) != "" && $pro_enabled) { echo ''; } else if ($i === 1) { // put a dummy element to see if css is being bundled echo ''; } $remove_site_custom_js = ($banner_is_disabled || $closed_cookie) && get_option('keep_site_custom_js' . $banner_id) == ""; if (!$remove_site_custom_js && get_option('site_custom_js' . $banner_id) != "" && $pro_enabled) { echo ''; } else if ($i === 1) { // put a dummy element to see if scripts are being bundled echo ''; } } } add_action('admin_menu', 'simple_banner_menu'); function simple_banner_menu() { $manage_simple_banner = 'manage_simple_banner'; $manage_options = 'manage_options'; $permissions_array = get_option('permissions_array'); // Add permissions for other roles foreach (get_editable_roles() as $role_name => $role_info) { if ( $role_name !== 'administrator') { if (in_array($role_name, explode(",", $permissions_array))) { $add_role = get_role( $role_name ); $add_role->add_cap( $manage_simple_banner ); $add_role->add_cap( $manage_options ); } else { $remove_role = get_role( $role_name ); // only remove capabilities if they were previously added if ($remove_role->has_cap( $manage_simple_banner )){ $remove_role->remove_cap( $manage_simple_banner ); $remove_role->remove_cap( $manage_options ); } } } } add_menu_page('Simple Banner Settings', 'Simple Banner', $manage_options, 'simple-banner-settings', 'simple_banner_settings_page', 'dashicons-megaphone'); } //script input sanitization function function theme_slug_sanitize_js_code($input){ return base64_encode($input); } //output escape function function theme_slug_escape_js_output($input){ return esc_textarea( base64_decode($input) ); } // get number of banners function get_num_banners(){ return get_option('pro_version_enabled') ? 5 : 1; } function get_banner_id($i){ return $i === 1 ? '' : '_' . $i; } add_action( 'admin_init', 'simple_banner_settings' ); function simple_banner_settings() { // Register common settings register_setting( 'simple-banner-settings-group', 'pro_version_activation_code', array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'pro_version_enabled', array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_pro_license_key', array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_debug_mode', array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'permissions_array', array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); // Register banner 1 only settings register_setting( 'simple-banner-settings-group', 'header_margin', array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'header_padding', array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'wp_body_open_enabled', array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); for ($i = 1; $i <= get_num_banners(); $i++) { /** * Settings for first banner will have no suffix for backwards compatibility * and banners added afterwards will have _{NUMBER} */ $banner_id = get_banner_id($i); register_setting( 'simple-banner-settings-group', 'hide_simple_banner' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_prepend_element' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_font_size' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_color' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_text_color' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_link_color' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_close_color' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_text' . $banner_id, array( 'sanitize_callback' => 'wp_kses_post' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_custom_css' . $banner_id, array( 'sanitize_callback' => 'wp_strip_all_tags' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_scrolling_custom_css' . $banner_id, array( 'sanitize_callback' => 'wp_strip_all_tags' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_text_custom_css' . $banner_id, array( 'sanitize_callback' => 'wp_strip_all_tags' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_button_css' . $banner_id, array( 'sanitize_callback' => 'wp_strip_all_tags' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_position' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_z_index' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'disabled_on_posts' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'disabled_pages_array' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'site_custom_css' . $banner_id, array( 'sanitize_callback' => 'wp_strip_all_tags' ) ); register_setting( 'simple-banner-settings-group', 'keep_site_custom_css' . $banner_id, array( 'sanitize_callback' => 'wp_strip_all_tags' ) ); register_setting( 'simple-banner-settings-group', 'site_custom_js' . $banner_id); register_setting( 'simple-banner-settings-group', 'keep_site_custom_js' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'close_button_enabled' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'close_button_expiration' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_start_after_date' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_remove_after_date' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_insert_inside_element' . $banner_id, array( 'sanitize_callback' => 'wp_strip_all_tags' ) ); register_setting( 'simple-banner-settings-group', 'simple_banner_disabled_page_paths' . $banner_id, array( 'sanitize_callback' => 'wp_filter_nohtml_kses' ) ); } } function is_license_verified(){ $license_key = esc_attr( get_option('simple_banner_pro_license_key') ); // null check for license if (!$license_key){ return false; } $is_pro_currently_enabled = esc_attr( get_option('pro_version_enabled') ); $url = 'https://api.gumroad.com/v2/licenses/verify'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); $data = array( 'product_id' => 'vg6aCpxipQHuI5yvYzSVEA==', 'license_key' => $license_key, 'increment_uses_count' => 'false', ); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); // execute request and get response $result = curl_exec($ch); // Keeping for backwards compatibility // This function has no effect. Prior to PHP 8.0.0, this function was used to close the resource. curl_close($ch); // TODO: Figure out what to do with these // also get the error and response code // $errors = curl_error($ch); // $json_errors = json_decode($errors); // gumroad returns a 404 on invalid license code // e.g. {"success":false,"message":"That license does not exist for the provided product."} // $response = curl_getinfo($ch, CURLINFO_HTTP_CODE); $json = json_decode($result); $success = $json->{'success'}; // check if license is active // if error or unknown response return current value if ($success === true) { // now check if cancelled, failed, or ended $subscription_cancelled_at = $json->{'purchase'}->{'subscription_cancelled_at'}; $subscription_failed_at = $json->{'purchase'}->{'subscription_failed_at'}; $subscription_ended_at = $json->{'purchase'}->{'subscription_ended_at'}; $curr_date = new DateTime('now'); if ($subscription_cancelled_at) { $cancelled_date = new DateTime($subscription_cancelled_at); // Compare the dates if ($curr_date > $cancelled_date) { return false; } } if ($subscription_failed_at) { $failed_date = new DateTime($subscription_failed_at); // Compare the dates if ($curr_date > $failed_date) { return false; } } if ($subscription_ended_at) { $ended_date = new DateTime($subscription_ended_at); // Compare the dates if ($curr_date > $ended_date) { return false; } } return true; } else if ($success === false) { return false; } return $is_pro_currently_enabled; } function simple_banner_settings_page() { ?>Links in the banner text must be typed in with HTML <a> tags.
e.g. This is a <a href="http://www.wordpress.com">Link to Wordpress</a>.