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 $backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
62 $contactid =
GETPOST(
'contactid',
'int');
64 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
66 $sortfield =
GETPOST(
'sortfield',
'aZ09comma') ?
GETPOST(
'sortfield',
'aZ09comma') :
"a.datep";
67 $sortorder =
GETPOST(
'sortorder',
'aZ09comma') ?
GETPOST(
'sortorder',
'aZ09comma') :
"desc";
69 if (
GETPOST(
'actioncode',
'array')) {
70 $actioncode =
GETPOST(
'actioncode',
'array', 3);
71 if (!count($actioncode)) {
75 $actioncode =
GETPOST(
"actioncode",
"alpha", 3) ?
GETPOST(
"actioncode",
"alpha", 3) : (
GETPOST(
"actioncode") ==
'0' ?
'0' : (empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT) ?
'' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT));
77 $search_rowid =
GETPOST(
'search_rowid');
78 $search_agenda_label =
GETPOST(
'search_agenda_label');
81 $hookmanager->initHooks(array(
'ticketcard',
'globalcard'));
87 $extrafields->fetch_name_optionals_label($object->table_element);
89 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element,
'',
'search_');
92 $search_all =
GETPOST(
"search_all",
'alpha');
94 foreach ($object->fields as $key => $val) {
95 if (
GETPOST(
'search_'.$key,
'alpha')) {
96 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
100 if (empty($action) && empty($id) && empty($ref)) {
105 if (
GETPOST(
'modelselected',
'alpha')) {
111 if ($id || $track_id || $ref) {
112 $res = $object->fetch($id, $ref, $track_id);
115 $track_id = $object->track_id;
124 $url_page_current = DOL_URL_ROOT.
'/ticket/card.php';
127 if ($user->socid > 0) $socid = $user->socid;
130 $triggermodname =
'TICKET_MODIFY';
131 $permissiontoread = $user->hasRight(
'ticket',
'read');
132 $permissiontoadd = $user->hasRight(
'ticket',
'write');
133 $permissiontodelete = $user->hasRight(
'ticket',
'delete');
135 $upload_dir = $conf->ticket->dir_output;
144 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
150 if (empty($reshook)) {
152 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
154 $search_agenda_label =
'';
157 $backurlforlist = DOL_URL_ROOT.
'/ticket/list.php';
159 if (empty($backtopage) || ($cancel && empty($id))) {
160 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
161 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
162 $backtopage = $backurlforlist;
164 $backtopage = DOL_URL_ROOT.
'/ticket/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
170 if (!empty($backtopageforcancel)) {
171 header(
"Location: ".$backtopageforcancel);
173 } elseif (!empty($backtopage)) {
174 header(
"Location: ".$backtopage);
181 if (
GETPOST(
'save',
'alpha') && $permissiontoadd) {
184 if (!
GETPOST(
"type_code",
'alpha')) {
186 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketTypeRequest")),
null,
'errors');
188 } elseif (!
GETPOST(
"category_code",
'alpha')) {
190 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketCategory")),
null,
'errors');
192 } elseif (!
GETPOST(
"severity_code",
'alpha')) {
194 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketSeverity")),
null,
'errors');
196 } elseif (!
GETPOST(
"subject",
'alphanohtml')) {
198 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
200 } elseif (!
GETPOST(
"message",
'restricthtml')) {
202 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Message")),
null,
'errors');
205 $ret = $extrafields->setOptionalsFromPost(
null, $object);
213 $object->ref =
GETPOST(
"ref",
'alphanohtml');
214 $object->fk_soc =
GETPOST(
"socid",
'int') > 0 ?
GETPOST(
"socid",
'int') : 0;
215 $object->subject =
GETPOST(
"subject",
'alphanohtml');
216 $object->message =
GETPOST(
"message",
'restricthtml');
218 $object->type_code =
GETPOST(
"type_code",
'alpha');
219 $object->type_label = $langs->trans($langs->getLabelFromKey($db, $object->type_code,
'c_ticket_type',
'code',
'label'));
220 $object->category_code =
GETPOST(
"category_code",
'alpha');
221 $object->category_label = $langs->trans($langs->getLabelFromKey($db, $object->category_code,
'c_ticket_category',
'code',
'label'));
222 $object->severity_code =
GETPOST(
"severity_code",
'alpha');
223 $object->severity_label = $langs->trans($langs->getLabelFromKey($db, $object->severity_code,
'c_ticket_severity',
'code',
'label'));
224 $object->email_from = $user->email;
225 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
226 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
227 $fk_user_assign =
GETPOST(
"fk_user_assign",
'int');
228 if ($fk_user_assign > 0) {
229 $object->fk_user_assign = $fk_user_assign;
230 $object->status = $object::STATUS_ASSIGNED;
233 $object->fk_project = $projectid;
235 $id = $object->create($user);
244 $contactid =
GETPOST(
'contactid',
'int');
245 $type_contact =
GETPOST(
"type",
'alpha');
248 $categories =
GETPOST(
'categories',
'array');
249 $object->setCategories($categories);
251 if ($contactid > 0 && $type_contact) {
253 $result = $object->add_contact($contactid, $typeid,
'external');
257 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
258 $projectid =
GETPOST(
'originid',
'int');
260 $projectid =
GETPOST(
'projectid',
'int');
263 if ($projectid > 0) {
264 $object->setProject($projectid);
268 if (!empty($conf->global->TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND) && $user->rights->ticket->write) {
269 if ( ! $object->markAsRead($user) > 0) {
275 if (!empty($conf->global->TICKET_AUTO_ASSIGN_USER_CREATE)) {
276 $result = $object->assignUser($user, $user->id, 1);
277 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
283 $object->copyFilesForTicket(
'');
289 if (!empty($backtopage)) {
293 $url =
'card.php?track_id='.urlencode($object->track_id);
296 $url =
'card.php?track_id='.urlencode($object->track_id);
299 header(
"Location: ".$url);
311 if ($action ==
'update' && $permissiontoadd && $object->status < Ticket::STATUS_CLOSED) {
317 array_push($object->errors, $langs->trans(
'ErrorTicketIsNotValid'));
322 if (!
GETPOST(
'subject',
'alpha')) {
324 array_push($object->errors, $langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Subject')));
326 $ret = $extrafields->setOptionalsFromPost(
null, $object);
335 $object->subject =
GETPOST(
'subject',
'alpha');
336 $object->type_code =
GETPOST(
'type_code',
'alpha');
337 $object->category_code =
GETPOST(
'category_code',
'alpha');
338 $object->severity_code =
GETPOST(
'severity_code',
'alpha');
340 $ret = $object->update($user);
343 $categories =
GETPOST(
'categories',
'array');
344 $object->setCategories($categories);
360 if (!empty($backtopage)) {
364 $url =
'card.php?track_id='.urlencode($object->track_id);
367 $url =
'card.php?track_id='.urlencode($object->track_id);
370 header(
'Location: '.$url);
376 if ($action ==
"mark_ticket_read" && $permissiontoadd) {
377 $object->fetch(
'',
'',
GETPOST(
"track_id",
'alpha'));
379 if ($object->markAsRead($user) > 0) {
382 header(
"Location: card.php?track_id=".$object->track_id);
391 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $permissiontoadd) {
392 $object->fetch(
'',
'',
GETPOST(
"track_id",
'alpha'));
393 $useroriginassign = $object->fk_user_assign;
394 $usertoassign =
GETPOST(
'fk_user_assign',
'int');
403 $ret = $object->assignUser($user, $usertoassign);
411 if ($useroriginassign > 0) {
412 $internal_contacts = $object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
413 foreach ($internal_contacts as $key => $contact) {
414 if ($contact[
'id'] !== $usertoassign) {
415 $result = $object->delete_contact($contact[
'rowid']);
424 if ($usertoassign > 0 && $usertoassign!==$useroriginassign) {
425 $result = $object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
435 $object->fetch_user($usertoassign);
440 header(
"Location: card.php?track_id=".$object->track_id);
443 array_push($object->errors, $object->error);
450 if ($action ==
'add_message' &&
GETPOSTISSET(
'btn_add_message') && $permissiontoread) {
451 $ret = $object->newMessage($user, $action, (
GETPOST(
'private_message',
'alpha') ==
"on" ? 1 : 0), 0);
454 if (!empty($backtopage)) {
457 $url =
'card.php?track_id='.urlencode($object->track_id);
460 header(
"Location: ".$url);
468 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
469 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
471 if ($object->close($user, ($action ==
"confirm_abandon" ? 1 : 0))) {
474 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
475 header(
"Location: ".$url);
482 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
483 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
484 if ($_SESSION[
'email_customer'] == $object->origin_email || $_SESSION[
'email_customer'] == $object->thirdparty->email) {
485 $object->close($user);
490 setEventMessages(
'<div class="confirm">'.$langs->trans(
'TicketMarkedAsClosed').
'</div>',
null,
'mesgs');
492 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
493 header(
"Location: ".$url);
500 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
501 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
502 if ($object->delete($user) > 0) {
503 setEventMessages(
'<div class="confirm">'.$langs->trans(
'TicketDeletedSuccess').
'</div>',
null,
'mesgs');
504 Header(
"Location: ".DOL_URL_ROOT.
"/ticket/list.php");
507 $langs->load(
"errors");
508 $mesg =
'<div class="error">'.$langs->trans($object->error).
'</div>';
515 if ($action ==
'set_thirdparty' && $user->rights->ticket->write) {
516 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
517 $result = $object->setCustomer(
GETPOST(
'editcustomer',
'int'));
518 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
519 header(
"Location: ".$url);
524 if ($action ==
'set_progression' && $user->rights->ticket->write) {
525 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
526 $result = $object->setProgression(
GETPOST(
'progress',
'alpha'));
528 $url =
'card.php?track_id='.$object->track_id;
529 header(
"Location: ".$url);
534 if ($action ==
'set_categories' && $user->rights->ticket->write) {
535 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
536 $result = $object->setCategories(
GETPOST(
'categories',
'array'));
538 $url =
'card.php?track_id='.$object->track_id;
539 header(
"Location: ".$url);
544 if ($action ==
'setsubject' && $user->rights->ticket->write) {
545 if ($object->fetch(
GETPOST(
'id',
'int'))) {
546 if ($action ==
'setsubject') {
547 $object->subject =
GETPOST(
'subject',
'alphanohtml');
550 if ($action ==
'setsubject' && empty($object->subject)) {
552 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
556 if ($object->update($user) >= 0) {
557 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?track_id=".$object->track_id);
567 if ($action ==
'confirm_reopen' && $user->rights->ticket->manage && !
GETPOST(
'cancel')) {
568 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
570 if ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED) {
571 $res = $object->setStatut(Ticket::STATUS_ASSIGNED);
576 $url =
'card.php?track_id='.$object->track_id;
577 header(
"Location: ".$url);
585 } elseif ($action ==
'classin' && $permissiontoadd) {
587 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
588 $object->setProject($projectid);
589 $url =
'card.php?track_id='.$object->track_id;
590 header(
"Location: ".$url);
593 } elseif ($action ==
'setcontract' && $permissiontoadd) {
595 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
596 $object->setContract(
GETPOST(
'contractid',
'int'));
597 $url =
'card.php?track_id='.$object->track_id;
598 header(
"Location: ".$url);
601 } elseif ($action ==
"set_message" && $user->rights->ticket->manage) {
603 $object->fetch(
'',
'',
GETPOST(
'track_id',
'alpha'));
604 $oldvalue_message = $object->message;
605 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
607 $object->message = $fieldtomodify;
608 $ret = $object->update($user);
612 include_once DOL_DOCUMENT_ROOT.
'/core/class/utils_diff.class.php';
616 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
624 } elseif ($action ==
'confirm_set_status' && $permissiontoadd && !
GETPOST(
'cancel')) {
626 if ($object->fetch(
GETPOST(
'id',
'int'),
GETPOST(
'track_id',
'alpha')) >= 0) {
627 $new_status =
GETPOST(
'new_status',
'int');
628 $old_status = $object->status;
629 $res = $object->setStatut($new_status);
632 $log_action = $langs->trans(
'TicketLogStatusChanged', $langs->transnoentities($object->statuts_short[$old_status]), $langs->transnoentities($object->statuts_short[$new_status]));
634 $url =
'card.php?track_id='.$object->track_id;
635 header(
"Location: ".$url);
645 if ($action ==
"update_extras" && $permissiontoadd) {
646 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
648 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
654 $result = $object->insertExtraFields(empty($triggermodname) ?
'' : $triggermodname, $user);
662 $action =
'edit_extras';
669 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
670 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
672 $object->type_code =
GETPOST(
'update_value_type',
'aZ09');
673 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
674 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
676 $ret = $object->update($user);
689 $permissiondellink = $user->rights->ticket->write;
690 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
693 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
697 $triggersendname =
'TICKET_SENTBYMAIL';
699 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
700 $trackid =
'tic'.$object->id;
701 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
704 if (
GETPOSTISSET(
'actionbis') && $action ==
'presend') {
705 $action =
'presend_addmessage';
714 $userstat =
new User($db);
721 $help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
723 $title = $actionobject->getTitle($action);
727 if ($action ==
'create' || $action ==
'presend') {
732 $formticket->trackid =
'';
733 $formticket->withfromsocid = $socid ? $socid : $user->socid;
734 $formticket->withfromcontactid = $contactid ? $contactid :
'';
735 $formticket->withtitletopic = 1;
736 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (empty($conf->global->TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION) ? 0 : 1));
737 $formticket->withusercreate = 0;
738 $formticket->withref = 1;
739 $formticket->fk_user_create = $user->id;
740 $formticket->withfile = 2;
741 $formticket->withextrafields = 1;
742 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
744 $formticket->withcancel = 1;
746 $formticket->showForm(1,
'create', 0,
null, $action);
798 } 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'
799 || $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') {
802 if (!$user->socid && (!empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) {
807 if ($action ==
'close') {
808 $thirdparty_contacts = $object->getInfosTicketExternalContact();
809 $contacts_select = array(
810 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
811 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
813 foreach ($thirdparty_contacts as $thirdparty_contact) {
814 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
818 $default = (!empty($conf->global->TICKET_NOTIFY_AT_CLOSING)) ? -2 : -3;
819 $formquestion = array(
821 'name' =>
'contactid',
823 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
824 'values' => $contacts_select,
825 'default' => $default
829 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
832 if ($action ==
'abandon') {
833 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
836 if ($action ==
'delete') {
837 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
840 if ($action ==
'reopen') {
841 print
$form->formconfirm($url_page_current.
'?track_id='.$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
844 if ($action ==
'set_status') {
845 $new_status =
GETPOST(
'new_status');
847 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);
851 if ($projectid > 0) {
852 $projectstat =
new Project($db);
853 if ($projectstat->fetch($projectid) > 0) {
854 $projectstat->fetch_thirdparty();
858 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
864 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
866 print
'<table class="border centpercent">';
868 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
871 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
873 if (empty($user->rights->projet->all->lire)) {
874 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
875 $projectstat->next_prev_filter =
" rowid IN (".$db->sanitize(count($objectsListId) ? join(
',', array_keys($objectsListId)) :
'0').
")";
877 print
$form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
881 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
884 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
885 print
'<td colspan="3">';
886 if ($projectstat->thirdparty->id > 0) {
887 print $projectstat->thirdparty->getNomUrl(1);
895 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
896 if ($projectstat->public) {
897 print $langs->trans(
'SharedProject');
899 print $langs->trans(
'PrivateProject');
905 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
911 print
"ErrorRecordNotFound";
913 } elseif ($socid > 0) {
914 $object->fetch_thirdparty();
919 dol_banner_tab($object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
924 if (!$user->socid && !empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY)) {
925 $object->next_prev_filter =
"te.fk_user_assign = '".$user->id.
"'";
926 } elseif ($user->socid > 0) {
927 $object->next_prev_filter =
"te.fk_soc = '".$user->socid.
"'";
934 $morehtmlref =
'<div class="refidno">';
935 $morehtmlref .= $object->subject;
937 if ($object->fk_user_create > 0) {
938 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
940 $fuser =
new User($db);
941 $fuser->fetch($object->fk_user_create);
942 $morehtmlref .= $fuser->getNomUrl(-1);
943 } elseif (!empty($object->email_msgid)) {
944 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
945 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
946 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.$object->email_msgid;
947 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date($object->email_date,
'dayhour');
948 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.
$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
949 } elseif (!empty($object->origin_email)) {
950 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
951 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
952 $htmltooptip = $langs->trans(
"IP").
': '.$object->ip;
953 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.
$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
956 $permissiontoedit = $object->status < 8 && !$user->socid && $user->rights->ticket->write;
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);
971 $langs->load(
"projects");
972 $morehtmlref .=
'<br>';
973 if ($permissiontoedit) {
974 $object->fetch_project();
975 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object($object->project) && $object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
976 if ($action !=
'classify') {
977 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
979 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
981 if (!empty($object->fk_project)) {
982 $object->fetch_project();
983 $morehtmlref .= $object->project->getNomUrl(1);
984 if ($object->project->title) {
985 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($object->project->title).
'</span>';
991 $morehtmlref .=
'</div>';
993 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
995 dol_banner_tab($object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
997 print
'<div class="fichecenter">';
998 print
'<div class="fichehalfleft">';
999 print
'<div class="underbanner clearboth"></div>';
1001 print
'<table class="border tableforfield centpercent">';
1004 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1005 if (!empty($object->track_id)) {
1006 if (empty($object->ref)) {
1007 $object->ref = $object->id;
1008 print
$form->showrefnav($object,
'id', $linkback, 1,
'rowid',
'track_id');
1010 print $object->track_id;
1013 print $langs->trans(
'None');
1019 print
$form->editfieldkey(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1021 print
$form->editfieldval(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1025 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1048 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1049 if (!empty($object->date_read)) {
1052 print
' / <i>'.convertSecondToTime(
roundUpToNextMultiple($now - $object->date_read, 60)).
'</i></span>';
1057 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1058 if (!empty($object->date_close)) {
1065 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1066 print $langs->trans(
"AssignedTo");
1067 if (isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->rights->ticket->manage) {
1068 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>';
1070 print
'</td></tr></table>';
1072 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $object->fk_user_assign > 0) {
1073 $userstat->fetch($object->fk_user_assign);
1074 print $userstat->getNomUrl(-1);
1078 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" && $object->status < 8 && !$user->socid && $user->rights->ticket->write) {
1079 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1080 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1081 print
'<input type="hidden" name="action" value="assign_user">';
1082 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1084 print
$form->select_dolusers(empty($object->fk_user_assign)?$user->id:$object->fk_user_assign,
'fk_user_assign', 1);
1085 print
' <input type="submit" class="button small" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1092 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1093 print $langs->trans(
'Progression').
'</td><td class="left">';
1095 if ($action !=
'progression' && isset($object->status) && $object->status < $object::STATUS_CLOSED && !$user->socid) {
1096 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>';
1098 print
'</tr></table>';
1100 if ($user->rights->ticket->write && $action ==
'progression') {
1101 print
'<form action="'.$url_page_current.
'" method="post">';
1102 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1103 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1104 print
'<input type="hidden" name="action" value="set_progression">';
1105 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1106 print
' <input type="submit" class="button button-edit small" value="'.$langs->trans(
'Modify').
'">';
1109 print($object->progress > 0 ? $object->progress :
'0').
'%';
1116 $object->fetchObjectLinked();
1117 $num = count($object->linkedObjects);
1121 foreach ($object->linkedObjects as $objecttype => $objects) {
1122 if ($objecttype =
"fichinter") {
1123 foreach ($objects as $fichinter) {
1125 $timing += $fichinter->duration;
1131 print
$form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1133 print $foundinter ?
convertSecondToTime($timing,
'all', $conf->global->MAIN_DURATION_OF_WORKDAY) :
'';
1138 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1144 print
'</div><div class="fichehalfright">';
1147 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1148 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1149 print
'<input type="hidden" name="action" value="change_property">';
1150 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1151 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1153 print
'<div class="underbanner clearboth"></div>';
1157 print
'<table class="border centpercent tableforfield">';
1159 print
'<td class="valignmiddle titlefield">';
1160 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1161 print $langs->trans(
"Categories");
1162 if ($action !=
'categories' && !$user->socid) {
1163 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>';
1168 if ($user->rights->ticket->write && $action ==
'categories') {
1169 $cate_arbo =
$form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 1);
1170 if (is_array($cate_arbo)) {
1172 print
'<td colspan="3">';
1173 print
'<form action="'.$url_page_current.
'" method="post">';
1174 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1175 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1176 print
'<input type="hidden" name="action" value="set_categories">';
1179 $cats = $category->containing($object->id,
'ticket');
1180 $arrayselected = array();
1181 foreach ($cats as $cat) {
1182 $arrayselected[] = $cat->id;
1185 print
img_picto(
'',
'category').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'quatrevingtpercent widthcentpercentminusx', 0, 0);
1186 print
'<input type="submit" class="button button-edit small" value="'.$langs->trans(
'Save').
'">';
1191 print
'<td colspan="3">';
1192 print
$form->showCategories($object->id, Categorie::TYPE_TICKET, 1);
1200 $actionobject->viewTicketOriginalMessage($user, $action, $object);
1203 print
'<div class="div-table-responsive-no-min">';
1204 print
'<table class="noborder tableforfield centpercent margintable">';
1205 print
'<tr class="liste_titre">';
1207 print $langs->trans(
'TicketProperties');
1210 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1211 print
'<input type="submit" class="button small" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1214 if (isset($object->status) && $object->status < $object::STATUS_NEED_MORE_INFO && $user->rights->ticket->write) {
1215 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1221 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1224 print
'<td class="titlefield">';
1225 print $langs->trans(
'Type');
1227 $formticket->selectTypesTickets($object->type_code,
'update_value_type',
'', 2);
1233 print $langs->trans(
'TicketCategory');
1235 $formticket->selectGroupTickets($object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1241 print $langs->trans(
'TicketSeverity');
1243 $formticket->selectSeveritiesTickets($object->severity_code,
'update_value_severity',
'', 2);
1248 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1249 if (!empty($object->type_code)) {
1250 print $langs->getLabelFromKey($db,
'TicketTypeShort'.$object->type_code,
'c_ticket_type',
'code',
'label', $object->type_code);
1254 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td>';
1255 if (!empty($object->category_code)) {
1256 print $langs->getLabelFromKey($db,
'TicketCategoryShort'.$object->category_code,
'c_ticket_category',
'code',
'label', $object->category_code);
1260 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1261 if (!empty($object->severity_code)) {
1262 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.$object->severity_code,
'c_ticket_severity',
'code',
'label', $object->severity_code);
1272 print
'<!-- navbar with status -->';
1273 if (!$user->socid && $user->rights->ticket->write && isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set') !==
'properties') {
1274 $actionobject->viewStatusActions($object);
1278 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
1279 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1281 print
'<div class="div-table-responsive-no-min">';
1282 print
'<div class="tagtable centpercent noborder allwidth">';
1284 print
'<div class="tagtr liste_titre">';
1285 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1286 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1287 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1288 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1289 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1290 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1291 print
'</div><!-- tagtr -->';
1294 $companystatic =
new Societe($db);
1295 $contactstatic =
new Contact($db);
1296 $userstatic =
new User($db);
1298 foreach (array(
'internal',
'external') as $source) {
1299 $tmpobject = $object;
1300 $tab = $tmpobject->listeContact(-1, $source);
1305 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1307 print
'<div class="tagtd left">';
1308 if ($tab[$i][
'source'] ==
'internal') {
1309 echo $langs->trans(
"User");
1312 if ($tab[$i][
'source'] ==
'external') {
1313 echo $langs->trans(
"ThirdPartyContact");
1317 print
'<div class="tagtd left">';
1319 if ($tab[$i][
'socid'] > 0) {
1320 $companystatic->fetch($tab[$i][
'socid']);
1321 echo $companystatic->getNomUrl(-1);
1323 if ($tab[$i][
'socid'] < 0) {
1324 echo $conf->global->MAIN_INFO_SOCIETE_NOM;
1326 if (!$tab[$i][
'socid']) {
1331 print
'<div class="tagtd">';
1332 if ($tab[$i][
'source'] ==
'internal') {
1333 if ($userstatic->fetch($tab[$i][
'id'])) {
1334 print $userstatic->getNomUrl(-1);
1337 if ($tab[$i][
'source'] ==
'external') {
1338 if ($contactstatic->fetch($tab[$i][
'id'])) {
1339 print $contactstatic->getNomUrl(-1);
1343 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1345 print
'<div class="tagtd">';
1347 print
dol_print_phone($tab[$i][
'phone'],
'',
'',
'',
'AC_TEL').
'<br>';
1349 if (!empty($tab[$i][
'phone_perso'])) {
1351 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'',
'',
'',
'AC_TEL').
'<br>';
1353 if (!empty($tab[$i][
'phone_mobile'])) {
1355 print
dol_print_phone($tab[$i][
'phone_mobile'],
'',
'',
'',
'AC_TEL').
'<br>';
1359 print
'<div class="tagtd center">';
1360 if ($object->status >= 0) {
1361 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1364 if ($tab[$i][
'source'] ==
'internal') {
1365 $userstatic->id = $tab[$i][
'id'];
1366 $userstatic->lastname = $tab[$i][
'lastname'];
1367 $userstatic->firstname = $tab[$i][
'firstname'];
1368 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1370 if ($tab[$i][
'source'] ==
'external') {
1371 $contactstatic->id = $tab[$i][
'id'];
1372 $contactstatic->lastname = $tab[$i][
'lastname'];
1373 $contactstatic->firstname = $tab[$i][
'firstname'];
1374 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1376 if ($object->status >= 0) {
1382 print
'</div><!-- tagtr -->';
1388 print
'</div><!-- contact list -->';
1392 print
'</div></div>';
1393 print
'<div style="clear:both"></div>';
1399 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1400 print
'<div class="tabsAction">'.
"\n";
1402 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
1407 if (empty($reshook)) {
1409 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1410 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',
'');
1414 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1415 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.$object->track_id.
'#formmailbeforetitle',
'');
1421 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1423 if ($object->fk_soc > 0 && isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $user->rights->ficheinter->creer) {
1424 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,
'');
1428 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1429 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.$object->track_id,
'');
1433 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1434 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.$object->track_id,
'');
1438 if (!$user->socid && (isset($object->status) && ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1439 print
dolGetButtonAction(
'', $langs->trans(
'ReOpen'),
'default', $_SERVER[
"PHP_SELF"].
'?action=reopen&token='.
newToken().
'&track_id='.$object->track_id,
'');
1443 if ($user->rights->ticket->delete && !$user->socid) {
1444 print
dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', $_SERVER[
"PHP_SELF"].
'?action=delete&token='.
newToken().
'&track_id='.$object->track_id,
'');
1447 print
'</div>'.
"\n";
1453 if (
GETPOST(
'modelselected')) {
1454 $action =
'presend';
1457 if (
GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1458 $action =
'presend_addmessage';
1462 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1463 if ($object->fk_soc > 0) {
1464 $object->fetch_thirdparty();
1467 $outputlangs = $langs;
1470 $newlang =
GETPOST(
'lang_id',
'aZ09');
1471 } elseif (
getDolGlobalInt(
'MAIN_MULTILANGS') && empty($newlang) && is_object($object->thirdparty)) {
1472 $newlang = $object->thirdparty->default_lang;
1474 if (!empty($newlang)) {
1475 $outputlangs =
new Translate(
"", $conf);
1476 $outputlangs->setDefaultLang($newlang);
1479 $arrayoffamiliestoexclude = array(
'objectamount');
1481 $action =
'add_message';
1482 $modelmail =
'ticket_send';
1485 $morehtmlright =
'';
1488 $morehtmlright .=
$form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1492 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1494 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1500 $formticket->action = $action;
1501 $formticket->track_id = $object->track_id;
1502 $formticket->ref = $object->ref;
1503 $formticket->id = $object->id;
1504 $formticket->trackid =
'tic'.$object->id;
1506 $formticket->withfile = 2;
1507 $formticket->withcancel = 1;
1508 $formticket->param = array(
'fk_user_create' => $user->id);
1509 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1512 $formticket->param[
'models'] = $modelmail;
1513 $formticket->param[
'models_id'] =
GETPOST(
'modelmailselected',
'int');
1515 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.$object->track_id;
1517 $formticket->withsubstit = 1;
1518 $formticket->substit = $substitutionarray;
1519 $formticket->backtopage = $backtopage;
1521 $formticket->showMessageForm(
'100%');
1526 if (!empty($conf->global->TICKET_SHOW_MESSAGES_ON_CARD)) {
1527 $param =
'&id='.$object->id;
1528 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1529 $param .=
'&contextpage='.$contextpage;
1531 if ($limit > 0 && $limit != $conf->liste_limit) {
1532 $param .=
'&limit='.$limit;
1535 $param .=
'&actioncode='.urlencode($actioncode);
1537 if ($search_agenda_label) {
1538 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1541 $morehtmlright =
'';
1543 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.$object->track_id;
1544 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1547 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1548 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1549 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', $btnstatus);
1552 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message"; ;
1553 $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);
1554 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', $btnstatus);
1556 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1560 $filters[
'search_agenda_label'] = $search_agenda_label;
1561 $filters[
'search_rowid'] = $search_rowid;
1563 show_actions_messaging($conf, $langs, $db, $object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1566 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1567 print
'<div class="fichecenter"><div class="fichehalfleft">';
1568 print
'<a name="builddoc"></a>';
1571 $linktoelem =
$form->showLinkToObjectBlock($object,
null, array(
'ticket'));
1572 $somethingshown =
$form->showLinkedObjectBlock($object, $linktoelem);
1575 print
'<br><!-- Link to public interface -->'.
"\n";
1579 if (empty($conf->global->TICKET_SHOW_MESSAGES_ON_CARD)) {
1580 print
'<div class="fichehalfright">';
1584 $morehtmlcenter =
'<div class="nowraponall">';
1585 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.$object->id);
1586 $morehtmlcenter .=
' ';
1587 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.$object->id);
1588 $morehtmlcenter .=
'</div>';
1591 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1593 $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.
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.