*/ // If this file is called directly, abort. if ( ! defined( 'ABSPATH' ) ) { die; } class CMD_Analytics_For_Cloudflare_Admin_Settings { /** name for the settings group */ private $settings_group; /** name for the settings options */ private $settings_options; /** value of the plugin options field */ private $plugin_options; /** CloudFlare connection status */ private $is_connected = false; /** Error messages */ private $error_message; /** Domains assocaited with account */ private $domains; /** * Set the dynamic CloudFlare API information needed to build a reuquest. * * @since 1.0.0 */ public function __construct() { $this->settings_group = CMD_Analytics_For_Cloudflare::TEXT_DOMAIN . '-settings'; $this->settings_options = CMD_Analytics_For_Cloudflare::PLUGIN_ID . '_settings'; $this->plugin_options = get_option( $this->settings_options ); add_action( 'admin_init', array( $this, 'settings_init' ) ); add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); add_filter( 'plugin_action_links_' . plugin_basename( CMD_Analytics_For_Cloudflare::$base_file ), array( &$this, 'plugin_settings_link' ), 10, 4 ); } /** * Add the admin munder under Settings -> Analytics For Cloudflare. * * @since 1.0.0 */ public function add_admin_menu() { add_options_page( __( 'Analytics For CloudFlare', 'cmd-analytics-for-cloudflare' ), __( 'Analytics For CloudFlare', 'cmd-analytics-for-cloudflare' ), 'manage_options', CMD_Analytics_For_Cloudflare::PLUGIN_ID, array( $this, 'display_options_page' ) ); } /** * Initialize the settings fields for the plugin. * * api_key * api_email * domain * cache time * * @since 1.0.0 */ public function settings_init() { global $pagenow; if ( ( 'options-general.php' === $pagenow ) && ( CMD_Analytics_For_Cloudflare::PLUGIN_ID === $_GET['page'] ) ) { $this->setup_options_page(); } register_setting( CMD_Analytics_For_Cloudflare::PLUGIN_ID, $this->settings_options, array( $this, 'sanitize_options' ) ); add_settings_section( $this->settings_group, null, array( $this, 'settings_section_callback' ), CMD_Analytics_For_Cloudflare::TEXT_DOMAIN ); add_settings_field( $this->settings_group . '_api_key', __( 'CloudFlare API Key', 'cmd-analytics-for-cloudflare' ), array( $this, 'cmd_analytics_for_cloudflare_api_key_render' ), CMD_Analytics_For_Cloudflare::TEXT_DOMAIN, $this->settings_group ); add_settings_field( $this->settings_group . '_api_email', __( 'CloudFlare Email Address', 'cmd-analytics-for-cloudflare' ), array( $this, 'cmd_analytics_for_cloudflare_api_email_render' ), CMD_Analytics_For_Cloudflare::TEXT_DOMAIN, $this->settings_group ); if ( true === $this->is_connected ) { add_settings_field( $this->settings_group . '_domain', __( 'CloudFlare Domain', 'cmd-analytics-for-cloudflare' ), array( $this, 'cmd_analytics_for_cloudflare_domain_render' ), CMD_Analytics_For_Cloudflare::TEXT_DOMAIN, $this->settings_group ); add_settings_field( $this->settings_group . '_cache_time', __( 'Cache Results For', 'cmd-analytics-for-cloudflare' ), array( $this, 'cmd_analytics_for_cloudflare_cache_time_render' ), CMD_Analytics_For_Cloudflare::TEXT_DOMAIN, $this->settings_group ); } } /** * Render the API key field for the settings page * * @since 1.0.0 */ public function cmd_analytics_for_cloudflare_api_key_render() { $value = ( isset( $this->plugin_options['api_key'] ) ? $this->plugin_options['api_key'] : '' ); ?> () plugin_options['api_email'] ) ? $this->plugin_options['api_email'] : '' ); ?> () plugin_options['domain'] ) ? $this->plugin_options['domain'] : '' ); ?> plugin_options['cache_time'] ) ? $this->plugin_options['cache_time'] : '900' ); $available_options = apply_filters( 'cmd_analytics_for_cloudflare_admin_settings_cache_options', array( '0' => __( 'Do Not Cache', 'cmd-analytics-for-cloudflare' ), '300' => __( '5 Minutes', 'cmd-analytics-for-cloudflare' ), '900' => __( '15 Minutes', 'cmd-analytics-for-cloudflare' ), '3600' => __( '1 Hour', 'cmd-analytics-for-cloudflare' ), '10400' => __( '4 Hours', 'cmd-analytics-for-cloudflare' ), '55200' => __( '12 Hours', 'cmd-analytics-for-cloudflare' ), ) ); ?>
' . esc_html( $this->error_message ) . '
'; } /** * Display a success notice * * @since 1.0.0 */ function admin_success_notice() { echo '' . esc_html( $this->error_message ) . '
' . wp_kses_post( __( sprintf( 'By %sChuckMac Development%s', '', '' ), 'cmd-analytics-for-cloudflare' ) ) . '
'; echo '' . esc_html__( 'Please enter your CloudFlare API credentials below. Once connected you will be able to select the domain for which the site should be linked to.', 'cmd-analytics-for-cloudflare' ) . '
'; do_action( 'cmd_analytics_for_cloudflare_admin_settings_after_desc' ); } /** * Check the settings against the CloudFlare API. If we can connect then display a success message, otherwise display an error. * * @since 1.0.0 */ public function setup_options_page() { //Check settings against Cloudflare require_once( 'class-analytics-for-cloudflare-api.php' ); $cloudflare = new CMD_Analytics_For_Cloudflare_Api(); $this->domains = $cloudflare->get_domains(); if ( is_wp_error( $this->domains ) ) { $this->error_message = __( 'Unable to connect to CloudFlare :: ', 'cmd-analytics-for-cloudflare' ) . $this->domains->get_error_message(); add_action( 'cmd_analytics_for_cloudflare_admin_settings_after_desc', array( $this, 'admin_error_notice' ) ); } else { $this->is_connected = true; $this->error_message = __( 'Successfully connected to CloudFlare! ', 'cmd-analytics-for-cloudflare' ); add_action( 'cmd_analytics_for_cloudflare_admin_settings_after_desc', array( $this, 'admin_success_notice' ) ); } } /** * The main framework for the settings option page. Load all the settings fields. * * @since 1.0.0 */ public function display_options_page() { ?> ' . __( 'Settings', 'cmd-analytics-for-cloudflare' ) . ''; return array_merge( array( 'settings' => $setting_link ), $actions ); } }