diff options
Diffstat (limited to 'plugins/SitesManager')
-rw-r--r-- | plugins/SitesManager/API.php | 17 | ||||
-rw-r--r-- | plugins/SitesManager/lang/fr.json | 4 | ||||
-rw-r--r-- | plugins/SitesManager/lang/it.json | 4 | ||||
-rw-r--r-- | plugins/SitesManager/lang/uk.json | 8 | ||||
-rw-r--r-- | plugins/SitesManager/tests/Integration/ApiTest.php | 122 |
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 [ |