dolibarr 21.0.0-alpha
agenda_extsites.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2008-2016 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2011-2014 Juanjo Menent <jmenent@2byte.es>
4 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
26// Load Dolibarr environment
27require '../main.inc.php';
28require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
29require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
30require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
31require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
32require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
33
34require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
35require_once DOL_DOCUMENT_ROOT.'/core/lib/usergroups.lib.php';
36require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
37
38// Load translation files required by page
39$langs->loadLangs(array('agenda', 'admin', 'other'));
40
41$def = array();
42$actiontest = GETPOST('test', 'alpha');
43$actionsave = GETPOST('save', 'alpha');
44$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'useragenda'; // To manage different context of search
45
46if (!getDolGlobalString('AGENDA_EXT_NB')) {
47 $conf->global->AGENDA_EXT_NB = 5;
48}
49$MAXAGENDA = getDolGlobalString('AGENDA_EXT_NB');
50
51// List of available colors
52$colorlist = array('BECEDD', 'DDBECE', 'BFDDBE', 'F598B4', 'F68654', 'CBF654', 'A4A4A5');
53
54// Security check
55$id = GETPOSTINT('id');
56
57if (!isset($id) || empty($id)) {
59}
60
61$object = new User($db);
62$object->fetch($id, '', '', 1);
63$object->loadRights();
64
65// Security check
66$socid = 0;
67if ($user->socid > 0) {
68 $socid = $user->socid;
69}
70$feature2 = (($socid && $user->hasRight('user', 'self', 'creer')) ? '' : 'user');
71
72// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
73$hookmanager->initHooks(array('usercard', 'useragenda', 'globalcard'));
74
75$result = restrictedArea($user, 'user', $id, 'user&user', $feature2);
76
77// If user is not user that read and no permission to read other users, we stop
78if (($object->id != $user->id) && (!$user->hasRight('user', 'user', 'lire'))) {
80}
81
82/*
83 * Actions
84 */
85
86$parameters = array('id' => $socid);
87$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
88if ($reshook < 0) {
89 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
90}
91
92if (empty($reshook)) {
93 if ($actionsave) {
94 $db->begin();
95
96 $errorsaved = 0;
97 $error = 0;
98 $tabparam = array();
99
100 // Save agendas
101 $i = 1;
102 while ($i <= $MAXAGENDA) {
103 $name = trim(GETPOST('AGENDA_EXT_NAME_'.$id.'_'.$i, 'alpha'));
104 $src = trim(GETPOST('AGENDA_EXT_SRC_'.$id.'_'.$i, 'alpha'));
105 $offsettz = trim(GETPOST('AGENDA_EXT_OFFSETTZ_'.$id.'_'.$i, 'alpha'));
106 $color = trim(GETPOST('AGENDA_EXT_COLOR_'.$id.'_'.$i, 'alpha'));
107 if ($color == '-1') {
108 $color = '';
109 }
110 $enabled = trim(GETPOST('AGENDA_EXT_ENABLED_'.$id.'_'.$i, 'alpha'));
111
112 if (!empty($src) && !dol_is_url($src)) {
113 setEventMessages($langs->trans("ErrorParamMustBeAnUrl"), null, 'errors');
114 $error++;
115 $errorsaved++;
116 break;
117 }
118
119 $tabparam['AGENDA_EXT_NAME_'.$id.'_'.$i] = $name;
120 $tabparam['AGENDA_EXT_SRC_'.$id.'_'.$i] = $src;
121 $tabparam['AGENDA_EXT_OFFSETTZ_'.$id.'_'.$i] = $offsettz;
122 $tabparam['AGENDA_EXT_COLOR_'.$id.'_'.$i] = $color;
123 $tabparam['AGENDA_EXT_ENABLED_'.$id.'_'.$i] = $enabled;
124
125 $i++;
126 }
127
128 if (!$error) {
129 $result = dol_set_user_param($db, $conf, $object, $tabparam);
130 if (!($result > 0)) {
131 $error++;
132 }
133 }
134
135 if (!$error) {
136 $db->commit();
137 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
138 } else {
139 $db->rollback();
140 if (empty($errorsaved)) {
141 setEventMessages($langs->trans("Error"), null, 'errors');
142 }
143 }
144 }
145}
146
147/*
148 * View
149 */
150
151$form = new Form($db);
152$formadmin = new FormAdmin($db);
153$formother = new FormOther($db);
154
155$arrayofjs = array();
156$arrayofcss = array();
157
158$person_name = !empty($object->firstname) ? $object->lastname.", ".$object->firstname : $object->lastname;
159$title = $person_name." - ".$langs->trans('ExtSites');
160$help_url = '';
161
162llxHeader('', $title, $help_url, '', 0, 0, $arrayofjs, $arrayofcss, '', 'mod-user page-agenda_extsites');
163
164
165print '<form name="extsitesconfig" action="'.$_SERVER["PHP_SELF"].'" method="post">';
166print '<input type="hidden" name="id" value="'.$id.'">';
167print '<input type="hidden" name="token" value="'.newToken().'">';
168
169$head = user_prepare_head($object);
170
171print dol_get_fiche_head($head, 'extsites', $langs->trans("User"), -1, 'user');
172
173$linkback = '';
174
175if ($user->hasRight('user', 'user', 'lire') || $user->admin) {
176 $linkback = '<a href="'.DOL_URL_ROOT.'/user/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
177}
178
179$morehtmlref = '<a href="'.DOL_URL_ROOT.'/user/vcard.php?id='.$object->id.'&output=file&file='.urlencode(dol_sanitizeFileName($object->getFullName($langs).'.vcf')).'" class="refid" rel="noopener">';
180$morehtmlref .= img_picto($langs->trans("Download").' '.$langs->trans("VCard"), 'vcard.png', 'class="valignmiddle marginleftonly paddingrightonly"');
181$morehtmlref .= '</a>';
182
183$urltovirtualcard = '/user/virtualcard.php?id='.((int) $object->id);
184$morehtmlref .= dolButtonToOpenUrlInDialogPopup('publicvirtualcard', $langs->transnoentitiesnoconv("PublicVirtualCardUrl").' - '.$object->getFullName($langs), img_picto($langs->trans("PublicVirtualCardUrl"), 'card', 'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard, '', 'nohover');
185
186dol_banner_tab($object, 'id', $linkback, $user->hasRight('user', 'user', 'lire') || $user->admin, 'rowid', 'ref', $morehtmlref);
187
188print '<div class="fichecenter">';
189
190print '<div class="underbanner clearboth"></div>';
191print '<table class="border tableforfield centpercent">';
192
193// Login
194print '<tr><td id="anchorforperms" class="titlefield">'.$langs->trans("Login").'</td>';
195if (!empty($object->ldap_sid) && $object->statut == 0) {
196 print '<td class="error">';
197 print $langs->trans("LoginAccountDisableInDolibarr");
198 print '</td>';
199} else {
200 print '<td>';
201 $addadmin = '';
202 if (property_exists($object, 'admin')) {
203 if (isModEnabled('multicompany') && !empty($object->admin) && empty($object->entity)) {
204 $addadmin .= img_picto($langs->trans("SuperAdministratorDesc"), "redstar", 'class="paddingleft"');
205 } elseif (!empty($object->admin)) {
206 $addadmin .= img_picto($langs->trans("AdministratorDesc"), "star", 'class="paddingleft"');
207 }
208 }
209 print showValueWithClipboardCPButton($object->login).$addadmin;
210 print '</td>';
211}
212print '</tr>'."\n";
213
214print '</table>';
215
216print '</div>';
217
218print dol_get_fiche_end();
219
220
221print '<br>';
222print '<span class="opacitymedium">'.$langs->trans("AgendaExtSitesDesc")."</span><br>\n";
223print "<br>\n";
224
225$selectedvalue = !getDolGlobalString('AGENDA_DISABLE_EXT') ? 0 : $conf->global->AGENDA_DISABLE_EXT;
226if ($selectedvalue == 1) {
227 $selectedvalue = 0;
228} else {
229 $selectedvalue = 1;
230}
231
232
233print '<div class="div-table-responsive-no-min">';
234print '<table class="noborder centpercent">';
235
236print "<tr class=\"liste_titre\">";
237print "<td>".$langs->trans("Parameter")."</td>";
238print "<td>".$langs->trans("Name")."</td>";
239print "<td>".$langs->trans("ExtSiteUrlAgenda").'<div class="hideonsmartphone opacitymedium">'." (".$langs->trans("Example").': https://externalcalendar/agenda/agenda.ics)</div></td>';
240print "<td>".$form->textwithpicto($langs->trans("FixTZ"), $langs->trans("FillFixTZOnlyIfRequired"), 1).'</td>';
241print '<td class="right">'.$langs->trans("Color").'</td>';
242print "</tr>";
243
244$i = 1;
245while ($i <= $MAXAGENDA) {
246 $key = $i;
247 $name = 'AGENDA_EXT_NAME_'.$id.'_'.$key;
248 $src = 'AGENDA_EXT_SRC_'.$id.'_'.$key;
249 $offsettz = 'AGENDA_EXT_OFFSETTZ_'.$id.'_'.$key;
250 $color = 'AGENDA_EXT_COLOR_'.$id.'_'.$key;
251
252 print '<tr class="oddeven">';
253 // Nb @phan-suppress-next-line PhanPluginSuspiciousParamPosition
254 print '<td class="maxwidth50onsmartphone">'.$langs->trans("AgendaExtNb", $key)."</td>";
255 // Name
256 $name_value = (GETPOST('AGENDA_EXT_NAME_'.$id.'_'.$key) ? GETPOST('AGENDA_EXT_NAME_'.$id.'_'.$key) : (empty($object->conf->$name) ? '' : $object->conf->$name));
257 print '<td><input type="text" class="flat hideifnotset minwidth100 maxwidth100onsmartphone" name="AGENDA_EXT_NAME_'.$id.'_'.$key.'" value="'.$name_value.'"></td>';
258 // URL
259 $src_value = (GETPOST('AGENDA_EXT_SRC_'.$id.'_'.$key) ? GETPOST('AGENDA_EXT_SRC_'.$id.'_'.$key) : (empty($object->conf->$src) ? '' : $object->conf->$src));
260 print '<td><input type="url" class="flat hideifnotset width300" name="AGENDA_EXT_SRC_'.$id.'_'.$key.'" value="'.$src_value.'"></td>';
261 // Offset TZ
262 $offsettz_value = (GETPOST('AGENDA_EXT_OFFSETTZ_'.$id.'_'.$key) ? GETPOST('AGENDA_EXT_OFFSETTZ_'.$id.'_'.$key) : (empty($object->conf->$offsettz) ? '' : $object->conf->$offsettz));
263 print '<td><input type="text" class="flat hideifnotset" name="AGENDA_EXT_OFFSETTZ_'.$id.'_'.$key.'" value="'.$offsettz_value.'" size="1"></td>';
264 // Color (Possible colors are limited by Google)
265 print '<td class="nowraponall right">';
266 $color_value = (GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key) ? GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key) : (empty($object->conf->$color) ? 'ffffff' : $object->conf->$color));
267 print $formother->selectColor($color_value, "AGENDA_EXT_COLOR_".$id.'_'.$key, '', 1, array(), 'hideifnotset');
268 print '</td>';
269 print "</tr>";
270 $i++;
271}
272
273print '</table>';
274print '</div>';
275
276$addition_button = array(
277 'name' => 'save',
278 'label_key' => 'Save',
279 'addclass' => 'hideifnotset',
280);
281print $form->buttonsSaveCancel("", "", $addition_button);
282
283print dol_get_fiche_end();
284
285print "</form>\n";
286
287// End of page
288llxFooter();
289$db->close();
$id
Definition account.php:39
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
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:70
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.
Class to manage Dolibarr users.
llxFooter()
Footer empty.
Definition document.php:107
dol_is_url($uri)
Return if path is an URI (the name of the method is misleading).
dol_set_user_param($db, $conf, &$user, $tab)
Save personal parameter.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
showValueWithClipboardCPButton($valuetocopy, $showonlyonhover=1, $texttoshow='')
Create a button to copy $valuetocopy in the clipboard (for copy and paste feature).
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.
dolButtonToOpenUrlInDialogPopup($name, $label, $buttonstring, $url, $disabled='', $morecss='classlink button bordertransp', $jsonopen='', $backtopagejsfields='', $accesskey='')
Return HTML code to output a button to open a dialog popup box.
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_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
conf($dolibarr_main_document_root)
Load conf file (file must exists)
Definition inc.php:420
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
user_prepare_head(User $object)
Prepare array with list of tabs.