* @copyright Copyright (C) 2019 wpopal.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * @website http://www.wpopal.com * @support http://www.wpopal.com/support/forum.html */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } class Opalestate_View_Stats { protected $id; protected $record; public function __construct( $id, $record = 8 ) { $this->id = $id; $this->record = $record; $this->count_page_stats(); } /** * @return mixed */ public static function get_real_ip_addr() { if ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) { //check ip from share internet $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { //to check ip is pass from proxy $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) { $ip = $_SERVER['REMOTE_ADDR']; } else { $ip = ''; } return $ip; } /** * Count page views. */ public function count_page_stats() { // Get IPs. $ips = $this->get_ips_viewed(); $current_ip = static::get_real_ip_addr(); if ( ! in_array( $current_ip, $ips ) ) { // Update IPS. array_push( $ips, $current_ip ); update_post_meta( $this->id, 'opalestate_ips_viewed', $ips ); // Count and update total views. $total_views = intval( get_post_meta( $this->id, 'opalestate_total_views', true ) ); if ( $total_views == '' ) { $total_views = 1; } else { $total_views++; } update_post_meta( $this->id, 'opalestate_total_views', $total_views ); // Update detailed views. $today = date( 'm-d-Y', time() ); $detailed_views = get_post_meta( $this->id, 'opalestate_detailed_views', true ); if ( $detailed_views == '' || ! is_array( $detailed_views ) ) { $detailed_views = []; $detailed_views[ $today ] = 1; } else { if ( ! isset( $detailed_views[ $today ] ) ) { if ( count( $detailed_views ) > 15 ) { array_shift( $detailed_views ); } $detailed_views[ $today ] = 1; } else { $detailed_views[ $today ] = intval( $detailed_views[ $today ] ) + 1; } } $detailed_views = update_post_meta( $this->id, 'opalestate_detailed_views', $detailed_views ); } } public function get_traffic_labels() { $detailed_views = get_post_meta( $this->id, 'opalestate_detailed_views', true ); if ( ! is_array( $detailed_views ) ) { $detailed_views = []; } $array_label = array_keys( $detailed_views ); $array_label = array_slice( $array_label, -1 * $this->record, $this->record, false ); return $array_label; } public function get_traffic_data() { $detailed_views = get_post_meta( $this->id, 'opalestate_detailed_views', true ); if ( ! is_array( $detailed_views ) ) { $detailed_views = []; } $array_values = array_values( $detailed_views ); $array_values = array_slice( $array_values, -1 * $this->record, $this->record, false ); return $array_values; } public function get_traffic_data_accordion() { $detailed_views = get_post_meta( $this->id, 'opalestate_detailed_views', true ); if ( ! is_array( $detailed_views ) ) { $detailed_views = []; } // since this runs before we increment the visits - on acc page style $today = date( 'm-d-Y', time() ); if ( isset( $detailed_views[ $today ] ) ) { $detailed_views[ $today ] = intval( $detailed_views[ $today ] ) + 1; } $array_values = array_values( $detailed_views ); $array_values = array_slice( $array_values, -1 * $this->record, $this->record, false ); return $array_values; } /** * Get IPs viewed. * * @return array */ public function get_ips_viewed() { $ips = get_post_meta( $this->id, 'opalestate_ips_viewed', true ); if ( ! $ips ) { $ips = []; } return $ips; } }