nodebb-plugin-calendar-onekite 10.0.13 → 10.0.15

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/library.js CHANGED
@@ -319,6 +319,9 @@ plugin.init = async function (params) {
319
319
  const { router, middleware } = params;
320
320
  const settings = await getSettings();
321
321
 
322
+ try {
323
+
324
+
322
325
  // Page route: /calendar
323
326
  router.get('/calendar', middleware.buildHeader, async (req, res) => {
324
327
  if (!settings.enabled) {
@@ -330,6 +333,22 @@ plugin.init = async function (params) {
330
333
  isLoggedIn,
331
334
  uid: req.uid || 0,
332
335
  });
336
+
337
+ // Admin page route: /admin/plugins/calendar-onekite
338
+ const adminBuild = (middleware.admin && middleware.admin.buildHeader) ? middleware.admin.buildHeader : middleware.buildHeader;
339
+ router.get('/admin/plugins/calendar-onekite', ensureLoggedIn, async (req, res, next) => {
340
+ try {
341
+ const isAdmin = await user.isAdministrator(req.uid);
342
+ if (!isAdmin) return res.status(403).send('Forbidden');
343
+ next();
344
+ } catch (e) {
345
+ return res.status(500).send(e.message);
346
+ }
347
+ }, adminBuild, async (req, res) => {
348
+ return res.render('admin/plugins/calendar-onekite', { title: 'Calendar OneKite' });
349
+ });
350
+
351
+
333
352
  });
334
353
 
335
354
  // API: events
@@ -577,6 +596,10 @@ plugin.init = async function (params) {
577
596
 
578
597
  res.json({ deleted: toDelete.length });
579
598
  });
599
+ } catch (e) {
600
+ console.error('[calendar-onekite] init error', e);
601
+ }
602
+
580
603
  };
581
604
 
582
605
  plugin.addAdminNavigation = async function (header) {
@@ -588,16 +611,6 @@ plugin.addAdminNavigation = async function (header) {
588
611
  return header;
589
612
  };
590
613
 
591
- plugin.addPageRoute = async function (data) {
592
- // ensure /calendar works as "page route" for theme router filter edge cases
593
- data.router.get('/calendar', data.middleware.buildHeader, async (req, res) => {
594
- res.render('calendar-onekite/calendar', {
595
- title: 'Calendrier',
596
- isLoggedIn: !!req.uid,
597
- uid: req.uid || 0,
598
- });
599
- });
600
- return data;
601
- };
614
+ plugin.addPageRoute = async function (data) { return data; };
602
615
 
603
616
  module.exports = plugin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-calendar-onekite",
3
- "version": "10.0.13",
3
+ "version": "10.0.15",
4
4
  "description": "NodeBB calendar booking plugin using FullCalendar and HelloAsso checkout intents",
5
5
  "main": "library.js",
6
6
  "license": "MIT",
package/plugin.json CHANGED
@@ -12,18 +12,14 @@
12
12
  {
13
13
  "hook": "filter:admin.header.build",
14
14
  "method": "addAdminNavigation"
15
- },
16
- {
17
- "hook": "filter:router.page",
18
- "method": "addPageRoute"
19
15
  }
20
16
  ],
21
17
  "templates": "templates",
22
18
  "staticDirs": {
23
- "calendar-onekite": "./public"
19
+ "public": "./public"
24
20
  },
25
21
  "acpScripts": [
26
- "public/js/admin/calendar-onekite-admin.js"
22
+ "public/lib/admin/plugins/calendar-onekite.js"
27
23
  ],
28
24
  "scripts": [
29
25
  "public/js/calendar-onekite.js"
@@ -0,0 +1,50 @@
1
+ /* global define, $, app */
2
+
3
+ define('admin/plugins/calendar-onekite', ['settings'], function (Settings) {
4
+ const ACP = {};
5
+
6
+ function setStatus(html, type) {
7
+ const el = $('#calendar-onekite-admin-status');
8
+ el.html(`<div class="alert alert-${type || 'info'}">${html}</div>`);
9
+ }
10
+
11
+ ACP.init = function () {
12
+ Settings.load('calendar-onekite', $('.calendar-onekite-settings'));
13
+
14
+ $('#calendar-onekite-save').on('click', function () {
15
+ Settings.save('calendar-onekite', $('.calendar-onekite-settings'), function () {
16
+ setStatus('Sauvegardé ✅', 'success');
17
+ });
18
+ });
19
+
20
+ $('#calendar-onekite-test-items').on('click', async function () {
21
+ try {
22
+ const res = await $.getJSON('/api/calendar-onekite/items');
23
+ setStatus(`Items récupérés: <strong>${(res.items || []).length}</strong>`, 'info');
24
+ } catch (e) {
25
+ const err = (e.responseJSON && e.responseJSON.error) ? e.responseJSON.error : e.statusText;
26
+ setStatus(`Erreur items: ${err}`, 'danger');
27
+ }
28
+ });
29
+
30
+ $('#calendar-onekite-purge').on('click', async function () {
31
+ const year = parseInt($('#calendar-onekite-purge-year').val(), 10);
32
+ if (!year) return setStatus('Année invalide', 'warning');
33
+ if (!confirm(`Purger toutes les réservations dont le début est en ${year} ?`)) return;
34
+
35
+ try {
36
+ const res = await $.ajax({
37
+ url: '/api/admin/plugins/calendar-onekite/purge',
38
+ method: 'POST',
39
+ data: { year },
40
+ });
41
+ setStatus(`Purge terminée. Supprimés: <strong>${res.deleted}</strong>`, 'success');
42
+ } catch (e) {
43
+ const err = (e.responseJSON && e.responseJSON.error) ? e.responseJSON.error : e.statusText;
44
+ setStatus(`Erreur purge: ${err}`, 'danger');
45
+ }
46
+ });
47
+ };
48
+
49
+ return ACP;
50
+ });
@@ -5,7 +5,7 @@
5
5
  Les groupes sont à renseigner par <strong>noms de groupes</strong> séparés par des virgules (ex: <code>administrators, booking-approvers</code>).
6
6
  </div>
7
7
 
8
- <form id="calendar-onekite-settings">
8
+ <div class="calendar-onekite-settings">
9
9
  <div class="mb-3">
10
10
  <label class="form-label">Activer le plugin</label>
11
11
  <div class="form-check">
@@ -95,10 +95,10 @@
95
95
  </div>
96
96
 
97
97
  <div class="mt-4 d-flex gap-2">
98
- <button class="btn btn-primary" type="submit">Sauvegarder</button>
98
+ <button class="btn btn-primary" type="button" id="calendar-onekite-save">Sauvegarder</button>
99
99
  <button class="btn btn-outline-secondary" type="button" id="calendar-onekite-test-items">Tester la récupération des items</button>
100
100
  </div>
101
- </form>
101
+ </div>
102
102
 
103
103
  <hr class="my-4"/>
104
104