nodebb-plugin-onekite-calendar 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -40
- package/lib/admin.js +1 -13
- package/lib/api.js +0 -2
- package/lib/widgets.js +1 -1
- package/package.json +1 -1
- package/plugin.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,45 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
# Changelog – calendar-onekite
|
|
2
2
|
|
|
3
|
-
## 1.
|
|
4
|
-
-
|
|
5
|
-
-
|
|
6
|
-
### Perf / prod (NodeBB v4)
|
|
7
|
-
- FullCalendar : passage au CDN **@latest** et utilisation de `main.min.css` (supprime l’erreur 404 `index.global.min.css`).
|
|
8
|
-
- API `events` : payload allégé (les détails sont chargés à la demande), tri stable.
|
|
9
|
-
- Cache intelligent : support **ETag** côté serveur + requêtes conditionnelles côté client (réduit les transferts lors des refetch).
|
|
10
|
-
- Prefetch : préchargement du mois précédent/suivant (si l’utilisateur navigue, la vue est instantanée).
|
|
11
|
-
- Robustesse : anti double-refetch (debounce sur les updates socket) et annulation des fetch concurrents.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## 1.0.1.1
|
|
15
|
-
- ACP (NodeBB v4) : empêche l’affichage multiple des popups de succès lors de l’enregistrement (déduplication des alerts).
|
|
3
|
+
## 1.0.2
|
|
4
|
+
- Purge calendrier : suppression réelle des réservations (aucune logique d’archivage)
|
|
5
|
+
- Compta conservée séparément (la purge n’y touche jamais)
|
|
16
6
|
|
|
17
7
|
## 1.0.1
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
- Discord : contenu texte désactivé (embed only) pour éviter le bruit.
|
|
8
|
+
- ACP : modales Valider / Refuser OK (plus de retour au premier onglet)
|
|
9
|
+
- Scheduler : optimisation (batch DB, scans réduits)
|
|
10
|
+
- API events : pagination interne + ETag optimisé
|
|
11
|
+
- HelloAsso : token mis en cache + protection rate-limit (429 / Cloudflare 1015), sans logs supplémentaires
|
|
12
|
+
- Discord : notifications en embeds + icônes ⏳ (demande) et 💳 (paiement)
|
|
13
|
+
- Widget : suppression de “2 semaines” dans le titre affiché
|
|
14
|
+
- Correctifs divers de stabilité/performance (dont crash au démarrage)
|
|
26
15
|
|
|
27
16
|
## 1.0.0
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- Évènements : suppression de l’icône « pin-it ».
|
|
35
|
-
- Évènements : alignement de l’horloge identique aux icônes des réservations (rendu sans colonne de temps FullCalendar).
|
|
36
|
-
- Création d’évènement : clic sur un jour = valeur par défaut **07:00 → 07:00** (gestion robuste de l’`end` exclusif FullCalendar).
|
|
37
|
-
- Modales : correction d’un cas où, après annulation (ESC/clic extérieur), les modales ne réapparaissaient plus.
|
|
38
|
-
- **Nouveau** : conservation du dernier mode sélectionné (**Location** / **Évènement**) même après création/annulation/refetch (persisté par utilisateur via `localStorage`).
|
|
39
|
-
|
|
40
|
-
### Emails
|
|
41
|
-
- Template relance : ajout du même bloc de paiement que dans pending (bouton + lien de secours).
|
|
42
|
-
|
|
43
|
-
### Maintenance
|
|
44
|
-
- Nettoyage des CSS/handlers devenus inutiles suite aux corrections d’alignement.
|
|
45
|
-
- Harmonisation des versions (`package.json` + `plugin.json`) en `1.0.0`.
|
|
17
|
+
- Première version stable du plugin calendar-onekite
|
|
18
|
+
- Gestion des réservations de matériel avec contrôle de disponibilité
|
|
19
|
+
- Calendrier FullCalendar via CDN
|
|
20
|
+
- Validation / refus des demandes depuis l’ACP
|
|
21
|
+
- Notifications Discord
|
|
22
|
+
- Intégration paiements HelloAsso
|
package/lib/admin.js
CHANGED
|
@@ -264,26 +264,14 @@ admin.purgeByYear = async function (req, res) {
|
|
|
264
264
|
|
|
265
265
|
const ids = await dbLayer.listReservationIdsByStartRange(startTs, endTs, 100000);
|
|
266
266
|
let removed = 0;
|
|
267
|
-
let archivedForAccounting = 0;
|
|
268
|
-
const ts = Date.now();
|
|
269
267
|
for (const rid of ids) {
|
|
270
268
|
const r = await dbLayer.getReservation(rid);
|
|
271
269
|
if (!r) continue;
|
|
272
270
|
|
|
273
|
-
// Keep paid reservations for accounting; just hide them from the calendar.
|
|
274
|
-
if (String(r.status) === 'paid') {
|
|
275
|
-
if (!r.calendarPurgedAt) {
|
|
276
|
-
r.calendarPurgedAt = ts;
|
|
277
|
-
await dbLayer.saveReservation(r);
|
|
278
|
-
}
|
|
279
|
-
archivedForAccounting++;
|
|
280
|
-
continue;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
271
|
await dbLayer.removeReservation(rid);
|
|
284
272
|
removed++;
|
|
285
273
|
}
|
|
286
|
-
res.json({ ok: true, removed
|
|
274
|
+
res.json({ ok: true, removed });
|
|
287
275
|
};
|
|
288
276
|
|
|
289
277
|
admin.purgeSpecialEventsByYear = async function (req, res) {
|
package/lib/api.js
CHANGED
|
@@ -342,8 +342,6 @@ api.getEvents = async function (req, res) {
|
|
|
342
342
|
const reservations = await dbLayer.getReservations(ids);
|
|
343
343
|
for (const r of (reservations || [])) {
|
|
344
344
|
if (!r) continue;
|
|
345
|
-
// Purged from calendar view (kept for accounting)
|
|
346
|
-
if (r.calendarPurgedAt) continue;
|
|
347
345
|
// Only show active statuses
|
|
348
346
|
if (!['pending', 'awaiting_payment', 'paid'].includes(r.status)) continue;
|
|
349
347
|
const rStart = parseInt(r.start, 10);
|
package/lib/widgets.js
CHANGED
|
@@ -63,7 +63,7 @@ widgets.renderTwoWeeksWidget = async function (data) {
|
|
|
63
63
|
const html = `
|
|
64
64
|
<div class="onekite-twoweeks">
|
|
65
65
|
<div class="d-flex justify-content-between align-items-center mb-1">
|
|
66
|
-
<div style="font-weight: 600;">Calendrier</div>
|
|
66
|
+
<div style="font-weight: 600;">Calendrier (2 semaines)</div>
|
|
67
67
|
<a href="${escapeHtml(calUrl)}" class="btn btn-sm btn-outline-secondary" style="line-height: 1.1;">Ouvrir</a>
|
|
68
68
|
</div>
|
|
69
69
|
<div id="${escapeHtml(id)}"></div>
|
package/package.json
CHANGED
package/plugin.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"id": "nodebb-plugin-calendar
|
|
2
|
+
"id": "nodebb-plugin-onekite-calendar",
|
|
3
3
|
"name": "Calendar OneKite",
|
|
4
4
|
"description": "Equipment reservation calendar (FullCalendar) with admin approval & HelloAsso checkout",
|
|
5
5
|
"url": "https://www.onekite.com/calendar",
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"acpScripts": [
|
|
40
40
|
"public/admin.js"
|
|
41
41
|
],
|
|
42
|
-
"version": "1.
|
|
42
|
+
"version": "1.0.2"
|
|
43
43
|
}
|