PageRenderTime 39ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/plugins/SitesManager/SitesManager.php

https://github.com/CodeYellowBV/piwik
PHP | 204 lines | 119 code | 20 blank | 65 comment | 10 complexity | 02351cf2ee5436cfdbc2e0056b55ecff MD5 | raw file
Possible License(s): LGPL-3.0, JSON, MIT, GPL-3.0, LGPL-2.1, GPL-2.0, AGPL-1.0, BSD-2-Clause, BSD-3-Clause
  1. <?php
  2. /**
  3. * Piwik - free/libre analytics platform
  4. *
  5. * @link http://piwik.org
  6. * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  7. *
  8. */
  9. namespace Piwik\Plugins\SitesManager;
  10. /**
  11. *
  12. */
  13. class SitesManager extends \Piwik\Plugin
  14. {
  15. const KEEP_URL_FRAGMENT_USE_DEFAULT = 0;
  16. const KEEP_URL_FRAGMENT_YES = 1;
  17. const KEEP_URL_FRAGMENT_NO = 2;
  18. /**
  19. * @see Piwik\Plugin::getListHooksRegistered
  20. */
  21. public function getListHooksRegistered()
  22. {
  23. return array(
  24. 'AssetManager.getJavaScriptFiles' => 'getJsFiles',
  25. 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
  26. 'Tracker.Cache.getSiteAttributes' => 'recordWebsiteDataInCache',
  27. 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
  28. );
  29. }
  30. /**
  31. * Get CSS files
  32. */
  33. public function getStylesheetFiles(&$stylesheets)
  34. {
  35. $stylesheets[] = "plugins/SitesManager/stylesheets/SitesManager.less";
  36. $stylesheets[] = "plugins/Morpheus/stylesheets/base.less";
  37. }
  38. /**
  39. * Get JavaScript files
  40. */
  41. public function getJsFiles(&$jsFiles)
  42. {
  43. $jsFiles[] = "plugins/SitesManager/javascripts/SitesManager.js";
  44. }
  45. /**
  46. * Hooks when a website tracker cache is flushed (website updated, cache deleted, or empty cache)
  47. * Will record in the tracker config file all data needed for this website in Tracker.
  48. *
  49. * @param array $array
  50. * @param int $idSite
  51. * @return void
  52. */
  53. public function recordWebsiteDataInCache(&$array, $idSite)
  54. {
  55. $idSite = (int)$idSite;
  56. // add the 'hosts' entry in the website array
  57. $array['hosts'] = $this->getTrackerHosts($idSite);
  58. $website = API::getInstance()->getSiteFromId($idSite);
  59. $array['excluded_ips'] = $this->getTrackerExcludedIps($website);
  60. $array['excluded_parameters'] = self::getTrackerExcludedQueryParameters($website);
  61. $array['excluded_user_agents'] = self::getExcludedUserAgents($website);
  62. $array['keep_url_fragment'] = self::shouldKeepURLFragmentsFor($website);
  63. $array['sitesearch'] = $website['sitesearch'];
  64. $array['sitesearch_keyword_parameters'] = $this->getTrackerSearchKeywordParameters($website);
  65. $array['sitesearch_category_parameters'] = $this->getTrackerSearchCategoryParameters($website);
  66. }
  67. /**
  68. * Returns whether we should keep URL fragments for a specific site.
  69. *
  70. * @param array $site DB data for the site.
  71. * @return bool
  72. */
  73. private static function shouldKeepURLFragmentsFor($site)
  74. {
  75. if ($site['keep_url_fragment'] == self::KEEP_URL_FRAGMENT_YES) {
  76. return true;
  77. } else if ($site['keep_url_fragment'] == self::KEEP_URL_FRAGMENT_NO) {
  78. return false;
  79. }
  80. return API::getInstance()->getKeepURLFragmentsGlobal();
  81. }
  82. private function getTrackerSearchKeywordParameters($website)
  83. {
  84. $searchParameters = $website['sitesearch_keyword_parameters'];
  85. if (empty($searchParameters)) {
  86. $searchParameters = API::getInstance()->getSearchKeywordParametersGlobal();
  87. }
  88. return explode(",", $searchParameters);
  89. }
  90. private function getTrackerSearchCategoryParameters($website)
  91. {
  92. $searchParameters = $website['sitesearch_category_parameters'];
  93. if (empty($searchParameters)) {
  94. $searchParameters = API::getInstance()->getSearchCategoryParametersGlobal();
  95. }
  96. return explode(",", $searchParameters);
  97. }
  98. /**
  99. * Returns the array of excluded IPs to save in the config file
  100. *
  101. * @param array $website
  102. * @return array
  103. */
  104. private function getTrackerExcludedIps($website)
  105. {
  106. $excludedIps = $website['excluded_ips'];
  107. $globalExcludedIps = API::getInstance()->getExcludedIpsGlobal();
  108. $excludedIps .= ',' . $globalExcludedIps;
  109. $ipRanges = array();
  110. foreach (explode(',', $excludedIps) as $ip) {
  111. $ipRange = API::getInstance()->getIpsForRange($ip);
  112. if ($ipRange !== false) {
  113. $ipRanges[] = $ipRange;
  114. }
  115. }
  116. return $ipRanges;
  117. }
  118. /**
  119. * Returns the array of excluded user agent substrings for a site. Filters out
  120. * any garbage data & trims each entry.
  121. *
  122. * @param array $website The full set of information for a site.
  123. * @return array
  124. */
  125. private static function getExcludedUserAgents($website)
  126. {
  127. $excludedUserAgents = API::getInstance()->getExcludedUserAgentsGlobal();
  128. if (API::getInstance()->isSiteSpecificUserAgentExcludeEnabled()) {
  129. $excludedUserAgents .= ',' . $website['excluded_user_agents'];
  130. }
  131. return self::filterBlankFromCommaSepList($excludedUserAgents);
  132. }
  133. /**
  134. * Returns the array of URL query parameters to exclude from URLs
  135. *
  136. * @param array $website
  137. * @return array
  138. */
  139. public static function getTrackerExcludedQueryParameters($website)
  140. {
  141. $excludedQueryParameters = $website['excluded_parameters'];
  142. $globalExcludedQueryParameters = API::getInstance()->getExcludedQueryParametersGlobal();
  143. $excludedQueryParameters .= ',' . $globalExcludedQueryParameters;
  144. return self::filterBlankFromCommaSepList($excludedQueryParameters);
  145. }
  146. /**
  147. * Trims each element of a comma-separated list of strings, removes empty elements and
  148. * returns the result (as an array).
  149. *
  150. * @param string $parameters The unfiltered list.
  151. * @return array The filtered list of strings as an array.
  152. */
  153. static private function filterBlankFromCommaSepList($parameters)
  154. {
  155. $parameters = explode(',', $parameters);
  156. $parameters = array_filter($parameters, 'strlen');
  157. $parameters = array_unique($parameters);
  158. return $parameters;
  159. }
  160. /**
  161. * Returns the hosts alias URLs
  162. * @param int $idSite
  163. * @return array
  164. */
  165. private function getTrackerHosts($idSite)
  166. {
  167. $urls = API::getInstance()->getSiteUrlsFromId($idSite);
  168. $hosts = array();
  169. foreach ($urls as $url) {
  170. $url = parse_url($url);
  171. if (isset($url['host'])) {
  172. $hosts[] = $url['host'];
  173. }
  174. }
  175. return $hosts;
  176. }
  177. public function getClientSideTranslationKeys(&$translationKeys)
  178. {
  179. $translationKeys[] = "General_Save";
  180. $translationKeys[] = "General_OrCancel";
  181. $translationKeys[] = "SitesManager_OnlyOneSiteAtTime";
  182. $translationKeys[] = "SitesManager_DeleteConfirm";
  183. }
  184. }