40require
'../main.inc.php';
51require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
52require_once DOL_DOCUMENT_ROOT.
'/user/class/usergroup.class.php';
53require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
57require_once DOL_DOCUMENT_ROOT.
'/core/lib/usergroups.lib.php';
58require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.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');
90if (empty($id) && $action !=
'add' && $action !=
'create') {
100$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);
169$permissiontoseesalary = (empty($user->socid) && (
170 (
isModEnabled(
'salaries') && $user->hasRight(
"salaries",
"read") && (
$id == 0 || in_array($id, $childids)))
171 || (
isModEnabled(
'salaries') && $user->hasRight(
"salaries",
"readall"))
172 || (
isModEnabled(
'hrm') && $user->hasRight(
"hrm",
"employee",
"read")))
175$passwordismodified =
false;
183$parameters = array(
'id' => $id,
'socid' => $socid,
'group' => $group,
'caneditgroup' => $permissiontoeditgroup);
184$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
189if (empty($reshook)) {
190 $backurlforlist = DOL_URL_ROOT.
'/user/list.php';
192 if (empty($backtopage) || ($cancel && empty($id))) {
193 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
194 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
195 $backtopage = $backurlforlist;
197 $backtopage = DOL_URL_ROOT.
'/user/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
203 if (!empty($backtopageforcancel)) {
204 header(
"Location: ".$backtopageforcancel);
206 } elseif (!empty($backtopage)) {
207 header(
"Location: ".$backtopage);
213 if ($action ==
'confirm_disable' && $confirm ==
"yes" && $permissiontodisable) {
214 if ($id != $user->id) {
216 if (
$object->admin && empty($user->admin)) {
219 setEventMessages($langs->trans(
"OnlyAdminUsersCanDisableAdminUsers"),
null,
'errors');
222 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
228 if ($action ==
'confirm_enable' && $confirm ==
"yes" && $permissiontodisable) {
231 if ($id != $user->id) {
234 if (!empty($conf->file->main_limit_users)) {
235 $nb =
$object->getNbOfUsers(
"active");
236 if ($nb >= $conf->file->main_limit_users) {
238 setEventMessages($langs->trans(
"YourQuotaOfUsersIsReached"),
null,
'errors');
244 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
250 if ($action ==
'confirm_delete' && $confirm ==
"yes" && $permissiontodisable) {
251 if ($id != $user->id) {
252 if (!GETPOSTISSET(
'token')) {
253 print
'Error, token required for this critical operation';
260 if (
$object->admin && empty($user->admin)) {
263 setEventMessages($langs->trans(
"OnlyAdminUsersCanDeleteAdminUsers"),
null,
'errors');
267 $result =
$object->delete($user);
269 $langs->load(
"errors");
273 header(
"Location: ".DOL_URL_ROOT.
"/user/list.php?restore_lastsearch_values=1");
281 if ($action ==
'add' && $permissiontoadd) {
295 if (!empty($conf->file->main_limit_users)) {
296 $nb =
$object->getNbOfUsers(
"active");
297 if ($nb >= $conf->file->main_limit_users) {
299 setEventMessages($langs->trans(
"YourQuotaOfUsersIsReached"),
null,
'errors');
309 $object->national_registration_number =
GETPOST(
"national_registration_number",
'alphanohtml');
324 $object->socialnetworks = array();
325 foreach ($socialnetworks as $key => $value) {
326 if (
GETPOST($key,
'alphanohtml')) {
332 $object->email = preg_replace(
'/\s+/',
'',
GETPOST(
"email",
'alphanohtml'));
339 if (
$object->signature ===
'ErrorTooManyLinksIntoHTMLString') {
341 $langs->load(
"errors");
342 setEventMessages($langs->trans(
'ErrorTooManyLinksIntoHTMLString'),
null,
'errors');
345 $object->accountancy_code =
GETPOST(
"accountancy_code",
'alphanohtml');
354 if ($permissiontoseesalary) {
367 $object->color =
GETPOST(
"color",
'alphanohtml') !=
'' ? str_replace(
'#',
'', (
string)
GETPOST(
"color",
'alphanohtml')) :
'';
369 $object->dateemployment = $dateemployment;
370 $object->dateemploymentend = $dateemploymentend;
371 $object->datestartvalidity = $datestartvalidity;
372 $object->dateendvalidity = $dateendvalidity;
380 $ret = $extrafields->setOptionalsFromPost(
null, $object);
394 $object->entity = ($entity ==
'' ? 1 : $entity);
398 $object->entity = ($entity ==
'' ? 1 : $entity);
409 if (
GETPOST(
'password',
'password')) {
410 $resPass =
$object->setPassword($user,
GETPOST(
'password',
'password'));
412 if (is_int($resPass) && $resPass < 0) {
413 $langs->load(
"errors");
420 $usercats =
GETPOST(
'usercats',
'array:int');
421 $object->setCategories($usercats);
425 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
429 $langs->load(
"errors");
438 if (($action ==
'addgroup' || $action ==
'removegroup') && $permissiontoeditgroup) {
441 $editgroup->fetch($group);
442 $editgroup->oldcopy = clone $editgroup;
446 if ($action ==
'addgroup') {
447 $result =
$object->SetInGroup($group, $editgroup->entity);
449 if ($action ==
'removegroup') {
450 $result =
$object->RemoveFromGroup($group, $editgroup->entity);
461 if ($action ==
'update' && ($permissiontoedit || $permissiontoeditpasswordandsee)) {
462 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
464 if ($permissiontoedit) {
467 if (!
GETPOST(
"lastname",
'alpha')) {
472 if (!
GETPOST(
"login",
'alpha')) {
489 if (GETPOSTISSET(
"ref_employee")) {
493 if (GETPOSTISSET(
"national_registration_number")) {
494 $object->national_registration_number =
GETPOST(
"national_registration_number",
'alphanohtml');
497 if ($permissiontoeditpasswordandsee) {
500 if ($permissiontoeditpasswordandsee || $user->hasRight(
"api",
"apikey",
"generate")) {
503 if (!empty($user->admin) && $user->id != $id) {
508 if ($user->admin && !
$object->ldap_sid) {
521 $object->socialnetworks = array();
522 foreach ($socialnetworks as $key => $value) {
523 if (
GETPOST($key,
'alphanohtml')) {
529 $object->email = preg_replace(
'/\s+/',
'',
GETPOST(
"email",
'alphanohtml'));
536 if (
$object->signature ===
'ErrorTooManyLinksIntoHTMLString') {
538 $langs->load(
"errors");
539 setEventMessages($langs->trans(
'ErrorTooManyLinksIntoHTMLString'),
null,
'errors');
542 $object->accountancy_code =
GETPOST(
"accountancy_code",
'alphanohtml');
550 if ($permissiontoseesalary) {
563 $object->color =
GETPOST(
"color",
'alphanohtml') !=
'' ? str_replace(
'#',
'', (
string)
GETPOST(
"color",
'alphanohtml')) :
'';
564 $object->dateemployment = $dateemployment;
565 $object->dateemploymentend = $dateemploymentend;
566 $object->datestartvalidity = $datestartvalidity;
567 $object->dateendvalidity = $dateendvalidity;
577 if (
isModEnabled(
'multicompany') && empty($user->entity) && !empty($user->admin)) {
591 $ret = $extrafields->setOptionalsFromPost(
null, $object,
'@GETPOSTISSET');
599 if (!empty($_FILES[
'photo'][
'name'])) {
603 if (
$object->id == $user->id) {
608 $langs->load(
"errors");
610 dol_syslog($langs->transnoentities(
"ErrorBadImageFormat"), LOG_INFO);
615 $passwordismodified = 0;
618 $passwordismodified = 1;
625 if ($db->errno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
626 $langs->load(
"errors");
627 setEventMessages($langs->trans(
"ErrorUpdateCanceledDueToDuplicatedUniqueValue",
$object->login),
null,
'errors');
635 if (!$error && GETPOSTISSET(
'contactid')) {
639 if ($contactid > 0) {
641 $contact->fetch($contactid);
643 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
644 $sql .=
" SET fk_socpeople=".((int) $contactid);
645 if (!empty($contact->socid)) {
646 $sql .=
", fk_soc=".((int) $contact->socid);
647 } elseif ($socid > 0) {
648 $sql .=
", fk_soc = null";
649 setEventMessages($langs->trans(
"WarningUserDifferentContactSocid"),
null,
'warnings');
651 $sql .=
" WHERE rowid = ".((int)
$object->id);
652 } elseif ($socid > 0) {
653 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
654 $sql .=
" SET fk_socpeople=NULL, fk_soc=".((int) $socid);
655 $sql .=
" WHERE rowid = ".((int)
$object->id);
657 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
658 $sql .=
" SET fk_socpeople=NULL, fk_soc=NULL";
659 $sql .=
" WHERE rowid = ".((int)
$object->id);
662 $resql = $db->query($sql);
669 if (!$error && !count(
$object->errors)) {
671 $fileimg = $conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 0, $object,
'user').
'photos/'.
$object->oldcopy->photo;
674 $dirthumbs = $conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 0, $object,
'user').
'photos/thumbs';
678 if (isset($_FILES[
'photo'][
'tmp_name']) && trim($_FILES[
'photo'][
'tmp_name'])) {
679 $dir = $conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 1, $object,
'user').
'/photos';
686 $result =
dol_move_uploaded_file($_FILES[
'photo'][
'tmp_name'], $newfile, 1, 0, $_FILES[
'photo'][
'error']);
689 if (!is_numeric($result) || $result <= 0) {
697 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
706 $langs->load(
"errors");
707 setEventMessages($langs->trans(
"ErrorFailedToCreateDir", $dir), $mesgs,
'errors');
712 if (!$error && !count(
$object->errors)) {
714 $categories =
GETPOST(
'usercats',
'array:int');
715 $object->setCategories($categories);
718 if (!$error && !count(
$object->errors)) {
722 $login = $_SESSION[
"dol_login"];
725 $langs->load(
"errors");
726 setEventMessages($langs->transnoentitiesnoconv(
"WarningYourLoginWasModifiedPleaseLogin"),
null,
'warnings');
728 if ($passwordismodified &&
$object->login == $user->login) {
730 $langs->load(
"errors");
731 setEventMessages($langs->transnoentitiesnoconv(
"WarningYourPasswordWasModifiedPleaseLogin"),
null,
'warnings');
732 header(
"Location: ".DOL_URL_ROOT.
'/user/card.php?id='.
$object->id);
740 if ($permissiontoeditpasswordandsee) {
741 dol_syslog(
"Not allowed to change fields, only password");
745 if (
GETPOST(
"password",
"password")) {
748 $ret =
$object->setPassword($user,
GETPOST(
"password",
"password"));
749 if (is_int($ret) && $ret < 0) {
758 if ((($action ==
'confirm_password' && $confirm ==
'yes' && $permissiontoeditpasswordandsee)
759 || ($action ==
'confirm_passwordsend' && $confirm ==
'yes' && $permissiontoeditpasswordandsend))
763 $newpassword =
$object->setPassword($user,
'');
764 if (is_int($newpassword) && $newpassword < 0) {
766 setEventMessages($langs->trans(
"ErrorFailedToSetNewPassword"),
null,
'errors');
769 if ($action ==
'confirm_passwordsend') {
770 if (
$object->send_password($user, $newpassword) > 0) {
776 setEventMessages($langs->trans(
"PasswordChangedTo", $newpassword),
null,
'warnings');
782 if ($action ==
'adduserldap' && $permissiontoadd) {
783 $selecteduser =
GETPOST(
'users');
785 $required_fields = array(
802 $arrayofsocialnetworks = array(
'skype',
'twitter',
'facebook',
'linkedin');
803 foreach ($arrayofsocialnetworks as $socialnetwork) {
809 $result = $ldap->connectBind();
812 $required_fields = array_unique(array_values(array_filter($required_fields,
"dol_validElement")));
817 if (is_array($ldapusers)) {
818 foreach ($ldapusers as $key => $attribute) {
830 $ldap_social = array();
833 $arrayofsocialnetworks = array(
'skype',
'twitter',
'facebook',
'linkedin');
834 foreach ($arrayofsocialnetworks as $socialnetwork) {
835 $ldap_social[$socialnetwork] = $attribute[
getDolGlobalString(
'LDAP_FIELD_'.strtoupper($socialnetwork))];
845 if ($action ==
'confirm_clone' && $confirm !=
'yes') {
848 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontocloneuser) {
852 setEventMessages($langs->trans(
'ErrorNoCloneWithoutEmail'),
null,
'errors');
860 $clone->api_key =
'';
861 $clone->admin = ($user->admin ?
$object->admin : 0);
863 $parts = explode(
' ',
GETPOST(
'clone_name'), 2);
864 $clone->firstname = $parts[0];
865 $clone->lastname = isset($parts[1]) ? $parts[1] :
'';
867 $clone->login = substr($parts[0], 0, 1).$parts[1];
870 $clone->context[
'createfromclone'] =
'createfromclone';
871 $id = $clone->create($user);
872 $refalreadyexists = 0;
875 $result = $clone->cloneRights(
$object->id, $id);
878 if (
GETPOST(
'clone_categories')) {
879 $result = $clone->cloneCategories(
$object->id, $id);
887 if ($clone->error ==
'ErrorProductAlreadyExists') {
891 $mesg = $langs->trans(
"ErrorProductAlreadyExists", $clone->ref);
892 $mesg .=
' <a href="' . $_SERVER[
"PHP_SELF"] .
'?ref=' . $clone->ref .
'">' . $langs->trans(
"ShowCardHere") .
'</a>.';
895 setEventMessages(empty($clone->error) ?
'' : $langs->trans($clone->error), $clone->errors,
'errors');
899 unset($clone->context[
'createfromclone']);
906 header(
"Location: " . $_SERVER[
"PHP_SELF"] .
"?id=" . $id);
917 $triggersendname =
'USER_SENTBYMAIL';
919 $mode =
'emailfromuser';
920 $trackid =
'use'.$id;
921 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
924 $upload_dir = $conf->user->dir_output;
925 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
928 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
936$form =
new Form($db);
948$sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
'user WHERE entity IN ('.
getEntity(
'user').
')';
949$resql = $db->query($sql);
951 $obj = $db->fetch_object($resql);
953 $nbofusers = $obj->nb;
961 $title = $person_name.
" - ".$langs->trans(
'Card');
964 $title = $langs->trans(
"NewEmployee");
966 $title = $langs->trans(
"NewUser");
972llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-user page-card');
974if ($action ==
'create' || $action ==
'adduserldap') {
977 print
'<span class="opacitymedium">'.$langs->trans(
"CreateInternalUserDesc", $langs->transnoentities(
"CreateExternalUser")).
"</span><br>\n";
986 $result = $ldap->connectBind();
988 $required_fields = array(
1008 $required_fields = array_unique(array_values(array_filter($required_fields,
"dol_validElement")));
1013 if (is_array($ldapusers)) {
1014 foreach ($ldapusers as $key => $ldapuser) {
1017 foreach ($required_fields as $value) {
1019 $label .= $value.
"=******* ";
1021 $label .= $value.
"=".$ldapuser[$value].
" ";
1024 $liste[$key] = $label;
1034 print
"\n\n<!-- Form liste LDAP debut -->\n";
1036 print
'<form name="add_user_ldap" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1037 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1038 print
'<table class="border centpercent"><tr>';
1039 print
'<td width="160">';
1040 print $langs->trans(
"LDAPUsers");
1043 print
'<input type="hidden" name="action" value="adduserldap">';
1044 if (is_array($liste) && count($liste)) {
1045 print $form->selectarray(
'users', $liste,
'', 1, 0, 0,
'', 0, 0, 0,
'',
'maxwidth500');
1048 print
'</td><td class="center">';
1049 print
'<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans(
'Get')).
'"'.(count($liste) ?
'' :
' disabled').
'>';
1050 print
'</td></tr></table>';
1053 print
"\n<!-- Form liste LDAP fin -->\n\n";
1058 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'" method="POST" name="createuser">';
1059 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1060 print
'<input type="hidden" name="action" value="add">';
1061 if (!empty($ldap_sid)) {
1062 print
'<input type="hidden" name="ldap_sid" value="'.dol_escape_htmltag($ldap_sid).
'">';
1064 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'">';
1070 print
'<table class="border centpercent">';
1074 print
'<tr><td><label for="civility_code">'.$langs->trans(
"UserTitle").
'</label></td><td>';
1075 print $formcompany->select_civility(GETPOSTISSET(
"civility_code") ?
GETPOST(
"civility_code",
'aZ09') :
$object->civility_code,
'civility_code');
1081 print
'<td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans(
"Lastname").
'</span></td>';
1083 if (!empty($ldap_lastname)) {
1084 print
'<input type="hidden" id="lastname" name="lastname" value="'.dol_escape_htmltag($ldap_lastname).
'">';
1085 print $ldap_lastname;
1087 print
'<input class="minwidth100 maxwidth150onsmartphone createloginauto" type="text" id="lastname" name="lastname" value="'.dol_escape_htmltag(
GETPOST(
'lastname',
'alphanohtml')).
'">';
1092 print
'<tr><td>'.$langs->trans(
"Firstname").
'</td>';
1094 if (!empty($ldap_firstname)) {
1095 print
'<input type="hidden" name="firstname" value="'.dol_escape_htmltag($ldap_firstname).
'">';
1096 print $ldap_firstname;
1098 print
'<input id="firstname" class="minwidth100 maxwidth150onsmartphone createloginauto" type="text" name="firstname" value="'.dol_escape_htmltag(
GETPOST(
'firstname',
'alphanohtml')).
'">';
1103 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Login").
'</span></td>';
1105 if (!empty($ldap_login)) {
1106 print
'<input type="hidden" name="login" value="'.dol_escape_htmltag($ldap_login).
'">';
1108 } elseif (!empty($ldap_loginsmb)) {
1109 print
'<input type="hidden" name="login" value="'.dol_escape_htmltag($ldap_loginsmb).
'">';
1110 print $ldap_loginsmb;
1112 print
'<input id="login" class="maxwidth200 maxwidth150onsmartphone" maxsize="24" type="text" name="login" value="'.dol_escape_htmltag(
GETPOST(
'login',
'alphanohtml')).
'" spellcheck="false">';
1116 if (!empty($conf->use_javascript_ajax)) {
1120 $charforseparator =
getDolGlobalString(
"MAIN_USER_SEPARATOR_CHAR_FOR_GENERATED_LOGIN",
'.');
1121 if ($charforseparator ==
'none') {
1122 $charforseparator =
'';
1125 jQuery(document).ready(function() {
1126 $(".createloginauto").on("keyup", function() {
1127 console.log(".createloginauto change: We generate login when we have a lastname");
1129 lastname = $("#lastname").val().toLowerCase();
1132 print
' firstname = $("#firstname").val().toLowerCase().replace(/\s+/g, \'\').trim()[0];';
1134 print
' firstname = $("#firstname").val().toLowerCase().replace(/\s+/g, \'\').trim();';
1140 login = firstname + \''.
dol_escape_js($charforseparator).
'\';
1142 login += lastname.replace(/\s+/g, \
'\').trim();
1144 $(
"#login").val(login);
1150 $generated_password = '';
1151 if (empty($ldap_sid)) { // ldap_sid is for activedirectory
1152 $generated_password = getRandomPassword(false);
1154 $password = (GETPOSTISSET('password
') ? GETPOST('password
') : $generated_password);
1157 if (!empty($user->admin)) {
1158 print '<tr><td>
'.$form->textwithpicto($langs->trans("Administrator"), $langs->trans("AdministratorDesc"), 1, 'help
').'</td>
';
1160 print $form->selectyesno('admin
', GETPOST('admin
'), 1, false, 0, 1);
1162 if (isModEnabled('multicompany
') && !$user->entity) {
1163 if (!empty($conf->use_javascript_ajax)) {
1164 print '<script
type=
"text/javascript">
1166 $(
"select[name=admin]").change(
function() {
1167 if ( $(
this).val() == 0 ) {
1168 $(
"input[name=superadmin]")
1169 .prop(
"disabled",
true)
1170 .prop(
"checked",
false);
1171 $(
"select[name=entity]")
1172 .prop(
"disabled",
false);
1174 $(
"input[name=superadmin]")
1175 .prop(
"disabled",
false);
1178 $(
"input[name=superadmin]").change(
function() {
1179 if ( $(
this).is(
":checked") ) {
1180 $(
"select[name=entity]")
1181 .prop(
"disabled",
true);
1183 $(
"select[name=entity]")
1184 .prop(
"disabled",
false);
1190 $checked = (GETPOSTINT('superadmin
') ? ' checked
' : '');
1191 $disabled = (GETPOSTINT('superadmin
') ? '' : ' disabled');
1192 print '<input
type=
"checkbox" name=
"superadmin" id=
"superadmin" value=
"1"'.$checked.$disabled.' /> <label
for=
"superadmin">
'.$langs->trans("SuperAdministrator").'</span>
';
1194 print "</td></tr>\n";
1198 print '<tr><td>
'.$langs->trans("Gender").'</td>
';
1200 $arraygender = array('man
' => $langs->trans("Genderman"), 'woman
' => $langs->trans("Genderwoman"), 'other
' => $langs->trans("Genderother"));
1201 print $form->selectarray('gender
', $arraygender, GETPOST('gender
'), 1);
1205 $defaultemployee = '1
';
1207 print '<td>
'.$langs->trans('Employee
').'</td><td>
';
1208 print '<input
type=
"checkbox" name=
"employee" value=
"1"'.(GETPOST('employee
') == '1
' ? ' checked=
"checked"' : (($defaultemployee && !GETPOSTISSET('login
')) ? ' checked=
"checked"' : '')).'>
';
1209 //print $form->selectyesno("employee", (GETPOST('employee
') != '' ?GETPOST('employee
') : $defaultemployee), 1);
1213 print '<tr><td
class=
"titlefieldcreate">
'.$langs->trans("HierarchicalResponsible").'</td>
';
1215 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
');
1219 // Expense report validator
1220 if (isModEnabled('expensereport
')) {
1221 print '<tr><td
class=
"titlefieldcreate">
';
1222 $text = $langs->trans("ForceUserExpenseValidator");
1223 print $form->textwithpicto($text, $langs->trans("ValidatorIsSupervisorByDefault"), 1, 'help
');
1226 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
');
1231 // Holiday request validator
1232 if (isModEnabled('holiday
')) {
1233 print '<tr><td
class=
"titlefieldcreate">
';
1234 $text = $langs->trans("ForceUserHolidayValidator");
1235 print $form->textwithpicto($text, $langs->trans("ValidatorIsSupervisorByDefault"), 1, 'help
');
1238 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
');
1244 print '<tr><td>
'.$langs->trans("ExternalUser").' ?</td>
';
1246 print $form->textwithpicto($langs->trans("Internal"), $langs->trans("InternalExternalDesc"), 1, 'help
', '', 0, 2);
1250 print '</
table><hr><
table class=
"border centpercent">
';
1254 print '<tr><td
class=
"titlefieldcreate">
'.$langs->trans("RangeOfLoginValidity").'</td>
';
1256 print $form->selectDate($datestartvalidity, 'datestartvalidity
', 0, 0, 1, 'formdatestartvalidity
', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("from"));
1260 print $form->selectDate($dateendvalidity, 'dateendvalidity
', 0, 0, 1, 'formdateendvalidity
', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
1265 print '<tr><td
class=
"fieldrequired">
'.$langs->trans("Password").'</td>
';
1268 if (preg_match('/ldap/
', $dolibarr_main_authentication)) {
1269 $valuetoshow .= ($valuetoshow ? ' +
' : '').$langs->trans("PasswordOfUserInLDAP").' (hidden)
';
1271 if (preg_match('/http/
', $dolibarr_main_authentication)) {
1272 $valuetoshow .= ($valuetoshow ? ' +
' : '').$langs->trans("HTTPBasicPassword");
1274 if (preg_match('/dolibarr/
', $dolibarr_main_authentication) || preg_match('/forceuser/
', $dolibarr_main_authentication)) {
1275 if (!empty($ldap_pass)) { // For very old system compatibility. Now clear password can't be viewed from LDAP read
1276 $valuetoshow .= ($valuetoshow ?
' + ' :
'').
'<input type="hidden" name="password" value="'.
dol_escape_htmltag($ldap_pass).
'">';
1277 $valuetoshow .= preg_replace(
'/./i',
'*', $ldap_pass);
1280 $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">';
1281 if (!empty($conf->use_javascript_ajax)) {
1282 $valuetoshow .=
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_password" class="linkobject paddingleft"');
1288 $parameters = array(
'valuetoshow' => $valuetoshow,
'password' => $password,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
1289 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
1291 $valuetoshow = $hookmanager->resPrint;
1293 $valuetoshow .= $hookmanager->resPrint;
1303 print
'<tr><td>'.$langs->trans(
"ApiKey").
'</td>';
1305 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">';
1306 if (!empty($conf->use_javascript_ajax)) {
1307 print
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_api_key" class="linkobject paddingleft"');
1313 print
'<input type="hidden" name="api_key" value="'.$generated_fake_api_key.
'">';
1317 print
'</table><hr><table class="border centpercent">';
1321 print
'<tr><td class="tdtop titlefieldcreate">'.$form->editfieldkey(
'Address',
'address',
'', $object, 0).
'</td>';
1322 print
'<td><textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
1324 print
'</textarea></td></tr>';
1327 print
'<tr><td>'.$form->editfieldkey(
'Zip',
'zipcode',
'', $object, 0).
'</td><td>';
1328 print $formcompany->select_ziptown(
$object->zip,
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6);
1332 print
'<tr><td>'.$form->editfieldkey(
'Town',
'town',
'', $object, 0).
'</td><td>';
1333 print $formcompany->select_ziptown(
$object->town,
'town', array(
'zipcode',
'selectcountry_id',
'state_id'));
1337 print
'<tr><td>'.$form->editfieldkey(
'Country',
'selectcountry_id',
'', $object, 0).
'</td><td class="maxwidthonsmartphone">';
1338 print
img_picto(
'',
'country',
'class="pictofixedwidth"');
1339 print $form->select_country((
GETPOST(
'country_id') !=
'' ?
GETPOST(
'country_id') :
$object->country_id),
'country_id');
1341 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1347 print
'<tr><td>'.$form->editfieldkey(
'State',
'state_id',
'', $object, 0).
'</td><td class="maxwidthonsmartphone">';
1348 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
1349 print $formcompany->select_state_ajax(
'country_id',
$object->state_id,
$object->country_id,
'state_id');
1354 print
'<tr><td>'.$langs->trans(
"PhonePro").
'</td>';
1356 print
img_picto(
'',
'object_phoning',
'class="pictofixedwidth"');
1357 if (!empty($ldap_phone)) {
1358 print
'<input type="hidden" name="office_phone" value="'.dol_escape_htmltag($ldap_phone).
'">';
1361 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="office_phone" value="'.dol_escape_htmltag(
GETPOST(
'office_phone',
'alphanohtml')).
'">';
1366 print
'<tr><td>'.$langs->trans(
"PhoneMobile").
'</td>';
1368 print
img_picto(
'',
'object_phoning_mobile',
'class="pictofixedwidth"');
1369 if (!empty($ldap_mobile)) {
1370 print
'<input type="hidden" name="user_mobile" value="'.dol_escape_htmltag($ldap_mobile).
'">';
1373 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="user_mobile" value="'.dol_escape_htmltag(
GETPOST(
'user_mobile',
'alphanohtml')).
'" spellcheck="false">';
1378 print
'<tr><td>'.$langs->trans(
"Fax").
'</td>';
1380 print
img_picto(
'',
'object_phoning_fax',
'class="pictofixedwidth"');
1381 if (!empty($ldap_fax)) {
1382 print
'<input type="hidden" name="office_fax" value="'.dol_escape_htmltag($ldap_fax).
'">';
1385 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="office_fax" value="'.dol_escape_htmltag(
GETPOST(
'office_fax',
'alphanohtml')).
'">';
1390 print
'<tr><td'.(getDolGlobalString(
'USER_MAIL_REQUIRED') ?
' class="fieldrequired"' :
'').
'>'.$langs->trans(
"EMail").
'</td>';
1392 print
img_picto(
'',
'object_email',
'class="pictofixedwidth"');
1393 if (!empty($ldap_mail)) {
1394 print
'<input type="hidden" name="email" value="'.dol_escape_htmltag($ldap_mail).
'">';
1397 print
'<input type="text" name="email" class="maxwidth500 widthcentpercentminusx" value="'.dol_escape_htmltag(
GETPOST(
'email',
'alphanohtml')).
'" spellcheck="false">';
1403 foreach ($socialnetworks as $key => $value) {
1404 if ($value[
'active']) {
1405 print
'<tr><td>'.$langs->trans($value[
'label']).
'</td>';
1407 if (!empty($value[
'icon'])) {
1408 print
'<span class="fab '.$value[
'icon'].
' pictofixedwidth"></span>';
1410 if (!empty($ldap_social[$key])) {
1411 print
'<input type="hidden" name="'.$key.
'" value="'.$ldap_social[$key].
'">';
1412 print $ldap_social[$key];
1414 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="'.$key.
'" value="'.
GETPOST($key,
'alphanohtml').
'">';
1419 if (!empty($ldap_social[$key])) {
1420 print
'<input type="hidden" name="'.$key.
'" value="'.$ldap_social[$key].
'">';
1422 print
'<input type="hidden" name="'.$key.
'" value="'.
GETPOST($key,
'alphanohtml').
'">';
1430 print
'<tr><td>'.$langs->trans(
"AccountancyCode").
'</td>';
1432 print
'<input type="text" class="maxwidthonsmartphone" name="accountancy_code" value="'.dol_escape_htmltag(
GETPOST(
'accountancy_code',
'alphanohtml')).
'">';
1438 print
'<tr><td>'.$langs->trans(
"Color").
'</td>';
1440 print $formother->selectColor(GETPOSTISSET(
'color') ?
GETPOST(
'color',
'alphanohtml') :
$object->color,
'color', null, 1, array(),
'hideifnotset');
1445 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
1446 print
'<tr><td>'.$form->editfieldkey(
'Categories',
'usercats',
'', $object, 0).
'</td><td>';
1447 print $form->selectCategories(Categorie::TYPE_USER,
'usercats', $object);
1453 print
'<tr><td>'.$form->editfieldkey(
'DefaultLang',
'default_lang',
'', $object, 0,
'string',
'', 0, 0,
'id', $langs->trans(
"WarningNotLangOfInterface", $langs->transnoentitiesnoconv(
"UserGUISetup"))).
'</td>';
1454 print
'<td class="maxwidthonsmartphone">'.
"\n";
1455 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 (!method_exists($mc,
'formObjectOptions')) {
1464 if (!
getDolGlobalString(
'MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
1465 print
"<tr>".
'<td>'.$langs->trans(
"Entity").
'</td>';
1466 print
"<td>".$mc->select_entities($conf->entity);
1467 print
"</td></tr>\n";
1469 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
1475 $parameters = array();
1476 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
1479 print
'<tr><td class="tdtop">'.$langs->trans(
"Signature").
'</td>';
1480 print
'<td class="wordbreak">';
1481 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1483 $doleditor =
new DolEditor(
'signature',
GETPOST(
'signature',
'restricthtml'),
'', 138,
'dolibarr_notes',
'In',
true, $acceptlocallinktomedia, !
getDolGlobalString(
'FCKEDITOR_ENABLE_USERSIGN') ? 0 : 1, ROWS_4,
'90%');
1484 print $doleditor->Create(1);
1488 print
'<tr><td class="tdtop">';
1489 print $langs->trans(
"NotePublic");
1491 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1492 $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%');
1493 $doleditor->Create();
1494 print
"</td></tr>\n";
1497 print
'<tr><td class="tdtop">';
1498 print $langs->trans(
"NotePrivate");
1500 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1501 $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%');
1502 $doleditor->Create();
1503 print
"</td></tr>\n";
1505 print
'</table><hr><table class="border centpercent">';
1512 print
'<tr><td>'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
1513 print $formproduct->selectWarehouses(
$object->fk_warehouse,
'fk_warehouse',
'warehouseopen', 1);
1518 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"PostOrFunction").
'</td>';
1520 print
'<input class="maxwidth200 maxwidth150onsmartphone" type="text" name="job" value="'.dol_escape_htmltag(
GETPOST(
'job',
'alphanohtml')).
'">';
1523 if ($permissiontoseesalary) {
1524 $langs->load(
"salaries");
1528 $text = $langs->trans(
"THM");
1529 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
1532 print
'<input size="8" type="text" name="thm" value="'.dol_escape_htmltag(
GETPOST(
'thm')).
'"> <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
1538 $text = $langs->trans(
"TJM");
1539 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classtjm');
1542 print
'<input size="8" type="text" name="tjm" value="'.dol_escape_htmltag(
GETPOST(
'tjm')).
'"> <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
1547 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
1549 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>';
1555 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
1557 print
'<input size="8" type="text" name="weeklyhours" value="'.dol_escape_htmltag(
GETPOST(
'weeklyhours')).
'">';
1562 print
'<tr><td>'.$langs->trans(
"DateOfEmployment").
'</td>';
1564 print $form->selectDate($dateemployment,
'dateemployment', 0, 0, 1,
'formdateemployment', 1, 1, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
1568 print $form->selectDate($dateemploymentend,
'dateemploymentend', 0, 0, 1,
'formdateemploymentend', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
1573 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
1575 print $form->selectDate($dateofbirth,
'dateofbirth', 0, 0, 1,
'createuser', 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzserver');
1583 print $form->buttonsSaveCancel(
"CreateUser");
1589 $res =
$object->fetch($id,
'',
'', 1);
1594 $res =
$object->fetch_optionals();
1604 $passDoNotExpire = 0;
1606 $userChangePassNextLogon = 0;
1612 $result = $ldap->connectBind();
1614 $userSearchFilter =
'(' .
getDolGlobalString(
'LDAP_FILTER_CONNECTION').
'('.$ldap->getUserIdentifier().
'='.
$object->login.
'))';
1615 $entries = $ldap->fetch(
$object->login, $userSearchFilter);
1621 if (count($ldap->uacf) > 0) {
1622 foreach ($ldap->uacf as $key => $statut) {
1623 if ($key == 65536) {
1624 $passDoNotExpire = 1;
1625 $statutUACF = $statut;
1630 $statutUACF =
"ACCOUNTDISABLE";
1633 if ($ldap->pwdlastset == 0) {
1634 $userChangePassNextLogon = 1;
1640 if ($mode ==
'employee') {
1641 $title = $langs->trans(
"Employee");
1642 $linkback =
'<a href="'.DOL_URL_ROOT.
'/hrm/employee/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
1644 $title = $langs->trans(
"User");
1647 if ($user->hasRight(
"user",
"user",
"read") || $user->admin) {
1648 $linkback =
'<a href="'.DOL_URL_ROOT.
'/user/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
1655 if ($action ==
'password') {
1656 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"ReinitPassword"), $langs->trans(
"ConfirmReinitPassword",
$object->login),
"confirm_password",
'', 0, 1);
1660 if ($action ==
'passwordsend') {
1661 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"SendNewPassword"), $langs->trans(
"ConfirmSendNewPassword",
$object->login),
"confirm_passwordsend",
'', 0, 1);
1665 if ($action ==
'disable') {
1666 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"DisableAUser"), $langs->trans(
"ConfirmDisableUser",
$object->login),
"confirm_disable",
'', 0, 1);
1670 if ($action ==
'enable') {
1671 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"EnableAUser"), $langs->trans(
"ConfirmEnableUser",
$object->login),
"confirm_enable",
'', 0, 1);
1675 if ($action ==
'delete') {
1676 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"DeleteAUser"), $langs->trans(
"ConfirmDeleteUser",
$object->login),
"confirm_delete",
'', 0, 1);
1680 if (($action ==
'clone' && (empty($conf->use_javascript_ajax) || !empty($conf->dol_use_jmobile)))
1681 || (!empty($conf->use_javascript_ajax) && empty($conf->dol_use_jmobile))) {
1683 $formquestionclone = array(
1684 'text' => $langs->trans(
"ConfirmClone"),
1685 0 => array(
'type' =>
'text',
'name' =>
'clone_name',
'label' => $langs->trans(
"NewNameUserClone"),
'morecss' =>
'width200'),
1686 1 => array(
'type' =>
'checkbox',
'name' =>
'clone_rights',
'label' => $langs->trans(
"CloneUserRights"),
'value' => 0),
1687 2 => array(
'type' =>
'checkbox',
'name' =>
'clone_categories',
'label' => $langs->trans(
"CloneCategoriesProduct"),
'value' => 0),
1690 $newElement = array(
'type' =>
'text',
'name' =>
'new_email',
'label' => $langs->trans(
"NewEmailUserClone"),
'morecss' =>
'width200');
1691 array_splice($formquestionclone, 2, 0, array($newElement));
1693 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);
1698 if ($action !=
'edit') {
1699 print
dol_get_fiche_head($head,
'user', $title, -1,
'user', 0,
'',
'', 0,
'', 1);
1701 $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">';
1702 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard").
' ('.$langs->trans(
"AddToContacts").
')',
'vcard',
'class="valignmiddle marginleftonly paddingrightonly"');
1703 $morehtmlref .=
'</a>';
1705 $urltovirtualcard =
'/user/virtualcard.php?id='.((int)
$object->id);
1706 $morehtmlref .=
dolButtonToOpenUrlInDialogPopup(
'publicvirtualcard', $langs->transnoentitiesnoconv(
"PublicVirtualCardUrl").
' - '.
$object->getFullName($langs),
img_picto($langs->trans(
"PublicVirtualCardUrl"),
'card',
'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard,
'',
'refid valignmiddle nohover');
1708 dol_banner_tab($object,
'id', $linkback, $user->hasRight(
"user",
"user",
"read") || $user->admin,
'rowid',
'ref', $morehtmlref);
1710 print
'<div class="fichecenter">';
1711 print
'<div class="fichehalfleft">';
1713 print
'<div class="underbanner clearboth"></div>';
1714 print
'<table class="border tableforfield centpercent">';
1717 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
"Login").
'</td>';
1718 if (!empty(
$object->ldap_sid) &&
$object->status == User::STATUS_DISABLED) {
1719 print
'<td class="error">';
1720 print $langs->trans(
"LoginAccountDisableInDolibarr");
1726 $addadmin .=
img_picto($langs->trans(
"SuperAdministratorDesc"),
"superadmin",
'class="paddingleft valignmiddle"');
1727 } elseif (!empty(
$object->admin)) {
1728 $addadmin .=
img_picto($langs->trans(
"AdministratorDesc"),
"admin",
'class="paddingleft valignmiddle"');
1737 $text = $langs->trans(
"Type");
1738 print $form->textwithpicto($text, $langs->trans(
"InternalExternalDesc"));
1740 $type = $langs->trans(
"Internal");
1742 $type = $langs->trans(
"External");
1744 print
'<span class="badgeneutral">';
1747 print
' ('.$langs->trans(
"DomainUser").
')';
1750 print
'</td></tr>'.
"\n";
1753 if (
$object->ldap_sid && is_object($ldap)) {
1754 print
'<tr><td>'.$langs->trans(
"Type").
'</td><td>';
1755 print $langs->trans(
"DomainUser", $ldap->domainFQDN);
1756 print
'</td></tr>'.
"\n";
1760 print
'<tr><td>'.$langs->trans(
"Employee").
'</td><td>';
1762 print
'<input type="checkbox" disabled name="employee" value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
1766 print
'</td></tr>'.
"\n";
1769 if ($nbofusers > 1) {
1771 print
'<tr><td>'.$langs->trans(
"HierarchicalResponsible").
'</td>';
1773 if (empty(
$object->fk_user)) {
1774 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
1776 $huser =
new User($db);
1778 $huser->fetch(
$object->fk_user);
1779 print $huser->getNomUrl(-1);
1781 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
1790 $text = $langs->trans(
"ForceUserExpenseValidator");
1791 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
1794 if (!empty(
$object->fk_user_expense_validator)) {
1795 $evuser =
new User($db);
1796 $evuser->fetch(
$object->fk_user_expense_validator);
1797 print $evuser->getNomUrl(-1);
1806 $text = $langs->trans(
"ForceUserHolidayValidator");
1807 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
1810 if (!empty(
$object->fk_user_holiday_validator)) {
1811 $hvuser =
new User($db);
1812 $hvuser->fetch(
$object->fk_user_holiday_validator);
1813 print $hvuser->getNomUrl(-1);
1821 print
'<tr><td>'.$langs->trans(
"PostOrFunction").
'</td>';
1822 print
'<td>'.dol_escape_htmltag(
$object->job).
'</td>';
1826 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
1833 if ($permissiontoseesalary) {
1834 $langs->load(
"salaries");
1837 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
1839 print(
$object->salary !=
'' ?
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<span class="amount">'.
price(
$object->salary, 0, $langs, 1, -1, -1, $conf->currency) :
'').
'</span>';
1845 $text = $langs->trans(
"THM");
1846 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
1849 print(
$object->thm !=
'' ?
'<span class="amount">'.price(
$object->thm, 0, $langs, 1, -1, -1, $conf->currency).
'</span>' :
'');
1855 $text = $langs->trans(
"TJM");
1856 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classtjm');
1859 print(
$object->tjm !=
'' ?
'<span class="amount">'.price(
$object->tjm, 0, $langs, 1, -1, -1, $conf->currency).
'</span>' :
'');
1865 print
'<tr><td>'.$langs->trans(
"DateOfEmployment").
'</td>';
1867 if (
$object->dateemployment) {
1868 print
'<span class="opacitymedium">'.$langs->trans(
"FromDate").
'</span> ';
1871 if (
$object->dateemploymentend) {
1872 print
'<span class="opacitymedium"> - '.$langs->trans(
"To").
'</span> ';
1879 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
1887 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1888 print
'<tr><td>'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
1889 if (
$object->fk_warehouse > 0) {
1890 $warehousestatic =
new Entrepot($db);
1891 $warehousestatic->fetch(
$object->fk_warehouse);
1892 print $warehousestatic->getNomUrl(1);
1900 print
'<div class="fichehalfright">';
1902 print
'<div class="underbanner clearboth"></div>';
1904 print
'<table class="border tableforfield centpercent">';
1908 print
'<tr><td class="titlefieldmax45">'.$langs->trans(
"Color").
'</td>';
1910 print $formother->showColor(
$object->color,
'');
1916 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
1917 print
'<tr><td>'.$langs->trans(
"Categories").
'</td>';
1919 print $form->showCategories(
$object->id, Categorie::TYPE_USER, 1);
1925 $langs->load(
"languages");
1926 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1928 print $form->textwithpicto($langs->trans(
"DefaultLang"), $langs->trans(
"WarningNotLangOfInterface", $langs->transnoentitiesnoconv(
"UserGUISetup")));
1932 $labellang = (
$object->lang ? $langs->trans(
'Language_'.
$object->lang) :
'');
1938 if (isset($conf->file->main_authentication) && preg_match(
'/openid/', $conf->file->main_authentication) &&
getDolGlobalString(
'MAIN_OPENIDURL_PERUSER')) {
1939 print
'<tr><td>'.$langs->trans(
"OpenIDURL").
'</td>';
1940 print
'<td>'.$object->openid.
'</td>';
1947 if (!method_exists($mc,
'formObjectOptions')) {
1948 if (
isModEnabled(
'multicompany') && !
getDolGlobalString(
'MULTICOMPANY_TRANSVERSE_MODE') && $conf->entity == 1 && $user->admin && !$user->entity) {
1949 print
'<tr><td>'.$langs->trans(
"Entity").
'</td><td>';
1951 print $langs->trans(
"AllEntities");
1953 $mc->getInfo(
$object->entity);
1956 print
"</td></tr>\n";
1962 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1966 print
'<tr><td>'.$langs->trans(
"LinkToCompanyContact").
'</td>';
1971 $societe->fetch(
$object->socid);
1972 if ($societe->id > 0) {
1973 $s .= $societe->getNomUrl(1,
'');
1976 $s .=
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"ThisUserIsNot").
'</span>';
1978 if (!empty(
$object->contact_id)) {
1980 $contact->fetch(
$object->contact_id);
1981 if ($contact->id > 0) {
1982 if (
$object->socid > 0 && $s) {
1987 $s .= $contact->getNomUrl(1,
'');
1997 $langs->load(
"members");
1998 print
'<tr><td>'.$langs->trans(
"LinkedToDolibarrMember").
'</td>';
2002 $adh->fetch(
$object->fk_member);
2003 $adh->ref = $adh->getFullname($langs);
2004 print $adh->getNomUrl(-1);
2006 print
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"UserNotLinkedToMember").
'</span>';
2013 print
'<tr><td class="tdtop">'.$langs->trans(
'Signature').
'</td><td class="wordbreak">';
2015 print
"</td></tr>\n";
2026 print
'<!-- credential section -->'.
"\n";
2027 print
'<div class="div-table-responsive-no-min">';
2028 print
'<table class="noborder tableforfield centpercent">';
2031 print
'<tr class="liste_titre"><th class="liste_titre" colspan="2">';
2032 print
'<div class="centpercent display-flex">';
2033 print
'<div class="left inline-block">';
2034 print
img_picto(
'',
'security',
'class="paddingleft pictofixedwidth"').$langs->trans(
"SecurityForConnection");
2041 print
'<tr class="nooddeven"><td class="titlefieldmax45 nowraponall">'.$langs->trans(
"RangeOfLoginValidity").
'</td>';
2043 if (
$object->datestartvalidity) {
2044 print
'<span class="opacitymedium">'.$langs->trans(
"FromDate").
'</span> ';
2047 if (
$object->dateendvalidity) {
2048 print
'<span class="opacitymedium"> - '.$langs->trans(
"To").
'</span> ';
2056 if (preg_match(
'/ldap/', $dolibarr_main_authentication)) {
2057 if (!empty(
$object->ldap_sid)) {
2058 if ($passDoNotExpire) {
2059 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"LdapUacf_".$statutUACF);
2060 } elseif ($userChangePassNextLogon) {
2061 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').
'<span class="warning">'.$langs->trans(
"UserMustChangePassNextLogon", $ldap->domainFQDN).
'</span>';
2062 } elseif ($userDisabled) {
2063 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').
'<span class="warning">'.$langs->trans(
"LdapUacf_".$statutUACF, $ldap->domainFQDN).
'</span>';
2065 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2068 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2071 if (preg_match(
'/http/', $dolibarr_main_authentication)) {
2072 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"HTTPBasicPassword");
2076 $parameters = array(
'valuetoshow' => $valuetoshow,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2077 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
2079 $valuetoshow = $hookmanager->resPrint;
2081 $valuetoshow .= $hookmanager->resPrint;
2085 print
'<tr class="nooddeven"><td class="titlefieldmiddle">'.$langs->trans(
"Password").
'</td>';
2086 print
'<td class="wordbreak">';
2093 if (
getDolGlobalString(
'MAIN_SECURITY_ALLOW_TOTP') && $permissiontoeditpasswordandsee) {
2094 print
'<tr class="nooddeven"><td>'.$langs->trans(
"2FA").
'</td>';
2096 print
'<div class="centpercent display-flex">';
2097 print
'<span class="badge badge-info">999</span>';
2098 print
'<div class="left inline-block">';
2099 $s =
'<!-- MAIN_SECURITY_ALLOW_TOTP --><span class="fa fa-pen valignmiddle btnTitle-icon"></span>';
2101 print
'</span></span>';
2106 $tmparrayofauthmode = explode(
',', $dolibarr_main_authentication);
2107 foreach ($tmparrayofauthmode as $tmpauthmode) {
2108 $langs->load(
"oauth");
2110 $tmpauthmode = trim($tmpauthmode);
2111 if (preg_match(
'/oauth/', $tmpauthmode)) {
2112 $nameofservice = preg_replace(
'/oauth/',
'', $tmpauthmode);
2113 print
'<tr class="nooddeven">';
2114 print
'<td class="titlefieldmiddle">'.$langs->trans(
"OAUTH_ID");
2115 print
' '.ucfirst($nameofservice).
' ';
2118 $constoauthlogin =
'OAUTH_'.strtoupper($nameofservice).
'-Login_ID';
2119 print
'<td class="tdoverflowmax200" title="'.dolPrintHTMLForAttribute(
getDolGlobalString($constoauthlogin)).
'">';
2127 if (!empty(
$object->email_oauth2)) {
2128 print
'<tr class="nooddeven"><td class="titlefieldmiddle">'.$langs->trans(
"AlternativeEmailForOAuth2").
'</td>';
2138 if (
isModEnabled(
'api') && ($user->id == $id || $user->admin || $user->hasRight(
"api",
"apikey",
"generate"))) {
2139 print
'<tr class="nooddeven"><td>'.$langs->trans(
"ApiKey").
'</td>';
2142 print
'<div class="centpercent display-flex">';
2143 print
'<span class="badge badge-info">999</span>';
2147 print
'<div class="left inline-block">';
2148 $s =
'<!-- API_IN_TOKEN_TABLE --><span class="fa fa-pen valignmiddle btnTitle-icon"></span>';
2153 if (!empty(
$object->api_key)) {
2154 print
'<span class="opacitymedium">';
2159 print
' <span class="badge badge-info" title="'.$langs->trans(
"TotalAPICall").
'">';
2169 print
'<tr class="nooddeven"><td>'.$langs->trans(
"LastConnexion").
'</td>';
2171 if (
$object->datepreviouslogin) {
2172 print
dol_print_date(
$object->datepreviouslogin,
"dayhour",
"tzuserrel").
' <span class="opacitymedium">('.$langs->trans(
"Previous").
')</span>, ';
2175 print
dol_print_date(
$object->datelastlogin,
"dayhour",
"tzuserrel").
' <span class="opacitymedium">('.$langs->trans(
"Currently").
')</span>';
2185 $parameters = array(
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2186 $reshook = $hookmanager->executeHooks(
'addMoreObjectBlock', $parameters, $object, $action);
2188 print $hookmanager->resPrint;
2194 print
'<div class="clearboth"></div>';
2203 print
'<div class="tabsAction">';
2205 $parameters = array();
2206 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2207 if (empty($reshook)) {
2211 'class' =>
'classfortooltip'
2215 if (empty($user->socid)) {
2216 $canSendMail =
false;
2218 $langs->load(
"mails");
2219 $canSendMail =
true;
2220 unset($params[
'attr'][
'title']);
2222 $langs->load(
"mails");
2223 $params[
'attr'][
'title'] = $langs->trans(
'NoEMail');
2225 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'presend',
'mode' =>
'init']) .
'#formmailbeforetitle',
'', $canSendMail, $params);
2230 $params[
'attr'][
'title'] = $langs->trans(
'DisabledInMonoUserMode');
2233 unset($params[
'attr'][
'title']);
2236 } elseif ($permissiontoeditpasswordandsee && !
$object->ldap_sid &&
2238 unset($params[
'attr'][
'title']);
2246 'class' =>
'classfortooltip'
2251 if ((empty(
$object->entity) && $permissiontoclonesuperadmin) || (!empty(
$object->admin) && !empty(
$object->entity) && $permissiontocloneadmin) || ($permissiontocloneuser && empty(
$object->admin) && !empty(
$object->entity))) {
2252 $cloneButtonId =
'';
2255 if (!empty($conf->use_javascript_ajax) && empty($conf->dol_use_jmobile)) {
2257 $cloneButtonId =
'action-clone';
2259 print
dolGetButtonAction($langs->trans(
'ToClone'),
'',
'default', $cloneUserUrl, $cloneButtonId, $user->hasRight(
'user',
'user',
'write'));
2263 if (
$object->status == $object::STATUS_DISABLED) {
2264 $params[
'attr'][
'title'] = $langs->trans(
'UserDisabled');
2266 } elseif (($user->id != $id && $permissiontoeditpasswordandsee) &&
$object->login && !
$object->ldap_sid &&
2268 unset($params[
'attr'][
'title']);
2269 print
dolGetButtonAction($langs->trans(
'ReinitPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=password&token='.
newToken(),
'',
true, $params);
2272 if (
$object->status == $object::STATUS_DISABLED) {
2273 $params[
'attr'][
'title'] = $langs->trans(
'UserDisabled');
2274 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2275 } elseif (($user->id != $id && $permissiontoeditpasswordandsend) &&
$object->login && !
$object->ldap_sid &&
2278 unset($params[
'attr'][
'title']);
2279 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=passwordsend&token='.
newToken(),
'',
true, $params);
2281 $params[
'attr'][
'title'] = $langs->trans(
'NoEMail');
2282 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2287 if ($user->id != $id && $permissiontodisable &&
$object->status == User::STATUS_DISABLED &&
2289 unset($params[
'attr'][
'title']);
2290 print
dolGetButtonAction($langs->trans(
'Reactivate'),
'',
'default', $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'&action=enable&token='.newToken(),
'',
true, $params);
2293 if ($user->id != $id && $permissiontodisable &&
$object->status == User::STATUS_ENABLED &&
2295 unset($params[
'attr'][
'title']);
2296 print
dolGetButtonAction($langs->trans(
'DisableUser'),
'',
'default', $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'&action=disable&token='.newToken(),
'',
true, $params);
2298 if ($user->id == $id) {
2299 $params[
'attr'][
'title'] = $langs->trans(
'CantDisableYourself');
2300 print
dolGetButtonAction($langs->trans(
'DisableUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2304 if ($user->id != $id && $permissiontodisable &&
2306 if ($user->admin || !
$object->admin) {
2307 unset($params[
'attr'][
'title']);
2308 print
dolGetButtonAction($langs->trans(
'DeleteUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&id='.
$object->id,
'',
true, $params);
2310 $params[
'attr'][
'title'] = $langs->trans(
'MustBeAdminToDeleteOtherAdmin');
2311 print
dolGetButtonAction($langs->trans(
'DeleteUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&id='.
$object->id,
'',
false, $params);
2321 if (
GETPOST(
'modelselected')) {
2322 $action =
'presend';
2326 $modelmail =
'user';
2327 $defaulttopic =
'Information';
2328 $diroutput = $conf->user->dir_output;
2329 $trackid =
'use'.$object->id;
2331 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
2333 if ($action !=
'presend' && $action !=
'send') {
2338 if ($permissiontoreadgroup) {
2339 print
'<!-- Group section -->'.
"\n";
2347 $groupslist = $usergroup->listGroupsForUser(
$object->id,
false);
2349 if (!empty($groupslist)) {
2350 foreach ($groupslist as $groupforuser) {
2351 $exclude[] = $groupforuser->id;
2356 $parameters = array(
'caneditgroup' => $permissiontoeditgroup,
'groupslist' => $groupslist,
'exclude' => $exclude);
2357 $reshook = $hookmanager->executeHooks(
'formAddUserToGroup', $parameters, $object, $action);
2358 print $hookmanager->resPrint;
2360 if (empty($reshook)) {
2361 if ($permissiontoeditgroup) {
2362 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$id.
'" method="POST">'.
"\n";
2363 print
'<input type="hidden" name="token" value="'.newToken().
'" />';
2364 print
'<input type="hidden" name="action" value="addgroup" />';
2365 print
'<input type="hidden" name="page_y" value="" />';
2368 print
'<!-- List of groups of the user -->'.
"\n";
2369 print
'<table class="noborder centpercent">'.
"\n";
2370 print
'<tr class="liste_titre"><th class="liste_titre">'.$langs->trans(
"Groups").
'</th>'.
"\n";
2371 print
'<th class="liste_titre right">';
2372 if ($permissiontoeditgroup) {
2373 print $form->select_dolgroups(0,
'group', 1, $exclude, 0,
'', array(), (
string)
$object->entity,
false,
'maxwidth150');
2375 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
2376 print
'<input type="submit" class="button buttongen button-add reposition" value="'.$langs->trans(
"Add").
'" />';
2378 print
'</th></tr>'.
"\n";
2381 if (!empty($groupslist)) {
2382 foreach ($groupslist as $group) {
2383 print
'<tr class="oddeven">';
2384 print
'<td class="tdoverflowmax200">';
2385 if ($permissiontoeditgroup) {
2386 print $group->getNomUrl(1);
2388 print
img_object($langs->trans(
"ShowGroup"),
"group").
' '.$group->name;
2391 print
'<td class="right">';
2392 if ($permissiontoeditgroup) {
2393 print
'<a class="reposition" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'removegroup',
'group' => $group->id],
true).
'">';
2394 print
img_picto($langs->trans(
"RemoveFromGroup"),
'unlink');
2399 print
"</td></tr>\n";
2402 print
'<tr class="oddeven"><td colspan="2"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
2407 if ($permissiontoeditgroup) {
2419 if ($action ==
'edit' && ($permissiontoedit || $permissiontoeditpasswordandsee)) {
2420 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST" name="updateuser" enctype="multipart/form-data">';
2421 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2422 print
'<input type="hidden" name="action" value="update">';
2423 print
'<input type="hidden" name="entity" value="'.$object->entity.
'">';
2427 print
'<table class="border centpercent">';
2431 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Ref").
'</td>';
2440 print
'<td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Lastname").
'</td>';
2442 if ($permissiontoedit && !
$object->ldap_sid) {
2443 print
'<input class="minwidth100" type="text" class="flat" name="lastname" value="'.$object->lastname.
'">';
2445 print
'<input type="hidden" name="lastname" value="'.$object->lastname.
'">';
2452 print
'<tr><td>'.$langs->trans(
"Firstname").
'</td>';
2454 if ($permissiontoedit && !
$object->ldap_sid) {
2455 print
'<input class="minwidth100" type="text" class="flat" name="firstname" value="'.$object->firstname.
'">';
2457 print
'<input type="hidden" name="firstname" value="'.$object->firstname.
'">';
2463 print
"<tr>".
'<td><span class="fieldrequired">'.$langs->trans(
"Login").
'</span></td>';
2465 if ($user->admin && !
$object->ldap_sid) {
2466 print
'<input maxlength="50" type="text" class="flat" name="login" value="'.$object->login.
'" spellcheck="false">';
2468 print
'<input type="hidden" name="login" value="'.$object->login.
'">';
2475 print
'<tr><td>'.$langs->trans(
"ExternalUser").
' ?</td>';
2477 if ($user->id ==
$object->id || !$user->admin) {
2479 $type = $langs->trans(
"Internal");
2481 $type = $langs->trans(
"External");
2484 print $form->textwithpicto($type, $langs->trans(
"InternalExternalDesc"));
2486 print
' ('.$langs->trans(
"DomainUser").
')';
2495 $eventsCompanyContact = array();
2496 $eventsCompanyContact[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1&token='.
currentToken(), 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
2498 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2499 print $form->select_company(
$object->socid,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2500 print
'<span class="clearbothonsmartphone"></span>';
2501 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2502 print $form->select_contact(0, 0,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2504 print
' ('.$langs->trans(
"DomainUser").
')';
2507 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2508 print $form->select_company(
$object->socid,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2509 print
'<span class="clearbothonsmartphone"></span>';
2510 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2511 print $form->select_contact(0,
$object->contact_id,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2513 print
' ('.$langs->trans(
"DomainUser").
')';
2516 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2517 print $form->select_company(0,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2518 print
'<span class="clearbothonsmartphone"></span>';
2519 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2520 print $form->select_contact(0,
$object->contact_id,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2522 print
' ('.$langs->trans(
"DomainUser").
')';
2525 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2526 print $form->select_company(0,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2527 print
'<span class="clearbothonsmartphone"></span>';
2528 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2529 print $form->select_contact(0, 0,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2535 print
'<tr><td>'.$form->textwithpicto($langs->trans(
"Administrator"), $langs->trans(
"AdministratorDesc")).
'</td>';
2537 $langs->load(
"admin");
2539 print
'<input type="hidden" name="admin" value="'.$object->admin.
'">'.
yn(
$object->admin);
2540 print
' <span class="opacitymedium">('.$langs->trans(
"ExternalUser").
')</span>';
2544 $nbAdmin = $user->getNbOfUsers(
'active',
'', 1);
2545 $nbSuperAdmin = $user->getNbOfUsers(
'active',
'superadmin', 1);
2552 || (
isModEnabled(
'multicompany') && ((
$object->entity > 0 || ($user->entity == 0 &&
$object->entity == 0)) || $nbSuperAdmin > 1))
2555 print $form->selectyesno(
'admin',
$object->admin, 1,
false, 0, 1);
2558 if ($conf->use_javascript_ajax) {
2559 print
'<script type="text/javascript">
2561 var admin = $("select[name=admin]").val();
2563 $("input[name=superadmin]")
2564 .prop("disabled", true)
2565 .prop("checked", false);
2567 if ($("input[name=superadmin]").is(":checked")) {
2568 $("select[name=entity]")
2569 .prop("disabled", true);
2571 $("select[name=admin]").change(function() {
2572 if ( $(this).val() == 0 ) {
2573 $("input[name=superadmin]")
2574 .prop("disabled", true)
2575 .prop("checked", false);
2576 $("select[name=entity]")
2577 .prop("disabled", false);
2579 $("input[name=superadmin]")
2580 .prop("disabled", false);
2583 $("input[name=superadmin]").change(function() {
2584 if ( $(this).is(":checked")) {
2585 $("select[name=entity]")
2586 .prop("disabled", true);
2588 $("select[name=entity]")
2589 .prop("disabled", false);
2596 $checked = ((
$object->admin && !
$object->entity) ?
' checked' :
'');
2597 print
'<input type="checkbox" name="superadmin" id="superadmin" value="1"'.$checked.
' /> <label for="superadmin">'.$langs->trans(
"SuperAdministrator").
'</span>';
2601 print
'<input type="hidden" name="admin" value="'.$object->admin.
'">';
2602 print
'<input type="hidden" name="superadmin" value="'.(empty(
$object->entity) ? 1 : 0).
'">';
2604 print $form->textwithpicto($yn, $langs->trans(
"DontDowngradeSuperAdmin"), 1,
'warning');
2614 print
'<tr><td class="titlefieldcreate"><label for="civility_code">'.$langs->trans(
"UserTitle").
'</label></td><td>';
2615 if ($permissiontoedit && !
$object->ldap_sid) {
2616 print $formcompany->select_civility(GETPOSTISSET(
"civility_code") ?
GETPOST(
"civility_code",
'aZ09') :
$object->civility_code,
'civility_code');
2617 } elseif (
$object->civility_code) {
2618 print $langs->trans(
"Civility".
$object->civility_code);
2624 print
'<tr><td>'.$langs->trans(
"Gender").
'</td>';
2626 $arraygender = array(
'man' => $langs->trans(
"Genderman"),
'woman' => $langs->trans(
"Genderwoman"),
'other' => $langs->trans(
"Genderother"));
2627 if ($permissiontoedit) {
2628 print $form->selectarray(
'gender', $arraygender, GETPOSTISSET(
'gender') ?
GETPOST(
'gender') :
$object->gender, 1);
2630 print $arraygender[
$object->gender];
2636 print
'<td>'.$form->editfieldkey(
'Employee',
'employee',
'', $object, 0).
'</td><td>';
2637 if ($permissiontoedit) {
2638 print
'<input type="checkbox" name="employee" value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
2641 print
'<input type="checkbox" name="employee" disabled value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
2650 if ($nbofusers > 1) {
2652 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"HierarchicalResponsible").
'</td>';
2654 if ($permissiontoedit) {
2655 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');
2657 print
'<input type="hidden" name="fk_user" value="'.$object->fk_user.
'">';
2658 $huser =
new User($db);
2659 $huser->fetch(
$object->fk_user);
2660 print $huser->getNomUrl(-1);
2667 print
'<tr><td class="titlefieldcreate">';
2668 $text = $langs->trans(
"ForceUserExpenseValidator");
2669 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
2672 if ($permissiontoedit) {
2673 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');
2675 print
'<input type="hidden" name="fk_user_expense_validator" value="'.$object->fk_user_expense_validator.
'">';
2676 $evuser =
new User($db);
2677 $evuser->fetch(
$object->fk_user_expense_validator);
2678 print $evuser->getNomUrl(-1);
2686 print
'<tr><td class="titlefieldcreate">';
2687 $text = $langs->trans(
"ForceUserHolidayValidator");
2688 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
2691 if ($permissiontoedit) {
2692 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');
2694 print
'<input type="hidden" name="fk_user_holiday_validator" value="'.$object->fk_user_holiday_validator.
'">';
2695 $hvuser =
new User($db);
2696 $hvuser->fetch(
$object->fk_user_holiday_validator);
2697 print $hvuser->getNomUrl(-1);
2708 print
'<table class="border centpercent">';
2711 print
'<tr><td>'.$langs->trans(
"RangeOfLoginValidity").
'</td>';
2713 if ($permissiontoedit) {
2714 print $form->selectDate($datestartvalidity ? $datestartvalidity :
$object->datestartvalidity,
'datestartvalidity', 0, 0, 1,
'formdatestartvalidity', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
2720 if ($permissiontoedit) {
2721 print $form->selectDate($dateendvalidity ? $dateendvalidity :
$object->dateendvalidity,
'dateendvalidity', 0, 0, 1,
'formdateendvalidity', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
2729 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Password").
'</td>';
2732 if (preg_match(
'/ldap/', $dolibarr_main_authentication)) {
2733 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2735 if (preg_match(
'/http/', $dolibarr_main_authentication)) {
2736 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$form->textwithpicto((string) $text, $langs->trans(
"DolibarrInHttpAuthenticationSoPasswordUseless", (string) $dolibarr_main_authentication), 1,
'warning');
2738 if (preg_match(
'/dolibarr/', $dolibarr_main_authentication) || preg_match(
'/forceuser/', $dolibarr_main_authentication)) {
2739 if ($permissiontoeditpasswordandsee) {
2740 $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">';
2741 if (!empty($conf->use_javascript_ajax)) {
2742 $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').
'"');
2745 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').preg_replace(
'/./i',
'*',
$object->pass);
2749 $parameters = array(
'valuetoshow' => $valuetoshow,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2750 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
2752 $valuetoshow = $hookmanager->resPrint;
2754 $valuetoshow .= $hookmanager->resPrint;
2758 print
"</td></tr>\n";
2763 print
'<tr><td>'.$langs->trans(
"ApiKey").
'</td>';
2765 if ($permissiontoeditpasswordandsee || $user->hasRight(
"api",
"apikey",
"generate")) {
2766 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">';
2767 if (!empty($conf->use_javascript_ajax)) {
2768 print
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_api_key" class="linkobject paddingleft"');
2776 if (isset($conf->file->main_authentication) && preg_match(
'/openid/', $conf->file->main_authentication) &&
getDolGlobalString(
'MAIN_OPENIDURL_PERUSER')) {
2777 print
"<tr>".
'<td>'.$langs->trans(
"OpenIDURL").
'</td>';
2779 if ($permissiontoedit) {
2780 print
'<input class="minwidth100" type="url" name="openid" class="flat" value="'.$object->openid.
'">';
2782 print
'<input type="hidden" name="openid" value="'.$object->openid.
'">';
2788 print
'</table><hr><table class="border centpercent">';
2792 print
'<tr><td class="tdtop titlefieldcreate">'.$form->editfieldkey(
'Address',
'address',
'', $object, 0).
'</td>';
2794 if ($permissiontoedit) {
2795 print
'<textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
2798 if ($permissiontoedit) {
2799 print
'</textarea>';
2804 print
'<tr><td>'.$form->editfieldkey(
'Zip',
'zipcode',
'', $object, 0).
'</td><td>';
2805 if ($permissiontoedit) {
2806 print $formcompany->select_ziptown((GETPOSTISSET(
'zipcode') ?
GETPOST(
'zipcode') :
$object->zip),
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6);
2813 print
'<tr><td>'.$form->editfieldkey(
'Town',
'town',
'', $object, 0).
'</td><td>';
2814 if ($permissiontoedit) {
2815 print $formcompany->select_ziptown((GETPOSTISSET(
'town') ?
GETPOST(
'town') :
$object->town),
'town', array(
'zipcode',
'selectcountry_id',
'state_id'));
2822 print
'<tr><td>'.$form->editfieldkey(
'Country',
'selectcountry_id',
'', $object, 0).
'</td><td>';
2823 print
img_picto(
'',
'country',
'class="pictofixedwidth"');
2824 if ($permissiontoedit) {
2825 print $form->select_country((
GETPOST(
'country_id') !=
'' ?
GETPOST(
'country_id') :
$object->country_id),
'country_id');
2827 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
2831 print $countrylabel;
2837 print
'<tr><td class="tdoverflow">'.$form->editfieldkey(
'State',
'state_id',
'', $object, 0).
'</td><td>';
2838 if ($permissiontoedit) {
2839 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
2840 print $formcompany->select_state_ajax(
'country_id',
$object->state_id,
$object->country_id,
'state_id');
2848 print
"<tr>".
'<td>'.$langs->trans(
"PhonePro").
'</td>';
2850 print
img_picto(
'',
'phoning',
'class="pictofixedwidth"');
2851 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2852 print
'<input type="text" name="office_phone" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->office_phone.
'">';
2854 print
'<input type="hidden" name="office_phone" value="'.$object->office_phone.
'">';
2860 print
"<tr>".
'<td>'.$langs->trans(
"PhoneMobile").
'</td>';
2862 print
img_picto(
'',
'phoning_mobile',
'class="pictofixedwidth"');
2863 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2864 print
'<input type="text" name="user_mobile" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->user_mobile.
'" spellcheck="false">';
2866 print
'<input type="hidden" name="user_mobile" value="'.$object->user_mobile.
'">';
2872 print
"<tr>".
'<td>'.$langs->trans(
"Fax").
'</td>';
2874 print
img_picto(
'',
'phoning_fax',
'class="pictofixedwidth"');
2875 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2876 print
'<input type="text" name="office_fax" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->office_fax.
'">';
2878 print
'<input type="hidden" name="office_fax" value="'.$object->office_fax.
'">';
2884 print
"<tr>".
'<td'.(
getDolGlobalString(
'USER_MAIL_REQUIRED') ?
' class="fieldrequired"' :
'').
'>'.$langs->trans(
"EMail").
'</td>';
2886 print
img_picto(
'',
'object_email',
'class="pictofixedwidth"');
2887 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2888 print
'<input class="minwidth100 maxwidth500 widthcentpercentminusx" type="text" name="email" class="flat" value="'.$object->email.
'">';
2890 print
'<input type="hidden" name="email" value="'.$object->email.
'">';
2896 foreach ($socialnetworks as $key => $value) {
2897 if ($value[
'active']) {
2898 print
'<tr><td>'.$langs->trans($value[
'label']).
'</td>';
2900 if (!empty($value[
'icon'])) {
2901 print
'<span class="fab '.$value[
'icon'].
' pictofixedwidth"></span>';
2903 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2904 print
'<input type="text" name="'.$key.
'" class="flat maxwidth200 widthcentpercentminusx" value="'.(isset(
$object->socialnetworks[$key]) ?
$object->socialnetworks[$key] :
'').
'">';
2906 print
'<input type="hidden" name="'.$key.
'" value="'.
$object->socialnetworks[$key].
'">';
2907 print
$object->socialnetworks[$key];
2912 print
'<input type="hidden" name="'.$key.
'" value="'.(isset(
$object->socialnetworks[$key]) ?
$object->socialnetworks[$key] :
'').
'">';
2917 print
'</table><hr><table class="border centpercent">';
2921 print
'<tr><td class="titlefield">'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
2922 print $formproduct->selectWarehouses(
$object->fk_warehouse,
'fk_warehouse',
'warehouseopen', 1);
2923 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>';
2930 print
'<td class="titlefieldcreate">'.$langs->trans(
"AccountancyCode").
'</td>';
2932 if ($permissiontoedit) {
2933 print
'<input type="text" class="flat maxwidth300" name="accountancy_code" value="'.$object->accountancy_code.
'">';
2935 print
'<input type="hidden" name="accountancy_code" value="'.$object->accountancy_code.
'">';
2936 print
$object->accountancy_code;
2944 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"ColorUser").
'</td>';
2946 if ($permissiontoedit) {
2947 print $formother->selectColor(GETPOSTISSET(
'color') ?
GETPOST(
'color',
'alphanohtml') :
$object->color,
'color', null, 1, array(),
'hideifnotset');
2949 print $formother->showColor(
$object->color,
'');
2956 print
'<td class="titlefieldcreate">'.$langs->trans(
"Photo").
'</td>';
2958 print $form->showphoto(
'userphoto', $object, 60, 0, (
int) $permissiontoedit,
'photowithmargin',
'small', 1, 0,
'user', 1);
2963 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
2964 print
'<tr><td>'.$form->editfieldkey(
'Categories',
'usercats',
'', $object, 0).
'</td>';
2966 if ($permissiontoedit) {
2967 print $form->selectCategories(Categorie::TYPE_USER,
'usercats', $object);
2969 print $form->showCategories(
$object->id, Categorie::TYPE_USER, 1);
2976 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";
2977 print
img_picto(
'',
'language',
'class="pictofixedwidth"').$formadmin->select_language(
$object->lang,
'default_lang', 0, array(),
'1', 0, 0,
'widthcentpercentminusx maxwidth300');
2983 print
'<tr><td>'.$langs->trans(
"Status").
'</td>';
2985 print
$object->getLibStatut(4);
3013 $langs->load(
"members");
3014 print
'<tr><td>'.$langs->trans(
"LinkedToDolibarrMember").
'</td>';
3018 $adh->fetch(
$object->fk_member);
3019 $adh->ref = $adh->login;
3020 print $adh->getNomUrl(1);
3022 print
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"UserNotLinkedToMember").
'</span>';
3032 if (!method_exists($mc,
'formObjectOptions')) {
3033 if (empty($conf->multicompany->transverse_mode) && $conf->entity == 1 && $user->admin && !$user->entity) {
3034 print
"<tr>".
'<td>'.$langs->trans(
"Entity").
'</td>';
3035 print
"<td>".$mc->select_entities(
$object->entity,
'entity',
'',
false,
true,
false,
false,
true);
3036 print
"</td></tr>\n";
3038 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
3044 $parameters = array(
'colspan' =>
' colspan="2"');
3046 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
3047 print $hookmanager->resPrint;
3048 if (empty($reshook)) {
3049 if ($permissiontoedit) {
3050 print
$object->showOptionals($extrafields,
'edit');
3052 print
$object->showOptionals($extrafields,
'view');
3057 print
'<tr><td class="tdtop">'.$langs->trans(
"Signature").
'</td>';
3059 if ($permissiontoedit) {
3060 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
3062 $doleditor =
new DolEditor(
'signature',
$object->signature,
'', 138,
'dolibarr_notes',
'In',
false, $acceptlocallinktomedia, !
getDolGlobalString(
'FCKEDITOR_ENABLE_USERSIGN') ? 0 : 1, ROWS_4,
'90%');
3063 print $doleditor->Create(1);
3075 print
'<table class="border centpercent">';
3081 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"PostOrFunction").
'</td>';
3083 if ($permissiontoedit) {
3084 print
'<input type="text" class="minwidth300 maxwidth500" name="job" value="'.dol_escape_htmltag(
$object->job).
'">';
3086 print
'<input type="hidden" name="job" value="'.dol_escape_htmltag(
$object->job).
'">';
3092 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
3094 if ($permissiontoedit) {
3095 print
'<input size="8" type="text" name="weeklyhours" value="'.price2num(
GETPOST(
'weeklyhours') ?
GETPOST(
'weeklyhours') :
$object->weeklyhours).
'">';
3103 if ($permissiontoseesalary) {
3104 $langs->load(
"salaries");
3107 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
3109 print
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<input size="8" type="text" name="salary" value="'.
price2num(
GETPOST(
'salary') ?
GETPOST(
'salary') :
$object->salary).
'">';
3110 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3116 $text = $langs->trans(
"THM");
3117 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
3120 if ($permissiontoedit) {
3121 print
'<input size="8" type="text" name="thm" value="'.price2num(
GETPOST(
'thm') ?
GETPOST(
'thm') :
$object->thm).
'">';
3122 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3124 print(
$object->thm !=
'' ?
price(
$object->thm, 0, $langs, 1, -1, -1, $conf->currency) :
'');
3131 $text = $langs->trans(
"TJM");
3132 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classthm');
3135 if ($permissiontoedit) {
3136 print
'<input size="8" type="text" name="tjm" value="'.price2num(
GETPOST(
'tjm') ?
GETPOST(
'tjm') :
$object->tjm).
'">';
3137 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3139 print(
$object->tjm !=
'' ?
price(
$object->tjm, 0, $langs, 1, -1, -1, $conf->currency) :
'');
3146 print
'<tr><td>'.$langs->trans(
"DateEmployment").
'</td>';
3148 if ($permissiontoedit) {
3149 print $form->selectDate($dateemployment ? $dateemployment :
$object->dateemployment,
'dateemployment', 0, 0, 1,
'formdateemployment', 1, 1, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
3154 if ($dateemployment && $dateemploymentend) {
3158 if ($permissiontoedit) {
3159 print $form->selectDate($dateemploymentend ? $dateemploymentend :
$object->dateemploymentend,
'dateemploymentend', 0, 0, 1,
'formdateemploymentend', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
3167 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
3169 if ($permissiontoedit) {
3170 echo $form->selectDate($dateofbirth ? $dateofbirth :
$object->birth,
'dateofbirth', 0, 0, 1,
'updateuser', 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzserver');
3181 print
'<div class="center">';
3182 print
'<input value="'.$langs->trans(
"Save").
'" class="button button-save" type="submit" name="save">';
3183 print
' ';
3184 print
'<input value="'.$langs->trans(
"Cancel").
'" class="button button-cancel" type="submit" name="cancel">';
3190 if ($action !=
'edit' && $action !=
'presend') {
3191 print
'<div class="fichecenter"><div class="fichehalfleft">';
3196 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
3197 $genallowed = $user->hasRight(
"user",
"user",
"read");
3198 $delallowed = $user->hasRight(
"user",
"user",
"write");
3203 $societe->fetch(
$object->socid);
3208 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);
3209 $somethingshown = $formfile->numoffiles;
3212 $tmparray = $form->showLinkToObjectBlock($object, array(), array(), 1);
3213 $linktoelem = $tmparray[
'linktoelem'];
3214 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
3215 print $htmltoenteralink;
3217 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
3221 $morehtmlcenter =
'<div class="nowraponall">';
3222 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/user/messaging.php?id='.
$object->id);
3223 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/user/agenda.php?id='.
$object->id);
3224 $morehtmlcenter .=
'</div>';
3226 print
'</div><div class="fichehalfright">';
3229 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
3231 $somethingshown = $formactions->showactions($object,
'user', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter,
$object->id);
3233 print
'</div></div>';
3243include_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)
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.
dolBuildUrl($url, $params=[], $addtoken=false)
Return path of url.
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'.
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.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
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.
$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.
dol_verifyHash($chain, $hash, $type='0')
Compute a hash and compare it to the given one For backward compatibility reasons,...
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
user_prepare_head(User $object)
Prepare array with list of tabs.