nodebb-plugin-facebook-post 1.0.5 → 1.0.7

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
@@ -138,7 +138,7 @@ function sanitizeExcerpt(text, maxLen) {
138
138
  function parseAllowedGroupsList() {
139
139
  const s = trimStr(settings.allowedGroups);
140
140
  if (!s) return [];
141
- return s.split(',').map(x => x.trim()).filter(Boolean);
141
+ return s.split(',').map(v => v.trim()).filter(Boolean);
142
142
  }
143
143
 
144
144
  async function userIsAllowed(uid) {
@@ -323,7 +323,9 @@ Plugin.init = async function (params) {
323
323
  }
324
324
 
325
325
  async function render(req, res) {
326
- const allGroups = await getAllGroups();
326
+ await loadSettings();
327
+ const selected = new Set(parseAllowedGroupsList());
328
+ const allGroups = (await getAllGroups()).map(g => Object.assign({}, g, { selected: selected.has(g.name) }));
327
329
  res.render('admin/facebook-post', { allGroups });
328
330
  }
329
331
 
@@ -371,7 +373,7 @@ Plugin.init = async function (params) {
371
373
  });
372
374
  };
373
375
 
374
- Plugin.addAdminNavigation = async function (header) { = async function (header) {
376
+ Plugin.addAdminNavigation = async function (header) {
375
377
  header.plugins = header.plugins || [];
376
378
  header.plugins.push({
377
379
  route: '/plugins/facebook-post',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodebb-plugin-facebook-post",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "Auto-post new NodeBB topics to a fixed Facebook Page (text + NodeBB uploads + place id).",
5
5
  "main": "library.js",
6
6
  "dependencies": {
@@ -2,6 +2,10 @@
2
2
  'use strict';
3
3
 
4
4
  (function () {
5
+ function toCsv(arr) {
6
+ return (arr || []).map(String).map(s => s.trim()).filter(Boolean).join(',');
7
+ }
8
+
5
9
  function init() {
6
10
  const $form = $('.facebook-post-settings');
7
11
  if (!$form.length) return;
@@ -9,14 +13,28 @@
9
13
  require(['settings', 'alerts'], function (Settings, alerts) {
10
14
  Settings.load('facebook-post', $form);
11
15
 
16
+ const $select = $('#allowedGroupsSelect');
17
+ const $hidden = $('#allowedGroups');
18
+
19
+ function syncHidden() {
20
+ $hidden.val(toCsv($select.val() || []));
21
+ }
22
+
23
+ // initial sync (after Settings.load fills hidden input)
24
+ const existing = ($hidden.val() || '').split(',').map(s => s.trim()).filter(Boolean);
25
+ if (existing.length) {
26
+ $select.val(existing);
27
+ }
28
+ syncHidden();
29
+
30
+ $select.off('change.fbpost').on('change.fbpost', syncHidden);
31
+ $form.off('submit.fbpost').on('submit.fbpost', function (e) { e.preventDefault(); return false; });
32
+
12
33
  $('#save').off('click.fbpost').on('click.fbpost', function (e) {
13
34
  e.preventDefault();
35
+ syncHidden();
14
36
  Settings.save('facebook-post', $form, function () {
15
- if (alerts && typeof alerts.success === 'function') {
16
- alerts.success('[[admin/settings:saved]]');
17
- } else if (window.app && typeof window.app.alertSuccess === 'function') {
18
- window.app.alertSuccess('[[admin/settings:saved]]');
19
- }
37
+ alerts.success('[[admin/settings:saved]]');
20
38
  });
21
39
  });
22
40
  });
@@ -1,21 +1,5 @@
1
1
  <div class="acp-page-container">
2
2
  <h2>Facebook/Instagram Post (Worker)</h2>
3
- <p class="text-muted">
4
- Enfile les publications dans une <strong>queue Redis</strong>. Un worker séparé consomme la queue et poste sur Facebook,
5
- et sur Instagram (si activé et si une image est présente).
6
- </p>
7
-
8
- <div class="alert alert-info">
9
- Variables d’environnement :
10
- <ul class="mb-0">
11
- <li><code>NODEBB_FB_PAGE_ID</code></li>
12
- <li><code>NODEBB_FB_PAGE_ACCESS_TOKEN</code></li>
13
- <li><code>NODEBB_FB_GRAPH_VERSION</code> (optionnel)</li>
14
- <li><code>NODEBB_FB_QUEUE_REDIS_URL</code></li>
15
- <li><code>NODEBB_FB_WORKER_SECRET</code></li>
16
- <li><code>NODEBB_IG_USER_ID</code> (si Instagram activé)</li>
17
- </ul>
18
- </div>
19
3
 
20
4
  <form class="facebook-post-settings" role="form">
21
5
  <div class="form-check mb-3">
@@ -31,15 +15,16 @@
31
15
  <hr/>
32
16
 
33
17
  <h4>Accès</h4>
34
- <p class="text-muted">Groupes NodeBB autorisés à voir la case “Publier sur Facebook” dans le composer (et donc déclencher Facebook + Insta).</p>
18
+ <p class="text-muted">Sélectionne les groupes autorisés à voir la case “Publier sur Facebook” dans le composer.</p>
35
19
 
36
20
  <div class="mb-3">
37
- <label class="form-label" for="allowedGroups">Groupes autorisés</label>
38
- <select id="allowedGroups" name="allowedGroups" class="form-select" multiple size="12">
21
+ <label class="form-label" for="allowedGroupsSelect">Groupes autorisés</label>
22
+ <select id="allowedGroupsSelect" class="form-select" multiple size="12">
39
23
  <!-- BEGIN allGroups -->
40
- <option value="{allGroups.name}">{allGroups.name}</option>
24
+ <option value="{allGroups.name}" <!-- IF allGroups.selected -->selected<!-- ENDIF -->>{allGroups.name}</option>
41
25
  <!-- END allGroups -->
42
26
  </select>
27
+ <input type="hidden" id="allowedGroups" name="allowedGroups" value="">
43
28
  <p class="form-text">Sans fallback : si aucun groupe n’est sélectionné, personne ne verra la case.</p>
44
29
  </div>
45
30
 
@@ -90,6 +75,6 @@
90
75
  <label class="form-check-label" for="enablePlaceTagging">Activer le tag de lieu (Place ID / location_id)</label>
91
76
  </div>
92
77
 
93
- <button id="save" class="btn btn-primary">Enregistrer</button>
78
+ <button type="button" id="save" class="btn btn-primary">Enregistrer</button>
94
79
  </form>
95
80
  </div>