33require
'../main.inc.php';
34require_once DOL_DOCUMENT_ROOT.
'/ticket/class/actions_ticket.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formticket.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/lib/ticket.lib.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
41require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
44if (isModEnabled(
'project')) {
45 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
46 include_once DOL_DOCUMENT_ROOT.
'/core/lib/project.lib.php';
47 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
49if (isModEnabled(
'contract')) {
50 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcontract.class.php';
51 include_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
52 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
64$langs->loadLangs(array(
"companies",
"other",
"ticket"));
69$track_id =
GETPOST(
'track_id',
'alpha', 3);
73$notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
75$action =
GETPOST(
'action',
'aZ09');
76$cancel =
GETPOST(
'cancel',
'alpha');
77$backtopage =
GETPOST(
'backtopage',
'alpha');
78$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
80$sortfield =
GETPOST(
'sortfield',
'aZ09comma') ?
GETPOST(
'sortfield',
'aZ09comma') :
"a.datep";
81$sortorder =
GETPOST(
'sortorder',
'aZ09comma') ?
GETPOST(
'sortorder',
'aZ09comma') :
"desc";
82$search_rowid =
GETPOST(
'search_rowid');
83$search_agenda_label =
GETPOST(
'search_agenda_label');
85if (
GETPOST(
'actioncode',
'array')) {
86 $actioncode =
GETPOST(
'actioncode',
'array', 3);
87 if (!count($actioncode)) {
96$hookmanager->initHooks(array(
'ticketcard',
'globalcard'));
102$extrafields->fetch_name_optionals_label(
$object->table_element);
104$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
107$search_all =
GETPOST(
"search_all",
'alpha');
109foreach (
$object->fields as $key => $val) {
110 if (
GETPOST(
'search_'.$key,
'alpha')) {
111 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
115if (empty($action) && empty($id) && empty($ref)) {
120if (
GETPOST(
'modelselected',
'alpha')) {
126if ($id || $track_id || $ref) {
127 $res =
$object->fetch($id, $ref, $track_id);
139$url_page_current = DOL_URL_ROOT.
'/ticket/card.php';
142if ($user->socid > 0) {
143 $socid = $user->socid;
147$triggermodname =
'TICKET_MODIFY';
150$permissiontoread = $user->hasRight(
'ticket',
'read');
151$permissiontoadd = $user->hasRight(
'ticket',
'write');
152$permissiontodelete = $user->hasRight(
'ticket',
'delete');
154$upload_dir =
$conf->ticket->dir_output;
162$parameters = array();
163$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
169if (empty($reshook)) {
171 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
173 $search_agenda_label =
'';
176 $backurlforlist = DOL_URL_ROOT .
'/ticket/list.php';
178 if (empty($backtopage) || ($cancel && empty($id))) {
179 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
180 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
181 $backtopage = $backurlforlist;
183 $backtopage = DOL_URL_ROOT .
'/ticket/card.php?id=' . ((!empty($id) &&
$id > 0) ? $id :
'__ID__');
189 if (!empty($backtopageforcancel)) {
190 header(
"Location: " . $backtopageforcancel);
192 } elseif (!empty($backtopage)) {
193 header(
"Location: " . $backtopage);
199 if (($action ==
'add' || ($action ==
'update' &&
$object->status < Ticket::STATUS_CLOSED)) && $permissiontoadd) {
200 $ifErrorAction = ($action ==
'add' ?
'create' :
'edit');
201 if ($action ==
'add') {
207 'ref' => [
'check' =>
'alpha',
'langs' =>
'Ref'],
208 'type_code' => [
'check' =>
'alpha',
'langs' =>
'TicketTypeRequest'],
209 'category_code' => [
'check' =>
'alpha',
'langs' =>
'TicketCategory'],
210 'severity_code' => [
'check' =>
'alpha',
'langs' =>
'TicketSeverity'],
211 'subject' => [
'check' =>
'alphanohtml',
'langs' =>
'Subject'],
212 'message' => [
'check' =>
'restricthtml',
'langs' =>
'Message']
217 if (!empty($error)) {
218 $action = $ifErrorAction;
221 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
225 $getRef =
GETPOST(
'ref',
'alpha');
227 if (!empty($getRef)) {
228 $isExistingRef =
$object->checkExistingRef($action, $getRef);
230 $isExistingRef =
true;
235 if ($isExistingRef) {
236 if ($action ==
'update') {
240 } elseif ($action ==
'add') {
245 if (!empty($getRef)) {
258 $fk_user_assign =
GETPOSTINT(
'fk_user_assign');
262 if ($fk_user_assign > 0) {
263 $object->fk_user_assign = $fk_user_assign;
264 $object->status = $object::STATUS_ASSIGNED;
267 if ($action ==
'add') {
269 $object->type_label = $langs->trans($langs->getLabelFromKey($db,
$object->type_code,
'c_ticket_type',
'code',
'label'));
270 $object->category_label = $langs->trans($langs->getLabelFromKey($db,
$object->category_code,
'c_ticket_category',
'code',
'label'));
271 $object->severity_label = $langs->trans($langs->getLabelFromKey($db,
$object->severity_code,
'c_ticket_severity',
'code',
'label'));
272 $object->fk_user_create = $user->id;
273 $object->email_from = $user->email;
275 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
276 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
286 $action = $ifErrorAction;
291 $categories =
GETPOST(
'categories',
'array');
292 $object->setCategories($categories);
295 if ($action ==
'add') {
299 $type_contact =
GETPOST(
"type",
'alpha');
301 if ($contactid > 0 && $type_contact) {
303 $result =
$object->add_contact($contactid, $typeid,
'external');
307 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
313 if ($projectid > 0) {
314 $object->setProject($projectid);
318 if (
getDolGlobalString(
'TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND') && $user->hasRight(
'ticket',
'write')) {
319 if (!
$object->markAsRead($user) > 0) {
325 if ((empty($fk_user_assign) &&
getDolGlobalInt(
'TICKET_AUTO_ASSIGN_USER_CREATE') == 1) || (
getDolGlobalInt(
'TICKET_AUTO_ASSIGN_USER_CREATE') == 2)) {
326 $result =
$object->assignUser($user, $user->id, 1);
327 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
333 $object->copyFilesForTicket(
'');
339 if (!empty($backtopage)) {
343 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
346 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
349 header(
"Location: " . $url);
356 $action = $ifErrorAction;
361 if ($action ==
"set_read" && $permissiontoadd) {
364 if (
$object->markAsRead($user) > 0) {
367 header(
"Location: card.php?track_id=" .
$object->track_id);
376 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $permissiontoadd) {
378 $useroriginassign =
$object->fk_user_assign;
388 $ret =
$object->assignUser($user, $usertoassign);
396 if ($useroriginassign > 0) {
397 $internal_contacts =
$object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
398 foreach ($internal_contacts as $key => $contact) {
399 if ($contact[
'id'] !== $usertoassign) {
400 $result =
$object->delete_contact($contact[
'rowid']);
409 if ($usertoassign > 0 && $usertoassign !== $useroriginassign) {
410 $result =
$object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
420 $object->fetch_user($usertoassign);
423 header(
"Location: card.php?track_id=" .
$object->track_id);
433 if ($action ==
'add_message' && GETPOSTISSET(
'btn_add_message') && $permissiontoread) {
434 $ret =
$object->newMessage($user, $action, (
GETPOST(
'private_message',
'alpha') ==
"on" ? 1 : 0), 0);
437 if (!empty($backtopage)) {
440 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
443 header(
"Location: " . $url);
451 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
454 if (
$object->close($user, ($action ==
"confirm_abandon" ? 1 : 0))) {
457 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
458 header(
"Location: " . $url);
466 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
468 if ($_SESSION[
'email_customer'] ==
$object->origin_email || $_SESSION[
'email_customer'] ==
$object->thirdparty->email) {
473 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketMarkedAsClosed') .
'</div>',
null,
'mesgs');
475 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
476 header(
"Location: " . $url);
484 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
486 if (
$object->delete($user) > 0) {
487 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketDeletedSuccess') .
'</div>',
null,
'mesgs');
488 header(
"Location: " . DOL_URL_ROOT .
"/ticket/list.php");
491 $langs->load(
"errors");
492 $mesg =
'<div class="error">' . $langs->trans(
$object->error) .
'</div>';
499 if ($action ==
'set_thirdparty' && $user->hasRight(
'ticket',
'write')) {
502 $url = $_SERVER[
"PHP_SELF"] .
'?track_id=' .
GETPOST(
'track_id',
'alpha');
503 header(
"Location: " . $url);
509 if ($action ==
'set_progression' && $user->hasRight(
'ticket',
'write')) {
513 $url =
'card.php?track_id=' .
$object->track_id;
514 header(
"Location: " . $url);
520 if ($action ==
'set_categories' && $user->hasRight(
'ticket',
'write')) {
524 $url =
'card.php?track_id=' .
$object->track_id;
525 header(
"Location: " . $url);
531 if ($action ==
'setsubject' && $user->hasRight(
'ticket',
'write')) {
533 if ($action ==
'setsubject') {
537 if ($action ==
'setsubject' && empty(
$object->subject)) {
539 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
543 if (!
$object->update($user) >= 0) {
549 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?track_id=" .
$object->track_id);
554 if ($action ==
'confirm_reopen' && $user->hasRight(
'ticket',
'manage') && !
GETPOST(
'cancel')) {
557 if (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED) {
558 if (
$object->fk_user_assign !=
null) {
559 $res =
$object->setStatut(Ticket::STATUS_ASSIGNED,
null,
'',
'TICKET_MODIFY');
561 $res =
$object->setStatut(Ticket::STATUS_NOT_READ,
null,
'',
'TICKET_MODIFY');
564 $url =
'card.php?track_id=' .
$object->track_id;
565 header(
"Location: " . $url);
573 } elseif ($action ==
'classin' && $permissiontoadd) {
576 $object->setProject($projectid);
577 $url =
'card.php?track_id=' .
$object->track_id;
578 header(
"Location: " . $url);
581 } elseif ($action ==
'setcontract' && $permissiontoadd) {
585 $url =
'card.php?track_id=' .
$object->track_id;
586 header(
"Location: " . $url);
589 } elseif ($action ==
"set_message" && $user->hasRight(
'ticket',
'manage')) {
593 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
595 $object->message = $fieldtomodify;
602 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
610 } elseif ($action ==
'confirm_set_status' && $permissiontoadd && !
GETPOST(
'cancel')) {
615 $res =
$object->setStatut($new_status);
617 $url =
'card.php?track_id=' .
$object->track_id;
618 header(
"Location: " . $url);
628 if ($action ==
"update_extras" && $permissiontoadd) {
631 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
637 $result =
$object->insertExtraFields(empty($triggermodname) ?
'' : $triggermodname, $user);
645 $action =
'edit_extras';
652 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
656 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
657 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
670 $permissiondellink = $user->hasRight(
'ticket',
'write');
671 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
674 include DOL_DOCUMENT_ROOT .
'/core/actions_builddoc.inc.php';
677 $triggersendname =
'TICKET_SENTBYMAIL';
679 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
680 $trackid =
'tic' .
$object->id;
681 include DOL_DOCUMENT_ROOT .
'/core/actions_sendmails.inc.php';
684 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
685 $action =
'presend_addmessage';
694$userstat =
new User($db);
695$form =
new Form($db);
698if (isModEnabled(
'project')) {
702$help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
704$title = $actionobject->getTitle($action);
706llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-ticket page-card');
708if ($action ==
'create' || $action ==
'presend') {
709 if (empty($permissiontoadd)) {
717 $formticket->trackid =
'';
718 $formticket->withfromsocid = $socid ? $socid : $user->socid;
719 $formticket->withfromcontactid = $contactid ? $contactid :
'';
720 $formticket->withtitletopic = 1;
721 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (
getDolGlobalString(
'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION') ? 1 : 0));
722 $formticket->withusercreate = 0;
723 $formticket->withref = 1;
724 $formticket->fk_user_create = $user->id;
725 $formticket->withfile = 2;
726 $formticket->withextrafields = 1;
727 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
729 $formticket->withcancel = 1;
732 if (
GETPOST(
"mode",
"aZ09") ==
'init') {
733 $formticket->clear_attached_files();
736 $formticket->showForm(1,
'create', 0,
null, $action,
$object);
739} elseif ($action ==
'edit' && $user->rights->ticket->write &&
$object->status < Ticket::STATUS_CLOSED) {
740 if (empty($permissiontoadd)) {
750 $formticket->trackid =
$object->track_id;
751 $formticket->withfromsocid =
$object->socid;
752 $formticket->withtitletopic = 1;
754 $formticket->withnotifytiersatcreate = 0;
755 $formticket->withusercreate = 0;
756 $formticket->withref = 1;
757 $formticket->fk_user_create = $user->id;
758 $formticket->withfile = 0;
759 $formticket->action =
'update';
760 $formticket->withextrafields = 1;
761 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
763 $formticket->withcancel = 1;
765 $formticket->showForm(0,
'edit', 0,
null, $action,
$object);
768} elseif (empty($action) || in_array($action, [
'builddoc',
'view',
'addlink',
'dellink',
'presend',
'presend_addmessage',
'close',
'abandon',
'delete',
'editcustomer',
'progression',
'categories',
'reopen',
'edit_contrat',
'editsubject',
'edit_extras',
'update_extras',
'edit_extrafields',
'set_extrafields',
'classify',
'sel_contract',
'edit_message_init',
'set_status',
'dellink'])) {
769 if (!empty($res) && $res > 0) {
771 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') &&
$object->fk_user_assign != $user->id) && !$user->hasRight(
'ticket',
'manage')) {
778 if ($action ==
'close') {
779 $thirdparty_contacts =
$object->getInfosTicketExternalContact(1);
780 $contacts_select = array(
781 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
782 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
784 foreach ($thirdparty_contacts as $thirdparty_contact) {
785 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
790 $formquestion = array(
792 'name' =>
'contactid',
794 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
795 'values' => $contacts_select,
796 'default' => $default
800 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
803 if ($action ==
'abandon') {
804 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
807 if ($action ==
'delete') {
808 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
811 if ($action ==
'reopen') {
812 $formconfirm = $form->formconfirm($url_page_current.
'?track_id='.
$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
815 if ($action ==
'set_status') {
818 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id.
"&new_status=".$new_status, $langs->trans(
"TicketChangeStatus"), $langs->trans(
"TicketConfirmChangeStatus", $langs->transnoentities(
$object->labelStatusShort[$new_status])),
"confirm_set_status",
'',
'', 1);
822 $parameters = array(
'formConfirm' => $formconfirm);
823 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
824 if (empty($reshook)) {
825 $formconfirm .= $hookmanager->resPrint;
826 } elseif ($reshook > 0) {
827 $formconfirm = $hookmanager->resPrint;
834 if ($projectid > 0) {
835 $projectstat =
new Project($db);
836 if ($projectstat->fetch($projectid) > 0) {
837 $projectstat->fetch_thirdparty();
841 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
847 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
849 print
'<table class="border centpercent">';
851 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
854 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
856 if (!$user->hasRight(
'projet',
'all',
'lire')) {
857 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
858 $projectstat->next_prev_filter =
"rowid:IN:(".$db->sanitize(count($objectsListId) ? implode(
',', array_keys($objectsListId)) :
'0').
")";
860 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
864 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
867 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
868 print
'<td colspan="3">';
869 if ($projectstat->thirdparty->id > 0) {
870 print $projectstat->thirdparty->getNomUrl(1);
878 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
879 if ($projectstat->public) {
880 print $langs->trans(
'SharedProject');
882 print $langs->trans(
'PrivateProject');
888 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
894 print
"ErrorRecordNotFound";
896 } elseif ($socid > 0) {
902 dol_banner_tab(
$object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
908 $object->next_prev_filter =
"te.fk_user_assign:=:".((int) $user->id);
909 } elseif ($user->socid > 0) {
910 $object->next_prev_filter =
"te.fk_soc:=:".((int) $user->socid);
917 $morehtmlref =
'<div class="refidno">';
919 if ($user->hasRight(
'ticket',
'write') && !$user->socid) {
920 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editsubject&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetTitle'), 0).
'</a> ';
922 if ($action !=
'editsubject') {
925 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'">';
926 $morehtmlref .=
'<input type="hidden" name="action" value="setsubject">';
927 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
928 $morehtmlref .=
'<input type="hidden" name="id" value="20">';
929 $morehtmlref .=
'<input type="text" class="minwidth300" id="subject" name="subject" value="'.$object->subject.
'" autofocus="">';
930 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button valignmiddle" name="modify" value="'.$langs->trans(
"Modify").
'">';
931 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button button-cancel vlignmiddle" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
932 $morehtmlref .=
'</form>';
937 if (
$object->fk_user_create > 0) {
938 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
940 $fuser =
new User($db);
941 $fuser->fetch(
$object->fk_user_create);
942 $morehtmlref .= $fuser->getNomUrl(-1);
946 $createdfrompublicticket = 0;
947 $createdfromemailcollector = 0;
948 if (!empty(
$object->origin_email) && (empty(
$object->email_msgid) || preg_match(
'/dolibarr\-tic\d+/',
$object->email_msgid))) {
950 $createdfrompublicticket = 1;
951 } elseif (!empty(
$object->email_msgid)) {
953 $createdfromemailcollector = 1;
957 if ($createdfrompublicticket) {
958 $htmltooptip = $langs->trans(
"OriginEmail").
': '.
$object->origin_email;
959 $htmltooptip .=
'<br>'.$langs->trans(
"IP").
': '.
$object->ip;
960 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
961 $morehtmlref .= ($createdbyshown ?
'' : $langs->trans(
"CreatedBy").
' : ');
962 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
963 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
964 } elseif ($createdfromemailcollector) {
965 $langs->load(
"mails");
966 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.
$object->email_msgid;
967 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date(
$object->email_date,
'dayhour');
968 $htmltooltip .=
'<br>'.$langs->trans(
"MailFrom").
': '.
$object->origin_email;
969 $htmltooltip .=
'<br>'.$langs->trans(
"MailReply").
': '.
$object->origin_replyto;
970 $htmltooltip .=
'<br>'.$langs->trans(
"MailReferences").
': '.
$object->origin_references;
971 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
972 $morehtmlref .= ($createdbyshown ?
'' : $langs->trans(
"CreatedBy").
' : ');
973 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
974 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
977 $permissiontoedit =
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write');
981 if (isModEnabled(
"societe")) {
982 $morehtmlref .=
'<br>';
983 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
984 if ($action !=
'editcustomer' && $permissiontoedit) {
985 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
987 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.
$object->track_id,
$object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
989 $morehtmlref .=
' - <a href="'.DOL_URL_ROOT.
'/ticket/list.php?socid='.
$object->socid.
'&sortfield=t.datec&sortorder=desc'.(
getDolGlobalBool(
'TICKET_CLIENT_OTHER_TICKET_ONLY_OPEN')?
'&search_fk_statut[]=openall':
'').
'">'.
img_picto($langs->trans(
"Tickets"),
'ticket',
'class="pictofixedwidth"').
' '.$langs->trans(
"TicketHistory").
'</a>';
994 if (isModEnabled(
'project')) {
995 $langs->load(
"projects");
996 $morehtmlref .=
'<br>';
997 if ($permissiontoedit) {
999 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object(
$object->project) &&
$object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
1000 if ($action !=
'classify') {
1001 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1003 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1005 if (!empty(
$object->fk_project)) {
1007 $morehtmlref .=
$object->project->getNomUrl(1);
1008 if (
$object->project->title) {
1009 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag(
$object->project->title).
'</span>';
1018 if (isModEnabled(
'contract')) {
1019 $langs->load(
'contracts');
1020 $morehtmlref .=
'<br>';
1021 if ($permissiontoedit) {
1022 $morehtmlref .=
img_picto($langs->trans(
"Contract"),
'contract',
'class="pictofixedwidth"');
1023 if ($action ==
'edit_contrat') {
1025 $morehtmlref .= $formcontract->formSelectContract($_SERVER[
"PHP_SELF"].
'?id='.
$object->id,
$object->socid,
$object->fk_contract,
'contratid', 0, 1, 1, 1);
1027 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edit_contrat&token='.
newToken().
'&id='.
$object->id.
'">';
1028 $morehtmlref .=
img_edit($langs->trans(
'SetContract'));
1029 $morehtmlref .=
'</a>';
1032 if (!empty(
$object->fk_contract)) {
1033 $contratstatic =
new Contrat($db);
1034 $contratstatic->fetch(
$object->fk_contract);
1036 $morehtmlref .= $contratstatic->getNomUrl(0, 0, 1);
1042 $morehtmlref .=
'</div>';
1044 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1046 dol_banner_tab(
$object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1048 print
'<div class="fichecenter">';
1049 print
'<div class="fichehalfleft">';
1050 print
'<div class="underbanner clearboth"></div>';
1052 print
'<table class="border tableforfield centpercent">';
1055 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1056 if (!empty(
$object->track_id)) {
1059 print $form->showrefnav(
$object,
'id', $linkback, 1,
'rowid',
'track_id');
1064 print $langs->trans(
'None');
1078 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1101 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1102 if (!empty(
$object->date_read)) {
1110 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1111 if (!empty(
$object->date_close)) {
1118 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1119 print $langs->trans(
"AssignedTo");
1120 if (isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->hasRight(
'ticket',
'manage')) {
1121 print
'</td><td class="right"><a class="editfielda" href="'.$url_page_current.
'?track_id='.urlencode(
$object->track_id).
'&set=assign_ticket">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1123 print
'</td></tr></table>';
1125 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" &&
$object->fk_user_assign > 0) {
1126 $userstat->fetch(
$object->fk_user_assign);
1127 print $userstat->getNomUrl(-1);
1131 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" &&
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write')) {
1132 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1133 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1134 print
'<input type="hidden" name="action" value="assign_user">';
1135 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1137 print $form->select_dolusers(empty(
$object->fk_user_assign) ? $user->id :
$object->fk_user_assign,
'fk_user_assign', 1);
1138 print
' <input type="submit" class="button smallpaddingimp" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1145 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1146 print $langs->trans(
'Progression').
'</td><td class="left">';
1148 if ($action !=
'progression' && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED && !$user->socid) {
1149 print
'<td class="right"><a class="editfielda" href="'.$url_page_current.
'?action=progression&token='.
newToken().
'&track_id='.urlencode(
$object->track_id).
'">'.
img_edit($langs->trans(
'Modify')).
'</a></td>';
1151 print
'</tr></table>';
1153 if ($user->hasRight(
'ticket',
'write') && $action ==
'progression') {
1154 print
'<form action="'.$url_page_current.
'" method="post">';
1155 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1156 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1157 print
'<input type="hidden" name="action" value="set_progression">';
1158 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1159 print
' <input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Modify').
'">';
1168 if (isModEnabled(
'intervention')) {
1170 $num = count(
$object->linkedObjects);
1174 foreach (
$object->linkedObjects as $objecttype => $objects) {
1175 if ($objecttype ==
"fichinter") {
1176 '@phan-var-force Fichinter[] $objects';
1177 foreach ($objects as $fichinter) {
1180 $timing += $fichinter->duration;
1186 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1193 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1199 print
'</div><div class="fichehalfright">';
1202 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1203 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1204 print
'<input type="hidden" name="action" value="change_property">';
1205 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1206 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1209 print
'<div class="div-table-responsive-no-min">';
1210 print
'<table class="border tableforfield centpercent margintable bordertopimp">';
1211 print
'<tr class="liste_titre">';
1213 print $langs->trans(
'TicketProperties');
1216 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1217 print
'<input type="submit" class="button smallpaddingimp" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1220 if (isset(
$object->status) && (
$object->status < $object::STATUS_NEED_MORE_INFO || !
getDolGlobalInt(
'TICKET_DISALLOW_CLASSIFICATION_MODIFICATION_EVEN_IF_CLOSED')) && $user->hasRight(
'ticket',
'write')) {
1221 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1227 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1230 print
'<td class="titlefield">';
1231 print $langs->trans(
'Type');
1233 $formticket->selectTypesTickets(
$object->type_code,
'update_value_type',
'', 2);
1239 print $langs->trans(
'TicketCategory');
1241 $formticket->selectGroupTickets(
$object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1247 print $langs->trans(
'TicketSeverity');
1249 $formticket->selectSeveritiesTickets(
$object->severity_code,
'update_value_severity',
'', 2);
1254 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1255 if (!empty(
$object->type_code)) {
1256 print $langs->getLabelFromKey($db,
'TicketTypeShort'.
$object->type_code,
'c_ticket_type',
'code',
'label',
$object->type_code);
1261 if (!empty(
$object->category_code)) {
1262 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.
$object->category_code,
'c_ticket_category',
'code',
'label',
$object->category_code);
1264 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1268 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1269 if (!empty(
$object->severity_code)) {
1270 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.
$object->severity_code,
'c_ticket_severity',
'code',
'label',
$object->severity_code);
1280 if (isModEnabled(
'category')) {
1281 print
'<table class="border centpercent tableforfield">';
1283 print
'<td class="valignmiddle titlefield">';
1284 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1285 print $langs->trans(
"Categories");
1286 if ($action !=
'categories' && !$user->socid) {
1287 print
'<td class="right"><a class="editfielda" href="'.$url_page_current.
'?action=categories&track_id='.
$object->track_id.
'">'.
img_edit($langs->trans(
'Modify')).
'</a></td>';
1292 if ($user->hasRight(
'ticket',
'write') && $action ==
'categories') {
1293 $cate_arbo = $form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 3);
1294 if (is_array($cate_arbo)) {
1296 print
'<td colspan="3">';
1297 print
'<form action="'.$url_page_current.
'" method="POST">';
1298 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1299 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1300 print
'<input type="hidden" name="action" value="set_categories">';
1303 $cats = $category->containing(
$object->id,
'ticket');
1304 $arrayselected = array();
1305 foreach ($cats as $cat) {
1306 $arrayselected[] = $cat->id;
1309 print
img_picto(
'',
'category',
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected, 0, 0,
'maxwidth500 widthcentpercentminusx', 0, 0);
1310 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Save').
'">';
1315 print
'<td colspan="3">';
1316 print $form->showCategories(
$object->id, Categorie::TYPE_TICKET, 1);
1324 $actionobject->viewTicketOriginalMessage($user, $action,
$object);
1328 print
'<!-- navbar with status -->';
1329 if (!$user->socid && $user->hasRight(
'ticket',
'write') && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED) {
1330 $actionobject->viewStatusActions(
$object);
1335 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1337 print
'<div class="div-table-responsive-no-min">';
1338 print
'<div class="tagtable centpercent noborder allwidth">';
1340 print
'<div class="tagtr liste_titre">';
1341 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1342 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1343 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1344 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1345 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1346 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1347 print
'</div><!-- tagtr -->';
1350 $companystatic =
new Societe($db);
1351 $contactstatic =
new Contact($db);
1352 $userstatic =
new User($db);
1354 foreach (array(
'internal',
'external') as $source) {
1356 $tab = $tmpobject->listeContact(-1, $source);
1357 '@phan-var-force array<array{source:string,id:int,rowid:int,email:string,civility:string,firstname:string,lastname:string,labeltype:string,libelle:string,socid:int,code:string,status:int,statuscontact:string,fk_c_typecontact:string,phone:string,phone_mobile:string,phone_perso?:string,nom:string}> $tab';
1358 $num = is_array($tab) ? 0 : count($tab);
1360 foreach (array_keys($tab) as $i) {
1362 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1364 print
'<div class="tagtd left">';
1365 if ($tab[$i][
'source'] ==
'internal') {
1366 echo $langs->trans(
"User");
1369 if ($tab[$i][
'source'] ==
'external') {
1370 echo $langs->trans(
"ThirdPartyContact");
1374 print
'<div class="tagtd left">';
1376 if ($tab[$i][
'socid'] > 0) {
1377 $companystatic->fetch($tab[$i][
'socid']);
1378 echo $companystatic->getNomUrl(-1);
1380 if ($tab[$i][
'socid'] < 0) {
1383 if (!$tab[$i][
'socid']) {
1388 print
'<div class="tagtd">';
1389 if ($tab[$i][
'source'] ==
'internal') {
1390 if ($userstatic->fetch($tab[$i][
'id'])) {
1391 print $userstatic->getNomUrl(-1);
1394 if ($tab[$i][
'source'] ==
'external') {
1395 if ($contactstatic->fetch($tab[$i][
'id'])) {
1396 print $contactstatic->getNomUrl(-1);
1400 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1402 print
'<div class="tagtd">';
1406 if (!empty($tab[$i][
'phone_perso'])) {
1408 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'', 0, 0,
'AC_TEL').
'<br>';
1410 if (!empty($tab[$i][
'phone_mobile'])) {
1412 print
dol_print_phone($tab[$i][
'phone_mobile'],
'', 0, 0,
'AC_TEL').
'<br>';
1416 print
'<div class="tagtd center">';
1418 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1421 if ($tab[$i][
'source'] ==
'internal') {
1422 $userstatic->id = $tab[$i][
'id'];
1423 $userstatic->lastname = $tab[$i][
'lastname'];
1424 $userstatic->firstname = $tab[$i][
'firstname'];
1425 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1427 if ($tab[$i][
'source'] ==
'external') {
1428 $contactstatic->id = $tab[$i][
'id'];
1429 $contactstatic->lastname = $tab[$i][
'lastname'];
1430 $contactstatic->firstname = $tab[$i][
'firstname'];
1431 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1439 print
'</div><!-- tagtr -->';
1445 print
'</div><!-- contact list -->';
1449 print
'</div></div>';
1450 print
'<div class="clearboth"></div>';
1456 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1457 print
'<div class="tabsAction">'.
"\n";
1458 $parameters = array();
1459 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
1464 if (empty($reshook)) {
1466 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1467 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&send_email=1&private_message=0&mode=init&token='.
newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1471 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1472 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1478 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1480 if (
$object->fk_soc > 0 && isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1481 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddIntervention'),
'default', DOL_URL_ROOT.
'/fichinter/card.php?action=create&token='.
newToken().
'&socid='.
$object->fk_soc.
'&origin=ticket_ticket&originid='.
$object->id,
'');
1485 if (isset(
$object->status) &&
$object->status >= 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1486 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1490 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1491 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1495 if (!$user->socid && (isset(
$object->status) && (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1500 if ($permissiontoedit) {
1501 print
dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.
newToken(),
'', $permissiontoedit);
1505 if ($user->hasRight(
'ticket',
'delete') && !$user->socid) {
1509 print
'</div>'.
"\n";
1513 if (
GETPOST(
'modelselected')) {
1514 $action =
'presend';
1517 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1518 $action =
'presend_addmessage';
1522 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1527 $outputlangs = $langs;
1530 $newlang =
GETPOST(
'lang_id',
'aZ09');
1532 $newlang =
$object->thirdparty->default_lang;
1534 if (!empty($newlang)) {
1536 $outputlangs->setDefaultLang($newlang);
1539 $arrayoffamiliestoexclude = array(
'objectamount');
1541 $action =
'add_message';
1542 $modelmail =
'ticket_send';
1545 $morehtmlright =
'';
1549 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1553 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1555 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1561 $formticket->action = $action;
1562 $formticket->track_id =
$object->track_id;
1563 $formticket->ref =
$object->ref;
1564 $formticket->id =
$object->id;
1565 $formticket->trackid =
'tic'.$object->id;
1567 $formticket->withfile = 2;
1568 $formticket->withcancel = 1;
1569 $formticket->param = array(
'fk_user_create' => $user->id);
1570 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1573 $formticket->param[
'models'] = $modelmail;
1574 $formticket->param[
'models_id'] =
GETPOSTINT(
'modelmailselected');
1576 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.
$object->track_id;
1578 $formticket->withsubstit = 1;
1579 $formticket->substit = $substitutionarray;
1580 $formticket->backtopage = $backtopage;
1582 $formticket->showMessageForm(
'100%');
1588 $param =
'&id='.$object->id;
1589 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1590 $param .=
'&contextpage='.$contextpage;
1592 if ($limit > 0 && $limit !=
$conf->liste_limit) {
1593 $param .=
'&limit='.$limit;
1596 $param .=
'&actioncode='.urlencode($actioncode);
1598 if ($search_agenda_label) {
1599 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1602 $morehtmlright =
'';
1604 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.
$object->track_id;
1605 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1608 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1609 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1610 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', (
int) $btnstatus);
1613 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1614 $url =
dol_buildpath(
'/comm/action/card.php', 1).
'?action=create&datep='.date(
'YmdHi').
'&origin=ticket&originid='.
$object->id.
'&projectid='.
$object->fk_project.
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?track_id='.
$object->track_id);
1615 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', (
int) $btnstatus);
1617 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1621 $filters[
'search_agenda_label'] = $search_agenda_label;
1622 $filters[
'search_rowid'] = $search_rowid;
1624 show_actions_messaging(
$conf, $langs, $db,
$object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1627 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1628 print
'<div class="fichecenter"><div class="fichehalfleft">';
1629 print
'<a name="builddoc"></a>';
1635 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
1636 $genallowed = $permissiontoadd;
1637 $delallowed = $permissiontodelete;
1641 $codelang =
$object->thirdparty->default_lang;
1644 print $formfile->showdocuments(
'ticket', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'', 0,
'', $codelang);
1647 $tmparray = $form->showLinkToObjectBlock(
$object, array(), array(
'ticket'), 1);
1648 $linktoelem = $tmparray[
'linktoelem'];
1649 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
1650 print $htmltoenteralink;
1652 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
1655 print
'<br><!-- Link to public interface -->'.
"\n";
1660 print
'<div class="fichehalfright">';
1664 $morehtmlcenter =
'<div class="nowraponall">';
1665 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.
$object->id);
1666 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.
$object->id);
1667 $morehtmlcenter .=
'</div>';
1670 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1672 $somethingshown = $formactions->showactions(
$object,
'ticket', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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 Actions of the module ticket.
Class to manage categories.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
societe_prepare_head(Societe $object)
Return array of tabs to used on pages for third parties cards.
convertSecondToTime($iSecond, $format='all', $lengthOfDay=86400, $lengthOfWeek=7)
Return, in clear text, value of a number of seconds in days, hours and minutes.
show_actions_messaging($conf, $langs, $db, $filterobj, $objcon=null, $noprint=0, $actioncode='', $donetodo='done', $filters=array(), $sortfield='a.datep, a.id', $sortorder='DESC')
Show html area with actions in messaging format.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_print_phone($phone, $countrycode='', $cid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0, $morecss='paddingright')
Format phone numbers according to country.
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.
roundUpToNextMultiple($n, $x=5)
Round to next multiple.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
getDolGlobalBool($key, $default=false)
Return a Dolibarr global constant boolean value.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dolPrintLabel($s)
Return a string label (so on 1 line only and that should not contains any HTML) ready to be output on...
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Class to generate the form for creating a new ticket.
project_prepare_head(Project $project, $moreparam='')
Prepare array with list of tabs.
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.
showDirectPublicLink($object)
Return string with full Url.
ticket_prepare_head($object)
Build tabs for a Ticket object.