'1', 'message_position' => 'bottom', 'message_container' => '1200', 'message_transition_duration' => '250', 'message_dismiss_duration' => 'day', 'message_animation' => 'slide', 'message_high_text_color' => 'rgba(255, 255, 255, 1)', 'message_high_background_color' => 'rgba(220, 53, 69, 1)', 'message_normal_text_color' => 'rgba(52, 58, 64, 1)', 'message_normal_background_color' => 'rgba(255, 255, 255, 1)', 'message_low_text_color' => 'rgba(255, 255, 255, 1)', 'message_low_background_color' => 'rgba(23, 162, 184, 1)', ); } public static function get($key) { if (!property_exists(__CLASS__, $key)) return false; switch ($key) { /* // Constant properties case 'readonly': return false; */ default: $options = get_option('ogrealert_options'); if (isset($options["ogrealert_settings_{$key}"])) { return $options["ogrealert_settings_{$key}"]; } else if (isset(self::$defaults[$key])) { return self::$defaults[$key]; } else { return false; } break; } return null; } public static function set($key, $value) { if (!property_exists(__CLASS__, $key)) return false; switch ($key) { /* // Read-only properties case 'readonly': break; */ default: $options = get_option('ogrealert_options'); if (!is_array($options)) $options = array(); $options["ogrealert_settings_{$key}"] = $value; update_option('ogrealert_options', $options); break; } return true; } public static function get_default($key) { if (!property_exists(__CLASS__, $key)) return null; if (!array_key_exists($key, self::$defaults)) return null; return self::$defaults[$key]; } public static function parse_hex_color($hex) { // Check if empty if (!isset($hex) || trim($hex) == '') return false; // Validate with Regex $regex = '/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/'; if (preg_match($regex, $hex) != 1) return false; $dec = array('r' => 0, 'g' => 0, 'b' => 0); if (strlen($hex) == strlen('#000')) { $dec['r'] = hexdec(substr($hex, 1, 1) . substr($hex, 1, 1)); $dec['g'] = hexdec(substr($hex, 2, 1) . substr($hex, 1, 1)); $dec['b'] = hexdec(substr($hex, 3, 1) . substr($hex, 1, 1)); } else { $dec['r'] = hexdec(substr($hex, 1, 2)); $dec['g'] = hexdec(substr($hex, 3, 2)); $dec['b'] = hexdec(substr($hex, 5, 2)); } return $dec; } public static function parse_dismiss_duration($duration) { if (is_numeric($duration)) return intval($duration); if (!is_string($duration)) $duration = self::get_default('message_dismiss_duration'); switch ($duration) { case 'none': return -1; case 'page': return 0; case 'minute': return MINUTE_IN_SECONDS; case 'hour': return HOUR_IN_SECONDS; case 'day': return DAY_IN_SECONDS; case 'week': return WEEK_IN_SECONDS; case 'month': return MONTH_IN_SECONDS; case 'year': return YEAR_IN_SECONDS; default: return HOUR_IN_SECONDS; } } } class SettingsPage { public static function init() { add_action('admin_init', array(__CLASS__, 'register_settings')); add_action('admin_menu', array(__CLASS__, 'menu')); } static function menu() { if (!current_user_can(\OgreAlert\Settings::get('capability'))) return; $page = add_submenu_page('edit.php?post_type=alert', __('OgreAlert Settings', 'ogrealert'), __('Settings', 'ogrealert'), \OgreAlert\Settings::get('capability'), 'ogrealert_settings', array(__CLASS__, 'page')); add_action('load-' . $page, array(__CLASS__, 'load_page')); } static function load_page() { if (!current_user_can(\OgreAlert\Settings::get('capability'))) return; add_action('admin_enqueue_scripts', array(__CLASS__, 'admin_enqueue_scripts')); } static function admin_enqueue_scripts() { if (!wp_style_is('wp-color-picker', 'enqueued')) { wp_enqueue_style('wp-color-picker'); } wp_enqueue_script('ogrealert-settings', \OgreAlert\Settings::get('dir') . 'assets/js/settings.js', array('jquery', 'wp-color-picker'), \OgreAlert\Settings::get('version'), true); } static function register_settings() { register_setting('ogrealert', 'ogrealert_options'); // Message Settings add_settings_section('ogrealert_section_general', __('General Settings', 'ogrealert'), array(__CLASS__, 'section'), 'ogrealert'); add_settings_field('ogrealert_message_enabled', __('Enable Alerts', 'ogrealert'), array(__CLASS__, 'field_checkbox'), 'ogrealert', 'ogrealert_section_general', array( 'id' => 'ogrealert_settings_message_enabled', 'default' => \OgreAlert\Settings::get_default('message_enabled'), )); add_settings_field('ogrealert_message_position', __('Position', 'ogrealert'), array(__CLASS__, 'field_select'), 'ogrealert', 'ogrealert_section_general', array( 'id' => 'ogrealert_settings_message_position', 'options' => array( 'top' => __('Fixed Top', 'ogrealert'), 'bottom' => __('Fixed Bottom', 'ogrealert'), 'footer' => __('After Footer', 'ogrealert'), 'custom' => __('Custom', 'ogrealert'), ), 'default' => \OgreAlert\Settings::get_default('message_position'), 'description' => __('If you choose Custom, you must add "do_action(\'display_alerts\');" to a suitable location in your template files.', 'ogrealert'), )); add_settings_field('ogrealert_message_container', __('Container Width', 'ogrealert'), array(__CLASS__, 'field_text'), 'ogrealert', 'ogrealert_section_general', array( 'id' => 'ogrealert_settings_message_container', 'description' => 'A positive integer in pixels.', 'placeholder' => \OgreAlert\Settings::get_default('message_container'), 'default' => \OgreAlert\Settings::get_default('message_container'), )); add_settings_field('ogrealert_message_transition_duration', __('Transition Duration', 'ogrealert'), array(__CLASS__, 'field_text'), 'ogrealert', 'ogrealert_section_general', array( 'id' => 'ogrealert_settings_message_transition_duration', 'description' => 'A positive integer in milliseconds.', 'placeholder' => \OgreAlert\Settings::get_default('message_transition_duration'), 'default' => \OgreAlert\Settings::get_default('message_transition_duration'), )); add_settings_field('ogrealert_message_transition_animation', __('Transition Animation', 'ogrealert'), array(__CLASS__, 'field_select'), 'ogrealert', 'ogrealert_section_general', array( 'id' => 'ogrealert_settings_message_transition_animation', 'options' => array( 'slide' => __('Slide', 'ogrealert'), 'fade' => __('Fade', 'ogrealert'), 'custom' => __('Custom', 'ogrealert'), ), 'default' => \OgreAlert\Settings::get_default('message_transition_animation'), 'description' => __('If you choose Custom, the animation must be handled with the "ogrealert-message-transition-custom" class in css.', 'ogrealert'), )); add_settings_field('ogrealert_message_dismiss_duration', __('Default Dismiss Duration', 'ogrealert'), array(__CLASS__, 'field_select'), 'ogrealert', 'ogrealert_section_general', array( 'id' => 'ogrealert_settings_message_dismiss_duration', 'options' => array( 'none' => __('None', 'ogrealert'), 'page' => __('Page', 'ogrealert'), 'minute' => __('Minute', 'ogrealert'), 'hour' => __('Hour', 'ogrealert'), 'day' => __('Day', 'ogrealert'), 'week' => __('Week', 'ogrealert'), 'month' => __('Month', 'ogrealert'), 'year' => __('Year', 'ogrealert'), ), 'default' => \OgreAlert\Settings::get_default('message_dismiss_duration'), )); add_settings_section('ogrealert_section_high', __('High Priority', 'ogrealert'), array(__CLASS__, 'section'), 'ogrealert'); add_settings_field('ogrealert_message_high_text_color', __('Text Color', 'ogrealert'), array(__CLASS__, 'field_color'), 'ogrealert', 'ogrealert_section_high', array( 'id' => 'ogrealert_settings_message_high_text_color', 'default' => \OgreAlert\Settings::get_default('message_high_text_color'), )); add_settings_field('ogrealert_message_high_background_color', __('Background Color', 'ogrealert'), array(__CLASS__, 'field_color'), 'ogrealert', 'ogrealert_section_high', array( 'id' => 'ogrealert_settings_message_high_background_color', 'default' => \OgreAlert\Settings::get_default('message_high_background_color'), )); add_settings_section('ogrealert_section_normal', __('Normal Priority', 'ogrealert'), array(__CLASS__, 'section'), 'ogrealert'); add_settings_field('ogrealert_message_normal_text_color', __('Text Color', 'ogrealert'), array(__CLASS__, 'field_color'), 'ogrealert', 'ogrealert_section_normal', array( 'id' => 'ogrealert_settings_message_normal_text_color', 'default' => \OgreAlert\Settings::get_default('message_normal_text_color'), )); add_settings_field('ogrealert_message_normal_background_color', __('Background Color', 'ogrealert'), array(__CLASS__, 'field_color'), 'ogrealert', 'ogrealert_section_normal', array( 'id' => 'ogrealert_settings_message_normal_background_color', 'default' => \OgreAlert\Settings::get_default('message_normal_background_color'), )); add_settings_section('ogrealert_section_low', __('Low Priority', 'ogrealert'), array(__CLASS__, 'section'), 'ogrealert'); add_settings_field('ogrealert_message_low_text_color', __('Text Color', 'ogrealert'), array(__CLASS__, 'field_color'), 'ogrealert', 'ogrealert_section_low', array( 'id' => 'ogrealert_settings_message_low_text_color', 'default' => \OgreAlert\Settings::get_default('message_low_text_color'), )); add_settings_field('ogrealert_message_low_background_color', __('Background Color', 'ogrealert'), array(__CLASS__, 'field_color'), 'ogrealert', 'ogrealert_section_low', array( 'id' => 'ogrealert_settings_message_low_background_color', 'default' => \OgreAlert\Settings::get_default('message_low_background_color'), )); } static function page() { if (!current_user_can(\OgreAlert\Settings::get('capability'))) return; // Show error/update messages settings_errors('ogrealert_messages'); ?>

Description

} // Fields public static function field_text($args) { $value = ''; $options = get_option('ogrealert_options'); if (isset($args['default'])) $value = $args['default']; if (isset($args['id']) && !empty($args['id']) && isset($options[$args['id']]) && !empty($options[$args['id']])) $value = $options[$args['id']]; $type = 'text'; if (isset($args['type']) && !empty($args['type'])) { $type = $args['type']; } echo ''; if (isset($args['description']) && !empty($args['description'])) { echo '

'; _e($args['description'], 'ogrealert'); echo '

'; } } public static function field_checkbox($args) { $value = false; $options = get_option('ogrealert_options'); if (isset($args['default'])) $value = $args['default']; if (isset($args['id']) && !empty($args['id']) && isset($options[$args['id']]) && !empty($options[$args['id']])) $value = $options[$args['id']]; echo ''; if (isset($args['description']) && !empty($args['description'])) { echo '

'; esc_html_e($args['description'], 'ogrealert'); echo '

'; } } public static function field_wysiwyg($args) { if (!isset($args['id']) || empty($args['id'])) return; $value = ''; $options = get_option('ogrealert_options'); if (isset($args['default'])) $value = $args['default']; if (isset($options[$args['id']]) && !empty($options[$args['id']])) $value = $options[$args['id']]; $settings = array( 'tinymce' => true, 'textarea_name' => 'ogrealert_options[' . $args['id'] . ']', 'textarea_rows' => 15, 'tabindex' => 1, ); wp_editor($value, $args['id'], $settings); if (isset($args['description']) && !empty($args['description'])) { echo '

'; esc_html_e($args['description'], 'ogrealert'); echo '

'; } } public static function field_select($args) { if (!isset($args['id']) || empty($args['id'])) return; $selected = ''; $options = get_option('ogrealert_options'); if (isset($args['default'])) $selected = $args['default']; if (isset($options[$args['id']]) && !empty($options[$args['id']])) $selected = $options[$args['id']]; echo ''; if (isset($args['description']) && !empty($args['description'])) { echo '

'; _e($args['description'], 'ogrealert'); echo '

'; } } public static function field_color($args) { $value = ''; $options = get_option('ogrealert_options'); if (isset($args['default'])) $value = $args['default']; if (isset($args['id']) && !empty($args['id']) && isset($options[$args['id']])) $value = $options[$args['id']]; echo ''; if (isset($args['description']) && !empty($args['description'])) { echo '

'; _e($args['description'], 'ogrealert'); echo '

'; } } } \OgreAlert\SettingsPage::init();