* @copyright 2013 WPFront.com */ class WPFront_Notification_Bar_Entity { /** * Notification Bar Enabled. * * @var bool */ public $enabled; /** * Notification Bar Preview Mode. * * @var bool */ public $preview_mode; /** * Notification Bar Debug Mode. * * @var bool */ public $debug_mode; /** * Notification Bar Position. * * @var int */ public $position; /** * Notification Bar Fixed Position. * * @var bool */ public $fixed_position; /** * Notification Bar Theme Sticky Selector. * * @var string */ public $theme_sticky_selector; /** * Notification Bar Display Scroll. * * @var bool */ public $display_scroll; /** * Notification Bar Scroll Offset. * * @var int */ public $display_scroll_offset; /** * Notification Bar Height. * * @var int */ public $height; /** * Notification Bar Position Offset. * * @var int */ public $position_offset; /** * Notification Bar Display After. * * @var int */ public $display_after; /** * Notification Bar Animate Delay. * * @var float */ public $animate_delay; /** * Notification Bar Close Button. * * @var bool */ public $close_button; /** * Notification Bar Auto Close After. * * @var int */ public $auto_close_after; /** * Notification Bar Display Shadow. * * @var bool */ public $display_shadow; /** * Notification Bar Display Reopen Button. * * @var bool */ public $display_open_button; /** * Notification Bar Reopen Button Image URL. * * @var string */ public $reopen_button_image_url; /** * Notification Bar Reopen Button Offset. * * @var int */ public $reopen_button_offset; /** * Notification Bar Keep Closed. * * @var bool */ public $keep_closed; /** * Notification Bar Keep Closed For. * * @var int */ public $keep_closed_for; /** * Notification Bar Keep Closed Cookie Name. * * @var string */ public $keep_closed_cookie_name; /** * Notification Bar Set Max Views. * * @var bool */ public $set_max_views; /** * Notification Bar Max Views. * * @var int */ public $max_views; /** * Notification Bar Max Views For. * * @var int */ public $max_views_for; /** * Notification Bar Max View Cookie Name. * * @var string */ public $max_views_cookie_name; /** * Notification Bar Hide Small Device. * * @var string */ public $hide_small_device; /** * Notification Bar Small Device Max Width. * * @var int */ public $small_device_width; /** * Notification Bar Hide Small Window. * * @var bool */ public $hide_small_window; /** * Notification Bar Small Window Max Width. * * @var int */ public $small_window_width; /** * Notification Bar Attach on Shutdown. * * @var bool */ public $attach_on_shutdown; /** * Notification Bar Full Width Message. * * @var bool */ public $set_full_width_message; /** * Notification Bar Message. * * @var string */ public $message; /** * Notification Bar Process Shortcode. * * @var bool */ public $message_process_shortcode; /** * Notification Bar Display Button. * * @var bool */ public $display_button; /** * Notification Bar Button Text. * * @var string */ public $button_text; /** * Notification Bar Button Action. * * @var int */ public $button_action; /** * Notification Bar Button Action URL. * * @var string */ public $button_action_url; /** * Notification Bar Button Action New Tab. * * @var bool */ public $button_action_new_tab; /** * Notification Bar Button Action No Follow. * * @var bool */ public $button_action_url_nofollow; /** * Notification Bar Button Action No Referrer. * * @var bool */ public $button_action_url_noreferrer; /** * Notification Bar Button Action No Opener. * * @var bool */ public $button_action_url_noopener; /** * Notification Bar Button Action Javascript. * * @var string */ public $button_action_javascript; /** * Notification Bar Close Bar on Button Click. * * @var bool */ public $button_action_close_bar; /** * Notification Bar Bar from Color. * * @var string */ public $bar_from_color; /** * Notification Bar Bar to Color. * * @var string */ public $bar_to_color; /** * Notification Bar Message Color. * * @var string */ public $message_color; /** * Notification Bar Button from Color. * * @var string */ public $button_from_color; /** * Notification Bar Button to Color. * * @var string */ public $button_to_color; /** * Notification Bar Button Text Color. * * @var string */ public $button_text_color; /** * Notification Bar Open Button Color. * * @var string */ public $open_button_color; /** * Notification Bar Close Button Color. * * @var string */ public $close_button_color; /** * Notification Bar Close Button Color Hover. * * @var string */ public $close_button_color_hover; /** * Notification Bar Close Button Color X. * * @var string */ public $close_button_color_x; /** * Notification Bar Filter Date Type. * * @var string */ public $filter_date_type; /** * Notification Bar Start Date. * * @var string */ public $start_date; /** * Notification Bar Start Time. * * @var string */ public $start_time; /** * Notification Bar End Date. * * @var string */ public $end_date; /** * Notification Bar End Time. * * @var string */ public $end_time; /** * Notification Bar Display Pages. * * @var int */ public $display_pages; /** * Notification Bar Include Pages. * * @var string */ public $include_pages; /** * Notification Bar Exclude Pages. * * @var string */ public $exclude_pages; /** * URL contains text in filter settings. * * @var string */ public $filter_url_contains; /** * Notification Bar Landing Page Cookie Name. * * @var string */ public $landingpage_cookie_name; /** * Notification Bar Display Roles. * * @var int */ public $display_roles; /** * Notification Bar Include Roles. * * @var array */ public $include_roles; /** * Notification Bar Emember Integrartion * * @var bool */ public $wp_emember_integration; /** * Notification Bar Dynamic Css Use URL. * * @var bool */ public $dynamic_css_use_url; /** * Notification Bar Custom Class. * * @var string */ public $custom_class; /** * Notification Bar Custom Css. * * @var string */ public $custom_css; /** * Notification Bar CSS Enqueue Footer. * * @var bool */ public $css_enqueue_footer; /** * Notification Bar Last Saved * * @var int */ public $last_saved; public function __construct() { $this->enabled = false; $this->preview_mode = false; $this->debug_mode = false; $this->position = 1; $this->fixed_position = false; $this->theme_sticky_selector = ''; $this->display_scroll = false; $this->display_scroll_offset = 100; $this->height = 0; $this->position_offset = 0; $this->display_after = 1; $this->animate_delay = 0.5; $this->close_button = false; $this->auto_close_after = 0; $this->display_shadow = false; $this->display_open_button = false; $this->reopen_button_offset = 0; $this->reopen_button_image_url = ''; $this->keep_closed = false; $this->keep_closed_for = 0; $this->keep_closed_cookie_name = 'wpfront-notification-bar-keep-closed'; $this->set_max_views = false; $this->max_views = 0; $this->max_views_for = 0; $this->max_views_cookie_name = 'wpfront-notification-bar-max-views'; $this->hide_small_device = 'all'; $this->small_device_width = 640; $this->hide_small_window = false; $this->small_window_width = 640; $this->attach_on_shutdown = false; $this->set_full_width_message = false; $this->set_full_width_message = false; $this->message = ''; $this->message_process_shortcode = false; $this->display_button = false; $this->button_text = ''; $this->button_action_close_bar = false; $this->button_action = 1; $this->button_action_url = ''; $this->button_action_new_tab = false; $this->button_action_url_nofollow = false; $this->button_action_url_noreferrer = false; $this->button_action_url_noopener = true; $this->button_action_javascript = ''; $this->filter_date_type = 'start_end'; $this->start_date = ''; $this->start_time = ''; $this->end_date = ''; $this->end_time = ''; $this->display_pages = 1; $this->include_pages = ''; $this->exclude_pages = ''; $this->filter_url_contains = ''; $this->landingpage_cookie_name = 'wpfront-notification-bar-landingpage'; $this->display_roles = 1; $this->include_roles = []; $this->wp_emember_integration = false; $this->bar_from_color = '#888888'; $this->bar_to_color = '#000000'; $this->message_color = '#ffffff'; $this->button_from_color = '#00b7ea'; $this->button_to_color = '#009ec3'; $this->button_text_color = '#ffffff'; $this->open_button_color = '#00b7ea'; $this->close_button_color = '#555555'; $this->close_button_color_hover = '#aaaaaa'; $this->close_button_color_x = '#000000'; $this->dynamic_css_use_url = false; $this->custom_class = ''; $this->custom_css = ''; $this->css_enqueue_footer = false; $this->last_saved = 0; } /** * Validates Notification Bar Option Data. * * @return void */ public function validate() { $this->enabled = $this->validate_bool($this->enabled); $this->preview_mode = $this->validate_bool($this->preview_mode); $this->debug_mode = $this->validate_bool($this->debug_mode); $this->position = $this->validate_1or2($this->position); $this->fixed_position = $this->validate_bool($this->fixed_position); $this->display_scroll = $this->validate_bool($this->display_scroll); $this->display_scroll_offset = $this->validate_zero_positive($this->display_scroll_offset); $this->height = $this->validate_zero_positive($this->height); $this->position_offset = $this->validate_int($this->position_offset); $this->display_after = $this->validate_zero_positive($this->display_after); $this->animate_delay = $this->validate_float($this->animate_delay); $this->close_button = $this->validate_bool($this->close_button); $this->auto_close_after = $this->validate_zero_positive($this->auto_close_after); $this->display_shadow = $this->validate_bool($this->display_shadow); $this->display_open_button = $this->validate_bool($this->display_open_button); $this->reopen_button_offset = $this->validate_zero_positive($this->reopen_button_offset); $this->reopen_button_image_url = $this->validate_reopen_button_image_url($this->reopen_button_image_url); $this->keep_closed = $this->validate_bool($this->keep_closed); $this->keep_closed_for = $this->validate_zero_positive($this->keep_closed_for); $this->keep_closed_cookie_name = $this->validate_keep_closed_cookie_name($this->keep_closed_cookie_name); $this->set_max_views = $this->validate_bool($this->set_max_views); $this->max_views = $this->validate_zero_positive($this->max_views); $this->max_views_for = $this->validate_zero_positive($this->max_views_for); $this->max_views_cookie_name = $this->validate_max_views_cookie_name($this->max_views_cookie_name); $this->hide_small_device = $this->validate_display_on_devices($this->hide_small_device); $this->small_device_width = $this->validate_zero_positive($this->small_device_width); $this->hide_small_window = $this->validate_bool($this->hide_small_window); $this->small_window_width = $this->validate_zero_positive($this->small_window_width); $this->attach_on_shutdown = $this->validate_bool($this->attach_on_shutdown); $this->set_full_width_message = $this->validate_bool($this->set_full_width_message); $this->message_process_shortcode = $this->validate_bool($this->message_process_shortcode); $this->display_button = $this->validate_bool($this->display_button); $this->button_action = $this->validate_1or2($this->button_action); $this->button_action_url = $this->validate_button_action_url($this->button_action_url); $this->button_action_new_tab = $this->validate_bool($this->button_action_new_tab); $this->button_action_url_nofollow = $this->validate_bool($this->button_action_url_nofollow); $this->button_action_url_noreferrer = $this->validate_bool($this->button_action_url_noreferrer); $this->button_action_url_noopener = $this->validate_bool($this->button_action_url_noopener); $this->button_action_close_bar = $this->validate_bool($this->button_action_close_bar); $this->bar_from_color = $this->validate_color($this->bar_from_color); $this->bar_to_color = $this->validate_color($this->bar_to_color); $this->message_color = $this->validate_color($this->message_color); $this->button_from_color = $this->validate_color($this->button_from_color); $this->button_to_color = $this->validate_color($this->button_to_color); $this->button_text_color = $this->validate_color($this->button_text_color); $this->open_button_color = $this->validate_color($this->open_button_color); $this->close_button_color = $this->validate_color($this->close_button_color); $this->close_button_color_hover = $this->validate_color($this->close_button_color_hover); $this->close_button_color_x = $this->validate_color($this->close_button_color_x); $this->dynamic_css_use_url = $this->validate_bool($this->dynamic_css_use_url); $this->css_enqueue_footer = $this->validate_bool($this->css_enqueue_footer); $this->display_pages = $this->validate_display_pages($this->display_pages); $this->landingpage_cookie_name = $this->validate_landingpage_cookie_name($this->landingpage_cookie_name); $this->filter_date_type = $this->validate_filter_date_type($this->filter_date_type); $this->start_date = $this->validate_date_range($this->start_date); $this->start_time = $this->validate_date_range($this->start_time); $this->end_date = $this->validate_date_range($this->end_date); $this->end_time = $this->validate_date_range($this->end_time); $this->display_roles = $this->validate_display_roles($this->display_roles); $this->include_roles = !is_array($this->include_roles) ? $this->validate_include_roles(wp_unslash($this->include_roles)) : $this->include_roles; //@phpstan-ignore-line $this->wp_emember_integration = $this->validate_bool($this->wp_emember_integration); $this->last_saved = (int)$this->last_saved; $this->message = (string)$this->message; $this->button_text = (string)$this->button_text; $this->button_action_javascript = (string)preg_replace('/<\/script\b[^>]*>/i', '', (string)$this->button_action_javascript); $this->include_pages = sanitize_text_field($this->include_pages); $this->exclude_pages = sanitize_text_field($this->exclude_pages); $this->custom_css = sanitize_textarea_field($this->custom_css); $this->custom_class = sanitize_text_field($this->custom_class); $this->theme_sticky_selector = sanitize_text_field($this->theme_sticky_selector); $this->filter_url_contains = empty($this->filter_url_contains) ? '' : sanitize_text_field($this->filter_url_contains); } /** * Return Notification Bar Option Data. * * @return WPFront_Notification_Bar_Entity $options */ public function get() { $option = new WPFront_Notification_Bar_Entity(); $data = get_option('wpfront-notification-bar-options'); if (empty($data)) { $data = array(); } $keys = array_keys((array)$option); foreach($keys as $p) { if(isset($data[$p])) { $option->$p = $data[$p]; } } $option->validate(); return $option; } /** * Save Notification Bar Option Data. * * @return void */ public function save() { $this->last_saved = time(); $this->validate(); $data = get_option('wpfront-notification-bar-options'); if (empty($data)) { $data = array(); } $values = (array)$this; foreach ($values as $key => $value) { $data[$key] = $value; } update_option('wpfront-notification-bar-options', $data); } /** * Set values from supplied data * * @param object $data * @return void */ public function set_values($data) { foreach ((array)$this as $prop => $value) { if (isset($data->$prop)) { $this->$prop = $data->$prop; } } $this->button_action_url_noopener = !empty($data->button_action_url_noopener); } /** * Returns bool value. * * @param string|bool $arg * @return bool $arg */ protected function validate_bool($arg) { if ($arg === 'false') { return false; } return (bool)$arg; } /** * Return integer value 1 or 2. * * @param mixed $arg * @return int<1, 2> $arg. */ protected function validate_1or2($arg) { $arg = (int)$arg; if ($arg < 1) { return 1; } if ($arg > 2) { return 2; } return $arg; } /** * Returns zero or positive value. * * @param mixed $arg * @return int<0, max> $arg */ protected function validate_zero_positive($arg) { $arg = (int)$arg; if ($arg < 0) { return 0; } return $arg; } /** * Return integer value. * * @param mixed $arg * @return int $arg */ protected function validate_int($arg) { return (int)$arg; } /** * Return float value. * * @param mixed $arg * @return float $arg */ protected function validate_float($arg) { $arg = (float)$arg; if ($arg < 0) { return 0; } return $arg; } /** * Returns Clean URL. * * @param string $arg * @return string */ protected function validate_reopen_button_image_url($arg) { $arg = (string)$arg; return esc_url_raw($arg); } /** * Returns Cookie Name. * * @param string $arg * @return string */ protected function validate_keep_closed_cookie_name($arg) { $arg = (string)$arg; $arg = sanitize_key($arg); if (empty($arg) || trim($arg) == '') { return 'wpfront-notification-bar-keep-closed'; } return $arg; } /** * Returns Cookie Name. * * @param string $arg * @return string */ protected function validate_max_views_cookie_name($arg) { $arg = (string)$arg; $arg = sanitize_key($arg); if (empty($arg) || trim($arg) == '') { return 'wpfront-notification-bar-max-views'; } return $arg; } /** * Returns Display Device Option. * * @param string $arg * @return string $arg */ protected function validate_display_on_devices($arg) { $arg = (string)$arg; if ($arg == 'on') { return 'large'; } if ($arg == 'small' || $arg == 'large') { return $arg; } return 'all'; } /** * Return Color in Hex Format. * * @param string $arg * @return string */ protected function validate_color($arg) { $arg = (string)$arg; $arg = sanitize_hex_color($arg); if (empty($arg)) { return '#ffffff'; } return $arg; } /** * Returns Clean URL. * * @param string $arg * @return string */ protected function validate_button_action_url($arg) { $arg = (string)$arg; return esc_url_raw($arg); } /** * Returns Display Pages Option. * * @param mixed $arg * @return int $arg */ protected function validate_display_pages($arg) { $arg = (int)$arg; if ($arg < 1) { return 1; } if ($arg > 5) { return 5; } return $arg; } /** * Returns Cookie Name. * * @param string $arg * @return string */ protected function validate_landingpage_cookie_name($arg) { $arg = (string)$arg; $arg = sanitize_key($arg); if (empty($arg) || trim($arg) == '') { return 'wpfront-notification-bar-landingpage'; } return $arg; } /** * Returns Date. * * @param string $arg * @return string|null */ protected function validate_date_range($arg) { if (empty($arg) || trim($arg) == '') { return NULL; } if (strtotime($arg) === false) { return NULL; } return $arg; } /** * Return integer value in range of 1 to 4. * * @param int $arg * @return int<1, 4> $arg. */ protected function validate_display_roles($arg) { $arg = (int)$arg; if ($arg < 1) { return 1; } if ($arg > 4) { return 4; } return $arg; } /** * Returns Role Option. * * @param string $arg * @return array */ protected function validate_include_roles($arg) { $obj = json_decode($arg); if (!is_array($obj)) return array(); return $obj; } /** * Returns Display Device Option. * * @param string $arg * @return string $arg */ protected function validate_filter_date_type($arg) { if ($arg == 'none' || $arg == 'start_end' || $arg == 'schedule') { return $arg; } return 'start_end'; } /** * Remove data * * @return void */ public static function uninstall() { delete_option('wpfront-notification-bar-options'); } } }