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);
549 $res =
$object->setStatut(Ticket::STATUS_NOT_READ);
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;
719 $formticket->showForm(1,
'create', 0,
null, $action,
$object);
722} elseif ($action ==
'edit' &&
$object->status < Ticket::STATUS_CLOSED) {
723 if (empty($permissiontoadd)) {
733 $formticket->trackid =
$object->track_id;
734 $formticket->withfromsocid =
$object->socid;
735 $formticket->withtitletopic = 1;
737 $formticket->withnotifytiersatcreate = 0;
738 $formticket->withusercreate = 0;
739 $formticket->withref = 1;
740 $formticket->fk_user_create = $user->id;
741 $formticket->withfile = 0;
742 $formticket->action =
'update';
743 $formticket->withextrafields = 1;
744 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
746 $formticket->withcancel = 1;
748 $formticket->showForm(0,
'edit', 0,
null, $action,
$object);
751} 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'])) {
752 if (!empty($res) && $res > 0) {
754 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') &&
$object->fk_user_assign != $user->id) && !$user->hasRight(
'ticket',
'manage')) {
760 if ($action ==
'close') {
761 $thirdparty_contacts =
$object->getInfosTicketExternalContact(1);
762 $contacts_select = array(
763 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
764 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
766 foreach ($thirdparty_contacts as $thirdparty_contact) {
767 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
772 $formquestion = array(
774 'name' =>
'contactid',
776 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
777 'values' => $contacts_select,
778 'default' => $default
782 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
785 if ($action ==
'abandon') {
786 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
789 if ($action ==
'delete') {
790 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
793 if ($action ==
'reopen') {
794 print $form->formconfirm($url_page_current.
'?track_id='.
$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
797 if ($action ==
'set_status') {
798 $new_status =
GETPOST(
'new_status');
800 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);
804 if ($projectid > 0) {
805 $projectstat =
new Project($db);
806 if ($projectstat->fetch($projectid) > 0) {
807 $projectstat->fetch_thirdparty();
811 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
817 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
819 print
'<table class="border centpercent">';
821 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
824 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
826 if (!$user->hasRight(
'projet',
'all',
'lire')) {
827 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
828 $projectstat->next_prev_filter =
"rowid IN (".$db->sanitize(count($objectsListId) ? implode(
',', array_keys($objectsListId)) :
'0').
")";
830 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
834 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
837 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
838 print
'<td colspan="3">';
839 if ($projectstat->thirdparty->id > 0) {
840 print $projectstat->thirdparty->getNomUrl(1);
848 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
849 if ($projectstat->public) {
850 print $langs->trans(
'SharedProject');
852 print $langs->trans(
'PrivateProject');
858 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
864 print
"ErrorRecordNotFound";
866 } elseif ($socid > 0) {
872 dol_banner_tab(
$object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
878 $object->next_prev_filter =
"te.fk_user_assign = ".((int) $user->id);
879 } elseif ($user->socid > 0) {
880 $object->next_prev_filter =
"te.fk_soc = ".((int) $user->socid);
887 $morehtmlref =
'<div class="refidno">';
888 $morehtmlref .=
$object->subject;
891 if (
$object->fk_user_create > 0) {
892 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
894 $fuser =
new User($db);
895 $fuser->fetch(
$object->fk_user_create);
896 $morehtmlref .= $fuser->getNomUrl(-1);
901 if (!empty(
$object->origin_email)) {
902 $htmltooptip = $langs->trans(
"OriginEmail").
': '.
$object->origin_email;
903 $htmltooptip .=
'<br>'.$langs->trans(
"IP").
': '.
$object->ip;
904 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
905 $morehtmlref .= ($createdbyshown ?
'' : $langs->trans(
"CreatedBy").
' : ');
906 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
907 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
908 } elseif (!empty(
$object->email_msgid)) {
909 $langs->load(
"mails");
910 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.
$object->email_msgid;
911 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date(
$object->email_date,
'dayhour');
912 $htmltooltip .=
'<br>'.$langs->trans(
"MailFrom").
': '.
$object->email_from;
913 $htmltooltip .=
'<br>'.$langs->trans(
"MailReply").
': '.
$object->origin_replyto;
914 $htmltooltip .=
'<br>'.$langs->trans(
"MailReferences").
': '.
$object->origin_references;
915 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
916 $morehtmlref .= ($createdbyshown ?
'' : $langs->trans(
"CreatedBy").
' : ');
917 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
918 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
921 $permissiontoedit =
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write');
925 if (isModEnabled(
"societe")) {
926 $morehtmlref .=
'<br>';
927 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
928 if ($action !=
'editcustomer' && $permissiontoedit) {
929 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
931 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.
$object->track_id,
$object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
933 $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>';
938 if (isModEnabled(
'project')) {
939 $langs->load(
"projects");
940 $morehtmlref .=
'<br>';
941 if ($permissiontoedit) {
943 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object(
$object->project) &&
$object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
944 if ($action !=
'classify') {
945 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
947 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
949 if (!empty(
$object->fk_project)) {
951 $morehtmlref .=
$object->project->getNomUrl(1);
953 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag(
$object->project->title).
'</span>';
962 if (isModEnabled(
'contract')) {
963 $langs->load(
'contracts');
964 $morehtmlref .=
'<br>';
965 if ($permissiontoedit) {
966 $morehtmlref .=
img_picto($langs->trans(
"Contract"),
'contract',
'class="pictofixedwidth"');
967 if ($action ==
'edit_contrat') {
969 $morehtmlref .= $formcontract->formSelectContract($_SERVER[
"PHP_SELF"].
'?id='.
$object->id,
$object->socid,
$object->fk_contract,
'contratid', 0, 1, 1, 1);
971 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edit_contrat&token='.newToken().
'&id='.
$object->id.
'">';
972 $morehtmlref .=
img_edit($langs->trans(
'SetContract'));
973 $morehtmlref .=
'</a>';
976 if (!empty(
$object->fk_contract)) {
977 $contratstatic =
new Contrat($db);
978 $contratstatic->fetch(
$object->fk_contract);
980 $morehtmlref .= $contratstatic->getNomUrl(0,
'', 1);
986 $morehtmlref .=
'</div>';
988 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
990 dol_banner_tab(
$object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
992 print
'<div class="fichecenter">';
993 print
'<div class="fichehalfleft">';
994 print
'<div class="underbanner clearboth"></div>';
996 print
'<table class="border tableforfield centpercent">';
999 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1000 if (!empty(
$object->track_id)) {
1003 print $form->showrefnav(
$object,
'id', $linkback, 1,
'rowid',
'track_id');
1008 print $langs->trans(
'None');
1014 print $form->editfieldkey(
"Subject",
'subject',
$object->subject,
$object, $user->hasRight(
'ticket',
'write') && !$user->socid,
'string');
1016 print $form->editfieldval(
"Subject",
'subject',
$object->subject,
$object, $user->hasRight(
'ticket',
'write') && !$user->socid,
'string');
1020 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1043 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1044 if (!empty(
$object->date_read)) {
1052 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1053 if (!empty(
$object->date_close)) {
1060 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1061 print $langs->trans(
"AssignedTo");
1062 if (isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->hasRight(
'ticket',
'manage')) {
1063 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>';
1065 print
'</td></tr></table>';
1067 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" &&
$object->fk_user_assign > 0) {
1068 $userstat->fetch(
$object->fk_user_assign);
1069 print $userstat->getNomUrl(-1);
1073 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" &&
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write')) {
1074 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1075 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1076 print
'<input type="hidden" name="action" value="assign_user">';
1077 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1079 print $form->select_dolusers(empty(
$object->fk_user_assign) ? $user->id :
$object->fk_user_assign,
'fk_user_assign', 1);
1080 print
' <input type="submit" class="button small" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1087 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1088 print $langs->trans(
'Progression').
'</td><td class="left">';
1090 if ($action !=
'progression' && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED && !$user->socid) {
1091 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>';
1093 print
'</tr></table>';
1095 if ($user->hasRight(
'ticket',
'write') && $action ==
'progression') {
1096 print
'<form action="'.$url_page_current.
'" method="post">';
1097 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1098 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1099 print
'<input type="hidden" name="action" value="set_progression">';
1100 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1101 print
' <input type="submit" class="button button-edit small" value="'.$langs->trans(
'Modify').
'">';
1110 if (isModEnabled(
'intervention')) {
1112 $num = count(
$object->linkedObjects);
1116 foreach (
$object->linkedObjects as $objecttype => $objects) {
1117 if ($objecttype ==
"fichinter") {
1118 foreach ($objects as $fichinter) {
1120 $timing += $fichinter->duration;
1126 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1133 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1139 print
'</div><div class="fichehalfright">';
1142 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1143 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1144 print
'<input type="hidden" name="action" value="change_property">';
1145 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1146 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1151 $actionobject->viewTicketOriginalMessage($user, $action,
$object);
1154 print
'<div class="div-table-responsive-no-min">';
1155 print
'<table class="border tableforfield centpercent margintable">';
1156 print
'<tr class="liste_titre">';
1158 print $langs->trans(
'TicketProperties');
1161 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1162 print
'<input type="submit" class="button smallpaddingimp" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1165 if (isset(
$object->status) && (
$object->status < $object::STATUS_NEED_MORE_INFO || !
getDolGlobalInt(
'TICKET_DISALLOW_CLASSIFICATION_MODIFICATION_EVEN_IF_CLOSED')) && $user->hasRight(
'ticket',
'write')) {
1166 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1172 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1175 print
'<td class="titlefield">';
1176 print $langs->trans(
'Type');
1178 $formticket->selectTypesTickets(
$object->type_code,
'update_value_type',
'', 2);
1184 print $langs->trans(
'TicketCategory');
1186 $formticket->selectGroupTickets(
$object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1192 print $langs->trans(
'TicketSeverity');
1194 $formticket->selectSeveritiesTickets(
$object->severity_code,
'update_value_severity',
'', 2);
1199 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1200 if (!empty(
$object->type_code)) {
1201 print $langs->getLabelFromKey($db,
'TicketTypeShort'.
$object->type_code,
'c_ticket_type',
'code',
'label',
$object->type_code);
1206 if (!empty(
$object->category_code)) {
1207 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.
$object->category_code,
'c_ticket_category',
'code',
'label',
$object->category_code);
1209 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1213 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1214 if (!empty(
$object->severity_code)) {
1215 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.
$object->severity_code,
'c_ticket_severity',
'code',
'label',
$object->severity_code);
1225 if (isModEnabled(
'category')) {
1226 print
'<table class="border centpercent tableforfield">';
1228 print
'<td class="valignmiddle titlefield">';
1229 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1230 print $langs->trans(
"Categories");
1231 if ($action !=
'categories' && !$user->socid) {
1232 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>';
1237 if ($user->hasRight(
'ticket',
'write') && $action ==
'categories') {
1238 $cate_arbo = $form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 3);
1239 if (is_array($cate_arbo)) {
1241 print
'<td colspan="3">';
1242 print
'<form action="'.$url_page_current.
'" method="POST">';
1243 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1244 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1245 print
'<input type="hidden" name="action" value="set_categories">';
1248 $cats = $category->containing(
$object->id,
'ticket');
1249 $arrayselected = array();
1250 foreach ($cats as $cat) {
1251 $arrayselected[] = $cat->id;
1254 print
img_picto(
'',
'category',
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'maxwidth500 widthcentpercentminusx', 0, 0);
1255 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Save').
'">';
1260 print
'<td colspan="3">';
1261 print $form->showCategories(
$object->id, Categorie::TYPE_TICKET, 1);
1270 print
'<!-- navbar with status -->';
1271 if (!$user->socid && $user->hasRight(
'ticket',
'write') && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED &&
GETPOST(
'set') !==
'properties') {
1272 $actionobject->viewStatusActions(
$object);
1277 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1279 print
'<div class="div-table-responsive-no-min">';
1280 print
'<div class="tagtable centpercent noborder allwidth">';
1282 print
'<div class="tagtr liste_titre">';
1283 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1284 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1285 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1286 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1287 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1288 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1289 print
'</div><!-- tagtr -->';
1292 $companystatic =
new Societe($db);
1293 $contactstatic =
new Contact($db);
1294 $userstatic =
new User($db);
1296 foreach (array(
'internal',
'external') as $source) {
1298 $tab = $tmpobject->listeContact(-1, $source);
1299 '@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';
1300 $num = is_array($tab) ? 0 : count($tab);
1302 foreach (array_keys($tab) as $i) {
1304 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1306 print
'<div class="tagtd left">';
1307 if ($tab[$i][
'source'] ==
'internal') {
1308 echo $langs->trans(
"User");
1311 if ($tab[$i][
'source'] ==
'external') {
1312 echo $langs->trans(
"ThirdPartyContact");
1316 print
'<div class="tagtd left">';
1318 if ($tab[$i][
'socid'] > 0) {
1319 $companystatic->fetch($tab[$i][
'socid']);
1320 echo $companystatic->getNomUrl(-1);
1322 if ($tab[$i][
'socid'] < 0) {
1325 if (!$tab[$i][
'socid']) {
1330 print
'<div class="tagtd">';
1331 if ($tab[$i][
'source'] ==
'internal') {
1332 if ($userstatic->fetch($tab[$i][
'id'])) {
1333 print $userstatic->getNomUrl(-1);
1336 if ($tab[$i][
'source'] ==
'external') {
1337 if ($contactstatic->fetch($tab[$i][
'id'])) {
1338 print $contactstatic->getNomUrl(-1);
1342 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1344 print
'<div class="tagtd">';
1346 print
dol_print_phone($tab[$i][
'phone'],
'',
'',
'',
'AC_TEL').
'<br>';
1348 if (!empty($tab[$i][
'phone_perso'])) {
1350 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'',
'',
'',
'AC_TEL').
'<br>';
1352 if (!empty($tab[$i][
'phone_mobile'])) {
1354 print
dol_print_phone($tab[$i][
'phone_mobile'],
'',
'',
'',
'AC_TEL').
'<br>';
1358 print
'<div class="tagtd center">';
1360 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1363 if ($tab[$i][
'source'] ==
'internal') {
1364 $userstatic->id = $tab[$i][
'id'];
1365 $userstatic->lastname = $tab[$i][
'lastname'];
1366 $userstatic->firstname = $tab[$i][
'firstname'];
1367 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1369 if ($tab[$i][
'source'] ==
'external') {
1370 $contactstatic->id = $tab[$i][
'id'];
1371 $contactstatic->lastname = $tab[$i][
'lastname'];
1372 $contactstatic->firstname = $tab[$i][
'firstname'];
1373 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1381 print
'</div><!-- tagtr -->';
1387 print
'</div><!-- contact list -->';
1391 print
'</div></div>';
1392 print
'<div class="clearboth"></div>';
1398 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1399 print
'<div class="tabsAction">'.
"\n";
1400 $parameters = array();
1401 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
1406 if (empty($reshook)) {
1408 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1409 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',
'');
1413 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1414 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1420 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1422 if (
$object->fk_soc > 0 && isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1423 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,
'');
1427 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1428 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.newToken().
'&track_id='.
$object->track_id,
'');
1432 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1433 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.newToken().
'&track_id='.
$object->track_id,
'');
1437 if (!$user->socid && (isset(
$object->status) && (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1438 print
dolGetButtonAction(
'', $langs->trans(
'ReOpen'),
'default', $_SERVER[
"PHP_SELF"].
'?action=reopen&token='.newToken().
'&track_id='.
$object->track_id,
'');
1442 if ($permissiontoedit) {
1443 print
dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.newToken(),
'', $permissiontoedit);
1447 if ($user->hasRight(
'ticket',
'delete') && !$user->socid) {
1448 print
dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', $_SERVER[
"PHP_SELF"].
'?action=delete&token='.newToken().
'&track_id='.
$object->track_id,
'');
1451 print
'</div>'.
"\n";
1455 if (
GETPOST(
'modelselected')) {
1456 $action =
'presend';
1459 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1460 $action =
'presend_addmessage';
1464 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1469 $outputlangs = $langs;
1472 $newlang =
GETPOST(
'lang_id',
'aZ09');
1474 $newlang =
$object->thirdparty->default_lang;
1476 if (!empty($newlang)) {
1477 $outputlangs =
new Translate(
"", $conf);
1478 $outputlangs->setDefaultLang($newlang);
1481 $arrayoffamiliestoexclude = array(
'objectamount');
1483 $action =
'add_message';
1484 $modelmail =
'ticket_send';
1487 $morehtmlright =
'';
1491 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1495 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1497 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1503 $formticket->action = $action;
1504 $formticket->track_id =
$object->track_id;
1505 $formticket->ref =
$object->ref;
1506 $formticket->id =
$object->id;
1507 $formticket->trackid =
'tic'.$object->id;
1509 $formticket->withfile = 2;
1510 $formticket->withcancel = 1;
1511 $formticket->param = array(
'fk_user_create' => $user->id);
1512 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1515 $formticket->param[
'models'] = $modelmail;
1516 $formticket->param[
'models_id'] =
GETPOSTINT(
'modelmailselected');
1518 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.
$object->track_id;
1520 $formticket->withsubstit = 1;
1521 $formticket->substit = $substitutionarray;
1522 $formticket->backtopage = $backtopage;
1524 $formticket->showMessageForm(
'100%');
1530 $param =
'&id='.$object->id;
1531 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1532 $param .=
'&contextpage='.$contextpage;
1534 if ($limit > 0 && $limit != $conf->liste_limit) {
1535 $param .=
'&limit='.$limit;
1538 $param .=
'&actioncode='.urlencode($actioncode);
1540 if ($search_agenda_label) {
1541 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1544 $morehtmlright =
'';
1546 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.
$object->track_id;
1547 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1550 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1551 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1552 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', $btnstatus);
1555 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1556 $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);
1557 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', $btnstatus);
1559 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1563 $filters[
'search_agenda_label'] = $search_agenda_label;
1564 $filters[
'search_rowid'] = $search_rowid;
1566 show_actions_messaging($conf, $langs, $db,
$object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1569 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1570 print
'<div class="fichecenter"><div class="fichehalfleft">';
1571 print
'<a name="builddoc"></a>';
1577 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
1578 $genallowed = $permissiontoadd;
1579 $delallowed = $permissiontodelete;
1583 $codelang =
$object->thirdparty->default_lang;
1586 print $formfile->showdocuments(
'ticket', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'', 0,
'', $codelang);
1589 $linktoelem = $form->showLinkToObjectBlock(
$object,
null, array(
'ticket'));
1590 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
1593 print
'<br><!-- Link to public interface -->'.
"\n";
1598 print
'<div class="fichehalfright">';
1602 $morehtmlcenter =
'<div class="nowraponall">';
1603 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.
$object->id);
1604 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.
$object->id);
1605 $morehtmlcenter .=
'</div>';
1608 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1610 $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 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).
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.
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.