dolibarr 20.0.0
agenda_extsites.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2008-2015 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2011-2015 Juanjo Menent <jmenent@2byte.es>
4 * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
5 * Copyright (C) 2016 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
6 * Copyright (C) 2021 Frédéric France <frederic.france@netlogic.fr>
7 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 */
22
29// Load Dolibarr environment
30require '../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
32require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
33require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
34require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
36require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
37
38if (!$user->admin) {
40}
41
42// Load translation files required by the page
43$langs->loadLangs(array('agenda', 'admin', 'other'));
44
45$def = array();
46$action = GETPOST('action', 'alpha');
47
48if (!getDolGlobalString('AGENDA_EXT_NB')) {
49 $conf->global->AGENDA_EXT_NB = 5;
50}
51$MAXAGENDA = getDolGlobalString('AGENDA_EXT_NB');
52
53// List of available colors
54$colorlist = array('BECEDD', 'DDBECE', 'BFDDBE', 'F598B4', 'F68654', 'CBF654', 'A4A4A5');
55
56
57/*
58 * Actions
59 */
60
61$error = 0;
62$errors = array();
63
64if (preg_match('/set_(.*)/', $action, $reg)) {
65 $db->begin();
66
67 $code = $reg[1];
68 $value = (GETPOST($code) ? GETPOST($code) : 1);
69
70 $res = dolibarr_set_const($db, $code, $value, 'chaine', 0, '', $conf->entity);
71 if (!($res > 0)) {
72 $error++;
73 $errors[] = $db->lasterror();
74 }
75
76 if ($error) {
77 $db->rollback();
78 setEventMessages('', $errors, 'errors');
79 } else {
80 $db->commit();
81 setEventMessage($langs->trans('SetupSaved'));
82 header('Location: ' . $_SERVER["PHP_SELF"]);
83 exit();
84 }
85} elseif (preg_match('/del_(.*)/', $action, $reg)) {
86 $db->begin();
87
88 $code = $reg[1];
89
90 $res = dolibarr_del_const($db, $code, $conf->entity);
91 if (!($res > 0)) {
92 $error++;
93 $errors[] = $db->lasterror();
94 }
95
96 if ($error) {
97 $db->rollback();
98 setEventMessages('', $errors, 'errors');
99 } else {
100 $db->commit();
101 setEventMessage($langs->trans('SetupSaved'));
102 header('Location: ' . $_SERVER["PHP_SELF"]);
103 exit();
104 }
105} elseif ($action == 'save') {
106 $db->begin();
107
108 $disableext = GETPOST('AGENDA_DISABLE_EXT', 'alpha');
109 $res = dolibarr_set_const($db, 'AGENDA_DISABLE_EXT', $disableext, 'chaine', 0, '', $conf->entity);
110
111 $i = 1;
112 $errorsaved = 0;
113
114 // Save agendas
115 while ($i <= $MAXAGENDA) {
116 $name = trim(GETPOST('AGENDA_EXT_NAME'.$i, 'alpha'));
117 $src = trim(GETPOST('AGENDA_EXT_SRC'.$i, 'alpha'));
118 $offsettz = trim(GETPOST('AGENDA_EXT_OFFSETTZ'.$i, 'alpha'));
119 $color = trim(GETPOST('AGENDA_EXT_COLOR'.$i, 'alpha'));
120 if ($color == '-1') {
121 $color = '';
122 }
123 $enabled = trim(GETPOST('AGENDA_EXT_ENABLED'.$i, 'alpha'));
124
125 if (!empty($src) && !dol_is_url($src)) {
126 setEventMessages($langs->trans("ErrorParamMustBeAnUrl"), null, 'errors');
127 $error++;
128 $errorsaved++;
129 break;
130 }
131
132 //print '-name='.$name.'-color='.$color;
133 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
134 $res = dolibarr_set_const($db, 'AGENDA_EXT_NAME'.$i, $name, 'chaine', 0, '', $conf->entity);
135 if (!($res > 0)) {
136 $error++;
137 }
138 $res = dolibarr_set_const($db, 'AGENDA_EXT_SRC'.$i, $src, 'chaine', 0, '', $conf->entity);
139 if (!($res > 0)) {
140 $error++;
141 }
142 $res = dolibarr_set_const($db, 'AGENDA_EXT_OFFSETTZ'.$i, $offsettz, 'chaine', 0, '', $conf->entity);
143 if (!($res > 0)) {
144 $error++;
145 }
146 $res = dolibarr_set_const($db, 'AGENDA_EXT_COLOR'.$i, $color, 'chaine', 0, '', $conf->entity);
147 if (!($res > 0)) {
148 $error++;
149 }
150 $res = dolibarr_set_const($db, 'AGENDA_EXT_ENABLED'.$i, $enabled, 'chaine', 0, '', $conf->entity);
151 if (!($res > 0)) {
152 $error++;
153 }
154 $i++;
155 }
156
157 // Save nb of agenda
158 if (!$error) {
159 $res = dolibarr_set_const($db, 'AGENDA_EXT_NB', GETPOSTINT('AGENDA_EXT_NB'), 'chaine', 0, '', $conf->entity);
160 if (!($res > 0)) {
161 $error++;
162 }
163 if (!getDolGlobalString('AGENDA_EXT_NB')) {
164 $conf->global->AGENDA_EXT_NB = 5;
165 }
166 $MAXAGENDA = getDolGlobalInt('AGENDA_EXT_NB', 5);
167 }
168
169 if (!$error) {
170 $db->commit();
171 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
172 } else {
173 $db->rollback();
174 if (empty($errorsaved)) {
175 setEventMessages($langs->trans("Error"), null, 'errors');
176 }
177 }
178}
179
180/*
181 * View
182 */
183
184$form = new Form($db);
185$formadmin = new FormAdmin($db);
186$formother = new FormOther($db);
187
188$arrayofjs = array();
189$arrayofcss = array();
190
191$wikihelp = 'EN:Module_Agenda_En|FR:Module_Agenda|ES:Módulo_Agenda|DE:Modul_Terminplanung';
192llxHeader('', $langs->trans("AgendaSetup"), $wikihelp, '', 0, 0, $arrayofjs, $arrayofcss, '', 'mod-admin page-agenda-extsites');
193
194$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
195print load_fiche_titre($langs->trans("AgendaSetup"), $linkback, 'title_setup');
196
197print '<form name="extsitesconfig" action="'.$_SERVER["PHP_SELF"].'" method="post">';
198print '<input type="hidden" name="token" value="'.newToken().'">';
199print '<input type="hidden" name="action" value="save">';
200
201$head = agenda_prepare_head();
202
203print dol_get_fiche_head($head, 'extsites', $langs->trans("Agenda"), -1, 'action');
204
205print '<span class="opacitymedium">'.$langs->trans("AgendaExtSitesDesc")."</span><br>\n";
206print "<br>\n";
207
208
209$selectedvalue = getDolGlobalInt('AGENDA_DISABLE_EXT');
210if ($selectedvalue == 1) {
211 $selectedvalue = 0;
212} else {
213 $selectedvalue = 1;
214}
215
216print "<table class=\"noborder\" width=\"100%\">";
217
218print "<tr class=\"liste_titre\">";
219print '<td>'.$langs->trans("Parameter")."</td>";
220print '<td class="center">'.$langs->trans("Value")."</td>";
221print "</tr>";
222
223// Show external agenda
224
225print '<tr class="oddeven">';
226print "<td>".$langs->trans("ExtSitesEnableThisTool")."</td>";
227print '<td class="center">';
228if ($conf->use_javascript_ajax) {
229 print ajax_constantonoff('AGENDA_DISABLE_EXT', array('enabled' => array(0 => '.hideifnotset')), null, 1);
230} else {
231 if (!getDolGlobalString('AGENDA_DISABLE_EXT')) {
232 print '<a href="'.$_SERVER['PHP_SELF'].'?save=1&AGENDA_DISABLE_EXT=1">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
233 } else {
234 print '<a href="'.$_SERVER['PHP_SELF'].'?save=1&AGENDA_DISABLE_EXT=0">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
235 }
236}
237print "</td>";
238print "</tr>";
239
240// Nb of agenda
241
242print '<tr class="oddeven">';
243print "<td>".$langs->trans("ExtSitesNbOfAgenda")."</td>";
244print '<td class="center">';
245print '<input class="flat hideifnotset width50 center" type="text" id="AGENDA_EXT_NB" name="AGENDA_EXT_NB" value="' . getDolGlobalString('AGENDA_EXT_NB').'">';
246print "</td>";
247print "</tr>";
248
249print "</table>";
250print "<br>";
251
252print '<div class="div-table-responsive">';
253print '<table class="noborder centpercent">'."\n";
254
255print '<tr class="liste_titre">';
256print "<td>".$langs->trans("Parameter")."</td>";
257print "<td>".$langs->trans("Name")."</td>";
258print "<td>".$langs->trans("ExtSiteUrlAgenda")." (".$langs->trans("Example").': http://yoursite/agenda/agenda.ics)</td>';
259print "<td>".$form->textwithpicto($langs->trans("FixTZ"), $langs->trans("FillFixTZOnlyIfRequired"), 1).'</td>';
260print '<td class="right">'.$langs->trans("Color").'</td>';
261print '<td class="right">'.$langs->trans("ActiveByDefault").'</td>';
262print "</tr>";
263
264$i = 1;
265while ($i <= $MAXAGENDA) {
266 $key = $i;
267 $name = 'AGENDA_EXT_NAME' . $key;
268 $src = 'AGENDA_EXT_SRC' . $key;
269 $offsettz = 'AGENDA_EXT_OFFSETTZ' . $key;
270 $color = 'AGENDA_EXT_COLOR' . $key;
271 $enabled = 'AGENDA_EXT_ENABLED' . $key;
272 $default = 'AGENDA_EXT_ACTIVEBYDEFAULT' . $key;
273
274 print '<tr class="oddeven">';
275 // Nb @phan-suppress-next-line PhanPluginSuspiciousParamPosition
276 print '<td width="180" class="nowrap">' . $langs->trans("AgendaExtNb", $key) . "</td>";
277 // Name
278 print '<td><input type="text" class="flat hideifnotset" name="AGENDA_EXT_NAME' . $key . '" value="' . (GETPOST('AGENDA_EXT_NAME' . $key) ? GETPOST('AGENDA_EXT_NAME' . $key, 'alpha') : getDolGlobalString($name)) . '" size="28"></td>';
279 // URL
280 print '<td><input type="url" class="flat hideifnotset" name="AGENDA_EXT_SRC' . $key . '" value="' . (GETPOST('AGENDA_EXT_SRC' . $key) ? GETPOST('AGENDA_EXT_SRC' . $key, 'alpha') : getDolGlobalString($src)) . '" size="60"></td>';
281 // Offset TZ
282 print '<td><input type="text" class="flat hideifnotset" name="AGENDA_EXT_OFFSETTZ' . $key . '" value="' . (GETPOST('AGENDA_EXT_OFFSETTZ' . $key) ? GETPOST('AGENDA_EXT_OFFSETTZ' . $key) : getDolGlobalString($offsettz)) . '" size="2"></td>';
283 // Color (Possible colors are limited by Google)
284 print '<td class="nowraponall right">';
285 print $formother->selectColor((GETPOST("AGENDA_EXT_COLOR" . $key) ? GETPOST("AGENDA_EXT_COLOR" . $key) : getDolGlobalString($color)), "AGENDA_EXT_COLOR" . $key, 'extsitesconfig', 1, '', 'hideifnotset');
286 print '</td>';
287 // Calendar active by default
288 print '<td class="nowrap right">';
289 if (!empty($conf->use_javascript_ajax)) {
290 print ajax_constantonoff('AGENDA_EXT_ACTIVEBYDEFAULT' . $key);
291 } else {
292 // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
293 if (getDolGlobalString($default)) {
294 print '<a href="' . $_SERVER['PHP_SELF'] . '?action=del_AGENDA_EXT_ACTIVEBYDEFAULT' . $key . '&token='.newToken().'">' . img_picto($langs->trans("Disabled"), 'off') . '</a>';
295 } else {
296 print '<a href="' . $_SERVER['PHP_SELF'] . '?action=set_AGENDA_EXT_ACTIVEBYDEFAULT' . $key . '&token='.newToken().'">' . img_picto($langs->trans("Enabled"), 'on') . '</a>';
297 }
298 }
299 print '</td>';
300 print "</tr>";
301 $i++;
302}
303
304print '</table>';
305print '</div>';
306
307print dol_get_fiche_end();
308
309print '<div class="center">';
310print '<input type="submit" id="save" name="save" class="button hideifnotset button-save" value="'.$langs->trans("Save").'">';
311print '</div>';
312
313print "</form>\n";
314
315// End of page
316llxFooter();
317$db->close();
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.
agenda_prepare_head()
Prepare array with list of tabs.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:55
llxFooter()
Empty footer.
Definition wrapper.php:69
Class to generate html code for admin pages.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation de composants html autre Only common components are here.
dol_is_url($uri)
Return if path is an URI (the name of the method is misleading).
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0)
Set event message in dol_events session object.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.