Sh3ll
OdayForums


Server : LiteSpeed
System : Linux premium84.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
User : claqxcrl ( 523)
PHP Version : 8.1.32
Disable Function : NONE
Directory :  /home/claqxcrl/anfangola.com/wp-content/plugins/matomo/app/plugins/Live/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/claqxcrl/anfangola.com/wp-content/plugins/matomo/app/plugins/Live/VisitorDetails.php
<?php

/**
 * Matomo - free/libre analytics platform
 *
 * @link    https://matomo.org
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 *
 */
namespace Piwik\Plugins\Live;

use Piwik\API\Request;
use Piwik\Common;
use Piwik\Config;
use Piwik\Date;
use Piwik\DataTable;
use Piwik\Metrics\Formatter;
use Matomo\Network\IPUtils;
use Piwik\Piwik;
use Piwik\Site;
use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\Plugins\Referrers\API as APIReferrers;
use Piwik\View;
class VisitorDetails extends \Piwik\Plugins\Live\VisitorDetailsAbstract
{
    public function extendVisitorDetails(&$visitor)
    {
        $idSite = $this->getIdSite();
        $website = new Site($idSite);
        $timezone = $website->getTimezone();
        $currency = $website->getCurrency();
        $currencies = APISitesManager::getInstance()->getCurrencySymbols();
        $visitor += [
            'idSite' => $idSite,
            'idVisit' => $this->getIdVisit(),
            'visitIp' => $this->getIp(),
            'visitorId' => $this->getVisitorId(),
            'fingerprint' => $this->getFingerprint(),
            // => false are placeholders to be filled in API later
            'actionDetails' => false,
            'goalConversions' => false,
            'siteCurrency' => false,
            'siteCurrencySymbol' => false,
            // all time entries
            'serverDate' => $this->getServerDate(),
            'visitServerHour' => $this->getVisitServerHour(),
            'lastActionTimestamp' => $this->getTimestampLastAction(),
            'lastActionDateTime' => $this->getDateTimeLastAction(),
        ];
        $visitor['siteCurrency'] = $currency;
        $visitor['siteCurrencySymbol'] = @$currencies[$visitor['siteCurrency']];
        $visitor['siteName'] = $website->getName();
        $visitor['serverTimestamp'] = $visitor['lastActionTimestamp'];
        $visitor['firstActionTimestamp'] = strtotime($this->details['visit_first_action_time']);
        $dateTimeVisit = Date::factory($visitor['lastActionTimestamp'], $timezone);
        if ($dateTimeVisit) {
            $visitor['serverTimePretty'] = $dateTimeVisit->getLocalized(Date::TIME_FORMAT);
            $visitor['serverDatePretty'] = $dateTimeVisit->getLocalized(Date::DATE_FORMAT_LONG);
        }
        $dateTimeVisitFirstAction = Date::factory($visitor['firstActionTimestamp'], $timezone);
        $visitor['serverDatePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized(Date::DATE_FORMAT_LONG);
        $visitor['serverTimePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized(Date::TIME_FORMAT);
    }
    public function renderAction($action, $previousAction, $visitorDetails)
    {
        if (empty($action['type'])) {
            return;
        }
        switch ($action['type']) {
            case 'ecommerceOrder':
            case 'ecommerceAbandonedCart':
                $template = '@Live/_actionEcommerce.twig';
                break;
            case 'goal':
                if (empty($action['goalName'])) {
                    return;
                    // goal deleted
                }
                $template = '@Live/_actionGoal.twig';
                break;
            case 'action':
            case 'search':
            case 'outlink':
            case 'download':
                $template = '@Live/_actionCommon.twig';
                break;
        }
        if (empty($template)) {
            return;
        }
        $sitesModel = new \Piwik\Plugins\SitesManager\Model();
        if (isset($action['type']) && in_array($action['type'], ['outlink', 'download']) && isset($action['url'])) {
            $action['url'] = html_entity_decode($action['url'], ENT_QUOTES, "UTF-8");
        }
        $view = new View($template);
        $view->sendHeadersWhenRendering = false;
        $view->mainUrl = trim(Site::getMainUrlFor($this->getIdSite()));
        $view->additionalUrls = $sitesModel->getAliasSiteUrlsFromId($this->getIdSite());
        $view->action = $action;
        $view->previousAction = $previousAction;
        $view->visitInfo = $visitorDetails;
        return $view->render();
    }
    public function renderActionTooltip($action, $visitInfo)
    {
        $view = new View('@Live/_actionTooltip');
        $view->sendHeadersWhenRendering = false;
        $view->action = $action;
        $view->visitInfo = $visitInfo;
        return [[0, $view->render()]];
    }
    public function renderVisitorDetails($visitorDetails)
    {
        $view = new View('@Live/_visitorDetails.twig');
        $view->isProfileEnabled = \Piwik\Plugins\Live\Live::isVisitorProfileEnabled();
        $view->sendHeadersWhenRendering = false;
        $view->visitInfo = $visitorDetails;
        return [[0, $view->render()]];
    }
    public function renderIcons($visitorDetails)
    {
        $view = new View('@Live/_visitorLogIcons.twig');
        $view->isProfileEnabled = \Piwik\Plugins\Live\Live::isVisitorProfileEnabled();
        $view->sendHeadersWhenRendering = false;
        $view->visitor = $visitorDetails;
        return $view->render();
    }
    function getVisitorId()
    {
        if (isset($this->details['idvisitor'])) {
            return bin2hex($this->details['idvisitor']);
        }
        return false;
    }
    function getVisitServerHour()
    {
        return date('G', strtotime($this->details['visit_last_action_time']));
    }
    function getServerDate()
    {
        return date('Y-m-d', strtotime($this->details['visit_last_action_time']));
    }
    function getIp()
    {
        if (isset($this->details['location_ip'])) {
            return IPUtils::binaryToStringIP($this->details['location_ip']);
        }
        return null;
    }
    function getIdVisit()
    {
        return $this->details['idvisit'];
    }
    function getIdSite()
    {
        return isset($this->details['idsite']) ? $this->details['idsite'] : Common::getRequestVar('idSite');
    }
    function getFingerprint()
    {
        if (isset($this->details['config_id'])) {
            return bin2hex($this->details['config_id']);
        }
        return false;
    }
    function getTimestampLastAction()
    {
        return strtotime($this->details['visit_last_action_time']);
    }
    function getDateTimeLastAction()
    {
        return date('Y-m-d H:i:s', strtotime($this->details['visit_last_action_time']));
    }
    public function initProfile($visits, &$profile)
    {
        $profile['totalVisits'] = 0;
        $profile['totalVisitDuration'] = 0;
    }
    public function handleProfileVisit($visit, &$profile)
    {
        ++$profile['totalVisits'];
        $profile['totalVisitDuration'] += $visit->getColumn('visitDuration');
    }
    public function finalizeProfile($visits, &$profile)
    {
        $site = new Site($this->getIdSite());
        $formatter = new Formatter();
        $profile['totalVisitDurationPretty'] = $formatter->getPrettyTimeFromSeconds($profile['totalVisitDuration'], true);
        $rows = $visits->getRows();
        $firstVisit = $profile['visit_first'];
        if (count($rows) >= Config::getInstance()->General['live_visitor_profile_max_visits_to_aggregate']) {
            $firstVisit = $this->fetchFirstVisit();
        }
        $profile['userId'] = $visits->getLastRow()->getColumn('userId');
        $profile['firstVisit'] = $this->getVisitorProfileVisitSummary($firstVisit, $site);
        $profile['lastVisit'] = $this->getVisitorProfileVisitSummary($profile['visit_last'], $site);
        $profile['visitsAggregated'] = count($rows);
    }
    /**
     * Fetch first visit from Live API
     *
     * @return DataTable\Row
     */
    private function fetchFirstVisit()
    {
        $response = Request::processRequest('Live.getFirstVisitForVisitorId', ['idSite' => $this->getIdSite(), 'visitorId' => $this->getVisitorId()]);
        return $response->getFirstRow();
    }
    /**
     * Returns a summary for an important visit. Used to describe the first & last visits of a visitor.
     *
     * @param DataTable\Row $visit
     * @return array
     */
    private function getVisitorProfileVisitSummary($visit, Site $site) : array
    {
        $today = Date::factory('today', $site->getTimezone());
        $firstActionTimestamp = $visit->getColumn('firstActionTimestamp');
        $firstActionDate = Date::factory($firstActionTimestamp, $site->getTimezone());
        return ['date' => $firstActionTimestamp, 'prettyDate' => $firstActionDate->getLocalized(Date::DATE_FORMAT_LONG), 'daysAgo' => (int) Date::secondsToDays($today->getTimestamp() - $firstActionDate->getTimestamp()), 'referrerType' => $visit->getColumn('referrerType'), 'referrerUrl' => $visit->getColumn('referrerUrl') ?: '', 'referralSummary' => self::getReferrerSummaryForVisit($visit)];
    }
    /**
     * Returns a summary for a visit's referral.
     *
     * @param DataTable\Row $visit
     * @return bool|mixed|string
     */
    public static function getReferrerSummaryForVisit($visit)
    {
        $referrerType = $visit->getColumn('referrerType');
        if ($referrerType === false || $referrerType == 'direct') {
            return Piwik::translate('Referrers_DirectEntry');
        }
        if ($referrerType == 'search') {
            $referrerName = $visit->getColumn('referrerName');
            $keyword = $visit->getColumn('referrerKeyword');
            if ($keyword !== false && $keyword != APIReferrers::getKeywordNotDefinedString()) {
                $referrerName .= ' (' . $keyword . ')';
            }
            return $referrerName;
        }
        if ($referrerType == 'campaign') {
            $summary = Piwik::translate('Referrers_ColumnCampaign') . ': ' . $visit->getColumn('referrerName');
            $keyword = $visit->getColumn('referrerKeyword');
            if (!empty($keyword)) {
                $summary .= ' - ' . $keyword;
            }
            return $summary;
        }
        return $visit->getColumn('referrerName');
    }
}

ZeroDay Forums Mini