dolibarr 24.0.0-beta
fediverse.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2003 Eric Seigne <erics@rycks.com>
3 * Copyright (C) 2003,2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
4 * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
5 * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
6 * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
7 * Copyright (C) 2005-2011 Regis Houssin <regis.houssin@inodbox.com>
8 * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
9 * Copyright (C) 2020 Tobias Sekan <tobias.sekan@startmail.com>
10 * Copyright (C) 2024-2026 MDW <mdeweerd@users.noreply.github.com>
11 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 3 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <https://www.gnu.org/licenses/>.
25 */
26
33//load Dolibarr environment
34require '../main.inc.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
36require_once DOL_DOCUMENT_ROOT.'/core/lib/socialnetwork.lib.php';
37require_once DOL_DOCUMENT_ROOT.'/core/modules/modSocialNetworks.class.php';
38require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php';
39require_once DOL_DOCUMENT_ROOT.'/core/class/fediverseparser.class.php';
40require_once DOL_DOCUMENT_ROOT.'/core/boxes/box_fediverse.php';
41
50//load translation files requires by the page
51$langs->loadLangs(array('admin', 'users', 'dict'));
52
53$action = GETPOST('action', 'aZ09');
54
55// Security check
56if (!$user->admin) {
58}
59if (!isModEnabled('socialnetworks')) {
60 accessforbidden('Module Social Networks is not enabled');
61}
62
63// List of oauth services
64$oauthservices = array();
65
66foreach ($conf->global as $key => $val) {
67 if (!empty($val) && preg_match('/^OAUTH_.*_ID$/', $key)) {
68 $key = preg_replace('/^OAUTH_/', '', $key);
69 $key = preg_replace('/_ID$/', '', $key);
70 if (preg_match('/^.*-/', $key)) {
71 $name = preg_replace('/^.*-/', '', $key);
72 } else {
73 $name = $langs->trans("NoName");
74 }
75 $provider = preg_replace('/-.*$/', '', $key);
76 $provider = ucfirst(strtolower($provider));
77
78 $oauthservices[$key] = $name." (".$provider.")";
79 }
80}
81
82/*
83 * Actions
84 */
85
86if ($action == 'add') {
87 $error = 0;
88
89 if (empty(GETPOST('socialnetwork_name')) || empty(GETPOST('socialnetwork_url'))) {
90 $error++;
91 }
92
93 $socialNetworkName = GETPOST('socialnetwork_name', 'alpha');
94 $socialNetworkUrl = GETPOST('socialnetwork_url', 'alpha');
95 if (GETPOSTISSET("OAUTH_SERVICE_SOCIAL_NETWORK")) {
96 dolibarr_set_const($db, "OAUTH_SERVICE_SOCIAL_NETWORK", GETPOST("OAUTH_SERVICE_SOCIAL_NETWORK", 'alphanohtml'), 'chaine', 0, '', $conf->entity);
97 }
98
99 // other params if exist
100 $paramNames = GETPOST('param_name', 'array');
101 $paramValues = GETPOST('param_value', 'array');
102
103 $additionalParams = [];
104 if (!empty($paramNames) && is_array($paramNames)) {
105 foreach ($paramNames as $index => $paramName) {
106 if (!empty($paramName) && isset($paramValues[$index])) {
107 $additionalParams[$paramName] = $paramValues[$index];
108 }
109 }
110 }
111 if (!$error) {
112 $db->begin();
113
114 $socialNetworkData = array(
115 'title' => $socialNetworkName,
116 'url' => $socialNetworkUrl
117 );
118
119 $socialNetworkData = array_merge($socialNetworkData, $additionalParams);
120
121 $boxlabel = '(SocialNetwoksInformations)';
122
123 $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (file, note)";
124 $sql .= " VALUES ('box_fediverse.php', '".$db->escape($socialNetworkName)."')";
125
126 if (!$db->query($sql)) {
128 $error++;
129 } else {
130 $jsonData = json_encode($socialNetworkData);
131 $result = dolibarr_set_const($db, "SOCIAL_NETWORKS_DATA_".$socialNetworkName, $jsonData, 'chaine', 0, '', $conf->entity);
132 if ($result <= 0) {
133 $error++;
134 setEventMessages($langs->trans("ErrorInputRequired"), null, 'errors');
135 }
136 }
137 }
138 if (!$error) {
139 $db->commit();
140 header("Location: ".$_SERVER["PHP_SELF"]);
141 exit;
142 } else {
143 $db->rollback();
145 }
146}
147
148if ($action == 'confirm_delete' && GETPOST('confirm') == 'yes') {
149 $error = 0;
150 $key = GETPOST('key', 'alpha');
151 $name = '';
152 $sqlgetName = "SELECT note FROM ".MAIN_DB_PREFIX."boxes_def WHERE rowid=".((int) $key);
153
154 $resqName = $db->query($sqlgetName);
155 if ($resqName) {
156 $objName = $db->fetch_object($resqName);
157 $name = $objName->note;
158 }
159
160 $db->begin();
161
162 $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
163 $sql .= " WHERE entity = ".$conf->entity;
164 $sql .= " AND box_id = ".((int) $key);
165 $resql1 = $db->query($sql);
166
167 $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def";
168 $sql .= " WHERE rowid = ".((int) $key);
169 $resql2 = $db->query($sql);
170
171 if (!$resql1 || !$resql2) {
172 $db->rollback();
173 dol_print_error($db, "sql=".$sql);
174 exit;
175 } else {
176 $result = dolibarr_del_const($db, "SOCIAL_NETWORKS_DATA_".$name, $conf->entity);
177 if ($result) {
178 $db->commit();
179 header("Location: ".$_SERVER["PHP_SELF"]);
180 exit;
181 } else {
182 $db->rollback();
184 }
185 }
186}
187
188if ($action == 'updatesocialnetwork') {
189 $error = 0;
190 $id = GETPOST('key', 'alpha');
191 $name = GETPOST('socialnetwork_name');
192 $url = GETPOST('socialnetwork_url');
193 $paramsKey = GETPOST('paramsKey', 'array');
194 $paramsVal = GETPOST('paramsVal', 'array');
195
196 $result = getDolGlobalString("SOCIAL_NETWORKS_DATA_".$name);
197
198 $socialNetworkData = json_decode($result, true);
199
200 foreach ($paramsKey as $index => $key) {
201 if (empty($key) || empty($paramsVal[$index])) {
202 $error++;
203 }
204 }
205 // delete others params
206 foreach ($socialNetworkData as $key => $value) {
207 if ($key != 'title' && $key != 'url') {
208 unset($socialNetworkData[$key]);
209 }
210 }
211
212 // new keys and new values in array
213 $mergedParams = array();
214 foreach ($paramsKey as $index => $key) {
215 if (isset($paramsVal[$index])) {
216 $mergedParams[$key] = $paramsVal[$index];
217 }
218 }
219
220 // Add new key, value if changed
221 foreach ($mergedParams as $newKey => $newValue) {
222 if (!isset($socialNetworkData[$newKey]) || $socialNetworkData[$newKey] !== $newValue) {
223 $socialNetworkData[$newKey] = $newValue;
224 }
225 }
226 if (!$error) {
227 $newData = json_encode($socialNetworkData);
228 $result = dolibarr_set_const($db, "SOCIAL_NETWORKS_DATA_".$name, $newData, 'chaine', 0, '', $conf->entity);
229 if ($result) {
230 $db->commit();
231 header("Location: ".$_SERVER["PHP_SELF"]);
232 exit;
233 } else {
234 $db->rollback();
236 }
237 } else {
238 setEventMessages($langs->trans("ErrorInputRequired"), null, 'errors');
239 header("Location: ".$_SERVER["PHP_SELF"].'?action=editsocialnetwork&token='.newToken().'&key='.$id);
240 exit;
241 }
242}
243
244if ($action == 'editsocialnetwork' && GETPOST('confirm') == 'yes') {
245 $paramKey = GETPOST('paramkey', 'alpha');
246 $key = GETPOST('key', 'alpha');
247 $name = GETPOST('name');
248
249 $result = getDolGlobalString("SOCIAL_NETWORKS_DATA_".$name);
250
251 $socialNetworkData = json_decode($result, true);
252
253 unset($socialNetworkData[$paramKey]);
254 $newData = json_encode($socialNetworkData);
255
256 $result = dolibarr_set_const($db, "SOCIAL_NETWORKS_DATA_".$name, $newData, 'chaine', 0, '', $conf->entity);
257 if ($result) {
258 $db->commit();
259 header("Location: ".$_SERVER["PHP_SELF"].'?action=editsocialnetwork&token='.newToken().'&key='.urlencode($key));
260 exit;
261 } else {
262 $db->rollback();
264 }
265}
266
267
268
269/*
270 * View
271 */
272
273$form = new Form($db);
274
275llxHeader('', $langs->trans("FediverseSetup"), '', '', 0, 0, '', '', '', 'mod-admin page-dict');
276
277$head = socialnetwork_prepare_head();
278
279$linkback = '<a href="'.dolBuildUrl(DOL_URL_ROOT.'/admin/modules.php', ['restore_lastsearch_values' => 1]).'">'.img_picto($langs->trans("BackToModuleList"), 'back', 'class="pictofixedwidth"').'<span class="hideonsmartphone">'.$langs->trans("BackToModuleList").'</span></a>';
280
281print dol_get_fiche_head($head, 'divers', $langs->trans('MenuDict'), -1, 'user', 0, $linkback, '', 0, '', 0);
282
283$title = $langs->trans("ConfigImportSocialNetwork");
284
285print_barre_liste($title, 0, $_SERVER["PHP_SELF"], '', '', '', '', -1, '', 'tools', 0, '', '', -1, 0, 0, 0, '');
286
287
288print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
289print '<input type="hidden" name="token" value="'.newToken().'">';
290
291print '<div class="div-table-responsive-no-min">';
292print '<table class="noborder centpercent">';
293
294print '<tr class="liste_titre">';
295print '<td colspan="2">'.$langs->trans("NewSocialNetwork").'</td>';
296print '<td>'.$langs->trans("Example").'</td>';
297print '</tr>';
298
299print '<tr class="oddeven">';
300print '<td>'.$langs->trans("Title").'</td>';
301print '<td><input type="text" class="flat minwidth300" name="socialnetwork_name"></td>';
302print '<td>Mastodon</td>';
303print '</tr>';
304
305print '<tr class="oddeven">';
306print '<td>'.$langs->trans('SocialNetworkUrl').'</td>';
307print '<td><input type="text" class="flat minwidth300" name="socialnetwork_url"></td>';
308print '<td>https://mastodon.social/api/v1/accounts/id_user</td>';
309print '</tr>';
310$vartosmtpstype = 'MAIN_MAIL_SMTPS_AUTH_TYPE_EMAILING';
311
312print '<script>
313$(document).ready(function() {
314 function toggleOAuthServiceDisplay() {
315 if ($("#radio_oauth").is(":checked")) {
316 $("#oauth_service_div").show();
317 } else {
318 $("#oauth_service_div").hide();
319 }
320 }
321
322 toggleOAuthServiceDisplay();
323
324 $("input[name=\"'.$vartosmtpstype.'\"]").change(function() {
325 toggleOAuthServiceDisplay();
326 });
327});
328</script>';
329
330// Methods oauth
331print '<tr><td>'.$langs->trans("MAIN_MAIL_SMTPS_AUTH_TYPE").'</td>';
332print '<td>';
333print '<input type="radio" id="radio_oauth" name="'.$vartosmtpstype.'" value="XOAUTH2"'.(getDolGlobalString($vartosmtpstype) == 'XOAUTH2' ? ' checked' : '').(isModEnabled('oauth') ? '' : ' disabled').'>';
334print '<label for="radio_oauth">'.$form->textwithpicto($langs->trans("UseOauth"), $langs->trans("OauthNotAvailableForAllAndHadToBeCreatedBefore")).'</label>';
335if (!isModEnabled('oauth')) {
336 print ' &nbsp; <a href="'.DOL_URL_ROOT.'/admin/modules.php?search_keyword=oauth">'.$langs->trans("EnableModuleX", "OAuth").'</a>';
337} else {
338 print ' &nbsp; <a href="'.DOL_URL_ROOT.'/admin/oauth.php">'.$langs->trans("SetupModuleX", " OAuth").'</a>';
339}
340print '</td>';
341print '</tr>';
342
343print '<tr class="oddeven" id="oauth_service_div" style="display: none;">';
344print '<td>'.$langs->trans("MAIN_MAIL_SMTPS_OAUTH_SERVICE").'</td>';
345print '<td>';
346
347$oauthservicesStringKeys = [];
348foreach ($oauthservices as $key => $value) {
349 $key = (string) $key;
350 $oauthservicesStringKeys[$key] = $value;
351}
352
354if (!isModEnabled('multicompany') || ($user->admin && !$user->entity)) {
355 print $form->selectarray('OAUTH_SERVICE_SOCIAL_NETWORK', $oauthservicesStringKeys, (string) getDolGlobalString("OAUTH_SERVICE_SOCIAL_NETWORK"));
356} else {
357 $selectedKey = (string) getDolGlobalString('OAUTH_SERVICE_SOCIAL_NETWORK');
358 $text = isset($oauthservicesStringKeys[$selectedKey]) ? $oauthservicesStringKeys[$selectedKey]['label'] : '';
359 if (empty($text)) {
360 $text = $langs->trans("Undefined");
361 }
362 $htmltext = $langs->trans("ContactSuperAdminForChange");
363 print $form->textwithpicto($text, $htmltext, 1, 'superadmin');
364 print '<input type="hidden" name="OAUTH_SERVICE_SOCIAL_NETWORK" value="'.$selectedKey.'">';
365}
366print '</td>';
367print '</tr>';
368
369print '<tr class="oddeven" id="add_param_row"><td>';
370print $form->textwithpicto($langs->trans("Others"), $langs->trans("AddMoreParams"));
371print '</td><td><button type="button" id="addParamButton">'.img_picto($langs->trans("AddMoreParams"), 'add', 'pictofixedwidth').'</button></td>';
372print '<td>Token : ****<br>Cookie : ****</td>';
373print '</tr>';
374
375print '<tr class="oddeven">';
376print '<td colspan="2">';
377print '<div id="additionalParams"></div>';
378print '</td>';
379print '<td></td>';
380print '</tr>';
381
382
383print '</table>';
384
385print '</div>';
386
387print $form->buttonsSaveCancel("Add", '');
388print '<input type="hidden" name="action" value="add">';
389print '<script type="text/javascript">
390 $(document).ready(function() {
391 function toggleOAuthServiceDisplay() {
392 if ($("#radio_oauth").is(":checked")) {
393 $("#oauth_service_div").show(); // Show the OAuth selector
394 } else {
395 $("#oauth_service_div").hide(); // Hide the OAuth selector
396 }
397 }
398
399 function toggleAddParamRow() {
400 if ($("#radio_oauth").is(":checked")) {
401 $("#add_param_row").hide(); // Hide the entire line
402 } else {
403 $("#add_param_row").show(); // Show the entire line
404 }
405 }
406
407 toggleOAuthServiceDisplay();
408 toggleAddParamRow();
409
410 $("input[name=\"'.$vartosmtpstype.'\"]").change(function() {
411 toggleOAuthServiceDisplay();
412 toggleAddParamRow();
413 });
414
415 $("#addParamButton").click(function() {
416 var container = $("#additionalParams");
417 var index = container.children().length;
418 var newParam = $("<div class=\'pair-group\'><input type=\'text\' class=\'flat minwidth300\' name=\'param_name[]\' placeholder=\''.$langs->trans("ParamName").'\' class=\'flat\' /> <input type=\'text\' class=\'flat minwidth300\' name=\'param_value[]\' placeholder=\''.$langs->trans("ParamValue").'\' class=\'flat\' /></div>");
419 container.append(newParam);
420 });
421 });
422</script>';
423print '</form>';
424
425print '<br><br>';
426print '<span class="opacitymedium">'.$langs->trans('SocialNetworksNote').'</span>';
427print ' - ';
428print '<a href="'.DOL_URL_ROOT.'/admin/boxes.php?backtopage='.urlencode($_SERVER["PHP_SELF"]).'">'.$langs->trans('JumpToBoxes').'</a>';
429print '<br><br>';
430
431
432if ($action == 'deletesocialnetwork') {
433 $formconfirm = $form->formconfirm(
434 $_SERVER["PHP_SELF"].'?key='.urlencode(GETPOST('key', 'alpha')),
435 $langs->trans('Delete'),
436 $langs->trans('ConfirmDeleteSocialNetwork', GETPOST('key', 'alpha')),
437 'confirm_delete',
438 '',
439 0,
440 1
441 );
442 print $formconfirm;
443}
444// delete params of social network
445if ($action == 'editsocialnetwork' && GETPOST('paramkey', 'alpha')) {
446 $paramKey = GETPOST('paramkey', 'alpha');
447 $name = GETPOST('name', 'alpha');
448
449 $formconfirm = $form->formconfirm(
450 $_SERVER["PHP_SELF"].'?key='.urlencode(GETPOST('key', 'alpha')).'&paramkey='.urlencode($paramKey).'&name='.urlencode($name),
451 $langs->trans('Delete'),
452 $langs->trans('ConfirmDeleteParamOfSocialNetwork', $paramKey),
453 'editsocialnetwork',
454 '',
455 0,
456 1
457 );
458 print $formconfirm;
459}
460$sql = "SELECT rowid, file, note FROM ".MAIN_DB_PREFIX."boxes_def";
461$sql .= " WHERE file = 'box_fediverse.php'";
462$sql .= " ORDER BY note";
463
464dol_syslog("select socialnetworks boxes", LOG_DEBUG);
465$resql = $db->query($sql);
466if ($resql) {
467 $boxlist = InfoBox::listBoxes($db, 'activated', -1, null);
468 $num = $db->num_rows($resql);
469 $i = 0;
470 while ($i < $num) {
471 $obj = $db->fetch_object($resql);
472
473 $jsonData = getDolGlobalString("SOCIAL_NETWORKS_DATA_".$obj->note);
474
475 $socialNetworkData = json_decode($jsonData, true);
476
477 $socialNetworkTitle = $socialNetworkData['title'];
478 $socialNetworkUrl = $socialNetworkData['url'];
479 $socialNetworkId = $obj->rowid;
480
481 $fediverseparser = new SocialNetworkManager($socialNetworkTitle);
482 $path_fediverse = DOL_DATA_ROOT.'/fediverse/temp/'.$socialNetworkTitle;
483
484 //check if other params exist
485 $authParams = [];
486 foreach ($socialNetworkData as $key => $value) {
487 if ($key !== 'title' && $key !== 'url') {
488 $authParams[$key] = $value;
489 }
490 }
491
492 $result = $fediverseparser->fetchPosts($socialNetworkUrl, 5, 300, $path_fediverse, $authParams);
493
494 print "<br>";
495 print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
496 print '<input type="hidden" name="token" value="'.newToken().'">'."\n";
497
498 print '<table class="noborder centpercent">'."\n";
499
500 print '<tr class="liste_titre">';
501 print "<td>".$langs->trans("SocialNetworks")." ".($i + 1)."</td>";
502 print '<td class="right">';
503 print '<a class="viewfielda reposition marginleftonly marginrighttonly showInputBtn" href="'.$_SERVER["PHP_SELF"].'?action=editsocialnetwork&token='.newToken().'&key='.urlencode($socialNetworkId).'">'.img_edit().'</a>';
504 print '<a class="deletefielda reposition marginleftonly right" href="'.$_SERVER["PHP_SELF"].'?action=deletesocialnetwork&token='.newToken().'&key='.urlencode($socialNetworkId).'">'.img_delete().'</a>';
505 print '<input type="hidden" name="id" value="'.$socialNetworkId.'">';
506 print '</td>';
507 print '</tr>'."\n";
508
509 print '<tr class="oddeven">';
510 print '<td>'.$langs->trans("Title")."</td>";
511 print '<td><input type="text" class="flat minwidth300" name="socialnetwork_name" value="'.dol_escape_htmltag($socialNetworkTitle).'" '.($action != "editsocialnetwork" ? 'disabled' : '').'></td>';
512 print '</tr>'."\n";
513
514 print '<tr class="oddeven">';
515 print "<td>".$langs->trans("URL")."</td>";
516 print '<td><input type="text" class="flat minwidth300" name="socialnetwork_url" value="'.dol_escape_htmltag($socialNetworkUrl).'" '.($action != "editsocialnetwork" ? 'disabled' : '').'></td>';
517 print '</tr>'."\n";
518
519 print '<tr class="oddeven">';
520 print "<td>".$langs->trans("Status")."</td>";
521 print "<td>";
522 if ($result > 0 && empty($fediverseparser->error)) {
523 print '<span class="ok">'.img_picto($langs->trans("Online"), 'tick', 'class="pictofixedwidth"').$langs->trans("Online").'</div>';
524 } else {
525 print '<span class="error">'.$langs->trans("Offline");
526 $langs->load("errors");
527 if ($fediverseparser->error) {
528 print ' - '.$langs->trans($fediverseparser->error);
529 }
530 print '</div>';
531 }
532 print "</td>";
533 print '</tr>'."\n";
534
535 // Active
536 $active = _isInBoxListFediverse((int) $socialNetworkId, $boxlist) ? 'yes' : 'no';
537
538 print '<tr class="oddeven">';
539 print '<td>'.$langs->trans('WidgetAvailable').'</td>';
540 print '<td>'.yn($active);
541 print ' &nbsp; - &nbsp; <a href="'.DOL_URL_ROOT.'/admin/boxes.php?backtopage='.urlencode($_SERVER["PHP_SELF"]).'">';
542 print $langs->trans("JumpToBoxes");
543 print '</a>';
544 print '</td>';
545 print '</tr>'."\n";
546
547 if ($action == 'editsocialnetwork' && $socialNetworkId == GETPOST('key')) {
548 foreach ($socialNetworkData as $k => $val) {
549 if ($k != 'title' && $k != 'url') {
550 print '<tr class="oddeven">';
551 print '<td><input type="text" class="flat minwidth200" name="paramsKey[]" value="'.dol_escape_htmltag($k).'"</td>';
552 if ($k == 'password') {
553 print '<td><input type="password" class="flat minwidth300" name="paramsVal[]" value="'.dol_escape_htmltag($val).'" />';
554 } else {
555 print '<td><input type="text" class="flat minwidth300" name="paramsVal[]" value="'.dol_escape_htmltag($val).'" />';
556 }
557 print '<button type="button" class="delete-param-btn" data-paramkey="'.htmlspecialchars($k).'">'.img_delete().'</button>';
558
559 print '</td>';
560 print '</tr>'."\n";
561 }
562 }
563
564 print '<tr class="oddeven">';
565 print '<td><input type="hidden" name="action" value="updatesocialnetwork" /></td>';
566 print '<td><input class="button " type="submit" name="update" value="'.$langs->trans('Modify').'" /></td>';
567 print '</tr>'."\n";
568
569 print '<script>
570 $(document).ready(function() {
571 $(\'.delete-param-btn\').on(\'click\', function() {
572 var paramKey = $(this).data(\'paramkey\');
573 var socialNetworkId = \''.htmlspecialchars($socialNetworkId).'\';
574 var socialNetworkName = \''.htmlspecialchars($socialNetworkTitle).'\';
575 window.location.href = \''.$_SERVER["PHP_SELF"].'?action=editsocialnetwork&token='.newToken().'&paramkey=\' + encodeURIComponent(paramKey) + \'&key=\' + encodeURIComponent(socialNetworkId) + \'&name=\' + encodeURIComponent(socialNetworkName);
576 });
577 });
578 </script>';
579 }
580
581 print '</table>'."\n";
582
583 print "</form>\n";
584
585 $i++;
586 }
587} else {
589}
590
591print dol_get_fiche_end();
592
593llxFooter();
594$db->close();
595
603function _isInBoxListFediverse(int $id, array $boxlist)
604{
605 foreach ($boxlist as $box) {
606 if ($box->boxcode === "lastfediverseinfos") {
607 return true;
608 }
609 }
610 return false;
611}
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:47
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
Class to manage generation of HTML components Only common components must be here.
static listBoxes($dbs, $mode, $zone, $user=null, $excludelist=array(), $includehidden=1)
Return array of boxes qualified for area and user.
Class to manage Social network posts.
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
_isInBoxListFediverse(int $id, array $boxlist)
Check if the given fediverse feed if inside the list of boxes/widgets.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.