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 CHANGED
@@ -1,45 +1,22 @@
1
- ## 1.1.0
1
+ # Changelog – calendar-onekite
2
2
 
3
- ## 1.3.4
4
- - Fix: HelloAsso OAuth token rate-limit (429/1015) by caching token, de-duplicating requests, and adding backoff retries (no extra logs).
5
- - Discord: add ⏳/💳 icons in embed titles.
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
- - Correctif : après validation d'une réservation depuis l’ACP, le lien HelloAsso (paymentUrl) est maintenant bien enregistré et transmis au calendrier (bouton **Payer maintenant** visible dans la modale).
19
-
20
- # Changelog
21
-
22
- ## 1.3.2
23
-
24
- - Discord : notifications envoyées en **embed** (plus lisible) pour les demandes et paiements.
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
- ### ACP
30
- - Locations en attente : validation/refus avec les **mêmes modales** que côté calendrier (adresse + carte + notes + heure / raison de refus) et **suppression de la ligne** après action.
31
- - Réglages : correction de l’enregistrement des **groupes** dans l’onglet Évènements (form + payload), et correction du décalage d’affichage des onglets.
32
-
33
- ### Calendrier (front)
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, archivedForAccounting });
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-onekite-calendar",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "FullCalendar-based equipment reservation workflow with admin approval & HelloAsso payment for NodeBB",
5
5
  "main": "library.js",
6
6
  "license": "MIT",
package/plugin.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "id": "nodebb-plugin-calendar-onekite",
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.3.5"
42
+ "version": "1.0.2"
43
43
  }