diff options
Diffstat (limited to 'plugins/SitesManager/SitesManager.php')
-rw-r--r-- | plugins/SitesManager/SitesManager.php | 408 |
1 files changed, 200 insertions, 208 deletions
diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php index 6f596f9f87..b258a29b8f 100644 --- a/plugins/SitesManager/SitesManager.php +++ b/plugins/SitesManager/SitesManager.php @@ -15,212 +15,204 @@ */ class Piwik_SitesManager extends Piwik_Plugin { - const KEEP_URL_FRAGMENT_USE_DEFAULT = 0; - const KEEP_URL_FRAGMENT_YES = 1; - const KEEP_URL_FRAGMENT_NO = 2; - - public function getInformation() - { - $info = array( - 'description' => Piwik_Translate('SitesManager_PluginDescription'), - 'author' => 'Piwik', - 'author_homepage' => 'http://piwik.org/', - 'version' => Piwik_Version::VERSION, - ); - return $info; - } - - function getListHooksRegistered() - { - return array( - 'AssetManager.getJsFiles' => 'getJsFiles', - 'AssetManager.getCssFiles' => 'getCssFiles', - 'AdminMenu.add' => 'addMenu', - 'Common.fetchWebsiteAttributes' => 'recordWebsiteDataInCache', - ); - } - - function addMenu() - { - Piwik_AddAdminSubMenu('CoreAdminHome_MenuManage', 'SitesManager_MenuSites', - array('module' => 'SitesManager', 'action' => 'index'), - Piwik::isUserHasSomeAdminAccess(), - $order = 1); - } - - /** - * Get CSS files - * - * @param Piwik_Event_Notification $notification notification object - */ - function getCssFiles( $notification ) - { - $cssFiles = &$notification->getNotificationObject(); - - $cssFiles[] = "themes/default/styles.css"; - } - - /** - * Get JavaScript files - * - * @param Piwik_Event_Notification $notification notification object - */ - function getJsFiles( $notification ) - { - $jsFiles = &$notification->getNotificationObject(); - - $jsFiles[] = "plugins/SitesManager/templates/SitesManager.js"; - } - - /** - * Hooks when a website tracker cache is flushed (website updated, cache deleted, or empty cache) - * Will record in the tracker config file all data needed for this website in Tracker. - * - * @param Piwik_Event_Notification $notification notification object - * @return void - */ - function recordWebsiteDataInCache($notification) - { - $idSite = (int)$notification->getNotificationInfo(); - // add the 'hosts' entry in the website array - $array =& $notification->getNotificationObject(); - $array['hosts'] = $this->getTrackerHosts($idSite); - - $website = Piwik_SitesManager_API::getInstance()->getSiteFromId($idSite); - $array['excluded_ips'] = $this->getTrackerExcludedIps($website); - $array['excluded_parameters'] = self::getTrackerExcludedQueryParameters($website); - $array['excluded_user_agents'] = self::getExcludedUserAgents($website); - $array['keep_url_fragment'] = self::shouldKeepURLFragmentsFor($website); - $array['sitesearch'] = $website['sitesearch']; - $array['sitesearch_keyword_parameters'] = $this->getTrackerSearchKeywordParameters($website); - $array['sitesearch_category_parameters'] = $this->getTrackerSearchCategoryParameters($website); - } - - /** - * Returns whether we should keep URL fragments for a specific site. - * - * @param array $site DB data for the site. - * @return bool - */ - private static function shouldKeepURLFragmentsFor( $site ) - { - if ($site['keep_url_fragment'] == self::KEEP_URL_FRAGMENT_YES) - { - return true; - } - else if ($site['keep_url_fragment'] == self::KEEP_URL_FRAGMENT_NO) - { - return false; - } - - return Piwik_SitesManager_API::getInstance()->getKeepURLFragmentsGlobal(); - } - - private function getTrackerSearchKeywordParameters($website) - { - $searchParameters = $website['sitesearch_keyword_parameters']; - if(empty($searchParameters)) { - $searchParameters = Piwik_SitesManager_API::getInstance()->getSearchKeywordParametersGlobal(); - } - return explode(",", $searchParameters); - } - - private function getTrackerSearchCategoryParameters($website) - { - $searchParameters = $website['sitesearch_category_parameters']; - if(empty($searchParameters)) { - $searchParameters = Piwik_SitesManager_API::getInstance()->getSearchCategoryParametersGlobal(); - } - return explode(",", $searchParameters); - } - - /** - * Returns the array of excluded IPs to save in the config file - * - * @return array - */ - private function getTrackerExcludedIps($website) - { - $excludedIps = $website['excluded_ips']; - $globalExcludedIps = Piwik_SitesManager_API::getInstance()->getExcludedIpsGlobal(); - - $excludedIps .= ',' . $globalExcludedIps; - - $ipRanges = array(); - foreach(explode(',', $excludedIps) as $ip) - { - $ipRange = Piwik_SitesManager_API::getInstance()->getIpsForRange($ip); - if($ipRange !== false) - { - $ipRanges[] = $ipRange; - } - } - return $ipRanges; - } - - /** - * Returns the array of excluded user agent substrings for a site. Filters out - * any garbage data & trims each entry. - * - * @param array $website The full set of information for a site. - * @return array - */ - private static function getExcludedUserAgents( $website ) - { - $excludedUserAgents = Piwik_SitesManager_API::getInstance()->getExcludedUserAgentsGlobal(); - if (Piwik_SitesManager_API::getInstance()->isSiteSpecificUserAgentExcludeEnabled()) - { - $excludedUserAgents .= ','.$website['excluded_user_agents']; - } - return self::filterBlankFromCommaSepList($excludedUserAgents); - } - - /** - * Returns the array of URL query parameters to exclude from URLs - * - * @return array - */ - public static function getTrackerExcludedQueryParameters($website) - { - $excludedQueryParameters = $website['excluded_parameters']; - $globalExcludedQueryParameters = Piwik_SitesManager_API::getInstance()->getExcludedQueryParametersGlobal(); - - $excludedQueryParameters .= ',' . $globalExcludedQueryParameters; - return self::filterBlankFromCommaSepList($excludedQueryParameters); - } - - /** - * Trims each element of a comma-separated list of strings, removes empty elements and - * returns the result (as an array). - * - * @param string $parameters The unfiltered list. - * @return array The filtered list of strings as an array. - */ - static private function filterBlankFromCommaSepList( $parameters ) - { - $parameters = explode(',', $parameters); - $parameters = array_filter($parameters, 'strlen'); - $parameters = array_unique($parameters); - return $parameters; - } - - /** - * Returns the hosts alias URLs - * @param int $idSite - * @return array - */ - private function getTrackerHosts($idSite) - { - $urls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idSite); - $hosts = array(); - foreach($urls as $url) - { - $url = parse_url($url); - if(isset($url['host'])) - { - $hosts[] = $url['host']; - } - } - return $hosts; - } + const KEEP_URL_FRAGMENT_USE_DEFAULT = 0; + const KEEP_URL_FRAGMENT_YES = 1; + const KEEP_URL_FRAGMENT_NO = 2; + + public function getInformation() + { + $info = array( + 'description' => Piwik_Translate('SitesManager_PluginDescription'), + 'author' => 'Piwik', + 'author_homepage' => 'http://piwik.org/', + 'version' => Piwik_Version::VERSION, + ); + return $info; + } + + function getListHooksRegistered() + { + return array( + 'AssetManager.getJsFiles' => 'getJsFiles', + 'AssetManager.getCssFiles' => 'getCssFiles', + 'AdminMenu.add' => 'addMenu', + 'Common.fetchWebsiteAttributes' => 'recordWebsiteDataInCache', + ); + } + + function addMenu() + { + Piwik_AddAdminSubMenu('CoreAdminHome_MenuManage', 'SitesManager_MenuSites', + array('module' => 'SitesManager', 'action' => 'index'), + Piwik::isUserHasSomeAdminAccess(), + $order = 1); + } + + /** + * Get CSS files + * + * @param Piwik_Event_Notification $notification notification object + */ + function getCssFiles($notification) + { + $cssFiles = & $notification->getNotificationObject(); + + $cssFiles[] = "themes/default/styles.css"; + } + + /** + * Get JavaScript files + * + * @param Piwik_Event_Notification $notification notification object + */ + function getJsFiles($notification) + { + $jsFiles = & $notification->getNotificationObject(); + + $jsFiles[] = "plugins/SitesManager/templates/SitesManager.js"; + } + + /** + * Hooks when a website tracker cache is flushed (website updated, cache deleted, or empty cache) + * Will record in the tracker config file all data needed for this website in Tracker. + * + * @param Piwik_Event_Notification $notification notification object + * @return void + */ + function recordWebsiteDataInCache($notification) + { + $idSite = (int)$notification->getNotificationInfo(); + // add the 'hosts' entry in the website array + $array =& $notification->getNotificationObject(); + $array['hosts'] = $this->getTrackerHosts($idSite); + + $website = Piwik_SitesManager_API::getInstance()->getSiteFromId($idSite); + $array['excluded_ips'] = $this->getTrackerExcludedIps($website); + $array['excluded_parameters'] = self::getTrackerExcludedQueryParameters($website); + $array['excluded_user_agents'] = self::getExcludedUserAgents($website); + $array['keep_url_fragment'] = self::shouldKeepURLFragmentsFor($website); + $array['sitesearch'] = $website['sitesearch']; + $array['sitesearch_keyword_parameters'] = $this->getTrackerSearchKeywordParameters($website); + $array['sitesearch_category_parameters'] = $this->getTrackerSearchCategoryParameters($website); + } + + /** + * Returns whether we should keep URL fragments for a specific site. + * + * @param array $site DB data for the site. + * @return bool + */ + private static function shouldKeepURLFragmentsFor($site) + { + if ($site['keep_url_fragment'] == self::KEEP_URL_FRAGMENT_YES) { + return true; + } else if ($site['keep_url_fragment'] == self::KEEP_URL_FRAGMENT_NO) { + return false; + } + + return Piwik_SitesManager_API::getInstance()->getKeepURLFragmentsGlobal(); + } + + private function getTrackerSearchKeywordParameters($website) + { + $searchParameters = $website['sitesearch_keyword_parameters']; + if (empty($searchParameters)) { + $searchParameters = Piwik_SitesManager_API::getInstance()->getSearchKeywordParametersGlobal(); + } + return explode(",", $searchParameters); + } + + private function getTrackerSearchCategoryParameters($website) + { + $searchParameters = $website['sitesearch_category_parameters']; + if (empty($searchParameters)) { + $searchParameters = Piwik_SitesManager_API::getInstance()->getSearchCategoryParametersGlobal(); + } + return explode(",", $searchParameters); + } + + /** + * Returns the array of excluded IPs to save in the config file + * + * @return array + */ + private function getTrackerExcludedIps($website) + { + $excludedIps = $website['excluded_ips']; + $globalExcludedIps = Piwik_SitesManager_API::getInstance()->getExcludedIpsGlobal(); + + $excludedIps .= ',' . $globalExcludedIps; + + $ipRanges = array(); + foreach (explode(',', $excludedIps) as $ip) { + $ipRange = Piwik_SitesManager_API::getInstance()->getIpsForRange($ip); + if ($ipRange !== false) { + $ipRanges[] = $ipRange; + } + } + return $ipRanges; + } + + /** + * Returns the array of excluded user agent substrings for a site. Filters out + * any garbage data & trims each entry. + * + * @param array $website The full set of information for a site. + * @return array + */ + private static function getExcludedUserAgents($website) + { + $excludedUserAgents = Piwik_SitesManager_API::getInstance()->getExcludedUserAgentsGlobal(); + if (Piwik_SitesManager_API::getInstance()->isSiteSpecificUserAgentExcludeEnabled()) { + $excludedUserAgents .= ',' . $website['excluded_user_agents']; + } + return self::filterBlankFromCommaSepList($excludedUserAgents); + } + + /** + * Returns the array of URL query parameters to exclude from URLs + * + * @return array + */ + public static function getTrackerExcludedQueryParameters($website) + { + $excludedQueryParameters = $website['excluded_parameters']; + $globalExcludedQueryParameters = Piwik_SitesManager_API::getInstance()->getExcludedQueryParametersGlobal(); + + $excludedQueryParameters .= ',' . $globalExcludedQueryParameters; + return self::filterBlankFromCommaSepList($excludedQueryParameters); + } + + /** + * Trims each element of a comma-separated list of strings, removes empty elements and + * returns the result (as an array). + * + * @param string $parameters The unfiltered list. + * @return array The filtered list of strings as an array. + */ + static private function filterBlankFromCommaSepList($parameters) + { + $parameters = explode(',', $parameters); + $parameters = array_filter($parameters, 'strlen'); + $parameters = array_unique($parameters); + return $parameters; + } + + /** + * Returns the hosts alias URLs + * @param int $idSite + * @return array + */ + private function getTrackerHosts($idSite) + { + $urls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idSite); + $hosts = array(); + foreach ($urls as $url) { + $url = parse_url($url); + if (isset($url['host'])) { + $hosts[] = $url['host']; + } + } + return $hosts; + } } |