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') {
199 'ref' => [
'check' =>
'alpha',
'langs' =>
'Ref'],
200 'type_code' => [
'check' =>
'alpha',
'langs' =>
'TicketTypeRequest'],
201 'category_code' => [
'check' =>
'alpha',
'langs' =>
'TicketCategory'],
202 'severity_code' => [
'check' =>
'alpha',
'langs' =>
'TicketSeverity'],
203 'subject' => [
'check' =>
'alphanohtml',
'langs' =>
'Subject'],
204 'message' => [
'check' =>
'restricthtml',
'langs' =>
'Message']
209 if (!empty($error)) {
210 $action = $ifErrorAction;
213 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
217 $getRef =
GETPOST(
'ref',
'alpha');
219 if (!empty($getRef)) {
220 $isExistingRef =
$object->checkExistingRef($action, $getRef);
222 $isExistingRef =
true;
227 if ($isExistingRef) {
228 if ($action ==
'update') {
232 } elseif ($action ==
'add') {
237 if (!empty($getRef)) {
250 $fk_user_assign =
GETPOSTINT(
'fk_user_assign');
254 if ($fk_user_assign > 0) {
255 $object->fk_user_assign = $fk_user_assign;
256 $object->status = $object::STATUS_ASSIGNED;
259 if ($action ==
'add') {
261 $object->type_label = $langs->trans($langs->getLabelFromKey($db,
$object->type_code,
'c_ticket_type',
'code',
'label'));
262 $object->category_label = $langs->trans($langs->getLabelFromKey($db,
$object->category_code,
'c_ticket_category',
'code',
'label'));
263 $object->severity_label = $langs->trans($langs->getLabelFromKey($db,
$object->severity_code,
'c_ticket_severity',
'code',
'label'));
264 $object->fk_user_create = $user->id;
265 $object->email_from = $user->email;
267 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
268 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
278 $action = $ifErrorAction;
283 $categories =
GETPOST(
'categories',
'array');
284 $object->setCategories($categories);
287 if ($action ==
'add') {
291 $type_contact =
GETPOST(
"type",
'alpha');
293 if ($contactid > 0 && $type_contact) {
295 $result =
$object->add_contact($contactid, $typeid,
'external');
299 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
305 if ($projectid > 0) {
306 $object->setProject($projectid);
310 if (
getDolGlobalString(
'TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND') && $user->hasRight(
'ticket',
'write')) {
311 if (!
$object->markAsRead($user) > 0) {
317 if ((empty($fk_user_assign) &&
getDolGlobalInt(
'TICKET_AUTO_ASSIGN_USER_CREATE') == 1) || (
getDolGlobalInt(
'TICKET_AUTO_ASSIGN_USER_CREATE') == 2)) {
318 $result =
$object->assignUser($user, $user->id, 1);
319 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
325 $object->copyFilesForTicket(
'');
331 if (!empty($backtopage)) {
335 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
338 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
341 header(
"Location: " . $url);
348 $action = $ifErrorAction;
353 if ($action ==
"set_read" && $permissiontoadd) {
356 if (
$object->markAsRead($user) > 0) {
359 header(
"Location: card.php?track_id=" .
$object->track_id);
368 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $permissiontoadd) {
370 $useroriginassign =
$object->fk_user_assign;
380 $ret =
$object->assignUser($user, $usertoassign);
388 if ($useroriginassign > 0) {
389 $internal_contacts =
$object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
390 foreach ($internal_contacts as $key => $contact) {
391 if ($contact[
'id'] !== $usertoassign) {
392 $result =
$object->delete_contact($contact[
'rowid']);
401 if ($usertoassign > 0 && $usertoassign !== $useroriginassign) {
402 $result =
$object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
412 $object->fetch_user($usertoassign);
415 header(
"Location: card.php?track_id=" .
$object->track_id);
425 if ($action ==
'add_message' && GETPOSTISSET(
'btn_add_message') && $permissiontoread) {
426 $ret =
$object->newMessage($user, $action, (
GETPOST(
'private_message',
'alpha') ==
"on" ? 1 : 0), 0);
429 if (!empty($backtopage)) {
432 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
435 header(
"Location: " . $url);
443 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
446 if (
$object->close($user, ($action ==
"confirm_abandon" ? 1 : 0))) {
449 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
450 header(
"Location: " . $url);
458 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
460 if ($_SESSION[
'email_customer'] ==
$object->origin_email || $_SESSION[
'email_customer'] ==
$object->thirdparty->email) {
465 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketMarkedAsClosed') .
'</div>',
null,
'mesgs');
467 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
468 header(
"Location: " . $url);
476 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
478 if (
$object->delete($user) > 0) {
479 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketDeletedSuccess') .
'</div>',
null,
'mesgs');
480 header(
"Location: " . DOL_URL_ROOT .
"/ticket/list.php");
483 $langs->load(
"errors");
484 $mesg =
'<div class="error">' . $langs->trans(
$object->error) .
'</div>';
491 if ($action ==
'set_thirdparty' && $user->hasRight(
'ticket',
'write')) {
494 $url = $_SERVER[
"PHP_SELF"] .
'?track_id=' .
GETPOST(
'track_id',
'alpha');
495 header(
"Location: " . $url);
501 if ($action ==
'set_progression' && $user->hasRight(
'ticket',
'write')) {
505 $url =
'card.php?track_id=' .
$object->track_id;
506 header(
"Location: " . $url);
512 if ($action ==
'set_categories' && $user->hasRight(
'ticket',
'write')) {
516 $url =
'card.php?track_id=' .
$object->track_id;
517 header(
"Location: " . $url);
523 if ($action ==
'setsubject' && $user->hasRight(
'ticket',
'write')) {
525 if ($action ==
'setsubject') {
529 if ($action ==
'setsubject' && empty(
$object->subject)) {
531 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
535 if (!
$object->update($user) >= 0) {
541 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?track_id=" .
$object->track_id);
546 if ($action ==
'confirm_reopen' && $user->hasRight(
'ticket',
'manage') && !
GETPOST(
'cancel')) {
549 if (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED) {
550 if (
$object->fk_user_assign !=
null) {
551 $res =
$object->setStatut(Ticket::STATUS_ASSIGNED,
null,
'',
'TICKET_MODIFY');
553 $res =
$object->setStatut(Ticket::STATUS_NOT_READ,
null,
'',
'TICKET_MODIFY');
556 $url =
'card.php?track_id=' .
$object->track_id;
557 header(
"Location: " . $url);
565 } elseif ($action ==
'classin' && $permissiontoadd) {
568 $object->setProject($projectid);
569 $url =
'card.php?track_id=' .
$object->track_id;
570 header(
"Location: " . $url);
573 } elseif ($action ==
'setcontract' && $permissiontoadd) {
577 $url =
'card.php?track_id=' .
$object->track_id;
578 header(
"Location: " . $url);
581 } elseif ($action ==
"set_message" && $user->hasRight(
'ticket',
'manage')) {
585 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
587 $object->message = $fieldtomodify;
594 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
602 } elseif ($action ==
'confirm_set_status' && $permissiontoadd && !
GETPOST(
'cancel')) {
607 $res =
$object->setStatut($new_status);
609 $url =
'card.php?track_id=' .
$object->track_id;
610 header(
"Location: " . $url);
620 if ($action ==
"update_extras" && $permissiontoadd) {
623 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
629 $result =
$object->insertExtraFields(empty($triggermodname) ?
'' : $triggermodname, $user);
637 $action =
'edit_extras';
644 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
648 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
649 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
662 $permissiondellink = $user->hasRight(
'ticket',
'write');
663 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
666 include DOL_DOCUMENT_ROOT .
'/core/actions_builddoc.inc.php';
669 $triggersendname =
'TICKET_SENTBYMAIL';
671 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
672 $trackid =
'tic' .
$object->id;
673 include DOL_DOCUMENT_ROOT .
'/core/actions_sendmails.inc.php';
676 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
677 $action =
'presend_addmessage';
686$userstat =
new User($db);
687$form =
new Form($db);
690if (isModEnabled(
'project')) {
694$help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
696$title = $actionobject->getTitle($action);
698llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-ticket page-card');
700if ($action ==
'create' || $action ==
'presend') {
701 if (empty($permissiontoadd)) {
709 $formticket->trackid =
'';
710 $formticket->withfromsocid = $socid ? $socid : $user->socid;
711 $formticket->withfromcontactid = $contactid ? $contactid :
'';
712 $formticket->withtitletopic = 1;
713 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (
getDolGlobalString(
'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION') ? 1 : 0));
714 $formticket->withusercreate = 0;
715 $formticket->withref = 1;
716 $formticket->fk_user_create = $user->id;
717 $formticket->withfile = 2;
718 $formticket->withextrafields = 1;
719 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
721 $formticket->withcancel = 1;
724 if (
GETPOST(
"mode",
"aZ09") ==
'init') {
725 $formticket->clear_attached_files();
728 $formticket->showForm(1,
'create', 0,
null, $action,
$object);
731} elseif ($action ==
'edit' && $user->rights->ticket->write &&
$object->status < Ticket::STATUS_CLOSED) {
732 if (empty($permissiontoadd)) {
742 $formticket->trackid =
$object->track_id;
743 $formticket->withfromsocid =
$object->socid;
744 $formticket->withtitletopic = 1;
746 $formticket->withnotifytiersatcreate = 0;
747 $formticket->withusercreate = 0;
748 $formticket->withref = 1;
749 $formticket->fk_user_create = $user->id;
750 $formticket->withfile = 0;
751 $formticket->action =
'update';
752 $formticket->withextrafields = 1;
753 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
755 $formticket->withcancel = 1;
757 $formticket->showForm(0,
'edit', 0,
null, $action,
$object);
760} 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'])) {
761 if (!empty($res) && $res > 0) {
763 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') &&
$object->fk_user_assign != $user->id) && !$user->hasRight(
'ticket',
'manage')) {
769 if ($action ==
'close') {
770 $thirdparty_contacts =
$object->getInfosTicketExternalContact(1);
771 $contacts_select = array(
772 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
773 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
775 foreach ($thirdparty_contacts as $thirdparty_contact) {
776 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
781 $formquestion = array(
783 'name' =>
'contactid',
785 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
786 'values' => $contacts_select,
787 'default' => $default
791 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
794 if ($action ==
'abandon') {
795 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
798 if ($action ==
'delete') {
799 print $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
802 if ($action ==
'reopen') {
803 print $form->formconfirm($url_page_current.
'?track_id='.
$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
806 if ($action ==
'set_status') {
807 $new_status =
GETPOST(
'new_status');
809 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);
813 if ($projectid > 0) {
814 $projectstat =
new Project($db);
815 if ($projectstat->fetch($projectid) > 0) {
816 $projectstat->fetch_thirdparty();
820 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
826 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
828 print
'<table class="border centpercent">';
830 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
833 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
835 if (!$user->hasRight(
'projet',
'all',
'lire')) {
836 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
837 $projectstat->next_prev_filter =
"rowid IN (".$db->sanitize(count($objectsListId) ? implode(
',', array_keys($objectsListId)) :
'0').
")";
839 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
843 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
846 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
847 print
'<td colspan="3">';
848 if ($projectstat->thirdparty->id > 0) {
849 print $projectstat->thirdparty->getNomUrl(1);
857 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
858 if ($projectstat->public) {
859 print $langs->trans(
'SharedProject');
861 print $langs->trans(
'PrivateProject');
867 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
873 print
"ErrorRecordNotFound";
875 } elseif ($socid > 0) {
881 dol_banner_tab(
$object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
887 $object->next_prev_filter =
"te.fk_user_assign = ".((int) $user->id);
888 } elseif ($user->socid > 0) {
889 $object->next_prev_filter =
"te.fk_soc = ".((int) $user->socid);
896 $morehtmlref =
'<div class="refidno">';
898 if ($user->hasRight(
'ticket',
'write') && !$user->socid) {
899 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editsubject&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetTitle'), 0).
'</a> ';
901 if ($action !=
'editsubject') {
904 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'">';
905 $morehtmlref .=
'<input type="hidden" name="action" value="setsubject">';
906 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
907 $morehtmlref .=
'<input type="hidden" name="id" value="20">';
908 $morehtmlref .=
'<input type="text" class="minwidth300" id="subject" name="subject" value="'.$object->subject.
'" autofocus="">';
909 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button valignmiddle" name="modify" value="'.$langs->trans(
"Modify").
'">';
910 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button button-cancel vlignmiddle" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
911 $morehtmlref .=
'</form>';
916 if (
$object->fk_user_create > 0) {
917 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
919 $fuser =
new User($db);
920 $fuser->fetch(
$object->fk_user_create);
921 $morehtmlref .= $fuser->getNomUrl(-1);
925 $createdfrompublicticket = 0;
926 $createdfromemailcollector = 0;
927 if (!empty(
$object->origin_email) && (empty(
$object->email_msgid) || preg_match(
'/dolibarr\-tic\d+/',
$object->email_msgid))) {
929 $createdfrompublicticket = 1;
930 } elseif (!empty(
$object->email_msgid)) {
932 $createdfromemailcollector = 1;
936 if ($createdfrompublicticket) {
937 $htmltooptip = $langs->trans(
"OriginEmail").
': '.
$object->origin_email;
938 $htmltooptip .=
'<br>'.$langs->trans(
"IP").
': '.
$object->ip;
939 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
940 $morehtmlref .= ($createdbyshown ?
'' : $langs->trans(
"CreatedBy").
' : ');
941 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
942 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
943 } elseif ($createdfromemailcollector) {
944 $langs->load(
"mails");
945 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.
$object->email_msgid;
946 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date(
$object->email_date,
'dayhour');
947 $htmltooltip .=
'<br>'.$langs->trans(
"MailFrom").
': '.
$object->origin_email;
948 $htmltooltip .=
'<br>'.$langs->trans(
"MailReply").
': '.
$object->origin_replyto;
949 $htmltooltip .=
'<br>'.$langs->trans(
"MailReferences").
': '.
$object->origin_references;
950 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
951 $morehtmlref .= ($createdbyshown ?
'' : $langs->trans(
"CreatedBy").
' : ');
952 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
953 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
956 $permissiontoedit =
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write');
960 if (isModEnabled(
"societe")) {
961 $morehtmlref .=
'<br>';
962 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
963 if ($action !=
'editcustomer' && $permissiontoedit) {
964 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
966 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.
$object->track_id,
$object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
968 $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>';
973 if (isModEnabled(
'project')) {
974 $langs->load(
"projects");
975 $morehtmlref .=
'<br>';
976 if ($permissiontoedit) {
978 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object(
$object->project) &&
$object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
979 if ($action !=
'classify') {
980 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
982 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
984 if (!empty(
$object->fk_project)) {
986 $morehtmlref .=
$object->project->getNomUrl(1);
988 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag(
$object->project->title).
'</span>';
997 if (isModEnabled(
'contract')) {
998 $langs->load(
'contracts');
999 $morehtmlref .=
'<br>';
1000 if ($permissiontoedit) {
1001 $morehtmlref .=
img_picto($langs->trans(
"Contract"),
'contract',
'class="pictofixedwidth"');
1002 if ($action ==
'edit_contrat') {
1004 $morehtmlref .= $formcontract->formSelectContract($_SERVER[
"PHP_SELF"].
'?id='.
$object->id,
$object->socid,
$object->fk_contract,
'contratid', 0, 1, 1, 1);
1006 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edit_contrat&token='.
newToken().
'&id='.
$object->id.
'">';
1007 $morehtmlref .=
img_edit($langs->trans(
'SetContract'));
1008 $morehtmlref .=
'</a>';
1011 if (!empty(
$object->fk_contract)) {
1012 $contratstatic =
new Contrat($db);
1013 $contratstatic->fetch(
$object->fk_contract);
1015 $morehtmlref .= $contratstatic->getNomUrl(0,
'', 1);
1021 $morehtmlref .=
'</div>';
1023 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1025 dol_banner_tab(
$object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1027 print
'<div class="fichecenter">';
1028 print
'<div class="fichehalfleft">';
1029 print
'<div class="underbanner clearboth"></div>';
1031 print
'<table class="border tableforfield centpercent">';
1034 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1035 if (!empty(
$object->track_id)) {
1038 print $form->showrefnav(
$object,
'id', $linkback, 1,
'rowid',
'track_id');
1043 print $langs->trans(
'None');
1057 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1080 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1081 if (!empty(
$object->date_read)) {
1089 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1090 if (!empty(
$object->date_close)) {
1097 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1098 print $langs->trans(
"AssignedTo");
1099 if (isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->hasRight(
'ticket',
'manage')) {
1100 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>';
1102 print
'</td></tr></table>';
1104 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" &&
$object->fk_user_assign > 0) {
1105 $userstat->fetch(
$object->fk_user_assign);
1106 print $userstat->getNomUrl(-1);
1110 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" &&
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write')) {
1111 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1112 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1113 print
'<input type="hidden" name="action" value="assign_user">';
1114 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1116 print $form->select_dolusers(empty(
$object->fk_user_assign) ? $user->id :
$object->fk_user_assign,
'fk_user_assign', 1);
1117 print
' <input type="submit" class="button smallpaddingimp" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1124 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1125 print $langs->trans(
'Progression').
'</td><td class="left">';
1127 if ($action !=
'progression' && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED && !$user->socid) {
1128 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>';
1130 print
'</tr></table>';
1132 if ($user->hasRight(
'ticket',
'write') && $action ==
'progression') {
1133 print
'<form action="'.$url_page_current.
'" method="post">';
1134 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1135 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1136 print
'<input type="hidden" name="action" value="set_progression">';
1137 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1138 print
' <input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Modify').
'">';
1147 if (isModEnabled(
'intervention')) {
1149 $num = count(
$object->linkedObjects);
1153 foreach (
$object->linkedObjects as $objecttype => $objects) {
1154 if ($objecttype ==
"fichinter") {
1155 foreach ($objects as $fichinter) {
1158 $timing += $fichinter->duration;
1164 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1171 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1177 print
'</div><div class="fichehalfright">';
1180 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1181 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1182 print
'<input type="hidden" name="action" value="change_property">';
1183 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1184 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1187 print
'<div class="div-table-responsive-no-min">';
1188 print
'<table class="border tableforfield centpercent margintable bordertopimp">';
1189 print
'<tr class="liste_titre">';
1191 print $langs->trans(
'TicketProperties');
1194 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1195 print
'<input type="submit" class="button smallpaddingimp" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1198 if (isset(
$object->status) && (
$object->status < $object::STATUS_NEED_MORE_INFO || !
getDolGlobalInt(
'TICKET_DISALLOW_CLASSIFICATION_MODIFICATION_EVEN_IF_CLOSED')) && $user->hasRight(
'ticket',
'write')) {
1199 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1205 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1208 print
'<td class="titlefield">';
1209 print $langs->trans(
'Type');
1211 $formticket->selectTypesTickets(
$object->type_code,
'update_value_type',
'', 2);
1217 print $langs->trans(
'TicketCategory');
1219 $formticket->selectGroupTickets(
$object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1225 print $langs->trans(
'TicketSeverity');
1227 $formticket->selectSeveritiesTickets(
$object->severity_code,
'update_value_severity',
'', 2);
1232 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1233 if (!empty(
$object->type_code)) {
1234 print $langs->getLabelFromKey($db,
'TicketTypeShort'.
$object->type_code,
'c_ticket_type',
'code',
'label',
$object->type_code);
1239 if (!empty(
$object->category_code)) {
1240 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.
$object->category_code,
'c_ticket_category',
'code',
'label',
$object->category_code);
1242 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1246 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1247 if (!empty(
$object->severity_code)) {
1248 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.
$object->severity_code,
'c_ticket_severity',
'code',
'label',
$object->severity_code);
1258 if (isModEnabled(
'category')) {
1259 print
'<table class="border centpercent tableforfield">';
1261 print
'<td class="valignmiddle titlefield">';
1262 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1263 print $langs->trans(
"Categories");
1264 if ($action !=
'categories' && !$user->socid) {
1265 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>';
1270 if ($user->hasRight(
'ticket',
'write') && $action ==
'categories') {
1271 $cate_arbo = $form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 3);
1272 if (is_array($cate_arbo)) {
1274 print
'<td colspan="3">';
1275 print
'<form action="'.$url_page_current.
'" method="POST">';
1276 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1277 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1278 print
'<input type="hidden" name="action" value="set_categories">';
1281 $cats = $category->containing(
$object->id,
'ticket');
1282 $arrayselected = array();
1283 foreach ($cats as $cat) {
1284 $arrayselected[] = $cat->id;
1287 print
img_picto(
'',
'category',
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'maxwidth500 widthcentpercentminusx', 0, 0);
1288 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Save').
'">';
1293 print
'<td colspan="3">';
1294 print $form->showCategories(
$object->id, Categorie::TYPE_TICKET, 1);
1302 $actionobject->viewTicketOriginalMessage($user, $action,
$object);
1306 print
'<!-- navbar with status -->';
1307 if (!$user->socid && $user->hasRight(
'ticket',
'write') && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED) {
1308 $actionobject->viewStatusActions(
$object);
1313 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1315 print
'<div class="div-table-responsive-no-min">';
1316 print
'<div class="tagtable centpercent noborder allwidth">';
1318 print
'<div class="tagtr liste_titre">';
1319 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1320 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1321 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1322 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1323 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1324 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1325 print
'</div><!-- tagtr -->';
1328 $companystatic =
new Societe($db);
1329 $contactstatic =
new Contact($db);
1330 $userstatic =
new User($db);
1332 foreach (array(
'internal',
'external') as $source) {
1334 $tab = $tmpobject->listeContact(-1, $source);
1335 '@phan-var-force array<array{source:string,id:int,rowid:int,email:string,civility:string,firstname:string,lastname:string,labeltype:string,libelle:string,socid:int,code:string,status:int,statuscontact:string,fk_c_typecontact:string,phone:string,phone_mobile:string,phone_perso?:string,nom:string}> $tab';
1336 $num = is_array($tab) ? 0 : count($tab);
1338 foreach (array_keys($tab) as $i) {
1340 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1342 print
'<div class="tagtd left">';
1343 if ($tab[$i][
'source'] ==
'internal') {
1344 echo $langs->trans(
"User");
1347 if ($tab[$i][
'source'] ==
'external') {
1348 echo $langs->trans(
"ThirdPartyContact");
1352 print
'<div class="tagtd left">';
1354 if ($tab[$i][
'socid'] > 0) {
1355 $companystatic->fetch($tab[$i][
'socid']);
1356 echo $companystatic->getNomUrl(-1);
1358 if ($tab[$i][
'socid'] < 0) {
1361 if (!$tab[$i][
'socid']) {
1366 print
'<div class="tagtd">';
1367 if ($tab[$i][
'source'] ==
'internal') {
1368 if ($userstatic->fetch($tab[$i][
'id'])) {
1369 print $userstatic->getNomUrl(-1);
1372 if ($tab[$i][
'source'] ==
'external') {
1373 if ($contactstatic->fetch($tab[$i][
'id'])) {
1374 print $contactstatic->getNomUrl(-1);
1378 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1380 print
'<div class="tagtd">';
1384 if (!empty($tab[$i][
'phone_perso'])) {
1386 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'', 0, 0,
'AC_TEL').
'<br>';
1388 if (!empty($tab[$i][
'phone_mobile'])) {
1390 print
dol_print_phone($tab[$i][
'phone_mobile'],
'', 0, 0,
'AC_TEL').
'<br>';
1394 print
'<div class="tagtd center">';
1396 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1399 if ($tab[$i][
'source'] ==
'internal') {
1400 $userstatic->id = $tab[$i][
'id'];
1401 $userstatic->lastname = $tab[$i][
'lastname'];
1402 $userstatic->firstname = $tab[$i][
'firstname'];
1403 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1405 if ($tab[$i][
'source'] ==
'external') {
1406 $contactstatic->id = $tab[$i][
'id'];
1407 $contactstatic->lastname = $tab[$i][
'lastname'];
1408 $contactstatic->firstname = $tab[$i][
'firstname'];
1409 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1417 print
'</div><!-- tagtr -->';
1423 print
'</div><!-- contact list -->';
1427 print
'</div></div>';
1428 print
'<div class="clearboth"></div>';
1434 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1435 print
'<div class="tabsAction">'.
"\n";
1436 $parameters = array();
1437 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
1442 if (empty($reshook)) {
1444 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1445 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',
'');
1449 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1450 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1456 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1458 if (
$object->fk_soc > 0 && isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1459 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,
'');
1463 if (isset(
$object->status) &&
$object->status >= 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1464 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1468 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1469 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1473 if (!$user->socid && (isset(
$object->status) && (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1478 if ($permissiontoedit) {
1479 print
dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.
newToken(),
'', $permissiontoedit);
1483 if ($user->hasRight(
'ticket',
'delete') && !$user->socid) {
1487 print
'</div>'.
"\n";
1491 if (
GETPOST(
'modelselected')) {
1492 $action =
'presend';
1495 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1496 $action =
'presend_addmessage';
1500 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1505 $outputlangs = $langs;
1508 $newlang =
GETPOST(
'lang_id',
'aZ09');
1510 $newlang =
$object->thirdparty->default_lang;
1512 if (!empty($newlang)) {
1513 $outputlangs =
new Translate(
"", $conf);
1514 $outputlangs->setDefaultLang($newlang);
1517 $arrayoffamiliestoexclude = array(
'objectamount');
1519 $action =
'add_message';
1520 $modelmail =
'ticket_send';
1523 $morehtmlright =
'';
1527 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1531 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1533 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1539 $formticket->action = $action;
1540 $formticket->track_id =
$object->track_id;
1541 $formticket->ref =
$object->ref;
1542 $formticket->id =
$object->id;
1543 $formticket->trackid =
'tic'.$object->id;
1545 $formticket->withfile = 2;
1546 $formticket->withcancel = 1;
1547 $formticket->param = array(
'fk_user_create' => $user->id);
1548 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1551 $formticket->param[
'models'] = $modelmail;
1552 $formticket->param[
'models_id'] =
GETPOSTINT(
'modelmailselected');
1554 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.
$object->track_id;
1556 $formticket->withsubstit = 1;
1557 $formticket->substit = $substitutionarray;
1558 $formticket->backtopage = $backtopage;
1560 $formticket->showMessageForm(
'100%');
1566 $param =
'&id='.$object->id;
1567 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1568 $param .=
'&contextpage='.$contextpage;
1570 if ($limit > 0 && $limit != $conf->liste_limit) {
1571 $param .=
'&limit='.$limit;
1574 $param .=
'&actioncode='.urlencode($actioncode);
1576 if ($search_agenda_label) {
1577 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1580 $morehtmlright =
'';
1582 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.
$object->track_id;
1583 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1586 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1587 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1588 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', (
int) $btnstatus);
1591 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1592 $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);
1593 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', (
int) $btnstatus);
1595 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1599 $filters[
'search_agenda_label'] = $search_agenda_label;
1600 $filters[
'search_rowid'] = $search_rowid;
1602 show_actions_messaging($conf, $langs, $db,
$object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1605 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1606 print
'<div class="fichecenter"><div class="fichehalfleft">';
1607 print
'<a name="builddoc"></a>';
1613 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
1614 $genallowed = $permissiontoadd;
1615 $delallowed = $permissiontodelete;
1619 $codelang =
$object->thirdparty->default_lang;
1622 print $formfile->showdocuments(
'ticket', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'', 0,
'', $codelang);
1625 $linktoelem = $form->showLinkToObjectBlock(
$object,
null, array(
'ticket'));
1626 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
1629 print
'<br><!-- Link to public interface -->'.
"\n";
1634 print
'<div class="fichehalfright">';
1638 $morehtmlcenter =
'<div class="nowraponall">';
1639 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.
$object->id);
1640 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.
$object->id);
1641 $morehtmlcenter .=
'</div>';
1644 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1646 $somethingshown = $formactions->showactions(
$object,
'ticket', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class Actions of the module ticket.
Class to manage categories.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
societe_prepare_head(Societe $object)
Return array of tabs to used on pages for third parties cards.
convertSecondToTime($iSecond, $format='all', $lengthOfDay=86400, $lengthOfWeek=7)
Return, in clear text, value of a number of seconds in days, hours and minutes.
show_actions_messaging($conf, $langs, $db, $filterobj, $objcon=null, $noprint=0, $actioncode='', $donetodo='done', $filters=array(), $sortfield='a.datep, a.id', $sortorder='DESC')
Show html area with actions in messaging format.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_print_phone($phone, $countrycode='', $cid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0, $morecss='paddingright')
Format phone numbers according to country.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
roundUpToNextMultiple($n, $x=5)
Round to next multiple.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
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.
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 a Dolibarr global constant string value.
dolPrintLabel($s)
Return a string label (so on 1 line only and that should not contains any HTML) ready to be output on...
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
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.