29 require
'../main.inc.php';
30 require_once DOL_DOCUMENT_ROOT.
'/ticket/class/actions_ticket.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formticket.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/lib/ticket.lib.php';
33 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
34 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
35 require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
36 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
37 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
39 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
40 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
41 include_once DOL_DOCUMENT_ROOT.
'/core/lib/project.lib.php';
44 include_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
45 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
46 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcontract.class.php';
50 $langs->loadLangs(array(
"companies",
"other",
"ticket"));
54 $socid =
GETPOST(
'socid',
'int');
55 $track_id =
GETPOST(
'track_id',
'alpha', 3);
57 $projectid =
GETPOST(
'projectid',
'int');
58 $cancel =
GETPOST(
'cancel',
'alpha');
59 $action =
GETPOST(
'action',
'aZ09');
60 $backtopage =
GETPOST(
'backtopage',
'alpha');
61 $contactid =
GETPOST(
'contactid',
'int');
63 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
65 $sortfield =
GETPOST(
'sortfield',
'aZ09comma') ?
GETPOST(
'sortfield',
'aZ09comma') :
"a.datep";
66 $sortorder =
GETPOST(
'sortorder',
'aZ09comma') ?
GETPOST(
'sortorder',
'aZ09comma') :
"desc";
68 if (
GETPOST(
'actioncode',
'array')) {
69 $actioncode =
GETPOST(
'actioncode',
'array', 3);
70 if (!count($actioncode)) {
76 $search_agenda_label =
GETPOST(
'search_agenda_label');
79 $hookmanager->initHooks(array(
'ticketcard',
'globalcard'));
85 $extrafields->fetch_name_optionals_label($object->table_element);
87 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element,
'',
'search_');
90 $search_all =
GETPOST(
"search_all",
'alpha');
92 foreach ($object->fields as $key => $val) {
93 if (
GETPOST(
'search_'.$key,
'alpha')) {
94 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
98 if (empty($action) && empty($id) && empty($ref)) {
103 if (
GETPOST(
'modelselected',
'alpha')) {
109 if ($id || $track_id || $ref) {
110 $res = $object->fetch($id, $ref, $track_id);
113 $track_id = $object->track_id;
118 $url_page_current = DOL_URL_ROOT.
'/ticket/card.php';
121 if ($user->socid > 0) $socid = $user->socid;
124 $triggermodname =
'TICKET_MODIFY';
125 $permissiontoadd = $user->rights->ticket->write;
129 $upload_dir = $conf->ticket->dir_output;
139 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
145 if (empty($reshook)) {
147 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
149 $search_agenda_label =
'';
152 $backurlforlist = DOL_URL_ROOT.
'/ticket/list.php';
154 if (empty($backtopage) || ($cancel && empty($id))) {
155 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
156 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
157 $backtopage = $backurlforlist;
159 $backtopage = DOL_URL_ROOT.
'/ticket/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
165 if (!empty($backtopageforcancel)) {
166 header(
"Location: ".$backtopageforcancel);
168 } elseif (!empty($backtopage)) {
169 header(
"Location: ".$backtopage);
176 if (
GETPOST(
'save',
'alpha') && !empty($user->rights->ticket->write)) {
179 if (!
GETPOST(
"type_code",
'alpha')) {
181 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketTypeRequest")),
null,
'errors');
183 } elseif (!
GETPOST(
"category_code",
'alpha')) {
185 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketCategory")),
null,
'errors');
187 } elseif (!
GETPOST(
"severity_code",
'alpha')) {
189 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketSeverity")),
null,
'errors');
191 } elseif (!
GETPOST(
"subject",
'alphanohtml')) {
193 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
195 } elseif (!
GETPOST(
"message",
'restricthtml')) {
197 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Message")),
null,
'errors');
200 $ret = $extrafields->setOptionalsFromPost(
null, $object);
208 $object->ref =
GETPOST(
"ref",
'alphanohtml');
209 $object->fk_soc =
GETPOST(
"socid",
'int') > 0 ?
GETPOST(
"socid",
'int') : 0;
210 $object->subject =
GETPOST(
"subject",
'alphanohtml');
211 $object->message =
GETPOST(
"message",
'restricthtml');
213 $object->type_code =
GETPOST(
"type_code",
'alpha');
214 $object->type_label = $langs->trans($langs->getLabelFromKey($db, $object->type_code,
'c_ticket_type',
'code',
'label'));
215 $object->category_code =
GETPOST(
"category_code",
'alpha');
216 $object->category_label = $langs->trans($langs->getLabelFromKey($db, $object->category_code,
'c_ticket_category',
'code',
'label'));
217 $object->severity_code =
GETPOST(
"severity_code",
'alpha');
218 $object->severity_label = $langs->trans($langs->getLabelFromKey($db, $object->severity_code,
'c_ticket_severity',
'code',
'label'));
219 $object->email_from = $user->email;
220 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
221 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
222 $fk_user_assign =
GETPOST(
"fk_user_assign",
'int');
223 if ($fk_user_assign > 0) {
224 $object->fk_user_assign = $fk_user_assign;
225 $object->status = $object::STATUS_ASSIGNED;
228 $object->fk_project = $projectid;
230 $id = $object->create($user);
239 $contactid =
GETPOST(
'contactid',
'int');
240 $type_contact =
GETPOST(
"type",
'alpha');
243 $categories =
GETPOST(
'categories',
'array');
244 $object->setCategories($categories);
246 if ($contactid > 0 && $type_contact) {
248 $result = $object->add_contact($contactid, $typeid,
'external');
252 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
253 $projectid =
GETPOST(
'originid',
'int');
255 $projectid =
GETPOST(
'projectid',
'int');
258 if ($projectid > 0) {
259 $object->setProject($projectid);
263 if (!empty($conf->global->TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND) && $user->rights->ticket->write) {
264 if ( ! $object->markAsRead($user) > 0) {
270 if (!empty($conf->global->TICKET_AUTO_ASSIGN_USER_CREATE)) {
271 $result = $object->assignUser($user, $user->id, 1);
272 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
278 $object->copyFilesForTicket();
284 if (!empty($backtopage)) {
288 $url =
'card.php?track_id='.urlencode($object->track_id);
291 $url =
'card.php?track_id='.urlencode($object->track_id);
294 header(
"Location: ".$url);
306 if ($action ==
'update' && $user->rights->ticket->write && $object->status < Ticket::STATUS_CLOSED) {
312 array_push($object->errors, $langs->trans(
'ErrorTicketIsNotValid'));
317 if (!
GETPOST(
'subject',
'alpha')) {
319 array_push($object->errors, $langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Subject')));
321 $ret = $extrafields->setOptionalsFromPost(
null, $object);
330 $object->subject =
GETPOST(
'subject',
'alpha');
331 $object->type_code =
GETPOST(
'type_code',
'alpha');
332 $object->category_code =
GETPOST(
'category_code',
'alpha');
333 $object->severity_code =
GETPOST(
'severity_code',
'alpha');
335 $ret = $object->update($user);
338 $categories =
GETPOST(
'categories',
'array');
339 $object->setCategories($categories);
355 if (!empty($backtopage)) {
359 $url =
'card.php?track_id='.urlencode($object->track_id);
362 $url =
'card.php?track_id='.urlencode($object->track_id);
365 header(
'Location: '.$url);
371 if ($action ==
"mark_ticket_read" && $user->rights->ticket->write) {
372 $object->fetch(
'',
'',
GETPOST(
"track_id",
'alpha'));
374 if ($object->markAsRead($user) > 0) {
377 header(
"Location: card.php?track_id=".$object->track_id);
386 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $user->rights->ticket->write) {
387 $object->fetch(
'',
'',
GETPOST(
"track_id",
'alpha'));
388 $useroriginassign = $object->fk_user_assign;
389 $usertoassign =
GETPOST(
'fk_user_assign',
'int');
398 $ret = $object->assignUser($user, $usertoassign);
406 if ($useroriginassign > 0) {
407 $internal_contacts = $object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
408 foreach ($internal_contacts as $key => $contact) {
409 if ($contact[
'id'] !== $usertoassign) {
410 $result = $object->delete_contact($contact[
'rowid']);
419 if ($usertoassign > 0 && $usertoassign!==$useroriginassign) {
420 $result = $object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
430 $object->fetch_user($usertoassign);
435 header(
"Location: card.php?track_id=".$object->track_id);
438 array_push($object->errors, $object->error);
445 if ($action ==
'add_message' &&
GETPOSTISSET(
'btn_add_message') && $user->rights->ticket->read) {
446 $ret = $object->newMessage($user, $action, (
GETPOST(
'private_message',
'alpha') ==
"on" ? 1 : 0), 0);
449 if (!empty($backtopage)) {
452 $url =
'card.php?track_id='.urlencode($object->track_id);
455 header(
"Location: ".$url);
463 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $user->rights->ticket->write) {
464 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
466 if ($object->close($user, ($action ==
"confirm_abandon" ? 1 : 0))) {
469 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
470 header(
"Location: ".$url);
477 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes') {
478 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
479 if ($_SESSION[
'email_customer'] == $object->origin_email || $_SESSION[
'email_customer'] == $object->thirdparty->email) {
480 $object->close($user);
485 setEventMessages(
'<div class="confirm">'.$langs->trans(
'TicketMarkedAsClosed').
'</div>',
null,
'mesgs');
487 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
488 header(
"Location: ".$url);
495 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $user->rights->ticket->delete) {
496 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
497 if ($object->delete($user) > 0) {
498 setEventMessages(
'<div class="confirm">'.$langs->trans(
'TicketDeletedSuccess').
'</div>',
null,
'mesgs');
499 Header(
"Location: ".DOL_URL_ROOT.
"/ticket/list.php");
502 $langs->load(
"errors");
503 $mesg =
'<div class="error">'.$langs->trans($object->error).
'</div>';
510 if ($action ==
'set_thirdparty' && $user->rights->ticket->write) {
511 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
512 $result = $object->setCustomer(
GETPOST(
'editcustomer',
'int'));
513 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
514 header(
"Location: ".$url);
519 if ($action ==
'set_progression' && $user->rights->ticket->write) {
520 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
521 $result = $object->setProgression(
GETPOST(
'progress',
'alpha'));
523 $url =
'card.php?track_id='.$object->track_id;
524 header(
"Location: ".$url);
529 if ($action ==
'set_categories' && $user->rights->ticket->write) {
530 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
531 $result = $object->setCategories(
GETPOST(
'categories',
'array'));
533 $url =
'card.php?track_id='.$object->track_id;
534 header(
"Location: ".$url);
539 if ($action ==
'setsubject' && $user->rights->ticket->write) {
540 if ($object->fetch(
GETPOST(
'id',
'int'))) {
541 if ($action ==
'setsubject') {
542 $object->subject =
GETPOST(
'subject',
'alphanohtml');
545 if ($action ==
'setsubject' && empty($object->subject)) {
547 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
551 if ($object->update($user) >= 0) {
552 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?track_id=".$object->track_id);
562 if ($action ==
'confirm_reopen' && $user->rights->ticket->manage && !
GETPOST(
'cancel')) {
563 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
565 if ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED) {
566 $res = $object->setStatut(Ticket::STATUS_ASSIGNED);
571 $url =
'card.php?track_id='.$object->track_id;
572 header(
"Location: ".$url);
580 } elseif ($action ==
'classin' && $user->rights->ticket->write) {
582 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
583 $object->setProject($projectid);
584 $url =
'card.php?track_id='.$object->track_id;
585 header(
"Location: ".$url);
588 } elseif ($action ==
'setcontract' && $user->rights->ticket->write) {
590 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
591 $object->setContract(
GETPOST(
'contractid',
'int'));
592 $url =
'card.php?track_id='.$object->track_id;
593 header(
"Location: ".$url);
596 } elseif ($action ==
"set_message" && $user->rights->ticket->manage) {
598 $object->fetch(
'',
'',
GETPOST(
'track_id',
'alpha'));
599 $oldvalue_message = $object->message;
600 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
602 $object->message = $fieldtomodify;
603 $ret = $object->update($user);
607 include_once DOL_DOCUMENT_ROOT.
'/core/class/utils_diff.class.php';
611 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
619 } elseif ($action ==
'confirm_set_status' && $user->rights->ticket->write && !
GETPOST(
'cancel')) {
621 if ($object->fetch(
GETPOST(
'id',
'int'),
GETPOST(
'track_id',
'alpha')) >= 0) {
622 $new_status =
GETPOST(
'new_status',
'int');
623 $old_status = $object->status;
624 $res = $object->setStatut($new_status);
627 $log_action = $langs->trans(
'TicketLogStatusChanged', $langs->transnoentities($object->statuts_short[$old_status]), $langs->transnoentities($object->statuts_short[$new_status]));
629 $url =
'card.php?track_id='.$object->track_id;
630 header(
"Location: ".$url);
640 if ($action ==
"update_extras" && !empty($permissiontoadd)) {
641 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
643 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
649 $result = $object->insertExtraFields(empty($triggermodname) ?
'' : $triggermodname, $user);
657 $action =
'edit_extras';
664 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $user->rights->ticket->write) {
665 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
667 $object->type_code =
GETPOST(
'update_value_type',
'aZ09');
668 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
669 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
671 $ret = $object->update($user);
684 $permissiondellink = $user->rights->ticket->write;
685 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
688 $permissiontoadd = $user->rights->ticket->write;
689 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
693 $triggersendname =
'TICKET_SENTBYMAIL';
695 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
696 $trackid =
'tic'.$object->id;
697 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
700 if (
GETPOSTISSET(
'actionbis') && $action ==
'presend') {
701 $action =
'presend_addmessage';
710 $userstat =
new User($db);
717 $help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
719 $title = $actionobject->getTitle($action);
723 if ($action ==
'create' || $action ==
'presend') {
728 $formticket->withfromsocid = $socid ? $socid : $user->socid;
729 $formticket->withfromcontactid = $contactid ? $contactid :
'';
730 $formticket->withtitletopic = 1;
731 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (empty($conf->global->TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION) ? 0 : 1));
732 $formticket->withusercreate = 0;
733 $formticket->withref = 1;
734 $formticket->fk_user_create = $user->id;
735 $formticket->withfile = 2;
736 $formticket->withextrafields = 1;
737 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
738 $formticket->trackid =
'tic'.$object->id;
740 $formticket->withcancel = 1;
742 $formticket->showForm(1,
'create', 0,
null, $action);
794 } elseif (empty($action) || $action ==
'view' || $action ==
'addlink' || $action ==
'dellink' || $action ==
'presend' || $action ==
'presend_addmessage' || $action ==
'close' || $action ==
'abandon' || $action ==
'delete' || $action ==
'editcustomer' || $action ==
'progression' || $action ==
'categories' || $action ==
'reopen'
795 || $action ==
'editsubject' || $action ==
'edit_extras' || $action ==
'update_extras' || $action ==
'edit_extrafields' || $action ==
'set_extrafields' || $action ==
'classify' || $action ==
'sel_contract' || $action ==
'edit_message_init' || $action ==
'set_status' || $action ==
'dellink') {
798 if (!$user->socid && (!empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) {
803 if ($action ==
'close') {
804 $thirdparty_contacts = $object->getInfosTicketExternalContact();
805 $contacts_select = array(
806 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
807 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
809 foreach ($thirdparty_contacts as $thirdparty_contact) {
810 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
814 $default = (!empty($conf->global->TICKET_NOTIFY_AT_CLOSING)) ? -2 : -3;
815 $formquestion = array(
817 'name' =>
'contactid',
819 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
820 'values' => $contacts_select,
821 'default' => $default
825 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
828 if ($action ==
'abandon') {
829 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
832 if ($action ==
'delete') {
833 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
836 if ($action ==
'reopen') {
837 print
$form->formconfirm($url_page_current.
'?track_id='.$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
840 if ($action ==
'set_status') {
841 $new_status =
GETPOST(
'new_status');
843 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->statuts_short[$new_status])),
"confirm_set_status",
'',
'', 1);
847 if ($projectid > 0) {
848 $projectstat =
new Project($db);
849 if ($projectstat->fetch($projectid) > 0) {
850 $projectstat->fetch_thirdparty();
854 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
860 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
862 print
'<table class="border centpercent">';
864 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
867 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
869 if (empty($user->rights->projet->all->lire)) {
870 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
871 $projectstat->next_prev_filter =
" rowid IN (".$db->sanitize(count($objectsListId) ? join(
',', array_keys($objectsListId)) :
'0').
")";
873 print
$form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
877 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
880 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
881 print
'<td colspan="3">';
882 if ($projectstat->thirdparty->id > 0) {
883 print $projectstat->thirdparty->getNomUrl(1);
891 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
892 if ($projectstat->public) {
893 print $langs->trans(
'SharedProject');
895 print $langs->trans(
'PrivateProject');
901 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
907 print
"ErrorRecordNotFound";
909 } elseif ($socid > 0) {
910 $object->fetch_thirdparty();
915 dol_banner_tab($object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
920 if (!$user->socid && !empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY)) {
921 $object->next_prev_filter =
"te.fk_user_assign = '".$user->id.
"'";
922 } elseif ($user->socid > 0) {
923 $object->next_prev_filter =
"te.fk_soc = '".$user->socid.
"'";
930 $morehtmlref =
'<div class="refidno">';
931 $morehtmlref .= $object->subject;
933 if ($object->fk_user_create > 0) {
934 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
936 $fuser =
new User($db);
937 $fuser->fetch($object->fk_user_create);
938 $morehtmlref .= $fuser->getNomUrl(-1);
939 } elseif (!empty($object->email_msgid)) {
940 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
941 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
942 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.$object->email_msgid;
943 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date($object->email_date,
'dayhour');
944 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.
$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
945 } elseif (!empty($object->origin_email)) {
946 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
947 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
948 $htmltooptip = $langs->trans(
"IP").
': '.$object->ip;
949 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.
$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
952 $permissiontoedit = $object->status < 8 && !$user->socid && $user->rights->ticket->write;
957 $morehtmlref .=
'<br>';
958 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
959 if ($action !=
'editcustomer' && $permissiontoedit) {
960 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.
newToken().
'&track_id='.$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
962 $morehtmlref .=
$form->form_thirdparty($url_page_current.
'?track_id='.$object->track_id, $object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
967 $langs->load(
"projects");
968 $morehtmlref .=
'<br>';
969 if ($permissiontoedit) {
970 $object->fetch_project();
971 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object($object->project) && $object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
972 if ($action !=
'classify') {
973 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
975 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, ($action ==
'classify' ? 1 : 0), 0, 1,
'');
977 if (!empty($object->fk_project)) {
978 $object->fetch_project();
979 $morehtmlref .= $object->project->getNomUrl(1);
980 if ($object->project->title) {
981 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($object->project->title).
'</span>';
987 $morehtmlref .=
'</div>';
989 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
991 dol_banner_tab($object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
993 print
'<div class="fichecenter">';
994 print
'<div class="fichehalfleft">';
995 print
'<div class="underbanner clearboth"></div>';
997 print
'<table class="border tableforfield centpercent">';
1000 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1001 if (!empty($object->track_id)) {
1002 if (empty($object->ref)) {
1003 $object->ref = $object->id;
1004 print
$form->showrefnav($object,
'id', $linkback, 1,
'rowid',
'track_id');
1006 print $object->track_id;
1009 print $langs->trans(
'None');
1015 print
$form->editfieldkey(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1017 print
$form->editfieldval(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1021 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1044 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1045 if (!empty($object->date_read)) {
1048 print
' / <i>'.convertSecondToTime(
roundUpToNextMultiple($now - $object->date_read, 60)).
'</i></span>';
1053 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1054 if (!empty($object->date_close)) {
1061 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1062 print $langs->trans(
"AssignedTo");
1063 if (isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->rights->ticket->manage) {
1064 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>';
1066 print
'</td></tr></table>';
1068 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $object->fk_user_assign > 0) {
1069 $userstat->fetch($object->fk_user_assign);
1070 print $userstat->getNomUrl(-1);
1074 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" && $object->status < 8 && !$user->socid && $user->rights->ticket->write) {
1075 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1076 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1077 print
'<input type="hidden" name="action" value="assign_user">';
1078 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1080 print
$form->select_dolusers(empty($object->fk_user_assign)?$user->id:$object->fk_user_assign,
'fk_user_assign', 1);
1081 print
' <input type="submit" class="button small" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1088 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1089 print $langs->trans(
'Progression').
'</td><td class="left">';
1091 if ($action !=
'progression' && isset($object->status) && $object->status < $object::STATUS_CLOSED && !$user->socid) {
1092 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>';
1094 print
'</tr></table>';
1096 if ($user->rights->ticket->write && $action ==
'progression') {
1097 print
'<form action="'.$url_page_current.
'" method="post">';
1098 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1099 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1100 print
'<input type="hidden" name="action" value="set_progression">';
1101 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1102 print
' <input type="submit" class="button button-edit small" value="'.$langs->trans(
'Modify').
'">';
1105 print($object->progress > 0 ? $object->progress :
'0').
'%';
1112 $object->fetchObjectLinked();
1113 $num = count($object->linkedObjects);
1117 foreach ($object->linkedObjects as $objecttype => $objects) {
1118 if ($objecttype =
"fichinter") {
1119 foreach ($objects as $fichinter) {
1121 $timing += $fichinter->duration;
1127 print
$form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1129 print $foundinter ?
convertSecondToTime($timing,
'all', $conf->global->MAIN_DURATION_OF_WORKDAY) :
'';
1134 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1140 print
'</div><div class="fichehalfright">';
1143 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1144 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1145 print
'<input type="hidden" name="action" value="change_property">';
1146 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1147 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1149 print
'<div class="underbanner clearboth"></div>';
1153 print
'<table class="border centpercent tableforfield">';
1155 print
'<td class="valignmiddle titlefield">';
1156 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1157 print $langs->trans(
"Categories");
1158 if ($action !=
'categories' && !$user->socid) {
1159 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>';
1164 if ($user->rights->ticket->write && $action ==
'categories') {
1165 $cate_arbo =
$form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 1);
1166 if (is_array($cate_arbo)) {
1168 print
'<td colspan="3">';
1169 print
'<form action="'.$url_page_current.
'" method="post">';
1170 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1171 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1172 print
'<input type="hidden" name="action" value="set_categories">';
1175 $cats = $category->containing($object->id,
'ticket');
1176 $arrayselected = array();
1177 foreach ($cats as $cat) {
1178 $arrayselected[] = $cat->id;
1181 print
img_picto(
'',
'category').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'quatrevingtpercent widthcentpercentminusx', 0, 0);
1182 print
'<input type="submit" class="button button-edit small" value="'.$langs->trans(
'Save').
'">';
1187 print
'<td colspan="3">';
1188 print
$form->showCategories($object->id, Categorie::TYPE_TICKET, 1);
1196 $actionobject->viewTicketOriginalMessage($user, $action, $object);
1199 print
'<div class="div-table-responsive-no-min">';
1200 print
'<table class="noborder tableforfield centpercent margintable">';
1201 print
'<tr class="liste_titre">';
1203 print $langs->trans(
'TicketProperties');
1206 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1207 print
'<input type="submit" class="button small" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1210 if (isset($object->status) && $object->status < $object::STATUS_NEED_MORE_INFO && $user->rights->ticket->write) {
1211 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1217 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1220 print
'<td class="titlefield">';
1221 print $langs->trans(
'Type');
1223 $formticket->selectTypesTickets($object->type_code,
'update_value_type',
'', 2);
1229 print $langs->trans(
'TicketCategory');
1231 $formticket->selectGroupTickets($object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1237 print $langs->trans(
'TicketSeverity');
1239 $formticket->selectSeveritiesTickets($object->severity_code,
'update_value_severity',
'', 2);
1244 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1245 if (!empty($object->type_code)) {
1246 print $langs->getLabelFromKey($db,
'TicketTypeShort'.$object->type_code,
'c_ticket_type',
'code',
'label', $object->type_code);
1250 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td>';
1251 if (!empty($object->category_code)) {
1252 print $langs->getLabelFromKey($db,
'TicketCategoryShort'.$object->category_code,
'c_ticket_category',
'code',
'label', $object->category_code);
1256 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1257 if (!empty($object->severity_code)) {
1258 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.$object->severity_code,
'c_ticket_severity',
'code',
'label', $object->severity_code);
1268 print
'<!-- navbar with status -->';
1269 if (!$user->socid && $user->rights->ticket->write && isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set') !==
'properties') {
1270 $actionobject->viewStatusActions($object);
1274 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
1275 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1277 print
'<div class="div-table-responsive-no-min">';
1278 print
'<div class="tagtable centpercent noborder allwidth">';
1280 print
'<div class="tagtr liste_titre">';
1281 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1282 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1283 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1284 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1285 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1286 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1287 print
'</div><!-- tagtr -->';
1290 $companystatic =
new Societe($db);
1291 $contactstatic =
new Contact($db);
1292 $userstatic =
new User($db);
1294 foreach (array(
'internal',
'external') as $source) {
1295 $tmpobject = $object;
1296 $tab = $tmpobject->listeContact(-1, $source);
1301 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1303 print
'<div class="tagtd left">';
1304 if ($tab[$i][
'source'] ==
'internal') {
1305 echo $langs->trans(
"User");
1308 if ($tab[$i][
'source'] ==
'external') {
1309 echo $langs->trans(
"ThirdPartyContact");
1313 print
'<div class="tagtd left">';
1315 if ($tab[$i][
'socid'] > 0) {
1316 $companystatic->fetch($tab[$i][
'socid']);
1317 echo $companystatic->getNomUrl(-1);
1319 if ($tab[$i][
'socid'] < 0) {
1320 echo $conf->global->MAIN_INFO_SOCIETE_NOM;
1322 if (!$tab[$i][
'socid']) {
1327 print
'<div class="tagtd">';
1328 if ($tab[$i][
'source'] ==
'internal') {
1329 if ($userstatic->fetch($tab[$i][
'id'])) {
1330 print $userstatic->getNomUrl(-1);
1333 if ($tab[$i][
'source'] ==
'external') {
1334 if ($contactstatic->fetch($tab[$i][
'id'])) {
1335 print $contactstatic->getNomUrl(-1);
1339 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1341 print
'<div class="tagtd">';
1343 print
dol_print_phone($tab[$i][
'phone'],
'',
'',
'',
'AC_TEL').
'<br>';
1345 if (!empty($tab[$i][
'phone_perso'])) {
1347 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'',
'',
'',
'AC_TEL').
'<br>';
1349 if (!empty($tab[$i][
'phone_mobile'])) {
1351 print
dol_print_phone($tab[$i][
'phone_mobile'],
'',
'',
'',
'AC_TEL').
'<br>';
1355 print
'<div class="tagtd center">';
1356 if ($object->status >= 0) {
1357 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1360 if ($tab[$i][
'source'] ==
'internal') {
1361 $userstatic->id = $tab[$i][
'id'];
1362 $userstatic->lastname = $tab[$i][
'lastname'];
1363 $userstatic->firstname = $tab[$i][
'firstname'];
1364 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1366 if ($tab[$i][
'source'] ==
'external') {
1367 $contactstatic->id = $tab[$i][
'id'];
1368 $contactstatic->lastname = $tab[$i][
'lastname'];
1369 $contactstatic->firstname = $tab[$i][
'firstname'];
1370 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1372 if ($object->status >= 0) {
1378 print
'</div><!-- tagtr -->';
1384 print
'</div><!-- contact list -->';
1388 print
'</div></div>';
1389 print
'<div style="clear:both"></div>';
1395 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1396 print
'<div class="tabsAction">'.
"\n";
1398 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
1403 if (empty($reshook)) {
1405 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1406 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',
'');
1410 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1411 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.$object->track_id.
'#formmailbeforetitle',
'');
1417 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1419 if ($object->fk_soc > 0 && isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $user->rights->ficheinter->creer) {
1420 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,
'');
1424 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1425 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.$object->track_id,
'');
1429 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1430 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.$object->track_id,
'');
1434 if (!$user->socid && (isset($object->status) && ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1435 print
dolGetButtonAction(
'', $langs->trans(
'ReOpen'),
'default', $_SERVER[
"PHP_SELF"].
'?action=reopen&token='.
newToken().
'&track_id='.$object->track_id,
'');
1439 if ($user->rights->ticket->delete && !$user->socid) {
1440 print
dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', $_SERVER[
"PHP_SELF"].
'?action=delete&token='.
newToken().
'&track_id='.$object->track_id,
'');
1443 print
'</div>'.
"\n";
1449 if (
GETPOST(
'modelselected')) {
1450 $action =
'presend';
1453 if (
GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1454 $action =
'presend_addmessage';
1458 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1459 if ($object->fk_soc > 0) {
1460 $object->fetch_thirdparty();
1463 $outputlangs = $langs;
1466 $newlang =
GETPOST(
'lang_id',
'aZ09');
1467 } elseif (
getDolGlobalInt(
'MAIN_MULTILANGS') && empty($newlang) && is_object($object->thirdparty)) {
1468 $newlang = $object->thirdparty->default_lang;
1470 if (!empty($newlang)) {
1471 $outputlangs =
new Translate(
"", $conf);
1472 $outputlangs->setDefaultLang($newlang);
1475 $arrayoffamiliestoexclude = array(
'objectamount');
1477 $action =
'add_message';
1478 $modelmail =
'ticket_send';
1481 $morehtmlright =
'';
1484 $morehtmlright .=
$form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1488 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1490 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1496 $formticket->action = $action;
1497 $formticket->track_id = $object->track_id;
1498 $formticket->ref = $object->ref;
1499 $formticket->id = $object->id;
1500 $formticket->trackid =
'tic'.$object->id;
1502 $formticket->withfile = 2;
1503 $formticket->withcancel = 1;
1504 $formticket->param = array(
'fk_user_create' => $user->id);
1505 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1508 $formticket->param[
'models'] = $modelmail;
1509 $formticket->param[
'models_id'] =
GETPOST(
'modelmailselected',
'int');
1511 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.$object->track_id;
1513 $formticket->withsubstit = 1;
1514 $formticket->substit = $substitutionarray;
1515 $formticket->backtopage = $backtopage;
1517 $formticket->showMessageForm(
'100%');
1522 if (!empty($conf->global->TICKET_SHOW_MESSAGES_ON_CARD)) {
1523 $param =
'&id='.$object->id;
1524 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1525 $param .=
'&contextpage='.$contextpage;
1527 if ($limit > 0 && $limit != $conf->liste_limit) {
1528 $param .=
'&limit='.$limit;
1531 $param .=
'&actioncode='.urlencode($actioncode);
1533 if ($search_agenda_label) {
1534 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1537 $morehtmlright =
'';
1539 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.$object->track_id;
1540 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1543 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1544 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1545 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', $btnstatus);
1548 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1549 $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);
1550 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', $btnstatus);
1552 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1556 $filters[
'search_agenda_label'] = $search_agenda_label;
1557 show_actions_messaging($conf, $langs, $db, $object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1560 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1561 print
'<div class="fichecenter"><div class="fichehalfleft">';
1562 print
'<a name="builddoc"></a>';
1565 $linktoelem =
$form->showLinkToObjectBlock($object,
null, array(
'ticket'));
1566 $somethingshown =
$form->showLinkedObjectBlock($object, $linktoelem);
1569 print
'<br><!-- Link to public interface -->'.
"\n";
1573 if (empty($conf->global->TICKET_SHOW_MESSAGES_ON_CARD)) {
1574 print
'<div class="fichehalfright">';
1578 $morehtmlcenter =
'<div class="nowraponall">';
1579 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.$object->id);
1580 $morehtmlcenter .=
' ';
1581 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.$object->id);
1582 $morehtmlcenter .=
'</div>';
1585 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1587 $somethingshown =
$formactions->showactions($object,
'ticket', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif($action=='specimen') elseif($action=='setmodel') elseif($action=='del') elseif($action=='setdoc') $formactions
View.
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 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.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
convertSecondToTime($iSecond, $format='all', $lengthOfDay=86400, $lengthOfWeek=7)
Return, in clear text, value of a number of seconds in days, hours and minutes.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='')
Show tabs of a record.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_phone($phone, $countrycode='', $cid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0)
Format phone numbers according to country.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
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.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
print_barre_liste($titre, $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.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
if(!function_exists('utf8_encode')) if(!function_exists('utf8_decode')) getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null)
Return array of possible common substitutions.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
show_actions_messaging($conf, $langs, $db, $filterobj, $objcon='', $noprint=0, $actioncode='', $donetodo='done', $filters=array(), $sortfield='a.datep, a.id', $sortorder='DESC')
Show html area with actions in messaging format.
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.