nodebb-plugin-facebook-post 1.0.6 → 1.0.8
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 +4 -2
- package/package.json +1 -1
- package/static/lib/admin.js +23 -5
- package/static/templates/admin/facebook-post.tpl +6 -21
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(
|
|
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
|
-
|
|
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
|
|
package/package.json
CHANGED
package/static/lib/admin.js
CHANGED
|
@@ -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
|
-
|
|
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">
|
|
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="
|
|
38
|
-
<select id="
|
|
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}"
|
|
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>
|