Sindbad~EG File Manager

Current Path : /var/www/html/amopropiedades.com/wp-content/plugins/favethemes-insights/includes/
Upload File :
Current File : /var/www/html/amopropiedades.com/wp-content/plugins/favethemes-insights/includes/visits.php

<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}
if(!class_exists('Fave_Visits')) {

    class Fave_Visits {

        public function __construct() {
           
            // Count listing visits.
            add_action( 'template_redirect', array($this, 'add_visit') );
            add_filter('get_user_listing_time_query', array($this, 'get_user_listing_time_query'), 10, 2);

        }

        //Add visits data
        public function add_visit() { 
            if ( ! is_singular( 'property' ) ) {
                return;
            }
            global $wpdb, $post;

            $table_name        = $wpdb->prefix . 'favethemes_insights';

            $ip_address        = Fave_Visitor::get_ip();
            $unique_identifier = Fave_Visitor::unique_identifier();
            $get_referrer      = Fave_Visitor::get_referrer();
            $referral_url      = $get_referrer ? $get_referrer['url'] : null;
            $referral_domain   = $get_referrer ? $get_referrer['domain'] : null;
            $get_platform      = Fave_Visitor::get_platform();
            $platform          = isset($get_platform['platform']) ? $get_platform['platform'] : null;
            $device            = isset($get_platform['device']) ? $get_platform['device'] : null;
            $get_language      = Fave_Visitor::get_language();
            $get_browser       = Fave_Visitor::get_browser();
            $get_user_agent    = Fave_Visitor::get_user_agent();
            $get_location      = Fave_Visitor::get_location();
            $location          = explode(',', $get_location);
            $city              = isset($location[0]) ? $location[0] : null;
            $country           = isset($location[1]) ? $location[1] : null;
            $country_code      = isset($location[2]) ? $location[2] : null;
            
            //wp_die($unique_identifier);

            $data = array(
                'listing_id'        => $post->ID,
                'time'              => gmdate('Y-m-d H:i:s'),
                'ip_address'        => $ip_address,
                'unique_identifier' => $unique_identifier,
                'referral_url'      => $referral_url,
                'referral_domain'   => $referral_domain,
                'platform'          => $platform,
                'device'            => $device,
                'browser'           => $get_browser,
                'http_user_agent'   => $get_user_agent,
                'language'          => $get_language,
                'country_code'      => $country_code,
                'country'           => $country,
                'city'              => $city,
            );

            $format = array(
                '%d',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
                '%s',
            );

            $wpdb->insert($table_name, $data, $format);
        }

        
        /**
         * Get country data.
         *
         * @access public
         * @return array
         */
        public function get_countries( $args = array() ) {
            $countries = array();
            $results = $this->count_column_data( 'country', $args );

            $countries = array_map( function($result) {

                return [
                    'name' => $result->country,
                    'count' => $result->country_count,
                ];

            }, $results );


            return $countries;
        }

        /**
         * Get browsers data.
         *
         * @access public
         * @return array
         */
        public function get_browsers_data( $args = array() ) {
            $column = 'browser';
            $browsers = array();

            $results = $this->count_column_data( $column, $args );

            $browsers = array_map( function($result) {

                return [
                    'name' => $result->browser,
                    'count' => $result->browser_count,
                ];

            }, $results );

            return $browsers;
        }


        /**
         * Get platforms data.
         *
         * @access public
         * @return array
         */
        public function get_platforms( $args = array() ) {
            $platforms = array();
            $results = $this->count_column_data( 'platform', $args );

            $platforms = array_map( function($result) {

                return [
                    'name' => $result->platform,
                    'count' => $result->platform_count,
                ];

            }, $results );

            return $platforms;
        }

        /**
         * Get devices data.
         *
         * @access public
         * @return array
         */
        public function get_devices($args = array()) {
            $results = $this->count_column_data('device', $args);

            $devices = array_map(function ($result) {
                return [
                    'name' => $result->device,
                    'count' => $result->device_count,
                ];
            }, $results);

            return $devices;
        }

        public static function get_referrers($args = array()) {
            global $wpdb;
            $table_name = $wpdb->prefix . 'favethemes_insights';

            $args = wp_parse_args($args, [
                'listing_id' => false,
                'user_id' => false,
                'time' => false,
            ]);

            $query = "SELECT {$table_name}.referral_domain AS referral_domain,
                        COUNT( {$table_name}.referral_domain ) AS referral_domain_count
                        FROM {$table_name}
                        INNER JOIN {$wpdb->posts} ON ( {$wpdb->posts}.ID = {$table_name}.listing_id )
                        WHERE {$wpdb->posts}.post_status = 'publish'
                        AND {$table_name}.referral_domain IS NOT NULL
                        AND {$table_name}.referral_url IS NOT NULL";

            // Apply filter for user_id, listing_id, and time
            $query_parts = array($query);
            $query_parts = apply_filters('get_user_listing_time_query', $query_parts, $args);

            $query_parts[] = "GROUP BY referral_domain";
            $query_parts[] = "ORDER BY referral_domain_count DESC";
            $query_parts[] = "LIMIT 15";

            $final_query = join("\n", $query_parts);
            $results = $wpdb->get_results($final_query, OBJECT);

            if (!is_array($results) || empty($results)) {
                return array();
            }

            $referrers = array_map(function ($result) use ($table_name, $args) {
                $domain = $result->referral_domain;

                return [
                    'domain' => $domain,
                    'count' => $result->referral_domain_count,
                    'subrefs' => self::get_domain_referrers($domain, $table_name, $args),
                ];
            }, $results);

            return $referrers;
        }


        public static function get_domain_referrers( $domain, $table_name, $args = array() ) {
            global $wpdb;
            $query = array();
            $referrals = array();

            if ( empty( $domain ) ) {
                return $referrals;
            }

            $args = wp_parse_args( $args, [
                'listing_id' => false,
                'user_id' => false,
                'time' => false,
            ] );

            $query[] = "SELECT {$table_name}.referral_url AS referral_url,
                    COUNT( {$table_name}.referral_url ) AS referral_url_count
                    FROM {$table_name}
                    INNER JOIN {$wpdb->posts} ON ( {$wpdb->posts}.ID = {$table_name}.listing_id )
                    WHERE {$wpdb->posts}.post_status = 'publish'
                    AND {$table_name}.referral_domain = %s
                    AND {$table_name}.referral_url IS NOT NULL
            ";

            //apply fiter for user_id. listing_id and time
            $query   = apply_filters('get_user_listing_time_query', $query, $args);

            $query[] = "GROUP BY referral_url";
            $query[] = "ORDER BY referral_url_count DESC";
            $query[] = "LIMIT 10";

            $query = join( "\n", $query );
            $results = $wpdb->get_results( $wpdb->prepare( $query, $domain ), OBJECT );

            if ( ! is_array( $results ) || empty( $results ) ) {
                return $referrals;
            }

            foreach ( $results as $result ) {
                
                $referrals[] = [
                    'url' => $result->referral_url,
                    'count' => $result->referral_url_count,
                ];
            }

            return $referrals;
        }

        /**
         * count given column data
         *
         * @access public
         * @return object|null
         */
        public function count_column_data($column, $args = array()) {
            global $wpdb;
            $table_name = $wpdb->prefix . 'favethemes_insights';

            $args = wp_parse_args($args, array(
                'user_id'    => false,
                'listing_id' => false,
                'time'       => false,
            ));

            $query = "SELECT {$table_name}.{$column} AS {$column},
                        COUNT( {$table_name}.{$column} ) AS {$column}_count
                        FROM {$table_name}
                        INNER JOIN {$wpdb->posts} ON ( {$wpdb->posts}.ID = {$table_name}.listing_id )
                        WHERE {$wpdb->posts}.post_status = 'publish'
                        AND {$table_name}.{$column} IS NOT NULL";

            // Apply filter for user_id, listing_id, and time
            $query_parts = array($query);
            $query_parts = apply_filters('get_user_listing_time_query', $query_parts, $args);

            $query_parts[] = "GROUP BY {$column}";
            $query_parts[] = "ORDER BY {$column}_count DESC";
            $query_parts[] = "LIMIT 15";

            $final_query = join("\n", $query_parts);

            $result = $wpdb->get_results($final_query, OBJECT);

            if (!is_array($result) || empty($result)) {
                return array();
            }

            return $result;
        }


        /**
         * Get query for single user, single listing and time frame
         *
         * @access public
         * @return array
         */
        public function get_user_listing_time_query($query, $args) {
            global $wpdb;
            $table_name = $wpdb->prefix . 'favethemes_insights';

            if (!empty($args['user_id'])) {
                $query[] = sprintf(" AND {$wpdb->posts}.post_author = %d ", $args['user_id']);
            }

            if (!empty($args['listing_id'])) {
                $query[] = sprintf(" AND {$table_name}.listing_id = %d ", $args['listing_id']);
            }

            if (!empty($args['time']) && in_array($args['time'], ['lastday', 'lasttwo', 'lastweek', 'last2week', 'lastmonth', 'last2month', 'lasthalfyear', 'lastyear'])) {

                $modifiedTime = $this->get_modified_time($args['time']);

                $query[] = sprintf(
                    " AND {$table_name}.time >= '%s' ",
                    $modifiedTime
                );
            }

            return $query;
        }

        private function get_modified_time($time)
        {
            $DateTimeZone = wp_timezone();
            $DateTime = new DateTime('now', $DateTimeZone);

            $time_token = [
                'lastday' => '-1 day',
                'lasttwo' => '-2 day',
                'lastweek' => '-7 days',
                'last2week' => '-14 days',
                'lastmonth' => '-30 days',
                'last2month' => '-60 days',
                'lasthalfyear' => '-182 days',
                'lastyear' => '-365 days'
            ];

            $modifiedTime = $DateTime->modify($time_token[$time])->format('Y-m-d H:i:s');
            return $modifiedTime;
        }




    } // end class

    new Fave_Visits();
} // End !exist

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists