diff options
Diffstat (limited to 'plugins/Referrers/VisitorDetails.php')
-rw-r--r-- | plugins/Referrers/VisitorDetails.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/plugins/Referrers/VisitorDetails.php b/plugins/Referrers/VisitorDetails.php new file mode 100644 index 0000000000..f0021c9293 --- /dev/null +++ b/plugins/Referrers/VisitorDetails.php @@ -0,0 +1,121 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\Referrers; + +use Piwik\Plugins\Live\VisitorDetailsAbstract; +use Piwik\UrlHelper; +use Piwik\View; + +class VisitorDetails extends VisitorDetailsAbstract +{ + public function extendVisitorDetails(&$visitor) + { + $visitor['referrerType'] = $this->getReferrerType(); + $visitor['referrerTypeName'] = $this->getReferrerTypeName(); + $visitor['referrerName'] = $this->getReferrerName(); + $visitor['referrerKeyword'] = $this->getKeyword(); + $visitor['referrerKeywordPosition'] = $this->getKeywordPosition(); + $visitor['referrerUrl'] = $this->getReferrerUrl(); + $visitor['referrerSearchEngineUrl'] = $this->getSearchEngineUrl(); + $visitor['referrerSearchEngineIcon'] = $this->getSearchEngineIcon(); + } + + public function renderVisitorDetails($visitorDetails) + { + $view = new View('@Referrers/_visitorDetails.twig'); + $view->visitInfo = $visitorDetails; + return [[ 10, $view->render() ]]; + } + + protected function getReferrerType() + { + try { + $referrerType = getReferrerTypeFromShortName($this->details['referer_type']); + } catch (\Exception $e) { + $referrerType = ''; + } + + return $referrerType; + } + + protected function getReferrerTypeName() + { + return getReferrerTypeLabel($this->details['referer_type']); + } + + protected function getKeyword() + { + $keyword = $this->details['referer_keyword']; + + if ($this->getReferrerType() == 'search') { + $keyword = API::getCleanKeyword($keyword); + } + + return urldecode($keyword); + } + + protected function getReferrerUrl() + { + if (UrlHelper::isLookLikeUrl($this->details['referer_url'])) { + return $this->details['referer_url']; + } + + return null; + } + + protected function getKeywordPosition() + { + if ($this->getReferrerType() == 'search' + && strpos($this->getReferrerName(), 'Google') !== false + ) { + $url = @parse_url($this->details['referer_url']); + if (empty($url['query'])) { + + return null; + } + + $position = UrlHelper::getParameterFromQueryString($url['query'], 'cd'); + if (!empty($position)) { + + return $position; + } + } + + return null; + } + + protected function getReferrerName() + { + return urldecode($this->details['referer_name']); + } + + protected function getSearchEngineUrl() + { + if ($this->getReferrerType() == 'search' + && !empty($this->details['referer_name']) + ) { + + return SearchEngine::getInstance()->getUrlFromName($this->details['referer_name']); + } + + return null; + } + + protected function getSearchEngineIcon() + { + $searchEngineUrl = $this->getSearchEngineUrl(); + + if (!is_null($searchEngineUrl)) { + + return SearchEngine::getInstance()->getLogoFromUrl($searchEngineUrl); + } + + return null; + } +}
\ No newline at end of file |