This repository has been archived on 2026-10-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2015-05-01 18:05:29 +02:00

287 lines
8.0 KiB
PHP

<?php
/**
* @package GoogleAnalytics\Includes
*/
/**
* Options class.
*/
class Yoast_GA_Options {
/** @var array */
public $options;
/**
* Holds the settings for the GA plugin and possible subplugins
*
* @var string
*/
public $option_name = 'yst_ga';
/**
* Holds the prefix we use within the option to save settings
*
* @var string
*/
public $option_prefix = 'ga_general';
/**
* Holds the path to the main plugin file
*
* @var string
*/
public $plugin_path;
/**
* Holds the URL to the main plugin directory
*
* @var string
*/
public $plugin_url;
/**
* Saving instance of it's own in this static var
*
* @var object
*/
private static $instance;
/**
* Getting instance of this object. If instance doesn't exists it will be created.
*
* @return object|Yoast_GA_Options
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new Yoast_GA_Options();
}
return self::$instance;
}
/**
* Constructor for the options
*/
public function __construct() {
$this->options = $this->get_options();
$this->options = $this->check_options( $this->options );
$this->plugin_path = plugin_dir_path( GAWP_FILE );
$this->plugin_url = trailingslashit( plugin_dir_url( GAWP_FILE ) );
if ( false == $this->options ) {
add_option( $this->option_name, $this->default_ga_values() );
$this->options = $this->get_options();
}
if ( ! isset( $this->options['version'] ) || $this->options['version'] < GAWP_VERSION ) {
$this->upgrade();
}
// If instance is null, create it. Prevent creating multiple instances of this class
if ( is_null( self::$instance ) ) {
self::$instance = $this;
}
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
}
/**
* Updates the GA option within the current option_prefix
*
* @param array $val
*
* @return bool
*/
public function update_option( $val ) {
$options = get_option( $this->option_name );
$options[ $this->option_prefix ] = $val;
return update_option( $this->option_name, $options );
}
/**
* Return the Google Analytics options
*
* @return mixed|void
*/
public function get_options() {
$options = get_option( $this->option_name );
return $options[ $this->option_prefix ];
}
/**
* Check if all the options are set, to prevent a notice if debugging is enabled
* When we have new changes, the settings are saved to the options class
*
* @param array $options
*
* @return mixed
*/
public function check_options( $options ) {
$changes = 0;
foreach ( $this->default_ga_values() as $key => $value ) {
if ( ! isset( $options[ $key ] ) ) {
$options[ $key ] = $value;
$changes ++;
}
}
if ( $changes >= 1 ) {
$this->update_option( $options );
}
return $options;
}
/**
* Get the Google Analytics tracking code for this website
*
* @return null
*/
public function get_tracking_code() {
$tracking_code = null;
$this->options = $this->get_options();
if ( ! empty( $this->options['analytics_profile'] ) && ! empty( $this->options['analytics_profile_code'] ) ) {
$tracking_code = $this->options['analytics_profile_code'];
}
elseif ( ! empty( $this->options['analytics_profile'] ) && empty( $this->options['analytics_profile_code'] ) ) {
// Analytics profile is still holding the UA code
$tracking_code = $this->options['analytics_profile'];
}
if ( ! empty( $this->options['manual_ua_code_field'] ) && ! empty( $this->options['manual_ua_code'] ) ) {
$tracking_code = $this->options['manual_ua_code_field'];
}
return $tracking_code;
}
/**
* Convert a option value to a bool
*
* @param string $option_name
*
* @return bool
*/
public function option_value_to_bool( $option_name ) {
$this->options = $this->get_options();
if ( isset( $this->options[ $option_name ] ) && $this->options[ $option_name ] == 1 ) {
return true;
}
return false;
}
/**
* Upgrade the settings when settings are changed.
*
* @since 5.0.1
*/
private function upgrade() {
if ( ! isset( $this->options['version'] ) && is_null( $this->get_tracking_code() ) ) {
$old_options = get_option( 'Yoast_Google_Analytics' );
if ( isset( $old_options ) && is_array( $old_options ) ) {
if ( isset( $old_options['uastring'] ) && '' !== trim( $old_options['uastring'] ) ) {
// Save UA as manual UA, instead of saving all the old GA crap
$this->options['manual_ua_code'] = 1;
$this->options['manual_ua_code_field'] = $old_options['uastring'];
}
// Other settings
$this->options['allow_anchor'] = $old_options['allowanchor'];
$this->options['add_allow_linker'] = $old_options['allowlinker'];
$this->options['anonymous_data'] = $old_options['anonymizeip'];
$this->options['track_outbound'] = $old_options['trackoutbound'];
$this->options['track_internal_as_outbound'] = $old_options['internallink'];
$this->options['track_internal_as_label'] = $old_options['internallinklabel'];
$this->options['extensions_of_files'] = $old_options['dlextensions'];
}
delete_option( 'Yoast_Google_Analytics' );
}
// 5.0.0 to 5.0.1 fix of ignore users array
if ( ! isset( $this->options['version'] ) || version_compare( $this->options['version'], '5.0.1', '<' ) ) {
if ( isset( $this->options['ignore_users'] ) && ! is_array( $this->options['ignore_users'] ) ) {
$this->options['ignore_users'] = (array) $this->options['ignore_users'];
}
}
// 5.1.2+ Remove firebug_lite from options, if set
if ( ! isset ( $this->options['version'] ) || version_compare( $this->options['version'], '5.1.2', '<' ) ) {
if ( isset( $this->options['firebug_lite'] ) ) {
unset( $this->options['firebug_lite'] );
}
}
// 5.2.8+ Add disabled dashboards option
if ( ! isset ( $this->options['dashboards_disabled'] ) || version_compare( $this->options['version'], '5.2.8', '>' ) ) {
$this->options['dashboards_disabled'] = 0;
}
// Check is API option already exists - if not add it
$yst_ga_api = get_option( 'yst_ga_api' );
if ( $yst_ga_api === false ) {
add_option( 'yst_ga_api', array(), '', 'no' );
}
// Fallback to make sure every default option has a value
$defaults = $this->default_ga_values();
if ( is_array( $defaults ) ) {
foreach ( $defaults[ $this->option_prefix ] as $key => $value ) {
if ( ! isset( $this->options[ $key ] ) ) {
$this->options[ $key ] = $value;
}
}
}
// Set to the current version now that we've done all needed upgrades
$this->options['version'] = GAWP_VERSION;
$this->update_option( $this->options );
}
/**
* Set the default GA settings here
* @return array
*/
public function default_ga_values() {
$options = array(
$this->option_prefix => array(
'analytics_profile' => null,
'analytics_profile_code' => null,
'manual_ua_code' => 0,
'manual_ua_code_field' => null,
'track_internal_as_outbound' => null,
'track_internal_as_label' => null,
'track_outbound' => 0,
'anonymous_data' => 0,
'enable_universal' => 1,
'demographics' => 0,
'ignore_users' => array( 'administrator', 'editor' ),
'dashboards_disabled' => 0,
'anonymize_ips' => 0,
'track_download_as' => 'event',
'extensions_of_files' => 'doc,exe,js,pdf,ppt,tgz,zip,xls',
'track_full_url' => 'domain',
'subdomain_tracking' => null,
'tag_links_in_rss' => 0,
'allow_anchor' => 0,
'add_allow_linker' => 0,
'enhanced_link_attribution' => 0,
'custom_code' => null,
'debug_mode' => 0,
)
);
$options = apply_filters( 'yst_ga_default-ga-values', $options, $this->option_prefix );
return $options;
}
/**
* Load plugin textdomain
*/
public static function load_textdomain() {
load_plugin_textdomain( 'google-analytics-for-wordpress', false, dirname( plugin_basename( GAWP_FILE ) ) . '/languages/' );
}
}