dolibarr 20.0.0
home.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2005-2018 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2005-2024 Regis Houssin <regis.houssin@inodbox.com>
4 * Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.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
25// Load Dolibarr environment
26require '../main.inc.php';
27require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
28require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
29
30$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'userhome'; // To manage different context of search
31
32if (!$user->hasRight('user', 'user', 'lire') && !$user->admin) {
33 // Redirection vers la page de l'utilisateur
34 header("Location: card.php?id=".$user->id);
35 exit;
36}
37
38// Load translation files required by page
39$langs->load("users");
40
41$canreadperms = true;
42if (getDolGlobalString('MAIN_USE_ADVANCED_PERMS')) {
43 $canreadperms = (!empty($user->admin) || $user->hasRight("user", "group_advance", "read"));
44}
45
46// Security check (for external users)
47$socid = 0;
48if ($user->socid > 0) {
49 $socid = $user->socid;
50}
51
52$companystatic = new Societe($db);
53$fuserstatic = new User($db);
54
55// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array
56$hookmanager->initHooks(array('userhome'));
57if (!isset($form) || !is_object($form)) {
58 $form = new Form($db);
59}
60// Load $resultboxes (selectboxlist + boxactivated + boxlista + boxlistb)
61$resultboxes = FormOther::getBoxesArea($user, "1");
62
63if (GETPOST('addbox')) {
64 // Add box (when submit is done from a form when ajax disabled)
65 require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php';
66 $zone = GETPOSTINT('areacode');
67 $userid = GETPOSTINT('userid');
68 $boxorder = GETPOST('boxorder', 'aZ09');
69 $boxorder .= GETPOST('boxcombo', 'aZ09');
70 $result = InfoBox::saveboxorder($db, $zone, $boxorder, $userid);
71 if ($result > 0) {
72 setEventMessages($langs->trans("BoxAdded"), null);
73 }
74}
75
76$max = getDolGlobalInt('MAIN_SIZE_SHORTLIST_LIMIT', 5);
77
78
79/*
80 * View
81 */
82
83$title = $langs->trans("MenuUsersAndGroups");
84$help_url = '';
85llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-user page-home');
86
87
88print load_fiche_titre($langs->trans("MenuUsersAndGroups"), $resultboxes['selectboxlist'], 'user');
89
90
91// Search User
92$searchbox = '<form method="post" action="'.DOL_URL_ROOT.'/core/search.php">';
93$searchbox .= '<input type="hidden" name="token" value="'.newToken().'">';
94
95$searchbox .= '<table class="noborder nohover centpercent">';
96$searchbox .= '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Search").'</td></tr>';
97$searchbox .= '<tr><td>';
98$searchbox .= $langs->trans("User").':</td><td><input class="flat inputsearch width200" type="text" name="search_user"></td></tr>';
99
100// Search Group
101if ($canreadperms) {
102 $searchbox .= '<tr><td>';
103 $searchbox .= $langs->trans("Group").':</td><td><input class="flat inputsearch width200" type="text" name="search_group"></td></tr>';
104}
105
106$searchbox .= '<tr><td class="center" colspan="2"><input type="submit" value="'.$langs->trans("Search").'" class="button"></td></tr>';
107$searchbox .= "</table><br>\n";
108
109$searchbox .= '</form>';
110
111
112/*
113 * Latest created users
114 */
115
116$lastcreatedbox = '';
117$sql = "SELECT DISTINCT u.rowid, u.lastname, u.firstname, u.admin, u.login, u.fk_soc, u.datec, u.statut";
118$sql .= ", u.entity";
119$sql .= ", u.ldap_sid";
120$sql .= ", u.photo";
121$sql .= ", u.admin";
122$sql .= ", u.email";
123$sql .= ", s.nom as name";
124$sql .= ", s.code_client";
125$sql .= ", s.canvas";
126$sql .= " FROM ".MAIN_DB_PREFIX."user as u";
127$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON u.fk_soc = s.rowid";
128// Add fields from hooks
129$parameters = array();
130$reshook = $hookmanager->executeHooks('printUserListWhere', $parameters); // Note that $action and $object may have been modified by hook
131if ($reshook > 0) {
132 $sql .= $hookmanager->resPrint;
133} else {
134 $sql .= " WHERE u.entity IN (".getEntity('user').")";
135}
136if (!empty($socid)) {
137 $sql .= " AND u.fk_soc = ".((int) $socid);
138}
139$sql .= $db->order("u.datec", "DESC");
140$sql .= $db->plimit($max);
141
142$resql = $db->query($sql);
143if ($resql) {
144 $num = $db->num_rows($resql);
145
146 $lastcreatedbox .= '<div class="div-table-responsive-no-min">';
147 $lastcreatedbox .= '<table class="noborder centpercent">';
148 $lastcreatedbox .= '<tr class="liste_titre"><td colspan="3" class="valignmiddle">';
149 $lastcreatedbox .= '<span class="valignmiddle">'.$langs->trans("LastUsersCreated", min($num, $max)).'</span>';
150 $lastcreatedbox .= '<a class="valignmiddle marginleftonlyshort" href="'.DOL_URL_ROOT.'/user/list.php?sortfield=u.datec&sortorder=DESC" title="'.$langs->trans("FullList").'">';
151 $lastcreatedbox .= '<span class="badge marginleftonlyshort valignmiddle">...</span>';
152 $lastcreatedbox .= '</a>';
153 $lastcreatedbox .= '</td>';
154 $lastcreatedbox .= '<td class="right" colspan="2">';
155 //$lastcreatedbox .= '<a class="commonlink" href="'.DOL_URL_ROOT.'/user/list.php?sortfield=u.datec&sortorder=DESC">'.$langs->trans("FullList");
156 $lastcreatedbox .= '</td>';
157 $lastcreatedbox .= '</tr>'."\n";
158 $i = 0;
159
160 while ($i < $num && $i < $max) {
161 $obj = $db->fetch_object($resql);
162
163 $fuserstatic->id = $obj->rowid;
164 $fuserstatic->statut = $obj->statut;
165 $fuserstatic->status = $obj->statut;
166 $fuserstatic->lastname = $obj->lastname;
167 $fuserstatic->firstname = $obj->firstname;
168 $fuserstatic->login = $obj->login;
169 $fuserstatic->photo = $obj->photo;
170 $fuserstatic->admin = $obj->admin;
171 $fuserstatic->email = $obj->email;
172 $fuserstatic->socid = $obj->fk_soc;
173
174 $companystatic->id = $obj->fk_soc;
175 $companystatic->name = $obj->name;
176 $companystatic->code_client = $obj->code_client;
177 $companystatic->canvas = $obj->canvas;
178
179 $lastcreatedbox .= '<tr class="oddeven">';
180 $lastcreatedbox .= '<td class="nowraponall tdoverflowmax150">';
181 $lastcreatedbox .= $fuserstatic->getNomUrl(-1);
182 if (isModEnabled('multicompany') && $obj->admin && !$obj->entity) {
183 $lastcreatedbox .= img_picto($langs->trans("SuperAdministratorDesc"), 'redstar');
184 } elseif ($obj->admin) {
185 $lastcreatedbox .= img_picto($langs->trans("AdministratorDesc"), 'star');
186 }
187 $lastcreatedbox .= "</td>";
188 $lastcreatedbox .= '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($obj->login).'">'.dol_escape_htmltag($obj->login).'</td>';
189 $texttoshow = '';
190 if ($obj->fk_soc) {
191 $texttoshow .= $companystatic->getNomUrl(1);
192 } else {
193 $texttoshow .= '<span class="opacitymedium">'.$langs->trans("InternalUser").'</span>';
194 }
195 if ($obj->ldap_sid) {
196 $texttoshow .= ' <span class="opacitymedium">('.$langs->trans("DomainUser").')</span>';
197 }
198 $entity = $obj->entity;
199 $entitystring = '';
200 // TODO Set of entitystring should be done with a hook
201 if (isModEnabled('multicompany') && is_object($mc)) {
202 if (empty($entity)) {
203 $entitystring = $langs->trans("AllEntities");
204 } else {
205 $mc->getInfo($entity);
206 $entitystring = $mc->label;
207 }
208 }
209 $texttoshow .= ($entitystring ? ' <span class="opacitymedium">('.$entitystring.')</span>' : '');
210 $lastcreatedbox .= '<td class="tdoverflowmax150" title="'.dol_escape_htmltag(dol_string_nohtmltag($texttoshow)).'">';
211 $lastcreatedbox .= $texttoshow;
212 $lastcreatedbox .= '</td>';
213 $lastcreatedbox .= '<td class="center nowrap">'.dol_print_date($db->jdate($obj->datec), 'dayhour').'</td>';
214 $lastcreatedbox .= '<td class="right">';
215 $lastcreatedbox .= $fuserstatic->getLibStatut(3);
216 $lastcreatedbox .= '</td>';
217
218 $lastcreatedbox .= '</tr>';
219 $i++;
220 }
221 $lastcreatedbox .= "</table>";
222 $lastcreatedbox .= "</div><br>";
223
224 $db->free($resql);
225} else {
226 dol_print_error($db);
227}
228
229
230/*
231 * Last groups created
232 */
233$lastgroupbox = '';
234if ($canreadperms) {
235 $sql = "SELECT g.rowid, g.nom as name, g.note, g.entity, g.datec";
236 $sql .= " FROM ".MAIN_DB_PREFIX."usergroup as g";
237 if (isModEnabled('multicompany') && $conf->entity == 1 && (getDolGlobalInt('MULTICOMPANY_TRANSVERSE_MODE') || ($user->admin && !$user->entity))) {
238 $sql .= " WHERE g.entity IS NOT NULL";
239 } else {
240 $sql .= " WHERE g.entity IN (0, ".$conf->entity.")";
241 }
242 $sql .= $db->order("g.datec", "DESC");
243 $sql .= $db->plimit($max);
244
245 $resql = $db->query($sql);
246 if ($resql) {
247 $colspan = 1;
248 if (isModEnabled('multicompany')) {
249 $colspan++;
250 }
251 $num = $db->num_rows($resql);
252
253 $lastgroupbox .= '<div class="div-table-responsive-no-min">';
254 $lastgroupbox .= '<table class="noborder centpercent">';
255 $lastgroupbox .= '<tr class="liste_titre"><td colspan="'.$colspan.'">';
256 $lastgroupbox .= '<span class="valignmiddle">'.$langs->trans("LastGroupsCreated", ($num ? $num : $max)).'</span>';
257 $lastgroupbox .= '<a class="valignmiddle marginleftonlyshort" href="'.DOL_URL_ROOT.'/user/group/list.php?sortfield=g.datec&sortorder=DESC" title="'.$langs->trans("FullList").'">';
258 $lastgroupbox .= '<span class="badge marginleftonlyshort valignmiddle">...</span>';
259 $lastgroupbox .= '</a>';
260
261 $lastgroupbox .= '</td>';
262 $lastgroupbox .= '<td class="right">';
263 //$lastgroupbox .= '<a class="commonlink" href="'.DOL_URL_ROOT.'/user/group/list.php?sortfield=g.datec&sortorder=DESC">'.$langs->trans("FullList");
264 $lastgroupbox .= '</td>';
265 $lastgroupbox .= '</tr>';
266 $i = 0;
267
268 $grouptemp = new UserGroup($db);
269
270 while ($i < $num && (!$max || $i < $max)) {
271 $obj = $db->fetch_object($resql);
272
273 $grouptemp->id = $obj->rowid;
274 $grouptemp->name = $obj->name;
275 $grouptemp->note = $obj->note;
276
277 $lastgroupbox .= '<tr class="oddeven">';
278 $lastgroupbox .= '<td>';
279 $lastgroupbox .= $grouptemp->getNomUrl(1);
280 if (!$obj->entity) {
281 $lastgroupbox .= img_picto($langs->trans("GlobalGroup"), 'redstar');
282 }
283 $lastgroupbox .= "</td>";
284 if (isModEnabled('multicompany') && is_object($mc)) {
285 $mc->getInfo($obj->entity);
286 $lastgroupbox .= '<td>';
287 $lastgroupbox .= $mc->label;
288 $lastgroupbox .= '</td>';
289 }
290 $lastgroupbox .= '<td class="nowrap right">'.dol_print_date($db->jdate($obj->datec), 'dayhour').'</td>';
291 $lastgroupbox .= "</tr>";
292 $i++;
293 }
294 $lastgroupbox .= "</table>";
295 $lastgroupbox .= "</div><br>";
296
297 $db->free($resql);
298 } else {
299 dol_print_error($db);
300 }
301}
302
303// boxes
304print '<div class="clearboth"></div>';
305print '<div class="fichecenter fichecenterbis">';
306
307$boxlist = '<div class="twocolumns">';
308
309$boxlist .= '<div class="firstcolumn fichehalfleft boxhalfleft" id="boxhalfleft">';
310$boxlist .= $searchbox;
311$boxlist .= $resultboxes['boxlista'];
312$boxlist .= '</div>'."\n";
313
314$boxlist .= '<div class="secondcolumn fichehalfright boxhalfright" id="boxhalfright">';
315$boxlist .= $lastcreatedbox;
316$boxlist .= $lastgroupbox;
317$boxlist .= $resultboxes['boxlistb'];
318$boxlist .= '</div>'."\n";
319
320$boxlist .= '</div>';
321
322print $boxlist;
323
324print '</div>';
325
326// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array
327$parameters = array('user' => $user);
328$reshook = $hookmanager->executeHooks('dashboardUsersGroups', $parameters, $object); // Note that $action and $object may have been modified by hook
329
330// End of page
331llxFooter();
332$db->close();
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()
Empty header.
Definition wrapper.php:55
llxFooter()
Empty footer.
Definition wrapper.php:69
Class to manage generation of HTML components Only common components must be here.
static getBoxesArea($user, $areacode)
Get array with HTML tabs with boxes of a particular area including personalized choices of user.
static saveboxorder($dbs, $zone, $boxorder, $userid=0)
Save order of boxes for area and user.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage user groups.
Class to manage Dolibarr users.
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_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
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.
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 dolibarr global constant string value.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...