37 require
'../main.inc.php';
38 require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
39 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/lib/contact.lib.php';
41 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
42 require_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
43 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
44 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
45 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formadmin.class.php';
46 require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
47 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
48 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.form.class.php';
49 require_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
50 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
53 $langs->loadLangs(array(
'companies',
'users',
'other',
'commercial'));
55 $mesg =
''; $error = 0; $errors = array();
58 $action = (
GETPOST(
'action',
'alpha') ?
GETPOST(
'action',
'alpha') :
'view');
59 $confirm =
GETPOST(
'confirm',
'alpha');
60 $backtopage =
GETPOST(
'backtopage',
'alpha');
61 $cancel =
GETPOST(
'cancel',
'alpha');
63 $socid =
GETPOST(
'socid',
'int');
70 $extrafields->fetch_name_optionals_label($object->table_element);
75 $object->getCanvas($id);
77 $canvas = (!empty($object->canvas) ? $object->canvas :
GETPOST(
"canvas"));
78 if (!empty($canvas)) {
79 require_once DOL_DOCUMENT_ROOT.
'/core/class/canvas.class.php';
80 $objcanvas =
new Canvas($db, $action);
81 $objcanvas->getCanvas(
'contact',
'contactcard', $canvas);
85 $hookmanager->initHooks(array(
'contactcard',
'globalcard'));
92 if (!($object->id > 0) && $action ==
'view') {
93 $langs->load(
"errors");
94 print($langs->trans(
'ErrorRecordNotFound'));
98 $triggermodname =
'CONTACT_MODIFY';
99 $permissiontoadd = $user->rights->societe->contact->creer;
103 $socid = $user->socid;
105 if ($object->priv && $object->user_creation->id != $user->id) {
108 $result =
restrictedArea($user,
'contact', $id,
'socpeople&societe',
'',
'',
'rowid', 0);
115 $parameters = array(
'id'=>$id,
'objcanvas'=>$objcanvas);
116 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
121 if (empty($reshook)) {
122 $backurlforlist = DOL_URL_ROOT.
'/contact/list.php';
124 if (empty($backtopage) || ($cancel && empty($id))) {
125 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
126 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
127 $backtopage = $backurlforlist;
129 $backtopage = DOL_URL_ROOT.
'/contact/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
135 if (!empty($backtopageforcancel)) {
136 header(
"Location: ".$backtopageforcancel);
138 } elseif (!empty($backtopage)) {
139 header(
"Location: ".$backtopage);
146 if ($action ==
'confirm_create_user' && $confirm ==
'yes' && $user->rights->user->user->creer) {
148 $result = $object->fetch($id);
154 $nuser =
new User($db);
155 $result = $nuser->create_from_contact($object,
GETPOST(
"login"));
158 $result2 = $nuser->setPassword($user,
GETPOST(
"password"), 0, 0, 1);
162 $error = $nuser->error; $errors = $nuser->errors;
166 $error = $nuser->error; $errors = $nuser->errors;
170 $error = $object->error; $errors = $object->errors;
176 if ($action ==
'disable' && !empty($permissiontoadd)) {
178 if ($object->setstatus(0) < 0) {
181 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
187 if ($action ==
'enable' && !empty($permissiontoadd)) {
189 if ($object->setstatus(1) < 0) {
192 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$id);
198 if ($action ==
'add' && !empty($permissiontoadd)) {
202 $object->canvas = $canvas;
206 $object->socid =
GETPOST(
"socid",
'int');
207 $object->lastname = (string)
GETPOST(
"lastname",
'alpha');
208 $object->firstname = (string)
GETPOST(
"firstname",
'alpha');
209 $object->civility_code = (string)
GETPOST(
"civility_code",
'alpha');
210 $object->poste = (string)
GETPOST(
"poste",
'alpha');
211 $object->address = (string)
GETPOST(
"address",
'alpha');
212 $object->zip = (string)
GETPOST(
"zipcode",
'alpha');
213 $object->town = (string)
GETPOST(
"town",
'alpha');
214 $object->country_id = (int)
GETPOST(
"country_id",
'int');
215 $object->state_id = (int)
GETPOST(
"state_id",
'int');
221 $object->socialnetworks = array();
223 foreach ($socialnetworks as $key => $value) {
225 $object->socialnetworks[$key] = (string)
GETPOST($key,
'alphanohtml');
229 $object->email = (string)
GETPOST(
'email',
'custom', 0, FILTER_SANITIZE_EMAIL);
230 $object->no_email =
GETPOST(
"no_email",
"int");
231 $object->phone_pro = (string)
GETPOST(
"phone_pro",
'alpha');
232 $object->phone_perso = (string)
GETPOST(
"phone_perso",
'alpha');
233 $object->phone_mobile = (string)
GETPOST(
"phone_mobile",
'alpha');
234 $object->fax = (string)
GETPOST(
"fax",
'alpha');
235 $object->priv =
GETPOST(
"priv",
'int');
236 $object->note_public = (string)
GETPOST(
"note_public",
'restricthtml');
237 $object->note_private = (string)
GETPOST(
"note_private",
'restricthtml');
238 $object->roles =
GETPOST(
"roles",
'array');
244 $object->birthday_alert =
GETPOST(
"birthday_alert",
'alpha');
247 $object->default_lang =
GETPOST(
'default_lang');
250 $ret = $extrafields->setOptionalsFromPost(
null, $object);
256 if (
isModEnabled(
'mailing') && $conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS == 2 && $object->no_email == -1 && !empty($object->email)) {
258 $errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"No_Email"));
262 if (!empty($object->email) && !isValidEMail($object->email)) {
263 $langs->load(
"errors");
265 $errors[] = $langs->trans(
"ErrorBadEMail",
GETPOST(
'email',
'alpha'));
269 if (empty($object->lastname)) {
271 $errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Lastname").
' / '.$langs->transnoentities(
"Label"));
276 $id = $object->create($user);
279 $errors = array_merge($errors, ($object->error ? array($object->error) : $object->errors));
286 $contcats =
GETPOST(
'contcats',
'array');
287 if (count($contcats) > 0) {
288 $result = $object->setCategories($contcats);
291 $errors = array_merge($errors, ($object->error ? array($object->error) : $object->errors));
297 if (empty($error) &&
isModEnabled(
'mailing') && !empty($object->email)) {
299 $result = $object->setNoEmail($object->no_email);
302 $errors = array_merge($errors, ($object->error ? array($object->error) : $object->errors));
307 if (empty($error) && $id > 0) {
309 if (!empty($backtopage)) {
310 $url = str_replace(
'__ID__', $id, $backtopage);
312 $url =
'card.php?id='.$id;
314 header(
"Location: ".$url);
321 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $user->rights->societe->contact->supprimer) {
322 $result = $object->fetch($id);
323 $object->oldcopy = clone $object;
325 $object->old_lastname = (string)
GETPOST(
"old_lastname",
'alpha');
326 $object->old_firstname = (string)
GETPOST(
"old_firstname",
'alpha');
328 $result = $object->delete();
331 if ($backurlforlist) {
332 header(
"Location: ".$backurlforlist);
335 header(
"Location: ".DOL_URL_ROOT.
'/contact/list.php');
343 if ($action ==
'update' && empty($cancel) && !empty($permissiontoadd)) {
344 if (!
GETPOST(
"lastname",
'alpha')) {
345 $error++; $errors = array($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Name").
' / '.$langs->transnoentities(
"Label")));
349 if (
isModEnabled(
'mailing') && $conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS == 2 &&
GETPOST(
"no_email",
"int") == -1 && !empty(
GETPOST(
'email',
'custom', 0, FILTER_SANITIZE_EMAIL))) {
351 $errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"No_Email"));
355 if (!empty(
GETPOST(
'email',
'custom', 0, FILTER_SANITIZE_EMAIL)) && !isValidEMail(
GETPOST(
'email',
'custom', 0, FILTER_SANITIZE_EMAIL))) {
356 $langs->load(
"errors");
358 $errors[] = $langs->trans(
"ErrorBadEMail",
GETPOST(
'email',
'alpha'));
363 $contactid =
GETPOST(
"contactid",
'int');
364 $object->fetch($contactid);
365 $object->fetchRoles();
368 $dir = $conf->societe->multidir_output[$object->entity].
"/contact/".$object->id.
"/photos";
369 $file_OK = is_uploaded_file($_FILES[
'photo'][
'tmp_name']);
370 if (
GETPOST(
'deletephoto') && $object->photo) {
371 $fileimg = $dir.
'/'.$object->photo;
372 $dirthumbs = $dir.
'/thumbs';
385 if (!($result > 0)) {
386 $errors[] =
"ErrorFailedToSaveFile";
391 $object->addThumbs($newfile);
395 $errors[] =
"ErrorBadImageFormat";
398 switch ($_FILES[
'photo'][
'error']) {
401 $errors[] =
"ErrorFileSizeTooLarge";
404 $errors[] =
"ErrorFilePartiallyUploaded";
409 $object->oldcopy = clone $object;
411 $object->old_lastname = (string)
GETPOST(
"old_lastname",
'alpha');
412 $object->old_firstname = (string)
GETPOST(
"old_firstname",
'alpha');
414 $object->socid =
GETPOST(
"socid",
'int');
415 $object->lastname = (string)
GETPOST(
"lastname",
'alpha');
416 $object->firstname = (string)
GETPOST(
"firstname",
'alpha');
417 $object->civility_code = (string)
GETPOST(
"civility_code",
'alpha');
418 $object->poste = (string)
GETPOST(
"poste",
'alpha');
420 $object->address = (string)
GETPOST(
"address",
'alpha');
421 $object->zip = (string)
GETPOST(
"zipcode",
'alpha');
422 $object->town = (string)
GETPOST(
"town",
'alpha');
423 $object->state_id =
GETPOST(
"state_id",
'int');
424 $object->country_id =
GETPOST(
"country_id",
'int');
426 $object->email = (string)
GETPOST(
'email',
'custom', 0, FILTER_SANITIZE_EMAIL);
427 $object->no_email =
GETPOST(
"no_email",
"int");
433 $object->socialnetworks = array();
435 foreach ($socialnetworks as $key => $value) {
437 $object->socialnetworks[$key] = (string)
GETPOST($key,
'alphanohtml');
441 $object->phone_pro = (string)
GETPOST(
"phone_pro",
'alpha');
442 $object->phone_perso = (string)
GETPOST(
"phone_perso",
'alpha');
443 $object->phone_mobile = (string)
GETPOST(
"phone_mobile",
'alpha');
444 $object->fax = (string)
GETPOST(
"fax",
'alpha');
445 $object->priv = (string)
GETPOST(
"priv",
'int');
446 $object->note_public = (string)
GETPOST(
"note_public",
'restricthtml');
447 $object->note_private = (string)
GETPOST(
"note_private",
'restricthtml');
449 $object->roles =
GETPOST(
"roles",
'array');
452 $object->default_lang =
GETPOST(
'default_lang');
455 $ret = $extrafields->setOptionalsFromPost(
null, $object,
'@GETPOSTISSET');
461 $result = $object->update($contactid, $user);
465 $categories =
GETPOST(
'contcats',
'array');
466 $object->setCategories($categories);
470 $no_email =
GETPOST(
'no_email',
'int');
471 $result = $object->setNoEmail($no_email);
486 if (!$error && empty($errors)) {
487 if (!empty($backtopage)) {
488 header(
"Location: ".$backtopage);
494 if ($action ==
'setprospectcontactlevel' && !empty($permissiontoadd)) {
496 $object->fk_prospectlevel =
GETPOST(
'prospect_contact_level_id',
'alpha');
497 $result = $object->update($object->id, $user);
504 if ($action ==
'setstcomm' && !empty($permissiontoadd)) {
507 $result = $object->update($object->id, $user);
514 if ($action ==
"update_extras" && !empty($permissiontoadd)) {
515 $object->fetch(
GETPOST(
'id',
'int'));
517 $attributekey =
GETPOST(
'attribute',
'alpha');
518 $attributekeylong =
'options_'.$attributekey;
522 $object->array_options[
'options_'.$attributekey] =
dol_mktime(
GETPOST($attributekeylong.
'hour',
'int'),
GETPOST($attributekeylong.
'min',
'int'),
GETPOST($attributekeylong.
'sec',
'int'),
GETPOST($attributekeylong.
'month',
'int'),
GETPOST($attributekeylong.
'day',
'int'),
GETPOST($attributekeylong.
'year',
'int'));
525 $object->array_options[
'options_'.$attributekey] =
GETPOST($attributekeylong,
'alpha');
528 $result = $object->insertExtraFields(empty($triggermodname) ?
'' : $triggermodname, $user);
534 $action =
'edit_extras';
539 if ($action ==
'update_extras' && !empty($user->rights->societe->contact->creer)) {
543 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
549 $result = $object->insertExtraFields(
'CONTACT_MODIFY');
557 $action =
'edit_extras';
562 $triggersendname =
'CONTACT_SENTBYMAIL';
564 $mode =
'emailfromcontact';
565 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
579 $objsoc->fetch($socid);
582 $title = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans(
"Contacts") : $langs->trans(
"ContactsAddresses"));
583 if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match(
'/contactnameonly/', $conf->global->MAIN_HTML_TITLE) && $object->lastname) {
584 $title = $object->lastname;
586 $help_url =
'EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas';
587 $title = (!empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans(
"NewContact") : $langs->trans(
"NewContactAddress"));
591 $countrynotdefined = $langs->trans(
"ErrorSetACountryFirst").
' ('.$langs->trans(
"SeeAbove").
')';
593 if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
597 if (empty($object->error) && $id) {
599 $result = $object->fetch($id);
604 $objcanvas->assign_values($action, $object->id, $object->ref);
605 $objcanvas->display_canvas($action);
612 if ($user->rights->societe->contact->supprimer) {
613 if ($action ==
'delete') {
614 print
$form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".$id.($backtopage ?
'&backtopage='.$backtopage :
''), $langs->trans(
"DeleteContact"), $langs->trans(
"ConfirmDeleteContact"),
"confirm_delete",
'', 0, 1);
625 $res = $object->fetch($id, $user);
630 $object->fetchRoles();
636 if ($user->rights->societe->contact->creer) {
637 if ($action ==
'create') {
641 $object->canvas = $canvas;
643 $object->state_id =
GETPOST(
"state_id",
"int");
646 $object->country_id =
GETPOST(
"country_id") ?
GETPOST(
"country_id",
"int") : (empty($objsoc->country_id) ? $mysoc->country_id : $objsoc->country_id);
647 if ($object->country_id) {
648 $tmparray =
getCountry($object->country_id,
'all');
649 $object->country_code = $tmparray[
'code'];
650 $object->country = $tmparray[
'label'];
660 if ($conf->use_javascript_ajax) {
661 print
"\n".
'<script type="text/javascript">'.
"\n";
662 print
'jQuery(document).ready(function () {
663 jQuery("#selectcountry_id").change(function() {
664 document.formsoc.action.value="create";
665 document.formsoc.submit();
668 $("#copyaddressfromsoc").click(function() {
669 $(\'textarea[name="address"]\').val("'.dol_escape_js($objsoc->address).
'");
670 $(\'input[name="zipcode"]\').val("'.
dol_escape_js($objsoc->zip).
'");
671 $(\'input[name="town"]\').val("'.
dol_escape_js($objsoc->town).
'");
672 console.log("Set state_id to '.
dol_escape_js($objsoc->state_id).
'");
673 $(\'select[name="state_id"]\').val("'.
dol_escape_js($objsoc->state_id).
'").trigger("change");
674 /* set country at end because it will trigger page refresh */
675 console.log("Set country id to '.
dol_escape_js($objsoc->country_id).
'");
676 $(\'select[name="country_id"]\').val("'.
dol_escape_js($objsoc->country_id).
'").trigger("change"); /* trigger required to update select2 components */
679 print
'</script>'.
"\n";
682 print
'<form method="post" name="formsoc" action="'.$_SERVER[
"PHP_SELF"].
'">';
683 print
'<input type="hidden" name="token" value="'.newToken().
'">';
684 print
'<input type="hidden" name="action" value="add">';
685 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
686 if (!empty($objsoc)) {
687 print
'<input type="hidden" name="entity" value="'.$objsoc->entity.
'">';
692 print
'<table class="border centpercent">';
695 print
'<tr><td class="titlefieldcreate fieldrequired"><label for="lastname">'.$langs->trans(
"Lastname").
' / '.$langs->trans(
"Label").
'</label></td>';
696 print
'<td colspan="3"><input name="lastname" id="lastname" type="text" class="maxwidth100onsmartphone" maxlength="80" value="'.dol_escape_htmltag(
GETPOST(
"lastname",
'alpha') ?
GETPOST(
"lastname",
'alpha') : $object->lastname).
'" autofocus="autofocus"></td>';
700 print
'<td><label for="firstname">';
701 print
$form->textwithpicto($langs->trans(
"Firstname"), $langs->trans(
"KeepEmptyIfGenericAddress")).
'</label></td>';
702 print
'<td colspan="3"><input name="firstname" id="firstname"type="text" class="maxwidth100onsmartphone" maxlength="80" value="'.dol_escape_htmltag(
GETPOST(
"firstname",
'alpha') ?
GETPOST(
"firstname",
'alpha') : $object->firstname).
'"></td>';
706 if (empty($conf->global->SOCIETE_DISABLE_CONTACTS)) {
708 print
'<tr><td><label for="socid">'.$langs->trans(
"ThirdParty").
'</label></td>';
709 print
'<td colspan="3" class="maxwidthonsmartphone">';
710 print $objsoc->getNomUrl(1,
'contact');
712 print
'<input type="hidden" name="socid" id="socid" value="'.$objsoc->id.
'">';
715 print
'<tr><td><label for="socid">'.$langs->trans(
"ThirdParty").
'</label></td><td colspan="3" class="maxwidthonsmartphone">';
716 print
img_picto(
'',
'company').$form->select_company($socid,
'socid',
'',
'SelectThirdParty', 0, 0,
null, 0,
'minwidth300 maxwidth500 widthcentpercentminusxx');
722 print
'<tr><td><label for="civility_code">'.$langs->trans(
"UserTitle").
'</label></td><td colspan="3">';
723 print $formcompany->select_civility(
GETPOSTISSET(
"civility_code") ?
GETPOST(
"civility_code",
'alpha') : $object->civility_code,
'civility_code');
727 print
'<tr><td><label for="title">'.$langs->trans(
"PostOrFunction").
'</label></td>';
728 print
'<td colspan="3"><input name="poste" id="title" type="text" class="minwidth100" maxlength="255" value="'.dol_escape_htmltag(
GETPOSTISSET(
"poste") ?
GETPOST(
"poste",
'alphanohtml') : $object->poste).
'"></td>';
731 if ($conf->use_javascript_ajax && $socid > 0) {
736 if (((isset($objsoc->typent_code) && $objsoc->typent_code ==
'TE_PRIVATE') || !empty($conf->global->CONTACT_USE_COMPANY_ADDRESS)) &&
dol_strlen(trim($object->address)) == 0) {
737 $object->address = $objsoc->address;
739 print
'<tr><td><label for="address">'.$langs->trans(
"Address").
'</label></td>';
740 print
'<td colspan="'.$colspan.
'"><textarea class="flat quatrevingtpercent" name="address" id="address" rows="'.ROWS_2.
'">'.(
GETPOST(
"address",
'alpha') ?
GETPOST(
"address",
'alpha') : $object->address).
'</textarea></td>';
742 if ($conf->use_javascript_ajax && $socid > 0) {
744 if (empty($conf->global->SOCIETE_DISABLE_STATE)) {
748 print
'<td class="valignmiddle center" rowspan="'.$rowspan.
'">';
749 print
'<a href="#" id="copyaddressfromsoc">'.$langs->trans(
'CopyAddressFromSoc').
'</a>';
755 if (((isset($objsoc->typent_code) && $objsoc->typent_code ==
'TE_PRIVATE') || !empty($conf->global->CONTACT_USE_COMPANY_ADDRESS)) &&
dol_strlen(trim($object->zip)) == 0) {
756 $object->zip = $objsoc->zip;
758 if (((isset($objsoc->typent_code) && $objsoc->typent_code ==
'TE_PRIVATE') || !empty($conf->global->CONTACT_USE_COMPANY_ADDRESS)) &&
dol_strlen(trim($object->town)) == 0) {
759 $object->town = $objsoc->town;
761 print
'<tr><td><label for="zipcode">'.$langs->trans(
"Zip").
'</label> / <label for="town">'.$langs->trans(
"Town").
'</label></td><td colspan="'.$colspan.
'" class="maxwidthonsmartphone">';
762 print $formcompany->select_ziptown((
GETPOST(
"zipcode",
'alpha') ?
GETPOST(
"zipcode",
'alpha') : $object->zip),
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6).
' ';
763 print $formcompany->select_ziptown((
GETPOST(
"town",
'alpha') ?
GETPOST(
"town",
'alpha') : $object->town),
'town', array(
'zipcode',
'selectcountry_id',
'state_id'));
767 print
'<tr><td><label for="selectcountry_id">'.$langs->trans(
"Country").
'</label></td><td colspan="'.$colspan.
'" class="maxwidthonsmartphone">';
768 print
img_picto(
'',
'globe-americas',
'class="paddingrightonly"');
769 print
$form->select_country((
GETPOST(
"country_id",
'alpha') ?
GETPOST(
"country_id",
'alpha') : $object->country_id),
'country_id');
771 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
776 if (empty($conf->global->SOCIETE_DISABLE_STATE)) {
777 if (!empty($conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT) && ($conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT == 1 || $conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT == 2)) {
778 print
'<tr><td><label for="state_id">'.$langs->trans(
'Region-State').
'</label></td><td colspan="'.$colspan.
'" class="maxwidthonsmartphone">';
780 print
'<tr><td><label for="state_id">'.$langs->trans(
'State').
'</label></td><td colspan="'.$colspan.
'" class="maxwidthonsmartphone">';
783 if ($object->country_id) {
784 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
785 print $formcompany->select_state(
GETPOST(
"state_id",
'alpha') ?
GETPOST(
"state_id",
'alpha') : $object->state_id, $object->country_code,
'state_id');
787 print $countrynotdefined;
792 if (((isset($objsoc->typent_code) && $objsoc->typent_code ==
'TE_PRIVATE') || !empty($conf->global->CONTACT_USE_COMPANY_ADDRESS)) &&
dol_strlen(trim($object->phone_pro)) == 0) {
793 $object->phone_pro = $objsoc->phone;
795 if (((isset($objsoc->typent_code) && $objsoc->typent_code ==
'TE_PRIVATE') || !empty($conf->global->CONTACT_USE_COMPANY_ADDRESS)) &&
dol_strlen(trim($object->fax)) == 0) {
796 $object->fax = $objsoc->fax;
800 print
'<tr><td>'.$form->editfieldkey(
'PhonePro',
'phone_pro',
'', $object, 0).
'</td>';
803 print
'<input type="text" name="phone_pro" id="phone_pro" class="maxwidth200" value="'.(GETPOSTISSET(
'phone_pro') ?
GETPOST(
'phone_pro',
'alpha') : $object->phone_pro).
'"></td>';
804 if ($conf->browser->layout ==
'phone') {
807 print
'<td>'.$form->editfieldkey(
'PhonePerso',
'phone_perso',
'', $object, 0).
'</td>';
810 print
'<input type="text" name="phone_perso" id="phone_perso" class="maxwidth200" value="'.(GETPOSTISSET(
'phone_perso') ?
GETPOST(
'phone_perso',
'alpha') : $object->phone_perso).
'"></td></tr>';
812 print
'<tr><td>'.$form->editfieldkey(
'PhoneMobile',
'phone_mobile',
'', $object, 0).
'</td>';
814 print
img_picto(
'',
'object_phoning_mobile');
815 print
'<input type="text" name="phone_mobile" id="phone_mobile" class="maxwidth200" value="'.(GETPOSTISSET(
'phone_mobile') ?
GETPOST(
'phone_mobile',
'alpha') : $object->phone_mobile).
'"></td>';
816 if ($conf->browser->layout ==
'phone') {
819 print
'<td>'.$form->editfieldkey(
'Fax',
'fax',
'', $object, 0).
'</td>';
821 print
img_picto(
'',
'object_phoning_fax');
822 print
'<input type="text" name="fax" id="fax" class="maxwidth200" value="'.(GETPOSTISSET(
'fax') ?
GETPOST(
'fax',
'alpha') : $object->fax).
'"></td>';
825 if (((isset($objsoc->typent_code) && $objsoc->typent_code ==
'TE_PRIVATE') || !empty($conf->global->CONTACT_USE_COMPANY_ADDRESS)) &&
dol_strlen(trim($object->email)) == 0) {
826 $object->email = $objsoc->email;
830 print
'<tr><td>'.$form->editfieldkey(
'EMail',
'email',
'', $object, 0,
'string',
'').
'</td>';
833 print
'<input type="text" name="email" id="email" value="'.(GETPOSTISSET(
'email') ?
GETPOST(
'email',
'alpha') : $object->email).
'"></td>';
838 if ($conf->use_javascript_ajax && $conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS == 2) {
839 print
"\n".
'<script type="text/javascript">'.
"\n";
840 print
'$(document).ready(function () {
841 $("#email").keyup(function() {
842 if ($(this).val()!="") {
843 $(".noemail").addClass("fieldrequired");
845 $(".noemail").removeClass("fieldrequired");
849 print
'</script>'.
"\n";
851 if (!
GETPOSTISSET(
"no_email") && !empty($object->email)) {
852 $result = $object->getNoEmail();
858 print
'<td class="noemail"><label for="no_email">'.$langs->trans(
"No_Email").
'</label></td>';
860 print
$form->selectyesno(
'no_email', (
GETPOSTISSET(
"no_email") ?
GETPOST(
"no_email",
'int') : $conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS), 1,
false, ($conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS == 2));
867 foreach ($socialnetworks as $key => $value) {
868 if ($value[
'active']) {
870 print
'<td><label for="'.$value[
'label'].
'">'.
$form->editfieldkey($value[
'label'], $key,
'', $object, 0).
'</label></td>';
871 print
'<td colspan="3">';
872 if (!empty($value[
'icon'])) {
873 print
'<span class="fa '.$value[
'icon'].
'"></span>';
875 print
'<input type="text" name="'.$key.
'" id="'.$key.
'" class="minwidth100" maxlength="80" value="'.
dol_escape_htmltag(
GETPOSTISSET($key) ?
GETPOST($key,
'alphanohtml') : (!empty($object->socialnetworks[$key]) ? $object->socialnetworks[$key] :
"")).
'">';
878 } elseif (!empty($object->socialnetworks[$key])) {
879 print
'<input type="hidden" name="'.$key.
'" value="'.$object->socialnetworks[$key].
'">';
885 print
'<tr><td><label for="priv">'.$langs->trans(
"ContactVisibility").
'</label></td><td colspan="3">';
886 $selectarray = array(
'0'=>$langs->trans(
"ContactPublic"),
'1'=>$langs->trans(
"ContactPrivate"));
887 print
$form->selectarray(
'priv', $selectarray, (
GETPOST(
"priv",
'alpha') ?
GETPOST(
"priv",
'alpha') : $object->priv), 0);
892 print
'<tr><td>'.$form->editfieldkey(
'DefaultLang',
'default_lang',
'', $object, 0).
'</td><td colspan="3" class="maxwidthonsmartphone">'.
"\n";
893 print
img_picto(
'',
'language',
'class="pictofixedwidth"').$formadmin->select_language(
GETPOST(
'default_lang',
'alpha') ?
GETPOST(
'default_lang',
'alpha') : ($object->default_lang ? $object->default_lang :
''),
'default_lang', 0, 0, 1, 0, 0,
'maxwidth200onsmartphone');
899 if (
isModEnabled(
'categorie') && !empty($user->rights->categorie->lire)) {
900 print
'<tr><td>'.$form->editfieldkey(
'Categories',
'contcats',
'', $object, 0).
'</td><td colspan="3">';
901 $cate_arbo =
$form->select_all_categories(Categorie::TYPE_CONTACT,
null,
'parent',
null,
null, 1);
902 print
img_picto(
'',
'category').$form->multiselectarray(
'contcats', $cate_arbo,
GETPOST(
'contcats',
'array'),
null,
null,
null,
null,
'90%');
907 if (!empty($socid)) {
908 print
'<tr><td>'.$langs->trans(
"ContactByDefaultFor").
'</td>';
909 print
'<td colspan="3">';
910 $contactType = $object->listeTypeContacts(
'external',
'', 1);
911 print
$form->multiselectarray(
'roles', $contactType, array(), 0, 0,
'minwidth500');
916 $parameters = array(
'socid' => $socid,
'objsoc' => $objsoc,
'colspan' =>
' colspan="3"',
'cols' => 3,
'colspanvalue' => 3);
917 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
919 print
"</table><br>";
921 print
'<hr style="margin-bottom: 20px">';
924 print
load_fiche_titre(
'<div class="comboperso">'.$langs->trans(
"PersonalInformations").
'</div>',
'',
'');
926 print
'<table class="border centpercent">';
929 print
'<tr><td><label for="birthday">'.$langs->trans(
"DateOfBirth").
'</label></td><td>';
931 if ($object->birthday) {
932 print
$form->selectDate($object->birthday,
'birthday', 0, 0, 0,
"perso", 1, 0);
934 print
$form->selectDate(
'',
'birthday', 0, 0, 1,
"perso", 1, 0);
938 print
'<td><label for="birthday_alert">'.$langs->trans(
"Alert").
'</label>: ';
939 if (!empty($object->birthday_alert)) {
940 print
'<input type="checkbox" name="birthday_alert" id="birthday_alert" checked>';
942 print
'<input type="checkbox" name="birthday_alert" id="birthday_alert">';
951 print
$form->buttonsSaveCancel(
"Add");
954 } elseif ($action ==
'edit' && !empty($id)) {
960 if (
GETPOSTISSET(
"country_id") || $object->country_id) {
961 $tmparray =
getCountry($object->country_id,
'all');
962 $object->country_code = $tmparray[
'code'];
963 $object->country = $tmparray[
'label'];
967 $objsoc->fetch($object->socid);
972 if ($conf->use_javascript_ajax) {
973 print
"\n".
'<script type="text/javascript">'.
"\n";
974 print
'jQuery(document).ready(function () {
975 jQuery("#selectcountry_id").change(function() {
976 document.formsoc.action.value="edit";
977 document.formsoc.submit();
980 $("#copyaddressfromsoc").click(function() {
981 $(\'textarea[name="address"]\').val("'.dol_escape_js($objsoc->address).
'");
982 $(\'input[name="zipcode"]\').val("'.
dol_escape_js($objsoc->zip).
'");
983 $(\'input[name="town"]\').val("'.
dol_escape_js($objsoc->town).
'");
984 console.log("Set state_id to '.
dol_escape_js($objsoc->state_id).
'");
985 $(\'select[name="state_id"]\').val("'.
dol_escape_js($objsoc->state_id).
'").trigger("change");
986 /* set country at end because it will trigger page refresh */
987 console.log("Set country id to '.
dol_escape_js($objsoc->country_id).
'");
988 $(\'select[name="country_id"]\').val("'.
dol_escape_js($objsoc->country_id).
'").trigger("change"); /* trigger required to update select2 components */
991 print
'</script>'.
"\n";
994 print
'<form enctype="multipart/form-data" method="post" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$id.
'" name="formsoc">';
995 print
'<input type="hidden" name="token" value="'.newToken().
'">';
996 print
'<input type="hidden" name="id" value="'.$id.
'">';
997 print
'<input type="hidden" name="action" value="update">';
998 print
'<input type="hidden" name="contactid" value="'.$object->id.
'">';
999 print
'<input type="hidden" name="old_lastname" value="'.$object->lastname.
'">';
1000 print
'<input type="hidden" name="old_firstname" value="'.$object->firstname.
'">';
1001 if (!empty($backtopage)) {
1002 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1007 print
'<table class="border centpercent">';
1010 if (!empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) {
1011 print
'<tr><td>'.$langs->trans(
"ID").
'</td><td colspan="3">';
1017 print
'<tr><td class="titlefieldcreate fieldrequired"><label for="lastname">'.$langs->trans(
"Lastname").
' / '.$langs->trans(
"Label").
'</label></td>';
1018 print
'<td colspan="3"><input name="lastname" id="lastname" type="text" class="minwidth200" maxlength="80" value="'.(GETPOSTISSET(
"lastname") ?
GETPOST(
"lastname") : $object->lastname).
'" autofocus="autofocus"></td>';
1022 print
'<td><label for="firstname">'.$langs->trans(
"Firstname").
'</label></td>';
1023 print
'<td colspan="3"><input name="firstname" id="firstname" type="text" class="minwidth200" maxlength="80" value="'.(GETPOSTISSET(
"firstname") ?
GETPOST(
"firstname") : $object->firstname).
'"></td>';
1027 if (empty($conf->global->SOCIETE_DISABLE_CONTACTS)) {
1028 print
'<tr><td><label for="socid">'.$langs->trans(
"ThirdParty").
'</label></td>';
1029 print
'<td colspan="3" class="maxwidthonsmartphone">';
1030 print
img_picto(
'',
'company').$form->select_company(
GETPOST(
'socid',
'int') ?
GETPOST(
'socid',
'int') : ($object->socid ? $object->socid : -1),
'socid',
'', $langs->trans(
"SelectThirdParty"));
1036 print
'<tr><td><label for="civility_code">'.$langs->trans(
"UserTitle").
'</label></td><td colspan="3">';
1037 print $formcompany->select_civility(
GETPOSTISSET(
"civility_code") ?
GETPOST(
"civility_code",
"aZ09") : $object->civility_code,
'civility_code');
1041 print
'<tr><td><label for="title">'.$langs->trans(
"PostOrFunction").
'</label></td>';
1042 print
'<td colspan="3"><input name="poste" id="title" type="text" class="minwidth100" maxlength="255" value="'.dol_escape_htmltag(
GETPOSTISSET(
"poste") ?
GETPOST(
"poste",
'alphanohtml') : $object->poste).
'"></td></tr>';
1045 print
'<tr><td><label for="address">'.$langs->trans(
"Address").
'</label></td>';
1046 print
'<td colspan="3">';
1047 print
'<div class="paddingrightonly valignmiddle inline-block quatrevingtpercent">';
1048 print
'<textarea class="flat minwidth200 centpercent" name="address" id="address">'.(GETPOSTISSET(
"address") ?
GETPOST(
"address",
'alphanohtml') : $object->address).
'</textarea>';
1049 print
'</div><div class="paddingrightonly valignmiddle inline-block">';
1050 if ($conf->use_javascript_ajax) {
1051 print
'<a href="#" id="copyaddressfromsoc">'.$langs->trans(
'CopyAddressFromSoc').
'</a><br>';
1057 print
'<tr><td><label for="zipcode">'.$langs->trans(
"Zip").
'</label> / <label for="town">'.$langs->trans(
"Town").
'</label></td><td colspan="3" class="maxwidthonsmartphone">';
1058 print $formcompany->select_ziptown((
GETPOSTISSET(
"zipcode") ?
GETPOST(
"zipcode") : $object->zip),
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6).
' ';
1059 print $formcompany->select_ziptown((
GETPOSTISSET(
"town") ?
GETPOST(
"town") : $object->town),
'town', array(
'zipcode',
'selectcountry_id',
'state_id'));
1063 print
'<tr><td><label for="selectcountry_id">'.$langs->trans(
"Country").
'</label></td><td colspan="3" class="maxwidthonsmartphone">';
1064 print
img_picto(
'',
'globe-americas',
'class="paddingrightonly"');
1065 print
$form->select_country(
GETPOSTISSET(
"country_id") ?
GETPOST(
"country_id") : $object->country_id,
'country_id');
1067 print
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
1072 if (empty($conf->global->SOCIETE_DISABLE_STATE)) {
1073 if (!empty($conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT) && ($conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT == 1 || $conf->global->MAIN_SHOW_REGION_IN_STATE_SELECT == 2)) {
1074 print
'<tr><td><label for="state_id">'.$langs->trans(
'Region-State').
'</label></td><td colspan="3" class="maxwidthonsmartphone">';
1076 print
'<tr><td><label for="state_id">'.$langs->trans(
'State').
'</label></td><td colspan="3" class="maxwidthonsmartphone">';
1079 print
img_picto(
'',
'state',
'class="pictofixedwidth"');
1080 print $formcompany->select_state(
GETPOSTISSET(
'state_id') ?
GETPOST(
'state_id',
'alpha') : $object->state_id, $object->country_code,
'state_id');
1085 print
'<tr><td>'.$form->editfieldkey(
'PhonePro',
'phone_pro',
GETPOST(
'phone_pro',
'alpha'), $object, 0).
'</td>';
1088 print
'<input type="text" name="phone_pro" id="phone_pro" class="maxwidth200" maxlength="80" value="'.(GETPOSTISSET(
'phone_pro') ?
GETPOST(
'phone_pro',
'alpha') : $object->phone_pro).
'"></td>';
1089 print
'<td>'.$form->editfieldkey(
'PhonePerso',
'fax',
GETPOST(
'phone_perso',
'alpha'), $object, 0).
'</td>';
1092 print
'<input type="text" name="phone_perso" id="phone_perso" class="maxwidth200" maxlength="80" value="'.(GETPOSTISSET(
'phone_perso') ?
GETPOST(
'phone_perso',
'alpha') : $object->phone_perso).
'"></td></tr>';
1094 print
'<tr><td>'.$form->editfieldkey(
'PhoneMobile',
'phone_mobile',
GETPOST(
'phone_mobile',
'alpha'), $object, 0,
'string',
'').
'</td>';
1096 print
img_picto(
'',
'object_phoning_mobile');
1097 print
'<input type="text" name="phone_mobile" id="phone_mobile" class="maxwidth200" maxlength="80" value="'.(GETPOSTISSET(
'phone_mobile') ?
GETPOST(
'phone_mobile',
'alpha') : $object->phone_mobile).
'"></td>';
1098 print
'<td>'.$form->editfieldkey(
'Fax',
'fax',
GETPOST(
'fax',
'alpha'), $object, 0).
'</td>';
1100 print
img_picto(
'',
'object_phoning_fax');
1101 print
'<input type="text" name="fax" id="fax" class="maxwidth200" maxlength="80" value="'.(GETPOSTISSET(
'phone_fax') ?
GETPOST(
'phone_fax',
'alpha') : $object->fax).
'"></td></tr>';
1104 print
'<tr><td>'.$form->editfieldkey(
'EMail',
'email',
GETPOST(
'email',
'alpha'), $object, 0,
'string',
'', (!empty($conf->global->SOCIETE_EMAIL_MANDATORY))).
'</td>';
1107 print
'<input type="text" name="email" id="email" class="maxwidth100onsmartphone quatrevingtpercent" value="'.(GETPOSTISSET(
'email') ?
GETPOST(
'email',
'alpha') : $object->email).
'"></td>';
1109 $langs->load(
"mails");
1110 print
'<td class="nowrap">'.$langs->trans(
"NbOfEMailingsSend").
'</td>';
1111 print
'<td>'.$object->getNbOfEMailings().
'</td>';
1113 print
'<td colspan="2"></td>';
1119 if ($conf->use_javascript_ajax && isset($conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS) && $conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS == 2) {
1120 print
"\n".
'<script type="text/javascript">'.
"\n";
1123 jQuery(document).ready(function () {
1124 function init_check_no_email(input) {
1125 if (input.val()!="") {
1126 $(".noemail").addClass("fieldrequired");
1128 $(".noemail").removeClass("fieldrequired");
1131 $("#email").keyup(function() {
1132 init_check_no_email($(this));
1134 init_check_no_email($("#email"));
1136 print
'</script>'.
"\n";
1138 if (!
GETPOSTISSET(
"no_email") && !empty($object->email)) {
1139 $result = $object->getNoEmail();
1145 print
'<td class="noemail"><label for="no_email">'.$langs->trans(
"No_Email").
'</label></td>';
1147 $useempty = (isset($conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS) && ($conf->global->MAILING_CONTACT_DEFAULT_BULK_STATUS == 2));
1148 print
$form->selectyesno(
'no_email', (
GETPOSTISSET(
"no_email") ?
GETPOST(
"no_email",
'int') : $object->no_email), 1, false, $useempty);
1154 foreach ($socialnetworks as $key => $value) {
1155 if ($value[
'active']) {
1157 print
'<td><label for="'.$value[
'label'].
'">'.
$form->editfieldkey($value[
'label'], $key,
'', $object, 0).
'</label></td>';
1158 print
'<td colspan="3">';
1159 if (!empty($value[
'icon'])) {
1160 print
'<span class="fa '.$value[
'icon'].
'"></span>';
1162 print
'<input type="text" name="'.$key.
'" id="'.$key.
'" class="minwidth100" maxlength="80" value="'.
dol_escape_htmltag(
GETPOSTISSET($key) ?
GETPOST($key,
'alphanohtml') : (empty($object->socialnetworks[$key]) ?
'' : $object->socialnetworks[$key])).
'">';
1165 } elseif (!empty($object->socialnetworks[$key])) {
1166 print
'<input type="hidden" name="'.$key.
'" value="'.$object->socialnetworks[$key].
'">';
1172 print
'<tr><td><label for="priv">'.$langs->trans(
"ContactVisibility").
'</label></td><td colspan="3">';
1173 $selectarray = array(
'0'=>$langs->trans(
"ContactPublic"),
'1'=>$langs->trans(
"ContactPrivate"));
1174 print
$form->selectarray(
'priv', $selectarray, $object->priv, 0);
1179 print
'<tr><td>'.$form->editfieldkey(
'DefaultLang',
'default_lang',
'', $object, 0).
'</td><td colspan="3" class="maxwidthonsmartphone">'.
"\n";
1180 print
img_picto(
'',
'language',
'class="pictofixedwidth"').$formadmin->select_language(
GETPOST(
'default_lang',
'alpha') ?
GETPOST(
'default_lang',
'alpha') : ($object->default_lang ? $object->default_lang :
''),
'default_lang', 0, 0, 1, 0, 0,
'maxwidth200onsmartphone');
1186 print
'<tr><td class="tdtop"><label for="note_public">'.$langs->trans(
"NotePublic").
'</label></td><td colspan="3">';
1187 $doleditor =
new DolEditor(
'note_public', $object->note_public,
'', 80,
'dolibarr_notes',
'In', 0,
false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC) ? 0 : 1, ROWS_3,
'90%');
1188 print $doleditor->Create(1);
1192 print
'<tr><td class="tdtop"><label for="note_private">'.$langs->trans(
"NotePrivate").
'</label></td><td colspan="3">';
1193 $doleditor =
new DolEditor(
'note_private', $object->note_private,
'', 80,
'dolibarr_notes',
'In', 0,
false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PRIVATE) ? 0 : 1, ROWS_3,
'90%');
1194 print $doleditor->Create(1);
1198 print
'<tr><td>'.$langs->trans(
"Status").
'</td>';
1199 print
'<td colspan="3">';
1200 print $object->getLibStatut(4);
1204 if (
isModEnabled(
'categorie') && !empty($user->rights->categorie->lire)) {
1205 $arrayselected = array();
1206 print
'<tr><td>'.$form->editfieldkey(
'Categories',
'contcats',
'', $object, 0).
'</td>';
1207 print
'<td colspan="3">';
1208 $cate_arbo =
$form->select_all_categories(Categorie::TYPE_CONTACT,
null,
null,
null,
null, 1);
1210 $cats = $c->containing($object->id,
'contact');
1211 foreach ($cats as $cat) {
1212 $arrayselected[] = $cat->id;
1214 print
img_picto(
'',
'category').$form->multiselectarray(
'contcats', $cate_arbo, $arrayselected,
'', 0,
'', 0,
'90%');
1219 if (!empty($object->socid)) {
1220 print
'<tr><td>'.$langs->trans(
"ContactByDefaultFor").
'</td>';
1221 print
'<td colspan="3">';
1222 print $formcompany->showRoles(
"roles", $object,
'edit', $object->roles);
1227 $parameters = array(
'colspan' =>
' colspan="3"',
'cols'=>
'3',
'colspanvalue'=>
'3');
1228 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_edit.tpl.php';
1230 $object->load_ref_elements();
1233 print
'<tr><td>'.$langs->trans(
"ContactForOrders").
'</td><td colspan="3">';
1234 print $object->ref_commande ? $object->ref_commande : (
'<span class="opacitymedium">'.$langs->trans(
"NoContactForAnyOrder").
'</span>');
1239 print
'<tr><td>'.$langs->trans(
"ContactForProposals").
'</td><td colspan="3">';
1240 print $object->ref_propal ? $object->ref_propal : (
'<span class="opacitymedium">'.$langs->trans(
"NoContactForAnyProposal").
'</span>');
1245 print
'<tr><td>'.$langs->trans(
"ContactForContracts").
'</td><td colspan="3">';
1246 print $object->ref_contrat ? $object->ref_contrat : (
'<span class="opacitymedium">'.$langs->trans(
"NoContactForAnyContract").
'</span>');
1251 print
'<tr><td>'.$langs->trans(
"ContactForInvoices").
'</td><td colspan="3">';
1252 print $object->ref_facturation ? $object->ref_facturation : (
'<span class="opacitymedium">'.$langs->trans(
"NoContactForAnyInvoice").
'</span>');
1257 print
'<tr><td>'.$langs->trans(
"DolibarrLogin").
'</td><td colspan="3">';
1258 if ($object->user_id) {
1259 $dolibarr_user =
new User($db);
1260 $result = $dolibarr_user->fetch($object->user_id);
1261 print $dolibarr_user->getLoginUrl(1);
1263 print
'<span class="opacitymedium">'.$langs->trans(
"NoDolibarrAccess").
'</span>';
1269 print
'<td>'.$langs->trans(
"PhotoFile").
'</td>';
1270 print
'<td colspan="3">';
1271 if ($object->photo) {
1272 print
$form->showphoto(
'contact', $object);
1275 print
'<table class="nobordernopadding">';
1276 if ($object->photo) {
1277 print
'<tr><td><input type="checkbox" class="flat photodelete" name="deletephoto" id="photodelete"> '.$langs->trans(
"Delete").
'<br><br></td></tr>';
1282 $maxmin = $maxfilesizearray[
'maxmin'];
1284 print
'<input type="hidden" name="MAX_FILE_SIZE" value="'.($maxmin * 1024).
'">';
1286 print
'<input type="file" class="flat" name="photo" id="photoinput">';
1297 print
$form->buttonsSaveCancel();
1304 if (
GETPOST(
'modelselected',
'alpha')) {
1305 $action =
'presend';
1309 if (!empty($id) && $action !=
'edit' && $action !=
'create') {
1317 if ($action ==
'create_user') {
1319 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1322 $generated_password =
'';
1323 if (empty($ldap_sid)) {
1324 require_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
1327 $password = $generated_password;
1330 $formquestion = array(
1331 array(
'label' => $langs->trans(
"LoginToCreate"),
'type' =>
'text',
'name' =>
'login',
'value' => $login),
1332 array(
'label' => $langs->trans(
"Password"),
'type' =>
'text',
'name' =>
'password',
'value' => $password),
1335 $text = $langs->trans(
"ConfirmCreateContact").
'<br>';
1337 if ($object->socid > 0) {
1338 $text .= $langs->trans(
"UserWillBeExternalUser");
1340 $text .= $langs->trans(
"UserWillBeInternalUser");
1343 print
$form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".$object->id, $langs->trans(
"CreateDolibarrLogin"), $text,
"confirm_create_user", $formquestion,
'yes');
1346 $linkback =
'<a href="'.DOL_URL_ROOT.
'/contact/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
1348 $morehtmlref =
'<a href="'.DOL_URL_ROOT.
'/contact/vcard.php?id='.$object->id.
'" class="refid">';
1349 $morehtmlref .=
img_picto($langs->trans(
"Download").
' '.$langs->trans(
"VCard"),
'vcard.png',
'class="valignmiddle marginleftonly paddingrightonly"');
1350 $morehtmlref .=
'</a>';
1352 $morehtmlref .=
'<div class="refidno">';
1353 if (empty($conf->global->SOCIETE_DISABLE_CONTACTS)) {
1354 $objsoc->fetch($object->socid);
1356 $morehtmlref .= $langs->trans(
'ThirdParty').
' : ';
1357 if ($objsoc->id > 0) {
1358 $morehtmlref .= $objsoc->getNomUrl(1,
'contact');
1360 $morehtmlref .=
'<span class="opacitymedium">'.$langs->trans(
"ContactNotLinkedToCompany").
'</span>';
1363 $morehtmlref .=
'</div>';
1365 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref);
1368 print
'<div class="fichecenter">';
1369 print
'<div class="fichehalfleft">';
1371 print
'<div class="underbanner clearboth"></div>';
1372 print
'<table class="border tableforfield" width="100%">';
1375 print
'<tr><td class="titlefield">'.$langs->trans(
"UserTitle").
'</td><td>';
1376 print $object->getCivilityLabel();
1380 print
'<tr><td>'.$langs->trans(
"PostOrFunction").
'</td><td>'.$object->poste.
'</td></tr>';
1384 $langs->load(
"mails");
1385 print
'<tr><td>'.$langs->trans(
"NbOfEMailingsSend").
'</td>';
1386 print
'<td><a href="'.DOL_URL_ROOT.
'/comm/mailing/list.php?filteremail='.urlencode($object->email).
'">'.$object->getNbOfEMailings().
'</a></td></tr>';
1391 $result = $object->getNoEmail();
1395 print
'<tr><td>'.$langs->trans(
"No_Email").
'</td><td>';
1396 if ($object->email) {
1397 print
yn($object->no_email);
1399 print
'<span class="opacitymedium">'.$langs->trans(
"EMailNotDefined").
'</span>';
1406 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
1407 print
'<tr><td>'.$langs->trans(
"DefaultLang").
'</td><td>';
1410 $langs->load(
"languages");
1411 $labellang = ($object->default_lang ? $langs->trans(
'Language_'.$object->default_lang) :
'');
1412 print
picto_from_langcode($object->default_lang,
'class="paddingrightonly saturatemedium opacitylow"');
1417 print
'<tr><td>'.$langs->trans(
"ContactVisibility").
'</td><td>';
1418 print $object->LibPubPriv($object->priv);
1424 $object->fetch_thirdparty();
1426 if (!empty($conf->global->THIRDPARTY_ENABLE_PROSPECTION_ON_ALTERNATIVE_ADRESSES)) {
1427 if ($object->thirdparty->client == 2 || $object->thirdparty->client == 3) {
1430 print
'<div class="underbanner clearboth"></div>';
1431 print
'<table class="border" width="100%">';
1434 print
'<tr><td class="titlefield nowrap">';
1435 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1436 print $langs->trans(
'ProspectLevel');
1438 if ($action !=
'editlevel' && $user->rights->societe->contact->creer) {
1439 print
'<td align="right"><a href="'.$_SERVER[
"PHP_SELF"].
'?action=editlevel&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'Modify'), 1).
'</a></td>';
1441 print
'</tr></table>';
1443 if ($action ==
'editlevel') {
1444 $formcompany->formProspectContactLevel($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_prospectlevel,
'prospect_contact_level_id', 1);
1446 print $object->getLibProspLevel();
1452 $object->loadCacheOfProspStatus();
1453 print
'<tr><td>'.$langs->trans(
"StatusProsp").
'</td><td>'.$object->getLibProspCommStatut(4, $object->cacheprospectstatus[$object->stcomm_id][
'label']);
1454 print
' ';
1455 print
'<div class="floatright">';
1456 foreach ($object->cacheprospectstatus as $key => $val) {
1457 $titlealt =
'default';
1458 if (!empty($val[
'code']) && !in_array($val[
'code'], array(
'ST_NO',
'ST_NEVER',
'ST_TODO',
'ST_PEND',
'ST_DONE'))) {
1459 $titlealt = $val[
'label'];
1461 if ($object->stcomm_id != $val[
'id']) {
1462 print
'<a class="pictosubstatus" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&stcomm='.urlencode($val[
'code']).
'&action=setstcomm&token='.
newToken().
'">'.
img_action($titlealt, $val[
'code'], $val[
'picto']).
'</a>';
1465 print
'</div></td></tr>';
1472 print
'<div class="fichehalfright">';
1474 print
'<div class="underbanner clearboth"></div>';
1475 print
'<table class="border tableforfield centpercent">';
1478 if (
isModEnabled(
'categorie') && !empty($user->rights->categorie->lire)) {
1479 print
'<tr><td class="titlefield">'.$langs->trans(
"Categories").
'</td>';
1481 print
$form->showCategories($object->id, Categorie::TYPE_CONTACT, 1);
1485 if (!empty($object->socid)) {
1486 print
'<tr><td class="titlefield">'.$langs->trans(
"ContactByDefaultFor").
'</td>';
1488 print $formcompany->showRoles(
"roles", $object,
'view', $object->roles);
1494 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1496 $object->load_ref_elements();
1499 print
'<tr><td class="titlefield tdoverflow">'.$langs->trans(
"ContactForProposals").
'</td><td>';
1500 print $object->ref_propal ? $object->ref_propal : $langs->trans(
"NoContactForAnyProposal");
1505 print
'<tr><td class="titlefield tdoverflow">';
1507 print $langs->trans(
"ContactForOrdersOrShipments");
1509 print $langs->trans(
"ContactForOrders");
1512 $none = $langs->trans(
"NoContactForAnyOrder");
1514 $none = $langs->trans(
"NoContactForAnyOrderOrShipments");
1516 print $object->ref_commande ? $object->ref_commande : $none;
1521 print
'<tr><td class="tdoverflow">'.$langs->trans(
"ContactForContracts").
'</td><td>';
1522 print $object->ref_contrat ? $object->ref_contrat : $langs->trans(
"NoContactForAnyContract");
1527 print
'<tr><td class="tdoverflow">'.$langs->trans(
"ContactForInvoices").
'</td><td>';
1528 print $object->ref_facturation ? $object->ref_facturation : $langs->trans(
"NoContactForAnyInvoice");
1532 print
'<tr><td>'.$langs->trans(
"DolibarrLogin").
'</td><td>';
1533 if ($object->user_id) {
1534 $dolibarr_user =
new User($db);
1535 $result = $dolibarr_user->fetch($object->user_id);
1536 print $dolibarr_user->getLoginUrl(-1);
1539 if (!$object->user_id && $user->rights->user->user->creer) {
1540 print
'<a class="aaa" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=create_user&token='.
newToken().
'">'.
img_picto($langs->trans(
"CreateDolibarrLogin"),
'add',
'class="pictofixedwidth"').$langs->trans(
"CreateDolibarrLogin").
'</a>';
1547 print
'</div></div>';
1548 print
'<div style="clear:both"></div>';
1555 print
'<div class="tabsAction">';
1558 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
1559 if (empty($reshook) && $action !=
'presend') {
1560 if (empty($user->socid)) {
1561 if (!empty($object->email)) {
1562 $langs->load(
"mails");
1563 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a></div>';
1565 $langs->load(
"mails");
1566 print
'<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NoEMail")).
'">'.$langs->trans(
'SendMail').
'</a></div>';
1570 if ($user->rights->societe->contact->creer) {
1571 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=edit&token='.
newToken().
'">'.$langs->trans(
'Modify').
'</a>';
1575 if ($object->statut == 0 && $user->rights->societe->contact->creer) {
1576 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=enable&token='.
newToken().
'">'.$langs->trans(
"Reactivate").
'</a>';
1579 if ($object->statut == 1 && $user->rights->societe->contact->creer) {
1580 print
'<a class="butActionDelete" href="'.$_SERVER[
'PHP_SELF'].
'?action=disable&id='.$object->id.
'&token='.
newToken().
'">'.$langs->trans(
"DisableUser").
'</a>';
1584 if ($user->rights->societe->contact->supprimer) {
1585 print
dolGetButtonAction($langs->trans(
"Delete"),
'',
'delete', $_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.
newToken().($backtopage ?
'&backtopage='.urlencode($backtopage) :
''),
'delete', $user->rights->societe->contact->supprimer);
1592 if (
GETPOST(
'modelselected')) {
1593 $action =
'presend';
1596 if ($action !=
'presend') {
1597 print
'<div class="fichecenter"><div class="fichehalfleft">';
1599 print
'</div><div class="fichehalfright">';
1603 $morehtmlright =
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/contact/agenda.php?id='.$object->id);
1606 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1608 $somethingshown =
$formactions->showactions($object,
'contact', $object->socid, 1,
'', $MAXEVENT,
'', $morehtmlright);
1610 print
'</div></div>';
1614 $modelmail =
'contact';
1615 $defaulttopic =
'Information';
1616 $diroutput = $conf->societe->dir_output.
'/contact/';
1617 $trackid =
'ctc'.$object->id;
1619 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif($action=='specimen') elseif($action=='setmodel') elseif($action=='del') elseif($action=='setdoc') $formactions
View.
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage categories.
Class to manage a WYSIWYG editor.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
getCountry($searchkey, $withcode='', $dbtouse=0, $outputlangs='', $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
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.
dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disablevirusscan=0, $uploaderrorcode=0, $nohook=0, $varfiles='addedfile', $upload_dir='')
Make control on an uploaded file from an GUI page and move it to final destination.
dol_buildlogin($lastname, $firstname)
Build a login from lastname, firstname.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
picto_from_langcode($codelang, $moreatt='', $notitlealt=0)
Return img flag of country for a language code or country code.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='')
Show tabs of a record.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_escape_js($stringtoescape, $mode=0, $noescapebackslashn=0)
Returns text escaped for inclusion into javascript code.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
img_action($titlealt, $numaction, $picto='')
Show logo action.
getArrayOfSocialNetworks()
Get array of social network dictionary.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
dol_htmloutput_errors($mesgstring='', $mesgarray=array(), $keepembedded=0)
Print formated error messages to output (Used to show messages on html output).
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
image_format_supported($file, $acceptsvg=0)
Return if a filename is file name of a supported image format.
getRandomPassword($generic=false, $replaceambiguouschars=null, $length=32)
Return a generated password using default module.
getMaxFileSizeArray()
Return the max allowed for file upload.
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.