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';
51$langs->loadLangs(array(
'admin',
'users',
'dict'));
53$action =
GETPOST(
'action',
'aZ09');
64$oauthservices = array();
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);
73 $name = $langs->trans(
"NoName");
75 $provider = preg_replace(
'/-.*$/',
'', $key);
76 $provider = ucfirst(strtolower($provider));
78 $oauthservices[$key] = $name.
" (".$provider.
")";
86if ($action ==
'add') {
89 if (empty(
GETPOST(
'socialnetwork_name')) || empty(
GETPOST(
'socialnetwork_url'))) {
93 $socialNetworkName =
GETPOST(
'socialnetwork_name',
'alpha');
94 $socialNetworkUrl =
GETPOST(
'socialnetwork_url',
'alpha');
95 if (GETPOSTISSET(
"OAUTH_SERVICE_SOCIAL_NETWORK")) {
100 $paramNames =
GETPOST(
'param_name',
'array');
101 $paramValues =
GETPOST(
'param_value',
'array');
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];
114 $socialNetworkData = array(
115 'title' => $socialNetworkName,
116 'url' => $socialNetworkUrl
119 $socialNetworkData = array_merge($socialNetworkData, $additionalParams);
121 $boxlabel =
'(SocialNetwoksInformations)';
123 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"boxes_def (file, note)";
124 $sql .=
" VALUES ('box_fediverse.php', '".$db->escape($socialNetworkName).
"')";
126 if (!
$db->query($sql)) {
130 $jsonData = json_encode($socialNetworkData);
140 header(
"Location: ".$_SERVER[
"PHP_SELF"]);
148if ($action ==
'confirm_delete' &&
GETPOST(
'confirm') ==
'yes') {
150 $key =
GETPOST(
'key',
'alpha');
152 $sqlgetName =
"SELECT note FROM ".MAIN_DB_PREFIX.
"boxes_def WHERE rowid=".((int) $key);
154 $resqName =
$db->query($sqlgetName);
156 $objName =
$db->fetch_object($resqName);
157 $name = $objName->note;
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);
167 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"boxes_def";
168 $sql .=
" WHERE rowid = ".((int) $key);
169 $resql2 =
$db->query($sql);
171 if (!$resql1 || !$resql2) {
179 header(
"Location: ".$_SERVER[
"PHP_SELF"]);
188if ($action ==
'updatesocialnetwork') {
191 $name =
GETPOST(
'socialnetwork_name');
192 $url =
GETPOST(
'socialnetwork_url');
193 $paramsKey =
GETPOST(
'paramsKey',
'array');
194 $paramsVal =
GETPOST(
'paramsVal',
'array');
198 $socialNetworkData = json_decode($result,
true);
200 foreach ($paramsKey as $index => $key) {
201 if (empty($key) || empty($paramsVal[$index])) {
206 foreach ($socialNetworkData as $key => $value) {
207 if ($key !=
'title' && $key !=
'url') {
208 unset($socialNetworkData[$key]);
213 $mergedParams = array();
214 foreach ($paramsKey as $index => $key) {
215 if (isset($paramsVal[$index])) {
216 $mergedParams[$key] = $paramsVal[$index];
221 foreach ($mergedParams as $newKey => $newValue) {
222 if (!isset($socialNetworkData[$newKey]) || $socialNetworkData[$newKey] !== $newValue) {
223 $socialNetworkData[$newKey] = $newValue;
227 $newData = json_encode($socialNetworkData);
231 header(
"Location: ".$_SERVER[
"PHP_SELF"]);
239 header(
"Location: ".$_SERVER[
"PHP_SELF"].
'?action=editsocialnetwork&token='.newToken().
'&key='.
$id);
244if ($action ==
'editsocialnetwork' &&
GETPOST(
'confirm') ==
'yes') {
245 $paramKey =
GETPOST(
'paramkey',
'alpha');
246 $key =
GETPOST(
'key',
'alpha');
251 $socialNetworkData = json_decode($result,
true);
253 unset($socialNetworkData[$paramKey]);
254 $newData = json_encode($socialNetworkData);
259 header(
"Location: ".$_SERVER[
"PHP_SELF"].
'?action=editsocialnetwork&token='.newToken().
'&key='.urlencode($key));
275llxHeader(
'', $langs->trans(
"FediverseSetup"),
'',
'', 0, 0,
'',
'',
'',
'mod-admin page-dict');
277$head = socialnetwork_prepare_head();
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>';
281print
dol_get_fiche_head($head,
'divers', $langs->trans(
'MenuDict'), -1,
'user', 0, $linkback,
'', 0,
'', 0);
283$title = $langs->trans(
"ConfigImportSocialNetwork");
285print_barre_liste($title, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', -1,
'',
'tools', 0,
'',
'', -1, 0, 0, 0,
'');
288print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
289print
'<input type="hidden" name="token" value="'.newToken().
'">';
291print
'<div class="div-table-responsive-no-min">';
292print
'<table class="noborder centpercent">';
294print
'<tr class="liste_titre">';
295print
'<td colspan="2">'.$langs->trans(
"NewSocialNetwork").
'</td>';
296print
'<td>'.$langs->trans(
"Example").
'</td>';
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>';
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>';
310$vartosmtpstype =
'MAIN_MAIL_SMTPS_AUTH_TYPE_EMAILING';
313$(document).ready(function() {
314 function toggleOAuthServiceDisplay() {
315 if ($("#radio_oauth").is(":checked")) {
316 $("#oauth_service_div").show();
318 $("#oauth_service_div").hide();
322 toggleOAuthServiceDisplay();
324 $("input[name=\"'.$vartosmtpstype.
'\"]").change(function() {
325 toggleOAuthServiceDisplay();
331print
'<tr><td>'.$langs->trans(
"MAIN_MAIL_SMTPS_AUTH_TYPE").
'</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>';
336 print
' <a href="'.DOL_URL_ROOT.
'/admin/modules.php?search_keyword=oauth">'.$langs->trans(
"EnableModuleX",
"OAuth").
'</a>';
338 print
' <a href="'.DOL_URL_ROOT.
'/admin/oauth.php">'.$langs->trans(
"SetupModuleX",
" OAuth").
'</a>';
343print
'<tr class="oddeven" id="oauth_service_div" style="display: none;">';
344print
'<td>'.$langs->trans(
"MAIN_MAIL_SMTPS_OAUTH_SERVICE").
'</td>';
347$oauthservicesStringKeys = [];
348foreach ($oauthservices as $key => $value) {
350 $oauthservicesStringKeys[$key] = $value;
354if (!
isModEnabled(
'multicompany') || ($user->admin && !$user->entity)) {
355 print $form->selectarray(
'OAUTH_SERVICE_SOCIAL_NETWORK', $oauthservicesStringKeys, (
string)
getDolGlobalString(
"OAUTH_SERVICE_SOCIAL_NETWORK"));
358 $text = isset($oauthservicesStringKeys[$selectedKey]) ? $oauthservicesStringKeys[$selectedKey][
'label'] :
'';
360 $text = $langs->trans(
"Undefined");
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.
'">';
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>';
375print
'<tr class="oddeven">';
376print
'<td colspan="2">';
377print
'<div id="additionalParams"></div>';
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
395 $("#oauth_service_div").hide(); // Hide the OAuth selector
399 function toggleAddParamRow() {
400 if ($("#radio_oauth").is(":checked")) {
401 $("#add_param_row").hide(); // Hide the entire line
403 $("#add_param_row").show(); // Show the entire line
407 toggleOAuthServiceDisplay();
410 $("input[name=\"'.$vartosmtpstype.
'\"]").change(function() {
411 toggleOAuthServiceDisplay();
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);
426print
'<span class="opacitymedium">'.$langs->trans(
'SocialNetworksNote').
'</span>';
428print
'<a href="'.DOL_URL_ROOT.
'/admin/boxes.php?backtopage='.urlencode($_SERVER[
"PHP_SELF"]).
'">'.$langs->trans(
'JumpToBoxes').
'</a>';
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')),
445if ($action ==
'editsocialnetwork' &&
GETPOST(
'paramkey',
'alpha')) {
446 $paramKey =
GETPOST(
'paramkey',
'alpha');
447 $name =
GETPOST(
'name',
'alpha');
449 $formconfirm = $form->formconfirm(
450 $_SERVER[
"PHP_SELF"].
'?key='.urlencode(
GETPOST(
'key',
'alpha')).
'¶mkey='.urlencode($paramKey).
'&name='.urlencode($name),
451 $langs->trans(
'Delete'),
452 $langs->trans(
'ConfirmDeleteParamOfSocialNetwork', $paramKey),
460$sql =
"SELECT rowid, file, note FROM ".MAIN_DB_PREFIX.
"boxes_def";
461$sql .=
" WHERE file = 'box_fediverse.php'";
462$sql .=
" ORDER BY note";
464dol_syslog(
"select socialnetworks boxes", LOG_DEBUG);
465$resql =
$db->query($sql);
468 $num =
$db->num_rows($resql);
471 $obj =
$db->fetch_object($resql);
475 $socialNetworkData = json_decode($jsonData,
true);
477 $socialNetworkTitle = $socialNetworkData[
'title'];
478 $socialNetworkUrl = $socialNetworkData[
'url'];
479 $socialNetworkId = $obj->rowid;
482 $path_fediverse = DOL_DATA_ROOT.
'/fediverse/temp/'.$socialNetworkTitle;
486 foreach ($socialNetworkData as $key => $value) {
487 if ($key !==
'title' && $key !==
'url') {
488 $authParams[$key] = $value;
492 $result = $fediverseparser->fetchPosts($socialNetworkUrl, 5, 300, $path_fediverse, $authParams);
495 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">'.
"\n";
496 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
498 print
'<table class="noborder centpercent">'.
"\n";
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.
'">';
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>';
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>';
519 print
'<tr class="oddeven">';
520 print
"<td>".$langs->trans(
"Status").
"</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>';
525 print
'<span class="error">'.$langs->trans(
"Offline");
526 $langs->load(
"errors");
527 if ($fediverseparser->error) {
528 print
' - '.$langs->trans($fediverseparser->error);
538 print
'<tr class="oddeven">';
539 print
'<td>'.$langs->trans(
'WidgetAvailable').
'</td>';
540 print
'<td>'.yn($active);
541 print
' - <a href="'.DOL_URL_ROOT.
'/admin/boxes.php?backtopage='.urlencode($_SERVER[
"PHP_SELF"]).
'">';
542 print $langs->trans(
"JumpToBoxes");
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).
'" />';
555 print
'<td><input type="text" class="flat minwidth300" name="paramsVal[]" value="'.dol_escape_htmltag($val).
'" />';
557 print
'<button type="button" class="delete-param-btn" data-paramkey="'.htmlspecialchars($k).
'">'.
img_delete().
'</button>';
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>';
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().
'¶mkey=\' + encodeURIComponent(paramKey) + \'&key=\' + encodeURIComponent(socialNetworkId) + \'&name=\' + encodeURIComponent(socialNetworkName);
581 print
'</table>'.
"\n";
605 foreach ($boxlist as $box) {
606 if ($box->boxcode ===
"lastfediverseinfos") {
$id
Support class for third parties, contacts, members, users or resources.
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.
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.
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.
_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.