Cron jobs and tracking

This commit is contained in:
ultimatemember
2015-01-03 23:18:27 +02:00
parent 6d4baf7618
commit b1c9c670eb
7 changed files with 240 additions and 1 deletions
+35
View File
@@ -1,5 +1,40 @@
<?php
/***
*** @Opt-in tracking
***/
add_action('um_admin_do_action__opt_into_tracking', 'um_admin_do_action__opt_into_tracking');
function um_admin_do_action__opt_into_tracking( $action ){
global $ultimatemember;
if ( !is_admin() || !current_user_can('manage_options') ) die();
global $reduxConfig;
$reduxConfig->ReduxFramework->set('allow_tracking', 1);
update_option('um_tracking_notice', 1 );
$tracking = new UM_Admin_Tracking();
$tracking->send_checkin( true );
exit( wp_redirect( remove_query_arg('um_adm_action') ) );
}
/***
*** @Opt-out of tracking
***/
add_action('um_admin_do_action__opt_out_of_tracking', 'um_admin_do_action__opt_out_of_tracking');
function um_admin_do_action__opt_out_of_tracking( $action ){
global $ultimatemember;
if ( !is_admin() || !current_user_can('manage_options') ) die();
global $reduxConfig;
$reduxConfig->ReduxFramework->set('allow_tracking', 0);
update_option('um_tracking_notice', 1 );
exit( wp_redirect( remove_query_arg('um_adm_action') ) );
}
/***
*** @Un-install UM completely
***/
+151
View File
@@ -0,0 +1,151 @@
<?php
class UM_Admin_Tracking {
private $data;
public function __construct() {
$this->schedule_send();
add_action( 'admin_notices', array( $this, 'admin_notices' ) );
}
/***
*** @setup info array
***/
private function setup_data() {
$data = array();
// Retrieve current theme info
if ( get_bloginfo( 'version' ) < '3.4' ) {
$theme_data = get_theme_data( get_stylesheet_directory() . '/style.css' );
$theme = $theme_data['Name'];
$theme_ver = $theme_data['Version'];
} else {
$theme_data = wp_get_theme();
$theme = $theme_data->Name;
$theme_ver = $theme_data->Version;
}
$data['name'] = get_bloginfo('name');
$data['url'] = home_url();
$data['theme'] = $theme;
$data['theme_version'] = $theme_ver;
$data['wp_version'] = get_bloginfo( 'version' );
$data['version'] = ULTIMATEMEMBER_VERSION;
$data['email'] = get_bloginfo( 'admin_email' );
$result = count_users();
$data['users_count'] = $result['total_users'];
// Retrieve current plugin information
if( ! function_exists( 'get_plugins' ) ) {
include ABSPATH . '/wp-admin/includes/plugin.php';
}
$plugins = array_keys( get_plugins() );
$active_plugins = get_option( 'active_plugins', array() );
foreach ( $plugins as $key => $plugin ) {
if ( in_array( $plugin, $active_plugins ) ) {
// Remove active plugins from list so we can show active and inactive separately
unset( $plugins[ $key ] );
}
}
$data['active_plugins'] = $active_plugins;
$data['inactive_plugins'] = $plugins;
$this->data = $data;
}
/***
*** @check if tracking is allowed
***/
private function tracking_allowed() {
if ( !um_get_option('allow_tracking') )
return 0;
if( stristr( network_site_url( '/' ), 'dev' ) !== false ||
stristr( network_site_url( '/' ), 'localhost' ) !== false ||
stristr( network_site_url( '/' ), ':8888' ) !== false // This is common with MAMP on OS X
) {
return 0;
}
return 1;
}
/***
*** @get last send time
***/
private function get_last_send() {
return get_option( 'um_tracking_last_send' );
}
/***
*** @send a report
***/
public function send_checkin( $override = false ) {
if( ! $this->tracking_allowed() && ! $override )
return;
// Send a maximum of once per week
$last_send = $this->get_last_send();
if( $last_send && $last_send > strtotime( '-1 week' ) )
return;
$this->setup_data();
$request = wp_remote_post( 'http://ultimatemember.com/?um_action=checkin', array(
'method' => 'POST',
'timeout' => 20,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'body' => $this->data,
'user-agent' => 'UM/' . ULTIMATEMEMBER_VERSION . '; ' . get_bloginfo( 'url' ),
) );
update_option( 'um_tracking_last_send', time() );
}
/***
*** @run a scheduled report
***/
private function schedule_send() {
add_action( 'um_weekly_scheduled_events', array( $this, 'send_checkin' ) );
}
/***
*** @show admin notices
***/
public function admin_notices() {
if( ! current_user_can( 'manage_options' ) )
return;
$hide_notice = get_option('um_tracking_notice');
if ( $hide_notice )
return;
$optin_url = add_query_arg( 'um_adm_action', 'opt_into_tracking' );
$optout_url = add_query_arg( 'um_adm_action', 'opt_out_of_tracking' );
echo '<div class="updated"><p style="line-height: 2em">';
echo __( 'Help us improve Ultimate Member by allowing us to anonymously track plugin and theme usage. This helps us to improve plugin and theme compatibility. No sensitive data will be tracked.', 'ultimatemember' );
echo '<br />';
echo '<a href="' . esc_url( $optin_url ) . '" class="button button-primary">' . __( 'Allow tracking', 'ultimatemember' ) . '</a>';
echo '&nbsp;<a href="' . esc_url( $optout_url ) . '" class="button-secondary">' . __( 'Do not allow tracking', 'ultimatemember' ) . '</a>';
echo '</p></div>';
}
}
+2
View File
@@ -34,6 +34,7 @@ class UM_Admin_API {
require_once um_path . 'admin/core/um-admin-roles.php';
require_once um_path . 'admin/core/um-admin-builder.php';
require_once um_path . 'admin/core/um-admin-dragdrop.php';
require_once um_path . 'admin/core/um-admin-tracking.php';
require_once um_path . 'admin/core/um-admin-actions-user.php';
require_once um_path . 'admin/core/um-admin-actions-modal.php';
@@ -54,6 +55,7 @@ class UM_Admin_API {
$this->access = new UM_Admin_Access();
$this->builder = new UM_Admin_Builder();
$this->dragdrop = new UM_Admin_DragDrop();
$this->tracking = new UM_Admin_Tracking();
if ( is_admin() &&
current_user_can('manage_options') &&
+38
View File
@@ -0,0 +1,38 @@
<?php
class UM_Cron {
public function __construct() {
add_filter( 'cron_schedules', array( $this, 'add_schedules' ) );
add_action( 'wp', array( $this, 'schedule_Events' ) );
}
public function add_schedules( $schedules = array() ) {
// Adds once weekly to the existing schedules.
$schedules['weekly'] = array(
'interval' => 604800,
'display' => __( 'Once Weekly', 'ultimatemember' )
);
return $schedules;
}
public function schedule_Events() {
$this->weekly_events();
$this->daily_events();
}
private function weekly_events() {
if ( ! wp_next_scheduled( 'um_weekly_scheduled_events' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'weekly', 'um_weekly_scheduled_events' );
}
}
private function daily_events() {
if ( ! wp_next_scheduled( 'um_daily_scheduled_events' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'daily', 'um_daily_scheduled_events' );
}
}
}
+1 -1
View File
@@ -11,7 +11,7 @@ class UM_Taxonomies {
/***
*** @Create taxonomies for use for UM
***/
function create_taxonomies( $user_id = null ) {
function create_taxonomies() {
register_post_type( 'um_form', array(
'labels' => array(
+10
View File
@@ -1433,6 +1433,16 @@ $this->sections[] = array(
'title' => __( 'Advanced'),
'fields' => array(
array(
'id' => 'allow_tracking',
'type' => 'switch',
'title' => __( 'Allow anonymous tracking' ),
'default' => 0,
'desc' => 'Help us improve Ultimate Member by allowing us to anonymously track plugin and theme usage. This helps us to improve plugin and theme compatibility. No sensitive data will be tracked.',
'on' => 'Allow tracking',
'off' => 'Do not allow',
),
array(
'id' => 'admin_load_time',
'type' => 'switch',
+3
View File
@@ -52,6 +52,7 @@ class UM_API {
require_once um_path . 'core/um-members.php';
require_once um_path . 'core/um-logout.php';
require_once um_path . 'core/um-modal.php';
require_once um_path . 'core/um-cron.php';
require_once um_path . 'core/lib/mobiledetect/Mobile_Detect.php';
@@ -113,6 +114,8 @@ class UM_API {
$this->members = new UM_Members();
$this->logout = new UM_Logout();
$this->modal = new UM_Modal();
$this->cron = new UM_Cron();
$this->mobile = new Mobile_Detect;
$this->options = get_option('um_options');