diff options
author | mattab <matthieu.aubry@gmail.com> | 2013-03-28 03:42:39 +0400 |
---|---|---|
committer | mattab <matthieu.aubry@gmail.com> | 2013-03-28 03:42:40 +0400 |
commit | ae4b03163792f0b6e933933e5d37df87dc3fd566 (patch) | |
tree | d1d7510a9728f587d3d63ebd03e4ecf3d904838b /plugins/SEO | |
parent | 158c2150f5f2e13ece459b8d131244c11b763997 (diff) |
Mass conversion of all files to the newly agreed coding standard: PSR 1/2
Converting Piwik core source files, PHP, JS, TPL, CSS
More info: http://piwik.org/participate/coding-standards/
Diffstat (limited to 'plugins/SEO')
-rw-r--r-- | plugins/SEO/API.php | 153 | ||||
-rw-r--r-- | plugins/SEO/Controller.php | 55 | ||||
-rw-r--r-- | plugins/SEO/MajesticClient.php | 154 | ||||
-rw-r--r-- | plugins/SEO/RankChecker.php | 379 | ||||
-rw-r--r-- | plugins/SEO/SEO.php | 44 | ||||
-rw-r--r-- | plugins/SEO/templates/index.tpl | 78 | ||||
-rw-r--r-- | plugins/SEO/templates/rank.js | 2 |
7 files changed, 430 insertions, 435 deletions
diff --git a/plugins/SEO/API.php b/plugins/SEO/API.php index 62613f3de5..26ac00c5bd 100644 --- a/plugins/SEO/API.php +++ b/plugins/SEO/API.php @@ -17,92 +17,91 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/Referers/functions.php'; /** * The SEO API lets you access a list of SEO metrics for the specified URL: Google Pagerank, Goolge/Bing indexed pages * Alexa Rank, age of the Domain name and count of DMOZ entries. - * + * * @package Piwik_SEO */ -class Piwik_SEO_API +class Piwik_SEO_API { - static private $instance = null; - /** - * @return Piwik_SEO_API - */ - static public function getInstance() - { - if (self::$instance == null) - { - self::$instance = new self; - } - return self::$instance; - } - - /** - * Returns SEO statistics for a URL. - * - * @param string $url URL to request SEO stats for - * @return Piwik_DataTable - */ - public function getRank( $url ) - { - Piwik::checkUserHasSomeViewAccess(); - $rank = new Piwik_SEO_RankChecker($url); - - $linkToMajestic = Piwik_SEO_MajesticClient::getLinkForUrl($url); - - $data = array( - 'Google PageRank' => array( - 'rank' => $rank->getPageRank(), - 'logo' => Piwik_getSearchEngineLogoFromUrl('http://google.com'), - 'id' => 'pagerank' - ), + static private $instance = null; + + /** + * @return Piwik_SEO_API + */ + static public function getInstance() + { + if (self::$instance == null) { + self::$instance = new self; + } + return self::$instance; + } + + /** + * Returns SEO statistics for a URL. + * + * @param string $url URL to request SEO stats for + * @return Piwik_DataTable + */ + public function getRank($url) + { + Piwik::checkUserHasSomeViewAccess(); + $rank = new Piwik_SEO_RankChecker($url); + + $linkToMajestic = Piwik_SEO_MajesticClient::getLinkForUrl($url); + + $data = array( + 'Google PageRank' => array( + 'rank' => $rank->getPageRank(), + 'logo' => Piwik_getSearchEngineLogoFromUrl('http://google.com'), + 'id' => 'pagerank' + ), Piwik_Translate('SEO_Google_IndexedPages') => array( 'rank' => $rank->getIndexedPagesGoogle(), 'logo' => Piwik_getSearchEngineLogoFromUrl('http://google.com'), - 'id' => 'google-index', + 'id' => 'google-index', ), - Piwik_Translate('SEO_Bing_IndexedPages') => array( + Piwik_Translate('SEO_Bing_IndexedPages') => array( 'rank' => $rank->getIndexedPagesBing(), 'logo' => Piwik_getSearchEngineLogoFromUrl('http://bing.com'), - 'id' => 'bing-index', - ), - Piwik_Translate('SEO_AlexaRank') => array( - 'rank' => $rank->getAlexaRank(), - 'logo' => Piwik_getSearchEngineLogoFromUrl('http://alexa.com'), - 'id' => 'alexa', - ), - Piwik_Translate('SEO_DomainAge') => array( - 'rank' => $rank->getAge(), - 'logo' => 'plugins/SEO/images/whois.png', - 'id' => 'domain-age', - ), - Piwik_Translate('SEO_ExternalBacklinks') => array( - 'rank' => $rank->getExternalBacklinkCount(), - 'logo' => 'plugins/SEO/images/majesticseo.png', - 'logo_link' => $linkToMajestic, - 'logo_tooltip' => Piwik_Translate('SEO_ViewBacklinksOnMajesticSEO'), - 'id' => 'external-backlinks', - ), - Piwik_Translate('SEO_ReferrerDomains') => array( - 'rank' => $rank->getReferrerDomainCount(), - 'logo' => 'plugins/SEO/images/majesticseo.png', - 'logo_link' => $linkToMajestic, - 'logo_tooltip' => Piwik_Translate('SEO_ViewBacklinksOnMajesticSEO'), - 'id' => 'referrer-domains', - ), - ); + 'id' => 'bing-index', + ), + Piwik_Translate('SEO_AlexaRank') => array( + 'rank' => $rank->getAlexaRank(), + 'logo' => Piwik_getSearchEngineLogoFromUrl('http://alexa.com'), + 'id' => 'alexa', + ), + Piwik_Translate('SEO_DomainAge') => array( + 'rank' => $rank->getAge(), + 'logo' => 'plugins/SEO/images/whois.png', + 'id' => 'domain-age', + ), + Piwik_Translate('SEO_ExternalBacklinks') => array( + 'rank' => $rank->getExternalBacklinkCount(), + 'logo' => 'plugins/SEO/images/majesticseo.png', + 'logo_link' => $linkToMajestic, + 'logo_tooltip' => Piwik_Translate('SEO_ViewBacklinksOnMajesticSEO'), + 'id' => 'external-backlinks', + ), + Piwik_Translate('SEO_ReferrerDomains') => array( + 'rank' => $rank->getReferrerDomainCount(), + 'logo' => 'plugins/SEO/images/majesticseo.png', + 'logo_link' => $linkToMajestic, + 'logo_tooltip' => Piwik_Translate('SEO_ViewBacklinksOnMajesticSEO'), + 'id' => 'referrer-domains', + ), + ); - // Add DMOZ only if > 0 entries found - $dmozRank = array( - 'rank' => $rank->getDmoz(), - 'logo' => Piwik_getSearchEngineLogoFromUrl('http://dmoz.org'), - 'id' => 'dmoz', - ); - if($dmozRank['rank'] > 0) - { - $data[Piwik_Translate('SEO_Dmoz')] = $dmozRank; - } + // Add DMOZ only if > 0 entries found + $dmozRank = array( + 'rank' => $rank->getDmoz(), + 'logo' => Piwik_getSearchEngineLogoFromUrl('http://dmoz.org'), + 'id' => 'dmoz', + ); + if ($dmozRank['rank'] > 0) { + $data[Piwik_Translate('SEO_Dmoz')] = $dmozRank; + } - $dataTable = new Piwik_DataTable(); - $dataTable->addRowsFromArrayWithIndexLabel($data); - return $dataTable; - } + $dataTable = new Piwik_DataTable(); + $dataTable->addRowsFromArrayWithIndexLabel($data); + return $dataTable; + } } diff --git a/plugins/SEO/Controller.php b/plugins/SEO/Controller.php index 53a749e2d3..f0e75f8200 100644 --- a/plugins/SEO/Controller.php +++ b/plugins/SEO/Controller.php @@ -1,43 +1,42 @@ <?php /** * Piwik - Open source web analytics - * + * * @link http://piwik.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - * + * * @category Piwik_Plugins * @package Piwik_SEO */ - + /** * @package Piwik_SEO */ class Piwik_SEO_Controller extends Piwik_Controller -{ - function getRank() - { - $idSite = Piwik_Common::getRequestVar('idSite'); - $site = new Piwik_Site($idSite); +{ + function getRank() + { + $idSite = Piwik_Common::getRequestVar('idSite'); + $site = new Piwik_Site($idSite); + + $url = urldecode(Piwik_Common::getRequestVar('url', '', 'string')); + + if (!empty($url) && strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0) { + $url = 'http://' . $url; + } + + if (empty($url) || !Piwik_Common::isLookLikeUrl($url)) { + $url = $site->getMainUrl(); + } + + $dataTable = Piwik_SEO_API::getInstance()->getRank($url); - $url = urldecode(Piwik_Common::getRequestVar('url', '', 'string')); - - if(!empty($url) && strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0) { - $url = 'http://'.$url; - } - - if(empty($url) || !Piwik_Common::isLookLikeUrl($url)) - { - $url = $site->getMainUrl(); - } + $view = Piwik_View::factory('index'); + $view->urlToRank = Piwik_SEO_RankChecker::extractDomainFromUrl($url); - $dataTable = Piwik_SEO_API::getInstance()->getRank($url); - - $view = Piwik_View::factory('index'); - $view->urlToRank = Piwik_SEO_RankChecker::extractDomainFromUrl($url); - - $renderer = Piwik_DataTable_Renderer::factory('php'); - $renderer->setSerialize(false); - $view->ranks = $renderer->render($dataTable); - echo $view->render(); - } + $renderer = Piwik_DataTable_Renderer::factory('php'); + $renderer->setSerialize(false); + $view->ranks = $renderer->render($dataTable); + echo $view->render(); + } } diff --git a/plugins/SEO/MajesticClient.php b/plugins/SEO/MajesticClient.php index 61ab4d2d29..f6678be192 100644 --- a/plugins/SEO/MajesticClient.php +++ b/plugins/SEO/MajesticClient.php @@ -11,85 +11,85 @@ /** * Client for Majestic SEO's HTTP API. - * + * * Hides the HTTP request sending logic. */ class Piwik_SEO_MajesticClient { - const API_BASE = 'http://simpleapi.majesticseo.com/sapi/'; - const API_KEY = 'ETHPYY'; // please only use this key within Piwik - - /** - * Returns a URL that can be used to view all SEO data for a particular website. - * - * @param string $targetSiteUrl The URL of the website for whom SEO stats should be - * accessible for. - * @return string - */ - public static function getLinkForUrl( $targetSiteUrl ) - { - $domain = @parse_url($targetSiteUrl, PHP_URL_HOST); - return "http://www.majesticseo.com/reports/site-explorer/summary/$domain?IndexDataSource=F"; - } - - /** - * Returns backlink statistics including the count of backlinks and count of - * referrer domains (domains with backlinks). - * - * This method issues an HTTP request and waits for it to return. - * - * @param string $siteDomain The domain of the website to get stats for. - * @param int $timeout The number of seconds to wait before aborting - * the HTTP request. - * @return array An array containing the backlink count and referrer - * domain count: - * array( - * 'backlink_count' => X, - * 'referrer_domains_count' => Y - * ) - * If either stat is false, either the API returned an - * error, or the IP was blocked for this request. - */ - public function getBacklinkStats( $siteDomain, $timeout = 300 ) - { - $apiUrl = $this->getApiUrl($method = 'GetBacklinkStats', $args = array( - 'items' => '1', - 'item0' => $siteDomain - )); - $apiResponse = Piwik_Http::sendHttpRequest($apiUrl, $timeout); - - $result = array( - 'backlink_count' => false, - 'referrer_domains_count' => false - ); - - $apiResponse = Piwik_Common::json_decode($apiResponse, $assoc = true); - if (!empty($apiResponse) - && !empty($apiResponse['Data'])) - { - $siteSeoStats = reset($apiResponse['Data']); - - if (isset($siteSeoStats['ExtBackLinks']) - && $siteSeoStats['ExtBackLinks'] !== -1) - { - $result['backlink_count'] = $siteSeoStats['ExtBackLinks']; - } - - if (isset($siteSeoStats['RefDomains']) - && $siteSeoStats['RefDomains'] !== -1) - { - $result['referrer_domains_count'] = $siteSeoStats['RefDomains']; - } - } - - return $result; - } - - private function getApiUrl( $method, $args = array() ) - { - $args['sak'] = self::API_KEY; - - $queryString = http_build_query($args); - return self::API_BASE.$method.'?'.$queryString; - } + const API_BASE = 'http://simpleapi.majesticseo.com/sapi/'; + const API_KEY = 'ETHPYY'; // please only use this key within Piwik + + /** + * Returns a URL that can be used to view all SEO data for a particular website. + * + * @param string $targetSiteUrl The URL of the website for whom SEO stats should be + * accessible for. + * @return string + */ + public static function getLinkForUrl($targetSiteUrl) + { + $domain = @parse_url($targetSiteUrl, PHP_URL_HOST); + return "http://www.majesticseo.com/reports/site-explorer/summary/$domain?IndexDataSource=F"; + } + + /** + * Returns backlink statistics including the count of backlinks and count of + * referrer domains (domains with backlinks). + * + * This method issues an HTTP request and waits for it to return. + * + * @param string $siteDomain The domain of the website to get stats for. + * @param int $timeout The number of seconds to wait before aborting + * the HTTP request. + * @return array An array containing the backlink count and referrer + * domain count: + * array( + * 'backlink_count' => X, + * 'referrer_domains_count' => Y + * ) + * If either stat is false, either the API returned an + * error, or the IP was blocked for this request. + */ + public function getBacklinkStats($siteDomain, $timeout = 300) + { + $apiUrl = $this->getApiUrl($method = 'GetBacklinkStats', $args = array( + 'items' => '1', + 'item0' => $siteDomain + )); + $apiResponse = Piwik_Http::sendHttpRequest($apiUrl, $timeout); + + $result = array( + 'backlink_count' => false, + 'referrer_domains_count' => false + ); + + $apiResponse = Piwik_Common::json_decode($apiResponse, $assoc = true); + if (!empty($apiResponse) + && !empty($apiResponse['Data']) + ) { + $siteSeoStats = reset($apiResponse['Data']); + + if (isset($siteSeoStats['ExtBackLinks']) + && $siteSeoStats['ExtBackLinks'] !== -1 + ) { + $result['backlink_count'] = $siteSeoStats['ExtBackLinks']; + } + + if (isset($siteSeoStats['RefDomains']) + && $siteSeoStats['RefDomains'] !== -1 + ) { + $result['referrer_domains_count'] = $siteSeoStats['RefDomains']; + } + } + + return $result; + } + + private function getApiUrl($method, $args = array()) + { + $args['sak'] = self::API_KEY; + + $queryString = http_build_query($args); + return self::API_BASE . $method . '?' . $queryString; + } } diff --git a/plugins/SEO/RankChecker.php b/plugins/SEO/RankChecker.php index da9fa0cf60..57512c4e8f 100644 --- a/plugins/SEO/RankChecker.php +++ b/plugins/SEO/RankChecker.php @@ -20,46 +20,46 @@ */ class Piwik_SEO_RankChecker { - private $url; - private $majesticInfo = null; - - public function __construct($url) - { - $this->url = self::extractDomainFromUrl($url); - } - - /** - * Extract domain from URL as the web services generally - * expect only a domain name (i.e., no protocol, port, path, query, etc). - * - * @param string $url - * @return string - */ - static public function extractDomainFromUrl($url) - { - return preg_replace( - array( - '~^https?\://~si', // strip protocol - '~[/:#?;%&].*~', // strip port, path, query, anchor, etc - '~\.$~', // trailing period - ), - '', $url); - } - - /** - * Web service proxy that retrieves the content at the specified URL - * - * @param string $url - * @return string - */ - private function getPage($url) - { - try { - return str_replace(' ', ' ', Piwik_Http::sendHttpRequest($url, $timeout = 10, @$_SERVER['HTTP_USER_AGENT'])); - } catch(Exception $e) { - return ''; - } - } + private $url; + private $majesticInfo = null; + + public function __construct($url) + { + $this->url = self::extractDomainFromUrl($url); + } + + /** + * Extract domain from URL as the web services generally + * expect only a domain name (i.e., no protocol, port, path, query, etc). + * + * @param string $url + * @return string + */ + static public function extractDomainFromUrl($url) + { + return preg_replace( + array( + '~^https?\://~si', // strip protocol + '~[/:#?;%&].*~', // strip port, path, query, anchor, etc + '~\.$~', // trailing period + ), + '', $url); + } + + /** + * Web service proxy that retrieves the content at the specified URL + * + * @param string $url + * @return string + */ + private function getPage($url) + { + try { + return str_replace(' ', ' ', Piwik_Http::sendHttpRequest($url, $timeout = 10, @$_SERVER['HTTP_USER_AGENT'])); + } catch (Exception $e) { + return ''; + } + } /** * Returns the google page rank for the current url @@ -67,16 +67,16 @@ class Piwik_SEO_RankChecker * @return int */ public function getPageRank() - { - $chwrite = $this->CheckHash($this->HashURL($this->url)); + { + $chwrite = $this->CheckHash($this->HashURL($this->url)); - $url="http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=".$chwrite."&features=Rank&q=info:".$this->url."&num=100&filter=0"; - $data = $this->getPage($url); - preg_match('#Rank_[0-9]:[0-9]:([0-9]+){1,}#si', $data, $p); - $value = isset($p[1]) ? $p[1] : 0; + $url = "http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=" . $chwrite . "&features=Rank&q=info:" . $this->url . "&num=100&filter=0"; + $data = $this->getPage($url); + preg_match('#Rank_[0-9]:[0-9]:([0-9]+){1,}#si', $data, $p); + $value = isset($p[1]) ? $p[1] : 0; - return $value; - } + return $value; + } /** * Returns the alexa traffic rank for the current url @@ -84,26 +84,26 @@ class Piwik_SEO_RankChecker * @return int */ public function getAlexaRank() - { + { $xml = @simplexml_load_string($this->getPage('http://data.alexa.com/data?cli=10&url=' . urlencode($this->url))); - return $xml ? $xml->SD->POPULARITY['TEXT'] : ''; - } + return $xml ? $xml->SD->POPULARITY['TEXT'] : ''; + } /** * Returns the number of Dmoz.org entries for the current url * * @return int */ - public function getDmoz() - { + public function getDmoz() + { $url = 'http://www.dmoz.org/search?q=' . urlencode($this->url); - $data = $this->getPage($url); + $data = $this->getPage($url); preg_match('#Open Directory Sites[^\(]+\([0-9]-[0-9]+ of ([0-9]+)\)#', $data, $p); if (!empty($p[1])) { - return (int) $p[1]; + return (int)$p[1]; } return 0; - } + } /** * Returns the number of pages google holds in it's index for the current url @@ -111,14 +111,14 @@ class Piwik_SEO_RankChecker * @return int */ public function getIndexedPagesGoogle() - { + { $url = 'http://www.google.com/search?hl=en&q=site%3A' . urlencode($this->url); - $data = $this->getPage($url); + $data = $this->getPage($url); if (preg_match('#about ([0-9\,]+) results#i', $data, $p)) { - return (int) str_replace(',', '', $p[1]); - } + return (int)str_replace(',', '', $p[1]); + } return 0; - } + } /** * Returns the number of pages bing holds in it's index for the current url @@ -126,14 +126,14 @@ class Piwik_SEO_RankChecker * @return int */ public function getIndexedPagesBing() - { + { $url = 'http://www.bing.com/search?mkt=en-US&q=site%3A' . urlencode($this->url); - $data = $this->getPage($url); + $data = $this->getPage($url); if (preg_match('#([0-9\,]+) results#i', $data, $p)) { - return (int) str_replace(',', '', $p[1]); - } + return (int)str_replace(',', '', $p[1]); + } return 0; - } + } /** * Returns the domain age for the current url @@ -148,19 +148,19 @@ class Piwik_SEO_RankChecker $ages = array(); - if($ageArchiveOrg > 0) { + if ($ageArchiveOrg > 0) { $ages[] = $ageArchiveOrg; } - if($ageWhoIs > 0) { + if ($ageWhoIs > 0) { $ages[] = $ageWhoIs; } - if($ageWhoisCom > 0) { + if ($ageWhoisCom > 0) { $ages[] = $ageWhoisCom; } - if(count($ages) > 1) { + if (count($ages) > 1) { $maxAge = min($ages); } else { $maxAge = array_shift($ages); @@ -171,27 +171,27 @@ class Piwik_SEO_RankChecker } return false; } - + /** * Returns the number backlinks that link to the current site. - * + * * @return int */ public function getExternalBacklinkCount() { - $majesticInfo = $this->getMajesticInfo(); - return $majesticInfo['backlink_count']; + $majesticInfo = $this->getMajesticInfo(); + return $majesticInfo['backlink_count']; } - + /** * Returns the number of referrer domains that link to the current site. - * + * * @return int */ public function getReferrerDomainCount() { - $majesticInfo = $this->getMajesticInfo(); - return $majesticInfo['referrer_domains_count']; + $majesticInfo = $this->getMajesticInfo(); + return $majesticInfo['referrer_domains_count']; } /** @@ -201,7 +201,7 @@ class Piwik_SEO_RankChecker */ protected function _getAgeArchiveOrg() { - $url = str_replace('www.', '', $this->url); + $url = str_replace('www.', '', $this->url); $data = @$this->getPage('http://wayback.archive.org/web/*/' . urlencode($url)); preg_match('#<a href=\"([^>]*)' . preg_quote($url) . '/\">([^<]*)<\/a>#', $data, $p); if (!empty($p[2])) { @@ -221,8 +221,8 @@ class Piwik_SEO_RankChecker */ protected function _getAgeWhoIs() { - $url = preg_replace('/^www\./', '', $this->url); - $url = 'http://www.who.is/whois/' . urlencode($url); + $url = preg_replace('/^www\./', '', $this->url); + $url = 'http://www.who.is/whois/' . urlencode($url); $data = $this->getPage($url); preg_match('#(?:Creation Date|Created On|Registered on)\.*:\s*([ \ta-z0-9\/\-:\.]+)#si', $data, $p); if (!empty($p[1])) { @@ -242,8 +242,8 @@ class Piwik_SEO_RankChecker */ protected function _getAgeWhoisCom() { - $url = preg_replace('/^www\./', '', $this->url); - $url = 'http://www.whois.com/whois/' . urlencode($url); + $url = preg_replace('/^www\./', '', $this->url); + $url = 'http://www.whois.com/whois/' . urlencode($url); $data = $this->getPage($url); preg_match('#(?:Creation Date|Created On):\s*([ \ta-z0-9\/\-:\.]+)#si', $data, $p); if (!empty($p[1])) { @@ -256,114 +256,107 @@ class Piwik_SEO_RankChecker return 0; } - /** - * Convert numeric string to int - * - * @see getPageRank() - * - * @param string $Str - * @param int $Check - * @param int $Magic - * @return int - */ - private function StrToNum($Str, $Check, $Magic) - { - $Int32Unit = 4294967296; // 2^32 - - $length = strlen($Str); - for($i = 0; $i < $length; $i++) - { - $Check *= $Magic; - // If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), - // the result of converting to integer is undefined - // refer to http://www.php.net/manual/en/language.types.integer.php - if($Check >= $Int32Unit) - { - $Check = ($Check - $Int32Unit * (int) ($Check / $Int32Unit)); - //if the check less than -2^31 - $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check; - } - $Check += ord($Str{$i}); - } - return $Check; - } - - /** - * Generate a hash for a url - * - * @see getPageRank() - * - * @param string $String - * @return int - */ - private function HashURL($String) - { - $Check1 = $this->StrToNum($String, 0x1505, 0x21); - $Check2 = $this->StrToNum($String, 0, 0x1003F); - - $Check1 >>= 2; - $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F); - $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF); - $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF); - - $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F ); - $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 ); - - return ($T1 | $T2); - } - - /** - * Generate a checksum for the hash string - * - * @see getPageRank() - * - * @param int $Hashnum - * @return string - */ - private function CheckHash($Hashnum) - { - $CheckByte = 0; - $Flag = 0; - - $HashStr = sprintf('%u', $Hashnum) ; - $length = strlen($HashStr); - - for($i = $length - 1; $i >= 0; $i --) - { - $Re = $HashStr{$i}; - if(1 === ($Flag % 2)) { - $Re += $Re; - $Re = (int)($Re / 10) + ($Re % 10); - } - $CheckByte += $Re; - $Flag ++; - } - - $CheckByte %= 10; - if(0 !== $CheckByte) - { - $CheckByte = 10 - $CheckByte; - if(1 === ($Flag % 2) ) - { - if(1 === ($CheckByte % 2)) - { - $CheckByte += 9; - } - $CheckByte >>= 1; - } - } - - return '7'.$CheckByte.$HashStr; - } - - private function getMajesticInfo() - { - if ($this->majesticInfo === null) - { - $client = new Piwik_SEO_MajesticClient(); - $this->majesticInfo = $client->getBacklinkStats($this->url); - } - - return $this->majesticInfo; - } + /** + * Convert numeric string to int + * + * @see getPageRank() + * + * @param string $Str + * @param int $Check + * @param int $Magic + * @return int + */ + private function StrToNum($Str, $Check, $Magic) + { + $Int32Unit = 4294967296; // 2^32 + + $length = strlen($Str); + for ($i = 0; $i < $length; $i++) { + $Check *= $Magic; + // If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), + // the result of converting to integer is undefined + // refer to http://www.php.net/manual/en/language.types.integer.php + if ($Check >= $Int32Unit) { + $Check = ($Check - $Int32Unit * (int)($Check / $Int32Unit)); + //if the check less than -2^31 + $Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check; + } + $Check += ord($Str{$i}); + } + return $Check; + } + + /** + * Generate a hash for a url + * + * @see getPageRank() + * + * @param string $String + * @return int + */ + private function HashURL($String) + { + $Check1 = $this->StrToNum($String, 0x1505, 0x21); + $Check2 = $this->StrToNum($String, 0, 0x1003F); + + $Check1 >>= 2; + $Check1 = (($Check1 >> 4) & 0x3FFFFC0) | ($Check1 & 0x3F); + $Check1 = (($Check1 >> 4) & 0x3FFC00) | ($Check1 & 0x3FF); + $Check1 = (($Check1 >> 4) & 0x3C000) | ($Check1 & 0x3FFF); + + $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) << 2) | ($Check2 & 0xF0F); + $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000); + + return ($T1 | $T2); + } + + /** + * Generate a checksum for the hash string + * + * @see getPageRank() + * + * @param int $Hashnum + * @return string + */ + private function CheckHash($Hashnum) + { + $CheckByte = 0; + $Flag = 0; + + $HashStr = sprintf('%u', $Hashnum); + $length = strlen($HashStr); + + for ($i = $length - 1; $i >= 0; $i--) { + $Re = $HashStr{$i}; + if (1 === ($Flag % 2)) { + $Re += $Re; + $Re = (int)($Re / 10) + ($Re % 10); + } + $CheckByte += $Re; + $Flag++; + } + + $CheckByte %= 10; + if (0 !== $CheckByte) { + $CheckByte = 10 - $CheckByte; + if (1 === ($Flag % 2)) { + if (1 === ($CheckByte % 2)) { + $CheckByte += 9; + } + $CheckByte >>= 1; + } + } + + return '7' . $CheckByte . $HashStr; + } + + private function getMajesticInfo() + { + if ($this->majesticInfo === null) { + $client = new Piwik_SEO_MajesticClient(); + $this->majesticInfo = $client->getBacklinkStats($this->url); + } + + return $this->majesticInfo; + } } diff --git a/plugins/SEO/SEO.php b/plugins/SEO/SEO.php index a7e5474506..addc8ae69e 100644 --- a/plugins/SEO/SEO.php +++ b/plugins/SEO/SEO.php @@ -1,10 +1,10 @@ <?php /** * Piwik - Open source web analytics - * + * * @link http://piwik.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - * + * * @category Piwik_Plugins * @package Piwik_SEO */ @@ -14,24 +14,24 @@ */ class Piwik_SEO extends Piwik_Plugin { - public function getInformation() - { - return array( - 'description' => 'This Plugin extracts and displays SEO metrics: Alexa web ranking, Google Pagerank, number of Indexed pages and backlinks of the currently selected website.', - 'author' => 'Piwik', - 'author_homepage' => 'http://piwik.org/', - 'version' => Piwik_Version::VERSION, - ); - } - - function getListHooksRegistered() - { - $hooks = array( 'WidgetsList.add' => 'addWidgets' ); - return $hooks; - } - - function addWidgets() - { - Piwik_AddWidget('SEO', 'SEO_SeoRankings', 'SEO', 'getRank'); - } + public function getInformation() + { + return array( + 'description' => 'This Plugin extracts and displays SEO metrics: Alexa web ranking, Google Pagerank, number of Indexed pages and backlinks of the currently selected website.', + 'author' => 'Piwik', + 'author_homepage' => 'http://piwik.org/', + 'version' => Piwik_Version::VERSION, + ); + } + + function getListHooksRegistered() + { + $hooks = array('WidgetsList.add' => 'addWidgets'); + return $hooks; + } + + function addWidgets() + { + Piwik_AddWidget('SEO', 'SEO_SeoRankings', 'SEO', 'getRank'); + } } diff --git a/plugins/SEO/templates/index.tpl b/plugins/SEO/templates/index.tpl index fe1fe903d3..721ca46ee5 100644 --- a/plugins/SEO/templates/index.tpl +++ b/plugins/SEO/templates/index.tpl @@ -1,42 +1,46 @@ <div id='SeoRanks'> - <script type="text/javascript" src="plugins/SEO/templates/rank.js"></script> - - <form method="post" style="padding: 8px;" > - <div align="left" class="mediumtext"> - {'Installation_SetupWebSiteURL'|translate|ucfirst} - <input type="text" id="seoUrl" size="15" value="{$urlToRank|escape:'html'}" class="textbox" /> + <script type="text/javascript" src="plugins/SEO/templates/rank.js"></script> + + <form method="post" style="padding: 8px;"> + <div align="left" class="mediumtext"> + {'Installation_SetupWebSiteURL'|translate|ucfirst} + <input type="text" id="seoUrl" size="15" value="{$urlToRank|escape:'html'}" class="textbox"/> <span style="padding-left:2px;"> - <input type="submit" id="rankbutton" value="{'SEO_Rank'|translate}" /> + <input type="submit" id="rankbutton" value="{'SEO_Rank'|translate}"/> </span> - </div> - - {ajaxLoadingDiv id=ajaxLoadingSEO} + </div> + + {ajaxLoadingDiv id=ajaxLoadingSEO} + + <div id="rankStats" align="left" style='margin-top:10px'> + {if empty($ranks)} + {'General_Error'|translate} + {else} + {capture name=cleanUrl} + <a href='{$urlToRank|escape:'html'}' target='_blank'>{$urlToRank|escape:'html'}</a> + {/capture} + {'SEO_SEORankingsFor'|translate:$smarty.capture.cleanUrl} + <table cellspacing='2' style='margin:auto;line-height:1.5em;padding-top:10px'> + {foreach from=$ranks item=rank} + <tr> + <td>{if !empty($rank.logo_link)}<a href="{$rank.logo_link}" target="_blank" + {if !empty($rank.logo_tooltip)}title="{$rank.logo_tooltip}"{/if}>{/if}<img + style='vertical-align:middle;margin-right:6px;' src='{$rank.logo}' border='0' + alt="{$rank.label}">{if !empty($rank.logo_link)}</a>{/if} {$rank.label} + </td> + <td> + <div style='margin-left:15px'> + {if isset($rank.rank)}{$rank.rank}{else}-{/if} + {if $rank.id=='pagerank'} /10 + {elseif $rank.id=='google-index' || $rank.id=='bing-index'} {'SEO_Pages'|translate} + {/if} + </div> + </td> + </tr> + {/foreach} - <div id="rankStats" align="left" style='margin-top:10px'> - {if empty($ranks)} - {'General_Error'|translate} - {else} -{capture name=cleanUrl} -<a href='{$urlToRank|escape:'html'}' target='_blank'>{$urlToRank|escape:'html'}</a> -{/capture} - {'SEO_SEORankingsFor'|translate:$smarty.capture.cleanUrl} - <table cellspacing='2' style='margin:auto;line-height:1.5em;padding-top:10px'> - {foreach from=$ranks item=rank} - <tr> - <td>{if !empty($rank.logo_link)}<a href="{$rank.logo_link}" target="_blank" {if !empty($rank.logo_tooltip)}title="{$rank.logo_tooltip}"{/if}>{/if}<img style='vertical-align:middle;margin-right:6px;' src='{$rank.logo}' border='0' alt="{$rank.label}">{if !empty($rank.logo_link)}</a>{/if} {$rank.label} - </td><td> - <div style='margin-left:15px'> - {if isset($rank.rank)}{$rank.rank}{else}-{/if} - {if $rank.id=='pagerank'} /10 - {elseif $rank.id=='google-index' || $rank.id=='bing-index'} {'SEO_Pages'|translate} - {/if} - </div> - </td> - </tr> - {/foreach} - - </table> - {/if} - </div> - </form> + </table> + {/if} + </div> + </form> </div> diff --git a/plugins/SEO/templates/rank.js b/plugins/SEO/templates/rank.js index d7a3802fc9..1a9dc07d0c 100644 --- a/plugins/SEO/templates/rank.js +++ b/plugins/SEO/templates/rank.js @@ -12,7 +12,7 @@ $(document).ready(function () { ajaxRequest.addParams({ module: 'SEO', action: 'getRank', - url: encodeURIComponent($('#seoUrl').val()) + url: encodeURIComponent($('#seoUrl').val()) }, 'get'); ajaxRequest.setCallback( function (response) { |