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';
45$langs->loadLangs(array(
'admin',
'users',
'dict'));
47$action =
GETPOST(
'action',
'aZ09');
53if (!isModEnabled(
'socialnetworks')) {
62if ($action ==
'add') {
65 if (empty(
GETPOST(
'socialnetwork_name')) || empty(
GETPOST(
'socialnetwork_url'))) {
69 $socialNetworkName =
GETPOST(
'socialnetwork_name',
'alpha');
70 $socialNetworkUrl =
GETPOST(
'socialnetwork_url',
'alpha');
73 $paramNames =
GETPOST(
'param_name',
'array');
74 $paramValues =
GETPOST(
'param_value',
'array');
76 $additionalParams = [];
77 if (!empty($paramNames) && is_array($paramNames)) {
78 foreach ($paramNames as $index => $paramName) {
79 if (!empty($paramName) && isset($paramValues[$index])) {
80 $additionalParams[$paramName] = $paramValues[$index];
87 $socialNetworkData = array(
88 'title' => $socialNetworkName,
89 'url' => $socialNetworkUrl
92 $socialNetworkData = array_merge($socialNetworkData, $additionalParams);
94 $boxlabel =
'(SocialNetwoksInformations)';
96 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"boxes_def (file, note)";
97 $sql .=
" VALUES ('box_fediverse.php', '".$db->escape($socialNetworkName).
"')";
99 if (!$db->query($sql)) {
103 $jsonData = json_encode($socialNetworkData);
104 $result =
dolibarr_set_const($db,
"SOCIAL_NETWORKS_DATA_".$socialNetworkName, $jsonData,
'chaine', 0,
'', $conf->entity);
109 header(
"Location: ".$_SERVER[
"PHP_SELF"]);
117if ($action ==
'confirm_delete' &&
GETPOST(
'confirm') ==
'yes') {
119 $key =
GETPOST(
'key',
'alpha');
121 $sqlgetName =
"SELECT note FROM ".MAIN_DB_PREFIX.
"boxes_def WHERE rowid=".((int) $key);
123 $resqName = $db->query($sqlgetName);
125 $objName = $db->fetch_object($resqName);
126 $name = $objName->note;
131 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"boxes";
132 $sql .=
" WHERE entity = ".$conf->entity;
133 $sql .=
" AND box_id = ".((int) $key);
134 $resql1 = $db->query($sql);
136 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"boxes_def";
137 $sql .=
" WHERE rowid = ".((int) $key);
138 $resql2 = $db->query($sql);
140 if (!$resql1 || !$resql2) {
148 header(
"Location: ".$_SERVER[
"PHP_SELF"]);
157if ($action ==
'updatesocialnetwork') {
160 $name =
GETPOST(
'socialnetwork_name');
161 $url =
GETPOST(
'socialnetwork_url');
162 $paramsKey =
GETPOST(
'paramsKey',
'array');
163 $paramsVal =
GETPOST(
'paramsVal',
'array');
166 $socialNetworkData = json_decode($result,
true);
168 foreach ($paramsKey as $index => $key) {
169 if (empty($key) || empty($paramsVal[$index])) {
174 foreach ($socialNetworkData as $key => $value) {
175 if ($key !=
'title' && $key !=
'url') {
176 unset($socialNetworkData[$key]);
181 $mergedParams = array();
182 foreach ($paramsKey as $index => $key) {
183 if (isset($paramsVal[$index])) {
184 $mergedParams[$key] = $paramsVal[$index];
189 foreach ($mergedParams as $newKey => $newValue) {
190 if (!isset($socialNetworkData[$newKey]) || $socialNetworkData[$newKey] !== $newValue) {
191 $socialNetworkData[$newKey] = $newValue;
195 $newData = json_encode($socialNetworkData);
196 $result =
dolibarr_set_const($db,
"SOCIAL_NETWORKS_DATA_".$name, $newData,
'chaine', 0,
'', $conf->entity);
199 header(
"Location: ".$_SERVER[
"PHP_SELF"]);
207 header(
"Location: ".$_SERVER[
"PHP_SELF"].
'?action=editsocialnetwork&token='.
newToken().
'&key='.
$id);
218$form =
new Form($db);
220llxHeader(
'', $langs->trans(
"FediverseSetup"),
'',
'', 0, 0,
'',
'',
'',
'mod-admin page-dict');
222$head = socialnetwork_prepare_head();
224$linkback =
'<a href="'.DOL_URL_ROOT.
'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToModuleList").
'</a>';
225print
dol_get_fiche_head($head,
'divers', $langs->trans(
'MenuDict'), -1,
'user', 0, $linkback,
'', 0,
'', 0);
227$title = $langs->trans(
"ConfigImportSocialNetwork");
229print_barre_liste($title,
'', $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', -1,
'',
'tools', 0,
'',
'', -1, 0, 0, 0,
'');
232print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
233print
'<input type="hidden" name="token" value="'.newToken().
'">';
235print
'<div class="div-table-responsive-no-min">';
236print
'<table class="noborder centpercent">';
238print
'<tr class="liste_titre">';
239print
'<td colspan="2">'.$langs->trans(
"NewSocialNetwork").
'</td>';
240print
'<td>'.$langs->trans(
"Example").
'</td>';
243print
'<tr class="oddeven">';
244print
'<td>'.$langs->trans(
"Title").
'</td>';
245print
'<td><input type="text" class="flat minwidth300" name="socialnetwork_name"></td>';
246print
'<td>Mastodon</td>';
249print
'<tr class="oddeven">';
250print
'<td>'.$langs->trans(
'SocialNetworkUrl').
'</td>';
251print
'<td><input type="text" class="flat minwidth300" name="socialnetwork_url"></td>';
252print
'<td>https://mastodon.social/api/v1/accounts/id_user</td>';
255print
'<tr class="oddeven"><td>';
256print $form->textwithpicto($langs->trans(
"Others"), $langs->trans(
"AddMoreParams"));
257print
'</td><td><button type="button" id="addParamButton">'.img_picto($langs->trans(
"AddMoreParams"),
'add',
'pictofixedwidth').
'</button></td>';
258print
'<td>Token : ****<br>Cookie : ****</td>';
261print
'<tr class="oddeven">';
262print
'<td colspan="2">';
263print
'<div id="additionalParams"></div>';
273print $form->buttonsSaveCancel(
"Add",
'');
274print
'<input type="hidden" name="action" value="add">';
275print
'<script type="text/javascript">
276 document.getElementById("addParamButton").addEventListener("click", function() {
277 var container = document.getElementById("additionalParams");
278 var index = container.children.length;
279 var div = document.createElement("div");
280 div.className = "pair-group";
281 div.innerHTML = "<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\' />";
282 container.appendChild(div);
288print
'<span class="opacitymedium">'.$langs->trans(
'SocialNetworksNote').
'</span>';
290print
'<a href="'.DOL_URL_ROOT.
'/admin/boxes.php?backtopage='.urlencode($_SERVER[
"PHP_SELF"]).
'">'.$langs->trans(
'JumpToBoxes').
'</a>';
294if ($action ==
'deletesocialnetwork') {
295 $formconfirm = $form->formconfirm(
296 $_SERVER[
"PHP_SELF"].
'?key='.urlencode(
GETPOST(
'key',
'alpha')),
297 $langs->trans(
'Delete'),
298 $langs->trans(
'ConfirmDeleteSocialNetwork',
GETPOST(
'key',
'alpha')),
306$sql =
"SELECT rowid, file, note FROM ".MAIN_DB_PREFIX.
"boxes_def";
307$sql .=
" WHERE file = 'box_fediverse.php'";
308$sql .=
" ORDER BY note";
310dol_syslog(
"select socialnetworks boxes", LOG_DEBUG);
311$resql = $db->query($sql);
314 $num = $db->num_rows($resql);
317 $obj = $db->fetch_object($resql);
321 $socialNetworkData = json_decode($jsonData,
true);
323 $socialNetworkTitle = $socialNetworkData[
'title'];
324 $socialNetworkUrl = $socialNetworkData[
'url'];
325 $socialNetworkId = $obj->rowid;
328 $path_fediverse = DOL_DATA_ROOT.
'/fediverse/temp/'.$socialNetworkTitle;
332 foreach ($socialNetworkData as $key => $value) {
333 if ($key !==
'title' && $key !==
'url') {
334 $authParams[$key] = $value;
338 $result = $fediverseparser->fetchPosts($socialNetworkUrl, 5, 300, $path_fediverse, $authParams);
341 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">'.
"\n";
342 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
344 print
'<table class="noborder centpercent">'.
"\n";
346 print
'<tr class="liste_titre">';
347 print
"<td>".$langs->trans(
"SocialNetworks").
" ".($i+1).
"</td>";
348 print
'<td class="right">';
349 print
'<a class="viewfielda reposition marginleftonly marginrighttonly showInputBtn" href="'.$_SERVER[
"PHP_SELF"].
'?action=editsocialnetwork&token='.
newToken().
'&key='.urlencode($socialNetworkId).
'">'.
img_edit().
'</a>';
350 print
'<a class="deletefielda reposition marginleftonly right" href="'.$_SERVER[
"PHP_SELF"].
'?action=deletesocialnetwork&token='.
newToken().
'&key='.urlencode($socialNetworkId).
'">'.
img_delete().
'</a>';
351 print
'<input type="hidden" name="id" value="'.$socialNetworkId.
'">';
355 print
'<tr class="oddeven">';
356 print
'<td>'.$langs->trans(
"Title").
"</td>";
357 print
'<td><input type="text" class="flat minwidth300" name="socialnetwork_name" value="'.dol_escape_htmltag($socialNetworkTitle).
'" '.($action !=
"editsocialnetwork" ?
'disabled' :
'').
'></td>';
360 print
'<tr class="oddeven">';
361 print
"<td>".$langs->trans(
"URL").
"</td>";
362 print
'<td><input type="text" class="flat minwidth300" name="socialnetwork_url" value="'.dol_escape_htmltag($socialNetworkUrl).
'" '.($action !=
"editsocialnetwork" ?
'disabled' :
'').
'></td>';
365 print
'<tr class="oddeven">';
366 print
"<td>".$langs->trans(
"Status").
"</td>";
368 if ($result > 0 && empty($fediverseparser->error)) {
369 print
'<span class="ok">'.img_picto($langs->trans(
"Online"),
'tick',
'class="pictofixedwidth"').$langs->trans(
"Online").
'</div>';
371 print
'<span class="error">'.$langs->trans(
"Offline");
372 $langs->load(
"errors");
373 if ($fediverseparser->error) {
374 print
' - '.$langs->trans($fediverseparser->error);
382 $active = _isInBoxListFediverse((
int) $socialNetworkId, $boxlist) ?
'yes' :
'no';
384 print
'<tr class="oddeven">';
385 print
'<td>'.$langs->trans(
'WidgetAvailable').
'</td>';
386 print
'<td>'.yn($active);
387 print
' - <a href="'.DOL_URL_ROOT.
'/admin/boxes.php?backtopage='.urlencode($_SERVER[
"PHP_SELF"]).
'">';
388 print $langs->trans(
"JumpToBoxes");
393 if ($action ==
'editsocialnetwork' && $socialNetworkId ==
GETPOST(
'key')) {
394 foreach ($socialNetworkData as $k => $val) {
395 if ($k !=
'title' && $k !=
'url') {
396 print
'<tr class="oddeven">';
397 print
'<td><input type="text" class="flat minwidth200" name="paramsKey[]" value="'.dol_escape_htmltag($k).
'"</td>';
398 if ($k ==
'password') {
399 print
'<td><input type="password" class="flat minwidth300" name="paramsVal[]" value="'.dol_escape_htmltag($val).
'" />';
401 print
'<td><input type="text" class="flat minwidth300" name="paramsVal[]" value="'.dol_escape_htmltag($val).
'" />';
408 print
'<tr class="oddeven">';
409 print
'<td><input type="hidden" name="action" value="updatesocialnetwork" /></td>';
410 print
'<td><input class="button " type="submit" name="update" value="'.$langs->trans(
'Modify').
'" /></td>';
414 print
'</table>'.
"\n";
436function _isInBoxListFediverse(
int $id, array $boxlist)
438 foreach ($boxlist as $box) {
439 if ($box->boxcode ===
"lastfediverseinfos") {
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.
dolibarr_get_const($db, $name, $entity=1)
Get the value of a setup constant from database.
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.
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)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
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.
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.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.