diff --git a/admin/core/um-admin-actions.php b/admin/core/um-admin-actions.php index a8ee3386..f5e5f0c9 100644 --- a/admin/core/um-admin-actions.php +++ b/admin/core/um-admin-actions.php @@ -1,5 +1,40 @@ 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 ***/ diff --git a/admin/core/um-admin-tracking.php b/admin/core/um-admin-tracking.php new file mode 100644 index 00000000..94de1efe --- /dev/null +++ b/admin/core/um-admin-tracking.php @@ -0,0 +1,151 @@ +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 '
';
+ 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 '
';
+ echo '' . __( 'Allow tracking', 'ultimatemember' ) . '';
+ echo ' ' . __( 'Do not allow tracking', 'ultimatemember' ) . '';
+ echo '