Skip to content

Commit 51a5c5a

Browse files
authored
Replace API menu, #PG-5207 (#46)
* Rerouted menu item, added old api reference url to page, renamed to API instead of Swagger API * Remove stale test case that has no purpose now * fix test * Added default site to param
1 parent fb76ba2 commit 51a5c5a

11 files changed

Lines changed: 137 additions & 81 deletions

File tree

ApiReference.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ public function registerEvents()
2929

3030
public function getClientSideTranslationKeys(&$translationKeys): void
3131
{
32+
$translationKeys[] = 'General_API';
3233
$translationKeys[] = 'CoreHome_LearnMoreFullStop';
34+
$translationKeys[] = 'ApiReference_LookingForLegacyApiReference';
3335
$translationKeys[] = 'ApiReference_ReportingApiMoreInformation';
3436
$translationKeys[] = 'ApiReference_ReportingApiReference';
3537
$translationKeys[] = 'ApiReference_ReportingApiSummary';
36-
$translationKeys[] = 'ApiReference_SwaggerApi';
3738
$translationKeys[] = 'ApiReference_SwaggerPagePluginEmpty';
3839
$translationKeys[] = 'ApiReference_SwaggerPageRequestFailed';
3940
$translationKeys[] = 'ApiReference_SwaggerPageSpecLoadFailed';

Controller.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Piwik\Plugins\ApiReference;
1313

1414
use Piwik\Piwik;
15+
use Piwik\Plugins\UsersManager\UserPreferences;
1516
use Piwik\View;
1617

1718
class Controller extends \Piwik\Plugin\ControllerAdmin
@@ -22,7 +23,19 @@ public function swagger(): string
2223

2324
$view = new View('@ApiReference/swagger');
2425
$this->setBasicVariablesView($view);
26+
$view->defaultWebsiteId = $this->getDefaultWebsiteId();
2527

2628
return $view->render();
2729
}
30+
31+
private function getDefaultWebsiteId(): ?int
32+
{
33+
$defaultWebsiteId = (new UserPreferences())->getDefaultWebsiteId();
34+
35+
if (is_numeric($defaultWebsiteId)) {
36+
return (int) $defaultWebsiteId;
37+
}
38+
39+
return null;
40+
}
2841
}

Menu.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ public function configureAdminMenu(MenuAdmin $menu): void
2020
return;
2121
}
2222

23-
$menu->addPlatformItem(
24-
'ApiReference_SwaggerApi',
25-
$this->urlForAction('swagger'),
26-
30
23+
$menu->editUrl(
24+
'CorePluginsAdmin_MenuPlatform',
25+
'General_API',
26+
$this->urlForAction('swagger')
2727
);
2828
}
2929
}

lang/en.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"ApiReference": {
3+
"LookingForLegacyApiReference": "Looking for the legacy API reference? The %1$slegacy API reference%2$s page is still available while we continue improving the new API documentation. If anything is missing or behaving unexpectedly in this new version, %3$splease let us know%4$s so we can improve the experience.",
34
"ReportingApiMoreInformation": "More info about the Matomo APIs available in %1$sIntroduction to Matomo API%2$s and the %3$sMatomo API Reference%4$s.",
45
"ReportingApiReference": "Reporting API Reference",
56
"ReportingApiSummary": "All the data in Matomo is available through simple APIs.",
6-
"SwaggerApi": "Swagger API",
77
"SwaggerPagePluginEmpty": "No plugins are configured in the ApiReference whitelist.",
88
"SwaggerPageRequestFailed": "The plugin whitelist could not be loaded.",
99
"SwaggerPageSearchNoResults": "No plugins match your search.",

templates/swagger.twig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
<script src="plugins/ApiReference/vue/lib/swagger-ui/swagger-ui-bundle.js"></script>
88
{% endblock %}
99

10-
{% set title %}{{ 'ApiReference_SwaggerApi'|translate }}{% endset %}
10+
{% set title %}{{ 'General_API'|translate }}{% endset %}
1111

1212
{% block content %}
1313
<div
1414
vue-entry="ApiReference.SwaggerPage"
15+
default-website-id="{{ defaultWebsiteId|default(null)|json_encode }}"
1516
piwik-url="{{ piwikUrl|default(null)|json_encode }}"
1617
></div>
1718
{% endblock %}

tests/Integration/ControllerTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public function testSwaggerRendersAdminPageForViewAccess(): void
9191

9292
$this->assertNotSame('', $html);
9393
$this->assertStringContainsString('vue-entry="ApiReference.SwaggerPage"', $html);
94+
$this->assertStringContainsString('default-website-id="1"', $html);
9495
$this->assertStringContainsString('piwik-url=', $html);
9596
$this->assertStringContainsString('plugins/ApiReference/vue/lib/swagger-ui/swagger-ui.css', $html);
9697
$this->assertStringContainsString('plugins/ApiReference/vue/src/SwaggerPage/swagger-ui-overrides.css', $html);

tests/Integration/MenuTest.php

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111

1212
namespace Piwik\Plugins\ApiReference\tests\Integration;
1313

14+
use Piwik\Access;
1415
use Piwik\Cache;
16+
use Piwik\Container\StaticContainer;
1517
use Piwik\Menu\MenuAdmin;
1618
use Piwik\Plugin\Manager;
1719
use Piwik\Tests\Framework\Fixture;
@@ -50,38 +52,23 @@ public function tearDown(): void
5052
parent::tearDown();
5153
}
5254

53-
public function testConfigureAdminMenuAddsSwaggerItemForViewAccess(): void
55+
public function testConfigureAdminMenuEditsApiItemUrlForViewAccess(): void
5456
{
55-
FakeAccess::clearAccess(
56-
$superUser = false,
57-
$idSitesAdmin = [0],
58-
$idSitesView = [1],
59-
$identity = 'viewAccessUser'
60-
);
61-
62-
$items = $this->buildConfiguredMenu()->getMenu();
63-
64-
$this->assertArrayHasKey('CorePluginsAdmin_MenuPlatform', $items);
65-
$this->assertArrayHasKey('ApiReference_SwaggerApi', $items['CorePluginsAdmin_MenuPlatform']);
66-
}
67-
68-
public function testConfigureAdminMenuSkipsSwaggerItemWithoutViewAccess(): void
69-
{
70-
FakeAccess::clearAccess(
71-
$superUser = false,
72-
$idSitesAdmin = [],
73-
$idSitesView = [],
74-
$identity = 'noAccessUser'
75-
);
76-
77-
$items = $this->buildConfiguredMenu()->getMenu();
78-
79-
if (!isset($items['CorePluginsAdmin_MenuPlatform'])) {
80-
$this->assertArrayNotHasKey('CorePluginsAdmin_MenuPlatform', $items);
81-
return;
57+
$originalAccess = StaticContainer::getContainer()->get(Access::class);
58+
StaticContainer::getContainer()->set(Access::class, new FakeAccess(false, [0], [1], 'viewAccessUser'));
59+
60+
try {
61+
$items = $this->buildConfiguredMenu()->getMenu();
62+
63+
$this->assertArrayHasKey('CorePluginsAdmin_MenuPlatform', $items);
64+
$this->assertArrayHasKey('General_API', $items['CorePluginsAdmin_MenuPlatform']);
65+
$this->assertSame(
66+
['action' => 'swagger', 'module' => 'ApiReference'],
67+
$items['CorePluginsAdmin_MenuPlatform']['General_API']['_url']
68+
);
69+
} finally {
70+
StaticContainer::getContainer()->set(Access::class, $originalAccess);
8271
}
83-
84-
$this->assertArrayNotHasKey('ApiReference_SwaggerApi', $items['CorePluginsAdmin_MenuPlatform']);
8572
}
8673

8774
private function buildConfiguredMenu(): MenuAdmin

vue/dist/ApiReference.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)