GIF89a=( õ' 7IAXKgNgYvYx\%wh…hŽth%ˆs%—x¨}9®Œ©€&©‰%¶†(¹–.¹5·œD¹&Çš)ÇŸ5ǘ;Í£*È¡&Õ²)ׯ7×µ<Ñ»4ï°3ø‘HÖ§KͯT÷¨Yÿšqÿ»qÿÔFØ !ù ' !ÿ NETSCAPE2.0 , =( þÀ“pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§gª«ªE¯°¨¬ª±²Œ¹º¹E¾­”´ÂB¶¯ §Åȸ»ÑD¾¿Á•ÄÅ®° ÝH¾ÒLÀÆDÙ«D¶BÝïðÀ¾DÑÑÔTÌÍíH òGö¨A RÎڐ |¥ ٭&ºìE8œ¹kGÔAÞpx­a¶­ã R2XB®åE8I€Õ6Xî:vT)äžþÀq¦è³¥ì仕F~%xñ  4#ZÔ‰O|-4Bs‘X:= QÉ œš lºÒyXJŠGȦ|s hÏíK–3l7·B|¥$'7Jީܪ‰‡àá”Dæn=Pƒ ¤Òëí‰`䌨ljóá¯Éüv>á–Á¼5 ½.69ûϸd«­ºÀûnlv©‹ªîf{¬ÜãPbŸ  l5‘ޝpß ´ ˜3aÅùäI«O’ý·‘áÞ‡˜¾Æ‚ÙÏiÇÿ‹Àƒ #öó)pâš Þ½ ‘Ý{ó)vmÞü%D~ 6f s}ŃƒDØW Eþ`‡þ À…L8xá†ç˜{)x`X/> Ì}mø‚–RØ‘*|`D=‚Ø_ ^ð5 !_…'aä“OÚ—7âcð`D”Cx`ÝÂ¥ä‹éY¹—F¼¤¥Š?¡Õ™ n@`} lď’ÄÉ@4>ñd œ à‘vÒxNÃ×™@žd=ˆgsžG±æ ´²æud &p8Qñ)ˆ«lXD©øÜéAžHìySun jª×k*D¤LH] †¦§C™Jä–´Xb~ʪwStŽ6K,°£qÁœ:9ت:¨þªl¨@¡`‚ûÚ ».Û¬¯t‹ÆSÉ[:°=Š‹„‘Nåû”Ìî{¿ÂA ‡Rà›ÀÙ6úë°Ÿð0Ä_ ½;ÃϱîÉì^ÇÛÇ#Ëë¼ôº!±Ä˜íUîÅÇ;0L1óÁµö«p% AÀºU̬ݵ¼á%霼€‡¯Á~`ÏG¯»À× ­²± =4ªnpð3¾¤³¯­ü¾¦îuÙuµÙ®|%2ÊIÿür¦#0·ÔJ``8È@S@5ê¢ ö×Þ^`8EÜ]ý.뜃Âç 7 ú ȉÞj œ½Dç zý¸iþœÑÙûÄë!ˆÞÀl§Ïw‹*DçI€nEX¯¬¼ &A¬Go¼QföõFç°¯;é¦÷îŽêJ°îúôF5¡ÌQ|îúöXªæ»TÁÏyñêï]ê² o óÎC=öõ›ÒÓPB@ D×½œä(>èCÂxŽ`±«Ÿ–JЀ»Û á¤±p+eE0`ëŽ`A Ú/NE€Ø†À9‚@¤à H½7”à‡%B‰`Àl*ƒó‘–‡8 2ñ%¸ —€:Ù1Á‰E¸àux%nP1ð!‘ðC)¾P81lÑɸF#ˆ€{´âé°ÈB„0>±û °b¡Š´±O‚3È–Ù()yRpbµ¨E.Z‘D8ÊH@% òŒx+%Ù˜Æcü »¸˜fõ¬b·d`Fê™8èXH"ÉÈ-±|1Ô6iI, 2““¬$+](A*jÐ QTÂo‰.ÛU슬Œã„Ž`¯SN¡–¶Äåyše¯ª’­¬‚´b¦Éož œ)åyâ@Ì®3 ÎtT̉°&Ø+žLÀf"Ø-|žçÔ>‡Ðv¦Ðžì\‚ Q1)Ž@Žh#aP72”ˆ™¨$‚ !ù " , =( …7IAXG]KgNgYvYxR"k\%w]'}hŽth%ˆg+ˆs%—r.—m3šx3˜x¨}9®€&©€+¨‡7§‰%¶†(¹–.¹œD¹&ǘ;Í•&ײ)×»4ïÌ6ò§KÍ þ@‘pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§g «¬ E ±± ¨­¶°ººE Á´”·®C¬²§Ç¶Œ»ÓDÃÕƷ¯Ê±H½ºM×ÁGÚ¬D¶BËÁ½î½DÓôTÏÛßîG»ôõC×CÌ l&âž:'òtU³6ɹ#·Ø)€'Ü.6±&ëÍÈ» K(8p0N?!æ2"ÛˆNIJX>R¼ÐO‚M '¡¨2¸*Ÿþ>#n↠å@‚<[:¡Iïf’ ¤TÚ˘CdbÜÙ“[«ŽEú5MBo¤×@€`@„€Êt W-3 ¶Ÿ¡BíêäjIÝ…Eò9[T…$íêﯧ„…•s»Óȳ¹€ÅÚdc®UUρ#±Ùïldj?´í¼²`\ŽÁðÞu|3'ÖŒ]ë6 ¶S#²‡˜FKLÈ *N E´‘áäŠ$˜›eÄYD„ºq«.è촁ƒs \-ÔjA 9²õ÷å- üúM[Âx(ís÷ì®x€|í¡Ù’p¦‚ ŽkÛTÇDpE@WÜ ²Ç]kŠ1¨ þ€·Yb ÓÁ‰l°*n0 ç™—žzBdОu¾7ĉBl€â‰-ºx~|UåU‰  h*Hœ|e"#"?vpÄiŠe6^ˆ„+qâŠm8 #VÇá ‘å–ÄV„œ|Аè•m"сœn|@›U¶ÆÎž—Špb¥G¨ED”€±Úê2FÌIç? >Éxå Œ± ¡¤„%‘žjŸ‘ꄯ<Ìaà9ijÐ2˜D¦È&›†Z`‚å]wþ¼Â:ç6àB¤7eFJ|õÒ§Õ,¨äàFÇ®cS·Ê¶+B°,‘Þ˜ºNûãØ>PADÌHD¹æž«ÄÀnÌ¥}­#Ë’ë QÀÉSÌÂÇ2ÌXÀ{æk²lQÁ2«ÊðÀ¯w|2Í h‹ÄÂG€,m¾¶ë3ÐÙ6-´ÅE¬L°ÆIij*K½ÀÇqï`DwVÍQXœÚÔpeœ±¬Ñ q˜§Tœ½µƒ°Œìu Â<¶aØ*At¯lmEØ ü ôÛN[P1ÔÛ¦­±$ÜÆ@`ùåDpy¶yXvCAyåB`ŽD¶ 0QwG#¯ æš[^Äþ $ÀÓÝǦ{„L™[±úKÄgÌ;ï£S~¹ìGX.ôgoT.»åˆ°ùŸûù¡?1zö¦Ÿž:ÅgÁ|ìL¹ „®£œŠ‚à0œ]PÁ^p F<"•ç?!,ñ‡N4—…PÄ Á„ö¨Û:Tè@hÀ‹%táÿ:ø-žI<`þ‹p I….)^ 40D#p@ƒj4–؀:²‰1Øâr˜¼F2oW¼#Z†;$Q q” ‘ ÂK¦ñNl#29 !’F@¥Bh·ᏀL!—XFóLH‘Kh¤.«hE&JòG¨¥<™WN!€ÑÙÚˆY„@†>Œž19J" 2,/ &.GXB%ÌRÈ9B6¹W]’î×ÔW¥’IÎ$ ñ‹ÓŒE8YÆ ¼³™ñA5“à®Q.aŸB€&Ø©³ JÁ—! ¦t)K%tœ-¦JF bòNMxLôþ)ÐR¸Ð™‘ èÝ6‘O!THÌ„HÛ ‰ !ù ) , =( …AXKgNgYvYxR"k\%wh…hŽh%ˆg+ˆs%—r.—x3˜x¨}9®€&©€+¨Œ,©‡7§‰%¶†(¹–.¹5·&Çš)ǘ;Í•&×£*Ȳ)ׯ7×»4ï°3øÌ6ò‘HÖ§KÍ»Hó¯T÷¨Yÿ»qÿÇhÿ þÀ”pH,È¤rÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§g ª« E$±²¨ª­ · °²½$E$ÂÕ««D· Í ¿¦Ç¶¸ÌŒ¾³CÃÅÆ E ééH½MÛÂGâªD­ çBêêϾD²ÒaÀà€Š1r­ðÓ¤ ÔožzU!L˜C'¾yW½UGtäÇïÙllê0×àÂuGþ)AÀs[þ·xì ÁxO%ƒûX2ó—  P£n›R/¡ÑšHše+êDm?# —‘Ç£6¡8íJ¡ŸâDiäªM¥Ö„ôj“¬¹£5oQ7°- <‡ *´lãÓŒ2r/a!l)dÈ A™ÈE¢ôÔ͆…ð ;Ö˜c ¡%ß‚’Ùˆâ¸b½—pe~C"BíëÚHïeF2§æŠ8qb t_`urŠeü wÅu3êæPv§h•"ß`íÍxçLĹÜÖ3á  ~Öº“®›¸ÏMDfJÙ °„ÛµáWõ%§œ‚à©–‚X ÓØ)@®Ñ›Eþ´wëuÅSxb8y\mÖzœ¥§ZbºE—ÂLªÌw!y(>¡™wú=Ç|ÅÝs¢d €CÁW)HÜcC$€L Ä7„r.á\{)@ð` @ äXÈ$PD” `šaG:§æˆOˆ72EÐamn]ù"ŒcÊxÑŒ° &dR8`g«iÙŸLR!¦P …d’ä¡“¦ðÎTƒ¦ià|À _ ¥ Qi#¦Šg›Æ ›noMµ ›V ã£)p ç£ÎW…š=Âeªk§†j„ ´®1ß²sÉxéW«jšl|0¯B0Û, \jÛ´›6±¬¶C ÛíWþï|ëÙ‹¸ñzĸV {ì;Ýñn¼òVˆm³I¼³.Ðã¤PN¥ ²µ¼„µCã+¹ÍByî£Ñ¾HŸ›ëê 7ìYÆFTk¨SaoaY$Dµœìï¿Ã29RÈkt Çïfñ ÇÒ:ÀÐSp¹3ÇI¨â¥DZÄ ü9Ïýögñ½­uÔ*3)O‘˜Ö[_hv ,àî×Et Ÿé¶BH€ Õ[ü±64M@ÔSÌM7dÐl5-ÄÙU܍´©zߌ3Ô€3ž„ „ ¶ÛPô½5×g› êÚ˜kN„Ý…0Îj4€Ìë°“#{þÕ3S2çKÜ'ợlø¼Ú2K{° {Û¶?žm𸧠ËI¼nEò='êüóºè^üæÃ_Û=°óž‚ì#Oý¿Í'¡½áo..ÏYìnüñCœO±Áa¿¢Kô½o,üÄËbö²çºíï{ËC Ú— "”Ï{ËK ÍÒw„õ±Oz dÕ¨à:$ ƒô—«v»] A#ð «€¿šéz)Rx׿ˆ¥‚d``èw-îyÏf×K!ð€þ­Ð|ìPľ„=Ì`ý(f” 'Pa ¥ÐBJa%Ðâf§„%Š¡}FàáÝ×6>ÉäŠG"éŽè=ø!oа^FP¼Ø©Q„ÀCÙÁ`(Ž\ÄÝ® ©Â$<n@dÄ E#ììUÒI! ‚#lù‹`k¦ÐÇ'Rró’ZýNBÈMF Í[¤+‹ðɈ-áwj¨¥þ8¾rá ,VÂh„"|½œ=×G_¦Ñ™EØ 0i*%̲˜Æda0mV‚k¾)›;„&6 p>ÓjK “¦Ç# âDÂ:ûc?:R Ó¬fÞéI-Ì“•Ã<ä=™Ï7˜3œ¨˜c2ŒW ,ˆ”8(T™P‰F¡Jhç"‚ ; 403WebShell
403Webshell
Server IP : 104.21.83.152  /  Your IP : 216.73.216.195
Web Server : LiteSpeed
System : Linux premium229.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
User : akhalid ( 749)
PHP Version : 8.3.22
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/akhalid/dangroup.sa/wp-content/plugins/wp-statistics/includes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/akhalid/dangroup.sa/wp-content/plugins/wp-statistics/includes/template-functions.php
<?php

use WP_STATISTICS\Country;
use WP_STATISTICS\IP;
use WP_STATISTICS\Pages;
use WP_Statistics\Service\Analytics\DeviceDetection\DeviceHelper;
use WP_Statistics\Service\Analytics\DeviceDetection\UserAgent;
use WP_Statistics\Service\Geolocation\GeolocationFactory;
use WP_Statistics\Service\Admin\PrivacyAudit\Faqs\RequireConsent;
use WP_STATISTICS\TimeZone;
use WP_STATISTICS\User;

/**
 * Get Current User IP
 */
function wp_statistics_get_user_ip()
{
    return IP::getIP();
}

/**
 * Get Current User Data
 *
 * @throws Exception
 */
function wp_statistics_get_current_user_data()
{

    // Get Current User country and City
    $data = wp_statistics_get_user_location();

    // Get Current User IP
    $data['ip'] = wp_statistics_get_user_ip();

    // Get User Agent contain Browser and Platform
    $data['agent'] = UserAgent::getUserAgent();

    // Get User info if Registered in WordPress
    if (User::is_login()) {
        $data['user'] = User::get();
    }

    // Return
    return $data;
}

/**
 * Get User Statistics Data By IP
 *
 * @param bool $ip
 * @return array
 * @throws Exception
 */
function wp_statistics_get_user_location($ip = false)
{
    $ip   = ($ip === false ? wp_statistics_get_user_ip() : $ip);
    $data = array(
        'country' => '',
        'city'    => '',
    );

    // Get the location
    $location = GeolocationFactory::getLocation($ip);
    $country  = $location['country'];

    $data['country'] = array(
        'code' => $location,
        'name' => Country::getName($country),
        'flag' => Country::flag($country)
    );

    // Get User City
    $data['city'] = $location['city'];

    return $data;
}

/**
 * Get Current Users online
 *
 * @param array $options
 * @return mixed
 */
function wp_statistics_useronline($options = array())
{
    global $wpdb;

    //Check Parameter
    $defaults = array(
        /**
         * Type Of Page in WordPress
         * @See Frontend\get_page_type
         *
         * -- Acceptable values --
         *
         * post     -> WordPress Post single page From All of public post Type
         * page     -> WordPress page single page
         * product  -> WooCommerce product single page
         * home     -> Home Page website
         * category -> WordPress Category Page
         * post_tag -> WordPress Post Tags Page
         * tax      -> WordPress Term Page for all Taxonomies
         * author   -> WordPress Users page
         * 404      -> 404 Not Found Page
         * archive  -> WordPress Archive Page
         * all      -> All Site Page
         *
         */
        'type'         => 'all',
        /**
         * WordPress Query object ID
         * @example array('type' => 'product', 'ID' => 5)
         */
        'ID'           => 0,
        /**
         * Get number of logged users or all users
         *
         * -- Acceptable values --
         * false  -> Get Number of all users
         * true   -> Get Number of all logged users in wordpress
         */
        'logged_users' => false,
        /**
         * Get number User From Custom Country
         *
         * -- Acceptable values --
         * ISO Country Code -> For Get List @See \wp-statistics\includes\functions\country-code.php
         *
         */
        'location'     => 'all',
        /**
         * Search Filter by User agent name
         * e.g : Firefox , Chrome , Safari , Unknown ..
         * @see wp_statistics_get_browser_list()
         *
         */
        'agent'        => 'all',
        /**
         * Search filter by User Operating System name
         * e.g : Windows, iPad, Macintosh, Unknown, ..
         *
         */
        'platform'     => 'all',
        /**
         * Return Of Data
         *
         * -- Acceptable values --
         * count -> Get number of user online
         * all   -> Get List of User Online data
         */
        'return'       => 'count'
    );

    // Parse incoming $args into an array and merge it with $defaults
    $arg = wp_parse_args($options, $defaults);

    //Basic SQL
    $type_request = ($arg['return'] == "all" ? '*' : 'COUNT(*)');
    $sql          = "SELECT {$type_request} FROM " . WP_STATISTICS\DB::table('useronline');

    //Check Where Condition
    $where = [];

    //Check Type of Page
    if ($arg['type'] != "all") {
        $where[] = "`type`='" . $arg['type'] . "' AND `page_id` = " . $arg['ID'];
    }

    //Check Custom user
    if ($arg['logged_users'] === true) {
        $where[] = "`user_id` > 0";
    }

    //Check Location
    if ($arg['location'] != "all") {
        $ISOCountryCode = Country::getList();
        if (array_key_exists($arg['location'], $ISOCountryCode)) {
            $where[] = "`location` = '" . $arg['location'] . "'";
        }
    }

    //Check User Agent
    if ($arg['agent'] != "all") {
        $where[] = "`agent` = '" . $arg['agent'] . "'";
    }

    //Check User Platform
    if ($arg['platform'] != "all") {
        $where[] = "`platform` = '" . $arg['platform'] . "'";
    }

    //Push Conditions to SQL
    if (!empty($where)) {
        $sql .= ' WHERE ' . implode(' AND ', $where);
    }

    //Return Number od user Online
    return ($arg['return'] == "count" ? $wpdb->get_var($sql) : $wpdb->get_results($sql)); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

/**
 * This function get the visit statistics for a given time frame
 *
 * @param $time
 * @param null $daily
 * @return int
 */
function wp_statistics_visit($time, $daily = null)
{
    global $wpdb;

    //Date Column Name in visits table
    $table_name  = WP_STATISTICS\DB::table('visit');
    $date_column = 'last_counter';

    //Prepare Selector Sql
    $selector = 'SUM(visit)';
    if ($daily == true) {
        $selector = '*';
    }

    //Generate Base Sql
    $sql = "SELECT " . $selector . " FROM `" . $table_name . "` ";

    //Create Sum Views variable
    $sum = 0;

    //Check if daily Report
    if ($daily === true) {

        // Check Sanitize Datetime
        if (TimeZone::isValidDate($time)) {
            $d = $time;
        } else {
            $d = TimeZone::getCurrentDate('Y-m-d', $time);
        }

        $result = $wpdb->get_row($sql . " WHERE `$date_column` = '" . $d . "'");  // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
        if (null !== $result) {
            $sum = $result->visit;
        }
    } else {

        //Generate MySql Time Conditions
        if (is_array($time) && array_key_exists('start', $time) && array_key_exists('end', $time)) {
            $mysql_time_sql = WP_STATISTICS\Helper::mysql_time_conditions($date_column, '', $time);
            if (!empty($mysql_time_sql)) {
                $sql = $sql . ' WHERE ' . $mysql_time_sql;
            }
        } else {
            $mysql_time_sql = WP_STATISTICS\Helper::mysql_time_conditions($date_column, $time);
            if (!empty($mysql_time_sql)) {
                $sql = $sql . ' WHERE ' . $mysql_time_sql;
            }
        }

        //Request To database
        $result = $wpdb->get_var($sql); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared

        //Custom Action
        if ($time == "total") {
            $result += WP_STATISTICS\Historical::get('visits');
        }

        $sum = $result;
    }

    return !is_numeric($sum) ? 0 : $sum;
}

/**
 * This function gets the visitor statistics for a given time frame.
 *
 * @param $time
 * @param null $daily
 * @param bool $count_only
 * @param array $options
 * @return int|null|string
 */
function wp_statistics_visitor($time, $daily = null, $count_only = false, $options = array())
{
    global $wpdb;

    //Check Parameter
    $defaults = array(
        /**
         * Type Of Page in WordPress
         * @See Frontend\get_page_type
         *
         * -- Acceptable values --
         *
         * post     -> WordPress Post single page From All of public post Type
         * page     -> WordPress page single page
         * product  -> WooCommerce product single page
         * home     -> Home Page website
         * category -> WordPress Category Page
         * post_tag -> WordPress Post Tags Page
         * tax      -> WordPress Term Page for all Taxonomies
         * author   -> WordPress Users page
         * 404      -> 404 Not Found Page
         * archive  -> WordPress Archive Page
         * all      -> All Site Page
         *
         */
        'type'     => 'all',
        /**
         * WordPress Query object ID
         * @example array('type' => 'product', 'ID' => 5)
         */
        'ID'       => 0,
        /**
         * Get number User From Custom Country
         *
         * -- Acceptable values --
         * ISO Country Code -> For Get List @See \wp-statistics\includes\functions\country-code.php
         *
         */
        'location' => 'all',
        /**
         * Search Filter by User agent name
         * e.g : Firefox , Chrome , Safari , Unknown ..
         * @see wp_statistics_get_browser_list()
         *
         */
        'agent'    => 'all',
        /**
         * Search filter by User Operating System name
         * e.g : Windows, iPad, Macintosh, Unknown, ..
         *
         */
        'platform' => 'all'
    );

    // Parse incoming $args into an array and merge it with $defaults
    $arg = wp_parse_args($options, $defaults);

    //Create History Visitors variable
    $history = 0;

    //Prepare Selector Sql
    $date_column = 'last_counter';
    $selector    = '*';
    if ($count_only == true) {
        $selector = 'count(last_counter)';
    }

    //Generate Base Sql
    if ($arg['type'] != "all" and WP_STATISTICS\Option::get('visitors_log') == true) {
        $sql = "SELECT {$selector} FROM `" . WP_STATISTICS\DB::table('visitor') . "` INNER JOIN `" . WP_STATISTICS\DB::table("visitor_relationships") . "` ON `" . WP_STATISTICS\DB::table("visitor_relationships") . "`.`visitor_id` = `" . WP_STATISTICS\DB::table('visitor') . "`.`ID`  INNER JOIN `" . WP_STATISTICS\DB::table('pages') . "` ON `" . WP_STATISTICS\DB::table('pages') . "`.`page_id` = `" . WP_STATISTICS\DB::table("visitor_relationships") . "` . `page_id`";
    } else {
        $sql = "SELECT {$selector} FROM `" . WP_STATISTICS\DB::table('visitor') . "`";
    }

    //Check Where Condition
    $where = [];

    //Check Type of Page
    if ($arg['type'] != "all" and WP_STATISTICS\Option::get('visitors_log') == true) {
        $where[] = "`" . WP_STATISTICS\DB::table('pages') . "`.`type`='" . $arg['type'] . "' AND `" . WP_STATISTICS\DB::table('pages') . "`.`page_id` = " . $arg['ID'];
    }

    //Check Location
    if ($arg['location'] != "all") {
        $ISOCountryCode = Country::getList();
        if (array_key_exists($arg['location'], $ISOCountryCode)) {
            $where[] = "`" . WP_STATISTICS\DB::table('visitor') . "`.`location` = '" . $arg['location'] . "'";
        }
    }

    //Check User Agent
    if ($arg['agent'] != "all") {
        $where[] = "`" . WP_STATISTICS\DB::table('visitor') . "`.`agent` = '" . $arg['agent'] . "'";
    }

    //Check User Platform
    if ($arg['platform'] != "all") {
        $where[] = "`" . WP_STATISTICS\DB::table('visitor') . "`.`platform` = '" . $arg['platform'] . "'";
    }

    //Check Date Time report
    if ($daily == true) {

        // Check Sanitize Datetime
        if (TimeZone::isValidDate($time)) {
            $d = $time;
        } else {
            $d = TimeZone::getCurrentDate('Y-m-d', $time);
        }

        //Get Only Current Day Visitors
        $where[] = "`" . WP_STATISTICS\DB::table('visitor') . "`.`last_counter` = '" . $d . "'";
    } else {

        //Generate MySql Time Conditions
        if (is_array($time) && array_key_exists('start', $time) && array_key_exists('end', $time)) {
            $mysql_time_sql = WP_STATISTICS\Helper::mysql_time_conditions($date_column, '', $time);
            if (!empty($mysql_time_sql)) {
                $sql = $sql . ' WHERE ' . $mysql_time_sql;
            }
        } else {
            $mysql_time_sql = WP_STATISTICS\Helper::mysql_time_conditions($date_column, $time);
            if (!empty($mysql_time_sql)) {
                $where[] = $mysql_time_sql;
            }
        }
    }

    //Push Conditions to SQL
    if (!empty($where)) {
        $sql .= ' WHERE ' . implode(' AND ', $where);
    }

    //Custom Action
    if ($time == "total" and $arg['type'] == "all") {
        $history = WP_STATISTICS\Historical::get('visitors');
    }

    // Execute the SQL call, if we're only counting we can use get_var(), otherwise we use query().
    if ($count_only == true) {
        $sum = $wpdb->get_var($sql); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
        $sum += $history;
    } else {
        $sum = $wpdb->query($sql); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
    }

    return $sum;
}

/**
 * This function returns the statistics for a given page.
 *
 * @param $time
 * @param string $page_uri
 * @param int $id
 * @param null $rangestartdate
 * @param null $rangeenddate
 * @param bool $type
 * @return int|null|string
 *
 * @todo    Replace all instances of this function with `ViewsModel->countViews()`.
 */
function wp_statistics_pages($time, $page_uri = '', $id = -1, $rangestartdate = null, $rangeenddate = null, $type = false)
{
    global $wpdb;

    //Date Column Name in visits table
    $table_name  = WP_STATISTICS\DB::table('pages');
    $date_column = 'date';

    // History Vars
    $history     = 0;
    $history_key = null;
    $history_id  = null;

    //Check Where Condition
    $where = [];

    //Check Query By Page ID or Page Url
    if ($type) {
        $query = $wpdb->prepare("`type` = %s", $type);

        if ($id != -1) {
            $query       .= $wpdb->prepare(" AND `id` = %d", $id);
            $history_key = 'page';
            $history_id  = absint($id);
        }

        if ($page_uri != '') {
            $page_uri_sql = esc_sql($page_uri);
            $query        .= $wpdb->prepare(" AND `URI` = %s", $page_uri_sql);
            $history_key  = 'uri';
            $history_id   = $page_uri;
        }

        $where[] = apply_filters('wp_statistics_pages_where_type_query', $query, $id, $type);
    } else {

        // If no page URI has been passed in, get the current page URI.
        if ($page_uri == '') {
            $page_uri = Pages::get_page_uri();
        }
        $page_uri_sql = esc_sql($page_uri);

        // If a page/post ID has been passed, use it to select the rows, otherwise use the URI.
        if ($id != -1) {
            $where[]     = "`id`= " . absint($id);
            $history_key = 'page';
            $history_id  = absint($id);
        } else {
            $where[]     = "`URI` = '{$page_uri_sql}'";
            $history_key = 'uri';
            $history_id  = $page_uri;
        }
    }

    //Custom Action
    if ($time == "total") {
        if ($history_key && $history_id) {
            $history = WP_STATISTICS\Historical::get($history_key, $history_id);
        }
    }

    //Prepare Time
    $time_array = array();
    if (is_numeric($time) || TimeZone::isValidDate($time)) {
        $time_array['is_day'] = true;
    }
    if (!is_null($rangestartdate) and !is_null($rangeenddate)) {
        $time_array = array('start' => $rangestartdate, 'end' => $rangeenddate);
    }

    //Check MySql Time Conditions
    $mysql_time_sql = WP_STATISTICS\Helper::mysql_time_conditions($date_column, $time, $time_array);
    if (!empty($mysql_time_sql)) {
        $where[] = $mysql_time_sql;
    }

    //Generate Base Sql
    $sql = "SELECT SUM(count) FROM {$table_name}";

    //Push Conditions to SQL
    if (!empty($where)) {
        $sql .= ' WHERE ' . implode(' AND ', $where);
    }

    //Request Get data
    $sum = $wpdb->get_var($sql); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
    $sum += $history;

    //Return Number Statistic
    return ($sum == '' ? 0 : $sum);
}

/**
 * Get top Pages between Time
 *
 * @param null $rangestartdate
 * @param null $rangeenddate
 * @param null $limit
 * @param null $post_type
 * @return array
 */
function wp_statistics_get_top_pages($rangestartdate = null, $rangeenddate = null, $limit = null, $post_type = null)
{
    global $wpdb;

    $spliceLimit = ($limit != null ? $limit : 5);
    $limit       = null;

    // Get every unique URI from the pages database.
    if ($rangestartdate != null && $rangeenddate != null) {
        $whereType = ($post_type != null ? $wpdb->prepare(" AND `type`=%s", $post_type) : '');
        $result    = $wpdb->get_results(
            $wpdb->prepare("SELECT `uri`,`id`,`type` FROM " . \WP_STATISTICS\DB::table('pages') . " WHERE `date` BETWEEN %s AND %s {$whereType} GROUP BY `id`" . ($limit != null ? ' LIMIT ' . $limit : ''), $rangestartdate, $rangeenddate), // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
            ARRAY_N);
    } else {
        $limitQuery = '';
        if ($limit) {
            $limitQuery = $wpdb->prepare(" LIMIT %d", $limit);
        }
        $whereType = ($post_type != null ? $wpdb->prepare(" WHERE `type`=%s", $post_type) : '');
        $result    = $wpdb->get_results("SELECT `uri`, `id`, `type` FROM " . \WP_STATISTICS\DB::table('pages') . " {$whereType} GROUP BY `id` {$limitQuery}", ARRAY_N); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
    }

    $total = 0;
    $uris  = array();

    // Now get the total page visit count for each unique URI.
    foreach ($result as $out) {
        //Prepare item
        list($url, $page_id, $page_type) = $out;

        // Check if item is of specific post type (string or part of an array) or if post type is set to null
        if (is_null($post_type) || $page_type == $post_type || (is_array($post_type) && in_array($page_type, $post_type))) {
            // Increment the total number of results.
            $total++;

            //Get Page Title
            $page_info = Pages::get_page_info($page_id, $page_type);
            $title     = mb_substr($page_info['title'], 0, 200, "utf-8");
            $page_url  = $page_info['link'];

            // Check age Title if page id or type not exist
            if ($page_info['link'] == "") {
                $page_url = path_join(get_site_url(), $url);
                $id       = WP_STATISTICS\Pages::uri_to_id($out[0]);
                $post     = get_post($id);
                if (is_object($post)) {
                    $title = esc_html($post->post_title);
                } else {
                    if ($out[0] == '/') {
                        $title = get_bloginfo();
                    } else {
                        $title = '';
                    }
                }
            }

            //Check Title is empty
            if (empty($title)) {
                $title = '-';
            }

            // Add the current post to the array.
            if ($rangestartdate != null && $rangeenddate != null) {
                $uris[] = array(
                    urldecode_deep($out[0]),
                    wp_statistics_pages('range', $out[0], -1, $rangestartdate, $rangeenddate, $post_type),
                    $page_id,
                    $title,
                    $page_url,
                );
            } else {
                $uris[] = array(
                    urldecode_deep($out[0]),
                    wp_statistics_pages('total', $out[0], -1, $rangestartdate, $rangeenddate, $post_type),
                    $page_id,
                    $title,
                    $page_url
                );
            }
        }
    }

    // If we have more than one result, let's sort them using usort.
    if (count($uris) > 1) {
        usort($uris, array('\WP_STATISTICS\Helper', 'compare_uri_hits_int'));
    }

    array_splice($uris, $spliceLimit);

    return array($spliceLimit, $uris);
    // return array($total, $uris);
}

/**
 * Returns all unique user agents in the database.
 *
 * @param null $rangestartdate
 * @param null $rangeenddate
 * @return array
 */
function wp_statistics_ua_list($rangestartdate = null, $rangeenddate = null)
{
    global $wpdb;

    if ($rangestartdate != null && $rangeenddate != null) {
        if ($rangeenddate == 'CURDATE()') {
            $result = $wpdb->get_results(
                $wpdb->prepare("SELECT DISTINCT agent FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE `last_counter` BETWEEN %s AND CURDATE()", $rangestartdate),
                ARRAY_N);
        } else {
            $result = $wpdb->get_results(
                $wpdb->prepare("SELECT DISTINCT agent FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE `last_counter` BETWEEN %s AND %s", $rangestartdate, $rangeenddate),
                ARRAY_N);
        }
    } else {
        $result = $wpdb->get_results(
            "SELECT DISTINCT agent FROM  `" . \WP_STATISTICS\DB::table('visitor') . "` ",
            ARRAY_N);
    }

    $Browsers        = array();
    $default_browser = DeviceHelper::getBrowserList();

    foreach ($result as $out) {

        //Check Browser is defined in wp-statistics
        if (array_key_exists(strtolower($out[0]), $default_browser)) {
            $Browsers[] = esc_html($out[0]);
        }
    }

    return $Browsers;
}

/**
 * Count User By User Agent
 *
 * @param $agent
 * @param null $rangestartdate
 * @param null $rangeenddate
 * @return mixed
 */
function wp_statistics_useragent($agent, $rangestartdate = null, $rangeenddate = null)
{
    global $wpdb;

    if ($rangestartdate != null || $rangeenddate != null) {
        if ($rangeenddate == null) {
            $result = $wpdb->get_var(
                $wpdb->prepare("SELECT COUNT(*) FROM  `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE `agent` = %s AND `last_counter` = %s", $agent, $rangestartdate)
            );
        } else {
            $result = $wpdb->get_var(
                $wpdb->prepare("SELECT COUNT(*) FROM  `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE `agent` = %s AND `last_counter` BETWEEN %s AND %s", $agent, $rangestartdate, $rangeenddate)
            );
        }
    } else {
        $result = $wpdb->get_var(
            $wpdb->prepare("SELECT COUNT(*) FROM  `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE `agent` = %s", $agent)
        );
    }

    return $result;
}

/**
 * Returns all unique platform types from the database.
 *
 * @param null $rangestartdate
 * @param null $rangeenddate
 * @return array
 */
function wp_statistics_platform_list($rangestartdate = null, $rangeenddate = null)
{
    global $wpdb;

    if ($rangestartdate != null && $rangeenddate != null) {
        $result = $wpdb->get_results(
            $wpdb->prepare("SELECT DISTINCT platform FROM  `" . \WP_STATISTICS\DB::table('visitor') . "`  WHERE `last_counter` BETWEEN %s AND %s", $rangestartdate, $rangeenddate),
            ARRAY_N);
    } else {
        $result = $wpdb->get_results(
            "SELECT DISTINCT platform FROM  `" . \WP_STATISTICS\DB::table('visitor') . "` ",
            ARRAY_N);
    }

    $Platforms = array();
    foreach ($result as $out) {
        $Platforms[] = esc_html($out[0]);
    }

    return $Platforms;
}

/**
 * Returns the count of a given platform in the database.
 *
 * @param $platform
 * @param null $rangestartdate
 * @param null $rangeenddate
 * @return mixed
 */
function wp_statistics_platform($platform, $rangestartdate = null, $rangeenddate = null)
{
    global $wpdb;

    if ($rangestartdate != null && $rangeenddate != null) {
        $result = $wpdb->get_var(
            $wpdb->prepare("SELECT COUNT(platform) FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE `platform` = %s AND `last_counter` BETWEEN %s AND %s", $platform, $rangestartdate, $rangeenddate)
        );
    } else {
        $result = $wpdb->get_var(
            $wpdb->prepare("SELECT COUNT(platform) FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE `platform` = %s", $platform)
        );
    }

    return $result;
}

/**
 * Returns all unique versions for a given agent from the database.
 *
 * @param $agent
 * @param null $rangestartdate
 * @param null $rangeenddate
 * @return array
 */
function wp_statistics_agent_version_list($agent, $rangestartdate = null, $rangeenddate = null)
{
    global $wpdb;

    if ($rangestartdate != null && $rangeenddate != null) {
        $result = $wpdb->get_results(
            $wpdb->prepare("SELECT DISTINCT `version` FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE agent = %s AND `last_counter` BETWEEN %s AND %s", $agent, $rangestartdate, $rangeenddate),
            ARRAY_N);
    } else {
        $result = $wpdb->get_results(
            $wpdb->prepare("SELECT DISTINCT `version` FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE agent = %s", $agent),
            ARRAY_N);
    }

    $Versions = array();
    foreach ($result as $out) {
        $Versions[] = $out[0];
    }

    return $Versions;
}

/**
 * Returns the statistics for a given agent/version pair from the database.
 *
 * @param $agent
 * @param $version
 * @param null $rangestartdate
 * @param null $rangeenddate
 * @return mixed
 */
function wp_statistics_agent_version($agent, $version, $rangestartdate = null, $rangeenddate = null)
{
    global $wpdb;

    if ($rangestartdate != null && $rangeenddate != null) {
        $result = $wpdb->get_var(
            $wpdb->prepare("SELECT COUNT(version) FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE agent = %s AND version = %s AND `last_counter` BETWEEN %s AND %s", $agent, $version, $rangestartdate, $rangeenddate)
        );
    } else {
        $result = $wpdb->get_var(
            $wpdb->prepare("SELECT COUNT(version) FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE agent = %s AND version = %s", $agent, $version)
        );
    }

    return $result;
}

/**
 * Return the SQL WHERE clause for getting the search engine.
 *
 * @param string $search_engine
 * @return bool|string
 */
function wp_statistics_searchengine_query($search_engine = 'all')
{
    global $wpdb;

    $search_query = '';
    // Are we getting results for all search engines or a specific one?
    if (strtolower($search_engine) == 'all') {
        $search_query .= "`source_channel` in ('search')";
    } else {
        // Are we getting results for all search engines or a specific one?
        $search_query .= $wpdb->prepare("`source_name` = %s", $search_engine);
    }

    return $search_query;
}

/**
 * Get Search engine Statistics
 *
 * @param string $search_engine
 * @param string $time
 * @param string $search_by [query / name]
 * @param array $range
 * @return mixed
 */
function wp_statistics_get_search_engine_query($search_engine = 'all', $time = 'total', $search_by = 'query', $range = [])
{
    global $wpdb;

    //Prepare Table Name
    $table_name = \WP_STATISTICS\DB::table('visitor');

    //Date Column table
    $date_column = 'last_counter';

    // Get a complete list of search engines
    if ($search_by == "query") {
        $search_query = wp_statistics_searchengine_query($search_engine);
    }

    //Generate Base Sql
    $sql = "SELECT COUNT(ID) FROM {$table_name} WHERE ({$search_query})";

    // Check Sanitize Datetime
    if (TimeZone::isValidDate($time)) {
        if (empty($range)) $range = ['is_day' => true];
    } else {
        if (empty($range)) $range = ['current_date' => true];
    }

    $mysql_time_sql = WP_STATISTICS\Helper::mysql_time_conditions($date_column, $time, $range);

    //Generate MySql Time Conditions
    if (!empty($mysql_time_sql)) {
        $sql = $sql . ' AND (' . $mysql_time_sql . ')';
    }

    //Request Data
    return $wpdb->get_var($sql); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
}

/**
 * This function will return the statistics for a given search engine.
 *
 * @param string $search_engine
 * @param string $time
 * @param array $range
 * @return mixed
 */
function wp_statistics_searchengine($search_engine = 'all', $time = 'total', $range = [])
{
    return wp_statistics_get_search_engine_query($search_engine, $time, $search_by = 'query', $range);
}

/**
 * Return Refer List
 *
 * @param null $time
 * @param array $range
 * @return int
 */
function wp_statistics_referrer($time = null, $range = [])
{
    global $wpdb;

    $sql = "SELECT `referred` FROM `" . \WP_STATISTICS\DB::table('visitor') . "` WHERE referred <> ''";

    // Check Sanitize Datetime
    if (TimeZone::isValidDate($time)) {
        if (empty($range)) $range = ['is_day' => true];
    } else {
        if (empty($range)) $range = ['current_date' => true];
    }

    $mysql_time_sql = WP_STATISTICS\Helper::mysql_time_conditions('last_counter', $time, $range);

    //Generate MySql Time Conditions
    if (!empty($mysql_time_sql)) {
        $sql = $sql . ' AND (' . $mysql_time_sql . ')';
    }

    $result = $wpdb->get_results($sql); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared

    $urls = array();
    foreach ($result as $item) {
        $url = wp_parse_url($item->referred);
        if (empty($url['host']) || stripos(get_bloginfo('url'), $url['host']) !== false) {
            continue;
        }
        $urls[] = $url['scheme'] . '://' . $url['host'];
    }
    $get_urls = array_count_values($urls);

    return count($get_urls);
}

/**
 * Checks if consent is required for collecting user statistics.
 *
 * This function evaluates several conditions that determine whether consent
 * is needed to collect and store user data for statistics purposes. If any
 * of the conditions are not met, it indicates that consent is required.
 *
 * @return bool Returns true if consent is required, false otherwise.
 * @since 14.10.1
 */
function wp_statistics_needs_consent()
{
    // Get the current status of the consent requirement
    $status = RequireConsent::getStatus();

    // Check if consent is required
    if ($status == 'warning') {
        return true; // Consent is required
    }

    // Return false if consent is not required
    return false;
}

Youez - 2016 - github.com/yon3zu
LinuXploit