__construct(); } /** * PHP 5 constructor * * @package Invite Anyone * @since 0.9 */ function __construct() { $this->setup_time_periods(); $this->setup_get_params(); $this->get_posts(); } function setup_time_periods() { // $time_periods are in seconds $this->time_periods = apply_filters( 'invite_anyone_stats_time_periods', array( 60*60*24 => array( 'name' => __( '24 Hours', 'bp-invite-anyone' ), ), 60*60*24*3 => array( 'name' => __( '3 Days', 'bp-invite-anyone' ), ), 60*60*24*7 => array( 'name' => __( '1 Week', 'bp-invite-anyone' ), ), 60*60*24*28 => array( 'name' => __( '4 Weeks', 'bp-invite-anyone' ), ), 60*60*24*30*3 => array( 'name' => __( '3 Months', 'bp-invite-anyone' ), ), 0 => array( 'name' => __( 'All Time', 'bp-invite-anyone' ), ) ) ); } /** * Gets the stats params out of the $_GET global * * @package Invite Anyone * @since 0.9 */ function setup_get_params() { $params = array(); if ( isset( $_REQUEST['user_id'] ) ) { $params['user_id'] = (int)$_REQUEST['user_id']; } $this->params = $params; } /** * Gets posts, based on the params provided * * @package Invite Anyone * @since 0.9 */ function get_posts() { global $wpdb; // $posts is a multidimensional array, containing all different time periods $posts = array(); foreach( $this->time_periods as $tp => $period ) { $invite = new Invite_Anyone_Invitation; // Will be populated out of $this->params. Defaults to none? $args = array( 'posts_per_page' => '-1', 'status' => 'pending,draft,future,publish,trash' ); // Create the date filter if ( $tp ) { $since = time() - $tp; $this->date_sql = $wpdb->prepare( " AND post_date > %s", date( 'Y-m-d H:i:s', $since ) ); add_filter( 'posts_where_paged', array( $this, 'where_filter' ) ); } $invites = $invite->get( $args ); // Remove the filter if ( $tp ) { remove_filter( 'posts_where_paged', array( $this, 'where_filter' ) ); } $period['total_count'] = 0; $period['accepted_count'] = 0; $period['total_count_cs'] = 0; $period['accepted_count_cs'] = 0; $period['unique_emails'] = 0; $period['unique_inviters'] = 0; $period['unique_emails'] = array(); $period['unique_inviters'] = array(); if ( $invites->have_posts() ) { while ( $invites->have_posts() ) { $invites->the_post(); // Increase the total count $period['total_count']++; $author_key = get_the_author_ID(); // If it's a new sender, add them to $unique_inviters if ( !isset( $period['unique_inviters'][$author_key] ) ) { $period['unique_inviters'][$author_key] = array( 'overall' => array( 'sent' => 0, 'accepted' => 0 ), 'cloudsponge' => array( 'sent' => 0, 'accepted' => 0 ) ); } // Bump the inviter's count $period['unique_inviters'][$author_key]['overall']['sent']++; // Is it accepted? $accepted = get_post_meta( get_the_ID(), 'bp_ia_accepted', true ); if ( $accepted ) { // Total accepted count $period['accepted_count']++; // Author's accepted count $period['unique_inviters'][$author_key]['overall']['accepted']++; } // Is it a CloudSponge invite? $is_cloudsponge = get_post_meta( get_the_ID(), 'bp_ia_is_cloudsponge', true ); if ( __( 'Yes', 'bp-invite-anyone' ) == $is_cloudsponge ) { $period['total_count_cs']++; // Author count $period['unique_inviters'][$author_key]['cloudsponge']['sent']++; if ( $accepted ) { // Total accepted count $period['accepted_count_cs']++; // Author's accepted count $period['unique_inviters'][$author_key]['cloudsponge']['accepted']++; } } } } // With all the data tallied, we can come up with some percentages // Overall acceptance rate if ( $period['total_count'] ) { $period['acceptance_rate'] = round( ( $period['accepted_count'] / $period['total_count'] ) * 100 ); $period['acceptance_rate'] .= '%'; } else { $period['acceptance_rate'] = __( 'n/a', 'bp-invite-anyone' ); } // CS percentage if ( $period['total_count'] ) { $period['cs_percentage'] = round( ( $period['total_count_cs'] / $period['total_count'] ) * 100 ); $period['cs_percentage'] .= '%'; } else { $period['cs_percentage'] = __( 'n/a', 'bp-invite-anyone' ); } // CS acceptance rate if ( $period['total_count_cs'] ) { $period['acceptance_rate_cs'] = round( ( $period['accepted_count_cs'] / $period['total_count_cs'] ) * 100 ); $period['acceptance_rate_cs'] .= '%'; } else { $period['acceptance_rate_cs'] = __( 'n/a', 'bp-invite-anyone' ); } // Find the most active user $leader_user_id_pct = 0; $leader_val_pct = 0; $leader_user_id_num = 0; $leader_val_num = 0; $leader_user_id_pct_cs = 0; $leader_val_pct_cs = 0; $leader_user_id_num_cs = 0; $leader_val_num_cs = 0; foreach ( $period['unique_inviters'] as $user_id => $u ) { // Overall if ( $u['overall']['sent'] ) { if ( $u['overall']['sent'] >= $leader_val_num ) { $leader_user_id_num = $user_id; $leader_val_num = $u['overall']['sent']; } if ( ( $u['overall']['accepted'] / $u['overall']['sent'] ) >= $leader_val_pct ) { $leader_user_id_pct = $user_id; $leader_val_pct = $u['overall']['accepted'] / $u['overall']['sent'] * 100; } } // CloudSponge if ( $u['cloudsponge']['sent'] ) { if ( $u['cloudsponge']['sent'] >= $leader_val_num_cs ) { $leader_user_id_num_cs = $user_id; $leader_val_num_cs = $u['cloudsponge']['sent']; } if ( ( $u['cloudsponge']['accepted'] / $u['cloudsponge']['sent'] ) >= $leader_val_pct_cs ) { $leader_user_id_pct_cs = $user_id; $leader_val_pct_cs = $u['cloudsponge']['accepted'] / $u['cloudsponge']['sent'] * 100; } } } $period['top_users']['top_user_num'] = array( 'user_id' => $leader_user_id_num ? $leader_user_id_num : false, 'sent' => $leader_val_num ? $leader_val_num : false ); $period['top_users']['top_user_pct'] = array( 'user_id' => $leader_user_id_pct ? $leader_user_id_pct : false, 'accepted' => $leader_val_pct ? round( $leader_val_pct ) . '%' : '-' ); $period['top_users']['top_user_num_cs'] = array( 'user_id' => $leader_user_id_num_cs ? $leader_user_id_num_cs : false, 'sent' => $leader_val_num_cs ? $leader_val_num_cs : false ); $period['top_users']['top_user_pct_cs'] = array( 'user_id' => $leader_user_id_pct_cs ? $leader_user_id_pct_cs : false, 'accepted' => $leader_val_pct_cs ? round( $leader_val_pct_cs ) . '%' : '-' ); // Fetch userlinks foreach( $period['top_users'] as $key => $top_user ) { $link = bp_core_get_userlink( $top_user['user_id'] ); $period['top_users'][$key]['user_link'] = $link; } $this->time_periods[$tp] = $period; } } /** * Add the date_sql filter to the where clause of the post query * * @package Invite Anyone * @since 0.9 * * @param str $where Where clause from WP_Query * @param str $where Where clause with date_sql appended */ function where_filter( $where ) { $where .= $this->date_sql; return $where; } /** * Displays the admin panel markup * * @package Invite Anyone * @since 0.9 */ function display() { ?>
Note: CloudSponge data has only been recorded since Invite Anyone v0.9.