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:
authormatt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105>2010-06-23 07:45:36 +0400
committermatt <matt@59fd770c-687e-43c8-a1e3-f5a4ff64c105>2010-06-23 07:45:36 +0400
commit7e1b5d6b762340cbff1bb928d15815980c7649a7 (patch)
treee07da179b9e1372866d2349777bd1cc6b4c9e8cf /plugins/SitesManager
parent999f46479294713104c962bfe7469e9b6e7a4bbf (diff)
parentc98ea06f2cccec81c6ccce49162a583494e44d91 (diff)
Diffstat (limited to 'plugins/SitesManager')
-rw-r--r--plugins/SitesManager/API.php567
-rw-r--r--plugins/SitesManager/Controller.php45
-rw-r--r--plugins/SitesManager/SitesManager.php106
-rw-r--r--plugins/SitesManager/templates/DisplayJavascriptCode.tpl5
-rw-r--r--plugins/SitesManager/templates/SitesManager.js168
-rw-r--r--plugins/SitesManager/templates/SitesManager.tpl132
-rw-r--r--plugins/SitesManager/tests/SitesManager.test.php369
7 files changed, 1180 insertions, 212 deletions
diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php
index 81c660875f..e00c159a8b 100644
--- a/plugins/SitesManager/API.php
+++ b/plugins/SitesManager/API.php
@@ -17,6 +17,10 @@
class Piwik_SitesManager_API
{
static private $instance = null;
+
+ /**
+ * @return Piwik_SitesManager_API
+ */
static public function getInstance()
{
if (self::$instance == null)
@@ -27,6 +31,11 @@ class Piwik_SitesManager_API
return self::$instance;
}
+ const OPTION_EXCLUDED_IPS_GLOBAL = 'SitesManager_ExcludedIpsGlobal';
+ const OPTION_DEFAULT_TIMEZONE = 'SitesManager_DefaultTimezone';
+ const OPTION_DEFAULT_CURRENCY = 'SitesManager_DefaultCurrency';
+ const OPTION_EXCLUDED_QUERY_PARAMETERS_GLOBAL = 'SitesManager_ExcludedQueryParameters';
+
/**
* Returns the javascript tag for the given idSite.
* This tag must be included on every page to be tracked by Piwik
@@ -34,7 +43,7 @@ class Piwik_SitesManager_API
* @param int $idSite
* @return string The Javascript tag ready to be included on the HTML pages
*/
- static public function getJavascriptTag( $idSite, $piwikUrl = '', $actionName = '')
+ public function getJavascriptTag( $idSite, $piwikUrl = '', $actionName = '')
{
Piwik::checkUserHasViewAccess($idSite);
@@ -56,10 +65,10 @@ class Piwik_SitesManager_API
* @exception if the site ID doesn't exist or the user doesn't have access to it
* @return array
*/
- static public function getSiteFromId( $idSite )
+ public function getSiteFromId( $idSite )
{
Piwik::checkUserHasViewAccess( $idSite );
- $site = Zend_Registry::get('db')->fetchRow("SELECT * FROM ".Piwik::prefixTable("site")." WHERE idsite = ?", $idSite);
+ $site = Zend_Registry::get('db')->fetchRow("SELECT * FROM ".Piwik_Common::prefixTable("site")." WHERE idsite = ?", $idSite);
return $site;
}
@@ -69,11 +78,11 @@ class Piwik_SitesManager_API
*
* @return array list of alias URLs
*/
- static private function getAliasSiteUrlsFromId( $idsite )
+ private function getAliasSiteUrlsFromId( $idsite )
{
$db = Zend_Registry::get('db');
$result = $db->fetchAll("SELECT url
- FROM ".Piwik::prefixTable("site_url"). "
+ FROM ".Piwik_Common::prefixTable("site_url"). "
WHERE idsite = ?", $idsite);
$urls = array();
foreach($result as $url)
@@ -89,11 +98,11 @@ class Piwik_SitesManager_API
* @exception if the website ID doesn't exist or the user doesn't have access to it
* @return array list of URLs
*/
- static public function getSiteUrlsFromId( $idSite )
+ public function getSiteUrlsFromId( $idSite )
{
Piwik::checkUserHasViewAccess($idSite);
- $site = self::getSiteFromId($idSite);
- $urls = self::getAliasSiteUrlsFromId($idSite);
+ $site = $this->getSiteFromId($idSite);
+ $urls = $this->getAliasSiteUrlsFromId($idSite);
return array_merge(array($site['main_url']), $urls);
}
@@ -102,10 +111,10 @@ class Piwik_SitesManager_API
*
* @return array the list of websites ID
*/
- static public function getAllSitesId()
+ public function getAllSitesId()
{
Piwik::checkUserIsSuperUser();
- $result = Piwik_FetchAll("SELECT idsite FROM ".Piwik::prefixTable('site'));
+ $result = Piwik_FetchAll("SELECT idsite FROM ".Piwik_Common::prefixTable('site'));
$idSites = array();
foreach($result as $idSite)
{
@@ -121,10 +130,10 @@ class Piwik_SitesManager_API
*
* @return array for each site, an array of information (idsite, name, main_url, etc.)
*/
- static public function getSitesWithAdminAccess()
+ public function getSitesWithAdminAccess()
{
- $sitesId = self::getSitesIdWithAdminAccess();
- return self::getSitesFromIds($sitesId);
+ $sitesId = $this->getSitesIdWithAdminAccess();
+ return $this->getSitesFromIds($sitesId);
}
/**
@@ -133,10 +142,10 @@ class Piwik_SitesManager_API
*
* @return array for each site, an array of information (idsite, name, main_url, etc.)
*/
- static public function getSitesWithViewAccess()
+ public function getSitesWithViewAccess()
{
- $sitesId = self::getSitesIdWithViewAccess();
- return self::getSitesFromIds($sitesId);
+ $sitesId = $this->getSitesIdWithViewAccess();
+ return $this->getSitesFromIds($sitesId);
}
/**
@@ -145,10 +154,10 @@ class Piwik_SitesManager_API
*
* @return array array for each site, an array of information (idsite, name, main_url, etc.)
*/
- static public function getSitesWithAtLeastViewAccess()
+ public function getSitesWithAtLeastViewAccess()
{
- $sitesId = self::getSitesIdWithAtLeastViewAccess();
- return self::getSitesFromIds($sitesId);
+ $sitesId = $this->getSitesIdWithAtLeastViewAccess();
+ return $this->getSitesFromIds($sitesId);
}
/**
@@ -157,7 +166,7 @@ class Piwik_SitesManager_API
*
* @return array list of websites ID
*/
- static public function getSitesIdWithAdminAccess()
+ public function getSitesIdWithAdminAccess()
{
$sitesId = Zend_Registry::get('access')->getSitesIdWithAdminAccess();
return $sitesId;
@@ -169,7 +178,7 @@ class Piwik_SitesManager_API
*
* @return array list of websites ID
*/
- static public function getSitesIdWithViewAccess()
+ public function getSitesIdWithViewAccess()
{
return Zend_Registry::get('access')->getSitesIdWithViewAccess();
}
@@ -180,7 +189,7 @@ class Piwik_SitesManager_API
*
* @return array list of websites ID
*/
- static public function getSitesIdWithAtLeastViewAccess()
+ public function getSitesIdWithAtLeastViewAccess()
{
return Zend_Registry::get('access')->getSitesIdWithAtLeastViewAccess();
}
@@ -191,7 +200,7 @@ class Piwik_SitesManager_API
*
* @param array list of website ID
*/
- static private function getSitesFromIds( $idSites )
+ private function getSitesFromIds( $idSites )
{
if(count($idSites) === 0)
{
@@ -199,57 +208,105 @@ class Piwik_SitesManager_API
}
$db = Zend_Registry::get('db');
$sites = $db->fetchAll("SELECT *
- FROM ".Piwik::prefixTable("site")."
+ FROM ".Piwik_Common::prefixTable("site")."
WHERE idsite IN (".implode(", ", $idSites).")
ORDER BY idsite ASC");
return $sites;
}
-
+
+ /**
+ * Returns the list of websites ID associated with a URL.
+ *
+ * @param string $url
+ * @return array list of websites ID
+ */
+ public function getSitesIdFromSiteUrl( $url )
+ {
+ $url = $this->removeTrailingSlash($url);
+
+ if(Piwik::isUserIsSuperUser())
+ {
+ $ids = Zend_Registry::get('db')->fetchAll(
+ 'SELECT idsite FROM ' . Piwik_Common::prefixTable('site') . ' WHERE main_url = ? ' .
+ 'UNION SELECT idsite FROM ' . Piwik_Common::prefixTable('site_url') . ' WHERE url = ?', array($url, $url));
+ }
+ else
+ {
+ $login = Piwik::getCurrentUserLogin();
+ $ids = Zend_Registry::get('db')->fetchAll(
+ 'SELECT idsite FROM ' . Piwik_Common::prefixTable('site') . ' WHERE main_url = ? ' .
+ 'AND idsite IN (' . Piwik_Access::getSqlAccessSite('idsite') . ') ' .
+ 'UNION SELECT idsite FROM ' . Piwik_Common::prefixTable('site_url') . ' WHERE url = ? ' .
+ 'AND idsite IN (' . Piwik_Access::getSqlAccessSite('idsite') . ')', array($url, $login, $url, $login));
+ }
+
+ return $ids;
+ }
+
/**
- * Add a website in the database.
+ * Add a website.
+ * Requires Super User access.
*
* The website is defined by a name and an array of URLs.
- * The name must not be empty.
- * The URLs array must contain at least one URL called the 'main_url' ;
- * if several URLs are provided in the array, they will be recorded as Alias URLs for
- * this website.
- *
- * Requires Super User access.
+ * @param string Site name
+ * @param array|string The URLs array must contain at least one URL called the 'main_url' ;
+ * if several URLs are provided in the array, they will be recorded
+ * as Alias URLs for this website.
+ * @param string Comma separated list of IPs to exclude from the reports (allows wildcards)
+ * @param string Timezone string, eg. 'Europe/London'
*
* @return int the website ID created
*/
- static public function addSite( $siteName, $urls )
+ public function addSite( $siteName, $urls, $excludedIps = null, $excludedQueryParameters = null, $timezone = null, $currency = null )
{
Piwik::checkUserIsSuperUser();
- self::checkName($siteName);
- $urls = self::cleanParameterUrls($urls);
- self::checkUrls($urls);
- self::checkAtLeastOneUrl($urls);
+ $this->checkName($siteName);
+ $urls = $this->cleanParameterUrls($urls);
+ $this->checkUrls($urls);
+ $this->checkAtLeastOneUrl($urls);
+ $timezone = trim($timezone);
+
+ if(empty($timezone))
+ {
+ $timezone = $this->getDefaultTimezone();
+ }
+ $this->checkValidTimezone($timezone);
+
+ if(empty($currency))
+ {
+ $currency = $this->getDefaultCurrency();
+ }
+ $this->checkValidCurrency($currency);
$db = Zend_Registry::get('db');
$url = $urls[0];
$urls = array_slice($urls, 1);
- $db->insert(Piwik::prefixTable("site"), array(
- 'name' => $siteName,
- 'main_url' => $url,
- )
- );
+ $bind = array( 'name' => $siteName,
+ 'main_url' => $url,
+ 'ts_created' => Piwik_Date::now()->getDatetime()
+ );
+
+ $bind['excluded_ips'] = $this->checkAndReturnExcludedIps($excludedIps);
+ $bind['excluded_parameters'] = $this->checkAndReturnExcludedQueryParameters($excludedQueryParameters);
+ $bind['timezone'] = $timezone;
+ $bind['currency'] = $currency;
+ $db->insert(Piwik_Common::prefixTable("site"), $bind);
$idSite = $db->lastInsertId();
- self::insertSiteUrls($idSite, $urls);
+ $this->insertSiteUrls($idSite, $urls);
// we reload the access list which doesn't yet take in consideration this new website
Zend_Registry::get('access')->reloadAccess();
- self::postUpdateWebsite($idSite);
+ $this->postUpdateWebsite($idSite);
return (int)$idSite;
}
- private static function postUpdateWebsite($idSite)
+ private function postUpdateWebsite($idSite)
{
Piwik_Common::regenerateCacheWebsiteAttributes($idSite);
}
@@ -261,11 +318,11 @@ class Piwik_SitesManager_API
*
* @param int $idSite
*/
- static public function deleteSite( $idSite )
+ public function deleteSite( $idSite )
{
Piwik::checkUserIsSuperUser();
- $idSites = Piwik_SitesManager_API::getAllSitesId();
+ $idSites = Piwik_SitesManager_API::getInstance()->getAllSitesId();
if(!in_array($idSite, $idSites))
{
throw new Exception("website id = $idSite not found");
@@ -278,13 +335,13 @@ class Piwik_SitesManager_API
$db = Zend_Registry::get('db');
- $db->query("DELETE FROM ".Piwik::prefixTable("site")."
+ $db->query("DELETE FROM ".Piwik_Common::prefixTable("site")."
WHERE idsite = ?", $idSite);
- $db->query("DELETE FROM ".Piwik::prefixTable("site_url")."
+ $db->query("DELETE FROM ".Piwik_Common::prefixTable("site_url")."
WHERE idsite = ?", $idSite);
- $db->query("DELETE FROM ".Piwik::prefixTable("access")."
+ $db->query("DELETE FROM ".Piwik_Common::prefixTable("access")."
WHERE idsite = ?", $idSite);
Piwik_Common::deleteCacheWebsiteAttributes($idSite);
@@ -296,7 +353,7 @@ class Piwik_SitesManager_API
*
* @exception if the parameter is not an array or if array empty
*/
- static private function checkAtLeastOneUrl( $urls )
+ private function checkAtLeastOneUrl( $urls )
{
if(!is_array($urls)
|| count($urls) == 0)
@@ -305,6 +362,52 @@ class Piwik_SitesManager_API
}
}
+ private function checkValidTimezone($timezone)
+ {
+ $timezones = $this->getTimezonesList();
+ foreach($timezones as $continent => $cities)
+ {
+ foreach($cities as $timezoneId => $city)
+ {
+ if($timezoneId == $timezone)
+ {
+ return true;
+ }
+ }
+ }
+ throw new Exception(Piwik_TranslateException('SitesManager_ExceptionInvalidTimezone', array($timezone)));
+ }
+
+ private function checkValidCurrency($currency)
+ {
+ if(!in_array($currency, array_keys($this->getCurrencyList())))
+ {
+ throw new Exception(Piwik_TranslateException('SitesManager_ExceptionInvalidCurrency', array($currency, "USD, EUR, etc.")));
+ }
+ }
+
+ /**
+ * Checks that the submitted IPs (comma separated list) are valid
+ * Returns the cleaned up IPs
+ * @param $excludedIps
+ *
+ * @return array of IPs
+ */
+ private function checkAndReturnExcludedIps($excludedIps)
+ {
+ $ips = explode(',', $excludedIps);
+ $ips = array_map('trim', $ips);
+ $ips = array_filter($ips, 'strlen');
+ foreach($ips as $ip)
+ {
+ if(!$this->isValidIp($ip))
+ {
+ throw new Exception(Piwik_TranslateException('SitesManager_ExceptionInvalidIPFormat', array($ip, "1.2.3.4 or 1.2.3.*")));
+ }
+ }
+ $ips = implode(',', $ips);
+ return $ips;
+ }
/**
* Add a list of alias Urls to the given idSite
*
@@ -313,22 +416,136 @@ class Piwik_SitesManager_API
*
* @return int the number of inserted URLs
*/
- static public function addSiteAliasUrls( $idSite, $urls)
+ public function addSiteAliasUrls( $idSite, $urls)
{
Piwik::checkUserHasAdminAccess( $idSite );
- $urls = self::cleanParameterUrls($urls);
- self::checkUrls($urls);
+ $urls = $this->cleanParameterUrls($urls);
+ $this->checkUrls($urls);
- $urlsInit = self::getSiteUrlsFromId($idSite);
+ $urlsInit = $this->getSiteUrlsFromId($idSite);
$toInsert = array_diff($urls, $urlsInit);
- self::insertSiteUrls($idSite, $toInsert);
- self::postUpdateWebsite($idSite);
+ $this->insertSiteUrls($idSite, $toInsert);
+ $this->postUpdateWebsite($idSite);
return count($toInsert);
}
/**
+ * Sets IPs to be excluded from all websites. IPs can contain wildcards.
+ * Will also apply to websites created in the future.
+ *
+ * @param string Comma separated list of IPs to exclude from being tracked (allows wildcards)
+ * @return bool
+ */
+ public function setGlobalExcludedIps($excludedIps)
+ {
+ Piwik::checkUserIsSuperUser();
+ $excludedIps = $this->checkAndReturnExcludedIps($excludedIps);
+ Piwik_SetOption(self::OPTION_EXCLUDED_IPS_GLOBAL, $excludedIps);
+ Piwik_Common::deleteAllCache();
+ return true;
+ }
+
+ /**
+ * Returns the list of URL query parameters that are excluded from all websites
+ *
+ * @return string Comma separated list of URL parameters
+ */
+ public function getExcludedQueryParametersGlobal()
+ {
+ Piwik::checkUserHasSomeAdminAccess();
+ return Piwik_GetOption(self::OPTION_EXCLUDED_QUERY_PARAMETERS_GLOBAL);
+ }
+
+ /**
+ * Sets list of URL query parameters to be excluded on all websites.
+ * Will also apply to websites created in the future.
+ *
+ * @param string Comma separated list of URL query parameters to exclude from URLs
+ * @return bool
+ */
+ public function setGlobalExcludedQueryParameters($excludedQueryParameters)
+ {
+ Piwik::checkUserIsSuperUser();
+ $excludedQueryParameters = $this->checkAndReturnExcludedQueryParameters($excludedQueryParameters);
+ Piwik_SetOption(self::OPTION_EXCLUDED_QUERY_PARAMETERS_GLOBAL, $excludedQueryParameters);
+ Piwik_Common::deleteAllCache();
+ return true;
+ }
+
+ /**
+ * Returns the list of IPs that are excluded from all websites
+ *
+ * @return string Comma separated list of IPs
+ */
+ public function getExcludedIpsGlobal()
+ {
+ Piwik::checkUserHasSomeAdminAccess();
+ return Piwik_GetOption(self::OPTION_EXCLUDED_IPS_GLOBAL);
+ }
+
+ /**
+ * Returns the default currency that will be set when creating a website through the API.
+ *
+ * @return string Currency ID eg. 'USD'
+ */
+ public function getDefaultCurrency()
+ {
+ Piwik::checkUserHasSomeAdminAccess();
+ $defaultCurrency = Piwik_GetOption(self::OPTION_DEFAULT_CURRENCY);
+ if($defaultCurrency)
+ {
+ return $defaultCurrency;
+ }
+ return 'USD';
+ }
+
+ /**
+ * Sets the default currency that will be used when creating websites
+ *
+ * @param $defaultCurrency string eg. 'USD'
+ * @return bool
+ */
+ public function setDefaultCurrency($defaultCurrency)
+ {
+ Piwik::checkUserIsSuperUser();
+ $this->checkValidCurrency($defaultCurrency);
+ Piwik_SetOption(self::OPTION_DEFAULT_CURRENCY, $defaultCurrency);
+ return true;
+ }
+
+ /**
+ * Returns the default timezone that will be set when creating a website through the API.
+ * Via the UI, if the default timezone is not UTC, it will be pre-selected in the drop down
+ *
+ * @return string Timezone eg. UTC+7 or Europe/Paris
+ */
+ public function getDefaultTimezone()
+ {
+ $defaultTimezone = Piwik_GetOption(self::OPTION_DEFAULT_TIMEZONE);
+ if($defaultTimezone)
+ {
+ return $defaultTimezone;
+ }
+ return 'UTC';
+ }
+
+ /**
+ * Sets the default timezone that will be used when creating websites
+ *
+ * @param $defaultTimezone string eg. Europe/Paris or UTC+8
+ * @return bool
+ */
+ public function setDefaultTimezone($defaultTimezone)
+ {
+ Piwik::checkUserIsSuperUser();
+ $this->checkValidTimezone($defaultTimezone);
+ Piwik_SetOption(self::OPTION_DEFAULT_TIMEZONE, $defaultTimezone);
+ return true;
+ }
+
+ /**
* Update an existing website.
* If only one URL is specified then only the main url will be updated.
* If several URLs are specified, both the main URL and the alias URLs will be updated.
@@ -336,59 +553,234 @@ class Piwik_SitesManager_API
* @param int website ID defining the website to edit
* @param string website name
* @param string|array the website URLs
+ * @param string Comma separated list of IPs to exclude from being tracked (allows wildcards)
+ * @param string Timezone
*
* @exception if any of the parameter is not correct
*
* @return bool true on success
*/
- static public function updateSite( $idSite, $siteName, $urls = null)
+ public function updateSite( $idSite, $siteName, $urls = null, $excludedIps = null, $excludedQueryParameters = null, $timezone = null, $currency = null)
{
Piwik::checkUserHasAdminAccess($idSite);
- self::checkName($siteName);
+ $this->checkName($siteName);
// SQL fields to update
$bind = array();
if(!is_null($urls))
{
- $urls = self::cleanParameterUrls($urls);
- self::checkUrls($urls);
- self::checkAtLeastOneUrl($urls);
+ $urls = $this->cleanParameterUrls($urls);
+ $this->checkUrls($urls);
+ $this->checkAtLeastOneUrl($urls);
$url = $urls[0];
$bind['main_url'] = $url;
}
+
+ if(!is_null($currency))
+ {
+ $currency = trim($currency);
+ $this->checkValidCurrency($currency);
+ $bind['currency'] = $currency;
+ }
+ if(!is_null($timezone))
+ {
+ $timezone = trim($timezone);
+ $this->checkValidTimezone($timezone);
+ $bind['timezone'] = $timezone;
+ }
+ $bind['excluded_ips'] = $this->checkAndReturnExcludedIps($excludedIps);
+ $bind['excluded_parameters'] = $this->checkAndReturnExcludedQueryParameters($excludedQueryParameters);
$bind['name'] = $siteName;
-
$db = Zend_Registry::get('db');
- $db->update(Piwik::prefixTable("site"),
+ $db->update(Piwik_Common::prefixTable("site"),
$bind,
"idsite = $idSite"
);
// we now update the main + alias URLs
- self::deleteSiteAliasUrls($idSite);
+ $this->deleteSiteAliasUrls($idSite);
if(count($urls) > 1)
{
- $insertedUrls = self::addSiteAliasUrls($idSite, array_slice($urls,1));
+ $insertedUrls = $this->addSiteAliasUrls($idSite, array_slice($urls,1));
+ }
+ $this->postUpdateWebsite($idSite);
+ }
+
+ private function checkAndReturnExcludedQueryParameters($parameters)
+ {
+ $parameters = trim($parameters);
+ if(empty($parameters))
+ {
+ return '';
}
- self::postUpdateWebsite($idSite);
+
+ $parameters = explode(',', $parameters);
+ $parameters = array_map('trim', $parameters);
+ $parameters = array_filter($parameters, 'strlen');
+ $parameters = array_unique($parameters);
+ return implode(',', $parameters);
+ }
+
+ /**
+ * Returns the list of supported currencies
+ * @see getCurrencySymbols()
+ * @return array ( currencyId => currencyName)
+ */
+ public function getCurrencyList()
+ {
+ return array(
+ 'USD' => 'US Dollar ($)',
+ 'EUR' => 'Euro (€)',
+ 'JPY' => 'Japanese Yen (¥)',
+ 'GBP' => 'British Pound Sterling (£)',
+ 'AUD' => 'Australian Dollar (A$)',
+ 'KRW' => 'South Korean Won (₩)',
+ 'BRL' => 'Brazilian Real (R$)',
+ 'CNY' => 'Chinese Yuan Renminbi (CN¥)',
+ 'DKK' => 'Danish Krone (Dkr)',
+ 'RUB' => 'Russian Ruble (RUB)',
+ 'SEK' => 'Swedish Krona (Skr)',
+ 'NOK' => 'Norwegian Krone (Nkr)',
+ 'PLN' => 'Polish Zloty (zł)',
+ 'TRY' => 'Turkish Lira (TL)',
+ 'TWD' => 'New Taiwan Dollar (NT$)',
+ 'HKD' => 'Hong Kong Dollar (HK$)',
+ 'THB' => 'Thai Baht (฿)',
+ 'IDR' => 'Indonesian Rupiah (Rp)',
+ 'ARS' => 'Argentine Peso (AR$)',
+ 'MXN' => 'Mexican Peso (MXN)',
+ 'VND' => 'Vietnamese Dong (₫)',
+ 'PHP' => 'Philippine Peso (Php)',
+ 'INR' => 'Indian Rupee (Rs.)',
+ 'VEF' => 'Venezuelan bolívar (Bs. F)',
+ 'CHF' => 'Swiss Franc (Fr.)',
+ );
+ }
+
+ /**
+ * Returns the list of currency symbols
+ * @see getCurrencyList()
+ * @return array( currencyId => currencySymbol )
+ */
+ public function getCurrencySymbols()
+ {
+ return array(
+ 'USD' => '$',
+ 'EUR' => '€',
+ 'JPY' => '¥',
+ 'GBP' => '£',
+ 'AUD' => 'A$',
+ 'KRW' => '₩',
+ 'BRL' => 'R$',
+ 'CNY' => 'CN¥',
+ 'DKK' => 'Dkr',
+ 'RUB' => 'RUB',
+ 'SEK' => 'Skr',
+ 'NOK' => 'Nkr',
+ 'PLN' => 'zł',
+ 'TRY' => 'TL',
+ 'TWD' => 'NT$',
+ 'HKD' => 'HK$',
+ 'THB' => '฿',
+ 'IDR' => 'Rp',
+ 'ARS' => 'AR$',
+ 'MXN' => 'MXN',
+ 'VND' => '₫',
+ 'PHP' => 'Php',
+ 'INR' => 'Rs.',
+ 'VEF' => 'Bs. F',
+ 'CHF' => 'Fr.',
+ );
+ }
+
+
+ /**
+ * Returns the list of timezones supported.
+ * Used for addSite and updateSite
+ *
+ * @TODO NOT COMPATIBLE WITH API RESPONSE AUTO BUILDER
+ *
+ * @return array of timezone strings
+ */
+ public function getTimezonesList()
+ {
+ if(!Piwik::isTimezoneSupportEnabled())
+ {
+ return array('UTC' => $this->getTimezonesListUTCOffsets());
+ }
+
+ $continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific');
+ $timezones = timezone_identifiers_list();
+
+ $return = array();
+ foreach($timezones as $timezone)
+ {
+ $timezoneExploded = explode('/', $timezone);
+ $continent = $timezoneExploded[0];
+
+ // only display timezones that are grouped by continent
+ if(!in_array($continent, $continents))
+ {
+ continue;
+ }
+ $city = $timezoneExploded[1];
+ if(!empty($timezoneExploded[2]))
+ {
+ $city .= ' - '.$timezoneExploded[2];
+ }
+ $city = str_replace('_', ' ', $city);
+ $return[$continent][$timezone] = $city;
+ }
+
+ foreach($continents as $continent)
+ {
+ ksort($return[$continent]);
+ }
+
+ $return['UTC'] = $this->getTimezonesListUTCOffsets();
+ return $return;
+ }
+
+ private function getTimezonesListUTCOffsets()
+ {
+ // manually add the UTC offsets
+ $GmtOffsets = array (-12, -11.5, -11, -10.5, -10, -9.5, -9, -8.5, -8, -7.5, -7, -6.5, -6, -5.5, -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5,
+ 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 7.5, 8, 8.5, 8.75, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.75, 13, 13.75, 14);
+
+ $return = array();
+ foreach($GmtOffsets as $offset)
+ {
+ if($offset > 0)
+ {
+ $offset = '+'.$offset;
+ }
+ elseif($offset == 0)
+ {
+ $offset = '';
+ }
+ $offset = 'UTC' . $offset;
+ $offsetName = str_replace(array('.25','.5','.75'), array(':15',':30',':45'), $offset);
+ $return[$offset] = $offsetName;
+ }
+ return $return;
}
/**
* Insert the list of alias URLs for the website.
* The URLs must not exist already for this website!
*/
- static private function insertSiteUrls($idSite, $urls)
+ private function insertSiteUrls($idSite, $urls)
{
if(count($urls) != 0)
{
$db = Zend_Registry::get('db');
foreach($urls as $url)
{
- $db->insert(Piwik::prefixTable("site_url"), array(
+ $db->insert(Piwik_Common::prefixTable("site_url"), array(
'idsite' => $idSite,
'url' => $url
)
@@ -400,10 +792,10 @@ class Piwik_SitesManager_API
/**
* Delete all the alias URLs for the given idSite.
*/
- static private function deleteSiteAliasUrls($idsite)
+ private function deleteSiteAliasUrls($idsite)
{
$db = Zend_Registry::get('db');
- $db->query("DELETE FROM ".Piwik::prefixTable("site_url") ."
+ $db->query("DELETE FROM ".Piwik_Common::prefixTable("site_url") ."
WHERE idsite = ?", $idsite);
}
@@ -412,7 +804,7 @@ class Piwik_SitesManager_API
*
* @return string the URL without the trailing slash
*/
- static private function removeTrailingSlash($url)
+ private function removeTrailingSlash($url)
{
// if there is a final slash, we take the URL without this slash (expected URL format)
if(strlen($url) > 5
@@ -428,17 +820,33 @@ class Piwik_SitesManager_API
*
* @return bool
*/
- static private function isValidUrl( $url )
+ private function isValidUrl( $url )
{
return Piwik_Common::isLookLikeUrl($url);
}
/**
+ * Tests if the IP is a valid IP, allowing wildcards, except in the first octet.
+ * Wildcards can only be used from right to left, ie. 1.1.*.* is allowed, but 1.1.*.1 is not.
+ *
+ * @param $ip
+ * @return bool
+ */
+ private function isValidIp( $ip )
+ {
+ return preg_match('~^(\d+)\.(\d+)\.(\d+)\.(\d+)$~', $ip, $matches) !== 0
+ || preg_match('~^(\d+)\.(\d+)\.(\d+)\.\*$~', $ip, $matches) !== 0
+ || preg_match('~^(\d+)\.(\d+)\.\*.\*$~', $ip, $matches) !== 0
+ || preg_match('~^(\d+)\.\*\.\*\.\*$~', $ip, $matches) !== 0
+ ;
+ }
+
+ /**
* Check that the website name has a correct format.
*
* @exception if the website name is empty
*/
- static private function checkName($siteName)
+ private function checkName($siteName)
{
if(empty($siteName))
{
@@ -452,11 +860,11 @@ class Piwik_SitesManager_API
* @exception if any of the urls is not valid
* @param array
*/
- static private function checkUrls($urls)
+ private function checkUrls($urls)
{
foreach($urls as $url)
{
- if(!self::isValidUrl($url))
+ if(!$this->isValidUrl($url))
{
throw new Exception(sprintf(Piwik_TranslateException("SitesManager_ExceptionInvalidUrl"),$url));
}
@@ -471,19 +879,20 @@ class Piwik_SitesManager_API
* @param string|array urls
* @return array the array of cleaned URLs
*/
- static private function cleanParameterUrls( $urls )
+ private function cleanParameterUrls( $urls )
{
if(!is_array($urls))
{
$urls = array($urls);
}
+
+ $urls = array_map('urldecode', $urls);
foreach($urls as &$url)
{
- $url = self::removeTrailingSlash($url);
+ $url = $this->removeTrailingSlash($url);
}
$urls = array_unique($urls);
return $urls;
}
}
-
diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php
index ddf93d109b..84dc3d5a03 100644
--- a/plugins/SitesManager/Controller.php
+++ b/plugins/SitesManager/Controller.php
@@ -19,17 +19,56 @@ class Piwik_SitesManager_Controller extends Piwik_Controller
function index()
{
$view = Piwik_View::factory('SitesManager');
- $sites = Piwik_SitesManager_API::getSitesWithAdminAccess();
+ $sites = Piwik_SitesManager_API::getInstance()->getSitesWithAdminAccess();
foreach($sites as &$site)
{
- $site['alias_urls'] = Piwik_SitesManager_API::getSiteUrlsFromId($site['idsite']);
+ $site['alias_urls'] = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($site['idsite']);
+ $site['excluded_ips'] = str_replace(',','<br/>', $site['excluded_ips']);
+ $site['excluded_parameters'] = str_replace(',','<br/>', $site['excluded_parameters']);
}
$view->adminSites = $sites;
+
+ $timezones = Piwik_SitesManager_API::getInstance()->getTimezonesList();
+ $view->timezoneSupported = Piwik::isTimezoneSupportEnabled();
+ $view->timezones = json_encode($timezones);
+ $view->defaultTimezone = Piwik_SitesManager_API::getInstance()->getDefaultTimezone();
+
+ $view->currencies = json_encode(Piwik_SitesManager_API::getInstance()->getCurrencyList());
+ $view->defaultCurrency = Piwik_SitesManager_API::getInstance()->getDefaultCurrency();
+
+ $view->utcTime = Piwik_Date::now()->getDatetime();
+ $excludedIpsGlobal = Piwik_SitesManager_API::getInstance()->getExcludedIpsGlobal();
+ $view->globalExcludedIps = str_replace(',',"\n", $excludedIpsGlobal);
+ $excludedQueryParametersGlobal = Piwik_SitesManager_API::getInstance()->getExcludedQueryParametersGlobal();
+ $view->globalExcludedQueryParameters = str_replace(',',"\n", $excludedQueryParametersGlobal);
+ $view->currentIpAddress = Piwik_Common::getIpString();
+
$this->setGeneralVariablesView($view);
$view->menu = Piwik_GetAdminMenu();
echo $view->render();
}
+ function setGlobalSettings()
+ {
+ $response = new Piwik_API_ResponseBuilder(Piwik_Common::getRequestVar('format'));
+
+ try {
+ $this->checkTokenInUrl();
+ $timezone = Piwik_Common::getRequestVar('timezone', false);
+ $excludedIps = Piwik_Common::getRequestVar('excludedIps', false);
+ $excludedQueryParameters = Piwik_Common::getRequestVar('excludedQueryParameters', false);
+ $currency = Piwik_Common::getRequestVar('currency', false);
+ Piwik_SitesManager_API::getInstance()->setDefaultTimezone($timezone);
+ Piwik_SitesManager_API::getInstance()->setDefaultCurrency($currency);
+ Piwik_SitesManager_API::getInstance()->setGlobalExcludedQueryParameters($excludedQueryParameters);
+ Piwik_SitesManager_API::getInstance()->setGlobalExcludedIps($excludedIps);
+ $toReturn = $response->getResponse();
+ } catch(Exception $e ) {
+ $toReturn = $response->getResponseException( $e );
+ }
+ echo $toReturn;
+ }
+
function displayJavascriptCode()
{
$idSite = Piwik_Common::getRequestVar('idsite', 1);
@@ -38,6 +77,8 @@ class Piwik_SitesManager_Controller extends Piwik_Controller
$view = Piwik_View::factory('DisplayJavascriptCode');
$this->setGeneralVariablesView($view);
$view->menu = Piwik_GetAdminMenu();
+ $site = new Piwik_Site($idSite);
+ $view->displaySiteName = $site->getName();
$view->jsTag = $jsTag;
echo $view->render();
}
diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php
index b2542e966c..dfca3e2c6f 100644
--- a/plugins/SitesManager/SitesManager.php
+++ b/plugins/SitesManager/SitesManager.php
@@ -19,11 +19,10 @@ class Piwik_SitesManager extends Piwik_Plugin
public function getInformation()
{
$info = array(
- 'name' => 'Sites Management',
- 'description' => 'Websites Management in Piwik: Add a new Website, Edit an existing one, Show the Javascript code to include on your pages. All the actions are also available through the API.',
+ 'description' => Piwik_Translate('SitesManager_PluginDescription'),
'author' => 'Piwik',
- 'homepage' => 'http://piwik.org/',
- 'version' => '0.1',
+ 'author_homepage' => 'http://piwik.org/',
+ 'version' => Piwik_Version::VERSION,
);
return $info;
}
@@ -33,21 +32,105 @@ class Piwik_SitesManager extends Piwik_Plugin
return array(
'template_css_import' => 'css',
'AdminMenu.add' => 'addMenu',
- 'Common.fetchWebsiteAttributes' => 'recordWebsiteHostsInCache',
+ 'Common.fetchWebsiteAttributes' => 'recordWebsiteDataInCache',
);
}
+ function addMenu()
+ {
+ Piwik_AddAdminMenu('SitesManager_MenuSites',
+ array('module' => 'SitesManager', 'action' => 'index'),
+ Piwik::isUserHasSomeAdminAccess(),
+ $order = 5);
+ }
+
function css()
{
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"themes/default/styles.css\" />\n";
}
- function recordWebsiteHostsInCache($notification)
+ /**
+ * 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 $notification
+ * @return void
+ */
+ function recordWebsiteDataInCache($notification)
{
- $idsite = $notification->getNotificationInfo();
+ $idSite = $notification->getNotificationInfo();
// add the 'hosts' entry in the website array
$array =& $notification->getNotificationObject();
- $urls = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $array['hosts'] = $this->getTrackerHosts($idSite);
+ $array['excluded_ips'] = $this->getTrackerExcludedIps($idSite);
+ $array['excluded_parameters'] = $this->getTrackerExcludedQueryParameters($idSite);
+ }
+
+ /**
+ * Returns the array of excluded IPs to save in the config file
+ * @param $idSite
+ * @return array
+ */
+ private function getTrackerExcludedIps($idSite)
+ {
+ $website = Piwik_SitesManager_API::getInstance()->getSiteFromId($idSite);
+ $excludedIps = $website['excluded_ips'];
+ $globalExcludedIps = Piwik_SitesManager_API::getInstance()->getExcludedIpsGlobal();
+
+ $excludedIps .= ',' . $globalExcludedIps;
+
+ $ipRanges = array();
+ foreach(explode(',', $excludedIps) as $ip)
+ {
+ $ipMin = $ipMax = $ip;
+ if(substr_count($ip, '*') > 0)
+ {
+ $ipMin = str_replace('*', '0', $ip);
+ $ipMax = str_replace('*', '255', $ip);
+ }
+ $ipRange = array( ip2long($ipMin), ip2long($ipMax));
+
+ // we can still get invalid IPs at this stage (eg. ip2long(555.1.1.1) would return false)
+ if($ipRange[0] === false || $ipRange[1] === false)
+ {
+ continue;
+ }
+
+ // long data type is signed; convert to stringified unsigned number
+ $ipRange[0] = sprintf("%u", $ipRange[0]);
+ $ipRange[1] = sprintf("%u", $ipRange[1]);
+
+ $ipRanges[] = $ipRange;
+ }
+ return $ipRanges;
+ }
+
+ /**
+ * Returns the array of URL query parameters to exclude from URLs
+ * @param $idSite
+ * @return array
+ */
+ private function getTrackerExcludedQueryParameters($idSite)
+ {
+ $website = Piwik_SitesManager_API::getInstance()->getSiteFromId($idSite);
+ $excludedQueryParameters = $website['excluded_parameters'];
+ $globalExcludedQueryParameters = Piwik_SitesManager_API::getInstance()->getExcludedQueryParametersGlobal();
+
+ $excludedQueryParameters .= ',' . $globalExcludedQueryParameters;
+ $parameters = explode(',', $excludedQueryParameters);
+ $parameters = array_filter($parameters, 'strlen');
+ $parameters = array_unique($parameters);
+ return $parameters;
+ }
+
+ /**
+ * Returns the hosts alias URLs
+ * @param $idSite
+ * @return array
+ */
+ private function getTrackerHosts($idSite)
+ {
+ $urls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idSite);
$hosts = array();
foreach($urls as $url)
{
@@ -57,12 +140,7 @@ class Piwik_SitesManager extends Piwik_Plugin
$hosts[] = $url['host'];
}
}
- $array['hosts'] = $hosts;
+ return $hosts;
}
- function addMenu()
- {
- Piwik_AddAdminMenu('SitesManager_MenuSites', array('module' => 'SitesManager', 'action' => 'index'));
- }
}
-
diff --git a/plugins/SitesManager/templates/DisplayJavascriptCode.tpl b/plugins/SitesManager/templates/DisplayJavascriptCode.tpl
index 9fa7c7f617..29a1e53170 100644
--- a/plugins/SitesManager/templates/DisplayJavascriptCode.tpl
+++ b/plugins/SitesManager/templates/DisplayJavascriptCode.tpl
@@ -2,7 +2,6 @@
{assign var=showPeriodSelection value=false}
{include file="CoreAdminHome/templates/header.tpl"}
{loadJavascriptTranslations plugins='SitesManager'}
-{include file="CoreAdminHome/templates/menu.tpl"}
{literal}
<style>
@@ -13,7 +12,7 @@ code {
border-width:1px 1px 1px 5px;
direction:ltr;
display:block;
- font-size:80%;
+ font-size:90%;
margin:2px 2px 20px;
padding:4px;
text-align:left;
@@ -22,7 +21,7 @@ code {
</style>
{/literal}
-<h2>{$siteName}</h2>
+<h2>{$displaySiteName}</h2>
<p>{'SitesManager_JsTrackingTagHelp'|translate}:</p>
<code>{$jsTag}</code>
diff --git a/plugins/SitesManager/templates/SitesManager.js b/plugins/SitesManager/templates/SitesManager.js
index 7b523b98a4..cf14893c8c 100644
--- a/plugins/SitesManager/templates/SitesManager.js
+++ b/plugins/SitesManager/templates/SitesManager.js
@@ -1,8 +1,7 @@
function getDeleteSiteAJAX( idSite )
{
var ajaxRequest = piwikHelper.getStandardAjaxConf();
- piwikHelper.toggleAjaxLoading();
-
+
var parameters = {};
parameters.module = 'API';
parameters.format = 'json';
@@ -18,19 +17,28 @@ function getDeleteSiteAJAX( idSite )
function getAddSiteAJAX( row )
{
var ajaxRequest = piwikHelper.getStandardAjaxConf();
- piwikHelper.toggleAjaxLoading();
var parameters = {};
- var siteName = $(row).find('input#siteadd_name').val();
- var urls = $(row).find('textarea#siteadd_urls').val();
- var urls = urls.trim().split("\n");
-
+ var siteName = $(row).find('input#name').val();
+ var urls = $(row).find('textarea#urls').val();
+ urls = getApiFormatUrls(urls);
+ var excludedIps = $(row).find('textarea#excludedIps').val();
+ excludedIps = getApiFormatTextarea(excludedIps);
+ var timezone = encodeURIComponent($(row).find('#timezones option:selected').val());
+ var currency = encodeURIComponent($(row).find('#currencies option:selected').val());
+ var excludedQueryParameters = $(row).find('textarea#excludedQueryParameters').val();
+ excludedQueryParameters = getApiFormatTextarea(excludedQueryParameters);
+
var request = '';
request += '&module=API';
request += '&format=json';
request += '&method=SitesManager.addSite';
siteName = encodeURIComponent(siteName);
request += '&siteName='+siteName;
+ request += '&timezone='+timezone;
+ request += '&currency='+currency;
+ request += '&excludedIps='+excludedIps;
+ request += '&excludedQueryParameters='+excludedQueryParameters;
$.each(urls, function (key,value){ request+= '&urls[]='+escape(value);} );
request += '&token_auth=' + piwik.token_auth;
@@ -39,15 +47,33 @@ function getAddSiteAJAX( row )
return ajaxRequest;
}
+function getApiFormatUrls(urls)
+{
+ var aUrls = urls.trim().split("\n");
+ for(var i=0; i < aUrls.length; i++) {
+ aUrls[i] = encodeURIComponent(aUrls[i]);
+ }
+ return aUrls;
+}
+function getApiFormatTextarea(textareaContent)
+{
+ return textareaContent.trim().split("\n").join(',');
+}
+
function getUpdateSiteAJAX( row )
{
var ajaxRequest = piwikHelper.getStandardAjaxConf();
- piwikHelper.toggleAjaxLoading();
var siteName = $(row).find('input#siteName').val();
var idSite = $(row).children('#idSite').html();
- var urls = $(row).find('textarea#urls').val().trim().split("\n");
-
+ var urls = $(row).find('textarea#urls').val();
+ urls = getApiFormatUrls(urls);
+ var excludedIps = $(row).find('textarea#excludedIps').val();
+ excludedIps = getApiFormatTextarea(excludedIps);
+ var excludedQueryParameters = $(row).find('textarea#excludedQueryParameters').val();
+ excludedQueryParameters = getApiFormatTextarea(excludedQueryParameters);
+ var timezone = encodeURIComponent($(row).find('#timezones option:selected').val());
+ var currency = encodeURIComponent($(row).find('#currencies option:selected').val());
var request = '';
request += '&module=API';
request += '&format=json';
@@ -55,6 +81,10 @@ function getUpdateSiteAJAX( row )
siteName = encodeURIComponent(siteName);
request += '&siteName='+siteName;
request += '&idSite='+idSite;
+ request += '&timezone='+timezone;
+ request += '&currency='+currency;
+ request += '&excludedIps='+excludedIps;
+ request += '&excludedQueryParameters='+excludedQueryParameters;
$.each(urls, function (key,value){ if(value.length>1) request+= '&urls[]='+value;} );
request += '&token_auth=' + piwik.token_auth;
@@ -63,9 +93,31 @@ function getUpdateSiteAJAX( row )
return ajaxRequest;
}
+function getGlobalSettingsAJAX()
+{
+ var ajaxRequest = piwikHelper.getStandardAjaxConf('ajaxLoadingGlobalSettings', 'ajaxErrorGlobalSettings');
+ var timezone = encodeURIComponent($('#defaultTimezone option:selected').val());
+ var currency = encodeURIComponent($('#defaultCurrency option:selected').val());
+ var excludedIps = $('textarea#globalExcludedIps').val();
+ excludedIps = getApiFormatTextarea(excludedIps);
+ var excludedQueryParameters = $('textarea#globalExcludedQueryParameters').val();
+ excludedQueryParameters = getApiFormatTextarea(excludedQueryParameters);
+ var request = '';
+ request += 'module=SitesManager';
+ request += '&action=setGlobalSettings';
+ request += '&format=json';
+ request += '&timezone='+timezone;
+ request += '&currency='+currency;
+ request += '&excludedIps='+excludedIps;
+ request += '&excludedQueryParameters='+excludedQueryParameters;
+ request += '&token_auth=' + piwik.token_auth;
+ ajaxRequest.data = request;
+ return ajaxRequest;
+}
+
$(document).ready( function() {
$('.addRowSite').click( function() {
- piwikHelper.ajaxHideError();
+ piwikHelper.hideAjaxError();
$(this).toggle();
var numberOfRows = $('table#editSites')[0].rows.length;
@@ -73,22 +125,25 @@ $(document).ready( function() {
$(' <tr id="'+newRowId+'">\
<td>&nbsp;</td>\
- <td><input id="siteadd_name" value="Name" size=25></td>\
- <td><textarea cols=30 rows=3 id="siteadd_urls">http://siteUrl.com/\nhttp://siteUrl2.com/</textarea></td>\
- <td><img src="plugins/UsersManager/images/ok.png" class="addsite" href="#"></td>\
- <td><img src="plugins/UsersManager/images/remove.png" class="cancel"></td>\
+ <td><input id="name" value="Name" size="15" /></td>\
+ <td><textarea cols="25" rows="3" id="urls">http://siteUrl.com/\nhttp://siteUrl2.com/</textarea><br />'+aliasUrlsHelp+'</td>\
+ <td><textarea cols="20" rows="4" id="excludedIps"></textarea><br />'+excludedIpHelp+'</td>\
+ <td><textarea cols="20" rows="4" id="excludedQueryParameters"></textarea><br />'+excludedQueryParametersHelp+'</td>\
+ <td>'+getTimezoneSelector(defaultTimezone)+'<br />' + timezoneHelp + '</td>\
+ <td>'+getCurrencySelector(defaultCurrency)+'<br />' + currencyHelp + '</td>\
+ <td><img src="plugins/UsersManager/images/ok.png" class="addsite" href="#" title="' + _pk_translate('SitesManager_Save_js') + '" /></td>\
+ <td><img src="plugins/UsersManager/images/remove.png" class="cancel" title="' + _pk_translate('SitesManager_Cancel_js') +'" /></td>\
</tr>')
.appendTo('#editSites')
;
- $('#'+newRowId).keypress( submitSiteOnEnter );
$('.addsite').click( function(){ $.ajax( getAddSiteAJAX($('tr#'+newRowId)) ); } );
- $('.cancel').click(function() { piwikHelper.ajaxHideError(); $(this).parents('tr').remove(); $('.addRowSite').toggle(); });
-
+ $('.cancel').click(function() { piwikHelper.hideAjaxError(); $(this).parents('tr').remove(); $('.addRowSite').toggle(); });
+ return false;
} );
// when click on deleteuser, the we ask for confirmation and then delete the user
$('.deleteSite').click( function() {
- piwikHelper.ajaxHideError();
+ piwikHelper.hideAjaxError();
var idRow = $(this).attr('id');
var nameToDelete = $(this).parent().parent().find('input#siteName').val() || $(this).parent().parent().find('td#siteName').html();
var idsiteToDelete = $(this).parent().parent().find('#idSite').html();
@@ -101,7 +156,7 @@ $(document).ready( function() {
var alreadyEdited = new Array;
$('.editSite')
.click( function() {
- piwikHelper.ajaxHideError();
+ piwikHelper.hideAjaxError();
var idRow = $(this).attr('id');
if(alreadyEdited[idRow]==1) return;
alreadyEdited[idRow] = 1;
@@ -113,14 +168,39 @@ $(document).ready( function() {
var idName = $(n).attr('id');
if(idName == 'siteName')
{
- var contentAfter = '<input id="'+idName+'" value="'+contentBefore+'" size="25">';
+ var contentAfter = '<input id="'+idName+'" value="'+contentBefore+'" size="15" />';
$(n)
.html(contentAfter)
.keypress( submitSiteOnEnter );
}
if(idName == 'urls')
{
- var contentAfter = '<textarea cols=30 rows=3 id="urls">'+contentBefore.replace(/<br *\/? *>/gi,"\n")+'</textarea>';
+ var contentAfter = '<textarea cols="25" rows="3" id="urls">'+contentBefore.replace(/<br *\/? *>/gi,"\n")+'</textarea>';
+ contentAfter += '<br />'+aliasUrlsHelp;
+ $(n).html(contentAfter);
+ }
+ if(idName == 'excludedIps')
+ {
+ var contentAfter = '<textarea cols="20" rows="4" id="excludedIps">'+contentBefore.replace(/<br *\/? *>/gi,"\n")+'</textarea>';
+ contentAfter += '<br />'+excludedIpHelp;
+ $(n).html(contentAfter);
+ }
+ if(idName == 'excludedQueryParameters')
+ {
+ var contentAfter = '<textarea cols="20" rows="4" id="excludedQueryParameters">'+contentBefore.replace(/<br *\/? *>/gi,"\n")+'</textarea>';
+ contentAfter += '<br />'+excludedQueryParametersHelp;
+ $(n).html(contentAfter);
+ }
+ if(idName == 'timezone')
+ {
+ var contentAfter = getTimezoneSelector(contentBefore);
+ contentAfter += '<br />' + timezoneHelp;
+ $(n).html(contentAfter);
+ }
+ if(idName == 'currency')
+ {
+ var contentAfter = getCurrencySelector(contentBefore);
+ contentAfter += '<br />' + currencyHelp;
$(n).html(contentAfter);
}
}
@@ -128,15 +208,55 @@ $(document).ready( function() {
$(this)
.toggle()
.parent()
- .prepend( $('<img src="plugins/UsersManager/images/ok.png" class="updateSite">')
+ .prepend( $('<img src="plugins/UsersManager/images/ok.png" class="updateSite" title="' + _pk_translate('SitesManager_Save_js') + '" />')
.click( function(){ $.ajax( getUpdateSiteAJAX( $('tr#'+idRow) ) ); } )
);
}
);
+ $('#globalSettingsSubmit').click( function() {
+ $.ajax( getGlobalSettingsAJAX() );
+ });
+
+ $('#defaultTimezone').html( getTimezoneSelector(defaultTimezone));
+ $('#defaultCurrency').html( getCurrencySelector(defaultCurrency));
+
$('td.editableSite').click( function(){ $(this).parent().find('.editSite').click(); } );
});
-
+
+function getTimezoneSelector(selectedTimezone)
+{
+ var html = '<select id="timezones">';
+ for(var continent in timezones) {
+ html += '<optgroup label="' + continent + '">';
+ for(var timezoneId in timezones[continent]) {
+ var selected = '';
+ if(timezoneId == selectedTimezone) {
+ selected = ' selected="selected" ';
+ }
+ html += '<option ' + selected + ' value="'+ timezoneId + '">' + timezones[continent][timezoneId] + '</option>';
+ }
+ html += "</optgroup>\n";
+ }
+ html += '</select>';
+ return html;
+}
+
+
+function getCurrencySelector(selectedCurrency)
+{
+ var html = '<select id="currencies">';
+ for(var currency in currencies) {
+ var selected = '';
+ if(currency == selectedCurrency) {
+ selected = ' selected="selected" ';
+ }
+ html += '<option ' + selected + ' value="'+ currency + '">' + currencies[currency] + '</option>';
+ }
+ html += '</select>';
+ return html;
+}
+
function submitSiteOnEnter(e)
{
var key=e.keyCode || e.which;
diff --git a/plugins/SitesManager/templates/SitesManager.tpl b/plugins/SitesManager/templates/SitesManager.tpl
index 39d7f9261a..b61a3eaea2 100644
--- a/plugins/SitesManager/templates/SitesManager.tpl
+++ b/plugins/SitesManager/templates/SitesManager.tpl
@@ -2,9 +2,47 @@
{assign var=showPeriodSelection value=false}
{include file="CoreAdminHome/templates/header.tpl"}
{loadJavascriptTranslations plugins='SitesManager'}
-{include file="CoreAdminHome/templates/menu.tpl"}
+
+<script type="text/javascript">
+{capture assign=excludedIpHelpPlain}{'SitesManager_HelpExcludedIps'|translate:"1.2.3.*":"1.2.*.*"}<br /><br /> {'SitesManager_YourCurrentIpAddressIs'|translate:"<i>$currentIpAddress</i>"}{/capture}
+{assign var=excludedIpHelp value=$excludedIpHelpPlain|inlineHelp}
+var excludedIpHelp = '{$excludedIpHelp|escape:javascript}';
+var aliasUrlsHelp = '{'SitesManager_AliasUrlHelp'|translate|inlineHelp|escape:javascript}';
+{capture assign=defaultTimezoneHelpPlain}
+ {if $timezoneSupported}
+ {'SitesManager_ChooseCityInSameTimezoneAsYou'|translate}
+ {else}
+ {'SitesManager_AdvancedTimezoneSupportNotFound'|translate}
+ {/if} <br /><br />{'SitesManager_UTCTimeIs'|translate:$utcTime}
+{/capture}
+
+{capture assign=timezoneHelpPlain}
+ {$defaultTimezoneHelpPlain}
+ <br /><br />{'SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward'|translate}
+{/capture}
+
+{capture assign=currencyHelpPlain}
+ {'SitesManager_CurrencySymbolWillBeUsedForGoals'|translate|inlineHelp}
+{/capture}
+
+{capture assign=excludedQueryParametersHelp}
+ {'SitesManager_ListOfQueryParametersToExclude'|translate}
+ <br /><br />
+ {'SitesManager_PiwikWillAutomaticallyExcludeCommonSessionParameters'|translate:"phpsessid, sessionid, etc."}
+{/capture}
+{assign var=excludedQueryParametersHelp value=$excludedQueryParametersHelp|inlineHelp}
+var excludedQueryParametersHelp = '{$excludedQueryParametersHelp|escape:javascript}';
+var timezoneHelp = '{$timezoneHelpPlain|inlineHelp|escape:javascript}';
+var currencyHelp = '{$currencyHelpPlain|escape:javascript}';
+{assign var=defaultTimezoneHelp value=$defaultTimezoneHelpPlain|inlineHelp};
+var timezones = {$timezones};
+var currencies = {$currencies};
+var defaultTimezone = '{$defaultTimezone}';
+var defaultCurrency = '{$defaultCurrency}';
+</script>
<script type="text/javascript" src="plugins/SitesManager/templates/SitesManager.js"></script>
+
{literal}
<style>
.addRowSite:hover, .editableSite:hover, .addsite:hover, .cancel:hover, .deleteSite:hover, .editSite:hover, .updateSite:hover{
@@ -22,13 +60,27 @@
#editSites {
valign: top;
}
+option, select {
+ font-size:11px;
+}
+textarea {
+font-size:9pt;
+}
+.admin thead th {
+vertical-align:middle;
+}
</style>
{/literal}
+
<h2>{'SitesManager_WebsitesManagement'|translate}</h2>
-<p>{'SitesManager_MainDescription'|translate}</p>
+<p>{'SitesManager_MainDescription'|translate}
+{if $isSuperUser}
+<br />{'SitesManager_SuperUserCan'|translate:"<a href='#globalSettings'>":"</a>"}
+{/if}
+</p>
+{ajaxErrorDiv}
+{ajaxLoadingDiv}
-<div id="ajaxError" style="display:none"></div>
-<div id="ajaxLoading" style="display:none"><div id="loadingPiwik"><img src="themes/default/images/loading-blue.gif" alt="" /> {'General_LoadingData'|translate} </div></div>
{if $adminSites|@count == 0}
{'SitesManager_NoWebsites'|translate}
@@ -39,6 +91,10 @@
<th>{'SitesManager_Id'|translate}</th>
<th>{'SitesManager_Name'|translate}</th>
<th>{'SitesManager_Urls'|translate}</th>
+ <th>{'SitesManager_ExcludedIps'|translate}</th>
+ <th>{'SitesManager_ExcludedParameters'|translate|replace:" ":"<br />"}</th>
+ <th>{'SitesManager_Timezone'|translate}</th>
+ <th>{'SitesManager_Currency'|translate}</th>
<th> </th>
<th> </th>
<th> {'SitesManager_JsTrackingTag'|translate} </th>
@@ -50,15 +106,75 @@
<td id="idSite">{$site.idsite}</td>
<td id="siteName" class="editableSite">{$site.name}</td>
<td id="urls" class="editableSite">{foreach from=$site.alias_urls item=url}{$url}<br />{/foreach}</td>
- <td><img src='plugins/UsersManager/images/edit.png' class="editSite" id="row{$i}" href='#' alt="" /></td>
- <td><img src='plugins/UsersManager/images/remove.png' class="deleteSite" id="row{$i}" value="{'General_Delete'|translate}" alt="" /></td>
+ <td id="excludedIps" class="editableSite">{foreach from=$site.excluded_ips item=ip}{$ip}<br />{/foreach}</td>
+ <td id="excludedQueryParameters" class="editableSite">{foreach from=$site.excluded_parameters item=parameter}{$parameter}<br />{/foreach}</td>
+ <td id="timezone" class="editableSite">{$site.timezone}</td>
+ <td id="currency" class="editableSite">{$site.currency}</td>
+ <td><img src='plugins/UsersManager/images/edit.png' class="editSite" id="row{$i}" href='#' title="{'General_Edit'|translate}" /></td>
+ <td><img src='plugins/UsersManager/images/remove.png' class="deleteSite" id="row{$i}" title="{'General_Delete'|translate}" value="{'General_Delete'|translate}" /></td>
<td><a href='{url action=displayJavascriptCode idsite=$site.idsite}'>{'SitesManager_ShowTrackingTag'|translate}</a></td>
</tr>
{/foreach}
-
</tbody>
</table>
- <div class="addRowSite"><a href="#"><img src='plugins/UsersManager/images/add.png' alt="" /> {'SitesManager_AddSite'|translate}</a></div>
+ {if $isSuperUser}
+ <div class="addRowSite"><a href=""><img src='plugins/UsersManager/images/add.png' alt="" /> {'SitesManager_AddSite'|translate}</a></div>
+ {/if}
+{/if}
+
+{if $isSuperUser}
+<br />
+ <a name='globalSettings'></a>
+ <h2>{'SitesManager_GlobalWebsitesSettings'|translate}</h2>
+ <br />
+ <table style='width:600px' class="adminTable adminTableNoBorder" >
+
+ <tr><td colspan="2">
+ <b>{'SitesManager_GlobalListExcludedIps'|translate}</b>
+ <p>{'SitesManager_ListOfIpsToBeExcludedOnAllWebsites'|translate} </p>
+ </td></tr>
+ <tr><td>
+ <textarea cols="30" rows="3" id="globalExcludedIps">{$globalExcludedIps}
+</textarea>
+ </td><td>
+ {$excludedIpHelp}
+ </td></tr>
+
+ <tr><td colspan="2">
+ <b>{'SitesManager_GlobalListExcludedQueryParameters'|translate}</b>
+ <p>{'SitesManager_ListOfQueryParametersToBeExcludedOnAllWebsites'|translate} </p>
+ </td></tr>
+ <tr><td>
+ <textarea cols="30" rows="3" id="globalExcludedQueryParameters">{$globalExcludedQueryParameters}
+</textarea>
+ </td><td>
+ {$excludedQueryParametersHelp}
+ </td></tr>
+
+ <tr><td colspan="2">
+ <b>{'SitesManager_DefaultTimezoneForNewWebsites'|translate}</b>
+ <p>{'SitesManager_SelectDefaultTimezone'|translate} </p>
+ </td></tr>
+ <tr><td>
+ <div id='defaultTimezone'></div>
+ </td><td>
+ {$defaultTimezoneHelp}
+ </td></tr>
+
+ <tr><td colspan="2">
+ <b>{'SitesManager_DefaultCurrencyForNewWebsites'|translate}</b>
+ <p>{'SitesManager_SelectDefaultCurrency'|translate} </p>
+ </td></tr>
+ <tr><td>
+ <div id='defaultCurrency'></div>
+ </td><td>
+ {$currencyHelpPlain}
+ </td></tr>
+ </table>
+ <span style='margin-left:20px'><input type="submit" class="submit" id='globalSettingsSubmit' value="{'General_Save'|translate}" /></span>
+ {ajaxErrorDiv id=ajaxErrorGlobalSettings}
+ {ajaxLoadingDiv id=ajaxLoadingGlobalSettings}
{/if}
+<br /><br /><br /><br />
{include file="CoreAdminHome/templates/footer.tpl"}
diff --git a/plugins/SitesManager/tests/SitesManager.test.php b/plugins/SitesManager/tests/SitesManager.test.php
index db4c765812..fbaf8c7adf 100644
--- a/plugins/SitesManager/tests/SitesManager.test.php
+++ b/plugins/SitesManager/tests/SitesManager.test.php
@@ -7,10 +7,15 @@ if(!defined('PIWIK_CONFIG_TEST_INCLUDED'))
require_once PIWIK_PATH_TEST_TO_ROOT . "/tests/config_test.php";
}
-require_once "Database.test.php";
+require_once PIWIK_PATH_TEST_TO_ROOT . '/tests/core/Database.test.php';
class Test_Piwik_SitesManager extends Test_Database
{
+ public function __construct()
+ {
+ Piwik_PluginsManager::getInstance()->unloadPlugin('ExampleFeedburner');
+ parent::__construct();
+ }
public function setUp()
{
parent::setUp();
@@ -19,6 +24,9 @@ class Test_Piwik_SitesManager extends Test_Database
$pseudoMockAccess = new FakeAccess;
FakeAccess::$superUser = true;
Zend_Registry::set('access', $pseudoMockAccess);
+
+ // clear static Site cache
+ Piwik_Site::clearCache();
}
/**
@@ -27,7 +35,7 @@ class Test_Piwik_SitesManager extends Test_Database
public function test_addSite_emptyName()
{
try {
- Piwik_SitesManager_API::addSite("",array("http://piwik.net"));
+ Piwik_SitesManager_API::getInstance()->addSite("",array("http://piwik.net"));
}
catch (Exception $expected) {
return;
@@ -41,7 +49,7 @@ class Test_Piwik_SitesManager extends Test_Database
public function test_addSite_noUrls()
{
try {
- Piwik_SitesManager_API::addSite("name",array());
+ Piwik_SitesManager_API::getInstance()->addSite("name",array());
}
catch (Exception $expected) {
return;
@@ -55,7 +63,7 @@ class Test_Piwik_SitesManager extends Test_Database
public function test_addSite_wrongUrls1()
{
try {
- Piwik_SitesManager_API::addSite("name",array(""));
+ Piwik_SitesManager_API::getInstance()->addSite("name",array(""));
}
catch (Exception $expected) {
return;
@@ -68,7 +76,7 @@ class Test_Piwik_SitesManager extends Test_Database
public function test_addSite_wrongUrls2()
{
try {
- Piwik_SitesManager_API::addSite("name","");
+ Piwik_SitesManager_API::getInstance()->addSite("name","");
}
catch (Exception $expected) {
return;
@@ -82,7 +90,7 @@ class Test_Piwik_SitesManager extends Test_Database
public function test_addSite_wrongUrls3()
{
try {
- Piwik_SitesManager_API::addSite("name","httpww://piwik.net");
+ Piwik_SitesManager_API::getInstance()->addSite("name","httpww://piwik.net");
}
catch (Exception $expected) {
return;
@@ -96,7 +104,7 @@ class Test_Piwik_SitesManager extends Test_Database
public function test_addSite_wrongUrls4()
{
try {
- Piwik_SitesManager_API::addSite("name","httpww://piwik.net/gqg~#");
+ Piwik_SitesManager_API::getInstance()->addSite("name","httpww://piwik.net/gqg~#");
}
catch (Exception $expected) {
return;
@@ -105,19 +113,68 @@ class Test_Piwik_SitesManager extends Test_Database
}
/**
+ * Test with valid IPs
+ */
+ public function test_addSite_excludedIpsAndtimezoneAndCurrencyAndExcludedQueryParameters_valid()
+ {
+ $ips = '1.2.3.4,1.1.1.*,1.2.*.*,1.*.*.*';
+ $timezone = 'Europe/Paris';
+ $currency = 'EUR';
+ $excludedQueryParameters = 'p1,P2, P33333';
+ $expectedExcludedQueryParameters = 'p1,P2,P33333';
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("name","http://piwik.net/", $ips, $excludedQueryParameters,$timezone, $currency);
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId($idsite);
+ $this->assertEqual($siteInfo['excluded_ips'], $ips);
+ $this->assertEqual($siteInfo['timezone'], $timezone);
+ $this->assertEqual($siteInfo['currency'], $currency);
+ $this->assertEqual($siteInfo['excluded_parameters'], $expectedExcludedQueryParameters);
+ }
+
+ /**
+ * Test with invalid IPs
+ */
+ public function test_addSite_excludedIps_notValid()
+ {
+ $invalidIps = array(
+ '35817587341',
+ 'ieagieha',
+ '1.2.3',
+ '*.1.1.1',
+ '*.*.1.1',
+ '*.*.*.1',
+ '*.*.*.*',
+ '1.1.1.1.1',
+ );
+ foreach($invalidIps as $ip)
+ {
+ $raised = false;
+ try {
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("name","http://piwik.net/", $ip);
+ } catch(Exception $e) {
+ $raised = true;
+ }
+ if(!$raised)
+ {
+ $this->fail('was expecting invalid IP exception to raise');
+ }
+ }
+ $this->pass();
+ }
+
+ /**
* one url -> one main_url and nothing inserted as alias urls
*/
public function test_addSite_oneUrl()
{
$url = "http://piwik.net/";
$urlOK = "http://piwik.net";
- $idsite = Piwik_SitesManager_API::addSite("name",$url);
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("name",$url);
$this->assertIsA( $idsite,'int');
- $siteInfo = Piwik_SitesManager_API::getSiteFromId($idsite);
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId($idsite);
$this->assertEqual($siteInfo['main_url'], $urlOK);
- $siteUrls = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$this->assertTrue(count($siteUrls)===1);
}
@@ -128,13 +185,13 @@ class Test_Piwik_SitesManager extends Test_Database
{
$urls = array("http://piwik.net/","http://piwik.com","https://piwik.net/test/");
$urlsOK = array("http://piwik.net","http://piwik.com","https://piwik.net/test");
- $idsite = Piwik_SitesManager_API::addSite("super website",$urls);
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("super website",$urls);
$this->assertIsA( $idsite,'int');
- $siteInfo = Piwik_SitesManager_API::getSiteFromId($idsite);
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId($idsite);
$this->assertEqual($siteInfo['main_url'], $urlsOK[0]);
- $siteUrls = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$this->assertEqual($siteUrls, $urlsOK);
}
@@ -144,10 +201,10 @@ class Test_Piwik_SitesManager extends Test_Database
public function test_addSite_strangeName()
{
$name = "supertest(); ~@@()''!£\$'%%^'!£";
- $idsite = Piwik_SitesManager_API::addSite($name,"http://piwik.net");
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite($name,"http://piwik.net");
$this->assertIsA( $idsite,'int');
- $siteInfo = Piwik_SitesManager_API::getSiteFromId($idsite);
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId($idsite);
$this->assertEqual($siteInfo['name'], $name);
}
@@ -157,14 +214,14 @@ class Test_Piwik_SitesManager extends Test_Database
public function test_addSite()
{
$name = "website ";
- $idsite = Piwik_SitesManager_API::addSite($name,array("http://piwik.net","http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite($name,array("http://piwik.net","http://piwik.com/test/"));
$this->assertIsA( $idsite,'int');
- $siteInfo = Piwik_SitesManager_API::getSiteFromId($idsite);
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId($idsite);
$this->assertEqual($siteInfo['name'], $name);
$this->assertEqual($siteInfo['main_url'], "http://piwik.net");
- $siteUrls = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$this->assertEqual($siteUrls, array("http://piwik.net","http://piwik.com/test"));
return $idsite;
@@ -177,7 +234,7 @@ class Test_Piwik_SitesManager extends Test_Database
{
$idsite = $this->test_addSite();
- $siteUrlsBefore = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrlsBefore = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$toAdd = array( "http://piwik1.net",
"http://piwik2.net",
@@ -195,10 +252,10 @@ class Test_Piwik_SitesManager extends Test_Database
"http://l42578gqege.f4",
"http://super.com/test/test/atqata675675/te");
- $insertedUrls = Piwik_SitesManager_API::addSiteAliasUrls($idsite, $toAdd);
+ $insertedUrls = Piwik_SitesManager_API::getInstance()->addSiteAliasUrls($idsite, $toAdd);
$this->assertEqual($insertedUrls, count($toAdd));
- $siteUrlsAfter = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrlsAfter = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$shouldHave = array_merge($siteUrlsBefore, $toAddValid);
sort($shouldHave);
@@ -215,14 +272,14 @@ class Test_Piwik_SitesManager extends Test_Database
{
$idsite = $this->test_addSite();
- $siteUrlsBefore = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrlsBefore = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$toAdd = array_merge($siteUrlsBefore, array("http://piwik1.net","http://piwik2.net"));
- $insertedUrls = Piwik_SitesManager_API::addSiteAliasUrls($idsite, $toAdd);
+ $insertedUrls = Piwik_SitesManager_API::getInstance()->addSiteAliasUrls($idsite, $toAdd);
$this->assertEqual($insertedUrls, count($toAdd) - count($siteUrlsBefore));
- $siteUrlsAfter = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrlsAfter = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$shouldHave = $toAdd;
sort($shouldHave);
@@ -239,14 +296,14 @@ class Test_Piwik_SitesManager extends Test_Database
{
$idsite = $this->test_addSite();
- $siteUrlsBefore = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrlsBefore = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$toAdd = array();
- $insertedUrls = Piwik_SitesManager_API::addSiteAliasUrls($idsite, $toAdd);
+ $insertedUrls = Piwik_SitesManager_API::getInstance()->addSiteAliasUrls($idsite, $toAdd);
$this->assertEqual($insertedUrls, count($toAdd));
- $siteUrlsAfter = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrlsAfter = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$shouldHave = $siteUrlsBefore;
sort($shouldHave);
@@ -263,14 +320,14 @@ class Test_Piwik_SitesManager extends Test_Database
{
$idsite = $this->test_addSite();
- $siteUrlsBefore = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrlsBefore = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$toAdd = $siteUrlsBefore;
- $insertedUrls = Piwik_SitesManager_API::addSiteAliasUrls($idsite, $toAdd);
+ $insertedUrls = Piwik_SitesManager_API::getInstance()->addSiteAliasUrls($idsite, $toAdd);
$this->assertEqual($insertedUrls, 0);
- $siteUrlsAfter = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $siteUrlsAfter = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$shouldHave = $siteUrlsBefore;
sort($shouldHave);
@@ -287,7 +344,7 @@ class Test_Piwik_SitesManager extends Test_Database
$idsite = $this->test_addSite();
$toAdd = array("htt{}p://pigeq.com/test");
try {
- $insertedUrls = Piwik_SitesManager_API::addSiteAliasUrls($idsite, $toAdd);
+ $insertedUrls = Piwik_SitesManager_API::getInstance()->addSiteAliasUrls($idsite, $toAdd);
}
catch (Exception $expected) {
return;
@@ -302,7 +359,7 @@ class Test_Piwik_SitesManager extends Test_Database
{
$toAdd = array("http://pigeq.com/test");
try {
- $insertedUrls = Piwik_SitesManager_API::addSiteAliasUrls(-1, $toAdd);
+ $insertedUrls = Piwik_SitesManager_API::getInstance()->addSiteAliasUrls(-1, $toAdd);
}
catch (Exception $expected) {
return;
@@ -318,7 +375,7 @@ class Test_Piwik_SitesManager extends Test_Database
$toAdd = array("http://pigeq.com/test");
try {
- $insertedUrls = Piwik_SitesManager_API::addSiteAliasUrls(155, $toAdd);
+ $insertedUrls = Piwik_SitesManager_API::getInstance()->addSiteAliasUrls(155, $toAdd);
}
catch (Exception $expected) {
return;
@@ -331,7 +388,7 @@ class Test_Piwik_SitesManager extends Test_Database
*/
function test_getAllSitesId_noId()
{
- $ids = Piwik_SitesManager_API::getAllSitesId();
+ $ids = Piwik_SitesManager_API::getInstance()->getAllSitesId();
$this->assertEqual(array(),$ids);
}
@@ -342,14 +399,14 @@ class Test_Piwik_SitesManager extends Test_Database
{
$name="tetq";
$idsites = array(
- Piwik_SitesManager_API::addSite($name,array("http://piwik.net","http://piwik.com/test/")),
- Piwik_SitesManager_API::addSite($name,array("http://piwik.net","http://piwik.com/test/")),
- Piwik_SitesManager_API::addSite($name,array("http://piwik.net","http://piwik.com/test/")),
- Piwik_SitesManager_API::addSite($name,array("http://piwik.net","http://piwik.com/test/")),
- Piwik_SitesManager_API::addSite($name,array("http://piwik.net","http://piwik.com/test/")),
+ Piwik_SitesManager_API::getInstance()->addSite($name,array("http://piwik.net","http://piwik.com/test/")),
+ Piwik_SitesManager_API::getInstance()->addSite($name,array("http://piwik.net","http://piwik.com/test/")),
+ Piwik_SitesManager_API::getInstance()->addSite($name,array("http://piwik.net","http://piwik.com/test/")),
+ Piwik_SitesManager_API::getInstance()->addSite($name,array("http://piwik.net","http://piwik.com/test/")),
+ Piwik_SitesManager_API::getInstance()->addSite($name,array("http://piwik.net","http://piwik.com/test/")),
);
- $ids = Piwik_SitesManager_API::getAllSitesId();
+ $ids = Piwik_SitesManager_API::getInstance()->getAllSitesId();
$this->assertEqual($idsites,$ids);
}
@@ -360,7 +417,7 @@ class Test_Piwik_SitesManager extends Test_Database
{
try {
- $siteInfo = Piwik_SitesManager_API::getSiteFromId(0);
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId(0);
}
catch (Exception $expected) {
return;
@@ -375,7 +432,7 @@ class Test_Piwik_SitesManager extends Test_Database
{
try {
- $siteInfo = Piwik_SitesManager_API::getSiteFromId("x1");
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId("x1");
}
catch (Exception $expected) {
return;
@@ -388,7 +445,7 @@ class Test_Piwik_SitesManager extends Test_Database
*/
function test_getSiteFromId_wrongId3()
{
- $idsite = Piwik_SitesManager_API::addSite("site",array("http://piwik.net","http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site",array("http://piwik.net","http://piwik.com/test/"));
$this->assertEqual($idsite,1);
// set noaccess to site 1
@@ -396,7 +453,7 @@ class Test_Piwik_SitesManager extends Test_Database
FakeAccess::setIdSitesAdmin (array());
try {
- $siteInfo = Piwik_SitesManager_API::getSiteFromId(1);
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId(1);
}
catch (Exception $expected) {
return;
@@ -410,10 +467,10 @@ class Test_Piwik_SitesManager extends Test_Database
function test_getSiteFromId_normalId()
{
$name = "website ''";
- $idsite = Piwik_SitesManager_API::addSite($name,array("http://piwik.net","http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite($name,array("http://piwik.net","http://piwik.com/test/"));
$this->assertIsA( $idsite,'int');
- $siteInfo = Piwik_SitesManager_API::getSiteFromId($idsite);
+ $siteInfo = Piwik_SitesManager_API::getInstance()->getSiteFromId($idsite);
$this->assertEqual($siteInfo['name'], $name);
$this->assertEqual($siteInfo['main_url'], "http://piwik.net");
}
@@ -426,7 +483,7 @@ class Test_Piwik_SitesManager extends Test_Database
{
FakeAccess::setIdSitesAdmin (array());
- $sites = Piwik_SitesManager_API::getSitesWithAdminAccess();
+ $sites = Piwik_SitesManager_API::getInstance()->getSitesWithAdminAccess();
$this->assertEqual($sites, array());
}
@@ -435,18 +492,18 @@ class Test_Piwik_SitesManager extends Test_Database
*/
function test_getSitesWithAdminAccess()
{
- $idsite = Piwik_SitesManager_API::addSite("site1",array("http://piwik.net","http://piwik.com/test/"));
- $idsite = Piwik_SitesManager_API::addSite("site2",array("http://piwik.com/test/"));
- $idsite = Piwik_SitesManager_API::addSite("site3",array("http://piwik.org"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array("http://piwik.net","http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site2",array("http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site3",array("http://piwik.org"));
$resultWanted = array(
- 0 => array("idsite" => 1, "name" => "site1", "main_url" =>"http://piwik.net"),
- 1 => array("idsite" => 3, "name" => "site3", "main_url" =>"http://piwik.org"),
+ 0 => array("idsite" => 1, "name" => "site1", "main_url" =>"http://piwik.net", "excluded_ips" => "", 'excluded_parameters' => '', 'timezone' => 'UTC', 'currency' => 'USD'),
+ 1 => array("idsite" => 3, "name" => "site3", "main_url" =>"http://piwik.org", "excluded_ips" => "", 'excluded_parameters' => '', 'timezone' => 'UTC', 'currency' => 'USD'),
);
FakeAccess::setIdSitesAdmin (array(1,3));
- $sites = Piwik_SitesManager_API::getSitesWithAdminAccess();
+ $sites = Piwik_SitesManager_API::getInstance()->getSitesWithAdminAccess();
// we dont test the ts_created
unset($sites[0]['ts_created']);
@@ -462,7 +519,7 @@ class Test_Piwik_SitesManager extends Test_Database
FakeAccess::setIdSitesView (array());
FakeAccess::setIdSitesAdmin (array());
- $sites = Piwik_SitesManager_API::getSitesWithViewAccess();
+ $sites = Piwik_SitesManager_API::getInstance()->getSitesWithViewAccess();
$this->assertEqual($sites, array());
}
@@ -471,19 +528,19 @@ class Test_Piwik_SitesManager extends Test_Database
*/
function test_getSitesWithViewAccess()
{
- $idsite = Piwik_SitesManager_API::addSite("site1",array("http://piwik.net","http://piwik.com/test/"));
- $idsite = Piwik_SitesManager_API::addSite("site2",array("http://piwik.com/test/"));
- $idsite = Piwik_SitesManager_API::addSite("site3",array("http://piwik.org"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array("http://piwik.net","http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site2",array("http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site3",array("http://piwik.org"));
$resultWanted = array(
- 0 => array("idsite" => 1, "name" => "site1", "main_url" =>"http://piwik.net"),
- 1 => array("idsite" => 3, "name" => "site3", "main_url" =>"http://piwik.org"),
+ 0 => array("idsite" => 1, "name" => "site1", "main_url" =>"http://piwik.net", "excluded_ips" => "", 'excluded_parameters' => '', 'timezone' => 'UTC', 'currency' => 'USD'),
+ 1 => array("idsite" => 3, "name" => "site3", "main_url" =>"http://piwik.org", "excluded_ips" => "", 'excluded_parameters' => '', 'timezone' => 'UTC', 'currency' => 'USD'),
);
FakeAccess::setIdSitesView (array(1,3));
FakeAccess::setIdSitesAdmin (array());
- $sites = Piwik_SitesManager_API::getSitesWithViewAccess();
+ $sites = Piwik_SitesManager_API::getInstance()->getSitesWithViewAccess();
// we dont test the ts_created
unset($sites[0]['ts_created']);
unset($sites[1]['ts_created']);
@@ -498,7 +555,7 @@ class Test_Piwik_SitesManager extends Test_Database
FakeAccess::setIdSitesView (array());
FakeAccess::setIdSitesAdmin (array());
- $sites = Piwik_SitesManager_API::getSitesWithAtLeastViewAccess();
+ $sites = Piwik_SitesManager_API::getInstance()->getSitesWithAtLeastViewAccess();
$this->assertEqual($sites, array());
}
@@ -507,19 +564,19 @@ class Test_Piwik_SitesManager extends Test_Database
*/
function test_getSitesWithAtLeastViewAccess()
{
- $idsite = Piwik_SitesManager_API::addSite("site1",array("http://piwik.net","http://piwik.com/test/"));
- $idsite = Piwik_SitesManager_API::addSite("site2",array("http://piwik.com/test/"));
- $idsite = Piwik_SitesManager_API::addSite("site3",array("http://piwik.org"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array("http://piwik.net","http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site2",array("http://piwik.com/test/"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site3",array("http://piwik.org"));
$resultWanted = array(
- 0 => array("idsite" => 1, "name" => "site1", "main_url" =>"http://piwik.net"),
- 1 => array("idsite" => 3, "name" => "site3", "main_url" =>"http://piwik.org"),
+ 0 => array("idsite" => 1, "name" => "site1", "main_url" =>"http://piwik.net", "excluded_ips" => "", 'excluded_parameters' => '', 'timezone' => 'UTC', 'currency' => 'USD'),
+ 1 => array("idsite" => 3, "name" => "site3", "main_url" =>"http://piwik.org", "excluded_ips" => "", 'excluded_parameters' => '', 'timezone' => 'UTC', 'currency' => 'USD'),
);
FakeAccess::setIdSitesView (array(1,3));
FakeAccess::setIdSitesAdmin (array());
- $sites = Piwik_SitesManager_API::getSitesWithAtLeastViewAccess();
+ $sites = Piwik_SitesManager_API::getInstance()->getSitesWithAtLeastViewAccess();
// we dont test the ts_created
unset($sites[0]['ts_created']);
unset($sites[1]['ts_created']);
@@ -532,9 +589,9 @@ class Test_Piwik_SitesManager extends Test_Database
*/
function test_getSiteUrlsFromId_noUrls()
{
- $idsite = Piwik_SitesManager_API::addSite("site1",array("http://piwik.net"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array("http://piwik.net"));
- $urls = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $urls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$this->assertEqual(array("http://piwik.net"),$urls);
}
@@ -549,14 +606,14 @@ class Test_Piwik_SitesManager extends Test_Database
"http://piwik.com");
sort($site);
- $idsite = Piwik_SitesManager_API::addSite("site1",$site);
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",$site);
$siteWanted = array("http://piwik.net",
"http://piwik.org",
"http://piwik.com");
sort($siteWanted);
- $urls = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $urls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$this->assertEqual($siteWanted, $urls);
@@ -571,7 +628,7 @@ class Test_Piwik_SitesManager extends Test_Database
FakeAccess::setIdSitesAdmin (array());
try {
- Piwik_SitesManager_API::getSiteUrlsFromId(1);
+ Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId(1);
}
catch (Exception $expected) {
return;
@@ -588,12 +645,12 @@ class Test_Piwik_SitesManager extends Test_Database
"http://piwiknew.net",
"http://piwiknew.org",
"http://piwiknew.fr");
- $idsite = Piwik_SitesManager_API::addSite("site1",$urls);
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",$urls);
$newMainUrl = "http://main.url";
- Piwik_SitesManager_API::updateSite($idsite, "test toto@{}", $newMainUrl );
+ Piwik_SitesManager_API::getInstance()->updateSite($idsite, "test toto@{}", $newMainUrl );
- $allUrls = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $allUrls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
$this->assertEqual($allUrls[0], $newMainUrl);
$aliasUrls = array_slice($allUrls,1);
@@ -605,12 +662,12 @@ class Test_Piwik_SitesManager extends Test_Database
*/
function test_updateSite_strangeNameNoUrl()
{
- $idsite = Piwik_SitesManager_API::addSite("site1","http://main.url");
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1","http://main.url");
$newName ="test toto@{'786'}";
- Piwik_SitesManager_API::updateSite($idsite, $newName );
+ Piwik_SitesManager_API::getInstance()->updateSite($idsite, $newName );
- $site = Piwik_SitesManager_API::getSiteFromId($idsite);
+ $site = Piwik_SitesManager_API::getInstance()->getSiteFromId($idsite);
$this->assertEqual($site['name'],$newName);
// url didn't change because parameter url NULL in updateSite
@@ -629,20 +686,168 @@ class Test_Piwik_SitesManager extends Test_Database
"http://piwiknew.net",
"http://piwiknew.org",
"http://piwiknew.fr");
- $idsite = Piwik_SitesManager_API::addSite("site1",$urls);
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",$urls);
$newurls = array("http://piwiknew2.com",
"http://piwiknew2.net",
"http://piwiknew2.org",
"http://piwiknew2.fr");
- Piwik_SitesManager_API::updateSite($idsite, "test toto@{}",$newurls );
+ Piwik_SitesManager_API::getInstance()->updateSite($idsite, "test toto@{}",$newurls );
- $allUrls = Piwik_SitesManager_API::getSiteUrlsFromId($idsite);
+ $allUrls = Piwik_SitesManager_API::getInstance()->getSiteUrlsFromId($idsite);
sort($allUrls);
sort($newurls);
$this->assertEqual($allUrls,$newurls);
}
-}
+ function test_addSites_invalidTimezone()
+ {
+ // trying invalid timezones
+ try {
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array('http://example.org'), '', '', 'UTC+15');
+ $this->fail('invalid timezone should raise an exception');
+ } catch(Exception $e) {
+ }
+ try {
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array('http://example.org'), '', '', 'Paris');
+ $this->fail('invalid timezone should raise an exception');
+ } catch(Exception $e) {
+ }
+ $this->pass();
+ }
+
+ function test_addSites_invalidCurrency()
+ {
+ $invalidCurrency = '€';
+ try {
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array('http://example.org'), '', 'UTC', $invalidCurrency);
+ $this->fail('invalid currency should raise an exception');
+ } catch(Exception $e) {
+ }
+ $this->pass();
+ }
+
+ function test_setDefaultTimezoneAndCurrencyAndExcludedQueryParametersAndExcludedIps()
+ {
+ // test that they return default values
+ $defaultTimezone = Piwik_SitesManager_API::getInstance()->getDefaultTimezone();
+ $this->assertEqual($defaultTimezone, 'UTC');
+ $defaultCurrency = Piwik_SitesManager_API::getInstance()->getDefaultCurrency();
+ $this->assertEqual($defaultCurrency, 'USD');
+ $excludedIps = Piwik_SitesManager_API::getInstance()->getExcludedIpsGlobal();
+ $this->assertEqual($excludedIps, '');
+ $excludedQueryParameters = Piwik_SitesManager_API::getInstance()->getExcludedQueryParametersGlobal();
+ $this->assertEqual($excludedQueryParameters, '');
+
+ // test that when not specified, defaults are set as expected
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array('http://example.org'));
+ $site = new Piwik_Site($idsite);
+ $this->assertEqual($site->getTimezone(), 'UTC');
+ $this->assertEqual($site->getCurrency(), 'USD');
+ $this->assertEqual($site->getExcludedQueryParameters(), '');
+ $this->assertEqual($site->getExcludedIps(), '');
+
+ // set the global timezone and get it
+ $newDefaultTimezone = 'UTC+5.5';
+ Piwik_SitesManager_API::getInstance()->setDefaultTimezone($newDefaultTimezone);
+ $defaultTimezone = Piwik_SitesManager_API::getInstance()->getDefaultTimezone();
+ $this->assertEqual($defaultTimezone, $newDefaultTimezone);
+
+ // set the default currency and get it
+ $newDefaultCurrency = 'EUR';
+ Piwik_SitesManager_API::getInstance()->setDefaultCurrency($newDefaultCurrency);
+ $defaultCurrency = Piwik_SitesManager_API::getInstance()->getDefaultCurrency();
+ $this->assertEqual($defaultCurrency, $newDefaultCurrency);
+
+ // set the global IPs to exclude and get it
+ $newGlobalExcludedIps = '1.1.1.*,1.1.*.*,150.1.1.1';
+ Piwik_SitesManager_API::getInstance()->setGlobalExcludedIps($newGlobalExcludedIps);
+ $globalExcludedIps = Piwik_SitesManager_API::getInstance()->getExcludedIpsGlobal();
+ $this->assertEqual($globalExcludedIps, $newGlobalExcludedIps);
+
+ // set the global URL query params to exclude and get it
+ $newGlobalExcludedQueryParameters = 'PHPSESSID,blabla, TesT';
+ // removed the space
+ $expectedGlobalExcludedQueryParameters = 'PHPSESSID,blabla,TesT';
+ Piwik_SitesManager_API::getInstance()->setGlobalExcludedQueryParameters($newGlobalExcludedQueryParameters);
+ $globalExcludedQueryParameters = Piwik_SitesManager_API::getInstance()->getExcludedQueryParametersGlobal();
+ $this->assertEqual($globalExcludedQueryParameters, $expectedGlobalExcludedQueryParameters);
+
+ // create a website and check that default currency and default timezone are set
+ // however, excluded IPs and excluded query Params are not returned
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array('http://example.org'), '', '', $newDefaultTimezone);
+ $site = new Piwik_Site($idsite);
+ $this->assertEqual($site->getTimezone(), $newDefaultTimezone);
+ $this->assertEqual($site->getCreationDate()->toString(), date('Y-m-d'));
+ $this->assertEqual($site->getCurrency(), $newDefaultCurrency);
+ $this->assertEqual($site->getExcludedIps(), '');
+ $this->assertEqual($site->getExcludedQueryParameters(), '');
+ }
+
+ function test_getSitesIdFromSiteUrl_SuperUser()
+ {
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array("http://piwik.net","http://piwik.com"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site2",array("http://piwik.com","http://piwik.net"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site3",array("http://piwik.com","http://piwik.org"));
+
+ $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.org');
+ $this->assertTrue(count($idsites) == 1);
+
+ $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.net');
+ $this->assertTrue(count($idsites) == 2);
+
+ $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com');
+ $this->assertTrue(count($idsites) == 3);
+ }
+
+ function test_getSitesIdFromSiteUrl_User()
+ {
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site1",array("http://piwik.net","http://piwik.com"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site2",array("http://piwik.com","http://piwik.net"));
+ $idsite = Piwik_SitesManager_API::getInstance()->addSite("site3",array("http://piwik.com","http://piwik.org"));
+
+ $saveAccess = Zend_Registry::get('access');
+
+ Piwik_UsersManager_API::getInstance()->addUser("user1", "geqgegagae", "tegst@tesgt.com", "alias");
+ Piwik_UsersManager_API::getInstance()->setUserAccess("user1", "view", array(1));
+
+ Piwik_UsersManager_API::getInstance()->addUser("user2", "geqgegagae", "tegst2@tesgt.com", "alias");
+ Piwik_UsersManager_API::getInstance()->setUserAccess("user2", "view", array(1));
+ Piwik_UsersManager_API::getInstance()->setUserAccess("user2", "admin", array(3));
+
+ Piwik_UsersManager_API::getInstance()->addUser("user3", "geqgegagae", "tegst3@tesgt.com", "alias");
+ Piwik_UsersManager_API::getInstance()->setUserAccess("user3", "view", array(1,2));
+ Piwik_UsersManager_API::getInstance()->setUserAccess("user3", "admin", array(3));
+
+ $pseudoMockAccess = new FakeAccess;
+ FakeAccess::$superUser = false;
+ FakeAccess::$identity = 'user1';
+ FakeAccess::setIdSitesView (array(1));
+ FakeAccess::setIdSitesAdmin (array());
+ Zend_Registry::set('access', $pseudoMockAccess);
+ $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com');
+ $this->assertTrue(count($idsites) == 1);
+
+ $pseudoMockAccess = new FakeAccess;
+ FakeAccess::$superUser = false;
+ FakeAccess::$identity = 'user2';
+ FakeAccess::setIdSitesView (array(1));
+ FakeAccess::setIdSitesAdmin (array(3));
+ Zend_Registry::set('access', $pseudoMockAccess);
+ $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com');
+ $this->assertTrue(count($idsites) == 2);
+
+ $pseudoMockAccess = new FakeAccess;
+ FakeAccess::$superUser = false;
+ FakeAccess::$identity = 'user3';
+ FakeAccess::setIdSitesView (array(1,2));
+ FakeAccess::setIdSitesAdmin (array(3));
+ Zend_Registry::set('access', $pseudoMockAccess);
+ $idsites = Piwik_SitesManager_API::getInstance()->getSitesIdFromSiteUrl('http://piwik.com');
+ $this->assertTrue(count($idsites) == 3);
+
+ Zend_Registry::set('access', $saveAccess);
+ }
+}