nodebb-plugin-onekite-calendar 1.0.0 → 1.0.1
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 +20 -41
- package/lib/api.js +3 -0
- package/lib/widgets.js +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,45 +1,24 @@
|
|
|
1
|
-
|
|
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).
|
|
1
|
+
# Changelog – calendar-onekite
|
|
16
2
|
|
|
17
3
|
## 1.0.1
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
- Discord :
|
|
25
|
-
-
|
|
4
|
+
- Correction ACP : les modales de validation et de refus s’affichent correctement
|
|
5
|
+
- Correction purge : les demandes purgées du calendrier ne bloquent plus de nouvelles réservations
|
|
6
|
+
- Optimisation scheduler (batch DB, réduction des scans inutiles)
|
|
7
|
+
- Amélioration intégration HelloAsso :
|
|
8
|
+
- mise en cache du token
|
|
9
|
+
- protection contre le rate limit (429 / Cloudflare 1015)
|
|
10
|
+
- Notifications Discord améliorées :
|
|
11
|
+
- utilisation d’embeds
|
|
12
|
+
- icônes ⏳ pour les demandes de réservation
|
|
13
|
+
- icônes 💳 pour les paiements reçus
|
|
14
|
+
- 1 action = 1 message
|
|
15
|
+
- Nettoyage du code et suppression des fichiers internes (refactor / review)
|
|
16
|
+
- Fonctionnement CDN conservé
|
|
26
17
|
|
|
27
18
|
## 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`.
|
|
19
|
+
- Première version stable du plugin calendar-onekite
|
|
20
|
+
- Gestion des réservations de matériel avec contrôle de disponibilité
|
|
21
|
+
- Calendrier FullCalendar via CDN
|
|
22
|
+
- Validation / refus des demandes depuis l’ACP
|
|
23
|
+
- Notifications Discord
|
|
24
|
+
- Intégration paiements HelloAsso
|
package/lib/api.js
CHANGED
|
@@ -641,6 +641,9 @@ api.createReservation = async function (req, res) {
|
|
|
641
641
|
const existingRows = await dbLayer.getReservations(candidateIds);
|
|
642
642
|
for (const existing of (existingRows || [])) {
|
|
643
643
|
if (!existing || !blocking.has(existing.status)) continue;
|
|
644
|
+
// Reservations can be purged from the calendar view (kept for accounting).
|
|
645
|
+
// Those must not block new booking requests.
|
|
646
|
+
if (existing.calendarPurgedAt) continue;
|
|
644
647
|
const exStart = parseInt(existing.start, 10);
|
|
645
648
|
const exEnd = parseInt(existing.end, 10);
|
|
646
649
|
if (!(exStart < end && start < exEnd)) continue;
|
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