40require
'../main.inc.php';
52require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
53require_once DOL_DOCUMENT_ROOT.
'/user/class/usergroup.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
57require_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
58require_once DOL_DOCUMENT_ROOT.
'/core/lib/usergroups.lib.php';
59require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formadmin.class.php';
60require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
61require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
62require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
63require_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
65 require_once DOL_DOCUMENT_ROOT.
'/core/class/ldap.class.php';
68 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
71 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
74 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
78$langs->loadLangs(array(
'users',
'companies',
'ldap',
'admin',
'hrm',
'stocks',
'other'));
81$action =
GETPOST(
'action',
'aZ09');
82$mode =
GETPOST(
'mode',
'alpha');
83$confirm =
GETPOST(
'confirm',
'alpha');
85$cancel =
GETPOST(
'cancel',
'alpha');
86$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'usercard';
87$backtopage =
GETPOST(
'backtopage');
88$backtopageforcancel =
GETPOST(
'backtopageforcancel');
89$forcepasswordchange =
GETPOSTINT(
'forcepasswordchange');
91if (empty($id) && $action !=
'add' && $action !=
'create') {
101$childids = $user->getAllChildIds(1);
106$extrafields->fetch_name_optionals_label(
$object->table_element);
111$hookmanager->initHooks(array(
'usercard',
'globalcard'));
118 $res =
$object->fetch($id,
'',
'', 1);
123if ($user->socid > 0) {
124 $socid = $user->socid;
130$permissiontoadd = (!empty($user->admin) || $user->hasRight(
"user",
"user",
"write")) && (empty($user->socid) || $user->socid ==
$object->socid);
131$permissiontoread = (!empty($user->admin) || $user->hasRight(
"user",
"user",
"read")) && (empty($user->socid) || $user->socid ==
$object->socid);
132$permissiontoedit = (!empty($user->admin) || $user->hasRight(
"user",
"user",
"write")) && (empty($user->socid) || $user->socid ==
$object->socid);
133$permissiontodisable = (!empty($user->admin) || $user->hasRight(
"user",
"user",
"delete")) && (empty($user->socid) || $user->socid ==
$object->socid);
134$permissiontoreadgroup = $permissiontoread;
135$permissiontoeditgroup = $permissiontoedit;
137 $permissiontoreadgroup = (!empty($user->admin) || $user->hasRight(
"user",
"group_advance",
"read")) && (empty($user->socid) || $user->socid ==
$object->socid);
138 $permissiontoeditgroup = (!empty($user->admin) || $user->hasRight(
"user",
"group_advance",
"write")) && (empty($user->socid) || $user->socid ==
$object->socid);
141$permissiontoclonesuperadmin = ($permissiontoadd && empty($user->entity));
142$permissiontocloneadmin = ($permissiontoadd && !empty($user->admin));
143$permissiontocloneuser = $permissiontoadd;
146 $permissiontoclonesuperadmin =
false;
147 $permissiontocloneadmin =
false;
148 $permissiontocloneuser =
false;
151if ($user->id != $id && !$permissiontoread) {
155$caneditpasswordandsee =
false;
156$caneditpasswordandsend =
false;
159$permissiontoeditpasswordandsee =
false;
160$permissiontoeditpasswordandsend =
false;
163 $permissiontoedit = ((($user->id ==
$id) && $user->hasRight(
"user",
"self",
"write")) || (($user->id != $id) && $user->hasRight(
"user",
"user",
"write"))) && (empty($user->socid) || $user->socid ==
$object->socid);
164 $permissiontoeditpasswordandsee = ((($user->id ==
$id) && $user->hasRight(
"user",
"self",
"password")) || (($user->id != $id) && $user->hasRight(
"user",
"user",
"password") && $user->admin))&& (empty($user->socid) || $user->socid ==
$object->socid);
165 $permissiontoeditpasswordandsend = ((($user->id ==
$id) && $user->hasRight(
"user",
"self",
"password")) || (($user->id != $id) && $user->hasRight(
"user",
"user",
"password")))&& (empty($user->socid) || $user->socid ==
$object->socid);
168$passwordismodified =
false;
176$parameters = array(
'id' => $id,
'socid' => $socid,
'group' => $group,
'caneditgroup' => $permissiontoeditgroup);
177$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
182if (empty($reshook)) {
183 $backurlforlist = DOL_URL_ROOT.
'/user/list.php';
185 if (empty($backtopage) || ($cancel && empty($id))) {
186 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
187 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
188 $backtopage = $backurlforlist;
190 $backtopage = DOL_URL_ROOT.
'/user/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
196 if (!empty($backtopageforcancel)) {
197 header(
"Location: ".$backtopageforcancel);
199 } elseif (!empty($backtopage)) {
200 header(
"Location: ".$backtopage);
206 if ($action ==
'confirm_disable' && $confirm ==
"yes" && $permissiontodisable) {
207 if ($id != $user->id) {
209 if (
$object->admin && empty($user->admin)) {
212 setEventMessages($langs->trans(
"OnlyAdminUsersCanDisableAdminUsers"),
null,
'errors');
215 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
221 if ($action ==
'confirm_enable' && $confirm ==
"yes" && $permissiontodisable) {
224 if ($id != $user->id) {
227 if (!empty(
$conf->file->main_limit_users)) {
228 $nb =
$object->getNbOfUsers(
"active");
229 if ($nb >=
$conf->file->main_limit_users) {
231 setEventMessages($langs->trans(
"YourQuotaOfUsersIsReached"),
null,
'errors');
237 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
243 if ($action ==
'confirm_delete' && $confirm ==
"yes" && $permissiontodisable) {
244 if ($id != $user->id) {
245 if (!GETPOSTISSET(
'token')) {
246 print
'Error, token required for this critical operation';
254 $result =
$object->delete($user);
256 $langs->load(
"errors");
260 header(
"Location: ".DOL_URL_ROOT.
"/user/list.php?restore_lastsearch_values=1");
267 if ($action ==
'add' && $permissiontoadd) {
281 if (!empty(
$conf->file->main_limit_users)) {
282 $nb =
$object->getNbOfUsers(
"active");
283 if ($nb >=
$conf->file->main_limit_users) {
285 setEventMessages($langs->trans(
"YourQuotaOfUsersIsReached"),
null,
'errors');
295 $object->national_registration_number =
GETPOST(
"national_registration_number",
'alphanohtml');
310 $object->socialnetworks = array();
311 foreach ($socialnetworks as $key => $value) {
312 if (
GETPOST($key,
'alphanohtml')) {
318 $object->email = preg_replace(
'/\s+/',
'',
GETPOST(
"email",
'alphanohtml'));
325 if (
$object->signature ===
'ErrorTooManyLinksIntoHTMLString') {
327 $langs->load(
"errors");
328 setEventMessages($langs->trans(
'ErrorTooManyLinksIntoHTMLString'),
null,
'errors');
331 $object->accountancy_code =
GETPOST(
"accountancy_code",
'alphanohtml');
351 $object->color =
GETPOST(
"color",
'alphanohtml') !=
'' ? str_replace(
'#',
'', (
string)
GETPOST(
"color",
'alphanohtml')) :
'';
353 $object->dateemployment = $dateemployment;
354 $object->dateemploymentend = $dateemploymentend;
355 $object->datestartvalidity = $datestartvalidity;
356 $object->dateendvalidity = $dateendvalidity;
358 $object->force_pass_change = $forcepasswordchange;
365 $ret = $extrafields->setOptionalsFromPost(
null, $object);
379 $object->entity = ($entity ==
'' ? 1 : $entity);
383 $object->entity = ($entity ==
'' ? 1 : $entity);
394 if (
GETPOST(
'password',
'password')) {
395 $resPass =
$object->setPassword($user,
GETPOST(
'password',
'password'));
397 if (is_int($resPass) && $resPass < 0) {
398 $langs->load(
"errors");
405 $usercats =
GETPOST(
'usercats',
'array:int');
406 $object->setCategories($usercats);
410 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
414 $langs->load(
"errors");
423 if (($action ==
'addgroup' || $action ==
'removegroup') && $permissiontoeditgroup) {
426 $editgroup->fetch($group);
427 $editgroup->oldcopy = clone $editgroup;
431 if ($action ==
'addgroup') {
432 $result =
$object->SetInGroup($group, $editgroup->entity);
434 if ($action ==
'removegroup') {
435 $result =
$object->RemoveFromGroup($group, $editgroup->entity);
446 if ($action ==
'update' && ($permissiontoedit || $permissiontoeditpasswordandsee)) {
447 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
449 if ($permissiontoedit) {
452 if (!
GETPOST(
"lastname",
'alpha')) {
457 if (!
GETPOST(
"login",
'alpha')) {
474 if (GETPOSTISSET(
"ref_employee")) {
478 if (GETPOSTISSET(
"national_registration_number")) {
479 $object->national_registration_number =
GETPOST(
"national_registration_number",
'alphanohtml');
482 if ($permissiontoeditpasswordandsee) {
485 if ($permissiontoeditpasswordandsee || $user->hasRight(
"api",
"apikey",
"generate")) {
488 if (!empty($user->admin) && $user->id != $id) {
493 if ($user->admin && !
$object->ldap_sid) {
506 $object->socialnetworks = array();
507 foreach ($socialnetworks as $key => $value) {
508 if (
GETPOST($key,
'alphanohtml')) {
514 $object->email = preg_replace(
'/\s+/',
'',
GETPOST(
"email",
'alphanohtml'));
521 if (
$object->signature ===
'ErrorTooManyLinksIntoHTMLString') {
523 $langs->load(
"errors");
524 setEventMessages($langs->trans(
'ErrorTooManyLinksIntoHTMLString'),
null,
'errors');
527 $object->accountancy_code =
GETPOST(
"accountancy_code",
'alphanohtml');
545 $object->color =
GETPOST(
"color",
'alphanohtml') !=
'' ? str_replace(
'#',
'', (
string)
GETPOST(
"color",
'alphanohtml')) :
'';
546 $object->dateemployment = $dateemployment;
547 $object->dateemploymentend = $dateemploymentend;
548 $object->datestartvalidity = $datestartvalidity;
549 $object->dateendvalidity = $dateendvalidity;
551 $object->force_pass_change = $forcepasswordchange;
560 if (
isModEnabled(
'multicompany') && empty($user->entity) && !empty($user->admin)) {
574 $ret = $extrafields->setOptionalsFromPost(
null, $object,
'@GETPOSTISSET');
582 if (!empty($_FILES[
'photo'][
'name'])) {
586 if (
$object->id == $user->id) {
591 $langs->load(
"errors");
593 dol_syslog($langs->transnoentities(
"ErrorBadImageFormat"), LOG_INFO);
598 $passwordismodified = 0;
601 $passwordismodified = 1;
608 if (
$db->errno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
609 $langs->load(
"errors");
610 setEventMessages($langs->trans(
"ErrorUpdateCanceledDueToDuplicatedUniqueValue",
$object->login),
null,
'errors');
618 if (!$error && GETPOSTISSET(
'contactid')) {
622 if ($contactid > 0) {
624 $contact->fetch($contactid);
626 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
627 $sql .=
" SET fk_socpeople=".((int) $contactid);
628 if (!empty($contact->socid)) {
629 $sql .=
", fk_soc=".((int) $contact->socid);
630 } elseif ($socid > 0) {
631 $sql .=
", fk_soc = null";
632 setEventMessages($langs->trans(
"WarningUserDifferentContactSocid"),
null,
'warnings');
634 $sql .=
" WHERE rowid = ".((int)
$object->id);
635 } elseif ($socid > 0) {
636 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
637 $sql .=
" SET fk_socpeople=NULL, fk_soc=".((int) $socid);
638 $sql .=
" WHERE rowid = ".((int)
$object->id);
640 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
641 $sql .=
" SET fk_socpeople=NULL, fk_soc=NULL";
642 $sql .=
" WHERE rowid = ".((int)
$object->id);
645 $resql =
$db->query($sql);
652 if (!$error && !count(
$object->errors)) {
654 $fileimg =
$conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 0, $object,
'user').
'photos/'.
$object->oldcopy->photo;
657 $dirthumbs =
$conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 0, $object,
'user').
'photos/thumbs';
661 if (isset($_FILES[
'photo'][
'tmp_name']) && trim($_FILES[
'photo'][
'tmp_name'])) {
662 $dir =
$conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 1, $object,
'user').
'/photos';
669 $result =
dol_move_uploaded_file($_FILES[
'photo'][
'tmp_name'], $newfile, 1, 0, $_FILES[
'photo'][
'error']);
671 if (!($result > 0)) {
679 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
688 $langs->load(
"errors");
689 setEventMessages($langs->trans(
"ErrorFailedToCreateDir", $dir), $mesgs,
'errors');
694 if (!$error && !count(
$object->errors)) {
696 $categories =
GETPOST(
'usercats',
'array:int');
697 $object->setCategories($categories);
700 if (!$error && !count(
$object->errors)) {
704 $login = $_SESSION[
"dol_login"];
707 $langs->load(
"errors");
708 setEventMessages($langs->transnoentitiesnoconv(
"WarningYourLoginWasModifiedPleaseLogin"),
null,
'warnings');
710 if ($passwordismodified &&
$object->login == $user->login) {
712 $langs->load(
"errors");
713 setEventMessages($langs->transnoentitiesnoconv(
"WarningYourPasswordWasModifiedPleaseLogin"),
null,
'warnings');
714 header(
"Location: ".DOL_URL_ROOT.
'/user/card.php?id='.
$object->id);
722 if ($permissiontoeditpasswordandsee) {
723 dol_syslog(
"Not allowed to change fields, only password");
727 if (
GETPOST(
"password",
"password")) {
730 $ret =
$object->setPassword($user,
GETPOST(
"password",
"password"));
731 if (is_int($ret) && $ret < 0) {
740 if ((($action ==
'confirm_password' && $confirm ==
'yes' && $permissiontoeditpasswordandsee)
741 || ($action ==
'confirm_passwordsend' && $confirm ==
'yes' && $permissiontoeditpasswordandsend))
745 $newpassword =
$object->setPassword($user,
'');
746 if (is_int($newpassword) && $newpassword < 0) {
748 setEventMessages($langs->trans(
"ErrorFailedToSetNewPassword"),
null,
'errors');
751 if ($action ==
'confirm_passwordsend') {
752 if (
$object->send_password($user, $newpassword) > 0) {
758 setEventMessages($langs->trans(
"PasswordChangedTo", $newpassword),
null,
'warnings');
764 if ($action ==
'adduserldap' && $permissiontoadd) {
765 $selecteduser =
GETPOST(
'users');
767 $required_fields = array(
784 $arrayofsocialnetworks = array(
'skype',
'twitter',
'facebook',
'linkedin');
785 foreach ($arrayofsocialnetworks as $socialnetwork) {
791 $result = $ldap->connectBind();
794 $required_fields = array_unique(array_values(array_filter($required_fields,
"dol_validElement")));
799 if (is_array($ldapusers)) {
800 foreach ($ldapusers as $key => $attribute) {
812 $ldap_social = array();
815 $arrayofsocialnetworks = array(
'skype',
'twitter',
'facebook',
'linkedin');
816 foreach ($arrayofsocialnetworks as $socialnetwork) {
817 $ldap_social[$socialnetwork] = $attribute[
getDolGlobalString(
'LDAP_FIELD_'.strtoupper($socialnetwork))];
827 if ($action ==
'confirm_clone' && $confirm !=
'yes') {
830 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontocloneuser) {
834 setEventMessages($langs->trans(
'ErrorNoCloneWithoutEmail'),
null,
'errors');
842 $clone->api_key =
'';
843 $clone->admin = ($user->admin ?
$object->admin : 0);
845 $parts = explode(
' ',
GETPOST(
'clone_name'), 2);
846 $clone->firstname = $parts[0];
847 $clone->lastname = isset($parts[1]) ? $parts[1] :
'';
849 $clone->login = substr($parts[0], 0, 1).$parts[1];
852 $clone->context[
'createfromclone'] =
'createfromclone';
853 $id = $clone->create($user);
854 $refalreadyexists = 0;
857 $result = $clone->cloneRights(
$object->id, $id);
860 if (
GETPOST(
'clone_categories')) {
861 $result = $clone->cloneCategories(
$object->id, $id);
869 if ($clone->error ==
'ErrorProductAlreadyExists') {
873 $mesg = $langs->trans(
"ErrorProductAlreadyExists", $clone->ref);
874 $mesg .=
' <a href="' . $_SERVER[
"PHP_SELF"] .
'?ref=' . $clone->ref .
'">' . $langs->trans(
"ShowCardHere") .
'</a>.';
877 setEventMessages(empty($clone->error) ?
'' : $langs->trans($clone->error), $clone->errors,
'errors');
881 unset($clone->context[
'createfromclone']);
888 header(
"Location: " . $_SERVER[
"PHP_SELF"] .
"?id=" . $id);
899 $triggersendname =
'USER_SENTBYMAIL';
901 $mode =
'emailfromuser';
902 $trackid =
'use'.$id;
903 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
906 $upload_dir =
$conf->user->dir_output;
907 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
910 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
930$sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
'user WHERE entity IN ('.
getEntity(
'user').
')';
931$resql =
$db->query($sql);
933 $obj =
$db->fetch_object($resql);
935 $nbofusers = $obj->nb;
943 $title = $person_name.
" - ".$langs->trans(
'Card');
946 $title = $langs->trans(
"NewEmployee");
948 $title = $langs->trans(
"NewUser");
954llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-user page-card');
956if ($action ==
'create' || $action ==
'adduserldap') {
959 print
'<span class="opacitymedium">'.$langs->trans(
"CreateInternalUserDesc", $langs->transnoentities(
"CreateExternalUser")).
"</span><br>\n";
968 $result = $ldap->connectBind();
970 $required_fields = array(
990 $required_fields = array_unique(array_values(array_filter($required_fields,
"dol_validElement")));
995 if (is_array($ldapusers)) {
996 foreach ($ldapusers as $key => $ldapuser) {
999 foreach ($required_fields as $value) {
1001 $label .= $value.
"=******* ";
1003 $label .= $value.
"=".$ldapuser[$value].
" ";
1006 $liste[$key] = $label;
1016 print
"\n\n<!-- Form liste LDAP debut -->\n";
1018 print
'<form name="add_user_ldap" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1019 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1020 print
'<table class="border centpercent"><tr>';
1021 print
'<td width="160">';
1022 print $langs->trans(
"LDAPUsers");
1025 print
'<input type="hidden" name="action" value="adduserldap">';
1026 if (is_array($liste) && count($liste)) {
1027 print $form->selectarray(
'users', $liste,
'', 1, 0, 0,
'', 0, 0, 0,
'',
'maxwidth500');
1030 print
'</td><td class="center">';
1031 print
'<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans(
'Get')).
'"'.(count($liste) ?
'' :
' disabled').
'>';
1032 print
'</td></tr></table>';
1035 print
"\n<!-- Form liste LDAP fin -->\n\n";
1040 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'" method="POST" name="createuser">';
1041 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1042 print
'<input type="hidden" name="action" value="add">';
1043 if (!empty($ldap_sid)) {
1044 print
'<input type="hidden" name="ldap_sid" value="'.dol_escape_htmltag($ldap_sid).
'">';
1046 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'">';
1052 print
'<table class="border centpercent">';
1056 print
'<tr><td><label for="civility_code">'.$langs->trans(
"UserTitle").
'</label></td><td>';
1057 print $formcompany->select_civility(GETPOSTISSET(
"civility_code") ?
GETPOST(
"civility_code",
'aZ09') :
$object->civility_code,
'civility_code');
1063 print
'<td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans(
"Lastname").
'</span></td>';
1065 if (!empty($ldap_lastname)) {
1066 print
'<input type="hidden" id="lastname" name="lastname" value="'.dol_escape_htmltag($ldap_lastname).
'">';
1067 print $ldap_lastname;
1069 print
'<input class="minwidth100 maxwidth150onsmartphone createloginauto" type="text" id="lastname" name="lastname" value="'.dol_escape_htmltag(
GETPOST(
'lastname',
'alphanohtml')).
'">';
1074 print
'<tr><td>'.$langs->trans(
"Firstname").
'</td>';
1076 if (!empty($ldap_firstname)) {
1077 print
'<input type="hidden" name="firstname" value="'.dol_escape_htmltag($ldap_firstname).
'">';
1078 print $ldap_firstname;
1080 print
'<input id="firstname" class="minwidth100 maxwidth150onsmartphone createloginauto" type="text" name="firstname" value="'.dol_escape_htmltag(
GETPOST(
'firstname',
'alphanohtml')).
'">';
1085 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Login").
'</span></td>';
1087 if (!empty($ldap_login)) {
1088 print
'<input type="hidden" name="login" value="'.dol_escape_htmltag($ldap_login).
'">';
1090 } elseif (!empty($ldap_loginsmb)) {
1091 print
'<input type="hidden" name="login" value="'.dol_escape_htmltag($ldap_loginsmb).
'">';
1092 print $ldap_loginsmb;
1094 print
'<input id="login" class="maxwidth200 maxwidth150onsmartphone" maxsize="24" type="text" name="login" value="'.dol_escape_htmltag(
GETPOST(
'login',
'alphanohtml')).
'" spellcheck="false">';
1098 if (!empty(
$conf->use_javascript_ajax)) {
1102 $charforseparator =
getDolGlobalString(
"MAIN_USER_SEPARATOR_CHAR_FOR_GENERATED_LOGIN",
'.');
1103 if ($charforseparator ==
'none') {
1104 $charforseparator =
'';
1107 jQuery(document).ready(function() {
1108 $(".createloginauto").on("keyup", function() {
1109 console.log(".createloginauto change: We generate login when we have a lastname");
1111 lastname = $("#lastname").val().toLowerCase();
1114 print
' firstname = $("#firstname").val().toLowerCase().replace(/\s+/g, \'\').trim()[0];';
1115 $charforseparator =
'';
1117 print
' firstname = $("#firstname").val().toLowerCase().replace(/\s+/g, \'\').trim()[0];';
1119 print
' firstname = $("#firstname").val().toLowerCase().replace(/\s+/g, \'\').trim();';
1125 login = firstname + \''.
dol_escape_js($charforseparator).
'\';
1127 login += lastname.replace(/\s+/g, \
'\').trim();
1129 $(
"#login").val(login);
1135 $generated_password = '';
1136 if (empty($ldap_sid)) { // ldap_sid is for activedirectory
1137 $generated_password = getRandomPassword(false);
1139 $password = (GETPOSTISSET('password
') ? GETPOST('password
') : $generated_password);
1142 if (!empty($user->admin)) {
1143 print '<tr><td>
'.$form->textwithpicto($langs->trans("Administrator"), $langs->trans("AdministratorDesc"), 1, 'help
').'</td>
';
1145 print $form->selectyesno('admin
', GETPOST('admin
'), 1, false, 0, 1);
1147 if (isModEnabled('multicompany
') && !$user->entity) {
1148 if (!empty($conf->use_javascript_ajax)) {
1149 print '<script
type=
"text/javascript">
1151 $(
"select[name=admin]").change(
function() {
1152 if ( $(
this).val() == 0 ) {
1153 $(
"input[name=superadmin]")
1154 .prop(
"disabled",
true)
1155 .prop(
"checked",
false);
1156 $(
"select[name=entity]")
1157 .prop(
"disabled",
false);
1159 $(
"input[name=superadmin]")
1160 .prop(
"disabled",
false);
1163 $(
"input[name=superadmin]").change(
function() {
1164 if ( $(
this).is(
":checked") ) {
1165 $(
"select[name=entity]")
1166 .prop(
"disabled",
true);
1168 $(
"select[name=entity]")
1169 .prop(
"disabled",
false);
1175 $checked = (GETPOSTINT('superadmin
') ? ' checked
' : '');
1176 $disabled = (GETPOSTINT('superadmin
') ? '' : ' disabled');
1177 print '<input
type=
"checkbox" name=
"superadmin" id=
"superadmin" value=
"1"'.$checked.$disabled.' /> <label
for=
"superadmin">
'.$langs->trans("SuperAdministrator").'</span>
';
1179 print "</td></tr>\n";
1183 print '<tr><td>
'.$langs->trans("Gender").'</td>
';
1185 $arraygender = array('man
' => $langs->trans("Genderman"), 'woman
' => $langs->trans("Genderwoman"), 'other
' => $langs->trans("Genderother"));
1186 print $form->selectarray('gender
', $arraygender, GETPOST('gender
'), 1);
1190 $defaultemployee = '1
';
1192 print '<td>
'.$langs->trans('Employee
').'</td><td>
';
1193 print '<input
type=
"checkbox" name=
"employee" value=
"1"'.(GETPOST('employee
') == '1
' ? ' checked=
"checked"' : (($defaultemployee && !GETPOSTISSET('login
')) ? ' checked=
"checked"' : '')).'>
';
1194 //print $form->selectyesno("employee", (GETPOST('employee
') != '' ?GETPOST('employee
') : $defaultemployee), 1);
1198 print '<tr><td
class=
"titlefieldcreate">
'.$langs->trans("HierarchicalResponsible").'</td>
';
1200 print img_picto('', 'user', 'class=
"pictofixedwidth"').$form->select_dolusers($object->fk_user, 'fk_user
', 1, array($object->id), 0, '', '', (string) $conf->entity, 0, 0, '', 0, '', 'maxwidth300 widthcentpercentminusx
');
1204 // Expense report validator
1205 if (isModEnabled('expensereport
')) {
1206 print '<tr><td
class=
"titlefieldcreate">
';
1207 $text = $langs->trans("ForceUserExpenseValidator");
1208 print $form->textwithpicto($text, $langs->trans("ValidatorIsSupervisorByDefault"), 1, 'help
');
1211 print img_picto('', 'user', 'class=
"pictofixedwidth"').$form->select_dolusers($object->fk_user_expense_validator, 'fk_user_expense_validator
', 1, array($object->id), 0, '', '', (string) $conf->entity, 0, 0, '', 0, '', 'maxwidth300 widthcentpercentminusx
');
1216 // Holiday request validator
1217 if (isModEnabled('holiday
')) {
1218 print '<tr><td
class=
"titlefieldcreate">
';
1219 $text = $langs->trans("ForceUserHolidayValidator");
1220 print $form->textwithpicto($text, $langs->trans("ValidatorIsSupervisorByDefault"), 1, 'help
');
1223 print img_picto('', 'user', 'class=
"pictofixedwidth"').$form->select_dolusers($object->fk_user_holiday_validator, 'fk_user_holiday_validator
', 1, array($object->id), 0, '', '', (string) $conf->entity, 0, 0, '', 0, '', 'maxwidth300 widthcentpercentminusx
');
1229 print '<tr><td>
'.$langs->trans("ExternalUser").' ?</td>
';
1231 print $form->textwithpicto($langs->trans("Internal"), $langs->trans("InternalExternalDesc"), 1, 'help
', '', 0, 2);
1235 print '</
table><hr><
table class=
"border centpercent">
';
1239 print '<tr><td
class=
"titlefieldcreate">
'.$langs->trans("RangeOfLoginValidity").'</td>
';
1241 print $form->selectDate($datestartvalidity, 'datestartvalidity
', 0, 0, 1, 'formdatestartvalidity
', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("from"));
1245 print $form->selectDate($dateendvalidity, 'dateendvalidity
', 0, 0, 1, 'formdateendvalidity
', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
1249 // Force update on next login -- only on dolibarr auth context
1250 if ($_SESSION["dol_authmode"] == 'dolibarr
') {
1251 print '<tr><td
class=
"titlefieldcreate">
'.$form->textwithpicto($langs->trans("PasswordToChange"), $langs->trans("ForcePasswordChange")).'</td>
';
1253 //$permissiontoselfeditpassword = $object->hasRight('user', 'self', 'password
');
1254 $permissiontoselfeditpassword = 1; // In creation, we suppose it to true
1255 if ($permissiontoselfeditpassword) { // @phpstan-ignore-line because value is forced
1256 print '<input
type=
"checkbox" name=
"forcepasswordchange" id=
"forcepasswordchange" value=
"1"'.(GETPOST('forcepasswordchange
') == '1
' ? ' checked=
"checked"' : '').'>
';
1257 print '<label
class=
"opacitymedium" for=
"forcepasswordchange">
'.$langs->trans("AtNextLogin").'</label>
';
1259 print '<input
type=
"checkbox" name=
"forcepasswordchange" value=
"1" class=
"colorgrey valignmiddle" disabled>
';
1260 print $form->textwithpicto('<span
class=
"opacitymedium">
'.$langs->trans("NotPossible").'</span>
', $langs->trans("UserDoesNotHaveRightsToChangeHisPassword"));
1267 print '<tr><td
class=
"fieldrequired">
'.$langs->trans("Password").'</td>
';
1270 if (preg_match('/ldap/
', $dolibarr_main_authentication)) {
1271 $valuetoshow .= ($valuetoshow ? ' +
' : '').$langs->trans("PasswordOfUserInLDAP").' (hidden)
';
1273 if (preg_match('/http/
', $dolibarr_main_authentication)) {
1274 $valuetoshow .= ($valuetoshow ? ' +
' : '').$langs->trans("HTTPBasicPassword");
1276 if (preg_match('/dolibarr/
', $dolibarr_main_authentication) || preg_match('/forceuser/
', $dolibarr_main_authentication)) {
1277 if (!empty($ldap_pass)) { // For very old system compatibility. Now clear password can't be viewed from LDAP read
1278 $valuetoshow .= ($valuetoshow ?
' + ' :
'').
'<input type="hidden" name="password" value="'.
dol_escape_htmltag($ldap_pass).
'">';
1279 $valuetoshow .= preg_replace(
'/./i',
'*', $ldap_pass);
1282 $valuetoshow .= ($valuetoshow ?
' + '.$langs->trans(
"DolibarrPassword") :
'').
'<input class="minwidth300 maxwidth400 widthcentpercentminusx" maxlength="128" type="text" id="password" name="password" value="'.
dol_escape_htmltag($password).
'" autocomplete="new-password" spellcheck="false">';
1283 if (!empty(
$conf->use_javascript_ajax)) {
1284 $valuetoshow .=
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_password" class="linkobject paddingleft"');
1290 $parameters = array(
'valuetoshow' => $valuetoshow,
'password' => $password,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
1291 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
1293 $valuetoshow = $hookmanager->resPrint;
1295 $valuetoshow .= $hookmanager->resPrint;
1305 print
'<tr><td>'.$langs->trans(
"ApiKey").
'</td>';
1307 print
'<input class="minwidth300 maxwidth400 widthcentpercentminusx" minlength="12" maxlength="128" type="text" id="api_key" name="api_key" value="'.GETPOST(
'api_key',
'alphanohtml').
'" autocomplete="off" spellcheck="false">';
1308 if (!empty(
$conf->use_javascript_ajax)) {
1309 print
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_api_key" class="linkobject paddingleft"');
1315 print
'<input type="hidden" name="api_key" value="'.$generated_fake_api_key.
'">';
1319 print
'</table><hr><table class="border centpercent">';
1323 print
'<tr><td class="tdtop titlefieldcreate">'.$form->editfieldkey(
'Address',
'address',
'', $object, 0).
'</td>';
1324 print
'<td><textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
1326 print
'</textarea></td></tr>';
1329 print
'<tr><td>'.$form->editfieldkey(
'Zip',
'zipcode',
'', $object, 0).
'</td><td>';
1330 print $formcompany->select_ziptown(
$object->zip,
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6);
1334 print
'<tr><td>'.$form->editfieldkey(
'Town',
'town',
'', $object, 0).
'</td><td>';
1335 print $formcompany->select_ziptown(
$object->town,
'town', array(
'zipcode',
'selectcountry_id',
'state_id'));
1339 print
'<tr><td>'.$form->editfieldkey(
'Country',
'selectcountry_id',
'', $object, 0).
'</td><td class="maxwidthonsmartphone">';
1340 print
img_picto(
'',
'country',
'class="pictofixedwidth"');
1341 print $form->select_country((
GETPOST(
'country_id') !=
'' ?
GETPOST(
'country_id') :
$object->country_id),
'country_id');
1343 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1349 print
'<tr><td>'.$form->editfieldkey(
'State',
'state_id',
'', $object, 0).
'</td><td class="maxwidthonsmartphone">';
1350 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
1351 print $formcompany->select_state_ajax(
'country_id',
$object->state_id,
$object->country_id,
'state_id');
1356 print
'<tr><td>'.$langs->trans(
"PhonePro").
'</td>';
1358 print
img_picto(
'',
'object_phoning',
'class="pictofixedwidth"');
1359 if (!empty($ldap_phone)) {
1360 print
'<input type="hidden" name="office_phone" value="'.dol_escape_htmltag($ldap_phone).
'">';
1363 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="office_phone" value="'.dol_escape_htmltag(
GETPOST(
'office_phone',
'alphanohtml')).
'">';
1368 print
'<tr><td>'.$langs->trans(
"PhoneMobile").
'</td>';
1370 print
img_picto(
'',
'object_phoning_mobile',
'class="pictofixedwidth"');
1371 if (!empty($ldap_mobile)) {
1372 print
'<input type="hidden" name="user_mobile" value="'.dol_escape_htmltag($ldap_mobile).
'">';
1375 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="user_mobile" value="'.dol_escape_htmltag(
GETPOST(
'user_mobile',
'alphanohtml')).
'" spellcheck="false">';
1380 print
'<tr><td>'.$langs->trans(
"Fax").
'</td>';
1382 print
img_picto(
'',
'object_phoning_fax',
'class="pictofixedwidth"');
1383 if (!empty($ldap_fax)) {
1384 print
'<input type="hidden" name="office_fax" value="'.dol_escape_htmltag($ldap_fax).
'">';
1387 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="office_fax" value="'.dol_escape_htmltag(
GETPOST(
'office_fax',
'alphanohtml')).
'">';
1392 print
'<tr><td'.(getDolGlobalString(
'USER_MAIL_REQUIRED') ?
' class="fieldrequired"' :
'').
'>'.$langs->trans(
"EMail").
'</td>';
1394 print
img_picto(
'',
'object_email',
'class="pictofixedwidth"');
1395 if (!empty($ldap_mail)) {
1396 print
'<input type="hidden" name="email" value="'.dol_escape_htmltag($ldap_mail).
'">';
1399 print
'<input type="text" name="email" class="maxwidth500 widthcentpercentminusx" value="'.dol_escape_htmltag(
GETPOST(
'email',
'alphanohtml')).
'" spellcheck="false">';
1405 foreach ($socialnetworks as $key => $value) {
1406 if ($value[
'active']) {
1407 print
'<tr><td>'.$langs->trans($value[
'label']).
'</td>';
1409 if (!empty($value[
'icon'])) {
1410 print
'<span class="fab '.$value[
'icon'].
' pictofixedwidth"></span>';
1412 if (!empty($ldap_social[$key])) {
1413 print
'<input type="hidden" name="'.$key.
'" value="'.$ldap_social[$key].
'">';
1414 print $ldap_social[$key];
1416 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="'.$key.
'" value="'.
GETPOST($key,
'alphanohtml').
'">';
1421 if (!empty($ldap_social[$key])) {
1422 print
'<input type="hidden" name="'.$key.
'" value="'.$ldap_social[$key].
'">';
1424 print
'<input type="hidden" name="'.$key.
'" value="'.
GETPOST($key,
'alphanohtml').
'">';
1432 print
'<tr><td>'.$langs->trans(
"AccountancyCode").
'</td>';
1434 print
'<input type="text" class="maxwidthonsmartphone" name="accountancy_code" value="'.dol_escape_htmltag(
GETPOST(
'accountancy_code',
'alphanohtml')).
'">';
1440 print
'<tr><td>'.$langs->trans(
"Color").
'</td>';
1442 print $formother->selectColor(GETPOSTISSET(
'color') ?
GETPOST(
'color',
'alphanohtml') :
$object->color,
'color', null, 1, array(),
'hideifnotset');
1447 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
1448 print
'<tr><td>'.$form->editfieldkey(
'Categories',
'usercats',
'', $object, 0).
'</td><td>';
1449 print $form->selectCategories(Categorie::TYPE_USER,
'usercats', $object);
1455 print
'<tr><td>'.$form->editfieldkey(
'DefaultLang',
'default_lang',
'', $object, 0,
'string',
'', 0, 0,
'id', $langs->trans(
"WarningNotLangOfInterface", $langs->transnoentitiesnoconv(
"UserGUISetup"))).
'</td>';
1456 print
'<td class="maxwidthonsmartphone">'.
"\n";
1457 print
img_picto(
'',
'language',
'class="pictofixedwidth"').$formadmin->select_language(
GETPOST(
'default_lang',
'alpha') ?
GETPOST(
'default_lang',
'alpha') : (
$object->lang ?
$object->lang :
''),
'default_lang', 0, array(), 1, 0, 0,
'maxwidth300 widthcentpercentminusx');
1463 if (
isModEnabled(
'multicompany') && isset($mc) && is_object($mc)) {
1465 if (!method_exists($mc,
'formObjectOptions')) {
1466 if (!
getDolGlobalString(
'MULTICOMPANY_TRANSVERSE_MODE') &&
$conf->entity == 1 && $user->admin && !$user->entity) {
1467 print
"<tr>".
'<td>'.$langs->trans(
"Entity").
'</td>';
1468 print
"<td>".$mc->select_entities(
$conf->entity);
1469 print
"</td></tr>\n";
1471 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
1477 $parameters = array();
1478 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
1481 print
'<tr><td class="tdtop">'.$langs->trans(
"Signature").
'</td>';
1482 print
'<td class="wordbreak">';
1483 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1485 $doleditor =
new DolEditor(
'signature',
GETPOST(
'signature',
'restricthtml'),
'', 138,
'dolibarr_notes',
'In',
true, $acceptlocallinktomedia, !
getDolGlobalString(
'FCKEDITOR_ENABLE_USERSIGN') ? 0 : 1, ROWS_4,
'90%');
1486 print $doleditor->Create(1);
1490 print
'<tr><td class="tdtop">';
1491 print $langs->trans(
"NotePublic");
1493 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1494 $doleditor =
new DolEditor(
'note_public', GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') :
'',
'', 100,
'dolibarr_notes',
'', false, true,
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC'), ROWS_3,
'90%');
1495 $doleditor->Create();
1496 print
"</td></tr>\n";
1499 print
'<tr><td class="tdtop">';
1500 print $langs->trans(
"NotePrivate");
1502 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1503 $doleditor =
new DolEditor(
'note_private', GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') :
'',
'', 100,
'dolibarr_notes',
'', false, true,
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE'), ROWS_3,
'90%');
1504 $doleditor->Create();
1505 print
"</td></tr>\n";
1507 print
'</table><hr><table class="border centpercent">';
1514 print
'<tr><td>'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
1515 print $formproduct->selectWarehouses(
$object->fk_warehouse,
'fk_warehouse',
'warehouseopen', 1);
1520 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"PostOrFunction").
'</td>';
1522 print
'<input class="maxwidth200 maxwidth150onsmartphone" type="text" name="job" value="'.dol_escape_htmltag(
GETPOST(
'job',
'alphanohtml')).
'">';
1525 if ((
isModEnabled(
'salaries') && $user->hasRight(
"salaries",
"read") && in_array($id, $childids))
1526 || (
isModEnabled(
'salaries') && $user->hasRight(
"salaries",
"readall"))
1527 || (
isModEnabled(
'hrm') && $user->hasRight(
"hrm",
"employee",
"read"))) {
1528 $langs->load(
"salaries");
1532 $text = $langs->trans(
"THM");
1533 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
1536 print
'<input size="8" type="text" name="thm" value="'.dol_escape_htmltag(
GETPOST(
'thm')).
'"> <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
1542 $text = $langs->trans(
"TJM");
1543 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classtjm');
1546 print
'<input size="8" type="text" name="tjm" value="'.dol_escape_htmltag(
GETPOST(
'tjm')).
'"> <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
1551 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
1553 print
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<input class="width100" type="text" name="salary" value="'.
dol_escape_htmltag(
GETPOST(
'salary')).
'"> <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
1559 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
1561 print
'<input size="8" type="text" name="weeklyhours" value="'.dol_escape_htmltag(
GETPOST(
'weeklyhours')).
'">';
1566 print
'<tr><td>'.$langs->trans(
"DateOfEmployment").
'</td>';
1568 print $form->selectDate($dateemployment,
'dateemployment', 0, 0, 1,
'formdateemployment', 1, 1, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
1572 print $form->selectDate($dateemploymentend,
'dateemploymentend', 0, 0, 1,
'formdateemploymentend', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
1577 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
1579 print $form->selectDate($dateofbirth,
'dateofbirth', 0, 0, 1,
'createuser', 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzserver');
1587 print $form->buttonsSaveCancel(
"CreateUser");
1593 $res =
$object->fetch($id,
'',
'', 1);
1598 $res =
$object->fetch_optionals();
1608 $passDoNotExpire = 0;
1610 $userChangePassNextLogon = 0;
1616 $result = $ldap->connectBind();
1618 $userSearchFilter =
'(' .
getDolGlobalString(
'LDAP_FILTER_CONNECTION').
'('.$ldap->getUserIdentifier().
'='.
$object->login.
'))';
1619 $entries = $ldap->fetch(
$object->login, $userSearchFilter);
1625 if (count($ldap->uacf) > 0) {
1626 foreach ($ldap->uacf as $key => $statut) {
1627 if ($key == 65536) {
1628 $passDoNotExpire = 1;
1629 $statutUACF = $statut;
1634 $statutUACF =
"ACCOUNTDISABLE";
1637 if ($ldap->pwdlastset == 0) {
1638 $userChangePassNextLogon = 1;
1644 if ($mode ==
'employee') {
1645 $title = $langs->trans(
"Employee");
1646 $linkback =
'<a href="'.DOL_URL_ROOT.
'/hrm/employee/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
1648 $title = $langs->trans(
"User");
1651 if ($user->hasRight(
"user",
"user",
"read") || $user->admin) {
1652 $linkback =
'<a href="'.DOL_URL_ROOT.
'/user/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
1659 if ($action ==
'password') {
1660 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"ReinitPassword"), $langs->trans(
"ConfirmReinitPassword",
$object->login),
"confirm_password",
'', 0, 1);
1664 if ($action ==
'passwordsend') {
1665 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"SendNewPassword"), $langs->trans(
"ConfirmSendNewPassword",
$object->login),
"confirm_passwordsend",
'', 0, 1);
1669 if ($action ==
'disable') {
1670 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"DisableAUser"), $langs->trans(
"ConfirmDisableUser",
$object->login),
"confirm_disable",
'', 0, 1);
1674 if ($action ==
'enable') {
1675 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"EnableAUser"), $langs->trans(
"ConfirmEnableUser",
$object->login),
"confirm_enable",
'', 0, 1);
1679 if ($action ==
'delete') {
1680 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"DeleteAUser"), $langs->trans(
"ConfirmDeleteUser",
$object->login),
"confirm_delete",
'', 0, 1);
1684 if (($action ==
'clone' && (empty(
$conf->use_javascript_ajax) || !empty(
$conf->dol_use_jmobile)))
1685 || (!empty(
$conf->use_javascript_ajax) && empty(
$conf->dol_use_jmobile))) {
1687 $formquestionclone = array(
1688 'text' => $langs->trans(
"ConfirmClone"),
1689 0 => array(
'type' =>
'text',
'name' =>
'clone_name',
'label' => $langs->trans(
"NewNameUserClone"),
'morecss' =>
'width200'),
1690 1 => array(
'type' =>
'checkbox',
'name' =>
'clone_rights',
'label' => $langs->trans(
"CloneUserRights"),
'value' => 0),
1691 2 => array(
'type' =>
'checkbox',
'name' =>
'clone_categories',
'label' => $langs->trans(
"CloneCategoriesProduct"),
'value' => 0),
1694 $newElement = array(
'type' =>
'text',
'name' =>
'new_email',
'label' => $langs->trans(
"NewEmailUserClone"),
'morecss' =>
'width200');
1695 array_splice($formquestionclone, 2, 0, array($newElement));
1697 print $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmUserClone',
$object->firstname.
' '.
$object->lastname),
'confirm_clone', $formquestionclone,
'yes',
'action-clone', 350, 600);
1702 if ($action !=
'edit') {
1703 print
dol_get_fiche_head($head,
'user', $title, -1,
'user', 0,
'',
'', 0,
'', 1);
1705 $morehtmlref =
'<a href="'.dolBuildUrl(DOL_URL_ROOT.
'/user/vcard.php', [
'id' =>
$object->id,
'output' =>
'file',
'file' =>
dol_sanitizeFileName(
$object->getFullName($langs).
'.vcf')]).
'" class="refid valignmiddle" rel="noopener">';
1706 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard").
' ('.$langs->trans(
"AddToContacts").
')',
'vcard',
'class="valignmiddle marginleftonly paddingrightonly"');
1707 $morehtmlref .=
'</a>';
1709 $urltovirtualcard =
'/user/virtualcard.php?id='.((int)
$object->id);
1710 $morehtmlref .=
dolButtonToOpenUrlInDialogPopup(
'publicvirtualcard', $langs->transnoentitiesnoconv(
"PublicVirtualCardUrl").
' - '.
$object->getFullName($langs),
img_picto($langs->trans(
"PublicVirtualCardUrl"),
'card',
'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard,
'',
'refid valignmiddle nohover');
1712 dol_banner_tab($object,
'id', $linkback, $user->hasRight(
"user",
"user",
"read") || $user->admin,
'rowid',
'ref', $morehtmlref);
1714 print
'<div class="fichecenter">';
1715 print
'<div class="fichehalfleft">';
1717 print
'<div class="underbanner clearboth"></div>';
1718 print
'<table class="border tableforfield centpercent">';
1721 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
"Login").
'</td>';
1722 if (!empty(
$object->ldap_sid) &&
$object->status == User::STATUS_DISABLED) {
1723 print
'<td class="error">';
1724 print $langs->trans(
"LoginAccountDisableInDolibarr");
1730 $addadmin .=
img_picto($langs->trans(
"SuperAdministratorDesc"),
"superadmin",
'class="paddingleft valignmiddle"');
1731 } elseif (!empty(
$object->admin)) {
1732 $addadmin .=
img_picto($langs->trans(
"AdministratorDesc"),
"admin",
'class="paddingleft valignmiddle"');
1741 $text = $langs->trans(
"Type");
1742 print $form->textwithpicto($text, $langs->trans(
"InternalExternalDesc"));
1744 $type = $langs->trans(
"Internal");
1746 $type = $langs->trans(
"External");
1748 print
'<span class="badgeneutral">';
1751 print
' ('.$langs->trans(
"DomainUser").
')';
1754 print
'</td></tr>'.
"\n";
1757 if (
$object->ldap_sid && is_object($ldap)) {
1758 print
'<tr><td>'.$langs->trans(
"Type").
'</td><td>';
1759 print $langs->trans(
"DomainUser", $ldap->domainFQDN);
1760 print
'</td></tr>'.
"\n";
1764 print
'<tr><td>'.$langs->trans(
"Employee").
'</td><td>';
1766 print
'<input type="checkbox" disabled name="employee" value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
1770 print
'</td></tr>'.
"\n";
1773 if ($nbofusers > 1) {
1775 print
'<tr><td>'.$langs->trans(
"HierarchicalResponsible").
'</td>';
1777 if (empty(
$object->fk_user)) {
1778 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
1782 $huser->fetch(
$object->fk_user);
1783 print $huser->getNomUrl(-1);
1785 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
1794 $text = $langs->trans(
"ForceUserExpenseValidator");
1795 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
1798 if (!empty(
$object->fk_user_expense_validator)) {
1800 $evuser->fetch(
$object->fk_user_expense_validator);
1801 print $evuser->getNomUrl(-1);
1810 $text = $langs->trans(
"ForceUserHolidayValidator");
1811 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
1814 if (!empty(
$object->fk_user_holiday_validator)) {
1816 $hvuser->fetch(
$object->fk_user_holiday_validator);
1817 print $hvuser->getNomUrl(-1);
1825 print
'<tr><td>'.$langs->trans(
"PostOrFunction").
'</td>';
1826 print
'<td>'.dol_escape_htmltag(
$object->job).
'</td>';
1830 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
1837 if ((empty($user->socid) && in_array($id, $childids))
1838 || (
isModEnabled(
'salaries') && $user->hasRight(
"salaries",
"readall"))
1839 || (
isModEnabled(
'hrm') && $user->hasRight(
"hrm",
"employee",
"read"))) {
1840 $langs->load(
"salaries");
1843 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
1845 print(
$object->salary !=
'' ?
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<span class="amount">'.
price(
$object->salary, 0, $langs, 1, -1, -1,
$conf->currency) :
'').
'</span>';
1851 $text = $langs->trans(
"THM");
1852 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
1855 print(
$object->thm !=
'' ?
'<span class="amount">'.price(
$object->thm, 0, $langs, 1, -1, -1,
$conf->currency).
'</span>' :
'');
1861 $text = $langs->trans(
"TJM");
1862 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classtjm');
1865 print(
$object->tjm !=
'' ?
'<span class="amount">'.price(
$object->tjm, 0, $langs, 1, -1, -1,
$conf->currency).
'</span>' :
'');
1871 print
'<tr><td>'.$langs->trans(
"DateOfEmployment").
'</td>';
1873 if (
$object->dateemployment) {
1874 print
'<span class="opacitymedium">'.$langs->trans(
"FromDate").
'</span> ';
1877 if (
$object->dateemploymentend) {
1878 print
'<span class="opacitymedium"> - '.$langs->trans(
"To").
'</span> ';
1885 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
1893 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1894 print
'<tr><td>'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
1895 if (
$object->fk_warehouse > 0) {
1897 $warehousestatic->fetch(
$object->fk_warehouse);
1898 print $warehousestatic->getNomUrl(1);
1906 print
'<div class="fichehalfright">';
1908 print
'<div class="underbanner clearboth"></div>';
1910 print
'<table class="border tableforfield centpercent">';
1914 print
'<tr><td class="titlefieldmax45">'.$langs->trans(
"Color").
'</td>';
1916 print $formother->showColor(
$object->color,
'');
1922 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
1923 print
'<tr><td>'.$langs->trans(
"Categories").
'</td>';
1925 print $form->showCategories(
$object->id, Categorie::TYPE_USER, 1);
1931 $langs->load(
"languages");
1932 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1934 print $form->textwithpicto($langs->trans(
"DefaultLang"), $langs->trans(
"WarningNotLangOfInterface", $langs->transnoentitiesnoconv(
"UserGUISetup")));
1938 $labellang = (
$object->lang ? $langs->trans(
'Language_'.
$object->lang) :
'');
1944 if (isset(
$conf->file->main_authentication) && preg_match(
'/openid/',
$conf->file->main_authentication) &&
getDolGlobalString(
'MAIN_OPENIDURL_PERUSER')) {
1945 print
'<tr><td>'.$langs->trans(
"OpenIDURL").
'</td>';
1946 print
'<td>'.$object->openid.
'</td>';
1951 if (
isModEnabled(
'multicompany') && isset($mc) && is_object($mc)) {
1953 if (!method_exists($mc,
'formObjectOptions')) {
1955 print
'<tr><td>'.$langs->trans(
"Entity").
'</td><td>';
1957 print $langs->trans(
"AllEntities");
1959 $mc->getInfo(
$object->entity);
1962 print
"</td></tr>\n";
1968 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1972 print
'<tr><td>'.$langs->trans(
"LinkToCompanyContact").
'</td>';
1977 $societe->fetch(
$object->socid);
1978 if ($societe->id > 0) {
1979 $s .= $societe->getNomUrl(1,
'');
1982 $s .=
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"ThisUserIsNot").
'</span>';
1984 if (!empty(
$object->contact_id)) {
1986 $contact->fetch(
$object->contact_id);
1987 if ($contact->id > 0) {
1988 if (
$object->socid > 0 && $s) {
1993 $s .= $contact->getNomUrl(1,
'');
2003 $langs->load(
"members");
2004 print
'<tr><td>'.$langs->trans(
"LinkedToDolibarrMember").
'</td>';
2008 $adh->fetch(
$object->fk_member);
2009 $adh->ref = $adh->getFullname($langs);
2010 print $adh->getNomUrl(-1);
2012 print
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"UserNotLinkedToMember").
'</span>';
2019 print
'<tr><td class="tdtop">'.$langs->trans(
'Signature').
'</td><td class="wordbreak">';
2021 print
"</td></tr>\n";
2032 print
'<!-- credential section -->'.
"\n";
2033 print
'<div class="div-table-responsive-no-min">';
2034 print
'<table class="noborder tableforfield centpercent">';
2037 print
'<tr class="liste_titre"><th class="liste_titre" colspan="2">';
2038 print
'<div class="centpercent display-flex">';
2039 print
'<div class="left inline-block">';
2040 print
img_picto(
'',
'security',
'class="paddingleft pictofixedwidth"').$langs->trans(
"SecurityForConnection");
2047 print
'<tr class="nooddeven"><td class="titlefieldmax45 nowraponall">'.$langs->trans(
"RangeOfLoginValidity").
'</td>';
2049 if (
$object->datestartvalidity) {
2050 print
'<span class="opacitymedium">'.$langs->trans(
"FromDate").
'</span> ';
2053 if (
$object->dateendvalidity) {
2054 print
'<span class="opacitymedium"> - '.$langs->trans(
"To").
'</span> ';
2061 if ($_SESSION[
"dol_authmode"] ==
'dolibarr') {
2062 print
'<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans(
"PasswordToChange"), $langs->trans(
"ForcePasswordChange")).
'</td>';
2064 $permissiontoselfeditpassword =
$object->hasRight(
'user',
'self',
'password');
2065 if ($permissiontoselfeditpassword) {
2067 print
'<input type="checkbox" class="colorgrey" disabled name="forcepasswordchange" value="1"'.($object->force_pass_change ?
' checked="checked"' :
'').
'>';
2069 print
'<span class="opacitymedium">'.yn(
$object->force_pass_change).
'</span>';
2072 print
'<span class="opacitymedium">'.yn(
$object->force_pass_change).
'</span>';
2075 print
'<input type="checkbox" name="forcepasswordchange" value="1" disabled class="valignmiddle">';
2076 print $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"No").
'</span>', $langs->trans(
"UserDoesNotHaveRightsToChangeHisPassword"));
2085 if (preg_match(
'/ldap/', $dolibarr_main_authentication)) {
2086 if (!empty(
$object->ldap_sid)) {
2087 if ($passDoNotExpire) {
2088 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"LdapUacf_".$statutUACF);
2089 } elseif ($userChangePassNextLogon) {
2090 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').
'<span class="warning">'.$langs->trans(
"UserMustChangePassNextLogon", $ldap->domainFQDN).
'</span>';
2091 } elseif ($userDisabled) {
2092 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').
'<span class="warning">'.$langs->trans(
"LdapUacf_".$statutUACF, $ldap->domainFQDN).
'</span>';
2094 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2097 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2100 if (preg_match(
'/http/', $dolibarr_main_authentication)) {
2101 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"HTTPBasicPassword");
2105 $parameters = array(
'valuetoshow' => $valuetoshow,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2106 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
2108 $valuetoshow = $hookmanager->resPrint;
2110 $valuetoshow .= $hookmanager->resPrint;
2114 print
'<tr class="nooddeven"><td class="titlefieldmiddle">'.$langs->trans(
"Password").
'</td>';
2115 print
'<td class="wordbreak">';
2122 if (
getDolGlobalString(
'MAIN_SECURITY_ALLOW_TOTP') && $permissiontoeditpasswordandsee) {
2123 print
'<tr class="nooddeven"><td>'.$langs->trans(
"2FA").
'</td>';
2125 print
'<div class="centpercent display-flex">';
2126 print
'<span class="badge badge-info">999</span>';
2127 print
'<div class="left inline-block">';
2128 $s =
'<!-- MAIN_SECURITY_ALLOW_TOTP --><span class="fa fa-pen valignmiddle btnTitle-icon"></span>';
2130 print
'</span></span>';
2135 $tmparrayofauthmode = explode(
',', $dolibarr_main_authentication);
2136 foreach ($tmparrayofauthmode as $tmpauthmode) {
2137 $langs->load(
"oauth");
2139 $tmpauthmode = trim($tmpauthmode);
2140 if (preg_match(
'/oauth/', $tmpauthmode)) {
2141 $nameofservice = preg_replace(
'/oauth/',
'', $tmpauthmode);
2142 print
'<tr class="nooddeven">';
2143 print
'<td class="titlefieldmiddle">'.$langs->trans(
"OAUTH_ID");
2144 print
' '.ucfirst($nameofservice).
' ';
2147 $constoauthlogin =
'OAUTH_'.strtoupper($nameofservice).
'-Login_ID';
2148 print
'<td class="tdoverflowmax200" title="'.dolPrintHTMLForAttribute(
getDolGlobalString($constoauthlogin)).
'">';
2156 if (!empty(
$object->email_oauth2)) {
2157 print
'<tr class="nooddeven"><td class="titlefieldmiddle">'.$langs->trans(
"AlternativeEmailForOAuth2").
'</td>';
2167 if (
isModEnabled(
'api') && ($user->id == $id || $user->admin || $user->hasRight(
"api",
"apikey",
"generate"))) {
2168 print
'<tr class="nooddeven"><td>'.$langs->trans(
"ApiKey").
'</td>';
2171 print
'<div class="centpercent display-flex">';
2172 print
'<span class="badge badge-info">999</span>';
2176 print
'<div class="left inline-block">';
2177 $s =
'<!-- API_IN_TOKEN_TABLE --><span class="fa fa-pen valignmiddle btnTitle-icon"></span>';
2182 if (!empty(
$object->api_key)) {
2183 print
'<span class="opacitymedium">';
2188 print
' <span class="badge badge-info" title="'.$langs->trans(
"TotalAPICall").
'">';
2198 print
'<tr class="nooddeven"><td>'.$langs->trans(
"LastConnexion").
'</td>';
2200 if (
$object->datepreviouslogin) {
2201 print
dol_print_date(
$object->datepreviouslogin,
"dayhour",
"tzuserrel").
' <span class="opacitymedium">('.$langs->trans(
"Previous").
')</span>, ';
2204 print
dol_print_date(
$object->datelastlogin,
"dayhour",
"tzuserrel").
' <span class="opacitymedium">('.$langs->trans(
"Currently").
')</span>';
2214 $parameters = array(
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2215 $reshook = $hookmanager->executeHooks(
'addMoreObjectBlock', $parameters, $object, $action);
2217 print $hookmanager->resPrint;
2223 print
'<div class="clearboth"></div>';
2232 print
'<div class="tabsAction">';
2234 $parameters = array();
2235 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2236 if (empty($reshook)) {
2240 'class' =>
'classfortooltip'
2244 if (empty($user->socid)) {
2245 $canSendMail =
false;
2247 $langs->load(
"mails");
2248 $canSendMail =
true;
2249 unset($params[
'attr'][
'title']);
2251 $langs->load(
"mails");
2252 $params[
'attr'][
'title'] = $langs->trans(
'NoEMail');
2254 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'presend',
'mode' =>
'init']) .
'#formmailbeforetitle',
'', $canSendMail, $params);
2259 $params[
'attr'][
'title'] = $langs->trans(
'DisabledInMonoUserMode');
2262 unset($params[
'attr'][
'title']);
2265 } elseif ($permissiontoeditpasswordandsee && !
$object->ldap_sid &&
2267 unset($params[
'attr'][
'title']);
2275 'class' =>
'classfortooltip'
2280 if ((empty(
$object->entity) && $permissiontoclonesuperadmin) || (!empty(
$object->admin) && !empty(
$object->entity) && $permissiontocloneadmin) || ($permissiontocloneuser && empty(
$object->admin) && !empty(
$object->entity))) {
2281 $cloneButtonId =
'';
2284 if (!empty(
$conf->use_javascript_ajax) && empty(
$conf->dol_use_jmobile)) {
2286 $cloneButtonId =
'action-clone';
2288 print
dolGetButtonAction($langs->trans(
'ToClone'),
'',
'default', $cloneUserUrl, $cloneButtonId, $user->hasRight(
'user',
'user',
'write'));
2292 if (
$object->status == $object::STATUS_DISABLED) {
2293 $params[
'attr'][
'title'] = $langs->trans(
'UserDisabled');
2295 } elseif (($user->id != $id && $permissiontoeditpasswordandsee) &&
$object->login && !
$object->ldap_sid &&
2297 unset($params[
'attr'][
'title']);
2298 print
dolGetButtonAction($langs->trans(
'ReinitPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=password&token='.
newToken(),
'',
true, $params);
2301 if (
$object->status == $object::STATUS_DISABLED) {
2302 $params[
'attr'][
'title'] = $langs->trans(
'UserDisabled');
2303 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2304 } elseif (($user->id != $id && $permissiontoeditpasswordandsend) &&
$object->login && !
$object->ldap_sid &&
2307 unset($params[
'attr'][
'title']);
2308 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=passwordsend&token='.
newToken(),
'',
true, $params);
2310 $params[
'attr'][
'title'] = $langs->trans(
'NoEMail');
2311 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2316 if ($user->id != $id && $permissiontodisable &&
$object->status == User::STATUS_DISABLED &&
2318 unset($params[
'attr'][
'title']);
2319 print
dolGetButtonAction($langs->trans(
'Reactivate'),
'',
'default', $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'&action=enable&token='.newToken(),
'',
true, $params);
2322 if ($user->id != $id && $permissiontodisable &&
$object->status == User::STATUS_ENABLED &&
2324 unset($params[
'attr'][
'title']);
2325 print
dolGetButtonAction($langs->trans(
'DisableUser'),
'',
'default', $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'&action=disable&token='.newToken(),
'',
true, $params);
2327 if ($user->id == $id) {
2328 $params[
'attr'][
'title'] = $langs->trans(
'CantDisableYourself');
2329 print
dolGetButtonAction($langs->trans(
'DisableUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2333 if ($user->id != $id && $permissiontodisable &&
2335 if ($user->admin || !
$object->admin) {
2336 unset($params[
'attr'][
'title']);
2337 print
dolGetButtonAction($langs->trans(
'DeleteUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&id='.
$object->id,
'',
true, $params);
2339 $params[
'attr'][
'title'] = $langs->trans(
'MustBeAdminToDeleteOtherAdmin');
2340 print
dolGetButtonAction($langs->trans(
'DeleteUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&id='.
$object->id,
'',
false, $params);
2350 if (
GETPOST(
'modelselected')) {
2351 $action =
'presend';
2355 $modelmail =
'user';
2356 $defaulttopic =
'Information';
2357 $diroutput =
$conf->user->dir_output;
2358 $trackid =
'use'.$object->id;
2360 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
2362 if ($action !=
'presend' && $action !=
'send') {
2367 if ($permissiontoreadgroup) {
2368 print
'<!-- Group section -->'.
"\n";
2376 $groupslist = $usergroup->listGroupsForUser(
$object->id,
false);
2378 if (!empty($groupslist)) {
2379 foreach ($groupslist as $groupforuser) {
2380 $exclude[] = $groupforuser->id;
2385 $parameters = array(
'caneditgroup' => $permissiontoeditgroup,
'groupslist' => $groupslist,
'exclude' => $exclude);
2386 $reshook = $hookmanager->executeHooks(
'formAddUserToGroup', $parameters, $object, $action);
2387 print $hookmanager->resPrint;
2389 if (empty($reshook)) {
2390 if ($permissiontoeditgroup) {
2391 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$id.
'" method="POST">'.
"\n";
2392 print
'<input type="hidden" name="token" value="'.newToken().
'" />';
2393 print
'<input type="hidden" name="action" value="addgroup" />';
2394 print
'<input type="hidden" name="page_y" value="" />';
2397 print
'<!-- List of groups of the user -->'.
"\n";
2398 print
'<table class="noborder centpercent">'.
"\n";
2399 print
'<tr class="liste_titre">';
2401 print
'<th class="liste_titre right" colspan="2">';
2402 if ($permissiontoeditgroup) {
2403 print $form->select_dolgroups(0,
'group', 1, $exclude, 0,
'', array(), (
string)
$object->entity,
false,
'maxwidth150');
2405 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
2406 print
'<input type="submit" class="button buttongen button-add reposition" value="'.$langs->trans(
"Add").
'" />';
2408 print
'</th></tr>'.
"\n";
2411 if (!empty($groupslist)) {
2412 foreach ($groupslist as $group) {
2413 print
'<tr class="oddeven">';
2414 print
'<td class="tdoverflowmax200">';
2415 if ($permissiontoeditgroup) {
2416 print $group->getNomUrl(1);
2418 print
img_object($langs->trans(
"ShowGroup"),
"group").
' '.$group->name;
2421 print
'<td class="right">';
2422 if ($permissiontoeditgroup) {
2423 print
'<a class="reposition" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'removegroup',
'group' => $group->id],
true).
'">';
2424 print
img_picto($langs->trans(
"RemoveFromGroup"),
'unlink');
2429 print
"</td></tr>\n";
2432 print
'<tr class="oddeven"><td colspan="2"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
2437 if ($permissiontoeditgroup) {
2449 if ($action ==
'edit' && ($permissiontoedit || $permissiontoeditpasswordandsee)) {
2450 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST" name="updateuser" enctype="multipart/form-data">';
2451 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2452 print
'<input type="hidden" name="action" value="update">';
2453 print
'<input type="hidden" name="entity" value="'.$object->entity.
'">';
2457 print
'<table class="border centpercent">';
2461 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Ref").
'</td>';
2470 print
'<td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Lastname").
'</td>';
2472 if ($permissiontoedit && !
$object->ldap_sid) {
2473 print
'<input class="minwidth100" type="text" class="flat" name="lastname" value="'.$object->lastname.
'">';
2475 print
'<input type="hidden" name="lastname" value="'.$object->lastname.
'">';
2482 print
'<tr><td>'.$langs->trans(
"Firstname").
'</td>';
2484 if ($permissiontoedit && !
$object->ldap_sid) {
2485 print
'<input class="minwidth100" type="text" class="flat" name="firstname" value="'.$object->firstname.
'">';
2487 print
'<input type="hidden" name="firstname" value="'.$object->firstname.
'">';
2493 print
"<tr>".
'<td><span class="fieldrequired">'.$langs->trans(
"Login").
'</span></td>';
2495 if ($user->admin && !
$object->ldap_sid) {
2496 print
'<input maxlength="50" type="text" class="flat" name="login" value="'.$object->login.
'" spellcheck="false">';
2498 print
'<input type="hidden" name="login" value="'.$object->login.
'">';
2505 print
'<tr><td>'.$langs->trans(
"ExternalUser").
' ?</td>';
2507 if ($user->id ==
$object->id || !$user->admin) {
2509 $type = $langs->trans(
"Internal");
2511 $type = $langs->trans(
"External");
2514 print $form->textwithpicto($type, $langs->trans(
"InternalExternalDesc"));
2516 print
' ('.$langs->trans(
"DomainUser").
')';
2525 $eventsCompanyContact = array();
2526 $eventsCompanyContact[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1&token='.
currentToken(), 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
2528 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2529 print $form->select_company(
$object->socid,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2530 print
'<span class="clearbothonsmartphone"></span>';
2531 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2532 print $form->select_contact(0, 0,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2534 print
' ('.$langs->trans(
"DomainUser").
')';
2537 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2538 print $form->select_company(
$object->socid,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2539 print
'<span class="clearbothonsmartphone"></span>';
2540 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2541 print $form->select_contact(0,
$object->contact_id,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2543 print
' ('.$langs->trans(
"DomainUser").
')';
2546 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2547 print $form->select_company(0,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2548 print
'<span class="clearbothonsmartphone"></span>';
2549 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2550 print $form->select_contact(0,
$object->contact_id,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2552 print
' ('.$langs->trans(
"DomainUser").
')';
2555 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2556 print $form->select_company(0,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2557 print
'<span class="clearbothonsmartphone"></span>';
2558 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2559 print $form->select_contact(0, 0,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2565 print
'<tr><td>'.$form->textwithpicto($langs->trans(
"Administrator"), $langs->trans(
"AdministratorDesc")).
'</td>';
2567 $langs->load(
"admin");
2569 print
'<input type="hidden" name="admin" value="'.$object->admin.
'">'.
yn(
$object->admin);
2570 print
' <span class="opacitymedium">('.$langs->trans(
"ExternalUser").
')</span>';
2574 $nbAdmin = $user->getNbOfUsers(
'active',
'', 1);
2575 $nbSuperAdmin = $user->getNbOfUsers(
'active',
'superadmin', 1);
2582 || (
isModEnabled(
'multicompany') && ((
$object->entity > 0 || ($user->entity == 0 &&
$object->entity == 0)) || $nbSuperAdmin > 1))
2585 print $form->selectyesno(
'admin',
$object->admin, 1,
false, 0, 1);
2588 if (
$conf->use_javascript_ajax) {
2589 print
'<script type="text/javascript">
2591 var admin = $("select[name=admin]").val();
2593 $("input[name=superadmin]")
2594 .prop("disabled", true)
2595 .prop("checked", false);
2597 if ($("input[name=superadmin]").is(":checked")) {
2598 $("select[name=entity]")
2599 .prop("disabled", true);
2601 $("select[name=admin]").change(function() {
2602 if ( $(this).val() == 0 ) {
2603 $("input[name=superadmin]")
2604 .prop("disabled", true)
2605 .prop("checked", false);
2606 $("select[name=entity]")
2607 .prop("disabled", false);
2609 $("input[name=superadmin]")
2610 .prop("disabled", false);
2613 $("input[name=superadmin]").change(function() {
2614 if ( $(this).is(":checked")) {
2615 $("select[name=entity]")
2616 .prop("disabled", true);
2618 $("select[name=entity]")
2619 .prop("disabled", false);
2626 $checked = ((
$object->admin && !
$object->entity) ?
' checked' :
'');
2627 print
'<input type="checkbox" name="superadmin" id="superadmin" value="1"'.$checked.
' /> <label for="superadmin">'.$langs->trans(
"SuperAdministrator").
'</span>';
2631 print
'<input type="hidden" name="admin" value="'.$object->admin.
'">';
2632 print
'<input type="hidden" name="superadmin" value="'.(empty(
$object->entity) ? 1 : 0).
'">';
2634 print $form->textwithpicto($yn, $langs->trans(
"DontDowngradeSuperAdmin"), 1,
'warning');
2644 print
'<tr><td class="titlefieldcreate"><label for="civility_code">'.$langs->trans(
"UserTitle").
'</label></td><td>';
2645 if ($permissiontoedit && !
$object->ldap_sid) {
2646 print $formcompany->select_civility(GETPOSTISSET(
"civility_code") ?
GETPOST(
"civility_code",
'aZ09') :
$object->civility_code,
'civility_code');
2647 } elseif (
$object->civility_code) {
2648 print $langs->trans(
"Civility".
$object->civility_code);
2654 print
'<tr><td>'.$langs->trans(
"Gender").
'</td>';
2656 $arraygender = array(
'man' => $langs->trans(
"Genderman"),
'woman' => $langs->trans(
"Genderwoman"),
'other' => $langs->trans(
"Genderother"));
2657 if ($permissiontoedit) {
2658 print $form->selectarray(
'gender', $arraygender, GETPOSTISSET(
'gender') ?
GETPOST(
'gender') :
$object->gender, 1);
2660 print $arraygender[
$object->gender];
2666 print
'<td>'.$form->editfieldkey(
'Employee',
'employee',
'', $object, 0).
'</td><td>';
2667 if ($permissiontoedit) {
2668 print
'<input type="checkbox" name="employee" value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
2671 print
'<input type="checkbox" name="employee" disabled value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
2680 if ($nbofusers > 1) {
2682 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"HierarchicalResponsible").
'</td>';
2684 if ($permissiontoedit) {
2685 print
img_picto(
'',
'user',
'class="pictofixedwidth"').$form->select_dolusers(GETPOSTISSET(
'fk_user') ?
GETPOSTINT(
'fk_user') :
$object->fk_user,
'fk_user', 1, array(
$object->id), 0,
'',
'', (
string)
$object->entity, 0, 0,
'', 0,
'',
'widthcentpercentminusx maxwidth300');
2687 print
'<input type="hidden" name="fk_user" value="'.$object->fk_user.
'">';
2689 $huser->fetch(
$object->fk_user);
2690 print $huser->getNomUrl(-1);
2697 print
'<tr><td class="titlefieldcreate">';
2698 $text = $langs->trans(
"ForceUserExpenseValidator");
2699 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
2702 if ($permissiontoedit) {
2703 print
img_picto(
'',
'user',
'class="pictofixedwidth"').$form->select_dolusers(
$object->fk_user_expense_validator,
'fk_user_expense_validator', 1, array(
$object->id), 0,
'',
'', (
string)
$object->entity, 0, 0,
'', 0,
'',
'widthcentpercentminusx maxwidth300');
2705 print
'<input type="hidden" name="fk_user_expense_validator" value="'.$object->fk_user_expense_validator.
'">';
2707 $evuser->fetch(
$object->fk_user_expense_validator);
2708 print $evuser->getNomUrl(-1);
2716 print
'<tr><td class="titlefieldcreate">';
2717 $text = $langs->trans(
"ForceUserHolidayValidator");
2718 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
2721 if ($permissiontoedit) {
2722 print
img_picto(
'',
'user',
'class="pictofixedwidth"').$form->select_dolusers(
$object->fk_user_holiday_validator,
'fk_user_holiday_validator', 1, array(
$object->id), 0,
'',
'', (
string)
$object->entity, 0, 0,
'', 0,
'',
'widthcentpercentminusx maxwidth300');
2724 print
'<input type="hidden" name="fk_user_holiday_validator" value="'.$object->fk_user_holiday_validator.
'">';
2726 $hvuser->fetch(
$object->fk_user_holiday_validator);
2727 print $hvuser->getNomUrl(-1);
2738 print
'<table class="border centpercent">';
2741 print
'<tr><td>'.$langs->trans(
"RangeOfLoginValidity").
'</td>';
2743 if ($permissiontoedit) {
2744 print $form->selectDate($datestartvalidity ? $datestartvalidity :
$object->datestartvalidity,
'datestartvalidity', 0, 0, 1,
'formdatestartvalidity', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
2750 if ($permissiontoedit) {
2751 print $form->selectDate($dateendvalidity ? $dateendvalidity :
$object->dateendvalidity,
'dateendvalidity', 0, 0, 1,
'formdateendvalidity', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
2760 if ($_SESSION[
"dol_authmode"] ==
'dolibarr') {
2762 print
'<td>'.$form->editfieldkey($form->textwithpicto($langs->trans(
"PasswordToChange"), $langs->trans(
"ForcePasswordChange")),
'forcepasswordchange',
'', $object, 0).
'</td><td>';
2763 $permissiontoselfeditpassword =
$object->hasRight(
'user',
'self',
'password');
2764 if ($permissiontoselfeditpassword) {
2765 if ($permissiontoedit) {
2766 print
'<input type="checkbox" name="forcepasswordchange" id="forcepasswordchange" value="1"'.($object->force_pass_change ?
' checked="checked"' :
'').
'>';
2767 print
'<label class="opacitylow" for="forcepasswordchange">'.$langs->trans(
"AtNextLogin").
'</label>';
2769 print
'<input type="checkbox" name="forcepasswordchange" class="colorgrey" disabled value="1"'.($object->force_pass_change ?
' checked="checked"' :
'').
'>';
2770 print $langs->trans(
"AtNextLogin");
2773 print
'<input type="checkbox" name="forcepasswordchange" value="1" class="colorgrey" disabled>';
2774 print
'<span class="opacitymedium">'.$langs->trans(
"UserDoesNotHaveRightsToChangeHisPassword").
'</span>';
2781 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Password").
'</td>';
2784 if (preg_match(
'/ldap/', $dolibarr_main_authentication)) {
2785 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2787 if (preg_match(
'/http/', $dolibarr_main_authentication)) {
2788 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$form->textwithpicto((
string) $text, $langs->trans(
"DolibarrInHttpAuthenticationSoPasswordUseless", (
string) $dolibarr_main_authentication), 1,
'warning');
2790 if (preg_match(
'/dolibarr/', $dolibarr_main_authentication) || preg_match(
'/forceuser/', $dolibarr_main_authentication)) {
2791 if ($permissiontoeditpasswordandsee) {
2792 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').
'<input maxlength="128" type="password" class="minwidth300 maxwidth400 widthcentpercentminusx" id="password" name="password" value="'.
dol_escape_htmltag(
$object->pass).
'" autocomplete="new-password" spellcheck="false">';
2793 if (!empty(
$conf->use_javascript_ajax)) {
2794 $valuetoshow .=
img_picto((
getDolGlobalString(
'USER_PASSWORD_GENERATED') ===
'none' ? $langs->transnoentities(
'NoPasswordGenerationRuleConfigured') : $langs->transnoentities(
'Generate')),
'refresh',
'id="generate_password" class="paddingleft'.(
getDolGlobalString(
'USER_PASSWORD_GENERATED') ===
'none' ?
' opacitymedium' :
' linkobject').
'"');
2797 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').preg_replace(
'/./i',
'*',
$object->pass);
2801 $parameters = array(
'valuetoshow' => $valuetoshow,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2802 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
2804 $valuetoshow = $hookmanager->resPrint;
2806 $valuetoshow .= $hookmanager->resPrint;
2810 print
"</td></tr>\n";
2815 print
'<tr><td>'.$langs->trans(
"ApiKey").
'</td>';
2817 if ($permissiontoeditpasswordandsee || $user->hasRight(
"api",
"apikey",
"generate")) {
2818 print
'<input class="minwidth300 maxwidth400 widthcentpercentminusx" minlength="12" maxlength="128" type="text" id="api_key" name="api_key" value="'.$object->api_key.
'" autocomplete="off" spellcheck="false">';
2819 if (!empty(
$conf->use_javascript_ajax)) {
2820 print
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_api_key" class="linkobject paddingleft"');
2828 if (isset(
$conf->file->main_authentication) && preg_match(
'/openid/',
$conf->file->main_authentication) &&
getDolGlobalString(
'MAIN_OPENIDURL_PERUSER')) {
2829 print
"<tr>".
'<td>'.$langs->trans(
"OpenIDURL").
'</td>';
2831 if ($permissiontoedit) {
2832 print
'<input class="minwidth100" type="url" name="openid" class="flat" value="'.$object->openid.
'">';
2834 print
'<input type="hidden" name="openid" value="'.$object->openid.
'">';
2840 print
'</table><hr><table class="border centpercent">';
2844 print
'<tr><td class="tdtop titlefieldcreate">'.$form->editfieldkey(
'Address',
'address',
'', $object, 0).
'</td>';
2846 if ($permissiontoedit) {
2847 print
'<textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
2850 if ($permissiontoedit) {
2851 print
'</textarea>';
2856 print
'<tr><td>'.$form->editfieldkey(
'Zip',
'zipcode',
'', $object, 0).
'</td><td>';
2857 if ($permissiontoedit) {
2858 print $formcompany->select_ziptown((GETPOSTISSET(
'zipcode') ?
GETPOST(
'zipcode') :
$object->zip),
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6);
2865 print
'<tr><td>'.$form->editfieldkey(
'Town',
'town',
'', $object, 0).
'</td><td>';
2866 if ($permissiontoedit) {
2867 print $formcompany->select_ziptown((GETPOSTISSET(
'town') ?
GETPOST(
'town') :
$object->town),
'town', array(
'zipcode',
'selectcountry_id',
'state_id'));
2874 print
'<tr><td>'.$form->editfieldkey(
'Country',
'selectcountry_id',
'', $object, 0).
'</td><td>';
2875 print
img_picto(
'',
'country',
'class="pictofixedwidth"');
2876 if ($permissiontoedit) {
2877 print $form->select_country((
GETPOST(
'country_id') !=
'' ?
GETPOST(
'country_id') :
$object->country_id),
'country_id');
2879 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
2883 print $countrylabel;
2889 print
'<tr><td class="tdoverflow">'.$form->editfieldkey(
'State',
'state_id',
'', $object, 0).
'</td><td>';
2890 if ($permissiontoedit) {
2891 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
2892 print $formcompany->select_state_ajax(
'country_id',
$object->state_id,
$object->country_id,
'state_id');
2900 print
"<tr>".
'<td>'.$langs->trans(
"PhonePro").
'</td>';
2902 print
img_picto(
'',
'phoning',
'class="pictofixedwidth"');
2903 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2904 print
'<input type="text" name="office_phone" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->office_phone.
'">';
2906 print
'<input type="hidden" name="office_phone" value="'.$object->office_phone.
'">';
2912 print
"<tr>".
'<td>'.$langs->trans(
"PhoneMobile").
'</td>';
2914 print
img_picto(
'',
'phoning_mobile',
'class="pictofixedwidth"');
2915 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2916 print
'<input type="text" name="user_mobile" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->user_mobile.
'" spellcheck="false">';
2918 print
'<input type="hidden" name="user_mobile" value="'.$object->user_mobile.
'">';
2924 print
"<tr>".
'<td>'.$langs->trans(
"Fax").
'</td>';
2926 print
img_picto(
'',
'phoning_fax',
'class="pictofixedwidth"');
2927 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2928 print
'<input type="text" name="office_fax" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->office_fax.
'">';
2930 print
'<input type="hidden" name="office_fax" value="'.$object->office_fax.
'">';
2936 print
"<tr>".
'<td'.(
getDolGlobalString(
'USER_MAIL_REQUIRED') ?
' class="fieldrequired"' :
'').
'>'.$langs->trans(
"EMail").
'</td>';
2938 print
img_picto(
'',
'object_email',
'class="pictofixedwidth"');
2939 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2940 print
'<input class="minwidth100 maxwidth500 widthcentpercentminusx" type="text" name="email" class="flat" value="'.$object->email.
'">';
2942 print
'<input type="hidden" name="email" value="'.$object->email.
'">';
2948 foreach ($socialnetworks as $key => $value) {
2949 if ($value[
'active']) {
2950 print
'<tr><td>'.$langs->trans($value[
'label']).
'</td>';
2952 if (!empty($value[
'icon'])) {
2953 print
'<span class="fab '.$value[
'icon'].
' pictofixedwidth"></span>';
2955 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2956 print
'<input type="text" name="'.$key.
'" class="flat maxwidth200 widthcentpercentminusx" value="'.(isset(
$object->socialnetworks[$key]) ?
$object->socialnetworks[$key] :
'').
'">';
2958 print
'<input type="hidden" name="'.$key.
'" value="'.
$object->socialnetworks[$key].
'">';
2959 print
$object->socialnetworks[$key];
2964 print
'<input type="hidden" name="'.$key.
'" value="'.(isset(
$object->socialnetworks[$key]) ?
$object->socialnetworks[$key] :
'').
'">';
2969 print
'</table><hr><table class="border centpercent">';
2973 print
'<tr><td class="titlefield">'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
2974 print $formproduct->selectWarehouses(
$object->fk_warehouse,
'fk_warehouse',
'warehouseopen', 1);
2975 print
' <a href="'.DOL_URL_ROOT.
'/product/stock/card.php?action=create&token='.
newToken().
'&backtopage='.urlencode($_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=edit&token='.
newToken()).
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddWarehouse").
'"></span></a>';
2982 print
'<td class="titlefieldcreate">'.$langs->trans(
"AccountancyCode").
'</td>';
2984 if ($permissiontoedit) {
2985 print
'<input type="text" class="flat maxwidth300" name="accountancy_code" value="'.$object->accountancy_code.
'">';
2987 print
'<input type="hidden" name="accountancy_code" value="'.$object->accountancy_code.
'">';
2988 print
$object->accountancy_code;
2996 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"ColorUser").
'</td>';
2998 if ($permissiontoedit) {
2999 print $formother->selectColor(GETPOSTISSET(
'color') ?
GETPOST(
'color',
'alphanohtml') :
$object->color,
'color', null, 1, array(),
'hideifnotset');
3001 print $formother->showColor(
$object->color,
'');
3008 print
'<td class="titlefieldcreate">'.$langs->trans(
"Photo").
'</td>';
3010 print $form->showphoto(
'userphoto', $object, 60, 0, (
int) $permissiontoedit,
'photowithmargin',
'small', 1, 0,
'user', 1);
3015 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
3016 print
'<tr><td>'.$form->editfieldkey(
'Categories',
'usercats',
'', $object, 0).
'</td>';
3018 if ($permissiontoedit) {
3019 print $form->selectCategories(Categorie::TYPE_USER,
'usercats', $object);
3021 print $form->showCategories(
$object->id, Categorie::TYPE_USER, 1);
3028 print
'<tr><td>'.$form->editfieldkey(
'DefaultLang',
'default_lang',
'', $object, 0,
'string',
'', 0, 0,
'id', $langs->trans(
"WarningNotLangOfInterface", $langs->transnoentitiesnoconv(
"UserGUISetup"))).
'</td><td colspan="3">'.
"\n";
3029 print
img_picto(
'',
'language',
'class="pictofixedwidth"').$formadmin->select_language(
$object->lang,
'default_lang', 0, array(),
'1', 0, 0,
'widthcentpercentminusx maxwidth300');
3035 print
'<tr><td>'.$langs->trans(
"Status").
'</td>';
3037 print
$object->getLibStatut(4);
3065 $langs->load(
"members");
3066 print
'<tr><td>'.$langs->trans(
"LinkedToDolibarrMember").
'</td>';
3070 $adh->fetch(
$object->fk_member);
3071 $adh->ref = $adh->login;
3072 print $adh->getNomUrl(1);
3074 print
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"UserNotLinkedToMember").
'</span>';
3082 if (
isModEnabled(
'multicompany') && isset($mc) && is_object($mc)) {
3084 if (!method_exists($mc,
'formObjectOptions')) {
3085 if (empty(
$conf->multicompany->transverse_mode) &&
$conf->entity == 1 && $user->admin && !$user->entity) {
3086 print
"<tr>".
'<td>'.$langs->trans(
"Entity").
'</td>';
3087 print
"<td>".$mc->select_entities(
$object->entity,
'entity',
'',
false,
true,
false,
false,
true);
3088 print
"</td></tr>\n";
3090 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
3096 $parameters = array(
'colspan' =>
' colspan="2"');
3098 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
3099 print $hookmanager->resPrint;
3100 if (empty($reshook)) {
3101 if ($permissiontoedit) {
3102 print
$object->showOptionals($extrafields,
'edit');
3104 print
$object->showOptionals($extrafields,
'view');
3109 print
'<tr><td class="tdtop">'.$langs->trans(
"Signature").
'</td>';
3111 if ($permissiontoedit) {
3112 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
3114 $doleditor =
new DolEditor(
'signature',
$object->signature,
'', 138,
'dolibarr_notes',
'In',
false, $acceptlocallinktomedia, !
getDolGlobalString(
'FCKEDITOR_ENABLE_USERSIGN') ? 0 : 1, ROWS_4,
'90%');
3115 print $doleditor->Create(1);
3127 print
'<table class="border centpercent">';
3133 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"PostOrFunction").
'</td>';
3135 if ($permissiontoedit) {
3136 print
'<input type="text" class="minwidth300 maxwidth500" name="job" value="'.dol_escape_htmltag(
$object->job).
'">';
3138 print
'<input type="hidden" name="job" value="'.dol_escape_htmltag(
$object->job).
'">';
3144 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
3146 if ($permissiontoedit) {
3147 print
'<input size="8" type="text" name="weeklyhours" value="'.price2num(
GETPOST(
'weeklyhours') ?
GETPOST(
'weeklyhours') :
$object->weeklyhours).
'">';
3155 if ((empty($user->socid) && in_array($id, $childids))
3156 || (
isModEnabled(
'salaries') && $user->hasRight(
"salaries",
"readall"))
3157 || (
isModEnabled(
'hrm') && $user->hasRight(
"hrm",
"employee",
"read"))) {
3158 $langs->load(
"salaries");
3161 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
3163 print
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<input size="8" type="text" name="salary" value="'.
price2num(
GETPOST(
'salary') ?
GETPOST(
'salary') :
$object->salary).
'">';
3164 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3170 $text = $langs->trans(
"THM");
3171 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
3174 if ($permissiontoedit) {
3175 print
'<input size="8" type="text" name="thm" value="'.price2num(
GETPOST(
'thm') ?
GETPOST(
'thm') :
$object->thm).
'">';
3176 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3185 $text = $langs->trans(
"TJM");
3186 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classthm');
3189 if ($permissiontoedit) {
3190 print
'<input size="8" type="text" name="tjm" value="'.price2num(
GETPOST(
'tjm') ?
GETPOST(
'tjm') :
$object->tjm).
'">';
3191 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3200 print
'<tr><td>'.$langs->trans(
"DateEmployment").
'</td>';
3202 if ($permissiontoedit) {
3203 print $form->selectDate($dateemployment ? $dateemployment :
$object->dateemployment,
'dateemployment', 0, 0, 1,
'formdateemployment', 1, 1, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
3208 if ($dateemployment && $dateemploymentend) {
3212 if ($permissiontoedit) {
3213 print $form->selectDate($dateemploymentend ? $dateemploymentend :
$object->dateemploymentend,
'dateemploymentend', 0, 0, 1,
'formdateemploymentend', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
3221 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
3223 if ($permissiontoedit) {
3224 echo $form->selectDate($dateofbirth ? $dateofbirth :
$object->birth,
'dateofbirth', 0, 0, 1,
'updateuser', 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzserver');
3235 print
'<div class="center">';
3236 print
'<input value="'.$langs->trans(
"Save").
'" class="button button-save" type="submit" name="save">';
3237 print
' ';
3238 print
'<input value="'.$langs->trans(
"Cancel").
'" class="button button-cancel" type="submit" name="cancel">';
3244 if ($action !=
'edit' && $action !=
'presend') {
3245 print
'<div class="fichecenter"><div class="fichehalfleft">';
3250 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
3251 $genallowed = $user->hasRight(
"user",
"user",
"read");
3252 $delallowed = $user->hasRight(
"user",
"user",
"write");
3257 $societe->fetch(
$object->socid);
3262 print $formfile->showdocuments(
'user', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 0, 0, 0, 28, 0,
'',
'',
'', !is_object($societe) || empty($societe->default_lang) ?
'' : $societe->default_lang);
3263 $somethingshown = $formfile->numoffiles;
3267 $morehtmlcenter =
'<div class="nowraponall">';
3268 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/user/messaging.php?id='.
$object->id);
3269 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/user/agenda.php?id='.
$object->id);
3270 $morehtmlcenter .=
'</div>';
3272 print
'</div><div class="fichehalfright">';
3275 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
3277 $somethingshown = $formactions->showactions($object,
'user', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter,
$object->id);
3279 print
'</div></div>';
3289include_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
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.
Class to manage members of a foundation.
Class to manage a WYSIWYG editor.
Class to manage warehouses.
Class to manage LDAP features.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage user groups.
Class to manage Dolibarr users.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
addFileIntoDatabaseIndex($dir, $file, $fullpathorig='', $mode='uploaded', $setsharekey=0, $object=null, $forceFullTextIndexation='')
Add a file into database index.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0, $level=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disablevirusscan=0, $uploaderrorcode=0, $nohook=0, $keyforsourcefile='addedfile', $upload_dir='', $mode=0)
Check validity of a file upload from an GUI page, and move it to its final destination.
deleteFilesIntoDatabaseIndex($dir, $file, $mode='uploaded', $object=null)
Delete files into database index using search criteria.
acceptLocalLinktoMedia()
Check the syntax of some PHP code.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
dol_print_email($email, $contactid=0, $socid=0, $addlink=0, $max=0, $showinvalid=2, $withpicto=0, $morecss='paddingrightonly')
Show EMail link formatted for HTML output.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
picto_from_langcode($codelang, $moreatt='', $notitlealt=0)
Return img flag of country for a language code or country code.
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, $allowothertags=array())
Show picto whatever it's its name (generic function)
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='')
Show information in HTML for admin users or standard users.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
getDolUserInt($key, $default=0, $tmpuser=null)
Return Dolibarr user constant int value.
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_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolButtonToOpenUrlInDialogPopup($name, $label, $buttonstring, $url, $disabled='', $morecss='classlink button bordertransp', $jsonopen='', $jsonclose='', $accesskey='')
Return HTML code to output a button to open a dialog popup box.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
currentToken()
Return the value of token currently saved into session with name 'token'.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_escape_js($stringtoescape, $mode=0, $noescapebackslashn=0)
Returns text escaped for inclusion into JavaScript code.
dol_set_focus($selector)
Set focus onto field with selector (similar behaviour of 'autofocus' HTML5 tag)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
yn($yesno, $format=1, $color=0)
Return yes or no in current language.
getArrayOfSocialNetworks()
Get array of social network dictionary.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
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...
treeview li table
No Email.
div refaddress div address
image_format_supported($file, $acceptsvg=0)
Return if a filename is file name of a supported image format.
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
$conf db user
Active Directory does not allow anonymous connections.
if(preg_match('/(crypted|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
'integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]',...
$conf db name
Only used if Module[ID]Name translation string is not found.
dolJSToSetRandomPassword($htmlname, $htmlnameofbutton='generate_token', $generic=1)
Output javascript to autoset a generated password using default module into a HTML element.
getRandomPassword($generic=false, $replaceambiguouschars=null, $length=32)
Return a generated password using default module.
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.
dol_verifyHash($chain, $hash, $type='0')
Compute a hash and compare it to the given one For backward compatibility reasons,...
user_prepare_head(User $object)
Prepare array with list of tabs.