30 require
'../main.inc.php';
31 require_once DOL_DOCUMENT_ROOT.
'/ticket/class/actions_ticket.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formticket.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/core/lib/ticket.lib.php';
34 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
35 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
36 require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
37 require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
38 require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
40 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
41 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
42 include_once DOL_DOCUMENT_ROOT.
'/core/lib/project.lib.php';
45 include_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
46 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
47 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcontract.class.php';
51 $langs->loadLangs(array(
"companies",
"other",
"ticket"));
55 $socid =
GETPOST(
'socid',
'int');
56 $track_id =
GETPOST(
'track_id',
'alpha', 3);
58 $projectid =
GETPOST(
'projectid',
'int');
59 $cancel =
GETPOST(
'cancel',
'alpha');
60 $action =
GETPOST(
'action',
'aZ09');
61 $backtopage =
GETPOST(
'backtopage',
'alpha');
62 $backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
63 $contactid =
GETPOST(
'contactid',
'int');
65 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
67 $sortfield =
GETPOST(
'sortfield',
'aZ09comma') ?
GETPOST(
'sortfield',
'aZ09comma') :
"a.datep";
68 $sortorder =
GETPOST(
'sortorder',
'aZ09comma') ?
GETPOST(
'sortorder',
'aZ09comma') :
"desc";
70 if (
GETPOST(
'actioncode',
'array')) {
71 $actioncode =
GETPOST(
'actioncode',
'array', 3);
72 if (!count($actioncode)) {
78 $search_rowid =
GETPOST(
'search_rowid');
79 $search_agenda_label =
GETPOST(
'search_agenda_label');
82 $hookmanager->initHooks(array(
'ticketcard',
'globalcard'));
88 $extrafields->fetch_name_optionals_label($object->table_element);
90 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element,
'',
'search_');
93 $search_all =
GETPOST(
"search_all",
'alpha');
95 foreach ($object->fields as $key => $val) {
96 if (
GETPOST(
'search_'.$key,
'alpha')) {
97 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
101 if (empty($action) && empty($id) && empty($ref)) {
106 if (
GETPOST(
'modelselected',
'alpha')) {
112 if ($id || $track_id || $ref) {
113 $res = $object->fetch($id, $ref, $track_id);
116 $track_id = $object->track_id;
125 $url_page_current = DOL_URL_ROOT.
'/ticket/card.php';
128 if ($user->socid > 0) $socid = $user->socid;
131 $triggermodname =
'TICKET_MODIFY';
132 $permissiontoread = $user->hasRight(
'ticket',
'read');
133 $permissiontoadd = $user->hasRight(
'ticket',
'write');
134 $permissiontodelete = $user->hasRight(
'ticket',
'delete');
136 $upload_dir = $conf->ticket->dir_output;
145 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
151 if (empty($reshook)) {
153 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
155 $search_agenda_label =
'';
158 $backurlforlist = DOL_URL_ROOT.
'/ticket/list.php';
160 if (empty($backtopage) || ($cancel && empty($id))) {
161 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
162 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
163 $backtopage = $backurlforlist;
165 $backtopage = DOL_URL_ROOT.
'/ticket/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
171 if (!empty($backtopageforcancel)) {
172 header(
"Location: ".$backtopageforcancel);
174 } elseif (!empty($backtopage)) {
175 header(
"Location: ".$backtopage);
182 if (
GETPOST(
'save',
'alpha') && $permissiontoadd) {
185 if (!
GETPOST(
"type_code",
'alpha')) {
187 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketTypeRequest")),
null,
'errors');
189 } elseif (!
GETPOST(
"category_code",
'alpha')) {
191 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketCategory")),
null,
'errors');
193 } elseif (!
GETPOST(
"severity_code",
'alpha')) {
195 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketSeverity")),
null,
'errors');
197 } elseif (!
GETPOST(
"subject",
'alphanohtml')) {
199 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
201 } elseif (!
GETPOST(
"message",
'restricthtml')) {
203 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Message")),
null,
'errors');
206 $ret = $extrafields->setOptionalsFromPost(
null, $object);
214 $getRef =
GETPOST(
"ref",
'alphanohtml');
215 if ($object->fetch(
'', $getRef) > 0) {
216 $object->ref = $object->getDefaultRef();
217 $object->track_id =
null;
218 setEventMessage($langs->trans(
'TicketRefAlreadyUsed', $getRef, $object->ref));
220 $object->ref = $getRef;
223 $object->fk_soc =
GETPOST(
"socid",
'int') > 0 ?
GETPOST(
"socid",
'int') : 0;
224 $object->subject =
GETPOST(
"subject",
'alphanohtml');
225 $object->message =
GETPOST(
"message",
'restricthtml');
227 $object->type_code =
GETPOST(
"type_code",
'alpha');
228 $object->type_label = $langs->trans($langs->getLabelFromKey($db, $object->type_code,
'c_ticket_type',
'code',
'label'));
229 $object->category_code =
GETPOST(
"category_code",
'alpha');
230 $object->category_label = $langs->trans($langs->getLabelFromKey($db, $object->category_code,
'c_ticket_category',
'code',
'label'));
231 $object->severity_code =
GETPOST(
"severity_code",
'alpha');
232 $object->severity_label = $langs->trans($langs->getLabelFromKey($db, $object->severity_code,
'c_ticket_severity',
'code',
'label'));
233 $object->email_from = $user->email;
234 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
235 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
236 $fk_user_assign =
GETPOST(
"fk_user_assign",
'int');
237 if ($fk_user_assign > 0) {
238 $object->fk_user_assign = $fk_user_assign;
239 $object->status = $object::STATUS_ASSIGNED;
242 $object->fk_project = $projectid;
244 $id = $object->create($user);
253 $contactid =
GETPOST(
'contactid',
'int');
254 $type_contact =
GETPOST(
"type",
'alpha');
257 $categories =
GETPOST(
'categories',
'array');
258 $object->setCategories($categories);
260 if ($contactid > 0 && $type_contact) {
262 $result = $object->add_contact($contactid, $typeid,
'external');
266 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
267 $projectid =
GETPOST(
'originid',
'int');
269 $projectid =
GETPOST(
'projectid',
'int');
272 if ($projectid > 0) {
273 $object->setProject($projectid);
277 if (!empty($conf->global->TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND) && $user->rights->ticket->write) {
278 if ( ! $object->markAsRead($user) > 0) {
284 if (!empty($conf->global->TICKET_AUTO_ASSIGN_USER_CREATE)) {
285 $result = $object->assignUser($user, $user->id, 1);
286 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
292 $object->copyFilesForTicket(
'');
298 if (!empty($backtopage)) {
302 $url =
'card.php?track_id='.urlencode($object->track_id);
305 $url =
'card.php?track_id='.urlencode($object->track_id);
308 header(
"Location: ".$url);
320 if ($action ==
'update' && $permissiontoadd && $object->status < Ticket::STATUS_CLOSED) {
326 array_push($object->errors, $langs->trans(
'ErrorTicketIsNotValid'));
331 if (!
GETPOST(
'subject',
'alpha')) {
333 array_push($object->errors, $langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Subject')));
335 $ret = $extrafields->setOptionalsFromPost(
null, $object);
344 $object->subject =
GETPOST(
'subject',
'alpha');
345 $object->type_code =
GETPOST(
'type_code',
'alpha');
346 $object->category_code =
GETPOST(
'category_code',
'alpha');
347 $object->severity_code =
GETPOST(
'severity_code',
'alpha');
349 $ret = $object->update($user);
352 $categories =
GETPOST(
'categories',
'array');
353 $object->setCategories($categories);
369 if (!empty($backtopage)) {
373 $url =
'card.php?track_id='.urlencode($object->track_id);
376 $url =
'card.php?track_id='.urlencode($object->track_id);
379 header(
'Location: '.$url);
385 if ($action ==
"set_read" && $permissiontoadd) {
386 $object->fetch(
'',
'',
GETPOST(
"track_id",
'alpha'));
388 if ($object->markAsRead($user) > 0) {
391 header(
"Location: card.php?track_id=".$object->track_id);
400 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $permissiontoadd) {
401 $object->fetch(
'',
'',
GETPOST(
"track_id",
'alpha'));
402 $useroriginassign = $object->fk_user_assign;
403 $usertoassign =
GETPOST(
'fk_user_assign',
'int');
412 $ret = $object->assignUser($user, $usertoassign);
420 if ($useroriginassign > 0) {
421 $internal_contacts = $object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
422 foreach ($internal_contacts as $key => $contact) {
423 if ($contact[
'id'] !== $usertoassign) {
424 $result = $object->delete_contact($contact[
'rowid']);
433 if ($usertoassign > 0 && $usertoassign!==$useroriginassign) {
434 $result = $object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
444 $object->fetch_user($usertoassign);
449 header(
"Location: card.php?track_id=".$object->track_id);
452 array_push($object->errors, $object->error);
459 if ($action ==
'add_message' &&
GETPOSTISSET(
'btn_add_message') && $permissiontoread) {
460 $ret = $object->newMessage($user, $action, (
GETPOST(
'private_message',
'alpha') ==
"on" ? 1 : 0), 0);
463 if (!empty($backtopage)) {
466 $url =
'card.php?track_id='.urlencode($object->track_id);
469 header(
"Location: ".$url);
477 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
478 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
480 if ($object->close($user, ($action ==
"confirm_abandon" ? 1 : 0))) {
483 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
484 header(
"Location: ".$url);
491 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
492 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
493 if ($_SESSION[
'email_customer'] == $object->origin_email || $_SESSION[
'email_customer'] == $object->thirdparty->email) {
494 $object->close($user);
499 setEventMessages(
'<div class="confirm">'.$langs->trans(
'TicketMarkedAsClosed').
'</div>',
null,
'mesgs');
501 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
502 header(
"Location: ".$url);
509 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
510 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
511 if ($object->delete($user) > 0) {
512 setEventMessages(
'<div class="confirm">'.$langs->trans(
'TicketDeletedSuccess').
'</div>',
null,
'mesgs');
513 Header(
"Location: ".DOL_URL_ROOT.
"/ticket/list.php");
516 $langs->load(
"errors");
517 $mesg =
'<div class="error">'.$langs->trans($object->error).
'</div>';
524 if ($action ==
'set_thirdparty' && $user->rights->ticket->write) {
525 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
526 $result = $object->setCustomer(
GETPOST(
'editcustomer',
'int'));
527 $url = $_SERVER[
"PHP_SELF"].
'?track_id='.
GETPOST(
'track_id',
'alpha');
528 header(
"Location: ".$url);
533 if ($action ==
'set_progression' && $user->rights->ticket->write) {
534 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
535 $result = $object->setProgression(
GETPOST(
'progress',
'alpha'));
537 $url =
'card.php?track_id='.$object->track_id;
538 header(
"Location: ".$url);
543 if ($action ==
'set_categories' && $user->rights->ticket->write) {
544 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
545 $result = $object->setCategories(
GETPOST(
'categories',
'array'));
547 $url =
'card.php?track_id='.$object->track_id;
548 header(
"Location: ".$url);
553 if ($action ==
'setsubject' && $user->rights->ticket->write) {
554 if ($object->fetch(
GETPOST(
'id',
'int'))) {
555 if ($action ==
'setsubject') {
556 $object->subject =
GETPOST(
'subject',
'alphanohtml');
559 if ($action ==
'setsubject' && empty($object->subject)) {
561 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
565 if ($object->update($user) >= 0) {
566 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?track_id=".$object->track_id);
576 if ($action ==
'confirm_reopen' && $user->rights->ticket->manage && !
GETPOST(
'cancel')) {
577 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
579 if ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED) {
580 $res = $object->setStatut(Ticket::STATUS_ASSIGNED);
585 $url =
'card.php?track_id='.$object->track_id;
586 header(
"Location: ".$url);
594 } elseif ($action ==
'classin' && $permissiontoadd) {
596 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
597 $object->setProject($projectid);
598 $url =
'card.php?track_id='.$object->track_id;
599 header(
"Location: ".$url);
602 } elseif ($action ==
'setcontract' && $permissiontoadd) {
604 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
605 $object->setContract(
GETPOST(
'contractid',
'int'));
606 $url =
'card.php?track_id='.$object->track_id;
607 header(
"Location: ".$url);
610 } elseif ($action ==
"set_message" && $user->rights->ticket->manage) {
612 $object->fetch(
'',
'',
GETPOST(
'track_id',
'alpha'));
613 $oldvalue_message = $object->message;
614 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
616 $object->message = $fieldtomodify;
617 $ret = $object->update($user);
621 include_once DOL_DOCUMENT_ROOT.
'/core/class/utils_diff.class.php';
625 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
633 } elseif ($action ==
'confirm_set_status' && $permissiontoadd && !
GETPOST(
'cancel')) {
635 if ($object->fetch(
GETPOST(
'id',
'int'),
GETPOST(
'track_id',
'alpha')) >= 0) {
636 $new_status =
GETPOST(
'new_status',
'int');
637 $old_status = $object->status;
638 $res = $object->setStatut($new_status);
641 $log_action = $langs->trans(
'TicketLogStatusChanged', $langs->transnoentities($object->statuts_short[$old_status]), $langs->transnoentities($object->statuts_short[$new_status]));
643 $url =
'card.php?track_id='.$object->track_id;
644 header(
"Location: ".$url);
654 if ($action ==
"update_extras" && $permissiontoadd) {
655 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
657 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
663 $result = $object->insertExtraFields(empty($triggermodname) ?
'' : $triggermodname, $user);
671 $action =
'edit_extras';
678 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
679 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
681 $object->type_code =
GETPOST(
'update_value_type',
'aZ09');
682 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
683 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
685 $ret = $object->update($user);
698 $permissiondellink = $user->rights->ticket->write;
699 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
702 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
706 $triggersendname =
'TICKET_SENTBYMAIL';
708 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
709 $trackid =
'tic'.$object->id;
710 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
713 if (
GETPOSTISSET(
'actionbis') && $action ==
'presend') {
714 $action =
'presend_addmessage';
723 $userstat =
new User($db);
730 $help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
732 $title = $actionobject->getTitle($action);
736 if ($action ==
'create' || $action ==
'presend') {
741 $formticket->trackid =
'';
742 $formticket->withfromsocid = $socid ? $socid : $user->socid;
743 $formticket->withfromcontactid = $contactid ? $contactid :
'';
744 $formticket->withtitletopic = 1;
745 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (empty($conf->global->TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION) ? 0 : 1));
746 $formticket->withusercreate = 0;
747 $formticket->withref = 1;
748 $formticket->fk_user_create = $user->id;
749 $formticket->withfile = 2;
750 $formticket->withextrafields = 1;
751 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
753 $formticket->withcancel = 1;
755 $formticket->showForm(1,
'create', 0,
null, $action);
807 } 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'
808 || $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') {
811 if (!$user->socid && (!empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY) && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) {
816 if ($action ==
'close') {
817 $thirdparty_contacts = $object->getInfosTicketExternalContact(1);
818 $contacts_select = array(
819 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
820 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
822 foreach ($thirdparty_contacts as $thirdparty_contact) {
823 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
827 $default = (!empty($conf->global->TICKET_NOTIFY_AT_CLOSING)) ? -2 : -3;
828 $formquestion = array(
830 'name' =>
'contactid',
832 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
833 'values' => $contacts_select,
834 'default' => $default
838 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
841 if ($action ==
'abandon') {
842 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
845 if ($action ==
'delete') {
846 print
$form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
849 if ($action ==
'reopen') {
850 print
$form->formconfirm($url_page_current.
'?track_id='.$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
853 if ($action ==
'set_status') {
854 $new_status =
GETPOST(
'new_status');
856 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);
860 if ($projectid > 0) {
861 $projectstat =
new Project($db);
862 if ($projectstat->fetch($projectid) > 0) {
863 $projectstat->fetch_thirdparty();
867 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
873 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
875 print
'<table class="border centpercent">';
877 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
880 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
882 if (empty($user->rights->projet->all->lire)) {
883 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
884 $projectstat->next_prev_filter =
" rowid IN (".$db->sanitize(count($objectsListId) ? join(
',', array_keys($objectsListId)) :
'0').
")";
886 print
$form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
890 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
893 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
894 print
'<td colspan="3">';
895 if ($projectstat->thirdparty->id > 0) {
896 print $projectstat->thirdparty->getNomUrl(1);
904 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
905 if ($projectstat->public) {
906 print $langs->trans(
'SharedProject');
908 print $langs->trans(
'PrivateProject');
914 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
920 print
"ErrorRecordNotFound";
922 } elseif ($socid > 0) {
923 $object->fetch_thirdparty();
928 dol_banner_tab($object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
933 if (!$user->socid && !empty($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY)) {
934 $object->next_prev_filter =
"te.fk_user_assign = '".$user->id.
"'";
935 } elseif ($user->socid > 0) {
936 $object->next_prev_filter =
"te.fk_soc = '".$user->socid.
"'";
943 $morehtmlref =
'<div class="refidno">';
944 $morehtmlref .= $object->subject;
946 if ($object->fk_user_create > 0) {
947 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
949 $fuser =
new User($db);
950 $fuser->fetch($object->fk_user_create);
951 $morehtmlref .= $fuser->getNomUrl(-1);
952 } elseif (!empty($object->email_msgid)) {
953 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
954 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
955 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.$object->email_msgid;
956 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date($object->email_date,
'dayhour');
957 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.
$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
958 } elseif (!empty($object->origin_email)) {
959 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
960 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
961 $htmltooptip = $langs->trans(
"IP").
': '.$object->ip;
962 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.
$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
965 $permissiontoedit = $object->status < 8 && !$user->socid && $user->rights->ticket->write;
970 $morehtmlref .=
'<br>';
971 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
972 if ($action !=
'editcustomer' && $permissiontoedit) {
973 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.
newToken().
'&track_id='.$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
975 $morehtmlref .=
$form->form_thirdparty($url_page_current.
'?track_id='.$object->track_id, $object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
976 if (!empty($object->socid)) {
977 $morehtmlref .=
' - <a href="'.DOL_URL_ROOT.
'/ticket/list.php?socid='.$object->socid.
'&sortfield=t.datec&sortorder=desc">'.
img_picto($langs->trans(
"Tickets"),
'ticket',
'class="pictofixedwidth"').
' '.$langs->trans(
"TicketHistory").
'</a>';
983 $langs->load(
"projects");
984 $morehtmlref .=
'<br>';
985 if ($permissiontoedit) {
986 $object->fetch_project();
987 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object($object->project) && $object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
988 if ($action !=
'classify') {
989 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
991 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
993 if (!empty($object->fk_project)) {
994 $object->fetch_project();
995 $morehtmlref .= $object->project->getNomUrl(1);
996 if ($object->project->title) {
997 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($object->project->title).
'</span>';
1003 $morehtmlref .=
'</div>';
1005 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1007 dol_banner_tab($object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1009 print
'<div class="fichecenter">';
1010 print
'<div class="fichehalfleft">';
1011 print
'<div class="underbanner clearboth"></div>';
1013 print
'<table class="border tableforfield centpercent">';
1016 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1017 if (!empty($object->track_id)) {
1018 if (empty($object->ref)) {
1019 $object->ref = $object->id;
1020 print
$form->showrefnav($object,
'id', $linkback, 1,
'rowid',
'track_id');
1022 print $object->track_id;
1025 print $langs->trans(
'None');
1031 print
$form->editfieldkey(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1033 print
$form->editfieldval(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1037 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1060 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1061 if (!empty($object->date_read)) {
1064 print
' / <i>'.convertSecondToTime(
roundUpToNextMultiple($now - $object->date_read, 60)).
'</i></span>';
1069 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1070 if (!empty($object->date_close)) {
1077 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1078 print $langs->trans(
"AssignedTo");
1079 if (isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->rights->ticket->manage) {
1080 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>';
1082 print
'</td></tr></table>';
1084 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $object->fk_user_assign > 0) {
1085 $userstat->fetch($object->fk_user_assign);
1086 print $userstat->getNomUrl(-1);
1090 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" && $object->status < 8 && !$user->socid && $user->rights->ticket->write) {
1091 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1092 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1093 print
'<input type="hidden" name="action" value="assign_user">';
1094 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1096 print
$form->select_dolusers(empty($object->fk_user_assign)?$user->id:$object->fk_user_assign,
'fk_user_assign', 1);
1097 print
' <input type="submit" class="button small" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1104 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1105 print $langs->trans(
'Progression').
'</td><td class="left">';
1107 if ($action !=
'progression' && isset($object->status) && $object->status < $object::STATUS_CLOSED && !$user->socid) {
1108 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>';
1110 print
'</tr></table>';
1112 if ($user->rights->ticket->write && $action ==
'progression') {
1113 print
'<form action="'.$url_page_current.
'" method="post">';
1114 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1115 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1116 print
'<input type="hidden" name="action" value="set_progression">';
1117 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1118 print
' <input type="submit" class="button button-edit small" value="'.$langs->trans(
'Modify').
'">';
1121 print($object->progress > 0 ? $object->progress :
'0').
'%';
1128 $object->fetchObjectLinked();
1129 $num = count($object->linkedObjects);
1133 foreach ($object->linkedObjects as $objecttype => $objects) {
1134 if ($objecttype ==
"fichinter") {
1135 foreach ($objects as $fichinter) {
1137 $timing += $fichinter->duration;
1143 print
$form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1145 print $foundinter ?
convertSecondToTime($timing,
'all', $conf->global->MAIN_DURATION_OF_WORKDAY) :
'';
1150 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1156 print
'</div><div class="fichehalfright">';
1159 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1160 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1161 print
'<input type="hidden" name="action" value="change_property">';
1162 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1163 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1165 print
'<div class="underbanner clearboth"></div>';
1169 print
'<table class="border centpercent tableforfield">';
1171 print
'<td class="valignmiddle titlefield">';
1172 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1173 print $langs->trans(
"Categories");
1174 if ($action !=
'categories' && !$user->socid) {
1175 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>';
1180 if ($user->rights->ticket->write && $action ==
'categories') {
1181 $cate_arbo =
$form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 1);
1182 if (is_array($cate_arbo)) {
1184 print
'<td colspan="3">';
1185 print
'<form action="'.$url_page_current.
'" method="post">';
1186 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1187 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1188 print
'<input type="hidden" name="action" value="set_categories">';
1191 $cats = $category->containing($object->id,
'ticket');
1192 $arrayselected = array();
1193 foreach ($cats as $cat) {
1194 $arrayselected[] = $cat->id;
1197 print
img_picto(
'',
'category',
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'quatrevingtpercent widthcentpercentminusx', 0, 0);
1198 print
'<input type="submit" class="button button-edit small" value="'.$langs->trans(
'Save').
'">';
1203 print
'<td colspan="3">';
1204 print
$form->showCategories($object->id, Categorie::TYPE_TICKET, 1);
1212 $actionobject->viewTicketOriginalMessage($user, $action, $object);
1215 print
'<div class="div-table-responsive-no-min">';
1216 print
'<table class="noborder tableforfield centpercent margintable">';
1217 print
'<tr class="liste_titre">';
1219 print $langs->trans(
'TicketProperties');
1222 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1223 print
'<input type="submit" class="button small" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1226 if (isset($object->status) && $object->status < $object::STATUS_NEED_MORE_INFO && $user->rights->ticket->write) {
1227 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1233 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1236 print
'<td class="titlefield">';
1237 print $langs->trans(
'Type');
1239 $formticket->selectTypesTickets($object->type_code,
'update_value_type',
'', 2);
1245 print $langs->trans(
'TicketCategory');
1247 $formticket->selectGroupTickets($object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1253 print $langs->trans(
'TicketSeverity');
1255 $formticket->selectSeveritiesTickets($object->severity_code,
'update_value_severity',
'', 2);
1260 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1261 if (!empty($object->type_code)) {
1262 print $langs->getLabelFromKey($db,
'TicketTypeShort'.$object->type_code,
'c_ticket_type',
'code',
'label', $object->type_code);
1267 if (!empty($object->category_code)) {
1268 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.$object->category_code,
'c_ticket_category',
'code',
'label', $object->category_code);
1270 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1274 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1275 if (!empty($object->severity_code)) {
1276 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.$object->severity_code,
'c_ticket_severity',
'code',
'label', $object->severity_code);
1286 print
'<!-- navbar with status -->';
1287 if (!$user->socid && $user->rights->ticket->write && isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set') !==
'properties') {
1288 $actionobject->viewStatusActions($object);
1292 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
1293 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1295 print
'<div class="div-table-responsive-no-min">';
1296 print
'<div class="tagtable centpercent noborder allwidth">';
1298 print
'<div class="tagtr liste_titre">';
1299 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1300 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1301 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1302 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1303 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1304 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1305 print
'</div><!-- tagtr -->';
1308 $companystatic =
new Societe($db);
1309 $contactstatic =
new Contact($db);
1310 $userstatic =
new User($db);
1312 foreach (array(
'internal',
'external') as $source) {
1313 $tmpobject = $object;
1314 $tab = $tmpobject->listeContact(-1, $source);
1319 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1321 print
'<div class="tagtd left">';
1322 if ($tab[$i][
'source'] ==
'internal') {
1323 echo $langs->trans(
"User");
1326 if ($tab[$i][
'source'] ==
'external') {
1327 echo $langs->trans(
"ThirdPartyContact");
1331 print
'<div class="tagtd left">';
1333 if ($tab[$i][
'socid'] > 0) {
1334 $companystatic->fetch($tab[$i][
'socid']);
1335 echo $companystatic->getNomUrl(-1);
1337 if ($tab[$i][
'socid'] < 0) {
1338 echo $conf->global->MAIN_INFO_SOCIETE_NOM;
1340 if (!$tab[$i][
'socid']) {
1345 print
'<div class="tagtd">';
1346 if ($tab[$i][
'source'] ==
'internal') {
1347 if ($userstatic->fetch($tab[$i][
'id'])) {
1348 print $userstatic->getNomUrl(-1);
1351 if ($tab[$i][
'source'] ==
'external') {
1352 if ($contactstatic->fetch($tab[$i][
'id'])) {
1353 print $contactstatic->getNomUrl(-1);
1357 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1359 print
'<div class="tagtd">';
1361 print
dol_print_phone($tab[$i][
'phone'],
'',
'',
'',
'AC_TEL').
'<br>';
1363 if (!empty($tab[$i][
'phone_perso'])) {
1365 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'',
'',
'',
'AC_TEL').
'<br>';
1367 if (!empty($tab[$i][
'phone_mobile'])) {
1369 print
dol_print_phone($tab[$i][
'phone_mobile'],
'',
'',
'',
'AC_TEL').
'<br>';
1373 print
'<div class="tagtd center">';
1374 if ($object->status >= 0) {
1375 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1378 if ($tab[$i][
'source'] ==
'internal') {
1379 $userstatic->id = $tab[$i][
'id'];
1380 $userstatic->lastname = $tab[$i][
'lastname'];
1381 $userstatic->firstname = $tab[$i][
'firstname'];
1382 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1384 if ($tab[$i][
'source'] ==
'external') {
1385 $contactstatic->id = $tab[$i][
'id'];
1386 $contactstatic->lastname = $tab[$i][
'lastname'];
1387 $contactstatic->firstname = $tab[$i][
'firstname'];
1388 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1390 if ($object->status >= 0) {
1396 print
'</div><!-- tagtr -->';
1402 print
'</div><!-- contact list -->';
1406 print
'</div></div>';
1407 print
'<div class="clearboth"></div>';
1413 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1414 print
'<div class="tabsAction">'.
"\n";
1416 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
1421 if (empty($reshook)) {
1423 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1424 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',
'');
1428 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1429 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.$object->track_id.
'#formmailbeforetitle',
'');
1435 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1437 if ($object->fk_soc > 0 && isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1438 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,
'');
1442 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1443 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.$object->track_id,
'');
1447 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1448 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.$object->track_id,
'');
1452 if (!$user->socid && (isset($object->status) && ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1453 print
dolGetButtonAction(
'', $langs->trans(
'ReOpen'),
'default', $_SERVER[
"PHP_SELF"].
'?action=reopen&token='.
newToken().
'&track_id='.$object->track_id,
'');
1457 if ($user->rights->ticket->delete && !$user->socid) {
1458 print
dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', $_SERVER[
"PHP_SELF"].
'?action=delete&token='.
newToken().
'&track_id='.$object->track_id,
'');
1461 print
'</div>'.
"\n";
1467 if (
GETPOST(
'modelselected')) {
1468 $action =
'presend';
1471 if (
GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1472 $action =
'presend_addmessage';
1476 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1477 if ($object->fk_soc > 0) {
1478 $object->fetch_thirdparty();
1481 $outputlangs = $langs;
1484 $newlang =
GETPOST(
'lang_id',
'aZ09');
1485 } elseif (
getDolGlobalInt(
'MAIN_MULTILANGS') && empty($newlang) && is_object($object->thirdparty)) {
1486 $newlang = $object->thirdparty->default_lang;
1488 if (!empty($newlang)) {
1489 $outputlangs =
new Translate(
"", $conf);
1490 $outputlangs->setDefaultLang($newlang);
1493 $arrayoffamiliestoexclude = array(
'objectamount');
1495 $action =
'add_message';
1496 $modelmail =
'ticket_send';
1499 $morehtmlright =
'';
1502 $morehtmlright .=
$form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1506 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1508 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1514 $formticket->action = $action;
1515 $formticket->track_id = $object->track_id;
1516 $formticket->ref = $object->ref;
1517 $formticket->id = $object->id;
1518 $formticket->trackid =
'tic'.$object->id;
1520 $formticket->withfile = 2;
1521 $formticket->withcancel = 1;
1522 $formticket->param = array(
'fk_user_create' => $user->id);
1523 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1526 $formticket->param[
'models'] = $modelmail;
1527 $formticket->param[
'models_id'] =
GETPOST(
'modelmailselected',
'int');
1529 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.$object->track_id;
1531 $formticket->withsubstit = 1;
1532 $formticket->substit = $substitutionarray;
1533 $formticket->backtopage = $backtopage;
1535 $formticket->showMessageForm(
'100%');
1540 if (!empty($conf->global->TICKET_SHOW_MESSAGES_ON_CARD)) {
1541 $param =
'&id='.$object->id;
1542 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1543 $param .=
'&contextpage='.$contextpage;
1545 if ($limit > 0 && $limit != $conf->liste_limit) {
1546 $param .=
'&limit='.$limit;
1549 $param .=
'&actioncode='.urlencode($actioncode);
1551 if ($search_agenda_label) {
1552 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1555 $morehtmlright =
'';
1557 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.$object->track_id;
1558 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1561 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1562 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1563 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', $btnstatus);
1566 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1567 $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);
1568 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', $btnstatus);
1570 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1574 $filters[
'search_agenda_label'] = $search_agenda_label;
1575 $filters[
'search_rowid'] = $search_rowid;
1577 show_actions_messaging($conf, $langs, $db, $object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1580 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1581 print
'<div class="fichecenter"><div class="fichehalfleft">';
1582 print
'<a name="builddoc"></a>';
1585 $linktoelem =
$form->showLinkToObjectBlock($object,
null, array(
'ticket'));
1586 $somethingshown =
$form->showLinkedObjectBlock($object, $linktoelem);
1589 print
'<br><!-- Link to public interface -->'.
"\n";
1593 if (empty($conf->global->TICKET_SHOW_MESSAGES_ON_CARD)) {
1594 print
'<div class="fichehalfright">';
1598 $morehtmlcenter =
'<div class="nowraponall">';
1599 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.$object->id);
1600 $morehtmlcenter .=
' ';
1601 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.$object->id);
1602 $morehtmlcenter .=
'</div>';
1605 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1607 $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='', $dragdropfile=0)
Show tabs of a record.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
roundUpToNextMultiple($n, $x=5)
Round to next multiple.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0)
Set event message in dol_events session object.
dol_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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
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.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
Class to generate the form for creating a new ticket.
project_prepare_head(Project $project, $moreparam='')
Prepare array with list of tabs.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
showDirectPublicLink($object)
Return string with full Url.
ticket_prepare_head($object)
Build tabs for a Ticket object.