40require
'../main.inc.php';
52require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
53require_once DOL_DOCUMENT_ROOT.
'/user/class/usergroup.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
57require_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
58require_once DOL_DOCUMENT_ROOT.
'/core/lib/usergroups.lib.php';
59require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formadmin.class.php';
60require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
61require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
62require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
63require_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
65 require_once DOL_DOCUMENT_ROOT.
'/core/class/ldap.class.php';
68 require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
71 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
74 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
78$langs->loadLangs(array(
'users',
'companies',
'ldap',
'admin',
'hrm',
'stocks',
'other'));
81$action =
GETPOST(
'action',
'aZ09');
82$mode =
GETPOST(
'mode',
'alpha');
83$confirm =
GETPOST(
'confirm',
'alpha');
85$cancel =
GETPOST(
'cancel',
'alpha');
86$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'usercard';
87$backtopage =
GETPOST(
'backtopage');
88$backtopageforcancel =
GETPOST(
'backtopageforcancel');
89$forcepasswordchange =
GETPOSTINT(
'forcepasswordchange');
91if (empty($id) && $action !=
'add' && $action !=
'create') {
101$childids = $user->getAllChildIds(1);
106$extrafields->fetch_name_optionals_label(
$object->table_element);
111$hookmanager->initHooks(array(
'usercard',
'globalcard'));
118 $res =
$object->fetch($id,
'',
'', 1);
123if ($user->socid > 0) {
124 $socid = $user->socid;
130$permissiontoadd = (!empty($user->admin) || $user->hasRight(
"user",
"user",
"write")) && (empty($user->socid) || $user->socid ==
$object->socid);
131$permissiontoread = (!empty($user->admin) || $user->hasRight(
"user",
"user",
"read")) && (empty($user->socid) || $user->socid ==
$object->socid);
132$permissiontoedit = (!empty($user->admin) || $user->hasRight(
"user",
"user",
"write")) && (empty($user->socid) || $user->socid ==
$object->socid);
133$permissiontodisable = (!empty($user->admin) || $user->hasRight(
"user",
"user",
"delete")) && (empty($user->socid) || $user->socid ==
$object->socid);
134$permissiontoreadgroup = $permissiontoread;
135$permissiontoeditgroup = $permissiontoedit;
137 $permissiontoreadgroup = (!empty($user->admin) || $user->hasRight(
"user",
"group_advance",
"read")) && (empty($user->socid) || $user->socid ==
$object->socid);
138 $permissiontoeditgroup = (!empty($user->admin) || $user->hasRight(
"user",
"group_advance",
"write")) && (empty($user->socid) || $user->socid ==
$object->socid);
141$permissiontoclonesuperadmin = ($permissiontoadd && empty($user->entity));
142$permissiontocloneadmin = ($permissiontoadd && !empty($user->admin));
143$permissiontocloneuser = $permissiontoadd;
146 $permissiontoclonesuperadmin =
false;
147 $permissiontocloneadmin =
false;
148 $permissiontocloneuser =
false;
151if ($user->id != $id && !$permissiontoread) {
155$caneditpasswordandsee =
false;
156$caneditpasswordandsend =
false;
159$permissiontoeditpasswordandsee =
false;
160$permissiontoeditpasswordandsend =
false;
163 $permissiontoedit = ((($user->id ==
$id) && $user->hasRight(
"user",
"self",
"write")) || (($user->id != $id) && $user->hasRight(
"user",
"user",
"write"))) && (empty($user->socid) || $user->socid ==
$object->socid);
164 $permissiontoeditpasswordandsee = ((($user->id ==
$id) && $user->hasRight(
"user",
"self",
"password")) || (($user->id != $id) && $user->hasRight(
"user",
"user",
"password") && $user->admin))&& (empty($user->socid) || $user->socid ==
$object->socid);
165 $permissiontoeditpasswordandsend = ((($user->id ==
$id) && $user->hasRight(
"user",
"self",
"password")) || (($user->id != $id) && $user->hasRight(
"user",
"user",
"password")))&& (empty($user->socid) || $user->socid ==
$object->socid);
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) {
253 print
'Error, token required for this critical operation';
260 if (
$object->admin && empty($user->admin)) {
263 setEventMessages($langs->trans(
"OnlyAdminUsersCanDeleteAdminUsers"),
null,
'errors');
264 } elseif (
$object->admin && empty(
$object->entity) && !empty($user->entity)) {
267 setEventMessages($langs->trans(
"OnlySuperAdminUsersCanDeleteSuperAdminUsers"),
null,
'errors');
271 $result =
$object->delete($user);
273 $langs->load(
"errors");
277 header(
"Location: ".DOL_URL_ROOT.
"/user/list.php?restore_lastsearch_values=1");
285 if ($action ==
'add' && $permissiontoadd) {
299 if (!empty(
$conf->file->main_limit_users)) {
300 $nb =
$object->getNbOfUsers(
"active");
301 if ($nb >=
$conf->file->main_limit_users) {
303 setEventMessages($langs->trans(
"YourQuotaOfUsersIsReached"),
null,
'errors');
313 $object->national_registration_number =
GETPOST(
"national_registration_number",
'alphanohtml');
328 $object->socialnetworks = array();
329 foreach ($socialnetworks as $key => $value) {
330 if (
GETPOST($key,
'alphanohtml')) {
336 $object->email = preg_replace(
'/\s+/',
'',
GETPOST(
"email",
'alphanohtml'));
343 if (
$object->signature ===
'ErrorTooManyLinksIntoHTMLString') {
345 $langs->load(
"errors");
346 setEventMessages($langs->trans(
'ErrorTooManyLinksIntoHTMLString'),
null,
'errors');
349 $object->accountancy_code =
GETPOST(
"accountancy_code",
'alphanohtml');
358 if ($permissiontoseesalary) {
371 $object->color =
GETPOST(
"color",
'alphanohtml') !=
'' ? str_replace(
'#',
'', (
string)
GETPOST(
"color",
'alphanohtml')) :
'';
373 $object->dateemployment = $dateemployment;
374 $object->dateemploymentend = $dateemploymentend;
375 $object->datestartvalidity = $datestartvalidity;
376 $object->dateendvalidity = $dateendvalidity;
378 $object->force_pass_change = $forcepasswordchange;
385 $ret = $extrafields->setOptionalsFromPost(
null, $object);
399 $object->entity = ($entity ==
'' ? 1 : $entity);
403 $object->entity = ($entity ==
'' ? 1 : $entity);
414 if (
GETPOST(
'password',
'password')) {
415 $resPass =
$object->setPassword($user,
GETPOST(
'password',
'password'));
417 if (is_int($resPass) && $resPass < 0) {
418 $langs->load(
"errors");
425 $usercats =
GETPOST(
'usercats',
'array:int');
426 $object->setCategories($usercats);
430 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
434 $langs->load(
"errors");
443 if (($action ==
'addgroup' || $action ==
'removegroup') && $permissiontoeditgroup) {
446 $editgroup->fetch($group);
447 $editgroup->oldcopy = clone $editgroup;
451 if ($action ==
'addgroup') {
452 $result =
$object->SetInGroup($group, $editgroup->entity);
454 if ($action ==
'removegroup') {
455 $result =
$object->RemoveFromGroup($group, $editgroup->entity);
466 if ($action ==
'update' && ($permissiontoedit || $permissiontoeditpasswordandsee)) {
467 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
469 if ($permissiontoedit) {
472 if (!
GETPOST(
"lastname",
'alpha')) {
477 if (!
GETPOST(
"login",
'alpha')) {
499 $object->national_registration_number =
GETPOST(
"national_registration_number",
'alphanohtml');
502 if ($permissiontoeditpasswordandsee) {
505 if ($permissiontoeditpasswordandsee) {
508 if (!empty($user->admin) && $user->id != $id) {
513 if ($user->admin && !
$object->ldap_sid) {
526 $object->socialnetworks = array();
527 foreach ($socialnetworks as $key => $value) {
528 if (
GETPOST($key,
'alphanohtml')) {
534 $object->email = preg_replace(
'/\s+/',
'',
GETPOST(
"email",
'alphanohtml'));
541 if (
$object->signature ===
'ErrorTooManyLinksIntoHTMLString') {
543 $langs->load(
"errors");
544 setEventMessages($langs->trans(
'ErrorTooManyLinksIntoHTMLString'),
null,
'errors');
547 $object->accountancy_code =
GETPOST(
"accountancy_code",
'alphanohtml');
555 if ($permissiontoseesalary) {
568 $object->color =
GETPOST(
"color",
'alphanohtml') !=
'' ? str_replace(
'#',
'', (
string)
GETPOST(
"color",
'alphanohtml')) :
'';
569 $object->dateemployment = $dateemployment;
570 $object->dateemploymentend = $dateemploymentend;
571 $object->datestartvalidity = $datestartvalidity;
572 $object->dateendvalidity = $dateendvalidity;
574 $object->force_pass_change = $forcepasswordchange;
583 if (
isModEnabled(
'multicompany') && empty($user->entity) && !empty($user->admin)) {
597 $ret = $extrafields->setOptionalsFromPost(
null, $object,
'@GETPOSTISSET');
605 if (!empty($_FILES[
'photo'][
'name'])) {
609 if (
$object->id == $user->id) {
614 $langs->load(
"errors");
616 dol_syslog($langs->transnoentities(
"ErrorBadImageFormat"), LOG_INFO);
621 $passwordismodified = 0;
624 $passwordismodified = 1;
631 if (
$db->errno() ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
632 $langs->load(
"errors");
633 setEventMessages($langs->trans(
"ErrorUpdateCanceledDueToDuplicatedUniqueValue",
$object->login),
null,
'errors');
645 if ($contactid > 0) {
647 $contact->fetch($contactid);
649 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
650 $sql .=
" SET fk_socpeople=".((int) $contactid);
651 if (!empty($contact->socid)) {
652 $sql .=
", fk_soc=".((int) $contact->socid);
653 } elseif ($socid > 0) {
654 $sql .=
", fk_soc = null";
655 setEventMessages($langs->trans(
"WarningUserDifferentContactSocid"),
null,
'warnings');
657 $sql .=
" WHERE rowid = ".((int)
$object->id);
658 } elseif ($socid > 0) {
659 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
660 $sql .=
" SET fk_socpeople=NULL, fk_soc=".((int) $socid);
661 $sql .=
" WHERE rowid = ".((int)
$object->id);
663 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"user";
664 $sql .=
" SET fk_socpeople=NULL, fk_soc=NULL";
665 $sql .=
" WHERE rowid = ".((int)
$object->id);
668 $resql =
$db->query($sql);
675 if (!$error && !count(
$object->errors)) {
677 $fileimg =
$conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 0, $object,
'user').
'photos/'.
$object->oldcopy->photo;
680 $dirthumbs =
$conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 0, $object,
'user').
'photos/thumbs';
684 if (isset($_FILES[
'photo'][
'tmp_name']) && trim($_FILES[
'photo'][
'tmp_name'])) {
685 $dir =
$conf->user->dir_output.
'/'.
get_exdir(0, 0, 0, 1, $object,
'user').
'/photos';
692 $result =
dol_move_uploaded_file($_FILES[
'photo'][
'tmp_name'], $newfile, 1, 0, $_FILES[
'photo'][
'error']);
695 if (!is_numeric($result) || $result <= 0) {
703 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
712 $langs->load(
"errors");
713 setEventMessages($langs->trans(
"ErrorFailedToCreateDir", $dir), $mesgs,
'errors');
718 if (!$error && !count(
$object->errors)) {
720 $categories =
GETPOST(
'usercats',
'array:int');
721 $object->setCategories($categories);
724 if (!$error && !count(
$object->errors)) {
728 $login = $_SESSION[
"dol_login"];
731 $langs->load(
"errors");
732 setEventMessages($langs->transnoentitiesnoconv(
"WarningYourLoginWasModifiedPleaseLogin"),
null,
'warnings');
734 if ($passwordismodified &&
$object->login == $user->login) {
736 $langs->load(
"errors");
737 setEventMessages($langs->transnoentitiesnoconv(
"WarningYourPasswordWasModifiedPleaseLogin"),
null,
'warnings');
738 header(
"Location: ".DOL_URL_ROOT.
'/user/card.php?id='.
$object->id);
746 if ($permissiontoeditpasswordandsee) {
747 dol_syslog(
"Not allowed to change fields, only password");
751 if (
GETPOST(
"password",
"password")) {
754 $ret =
$object->setPassword($user,
GETPOST(
"password",
"password"));
755 if (is_int($ret) && $ret < 0) {
764 if ((($action ==
'confirm_password' && $confirm ==
'yes' && $permissiontoeditpasswordandsee)
765 || ($action ==
'confirm_passwordsend' && $confirm ==
'yes' && $permissiontoeditpasswordandsend))
769 $newpassword =
$object->setPassword($user,
'');
770 if (is_int($newpassword) && $newpassword < 0) {
772 setEventMessages($langs->trans(
"ErrorFailedToSetNewPassword"),
null,
'errors');
775 if ($action ==
'confirm_passwordsend') {
776 if (
$object->send_password($user, $newpassword) > 0) {
782 setEventMessages($langs->trans(
"PasswordChangedTo", $newpassword),
null,
'warnings');
788 if ($action ==
'adduserldap' && $permissiontoadd) {
789 $selecteduser =
GETPOST(
'users');
791 $required_fields = array(
808 $arrayofsocialnetworks = array(
'skype',
'twitter',
'facebook',
'linkedin');
809 foreach ($arrayofsocialnetworks as $socialnetwork) {
815 $result = $ldap->connectBind();
818 $required_fields = array_unique(array_values(array_filter($required_fields,
"dol_validElement")));
823 if (is_array($ldapusers)) {
824 foreach ($ldapusers as $key => $attribute) {
836 $ldap_social = array();
839 $arrayofsocialnetworks = array(
'skype',
'twitter',
'facebook',
'linkedin');
840 foreach ($arrayofsocialnetworks as $socialnetwork) {
841 $ldap_social[$socialnetwork] = $attribute[
getDolGlobalString(
'LDAP_FIELD_'.strtoupper($socialnetwork))];
851 if ($action ==
'confirm_clone' && $confirm !=
'yes') {
854 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontocloneuser) {
858 setEventMessages($langs->trans(
'ErrorNoCloneWithoutEmail'),
null,
'errors');
866 $clone->api_key =
'';
867 $clone->admin = ($user->admin ?
$object->admin : 0);
869 $parts = explode(
' ',
GETPOST(
'clone_name'), 2);
870 $clone->firstname = $parts[0];
871 $clone->lastname = isset($parts[1]) ? $parts[1] :
'';
873 $clone->login = substr($parts[0], 0, 1).$parts[1];
876 $clone->context[
'createfromclone'] =
'createfromclone';
877 $id = $clone->create($user);
878 $refalreadyexists = 0;
881 $result = $clone->cloneRights(
$object->id, $id);
884 if (
GETPOST(
'clone_categories')) {
885 $result = $clone->cloneCategories(
$object->id, $id);
893 if ($clone->error ==
'ErrorProductAlreadyExists') {
897 $mesg = $langs->trans(
"ErrorProductAlreadyExists", $clone->ref);
898 $mesg .=
' <a href="' . $_SERVER[
"PHP_SELF"] .
'?ref=' . $clone->ref .
'">' . $langs->trans(
"ShowCardHere") .
'</a>.';
901 setEventMessages(empty($clone->error) ?
'' : $langs->trans($clone->error), $clone->errors,
'errors');
905 unset($clone->context[
'createfromclone']);
912 header(
"Location: " . $_SERVER[
"PHP_SELF"] .
"?id=" . $id);
923 $triggersendname =
'USER_SENTBYMAIL';
925 $mode =
'emailfromuser';
926 $trackid =
'use'.$id;
927 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
930 $upload_dir =
$conf->user->dir_output;
931 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
934 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
954$sql =
"SELECT COUNT(rowid) as nb FROM ".MAIN_DB_PREFIX.
'user WHERE entity IN ('.
getEntity(
'user').
')';
955$resql =
$db->query($sql);
957 $obj =
$db->fetch_object($resql);
959 $nbofusers = $obj->nb;
967 $title = $person_name.
" - ".$langs->trans(
'Card');
970 $title = $langs->trans(
"NewEmployee");
972 $title = $langs->trans(
"NewUser");
978llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-user page-card');
980if ($action ==
'create' || $action ==
'adduserldap') {
983 print
'<span class="opacitymedium">'.$langs->trans(
"CreateInternalUserDesc", $langs->transnoentities(
"CreateExternalUser")).
"</span><br>\n";
992 $result = $ldap->connectBind();
994 $required_fields = array(
1014 $required_fields = array_unique(array_values(array_filter($required_fields,
"dol_validElement")));
1019 if (is_array($ldapusers)) {
1020 foreach ($ldapusers as $key => $ldapuser) {
1023 foreach ($required_fields as $value) {
1025 $label .= $value.
"=******* ";
1027 $label .= $value.
"=".$ldapuser[$value].
" ";
1030 $liste[$key] = $label;
1040 print
"\n\n<!-- Form liste LDAP debut -->\n";
1042 print
'<form name="add_user_ldap" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1043 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1044 print
'<table class="border centpercent"><tr>';
1045 print
'<td width="160">';
1046 print $langs->trans(
"LDAPUsers");
1049 print
'<input type="hidden" name="action" value="adduserldap">';
1050 if (is_array($liste) && count($liste)) {
1051 print $form->selectarray(
'users', $liste,
'', 1, 0, 0,
'', 0, 0, 0,
'',
'maxwidth500');
1054 print
'</td><td class="center">';
1055 print
'<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans(
'Get')).
'"'.(count($liste) ?
'' :
' disabled').
'>';
1056 print
'</td></tr></table>';
1059 print
"\n<!-- Form liste LDAP fin -->\n\n";
1064 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'" method="POST" name="createuser">';
1065 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1066 print
'<input type="hidden" name="action" value="add">';
1067 if (!empty($ldap_sid)) {
1068 print
'<input type="hidden" name="ldap_sid" value="'.dol_escape_htmltag($ldap_sid).
'">';
1070 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'">';
1076 print
'<table class="border centpercent">';
1080 print
'<tr><td><label for="civility_code">'.$langs->trans(
"UserTitle").
'</label></td><td>';
1081 print $formcompany->select_civility(
GETPOSTISSET(
"civility_code") ?
GETPOST(
"civility_code",
'aZ09') :
$object->civility_code,
'civility_code');
1087 print
'<td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans(
"Lastname").
'</span></td>';
1089 if (!empty($ldap_lastname)) {
1090 print
'<input type="hidden" id="lastname" name="lastname" value="'.dol_escape_htmltag($ldap_lastname).
'">';
1091 print $ldap_lastname;
1093 print
'<input class="minwidth100 maxwidth150onsmartphone createloginauto" type="text" id="lastname" name="lastname" value="'.dol_escape_htmltag(
GETPOST(
'lastname',
'alphanohtml')).
'">';
1098 print
'<tr><td>'.$langs->trans(
"Firstname").
'</td>';
1100 if (!empty($ldap_firstname)) {
1101 print
'<input type="hidden" name="firstname" value="'.dol_escape_htmltag($ldap_firstname).
'">';
1102 print $ldap_firstname;
1104 print
'<input id="firstname" class="minwidth100 maxwidth150onsmartphone createloginauto" type="text" name="firstname" value="'.dol_escape_htmltag(
GETPOST(
'firstname',
'alphanohtml')).
'">';
1109 print
'<tr><td><span class="fieldrequired">'.$langs->trans(
"Login").
'</span></td>';
1111 if (!empty($ldap_login)) {
1112 print
'<input type="hidden" name="login" value="'.dol_escape_htmltag($ldap_login).
'">';
1114 } elseif (!empty($ldap_loginsmb)) {
1115 print
'<input type="hidden" name="login" value="'.dol_escape_htmltag($ldap_loginsmb).
'">';
1116 print $ldap_loginsmb;
1118 print
'<input id="login" class="maxwidth200 maxwidth150onsmartphone" maxsize="24" type="text" name="login" value="'.dol_escape_htmltag(
GETPOST(
'login',
'alphanohtml')).
'" spellcheck="false">';
1122 if (!empty(
$conf->use_javascript_ajax)) {
1126 $charforseparator =
getDolGlobalString(
"MAIN_USER_SEPARATOR_CHAR_FOR_GENERATED_LOGIN",
'.');
1127 if ($charforseparator ==
'none') {
1128 $charforseparator =
'';
1131 jQuery(document).ready(function() {
1132 $(".createloginauto").on("keyup", function() {
1133 console.log(".createloginauto change: We generate login when we have a lastname");
1135 lastname = $("#lastname").val().toLowerCase();
1138 print
' firstname = $("#firstname").val().toLowerCase().replace(/\s+/g, \'\').trim()[0];';
1139 $charforseparator =
'';
1141 print
' firstname = $("#firstname").val().toLowerCase().replace(/\s+/g, \'\').trim()[0];';
1143 print
' firstname = $("#firstname").val().toLowerCase().replace(/\s+/g, \'\').trim();';
1149 login = firstname + \''.
dol_escape_js($charforseparator).
'\';
1151 login += lastname.replace(/\s+/g, \
'\').trim();
1153 $(
"#login").val(login);
1159 $generated_password = '';
1160 if (empty($ldap_sid)) { // ldap_sid is for activedirectory
1161 $generated_password = getRandomPassword(false);
1163 $password = (GETPOSTISSET('password
') ? GETPOST('password
') : $generated_password);
1166 if (!empty($user->admin)) {
1167 print '<tr><td>
'.$form->textwithpicto($langs->trans("Administrator"), $langs->trans("AdministratorDesc"), 1, 'help
').'</td>
';
1169 print $form->selectyesno('admin
', GETPOST('admin
'), 1, false, 0, 1);
1171 if (isModEnabled('multicompany
') && !$user->entity) {
1172 if (!empty($conf->use_javascript_ajax)) {
1173 print '<script
type=
"text/javascript">
1175 $(
"select[name=admin]").change(
function() {
1176 if ( $(
this).val() == 0 ) {
1177 $(
"input[name=superadmin]")
1178 .prop(
"disabled",
true)
1179 .prop(
"checked",
false);
1180 $(
"select[name=entity]")
1181 .prop(
"disabled",
false);
1183 $(
"input[name=superadmin]")
1184 .prop(
"disabled",
false);
1187 $(
"input[name=superadmin]").change(
function() {
1188 if ( $(
this).is(
":checked") ) {
1189 $(
"select[name=entity]")
1190 .prop(
"disabled",
true);
1192 $(
"select[name=entity]")
1193 .prop(
"disabled",
false);
1199 $checked = (GETPOSTINT('superadmin
') ? ' checked
' : '');
1200 $disabled = (GETPOSTINT('superadmin
') ? '' : ' disabled');
1201 print '<input
type=
"checkbox" name=
"superadmin" id=
"superadmin" value=
"1"'.$checked.$disabled.' /> <label
for=
"superadmin">
'.$langs->trans("SuperAdministrator").'</span>
';
1203 print "</td></tr>\n";
1207 print '<tr><td>
'.$langs->trans("Gender").'</td>
';
1209 $arraygender = array('man
' => $langs->trans("Genderman"), 'woman
' => $langs->trans("Genderwoman"), 'other
' => $langs->trans("Genderother"));
1210 print $form->selectarray('gender
', $arraygender, GETPOST('gender
'), 1);
1214 $defaultemployee = '1
';
1216 print '<td>
'.$langs->trans('Employee
').'</td><td>
';
1217 print '<input
type=
"checkbox" name=
"employee" value=
"1"'.(GETPOST('employee
') == '1
' ? ' checked=
"checked"' : (($defaultemployee && !GETPOSTISSET('login
')) ? ' checked=
"checked"' : '')).'>
';
1218 //print $form->selectyesno("employee", (GETPOST('employee
') != '' ?GETPOST('employee
') : $defaultemployee), 1);
1222 print '<tr><td
class=
"titlefieldcreate">
'.$langs->trans("HierarchicalResponsible").'</td>
';
1224 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
');
1228 // Expense report validator
1229 if (isModEnabled('expensereport
')) {
1230 print '<tr><td
class=
"titlefieldcreate">
';
1231 $text = $langs->trans("ForceUserExpenseValidator");
1232 print $form->textwithpicto($text, $langs->trans("ValidatorIsSupervisorByDefault"), 1, 'help
');
1235 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
');
1240 // Holiday request validator
1241 if (isModEnabled('holiday
')) {
1242 print '<tr><td
class=
"titlefieldcreate">
';
1243 $text = $langs->trans("ForceUserHolidayValidator");
1244 print $form->textwithpicto($text, $langs->trans("ValidatorIsSupervisorByDefault"), 1, 'help
');
1247 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
');
1253 print '<tr><td>
'.$langs->trans("ExternalUser").' ?</td>
';
1255 print $form->textwithpicto($langs->trans("Internal"), $langs->trans("InternalExternalDesc"), 1, 'help
', '', 0, 2);
1259 print '</
table><hr><
table class=
"border centpercent">
';
1263 print '<tr><td
class=
"titlefieldcreate">
'.$langs->trans("RangeOfLoginValidity").'</td>
';
1265 print $form->selectDate($datestartvalidity, 'datestartvalidity
', 0, 0, 1, 'formdatestartvalidity
', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("from"));
1269 print $form->selectDate($dateendvalidity, 'dateendvalidity
', 0, 0, 1, 'formdateendvalidity
', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
1274 print '<tr><td
class=
"fieldrequired">
'.$langs->trans("Password").'</td>
';
1277 if (preg_match('/ldap/
', $dolibarr_main_authentication)) {
1278 $valuetoshow .= ($valuetoshow ? ' +
' : '').$langs->trans("PasswordOfUserInLDAP").' (hidden)
';
1280 if (preg_match('/http/
', $dolibarr_main_authentication)) {
1281 $valuetoshow .= ($valuetoshow ? ' +
' : '').$langs->trans("HTTPBasicPassword");
1283 if (preg_match('/dolibarr/
', $dolibarr_main_authentication) || preg_match('/forceuser/
', $dolibarr_main_authentication)) {
1284 if (!empty($ldap_pass)) { // For very old system compatibility. Now clear password can't be viewed from LDAP read
1285 $valuetoshow .= ($valuetoshow ?
' + ' :
'').
'<input type="hidden" name="password" value="'.
dol_escape_htmltag($ldap_pass).
'">';
1286 $valuetoshow .= preg_replace(
'/./i',
'*', $ldap_pass);
1289 $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">';
1290 if (!empty(
$conf->use_javascript_ajax)) {
1291 $valuetoshow .=
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_password" class="linkobject paddingleft"');
1296 $parameters = array(
'valuetoshow' => $valuetoshow,
'password' => $password,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
1297 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
1299 $valuetoshow = $hookmanager->resPrint;
1301 $valuetoshow .= $hookmanager->resPrint;
1308 if ($_SESSION[
"dol_authmode"] ==
'dolibarr') {
1309 print
'<tr><td class="titlefieldcreate"></td>';
1312 $permissiontoselfeditpassword = 1;
1313 if ($permissiontoselfeditpassword) {
1314 print
'<input type="checkbox" name="forcepasswordchange" id="forcepasswordchange" value="1"'.(GETPOST(
'forcepasswordchange') ==
'1' ?
' checked="checked"' :
'').
'>';
1315 print
'<label class="opacitymedium" for="forcepasswordchange">'.$langs->trans(
"ForcePasswordChange").
'</label>';
1317 print
'<input type="checkbox" name="forcepasswordchange" value="1" class="colorgrey valignmiddle" disabled>';
1318 print $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"ForcePasswordChange").
'</span>', $langs->trans(
"UserDoesNotHaveRightsToChangeHisPassword"));
1328 print
'<tr><td>'.$langs->trans(
"ApiKey").
'</td>';
1330 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">';
1331 if (!empty(
$conf->use_javascript_ajax)) {
1332 print
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_api_key" class="linkobject paddingleft"');
1338 print
'<input type="hidden" name="api_key" value="'.$generated_fake_api_key.
'">';
1342 print
'</table><hr><table class="border centpercent">';
1346 print
'<tr><td class="tdtop titlefieldcreate">'.$form->editfieldkey(
'Address',
'address',
'', $object, 0).
'</td>';
1347 print
'<td><textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
1349 print
'</textarea></td></tr>';
1352 print
'<tr><td>'.$form->editfieldkey(
'Zip',
'zipcode',
'', $object, 0).
'</td><td>';
1353 print $formcompany->select_ziptown(
$object->zip,
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6);
1357 print
'<tr><td>'.$form->editfieldkey(
'Town',
'town',
'', $object, 0).
'</td><td>';
1358 print $formcompany->select_ziptown(
$object->town,
'town', array(
'zipcode',
'selectcountry_id',
'state_id'));
1362 print
'<tr><td>'.$form->editfieldkey(
'Country',
'selectcountry_id',
'', $object, 0).
'</td><td class="maxwidthonsmartphone">';
1363 print
img_picto(
'',
'country',
'class="pictofixedwidth"');
1364 print $form->select_country((
GETPOST(
'country_id') !=
'' ?
GETPOST(
'country_id') :
$object->country_id),
'country_id');
1366 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1372 print
'<tr><td>'.$form->editfieldkey(
'State',
'state_id',
'', $object, 0).
'</td><td class="maxwidthonsmartphone">';
1373 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
1374 print $formcompany->select_state_ajax(
'country_id',
$object->state_id,
$object->country_id,
'state_id');
1379 print
'<tr><td>'.$langs->trans(
"PhonePro").
'</td>';
1381 print
img_picto(
'',
'object_phoning',
'class="pictofixedwidth"');
1382 if (!empty($ldap_phone)) {
1383 print
'<input type="hidden" name="office_phone" value="'.dol_escape_htmltag($ldap_phone).
'">';
1386 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="office_phone" value="'.dol_escape_htmltag(
GETPOST(
'office_phone',
'alphanohtml')).
'">';
1391 print
'<tr><td>'.$langs->trans(
"PhoneMobile").
'</td>';
1393 print
img_picto(
'',
'object_phoning_mobile',
'class="pictofixedwidth"');
1394 if (!empty($ldap_mobile)) {
1395 print
'<input type="hidden" name="user_mobile" value="'.dol_escape_htmltag($ldap_mobile).
'">';
1398 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="user_mobile" value="'.dol_escape_htmltag(
GETPOST(
'user_mobile',
'alphanohtml')).
'" spellcheck="false">';
1403 print
'<tr><td>'.$langs->trans(
"Fax").
'</td>';
1405 print
img_picto(
'',
'object_phoning_fax',
'class="pictofixedwidth"');
1406 if (!empty($ldap_fax)) {
1407 print
'<input type="hidden" name="office_fax" value="'.dol_escape_htmltag($ldap_fax).
'">';
1410 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="office_fax" value="'.dol_escape_htmltag(
GETPOST(
'office_fax',
'alphanohtml')).
'">';
1415 print
'<tr><td'.(getDolGlobalString(
'USER_MAIL_REQUIRED') ?
' class="fieldrequired"' :
'').
'>'.$langs->trans(
"EMail").
'</td>';
1417 print
img_picto(
'',
'object_email',
'class="pictofixedwidth"');
1418 if (!empty($ldap_mail)) {
1419 print
'<input type="hidden" name="email" value="'.dol_escape_htmltag($ldap_mail).
'">';
1422 print
'<input type="text" name="email" class="maxwidth500 widthcentpercentminusx" value="'.dol_escape_htmltag(
GETPOST(
'email',
'alphanohtml')).
'" spellcheck="false">';
1428 foreach ($socialnetworks as $key => $value) {
1429 if ($value[
'active']) {
1430 print
'<tr><td>'.$langs->trans($value[
'label']).
'</td>';
1432 if (!empty($value[
'icon'])) {
1433 print
'<span class="fab '.$value[
'icon'].
' pictofixedwidth"></span>';
1435 if (!empty($ldap_social[$key])) {
1436 print
'<input type="hidden" name="'.$key.
'" value="'.$ldap_social[$key].
'">';
1437 print $ldap_social[$key];
1439 print
'<input class="maxwidth200 widthcentpercentminusx" type="text" name="'.$key.
'" value="'.
GETPOST($key,
'alphanohtml').
'">';
1444 if (!empty($ldap_social[$key])) {
1445 print
'<input type="hidden" name="'.$key.
'" value="'.$ldap_social[$key].
'">';
1447 print
'<input type="hidden" name="'.$key.
'" value="'.
GETPOST($key,
'alphanohtml').
'">';
1455 print
'<tr><td>'.$langs->trans(
"AccountancyCode").
'</td>';
1457 print
'<input type="text" class="maxwidthonsmartphone" name="accountancy_code" value="'.dol_escape_htmltag(
GETPOST(
'accountancy_code',
'alphanohtml')).
'">';
1463 print
'<tr><td>'.$langs->trans(
"Color").
'</td>';
1465 print $formother->selectColor(
GETPOSTISSET(
'color') ?
GETPOST(
'color',
'alphanohtml') :
$object->color,
'color', null, 1, array(),
'hideifnotset');
1470 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
1471 print
'<tr><td>'.$form->editfieldkey(
'Categories',
'usercats',
'', $object, 0).
'</td><td>';
1472 print $form->selectCategories(Categorie::TYPE_USER,
'usercats', $object);
1478 print
'<tr><td>'.$form->editfieldkey(
'DefaultLang',
'default_lang',
'', $object, 0,
'string',
'', 0, 0,
'id', $langs->trans(
"WarningNotLangOfInterface", $langs->transnoentitiesnoconv(
"UserGUISetup"))).
'</td>';
1479 print
'<td class="maxwidthonsmartphone">'.
"\n";
1480 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');
1486 if (
isModEnabled(
'multicompany') && isset($mc) && is_object($mc)) {
1488 if (!method_exists($mc,
'formObjectOptions')) {
1489 if (!
getDolGlobalString(
'MULTICOMPANY_TRANSVERSE_MODE') &&
$conf->entity == 1 && $user->admin && !$user->entity) {
1490 print
"<tr>".
'<td>'.$langs->trans(
"Entity").
'</td>';
1491 print
"<td>".$mc->select_entities(
$conf->entity);
1492 print
"</td></tr>\n";
1494 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
1500 $parameters = array();
1501 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
1504 print
'<tr><td class="tdtop">'.$langs->trans(
"Signature").
'</td>';
1505 print
'<td class="wordbreak">';
1506 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1508 $doleditor =
new DolEditor(
'signature',
GETPOST(
'signature',
'restricthtml'),
'', 138,
'dolibarr_notes',
'In',
true, $acceptlocallinktomedia, !
getDolGlobalString(
'FCKEDITOR_ENABLE_USERSIGN') ? 0 : 1, ROWS_4,
'90%');
1509 print $doleditor->Create(1);
1513 print
'<tr><td class="tdtop">';
1514 print $langs->trans(
"NotePublic");
1516 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1517 $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%');
1518 $doleditor->Create();
1519 print
"</td></tr>\n";
1522 print
'<tr><td class="tdtop">';
1523 print $langs->trans(
"NotePrivate");
1525 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
1526 $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%');
1527 $doleditor->Create();
1528 print
"</td></tr>\n";
1530 print
'</table><hr><table class="border centpercent">';
1537 print
'<tr><td>'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
1538 print $formproduct->selectWarehouses(
$object->fk_warehouse,
'fk_warehouse',
'warehouseopen', 1);
1543 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"PostOrFunction").
'</td>';
1545 print
'<input class="maxwidth200 maxwidth150onsmartphone" type="text" name="job" value="'.dol_escape_htmltag(
GETPOST(
'job',
'alphanohtml')).
'">';
1548 if ($permissiontoseesalary) {
1549 $langs->load(
"salaries");
1553 $text = $langs->trans(
"THM");
1554 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
1557 print
'<input size="8" type="text" name="thm" value="'.dol_escape_htmltag(
GETPOST(
'thm')).
'"> <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
1563 $text = $langs->trans(
"TJM");
1564 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classtjm');
1567 print
'<input size="8" type="text" name="tjm" value="'.dol_escape_htmltag(
GETPOST(
'tjm')).
'"> <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
1572 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
1574 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>';
1580 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
1582 print
'<input size="8" type="text" name="weeklyhours" value="'.dol_escape_htmltag(
GETPOST(
'weeklyhours')).
'">';
1587 print
'<tr><td>'.$langs->trans(
"DateOfEmployment").
'</td>';
1589 print $form->selectDate($dateemployment,
'dateemployment', 0, 0, 1,
'formdateemployment', 1, 1, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
1593 print $form->selectDate($dateemploymentend,
'dateemploymentend', 0, 0, 1,
'formdateemploymentend', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
1598 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
1600 print $form->selectDate($dateofbirth,
'dateofbirth', 0, 0, 1,
'createuser', 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzserver');
1608 print $form->buttonsSaveCancel(
"CreateUser");
1614 $res =
$object->fetch($id,
'',
'', 1);
1619 $res =
$object->fetch_optionals();
1629 $passDoNotExpire = 0;
1631 $userChangePassNextLogon = 0;
1637 $result = $ldap->connectBind();
1639 $userSearchFilter =
'(' .
getDolGlobalString(
'LDAP_FILTER_CONNECTION').
'('.$ldap->getUserIdentifier().
'='.
$object->login.
'))';
1640 $entries = $ldap->fetch(
$object->login, $userSearchFilter);
1646 if (count($ldap->uacf) > 0) {
1647 foreach ($ldap->uacf as $key => $statut) {
1648 if ($key == 65536) {
1649 $passDoNotExpire = 1;
1650 $statutUACF = $statut;
1655 $statutUACF =
"ACCOUNTDISABLE";
1658 if ($ldap->pwdlastset == 0) {
1659 $userChangePassNextLogon = 1;
1665 if ($mode ==
'employee') {
1666 $title = $langs->trans(
"Employee");
1667 $linkback =
'<a href="'.DOL_URL_ROOT.
'/hrm/employee/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
1669 $title = $langs->trans(
"User");
1672 if ($user->hasRight(
"user",
"user",
"read") || $user->admin) {
1673 $linkback =
'<a href="'.DOL_URL_ROOT.
'/user/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
1680 if ($action ==
'password') {
1681 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"ReinitPassword"), $langs->trans(
"ConfirmReinitPassword",
$object->login),
"confirm_password",
'', 0, 1);
1685 if ($action ==
'passwordsend') {
1686 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"SendNewPassword"), $langs->trans(
"ConfirmSendNewPassword",
$object->login),
"confirm_passwordsend",
'', 0, 1);
1690 if ($action ==
'disable') {
1691 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"DisableAUser"), $langs->trans(
"ConfirmDisableUser",
$object->login),
"confirm_disable",
'', 0, 1);
1695 if ($action ==
'enable') {
1696 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"EnableAUser"), $langs->trans(
"ConfirmEnableUser",
$object->login),
"confirm_enable",
'', 0, 1);
1700 if ($action ==
'delete') {
1701 print $form->formconfirm(
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id]), $langs->trans(
"DeleteAUser"), $langs->trans(
"ConfirmDeleteUser",
$object->login),
"confirm_delete",
'', 0, 1);
1705 if (($action ==
'clone' && (empty(
$conf->use_javascript_ajax) || !empty(
$conf->dol_use_jmobile)))
1706 || (!empty(
$conf->use_javascript_ajax) && empty(
$conf->dol_use_jmobile))) {
1708 $formquestionclone = array(
1709 'text' => $langs->trans(
"ConfirmClone"),
1710 0 => array(
'type' =>
'text',
'name' =>
'clone_name',
'label' => $langs->trans(
"NewNameUserClone"),
'morecss' =>
'width200'),
1711 1 => array(
'type' =>
'checkbox',
'name' =>
'clone_rights',
'label' => $langs->trans(
"CloneUserRights"),
'value' => 0),
1712 2 => array(
'type' =>
'checkbox',
'name' =>
'clone_categories',
'label' => $langs->trans(
"CloneCategoriesProduct"),
'value' => 0),
1715 $newElement = array(
'type' =>
'text',
'name' =>
'new_email',
'label' => $langs->trans(
"NewEmailUserClone"),
'morecss' =>
'width200');
1716 array_splice($formquestionclone, 2, 0, array($newElement));
1718 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);
1723 if ($action !=
'edit') {
1724 print
dol_get_fiche_head($head,
'user', $title, -1,
'user', 0,
'',
'', 0,
'', 1);
1726 $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">';
1727 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard").
' ('.$langs->trans(
"AddToContacts").
')',
'vcard',
'class="valignmiddle marginleftonly paddingrightonly"');
1728 $morehtmlref .=
'</a>';
1730 $urltovirtualcard =
'/user/virtualcard.php?id='.((int)
$object->id);
1731 $morehtmlref .=
dolButtonToOpenUrlInDialogPopup(
'publicvirtualcard', $langs->transnoentitiesnoconv(
"PublicVirtualCardUrl").
' - '.
$object->getFullName($langs),
img_picto($langs->trans(
"PublicVirtualCardUrl"),
'card',
'class="valignmiddle marginleftonly paddingrightonly"'), $urltovirtualcard,
'',
'refid valignmiddle nohover');
1733 dol_banner_tab($object,
'id', $linkback, $user->hasRight(
"user",
"user",
"read") || $user->admin,
'rowid',
'ref', $morehtmlref);
1735 print
'<div class="fichecenter">';
1736 print
'<div class="fichehalfleft">';
1738 print
'<div class="underbanner clearboth"></div>';
1739 print
'<table class="border tableforfield centpercent">';
1742 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
"Login").
'</td>';
1743 if (!empty(
$object->ldap_sid) &&
$object->status == User::STATUS_DISABLED) {
1744 print
'<td class="error">';
1745 print $langs->trans(
"LoginAccountDisableInDolibarr");
1751 $addadmin .=
img_picto($langs->trans(
"SuperAdministratorDesc"),
"superadmin",
'class="paddingleft valignmiddle"');
1752 } elseif (!empty(
$object->admin)) {
1753 $addadmin .=
img_picto($langs->trans(
"AdministratorDesc"),
"admin",
'class="paddingleft valignmiddle"');
1762 $text = $langs->trans(
"Type");
1763 print $form->textwithpicto($text, $langs->trans(
"InternalExternalDesc"));
1765 $type = $langs->trans(
"Internal");
1767 $type = $langs->trans(
"External");
1769 print
'<span class="badgeneutral">';
1772 print
' ('.$langs->trans(
"DomainUser").
')';
1775 print
'</td></tr>'.
"\n";
1778 if (
$object->ldap_sid && is_object($ldap)) {
1779 print
'<tr><td>'.$langs->trans(
"Type").
'</td><td>';
1780 print $langs->trans(
"DomainUser", $ldap->domainFQDN);
1781 print
'</td></tr>'.
"\n";
1785 print
'<tr><td>'.$langs->trans(
"Employee").
'</td><td>';
1787 print
'<input type="checkbox" disabled name="employee" value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
1791 print
'</td></tr>'.
"\n";
1794 if ($nbofusers > 1) {
1796 print
'<tr><td>'.$langs->trans(
"HierarchicalResponsible").
'</td>';
1798 if (empty(
$object->fk_user)) {
1799 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
1803 $huser->fetch(
$object->fk_user);
1804 print $huser->getNomUrl(-1);
1806 print
'<span class="opacitymedium">'.$langs->trans(
"None").
'</span>';
1815 $text = $langs->trans(
"ForceUserExpenseValidator");
1816 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
1819 if (!empty(
$object->fk_user_expense_validator)) {
1821 $evuser->fetch(
$object->fk_user_expense_validator);
1822 print $evuser->getNomUrl(-1);
1831 $text = $langs->trans(
"ForceUserHolidayValidator");
1832 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
1835 if (!empty(
$object->fk_user_holiday_validator)) {
1837 $hvuser->fetch(
$object->fk_user_holiday_validator);
1838 print $hvuser->getNomUrl(-1);
1846 print
'<tr><td>'.$langs->trans(
"PostOrFunction").
'</td>';
1847 print
'<td>'.dol_escape_htmltag(
$object->job).
'</td>';
1851 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
1858 if ($permissiontoseesalary) {
1859 $langs->load(
"salaries");
1862 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
1864 print(
$object->salary !=
'' ?
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<span class="amount">'.
price(
$object->salary, 0, $langs, 1, -1, -1,
$conf->currency) :
'').
'</span>';
1870 $text = $langs->trans(
"THM");
1871 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
1874 print(
$object->thm !=
'' ?
'<span class="amount">'.price(
$object->thm, 0, $langs, 1, -1, -1,
$conf->currency).
'</span>' :
'');
1880 $text = $langs->trans(
"TJM");
1881 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classtjm');
1884 print(
$object->tjm !=
'' ?
'<span class="amount">'.price(
$object->tjm, 0, $langs, 1, -1, -1,
$conf->currency).
'</span>' :
'');
1890 print
'<tr><td>'.$langs->trans(
"DateOfEmployment").
'</td>';
1892 if (
$object->dateemployment) {
1893 print
'<span class="opacitymedium">'.$langs->trans(
"FromDate").
'</span> ';
1896 if (
$object->dateemploymentend) {
1897 print
'<span class="opacitymedium"> - '.$langs->trans(
"To").
'</span> ';
1904 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
1912 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1913 print
'<tr><td>'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
1914 if (
$object->fk_warehouse > 0) {
1916 $warehousestatic->fetch(
$object->fk_warehouse);
1917 print $warehousestatic->getNomUrl(1);
1925 print
'<div class="fichehalfright">';
1927 print
'<div class="underbanner clearboth"></div>';
1929 print
'<table class="border tableforfield centpercent">';
1933 print
'<tr><td class="titlefieldmax45">'.$langs->trans(
"Color").
'</td>';
1935 print $formother->showColor(
$object->color,
'');
1941 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
1942 print
'<tr><td>'.$langs->trans(
"Categories").
'</td>';
1944 print $form->showCategories(
$object->id, Categorie::TYPE_USER, 1);
1950 $langs->load(
"languages");
1951 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1953 print $form->textwithpicto($langs->trans(
"DefaultLang"), $langs->trans(
"WarningNotLangOfInterface", $langs->transnoentitiesnoconv(
"UserGUISetup")));
1957 $labellang = (
$object->lang ? $langs->trans(
'Language_'.
$object->lang) :
'');
1963 if (isset(
$conf->file->main_authentication) && preg_match(
'/openid/',
$conf->file->main_authentication) &&
getDolGlobalString(
'MAIN_OPENIDURL_PERUSER')) {
1964 print
'<tr><td>'.$langs->trans(
"OpenIDURL").
'</td>';
1965 print
'<td>'.$object->openid.
'</td>';
1970 if (
isModEnabled(
'multicompany') && isset($mc) && is_object($mc)) {
1972 if (!method_exists($mc,
'formObjectOptions')) {
1974 print
'<tr><td>'.$langs->trans(
"Entity").
'</td><td>';
1976 print $langs->trans(
"AllEntities");
1978 $mc->getInfo(
$object->entity);
1981 print
"</td></tr>\n";
1987 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1991 print
'<tr><td>'.$langs->trans(
"LinkToCompanyContact").
'</td>';
1996 $societe->fetch(
$object->socid);
1997 if ($societe->id > 0) {
1998 $s .= $societe->getNomUrl(1,
'');
2001 $s .=
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"ThisUserIsNot").
'</span>';
2003 if (!empty(
$object->contact_id)) {
2005 $contact->fetch(
$object->contact_id);
2006 if ($contact->id > 0) {
2007 if (
$object->socid > 0 && $s) {
2012 $s .= $contact->getNomUrl(1,
'');
2022 $langs->load(
"members");
2023 print
'<tr><td>'.$langs->trans(
"LinkedToDolibarrMember").
'</td>';
2027 $adh->fetch(
$object->fk_member);
2028 $adh->ref = $adh->getFullname($langs);
2029 print $adh->getNomUrl(-1);
2031 print
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"UserNotLinkedToMember").
'</span>';
2038 print
'<tr><td class="tdtop">'.$langs->trans(
'Signature').
'</td><td class="wordbreak">';
2040 print
"</td></tr>\n";
2051 print
'<!-- credential section -->'.
"\n";
2052 print
'<div class="div-table-responsive-no-min">';
2053 print
'<table class="noborder tableforfield centpercent">';
2056 print
'<tr class="liste_titre"><th class="liste_titre" colspan="2">';
2057 print
'<div class="centpercent display-flex">';
2058 print
'<div class="left inline-block">';
2059 print
img_picto(
'',
'security',
'class="paddingleft pictofixedwidth"').$langs->trans(
"SecurityForConnection");
2066 print
'<tr class="nooddeven"><td class="titlefieldmax45 nowraponall">'.$langs->trans(
"RangeOfLoginValidity").
'</td>';
2068 if (
$object->datestartvalidity) {
2069 print
'<span class="opacitymedium">'.$langs->trans(
"FromDate").
'</span> ';
2072 if (
$object->dateendvalidity) {
2073 print
'<span class="opacitymedium"> - '.$langs->trans(
"To").
'</span> ';
2080 if ($_SESSION[
"dol_authmode"] ==
'dolibarr') {
2081 print
'<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans(
"PasswordToChange"), $langs->trans(
"ForcePasswordChange")).
'</td>';
2083 $permissiontoselfeditpassword =
$object->hasRight(
'user',
'self',
'password');
2084 if ($permissiontoselfeditpassword) {
2086 print
'<input type="checkbox" class="colorgrey" disabled name="forcepasswordchange" value="1"'.($object->force_pass_change ?
' checked="checked"' :
'').
'>';
2088 print
'<span class="opacitymedium">'.yn(
$object->force_pass_change).
'</span>';
2091 print
'<span class="opacitymedium">'.yn(
$object->force_pass_change).
'</span>';
2094 print
'<input type="checkbox" name="forcepasswordchange" value="1" disabled class="valignmiddle">';
2095 print
'<span class="opacitymedium" title="'.$langs->trans(
"UserDoesNotHaveRightsToChangeHisPassword").
'">'.$langs->trans(
"No").
'</span>';
2103 if (preg_match(
'/ldap/', $dolibarr_main_authentication)) {
2104 if (!empty(
$object->ldap_sid)) {
2105 if ($passDoNotExpire) {
2106 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"LdapUacf_".$statutUACF);
2107 } elseif ($userChangePassNextLogon) {
2108 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').
'<span class="warning">'.$langs->trans(
"UserMustChangePassNextLogon", $ldap->domainFQDN).
'</span>';
2109 } elseif ($userDisabled) {
2110 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').
'<span class="warning">'.$langs->trans(
"LdapUacf_".$statutUACF, $ldap->domainFQDN).
'</span>';
2112 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2115 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2118 if (preg_match(
'/http/', $dolibarr_main_authentication)) {
2119 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"HTTPBasicPassword");
2123 $parameters = array(
'valuetoshow' => $valuetoshow,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2124 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
2126 $valuetoshow = $hookmanager->resPrint;
2128 $valuetoshow .= $hookmanager->resPrint;
2132 print
'<tr class="nooddeven"><td class="titlefieldmiddle">'.$langs->trans(
"Password").
'</td>';
2133 print
'<td class="wordbreak">';
2140 if (
getDolGlobalString(
'MAIN_SECURITY_ALLOW_TOTP') && $permissiontoeditpasswordandsee) {
2141 print
'<tr class="nooddeven"><td>'.$langs->trans(
"2FA").
'</td>';
2143 print
'<div class="centpercent display-flex">';
2144 print
'<span class="badge badge-info">999</span>';
2145 print
'<div class="left inline-block">';
2146 $s =
'<!-- MAIN_SECURITY_ALLOW_TOTP --><span class="fa fa-pen valignmiddle btnTitle-icon"></span>';
2148 print
'</span></span>';
2153 $tmparrayofauthmode = explode(
',', $dolibarr_main_authentication);
2154 foreach ($tmparrayofauthmode as $tmpauthmode) {
2155 $langs->load(
"oauth");
2157 $tmpauthmode = trim($tmpauthmode);
2158 if (preg_match(
'/oauth/', $tmpauthmode)) {
2159 $nameofservice = preg_replace(
'/oauth/',
'', $tmpauthmode);
2160 print
'<tr class="nooddeven">';
2161 print
'<td class="titlefieldmiddle">'.$langs->trans(
"OAUTH_ID");
2162 print
' '.ucfirst($nameofservice).
' ';
2165 $constoauthlogin =
'OAUTH_'.strtoupper($nameofservice).
'-Login_ID';
2166 print
'<td class="tdoverflowmax200" title="'.dolPrintHTMLForAttribute(
getDolGlobalString($constoauthlogin)).
'">';
2174 if (!empty(
$object->email_oauth2)) {
2175 print
'<tr class="nooddeven"><td class="titlefieldmiddle">'.$langs->trans(
"AlternativeEmailForOAuth2").
'</td>';
2185 if (
isModEnabled(
'api') && ($user->id == $id || $user->admin)) {
2186 print
'<tr class="nooddeven"><td>'.$langs->trans(
"ApiKey").
'</td>';
2189 print
'<div class="centpercent display-flex">';
2190 print
'<span class="badge badge-info">999</span>';
2194 print
'<div class="left inline-block">';
2195 $s =
'<!-- API_IN_TOKEN_TABLE --><span class="fa fa-pen valignmiddle btnTitle-icon"></span>';
2200 if (!empty(
$object->api_key)) {
2201 print
'<span class="opacitymedium">';
2206 print
' <span class="badge badge-info" title="'.$langs->trans(
"TotalAPICall").
'">';
2216 print
'<tr class="nooddeven"><td>'.$langs->trans(
"LastConnexion").
'</td>';
2218 if (
$object->datepreviouslogin) {
2219 print $form->textwithpicto(
dol_print_date(
$object->datepreviouslogin,
"dayhour",
"tzuserrel"), $langs->trans(
"Previous"));
2222 if (
$object->datepreviouslogin) {
2223 print
' ';
2225 print $form->textwithpicto(
dol_print_date(
$object->datelastlogin,
"dayhour",
"tzuserrel"), $langs->trans(
"Currently"));
2235 $parameters = array(
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2236 $reshook = $hookmanager->executeHooks(
'addMoreObjectBlock', $parameters, $object, $action);
2238 print $hookmanager->resPrint;
2244 print
'<div class="clearboth"></div>';
2253 print
'<div class="tabsAction">';
2255 $parameters = array();
2256 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2257 if (empty($reshook)) {
2261 'class' =>
'classfortooltip'
2265 if (empty($user->socid)) {
2266 $canSendMail =
false;
2268 $langs->load(
"mails");
2269 $canSendMail =
true;
2270 unset($params[
'attr'][
'title']);
2272 $langs->load(
"mails");
2273 $params[
'attr'][
'title'] = $langs->trans(
'NoEMail');
2275 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'presend',
'mode' =>
'init']) .
'#formmailbeforetitle',
'', $canSendMail, $params);
2280 $params[
'attr'][
'title'] = $langs->trans(
'DisabledInMonoUserMode');
2283 unset($params[
'attr'][
'title']);
2286 } elseif ($permissiontoeditpasswordandsee && !
$object->ldap_sid &&
2288 unset($params[
'attr'][
'title']);
2296 'class' =>
'classfortooltip'
2301 if ((empty(
$object->entity) && $permissiontoclonesuperadmin) || (!empty(
$object->admin) && !empty(
$object->entity) && $permissiontocloneadmin) || ($permissiontocloneuser && empty(
$object->admin) && !empty(
$object->entity))) {
2302 $cloneButtonId =
'';
2305 if (!empty(
$conf->use_javascript_ajax) && empty(
$conf->dol_use_jmobile)) {
2307 $cloneButtonId =
'action-clone';
2309 print
dolGetButtonAction($langs->trans(
'ToClone'),
'',
'default', $cloneUserUrl, $cloneButtonId, $user->hasRight(
'user',
'user',
'write'));
2313 if (
$object->status == $object::STATUS_DISABLED) {
2314 $params[
'attr'][
'title'] = $langs->trans(
'UserDisabled');
2316 } elseif (($user->id != $id && $permissiontoeditpasswordandsee) &&
$object->login && !
$object->ldap_sid &&
2318 unset($params[
'attr'][
'title']);
2319 print
dolGetButtonAction($langs->trans(
'ReinitPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=password&token='.
newToken(),
'',
true, $params);
2322 if (
$object->status == $object::STATUS_DISABLED) {
2323 $params[
'attr'][
'title'] = $langs->trans(
'UserDisabled');
2324 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2325 } elseif (($user->id != $id && $permissiontoeditpasswordandsend) &&
$object->login && !
$object->ldap_sid &&
2328 unset($params[
'attr'][
'title']);
2329 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=passwordsend&token='.
newToken(),
'',
true, $params);
2331 $params[
'attr'][
'title'] = $langs->trans(
'NoEMail');
2332 print
dolGetButtonAction($langs->trans(
'SendNewPassword'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2337 if ($user->id != $id && $permissiontodisable &&
$object->status == User::STATUS_DISABLED &&
2339 unset($params[
'attr'][
'title']);
2340 print
dolGetButtonAction($langs->trans(
'Reactivate'),
'',
'default', $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'&action=enable&token='.newToken(),
'',
true, $params);
2343 if ($user->id != $id && $permissiontodisable &&
$object->status == User::STATUS_ENABLED &&
2345 unset($params[
'attr'][
'title']);
2346 print
dolGetButtonAction($langs->trans(
'DisableUser'),
'',
'default', $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'&action=disable&token='.newToken(),
'',
true, $params);
2348 if ($user->id == $id) {
2349 $params[
'attr'][
'title'] = $langs->trans(
'CantDisableYourself');
2350 print
dolGetButtonAction($langs->trans(
'DisableUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false, $params);
2354 if ($user->id != $id && $permissiontodisable &&
2356 if ($user->admin || !
$object->admin) {
2357 unset($params[
'attr'][
'title']);
2358 print
dolGetButtonAction($langs->trans(
'DeleteUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&id='.
$object->id,
'',
true, $params);
2360 $params[
'attr'][
'title'] = $langs->trans(
'MustBeAdminToDeleteOtherAdmin');
2361 print
dolGetButtonAction($langs->trans(
'DeleteUser'),
'',
'default', $_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&id='.
$object->id,
'',
false, $params);
2371 if (
GETPOST(
'modelselected')) {
2372 $action =
'presend';
2376 $modelmail =
'user';
2377 $defaulttopic =
'Information';
2378 $diroutput =
$conf->user->dir_output;
2379 $trackid =
'use'.$object->id;
2381 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
2383 if ($action !=
'presend' && $action !=
'send') {
2388 if ($permissiontoreadgroup) {
2389 print
'<!-- Group section -->'.
"\n";
2397 $groupslist = $usergroup->listGroupsForUser(
$object->id,
false);
2399 if (!empty($groupslist)) {
2400 foreach ($groupslist as $groupforuser) {
2401 $exclude[] = $groupforuser->id;
2406 $parameters = array(
'caneditgroup' => $permissiontoeditgroup,
'groupslist' => $groupslist,
'exclude' => $exclude);
2407 $reshook = $hookmanager->executeHooks(
'formAddUserToGroup', $parameters, $object, $action);
2408 print $hookmanager->resPrint;
2410 if (empty($reshook)) {
2411 if ($permissiontoeditgroup) {
2412 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$id.
'" method="POST">'.
"\n";
2413 print
'<input type="hidden" name="token" value="'.newToken().
'" />';
2414 print
'<input type="hidden" name="action" value="addgroup" />';
2415 print
'<input type="hidden" name="page_y" value="" />';
2418 print
'<!-- List of groups of the user -->'.
"\n";
2419 print
'<table class="noborder centpercent">'.
"\n";
2420 print
'<tr class="liste_titre">';
2422 print
'<th class="liste_titre right" colspan="2">';
2423 if ($permissiontoeditgroup) {
2424 print $form->select_dolgroups(0,
'group', 1, $exclude, 0,
'', array(), (
string)
$object->entity,
false,
'maxwidth150');
2426 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
2427 print
'<input type="submit" class="button buttongen button-add reposition" value="'.$langs->trans(
"Add").
'" />';
2429 print
'</th></tr>'.
"\n";
2432 if (!empty($groupslist)) {
2433 foreach ($groupslist as $group) {
2434 print
'<tr class="oddeven">';
2435 print
'<td class="tdoverflowmax200">';
2436 if ($permissiontoeditgroup) {
2437 print $group->getNomUrl(1);
2439 print
img_object($langs->trans(
"ShowGroup"),
"group").
' '.$group->name;
2442 print
'<td class="right">';
2443 if ($permissiontoeditgroup) {
2444 print
'<a class="reposition" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'removegroup',
'group' => $group->id],
true).
'">';
2445 print
img_picto($langs->trans(
"RemoveFromGroup"),
'unlink');
2450 print
"</td></tr>\n";
2453 print
'<tr class="oddeven"><td colspan="2"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
2458 if ($permissiontoeditgroup) {
2470 if ($action ==
'edit' && ($permissiontoedit || $permissiontoeditpasswordandsee)) {
2471 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST" name="updateuser" enctype="multipart/form-data">';
2472 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2473 print
'<input type="hidden" name="action" value="update">';
2474 print
'<input type="hidden" name="entity" value="'.$object->entity.
'">';
2478 print
'<table class="border centpercent">';
2482 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Ref").
'</td>';
2491 print
'<td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Lastname").
'</td>';
2493 if ($permissiontoedit && !
$object->ldap_sid) {
2494 print
'<input class="minwidth100" type="text" class="flat" name="lastname" value="'.$object->lastname.
'">';
2496 print
'<input type="hidden" name="lastname" value="'.$object->lastname.
'">';
2503 print
'<tr><td>'.$langs->trans(
"Firstname").
'</td>';
2505 if ($permissiontoedit && !
$object->ldap_sid) {
2506 print
'<input class="minwidth100" type="text" class="flat" name="firstname" value="'.$object->firstname.
'">';
2508 print
'<input type="hidden" name="firstname" value="'.$object->firstname.
'">';
2514 print
"<tr>".
'<td><span class="fieldrequired">'.$langs->trans(
"Login").
'</span></td>';
2516 if ($user->admin && !
$object->ldap_sid) {
2517 print
'<input maxlength="50" type="text" class="flat" name="login" value="'.$object->login.
'" spellcheck="false">';
2519 print
'<input type="hidden" name="login" value="'.$object->login.
'">';
2526 print
'<tr><td>'.$langs->trans(
"ExternalUser").
' ?</td>';
2528 if ($user->id ==
$object->id || !$user->admin) {
2530 $type = $langs->trans(
"Internal");
2532 $type = $langs->trans(
"External");
2535 print $form->textwithpicto($type, $langs->trans(
"InternalExternalDesc"));
2537 print
' ('.$langs->trans(
"DomainUser").
')';
2546 $eventsCompanyContact = array();
2547 $eventsCompanyContact[] = array(
'method' =>
'getContacts',
'url' =>
dol_buildpath(
'/core/ajax/contacts.php?showempty=1&token='.
currentToken(), 1),
'htmlname' =>
'contactid',
'params' => array(
'add-customer-contact' =>
'disabled'));
2549 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2550 print $form->select_company(
$object->socid,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2551 print
'<span class="clearbothonsmartphone"></span>';
2552 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2553 print $form->select_contact(0, 0,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2555 print
' ('.$langs->trans(
"DomainUser").
')';
2558 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2559 print $form->select_company(
$object->socid,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2560 print
'<span class="clearbothonsmartphone"></span>';
2561 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2562 print $form->select_contact(0,
$object->contact_id,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2564 print
' ('.$langs->trans(
"DomainUser").
')';
2567 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2568 print $form->select_company(0,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2569 print
'<span class="clearbothonsmartphone"></span>';
2570 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2571 print $form->select_contact(0,
$object->contact_id,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2573 print
' ('.$langs->trans(
"DomainUser").
')';
2576 print
img_picto(
'',
'company',
'class="pictofixedwidth"');
2577 print $form->select_company(0,
'socid',
'',
' ', 0, 0, $eventsCompanyContact, 0,
'widthcentpercentminusxx maxwidth300');
2578 print
'<span class="clearbothonsmartphone"></span>';
2579 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2580 print $form->select_contact(0, 0,
'contactid', 1,
'',
'', 1,
'minwidth100imp widthcentpercentminusxx maxwidth300',
true, 1);
2586 print
'<tr><td>'.$form->textwithpicto($langs->trans(
"Administrator"), $langs->trans(
"AdministratorDesc")).
'</td>';
2588 $langs->load(
"admin");
2590 print
'<input type="hidden" name="admin" value="'.$object->admin.
'">'.
yn(
$object->admin);
2591 print
' <span class="opacitymedium">('.$langs->trans(
"ExternalUser").
')</span>';
2595 $nbAdmin = $user->getNbOfUsers(
'active',
'', 1);
2596 $nbSuperAdmin = $user->getNbOfUsers(
'active',
'superadmin', 1);
2603 || (
isModEnabled(
'multicompany') && ((
$object->entity > 0 || ($user->entity == 0 &&
$object->entity == 0)) || $nbSuperAdmin > 1))
2606 print $form->selectyesno(
'admin',
$object->admin, 1,
false, 0, 1);
2609 if (
$conf->use_javascript_ajax) {
2610 print
'<script type="text/javascript">
2612 var admin = $("select[name=admin]").val();
2614 $("input[name=superadmin]")
2615 .prop("disabled", true)
2616 .prop("checked", false);
2618 if ($("input[name=superadmin]").is(":checked")) {
2619 $("select[name=entity]")
2620 .prop("disabled", true);
2622 $("select[name=admin]").change(function() {
2623 if ( $(this).val() == 0 ) {
2624 $("input[name=superadmin]")
2625 .prop("disabled", true)
2626 .prop("checked", false);
2627 $("select[name=entity]")
2628 .prop("disabled", false);
2630 $("input[name=superadmin]")
2631 .prop("disabled", false);
2634 $("input[name=superadmin]").change(function() {
2635 if ( $(this).is(":checked")) {
2636 $("select[name=entity]")
2637 .prop("disabled", true);
2639 $("select[name=entity]")
2640 .prop("disabled", false);
2647 $checked = ((
$object->admin && !
$object->entity) ?
' checked' :
'');
2648 print
'<input type="checkbox" name="superadmin" id="superadmin" value="1"'.$checked.
' /> <label for="superadmin">'.$langs->trans(
"SuperAdministrator").
'</span>';
2652 print
'<input type="hidden" name="admin" value="'.$object->admin.
'">';
2653 print
'<input type="hidden" name="superadmin" value="'.(empty(
$object->entity) ? 1 : 0).
'">';
2655 print $form->textwithpicto($yn, $langs->trans(
"DontDowngradeSuperAdmin"), 1,
'warning');
2665 print
'<tr><td class="titlefieldcreate"><label for="civility_code">'.$langs->trans(
"UserTitle").
'</label></td><td>';
2666 if ($permissiontoedit && !
$object->ldap_sid) {
2667 print $formcompany->select_civility(
GETPOSTISSET(
"civility_code") ?
GETPOST(
"civility_code",
'aZ09') :
$object->civility_code,
'civility_code');
2668 } elseif (
$object->civility_code) {
2669 print $langs->trans(
"Civility".
$object->civility_code);
2675 print
'<tr><td>'.$langs->trans(
"Gender").
'</td>';
2677 $arraygender = array(
'man' => $langs->trans(
"Genderman"),
'woman' => $langs->trans(
"Genderwoman"),
'other' => $langs->trans(
"Genderother"));
2678 if ($permissiontoedit) {
2681 print $arraygender[
$object->gender];
2687 print
'<td>'.$form->editfieldkey(
'Employee',
'employee',
'', $object, 0).
'</td><td>';
2688 if ($permissiontoedit) {
2689 print
'<input type="checkbox" name="employee" value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
2692 print
'<input type="checkbox" name="employee" disabled value="1"'.($object->employee ?
' checked="checked"' :
'').
'>';
2701 if ($nbofusers > 1) {
2703 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"HierarchicalResponsible").
'</td>';
2705 if ($permissiontoedit) {
2706 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');
2708 print
'<input type="hidden" name="fk_user" value="'.$object->fk_user.
'">';
2710 $huser->fetch(
$object->fk_user);
2711 print $huser->getNomUrl(-1);
2718 print
'<tr><td class="titlefieldcreate">';
2719 $text = $langs->trans(
"ForceUserExpenseValidator");
2720 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
2723 if ($permissiontoedit) {
2724 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');
2726 print
'<input type="hidden" name="fk_user_expense_validator" value="'.$object->fk_user_expense_validator.
'">';
2728 $evuser->fetch(
$object->fk_user_expense_validator);
2729 print $evuser->getNomUrl(-1);
2737 print
'<tr><td class="titlefieldcreate">';
2738 $text = $langs->trans(
"ForceUserHolidayValidator");
2739 print $form->textwithpicto($text, $langs->trans(
"ValidatorIsSupervisorByDefault"), 1,
'help');
2742 if ($permissiontoedit) {
2743 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');
2745 print
'<input type="hidden" name="fk_user_holiday_validator" value="'.$object->fk_user_holiday_validator.
'">';
2747 $hvuser->fetch(
$object->fk_user_holiday_validator);
2748 print $hvuser->getNomUrl(-1);
2759 print
'<table class="border centpercent">';
2762 print
'<tr><td>'.$langs->trans(
"RangeOfLoginValidity").
'</td>';
2764 if ($permissiontoedit) {
2765 print $form->selectDate($datestartvalidity ? $datestartvalidity :
$object->datestartvalidity,
'datestartvalidity', 0, 0, 1,
'formdatestartvalidity', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
2771 if ($permissiontoedit) {
2772 print $form->selectDate($dateendvalidity ? $dateendvalidity :
$object->dateendvalidity,
'dateendvalidity', 0, 0, 1,
'formdateendvalidity', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
2781 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Password").
'</td>';
2784 if (preg_match(
'/ldap/', $dolibarr_main_authentication)) {
2785 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$langs->trans(
"PasswordOfUserInLDAP");
2787 if (preg_match(
'/http/', $dolibarr_main_authentication)) {
2788 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').$form->textwithpicto((
string) $text, $langs->trans(
"DolibarrInHttpAuthenticationSoPasswordUseless", (
string) $dolibarr_main_authentication), 1,
'warning');
2790 if (preg_match(
'/dolibarr/', $dolibarr_main_authentication) || preg_match(
'/forceuser/', $dolibarr_main_authentication)) {
2791 if ($permissiontoeditpasswordandsee) {
2792 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').
'<input maxlength="128" type="password" class="minwidth300 maxwidth400 widthcentpercentminusx" id="password" name="password" value="'.
dol_escape_htmltag(
$object->pass).
'" autocomplete="new-password" spellcheck="false">';
2793 if (!empty(
$conf->use_javascript_ajax)) {
2794 $valuetoshow .=
img_picto((
getDolGlobalString(
'USER_PASSWORD_GENERATED') ===
'none' ? $langs->transnoentities(
'NoPasswordGenerationRuleConfigured') : $langs->transnoentities(
'Generate')),
'refresh',
'id="generate_password" class="paddingleft'.(
getDolGlobalString(
'USER_PASSWORD_GENERATED') ===
'none' ?
' ' :
' linkobject').
'"');
2797 $valuetoshow .= ($valuetoshow ? (
' '.$langs->trans(
"or").
' ') :
'').preg_replace(
'/./i',
'*',
$object->pass);
2801 $parameters = array(
'valuetoshow' => $valuetoshow,
'caneditpasswordandsee' => $permissiontoeditpasswordandsee,
'caneditpasswordandsend' => $permissiontoeditpasswordandsend);
2802 $reshook = $hookmanager->executeHooks(
'printUserPasswordField', $parameters, $object, $action);
2804 $valuetoshow = $hookmanager->resPrint;
2806 $valuetoshow .= $hookmanager->resPrint;
2810 print
"</td></tr>\n";
2813 if ($_SESSION[
"dol_authmode"] ==
'dolibarr') {
2815 print
'<td></td><td>';
2816 $permissiontoselfeditpassword =
$object->hasRight(
'user',
'self',
'password');
2817 if ($permissiontoselfeditpassword) {
2818 if ($permissiontoedit) {
2819 print
'<input type="checkbox" name="forcepasswordchange" id="forcepasswordchange" value="1"'.($object->force_pass_change ?
' checked="checked"' :
'').
'>';
2820 print
'<label class="opacitylow" for="forcepasswordchange">'.$langs->trans(
"ForcePasswordChange").
'</label>';
2822 print
'<input type="checkbox" name="forcepasswordchange" class="colorgrey" disabled value="1"'.($object->force_pass_change ?
' checked="checked"' :
'').
'>';
2823 print $langs->trans(
"ForcePasswordChange");
2826 print
'<input type="checkbox" name="forcepasswordchange" value="1" class="colorgrey" disabled>';
2827 print
'<span class="opacitymedium" title="'.$langs->trans(
"UserDoesNotHaveRightsToChangeHisPassword").
'">'.$langs->trans(
"ForcePasswordChange").
'</span>';
2836 print
'<tr><td>'.$langs->trans(
"ApiKey").
'</td>';
2838 if ($permissiontoeditpasswordandsee) {
2839 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">';
2840 if (!empty(
$conf->use_javascript_ajax)) {
2841 print
img_picto($langs->transnoentities(
'Generate'),
'refresh',
'id="generate_api_key" class="linkobject paddingleft"');
2849 if (isset(
$conf->file->main_authentication) && preg_match(
'/openid/',
$conf->file->main_authentication) &&
getDolGlobalString(
'MAIN_OPENIDURL_PERUSER')) {
2850 print
"<tr>".
'<td>'.$langs->trans(
"OpenIDURL").
'</td>';
2852 if ($permissiontoedit) {
2853 print
'<input class="minwidth100" type="url" name="openid" class="flat" value="'.$object->openid.
'">';
2855 print
'<input type="hidden" name="openid" value="'.$object->openid.
'">';
2861 print
'</table><hr><table class="border centpercent">';
2865 print
'<tr><td class="tdtop titlefieldcreate">'.$form->editfieldkey(
'Address',
'address',
'', $object, 0).
'</td>';
2867 if ($permissiontoedit) {
2868 print
'<textarea name="address" id="address" class="quatrevingtpercent" rows="3" wrap="soft">';
2871 if ($permissiontoedit) {
2872 print
'</textarea>';
2877 print
'<tr><td>'.$form->editfieldkey(
'Zip',
'zipcode',
'', $object, 0).
'</td><td>';
2878 if ($permissiontoedit) {
2879 print $formcompany->select_ziptown((
GETPOSTISSET(
'zipcode') ?
GETPOST(
'zipcode') :
$object->zip),
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6);
2886 print
'<tr><td>'.$form->editfieldkey(
'Town',
'town',
'', $object, 0).
'</td><td>';
2887 if ($permissiontoedit) {
2888 print $formcompany->select_ziptown((
GETPOSTISSET(
'town') ?
GETPOST(
'town') :
$object->town),
'town', array(
'zipcode',
'selectcountry_id',
'state_id'));
2895 print
'<tr><td>'.$form->editfieldkey(
'Country',
'selectcountry_id',
'', $object, 0).
'</td><td>';
2896 print
img_picto(
'',
'country',
'class="pictofixedwidth"');
2897 if ($permissiontoedit) {
2898 print $form->select_country((
GETPOST(
'country_id') !=
'' ?
GETPOST(
'country_id') :
$object->country_id),
'country_id');
2900 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
2904 print $countrylabel;
2910 print
'<tr><td class="tdoverflow">'.$form->editfieldkey(
'State',
'state_id',
'', $object, 0).
'</td><td>';
2911 if ($permissiontoedit) {
2912 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
2913 print $formcompany->select_state_ajax(
'country_id',
$object->state_id,
$object->country_id,
'state_id');
2921 print
"<tr>".
'<td>'.$langs->trans(
"PhonePro").
'</td>';
2923 print
img_picto(
'',
'phoning',
'class="pictofixedwidth"');
2924 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2925 print
'<input type="text" name="office_phone" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->office_phone.
'">';
2927 print
'<input type="hidden" name="office_phone" value="'.$object->office_phone.
'">';
2933 print
"<tr>".
'<td>'.$langs->trans(
"PhoneMobile").
'</td>';
2935 print
img_picto(
'',
'phoning_mobile',
'class="pictofixedwidth"');
2936 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2937 print
'<input type="text" name="user_mobile" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->user_mobile.
'" spellcheck="false">';
2939 print
'<input type="hidden" name="user_mobile" value="'.$object->user_mobile.
'">';
2945 print
"<tr>".
'<td>'.$langs->trans(
"Fax").
'</td>';
2947 print
img_picto(
'',
'phoning_fax',
'class="pictofixedwidth"');
2948 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2949 print
'<input type="text" name="office_fax" class="flat maxwidth200 widthcentpercentminusx" value="'.$object->office_fax.
'">';
2951 print
'<input type="hidden" name="office_fax" value="'.$object->office_fax.
'">';
2957 print
"<tr>".
'<td'.(
getDolGlobalString(
'USER_MAIL_REQUIRED') ?
' class="fieldrequired"' :
'').
'>'.$langs->trans(
"EMail").
'</td>';
2959 print
img_picto(
'',
'object_email',
'class="pictofixedwidth"');
2960 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2961 print
'<input class="minwidth100 maxwidth500 widthcentpercentminusx" type="text" name="email" class="flat" value="'.$object->email.
'">';
2963 print
'<input type="hidden" name="email" value="'.$object->email.
'">';
2969 foreach ($socialnetworks as $key => $value) {
2970 if ($value[
'active']) {
2971 print
'<tr><td>'.$langs->trans($value[
'label']).
'</td>';
2973 if (!empty($value[
'icon'])) {
2974 print
'<span class="fab '.$value[
'icon'].
' pictofixedwidth"></span>';
2976 if ($permissiontoedit && empty(
$object->ldap_sid)) {
2977 print
'<input type="text" name="'.$key.
'" class="flat maxwidth200 widthcentpercentminusx" value="'.(isset(
$object->socialnetworks[$key]) ?
$object->socialnetworks[$key] :
'').
'">';
2979 print
'<input type="hidden" name="'.$key.
'" value="'.
$object->socialnetworks[$key].
'">';
2980 print
$object->socialnetworks[$key];
2985 print
'<input type="hidden" name="'.$key.
'" value="'.(isset(
$object->socialnetworks[$key]) ?
$object->socialnetworks[$key] :
'').
'">';
2990 print
'</table><hr><table class="border centpercent">';
2994 print
'<tr><td class="titlefield">'.$langs->trans(
"DefaultWarehouse").
'</td><td>';
2995 print $formproduct->selectWarehouses(
$object->fk_warehouse,
'fk_warehouse',
'warehouseopen', 1);
2996 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>';
3003 print
'<td class="titlefieldcreate">'.$langs->trans(
"AccountancyCode").
'</td>';
3005 if ($permissiontoedit) {
3006 print
'<input type="text" class="flat maxwidth300" name="accountancy_code" value="'.$object->accountancy_code.
'">';
3008 print
'<input type="hidden" name="accountancy_code" value="'.$object->accountancy_code.
'">';
3009 print
$object->accountancy_code;
3017 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"ColorUser").
'</td>';
3019 if ($permissiontoedit) {
3020 print $formother->selectColor(
GETPOSTISSET(
'color') ?
GETPOST(
'color',
'alphanohtml') :
$object->color,
'color', null, 1, array(),
'hideifnotset');
3022 print $formother->showColor(
$object->color,
'');
3029 print
'<td class="titlefieldcreate">'.$langs->trans(
"Photo").
'</td>';
3031 print $form->showphoto(
'userphoto', $object, 60, 0, (
int) $permissiontoedit,
'photowithmargin',
'small', 1, 0,
'user', 1);
3036 if (
isModEnabled(
'category') && $user->hasRight(
"categorie",
"read")) {
3037 print
'<tr><td>'.$form->editfieldkey(
'Categories',
'usercats',
'', $object, 0).
'</td>';
3039 if ($permissiontoedit) {
3040 print $form->selectCategories(Categorie::TYPE_USER,
'usercats', $object);
3042 print $form->showCategories(
$object->id, Categorie::TYPE_USER, 1);
3049 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";
3050 print
img_picto(
'',
'language',
'class="pictofixedwidth"').$formadmin->select_language(
$object->lang,
'default_lang', 0, array(),
'1', 0, 0,
'widthcentpercentminusx maxwidth300');
3056 print
'<tr><td>'.$langs->trans(
"Status").
'</td>';
3058 print
$object->getLibStatut(4);
3086 $langs->load(
"members");
3087 print
'<tr><td>'.$langs->trans(
"LinkedToDolibarrMember").
'</td>';
3091 $adh->fetch(
$object->fk_member);
3092 $adh->ref = $adh->login;
3093 print $adh->getNomUrl(1);
3095 print
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"UserNotLinkedToMember").
'</span>';
3103 if (
isModEnabled(
'multicompany') && isset($mc) && is_object($mc)) {
3105 if (!method_exists($mc,
'formObjectOptions')) {
3106 if (empty(
$conf->multicompany->transverse_mode) &&
$conf->entity == 1 && $user->admin && !$user->entity) {
3107 print
"<tr>".
'<td>'.$langs->trans(
"Entity").
'</td>';
3108 print
"<td>".$mc->select_entities(
$object->entity,
'entity',
'',
false,
true,
false,
false,
true);
3109 print
"</td></tr>\n";
3111 print
'<input type="hidden" name="entity" value="'.$conf->entity.
'" />';
3117 $parameters = array(
'colspan' =>
' colspan="2"');
3119 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
3120 print $hookmanager->resPrint;
3121 if (empty($reshook)) {
3122 if ($permissiontoedit) {
3123 print
$object->showOptionals($extrafields,
'edit');
3125 print
$object->showOptionals($extrafields,
'view');
3130 print
'<tr><td class="tdtop">'.$langs->trans(
"Signature").
'</td>';
3132 if ($permissiontoedit) {
3133 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
3135 $doleditor =
new DolEditor(
'signature',
$object->signature,
'', 138,
'dolibarr_notes',
'In',
false, $acceptlocallinktomedia, !
getDolGlobalString(
'FCKEDITOR_ENABLE_USERSIGN') ? 0 : 1, ROWS_4,
'90%');
3136 print $doleditor->Create(1);
3148 print
'<table class="border centpercent">';
3154 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"PostOrFunction").
'</td>';
3156 if ($permissiontoedit) {
3157 print
'<input type="text" class="minwidth300 maxwidth500" name="job" value="'.dol_escape_htmltag(
$object->job).
'">';
3159 print
'<input type="hidden" name="job" value="'.dol_escape_htmltag(
$object->job).
'">';
3165 print
'<tr><td>'.$langs->trans(
"WeeklyHours").
'</td>';
3167 if ($permissiontoedit) {
3168 print
'<input size="8" type="text" name="weeklyhours" value="'.price2num(
GETPOST(
'weeklyhours') ?
GETPOST(
'weeklyhours') :
$object->weeklyhours).
'">';
3176 if ($permissiontoseesalary) {
3177 $langs->load(
"salaries");
3180 print
'<tr><td>'.$langs->trans(
"Salary").
'</td>';
3182 print
img_picto(
'',
'salary',
'class="pictofixedwidth paddingright"').
'<input size="8" type="text" name="salary" value="'.
price2num(
GETPOST(
'salary') ?
GETPOST(
'salary') :
$object->salary).
'">';
3183 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3189 $text = $langs->trans(
"THM");
3190 print $form->textwithpicto($text, $langs->trans(
"THMDescription"), 1,
'help',
'classthm');
3193 if ($permissiontoedit) {
3194 print
'<input size="8" type="text" name="thm" value="'.price2num(
GETPOST(
'thm') ?
GETPOST(
'thm') :
$object->thm).
'">';
3195 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3204 $text = $langs->trans(
"TJM");
3205 print $form->textwithpicto($text, $langs->trans(
"TJMDescription"), 1,
'help',
'classthm');
3208 if ($permissiontoedit) {
3209 print
'<input size="8" type="text" name="tjm" value="'.price2num(
GETPOST(
'tjm') ?
GETPOST(
'tjm') :
$object->tjm).
'">';
3210 print
' <span class="opacitymedium">'.$langs->getCurrencySymbol().
'</span>';
3219 print
'<tr><td>'.$langs->trans(
"DateEmployment").
'</td>';
3221 if ($permissiontoedit) {
3222 print $form->selectDate($dateemployment ? $dateemployment :
$object->dateemployment,
'dateemployment', 0, 0, 1,
'formdateemployment', 1, 1, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"from"));
3227 if ($dateemployment && $dateemploymentend) {
3231 if ($permissiontoedit) {
3232 print $form->selectDate($dateemploymentend ? $dateemploymentend :
$object->dateemploymentend,
'dateemploymentend', 0, 0, 1,
'formdateemploymentend', 1, 0, 0,
'',
'',
'',
'', 1,
'', $langs->trans(
"to"));
3240 print
'<tr><td>'.$langs->trans(
"DateOfBirth").
'</td>';
3242 if ($permissiontoedit) {
3243 echo $form->selectDate($dateofbirth ? $dateofbirth :
$object->birth,
'dateofbirth', 0, 0, 1,
'updateuser', 1, 0, 0,
'',
'',
'',
'', 1,
'',
'',
'tzserver');
3254 print
'<div class="center">';
3255 print
'<input value="'.$langs->trans(
"Save").
'" class="button button-save" type="submit" name="save">';
3256 print
' ';
3257 print
'<input value="'.$langs->trans(
"Cancel").
'" class="button button-cancel" type="submit" name="cancel">';
3263 if ($action !=
'edit' && $action !=
'presend') {
3264 print
'<div class="fichecenter"><div class="fichehalfleft">';
3269 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
3270 $genallowed = $user->hasRight(
"user",
"user",
"read");
3271 $delallowed = $user->hasRight(
"user",
"user",
"write");
3276 $societe->fetch(
$object->socid);
3281 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);
3282 $somethingshown = $formfile->numoffiles;
3286 $morehtmlcenter =
'<div class="nowraponall">';
3287 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/user/messaging.php?id='.
$object->id);
3288 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/user/agenda.php?id='.
$object->id);
3289 $morehtmlcenter .=
'</div>';
3291 print
'</div><div class="fichehalfright">';
3294 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
3296 $somethingshown = $formactions->showactions($object,
'user', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter,
$object->id);
3298 print
'</div></div>';
3308include_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)
getDolUserInt($key, $default=0, $tmpuser=null)
Return Dolibarr user constant int value.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolButtonToOpenUrlInDialogPopup($name, $label, $buttonstring, $url, $disabled='', $morecss='classlink button bordertransp', $jsonopen='', $jsonclose='', $accesskey='')
Return HTML code to output a button to open a dialog popup box.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
currentToken()
Return the value of token currently saved into session with name 'token'.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_escape_js($stringtoescape, $mode=0, $noescapebackslashn=0)
Returns text escaped for inclusion into JavaScript code.
dol_set_focus($selector)
Set focus onto field with selector (similar behaviour of 'autofocus' HTML5 tag)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
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.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
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='', $textonpictotooltip='', $cssfordropdown='info_admin')
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.
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
$conf db user
Active Directory does not allow anonymous connections.
if(preg_match('/(crypted|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
'integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]',...
$conf db name
Only used if Module[ID]Name translation string is not found.
dolJSToSetRandomPassword($htmlname, $htmlnameofbutton='generate_token', $generic=1)
Output javascript to autoset a generated password using default module into a HTML element.
getRandomPassword($generic=false, $replaceambiguouschars=null, $length=32)
Return a generated password using default module.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
dol_verifyHash($chain, $hash, $type='0')
Compute a hash and compare it to the given one For backward compatibility reasons,...
user_prepare_head(User $object)
Prepare array with list of tabs.