• File: options.php
  • Full Path: /home/matthif/www/wp-content/plugins/google-analytics-for-wordpress/includes/options.php
  • Date Modified: 01/24/2025 1:57 PM
  • File size: 12.77 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
/**
 * Option functions.
 *
 * @since 6.0.0
 *
 * @package MonsterInsights
 * @subpackage Options
 * @author  Chris Christoff
 */

// Exit if accessed directly
if ( ! defined'ABSPATH' ) ) {
    exit;
}

function 
monsterinsights_get_options() {
    
$settings    = array();
    
$option_name monsterinsights_get_option_name();
    
//$settings             = get_site_option( $option_name );
    //$use_network_settings = ! empty( $use_network_settings['use_network_settings'] ) ? true : false;
    //$is_network           = is_multisite();

    //if ( $is_network && $use_network_settings ) {
    //    return $settings;
    //} else if ( $is_network ) {
    
$settings get_option$option_name );
    
//} else {
    //    return $settings;
    //}
    
if ( empty( $settings ) || ! is_array$settings ) ) {
        
$settings = array();
    }

    return 
$settings;
}

/**
 * Helper method for getting a setting's value. Falls back to the default
 * setting value if none exists in the options table.
 *
 * @param string $key The setting key to retrieve.
 * @param mixed $default The default value of the setting key to retrieve.
 *
 * @return string       The value of the setting.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_get_option$key ''$default false ) {
    global 
$monsterinsights_settings;
    
$value = ! empty( $monsterinsights_settings$key ] ) ? $monsterinsights_settings$key ] : $default;
    
$value apply_filters'monsterinsights_get_option'$value$key$default );

    return 
apply_filters'monsterinsights_get_option_' $key$value$key$default );
}

/**
 * Helper method for getting the V4 string.
 *
 * @return string The V4 ID to use.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_get_v4_id() {
    
// Allow short circuiting (for staging sites)
    
if ( defined'MONSTERINSIGHTS_DISABLE_TRACKING' ) && MONSTERINSIGHTS_DISABLE_TRACKING ) {
        return 
'';
    }

    
// Try getting it from the auth V4
    
$v4_id MonsterInsights()->auth->get_v4_id();

    
// If that didn't work, try the manual V4 at the site level
    
if ( empty( $v4_id ) ) {
        
$v4_id MonsterInsights()->auth->get_manual_v4_id();
        
// If that didn't work try getting it from the network
        
if ( empty( $v4_id ) ) {
            
$v4_id monsterinsights_get_network_v4_id();
            
// If that didn't work, try getting it from the overall constant. If it's not there, leave it blank
            
if ( empty( $v4_id ) ) {
                
$v4_id defined'MONSTERINSIGHTS_GA_V4_ID' ) && MONSTERINSIGHTS_GA_V4_ID monsterinsights_is_valid_v4_idMONSTERINSIGHTS_GA_V4_ID ) : '';
            }
        }
    }

    
// Feed through the filter
    
$pre_filter $v4_id;
    
$v4_id      apply_filters'monsterinsights_get_v4_id'$v4_id );

    
// Only run through monsterinsights_is_valid_v4 if it's different than pre-filter
    
return $pre_filter === $v4_id $v4_id monsterinsights_is_valid_v4_id$v4_id );
}

/**
 * Helper method for getting the network V4 string.
 *
 * @return string The V4 ID to use.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_get_network_v4_id() {
    if ( ! 
is_multisite() ) {
        return 
'';
    }

    
// First try network auth V4
    
$v4_id MonsterInsights()->auth->get_network_v4_id();
    if ( ! empty( 
$v4_id ) ) {
        return 
$v4_id;
    }

    
// Then try manual network V4
    
$v4_id MonsterInsights()->auth->get_network_manual_v4_id();
    if ( ! empty( 
$v4_id ) ) {
        return 
$v4_id;
    }

    
// See if the constant is defined
    
if ( defined'MONSTERINSIGHTS_MS_GA_V4_ID' ) && monsterinsights_is_valid_v4_idMONSTERINSIGHTS_MS_GA_V4_ID ) ) {
        return 
MONSTERINSIGHTS_MS_GA_V4_ID;
    }

    return 
'';
}

/**
 * Helper method for getting the UA string that's output on the frontend.
 *
 * @param array $args Allow calling functions to give args to use in future applications.
 *
 * @return string The UA to use on frontend.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_get_v4_id_to_output$args = array() ) {
    
$v4_id monsterinsights_get_v4_id();
    
$v4_id apply_filters'monsterinsights_get_v4_id_to_output'$v4_id$args );

    return 
monsterinsights_is_valid_v4_id$v4_id );
}

/**
 * Helper method for updating a setting's value.
 *
 * @param string $key The setting key.
 * @param string $value The value to set for the key.
 *
 * @return boolean True if updated, false if not.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_update_option$key ''$value false ) {

    
// If no key, exit
    
if ( empty( $key ) ) {
        return 
false;
    }

    if ( empty( 
$value ) ) {
        
$remove_option monsterinsights_delete_option$key );

        return 
$remove_option;
    }

    
$option_name monsterinsights_get_option_name();

    
// First let's grab the current settings

    // if on network panel or if on single site using network settings
    //$settings              = get_site_option( $option_name );
    //$use_network_settings  = ! empty( $use_network_settings['use_network_settings'] ) ? true : false;
    //$is_network            = is_multisite();
    //$update_network_option = true;
    //if ( ! is_network_admin() && ! ( $is_network && $use_network_settings ) ) {
    
$settings get_option$option_name );
    
//   $update_network_option = false;
    //}

    
if ( ! is_array$settings ) ) {
        
$settings = array();
    }

    
// Let's let devs alter that value coming in
    
$value apply_filters'monsterinsights_update_option'$value$key );

    
// Next let's try to update the value
    
$settings$key ] = $value;
    
$did_update       false;
    
//if ( $update_network_option ) {
    //    $did_update = update_site_option( $option_name, $settings );
    //} else {
    
$did_update update_option$option_name$settings );
    
//}

    // If it updated, let's update the global variable
    
if ( $did_update ) {
        global 
$monsterinsights_settings;
        
$monsterinsights_settings$key ] = $value;
    }

    return 
$did_update;
}

/**
 * Helper method for deleting a setting's value.
 *
 * @param string $key The setting key.
 *
 * @return boolean True if removed, false if not.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_delete_option$key '' ) {
    
// If no key, exit
    
if ( empty( $key ) ) {
        return 
false;
    }

    
$option_name monsterinsights_get_option_name();

    
// First let's grab the current settings

    // if on network panel or if on single site using network settings
    //$settings              = get_site_option( $option_name );
    //$use_network_settings  = ! empty( $use_network_settings['use_network_settings'] ) ? true : false;
    //$is_network            = is_multisite();
    //$update_network_option = true;
    //if ( ! is_network_admin() && ! ( $is_network && $use_network_settings ) ) {
    
$settings get_option$option_name );
    
//   $update_network_option = false;
    //}

    // Next let's try to remove the key
    
if ( isset( $settings$key ] ) ) {
        unset( 
$settings$key ] );
    }

    
$did_update false;
    
//if ( $update_network_option ) {
    //    $did_update = update_site_option( 'monsterinsights_settings', $settings );
    //} else {
    
$did_update update_option$option_name$settings );
    
//}

    // If it updated, let's update the global variable
    
if ( $did_update ) {
        global 
$monsterinsights_settings;
        
$monsterinsights_settings $settings;
    }

    return 
$did_update;
}

/**
 * Helper method for deleting multiple settings value.
 *
 * @param string $key The setting key.
 *
 * @return boolean True if removed, false if not.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_delete_options$keys = array() ) {
    
// If no keys, exit
    
if ( empty( $keys ) || ! is_array$keys ) ) {
        return 
false;
    }

    
$option_name monsterinsights_get_option_name();

    
// First let's grab the current settings

    // if on network panel or if on single site using network settings
    //$settings              = get_site_option( $option_name );
    //$use_network_settings  = ! empty( $use_network_settings['use_network_settings'] ) ? true : false;
    //$is_network            = is_multisite();
    //$update_network_option = true;
    //if ( ! is_network_admin() && ! ( $is_network && $use_network_settings ) ) {
    
$settings get_option$option_name );
    
//   $update_network_option = false;
    //}

    // Next let's try to remove the keys
    
foreach ( $keys as $key ) {
        if ( isset( 
$settings$key ] ) ) {
            unset( 
$settings$key ] );
        }
    }

    
$did_update false;
    
//if ( $update_network_option ) {
    //    $did_update = update_site_option( 'monsterinsights_settings', $settings );
    //} else {
    
$did_update update_option$option_name$settings );
    
//}

    // If it updated, let's update the global variable
    
if ( $did_update ) {
        global 
$monsterinsights_settings;
        
$monsterinsights_settings $settings;
    }

    return 
$did_update;
}

function 
monsterinsights_sanitize_tracking_id$id ) {
    
$id = (string) $id// Rare case, but let's make sure it never happens.
    
$id trim$id );

    if ( empty( 
$id ) ) {
        return 
'';
    }

    
// Replace all type of dashes (n-dash, m-dash, minus) with normal dashes.
    
$id str_replace( array( '–''—''−' ), '-'$id );

    return 
$id;
}

/**
 * Is this a valid GT code
 *
 * @param string $gt_code
 *
 * @return bool
 */
function monsterinsights_is_valid_gt$gt_code '' ) {
    return (bool) 
preg_match'/^GT-[a-zA-Z0-9]{5,}$/'$gt_code );
}

function 
monsterinsights_is_valid_v4_id$v4_code '' ) {
    
$v4_code monsterinsights_sanitize_tracking_id$v4_code );

    if (
        
preg_match'/G-[A-Za-z\d]+/'$v4_code ) ||
        
monsterinsights_is_valid_gt$v4_code )
    ) {
        return 
strtoupper$v4_code );
    }

    return 
'';
}

/**
 * Helper method for getting the license information.
 *
 * @param string $key The setting key to retrieve.
 * @param mixed $default_value The default value of the setting key to retrieve.
 *
 * @return string       The value of the setting.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_get_license() {
    
$license MonsterInsights()->license->get_site_license();
    
$license $license $license MonsterInsights()->license->get_network_license();
    
$default MonsterInsights()->license->get_default_license_key();
    if ( empty( 
$license ) && ! empty( $default ) ) {
        
$license        = array();
        
$license['key'] = MonsterInsights()->license->get_default_license_key();
    }

    return 
$license;
}

/**
 * Helper method for getting the license key.
 *
 * @param string $key The setting key to retrieve.
 * @param mixed $default_value The default value of the setting key to retrieve.
 *
 * @return string       The value of the setting.
 * @since 6.0.0
 * @access public
 *
 */
function monsterinsights_get_license_key() {
    if ( 
monsterinsights_is_pro_version() ) {
        return 
MonsterInsights()->license->get_license_key();
    }

    return 
'';
}

function 
monsterinsights_get_option_name() {
    
//if ( monsterinsights_is_pro_version() ) {
    
return 'monsterinsights_settings';
    
//} else {
    //    return 'monsterinsights_settings';
    //}
}

/**
 * Export necessary settings to export as JSON.
 *
 * @return string
 */
function monsterinsights_export_settings() {
    
$settings monsterinsights_get_options();
    
$exclude  = array(
        
'analytics_profile',
        
'analytics_profile_code',
        
'analytics_profile_name',
        
'oauth_version',
        
'cron_last_run',
        
'monsterinsights_oauth_status',
    );

    foreach ( 
$exclude as $e ) {
        if ( ! empty( 
$settings$e ] ) ) {
            unset( 
$settings$e ] );
        }
    }

    
// Get site notes.
    
$settings['site_notes'] = monsterinsights_get_site_notes_to_export();

    return 
wp_json_encode$settings );
}

/**
 * Always return 'gtag' when grabbing the tracking mode.
 *
 * @param string $value The value to override.
 *
 * @return string
 */
function monsterinsights_force_tracking_mode$value ) {
    return 
'gtag';
}

add_filter'monsterinsights_get_option_tracking_mode''monsterinsights_force_tracking_mode' );

/**
 * Always return 'js' when grabbing the events mode.
 *
 * @param string $value The value to override.
 *
 * @return string
 */
function monsterinsights_force_events_mode$value ) {
    return 
'js';
}

add_filter'monsterinsights_get_option_events_mode''monsterinsights_force_events_mode' );

/**
 * Prepare site notes to export.
 */
function monsterinsights_get_site_notes_to_export() {
    
$notes_db = new MonsterInsights_Site_Notes_DB_Base();

    
$note_items $notes_db->get_items( array(
        
'per_page' => -1,
        
'orderby'  => 'id',
        
'order'    => 'asc',
        
'page'     => 1,
    ) );

    
$notes = array();

    foreach ( 
$note_items['items'] as $note_item ) {
        
$notes[] = array(
            
'note_title'    => $note_item['note_title'],
            
'note_date'     => $note_item['note_date_ymd'],
            
'important'     => $note_item['important'],
            
'category_name' => empty( $note_item['category']['name'] ) ? '' html_entity_decode$note_item['category']['name'] ),
        );
    }

    
$categories $notes_db->get_categories( array(
        
'per_page' => -1,
        
'page'     => 1,
        
'orderby'  => 'term_id',
        
'order'    => 'asc',
    ) );

    
$note_categories = array();

    if ( 
is_array$categories ) && ! empty( $categories ) ) {
        foreach ( 
$categories as $category ) {
            
$note_categories[] = array(
                
'name'  => html_entity_decode$category['name'] ),
                
'color' => $category['background_color'],
            );
        }
    }

    return array(
        
'notes'      => $notes,
        
'categories' => $note_categories,
    );
}