diff options
Diffstat (limited to 'plugins/Referrers')
15 files changed, 103 insertions, 49 deletions
diff --git a/plugins/Referrers/Columns/Base.php b/plugins/Referrers/Columns/Base.php index 655ea20449..8da2c79bc3 100644 --- a/plugins/Referrers/Columns/Base.php +++ b/plugins/Referrers/Columns/Base.php @@ -288,8 +288,11 @@ abstract class Base extends VisitDimension return false; } + $site = Cache::getCacheWebsiteAttributes($this->idsite); + $excludeUnknowns = $site['exclude_unknown_urls']; + // fallback logic if the referrer domain is not known to any site to not break BC - if (isset($this->currentUrlParse['host'])) { + if (!$excludeUnknowns && 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)) { diff --git a/plugins/Referrers/SearchEngine.php b/plugins/Referrers/SearchEngine.php index 9b11ac860f..e2970c61ad 100644 --- a/plugins/Referrers/SearchEngine.php +++ b/plugins/Referrers/SearchEngine.php @@ -224,11 +224,10 @@ class SearchEngine extends Singleton $searchEngineName = $definitions['name']; $variableNames = $definitions['params']; + $keywordsHiddenFor = !empty($definitions['hiddenkeyword']) ? $definitions['hiddenkeyword'] : array(); $key = null; - if ($searchEngineName === 'Google Images' - || ($searchEngineName === 'Google' && strpos($referrerUrl, '/imgres') !== false) - ) { + if ($searchEngineName === 'Google Images') { if (strpos($query, '&prev') !== false) { $query = urldecode(trim(UrlHelper::getParameterFromQueryString($query, 'prev'))); $query = str_replace('&', '&', strstr($query, '?')); @@ -286,27 +285,13 @@ class SearchEngine extends Singleton $key = UrlHelper::getParameterFromQueryString($query, $variableName); $key = trim(urldecode($key)); - // Special cases: empty or no keywords + // Special cases: empty 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 || strpos($query, sprintf('?%s=', $variableName)) !== false - - // search engines with no keyword - || $searchEngineName == 'Ixquick' - || $searchEngineName == 'Google Images' - || $searchEngineName == 'DuckDuckGo') + ) ) { $key = false; } @@ -319,6 +304,30 @@ class SearchEngine extends Singleton } } + // if no keyword found, but empty keywords are allowed + if (!empty($keywordsHiddenFor) && ($key === null || $key === '')) { + + $pathWithQueryAndFragment = $referrerPath; + if (!empty($query)) { + $pathWithQueryAndFragment .= '?'.$query; + } + if (!empty($referrerParsed['fragment'])) { + $pathWithQueryAndFragment .= '#'.$referrerParsed['fragment']; + } + + foreach ($keywordsHiddenFor as $path) { + if (strlen($path) > 1 && substr($path, 0, 1) == '/' && substr($path, -1, 1) == '/') { + if (preg_match($path, $pathWithQueryAndFragment)) { + $key = false; + break; + } + } elseif ($path == $pathWithQueryAndFragment) { + $key = false; + break; + } + } + } + // $key === false is the special case "No keyword provided" which is a Search engine match if ($key === null || $key === '') { return false; diff --git a/plugins/Referrers/images/searchEngines/search.disconnect.me.png b/plugins/Referrers/images/searchEngines/search.disconnect.me.png Binary files differnew file mode 100644 index 0000000000..54b0eac351 --- /dev/null +++ b/plugins/Referrers/images/searchEngines/search.disconnect.me.png diff --git a/plugins/Referrers/images/searchEngines/search.lookseek.com.png b/plugins/Referrers/images/searchEngines/search.lookseek.com.png Binary files differnew file mode 100644 index 0000000000..ac1ff37a17 --- /dev/null +++ b/plugins/Referrers/images/searchEngines/search.lookseek.com.png diff --git a/plugins/Referrers/images/searchEngines/search.smartshopping.com.png b/plugins/Referrers/images/searchEngines/search.smartshopping.com.png Binary files differnew file mode 100644 index 0000000000..320ede63d5 --- /dev/null +++ b/plugins/Referrers/images/searchEngines/search.smartshopping.com.png diff --git a/plugins/Referrers/images/searchEngines/searchlock.com.png b/plugins/Referrers/images/searchEngines/searchlock.com.png Binary files differnew file mode 100644 index 0000000000..54f98183bc --- /dev/null +++ b/plugins/Referrers/images/searchEngines/searchlock.com.png diff --git a/plugins/Referrers/images/searchEngines/startpage.com.png b/plugins/Referrers/images/searchEngines/startpage.com.png Binary files differnew file mode 100644 index 0000000000..916df91599 --- /dev/null +++ b/plugins/Referrers/images/searchEngines/startpage.com.png diff --git a/plugins/Referrers/images/searchEngines/www.only-search.com.png b/plugins/Referrers/images/searchEngines/www.only-search.com.png Binary files differnew file mode 100644 index 0000000000..543c95d88e --- /dev/null +++ b/plugins/Referrers/images/searchEngines/www.only-search.com.png diff --git a/plugins/Referrers/lang/it.json b/plugins/Referrers/lang/it.json index ac5c1ad83d..ab9144217e 100644 --- a/plugins/Referrers/lang/it.json +++ b/plugins/Referrers/lang/it.json @@ -2,8 +2,8 @@ "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. %1$s Vedi il%2$s Report per maggiori dettagli.", - "CampaignsReportDocumentation": "Questo report mostra quali campagne hanno portato i visitatori sul tuo sito web. %1$s Per ulteriori informazioni sulle campagne di monitoraggio, leggi la %2$sdocumentazione campagne su piwik.org%3$s", + "CampaignsDocumentation": "Visitatori che sono arrivati sul tuo sito web a seguito di una campagna. %1$sVedi il%2$s report per maggiori dettagli.", + "CampaignsReportDocumentation": "Questo report mostra quali campagne hanno portato i visitatori sul tuo sito web. %1$sPer ulteriori informazioni sulle campagne di monitoraggio, leggi la %2$sdocumentazione campagne su piwik.org%3$s", "ColumnCampaign": "Campagna", "ColumnSearchEngine": "Motore di ricerca", "ColumnSocial": "Social network", @@ -27,7 +27,7 @@ "ReferrersOverview": "Panoramica Referenti", "ReferrerTypes": "Tipi di Referenti", "SearchEngines": "Motori di ricerca", - "SearchEnginesDocumentation": "Un visitatore è stato portato sul tuo sito da un motore di ricerca. %1$s Vedi il %2$s report per maggiori dettagli.", + "SearchEnginesDocumentation": "Un visitatore è stato portato sul tuo sito da un motore di ricerca. %1$s Vedi il%2$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", @@ -44,7 +44,7 @@ "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. %1$s Vedi il %2$s report per maggiori dettagli.", + "WebsitesDocumentation": "Il visitatore ha seguito un link su un altro sito web che lo ha portato sul tuo. %1$sVedi il%2$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", diff --git a/plugins/Referrers/lang/nl.json b/plugins/Referrers/lang/nl.json index 39be150270..61be153d4e 100644 --- a/plugins/Referrers/lang/nl.json +++ b/plugins/Referrers/lang/nl.json @@ -20,9 +20,9 @@ "EvolutionDocumentationMoreInfo": "Voor meer informatie over de verschillende soorten verwijzingen, zie de documentatie van de %s tabel.", "Keywords": "Sleutelwoorden", "KeywordsReportDocumentation": "Dit rapport toont de sleutelwoorden waarop men zocht en waarbij men werd doorverwezen naar uw website. %s Door op een rij in de tabel te klikken kunt u de verdeling van de zoekmachines zien die op deze sleutelwoorden naar uw website hebben doorverwezen.", - "Referrer": "Referer", + "Referrer": "Verwijzer", "ReferrerName": "Verwijzer Naam", - "Referrers": "Referrers", + "Referrers": "Herkomst", "ReferrersOverview": "Referer Overzicht", "ReferrerTypes": "Referrer Types", "SearchEngines": "Zoekmachines", diff --git a/plugins/Referrers/lang/uk.json b/plugins/Referrers/lang/uk.json index 9cf0a1fabe..e23ca82bee 100644 --- a/plugins/Referrers/lang/uk.json +++ b/plugins/Referrers/lang/uk.json @@ -1,28 +1,55 @@ { "Referrers": { + "AllReferrersReportDocumentation": "Цей звіт показує всіх реферів в одному зведеному звіті, перераховуючи всі Веб-сайти, Пошукові запити і Кампанії, якими користувалися відвідувачі, щоб знайти ваш сайт.", "Campaigns": "Кампанії", + "CampaignsDocumentation": "Відвідувач перейшов на ваш сайт з рекламної кампанії. %1$s Детальна інформація у звіті %2$s", + "CampaignsReportDocumentation": "Цей звіт показує, які рекламні кампанії привели відвідувачів на ваш сайт. %1$s Для більшої інформації про відстеження кампаній читайте %2$sДокументацію по кампаніям на сайті piwik.org%3$s", "ColumnCampaign": "Кампанія", - "ColumnSearchEngine": "Пошукова машина", - "ColumnWebsite": "Веб-сайт", - "ColumnWebsitePage": "Сторінка Веб-сайту", - "DirectEntry": "Прямі заходи", - "Distinct": "Унікальні реферери по типу реферера", - "DistinctCampaigns": "унікальні компанії", - "DistinctKeywords": "унікальні ключові слова", - "DistinctSearchEngines": "унікальні пошукові машини", - "DistinctWebsites": "унікальні веб-сайти", + "ColumnSearchEngine": "Пошукова система", + "ColumnSocial": "Сторінка соціальної мережі", + "ColumnWebsite": "Сайт", + "ColumnWebsitePage": "Сторінка сайту", + "DirectEntry": "Прямий вхід", + "DirectEntryDocumentation": "Відвідувач перейшов на ваш сайт за посиланням, вбивши її в адресний рядок браузера або по закладці, що називається прямим переходом.", + "Distinct": "Різні джерела по типу", + "DistinctCampaigns": "Різні кампанії", + "DistinctKeywords": "Різні ключові слова", + "DistinctSearchEngines": "Різні пошукові системи", + "DistinctWebsites": "Різні сайти", + "EvolutionDocumentation": "Це огляд джерел, з яких відвідувачі приходять на ваш сайт.", + "EvolutionDocumentationMoreInfo": "Більше інформації про різні типи джерел див. в документації по таблиці %s.", "Keywords": "Ключові слова", - "Referrers": "Реферер", + "KeywordsReportDocumentation": "Цей звіт показує ключові слова, які відвідувачі вашого сайту вводили в пошуковику, перш ніж потрапити на ваш сайт. %s Клікнувши на конкретний ряд таблиці, ви побачите розподіл ключового слова по пошуковим системам.", + "PluginDescription": "Повідомляє дані реферерів: Пошукові системи, Ключові слова, Веб-сайти, Кампанії, Соціальні медіа, Пряме введення.", + "Referrer": "Джерело", + "ReferrerName": "Ім'я джерела", + "Referrers": "Джерела трафіку", + "ReferrersOverview": "Огляд джерел", + "ReferrerTypes": "Дипи джерела", "SearchEngines": "Пошукові системи", + "SearchEnginesDocumentation": "Відвідувач перейшов на ваш сайт з пошукової системи. %1$s Детальна інформація у звіті %2$s.", + "SearchEnginesReportDocumentation": "Цей звіт показує, з яких пошукових систем прийшли відвідувачі. %s Клікнувши на конкретний ряд таблиці, ви побачите, що відвідувач шукав в пошуковій системі і що привело його на ваш сайт.", + "SocialFooterMessage": "Це підмножина сайтів зліва. Він відфільтровує інші сайти, так що ви можете порівняти свої соціальні мережі та джерела безпосередньо.", + "Socials": "Соціальні мережі", + "SocialsReportDocumentation": "Цей звіт показує, які соціальні мережі привели відвідувачів на ваш сайт.<br \/>Клікнувши на конкретний рядок таблиці, ви можете побачити, з яких саме сторінок соціальних мереж перейшли ці відвідувачі.", "SubmenuSearchEngines": "Пошукові системи і ключові слова", - "SubmenuWebsites": "Веб-сайти", - "Type": "Тип реферера", - "TypeCampaigns": "%s з кампаній", - "TypeDirectEntries": "%s прямих заходжень", - "TypeSearchEngines": "%s з пошукових систем", - "TypeWebsites": "%s з веб-сайтів", - "UsingNDistinctUrls": "(використовуючи %s унікальні URL)", + "SubmenuWebsites": "Сайти", + "Type": "Тип джерела", + "TypeCampaigns": "%s входів з кампаній", + "TypeDirectEntries": "%s прямих входів", + "TypeReportDocumentation": "Ця таблиця містить інформацію про розподіл типів джерел трафіку.", + "TypeSearchEngines": "%s входів з пошукових систем", + "TypeWebsites": "%s входів з сайтів", + "UsingNDistinctUrls": "(за %s різним посиланням)", + "ViewAllReferrers": "Подивитися всі джерела", + "ViewReferrersBy": "Подивитися джерела по %s", "Websites": "Сайти", - "WidgetExternalWebsites": "Список зовнішніх веб-сайтів" + "WebsitesDocumentation": "Відвідувач перейшов на ваш сайт за посиланням, яка перебувало на іншому сайті. %1$s Детальна інформація у звіті %2$s", + "WebsitesReportDocumentation": "У цій таблиці ви можете бачити сайти, які привели відвідувачів на ваш сайт. %s Клікнувши на таблиці по конкретному рядку, ви побачите де було розміщене посилання на ваш сайт.", + "WidgetExternalWebsites": "Зовнішні сайти", + "WidgetGetAll": "Всі джерела трафіку", + "WidgetSocials": "Список соціальних мереж", + "WidgetTopKeywordsForPages": "Топ ключових слів для сторінки URL", + "XPercentOfVisits": "%s відвідувань" } }
\ No newline at end of file diff --git a/plugins/Referrers/tests/Integration/Columns/ReferrerKeywordTest.php b/plugins/Referrers/tests/Integration/Columns/ReferrerKeywordTest.php index f5ff10e11c..1e7e4af8cb 100644 --- a/plugins/Referrers/tests/Integration/Columns/ReferrerKeywordTest.php +++ b/plugins/Referrers/tests/Integration/Columns/ReferrerKeywordTest.php @@ -38,7 +38,7 @@ class ReferrerKeywordTest extends IntegrationTestCase $ecommerce = false; Fixture::createWebsite($date, $ecommerce, $name = 'test1', $url = 'http://piwik.org/'); - Fixture::createWebsite($date, $ecommerce, $name = 'test3', $url = 'http://piwik.pro/'); + Fixture::createWebsite($date, $ecommerce, $name = 'test3', $url = 'http://piwik.xyz/'); $this->keyword = new Keyword(); } diff --git a/plugins/Referrers/tests/Integration/Columns/ReferrerNameTest.php b/plugins/Referrers/tests/Integration/Columns/ReferrerNameTest.php index f118e14ba6..cd1610a178 100644 --- a/plugins/Referrers/tests/Integration/Columns/ReferrerNameTest.php +++ b/plugins/Referrers/tests/Integration/Columns/ReferrerNameTest.php @@ -44,7 +44,7 @@ class ReferrerNameTest extends IntegrationTestCase Fixture::createWebsite($date, $ecommerce, $name = 'test1', $url = 'http://piwik.org/foo/bar'); Fixture::createWebsite($date, $ecommerce, $name = 'test2', $url = 'http://piwik.org/'); - Fixture::createWebsite($date, $ecommerce, $name = 'test3', $url = 'http://piwik.pro/'); + Fixture::createWebsite($date, $ecommerce, $name = 'test3', $url = 'http://piwik.xyz/'); $this->referrerName = new ReferrerName(); } diff --git a/plugins/Referrers/tests/Integration/Columns/ReferrerTypeTest.php b/plugins/Referrers/tests/Integration/Columns/ReferrerTypeTest.php index 5925dbc5c0..63da107af5 100644 --- a/plugins/Referrers/tests/Integration/Columns/ReferrerTypeTest.php +++ b/plugins/Referrers/tests/Integration/Columns/ReferrerTypeTest.php @@ -32,6 +32,7 @@ class ReferrerTypeTest extends IntegrationTestCase private $idSite1 = 1; private $idSite2 = 2; private $idSite3 = 3; + private $idSite4 = 4; public function setUp() { @@ -44,7 +45,8 @@ class ReferrerTypeTest extends IntegrationTestCase Fixture::createWebsite($date, $ecommerce, $name = 'test1', $url = 'http://piwik.org/foo/bar'); Fixture::createWebsite($date, $ecommerce, $name = 'test2', $url = 'http://piwik.org/'); - Fixture::createWebsite($date, $ecommerce, $name = 'test3', $url = 'http://piwik.pro/'); + Fixture::createWebsite($date, $ecommerce, $name = 'test3', $url = 'http://piwik.xyz/'); + Fixture::createWebsite($date, $ecommerce, $name = 'test4', $url = 'http://google.com/subdir/', 1, null, null, null, null, $excludeUnknownUrls = 1); $this->referrerType = new ReferrerType(); } @@ -112,6 +114,19 @@ class ReferrerTypeTest extends IntegrationTestCase // testing case where domain of referrer is not known to any site but neither is the URL, url != urlref array(Common::REFERRER_TYPE_WEBSITE, $this->idSite3, 'http://example.org', 'http://example.com/bar'), + + ####### testing specific case: + ## - ignore unknown urls is activated for idSite4 + + // referrer comes from another subdir, but same host => external website + array(Common::REFERRER_TYPE_WEBSITE, $this->idSite4, 'http://google.com/subdir/site', 'http://google.com/base'), + // referrer comes from same subdir and host => direct entry + array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/page', 'http://google.com/subdir/x'), + array(Common::REFERRER_TYPE_DIRECT_ENTRY, $this->idSite4, 'http://google.com/subdir/', 'http://google.com/subdir/?q=test'), + // referrer comes from another subdir, but same host, query matches search engine definition => search engine + array(Common::REFERRER_TYPE_SEARCH_ENGINE, $this->idSite4, 'http://google.com/subdir/index.html', 'http://google.com/search?q=test'), + // referrer comes from search engine not matching site + array(Common::REFERRER_TYPE_SEARCH_ENGINE, $this->idSite4, 'http://google.com/subdir/index.html', 'http://google.fr/search?q=test') ); } diff --git a/plugins/Referrers/tests/Unit/SearchEngineTest.php b/plugins/Referrers/tests/Unit/SearchEngineTest.php index e9f0c926ea..1b5cab4dbc 100644 --- a/plugins/Referrers/tests/Unit/SearchEngineTest.php +++ b/plugins/Referrers/tests/Unit/SearchEngineTest.php @@ -121,7 +121,7 @@ class SearchEngineTest extends \PHPUnit_Framework_TestCase public function testMissingSearchEngineKeyword($url, $searchEngine) { $name = parse_url('http://' . $url); - $this->assertTrue(!empty($searchEngine['params']), $name['host']); + $this->assertTrue(!empty($searchEngine['params']) || !empty($searchEngine['hiddenkeyword']), $name['host']); } /** |