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:
Diffstat (limited to 'plugins/SitesManager')
-rw-r--r--plugins/SitesManager/API.php17
-rw-r--r--plugins/SitesManager/lang/fr.json4
-rw-r--r--plugins/SitesManager/lang/it.json4
-rw-r--r--plugins/SitesManager/lang/uk.json8
-rw-r--r--plugins/SitesManager/tests/Integration/ApiTest.php122
5 files changed, 145 insertions, 10 deletions
diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php
index 80f2ddd252..77d080b241 100644
--- a/plugins/SitesManager/API.php
+++ b/plugins/SitesManager/API.php
@@ -360,12 +360,18 @@ class API extends \Piwik\Plugin\API
* @param bool $fetchAliasUrls
* @param false|string $pattern
* @param false|int $limit
+ * @param []|int[] $sitesToExclude optional array of Integer IDs of sites to exclude from the result.
* @return array for each site, an array of information (idsite, name, main_url, etc.)
*/
- public function getSitesWithAdminAccess($fetchAliasUrls = false, $pattern = false, $limit = false)
+ public function getSitesWithAdminAccess($fetchAliasUrls = false, $pattern = false, $limit = false, $sitesToExclude = [])
{
$sitesId = $this->getSitesIdWithAdminAccess();
+ // Remove the sites to exclude from the list of IDs.
+ if (is_array($sitesId) && is_array($sitesToExclude) && count($sitesToExclude)) {
+ $sitesId = array_diff($sitesId, $sitesToExclude);
+ }
+
if ($pattern === false) {
$sites = $this->getSitesFromIds($sitesId, $limit);
} else {
@@ -1724,11 +1730,18 @@ class API extends \Piwik\Plugin\API
*
* @param string $pattern
* @param int|false $limit
+ * @param []|int[] $sitesToExclude optional array of Integer IDs of sites to exclude from the result.
* @return array
*/
- public function getPatternMatchSites($pattern, $limit = false)
+ public function getPatternMatchSites($pattern, $limit = false, $sitesToExclude = [])
{
$ids = $this->getSitesIdWithAtLeastViewAccess();
+
+ // Remove the sites to exclude from the list of IDs.
+ if (is_array($ids) && is_array($sitesToExclude) && count($sitesToExclude)) {
+ $ids = array_diff($ids, $sitesToExclude);
+ }
+
if (empty($ids)) {
return [];
}
diff --git a/plugins/SitesManager/lang/fr.json b/plugins/SitesManager/lang/fr.json
index f607448ef0..eb31768945 100644
--- a/plugins/SitesManager/lang/fr.json
+++ b/plugins/SitesManager/lang/fr.json
@@ -2,8 +2,8 @@
"SitesManager": {
"AddMeasurable": "Ajouter un nouvel élément mesurable",
"AddSite": "Ajouter un site",
- "AdvancedTimezoneSupportNotFound": "Le support avancé des fuseaux horaires n'a pas été trouvé dans votre PHP (supporté en PHP>=5.2). Vous pouvez toujours choisir un décalage UTC manuel.",
- "AliasUrlHelp": "Il est recommandé, mais pas obligatoire, de spécifier les différentes URL, une par ligne, que vos visiteurs utilisent pour accéder à ce site Web. Les URLs alias d'un site web n'apparaîtront pas dans le rapport Referrers > Websites. Notez qu'il n'est pas nécessaire de spécifier les URLs avec et sans 'www' car Matomo les prend automatiquement en compte.",
+ "AdvancedTimezoneSupportNotFound": "La prise en charge avancée des fuseaux horaires n'a pas été trouvée dans votre PHP (prise en charge dans PHP>=5.2). Vous pouvez toujours choisir un décalage UTC manuel.",
+ "AliasUrlHelp": "Il est recommandé, mais pas obligatoire, de caractéristiques les différentes URL, une par ligne, que vos visiteurs utilisent pour accéder à ce site Web. Les URL alias d'un site web n'apparaîtront pas dans le rapport Referrers > Sites Internet. Notez qu'il n'est pas nécessaire de spécifier les URL avec et sans 'www' car Matomo les prend automatiquement en compte.",
"ChangingYourTimezoneWillOnlyAffectDataForward": "Le fait de modifier votre fuseau horaire affectera uniquement les nouvelles données, ce n'est pas rétroactif.",
"ChooseMeasurableTypeHeadline": "Que voudriez-vous mesurer ?",
"Currency": "Devise",
diff --git a/plugins/SitesManager/lang/it.json b/plugins/SitesManager/lang/it.json
index 0354f0e727..cb4098bf51 100644
--- a/plugins/SitesManager/lang/it.json
+++ b/plugins/SitesManager/lang/it.json
@@ -2,8 +2,8 @@
"SitesManager": {
"AddMeasurable": "Aggiungi un nuovo sito",
"AddSite": "Aggiungi un nuovo sito web",
- "AdvancedTimezoneSupportNotFound": "Non è stato trovato nel tuo PHP il supporto avanzato dei fusi orari (supportato in PHP> = 5.2). È comunque possibile scegliere manualmente un offset UTC.",
- "AliasUrlHelp": "È raccomandato, ma non necessario, di specificare i diversi URL che i tuoi utenti usano per accedere al sito. Gli URL alias di un sito non compariranno tra i siti Referer. Nota che non è necessario specificare gli URL con e senza 'www' in quanto Matomo li considererà entrambi automaticamente.",
+ "AdvancedTimezoneSupportNotFound": "Non è stato trovato nel tuo PHP il supporto avanzato dei fusi orari (supportato in PHP>= 5.2). È comunque possibile scegliere manualmente un offset UTC.",
+ "AliasUrlHelp": "È raccomandato, ma non necessario, di specificare i diversi URL, uno per linea, che i tuoi utenti usano per accedere al sito. Gli URL alias di un sito non compariranno tra i siti Referer→ Rapporto siti. Nota che non è necessario specificare gli URL con e senza 'www' in quanto Matomo li considererà entrambi automaticamente.",
"ChangingYourTimezoneWillOnlyAffectDataForward": "Il cambio del fuso orario interesserà i prossimi report a partire da adesso, mentre quelli precedenti non saranno modificati.",
"ChooseMeasurableTypeHeadline": "Cosa intendi misurare",
"Currency": "Valuta",
diff --git a/plugins/SitesManager/lang/uk.json b/plugins/SitesManager/lang/uk.json
index 37eb83ca3a..610521fc52 100644
--- a/plugins/SitesManager/lang/uk.json
+++ b/plugins/SitesManager/lang/uk.json
@@ -2,8 +2,8 @@
"SitesManager": {
"AddMeasurable": "Додати нові показники",
"AddSite": "Додати новий сайт",
- "AdvancedTimezoneSupportNotFound": "Підтримка додаткових тимчасових зон не знайдено у вашому PHP (підтримується в PHP>=5.2). Ви все ще можете вибрати UTC вручну замість цього.",
- "AliasUrlHelp": "Рекомендується, але необов'язково, вказувати всі домени для сайту (кожен домен – нова лінія), які користувачі можуть використовувати для доступу до сайту. Псевдоніми для різних доменів сайту не будуть відображатися в розділі Джерело трафіку > Сайти. Зауважте, що немає необхідності вказувати варіанти адрес з \\\"www\\\" і без нього. Matomo автоматично враховує обидва.",
+ "AdvancedTimezoneSupportNotFound": "Підтримка додаткових тимчасових зон не знайдена у вашому PHP (підтримується у PHP>=5.2). Ви все ще можете вибрати ручне зміщення UTC.",
+ "AliasUrlHelp": "Рекомендовано, але необов'язково, вказувати всі домени для сайту (кожен домен – нова лінія), які користувачі можуть використовувати для доступу до сайту. Псевдоніми для різних доменів сайту не будуть показані в розділі Джерело трафіку > Сайти. Зауважте, що немає потреби вказувати варіанти адрес із «www» і без нього. Matomo автоматично враховує обидва.",
"ChangingYourTimezoneWillOnlyAffectDataForward": "Зміна вашого часового поясу тільки вплине на те, що дані будуть враховуватися наперед, і ніяк не вплине на існуючі дані.",
"ChooseMeasurableTypeHeadline": "Щоб ви хотіли виміряти?",
"Currency": "Валюта",
@@ -49,7 +49,7 @@
"OnlyMatchedUrlsAllowed": "Тільки відстеження відвідування та дії, коли URL-адреса дії починається з однієї з URL-адрес вище.",
"OnlyMatchedUrlsAllowedHelp": "Якщо ця функція ввімкнена, Matomo буде відслідковувати тільки внутрішні дії, коли URL сторінки є одна з найбільш відомих URL-адрес на вашому сайті. Це заважає людям спамити аналітику з URL-адрес для інших сайтів.",
"OnlyOneSiteAtTime": "Ви можете тільки редагувати один сайт в один і той же час. Будь ласка, збережіть або скасуйте ваші поточні зміни до сайту %s.",
- "PiwikOffersEcommerceAnalytics": "Ця опція може бути використана для аналітики інтернет-магазинів і електронних замовлень. Більше інформації – тут: %1$s Аналітика ел. комерції%2$s.",
+ "PiwikOffersEcommerceAnalytics": "Matomo дозволяє розширене відстеження електронної комерції та звітування. Дізнайтеся більше про %1$s Аналітику електронної комерції%2$s.",
"PiwikWillAutomaticallyExcludeCommonSessionParameters": "Веб-аналітика буде автоматично вилучати необхідні параметри сесії (%s).",
"PluginDescription": "Управління вебсайтами, що дозволяє додавати і редагувати їх.",
"SearchCategoryDesc": "Matomo також може відстежувати категорію пошуку для кожного слова, яке шукають на вашому сайті в пошуку.",
@@ -65,7 +65,7 @@
"SelectDefaultTimezone": "Ви можете встановити часовий пояс за замовчуванням для нових сайтів.",
"ShowTrackingTag": "Показати код",
"SiteSearchUse": "Ви можете використовувати Matomo для відстеження та відображення аналітики по тому, що шукають відвідувачі на вашому сайті використовуючи функціонал для внутрішнього пошуку по сайту.",
- "SiteWithoutDataMessageDisappears": "Це повідомлення зникне, як тільки перші дані отримаються на цей сайт.",
+ "SiteWithoutDataMessageDisappears": "Це повідомлення зникне, щойно деякі дані будуть отримані для цього вебсайту.",
"Sites": "Сайти",
"SuperUserAccessCan": "Користувач з правами суперкористувача може також %1$sвказати загальні налаштування%2$s для нових вебсайтів.",
"Timezone": "Часовий пояс",
diff --git a/plugins/SitesManager/tests/Integration/ApiTest.php b/plugins/SitesManager/tests/Integration/ApiTest.php
index e94fbdec16..1d324a2a33 100644
--- a/plugins/SitesManager/tests/Integration/ApiTest.php
+++ b/plugins/SitesManager/tests/Integration/ApiTest.php
@@ -623,6 +623,46 @@ class ApiTest extends IntegrationTestCase
$this->assertEquals($resultWanted, $sites);
}
+ /**
+ * Get the list of admin access sites with a site ID excluded.
+ */
+ public function testGetSitesWithAdminAccessShouldOnlyReturnSitesHavingActuallyAdminAccessFiltered()
+ {
+ API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com/test/"]);
+ API::getInstance()->addSite("site2", ["http://piwik.com/test/"]);
+ API::getInstance()->addSite("site3", ["http://piwik.org"], null, null, null, null, null, null, 'Asia/Tokyo');
+
+ $resultWanted = [
+ 0 => ["idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'Asia/Tokyo', 'timezone_name' => 'Intl_Country_JP', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD'],
+ ];
+
+ FakeAccess::setIdSitesAdmin([1, 3]);
+
+ $sites = API::getInstance()->getSitesWithAdminAccess(false, false, false, [1]);
+ $this->assertIsArray($sites);
+ $this->assertCount(1, $sites);
+
+ // we don't test the ts_created
+ unset($sites[0]['ts_created']);
+ $this->assertEquals($resultWanted, $sites);
+ }
+
+ /**
+ * Get the list of admin access sites with all site IDs excluded.
+ */
+ public function testGetSitesWithAdminAccessShouldOnlyReturnSitesHavingActuallyAdminAccessAllFiltered()
+ {
+ API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com/test/"]);
+ API::getInstance()->addSite("site2", ["http://piwik.com/test/"]);
+ API::getInstance()->addSite("site3", ["http://piwik.org"], null, null, null, null, null, null, 'Asia/Tokyo');
+
+ FakeAccess::setIdSitesAdmin([1, 3]);
+
+ $sites = API::getInstance()->getSitesWithAdminAccess(false, false, false, [1,2,3]);
+ $this->assertIsArray($sites);
+ $this->assertCount(0, $sites);
+ }
+
public function testGetSitesWithAdminAccessShouldApplyLimitIfSet()
{
$this->createManySitesWithAdminAccess(40);
@@ -1405,6 +1445,88 @@ class ApiTest extends IntegrationTestCase
$this->assertEquals([$idsite2, $idsite3, $idsite4], $result);
}
+ /**
+ * Get the list of filtered sites with no sites available.
+ */
+ public function testGetPatternMatchSitesNoneAvailable()
+ {
+ $sites = API::getInstance()->getPatternMatchSites('%');
+ $this->assertIsArray($sites);
+ $this->assertCount(0, $sites);
+ }
+
+ /**
+ * Get the list of filtered sites.
+ */
+ public function testGetPatternMatchSites()
+ {
+ API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com/test/"]);
+ API::getInstance()->addSite("site2", ["http://piwik.com/test/"]);
+ API::getInstance()->addSite("site3", ["http://piwik.org"], null, null, null, null, null, null, 'Asia/Tokyo');
+
+ $resultWanted = [
+ 0 => ["idsite" => 1, "name" => "site1", "main_url" => "http://piwik.net", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'timezone_name' => 'SitesManager_Format_Utc', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD', 'creator_login' => 'superUserLogin'],
+ 1 => ["idsite" => 2, "name" => "site2", "main_url" => "http://piwik.com/test", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'timezone_name' => 'SitesManager_Format_Utc', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD', 'creator_login' => 'superUserLogin'],
+ 2 => ["idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'Asia/Tokyo', 'timezone_name' => 'Intl_Country_JP', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD', 'creator_login' => 'superUserLogin'],
+ ];
+
+ $sites = API::getInstance()->getPatternMatchSites('%');
+ $this->assertIsArray($sites);
+ $this->assertCount(3, $sites);
+
+ // we don't test the ts_created
+ unset($sites[0]['ts_created']);
+ unset($sites[1]['ts_created']);
+ unset($sites[2]['ts_created']);
+ $this->assertEquals($resultWanted, $sites);
+ }
+
+ /**
+ * Get the list sites filtered by site name.
+ */
+ public function testGetPatternMatchSitesFilteringBySiteName()
+ {
+ API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com/test/"]);
+ API::getInstance()->addSite("site2", ["http://piwik.com/test/"]);
+ API::getInstance()->addSite("site3", ["http://piwik.org"], null, null, null, null, null, null, 'Asia/Tokyo');
+
+ $resultWanted = [
+ 0 => ["idsite" => 2, "name" => "site2", "main_url" => "http://piwik.com/test", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'timezone_name' => 'SitesManager_Format_Utc', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD', 'creator_login' => 'superUserLogin'],
+ ];
+
+ $sites = API::getInstance()->getPatternMatchSites('site2');
+ $this->assertIsArray($sites);
+ $this->assertCount(1, $sites);
+
+ // we don't test the ts_created
+ unset($sites[0]['ts_created']);
+ $this->assertEquals($resultWanted, $sites);
+ }
+
+ /**
+ * Get the list of filtered sites with a site ID excluded.
+ */
+ public function testGetPatternMatchSitesFiltered()
+ {
+ API::getInstance()->addSite("site1", ["http://piwik.net", "http://piwik.com/test/"]);
+ API::getInstance()->addSite("site2", ["http://piwik.com/test/"]);
+ API::getInstance()->addSite("site3", ["http://piwik.org"], null, null, null, null, null, null, 'Asia/Tokyo');
+
+ $resultWanted = [
+ 0 => ["idsite" => 2, "name" => "site2", "main_url" => "http://piwik.com/test", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'UTC', 'timezone_name' => 'SitesManager_Format_Utc', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD', 'creator_login' => 'superUserLogin'],
+ 1 => ["idsite" => 3, "name" => "site3", "main_url" => "http://piwik.org", "ecommerce" => 0, "excluded_ips" => "", 'sitesearch' => 1, 'sitesearch_keyword_parameters' => '', 'sitesearch_category_parameters' => '', 'excluded_parameters' => '', 'excluded_user_agents' => '', 'excluded_referrers' => '', 'timezone' => 'Asia/Tokyo', 'timezone_name' => 'Intl_Country_JP', 'currency' => 'USD', 'group' => '', 'keep_url_fragment' => 0, 'type' => 'website', 'exclude_unknown_urls' => 0, 'currency_name' => 'USD', 'creator_login' => 'superUserLogin'],
+ ];
+
+ $sites = API::getInstance()->getPatternMatchSites('%', false, [1]);
+ $this->assertIsArray($sites);
+ $this->assertCount(2, $sites);
+
+ // we don't test the ts_created
+ unset($sites[0]['ts_created']);
+ unset($sites[1]['ts_created']);
+ $this->assertEquals($resultWanted, $sites);
+ }
+
public function provideContainerConfig()
{
return [