get_option( 'hits_from_date', null ); $thru_date = $affiliates_options->get_option( 'hits_thru_date', null ); $affiliate_id = $affiliates_options->get_option( 'hits_affiliate_id', null ); $expanded = $affiliates_options->get_option( 'hits_expanded', null ); // @todo input ist not shown, eventually remove unless ... $expanded_referrals = $affiliates_options->get_option( 'hits_expanded_referrals', null ); $expanded_hits = $affiliates_options->get_option( 'hits_expanded_hits', null ); $show_inoperative = $affiliates_options->get_option( 'hits_show_inoperative', null ); if ( isset( $_POST['clear_filters'] ) ) { $affiliates_options->delete_option( 'hits_from_date' ); $affiliates_options->delete_option( 'hits_thru_date' ); $affiliates_options->delete_option( 'hits_affiliate_id' ); $affiliates_options->delete_option( 'hits_expanded' ); $affiliates_options->delete_option( 'hits_expanded_referrals' ); $affiliates_options->delete_option( 'hits_expanded_hits' ); $affiliates_options->delete_option( 'hits_show_inoperative' ); $from_date = null; $thru_date = null; $affiliate_id = null; $expanded = null; $expanded_hits = null; $expanded_referrals = null; $show_inoperative = null; } else { // filter by date(s) if ( !empty( $_POST['from_date'] ) ) { $from_date = date( 'Y-m-d', strtotime( $_POST['from_date'] ) ); $affiliates_options->update_option( 'hits_from_date', $from_date ); } if ( !empty( $_POST['thru_date'] ) ) { $thru_date = date( 'Y-m-d', strtotime( $_POST['thru_date'] ) ); $affiliates_options->update_option( 'hits_thru_date', $thru_date ); } if ( $from_date && $thru_date ) { if ( strtotime( $from_date ) > strtotime( $thru_date ) ) { $thru_date = null; $affiliates_options->delete_option( 'hits_thru_date' ); } } // We now have the desired dates from the user's point of view, i.e. in her timezone. // If supported, adjust the dates for the site's timezone: if ( $from_date ) { $from_datetime = DateHelper::u2s( $from_date ); } if ( $thru_date ) { $thru_datetime = DateHelper::u2s( $thru_date, 24*3600 ); } // filter by affiliate id if ( !empty( $_POST['affiliate_id'] ) ) { $affiliate_id = affiliates_check_affiliate_id( $_POST['affiliate_id'] ); if ( $affiliate_id ) { $affiliates_options->update_option( 'hits_affiliate_id', $affiliate_id ); } } else if ( isset( $_POST['affiliate_id'] ) ) { // empty && isset => '' => all $affiliate_id = null; $affiliates_options->delete_option( 'hits_affiliate_id' ); } // expanded details? if ( !empty( $_POST['submitted'] ) ) { if ( !empty( $_POST['expanded'] ) ) { $expanded = true; $affiliates_options->update_option( 'hits_expanded', true ); } else { $expanded = false; $affiliates_options->delete_option( 'hits_expanded' ); } if ( !empty( $_POST['expanded_hits'] ) ) { $expanded_hits = true; $affiliates_options->update_option( 'hits_expanded_hits', true ); } else { $expanded_hits = false; $affiliates_options->delete_option( 'hits_expanded_hits' ); } if ( !empty( $_POST['expanded_referrals'] ) ) { $expanded_referrals = true; $affiliates_options->update_option( 'hits_expanded_referrals', true ); } else { $expanded_referrals = false; $affiliates_options->delete_option( 'hits_expanded_referrals' ); } if ( !empty( $_POST['show_inoperative'] ) ) { $show_inoperative = true; $affiliates_options->update_option( 'hits_show_inoperative', true ); } else { $show_inoperative = false; $affiliates_options->delete_option( 'hits_show_inoperative' ); } } } if ( isset( $_POST['row_count'] ) ) { if ( !wp_verify_nonce( $_POST[AFFILIATES_ADMIN_HITS_NONCE_1], plugin_basename( __FILE__ ) ) ) { wp_die( __( 'Access denied.', AFFILIATES_PLUGIN_DOMAIN ) ); } } if ( isset( $_POST['paged'] ) ) { if ( !wp_verify_nonce( $_POST[AFFILIATES_ADMIN_HITS_NONCE_2], plugin_basename( __FILE__ ) ) ) { wp_die( __( 'Access denied.', AFFILIATES_PLUGIN_DOMAIN ) ); } } $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_url = remove_query_arg( 'paged', $current_url ); $affiliates_table = _affiliates_get_tablename( 'affiliates' ); $referrals_table = _affiliates_get_tablename( 'referrals' ); $hits_table = _affiliates_get_tablename( 'hits' ); $output .= '
' . '

' . __( 'Visits & Referrals', AFFILIATES_PLUGIN_DOMAIN ) . '

' . '
'; $row_count = isset( $_POST['row_count'] ) ? intval( $_POST['row_count'] ) : 0; if ($row_count <= 0) { $row_count = $affiliates_options->get_option( 'affiliates_hits_per_page', AFFILIATES_HITS_PER_PAGE ); } else { $affiliates_options->update_option('affiliates_hits_per_page', $row_count ); } $offset = isset( $_GET['offset'] ) ? intval( $_GET['offset'] ) : 0; if ( $offset < 0 ) { $offset = 0; } $paged = isset( $_GET['paged'] ) ? intval( $_GET['paged'] ) : 0; if ( $paged < 0 ) { $paged = 0; } $orderby = isset( $_GET['orderby'] ) ? $_GET['orderby'] : null; switch ( $orderby ) { case 'date' : case 'visits' : case 'hits' : case 'referrals' : case 'ratio' : break; case 'affiliate_id' : $orderby = 'name'; default: $orderby = 'date'; } $order = isset( $_GET['order'] ) ? $_GET['order'] : null; switch ( $order ) { case 'asc' : case 'ASC' : $switch_order = 'DESC'; break; case 'desc' : case 'DESC' : $switch_order = 'ASC'; break; default: $order = 'DESC'; $switch_order = 'ASC'; } if ( $from_date || $thru_date || $affiliate_id ) { $filters = " WHERE "; } else { $filters = ''; } $filter_params = array(); if ( $from_date && $thru_date ) { $filters .= " datetime >= %s AND datetime < %s "; $filter_params[] = $from_datetime; $filter_params[] = $thru_datetime; } else if ( $from_date ) { $filters .= " datetime >= %s "; $filter_params[] = $from_datetime; } else if ( $thru_date ) { $filters .= " datetime < %s "; $filter_params[] = $thru_datetime; } if ( $affiliate_id ) { if ( $from_date || $thru_date ) { $filters .= " AND "; } $filters .= " affiliate_id = %d "; $filter_params[] = $affiliate_id; } // how many are there ? $count_query = $wpdb->prepare( "SELECT date FROM $hits_table h $filters GROUP BY date ", $filter_params ); $wpdb->query( $count_query ); $count = $wpdb->num_rows; if ( $count > $row_count ) { $paginate = true; } else { $paginate = false; } $pages = ceil ( $count / $row_count ); if ( $paged > $pages ) { $paged = $pages; } if ( $paged != 0 ) { $offset = ( $paged - 1 ) * $row_count; } // Get the summarized results, these are grouped by date. // If there were any referral on a date without a hit, it would not be included: // Example conditions: // - 2011-02-01 23:59:59 hit recorded // - 2011-02-02 00:10:05 referral recorded // - no hits recorded on 2011-02-02 // => // - the referral will not show up // So, for ratio calculation, only the date with actual visits and referrals will show up. // Referrals on dates without visits would give an infinite ratio (x referrals / 0 visits). // We have a separate page which shows all referrals. $query = $wpdb->prepare(" SELECT *, count(distinct ip) visits, sum(count) hits, (select count(*) from $referrals_table where date(datetime) = h.date ) referrals, ((select count(*) from $referrals_table where date(datetime) = h.date )/count(distinct ip)) ratio FROM $hits_table h $filters GROUP BY date ORDER BY $orderby $order LIMIT $row_count OFFSET $offset ", $filter_params ); $results = $wpdb->get_results( $query, OBJECT ); $column_display_names = array( 'date' => __( 'Date', AFFILIATES_PLUGIN_DOMAIN ) . '*', 'visits' => __( 'Visits', AFFILIATES_PLUGIN_DOMAIN ), 'hits' => __( 'Hits', AFFILIATES_PLUGIN_DOMAIN ), 'referrals' => __( 'Referrals', AFFILIATES_PLUGIN_DOMAIN ), 'ratio' => __( 'Ratio', AFFILIATES_PLUGIN_DOMAIN ) ); $output .= '
'; $affiliates = affiliates_get_affiliates( true, !$show_inoperative ); $affiliates_select = ''; if ( !empty( $affiliates ) ) { $affiliates_select .= ''; $affiliates_select .= ''; } $output .= '
' . '' . '
' . '

' . $affiliates_select . '

' . '' . ''. '' . ''. '

' . wp_nonce_field( plugin_basename( __FILE__ ), AFFILIATES_ADMIN_HITS_FILTER_NONCE, true, false ) . '' . // '' . // '' . '' . '' . '' . '' . '' . '' . '' . '' . '

' . '
' . '
'; $output .= '
' . // ' ' . wp_nonce_field( plugin_basename( __FILE__ ), AFFILIATES_ADMIN_HITS_NONCE_1, true, false ) . '
'; if ( $paginate ) { require_once(dirname( __FILE__ ) . '/class-affiliates-pagination.php' ); $pagination = new Affiliates_Pagination($count, null, $row_count); $output .= '
'; $output .= '
'; $output .= wp_nonce_field( plugin_basename( __FILE__ ), AFFILIATES_ADMIN_HITS_NONCE_2, true, false ); $output .= '
'; $output .= '
'; $output .= $pagination->pagination( 'top' ); $output .= '
'; $output .= '
'; } $output .= ' '; foreach ( $column_display_names as $key => $column_display_name ) { $options = array( 'orderby' => $key, 'order' => $switch_order ); $class = ""; if ( strcmp( $key, $orderby ) == 0 ) { $lorder = strtolower( $order ); $class = "$key manage-column sorted $lorder"; } else { $class = "$key manage-column sortable"; } $column_display_name = '' . $column_display_name . ''; $output .= ""; } $output .= ' '; if ( count( $results ) > 0 ) { for ( $i = 0; $i < count( $results ); $i++ ) { $result = $results[$i]; $output .= ''; $output .= ""; // $output .= ''; $output .= ""; $output .= ""; $output .= ""; $output .= ""; $output .= ''; if ( $expanded || $expanded_referrals || $expanded_hits ) { // // expanded : referrals ---------------------------------------- // if ( $expanded_referrals ) { $referrals_filters = " WHERE date(datetime) = %s "; $referrals_filter_params = array( $result->date ); if ( $affiliate_id ) { $referrals_filters .= " AND affiliate_id = %d "; $referrals_filter_params[] = $affiliate_id; } $referrals_orderby = "datetime $order"; $referrals_query = $wpdb->prepare( "SELECT * FROM $referrals_table r LEFT JOIN $affiliates_table a ON r.affiliate_id = a.affiliate_id $referrals_filters ORDER BY $referrals_orderby ", $referrals_filter_params ); $referrals = $wpdb->get_results( $referrals_query, OBJECT ); if ( count($referrals) > 0 ) { $output .= ''; $output .= ''; } } // if $expanded_referrals // // expanded : hits ---------------------------------------- // if ( $expanded_hits ) { // get the detailed results for hits $details_orderby = "date $order, time $order"; $details_filters = " WHERE h.date = %s "; $details_filter_params = array( $result->date ); if ( $affiliate_id ) { $details_filters .= " AND h.affiliate_id = %d "; $details_filter_params[] = $affiliate_id; } $details_query = $wpdb->prepare( "SELECT * FROM $hits_table h LEFT JOIN $affiliates_table a ON h.affiliate_id = a.affiliate_id $details_filters ORDER BY $details_orderby ", $details_filter_params ); $hits = $wpdb->get_results( $details_query, OBJECT ); $output .= ''; $output .= ''; } // if $expanded_hits } // expanded } } else { $output .= ''; } $output .= ''; $output .= '
$column_display_name
$result->date' . DateHelper::formatDate( DateHelper::s2u( $result->datetime ) ) . '$result->visits$result->hits$result->referrals$result->ratio
'; $output .= '
'; $output .= '

' . __( 'Referrals', AFFILIATES_PLUGIN_DOMAIN ) . '

'; $output .= ' '; foreach ( $referrals as $referral ) { $output .= ''; // $output .= ""; $output .= ''; $link = get_permalink( $referral->post_id ); $title = get_the_title( $referral->post_id ); $output .= ''; $output .= ""; $output .= ''; } $output .= '
' . __( 'Time', AFFILIATES_PLUGIN_DOMAIN ) . ' ' . __( 'Post', AFFILIATES_PLUGIN_DOMAIN ) . ' ' . __( 'Affiliate', AFFILIATES_PLUGIN_DOMAIN ) . '
$referral->datetime' . DateHelper::s2u( $referral->datetime ) . '' . wp_filter_nohtml_kses( $title ) . '" . stripslashes( wp_filter_nohtml_kses( $referral->name ) ) . "
'; $output .= '
'; // .details-referrals $output .= '
'; $output .= '
'; $output .= '

' . __( 'Hits', AFFILIATES_PLUGIN_DOMAIN ) . '

'; $output .= ' '; foreach ( $hits as $hit ) { $output .= ''; // $output .= ""; $output .= ''; $output .= ""; $output .= ""; $output .= ''; } $output .= '
' . __( 'Time', AFFILIATES_PLUGIN_DOMAIN ) . ' ' . __( 'IP', AFFILIATES_PLUGIN_DOMAIN ) . ' ' . __( 'Affiliate', AFFILIATES_PLUGIN_DOMAIN ) . '
$hit->time' . DateHelper::s2u( $hit->datetime ) . '" . long2ip( $hit->ip ) . "" . stripslashes( wp_filter_nohtml_kses( $hit->name ) ) . "
'; $output .= '
'; // .details-hits $output .= '
' . __('There are no results.', AFFILIATES_PLUGIN_DOMAIN ) . '
'; if ( $paginate ) { require_once( dirname( __FILE__ ) . '/class-affiliates-pagination.php' ); $pagination = new Affiliates_Pagination( $count, null, $row_count ); $output .= '
'; $output .= $pagination->pagination( 'bottom' ); $output .= '
'; } $server_dtz = DateHelper::getServerDateTimeZone(); $output .= '

' . sprintf( __( "* Date is given for the server's time zone : %s, which has an offset of %s hours with respect to GMT.", AFFILIATES_PLUGIN_DOMAIN ), $server_dtz->getName(), $server_dtz->getOffset( new DateTime() ) / 3600.0 ) . '

'; $output .= '
'; // .visits-overview echo $output; affiliates_footer(); } // function affiliates_admin_hits() ?>