update Piwik to version 2.16 (fixes #91)

This commit is contained in:
oliver 2016-04-10 18:55:57 +02:00
commit d885a4baa9
5833 changed files with 418860 additions and 226988 deletions

View file

@ -1,6 +1,6 @@
<?php
/**
* Piwik - Open source web analytics
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
@ -21,11 +21,11 @@ use Piwik\Piwik;
/**
* The Referrers API lets you access reports about Websites, Search engines, Keywords, Campaigns used to access your website.
*
* For example, "getKeywords" returns all search engine keywords (with <a href='http://piwik.org/docs/analytics-api/reference/#toc-metric-definitions' target='_blank'>general analytics metrics</a> for each keyword), "getWebsites" returns referrer websites (along with the full Referrer URL if the parameter &expanded=1 is set).
* For example, "getKeywords" returns all search engine keywords (with <a href='http://piwik.org/docs/analytics-api/reference/#toc-metric-definitions' rel='noreferrer' target='_blank'>general analytics metrics</a> for each keyword), "getWebsites" returns referrer websites (along with the full Referrer URL if the parameter &expanded=1 is set).
* "getReferrerType" returns the Referrer overview report. "getCampaigns" returns the list of all campaigns (and all campaign keywords if the parameter &expanded=1 is set).
*
* The methods "getKeywordsForPageUrl" and "getKeywordsForPageTitle" are used to output the top keywords used to find a page.
* Check out the widget <a href='http://demo.piwik.org/index.php?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&actionToWidgetize=getKeywordsForPage&idSite=7&period=day&date=2011-02-15&disableLink=1' target='_blank'>"Top keywords used to find this page"</a> that you can easily re-use on your website.
* Check out the widget <a href='http://demo.piwik.org/index.php?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&actionToWidgetize=getKeywordsForPage&idSite=7&period=day&date=2011-02-15&disableLink=1' rel='noreferrer' target='_blank'>"Top keywords used to find this page"</a> that you can easily re-use on your website.
* @method static \Piwik\Plugins\Referrers\API getInstance()
*/
class API extends \Piwik\Plugin\API
@ -43,7 +43,6 @@ class API extends \Piwik\Plugin\API
protected function getDataTable($name, $idSite, $period, $date, $segment, $expanded = false, $idSubtable = null)
{
$dataTable = Archive::getDataTableFromArchive($name, $idSite, $period, $date, $segment, $expanded, $idSubtable);
$dataTable->filter('Sort', array(Metrics::INDEX_NB_VISITS, 'desc', $naturalSort = false, $expanded));
$dataTable->queueFilter('ReplaceColumnNames');
return $dataTable;
}
@ -68,8 +67,8 @@ class API extends \Piwik\Plugin\API
* @param bool $expanded Whether to get report w/ subtables loaded or not.
* @return DataTable
*/
public function getReferrerType($idSite, $period, $date, $segment = false, $typeReferrer = false,
$idSubtable = false, $expanded = false)
public function getReferrerType($idSite, $period, $date, $segment = false, $typeReferrer = false,
$idSubtable = false, $expanded = false)
{
// if idSubtable is supplied, interpret idSubtable as referrer type and return correct report
if ($idSubtable !== false) {
@ -89,6 +88,9 @@ class API extends \Piwik\Plugin\API
}
if ($result) {
$result->filter('ColumnCallbackDeleteMetadata', array('segment'));
$result->filter('ColumnCallbackDeleteMetadata', array('segmentValue'));
return $this->removeSubtableIds($result); // this report won't return subtables of individual reports
}
}
@ -102,11 +104,17 @@ class API extends \Piwik\Plugin\API
}
// set subtable IDs for each row to the label (which holds the int referrer type)
// NOTE: not yet possible to do this w/ DataTable\Map instances
if (!($dataTable instanceof DataTable\Map)) {
$this->setGetReferrerTypeSubtables($dataTable, $idSite, $period, $date, $segment, $expanded);
}
$dataTable->filter('Piwik\Plugins\Referrers\DataTable\Filter\SetGetReferrerTypeSubtables', array($idSite, $period, $date, $segment, $expanded));
$dataTable->filter('AddSegmentByLabelMapping', array(
'referrerType',
array(
Common::REFERRER_TYPE_DIRECT_ENTRY => 'direct',
Common::REFERRER_TYPE_CAMPAIGN => 'campaign',
Common::REFERRER_TYPE_SEARCH_ENGINE => 'search',
Common::REFERRER_TYPE_WEBSITE => 'website',
)
));
// set referrer type column to readable value
$dataTable->queueFilter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\getReferrerTypeLabel'));
@ -125,24 +133,25 @@ class API extends \Piwik\Plugin\API
}
$dataTable = $dataTable->mergeSubtables($labelColumn = 'referer_type', $useMetadataColumn = true);
$dataTable->filter('Sort', array(Metrics::INDEX_NB_VISITS, 'desc'));
$dataTable->queueFilter('ReplaceColumnNames');
$dataTable->queueFilter('ReplaceSummaryRowLabel');
return $dataTable;
}
public function getKeywords($idSite, $period, $date, $segment = false, $expanded = false)
public function getKeywords($idSite, $period, $date, $segment = false, $expanded = false, $flat = false)
{
$dataTable = $this->getDataTable(Archiver::KEYWORDS_RECORD_NAME, $idSite, $period, $date, $segment, $expanded);
$dataTable = $this->handleKeywordNotDefined($dataTable);
return $dataTable;
}
$dataTable = Archive::createDataTableFromArchive(Archiver::KEYWORDS_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, $flat);
if ($flat) {
$dataTable->filterSubtables('Piwik\Plugins\Referrers\DataTable\Filter\SearchEnginesFromKeywordId', array($dataTable));
} else {
$dataTable->filter('AddSegmentValue');
$dataTable->queueFilter('PrependSegment', array('referrerType==search;'));
}
$dataTable->queueFilter('Piwik\Plugins\Referrers\DataTable\Filter\KeywordNotDefined');
protected function handleKeywordNotDefined($dataTable)
{
$dataTable->queueFilter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\API::getCleanKeyword'));
return $dataTable;
}
@ -151,7 +160,7 @@ class API extends \Piwik\Plugin\API
/**
* @ignore
*/
static public function getKeywordNotDefinedString()
public static function getKeywordNotDefinedString()
{
return Piwik::translate('General_NotDefined', Piwik::translate('General_ColumnKeyword'));
}
@ -159,7 +168,7 @@ class API extends \Piwik\Plugin\API
/**
* @ignore
*/
static public function getCleanKeyword($label)
public static function getCleanKeyword($label)
{
return $label == self::LABEL_KEYWORD_NOT_DEFINED
? self::getKeywordNotDefinedString()
@ -218,24 +227,31 @@ class API extends \Piwik\Plugin\API
public function getSearchEnginesFromKeywordId($idSite, $period, $date, $idSubtable, $segment = false)
{
$dataTable = $this->getDataTable(Archiver::KEYWORDS_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = false, $idSubtable);
$dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', __NAMESPACE__ . '\getSearchEngineUrlFromName'));
$dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', __NAMESPACE__ . '\getSearchEngineLogoFromUrl'));
$keywords = $this->getKeywords($idSite, $period, $date, $segment);
$keyword = $keywords->getRowFromIdSubDataTable($idSubtable)->getColumn('label');
$dataTable->filter('Piwik\Plugins\Referrers\DataTable\Filter\SearchEnginesFromKeywordId', array($keywords, $idSubtable));
$dataTable->filter('AddSegmentByLabel', array('referrerName'));
$dataTable->queueFilter('PrependSegment', array('referrerKeyword=='.$keyword.';referrerType==search;'));
// get the keyword and create the URL to the search result page
$keywords = $this->getKeywords($idSite, $period, $date, $segment);
$subTable = $keywords->getRowFromIdSubDataTable($idSubtable);
if ($subTable) {
$keyword = $subTable->getColumn('label');
$dataTable->queueFilter('MetadataCallbackReplace', array('url', __NAMESPACE__ . '\getSearchEngineUrlFromUrlAndKeyword', array($keyword)));
}
return $dataTable;
}
public function getSearchEngines($idSite, $period, $date, $segment = false, $expanded = false)
public function getSearchEngines($idSite, $period, $date, $segment = false, $expanded = false, $flat = false)
{
$dataTable = $this->getDataTable(Archiver::SEARCH_ENGINES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded);
$dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', __NAMESPACE__ . '\getSearchEngineUrlFromName'));
$dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', __NAMESPACE__ . '\getSearchEngineLogoFromUrl'));
$dataTable = Archive::createDataTableFromArchive(Archiver::SEARCH_ENGINES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, $flat);
if ($flat) {
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'url', function ($url) { return SearchEngine::getInstance()->getUrlFromName($url); }));
$dataTable->filter('MetadataCallbackAddMetadata', array('url', 'logo', function ($url) { return SearchEngine::getInstance()->getLogoFromUrl($url); }));
$dataTable->filterSubtables('Piwik\Plugins\Referrers\DataTable\Filter\KeywordsFromSearchEngineId', array($dataTable));
} else {
$dataTable->filter('AddSegmentByLabel', array('referrerName'));
$dataTable->queueFilter('PrependSegment', array('referrerType==search;'));
$dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($url) { return SearchEngine::getInstance()->getUrlFromName($url); }));
$dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', function ($url) { return SearchEngine::getInstance()->getLogoFromUrl($url); }));
}
return $dataTable;
}
@ -246,57 +262,56 @@ class API extends \Piwik\Plugin\API
// get the search engine and create the URL to the search result page
$searchEngines = $this->getSearchEngines($idSite, $period, $date, $segment);
$searchEngines->applyQueuedFilters();
$searchEngine = $searchEngines->getRowFromIdSubDataTable($idSubtable)->getColumn('label');
if ($searchEngines instanceof DataTable\Map) {
$dataTables = $searchEngines->getDataTables();
$dataTable->filter('Piwik\Plugins\Referrers\DataTable\Filter\KeywordsFromSearchEngineId', array($searchEngines, $idSubtable));
$dataTable->filter('AddSegmentByLabel', array('referrerKeyword'));
$dataTable->queueFilter('PrependSegment', array('referrerName=='.$searchEngine.';referrerType==search;'));
// find first datatable containing data
foreach ($dataTables AS $subTable) {
$subTableRow = $subTable->getRowFromIdSubDataTable($idSubtable);
if (!empty($subTableRow)) {
break;
}
}
} else {
$subTableRow = $searchEngines->getRowFromIdSubDataTable($idSubtable);
}
if (!empty($subTableRow)) {
$searchEngineUrl = $subTableRow->getMetadata('url');
$dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', __NAMESPACE__ . '\getSearchEngineUrlFromKeywordAndUrl', array($searchEngineUrl)));
}
$dataTable = $this->handleKeywordNotDefined($dataTable);
return $dataTable;
}
public function getCampaigns($idSite, $period, $date, $segment = false, $expanded = false)
{
$dataTable = $this->getDataTable(Archiver::CAMPAIGNS_RECORD_NAME, $idSite, $period, $date, $segment, $expanded);
$dataTable->filter('AddSegmentByLabel', array('referrerName'));
$dataTable->queueFilter('PrependSegment', array('referrerType==campaign;'));
return $dataTable;
}
public function getKeywordsFromCampaignId($idSite, $period, $date, $idSubtable, $segment = false)
{
$campaigns = $this->getCampaigns($idSite, $period, $date, $segment);
$campaigns->applyQueuedFilters();
$campaign = $campaigns->getRowFromIdSubDataTable($idSubtable)->getColumn('label');
$dataTable = $this->getDataTable(Archiver::CAMPAIGNS_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = false, $idSubtable);
$dataTable->filter('AddSegmentByLabel', array('referrerKeyword'));
$dataTable->queueFilter('PrependSegment', array('referrerName=='.$campaign.';referrerType==campaign;'));
return $dataTable;
}
public function getWebsites($idSite, $period, $date, $segment = false, $expanded = false)
public function getWebsites($idSite, $period, $date, $segment = false, $expanded = false, $flat = false)
{
$dataTable = $this->getDataTable(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded);
$dataTable = Archive::createDataTableFromArchive(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, $flat, $idSubtable = null);
if ($flat) {
$dataTable->filterSubtables('Piwik\Plugins\Referrers\DataTable\Filter\UrlsFromWebsiteId');
} else {
$dataTable->filter('AddSegmentByLabel', array('referrerName'));
}
return $dataTable;
}
public function getUrlsFromWebsiteId($idSite, $period, $date, $idSubtable, $segment = false)
{
$dataTable = $this->getDataTable(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = false, $idSubtable);
// the htmlspecialchars_decode call is for BC for before 1.1
// as the Referrer URL was previously encoded in the log tables, but is now recorded raw
$dataTable->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($label) {
return htmlspecialchars_decode($label);
}));
$dataTable->queueFilter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\getPathFromUrl'));
$dataTable->filter('Piwik\Plugins\Referrers\DataTable\Filter\UrlsFromWebsiteId');
$dataTable->filter('AddSegmentByLabel', array('referrerUrl'));
return $dataTable;
}
@ -309,21 +324,25 @@ class API extends \Piwik\Plugin\API
* @param string $date
* @param string|bool $segment
* @param bool $expanded
* @param bool $flat
* @return DataTable
*/
public function getSocials($idSite, $period, $date, $segment = false, $expanded = false)
public function getSocials($idSite, $period, $date, $segment = false, $expanded = false, $flat = false)
{
$dataTable = $this->getDataTable(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded);
$dataTable = Archive::createDataTableFromArchive(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, false);
$dataTable->filter('ColumnCallbackDeleteRow', array('label', function ($url) { return !isSocialUrl($url); }));
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'url', __NAMESPACE__ . '\getSocialMainUrl'));
$dataTable->filter('GroupBy', array('label', __NAMESPACE__ . '\getSocialNetworkFromDomain'));
$dataTable->filter('ColumnCallbackDeleteRow', array('label', function ($url) { return !Social::getInstance()->isSocialUrl($url); }));
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'url', function ($url) { return Social::getInstance()->getMainUrl($url); }));
$dataTable->filter('GroupBy', array('label', function ($url) { return Social::getInstance()->getSocialNetworkFromDomain($url); }));
$this->setSocialIdSubtables($dataTable);
$this->removeSubtableMetadata($dataTable);
$dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', __NAMESPACE__ . '\getSocialsLogoFromUrl'));
if ($flat) {
$this->buildExpandedTableForFlattenGetSocials($idSite, $period, $date, $segment, $expanded, $dataTable);
}
$dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', function ($url) { return Social::getInstance()->getLogoFromUrl($url); }));
return $dataTable;
}
@ -337,7 +356,7 @@ class API extends \Piwik\Plugin\API
* @param string $date
* @param bool|string $segment
* @param bool|int $idSubtable This ID does not reference a real DataTable record. Instead, it
* is the array index of an item in the /core/DataFiles/Socials.php file.
* is the array index of an item in the Socials list file.
* The urls are filtered by the social network at this index.
* If false, no filtering is done and every social URL is returned.
* @return DataTable
@ -347,7 +366,7 @@ class API extends \Piwik\Plugin\API
$dataTable = $this->getDataTable(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded = true);
// get the social network domain referred to by $idSubtable
$socialNetworks = Common::getSocialUrls();
$socialNetworks = Social::getInstance()->getDefinitions();
$social = false;
if ($idSubtable !== false) {
@ -365,20 +384,15 @@ class API extends \Piwik\Plugin\API
$dataTable->filter(
'ColumnCallbackDeleteRow',
array('label',
function ($url) use ($social) { return !isSocialUrl($url, $social); }
function ($url) use ($social) { return !Social::getInstance()->isSocialUrl($url, $social); }
)
);
// merge the datatable's subtables which contain the individual URLs
$dataTable = $dataTable->mergeSubtables();
// make url labels clickable
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'url'));
// prettify the DataTable
$dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\removeUrlProtocol'));
$dataTable->filter('Sort', array(Metrics::INDEX_NB_VISITS, 'desc', $naturalSort = false, $expanded));
$dataTable->queueFilter('ReplaceColumnNames');
$dataTable->filter('AddSegmentByLabel', array('referrerUrl'));
$dataTable->filter('Piwik\Plugins\Referrers\DataTable\Filter\UrlsForSocial', array($expanded));
return $dataTable;
}
@ -437,7 +451,7 @@ class API extends \Piwik\Plugin\API
/**
* Sets the subtable IDs for the DataTable returned by getSocial.
*
* The IDs are int indexes into the array in /core/DataFiles/Socials.php.
* The IDs are int indexes into the array in of defined socials.
*
* @param DataTable $dataTable
*/
@ -452,9 +466,9 @@ class API extends \Piwik\Plugin\API
$socialName = $row->getColumn('label');
$i = 1; // start at one because idSubtable=0 is equivalent to idSubtable=false
foreach (Common::getSocialUrls() as $domain => $name) {
foreach (Social::getInstance()->getDefinitions() as $name) {
if ($name == $socialName) {
$row->c[Row::DATATABLE_ASSOCIATED] = $i;
$row->setNonLoadedSubtableId($i);
break;
}
@ -489,42 +503,44 @@ class API extends \Piwik\Plugin\API
}
/**
* Utility function that sets the subtables for the getReferrerType report.
*
* If we're not getting an expanded datatable, the subtable ID is set to each parent
* row's referrer type (stored in the label for the getReferrerType report).
*
* If we are getting an expanded datatable, the datatable for the row's referrer
* type is loaded and attached to the appropriate row in the getReferrerType report.
*
* @param DataTable $dataTable
* @param string $idSite
* @param int $idSite
* @param string $period
* @param string $date
* @param string $segment
* @param string|false $segment
* @param bool $expanded
* @param DataTable $dataTable
*/
private function setGetReferrerTypeSubtables($dataTable, $idSite, $period, $date, $segment, $expanded)
private function buildExpandedTableForFlattenGetSocials($idSite, $period, $date, $segment, $expanded, $dataTable)
{
$urlsTable = Archive::createDataTableFromArchive(Archiver::WEBSITES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, $flat = true);
$urlsTable->filter('ColumnCallbackDeleteRow', array('label', function ($url) {
return !Social::getInstance()->isSocialUrl($url);
}));
$urlsTable = $urlsTable->mergeSubtables();
foreach ($dataTable->getRows() as $row) {
$typeReferrer = $row->getColumn('label');
if ($typeReferrer != Common::REFERRER_TYPE_DIRECT_ENTRY) {
if (!$expanded) // if we don't want the expanded datatable, then don't do any extra queries
{
$row->c[Row::DATATABLE_ASSOCIATED] = $typeReferrer;
} else // otherwise, we have to get the othe datatables
{
$subtable = $this->getReferrerType($idSite, $period, $date, $segment, $type = false,
$idSubtable = $typeReferrer);
$row->removeSubtable();
if ($expanded) {
$subtable->applyQueuedFilters();
}
$social = $row->getColumn('label');
$newTable = $urlsTable->getEmptyClone();
$row->setSubtable($subtable);
$rows = $urlsTable->getRows();
foreach ($rows as $id => $urlsTableRow) {
$url = $urlsTableRow->getColumn('label');
if (Social::getInstance()->isSocialUrl($url, $social)) {
$newTable->addRow($urlsTableRow);
$urlsTable->deleteRow($id);
}
}
if ($newTable->getRowsCount()) {
$newTable->filter('Piwik\Plugins\Referrers\DataTable\Filter\UrlsForSocial', array($expanded));
$row->setSubtable($newTable);
}
}
Common::destroy($urlsTable);
$urlsTable = null;
}
}

View file

@ -1,6 +1,6 @@
<?php
/**
* Piwik - Open source web analytics
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
@ -71,7 +71,6 @@ class Archiver extends \Piwik\Plugin\Archiver
);
}
protected function makeReferrerTypeNonEmpty(&$row)
{
if (empty($row['referer_type'])) {
@ -205,10 +204,10 @@ class Archiver extends \Piwik\Plugin\Archiver
protected function insertDayNumericMetrics()
{
$numericRecords = array(
self::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME => count($this->getDataArray(self::SEARCH_ENGINES_RECORD_NAME)),
self::METRIC_DISTINCT_KEYWORD_RECORD_NAME => count($this->getDataArray(self::KEYWORDS_RECORD_NAME)),
self::METRIC_DISTINCT_CAMPAIGN_RECORD_NAME => count($this->getDataArray(self::CAMPAIGNS_RECORD_NAME)),
self::METRIC_DISTINCT_WEBSITE_RECORD_NAME => count($this->getDataArray(self::WEBSITES_RECORD_NAME)),
self::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME => count($this->getDataArray(self::SEARCH_ENGINES_RECORD_NAME)->getDataArray()),
self::METRIC_DISTINCT_KEYWORD_RECORD_NAME => count($this->getDataArray(self::KEYWORDS_RECORD_NAME)->getDataArray()),
self::METRIC_DISTINCT_CAMPAIGN_RECORD_NAME => count($this->getDataArray(self::CAMPAIGNS_RECORD_NAME)->getDataArray()),
self::METRIC_DISTINCT_WEBSITE_RECORD_NAME => count($this->getDataArray(self::WEBSITES_RECORD_NAME)->getDataArray()),
self::METRIC_DISTINCT_URLS_RECORD_NAME => count($this->distinctUrls),
);
@ -218,7 +217,16 @@ class Archiver extends \Piwik\Plugin\Archiver
public function aggregateMultipleReports()
{
$dataTableToSum = $this->getRecordNames();
$nameToCount = $this->getProcessor()->aggregateDataTableRecords($dataTableToSum, $this->maximumRowsInDataTableLevelZero, $this->maximumRowsInSubDataTable, $this->columnToSortByBeforeTruncation);
$columnsAggregationOperation = null;
$nameToCount = $this->getProcessor()->aggregateDataTableRecords(
$dataTableToSum,
$this->maximumRowsInDataTableLevelZero,
$this->maximumRowsInSubDataTable,
$this->columnToSortByBeforeTruncation,
$columnsAggregationOperation,
$columnsToRenameAfterAggregation = null,
$countRowsRecursive = array(self::WEBSITES_RECORD_NAME)
);
$mappingFromArchiveName = array(
self::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME =>

View file

@ -0,0 +1,514 @@
<?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\Columns;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\VisitDimension;
use Piwik\Plugins\Referrers\SearchEngine AS SearchEngineDetection;
use Piwik\Plugins\SitesManager\SiteUrls;
use Piwik\Tracker\Cache;
use Piwik\Tracker\PageUrl;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visit;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
use Piwik\UrlHelper;
abstract class Base extends VisitDimension
{
// @see detect*() referrer methods
protected $typeReferrerAnalyzed;
protected $nameReferrerAnalyzed;
protected $keywordReferrerAnalyzed;
protected $referrerHost;
protected $referrerUrl;
protected $referrerUrlParse;
protected $currentUrlParse;
protected $idsite;
private static $cachedReferrerSearchEngine = array();
// Used to prefix when a adsense referrer is detected
const LABEL_PREFIX_ADWORDS_KEYWORD = '(adwords) ';
const LABEL_ADWORDS_NAME = 'AdWords';
/**
* Returns an array containing the following information:
* - referer_type
* - direct -- absence of referrer URL OR referrer URL has the same host
* - site -- based on the referrer URL
* - search_engine -- based on the referrer URL
* - campaign -- based on campaign URL parameter
*
* - referer_name
* - ()
* - piwik.net -- site host name
* - google.fr -- search engine host name
* - adwords-search -- campaign name
*
* - referer_keyword
* - ()
* - ()
* - my keyword
* - my paid keyword
* - ()
* - ()
*
* - referer_url : the same for all the referrer types
*
* @param string $referrerUrl must be URL Encoded
* @param string $currentUrl
* @param int $idSite
* @return array
*/
protected function getReferrerInformation($referrerUrl, $currentUrl, $idSite, Request $request, Visitor $visitor)
{
$this->idsite = $idSite;
// default values for the referer_* fields
$referrerUrl = Common::unsanitizeInputValue($referrerUrl);
if (!empty($referrerUrl)
&& !UrlHelper::isLookLikeUrl($referrerUrl)
) {
$referrerUrl = '';
}
$currentUrl = PageUrl::cleanupUrl($currentUrl);
$this->referrerUrl = $referrerUrl;
$this->referrerUrlParse = @parse_url($this->referrerUrl);
$this->currentUrlParse = @parse_url($currentUrl);
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_DIRECT_ENTRY;
$this->nameReferrerAnalyzed = '';
$this->keywordReferrerAnalyzed = '';
$this->referrerHost = '';
if (isset($this->referrerUrlParse['host'])) {
$this->referrerHost = $this->referrerUrlParse['host'];
}
$referrerDetected = $this->detectReferrerCampaign($request, $visitor);
if (!$referrerDetected) {
if ($this->detectReferrerDirectEntry()
|| $this->detectReferrerSearchEngine()
) {
$referrerDetected = true;
}
}
if (!$referrerDetected && !empty($this->referrerHost)) {
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_WEBSITE;
$this->nameReferrerAnalyzed = Common::mb_strtolower($this->referrerHost);
$urlsByHost = $this->getCachedUrlsByHostAndIdSite();
$directEntry = new SiteUrls();
$path = $directEntry->getPathMatchingUrl($this->referrerUrlParse, $urlsByHost);
if (!empty($path) && $path !== '/') {
$this->nameReferrerAnalyzed .= rtrim($path, '/');
}
}
$referrerInformation = array(
'referer_type' => $this->typeReferrerAnalyzed,
'referer_name' => $this->nameReferrerAnalyzed,
'referer_keyword' => $this->keywordReferrerAnalyzed,
'referer_url' => $this->referrerUrl,
);
return $referrerInformation;
}
protected function getReferrerInformationFromRequest(Request $request, Visitor $visitor)
{
$referrerUrl = $request->getParam('urlref');
$currentUrl = $request->getParam('url');
return $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite(), $request, $visitor);
}
/**
* Search engine detection
* @return bool
*/
protected function detectReferrerSearchEngine()
{
if (isset(self::$cachedReferrerSearchEngine[$this->referrerUrl])) {
$searchEngineInformation = self::$cachedReferrerSearchEngine[$this->referrerUrl];
} else {
$searchEngineInformation = SearchEngineDetection::getInstance()->extractInformationFromUrl($this->referrerUrl);
/**
* Triggered when detecting the search engine of a referrer URL.
*
* Plugins can use this event to provide custom search engine detection
* logic.
*
* @param array &$searchEngineInformation An array with the following information:
*
* - **name**: The search engine name.
* - **keywords**: The search keywords used.
*
* This parameter is initialized to the results
* of Piwik's default search engine detection
* logic.
* @param string referrerUrl The referrer URL from the tracking request.
*/
Piwik::postEvent('Tracker.detectReferrerSearchEngine', array(&$searchEngineInformation, $this->referrerUrl));
self::$cachedReferrerSearchEngine[$this->referrerUrl] = $searchEngineInformation;
}
if ($searchEngineInformation === false) {
return false;
}
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_SEARCH_ENGINE;
$this->nameReferrerAnalyzed = $searchEngineInformation['name'];
$this->keywordReferrerAnalyzed = $searchEngineInformation['keywords'];
return true;
}
/**
* @param string $string
* @return bool
*/
protected function detectCampaignFromString($string)
{
foreach ($this->campaignNames as $campaignNameParameter) {
$campaignName = trim(urldecode(UrlHelper::getParameterFromQueryString($string, $campaignNameParameter)));
if (!empty($campaignName)) {
break;
}
}
if (empty($campaignName)) {
return false;
}
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_CAMPAIGN;
$this->nameReferrerAnalyzed = $campaignName;
foreach ($this->campaignKeywords as $campaignKeywordParameter) {
$campaignKeyword = UrlHelper::getParameterFromQueryString($string, $campaignKeywordParameter);
if (!empty($campaignKeyword)) {
$this->keywordReferrerAnalyzed = trim(urldecode($campaignKeyword));
break;
}
}
return !empty($this->keywordReferrerAnalyzed);
}
protected function detectReferrerCampaignFromLandingUrl()
{
if (!isset($this->currentUrlParse['query'])
&& !isset($this->currentUrlParse['fragment'])
) {
return false;
}
$campaignParameters = Common::getCampaignParameters();
$this->campaignNames = $campaignParameters[0];
$this->campaignKeywords = $campaignParameters[1];
$found = false;
// 1) Detect campaign from query string
if (isset($this->currentUrlParse['query'])) {
$found = $this->detectCampaignFromString($this->currentUrlParse['query']);
}
// 2) Detect from fragment #hash
if (!$found
&& isset($this->currentUrlParse['fragment'])
) {
$this->detectCampaignFromString($this->currentUrlParse['fragment']);
}
}
protected function detectReferrerCampaignFromTrackerParams(Request $request)
{
$campaignName = $this->getReferrerCampaignQueryParam($request, '_rcn');
if (empty($campaignName)) {
return false;
}
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_CAMPAIGN;
$this->nameReferrerAnalyzed = $campaignName;
$keyword = $this->getReferrerCampaignQueryParam($request, '_rck');
if (!empty($keyword)) {
$this->keywordReferrerAnalyzed = $keyword;
}
return true;
}
private function getCachedUrlsByHostAndIdSite()
{
$cache = Cache::getCacheGeneral();
if (!empty($cache['allUrlsByHostAndIdSite'])) {
return $cache['allUrlsByHostAndIdSite'];
}
return array();
}
/**
* We have previously tried to detect the campaign variables in the URL
* so at this stage, if the referrer host is the current host,
* or if the referrer host is any of the registered URL for this website,
* it is considered a direct entry
* @return bool
*/
protected function detectReferrerDirectEntry()
{
if (empty($this->referrerHost)) {
return false;
}
$urlsByHost = $this->getCachedUrlsByHostAndIdSite();
$directEntry = new SiteUrls();
$matchingSites = $directEntry->getIdSitesMatchingUrl($this->referrerUrlParse, $urlsByHost);
if (isset($matchingSites) && is_array($matchingSites) && in_array($this->idsite, $matchingSites)) {
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_DIRECT_ENTRY;
return true;
} elseif (isset($matchingSites)) {
return false;
}
// fallback logic if the referrer domain is not known to any site to not break BC
if (isset($this->currentUrlParse['host'])) {
// this might be actually buggy if first thing tracked is eg an outlink and referrer is from that site
$currentHost = Common::mb_strtolower($this->currentUrlParse['host']);
if ($currentHost == Common::mb_strtolower($this->referrerHost)) {
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_DIRECT_ENTRY;
return true;
}
}
return false;
}
protected function detectCampaignKeywordFromReferrerUrl()
{
if (!empty($this->nameReferrerAnalyzed)
&& !empty($this->keywordReferrerAnalyzed)) {
// keyword is already set, we skip
return true;
}
// Set the Campaign keyword to the keyword found in the Referrer URL if any
if (!empty($this->nameReferrerAnalyzed)) {
$referrerUrlInfo = SearchEngineDetection::getInstance()->extractInformationFromUrl($this->referrerUrl);
if (!empty($referrerUrlInfo['keywords'])) {
$this->keywordReferrerAnalyzed = $referrerUrlInfo['keywords'];
}
}
// Set the keyword, to the hostname found, in a Adsense Referrer URL '&url=' parameter
if (empty($this->keywordReferrerAnalyzed)
&& !empty($this->referrerUrlParse['query'])
&& !empty($this->referrerHost)
&& (strpos($this->referrerHost, 'googleads') !== false || strpos($this->referrerHost, 'doubleclick') !== false)
) {
// This parameter sometimes is found & contains the page with the adsense ad bringing visitor to our site
$value = $this->getParameterValueFromReferrerUrl('url');
if (!empty($value)) {
$parsedAdsenseReferrerUrl = parse_url($value);
if (!empty($parsedAdsenseReferrerUrl['host'])) {
if (empty($this->nameReferrerAnalyzed)) {
$type = $this->getParameterValueFromReferrerUrl('ad_type');
$type = $type ? " ($type)" : '';
$this->nameReferrerAnalyzed = self::LABEL_ADWORDS_NAME . $type;
$this->typeReferrerAnalyzed = Common::REFERRER_TYPE_CAMPAIGN;
}
$this->keywordReferrerAnalyzed = self::LABEL_PREFIX_ADWORDS_KEYWORD . $parsedAdsenseReferrerUrl['host'];
}
}
}
}
/**
* @return string
*/
protected function getParameterValueFromReferrerUrl($adsenseReferrerParameter)
{
$value = trim(urldecode(UrlHelper::getParameterFromQueryString($this->referrerUrlParse['query'], $adsenseReferrerParameter)));
return $value;
}
/**
* @return bool
*/
protected function detectReferrerCampaign(Request $request, Visitor $visitor)
{
$isCampaign = $this->detectReferrerCampaignFromTrackerParams($request);
if (!$isCampaign) {
$this->detectReferrerCampaignFromLandingUrl();
}
$this->detectCampaignKeywordFromReferrerUrl();
$isCurrentVisitACampaignWithSameName = $visitor->getVisitorColumn('referer_name') == $this->nameReferrerAnalyzed;
$isCurrentVisitACampaignWithSameName = $isCurrentVisitACampaignWithSameName && $visitor->getVisitorColumn('referer_type') == Common::REFERRER_TYPE_CAMPAIGN;
// if we detected a campaign but there is still no keyword set, we set the keyword to the Referrer host
if (empty($this->keywordReferrerAnalyzed)) {
if ($isCurrentVisitACampaignWithSameName) {
$this->keywordReferrerAnalyzed = $visitor->getVisitorColumn('referer_keyword');
// it is an existing visit and no referrer keyword was used initially (or a different host),
// we do not use the default referrer host in this case as it would create a new visit. It would create
// a new visit because initially the referrer keyword was not set (or from a different host) and now
// we would set it suddenly. The changed keyword would be recognized as a campaign change and a new
// visit would be forced. Why would it suddenly set a keyword but not do it initially?
// This happens when on the first visit when the URL was opened directly (no referrer or different host)
// and then the user navigates to another page where the referrer host becomes the own host
// (referrer = own website) see https://github.com/piwik/piwik/issues/9299
} else {
$this->keywordReferrerAnalyzed = $this->referrerHost;
}
}
if ($this->typeReferrerAnalyzed != Common::REFERRER_TYPE_CAMPAIGN) {
$this->keywordReferrerAnalyzed = null;
$this->nameReferrerAnalyzed = null;
return false;
}
$this->keywordReferrerAnalyzed = Common::mb_strtolower($this->keywordReferrerAnalyzed);
$this->nameReferrerAnalyzed = Common::mb_strtolower($this->nameReferrerAnalyzed);
return true;
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function getValueForRecordGoal(Request $request, Visitor $visitor)
{
$referrerUrl = $request->getParam('_ref');
$referrerCampaignName = $this->getReferrerCampaignQueryParam($request, '_rcn');
$referrerCampaignKeyword = $this->getReferrerCampaignQueryParam($request, '_rck');
// Attributing the correct Referrer to this conversion.
// Priority order is as follows:
// 0) In some cases, the campaign is not passed from the JS so we look it up from the current visit
// 1) Campaign name/kwd parsed in the JS
// 2) Referrer URL stored in the _ref cookie
// 3) If no info from the cookie, attribute to the current visit referrer
Common::printDebug("Attributing a referrer to this Goal...");
// 3) Default values: current referrer
$type = $visitor->getVisitorColumn('referer_type');
$name = $visitor->getVisitorColumn('referer_name');
$keyword = $visitor->getVisitorColumn('referer_keyword');
// 0) In some (unknown!?) cases the campaign is not found in the attribution cookie, but the URL ref was found.
// In this case we look up if the current visit is credited to a campaign and will credit this campaign rather than the URL ref (since campaigns have higher priority)
if (empty($referrerCampaignName)
&& $type == Common::REFERRER_TYPE_CAMPAIGN
&& !empty($name)
) {
// Use default values per above
Common::printDebug("Invalid Referrer information found: current visitor seems to have used a campaign, but campaign name was not found in the request.");
} // 1) Campaigns from 1st party cookie
elseif (!empty($referrerCampaignName)) {
$type = Common::REFERRER_TYPE_CAMPAIGN;
$name = $referrerCampaignName;
$keyword = $referrerCampaignKeyword;
Common::printDebug("Campaign information from 1st party cookie is used.");
} // 2) Referrer URL parsing
elseif (!empty($referrerUrl)) {
$idSite = $request->getIdSite();
$referrer = $this->getReferrerInformation($referrerUrl, $currentUrl = '', $idSite, $request, $visitor);
// if the parsed referrer is interesting enough, ie. website or search engine
if (in_array($referrer['referer_type'], array(Common::REFERRER_TYPE_SEARCH_ENGINE, Common::REFERRER_TYPE_WEBSITE))) {
$type = $referrer['referer_type'];
$name = $referrer['referer_name'];
$keyword = $referrer['referer_keyword'];
Common::printDebug("Referrer URL (search engine or website) is used.");
} else {
Common::printDebug("No referrer attribution found for this user. Current user's visit referrer is used.");
}
} else {
Common::printDebug("No referrer attribution found for this user. Current user's visit referrer is used.");
}
$this->setCampaignValuesToLowercase($type, $name, $keyword);
$fields = array(
'referer_type' => $type,
'referer_name' => $name,
'referer_keyword' => $keyword,
);
if (array_key_exists($this->columnName, $fields)) {
return $fields[$this->columnName];
}
return false;
}
/**
* @param $type
* @param $name
* @param $keyword
*/
protected function setCampaignValuesToLowercase($type, &$name, &$keyword)
{
if ($type === Common::REFERRER_TYPE_CAMPAIGN) {
if (!empty($name)) {
$name = Common::mb_strtolower($name);
}
if (!empty($keyword)) {
$keyword = Common::mb_strtolower($keyword);
}
}
}
protected function isReferrerInformationNew(Visitor $visitor, $information)
{
foreach (array('referer_keyword', 'referer_name', 'referer_type') as $infoName) {
if ($this->hasReferrerColumnChanged($visitor, $information, $infoName)) {
return true;
}
}
return false;
}
protected function hasReferrerColumnChanged(Visitor $visitor, $information, $infoName)
{
return Common::mb_strtolower($visitor->getVisitorColumn($infoName)) != Common::mb_strtolower($information[$infoName]);
}
protected function doesLastActionHaveSameReferrer(Visitor $visitor, $referrerType)
{
return $visitor->getVisitorColumn('referer_type') == $referrerType;
}
protected function getReferrerCampaignQueryParam(Request $request, $paramName)
{
return trim(urldecode($request->getParam($paramName)));
}
}

View file

@ -0,0 +1,65 @@
<?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\Columns;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker\TrackerConfig;
use Piwik\Tracker\Visitor;
class Campaign extends Base
{
/**
* Obtained from the `[Tracker] create_new_visit_when_campaign_changes` INI config option.
* If true, will create new visits when campaign name changes.
*
* @var bool
*/
protected $createNewVisitWhenCampaignChanges;
public function __construct()
{
$this->createNewVisitWhenCampaignChanges = TrackerConfig::getConfigValue('create_new_visit_when_campaign_changes') == 1;
}
public function getName()
{
return Piwik::translate('Referrers_ColumnCampaign');
}
/**
* If we should create a new visit when the campaign changes, check if the campaign info changed and if so
* force the tracker to create a new visit.i
*
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return bool
*/
public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null)
{
if (!$this->createNewVisitWhenCampaignChanges) {
return false;
}
$information = $this->getReferrerInformationFromRequest($request, $visitor);
if ($information['referer_type'] == Common::REFERRER_TYPE_CAMPAIGN
&& $this->isReferrerInformationNew($visitor, $information)
) {
Common::printDebug("Existing visit detected, but creating new visit because campaign information is different than last action.");
return true;
}
return false;
}
}

View file

@ -0,0 +1,64 @@
<?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\Columns;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugins\Referrers\Segment;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
class Keyword extends Base
{
protected $columnName = 'referer_keyword';
protected $columnType = 'VARCHAR(255) NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('referrerKeyword');
$segment->setName('General_ColumnKeyword');
$segment->setAcceptedValues('Encoded%20Keyword, keyword');
$this->addSegment($segment);
}
public function getName()
{
return Piwik::translate('General_ColumnKeyword');
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$information = $this->getReferrerInformationFromRequest($request, $visitor);
if (!empty($information['referer_keyword'])) {
return Common::mb_substr($information['referer_keyword'], 0, 255);
}
return $information['referer_keyword'];
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
{
return $this->getValueForRecordGoal($request, $visitor);
}
}

View file

@ -0,0 +1,20 @@
<?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\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class Referrer extends Dimension
{
public function getName()
{
return Piwik::translate('Referrers_Referrer');
}
}

View file

@ -0,0 +1,57 @@
<?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\Columns;
use Piwik\Common;
use Piwik\Plugins\Referrers\Segment;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
class ReferrerName extends Base
{
protected $columnName = 'referer_name';
protected $columnType = 'VARCHAR(70) NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('referrerName');
$segment->setName('Referrers_ReferrerName');
$segment->setAcceptedValues('twitter.com, www.facebook.com, Bing, Google, Yahoo, CampaignName');
$this->addSegment($segment);
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$information = $this->getReferrerInformationFromRequest($request, $visitor);
if (!empty($information['referer_name'])) {
return Common::mb_substr($information['referer_name'], 0, 70);
}
return $information['referer_name'];
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
{
return $this->getValueForRecordGoal($request, $visitor);
}
}

View file

@ -0,0 +1,60 @@
<?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\Columns;
use Piwik\Piwik;
use Piwik\Plugins\Referrers\Segment;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
class ReferrerType extends Base
{
protected $columnName = 'referer_type';
protected $columnType = 'TINYINT(1) UNSIGNED NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('referrerType');
$segment->setName('Referrers_Type');
$segment->setSqlFilterValue('Piwik\Plugins\Referrers\getReferrerTypeFromShortName');
$segment->setAcceptedValues('direct, search, website, campaign');
$this->addSegment($segment);
}
public function getName()
{
return Piwik::translate('Referrers_Type');
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$information = $this->getReferrerInformationFromRequest($request, $visitor);
return $information['referer_type'];
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onAnyGoalConversion(Request $request, Visitor $visitor, $action)
{
return $this->getValueForRecordGoal($request, $visitor);
}
}

View file

@ -0,0 +1,42 @@
<?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\Columns;
use Piwik\Plugins\Referrers\Segment;
use Piwik\Tracker\Request;
use Piwik\Tracker\Visitor;
use Piwik\Tracker\Action;
class ReferrerUrl extends Base
{
protected $columnName = 'referer_url';
protected $columnType = 'TEXT NOT NULL';
protected function configureSegments()
{
$segment = new Segment();
$segment->setSegment('referrerUrl');
$segment->setName('Live_Referrer_URL');
$segment->setAcceptedValues('http%3A%2F%2Fwww.example.org%2Freferer-page.htm');
$this->addSegment($segment);
}
/**
* @param Request $request
* @param Visitor $visitor
* @param Action|null $action
* @return mixed
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
$information = $this->getReferrerInformationFromRequest($request, $visitor);
return $information['referer_url'];
}
}

View file

@ -0,0 +1,20 @@
<?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\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class SearchEngine extends Dimension
{
public function getName()
{
return Piwik::translate('Referrers_ColumnSearchEngine');
}
}

View file

@ -0,0 +1,20 @@
<?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\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class SocialNetwork extends Dimension
{
public function getName()
{
return Piwik::translate('Referrers_ColumnSocial');
}
}

View file

@ -0,0 +1,57 @@
<?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\Columns;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Tracker\Action;
use Piwik\Tracker\Request;
use Piwik\Tracker\TrackerConfig;
use Piwik\Tracker\Visitor;
class Website extends Base
{
/**
* Set using the `[Tracker] create_new_visit_when_website_referrer_changes` INI config option.
* If true, will force new visits if the referrer website changes.
*
* @var bool
*/
protected $createNewVisitWhenWebsiteReferrerChanges;
public function __construct()
{
$this->createNewVisitWhenWebsiteReferrerChanges = TrackerConfig::getConfigValue('create_new_visit_when_website_referrer_changes') == 1;
}
public function getName()
{
return Piwik::translate('General_Website');
}
public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null)
{
if (!$this->createNewVisitWhenWebsiteReferrerChanges) {
return false;
}
$information = $this->getReferrerInformationFromRequest($request, $visitor);
if ($information['referer_type'] == Common::REFERRER_TYPE_WEBSITE
&& $this->isReferrerInformationNew($visitor, $information)
) {
Common::printDebug("Existing visit detected, but creating new visit because website referrer information is different than last action.");
return true;
}
return false;
}
}

View file

@ -0,0 +1,20 @@
<?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\Columns;
use Piwik\Columns\Dimension;
use Piwik\Piwik;
class WebsitePage extends Dimension
{
public function getName()
{
return Piwik::translate('Referrers_ColumnWebsitePage');
}
}

View file

@ -1,6 +1,6 @@
<?php
/**
* Piwik - Open source web analytics
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
@ -15,25 +15,33 @@ use Piwik\Metrics;
use Piwik\Period\Range;
use Piwik\Piwik;
use Piwik\SettingsPiwik;
use Piwik\Url;
use Piwik\Translation\Translator;
use Piwik\View;
use Piwik\ViewDataTable\Factory;
/**
*
*/
class Controller extends \Piwik\Plugin\Controller
{
/**
* @var Translator
*/
private $translator;
public function __construct(Translator $translator)
{
$this->translator = $translator;
parent::__construct();
}
public function index()
{
$view = new View('@Referrers/index');
$view->graphEvolutionReferrers = $this->getEvolutionGraph(Common::REFERRER_TYPE_DIRECT_ENTRY, array('nb_visits'));
$view->graphEvolutionReferrers = $this->getEvolutionGraph(Common::REFERRER_TYPE_DIRECT_ENTRY, array(), array('nb_visits'));
$view->nameGraphEvolutionReferrers = 'Referrers.getEvolutionGraph';
// building the referrers summary report
$view->dataTableReferrerType = $this->getReferrerType(true);
$nameValues = $this->getReferrersVisitorsByType();
$totalVisits = array_sum($nameValues);
@ -85,138 +93,54 @@ class Controller extends \Piwik\Plugin\Controller
$view->urlSparklineDistinctWebsites = $this->getUrlSparkline('getLastDistinctWebsitesGraph');
$view->urlSparklineDistinctCampaigns = $this->getUrlSparkline('getLastDistinctCampaignsGraph');
$view->totalVisits = $totalVisits;
$view->referrersReportsByDimension = $this->getReferrersReportsByDimensionView($totalVisits);
return $view->render();
}
/**
* Returns HTML for the Referrers Overview page that categorizes Referrer reports
* & allows the user to switch between them.
*
* @param int $visits The number of visits for this period & site. If <= 0, the
* reports are not shown, since they will have no data.getReferrersReportsByDimensionView
* @return string The report viewer HTML.
*/
private function getReferrersReportsByDimensionView($visits)
public function allReferrers()
{
$result = '';
$view = new View('@Referrers/allReferrers');
// only display the reports by dimension view if there are visits
if ($visits > 0) {
$referrersReportsByDimension = new View\ReportsByDimension('Referrers');
// building the referrers summary report
$view->dataTableReferrerType = $this->renderReport('getReferrerType');
$referrersReportsByDimension->addReport(
'Referrers_ViewAllReferrers', 'Referrers_WidgetGetAll', 'Referrers.getAll');
$nameValues = $this->getReferrersVisitorsByType();
$byTypeCategory = Piwik::translate('Referrers_ViewReferrersBy', Piwik::translate('Live_GoalType'));
$referrersReportsByDimension->addReport(
$byTypeCategory, 'Referrers_WidgetKeywords', 'Referrers.getKeywords');
$referrersReportsByDimension->addReport($byTypeCategory, 'SitesManager_Sites', 'Referrers.getWebsites');
$referrersReportsByDimension->addReport($byTypeCategory, 'Referrers_Campaigns', 'Referrers.getCampaigns');
$totalVisits = array_sum($nameValues);
foreach ($nameValues as $name => $value) {
$view->$name = $value;
$bySourceCategory = Piwik::translate('Referrers_ViewReferrersBy', Piwik::translate('General_Source'));
$referrersReportsByDimension->addReport($bySourceCategory, 'Referrers_Socials', 'Referrers.getSocials');
$referrersReportsByDimension->addReport(
$bySourceCategory, 'Referrers_SearchEngines', 'Referrers.getSearchEngines');
$result = $referrersReportsByDimension->render();
// calculate percent of total, if there were any visits
if ($value != 0
&& $totalVisits != 0
) {
$percentName = $name . 'Percent';
$view->$percentName = round(($value / $totalVisits) * 100, 0);
}
}
return $result;
$view->totalVisits = $totalVisits;
$view->referrersReportsByDimension = $this->renderReport('getAll');
return $view->render();
}
public function getSearchEnginesAndKeywords()
{
$view = new View('@Referrers/getSearchEnginesAndKeywords');
$view->searchEngines = $this->getSearchEngines(true);
$view->keywords = $this->getKeywords(true);
$view->searchEngines = $this->renderReport('getSearchEngines');
$view->keywords = $this->renderReport('getKeywords');
return $view->render();
}
public function getReferrerType()
{
return $this->renderReport(__FUNCTION__);
}
/**
* Returns or echo's a report that shows all search keyword, website and campaign
* referrer information in one report.
*
* @return string The report HTML or nothing if $fetch is set to false.
*/
public function getAll()
{
return $this->renderReport(__FUNCTION__);
}
public function getKeywords()
{
return $this->renderReport(__FUNCTION__);
}
public function getSearchEnginesFromKeywordId()
{
return $this->renderReport(__FUNCTION__);
}
public function getSearchEngines()
{
return $this->renderReport(__FUNCTION__);
}
public function getKeywordsFromSearchEngineId()
{
return $this->renderReport(__FUNCTION__);
}
public function indexWebsites()
{
$view = new View('@Referrers/indexWebsites');
$view->websites = $this->getWebsites(true);
$view->socials = $this->getSocials(true);
$view->websites = $this->renderReport('getWebsites');
$view->socials = $this->renderReport('getSocials');
return $view->render();
}
public function getWebsites()
{
return $this->renderReport(__FUNCTION__);
}
public function getSocials()
{
return $this->renderReport(__FUNCTION__);
}
public function getUrlsForSocial()
{
return $this->renderReport(__FUNCTION__);
}
public function indexCampaigns()
{
return View::singleReport(
Piwik::translate('Referrers_Campaigns'),
$this->getCampaigns(true));
}
public function getCampaigns()
{
return $this->renderReport(__FUNCTION__);
}
public function getKeywordsFromCampaignId()
{
return $this->renderReport(__FUNCTION__);
}
public function getUrlsFromWebsiteId()
{
return $this->renderReport(__FUNCTION__);
}
protected function getReferrersVisitorsByType($date = false)
{
if ($date === false) {
@ -254,7 +178,7 @@ class Controller extends \Piwik\Plugin\Controller
Common::REFERRER_TYPE_CAMPAIGN => 'Referrers_Campaigns',
);
public function getEvolutionGraph($typeReferrer = false, array $columns = array())
public function getEvolutionGraph($typeReferrer = false, array $columns = array(), array $defaultColumns = array())
{
$view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, 'Referrers.getReferrerType');
@ -262,15 +186,25 @@ class Controller extends \Piwik\Plugin\Controller
// configure displayed columns
if (empty($columns)) {
$columns = Common::getRequestVar('columns');
$columns = Piwik::getArrayFromApiParameter($columns);
$columns = Common::getRequestVar('columns', false);
if (false !== $columns) {
$columns = Piwik::getArrayFromApiParameter($columns);
}
}
if (false !== $columns) {
$columns = !is_array($columns) ? array($columns) : $columns;
}
if (!empty($columns)) {
$view->config->columns_to_display = $columns;
} elseif (empty($view->config->columns_to_display) && !empty($defaultColumns)) {
$view->config->columns_to_display = $defaultColumns;
}
$columns = !is_array($columns) ? array($columns) : $columns;
$view->config->columns_to_display = $columns;
// configure selectable columns
// todo: should use SettingsPiwik::isUniqueVisitorsEnabled
if (Common::getRequestVar('period', false) == 'day') {
$selectable = array('nb_visits', 'nb_uniq_visitors', 'nb_actions');
$selectable = array('nb_visits', 'nb_uniq_visitors', 'nb_users', 'nb_actions');
} else {
$selectable = array('nb_visits', 'nb_actions');
}
@ -290,17 +224,23 @@ class Controller extends \Piwik\Plugin\Controller
$typeReferrer = Common::getRequestVar('typeReferrer', false);
}
$label = self::getTranslatedReferrerTypeLabel($typeReferrer);
$total = Piwik::translate('General_Total');
$visibleRows = array($label, $total);
$total = $this->translator->translate('General_Total');
if (!empty($view->config->rows_to_display)) {
$visibleRows = $view->config->rows_to_display;
} else {
$visibleRows = array($label, $total);
}
$view->requestConfig->request_parameters_to_modify['rows'] = $label . ',' . $total;
}
$view->config->row_picker_match_rows_by = 'label';
$view->config->rows_to_display = $visibleRows;
$view->config->documentation = Piwik::translate('Referrers_EvolutionDocumentation') . '<br />'
. Piwik::translate('General_BrokenDownReportDocumentation') . '<br />'
. Piwik::translate('Referrers_EvolutionDocumentationMoreInfo', '&quot;'
. Piwik::translate('Referrers_DetailsByReferrerType') . '&quot;');
$view->config->documentation = $this->translator->translate('Referrers_EvolutionDocumentation') . '<br />'
. $this->translator->translate('General_BrokenDownReportDocumentation') . '<br />'
. $this->translator->translate('Referrers_EvolutionDocumentationMoreInfo', '&quot;'
. $this->translator->translate('Referrers_ReferrerTypes') . '&quot;');
return $this->renderView($view);
}
@ -308,7 +248,7 @@ class Controller extends \Piwik\Plugin\Controller
public function getLastDistinctSearchEnginesGraph()
{
$view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "Referrers.getNumberOfDistinctSearchEngines");
$view->config->translations['Referrers_distinctSearchEngines'] = ucfirst(Piwik::translate('Referrers_DistinctSearchEngines'));
$view->config->translations['Referrers_distinctSearchEngines'] = ucfirst($this->translator->translate('Referrers_DistinctSearchEngines'));
$view->config->columns_to_display = array('Referrers_distinctSearchEngines');
return $this->renderView($view);
}
@ -316,7 +256,7 @@ class Controller extends \Piwik\Plugin\Controller
public function getLastDistinctKeywordsGraph()
{
$view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "Referrers.getNumberOfDistinctKeywords");
$view->config->translations['Referrers_distinctKeywords'] = ucfirst(Piwik::translate('Referrers_DistinctKeywords'));
$view->config->translations['Referrers_distinctKeywords'] = ucfirst($this->translator->translate('Referrers_DistinctKeywords'));
$view->config->columns_to_display = array('Referrers_distinctKeywords');
return $this->renderView($view);
}
@ -324,7 +264,7 @@ class Controller extends \Piwik\Plugin\Controller
public function getLastDistinctWebsitesGraph()
{
$view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "Referrers.getNumberOfDistinctWebsites");
$view->config->translations['Referrers_distinctWebsites'] = ucfirst(Piwik::translate('Referrers_DistinctWebsites'));
$view->config->translations['Referrers_distinctWebsites'] = ucfirst($this->translator->translate('Referrers_DistinctWebsites'));
$view->config->columns_to_display = array('Referrers_distinctWebsites');
return $this->renderView($view);
}
@ -332,7 +272,7 @@ class Controller extends \Piwik\Plugin\Controller
public function getLastDistinctCampaignsGraph()
{
$view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "Referrers.getNumberOfDistinctCampaigns");
$view->config->translations['Referrers_distinctCampaigns'] = ucfirst(Piwik::translate('Referrers_DistinctCampaigns'));
$view->config->translations['Referrers_distinctCampaigns'] = ucfirst($this->translator->translate('Referrers_DistinctCampaigns'));
$view->config->columns_to_display = array('Referrers_distinctCampaigns');
return $this->renderView($view);
}
@ -370,7 +310,7 @@ class Controller extends \Piwik\Plugin\Controller
// HTML
$api = SettingsPiwik::getPiwikUrl()
. '?module=API&method=Referrers.getKeywordsForPageUrl'
. '&format=php'
. '&format=json'
. '&filter_limit=10'
. '&token_auth=' . Piwik::getCurrentUserTokenAuth();
@ -385,8 +325,9 @@ function DisplayTopKeywords($url = "")
// Get the Keywords data
$url = empty($url) ? "http://". $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] : $url;
$api = "' . $api . '&url=" . urlencode($url);
$keywords = @unserialize(file_get_contents($api));
if($keywords === false || isset($keywords["result"])) {
$keywords = @json_decode(file_get_contents($api), $assoc = true);
Common::sendHeader(\'Content-Type: text/html; charset=utf-8\', true);
if ($keywords === false || isset($keywords["result"])) {
// DEBUG ONLY: uncomment for troubleshooting an empty output (the URL output reveals the token_auth)
// echo "Error while fetching the <a href=\'$api\'>Top Keywords from Piwik</a>";
return;
@ -398,7 +339,7 @@ function DisplayTopKeywords($url = "")
foreach($keywords as $keyword) {
$output .= "<li>". $keyword . "</li>";
}
if(empty($keywords)) { $output .= "Nothing yet..."; }
if (empty($keywords)) { $output .= "Nothing yet..."; }
$output .= "</ul>";
echo $output;
}
@ -408,8 +349,8 @@ function DisplayTopKeywords($url = "")
echo "<p>This widget is designed to work in your website directly.
This widget makes it easy to use Piwik to <i>automatically display the list of Top Keywords</i>, for each of your website Page URLs.</p>
<p>
<b>Example API URL</b> - For example if you would like to get the top 10 keywords, used last week, to land on the page <a target='_blank' href='$topPageUrl'>$topPageUrl</a>,
in format JSON: you would dynamically fetch the data using <a target='_blank' href='$jsonRequest&url=" . urlencode($topPageUrl) . "'>this API request URL</a>. Make sure you encode the 'url' parameter in the URL.</p>
<b>Example API URL</b> - For example if you would like to get the top 10 keywords, used last week, to land on the page <a rel='noreferrer' target='_blank' href='$topPageUrl'>$topPageUrl</a>,
in format JSON: you would dynamically fetch the data using <a rel='noreferrer' target='_blank' href='$jsonRequest&url=" . urlencode($topPageUrl) . "'>this API request URL</a>. Make sure you encode the 'url' parameter in the URL.</p>
<p><b>PHP Function ready to use!</b> - If you use PHP on your website, we have prepared a small code snippet that you can copy paste in your Website PHP files. You can then simply call the function <code>DisplayTopKeywords();</code> anywhere in your template, at the bottom of the content or in your blog sidebar.
If you run this code in your page $topPageUrl, it would output the following:";
@ -422,7 +363,8 @@ function DisplayTopKeywords($url = "")
// Get the Keywords data
$url = empty($url) ? "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] : $url;
$api = $api . "&url=" . urlencode($url);
$keywords = @unserialize(file_get_contents($api));
$keywords = @json_decode(file_get_contents($api), $assoc = true);
Common::sendHeader('Content-Type: text/html; charset=utf-8', true);
if ($keywords === false || isset($keywords["result"])) {
// DEBUG ONLY: uncomment for troubleshooting an empty output (the URL output reveals the token_auth)
//echo "Error while fetching the <a href=\'".$api."\'>Top Keywords from Piwik</a>";
@ -476,7 +418,7 @@ function DisplayTopKeywords($url = "")
*/
private function getReferrerUrlSparkline($referrerType)
{
$totalRow = Piwik::translate('General_Total');
$totalRow = $this->translator->translate('General_Total');
return $this->getUrlSparkline(
'getEvolutionGraph',
array('columns' => array('nb_visits'),

View file

@ -0,0 +1,25 @@
<?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\DataTable\Filter;
use Piwik\DataTable\Row;
use Piwik\DataTable;
class KeywordNotDefined extends DataTable\Filter\ColumnCallbackReplace
{
/**
* Constructor.
*
* @param DataTable $table The table to eventually filter.
*/
public function __construct($table)
{
parent::__construct($table, 'label', 'Piwik\Plugins\Referrers\API::getCleanKeyword');
}
}

View file

@ -0,0 +1,62 @@
<?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\DataTable\Filter;
use Piwik\DataTable\BaseFilter;
use Piwik\DataTable\Row;
use Piwik\DataTable;
use Piwik\Plugins\Referrers\SearchEngine;
class KeywordsFromSearchEngineId extends BaseFilter
{
/**
* @var DataTable
*/
private $firstLevelSearchEnginesTable;
/**
* @var int
*/
private $idSubtable;
/**
* Constructor.
*
* @param DataTable $table The table to eventually filter.
*/
public function __construct($table, $firstLevelSearchEnginesTable, $idSubtable = null)
{
parent::__construct($table);
$this->firstLevelSearchEnginesTable = $firstLevelSearchEnginesTable;
$this->idSubtable = $idSubtable;
}
/**
* @param DataTable $table
*/
public function filter($table)
{
$idSubtable = $this->idSubtable ? : $table->getId();
$subTableRow = $this->firstLevelSearchEnginesTable->getRowFromIdSubDataTable($idSubtable);
if (!empty($subTableRow)) {
$searchEngineUrl = $subTableRow->getMetadata('url');
$table->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($keyword, $url) { return SearchEngine::getInstance()->getBackLinkFromUrlAndKeyword($url, $keyword); }, array($searchEngineUrl)));
$table->queueFilter(function (DataTable $table) {
$row = $table->getRowFromId(DataTable::ID_SUMMARY_ROW);
if ($row) {
$row->deleteMetadata('url');
}
});
}
$table->queueFilter('Piwik\Plugins\Referrers\DataTable\Filter\KeywordNotDefined');
}
}

View file

@ -0,0 +1,64 @@
<?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\DataTable\Filter;
use Piwik\DataTable\BaseFilter;
use Piwik\DataTable\Row;
use Piwik\DataTable;
use Piwik\Plugins\Referrers\SearchEngine;
class SearchEnginesFromKeywordId extends BaseFilter
{
/**
* @var DataTable
*/
private $firstLevelKeywordTable;
/**
* @var int
*/
private $idSubtable;
/**
* Constructor.
*
* @param DataTable $table The table to eventually filter.
*/
public function __construct($table, $firstLevelKeywordTable, $idSubtable = null)
{
parent::__construct($table);
$this->firstLevelKeywordTable = $firstLevelKeywordTable;
$this->idSubtable = $idSubtable;
}
/**
* @param DataTable $table
*/
public function filter($table)
{
$idSubtable = $this->idSubtable ? : $table->getId();
$table->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($url) { return SearchEngine::getInstance()->getUrlFromName($url); }));
$table->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', function ($url) { return SearchEngine::getInstance()->getLogoFromUrl($url); }));
// get the keyword and create the URL to the search result page
$rootRow = $this->firstLevelKeywordTable->getRowFromIdSubDataTable($idSubtable);
if ($rootRow) {
$keyword = $rootRow->getColumn('label');
$table->queueFilter('MetadataCallbackReplace', array('url', function ($url, $keyword) { return SearchEngine::getInstance()->getBackLinkFromUrlAndKeyword($url, $keyword); }, array($keyword)));
$table->queueFilter(function (DataTable $table) {
$row = $table->getRowFromId(DataTable::ID_SUMMARY_ROW);
if ($row) {
$row->deleteMetadata('url');
}
});
}
}
}

View file

@ -0,0 +1,91 @@
<?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\DataTable\Filter;
use Piwik\Common;
use Piwik\DataTable\Row;
use Piwik\DataTable;
use Piwik\Period\Range;
use Piwik\Plugins\Referrers\API;
/**
* Utility function that sets the subtables for the getReferrerType report.
*
* If we're not getting an expanded datatable, the subtable ID is set to each parent
* row's referrer type (stored in the label for the getReferrerType report).
*
* If we are getting an expanded datatable, the datatable for the row's referrer
* type is loaded and attached to the appropriate row in the getReferrerType report.
*/
class SetGetReferrerTypeSubtables extends DataTable\BaseFilter
{
/** @var int */
private $idSite;
/** @var string */
private $period;
/** @var string */
private $date;
/** @var string */
private $segment;
/** @var bool */
private $expanded;
/**
* Constructor.
*
* @param DataTable $table The table to eventually filter.
* @param int $idSite
* @param string $period
* @param string $date
* @param string $segment
* @param bool $expanded
*/
public function __construct($table, $idSite, $period, $date, $segment, $expanded)
{
parent::__construct($table);
$this->idSite = $idSite;
$this->period = $period;
$this->date = $date;
$this->segment = $segment;
$this->expanded = $expanded;
}
public function filter($table)
{
foreach ($table->getRows() as $row) {
$typeReferrer = $row->getColumn('label');
if ($typeReferrer != Common::REFERRER_TYPE_DIRECT_ENTRY) {
if (!$this->expanded) // if we don't want the expanded datatable, then don't do any extra queries
{
$row->setNonLoadedSubtableId($typeReferrer);
} else if (!Range::isMultiplePeriod($this->date, $this->period))
{
// otherwise, we have to get the other datatables
// NOTE: not yet possible to do this w/ DataTable\Map instances
// (actually it would be maybe possible by using $map->mergeChildren() or so build it would be slow)
$subtable = API::getInstance()->getReferrerType(
$this->idSite, $this->period, $this->date, $this->segment, $type = false, $idSubtable = $typeReferrer
);
if ($this->expanded) {
$subtable->applyQueuedFilters();
}
$row->setSubtable($subtable);
}
}
}
}
}

View file

@ -0,0 +1,48 @@
<?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\DataTable\Filter;
use Piwik\DataTable\BaseFilter;
use Piwik\DataTable\Row;
use Piwik\DataTable;
use Piwik\Metrics;
class UrlsForSocial extends BaseFilter
{
/**
* @var bool
*/
private $sortRecursive;
/**
* Constructor.
*
* @param DataTable $table The table to eventually filter.
* @param bool $sortRecursive Whether to sort recursive or not
*/
public function __construct($table, $sortRecursive)
{
parent::__construct($table);
$this->sortRecursive = $sortRecursive;
}
/**
* @param DataTable $table
*/
public function filter($table)
{
// make url labels clickable
$table->filter('ColumnCallbackAddMetadata', array('label', 'url'));
// prettify the DataTable
$table->filter('ColumnCallbackReplace', array('label', 'Piwik\Plugins\Referrers\removeUrlProtocol'));
$table->queueFilter('ReplaceColumnNames');
}
}

View file

@ -0,0 +1,46 @@
<?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\DataTable\Filter;
use Piwik\DataTable\BaseFilter;
use Piwik\DataTable\Row;
use Piwik\DataTable;
class UrlsFromWebsiteId extends BaseFilter
{
/**
* Constructor.
*
* @param DataTable $table The table to eventually filter.
*/
public function __construct($table)
{
parent::__construct($table);
}
/**
* @param DataTable $table
*/
public function filter($table)
{
// the htmlspecialchars_decode call is for BC for before 1.1
// as the Referrer URL was previously encoded in the log tables, but is now recorded raw
$table->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', function ($label) {
return htmlspecialchars_decode($label);
}));
$table->queueFilter('ColumnCallbackReplace', array('label', 'Piwik\Plugins\Referrers\getPathFromUrl'));
foreach ($table->getRowsWithoutSummaryRow() as $row) {
$subtable = $row->getSubtable();
if ($subtable) {
$this->filter($subtable);
}
}
}
}

View file

@ -0,0 +1,23 @@
<?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\Menu\MenuReporting;
class Menu extends \Piwik\Plugin\Menu
{
public function configureReportingMenu(MenuReporting $menu)
{
$menu->addReferrersItem('', array(), 20);
$menu->addReferrersItem('General_Overview', $this->urlForAction('index'), 1);
$menu->addReferrersItem('Referrers_WidgetGetAll', $this->urlForAction('allReferrers'), 2);
$menu->addReferrersItem('Referrers_SubmenuSearchEngines', $this->urlForAction('getSearchEnginesAndKeywords'), 3);
$menu->addReferrersItem('Referrers_SubmenuWebsites', $this->urlForAction('indexWebsites'), 4);
}
}

View file

@ -1,6 +1,6 @@
<?php
/**
* Piwik - Open source web analytics
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
@ -10,14 +10,9 @@ namespace Piwik\Plugins\Referrers;
use Piwik\ArchiveProcessor;
use Piwik\Common;
use Piwik\Menu\MenuMain;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable\AllColumns;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Pie;
use Piwik\SettingsPiwik;
use Piwik\WidgetsList;
use Piwik\Plugins\SitesManager\SiteUrls;
/**
* @see plugins/Referrers/functions.php
@ -29,21 +24,45 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/Referrers/functions.php';
class Referrers extends \Piwik\Plugin
{
/**
* @see Piwik\Plugin::getListHooksRegistered
* @see Piwik\Plugin::registerEvents
*/
public function getListHooksRegistered()
public function registerEvents()
{
$hooks = array(
'WidgetsList.addWidgets' => 'addWidgets',
'Menu.Reporting.addItems' => 'addMenus',
'Goals.getReportsWithGoalMetrics' => 'getReportsWithGoalMetrics',
'API.getReportMetadata' => 'getReportMetadata',
'API.getSegmentDimensionMetadata' => 'getSegmentsMetadata',
'ViewDataTable.configure' => 'configureViewDataTable',
'ViewDataTable.getDefaultType' => 'getDefaultTypeViewDataTable',
'Insights.addReportToOverview' => 'addReportToInsightsOverview'
return array(
'Insights.addReportToOverview' => 'addReportToInsightsOverview',
'Live.getAllVisitorDetails' => 'extendVisitorDetails',
'Request.getRenamedModuleAndAction' => 'renameDeprecatedModuleAndAction',
'Tracker.setTrackerCacheGeneral' => 'setTrackerCacheGeneral'
);
return $hooks;
}
public function setTrackerCacheGeneral(&$cacheContent)
{
$siteUrls = new SiteUrls();
$urls = $siteUrls->getAllCachedSiteUrls();
return $cacheContent['allUrlsByHostAndIdSite'] = $siteUrls->groupUrlsByHost($urls);
}
public function renameDeprecatedModuleAndAction(&$module, &$action)
{
if($module == 'Referers') {
$module = 'Referrers';
}
}
public function extendVisitorDetails(&$visitor, $details)
{
$instance = new Visitor($details);
$visitor['referrerType'] = $instance->getReferrerType();
$visitor['referrerTypeName'] = $instance->getReferrerTypeName();
$visitor['referrerName'] = $instance->getReferrerName();
$visitor['referrerKeyword'] = $instance->getKeyword();
$visitor['referrerKeywordPosition'] = $instance->getKeywordPosition();
$visitor['referrerUrl'] = $instance->getReferrerUrl();
$visitor['referrerSearchEngineUrl'] = $instance->getSearchEngineUrl();
$visitor['referrerSearchEngineIcon'] = $instance->getSearchEngineIcon();
}
public function addReportToInsightsOverview(&$reports)
@ -54,460 +73,6 @@ class Referrers extends \Piwik\Plugin
$reports['Referrers_getSearchEngines'] = array();
}
public function getReportMetadata(&$reports)
{
$reports = array_merge($reports, array(
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Type'),
'module' => 'Referrers',
'action' => 'getReferrerType',
'dimension' => Piwik::translate('Referrers_Type'),
'constantRowsCount' => true,
'documentation' => Piwik::translate('Referrers_TypeReportDocumentation') . '<br />'
. '<b>' . Piwik::translate('Referrers_DirectEntry') . ':</b> ' . Piwik::translate('Referrers_DirectEntryDocumentation') . '<br />'
. '<b>' . Piwik::translate('Referrers_SearchEngines') . ':</b> ' . Piwik::translate('Referrers_SearchEnginesDocumentation',
array('<br />', '&quot;' . Piwik::translate('Referrers_SubmenuSearchEngines') . '&quot;')) . '<br />'
. '<b>' . Piwik::translate('Referrers_Websites') . ':</b> ' . Piwik::translate('Referrers_WebsitesDocumentation',
array('<br />', '&quot;' . Piwik::translate('Referrers_SubmenuWebsites') . '&quot;')) . '<br />'
. '<b>' . Piwik::translate('Referrers_Campaigns') . ':</b> ' . Piwik::translate('Referrers_CampaignsDocumentation',
array('<br />', '&quot;' . Piwik::translate('Referrers_Campaigns') . '&quot;')),
'order' => 1,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_WidgetGetAll'),
'module' => 'Referrers',
'action' => 'getAll',
'dimension' => Piwik::translate('Referrers_Referrer'),
'documentation' => Piwik::translate('Referrers_AllReferrersReportDocumentation', '<br />'),
'order' => 2,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Keywords'),
'module' => 'Referrers',
'action' => 'getKeywords',
'actionToLoadSubTables' => 'getSearchEnginesFromKeywordId',
'dimension' => Piwik::translate('General_ColumnKeyword'),
'documentation' => Piwik::translate('Referrers_KeywordsReportDocumentation', '<br />'),
'order' => 3,
),
array( // subtable report
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Keywords'),
'module' => 'Referrers',
'action' => 'getSearchEnginesFromKeywordId',
'dimension' => Piwik::translate('Referrers_ColumnSearchEngine'),
'documentation' => Piwik::translate('Referrers_KeywordsReportDocumentation', '<br />'),
'isSubtableReport' => true,
'order' => 4
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Websites'),
'module' => 'Referrers',
'action' => 'getWebsites',
'dimension' => Piwik::translate('Referrers_ColumnWebsite'),
'documentation' => Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />'),
'actionToLoadSubTables' => 'getUrlsFromWebsiteId',
'order' => 5
),
array( // subtable report
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Websites'),
'module' => 'Referrers',
'action' => 'getUrlsFromWebsiteId',
'dimension' => Piwik::translate('Referrers_ColumnWebsitePage'),
'documentation' => Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />'),
'isSubtableReport' => true,
'order' => 6,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_SearchEngines'),
'module' => 'Referrers',
'action' => 'getSearchEngines',
'dimension' => Piwik::translate('Referrers_ColumnSearchEngine'),
'documentation' => Piwik::translate('Referrers_SearchEnginesReportDocumentation', '<br />'),
'actionToLoadSubTables' => 'getKeywordsFromSearchEngineId',
'order' => 7,
),
array( // subtable report
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_SearchEngines'),
'module' => 'Referrers',
'action' => 'getKeywordsFromSearchEngineId',
'dimension' => Piwik::translate('General_ColumnKeyword'),
'documentation' => Piwik::translate('Referrers_SearchEnginesReportDocumentation', '<br />'),
'isSubtableReport' => true,
'order' => 8,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Campaigns'),
'module' => 'Referrers',
'action' => 'getCampaigns',
'dimension' => Piwik::translate('Referrers_ColumnCampaign'),
'documentation' => Piwik::translate('Referrers_CampaignsReportDocumentation',
array('<br />', '<a href="http://piwik.org/docs/tracking-campaigns/" target="_blank">', '</a>')),
'actionToLoadSubTables' => 'getKeywordsFromCampaignId',
'order' => 9,
),
array( // subtable report
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Campaigns'),
'module' => 'Referrers',
'action' => 'getKeywordsFromCampaignId',
'dimension' => Piwik::translate('General_ColumnKeyword'),
'documentation' => Piwik::translate('Referrers_CampaignsReportDocumentation',
array('<br />', '<a href="http://piwik.org/docs/tracking-campaigns/" target="_blank">', '</a>')),
'isSubtableReport' => true,
'order' => 10,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Socials'),
'module' => 'Referrers',
'action' => 'getSocials',
'actionToLoadSubTables' => 'getUrlsForSocial',
'dimension' => Piwik::translate('Referrers_ColumnSocial'),
'documentation' => Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />'),
'order' => 11,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Socials'),
'module' => 'Referrers',
'action' => 'getUrlsForSocial',
'isSubtableReport' => true,
'dimension' => Piwik::translate('Referrers_ColumnWebsitePage'),
'documentation' => Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />'),
'order' => 12,
),
));
}
public function getSegmentsMetadata(&$segments)
{
$segments[] = array(
'type' => 'dimension',
'category' => 'Referrers_Referrers',
'name' => 'Referrers_Type',
'segment' => 'referrerType',
'acceptedValues' => 'direct, search, website, campaign',
'sqlSegment' => 'log_visit.referer_type',
'sqlFilterValue' => __NAMESPACE__ . '\getReferrerTypeFromShortName',
);
$segments[] = array(
'type' => 'dimension',
'category' => 'Referrers_Referrers',
'name' => 'General_ColumnKeyword',
'segment' => 'referrerKeyword',
'acceptedValues' => 'Encoded%20Keyword, keyword',
'sqlSegment' => 'log_visit.referer_keyword',
);
$segments[] = array(
'type' => 'dimension',
'category' => 'Referrers_Referrers',
'name' => 'Referrers_ReferrerName',
'segment' => 'referrerName',
'acceptedValues' => 'twitter.com, www.facebook.com, Bing, Google, Yahoo, CampaignName',
'sqlSegment' => 'log_visit.referer_name',
);
$segments[] = array(
'type' => 'dimension',
'category' => 'Referrers_Referrers',
'name' => 'Live_Referrer_URL',
'acceptedValues' => 'http%3A%2F%2Fwww.example.org%2Freferer-page.htm',
'segment' => 'referrerUrl',
'sqlSegment' => 'log_visit.referer_url',
);
}
/**
* Adds Referrer widgets
*/
function addWidgets()
{
WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetKeywords', 'Referrers', 'getKeywords');
WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetExternalWebsites', 'Referrers', 'getWebsites');
WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetSocials', 'Referrers', 'getSocials');
WidgetsList::add('Referrers_Referrers', 'Referrers_SearchEngines', 'Referrers', 'getSearchEngines');
WidgetsList::add('Referrers_Referrers', 'Referrers_Campaigns', 'Referrers', 'getCampaigns');
WidgetsList::add('Referrers_Referrers', 'General_Overview', 'Referrers', 'getReferrerType');
WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetGetAll', 'Referrers', 'getAll');
if (SettingsPiwik::isSegmentationEnabled()) {
WidgetsList::add('SEO', 'Referrers_WidgetTopKeywordsForPages', 'Referrers', 'getKeywordsForPage');
}
}
/**
* Adds Web Analytics menus
*/
function addMenus()
{
MenuMain::getInstance()->add('Referrers_Referrers', '', array('module' => 'Referrers', 'action' => 'index'), true, 20);
MenuMain::getInstance()->add('Referrers_Referrers', 'General_Overview', array('module' => 'Referrers', 'action' => 'index'), true, 1);
MenuMain::getInstance()->add('Referrers_Referrers', 'Referrers_SubmenuSearchEngines', array('module' => 'Referrers', 'action' => 'getSearchEnginesAndKeywords'), true, 2);
MenuMain::getInstance()->add('Referrers_Referrers', 'Referrers_SubmenuWebsites', array('module' => 'Referrers', 'action' => 'indexWebsites'), true, 3);
MenuMain::getInstance()->add('Referrers_Referrers', 'Referrers_Campaigns', array('module' => 'Referrers', 'action' => 'indexCampaigns'), true, 4);
}
/**
* Adds Goal dimensions, so that the dimensions are displayed in the UI Goal Overview page
*/
public function getReportsWithGoalMetrics(&$dimensions)
{
$dimensions = array_merge($dimensions, array(
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Type'),
'module' => 'Referrers',
'action' => 'getReferrerType',
),
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Keywords'),
'module' => 'Referrers',
'action' => 'getKeywords',
),
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_SearchEngines'),
'module' => 'Referrers',
'action' => 'getSearchEngines',
),
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Websites'),
'module' => 'Referrers',
'action' => 'getWebsites',
),
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Campaigns'),
'module' => 'Referrers',
'action' => 'getCampaigns',
),
));
}
public function getDefaultTypeViewDataTable(&$defaultViewTypes)
{
$defaultViewTypes['Referrers.getReferrerType'] = AllColumns::ID;
$defaultViewTypes['Referrers.getSocials'] = Pie::ID;
}
public function configureViewDataTable(ViewDataTable $view)
{
switch ($view->requestConfig->apiMethodToRequestDataTable) {
case 'Referrers.getReferrerType':
$this->configureViewForGetReferrerType($view);
break;
case 'Referrers.getAll':
$this->configureViewForGetAll($view);
break;
case 'Referrers.getKeywords':
$this->configureViewForGetKeywords($view);
break;
case 'Referrers.getSearchEnginesFromKeywordId':
$this->configureViewForGetSearchEnginesFromKeywordId($view);
break;
case 'Referrers.getSearchEngines':
$this->configureViewForGetSearchEngines($view);
break;
case 'Referrers.getKeywordsFromSearchEngineId':
$this->configureViewForGetKeywordsFromSearchEngineId($view);
break;
case 'Referrers.getWebsites':
$this->configureViewForGetWebsites($view);
break;
case 'Referrers.getSocials':
$this->configureViewForGetSocials($view);
break;
case 'Referrers.getUrlsForSocial':
$this->configureViewForGetUrlsForSocial($view);
break;
case 'Referrers.getCampaigns':
$this->configureViewForGetCampaigns($view);
break;
case 'Referrers.getKeywordsFromCampaignId':
$this->configureViewForGetKeywordsFromCampaignId($view);
break;
case 'Referrers.getUrlsFromWebsiteId':
$this->configureViewForGetUrlsFromWebsiteId($view);
break;
}
}
private function configureViewForGetReferrerType(ViewDataTable $view)
{
$idSubtable = Common::getRequestVar('idSubtable', false);
$labelColumnTitle = Piwik::translate('Referrers_Type');
switch ($idSubtable) {
case Common::REFERRER_TYPE_SEARCH_ENGINE:
$labelColumnTitle = Piwik::translate('Referrers_ColumnSearchEngine');
break;
case Common::REFERRER_TYPE_WEBSITE:
$labelColumnTitle = Piwik::translate('Referrers_ColumnWebsite');
break;
case Common::REFERRER_TYPE_CAMPAIGN:
$labelColumnTitle = Piwik::translate('Referrers_ColumnCampaign');
break;
default:
break;
}
$view->config->show_search = false;
$view->config->show_goals = true;
$view->config->show_offset_information = false;
$view->config->show_pagination_control = false;
$view->config->show_limit_control = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $labelColumnTitle);
$view->requestConfig->filter_limit = 10;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
private function configureViewForGetAll(ViewDataTable $view)
{
$setGetAllHtmlPrefix = array($this, 'setGetAllHtmlPrefix');
$view->config->show_exclude_low_population = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', Piwik::translate('Referrers_Referrer'));
$view->requestConfig->filter_limit = 20;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_row_actions = true;
}
$view->config->filters[] = array('MetadataCallbackAddMetadata', array('referer_type', 'html_label_prefix', $setGetAllHtmlPrefix));
}
private function configureViewForGetKeywords(ViewDataTable $view)
{
$view->config->subtable_controller_action = 'getSearchEnginesFromKeywordId';
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('General_ColumnKeyword'));
$view->config->show_goals = true;
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
private function configureViewForGetSearchEnginesFromKeywordId(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnSearchEngine'));
}
private function configureViewForGetSearchEngines(ViewDataTable $view)
{
$view->config->subtable_controller_action = 'getKeywordsFromSearchEngineId';
$view->config->show_exclude_low_population = false;
$view->config->show_search = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnSearchEngine'));
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
private function configureViewForGetKeywordsFromSearchEngineId(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('General_ColumnKeyword'));
}
private function configureViewForGetWebsites(ViewDataTable $view)
{
$view->config->subtable_controller_action = 'getUrlsFromWebsiteId';
$view->config->show_exclude_low_population = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnWebsite'));
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
private function configureViewForGetSocials(ViewDataTable $view)
{
$view->config->subtable_controller_action = 'getUrlsForSocial';
$view->config->show_exclude_low_population = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnSocial'));
$view->requestConfig->filter_limit = 10;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
$widget = Common::getRequestVar('widget', false);
if (empty($widget)) {
$view->config->show_footer_message = Piwik::translate('Referrers_SocialFooterMessage');
}
}
private function configureViewForGetUrlsForSocial(ViewDataTable $view)
{
$view->config->show_goals = true;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnWebsitePage'));
$view->requestConfig->filter_limit = 10;
}
private function configureViewForGetCampaigns(ViewDataTable $view)
{
$view->config->show_goals = true;
$view->config->subtable_controller_action = 'getKeywordsFromCampaignId';
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnCampaign'));
$view->requestConfig->filter_limit = 25;
if (Common::getRequestVar('viewDataTable', false) != 'graphEvolution') {
$view->config->show_footer_message = Piwik::translate('Referrers_CampaignFooterHelp',
array('<a target="_blank" href="http://piwik.org/docs/tracking-campaigns/">',
'</a> - <a target="_blank" href="http://piwik.org/docs/tracking-campaigns/url-builder/">',
'</a>')
);
}
}
private function configureViewForGetKeywordsFromCampaignId(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('General_ColumnKeyword'));
}
private function configureViewForGetUrlsFromWebsiteId(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->tooltip_metadata_name = 'url';
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnWebsitePage'));
}
/**
* DataTable filter callback that returns the HTML prefix for a label in the
* 'getAll' report based on the row's referrer type.

View file

@ -0,0 +1,18 @@
<?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\Reports;
abstract class Base extends \Piwik\Plugin\Report
{
protected function init()
{
$this->category = 'Referrers_Referrers';
}
}

View file

@ -0,0 +1,52 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
use Piwik\Plugins\Referrers\Columns\Referrer;
use Piwik\Plugins\Referrers\Referrers;
class GetAll extends Base
{
protected function init()
{
parent::init();
$this->dimension = new Referrer();
$this->name = Piwik::translate('Referrers_WidgetGetAll');
$this->documentation = Piwik::translate('Referrers_AllReferrersReportDocumentation', '<br />');
$this->order = 2;
$this->widgetTitle = 'Referrers_WidgetGetAll';
}
public function getDefaultTypeViewDataTable()
{
return HtmlTable\AllColumns::ID;
}
public function configureView(ViewDataTable $view)
{
$referrers = new Referrers();
$setGetAllHtmlPrefix = array($referrers, 'setGetAllHtmlPrefix');
$view->config->show_exclude_low_population = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', $this->dimension->getName());
$view->requestConfig->filter_limit = 20;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_row_actions = true;
}
$view->config->filters[] = array('MetadataCallbackAddMetadata', array('referer_type', 'html_label_prefix', $setGetAllHtmlPrefix));
}
}

View file

@ -0,0 +1,39 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\Referrers\Columns\Campaign;
class GetCampaigns extends Base
{
protected function init()
{
parent::init();
$this->dimension = new Campaign();
$this->name = Piwik::translate('Referrers_Campaigns');
$this->documentation = Piwik::translate('Referrers_CampaignsReportDocumentation',
array('<br />', '<a href="http://piwik.org/docs/tracking-campaigns/" rel="noreferrer" target="_blank">', '</a>'));
$this->actionToLoadSubTables = 'getKeywordsFromCampaignId';
$this->hasGoalMetrics = true;
$this->order = 9;
$this->widgetTitle = 'Referrers_Campaigns';
$this->menuTitle = 'Referrers_Campaigns';
}
public function configureView(ViewDataTable $view)
{
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $this->dimension->getName());
$view->requestConfig->filter_limit = 25;
}
}

View file

@ -0,0 +1,42 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
use Piwik\Plugins\Referrers\Columns\Keyword;
class GetKeywords extends Base
{
protected function init()
{
parent::init();
$this->dimension = new Keyword();
$this->name = Piwik::translate('Referrers_Keywords');
$this->documentation = Piwik::translate('Referrers_KeywordsReportDocumentation', '<br />');
$this->actionToLoadSubTables = 'getSearchEnginesFromKeywordId';
$this->hasGoalMetrics = true;
$this->order = 3;
$this->widgetTitle = 'Referrers_Keywords';
}
public function configureView(ViewDataTable $view)
{
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('General_ColumnKeyword'));
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
}

View file

@ -0,0 +1,35 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\Referrers\Columns\Keyword;
class GetKeywordsFromCampaignId extends Base
{
protected function init()
{
parent::init();
$this->dimension = new Keyword();
$this->name = Piwik::translate('Referrers_Campaigns');
$this->documentation = Piwik::translate('Referrers_CampaignsReportDocumentation',
array('<br />', '<a href="http://piwik.org/docs/tracking-campaigns/" rel="noreferrer" target="_blank">', '</a>'));
$this->isSubtableReport = true;
$this->order = 10;
}
public function configureView(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $this->dimension->getName());
}
}

View file

@ -0,0 +1,34 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\Referrers\Columns\Keyword;
class GetKeywordsFromSearchEngineId extends Base
{
protected function init()
{
parent::init();
$this->dimension = new Keyword();
$this->name = Piwik::translate('Referrers_SearchEngines');
$this->documentation = Piwik::translate('Referrers_SearchEnginesReportDocumentation', '<br />');
$this->isSubtableReport = true;
$this->order = 8;
}
public function configureView(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $this->dimension->getName());
}
}

View file

@ -0,0 +1,76 @@
<?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\Reports;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
use Piwik\Plugins\Referrers\Columns\ReferrerType;
class GetReferrerType extends Base
{
protected function init()
{
parent::init();
$this->dimension = new ReferrerType();
$this->name = Piwik::translate('Referrers_Type');
$this->documentation = Piwik::translate('Referrers_TypeReportDocumentation') . '<br />'
. '<b>' . Piwik::translate('Referrers_DirectEntry') . ':</b> ' . Piwik::translate('Referrers_DirectEntryDocumentation') . '<br />'
. '<b>' . Piwik::translate('Referrers_SearchEngines') . ':</b> ' . Piwik::translate('Referrers_SearchEnginesDocumentation',
array('<br />', '&quot;' . Piwik::translate('Referrers_SubmenuSearchEngines') . '&quot;')) . '<br />'
. '<b>' . Piwik::translate('Referrers_Websites') . ':</b> ' . Piwik::translate('Referrers_WebsitesDocumentation',
array('<br />', '&quot;' . Piwik::translate('Referrers_SubmenuWebsites') . '&quot;')) . '<br />'
. '<b>' . Piwik::translate('Referrers_Campaigns') . ':</b> ' . Piwik::translate('Referrers_CampaignsDocumentation',
array('<br />', '&quot;' . Piwik::translate('Referrers_Campaigns') . '&quot;'));
$this->constantRowsCount = true;
$this->hasGoalMetrics = true;
$this->order = 1;
$this->widgetTitle = 'General_Overview';
}
public function getDefaultTypeViewDataTable()
{
return HtmlTable\AllColumns::ID;
}
public function configureView(ViewDataTable $view)
{
$idSubtable = Common::getRequestVar('idSubtable', false);
$labelColumnTitle = $this->name;
switch ($idSubtable) {
case Common::REFERRER_TYPE_SEARCH_ENGINE:
$labelColumnTitle = Piwik::translate('General_ColumnKeyword');
break;
case Common::REFERRER_TYPE_WEBSITE:
$labelColumnTitle = Piwik::translate('Referrers_ColumnWebsite');
break;
case Common::REFERRER_TYPE_CAMPAIGN:
$labelColumnTitle = Piwik::translate('Referrers_ColumnCampaign');
break;
default:
break;
}
$view->config->show_search = false;
$view->config->show_offset_information = false;
$view->config->show_pagination_control = false;
$view->config->show_limit_control = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $labelColumnTitle);
$view->requestConfig->filter_limit = 10;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
}

View file

@ -0,0 +1,43 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
use Piwik\Plugins\Referrers\Columns\SearchEngine;
class GetSearchEngines extends Base
{
protected function init()
{
parent::init();
$this->dimension = new SearchEngine();
$this->name = Piwik::translate('Referrers_SearchEngines');
$this->documentation = Piwik::translate('Referrers_SearchEnginesReportDocumentation', '<br />');
$this->actionToLoadSubTables = 'getKeywordsFromSearchEngineId';
$this->hasGoalMetrics = true;
$this->order = 7;
$this->widgetTitle = 'Referrers_SearchEngines';
}
public function configureView(ViewDataTable $view)
{
$view->config->show_exclude_low_population = false;
$view->config->show_search = false;
$view->config->addTranslation('label', $this->dimension->getName());
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
}

View file

@ -0,0 +1,34 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\Referrers\Columns\SearchEngine;
class GetSearchEnginesFromKeywordId extends Base
{
protected function init()
{
parent::init();
$this->dimension = new SearchEngine();
$this->name = Piwik::translate('Referrers_Keywords');
$this->documentation = Piwik::translate('Referrers_KeywordsReportDocumentation', '<br />');
$this->isSubtableReport = true;
$this->order = 4;
}
public function configureView(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $this->dimension->getName());
}
}

View file

@ -0,0 +1,55 @@
<?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\Reports;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Pie;
use Piwik\Plugins\Referrers\Columns\SocialNetwork;
class GetSocials extends Base
{
protected function init()
{
parent::init();
$this->dimension = new SocialNetwork();
$this->name = Piwik::translate('Referrers_Socials');
$this->documentation = Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />');
$this->actionToLoadSubTables = 'getUrlsForSocial';
$this->order = 11;
$this->widgetTitle = 'Referrers_WidgetSocials';
}
public function getDefaultTypeViewDataTable()
{
return Pie::ID;
}
public function configureView(ViewDataTable $view)
{
$view->config->show_pivot_by_subtable = false;
$view->config->show_exclude_low_population = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', $this->dimension->getName());
$view->requestConfig->filter_limit = 10;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
$widget = Common::getRequestVar('widget', false);
if (empty($widget)) {
$view->config->show_footer_message = Piwik::translate('Referrers_SocialFooterMessage');
}
}
}

View file

@ -0,0 +1,36 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\Referrers\Columns\WebsitePage;
class GetUrlsForSocial extends Base
{
protected function init()
{
parent::init();
$this->dimension = new WebsitePage();
$this->name = Piwik::translate('Referrers_Socials');
$this->documentation = Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />');
$this->isSubtableReport = true;
$this->order = 12;
}
public function configureView(ViewDataTable $view)
{
$view->config->show_goals = true;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $this->dimension->getName());
$view->requestConfig->filter_limit = 10;
}
}

View file

@ -0,0 +1,35 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\Referrers\Columns\WebsitePage;
class GetUrlsFromWebsiteId extends Base
{
protected function init()
{
parent::init();
$this->dimension = new WebsitePage();
$this->name = Piwik::translate('CorePluginsAdmin_Websites');
$this->documentation = Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />');
$this->isSubtableReport = true;
$this->order = 6;
}
public function configureView(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->tooltip_metadata_name = 'url';
$view->config->addTranslation('label', $this->dimension->getName());
}
}

View file

@ -0,0 +1,45 @@
<?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\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
use Piwik\Plugins\Referrers\Columns\Website;
class GetWebsites extends Base
{
protected function init()
{
parent::init();
$this->dimension = new Website();
$this->name = Piwik::translate('CorePluginsAdmin_Websites');
$this->documentation = Piwik::translate('Referrers_WebsitesReportDocumentation', '<br />');
$this->recursiveLabelSeparator = '/';
$this->actionToLoadSubTables = 'getUrlsFromWebsiteId';
$this->hasGoalMetrics = true;
$this->order = 5;
$this->widgetTitle = 'Referrers_WidgetExternalWebsites';
}
public function configureView(ViewDataTable $view)
{
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $this->dimension->getName());
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
$view->config->show_pivot_by_subtable = false;
}
}

View file

@ -0,0 +1,485 @@
<?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\Cache;
use Piwik\Common;
use Piwik\Option;
use Piwik\Piwik;
use Piwik\Singleton;
use Piwik\UrlHelper;
/**
* Contains methods to access search engine definition data.
*/
class SearchEngine extends Singleton
{
const OPTION_STORAGE_NAME = 'SearchEngineDefinitions';
/** @var string location of definition file (relative to PIWIK_INCLUDE_PATH) */
const DEFINITION_FILE = '/vendor/piwik/searchengine-and-social-list/SearchEngines.yml';
protected $definitionList = null;
/**
* Returns list of search engines by URL
*
* @return array Array of ( URL => array( searchEngineName, keywordParameter, path, charset ) )
*/
public function getDefinitions()
{
$cache = Cache::getEagerCache();
$cacheId = 'SearchEngine-' . self::OPTION_STORAGE_NAME;
if ($cache->contains($cacheId)) {
$list = $cache->fetch($cacheId);
} else {
$list = $this->loadDefinitions();
$cache->save($cacheId, $list);
}
return $list;
}
private function loadDefinitions()
{
if (empty($this->definitionList)) {
// Read first from the auto-updated list in database
$list = Option::get(self::OPTION_STORAGE_NAME);
if ($list) {
$this->definitionList = unserialize(base64_decode($list));
} else {
// Fallback to reading the bundled list
$yml = file_get_contents(PIWIK_INCLUDE_PATH . self::DEFINITION_FILE);
$this->definitionList = $this->loadYmlData($yml);
Option::set(self::OPTION_STORAGE_NAME, base64_encode(serialize($this->definitionList)));
}
}
Piwik::postEvent('Referrer.addSearchEngineUrls', array(&$this->definitionList));
$this->convertLegacyDefinitions();
return $this->definitionList;
}
/**
* @deprecated remove in 3.0
*/
protected function convertLegacyDefinitions()
{
foreach ($this->definitionList as $url => $definition) {
if (!array_key_exists('name', $definition) && isset($definition[0]) && isset($definition[1])) {
$this->definitionList[$url] = array(
'name' => $definition[0],
'params' => $definition[1],
'backlink' => @$definition[2],
'charsets' => @$definition[3]
);
}
}
}
/**
* Parses the given YML string and caches the resulting definitions
*
* @param string $yml
* @return array
*/
public function loadYmlData($yml)
{
$searchEngines = \Spyc::YAMLLoadString($yml);
$this->definitionList = $this->transformData($searchEngines);
return $this->definitionList;
}
protected function transformData($searchEngines)
{
$urlToInfo = array();
foreach ($searchEngines as $name => $info) {
foreach ($info as $urlDefinitions) {
foreach ($urlDefinitions['urls'] as $url) {
$searchEngineData = $urlDefinitions;
unset($searchEngineData['urls']);
$searchEngineData['name'] = $name;
$urlToInfo[$url] = $searchEngineData;
}
}
}
return $urlToInfo;
}
/**
* Returns list of search engines by name
*
* @return array Array of ( searchEngineName => URL )
*/
public function getNames()
{
$cacheId = 'SearchEngine.getSearchEngineNames';
$cache = Cache::getTransientCache();
$nameToUrl = $cache->fetch($cacheId);
if (empty($nameToUrl)) {
$searchEngines = $this->getDefinitions();
$nameToUrl = array();
foreach ($searchEngines as $url => $info) {
if (!isset($nameToUrl[$info['name']])) {
$nameToUrl[$info['name']] = $url;
}
}
$cache->save($cacheId, $nameToUrl);
}
return $nameToUrl;
}
/**
* Returns definitions for the given search engine host
*
* @param string $host
* @return array
*/
public function getDefinitionByHost($host)
{
$searchEngines = $this->getDefinitions();
if (!array_key_exists($host, $searchEngines)) {
return array();
}
return $searchEngines[$host];
}
/**
* Extracts a keyword from a raw not encoded URL.
* Will only extract keyword if a known search engine has been detected.
* Returns the keyword:
* - in UTF8: automatically converted from other charsets when applicable
* - strtolowered: "QUErY test!" will return "query test!"
* - trimmed: extra spaces before and after are removed
*
* The function returns false when a keyword couldn't be found.
* eg. if the url is "http://www.google.com/partners.html" this will return false,
* as the google keyword parameter couldn't be found.
*
* @see unit tests in /tests/core/Common.test.php
* @param string $referrerUrl URL referrer URL, eg. $_SERVER['HTTP_REFERER']
* @return array|bool false if a keyword couldn't be extracted,
* or array(
* 'name' => 'Google',
* 'keywords' => 'my searched keywords')
*/
public function extractInformationFromUrl($referrerUrl)
{
$referrerParsed = @parse_url($referrerUrl);
$referrerHost = '';
if (isset($referrerParsed['host'])) {
$referrerHost = $referrerParsed['host'];
}
if (empty($referrerHost)) {
return false;
}
// some search engines (eg. Bing Images) use the same domain
// as an existing search engine (eg. Bing), we must also use the url path
$referrerPath = '';
if (isset($referrerParsed['path'])) {
$referrerPath = $referrerParsed['path'];
}
$query = '';
if (isset($referrerParsed['query'])) {
$query = $referrerParsed['query'];
}
// Google Referrers URLs sometimes have the fragment which contains the keyword
if (!empty($referrerParsed['fragment'])) {
$query .= '&' . $referrerParsed['fragment'];
}
$referrerHost = $this->getEngineHostFromUrl($referrerHost, $referrerPath, $query);
if (empty($referrerHost)) {
return false;
}
$definitions = $this->getDefinitionByHost($referrerHost);
$searchEngineName = $definitions['name'];
$variableNames = $definitions['params'];
$key = null;
if ($searchEngineName === 'Google Images'
|| ($searchEngineName === 'Google' && strpos($referrerUrl, '/imgres') !== false)
) {
if (strpos($query, '&prev') !== false) {
$query = urldecode(trim(UrlHelper::getParameterFromQueryString($query, 'prev')));
$query = str_replace('&', '&amp;', strstr($query, '?'));
}
$searchEngineName = 'Google Images';
} elseif ($searchEngineName === 'Google'
&& (strpos($query, '&as_') !== false || strpos($query, 'as_') === 0)
) {
$keys = array();
$key = UrlHelper::getParameterFromQueryString($query, 'as_q');
if (!empty($key)) {
array_push($keys, $key);
}
$key = UrlHelper::getParameterFromQueryString($query, 'as_oq');
if (!empty($key)) {
array_push($keys, str_replace('+', ' OR ', $key));
}
$key = UrlHelper::getParameterFromQueryString($query, 'as_epq');
if (!empty($key)) {
array_push($keys, "\"$key\"");
}
$key = UrlHelper::getParameterFromQueryString($query, 'as_eq');
if (!empty($key)) {
array_push($keys, "-$key");
}
$key = trim(urldecode(implode(' ', $keys)));
}
if ($searchEngineName === 'Google') {
// top bar menu
$tbm = UrlHelper::getParameterFromQueryString($query, 'tbm');
switch ($tbm) {
case 'isch':
$searchEngineName = 'Google Images';
break;
case 'vid':
$searchEngineName = 'Google Video';
break;
case 'shop':
$searchEngineName = 'Google Shopping';
break;
}
}
if (empty($key)) {
foreach ($variableNames as $variableName) {
if ($variableName[0] == '/') {
// regular expression match
if (preg_match($variableName, $referrerUrl, $matches)) {
$key = trim(urldecode($matches[1]));
break;
}
} else {
// search for keywords now &vname=keyword
$key = UrlHelper::getParameterFromQueryString($query, $variableName);
$key = trim(urldecode($key));
// Special cases: empty or no keywords
if (empty($key)
&& (
// Google search with no keyword
($searchEngineName == 'Google'
&& (empty($query) && (empty($referrerPath) || $referrerPath == '/') && empty($referrerParsed['fragment']))
)
// Yahoo search with no keyword
|| ($searchEngineName == 'Yahoo!'
&& ($referrerParsed['host'] == 'r.search.yahoo.com')
)
// empty keyword parameter
|| strpos($query, sprintf('&%s=', $variableName)) !== false
|| strpos($query, sprintf('?%s=', $variableName)) !== false
// search engines with no keyword
|| $searchEngineName == 'Ixquick'
|| $searchEngineName == 'Google Images'
|| $searchEngineName == 'DuckDuckGo')
) {
$key = false;
}
if (!empty($key)
|| $key === false
) {
break;
}
}
}
}
// $key === false is the special case "No keyword provided" which is a Search engine match
if ($key === null || $key === '') {
return false;
}
if (!empty($key)) {
if (!empty($definitions['charsets'])) {
$key = $this->convertCharset($key, $definitions['charsets']);
}
$key = Common::mb_strtolower($key);
}
return array(
'name' => $searchEngineName,
'keywords' => $key,
);
}
protected function getEngineHostFromUrl($host, $path, $query)
{
$searchEngines = $this->getDefinitions();
$hostPattern = UrlHelper::getLossyUrl($host);
/*
* Try to get the best matching 'host' in definitions
* 1. check if host + path matches an definition
* 2. check if host only matches
* 3. check if host pattern + path matches
* 4. check if host pattern matches
* 5. special handling
*/
if (array_key_exists($host . $path, $searchEngines)) {
$host = $host . $path;
} elseif (array_key_exists($host, $searchEngines)) {
// no need to change host
} elseif (array_key_exists($hostPattern . $path, $searchEngines)) {
$host = $hostPattern . $path;
} elseif (array_key_exists($hostPattern, $searchEngines)) {
$host = $hostPattern;
} elseif (!array_key_exists($host, $searchEngines)) {
if (!strncmp($query, 'cx=partner-pub-', 15)) {
// Google custom search engine
$host = 'google.com/cse';
} elseif (!strncmp($path, '/pemonitorhosted/ws/results/', 28)) {
// private-label search powered by InfoSpace Metasearch
$host = 'wsdsold.infospace.com';
} elseif (strpos($host, '.images.search.yahoo.com') != false) {
// Yahoo! Images
$host = 'images.search.yahoo.com';
} elseif (strpos($host, '.search.yahoo.com') != false) {
// Yahoo!
$host = 'search.yahoo.com';
} else {
return false;
}
}
return $host;
}
/**
* Tries to convert the given string from one of the given charsets to UTF-8
* @param string $string
* @param array $charsets
* @return string
*/
protected function convertCharset($string, $charsets)
{
if (function_exists('iconv')
&& !empty($charsets)
) {
$charset = $charsets[0];
if (count($charsets) > 1
&& function_exists('mb_detect_encoding')
) {
$charset = mb_detect_encoding($string, $charsets);
if ($charset === false) {
$charset = $charsets[0];
}
}
$newKey = @iconv($charset, 'UTF-8//IGNORE', $string);
if (!empty($newKey)) {
$string = $newKey;
}
}
return $string;
}
/**
* Return search engine URL by name
*
* @see core/DataFiles/SearchEnginges.php
*
* @param string $name
* @return string URL
*/
public function getUrlFromName($name)
{
$searchEngineNames = $this->getNames();
if (isset($searchEngineNames[$name])) {
$url = 'http://' . $searchEngineNames[$name];
} else {
$url = 'URL unknown!';
}
return $url;
}
/**
* Return search engine host in URL
*
* @param string $url
* @return string host
*/
private function getHostFromUrl($url)
{
if (strpos($url, '//')) {
$url = substr($url, strpos($url, '//') + 2);
}
if (($p = strpos($url, '/')) !== false) {
$url = substr($url, 0, $p);
}
return $url;
}
/**
* Return search engine logo path by URL
*
* @param string $url
* @return string path
* @see plugins/Referrers/images/searchEnginges/
*/
public function getLogoFromUrl($url)
{
$pathInPiwik = 'plugins/Referrers/images/searchEngines/%s.png';
$pathWithCode = sprintf($pathInPiwik, $this->getHostFromUrl($url));
$absolutePath = PIWIK_INCLUDE_PATH . '/' . $pathWithCode;
if (file_exists($absolutePath)) {
return $pathWithCode;
}
return sprintf($pathInPiwik, 'xx');
}
/**
* Return search engine URL for URL and keyword
*
* @see core/DataFiles/SearchEnginges.php
*
* @param string $url Domain name, e.g., search.piwik.org
* @param string $keyword Keyword, e.g., web+analytics
* @return string URL, e.g., http://search.piwik.org/q=web+analytics
*/
public function getBackLinkFromUrlAndKeyword($url, $keyword)
{
if ($keyword === API::LABEL_KEYWORD_NOT_DEFINED) {
return 'http://piwik.org/faq/general/#faq_144';
}
$keyword = urlencode($keyword);
$keyword = str_replace(urlencode('+'), urlencode(' '), $keyword);
$host = substr($url, strpos($url, '//') + 2);
$definition = $this->getDefinitionByHost($host);
if (empty($definition['backlink'])) {
return false;
}
$path = str_replace("{k}", $keyword, $definition['backlink']);
return $url . (substr($url, -1) != '/' ? '/' : '') . $path;
}
}

View file

@ -0,0 +1,21 @@
<?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;
/**
* Referrers segment base class.
*
*/
class Segment extends \Piwik\Plugin\Segment
{
protected function init()
{
$this->setCategory('Referrers_Referrers');
}
}

View file

@ -0,0 +1,179 @@
<?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\Cache;
use Piwik\Option;
use Piwik\Piwik;
use Piwik\Singleton;
/**
* Contains methods to access search engine definition data.
*/
class Social extends Singleton
{
const OPTION_STORAGE_NAME = 'SocialDefinitions';
/** @var string location of definition file (relative to PIWIK_INCLUDE_PATH) */
const DEFINITION_FILE = '/vendor/piwik/searchengine-and-social-list/Socials.yml';
protected $definitionList = null;
/**
* Returns list of search engines by URL
*
* @return array Array of ( URL => array( searchEngineName, keywordParameter, path, charset ) )
*/
public function getDefinitions()
{
$cache = Cache::getEagerCache();
$cacheId = 'Social-' . self::OPTION_STORAGE_NAME;
if ($cache->contains($cacheId)) {
$list = $cache->fetch($cacheId);
} else {
$list = $this->loadDefinitions();
$cache->save($cacheId, $list);
}
return $list;
}
private function loadDefinitions()
{
if ($this->definitionList === null) {
// Read first from the auto-updated list in database
$list = Option::get(self::OPTION_STORAGE_NAME);
if ($list) {
$this->definitionList = unserialize(base64_decode($list));
} else {
// Fallback to reading the bundled list
$yml = file_get_contents(PIWIK_INCLUDE_PATH . self::DEFINITION_FILE);
$this->definitionList = $this->loadYmlData($yml);
Option::set(self::OPTION_STORAGE_NAME, base64_encode(serialize($this->definitionList)));
}
}
Piwik::postEvent('Referrer.addSocialUrls', array(&$this->definitionList));
return $this->definitionList;
}
/**
* Parses the given YML string and caches the resulting definitions
*
* @param string $yml
* @return array
*/
public function loadYmlData($yml)
{
$searchEngines = \Spyc::YAMLLoadString($yml);
$this->definitionList = $this->transformData($searchEngines);
return $this->definitionList;
}
protected function transformData($socials)
{
$urlToName = array();
foreach ($socials as $name => $urls) {
foreach ($urls as $url) {
$urlToName[$url] = $name;
}
}
return $urlToName;
}
/**
* Returns true if a URL belongs to a social network, false if otherwise.
*
* @param string $url The URL to check.
* @param string|bool $socialName The social network's name to check for, or false to check
* for any.
* @return bool
*/
public function isSocialUrl($url, $socialName = false)
{
foreach ($this->getDefinitions() as $domain => $name) {
if (preg_match('/(^|[\.\/])'.$domain.'([\.\/]|$)/', $url) && ($socialName === false || $name == $socialName)) {
return true;
}
}
return false;
}
/**
* Get's social network name from URL.
*
* @param string $url
* @return string
*/
public function getSocialNetworkFromDomain($url)
{
foreach ($this->getDefinitions() as $domain => $name) {
if (preg_match('/(^|[\.\/])'.$domain.'([\.\/]|$)/', $url)) {
return $name;
}
}
return Piwik::translate('General_Unknown');
}
/**
* Returns the main url of the social network the given url matches
*
* @param string $url
*
* @return string
*/
public function getMainUrl($url)
{
$social = $this->getSocialNetworkFromDomain($url);
foreach ($this->getDefinitions() as $domain => $name) {
if ($name == $social) {
return $domain;
}
}
return $url;
}
/**
* Return social network logo path by URL
*
* @param string $domain
* @return string path
* @see plugins/Referrers/images/socials/
*/
public function getLogoFromUrl($domain)
{
$social = $this->getSocialNetworkFromDomain($domain);
$socialNetworks = $this->getDefinitions();
$filePattern = 'plugins/Referrers/images/socials/%s.png';
$socialDomains = array_keys($socialNetworks, $social);
foreach ($socialDomains as $domain) {
if (file_exists(PIWIK_INCLUDE_PATH . '/' . sprintf($filePattern, $domain))) {
return sprintf($filePattern, $domain);
}
}
return sprintf($filePattern, 'xx');
}
}

View file

@ -0,0 +1,54 @@
<?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\Http;
use Piwik\Option;
class Tasks extends \Piwik\Plugin\Tasks
{
public function schedule()
{
$this->weekly('updateSearchEngines');
$this->weekly('updateSocials');
}
/**
* Update the search engine definitions
*
* @see https://github.com/piwik/searchengine-and-social-list
*/
public function updateSearchEngines()
{
$url = 'https://raw.githubusercontent.com/piwik/searchengine-and-social-list/master/SearchEngines.yml';
$list = Http::sendHttpRequest($url, 30);
$searchEngines = SearchEngine::getInstance()->loadYmlData($list);
if (count($searchEngines) < 200) {
return;
}
Option::set(SearchEngine::OPTION_STORAGE_NAME, base64_encode(serialize($searchEngines)));
}
/**
* Update the social definitions
*
* @see https://github.com/piwik/searchengine-and-social-list
*/
public function updateSocials()
{
$url = 'https://raw.githubusercontent.com/piwik/searchengine-and-social-list/master/Socials.yml';
$list = Http::sendHttpRequest($url, 30);
$socials = Social::getInstance()->loadYmlData($list);
if (count($socials) < 50) {
return;
}
Option::set(Social::OPTION_STORAGE_NAME, base64_encode(serialize($socials)));
}
}

View file

@ -0,0 +1,130 @@
<?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\Url;
use Piwik\UrlHelper;
require_once PIWIK_INCLUDE_PATH . '/plugins/Referrers/functions.php';
class Visitor
{
private $details = array();
public function __construct($details)
{
$this->details = $details;
}
public function getReferrerType()
{
try {
$referrerType = getReferrerTypeFromShortName($this->details['referer_type']);
} catch (\Exception $e) {
$referrerType = '';
}
return $referrerType;
}
public function getReferrerTypeName()
{
return getReferrerTypeLabel($this->details['referer_type']);
}
public function getKeyword()
{
$keyword = $this->details['referer_keyword'];
if ($this->getReferrerType() == 'search') {
$keyword = API::getCleanKeyword($keyword);
}
return urldecode($keyword);
}
public function getReferrerUrl()
{
if ($this->getReferrerType() == 'search') {
if ($this->details['referer_keyword'] == API::LABEL_KEYWORD_NOT_DEFINED) {
return 'http://piwik.org/faq/general/#faq_144';
} // Case URL is google.XX/url.... then we rewrite to the search result page url
elseif ($this->getReferrerName() == 'Google'
&& strpos($this->details['referer_url'], '/url')
) {
$refUrl = @parse_url($this->details['referer_url']);
if (isset($refUrl['host'])) {
$url = SearchEngine::getInstance()->getBackLinkFromUrlAndKeyword('http://google.com', $this->getKeyword());
$url = str_replace('google.com', $refUrl['host'], $url);
return $url;
}
}
}
if (UrlHelper::isLookLikeUrl($this->details['referer_url'])) {
return $this->details['referer_url'];
}
return null;
}
public 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;
}
public function getReferrerName()
{
return urldecode($this->details['referer_name']);
}
public function getSearchEngineUrl()
{
if ($this->getReferrerType() == 'search'
&& !empty($this->details['referer_name'])
) {
return SearchEngine::getInstance()->getUrlFromName($this->details['referer_name']);
}
return null;
}
public function getSearchEngineIcon()
{
$searchEngineUrl = $this->getSearchEngineUrl();
if (!is_null($searchEngineUrl)) {
return SearchEngine::getInstance()->getLogoFromUrl($searchEngineUrl);
}
return null;
}
}

View file

@ -0,0 +1,24 @@
<?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\SettingsPiwik;
class Widgets extends \Piwik\Plugin\Widgets
{
protected $category = 'SEO';
public function init()
{
if (SettingsPiwik::isSegmentationEnabled()) {
$this->addWidget('Referrers_WidgetTopKeywordsForPages', 'getKeywordsForPage');
}
}
}

View file

@ -1,6 +1,6 @@
<?php
/**
* Piwik - Open source web analytics
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
@ -27,194 +27,6 @@ function getPathFromUrl($url)
return $path;
}
/**
* Returns the main url of the social network the given url matches
*
* @param string $url
*
* @return string
*/
function getSocialMainUrl($url)
{
$social = getSocialNetworkFromDomain($url);
foreach (Common::getSocialUrls() AS $domain => $name) {
if($name == $social) {
return $domain;
}
}
return $url;
}
/**
* Get's social network name from URL.
*
* @param string $url
* @return string
*/
function getSocialNetworkFromDomain($url)
{
foreach (Common::getSocialUrls() AS $domain => $name) {
if(preg_match('/(^|[\.\/])'.$domain.'([\.\/]|$)/', $url)) {
return $name;
}
}
return Piwik::translate('General_Unknown');
}
/**
* Returns true if a URL belongs to a social network, false if otherwise.
*
* @param string $url The URL to check.
* @param string|bool $socialName The social network's name to check for, or false to check
* for any.
* @return bool
*/
function isSocialUrl($url, $socialName = false)
{
foreach (Common::getSocialUrls() AS $domain => $name) {
if (preg_match('/(^|[\.\/])'.$domain.'([\.\/]|$)/', $url) && ($socialName === false || $name == $socialName)) {
return true;
}
}
return false;
}
/**
* Return social network logo path by URL
*
* @param string $domain
* @return string path
* @see plugins/Referrers/images/socials/
*/
function getSocialsLogoFromUrl($domain)
{
$social = getSocialNetworkFromDomain($domain);
$socialNetworks = Common::getSocialUrls();
$filePattern = 'plugins/Referrers/images/socials/%s.png';
foreach ($socialNetworks as $domainKey => $name) {
if ($social == $socialNetworks[$domainKey] && file_exists(PIWIK_INCLUDE_PATH . '/' . sprintf($filePattern, $domainKey))) {
return sprintf($filePattern, $domainKey);
}
}
return sprintf($filePattern, 'xx');
}
/**
* Return search engine URL by name
*
* @see core/DataFiles/SearchEnginges.php
*
* @param string $name
* @return string URL
*/
function getSearchEngineUrlFromName($name)
{
$searchEngineNames = Common::getSearchEngineNames();
if (isset($searchEngineNames[$name])) {
$url = 'http://' . $searchEngineNames[$name];
} else {
$url = 'URL unknown!';
}
return $url;
}
/**
* Return search engine host in URL
*
* @param string $url
* @return string host
*/
function getSearchEngineHostFromUrl($url)
{
if (strpos($url, '//')) {
$url = substr($url, strpos($url, '//') + 2);
}
if (($p = strpos($url, '/')) !== false) {
$url = substr($url, 0, $p);
}
return $url;
}
/**
* Return search engine logo path by URL
*
* @param string $url
* @return string path
* @see plugins/Referrers/images/searchEnginges/
*/
function getSearchEngineLogoFromUrl($url)
{
$pathInPiwik = 'plugins/Referrers/images/searchEngines/%s.png';
$pathWithCode = sprintf($pathInPiwik, getSearchEngineHostFromUrl($url));
$absolutePath = PIWIK_INCLUDE_PATH . '/' . $pathWithCode;
if (file_exists($absolutePath)) {
return $pathWithCode;
}
return sprintf($pathInPiwik, 'xx');
}
/**
* Return search engine host and path in URL
*
* @param string $url
* @return string host
*/
function getSearchEngineHostPathFromUrl($url)
{
$url = substr($url, strpos($url, '//') + 2);
return $url;
}
/**
* Return search engine URL for URL and keyword
*
* @see core/DataFiles/SearchEnginges.php
*
* @param string $url Domain name, e.g., search.piwik.org
* @param string $keyword Keyword, e.g., web+analytics
* @return string URL, e.g., http://search.piwik.org/q=web+analytics
*/
function getSearchEngineUrlFromUrlAndKeyword($url, $keyword)
{
if ($keyword === API::LABEL_KEYWORD_NOT_DEFINED) {
return 'http://piwik.org/faq/general/#faq_144';
}
$searchEngineUrls = Common::getSearchEngineUrls();
$keyword = urlencode($keyword);
$keyword = str_replace(urlencode('+'), urlencode(' '), $keyword);
$path = @$searchEngineUrls[getSearchEngineHostPathFromUrl($url)][2];
if (empty($path)) {
return false;
}
$path = str_replace("{k}", $keyword, $path);
return $url . (substr($url, -1) != '/' ? '/' : '') . $path;
}
/**
* Return search engine URL for keyword and URL
*
* @see \Piwik\Plugins\Referrers\getSearchEngineUrlFromUrlAndKeyword
*
* @param string $keyword Keyword, e.g., web+analytics
* @param string $url Domain name, e.g., search.piwik.org
* @return string URL, e.g., http://search.piwik.org/q=web+analytics
*/
function getSearchEngineUrlFromKeywordAndUrl($keyword, $url)
{
return getSearchEngineUrlFromUrlAndKeyword($url, $keyword);
}
/**
* Return translated referrer type
*
@ -223,7 +35,6 @@ function getSearchEngineUrlFromKeywordAndUrl($keyword, $url)
*/
function getReferrerTypeLabel($label)
{
$indexTranslation = '';
switch ($label) {
case Common::REFERRER_TYPE_DIRECT_ENTRY:
$indexTranslation = 'Referrers_DirectEntry';

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View file

@ -0,0 +1,25 @@
{
"Referrers": {
"ColumnSearchEngine": "የመፈለጊያ ሞተሮች",
"ColumnWebsite": "ድር ጣቢያዎች",
"ColumnWebsitePage": "የድር ጣቢያዎች ገፅ",
"DirectEntry": "ቀጥተኛ ምዝግብ",
"Distinct": "የተለዩ ምልከታዎች በአመላካች ዓይነት",
"DistinctCampaigns": "የተለዩ campaigns",
"DistinctKeywords": "የተለዩ ቁልፍ ቃላት",
"DistinctSearchEngines": "የተለዩ የመፈለጊያ ሞተሮች",
"DistinctWebsites": "የተለዩ ድር ጣቢያዎች",
"Keywords": "ቁልፍ ቃላት",
"Referrers": "አመላካቾች",
"SearchEngines": "የመፈለጊያ ሞተሮች",
"SubmenuSearchEngines": "የመፈለጊያ ሞተሮች እና ቁልፍ ቃላት",
"SubmenuWebsites": "ድር ጣቢያዎች",
"Type": "የምልከታ ዓይነት",
"TypeCampaigns": "%s ከ campaigns",
"TypeDirectEntries": "%s ቀጥተኛ ምዝግቦች",
"TypeSearchEngines": "%s ከመፈለጊያ ሞተሮች",
"TypeWebsites": "%s ከድር ጣቢያዎች",
"Websites": "ድር ጣቢያዎች",
"WidgetExternalWebsites": "የውጫዊ ድር ጣቢያዎች ዝርዝር"
}
}

View file

@ -0,0 +1,28 @@
{
"Referrers": {
"Campaigns": "الحملات",
"ColumnCampaign": "الحملة",
"ColumnSearchEngine": "محرك بحث",
"ColumnWebsite": "موقع ويب",
"ColumnWebsitePage": "صفحة موقع",
"DirectEntry": "الوصول المباشر",
"Distinct": "أبرز المرسلون حسب النوع",
"DistinctCampaigns": "أبرز الحملات",
"DistinctKeywords": "أبرز الكلمات الدلالية",
"DistinctSearchEngines": "أبرز محركات البحث",
"DistinctWebsites": "أبرز مواقع ويب",
"Keywords": "الكلمات الدلالية",
"ReferrerName": "اسم المرسل",
"Referrers": "مرسلو الزوار",
"SearchEngines": "محركات البحث",
"SubmenuSearchEngines": "محركات البحث والكلمات الدلالية",
"SubmenuWebsites": "مواقع ويب",
"Type": "نوع المرسل",
"TypeDirectEntries": "%s وصول مباشر",
"TypeSearchEngines": "%s من محركات البحث",
"TypeWebsites": "%s من مواقع ويب",
"UsingNDistinctUrls": "(باستخدام %s روابط بارزة)",
"Websites": "المواقع",
"WidgetExternalWebsites": "قائمة المواقع الخارجية"
}
}

View file

@ -0,0 +1,40 @@
{
"Referrers": {
"Campaigns": "Кампаніі",
"CampaignsDocumentation": "Наведвальнікі, якія прыйшлі на ваш сайт у выніку кампаніі. %s Глядзі %s справаздачу для больш падрабязнай інфармацыі.",
"CampaignsReportDocumentation": "Гэтая справаздача паказвае, якія кампаніі спаслалі наведвальнікаў на ваш сайт. %s Для атрымання дадатковай інфармацыі аб кампаніі, чытайце %sДакументацыю па кампаніях на piwik.org%s",
"ColumnCampaign": "Кампанія",
"ColumnSearchEngine": "Пошукавая сістэма",
"ColumnWebsite": "Вэб-сайт",
"ColumnWebsitePage": "Старонка вэб-сайта",
"DirectEntry": "Прамы ўваход",
"DirectEntryDocumentation": "Наведвальнік адчыніў URL у сваім браўзэры і пачаў праглядаць ваш вэб-сайт - ён зайшоў на сайт напрамую.",
"Distinct": "Розныя спасыльнікі па тыпе",
"DistinctCampaigns": "Розныя кампаніі",
"DistinctKeywords": "Розныя ключавыя словы",
"DistinctSearchEngines": "Розныя пошукавыя сістэмы",
"DistinctWebsites": "Розныя вэб-сайты",
"EvolutionDocumentation": "Гэта агляд спасыльнікаў, якія прывялі наведвальнікаў на ваш вэб-сайт.",
"EvolutionDocumentationMoreInfo": "Для атрымання дадатковай інфармацыі аб розных тыпах спасыльнікаў, звярніцеся да дакументацыі %s табліцы.",
"Keywords": "Ключавыя словы",
"KeywordsReportDocumentation": "Гэтая справаздача паказвае, якія ключавыя словы шукалі карыстальнікі, каб трапіць на ваш вэб-сайт. %s Пры націску на радок табліцы, можна ўбачыць размеркаванне пошукавых сістэм, якія былі запытаны па ключавым слове.",
"ReferrerName": "Імя спасыльніка",
"Referrers": "Спасыльнікі",
"SearchEngines": "Пошукавыя сістэмы",
"SearchEnginesDocumentation": "Наведвальнік спасланы на ваш вэб-сайт пошукавай сістэмай. %s Глядзі %s справаздачу для больш падрабязнай інфармацыі.",
"SearchEnginesReportDocumentation": "Гэтая справаздача паказвае, якія пошукавыя сістэмы спасылаюць карыстальнікаў на ваш вэб-сайт. %s Пры націску на радок табліцы, можна ўбачыць, якія карыстальнікі шукалі з дапамогай якой пошукавай сістэмы.",
"SubmenuSearchEngines": "Пошукавыя сістэмы і ключавые словы",
"SubmenuWebsites": "Вэб-сайты",
"Type": "Тып спасыльнікі",
"TypeCampaigns": "%s уваходаў з кампаній",
"TypeDirectEntries": "%s прамых уваходаў",
"TypeReportDocumentation": "Гэтая табліца змяшчае інфармацыю аб размеркаванні тыпаў спасыльнікаў.",
"TypeSearchEngines": "%s уваходаў з пошукавых сістэм",
"TypeWebsites": "%s уваходаў з вэб-сайтаў",
"UsingNDistinctUrls": "(з выкарыстаннем %s розных URL-адрасоў)",
"Websites": "Вэб-сайты",
"WebsitesDocumentation": "Наведвальнік перайшоў па спасылцы на іншы сайце, які прывёў да вашага сайту. %s Глядзі %s справаздачу для для больш падрабязнай інфармацыі.",
"WebsitesReportDocumentation": "У гэтай табліцы вы можаце ўбачыць, якія сайты спасылалі наведвальнікаў на ваш сайт. %s Пры націску на радок табліцы, можна ўбачыць URL старонкак, якія ўтрымліваюць спасылкі на на ваш вэб-сайт.",
"WidgetExternalWebsites": "Спіс вонкавых вэбсайтаў"
}
}

View file

@ -0,0 +1,50 @@
{
"Referrers": {
"Campaigns": "Кампании",
"CampaignsDocumentation": "Посетители, дошли до вашият уеб сайт, в резултат на камания. %s Погледнете %s отчета за повече детайли.",
"CampaignsReportDocumentation": "Този отчет показва кои кампании са довели посетители до вашият уеб сайт. %s За повече информация относно проследяването на кампании, прочетете %sдокументацията за кампании на piwik.org%s",
"ColumnCampaign": "Кампании",
"ColumnSearchEngine": "Търсещи машини",
"ColumnSocial": "Социална мрежа",
"ColumnWebsite": "Сайт",
"ColumnWebsitePage": "Интернет страница",
"DirectEntry": "Директни посещения",
"DirectEntryDocumentation": "Посетителят е въвел URL в браузъра си и е започнал да браузва вашия сайт - влязъл в уеб сайта директно.",
"Distinct": "Отделни референции от Тип на референциите",
"DistinctCampaigns": "отделни кампании",
"DistinctKeywords": "отделни ключови думи",
"DistinctSearchEngines": "отделни търсещи машини",
"DistinctWebsites": "отделни сайтове",
"EvolutionDocumentation": "Това е преглед на препращащите сайтове, които са довели посетители до вашият уеб сайт.",
"EvolutionDocumentationMoreInfo": "За повече информация отностно различните типове препращащи сайтове, вижте документите в %s таблицата.",
"Keywords": "Ключови думи",
"KeywordsReportDocumentation": "Този отчет показва кои ключови думи потребителите са използвали преди да бъдат препратени към вашият уеб сайт. %s Ако кликнете върху реда в таблицата, можете да видите разпределението на търсачките, в които са били търсени тези ключови думи.",
"Referrer": "Препоръчител",
"ReferrerName": "Име на референт",
"Referrers": "Референции",
"ReferrersOverview": "Преглед на препоръчителите",
"SearchEngines": "Търсачки",
"SearchEnginesDocumentation": "Посетител, който е бил препратен към вашият уеб сайт от търсачка. %s Погледнете %s отчета за повече детайли.",
"SearchEnginesReportDocumentation": "Този отчет показва кои търсачки са изпратили потребители към вашият уеб сайт. %s Ако кликнете върху реда в таблицата, можете да видите какво потребителите са търсили в конкретната търсачка.",
"Socials": "Социални мрежи",
"SubmenuSearchEngines": "Търсачки & Ключови думи",
"SubmenuWebsites": "Сайтове",
"Type": "Тип на референцията",
"TypeCampaigns": "%s от кампании",
"TypeDirectEntries": "%s директни посещения",
"TypeReportDocumentation": "Тази таблица съдържа информация отностно разпределението на видовете препращащи сайтове.",
"TypeSearchEngines": "%s от търсещите машини",
"TypeWebsites": "%s от сайтове",
"UsingNDistinctUrls": "(използват се %s различни адреса)",
"ViewAllReferrers": "Преглед на всички препоръчители",
"ViewReferrersBy": "Преглед на всички препоръчители по %s",
"Websites": "Сайтове",
"WebsitesDocumentation": "Посетителят е последвал връзка в друг сайт, която сочи към вашия сайт. %s Вижте %s отчета за повече детайли.",
"WebsitesReportDocumentation": "В тази таблица, можете да видите кои уеб сайтове са препратили посетители към вашият сайт. %s Ако кликнете върху реда в таблицата, можете да видите URL-ите, чрез които потребителите са стигнали до вашият сайт.",
"WidgetExternalWebsites": "Външни сайтове",
"WidgetGetAll": "Всички препоръчители",
"WidgetSocials": "Списък на социалните мрежи",
"WidgetTopKeywordsForPages": "Най-използваните ключови думи",
"XPercentOfVisits": "%s от посещения"
}
}

View file

@ -0,0 +1,5 @@
{
"Referrers": {
"ColumnWebsite": "ওয়েবসাইট"
}
}

View file

@ -0,0 +1,5 @@
{
"Referrers": {
"ColumnWebsite": "Web stranica"
}
}

View file

@ -0,0 +1,51 @@
{
"Referrers": {
"Campaigns": "Campanyes",
"CampaignsDocumentation": "Visitants que visiten el vostre lloc web com a resultat d'una campanya. %s Visualitzeu l'inforrme %s per més detalls.",
"CampaignsReportDocumentation": "Aquest informe mostra quines campanyes han portat visitants al vostre lloc web. %s Per mes informació sobre la gestió de campanyes, llegiu la %s documetnació de campanyes a piwik.org %s",
"ColumnCampaign": "Campanya",
"ColumnSearchEngine": "Cercador",
"ColumnSocial": "Xarxa social",
"ColumnWebsite": "Lloc web",
"ColumnWebsitePage": "Pàgina web",
"DirectEntry": "Registre directe",
"DirectEntryDocumentation": "Un visitant ha entrar la URL al seu navegador i ha començat a navegar pel vostre lloc web. Ell ha entrar directament al lloc web.",
"Distinct": "Referents diferents segons el tipus",
"DistinctCampaigns": "campanyes diferents",
"DistinctKeywords": "paraules clau diferents",
"DistinctSearchEngines": "cercadors diferents",
"DistinctWebsites": "llocs web diferents",
"EvolutionDocumentation": "Això es una vista global dels referents que us han portat visitants al vostre lloc web.",
"EvolutionDocumentationMoreInfo": "Per mes informació dels tipus de referents, mireu la informació de la taula %s.",
"Keywords": "Paraules clau",
"KeywordsReportDocumentation": "Aquest informe mostra quines paraules clau han utilitzat els vostres visitants abans de ser dirigits al vostre lloc web. %s Clicant en una fila de la taula podeu veure la distribució de cercadors en que s'ha cercat la paraula clau.",
"Referrer": "Referent",
"ReferrerName": "Nom del referent",
"Referrers": "Referents",
"ReferrersOverview": "Resum dels referents",
"ReferrerTypes": "Tipus de referent",
"SearchEngines": "Cercadors",
"SearchEnginesDocumentation": "Un visitant ha vingut al vostre lloc web a través d'un navegador web. %s Visualitzeu l'informe %s per a més informació.",
"SearchEnginesReportDocumentation": "Aquest informa mostra quins motors de cerca han portat usuaris al vostre lloc web. %s Clicant en una fila de la tabla, pedeu veureu que han estat cercant els vostres usuris en aquest lloc web.",
"SocialFooterMessage": "Aquest és un subconjunt del l'informe de llocs web de l'esquerra. Filtra la informació d'altres llocs web així podeu comparar els referents de xarxes socials directament.",
"Socials": "Xarxes socials",
"SocialsReportDocumentation": "Aquest informe mostra quines xarxes socials han portat visitants al vostre lloc web. <br\/> Cliqueu una fila de la taule per mostrar de quines pàgines de les xarxes socials venen els vostres visitants.",
"SubmenuSearchEngines": "Cercadors i paraules clau",
"SubmenuWebsites": "Llocs web",
"Type": "Tipus de referent",
"TypeCampaigns": "Hi ha %s visites provinents de campanyes",
"TypeDirectEntries": "Hi ha %s entrades directes",
"TypeReportDocumentation": "Aquesta table conté informació sobre la distribució dels diferents tipus de referents.",
"TypeSearchEngines": "Hi ha %s visites provinents dels motors de cerca",
"TypeWebsites": "Hi ha %s visites provinents d'altres llocs",
"UsingNDistinctUrls": "(utiltizant %s urls diferents)",
"ViewAllReferrers": "Veure tots els referents",
"ViewReferrersBy": "Veure els referents agrupats per %s",
"Websites": "Llocs",
"WebsitesDocumentation": "Els visitant ha seguit un enllaç en un altre lloc web que ha portat al vostre lloc web. %s Visualitzeu l'informe %s per a més detalls.",
"WebsitesReportDocumentation": "En aquesta taula podeu observar quins llocs web han portat visitants al vostre lloc web. %s Cliqueu en una fila de la taule per veure les URL dels enllaços a les vostres pàgines.",
"WidgetExternalWebsites": "Llistat de llocs web externs",
"WidgetGetAll": "Tots els referents",
"WidgetSocials": "Llista de xarxes socials"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Toto hlášení zobrazuje všechny referrery v jednom uceleném hlášení, kde zobrazuje všechny webové stránky, klíčová slova a kampaně, které vaši návštěvníci při hledání vašich webových stránek použili.",
"Campaigns": "Kampaně",
"CampaignsDocumentation": "Návštěvníci, kteří přišli na vaše webové stránky jako výsledek kampaně. %s Pro více informací si prohlédněte hlášení %s.",
"CampaignsReportDocumentation": "Toto hlášení zobrazuje, které kampaně přivedly návštěvníky na vaše stránky. %s Pro více informací o sledování kampaní si %spřečtěte dokumentaci kampaní na piwik.org%s.",
"ColumnCampaign": "Kampaň",
"ColumnSearchEngine": "Vyhledávač",
"ColumnSocial": "Sociální síť",
"ColumnWebsite": "Web stránky",
"ColumnWebsitePage": "Web stránka",
"DirectEntry": "Přímý vstup",
"DirectEntryDocumentation": "Návštěvník zadal URL vašich stránek do webového prohlížeče a začal s procházením zde - adresu zadal přímo.",
"Distinct": "Jedineční refereři podle typu",
"DistinctCampaigns": "jedinečné kampaně",
"DistinctKeywords": "jedinečná klíčová slova",
"DistinctSearchEngines": "jedinečné vyhledávače",
"DistinctWebsites": "jedinečné weby",
"EvolutionDocumentation": "Toto je přehled referrerů, které vedly návštěvníky na vaše webové stránky.",
"EvolutionDocumentationMoreInfo": "Pro více informací o rozdílných typech referrerů nahlédněte do dokumentace tabulky %s.",
"Keywords": "Klíčová slova",
"KeywordsReportDocumentation": "Toto hlášení zobrazuje klíčová slova, která uživatelé hledali, než byli odkázáni na vaše stránky. %s Kliknutím na řádek tabulky zobrazíte distribuci vyhledávačů, které byly použity k hledání tohoto klíčového slova.",
"PluginDescription": "Hlásí data referreru: vyhledávače, klíčová slova, stránky, kampaně, sociální média, přímý vstup.",
"Referrer": "Referrer",
"ReferrerName": "Jméno referreru",
"Referrers": "Doporučení",
"ReferrersOverview": "Přehled referrerů",
"ReferrerTypes": "Typy referrerů",
"SearchEngines": "Vyhledávače",
"SearchEnginesDocumentation": "Návštěvník byl na vaše stránky odkázán vyhledávačem. %s Pro více informací si prohlédněte hlášení %s.",
"SearchEnginesReportDocumentation": "Toto hlášení zobrazuje, které vyhledávače odkázali návštěvníky na vaše stránky. %s Kliknutím na řádek v tabulce zobrazíte, co uživatelé na daném vyhledávači hledali.",
"SocialFooterMessage": "Toto je podmnožina hlášení zobrazeného vlevo. Filtruje ostatní stránky, takže můžete přímo porovnat referrery ze sociálních sítí.",
"Socials": "Sociální sítě",
"SocialsReportDocumentation": "Toto hlášení zobrazuje, jaké sociální sítě přivedly návštěvníky na vaše stránky. <br\/> Kliknutím na Kliknutím na řádek tabulky zobrazíte stránky sociální sítě, ze kterých návštěvníci přišli.",
"SubmenuSearchEngines": "Vyhledávače a klíčová slova",
"SubmenuWebsites": "Web",
"Type": "Typ refereru",
"TypeCampaigns": "%s z kampaní",
"TypeDirectEntries": "%s přímých vstupů",
"TypeReportDocumentation": "Tato tabulka obsahuje informace o distribuci typů referrerů.",
"TypeSearchEngines": "%s z vyhledavačů",
"TypeWebsites": "%s z web sídel",
"UsingNDistinctUrls": "(používá %s jedinečných url)",
"ViewAllReferrers": "Zobrazit všechny referrery",
"ViewReferrersBy": "Zobrazit referrery podle %s",
"Websites": "Stránky",
"WebsitesDocumentation": "Návštěvník následoval odkaz, který na vaše stránky vedl odjinud. %s Podívejte se na hlášení %s, pokud chcete vědět více.",
"WebsitesReportDocumentation": "V této tabulce můžete vidět stránky, které odkázaly návštěvníky na vaše stránky. %s Kliknutím na řádek v tabulce zobrazíte URL, na kterých se odkazy nalézají.",
"WidgetExternalWebsites": "Seznam externích web sídel",
"WidgetGetAll": "Všechny referrery",
"WidgetSocials": "Seznam sociálních sítí",
"WidgetTopKeywordsForPages": "Nejčastější klíčová slova pro URL stránky",
"XPercentOfVisits": "%s návštěv"
}
}

View file

@ -0,0 +1,5 @@
{
"Referrers": {
"ColumnWebsite": "Gwefan"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Rapporten viser alle henvisninger i én samlet rapport, over alle hjemmesider, Søg i nøgleord og kampagner som bruges af de besøgende til at finde hjemmesiden.",
"Campaigns": "Kampagner",
"CampaignsDocumentation": "Besøgende kom til hjemmesiden som følge af en kampagne. %s Se %s rapport for yderligere oplysninger.",
"CampaignsReportDocumentation": "Rapporten viser, hvilke kampagner der førte besøgende til hjemmesiden. %s Finde flere oplysninger om sporing af kampagner, læs %skampagne dokumentation på piwik.org%s",
"ColumnCampaign": "Kampagne",
"ColumnSearchEngine": "Søgemaskine",
"ColumnSocial": "Socialt netværk",
"ColumnWebsite": "Hjemmeside",
"ColumnWebsitePage": "Websted side",
"DirectEntry": "Direkte træf",
"DirectEntryDocumentation": "En besøgende har indtastet URL-adressen i browseren og gik direkte til hjemmesiden. Den besøgende kom direkte ind på hjemmesiden.",
"Distinct": "Forskellige kilder efter kildetype",
"DistinctCampaigns": "forskellige kampagner",
"DistinctKeywords": "forskellige søgeord",
"DistinctSearchEngines": "forskellige søgemaskine",
"DistinctWebsites": "forskellige hjemmesider",
"EvolutionDocumentation": "Oversigt over henvisninger, der førte besøgende til hjemmesiden.",
"EvolutionDocumentationMoreInfo": "Flere oplysninger om de forskellige henvisnings typer findes i dokumentationen af tabellen %s.",
"Keywords": "Søgeord",
"KeywordsReportDocumentation": "Rapport viser hvilke søgeord brugere søgte efter, før de blev henvist til hjemmesiden. %s Klik på en række i tabellen for at se fordelingen af søgemaskiner, der blev forespurgt om søgeordet.",
"PluginDescription": "Rapporter af henvisendedata: Søgemaskiner, søgeord, hjemmesider, kampagner, sociale medier, direkte indtastning.",
"Referrer": "Henviser",
"ReferrerName": "Henvisningsnavn",
"Referrers": "Henvisninger",
"ReferrersOverview": "Henvisningsoversigt",
"ReferrerTypes": "Henvisende typer",
"SearchEngines": "Søgemaskiner",
"SearchEnginesDocumentation": "Besøgende blev henvist til hjemmesiden fra en søgemaskine. %s Se rapporten %s for yderligere oplysninger.",
"SearchEnginesReportDocumentation": "Rapporten viser hvilke søgemaskiner, der henviser brugere til hjemmesiden. %s Klik på en række i tabellen for at se, hvad brugerne søgte efter ved brug af en bestemt søgemaskine.",
"SocialFooterMessage": "Dette er en delmængde af hjemmesiderapporterne til venstre. Den filtrerer andre hjemmesider, så du kan sammenligne dine sociale netværk henvisningssteder direkte.",
"Socials": "Sociale netværk",
"SocialsReportDocumentation": "Rapporten viser, hvilke sociale netværk der førte besøgende til hjemmesiden.<br\/> Ved at klikke på en række i tabellen, kan du se, fra hvilke sociale netværkssider besøgende kom til hjemmesiden.",
"SubmenuSearchEngines": "Søgemaskine og søgeord",
"SubmenuWebsites": "Hjemmesider",
"Type": "Henvisningstype",
"TypeCampaigns": "%s fra kampagner",
"TypeDirectEntries": "%s direkte træf",
"TypeReportDocumentation": "Tabelen indeholder oplysninger om fordelingen af de henvisende typer.",
"TypeSearchEngines": "%s fra søgemaskine",
"TypeWebsites": "%s fra hjemmesider",
"UsingNDistinctUrls": "(bruger %s forskellige URL'er)",
"ViewAllReferrers": "Vis alle henvisninger",
"ViewReferrersBy": "Vis henvisninger efter %s",
"Websites": "Hjemmesider",
"WebsitesDocumentation": "Besøgende fulgte et link fra en anden hjemmesiden, der førte til hjemmesiden. %s Se %s rapport for yderligere oplysninger.",
"WebsitesReportDocumentation": "Tabellen viser, hvilke hjemmesider, der henviser besøgende til hjemmesiden. %s Klik på en række i tabellen, for at se, hvilke URL'er links til hjemmesiden er på.",
"WidgetExternalWebsites": "Eksterne hjemmesider",
"WidgetGetAll": "Alle henvisninger",
"WidgetSocials": "Liste af sociale netværk",
"WidgetTopKeywordsForPages": "Top søgeord til side URL",
"XPercentOfVisits": "%s af besøg"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Dieser Bericht zeigt Ihnen all Ihre Verweise in einem einzigen Bericht. Es werden alle Websites, Suchbegriffe und Kampagnen gezeigt, die von Ihren Besuchern benutzt wurden um ihre Website zu finden.",
"Campaigns": "Kampagnen",
"CampaignsDocumentation": "Besucher, die aufgrund einer Kampagne auf Ihre Website kamen. Weitere Details finden Sie %sim Bericht%s.",
"CampaignsReportDocumentation": "Dieser Bericht enthält Informationen darüber, welche Kampagnen Besucher auf Ihre Website gebracht haben. %s Für mehr Informationen zum Tracken von Kampagnen, lesen Sie die %sKampagnen-Dokumentation auf piwik.org%s",
"ColumnCampaign": "Kampagne",
"ColumnSearchEngine": "Suchmaschine",
"ColumnSocial": "Soziales Netzwerk",
"ColumnWebsite": "Website",
"ColumnWebsitePage": "Seite",
"DirectEntry": "Direkte Zugriffe",
"DirectEntryDocumentation": "Ein Besucher kam auf die Website, indem er die URL direkt in den Browser eingegeben hat.",
"Distinct": "Unterschiedliche Verweise nach Verweisart",
"DistinctCampaigns": "verschiedene Kampagnen",
"DistinctKeywords": "verschiedene Suchbegriffe",
"DistinctSearchEngines": "verschiedene Suchmaschinen",
"DistinctWebsites": "verschiedene Websites",
"EvolutionDocumentation": "Dies ist eine Übersicht der Verweise, die Besucher auf Ihre Website geführt haben.",
"EvolutionDocumentationMoreInfo": "Für mehr Informationen über die verschiedenen Verweisarten, lesen Sie die Dokumentation der %s Tabelle.",
"Keywords": "Suchbegriffe",
"KeywordsReportDocumentation": "In diesem Bericht sehen Sie, welche Suchbegriffe Besucher in Suchmaschinen eingegeben haben, bevor Sie auf Ihre Website geführt wurden. %s Wenn Sie auf eine Zeile der Tabelle klicken, wird die Verteilung der Suchmaschinen angezeigt, in denen nach dem Begriff gesucht wurde.",
"PluginDescription": "Liefert die Herkunft der Daten: Suchmaschinen, Suchbegriffe, Websites, Kampagnen, Social Media, Direkteintritte.",
"Referrer": "Verweis",
"ReferrerName": "Name des Verweises",
"Referrers": "Verweise",
"ReferrersOverview": "Übersicht Verweise",
"ReferrerTypes": "Verweistypen",
"SearchEngines": "Suchmaschinen",
"SearchEnginesDocumentation": "Ein Besucher kam durch eine Suchmaschine auf die Website. %sDer Bericht%s enthält weitere Details.",
"SearchEnginesReportDocumentation": "Dieser Bericht zeigt Ihnen, welche Suchmaschinen Besucher auf die Website geführt haben. %s Wenn Sie auf eine Zeile der Tabelle klicken, werden die Suchbegriffe angezeigt, nach denen die Besucher gesucht haben.",
"SocialFooterMessage": "Dies ist eine Teilansicht des Berichtes auf der linken Seite. Er filtert andere Websites heraus, so dass Sie die Verweise von Sozialen Netzwerken direkt vergleichen können.",
"Socials": "Soziale Netzwerke",
"SocialsReportDocumentation": "Dieser Bericht zeigt, welche sozialen Netzwerke Besucher auf Ihre Website führten.<br \/>Wenn Sie eine Zeile in der Tabelle anklicken, können Sie sehen von welcher Seite des sozialen Netzwerks der Besucher auf Ihre Website kam.",
"SubmenuSearchEngines": "Suchmaschinen und Suchbegriffe",
"SubmenuWebsites": "Websites & soziale Netzwerke",
"Type": "Verweisart",
"TypeCampaigns": "%s von Kampagnen",
"TypeDirectEntries": "%s direkte Zugriffe",
"TypeReportDocumentation": "Diese Tabelle enthält Informationen über die Verteilung der Verweisarten.",
"TypeSearchEngines": "%s von Suchmaschinen",
"TypeWebsites": "%s von Websites",
"UsingNDistinctUrls": "(mit %s verschiedenen URLs)",
"ViewAllReferrers": "Alle Verweise ansehen",
"ViewReferrersBy": "Verweise anhand %s ansehen",
"Websites": "Websites",
"WebsitesDocumentation": "Der Besucher folgte einem Link auf einer anderen Website, um auf Ihre Seite zu gelangen. Weitere Details finden Sie %sim Bericht%s.",
"WebsitesReportDocumentation": "In dieser Tabelle sehen Sie, von welchen Websites aus Besucher auf Ihre Seite verwiesen wurden. %s Wenn Sie auf eine Zeile der Tabelle klicken, sehen Sie, auf welchen URLs sich die Links zu Ihrer Website befanden.",
"WidgetExternalWebsites": "Liste externer Websites",
"WidgetGetAll": "Alle Verweise",
"WidgetSocials": "Liste Sozialer Netzwerke",
"WidgetTopKeywordsForPages": "Top-Suchbegriffe für Seiten-URL",
"XPercentOfVisits": "%s aller Besuche"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Αυτή η έκθεση δείχνει όλες τις συστάσεις σε μια ενιαία αναφορά, απαριθμώντας όλες τις ιστοσελίδες, τις λέξεις-κλειδιά αναζήτησης και τις καμπάνιες που χρησιμοποιούνται από τους επισκέπτες σας για να βρουν την ιστοσελίδα σας.",
"Campaigns": "Καμπάνιες",
"CampaignsDocumentation": "Επισκέπτες που ήρθαν στην ιστοσελίδα ως αποτέλεσμα εκστρατείας. %s Δείτε την αναφορά %s για περισσότερες πληροφορίες.",
"CampaignsReportDocumentation": "Αυτή η αναφορά δείχνει ποιες εκστρατείες οδήγησαν επισκέπτες στην ιστοσελίδα. %s Για περισσότερες πληροφορίες για την καταγραφή εκστρατειών, διαβάστε την %sτεκμηρίωση εκστρατειών στο piwik.org%s",
"ColumnCampaign": "Εκστρατεία",
"ColumnSearchEngine": "Μηχανή Αναζήτησης",
"ColumnSocial": "Κοινωνικό δίκτυο",
"ColumnWebsite": "Ιστοσελίδα",
"ColumnWebsitePage": "Σελίδα Ιστοσελίδας",
"DirectEntry": "Απευθείας είσοδος",
"DirectEntryDocumentation": "Ένας επισκέπτης εισήγαγε τη διεύθυνση στο φυλλομετρητή του και ξεκίνησε να περιηγείται στην ιστοσελίδα - εισήλθε στην ιστοσελίδα απευθείας.",
"Distinct": "Διαχωρισμός Αναφορέων ανά Τύπο Αναφορέα",
"DistinctCampaigns": "διαχωρισμός εκστρατειών",
"DistinctKeywords": "διαχωρισμός λέξεων-κλειδιών",
"DistinctSearchEngines": "διαχωρισμός μηχανών αναζήτησης",
"DistinctWebsites": "διαχωρισμός σελίδων",
"EvolutionDocumentation": "Αυτή είναι μια επισκόπηση των αναφορέων που έστειλαν επισκέπτες στην ιστοσελίδα.",
"EvolutionDocumentationMoreInfo": "Για περισσότερες πληροφορίες για τους διάφορους τύπους αναφορέων, δείτε την τεκμηρίωση του πίνακα %s.",
"Keywords": "Λέξεις κλειδιά",
"KeywordsReportDocumentation": "Αυτή η αναφορά δείχνει ποιες λέξεις-κλειδιά αναζήτησαν οι χρήστες πριν έρθουν στην ιστοσελίδα. %s Πατώντας σε σε μια γραμμή στον πίνακα, μπορείτε να δείτε την κατανομή των μηχανών αναζήτησης που ερωτήθηκαν για τη λέξη-κλειδί.",
"PluginDescription": "Αναφέρει δεδομένα σχετικά με τους αναφορείς: Μηχανές Αναζήτησης, Λέξεις Κλειδιά, Ιστοτόποι, Καμπάνιες, Κοινωνικά Δίκτυα, Απευθείας Είσοδοι.",
"Referrer": "Παραπομπός",
"ReferrerName": "Ονομασία Παραπομπού",
"Referrers": "Παραπομπείς",
"ReferrersOverview": "Επισκόπηση Παραπομπών",
"ReferrerTypes": "Τύποι Αναφορών",
"SearchEngines": "Μηχανές αναζήτησης",
"SearchEnginesDocumentation": "Ένας επισκέπτης επισκέφτηκε την ιστοσελίδα μέσω μηχανής αναζήτησης. %s Δείτε την αναφορά %s για περισσότερες πληροφορίες.",
"SearchEnginesReportDocumentation": "αυτή η αναφορά δείχνει ποιες μηχανές αναζήτησης ανάφεραν χρήστες στην ιστοσελίδα. %s Πατώντας σε μια γραμμή στον πίνακα, μπορείτε να δείτε τι αναζητούσαν οι χρήστες χρησιμοποιώντας μια συγκεκριμένη μηχανή αναζήτησης.",
"SocialFooterMessage": "Αυτό είναι ένα υποσύνολο από τις Ιστοσελίδες Παραπομπέων προς τα αριστερά. Φιλτράρει άλλους δικτυακούς τόπους, ώστε να μπορείτε να συγκρίνετε τους παραπομπείς κοινωνικής δικτύωσης σας άμεσα.",
"Socials": "Κοινωνικά Δίκτυα",
"SocialsReportDocumentation": "Η αναφορά αυτή δείχνει ποια κοινωνικά δίκτυα οδήγησαν τους επισκέπτες στην ιστοσελίδα σας.<br \/>Κάνοντας κλικ σε μια σειρά του πίνακα, μπορείτε να δείτε από ποιά σελίδα κοινωνικής δικτύωσης ήρθαν οι επισκέπτες στην ιστοσελίδα σας.",
"SubmenuSearchEngines": "Μηχανές αναζήτησης & λέξεις-κλειδιά",
"SubmenuWebsites": "Ιστοσελίδες",
"Type": "Τύπος αναφορέα",
"TypeCampaigns": "%s από εκστρατείες",
"TypeDirectEntries": "%s απευθείας είσοδοι",
"TypeReportDocumentation": "Αυτός ο πίνακας περιέχει πληροφορίες για την κατανομή των τύπων αναφορέων.",
"TypeSearchEngines": "%s από μηχανές αναζήτησης",
"TypeWebsites": "%s από ιστοσελίδες",
"UsingNDistinctUrls": "(χρησιμοποιώντας %s αποκλεισμένα urls)",
"ViewAllReferrers": "Δείτε όλες τις Παραπομπές",
"ViewReferrersBy": "Δείτε τις Παραπομπές ανά %s",
"Websites": "Ιστοτόποι",
"WebsitesDocumentation": "Ο επισκέπτης ακολούθησε έναν σύνδεσμο σε μια άλλη ιστοσελίδα που οδηγούσε στην ιστοσελίδα σας. %s Δείτε την αναφορά %s για περισσότερες πληροφορίες.",
"WebsitesReportDocumentation": "Σε αυτόν τον πίνακα, μπορείτε να δείτε ποιες ιστοσελίδες ανέφεραν επισκέπτες στην ιστοσελίδα. %s Πατώντας σε σε μια γραμμή στον πίνακα, μπορείτε να δείτε ποιες διευθύνσεις είχαν συνδέσμους για την ιστοσελίδα.",
"WidgetExternalWebsites": "Λίστα εξωτερικών ιστοσελίδων",
"WidgetGetAll": "Όλες οι Παραπομπές",
"WidgetSocials": "Λίστα κοινωνικών δικτύων",
"WidgetTopKeywordsForPages": "Δημοφιλέστερες Λέξεις-Κλειδιά για τη Διεύθυνση URL της σελίδας",
"XPercentOfVisits": "%s επισκέψεων"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "This report shows all your Referrers in one unified report, listing all Websites, Search keywords and Campaigns used by your visitors to find your website.",
"Campaigns": "Campaigns",
"CampaignsDocumentation": "Visitors that came to your website as the result of a campaign. %1$s See the %2$s report for more details.",
"CampaignsReportDocumentation": "This report shows which campaigns led visitors to your website. %1$s For more information about tracking campaigns, read the %2$scampaigns documentation on piwik.org%3$s",
"ColumnCampaign": "Campaign",
"ColumnSearchEngine": "Search Engine",
"ColumnSocial": "Social network",
"ColumnWebsite": "Website",
"ColumnWebsitePage": "Website Page",
"DirectEntry": "Direct Entry",
"DirectEntryDocumentation": "A visitor has entered the URL in his browser and started browsing on your website - he entered the website directly.",
"Distinct": "Distinct Referrers by Referrer Type",
"DistinctCampaigns": "distinct campaigns",
"DistinctKeywords": "distinct keywords",
"DistinctSearchEngines": "distinct search engines",
"DistinctWebsites": "distinct websites",
"EvolutionDocumentation": "This is an overview of the referrers that led visitors to your website.",
"EvolutionDocumentationMoreInfo": "For more information about the different referrer types, see the documentation of the %s table.",
"Keywords": "Keywords",
"KeywordsReportDocumentation": "This report shows which keywords users were searching for before they were referred to your website. %s By clicking on a row in the table, you can see the distribution of search engines that were queried for the keyword.",
"PluginDescription": "Reports the Referrers data: Search Engines, Keywords, Websites, Campaigns, Social media, Direct entry.",
"Referrer": "Referrer",
"ReferrerName": "Referrer Name",
"Referrers": "Referrers",
"ReferrersOverview": "Referrers Overview",
"ReferrerTypes": "Referrer Types",
"SearchEngines": "Search Engines",
"SearchEnginesDocumentation": "A visitor was referred to your website by a search engine. %1$s See the %2$s report for more details.",
"SearchEnginesReportDocumentation": "This report shows which search engines referred users to your website. %s By clicking on a row in the table, you can see what users were searching for using a specific search engine.",
"SocialFooterMessage": "This is a subset of the Websites report to the left. It filters out other websites so you can compare your social network referrers directly.",
"Socials": "Social Networks",
"SocialsReportDocumentation": "This report shows which social networks led visitors to your website.<br \/>By clicking on a row in the table, you can see from which social network pages visitors came to your website.",
"SubmenuSearchEngines": "Search Engines & Keywords",
"SubmenuWebsites": "Websites & Social",
"Type": "Referrer Type",
"TypeCampaigns": "%s from campaigns",
"TypeDirectEntries": "%s direct entries",
"TypeReportDocumentation": "This table contains information about the distribution of the referrer types.",
"TypeSearchEngines": "%s from search engines",
"TypeWebsites": "%s from websites",
"UsingNDistinctUrls": "(using %s distinct urls)",
"ViewAllReferrers": "View all Referrers",
"ViewReferrersBy": "View Referrers by %s",
"Websites": "Websites",
"WebsitesDocumentation": "The visitor followed a link on another website that led to your site. %1$s See the %2$s report for more details.",
"WebsitesReportDocumentation": "In this table, you can see which websites referred visitors to your site. %s By clicking on a row in the table, you can see which URLs the links to your website were on.",
"WidgetExternalWebsites": "Referrer Websites",
"WidgetGetAll": "All Referrers",
"WidgetSocials": "List of social networks",
"WidgetTopKeywordsForPages": "Top Keywords for Page URL",
"XPercentOfVisits": "%s of visits"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Este informe muestra todas las Referencias en un solo informe enumerando todos los sitios de internet, las palabras claves y las campañas que utilizan sus visitantes para encontrar su sitio.",
"Campaigns": "Campañas",
"CampaignsDocumentation": "Visitantes que visitan su sitio de internet como resultado de una campaña. %s Vea el %s informe para más detalles.",
"CampaignsReportDocumentation": "Este informe muestra que campaña llevó visitantes a su sitio de internet. %s Para una mayor información acerca del rastreo de las campañas, lea la documentación %scampañas en piwik.org%s",
"ColumnCampaign": "Campaña",
"ColumnSearchEngine": "Motor de búsqueda",
"ColumnSocial": "Red social",
"ColumnWebsite": "Sitio de internet",
"ColumnWebsitePage": "Página de sitio de internet",
"DirectEntry": "Entrada directa",
"DirectEntryDocumentation": "Un visitante ha ingresado la URL en su navegador y comenzó a navegar en su sitio - él ingresó directamente en su sitio de internet.",
"Distinct": "Distintas referencias por tipo de referencia",
"DistinctCampaigns": "campañas distintas",
"DistinctKeywords": "palabras clave distintas",
"DistinctSearchEngines": "motores de búsqueda distintos",
"DistinctWebsites": "páginas de internet distintas",
"EvolutionDocumentation": "Esta es una viste general de las páginas de internet externas que condujeron visitantes a su sitio de internet.",
"EvolutionDocumentationMoreInfo": "Para más información sobre los diferentes tipos de páginas de internet externas, vea la documentación de la tabla %s.",
"Keywords": "Palabras claves",
"KeywordsReportDocumentation": "Este informe revela que palabras claves estuvieron buscando antes de ingresar en su sitio de internet. %s Cliqueando en la tabla, puede observar la distribución de los motores de búsqueda en la búsqueda de dichas palabras claves.",
"PluginDescription": "Informes de los datos referidos: motores de búsquedas, palabras claves, sitios de internet, campañas, medios sociales, ingreso directo.",
"Referrer": "Referencia",
"ReferrerName": "Nombre de la referencia",
"Referrers": "Referencias",
"ReferrersOverview": "Compendio de referencias",
"ReferrerTypes": "Tipos de referencias",
"SearchEngines": "Motores de búsqueda",
"SearchEnginesDocumentation": "Un visitante fue remitido a su sitio de internet por un motor de búsqueda. %s Vea el %s informe para mayores detalles.",
"SearchEnginesReportDocumentation": "Este reporte muestra qué motores de búsqueda enviaron usuarios a su sitio de internet. %s Haciendo clic en una fila en la tabla, puede ver lo que los usuarios estaban buscando en un motor de búsqueda específico.",
"SocialFooterMessage": "A la izquierda, este es un subconjunto de los informes de los sitios de internet. Filtra respecto de otros sitios de internet, así puede comparar sus referencias de las redes sociales directamente.",
"Socials": "Redes sociales",
"SocialsReportDocumentation": "Este informe muestra que red social conduce visitantes a su sitio de internet.<br \/>Cliqueando en una fila de la tabla, puede observar desde que páginas de determinada red social provienen sus visitantes.",
"SubmenuSearchEngines": "Motores de búsqueda y palabras clave",
"SubmenuWebsites": "Sitios de internet & Redes sociales",
"Type": "Tipo de referencia",
"TypeCampaigns": "%s desde campañas",
"TypeDirectEntries": "%s entradas directas",
"TypeReportDocumentation": "Esta tabla contiene información acerca de la distribución de los tipos de referentes.",
"TypeSearchEngines": "%s desde motores de búsqueda",
"TypeWebsites": "%s desde sitios de internet",
"UsingNDistinctUrls": "(usando %s urls distintas)",
"ViewAllReferrers": "Ver todas los referencias",
"ViewReferrersBy": "Ver referencias por %s",
"Websites": "Sitios de internet",
"WebsitesDocumentation": "El visitante siguió un enlace situado en otro sitio de internet que lo condujo a su sitio. %s Vea el %s informe para mayores detalles.",
"WebsitesReportDocumentation": "En esta tabla, puede observar qué sitio de internet envió visitantes a su sitio. %s Cliqueando en una fila de la tabla, puede ver que dirección de internet enlaza a su sitio.",
"WidgetExternalWebsites": "Sitios de internet de las referencias",
"WidgetGetAll": "Todas las referencias",
"WidgetSocials": "Lista de redes sociales",
"WidgetTopKeywordsForPages": "Principales palabras clave para el URL de página",
"XPercentOfVisits": "%s de visitas"
}
}

View file

@ -0,0 +1,34 @@
{
"Referrers": {
"Campaigns": "Kampaaniad",
"ColumnCampaign": "Kampaania",
"ColumnSearchEngine": "Otsingumootor",
"ColumnSocial": "Sotsiaalvõrgustik",
"ColumnWebsite": "Veebileht",
"ColumnWebsitePage": "Veebi lehekülg",
"DirectEntry": "Otse sisenetud",
"Keywords": "Võtmesõnad",
"Referrer": "Viitaja",
"ReferrerName": "Viitaja nimi",
"Referrers": "Viitajad",
"ReferrersOverview": "Viitajate ülevaade",
"SearchEngines": "Otsingumootorid",
"SocialFooterMessage": "See on vasakul olevate veebilehtede alamraport, mis filtreerib muud viitajad välja, nii et saaksid võrrelda ainult sotsiaalvõrgustikke.",
"Socials": "Sotsiaalvõrgustikud",
"SubmenuSearchEngines": "Otsingumootorid ja võtmesõnad",
"SubmenuWebsites": "Veebilehed",
"Type": "Viitaja tüüp",
"TypeCampaigns": "%s kampaaniatest",
"TypeDirectEntries": "%s otse sisenemist",
"TypeSearchEngines": "%s otsingumootoritest",
"TypeWebsites": "%s veebilehtedelt",
"ViewAllReferrers": "Vaata kõiki viitajaid",
"ViewReferrersBy": "Viitajate reastamise aluseks: %s",
"Websites": "Veebilehed",
"WidgetExternalWebsites": "Väliste viitajate nimekiri",
"WidgetGetAll": "Kõik viitajad",
"WidgetSocials": "Nimekiri sotsiaalvõrgustikest",
"WidgetTopKeywordsForPages": "Lehe URL peamised võtmesõnad",
"XPercentOfVisits": "%s külastustest"
}
}

View file

@ -0,0 +1,27 @@
{
"Referrers": {
"Campaigns": "Kanpainak",
"ColumnCampaign": "Kanpaina",
"ColumnSearchEngine": "Bilaketa-motorra",
"ColumnWebsite": "Webgunea",
"ColumnWebsitePage": "Webguneko orria",
"DirectEntry": "Sarrera zuzena",
"Distinct": "Erreferente desberdinak erreferente motagatik",
"DistinctCampaigns": "kanpaina desberdin",
"DistinctKeywords": "gako-hitz desberdin",
"DistinctSearchEngines": "bilaketa-motor desberdin",
"DistinctWebsites": "webgune desberdin",
"Keywords": "Gako-hitzak",
"Referrers": "Erreferenteak",
"SearchEngines": "Bilaketa-motorrak",
"SubmenuSearchEngines": "Bilaketa-motorrak eta gako-hitzak",
"SubmenuWebsites": "Webguneak",
"Type": "Erreferente mota",
"TypeCampaigns": "%s kanpainetatik",
"TypeDirectEntries": "%s sarbide zuzen",
"TypeSearchEngines": "%s bilaketa-motorretatik",
"TypeWebsites": "%s webguneetatik",
"Websites": "Webguneak",
"WidgetExternalWebsites": "Kanpoko webguneen zerrenda"
}
}

View file

@ -0,0 +1,41 @@
{
"Referrers": {
"Campaigns": "کمپین",
"ColumnCampaign": "کمپین بین المللی حقوق بشر",
"ColumnSearchEngine": "موتور جستجو",
"ColumnSocial": "شبکه اجتماعی",
"ColumnWebsite": "وب سایت",
"ColumnWebsitePage": "صفحه وب سایت",
"DirectEntry": "ورود مستقیم",
"DirectEntryDocumentation": "تا به بازدید کننده، URL در مرورگر خود وارد و شروع به در حال دیدن سایت بر روی وب سایت خود را - که وارد وب سایت به طور مستقیم.",
"Distinct": "معرف های متمایز براساس نوع ارجاع دهنده",
"DistinctCampaigns": "متمایز مبارزات",
"DistinctKeywords": "کلمات کلیدی قابل تشخیص",
"DistinctSearchEngines": "موتور های جستجو قابل تشخیص",
"DistinctWebsites": "وبسایت های قابل تشخیص",
"EvolutionDocumentation": "این یک مرور کلی از مراجعه کنندگان که منجر بازدید کنندگان وب سایت شما می باشد.",
"EvolutionDocumentationMoreInfo": "برای اطلاعات بیشتر درباره ی انواع ارجاه دهنده های مختلف , مستندات جدول %s را ببینید.",
"Keywords": "کلمات کلیدی",
"Referrer": "معرف",
"ReferrerName": "نام و نام خانوادگی ارجاع دهنده",
"Referrers": "ارجاع دهنده ها",
"ReferrersOverview": "نمایش معرف ها",
"SearchEngines": "موتور های جستجو",
"SearchEnginesDocumentation": "یک بازدیدکننده توسط موتورجستجو به وبسایت شما ارجاع داده شده است.%s برای جزئیات بیشتر %sاین گزارش را ببینید.",
"Socials": "شبکه های اجتماعی",
"SubmenuSearchEngines": "موتورهای جستجو و کلمات کلیدی",
"SubmenuWebsites": "وب سایت ها",
"Type": "نوع ارجاع دهنده",
"TypeCampaigns": "%s از کمپین",
"TypeDirectEntries": "%s ورودی مستقیم",
"TypeReportDocumentation": "این جدول شامل اطلاعات مربوط به توزیع انواع معرف است.",
"TypeSearchEngines": "%s از موتوهای جستجو",
"TypeWebsites": "%s از وبسایت ها",
"ViewAllReferrers": "مشاهده تمام معرف ها",
"Websites": "وب سایت ها",
"WidgetExternalWebsites": "فهرست وب سایت های خارجی",
"WidgetGetAll": "همه معرف ها",
"WidgetSocials": "فهرست شبکه های اجتماعی",
"WidgetTopKeywordsForPages": "بهترین کلمات کلیدی برای صفحه شما"
}
}

View file

@ -0,0 +1,53 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Tämä raportti näyttää kaikki viittaukset yhdessä raportissa, listaten kaikki verkkosivut, hakusanat ja kampanjat, joita käyttäjäsi käyttivät löytääkseen verkkosivusi.",
"Campaigns": "Kampanjat",
"CampaignsDocumentation": "Vierailijat, jotka tulivat sivullesi kampanjan mukana. %s Katso %s raportista lisätietoja.",
"CampaignsReportDocumentation": "Tässä raportissa on tietoa kampanjoista, joilla käyttäjiä tuli sivuillesi. %s Lisätietoa kampanjoiden seuraamisesta löytyy %senglanninkielisestä dokumentista piwik.orgissa%s",
"ColumnCampaign": "Kampanja",
"ColumnSearchEngine": "Hakukone",
"ColumnSocial": "Sosiaalinen verkosto",
"ColumnWebsite": "Verkkosivu",
"ColumnWebsitePage": "Verkkosivu",
"DirectEntry": "Suoraan",
"DirectEntryDocumentation": "Kävijä kirjoitti sivusi osoitteen selaimeensa - hän tuli sivuille suoraan.",
"Distinct": "Yksilöllisiä viittaajia viittaustyypin mukaan",
"DistinctCampaigns": "yksilöllistä kampanjaa",
"DistinctKeywords": "yksilöllistä hakusanaa",
"DistinctSearchEngines": "yksilöllistä hakukonetta",
"DistinctWebsites": "yksilöllistä verkkosivua",
"EvolutionDocumentation": "Tämä on yleiskatsaus viittauksista, jotka toivat käyttäjiä sivuillesi.",
"EvolutionDocumentationMoreInfo": "Löydät lisätietoja erilaisista viittaustyypeistä taulun %s dokumentaatiosta.",
"Keywords": "Avainsanat",
"KeywordsReportDocumentation": "Tämä rapotti näyttää, millä hakusanoilla kävijät tulivat sivuillesi. %s Näet hakukoneiden määrän klikkaamalla hakusanaa.",
"Referrer": "Viittaukset",
"ReferrerName": "Viittauksen nimi",
"Referrers": "Viittaajat",
"ReferrersOverview": "Viittauksien yleiskatsaus",
"SearchEngines": "Hakukoneet",
"SearchEnginesDocumentation": "Kävijä tuli sivullesi hakukoneesta. %s Katso %s raportista lisätietoja.",
"SearchEnginesReportDocumentation": "Tämä raportti näyttää, mitkä hakukoneet viittasivat kävijöitä sivuillesi. %s Näet hakusanat klikkaamalla hakukoneen nimeä.",
"SocialFooterMessage": "Tämä on osajoukko verkkosivuraportista vasemmalla. Se suodattaa pois toiset verkkosivut, jotta voit verrata sosiaalisia verkostojasi suoraan.",
"Socials": "Sosiaaliset verkostot",
"SocialsReportDocumentation": "Tämä raportti näyttää mitkä sosiaaliset verkostot johtivat kävijöitä verkkosivullesi.<br \/>Klikkaamalla riviä taulukossa näet mistä sosiaalisesta verkostosta kävijät tulivat verkkosivullesi.",
"SubmenuSearchEngines": "Search engines & keywords",
"SubmenuWebsites": "Verkkosivut",
"Type": "Viittaajan tyyppi",
"TypeCampaigns": "%s kampanjoista",
"TypeDirectEntries": "%s suoraa saapumista",
"TypeReportDocumentation": "Tässä taulukossa on tietoa viittaustyyppien jakaumasta.",
"TypeSearchEngines": "%s hakukoneista",
"TypeWebsites": "%s verkkosivuilta",
"UsingNDistinctUrls": "(käytetään %s yksilöllistä osoitetta)",
"ViewAllReferrers": "Näytä kaikki viittaukset",
"ViewReferrersBy": "Näytä viittaukset %s mukaan",
"Websites": "Sivustot",
"WebsitesDocumentation": "Kävijä tuli sivullesi seuraamalla linkkiä toiselta sivulta. %s Katso %s raportista lisätietoja.",
"WebsitesReportDocumentation": "Tässä taulussa on lista sivuista, joiden kautta käyttäjiä tuli sinun sivullesi. %s Näet lähdesivun URL:n klikkaamalla taulun riviä.",
"WidgetExternalWebsites": "Lista ulkoisista verkkosivuista",
"WidgetGetAll": "Kaikki viittaukset",
"WidgetSocials": "Sosiaalisten verkostojen lista",
"WidgetTopKeywordsForPages": "Käytetyimmät avainsanat sivun URL:lle",
"XPercentOfVisits": "%s kävijöistä"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Ce rapport affiche tous les référents en un rapport consolidé, listant tous les sites web, mots-clés de recherche et campagnes utilisés par vos visiteurs pour trouver votre site web.",
"Campaigns": "Campagnes",
"CampaignsDocumentation": "Visiteurs venus sur votre site web grâce à une campagne. %s Affichez le rapport %s pour plus de détails.",
"CampaignsReportDocumentation": "Ce rapport montre quelles campagnes ont conduit des visiteurs à votre site web. %s Pour plus d'informations à propos des campagnes lisez %s la documentation des campagnes sur piwik.org%s",
"ColumnCampaign": "Campagne",
"ColumnSearchEngine": "Moteur de recherche",
"ColumnSocial": "Réseaux sociaux",
"ColumnWebsite": "Site",
"ColumnWebsitePage": "Page du site",
"DirectEntry": "Entrées directes",
"DirectEntryDocumentation": "Un visiteur a entré directement l'URL du site web dans son navigateur et a commencé à parcourir votre site web - il est entré directement sur le site web.",
"Distinct": "Provenances distinctes par type de Provenance",
"DistinctCampaigns": "campagnes distinctes",
"DistinctKeywords": "mots-clés distincts",
"DistinctSearchEngines": "Moteurs de recherche distincts",
"DistinctWebsites": "sites web distincts",
"EvolutionDocumentation": "Ceci est un aperçu des référents qui ont conduit des visiteurs sur votre site web.",
"EvolutionDocumentationMoreInfo": "Pour plus d'informations sur les différents types de référents, consultez la documentation du tableau %s.",
"Keywords": "Mots-clés",
"KeywordsReportDocumentation": "Ce rapport affiche quels mots-clés les utilisateurs recherchaient avant d'être conduit sur votre site web. %s En cliquant sur une ligne vous pouvez visualiser la distribution des moteurs de recherche qui ont été utilisés pour le mot-clé.",
"PluginDescription": "Rapporte des données sur les Référants : Moteurs de recherche, mots clefs, Sites web, Campagnes, Réseaux sociaux et entrées directes.",
"Referrer": "Réfèrent",
"ReferrerName": "Nom du référent",
"Referrers": "Référents",
"ReferrersOverview": "Vue d'ensemble des référents",
"ReferrerTypes": "Types de référants",
"SearchEngines": "Moteurs de recherche",
"SearchEnginesDocumentation": "Un visiteur a été conduit sur votre site web par un moteur de recherche. %s Affichez le rapport %s pour plus de détails.",
"SearchEnginesReportDocumentation": "Ce rapport vous montre quels moteurs de recherche ont envoyé vos utilisateurs vers votre site. %s en cliquant sur une ligne sur la table, vous pouvez voir ce que vos utilisateurs étaient en train de chercher avec les moteurs de recherches spécifiques.",
"SocialFooterMessage": "Ceci est un sous-ensemble du rapport de sites web à gauche. Les autres sites web sont filtrés vous permettant ainsi de comparer les réseaux sociaux référents directement.",
"Socials": "Réseaux sociaux",
"SocialsReportDocumentation": "Ce rapport affiche quels réseaux sociaux ont amené des visiteurs sur votre site web.<br \/>En cliquant sur une ligne du tableau, vous pouvez voir depuis quelles pages du réseau social les visiteur sont venus sur votre site web.",
"SubmenuSearchEngines": "Moteurs de recherche et mots-clés",
"SubmenuWebsites": "Sites Internet",
"Type": "Types d'acquisitions",
"TypeCampaigns": "%s depuis des campagnes",
"TypeDirectEntries": "%s entrées directes",
"TypeReportDocumentation": "Ce tableau contient des informations à propos de la distribution des types de référents.",
"TypeSearchEngines": "%s depuis des moteurs de recherche",
"TypeWebsites": "%s depuis d'autres sites Internet",
"UsingNDistinctUrls": "(utilisant %s urls distinctes)",
"ViewAllReferrers": "Afficher tous les référents",
"ViewReferrersBy": "Afficher les référents par %s",
"Websites": "Sites web",
"WebsitesDocumentation": "Le visiteur a suivi un lien sur un autre site qui l'a conduit sur votre site. %s Affichez le rapport %s pour plus de détails.",
"WebsitesReportDocumentation": "Dans ce tableau vous pouvez voir quels sites web ont conduit des visiteurs sur votre site.. %s En cliquant sur une ligne du tableau, vous pouvez voir les URL des sites sur lesquels sont les liens.",
"WidgetExternalWebsites": "Sites Internet référents",
"WidgetGetAll": "Tous les référents",
"WidgetSocials": "Liste des réseaux sociaux",
"WidgetTopKeywordsForPages": "Meilleurs mots-clés pour l'URL",
"XPercentOfVisits": "%s des visites"
}
}

View file

@ -0,0 +1,18 @@
{
"Referrers": {
"Campaigns": "Campañas",
"ColumnWebsite": "Web",
"DirectEntry": "Entrada directa",
"Keywords": "Palabras clave",
"SearchEngines": "Motores de busca",
"SubmenuSearchEngines": "Motores de busca e palabras clave",
"SubmenuWebsites": "Páxinas web",
"Type": "Tipo de Referer",
"TypeCampaigns": "%s desde campañas",
"TypeDirectEntries": "%s entradas directas",
"TypeSearchEngines": "%s desde motores de busca",
"TypeWebsites": "%s desde outras webs",
"Websites": "Sitios",
"WidgetExternalWebsites": "Lista de webs externas"
}
}

View file

@ -0,0 +1,17 @@
{
"Referrers": {
"Campaigns": "קמפיינים",
"ColumnSocial": "רשת חברתית",
"ColumnWebsite": "אתר",
"ColumnWebsitePage": "עמוד אתר",
"Keywords": "מילות מפתח",
"Referrer": "מפנה",
"ReferrerName": "שם הפניה",
"Referrers": "הפניות",
"ReferrersOverview": "סקירת הפניות",
"SearchEngines": "מנועי חיפוש",
"Socials": "רשתות חברתיות",
"SubmenuWebsites": "אתרי אינטרנט ורשתות חברתיות",
"Websites": "אתרים"
}
}

View file

@ -0,0 +1,52 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "इस रिपोर्ट में अपनी वेबसाइट खोजने के लिए अपने आगंतुकों द्वारा उपयोग किए गए सभी वेबसाइटों, खोज कीवर्ड और अभियान को सूचीबद्ध, एक एकीकृत रिपोर्ट में आपके सभी सन्दर्भदाता दिखाता है.",
"Campaigns": "अभियान",
"CampaignsDocumentation": "आगंतुकों जो एक अभियान के परिणाम के रूप में अपनी वेबसाइट पर आए. अधिक जानकारी के लिए %sरिपोर्ट %s देखें.",
"CampaignsReportDocumentation": "इस रिपोर्ट में आपकी वेबसाइट पर आगंतुकों का नेतृत्व किया जो अभियान से पता चलता है. ट्रैकिंग अभियान के बारे में %s अधिक जानकारी के लिए, piwik.org %sपर अभियान%s प्रलेखन पढ़ें",
"ColumnCampaign": "अभियान",
"ColumnSearchEngine": "सर्च इंजिन",
"ColumnSocial": "सामाजिक संजाल",
"ColumnWebsite": "वेबसाइट",
"ColumnWebsitePage": "वेबसाइट के पेज",
"DirectEntry": "प्रत्यक्ष प्रवेश",
"DirectEntryDocumentation": "एक आगंतुक अपने ब्राउज़र में URL दर्ज किया है और आपकी वेबसाइट पर ब्राउज़िंग शुरू कर दी है - उन्होंने सीधे वेबसाइट में प्रवेश किया.",
"Distinct": "संदर्भ प्रकार से अलग सन्दर्भदाता",
"DistinctCampaigns": "विशिष्ट अभियानों",
"DistinctKeywords": "विशिष्ट खोजशब्दों",
"DistinctSearchEngines": "विशिष्ट सर्च इंजन",
"DistinctWebsites": "विशिष्ट वेबसाइटों",
"EvolutionDocumentation": "इससे आपकी वेबसाइट पर आगंतुकों का नेतृत्व किया जो सन्दर्भदाता का अवलोकन है.",
"EvolutionDocumentationMoreInfo": "अलग संदर्भ प्रकार के बारे में अधिक जानकारी के लिए, %sतालिका के दस्तावेज़ देखें.",
"Keywords": "खोजशब्द",
"KeywordsReportDocumentation": "यह रिपोर्ट कि वे आपकी वेबसाइट पर निर्दिष्ट किये जाने से पहले उपयोगकर्ताओं द्वारा खोजे जा रहे कीवर्ड दिखाता है तालिका में एक पंक्ति पर %s क्लिक करते हुए आप कीवर्ड की पूछा था कि खोज इंजन का वितरण देख सकते हैं.",
"Referrer": "संदर्भ",
"ReferrerName": "संदर्भ का नाम",
"Referrers": "सन्दर्भदाता",
"ReferrersOverview": "सन्दर्भदाता अवलोकन",
"SearchEngines": "सर्च इंजन",
"SearchEnginesDocumentation": "एक आगंतुक एक खोज इंजन से आपकी वेबसाइट पर भेजा गया था. अधिक जानकारी के लिए %sरिपोर्ट देखें%s.",
"SearchEnginesReportDocumentation": "यह रिपोर्ट जो दर्शाता है खोज इंजन का आपकी वेबसाइट पर उपयोगकर्ताओं को भेजा जाता. तालिका में एक पंक्ति पर%s क्लिक करते हुए आप देख सकते हैं क्या उपयोगकर्ताओं को एक विशिष्ट खोज इंजन का उपयोग करने की खोज कर रहे थे",
"SocialFooterMessage": "यह एक बाईं ओर रिपोर्ट है वेबसाइटों का एक सबसेट है. आप सीधे अपने सामाजिक नेटवर्क सन्दर्भदाता तुलना कर सकते हैं ताकि यह अन्य वेबसाइटों फिल्टर करे.",
"Socials": "सामाजिक संजाल",
"SocialsReportDocumentation": "यह रिपोर्ट दिखाता है जो सामाजिक नेटवर्क आपकी वेबसाइट पर आगंतुकों का नेतृत्व किया.<br \/> तालिका में एक पंक्ति पर क्लिक करते हुए आप देख सकते जिसमें सामाजिक नेटवर्क पृष्ठों से आगंतुकों को अपनी वेबसाइट पर आया था",
"SubmenuSearchEngines": "सर्च इंजन और खोजशब्द",
"SubmenuWebsites": "वेबसाइटों और सामाजिक",
"Type": "संदर्भ प्रकार",
"TypeCampaigns": "अभियान से %s",
"TypeDirectEntries": "%s प्रत्यक्ष प्रविष्टियां",
"TypeReportDocumentation": "इस तालिका में संदर्भ प्रकार के वितरण के बारे में जानकारी शामिल हैं.",
"TypeSearchEngines": "सर्च इंजन से %s",
"TypeWebsites": "वेबसाइटों से %s",
"UsingNDistinctUrls": "(%s विशिष्ट यूआरएल का उपयोग करके)",
"ViewAllReferrers": "सभी सन्दर्भदाता देखें",
"ViewReferrersBy": "%s द्वारा सन्दर्भदाता देखें",
"Websites": "वेबसाइटें",
"WebsitesDocumentation": "आगंतुक अपनी साइट का नेतृत्व करने के लिए एक और वेबसाइट पर एक लिंक का पालन किया. %s अधिक जानकारी के लिए रिपोर्ट%s देखें.",
"WebsitesReportDocumentation": "इस तालिका में, आप अपनी वेबसाइट पर आगंतुकों को भेजने वाले वेबसाइट देख सकते हैं. तालिका में %s एक पंक्ति पर क्लिक करते हुए आप देख सकते हैं जो यूआरएल आपकी वेबसाइट के लिए लिंक किया गया है",
"WidgetExternalWebsites": "संदर्भ वेबसाईटें",
"WidgetGetAll": "सभी सन्दर्भदाता",
"WidgetSocials": "सामाजिक संजाल की सूची",
"WidgetTopKeywordsForPages": "पृष्ठ URL के लिए शीर्ष खोजशब्द"
}
}

View file

@ -0,0 +1,5 @@
{
"Referrers": {
"ColumnWebsite": "Web stranica"
}
}

View file

@ -0,0 +1,28 @@
{
"Referrers": {
"Campaigns": "Kampányok",
"ColumnCampaign": "Kampány",
"ColumnSearchEngine": "Keresőoldal",
"ColumnWebsite": "Weboldal",
"ColumnWebsitePage": "Weboldal weblapja",
"DirectEntry": "Közvetlen látogatás",
"Distinct": "Különböző források a forgalmi forrás típus szerint",
"DistinctCampaigns": "különböző kampány",
"DistinctKeywords": "különböző kulcsszó",
"DistinctSearchEngines": "különböző keresőoldal",
"DistinctWebsites": "különböző weboldal",
"Keywords": "Kulcsszavak",
"Referrers": "Források",
"SearchEngines": "Keresőoldalak",
"SubmenuSearchEngines": "Keresőoldalak és kulcsszavak",
"SubmenuWebsites": "Weboldalak",
"Type": "Forgalmi források típusa",
"TypeCampaigns": "%s a kampányok által",
"TypeDirectEntries": "%s közvetlen látogatás",
"TypeSearchEngines": "%s a keresőoldalakról",
"TypeWebsites": "%s a weboldalakról",
"UsingNDistinctUrls": "(%s különböző URL által)",
"Websites": "Weboldalak",
"WidgetExternalWebsites": "Külső weboldalak listája"
}
}

View file

@ -0,0 +1,52 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Laporan ini menampilkan seluruh Pengarah Anda dalam laporan satu kompak, mendaftar seluruh Situs, dan kata kunci Pencarian serta Kampanye yang digunakan pengunjung Anda menemukan situs Anda.",
"Campaigns": "Kampanye",
"CampaignsDocumentation": "Pengunjung yang datang ke situs Anda sebagai hasil dari kampanye. %s Lihat laporan %s untuk selengkapnya.",
"CampaignsReportDocumentation": "Laporan ini menampilan kampanye mana yang mengarahkan pengungunjung ke situs Anda. %s Informasi selengkapnya tentang kampanye pelacakan, baca %sdokumentasi kampanye di piwik.org%s",
"ColumnCampaign": "Kampanye",
"ColumnSearchEngine": "Mesin Pencari",
"ColumnSocial": "Jejaring Sosial",
"ColumnWebsite": "Situs",
"ColumnWebsitePage": "Halaman Situs",
"DirectEntry": "Masukan Langsung",
"DirectEntryDocumentation": "Pengunjung telah memasukkan URL di peramban dan mulai menjelajah ke situs Anda - pengunjung tersebut mengunjungi situs secara langsung.",
"Distinct": "Pengarah Berbeda berdasarkan Jenis Pengarah",
"DistinctCampaigns": "kampanye berbeda",
"DistinctKeywords": "kata kunci berbeda",
"DistinctSearchEngines": "mesin pencari berbeda",
"DistinctWebsites": "situs berbeda",
"EvolutionDocumentation": "Ini merupakan iktisar pengarah yang mengarahkan pengunjung ke situs Anda.",
"EvolutionDocumentationMoreInfo": "Informasi selengkapnya tentang jenis lainnya, lihat dokumentasi tentang tabel %s.",
"Keywords": "Kata Kunci",
"KeywordsReportDocumentation": "Laporan ini menampilkan kata kunci yang pengguna gunakan saat pencarian sebelum diarahkan ke situs Anda. %s Dengan mengeklik baris dalam tabel, Anda dapat mengetahui penyebaran permintaan mesin pencari atas kata kunci tersebut.",
"Referrer": "Pengarah",
"ReferrerName": "Nama Pengarah",
"Referrers": "Pengarah",
"ReferrersOverview": "Iktisar Pengarah",
"SearchEngines": "Mesin Pencari",
"SearchEnginesDocumentation": "Pengunjung telah diarahkan ke situs Anda oleh mesin pencari. %s Lihat laporan %s untuk selengkapnya.",
"SearchEnginesReportDocumentation": "Laporan ini menampilakan mesin pencari yang mengarahkan pengguna ke situs Anda. %s Dengan mengeklik baris dalam tabel, Anda dapat mengetahui pengguna mana yang menggunakan mesin pencari tertentu.",
"SocialFooterMessage": "Merupakan himpunan laporan Situs di sebelah kiri. Ini akan menapis keluar situs lain sehingga Anda dapat bandingkan dengan pengarah jejaring sosial secara langsung.",
"Socials": "Jejaring Sosial",
"SocialsReportDocumentation": "Laporan ini menampilkan jejaring sosial yang mengarahkan pengunjung ke situs Anda.<br \/>Dengan mengeklik sebuah baris di tabel, Anda dapat melihat dari halaman jejaring sosial mana pengunjung mendatangi situs Anda.",
"SubmenuSearchEngines": "Mesin Pencari & Kata Kunci",
"SubmenuWebsites": "Situs",
"Type": "Jenis Pengarah",
"TypeCampaigns": "%s dari kampanye",
"TypeDirectEntries": "%s masukkan langsung",
"TypeReportDocumentation": "Tabel ini mengandung informasi tentang penyebaran jenis pengarah.",
"TypeSearchEngines": "%s dari mesin pencari",
"TypeWebsites": "%s dari situs",
"UsingNDistinctUrls": "(menggunakan %s url berbeda)",
"ViewAllReferrers": "Lihat seluruh pengarah",
"ViewReferrersBy": "Lihat Pengarah berdasar %s",
"Websites": "Situs",
"WebsitesDocumentation": "Pengunjung mengikuti tautan di situs lain yang mengarahkan ke situs Anda. %s Lihat laporan %s untuk selengkapnya.",
"WebsitesReportDocumentation": "Dalam tabel ini, Anda dapat melihat situs mana yang mengarahkan pengunjung menuju situs Anda. %s Dengan mengeklik baris dalam tabel, Anda dapat mengetahui URL mana yang memiliki tautan ke situs Anda.",
"WidgetExternalWebsites": "Daftar Situs luar",
"WidgetGetAll": "Seluruh Pengarah",
"WidgetSocials": "Daftar jejaring sosial",
"WidgetTopKeywordsForPages": "Kata kunci atas untulk URL halaman"
}
}

View file

@ -0,0 +1,28 @@
{
"Referrers": {
"Campaigns": "Herferðir",
"ColumnCampaign": "Herferð",
"ColumnSearchEngine": "Leitarvél",
"ColumnWebsite": "Vefur",
"ColumnWebsitePage": "Vefsíða",
"DirectEntry": "Beinar Innfærslur",
"Distinct": "Mismundandi Sendendur eftir Tegund Sendanda",
"DistinctCampaigns": "mismunandi herferðir",
"DistinctKeywords": "mismunandi leitarorð",
"DistinctSearchEngines": "mismunandi leitarvélar",
"DistinctWebsites": "mismunandi vefir",
"Keywords": "Leitarorð",
"Referrers": "Sendendur",
"SearchEngines": "Leitarvélar",
"SubmenuSearchEngines": "Leitarvélar & Leitarorð",
"SubmenuWebsites": "Vefir",
"Type": "Tegund Sendanda",
"TypeCampaigns": "%s frá herferðum",
"TypeDirectEntries": "%s beinar innfærslur",
"TypeSearchEngines": "%s frá leitarvélum",
"TypeWebsites": "%s frá vefjum",
"UsingNDistinctUrls": "(notuð eru %s mismunandi url)",
"Websites": "Vefir",
"WidgetExternalWebsites": "Listi yfir ytri vefi"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "Questo report mostra tutti i tuoi Referenti in un unico report che elenca tutti i Siti web, le Parole chiave di ricerca e Campagne utilizzate dai visitatori per trovare il tuo sito web.",
"Campaigns": "Campagne",
"CampaignsDocumentation": "Visitatori che sono arrivati sul tuo sito web a seguito di una campagna. %s Vedi il%s Report per maggiori dettagli.",
"CampaignsReportDocumentation": "Questo report mostra quali campagne hanno portato i visitatori sul tuo sito web. %s Per ulteriori informazioni sulle campagne di monitoraggio, leggi la %sdocumentazione campagne su piwik.org%s",
"ColumnCampaign": "Campagna",
"ColumnSearchEngine": "Motore di ricerca",
"ColumnSocial": "Social network",
"ColumnWebsite": "Sito:",
"ColumnWebsitePage": "Pagina",
"DirectEntry": "Ingressi Diretti",
"DirectEntryDocumentation": "Un visitatore ha inserito l'URL nel proprio browser e ha iniziato la navigazione sul tuo sito web - è entrato direttamente al sito.",
"Distinct": "Referenti distinti per tipo",
"DistinctCampaigns": "campagne distinte",
"DistinctKeywords": "parole chiave distinte",
"DistinctSearchEngines": "motori di ricerca distinti",
"DistinctWebsites": "siti web distinti",
"EvolutionDocumentation": "Questa è una panoramica dei referenti che hanno portato i visitatori sul tuo sito web.",
"EvolutionDocumentationMoreInfo": "Per ulteriori informazioni sui diversi tipi referenti, consulta la documentazione della %s tabella.",
"Keywords": "Keywords",
"KeywordsReportDocumentation": "Questo report mostra le parole chiave che gli utenti hanno ricercato prima di venire indirizzati sul tuo sito web. %s Cliccando su una riga della tabella, è possibile vedere la distribuzione dei motori di ricerca che sono stati interrogati per la parola chiave.",
"PluginDescription": "Restituisce i dati dei Referrer: Motori di Ricerca, Keywords, Siti, Campagne, Social media, Ingressi diretti.",
"Referrer": "Referente",
"ReferrerName": "Nome Referente",
"Referrers": "Referenti",
"ReferrersOverview": "Panoramica Referenti",
"ReferrerTypes": "Tipi di Referenti",
"SearchEngines": "Motori di ricerca",
"SearchEnginesDocumentation": "Un visitatore è stato portato sul tuo sito da un motore di ricerca. %s Vedi il %s report per maggiori dettagli.",
"SearchEnginesReportDocumentation": "Questo report mostra quali motori di ricerca hanno portato gli utenti sul tuo sito web. %s Cliccando su una riga della tabella è possibile vedere ciò che gli utenti stavano cercando utilizzando un determinato motore di ricerca.",
"SocialFooterMessage": "Questo è un sottoinsieme dei siti web riportati a sinistra. Esso filtra altri siti web in modo da poter confrontare direttamente i vostri referenti di social network.",
"Socials": "Social Networks",
"SocialsReportDocumentation": "Questo report mostra quali social networks hanno portato i visitatori sul tuo sito web. <br \/> Cliccando su una riga della tabella si può vedere da quali pagine di social network i visitatori sono venuti sul tuo sito web.",
"SubmenuSearchEngines": "Motori di ricerca e parole chiave",
"SubmenuWebsites": "Siti web e Social",
"Type": "Tipo di referente",
"TypeCampaigns": "%s da campagne",
"TypeDirectEntries": "%s ingressi diretti",
"TypeReportDocumentation": "Questa tabella contiene informazioni sulla distribuzione dei tipi di referente.",
"TypeSearchEngines": "%s da motori di ricerca",
"TypeWebsites": "%s da siti web",
"UsingNDistinctUrls": "(usando %s URL distinti)",
"ViewAllReferrers": "Vedi tutti i Referenti",
"ViewReferrersBy": "Vedi Referenti per %s",
"Websites": "Siti web",
"WebsitesDocumentation": "Il visitatore ha seguito un link su un altro sito web che lo ha portato sul tuo. %s Vedi il %s report per maggiori dettagli.",
"WebsitesReportDocumentation": "In questa tabella è possibile vedere quali siti web hanno portato i visitatori sul tuo sito. %s Cliccando su una riga della tabella è possibile vedere su quali URL si trovavano i link al tuo sito.",
"WidgetExternalWebsites": "Elenco di Siti web esterni",
"WidgetGetAll": "Tutti i Referenti",
"WidgetSocials": "Elenco di social network",
"WidgetTopKeywordsForPages": "Top Keyword per URL Pagina",
"XPercentOfVisits": "%s di visite"
}
}

View file

@ -0,0 +1,55 @@
{
"Referrers": {
"AllReferrersReportDocumentation": "このレポートは、すべての参照元を確認することができる統合レポートです。ビジターがサイト閲覧の際に利用したすべてのウェブサイト、検索キーワード、キャンペーンを一覧表示します。",
"Campaigns": "キャンペーン",
"CampaignsDocumentation": "キャンペーンの結果としてウェブサイトを訪れたビジター。詳細のリポートは %s こちら %s",
"CampaignsReportDocumentation": "このリポートは、ウェブサイトに訪問者を導いたキャンペーンについて示します。 %s キャンペーンのトラッキングの詳細については、%s piwik.orgのキャンペーンについてのドキュメント %s を読んでください。",
"ColumnCampaign": "キャンペーン",
"ColumnSearchEngine": "検索エンジン",
"ColumnSocial": "ソーシャルネットワーク",
"ColumnWebsite": "ウェブサイト",
"ColumnWebsitePage": "ウェブサイトページ",
"DirectEntry": "直接アクセス",
"DirectEntryDocumentation": "ブラウザにURLを入力して、ウェブサイトの閲覧を開始したビジター - 直接ウェブサイトを見に来た。",
"Distinct": "参照元タイプごとの個別参照元",
"DistinctCampaigns": "個別のキャンペーン",
"DistinctKeywords": "個別のキーワード",
"DistinctSearchEngines": "個別の検索エンジン",
"DistinctWebsites": "個別のウェブサイト",
"EvolutionDocumentation": "ビジターをウェブサイトへと導いた参照元についての概観です。",
"EvolutionDocumentationMoreInfo": "異なる参照元の種類についての詳細は、 %s 表のドキュメントを参照してください。",
"Keywords": "キーワード",
"KeywordsReportDocumentation": "このリポートは、ユーザーがウェブサイトをビジットするのに使用した検索したキーワードを示します。 %s テーブル内の行をクリックすると、キーワードに対して照会された検索エンジンの分布を見ることができます。",
"PluginDescription": "リファラーデータレポート: 検索エンジン、キーワード、web サイト、キャンペーン、ソーシャル メディア、ダイレクト エントリー。",
"Referrer": "参照元",
"ReferrerName": "参照元の名称",
"Referrers": "リファラー",
"ReferrersOverview": "参照元概観",
"ReferrerTypes": "リファラータイプ",
"SearchEngines": "検索エンジン",
"SearchEnginesDocumentation": "検索エンジンを参照してウェブサイトに来たビジター。詳細のリポートは %s こちら %s",
"SearchEnginesReportDocumentation": "このリポートは、どの検索エンジンがこのウェブサイトにユーザーを呼びこんだかを示しています。 %s テーブル内の行をクリックすると、ユーザーが特定の検索エンジンを使って何を検索していたかを確認できます。",
"SocialFooterMessage": "これは、左のウェブサイトレポートのサブセットです。これは、他のウェブサイトをふるいにかけて選別するため、直接ソーシャルネットワークの参照元を比較することができます。",
"Socials": "ソーシャルネットワーク",
"SocialsReportDocumentation": "このレポートでは、ビジターがサイト訪問時に経由したソーシャルネットワークを表示します。<br\/> 表の列をクリックして、ビジターが経由したソーシャルネットワークページを確認してください。",
"SubmenuSearchEngines": "検索エンジンとキーワード",
"SubmenuWebsites": "ウェブサイト",
"Type": "参照元タイプ",
"TypeCampaigns": "%s キャンペーン経由",
"TypeDirectEntries": "%s 直接アクセス",
"TypeReportDocumentation": "このテーブルには、参照元の種類の分布についての情報が含まれています。",
"TypeSearchEngines": "%s 検索エンジン経由",
"TypeWebsites": "%s ウェブサイト経由",
"UsingNDistinctUrls": "%s の個別 URL を使用)",
"ViewAllReferrers": "全参照元を表示",
"ViewReferrersBy": "%s による参照元を表示",
"Websites": "ウェブサイト",
"WebsitesDocumentation": "別のウェブサイト上のリンクをクリックしてやってきたビジター。詳細のリポートは %s こちら %s",
"WebsitesReportDocumentation": "このテーブルでは、どのウェブサイトがビジターの参照元になっているかを示します。%s テーブル内の行をクリックすると、クリックされたURLのリンクを見ることが出来ます。",
"WidgetExternalWebsites": "外部ウェブサイト一覧",
"WidgetGetAll": "全参照元",
"WidgetSocials": "ソーシャルネットワークのリスト",
"WidgetTopKeywordsForPages": "ページ URL のトップキーワード",
"XPercentOfVisits": "訪問の %s"
}
}

View file

@ -0,0 +1,28 @@
{
"Referrers": {
"Campaigns": "კამპანიები",
"ColumnCampaign": "კამპანია",
"ColumnSearchEngine": "საძიებო სისტემა",
"ColumnWebsite": "ვებ საიტი",
"ColumnWebsitePage": "ვებ საიტის გვერდი",
"DirectEntry": "პირდაპირი შესვლა",
"Distinct": "განსხვავებული რეფერერები რეფერერების ტიპის მიხედვით",
"DistinctCampaigns": "განსხვავებული კამპანიები",
"DistinctKeywords": "განსხვავებული საკვანძო სიტყვები",
"DistinctSearchEngines": "განსხვავებული საძიებო სისტემები",
"DistinctWebsites": "განსხვავებული ვებ საიტები",
"Keywords": "საკვანძო სიტყვები",
"Referrers": "რეფერერები",
"SearchEngines": "საძიებო სისტემები",
"SubmenuSearchEngines": "საძიებო სისტემები და საკვანძო სიტყვები",
"SubmenuWebsites": "ვებ საიტები",
"Type": "რეფერერის ტიპი",
"TypeCampaigns": "%s კამპანიებიდან",
"TypeDirectEntries": "%s პირდაპირი შესვლა",
"TypeSearchEngines": "%s საძიებო სისტემებიდან",
"TypeWebsites": "%s ვებ საიტებიდან",
"UsingNDistinctUrls": "(%s განსხვავებული url გამოყენებით)",
"Websites": "ვებ საიტები",
"WidgetExternalWebsites": "გარე ვებ საიტების ჩამონათვალი"
}
}

Some files were not shown because too many files have changed in this diff Show more