first commit
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Class MC4WP_Usage_Tracking
|
||||
*
|
||||
* @access private
|
||||
* @since 2.3
|
||||
* @ignore
|
||||
*/
|
||||
class MC4WP_Usage_Tracking {
|
||||
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $tracking_url = 'https://www.mc4wp.com/api/usage-tracking';
|
||||
|
||||
/**
|
||||
* @var MC4WP_Usage_Tracking The One True Instance
|
||||
*/
|
||||
protected static $instance;
|
||||
|
||||
/**
|
||||
* @return MC4WP_Usage_Tracking
|
||||
*/
|
||||
public static function instance() {
|
||||
if ( ! self::$instance instanceof MC4WP_Usage_Tracking ) {
|
||||
self::$instance = new MC4WP_Usage_Tracking();
|
||||
}
|
||||
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add hooks
|
||||
*/
|
||||
public function add_hooks() {
|
||||
add_action( 'mc4wp_usage_tracking', array( $this, 'track' ) );
|
||||
add_filter( 'cron_schedules', array( $this, 'cron_schedules' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a new schedule with WP Cron
|
||||
*
|
||||
* @param array $schedules
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function cron_schedules( $schedules ) {
|
||||
$schedules['monthly'] = array(
|
||||
'interval' => 30 * DAY_IN_SECONDS,
|
||||
'display' => esc_html__( 'Once a month', 'mailchimp-for-wp' ),
|
||||
);
|
||||
return $schedules;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable usage tracking
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function enable() {
|
||||
// only schedule if not yet scheduled
|
||||
if ( ! wp_next_scheduled( 'mc4wp_usage_tracking' ) ) {
|
||||
return wp_schedule_event( time(), 'monthly', 'mc4wp_usage_tracking' );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable usage tracking
|
||||
*/
|
||||
public function disable() {
|
||||
wp_clear_scheduled_hook( 'mc4wp_usage_tracking' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle tracking (clears & sets the scheduled tracking event)
|
||||
*
|
||||
* @param bool $enable
|
||||
*/
|
||||
public function toggle( $enable ) {
|
||||
$enable ? $this->enable() : $this->disable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the tracking request. Non-blocking.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function track() {
|
||||
$data = $this->get_tracking_data();
|
||||
|
||||
// send non-blocking request and be done with it
|
||||
wp_remote_post(
|
||||
$this->tracking_url,
|
||||
array(
|
||||
'body' => json_encode( $data ),
|
||||
'headers' => array(
|
||||
'Content-Type' => 'application/json',
|
||||
'Accept' => 'application/json',
|
||||
),
|
||||
'blocking' => false,
|
||||
)
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function get_tracking_data() {
|
||||
$data = array(
|
||||
// use md5 hash of home_url, we don't need/want to know the actual site url
|
||||
'site' => md5( home_url() ),
|
||||
'number_of_mailchimp_lists' => $this->get_mailchimp_lists_count(),
|
||||
'mc4wp_version' => $this->get_mc4wp_version(),
|
||||
'mc4wp_premium_version' => $this->get_mc4wp_premium_version(),
|
||||
'plugins' => (array) get_option( 'active_plugins', array() ),
|
||||
'php_version' => $this->get_php_version(),
|
||||
'curl_version' => $this->get_curl_version(),
|
||||
'wp_version' => $GLOBALS['wp_version'],
|
||||
'wp_language' => get_locale(),
|
||||
'server_software' => $this->get_server_software(),
|
||||
'using_https' => $this->is_site_using_https(),
|
||||
);
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function get_php_version() {
|
||||
if ( ! defined( 'PHP_MAJOR_VERSION' ) ) { // defined since PHP 5.2.7
|
||||
return null;
|
||||
}
|
||||
|
||||
return PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function get_mc4wp_premium_version() {
|
||||
return defined( 'MC4WP_PREMIUM_VERSION' ) ? MC4WP_PREMIUM_VERSION : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Mailchimp for WordPress version
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_mc4wp_version() {
|
||||
return MC4WP_VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
protected function get_mailchimp_lists_count() {
|
||||
$mailchimp = new MC4WP_MailChimp();
|
||||
return count( $mailchimp->get_lists() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function get_curl_version() {
|
||||
if ( ! function_exists( 'curl_version' ) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$curl_version_info = curl_version();
|
||||
return $curl_version_info['version'];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function is_site_using_https() {
|
||||
$site_url = site_url();
|
||||
return stripos( $site_url, 'https' ) === 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
protected function get_server_software() {
|
||||
if ( ! isset( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $_SERVER['SERVER_SOFTWARE'];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user