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';
56$langs->loadLangs(array(
"companies",
"other",
"ticket"));
61$track_id =
GETPOST(
'track_id',
'alpha', 3);
65$notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
67$action =
GETPOST(
'action',
'aZ09');
68$cancel =
GETPOST(
'cancel',
'alpha');
69$backtopage =
GETPOST(
'backtopage',
'alpha');
70$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
72$sortfield =
GETPOST(
'sortfield',
'aZ09comma') ?
GETPOST(
'sortfield',
'aZ09comma') :
"a.datep";
73$sortorder =
GETPOST(
'sortorder',
'aZ09comma') ?
GETPOST(
'sortorder',
'aZ09comma') :
"desc";
74$search_rowid =
GETPOST(
'search_rowid');
75$search_agenda_label =
GETPOST(
'search_agenda_label');
77if (
GETPOST(
'actioncode',
'array')) {
78 $actioncode =
GETPOST(
'actioncode',
'array', 3);
79 if (!count($actioncode)) {
88$hookmanager->initHooks(array(
'ticketcard',
'globalcard'));
94$extrafields->fetch_name_optionals_label(
$object->table_element);
96$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
99$search_all =
GETPOST(
"search_all",
'alpha');
101foreach (
$object->fields as $key => $val) {
102 if (
GETPOST(
'search_'.$key,
'alpha')) {
103 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
107if (empty($action) && empty($id) && empty($ref)) {
112if (
GETPOST(
'modelselected',
'alpha')) {
118if ($id || $track_id || $ref) {
119 $res =
$object->fetch($id, $ref, $track_id);
131$url_page_current = DOL_URL_ROOT.
'/ticket/card.php';
134if ($user->socid > 0) {
135 $socid = $user->socid;
139$triggermodname =
'TICKET_MODIFY';
142$permissiontoread = $user->hasRight(
'ticket',
'read');
143$permissiontoadd = $user->hasRight(
'ticket',
'write');
144$permissiontodelete = $user->hasRight(
'ticket',
'delete');
146$upload_dir = $conf->ticket->dir_output;
154$parameters = array();
155$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
161if (empty($reshook)) {
163 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
165 $search_agenda_label =
'';
168 $backurlforlist = DOL_URL_ROOT .
'/ticket/list.php';
170 if (empty($backtopage) || ($cancel && empty($id))) {
171 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
172 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
173 $backtopage = $backurlforlist;
175 $backtopage = DOL_URL_ROOT .
'/ticket/card.php?id=' . ((!empty($id) && $id > 0) ? $id :
'__ID__');
181 if (!empty($backtopageforcancel)) {
182 header(
"Location: " . $backtopageforcancel);
184 } elseif (!empty($backtopage)) {
185 header(
"Location: " . $backtopage);
191 if (($action ==
'add' || ($action ==
'update' &&
$object->status < Ticket::STATUS_CLOSED)) && $permissiontoadd) {
192 $ifErrorAction = $action ==
'add' ?
'create' :
'edit';
193 if ($action ==
'add')
$object->track_id =
null;
197 'ref' => [
'check' =>
'alpha',
'langs' =>
'Ref'],
198 'type_code' => [
'check' =>
'alpha',
'langs' =>
'TicketTypeRequest'],
199 'category_code' => [
'check' =>
'alpha',
'langs' =>
'TicketCategory'],
200 'severity_code' => [
'check' =>
'alpha',
'langs' =>
'TicketSeverity'],
201 'subject' => [
'check' =>
'alphanohtml',
'langs' =>
'Subject'],
202 'message' => [
'check' =>
'restricthtml',
'langs' =>
'Message']
207 if (!empty($error)) {
208 $action = $ifErrorAction;
211 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
215 $getRef =
GETPOST(
'ref',
'alpha');
217 if (!empty($getRef)) {
218 $isExistingRef =
$object->checkExistingRef($action, $getRef);
220 $isExistingRef =
true;
225 if ($isExistingRef) {
226 if ($action ==
'update') {
230 } elseif ($action ==
'add') {
235 if (!empty($getRef)) {
248 $fk_user_assign =
GETPOSTINT(
'fk_user_assign');
252 if ($fk_user_assign > 0) {
253 $object->fk_user_assign = $fk_user_assign;
254 $object->status = $object::STATUS_ASSIGNED;
257 if ($action ==
'add') {
259 $object->type_label = $langs->trans($langs->getLabelFromKey($db,
$object->type_code,
'c_ticket_type',
'code',
'label'));
260 $object->category_label = $langs->trans($langs->getLabelFromKey($db,
$object->category_code,
'c_ticket_category',
'code',
'label'));
261 $object->severity_label = $langs->trans($langs->getLabelFromKey($db,
$object->severity_code,
'c_ticket_severity',
'code',
'label'));
262 $object->fk_user_create = $user->id;
263 $object->email_from = $user->email;
265 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
266 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
276 $action = $ifErrorAction;
281 $categories =
GETPOST(
'categories',
'array');
282 $object->setCategories($categories);
285 if ($action ==
'add') {
289 $type_contact =
GETPOST(
"type",
'alpha');
291 if ($contactid > 0 && $type_contact) {
293 $result =
$object->add_contact($contactid, $typeid,
'external');
297 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
303 if ($projectid > 0) {
304 $object->setProject($projectid);
308 if (
getDolGlobalString(
'TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND') && $user->hasRight(
'ticket',
'write')) {
309 if (!
$object->markAsRead($user) > 0) {
316 $result =
$object->assignUser($user, $user->id, 1);
317 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
323 $object->copyFilesForTicket(
'');
329 if (!empty($backtopage)) {
333 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
336 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
339 header(
"Location: " . $url);
345 }
else $action = $ifErrorAction;
349 if ($action ==
"set_read" && $permissiontoadd) {
352 if (
$object->markAsRead($user) > 0) {
355 header(
"Location: card.php?track_id=" .
$object->track_id);
364 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $permissiontoadd) {
366 $useroriginassign =
$object->fk_user_assign;
376 $ret =
$object->assignUser($user, $usertoassign);
384 if ($useroriginassign > 0) {
385 $internal_contacts =
$object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
386 foreach ($internal_contacts as $key => $contact) {
387 if ($contact[
'id'] !== $usertoassign) {
388 $result =
$object->delete_contact($contact[
'rowid']);
397 if ($usertoassign > 0 && $usertoassign !== $useroriginassign) {
398 $result =
$object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
408 $object->fetch_user($usertoassign);
411 header(
"Location: card.php?track_id=" .
$object->track_id);
421 if ($action ==
'add_message' && GETPOSTISSET(
'btn_add_message') && $permissiontoread) {
422 $ret =
$object->newMessage($user, $action, (
GETPOST(
'private_message',
'alpha') ==
"on" ? 1 : 0), 0);
425 if (!empty($backtopage)) {
428 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
431 header(
"Location: " . $url);
439 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
442 if (
$object->close($user, ($action ==
"confirm_abandon" ? 1 : 0))) {
445 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
446 header(
"Location: " . $url);
454 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
456 if ($_SESSION[
'email_customer'] ==
$object->origin_email || $_SESSION[
'email_customer'] ==
$object->thirdparty->email) {
461 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketMarkedAsClosed') .
'</div>',
null,
'mesgs');
463 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
464 header(
"Location: " . $url);
472 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
474 if (
$object->delete($user) > 0) {
475 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketDeletedSuccess') .
'</div>',
null,
'mesgs');
476 header(
"Location: " . DOL_URL_ROOT .
"/ticket/list.php");
479 $langs->load(
"errors");
480 $mesg =
'<div class="error">' . $langs->trans(
$object->error) .
'</div>';
487 if ($action ==
'set_thirdparty' && $user->hasRight(
'ticket',
'write')) {
490 $url = $_SERVER[
"PHP_SELF"] .
'?track_id=' .
GETPOST(
'track_id',
'alpha');
491 header(
"Location: " . $url);
497 if ($action ==
'set_progression' && $user->hasRight(
'ticket',
'write')) {
501 $url =
'card.php?track_id=' .
$object->track_id;
502 header(
"Location: " . $url);
508 if ($action ==
'set_categories' && $user->hasRight(
'ticket',
'write')) {
512 $url =
'card.php?track_id=' .
$object->track_id;
513 header(
"Location: " . $url);
519 if ($action ==
'setsubject' && $user->hasRight(
'ticket',
'write')) {
521 if ($action ==
'setsubject') {
525 if ($action ==
'setsubject' && empty(
$object->subject)) {
527 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
531 if (!
$object->update($user) >= 0) {
537 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?track_id=" .
$object->track_id);
542 if ($action ==
'confirm_reopen' && $user->hasRight(
'ticket',
'manage') && !
GETPOST(
'cancel')) {
545 if (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED) {
546 if (
$object->fk_user_assign !=
null) {
547 $res =
$object->setStatut(Ticket::STATUS_ASSIGNED,
null,
'',
'TICKET_MODIFY');
549 $res =
$object->setStatut(Ticket::STATUS_NOT_READ,
null,
'',
'TICKET_MODIFY');
552 $url =
'card.php?track_id=' .
$object->track_id;
553 header(
"Location: " . $url);
561 } elseif ($action ==
'classin' && $permissiontoadd) {
564 $object->setProject($projectid);
565 $url =
'card.php?track_id=' .
$object->track_id;
566 header(
"Location: " . $url);
569 } elseif ($action ==
'setcontract' && $permissiontoadd) {
573 $url =
'card.php?track_id=' .
$object->track_id;
574 header(
"Location: " . $url);
577 } elseif ($action ==
"set_message" && $user->hasRight(
'ticket',
'manage')) {
581 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
583 $object->message = $fieldtomodify;
590 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
598 } elseif ($action ==
'confirm_set_status' && $permissiontoadd && !
GETPOST(
'cancel')) {
603 $res =
$object->setStatut($new_status);
605 $url =
'card.php?track_id=' .
$object->track_id;
606 header(
"Location: " . $url);
616 if ($action ==
"update_extras" && $permissiontoadd) {
619 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
625 $result =
$object->insertExtraFields(empty($triggermodname) ?
'' : $triggermodname, $user);
633 $action =
'edit_extras';
640 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
644 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
645 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
658 $permissiondellink = $user->hasRight(
'ticket',
'write');
659 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
662 include DOL_DOCUMENT_ROOT .
'/core/actions_builddoc.inc.php';
665 $triggersendname =
'TICKET_SENTBYMAIL';
667 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
668 $trackid =
'tic' .
$object->id;
669 include DOL_DOCUMENT_ROOT .
'/core/actions_sendmails.inc.php';
672 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
673 $action =
'presend_addmessage';
682$userstat =
new User($db);
683$form =
new Form($db);
686if (isModEnabled(
'project')) {
690$help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
692$title = $actionobject->getTitle($action);
694llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-ticket page-card');
696if ($action ==
'create' || $action ==
'presend') {
697 if (empty($permissiontoadd)) {
705 $formticket->trackid =
'';
706 $formticket->withfromsocid = $socid ? $socid : $user->socid;
707 $formticket->withfromcontactid = $contactid ? $contactid :
'';
708 $formticket->withtitletopic = 1;
709 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (
getDolGlobalString(
'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION') ? 1 : 0));
710 $formticket->withusercreate = 0;
711 $formticket->withref = 1;
712 $formticket->fk_user_create = $user->id;
713 $formticket->withfile = 2;
714 $formticket->withextrafields = 1;
715 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
717 $formticket->withcancel = 1;
720 if (
GETPOST(
"mode",
"aZ09") ==
'init') {
721 $formticket->clear_attached_files();
724 $formticket->showForm(1,
'create', 0,
null, $action,
$object);
727} elseif ($action ==
'edit' && $user->rights->ticket->write &&
$object->status < Ticket::STATUS_CLOSED) {
728 if (empty($permissiontoadd)) {
738 $formticket->trackid =
$object->track_id;
739 $formticket->withfromsocid =
$object->socid;
740 $formticket->withtitletopic = 1;
742 $formticket->withnotifytiersatcreate = 0;
743 $formticket->withusercreate = 0;
744 $formticket->withref = 1;
745 $formticket->fk_user_create = $user->id;
746 $formticket->withfile = 0;
747 $formticket->action =
'update';
748 $formticket->withextrafields = 1;
749 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
751 $formticket->withcancel = 1;
753 $formticket->showForm(0,
'edit', 0,
null, $action,
$object);
756} 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'])) {
757 if (!empty($res) && $res > 0) {
759 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') &&
$object->fk_user_assign != $user->id) && !$user->hasRight(
'ticket',
'manage')) {
765 if ($action ==
'close') {
766 $thirdparty_contacts =
$object->getInfosTicketExternalContact(1);
767 $contacts_select = array(
768 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
769 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
771 foreach ($thirdparty_contacts as $thirdparty_contact) {
772 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
777 $formquestion = array(
779 'name' =>
'contactid',
781 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
782 'values' => $contacts_select,
783 'default' => $default
787 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
790 if ($action ==
'abandon') {
791 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
794 if ($action ==
'delete') {
795 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
798 if ($action ==
'reopen') {
799 print $form->formconfirm($url_page_current.
'?track_id='.
$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
802 if ($action ==
'set_status') {
803 $new_status =
GETPOST(
'new_status');
805 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id.
"&new_status=".
GETPOST(
'new_status'), $langs->trans(
"TicketChangeStatus"), $langs->trans(
"TicketConfirmChangeStatus", $langs->transnoentities(
$object->labelStatusShort[$new_status])),
"confirm_set_status",
'',
'', 1);
809 if ($projectid > 0) {
810 $projectstat =
new Project($db);
811 if ($projectstat->fetch($projectid) > 0) {
812 $projectstat->fetch_thirdparty();
816 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
822 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
824 print
'<table class="border centpercent">';
826 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
829 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
831 if (!$user->hasRight(
'projet',
'all',
'lire')) {
832 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
833 $projectstat->next_prev_filter =
"rowid IN (".$db->sanitize(count($objectsListId) ? implode(
',', array_keys($objectsListId)) :
'0').
")";
835 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
839 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
842 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
843 print
'<td colspan="3">';
844 if ($projectstat->thirdparty->id > 0) {
845 print $projectstat->thirdparty->getNomUrl(1);
853 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
854 if ($projectstat->public) {
855 print $langs->trans(
'SharedProject');
857 print $langs->trans(
'PrivateProject');
863 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
869 print
"ErrorRecordNotFound";
871 } elseif ($socid > 0) {
877 dol_banner_tab(
$object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
883 $object->next_prev_filter =
"te.fk_user_assign = ".((int) $user->id);
884 } elseif ($user->socid > 0) {
885 $object->next_prev_filter =
"te.fk_soc = ".((int) $user->socid);
892 $morehtmlref =
'<div class="refidno">';
896 if (
$object->fk_user_create > 0) {
897 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
899 $fuser =
new User($db);
900 $fuser->fetch(
$object->fk_user_create);
901 $morehtmlref .= $fuser->getNomUrl(-1);
905 $createdfrompublicticket = 0;
906 $createdfromemailcollector = 0;
907 if (!empty(
$object->origin_email) && (empty(
$object->email_msgid) || preg_match(
'/dolibarr\-tic\d+/',
$object->email_msgid))) {
909 $createdfrompublicticket = 1;
910 } elseif (!empty(
$object->email_msgid)) {
912 $createdfromemailcollector = 1;
916 if ($createdfrompublicticket) {
917 $htmltooptip = $langs->trans(
"OriginEmail").
': '.
$object->origin_email;
918 $htmltooptip .=
'<br>'.$langs->trans(
"IP").
': '.
$object->ip;
919 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
920 $morehtmlref .= ($createdbyshown ?
'' : $langs->trans(
"CreatedBy").
' : ');
921 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
922 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
923 } elseif ($createdfromemailcollector) {
924 $langs->load(
"mails");
925 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.
$object->email_msgid;
926 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date(
$object->email_date,
'dayhour');
927 $htmltooltip .=
'<br>'.$langs->trans(
"MailFrom").
': '.
$object->email_from;
928 $htmltooltip .=
'<br>'.$langs->trans(
"MailReply").
': '.
$object->origin_replyto;
929 $htmltooltip .=
'<br>'.$langs->trans(
"MailReferences").
': '.
$object->origin_references;
930 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
931 $morehtmlref .= ($createdbyshown ?
'' : $langs->trans(
"CreatedBy").
' : ');
932 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
933 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
936 $permissiontoedit =
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write');
940 if (isModEnabled(
"societe")) {
941 $morehtmlref .=
'<br>';
942 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
943 if ($action !=
'editcustomer' && $permissiontoedit) {
944 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
946 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.
$object->track_id,
$object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
948 $morehtmlref .=
' - <a href="'.DOL_URL_ROOT.
'/ticket/list.php?socid='.
$object->socid.
'&sortfield=t.datec&sortorder=desc">'.
img_picto($langs->trans(
"Tickets"),
'ticket',
'class="pictofixedwidth"').
' '.$langs->trans(
"TicketHistory").
'</a>';
953 if (isModEnabled(
'project')) {
954 $langs->load(
"projects");
955 $morehtmlref .=
'<br>';
956 if ($permissiontoedit) {
958 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object(
$object->project) &&
$object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
959 if ($action !=
'classify') {
960 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
962 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
964 if (!empty(
$object->fk_project)) {
966 $morehtmlref .=
$object->project->getNomUrl(1);
968 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag(
$object->project->title).
'</span>';
977 if (isModEnabled(
'contract')) {
978 $langs->load(
'contracts');
979 $morehtmlref .=
'<br>';
980 if ($permissiontoedit) {
981 $morehtmlref .=
img_picto($langs->trans(
"Contract"),
'contract',
'class="pictofixedwidth"');
982 if ($action ==
'edit_contrat') {
984 $morehtmlref .= $formcontract->formSelectContract($_SERVER[
"PHP_SELF"].
'?id='.
$object->id,
$object->socid,
$object->fk_contract,
'contratid', 0, 1, 1, 1);
986 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edit_contrat&token='.
newToken().
'&id='.
$object->id.
'">';
987 $morehtmlref .=
img_edit($langs->trans(
'SetContract'));
988 $morehtmlref .=
'</a>';
991 if (!empty(
$object->fk_contract)) {
992 $contratstatic =
new Contrat($db);
993 $contratstatic->fetch(
$object->fk_contract);
995 $morehtmlref .= $contratstatic->getNomUrl(0,
'', 1);
1001 $morehtmlref .=
'</div>';
1003 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1005 dol_banner_tab(
$object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1007 print
'<div class="fichecenter">';
1008 print
'<div class="fichehalfleft">';
1009 print
'<div class="underbanner clearboth"></div>';
1011 print
'<table class="border tableforfield centpercent">';
1014 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1015 if (!empty(
$object->track_id)) {
1018 print $form->showrefnav(
$object,
'id', $linkback, 1,
'rowid',
'track_id');
1023 print $langs->trans(
'None');
1029 print $form->editfieldkey(
"Subject",
'subject',
$object->subject,
$object, $user->hasRight(
'ticket',
'write') && !$user->socid,
'string');
1031 print $form->editfieldval(
"Subject",
'subject',
$object->subject,
$object, $user->hasRight(
'ticket',
'write') && !$user->socid,
'string');
1035 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1058 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1059 if (!empty(
$object->date_read)) {
1067 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1068 if (!empty(
$object->date_close)) {
1075 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1076 print $langs->trans(
"AssignedTo");
1077 if (isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->hasRight(
'ticket',
'manage')) {
1078 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>';
1080 print
'</td></tr></table>';
1082 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" &&
$object->fk_user_assign > 0) {
1083 $userstat->fetch(
$object->fk_user_assign);
1084 print $userstat->getNomUrl(-1);
1088 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" &&
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write')) {
1089 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1090 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1091 print
'<input type="hidden" name="action" value="assign_user">';
1092 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1094 print $form->select_dolusers(empty(
$object->fk_user_assign) ? $user->id :
$object->fk_user_assign,
'fk_user_assign', 1);
1095 print
' <input type="submit" class="button smallpaddingimp" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1102 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1103 print $langs->trans(
'Progression').
'</td><td class="left">';
1105 if ($action !=
'progression' && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED && !$user->socid) {
1106 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>';
1108 print
'</tr></table>';
1110 if ($user->hasRight(
'ticket',
'write') && $action ==
'progression') {
1111 print
'<form action="'.$url_page_current.
'" method="post">';
1112 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1113 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1114 print
'<input type="hidden" name="action" value="set_progression">';
1115 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1116 print
' <input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Modify').
'">';
1125 if (isModEnabled(
'intervention')) {
1127 $num = count(
$object->linkedObjects);
1131 foreach (
$object->linkedObjects as $objecttype => $objects) {
1132 if ($objecttype ==
"fichinter") {
1133 foreach ($objects as $fichinter) {
1135 $timing += $fichinter->duration;
1141 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1148 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1154 print
'</div><div class="fichehalfright">';
1157 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1158 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1159 print
'<input type="hidden" name="action" value="change_property">';
1160 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1161 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1164 print
'<div class="div-table-responsive-no-min">';
1165 print
'<table class="border tableforfield centpercent margintable bordertopimp">';
1166 print
'<tr class="liste_titre">';
1168 print $langs->trans(
'TicketProperties');
1171 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1172 print
'<input type="submit" class="button smallpaddingimp" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1175 if (isset(
$object->status) && (
$object->status < $object::STATUS_NEED_MORE_INFO ||
getDolGlobalString(
'TICKET_ALLOW_CLASSIFICATION_MODIFICATION_EVEN_IF_CLOSED')) && $user->hasRight(
'ticket',
'write')) {
1176 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1182 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1185 print
'<td class="titlefield">';
1186 print $langs->trans(
'Type');
1188 $formticket->selectTypesTickets(
$object->type_code,
'update_value_type',
'', 2);
1194 print $langs->trans(
'TicketCategory');
1196 $formticket->selectGroupTickets(
$object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1202 print $langs->trans(
'TicketSeverity');
1204 $formticket->selectSeveritiesTickets(
$object->severity_code,
'update_value_severity',
'', 2);
1209 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1210 if (!empty(
$object->type_code)) {
1211 print $langs->getLabelFromKey($db,
'TicketTypeShort'.
$object->type_code,
'c_ticket_type',
'code',
'label',
$object->type_code);
1216 if (!empty(
$object->category_code)) {
1217 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.
$object->category_code,
'c_ticket_category',
'code',
'label',
$object->category_code);
1219 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1223 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1224 if (!empty(
$object->severity_code)) {
1225 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.
$object->severity_code,
'c_ticket_severity',
'code',
'label',
$object->severity_code);
1235 if (isModEnabled(
'category')) {
1236 print
'<table class="border centpercent tableforfield">';
1238 print
'<td class="valignmiddle titlefield">';
1239 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1240 print $langs->trans(
"Categories");
1241 if ($action !=
'categories' && !$user->socid) {
1242 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>';
1247 if ($user->hasRight(
'ticket',
'write') && $action ==
'categories') {
1248 $cate_arbo = $form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 3);
1249 if (is_array($cate_arbo)) {
1251 print
'<td colspan="3">';
1252 print
'<form action="'.$url_page_current.
'" method="POST">';
1253 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1254 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1255 print
'<input type="hidden" name="action" value="set_categories">';
1258 $cats = $category->containing(
$object->id,
'ticket');
1259 $arrayselected = array();
1260 foreach ($cats as $cat) {
1261 $arrayselected[] = $cat->id;
1264 print
img_picto(
'',
'category',
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'maxwidth500 widthcentpercentminusx', 0, 0);
1265 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Save').
'">';
1270 print
'<td colspan="3">';
1271 print $form->showCategories(
$object->id, Categorie::TYPE_TICKET, 1);
1279 $actionobject->viewTicketOriginalMessage($user, $action,
$object);
1283 print
'<!-- navbar with status -->';
1284 if (!$user->socid && $user->hasRight(
'ticket',
'write') && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED) {
1285 $actionobject->viewStatusActions(
$object);
1290 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1292 print
'<div class="div-table-responsive-no-min">';
1293 print
'<div class="tagtable centpercent noborder allwidth">';
1295 print
'<div class="tagtr liste_titre">';
1296 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1297 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1298 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1299 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1300 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1301 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1302 print
'</div><!-- tagtr -->';
1305 $companystatic =
new Societe($db);
1306 $contactstatic =
new Contact($db);
1307 $userstatic =
new User($db);
1309 foreach (array(
'internal',
'external') as $source) {
1311 $tab = $tmpobject->listeContact(-1, $source);
1312 '@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,nom:string}> $tab';
1313 $num = is_array($tab) ? 0 : count($tab);
1315 foreach (array_keys($tab) as $i) {
1317 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1319 print
'<div class="tagtd left">';
1320 if ($tab[$i][
'source'] ==
'internal') {
1321 echo $langs->trans(
"User");
1324 if ($tab[$i][
'source'] ==
'external') {
1325 echo $langs->trans(
"ThirdPartyContact");
1329 print
'<div class="tagtd left">';
1331 if ($tab[$i][
'socid'] > 0) {
1332 $companystatic->fetch($tab[$i][
'socid']);
1333 echo $companystatic->getNomUrl(-1);
1335 if ($tab[$i][
'socid'] < 0) {
1338 if (!$tab[$i][
'socid']) {
1343 print
'<div class="tagtd">';
1344 if ($tab[$i][
'source'] ==
'internal') {
1345 if ($userstatic->fetch($tab[$i][
'id'])) {
1346 print $userstatic->getNomUrl(-1);
1349 if ($tab[$i][
'source'] ==
'external') {
1350 if ($contactstatic->fetch($tab[$i][
'id'])) {
1351 print $contactstatic->getNomUrl(-1);
1355 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1357 print
'<div class="tagtd">';
1359 print
dol_print_phone($tab[$i][
'phone'],
'',
'',
'',
'AC_TEL').
'<br>';
1361 if (!empty($tab[$i][
'phone_perso'])) {
1363 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'',
'',
'',
'AC_TEL').
'<br>';
1365 if (!empty($tab[$i][
'phone_mobile'])) {
1367 print
dol_print_phone($tab[$i][
'phone_mobile'],
'',
'',
'',
'AC_TEL').
'<br>';
1371 print
'<div class="tagtd center">';
1373 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1376 if ($tab[$i][
'source'] ==
'internal') {
1377 $userstatic->id = $tab[$i][
'id'];
1378 $userstatic->lastname = $tab[$i][
'lastname'];
1379 $userstatic->firstname = $tab[$i][
'firstname'];
1380 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1382 if ($tab[$i][
'source'] ==
'external') {
1383 $contactstatic->id = $tab[$i][
'id'];
1384 $contactstatic->lastname = $tab[$i][
'lastname'];
1385 $contactstatic->firstname = $tab[$i][
'firstname'];
1386 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1394 print
'</div><!-- tagtr -->';
1400 print
'</div><!-- contact list -->';
1404 print
'</div></div>';
1405 print
'<div class="clearboth"></div>';
1411 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1412 print
'<div class="tabsAction">'.
"\n";
1413 $parameters = array();
1414 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
1419 if (empty($reshook)) {
1421 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1422 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',
'');
1426 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1427 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1433 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1435 if (
$object->fk_soc > 0 && isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1436 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,
'');
1440 if (isset(
$object->status) &&
$object->status >= 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1441 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1445 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1446 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1450 if (!$user->socid && (isset(
$object->status) && (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1455 if ($permissiontoedit) {
1456 print
dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.
newToken(),
'', $permissiontoedit);
1460 if ($user->hasRight(
'ticket',
'delete') && !$user->socid) {
1464 print
'</div>'.
"\n";
1468 if (
GETPOST(
'modelselected')) {
1469 $action =
'presend';
1472 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1473 $action =
'presend_addmessage';
1477 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1482 $outputlangs = $langs;
1485 $newlang =
GETPOST(
'lang_id',
'aZ09');
1487 $newlang =
$object->thirdparty->default_lang;
1489 if (!empty($newlang)) {
1490 $outputlangs =
new Translate(
"", $conf);
1491 $outputlangs->setDefaultLang($newlang);
1494 $arrayoffamiliestoexclude = array(
'objectamount');
1496 $action =
'add_message';
1497 $modelmail =
'ticket_send';
1500 $morehtmlright =
'';
1504 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1508 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1510 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1516 $formticket->action = $action;
1517 $formticket->track_id =
$object->track_id;
1518 $formticket->ref =
$object->ref;
1519 $formticket->id =
$object->id;
1520 $formticket->trackid =
'tic'.$object->id;
1522 $formticket->withfile = 2;
1523 $formticket->withcancel = 1;
1524 $formticket->param = array(
'fk_user_create' => $user->id);
1525 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1528 $formticket->param[
'models'] = $modelmail;
1529 $formticket->param[
'models_id'] =
GETPOSTINT(
'modelmailselected');
1531 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.
$object->track_id;
1533 $formticket->withsubstit = 1;
1534 $formticket->substit = $substitutionarray;
1535 $formticket->backtopage = $backtopage;
1537 $formticket->showMessageForm(
'100%');
1543 $param =
'&id='.$object->id;
1544 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1545 $param .=
'&contextpage='.$contextpage;
1547 if ($limit > 0 && $limit != $conf->liste_limit) {
1548 $param .=
'&limit='.$limit;
1551 $param .=
'&actioncode='.urlencode($actioncode);
1553 if ($search_agenda_label) {
1554 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1557 $morehtmlright =
'';
1559 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.
$object->track_id;
1560 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1563 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1564 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1565 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', $btnstatus);
1568 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1569 $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);
1570 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', $btnstatus);
1572 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1576 $filters[
'search_agenda_label'] = $search_agenda_label;
1577 $filters[
'search_rowid'] = $search_rowid;
1579 show_actions_messaging($conf, $langs, $db,
$object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1582 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1583 print
'<div class="fichecenter"><div class="fichehalfleft">';
1584 print
'<a name="builddoc"></a>';
1590 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
1591 $genallowed = $permissiontoadd;
1592 $delallowed = $permissiontodelete;
1596 $codelang =
$object->thirdparty->default_lang;
1599 print $formfile->showdocuments(
'ticket', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'', 0,
'', $codelang);
1602 $linktoelem = $form->showLinkToObjectBlock(
$object,
null, array(
'ticket'));
1603 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
1606 print
'<br><!-- Link to public interface -->'.
"\n";
1611 print
'<div class="fichehalfright">';
1615 $morehtmlcenter =
'<div class="nowraponall">';
1616 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.
$object->id);
1617 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.
$object->id);
1618 $morehtmlcenter .=
'</div>';
1621 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1623 $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()
Empty header.
Class Actions of the module ticket.
Class to manage categories.
Class to manage contracts.
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.
dol_print_phone($phone, $countrycode='', $cid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0, $morecss='')
Format phone numbers according to country.
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.
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)
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...
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
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 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...
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.