widget(); } public function widget() { $view = new View('@Live/index'); $view->idSite = $this->idSite; $view = $this->setCounters($view); $view->liveRefreshAfterMs = (int)Config::getInstance()->General['live_widget_refresh_after_seconds'] * 1000; $view->visitors = $this->getLastVisitsStart($fetchPlease = true); $view->liveTokenAuth = Piwik::getCurrentUserTokenAuth(); return $this->render($view); } public function ajaxTotalVisitors() { $view = new View('@Live/ajaxTotalVisitors'); $view = $this->setCounters($view); $view->idSite = $this->idSite; return $this->render($view); } private function render(View $view) { $rendered = $view->render(); return $rendered; } public function indexVisitorLog() { $view = new View('@Live/indexVisitorLog.twig'); $view->visitorLog = $this->renderReport('getLastVisitsDetails'); return $view->render(); } /** * Widget */ public function getVisitorLog() { return $this->renderReport('getLastVisitsDetails'); } public function getLastVisitsStart() { // hack, ensure we load today's visits by default $_GET['date'] = 'today'; \Piwik\Period\Factory::checkPeriodIsEnabled('day'); $_GET['period'] = 'day'; $view = new View('@Live/getLastVisitsStart'); $view->idSite = $this->idSite; $api = new Request("method=Live.getLastVisitsDetails&idSite={$this->idSite}&filter_limit=10&format=php&serialize=0&disable_generic_filters=1"); $visitors = $api->process(); $view->visitors = $visitors; return $this->render($view); } private function setCounters($view) { $segment = Request::getRawSegmentFromRequest(); $last30min = API::getInstance()->getCounters($this->idSite, $lastMinutes = 30, $segment, array('visits', 'actions')); $last30min = $last30min[0]; $today = API::getInstance()->getCounters($this->idSite, $lastMinutes = 24 * 60, $segment, array('visits', 'actions')); $today = $today[0]; $view->visitorsCountHalfHour = $last30min['visits']; $view->visitorsCountToday = $today['visits']; $view->pisHalfhour = $last30min['actions']; $view->pisToday = $today['actions']; return $view; } /** * Echo's HTML for visitor profile popup. */ public function getVisitorProfilePopup() { $idSite = Common::getRequestVar('idSite', null, 'int'); $view = new View('@Live/getVisitorProfilePopup.twig'); $view->idSite = $idSite; $view->goals = APIGoals::getInstance()->getGoals($idSite); $view->visitorData = Request::processRequest('Live.getVisitorProfile'); $view->exportLink = $this->getVisitorProfileExportLink(); if (Common::getRequestVar('showMap', 1) == 1 && !empty($view->visitorData['hasLatLong']) && \Piwik\Plugin\Manager::getInstance()->isPluginLoaded('UserCountryMap') ) { $view->userCountryMapUrl = $this->getUserCountryMapUrlForVisitorProfile(); } $this->setWidgetizedVisitorProfileUrl($view); return $view->render(); } public function getSingleVisitSummary() { $view = new View('@Live/getSingleVisitSummary.twig'); $visits = Request::processRequest('Live.getLastVisitsDetails', array( 'segment' => 'visitId==' . Common::getRequestVar('visitId'), 'period' => false, 'date' => false )); $view->visitData = $visits->getFirstRow()->getColumns(); $view->visitReferralSummary = VisitorProfile::getReferrerSummaryForVisit($visits->getFirstRow()); $view->showLocation = true; $this->setWidgetizedVisitorProfileUrl($view); $view->exportLink = $this->getVisitorProfileExportLink(); return $view->render(); } public function getVisitList() { $startCounter = Common::getRequestVar('filter_offset', 0, 'int'); $nextVisits = Request::processRequest('Live.getLastVisitsDetails', array( 'segment' => self::getSegmentWithVisitorId(), 'filter_limit' => VisitorProfile::VISITOR_PROFILE_MAX_VISITS_TO_SHOW, 'filter_offset' => $startCounter, 'period' => false, 'date' => false )); $idSite = Common::getRequestVar('idSite', null, 'int'); if (empty($nextVisits)) { return; } $view = new View('@Live/getVisitList.twig'); $view->idSite = $idSite; $view->startCounter = $startCounter + 1; $view->visits = $nextVisits; return $view->render(); } private function getVisitorProfileExportLink() { return Url::getCurrentQueryStringWithParametersModified(array( 'module' => 'API', 'action' => 'index', 'method' => 'Live.getVisitorProfile', 'format' => 'XML', 'expanded' => 1 )); } private function setWidgetizedVisitorProfileUrl($view) { if (\Piwik\Plugin\Manager::getInstance()->isPluginLoaded('Widgetize')) { $view->widgetizedLink = Url::getCurrentQueryStringWithParametersModified(array( 'module' => 'Widgetize', 'action' => 'iframe', 'moduleToWidgetize' => 'Live', 'actionToWidgetize' => 'getVisitorProfilePopup' )); } } private function getUserCountryMapUrlForVisitorProfile() { $params = array( 'module' => 'UserCountryMap', 'action' => 'realtimeMap', 'segment' => self::getSegmentWithVisitorId(), 'visitorId' => false, 'changeVisitAlpha' => 0, 'removeOldVisits' => 0, 'realtimeWindow' => 'false', 'showFooterMessage' => 0, 'showDateTime' => 0, 'doNotRefreshVisits' => 1 ); return Url::getCurrentQueryStringWithParametersModified($params); } private static function getSegmentWithVisitorId() { static $cached = null; if ($cached === null) { $segment = Request::getRawSegmentFromRequest(); if (!empty($segment)) { $segment = urldecode($segment) . ';'; } $idVisitor = Common::getRequestVar('visitorId', false); if ($idVisitor === false) { $idVisitor = Request::processRequest('Live.getMostRecentVisitorId'); } $cached = urlencode($segment . 'visitorId==' . $idVisitor); } return $cached; } }