Skip to content

Commit b2563b9

Browse files
sgiehlclaude
andcommitted
Migrate BotTracking NoRecentRequests to client-rendered widget
Simple alert widget shown conditionally via middleware when no recent AI bot requests exist. Vue component renders the translated warning message with link. Changes: - Create NoRecentRequestsWidget.vue - Register client-side component in NoRecentRequests widget class - Add BotTracking_NoRecentAIBotRequests translation key Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 30aad04 commit b2563b9

8 files changed

Lines changed: 97 additions & 33 deletions

File tree

plugins/BotTracking/BotTracking.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ public function getClientSideTranslationKeys(&$translationKeys)
155155
$translationKeys[] = 'General_ErrorRequest';
156156
$translationKeys[] = 'General_Refresh';
157157
$translationKeys[] = 'Mobile_NavigationBack';
158+
$translationKeys[] = 'BotTracking_NoRecentAIBotRequests';
158159
}
159160

160161
public function getStylesheetFiles(&$stylesheets)

plugins/BotTracking/Controller.php

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -153,35 +153,6 @@ public function getEvolutionGraph(): ?string
153153
return $this->renderView($view);
154154
}
155155

156-
public function noRecentRequestsMessage(): string
157-
{
158-
$this->checkSitePermission();
159-
160-
$request = Request::fromRequest();
161-
$period = $request->getStringParameter('period', '');
162-
$date = $request->getStringParameter('date', '');
163-
164-
$noDataParams = [
165-
'module' => 'BotTracking',
166-
'action' => 'siteWithoutData',
167-
'idSite' => $this->idSite,
168-
];
169-
170-
if ($period !== '') {
171-
$noDataParams['period'] = $period;
172-
}
173-
174-
if ($date !== '') {
175-
$noDataParams['date'] = $date;
176-
}
177-
178-
$noDataUrl = 'index.php?' . Url::getQueryStringFromParameters($noDataParams);
179-
180-
return $this->renderTemplate('noRecentRequestsMessage', [
181-
'noDataUrl' => $noDataUrl,
182-
]);
183-
}
184-
185156
public function showNoRecentRequestsMessage(): string
186157
{
187158
$this->checkSitePermission();

plugins/BotTracking/Widgets/NoRecentRequests.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public static function configure(WidgetConfig $config)
2424
->setSubcategoryId('BotTracking_AIChatbotsOverview')
2525
->setModule('BotTracking')
2626
->setAction('noRecentRequestsMessage')
27+
->setClientSideComponent('BotTracking', 'NoRecentRequestsWidget')
2728
->setMiddlewareParameters(['module' => 'BotTracking', 'action' => 'showNoRecentRequestsMessage'])
2829
->setIsWide()
2930
->setOrder(0)

plugins/BotTracking/templates/noRecentRequestsMessage.twig

Lines changed: 0 additions & 3 deletions
This file was deleted.

plugins/BotTracking/vue/dist/BotTracking.umd.js

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/BotTracking/vue/dist/BotTracking.umd.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<!--
2+
Matomo - free/libre analytics platform
3+
4+
@link https://matomo.org
5+
@license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
6+
-->
7+
8+
<template>
9+
<div
10+
class="alert alert-warning bot-tracking-no-recent-requests-message"
11+
v-html="$sanitize(messageHtml)"
12+
/>
13+
</template>
14+
15+
<script lang="ts">
16+
import { defineComponent } from 'vue';
17+
import { Matomo, MatomoUrl, translate } from 'CoreHome';
18+
19+
export default defineComponent({
20+
computed: {
21+
noDataUrl(): string {
22+
const { period, date } = MatomoUrl.parsed.value;
23+
const query = MatomoUrl.stringify({
24+
module: 'BotTracking',
25+
action: 'siteWithoutData',
26+
idSite: Matomo.idSite ?? MatomoUrl.parsed.value.idSite,
27+
period,
28+
date,
29+
});
30+
31+
return `index.php?${query}`;
32+
},
33+
messageHtml(): string {
34+
const linkOpen = `<a href="${this.noDataUrl}">`;
35+
return translate(
36+
'BotTracking_NoRecentAIBotRequests',
37+
'<strong>',
38+
'</strong>',
39+
linkOpen,
40+
'</a>',
41+
);
42+
},
43+
},
44+
});
45+
</script>

plugins/BotTracking/vue/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
*/
77

88
export { default as SiteWithoutData } from './SiteWithoutData/SiteWithoutData.vue';
9+
export { default as NoRecentRequestsWidget } from './NoRecentRequests/NoRecentRequestsWidget.vue';

0 commit comments

Comments
 (0)