Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsgiehl <stefan@piwik.org>2015-10-31 23:45:57 +0300
committersgiehl <stefan@piwik.org>2015-11-19 01:39:26 +0300
commit1e2adec1e58eb24b3df15cf443e615ea72846ab7 (patch)
tree787c62c5e75b5fc4ca8af11288b48a374b38c7df
parent34b954122a534ed7e5d18f7e8ab27f0da6fbd2c0 (diff)
moved more SearchEngine stuff to new class
-rw-r--r--plugins/Referrers/API.php8
-rw-r--r--plugins/Referrers/DataTable/Filter/KeywordsFromSearchEngineId.php3
-rw-r--r--plugins/Referrers/DataTable/Filter/SearchEnginesFromKeywordId.php7
-rw-r--r--plugins/Referrers/SearchEngine.php95
-rw-r--r--plugins/Referrers/Visitor.php6
-rw-r--r--plugins/Referrers/functions.php105
-rw-r--r--plugins/Referrers/tests/Unit/ReferrersTest.php42
-rw-r--r--plugins/Referrers/tests/Unit/SearchEngineTest.php22
-rw-r--r--plugins/SEO/Metric/Alexa.php3
-rw-r--r--plugins/SEO/Metric/Bing.php3
-rw-r--r--plugins/SEO/Metric/Dmoz.php3
-rw-r--r--plugins/SEO/Metric/Google.php3
12 files changed, 138 insertions, 162 deletions
diff --git a/plugins/Referrers/API.php b/plugins/Referrers/API.php
index efda586585..6d8fc9b936 100644
--- a/plugins/Referrers/API.php
+++ b/plugins/Referrers/API.php
@@ -230,14 +230,14 @@ class API extends \Piwik\Plugin\API
$dataTable = Archive::createDataTableFromArchive(Archiver::SEARCH_ENGINES_RECORD_NAME, $idSite, $period, $date, $segment, $expanded, $flat);
if ($flat) {
- $dataTable->filter('ColumnCallbackAddMetadata', array('label', 'url', __NAMESPACE__ . '\getSearchEngineUrlFromName'));
- $dataTable->filter('MetadataCallbackAddMetadata', array('url', 'logo', __NAMESPACE__ . '\getSearchEngineLogoFromUrl'));
+ $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', __NAMESPACE__ . '\getSearchEngineUrlFromName'));
- $dataTable->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', __NAMESPACE__ . '\getSearchEngineLogoFromUrl'));
+ $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;
diff --git a/plugins/Referrers/DataTable/Filter/KeywordsFromSearchEngineId.php b/plugins/Referrers/DataTable/Filter/KeywordsFromSearchEngineId.php
index 1688713a86..789a1b1a6a 100644
--- a/plugins/Referrers/DataTable/Filter/KeywordsFromSearchEngineId.php
+++ b/plugins/Referrers/DataTable/Filter/KeywordsFromSearchEngineId.php
@@ -11,6 +11,7 @@ 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
{
@@ -47,7 +48,7 @@ class KeywordsFromSearchEngineId extends BaseFilter
if (!empty($subTableRow)) {
$searchEngineUrl = $subTableRow->getMetadata('url');
- $table->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', 'Piwik\Plugins\Referrers\getSearchEngineUrlFromKeywordAndUrl', array($searchEngineUrl)));
+ $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) {
diff --git a/plugins/Referrers/DataTable/Filter/SearchEnginesFromKeywordId.php b/plugins/Referrers/DataTable/Filter/SearchEnginesFromKeywordId.php
index feab8636af..6d395abba0 100644
--- a/plugins/Referrers/DataTable/Filter/SearchEnginesFromKeywordId.php
+++ b/plugins/Referrers/DataTable/Filter/SearchEnginesFromKeywordId.php
@@ -11,6 +11,7 @@ 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
{
@@ -44,14 +45,14 @@ class SearchEnginesFromKeywordId extends BaseFilter
{
$idSubtable = $this->idSubtable ? : $table->getId();
- $table->queueFilter('ColumnCallbackAddMetadata', array('label', 'url', 'Piwik\Plugins\Referrers\getSearchEngineUrlFromName'));
- $table->queueFilter('MetadataCallbackAddMetadata', array('url', 'logo', 'Piwik\Plugins\Referrers\getSearchEngineLogoFromUrl'));
+ $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', 'Piwik\Plugins\Referrers\getSearchEngineUrlFromUrlAndKeyword', array($keyword)));
+ $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) {
diff --git a/plugins/Referrers/SearchEngine.php b/plugins/Referrers/SearchEngine.php
index f2f12fe63c..81c53f8db7 100644
--- a/plugins/Referrers/SearchEngine.php
+++ b/plugins/Referrers/SearchEngine.php
@@ -161,6 +161,22 @@ class SearchEngine extends Singleton
}
/**
+ * Returns defined backlink for the given search engine host
+ * @param string $host
+ * @return string|null
+ */
+ public function getBackLinkPatternByHost($host)
+ {
+ $definition = $this->getDefinitionByHost($host);
+
+ if (empty($definition['backlink'])) {
+ return null;
+ }
+
+ return $definition['backlink'];
+ }
+
+ /**
* Returns defined charsets for given search engine host
*
* @param string $host
@@ -394,4 +410,83 @@ class SearchEngine extends Singleton
);
}
+ /**
+ * Return search engine URL by name
+ *
+ * @see core/DataFiles/SearchEnginges.php
+ *
+ * @param string $name
+ * @return string URL
+ */
+ public function getUrlFromName($name)
+ {
+ $searchEngineNames = $this->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
+ */
+ 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);
+ $path = SearchEngine::getInstance()->getBackLinkPatternByHost($host);
+ if (empty($path)) {
+ return false;
+ }
+ $path = str_replace("{k}", $keyword, $path);
+ return $url . (substr($url, -1) != '/' ? '/' : '') . $path;
+ }
}
diff --git a/plugins/Referrers/Visitor.php b/plugins/Referrers/Visitor.php
index 308c7b08f8..b10b9b953d 100644
--- a/plugins/Referrers/Visitor.php
+++ b/plugins/Referrers/Visitor.php
@@ -62,7 +62,7 @@ class Visitor
) {
$refUrl = @parse_url($this->details['referer_url']);
if (isset($refUrl['host'])) {
- $url = getSearchEngineUrlFromUrlAndKeyword('http://google.com', $this->getKeyword());
+ $url = SearchEngine::getInstance()->getBackLinkFromUrlAndKeyword('http://google.com', $this->getKeyword());
$url = str_replace('google.com', $refUrl['host'], $url);
return $url;
@@ -109,7 +109,7 @@ class Visitor
&& !empty($this->details['referer_name'])
) {
- return getSearchEngineUrlFromName($this->details['referer_name']);
+ return SearchEngine::getInstance()->getUrlFromName($this->details['referer_name']);
}
return null;
@@ -121,7 +121,7 @@ class Visitor
if (!is_null($searchEngineUrl)) {
- return getSearchEngineLogoFromUrl($searchEngineUrl);
+ return SearchEngine::getInstance()->getLogoFromUrl($searchEngineUrl);
}
return null;
diff --git a/plugins/Referrers/functions.php b/plugins/Referrers/functions.php
index bce573be7e..c91ebc816d 100644
--- a/plugins/Referrers/functions.php
+++ b/plugins/Referrers/functions.php
@@ -28,111 +28,6 @@ function getPathFromUrl($url)
}
/**
- * Return search engine URL by name
- *
- * @see core/DataFiles/SearchEnginges.php
- *
- * @param string $name
- * @return string URL
- */
-function getSearchEngineUrlFromName($name)
-{
- $searchEngineNames = SearchEngine::getInstance()->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 = SearchEngine::getInstance()->getSearchEngineDefinitions();
- $keyword = urlencode($keyword);
- $keyword = str_replace(urlencode('+'), urlencode(' '), $keyword);
- $path = @$searchEngineUrls[getSearchEngineHostPathFromUrl($url)]['backlink'];
- 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
*
* @param string $label
diff --git a/plugins/Referrers/tests/Unit/ReferrersTest.php b/plugins/Referrers/tests/Unit/ReferrersTest.php
index abd4214895..15bbf72ec1 100644
--- a/plugins/Referrers/tests/Unit/ReferrersTest.php
+++ b/plugins/Referrers/tests/Unit/ReferrersTest.php
@@ -113,48 +113,6 @@ class ReferrersTest extends \PHPUnit_Framework_TestCase
}
}
- /**
- * get search engine host from url
- *
- * @group Plugins
- */
- public function testGetSearchEngineHostFromUrl()
- {
- $data = array(
- 'http://www.google.com/cse' => array('www.google.com', 'www.google.com/cse'),
- 'http://www.google.com' => array('www.google.com', 'www.google.com'),
- );
-
- foreach ($data as $url => $expected) {
- $this->assertEquals($expected[0], \Piwik\Plugins\Referrers\getSearchEngineHostFromUrl($url));
- $this->assertEquals($expected[1], \Piwik\Plugins\Referrers\getSearchEngineHostPathFromUrl($url));
- }
- }
-
- /**
- * Dataprovider for testGetSearchEngineUrlFromUrlAndKeyword
- */
- public function getSearchEngineUrlFromUrlAndKeywordTestData()
- {
- return array(
- array('http://apollo.lv/portal/search/', 'piwik', 'http://apollo.lv/portal/search/?cof=FORID%3A11&q=piwik&search_where=www'),
- array('http://bing.com/images/search', 'piwik', 'http://bing.com/images/search/?q=piwik'),
- array('http://google.com', 'piwik', 'http://google.com/search?q=piwik'),
- );
- }
-
- /**
- * get search engine url from name and keyword
- *
- * @group Plugins
- *
- * @dataProvider getSearchEngineUrlFromUrlAndKeywordTestData
- */
- public function testGetSearchEngineUrlFromUrlAndKeyword($url, $keyword, $expected)
- {
- $this->assertEquals($expected, \Piwik\Plugins\Referrers\getSearchEngineUrlFromUrlAndKeyword($url, $keyword));
- }
-
public function removeUrlProtocolTestData()
{
return array(
diff --git a/plugins/Referrers/tests/Unit/SearchEngineTest.php b/plugins/Referrers/tests/Unit/SearchEngineTest.php
index 508068feda..039bc1fc6e 100644
--- a/plugins/Referrers/tests/Unit/SearchEngineTest.php
+++ b/plugins/Referrers/tests/Unit/SearchEngineTest.php
@@ -78,4 +78,26 @@ class SearchEngineTest extends \PHPUnit_Framework_TestCase
}
}
}
+
+ /**
+ * Dataprovider for testGetBackLinkFromUrlAndKeyword
+ */
+ public function getBackLinkFromUrlAndKeywordTestData()
+ {
+ return array(
+ array('http://apollo.lv/portal/search/', 'piwik', 'http://apollo.lv/portal/search/?cof=FORID%3A11&q=piwik&search_where=www'),
+ array('http://bing.com/images/search', 'piwik', 'http://bing.com/images/search/?q=piwik'),
+ array('http://google.com', 'piwik', 'http://google.com/search?q=piwik'),
+ );
+ }
+
+ /**
+ * get search engine url from name and keyword
+ *
+ * @dataProvider getBackLinkFromUrlAndKeywordTestData
+ */
+ public function testGetBackLinkFromUrlAndKeyword($url, $keyword, $expected)
+ {
+ $this->assertEquals($expected, SearchEngine::getInstance()->getBackLinkFromUrlAndKeyword($url, $keyword));
+ }
} \ No newline at end of file
diff --git a/plugins/SEO/Metric/Alexa.php b/plugins/SEO/Metric/Alexa.php
index 87c5785d36..e8f7956241 100644
--- a/plugins/SEO/Metric/Alexa.php
+++ b/plugins/SEO/Metric/Alexa.php
@@ -10,6 +10,7 @@ namespace Piwik\Plugins\SEO\Metric;
use Piwik\Http;
use Piwik\NumberFormatter;
+use Piwik\Plugins\Referrers\SearchEngine;
use Psr\Log\LoggerInterface;
/**
@@ -42,7 +43,7 @@ class Alexa implements MetricsProvider
$value = null;
}
- $logo = \Piwik\Plugins\Referrers\getSearchEngineLogoFromUrl('http://alexa.com');
+ $logo = SearchEngine::getInstance()->getLogoFromUrl('http://alexa.com');
$link = self::LINK . urlencode($domain);
return array(
diff --git a/plugins/SEO/Metric/Bing.php b/plugins/SEO/Metric/Bing.php
index e85d585c13..71553ffc6e 100644
--- a/plugins/SEO/Metric/Bing.php
+++ b/plugins/SEO/Metric/Bing.php
@@ -10,6 +10,7 @@ namespace Piwik\Plugins\SEO\Metric;
use Piwik\Http;
use Piwik\NumberFormatter;
+use Piwik\Plugins\Referrers\SearchEngine;
use Psr\Log\LoggerInterface;
/**
@@ -46,7 +47,7 @@ class Bing implements MetricsProvider
$pageCount = null;
}
- $logo = \Piwik\Plugins\Referrers\getSearchEngineLogoFromUrl('http://bing.com');
+ $logo = SearchEngine::getInstance()->getLogoFromUrl('http://bing.com');
return array(
new Metric('bing-index', 'SEO_Bing_IndexedPages', $pageCount, $logo, null, null, 'General_Pages')
diff --git a/plugins/SEO/Metric/Dmoz.php b/plugins/SEO/Metric/Dmoz.php
index d21be1e5ca..c7b8860a89 100644
--- a/plugins/SEO/Metric/Dmoz.php
+++ b/plugins/SEO/Metric/Dmoz.php
@@ -10,6 +10,7 @@ namespace Piwik\Plugins\SEO\Metric;
use Piwik\Http;
use Piwik\NumberFormatter;
+use Piwik\Plugins\Referrers\SearchEngine;
use Psr\Log\LoggerInterface;
/**
@@ -53,7 +54,7 @@ class Dmoz implements MetricsProvider
$value = null;
}
- $logo = \Piwik\Plugins\Referrers\getSearchEngineLogoFromUrl('http://dmoz.org');
+ $logo = SearchEngine::getInstance()->getLogoFromUrl('http://dmoz.org');
return array(
new Metric('dmoz', 'SEO_Dmoz', $value, $logo)
diff --git a/plugins/SEO/Metric/Google.php b/plugins/SEO/Metric/Google.php
index cec1d96af9..7abd82b371 100644
--- a/plugins/SEO/Metric/Google.php
+++ b/plugins/SEO/Metric/Google.php
@@ -10,6 +10,7 @@ namespace Piwik\Plugins\SEO\Metric;
use Piwik\Http;
use Piwik\NumberFormatter;
+use Piwik\Plugins\Referrers\SearchEngine;
use Psr\Log\LoggerInterface;
/**
@@ -37,7 +38,7 @@ class Google implements MetricsProvider
$pageCount = $this->fetchIndexedPagesCount($domain);
$pageRank = $this->fetchPageRank($domain);
- $logo = \Piwik\Plugins\Referrers\getSearchEngineLogoFromUrl('http://google.com');
+ $logo = SearchEngine::getInstance()->getLogoFromUrl('http://google.com');
return array(
new Metric('google-index', 'SEO_Google_IndexedPages', $pageCount, $logo, null, null, 'General_Pages'),