File "Usage.php"
Full Path: /home/flipjqml/onlinebetsolution.com/wp-content/plugins/all-in-one-seo-pack/app/Common/Admin/Usage.php
File size: 6.09 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace AIOSEO\Plugin\Common\Admin;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Usage tracking class.
*
* @since 4.0.0
*/
abstract class Usage {
/**
* Returns the current plugin version type ("lite" or "pro").
*
* @since 4.1.3
*
* @return string The version type.
*/
abstract public function getType();
/**
* Source of notifications content.
*
* @since 4.0.0
*
* @var string
*/
private $url = 'https://aiousage.com/v1/track';
/**
* Whether or not usage tracking is enabled.
*
* @since 4.0.0
*
* @var bool
*/
protected $enabled = false;
/**
* Class Constructor.
*
* @since 4.0.0
*/
public function __construct() {
add_action( 'init', [ $this, 'init' ], 2 );
}
/**
* Runs on the init action.
*
* @since 4.0.0
*
* @return void
*/
public function init() {
try {
$action = 'aioseo_send_usage_data';
if ( ! $this->enabled ) {
aioseo()->actionScheduler->unschedule( $action );
return;
}
// Register the action handler.
add_action( $action, [ $this, 'process' ] );
if ( ! as_next_scheduled_action( $action ) ) {
as_schedule_recurring_action( $this->generateStartDate(), WEEK_IN_SECONDS, $action, [], 'aioseo' );
// Run the task immediately using an async action.
as_enqueue_async_action( $action, [], 'aioseo' );
}
} catch ( \Exception $e ) {
// Do nothing.
}
}
/**
* Processes the usage tracking.
*
* @since 4.0.0
*
* @return void
*/
public function process() {
if ( ! $this->enabled ) {
return;
}
wp_remote_post(
$this->getUrl(),
[
'timeout' => 10,
'headers' => array_merge( [
'Content-Type' => 'application/json; charset=utf-8'
], aioseo()->helpers->getApiHeaders() ),
'user-agent' => aioseo()->helpers->getApiUserAgent(),
'body' => wp_json_encode( $this->getData() )
]
);
}
/**
* Gets the URL for the notifications api.
*
* @since 4.0.0
*
* @return string The URL to use for the api requests.
*/
private function getUrl() {
if ( defined( 'AIOSEO_USAGE_TRACKING_URL' ) ) {
return AIOSEO_USAGE_TRACKING_URL;
}
return $this->url;
}
/**
* Retrieves the data to send in the usage tracking.
*
* @since 4.0.0
*
* @return array An array of data to send.
*/
protected function getData() {
$themeData = wp_get_theme();
$type = $this->getType();
return [
// Generic data (environment).
'url' => home_url(),
'php_version' => PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION,
'wp_version' => get_bloginfo( 'version' ),
'mysql_version' => aioseo()->core->db->db->db_version(),
'server_version' => isset( $_SERVER['SERVER_SOFTWARE'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ) : '',
'is_ssl' => is_ssl(),
'is_multisite' => is_multisite(),
'sites_count' => function_exists( 'get_blog_count' ) ? (int) get_blog_count() : 1,
'active_plugins' => $this->getActivePlugins(),
'theme_name' => $themeData->name,
'theme_version' => $themeData->version,
'user_count' => function_exists( 'get_user_count' ) ? get_user_count() : null,
'locale' => get_locale(),
'timezone_offset' => aioseo()->helpers->getTimeZoneOffset(),
'email' => get_bloginfo( 'admin_email' ),
// AIOSEO specific data.
'aioseo_version' => AIOSEO_VERSION,
'aioseo_license_key' => null,
'aioseo_license_type' => null,
'aioseo_is_pro' => false,
"aioseo_{$type}_installed_date" => aioseo()->internalOptions->internal->installed,
'aioseo_settings' => $this->getSettings()
];
}
/**
* Get the settings and escape the quotes so it can be JSON encoded.
*
* @since 4.0.0
*
* @return array An array of settings data.
*/
private function getSettings() {
$settings = aioseo()->options->all();
array_walk_recursive( $settings, function( &$v ) {
if ( is_string( $v ) && strpos( $v, '"' ) !== false ) {
$v = str_replace( '"', '\"', $v );
}
});
$settings = $this->filterPrivateSettings( $settings );
$internal = aioseo()->internalOptions->all();
array_walk_recursive( $internal, function( &$v ) {
if ( is_string( $v ) && strpos( $v, '"' ) !== false ) {
$v = str_replace( '"', '\"', $v );
}
});
return [
'options' => $settings,
'internal' => $internal
];
}
/**
* Return a list of active plugins.
*
* @since 4.0.0
*
* @return array An array of active plugin data.
*/
private function getActivePlugins() {
if ( ! function_exists( 'get_plugins' ) ) {
include ABSPATH . '/wp-admin/includes/plugin.php';
}
$active = get_option( 'active_plugins', [] );
$plugins = array_intersect_key( get_plugins(), array_flip( $active ) );
return array_map(
static function ( $plugin ) {
if ( isset( $plugin['Version'] ) ) {
return $plugin['Version'];
}
return 'Not Set';
},
$plugins
);
}
/**
* Generate a random start date for usage tracking.
*
* @since 4.0.0
*
* @return integer The randomized start date.
*/
private function generateStartDate() {
$tracking = [
'days' => wp_rand( 0, 6 ) * DAY_IN_SECONDS,
'hours' => wp_rand( 0, 23 ) * HOUR_IN_SECONDS,
'minutes' => wp_rand( 0, 23 ) * HOUR_IN_SECONDS,
'seconds' => wp_rand( 0, 59 )
];
return strtotime( 'next sunday' ) + array_sum( $tracking );
}
/**
* Anonimizes or obfuscates the value of certain settings.
*
* @since 4.3.2
*
* @param array $settings The settings.
* @return array The altered settings.
*/
private function filterPrivateSettings( $settings ) {
if ( ! empty( $settings['advanced']['openAiKey'] ) ) {
$settings['advanced']['openAiKey'] = true;
}
if ( ! empty( $settings['localBusiness']['maps']['apiKey'] ) ) {
$settings['localBusiness']['maps']['apiKey'] = true;
}
return $settings;
}
}