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;
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">';
1160 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1161 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1162 print
'<input type="hidden" name="action" value="change_property">';
1163 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1164 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1167 print
'<div class="div-table-responsive-no-min">';
1168 print
'<table class="border tableforfield centpercent margintable bordertopimp">';
1169 print
'<tr class="liste_titre">';
1171 print $langs->trans(
'TicketProperties');
1174 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1175 print
'<input type="submit" class="button smallpaddingimp" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1178 if (isset(
$object->status) && (
$object->status < $object::STATUS_NEED_MORE_INFO ||
getDolGlobalString(
'TICKET_ALLOW_CLASSIFICATION_MODIFICATION_EVEN_IF_CLOSED')) && $user->hasRight(
'ticket',
'write')) {
1179 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1185 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1188 print
'<td class="titlefield">';
1189 print $langs->trans(
'Type');
1191 $formticket->selectTypesTickets(
$object->type_code,
'update_value_type',
'', 2);
1197 print $langs->trans(
'TicketCategory');
1199 $formticket->selectGroupTickets(
$object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1205 print $langs->trans(
'TicketSeverity');
1207 $formticket->selectSeveritiesTickets(
$object->severity_code,
'update_value_severity',
'', 2);
1212 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1213 if (!empty(
$object->type_code)) {
1214 print $langs->getLabelFromKey($db,
'TicketTypeShort'.
$object->type_code,
'c_ticket_type',
'code',
'label',
$object->type_code);
1219 if (!empty(
$object->category_code)) {
1220 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.
$object->category_code,
'c_ticket_category',
'code',
'label',
$object->category_code);
1222 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1226 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1227 if (!empty(
$object->severity_code)) {
1228 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.
$object->severity_code,
'c_ticket_severity',
'code',
'label',
$object->severity_code);
1238 if (isModEnabled(
'category')) {
1239 print
'<table class="border centpercent tableforfield">';
1241 print
'<td class="valignmiddle titlefield">';
1242 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1243 print $langs->trans(
"Categories");
1244 if ($action !=
'categories' && !$user->socid) {
1245 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>';
1250 if ($user->hasRight(
'ticket',
'write') && $action ==
'categories') {
1251 $cate_arbo = $form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 3);
1252 if (is_array($cate_arbo)) {
1254 print
'<td colspan="3">';
1255 print
'<form action="'.$url_page_current.
'" method="POST">';
1256 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1257 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1258 print
'<input type="hidden" name="action" value="set_categories">';
1261 $cats = $category->containing(
$object->id,
'ticket');
1262 $arrayselected = array();
1263 foreach ($cats as $cat) {
1264 $arrayselected[] = $cat->id;
1267 print
img_picto(
'',
'category',
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'maxwidth500 widthcentpercentminusx', 0, 0);
1268 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Save').
'">';
1273 print
'<td colspan="3">';
1274 print $form->showCategories(
$object->id, Categorie::TYPE_TICKET, 1);
1282 $actionobject->viewTicketOriginalMessage($user, $action,
$object);
1286 print
'<!-- navbar with status -->';
1287 if (!$user->socid && $user->hasRight(
'ticket',
'write') && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED) {
1288 $actionobject->viewStatusActions(
$object);
1293 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1295 print
'<div class="div-table-responsive-no-min">';
1296 print
'<div class="tagtable centpercent noborder allwidth">';
1298 print
'<div class="tagtr liste_titre">';
1299 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1300 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1301 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1302 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1303 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1304 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1305 print
'</div><!-- tagtr -->';
1308 $companystatic =
new Societe($db);
1309 $contactstatic =
new Contact($db);
1310 $userstatic =
new User($db);
1312 foreach (array(
'internal',
'external') as $source) {
1314 $tab = $tmpobject->listeContact(-1, $source);
1315 '@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';
1316 $num = is_array($tab) ? 0 : count($tab);
1318 foreach (array_keys($tab) as $i) {
1320 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1322 print
'<div class="tagtd left">';
1323 if ($tab[$i][
'source'] ==
'internal') {
1324 echo $langs->trans(
"User");
1327 if ($tab[$i][
'source'] ==
'external') {
1328 echo $langs->trans(
"ThirdPartyContact");
1332 print
'<div class="tagtd left">';
1334 if ($tab[$i][
'socid'] > 0) {
1335 $companystatic->fetch($tab[$i][
'socid']);
1336 echo $companystatic->getNomUrl(-1);
1338 if ($tab[$i][
'socid'] < 0) {
1341 if (!$tab[$i][
'socid']) {
1346 print
'<div class="tagtd">';
1347 if ($tab[$i][
'source'] ==
'internal') {
1348 if ($userstatic->fetch($tab[$i][
'id'])) {
1349 print $userstatic->getNomUrl(-1);
1352 if ($tab[$i][
'source'] ==
'external') {
1353 if ($contactstatic->fetch($tab[$i][
'id'])) {
1354 print $contactstatic->getNomUrl(-1);
1358 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1360 print
'<div class="tagtd">';
1362 print
dol_print_phone($tab[$i][
'phone'],
'',
'',
'',
'AC_TEL').
'<br>';
1364 if (!empty($tab[$i][
'phone_perso'])) {
1366 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'',
'',
'',
'AC_TEL').
'<br>';
1368 if (!empty($tab[$i][
'phone_mobile'])) {
1370 print
dol_print_phone($tab[$i][
'phone_mobile'],
'',
'',
'',
'AC_TEL').
'<br>';
1374 print
'<div class="tagtd center">';
1376 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1379 if ($tab[$i][
'source'] ==
'internal') {
1380 $userstatic->id = $tab[$i][
'id'];
1381 $userstatic->lastname = $tab[$i][
'lastname'];
1382 $userstatic->firstname = $tab[$i][
'firstname'];
1383 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1385 if ($tab[$i][
'source'] ==
'external') {
1386 $contactstatic->id = $tab[$i][
'id'];
1387 $contactstatic->lastname = $tab[$i][
'lastname'];
1388 $contactstatic->firstname = $tab[$i][
'firstname'];
1389 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1397 print
'</div><!-- tagtr -->';
1403 print
'</div><!-- contact list -->';
1407 print
'</div></div>';
1408 print
'<div class="clearboth"></div>';
1414 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1415 print
'<div class="tabsAction">'.
"\n";
1416 $parameters = array();
1417 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
1422 if (empty($reshook)) {
1424 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1425 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',
'');
1429 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1430 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1436 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1438 if (
$object->fk_soc > 0 && isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1439 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,
'');
1443 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1444 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1448 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1449 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1453 if (!$user->socid && (isset(
$object->status) && (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1458 if ($permissiontoedit) {
1459 print
dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.
newToken(),
'', $permissiontoedit);
1463 if ($user->hasRight(
'ticket',
'delete') && !$user->socid) {
1467 print
'</div>'.
"\n";
1471 if (
GETPOST(
'modelselected')) {
1472 $action =
'presend';
1475 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1476 $action =
'presend_addmessage';
1480 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1485 $outputlangs = $langs;
1488 $newlang =
GETPOST(
'lang_id',
'aZ09');
1490 $newlang =
$object->thirdparty->default_lang;
1492 if (!empty($newlang)) {
1493 $outputlangs =
new Translate(
"", $conf);
1494 $outputlangs->setDefaultLang($newlang);
1497 $arrayoffamiliestoexclude = array(
'objectamount');
1499 $action =
'add_message';
1500 $modelmail =
'ticket_send';
1503 $morehtmlright =
'';
1507 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1511 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1513 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1519 $formticket->action = $action;
1520 $formticket->track_id =
$object->track_id;
1521 $formticket->ref =
$object->ref;
1522 $formticket->id =
$object->id;
1523 $formticket->trackid =
'tic'.$object->id;
1525 $formticket->withfile = 2;
1526 $formticket->withcancel = 1;
1527 $formticket->param = array(
'fk_user_create' => $user->id);
1528 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1531 $formticket->param[
'models'] = $modelmail;
1532 $formticket->param[
'models_id'] =
GETPOSTINT(
'modelmailselected');
1534 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.
$object->track_id;
1536 $formticket->withsubstit = 1;
1537 $formticket->substit = $substitutionarray;
1538 $formticket->backtopage = $backtopage;
1540 $formticket->showMessageForm(
'100%');
1546 $param =
'&id='.$object->id;
1547 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1548 $param .=
'&contextpage='.$contextpage;
1550 if ($limit > 0 && $limit != $conf->liste_limit) {
1551 $param .=
'&limit='.$limit;
1554 $param .=
'&actioncode='.urlencode($actioncode);
1556 if ($search_agenda_label) {
1557 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1560 $morehtmlright =
'';
1562 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.
$object->track_id;
1563 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1566 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1567 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1568 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', $btnstatus);
1571 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1572 $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);
1573 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', $btnstatus);
1575 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1579 $filters[
'search_agenda_label'] = $search_agenda_label;
1580 $filters[
'search_rowid'] = $search_rowid;
1582 show_actions_messaging($conf, $langs, $db,
$object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1585 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1586 print
'<div class="fichecenter"><div class="fichehalfleft">';
1587 print
'<a name="builddoc"></a>';
1593 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
1594 $genallowed = $permissiontoadd;
1595 $delallowed = $permissiontodelete;
1599 $codelang =
$object->thirdparty->default_lang;
1602 print $formfile->showdocuments(
'ticket', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'', 0,
'', $codelang);
1605 $linktoelem = $form->showLinkToObjectBlock(
$object,
null, array(
'ticket'));
1606 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
1609 print
'<br><!-- Link to public interface -->'.
"\n";
1614 print
'<div class="fichehalfright">';
1618 $morehtmlcenter =
'<div class="nowraponall">';
1619 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.
$object->id);
1620 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.
$object->id);
1621 $morehtmlcenter .=
'</div>';
1624 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1626 $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.