30require
'../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.
'/ticket/class/actions_ticket.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formticket.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/lib/ticket.lib.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
39if (isModEnabled(
'project')) {
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';
44if (isModEnabled(
'contrat')) {
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";
70if (
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');
95foreach ($object->fields as $key => $val) {
96 if (
GETPOST(
'search_'.$key,
'alpha')) {
97 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
101if (empty($action) && empty($id) && empty($ref)) {
106if (
GETPOST(
'modelselected',
'alpha')) {
112if ($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';
128if ($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;
144$parameters = array();
145$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
151if (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 $refcheck_object =
new Ticket($db);
216 if ($refcheck_object->fetch(
'', $getRef) > 0) {
217 $object->ref = $object->getDefaultRef();
218 $object->track_id =
null;
219 setEventMessage($langs->trans(
'TicketRefAlreadyUsed', $getRef, $object->ref));
221 $object->ref = $getRef;
224 $object->fk_soc =
GETPOST(
"socid",
'int') > 0 ?
GETPOST(
"socid",
'int') : 0;
225 $object->subject =
GETPOST(
"subject",
'alphanohtml');
226 $object->message =
GETPOST(
"message",
'restricthtml');
228 $object->type_code =
GETPOST(
"type_code",
'alpha');
229 $object->type_label = $langs->trans($langs->getLabelFromKey($db, $object->type_code,
'c_ticket_type',
'code',
'label'));
230 $object->category_code =
GETPOST(
"category_code",
'alpha');
231 $object->category_label = $langs->trans($langs->getLabelFromKey($db, $object->category_code,
'c_ticket_category',
'code',
'label'));
232 $object->severity_code =
GETPOST(
"severity_code",
'alpha');
233 $object->severity_label = $langs->trans($langs->getLabelFromKey($db, $object->severity_code,
'c_ticket_severity',
'code',
'label'));
234 $object->email_from = $user->email;
235 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
236 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
237 $fk_user_assign =
GETPOST(
"fk_user_assign",
'int');
238 if ($fk_user_assign > 0) {
239 $object->fk_user_assign = $fk_user_assign;
240 $object->status = $object::STATUS_ASSIGNED;
243 $object->fk_project = $projectid;
245 $id = $object->create($user);
254 $contactid =
GETPOST(
'contactid',
'int');
255 $type_contact =
GETPOST(
"type",
'alpha');
258 $categories =
GETPOST(
'categories',
'array');
259 $object->setCategories($categories);
261 if ($contactid > 0 && $type_contact) {
263 $result = $object->add_contact($contactid, $typeid,
'external');
267 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
268 $projectid =
GETPOST(
'originid',
'int');
270 $projectid =
GETPOST(
'projectid',
'int');
273 if ($projectid > 0) {
274 $object->setProject($projectid);
278 if (
getDolGlobalString(
'TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND') && $user->rights->ticket->write) {
279 if ( ! $object->markAsRead($user) > 0) {
286 $result = $object->assignUser($user, $user->id, 1);
287 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
293 $object->copyFilesForTicket(
'');
299 if (!empty($backtopage)) {
303 $url =
'card.php?track_id='.urlencode($object->track_id);
306 $url =
'card.php?track_id='.urlencode($object->track_id);
309 header(
"Location: ".$url);
321 if ($action ==
'update' && $permissiontoadd && $object->status < Ticket::STATUS_CLOSED) {
327 array_push($object->errors, $langs->trans(
'ErrorTicketIsNotValid'));
332 if (!
GETPOST(
'subject',
'alpha')) {
334 array_push($object->errors, $langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Subject')));
336 $ret = $extrafields->setOptionalsFromPost(
null, $object);
345 $object->subject =
GETPOST(
'subject',
'alpha');
346 $object->type_code =
GETPOST(
'type_code',
'alpha');
347 $object->category_code =
GETPOST(
'category_code',
'alpha');
348 $object->severity_code =
GETPOST(
'severity_code',
'alpha');
350 $ret = $object->update($user);
353 $categories =
GETPOST(
'categories',
'array');
354 $object->setCategories($categories);
370 if (!empty($backtopage)) {
374 $url =
'card.php?track_id='.urlencode($object->track_id);
377 $url =
'card.php?track_id='.urlencode($object->track_id);
380 header(
'Location: '.$url);
386 if ($action ==
"set_read" && $permissiontoadd) {
387 $object->fetch(
'',
'',
GETPOST(
"track_id",
'alpha'));
389 if ($object->markAsRead($user) > 0) {
392 header(
"Location: card.php?track_id=".$object->track_id);
401 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $permissiontoadd) {
402 $object->fetch(
'',
'',
GETPOST(
"track_id",
'alpha'));
403 $useroriginassign = $object->fk_user_assign;
404 $usertoassign =
GETPOST(
'fk_user_assign',
'int');
413 $ret = $object->assignUser($user, $usertoassign);
421 if ($useroriginassign > 0) {
422 $internal_contacts = $object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
423 foreach ($internal_contacts as $key => $contact) {
424 if ($contact[
'id'] !== $usertoassign) {
425 $result = $object->delete_contact($contact[
'rowid']);
434 if ($usertoassign > 0 && $usertoassign!==$useroriginassign) {
435 $result = $object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
445 $object->fetch_user($usertoassign);
450 header(
"Location: card.php?track_id=".$object->track_id);
453 array_push($object->errors, $object->error);
460 if ($action ==
'add_message' && GETPOSTISSET(
'btn_add_message') && $permissiontoread) {
461 $ret = $object->newMessage($user, $action, (
GETPOST(
'private_message',
'alpha') ==
"on" ? 1 : 0), 0);
464 if (!empty($backtopage)) {
467 $url =
'card.php?track_id='.urlencode($object->track_id);
470 header(
"Location: ".$url);
478 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
479 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
481 if ($object->close($user, ($action ==
"confirm_abandon" ? 1 : 0))) {
484 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
485 header(
"Location: ".$url);
492 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
493 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
494 if ($_SESSION[
'email_customer'] == $object->origin_email || $_SESSION[
'email_customer'] == $object->thirdparty->email) {
495 $object->close($user);
500 setEventMessages(
'<div class="confirm">'.$langs->trans(
'TicketMarkedAsClosed').
'</div>',
null,
'mesgs');
502 $url =
'card.php?track_id='.GETPOST(
'track_id',
'alpha');
503 header(
"Location: ".$url);
510 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
511 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
512 if ($object->delete($user) > 0) {
513 setEventMessages(
'<div class="confirm">'.$langs->trans(
'TicketDeletedSuccess').
'</div>',
null,
'mesgs');
514 Header(
"Location: ".DOL_URL_ROOT.
"/ticket/list.php");
517 $langs->load(
"errors");
518 $mesg =
'<div class="error">'.$langs->trans($object->error).
'</div>';
525 if ($action ==
'set_thirdparty' && $user->rights->ticket->write) {
526 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
527 $result = $object->setCustomer(
GETPOST(
'editcustomer',
'int'));
528 $url = $_SERVER[
"PHP_SELF"].
'?track_id='.
GETPOST(
'track_id',
'alpha');
529 header(
"Location: ".$url);
534 if ($action ==
'set_progression' && $user->rights->ticket->write) {
535 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
536 $result = $object->setProgression(
GETPOST(
'progress',
'alpha'));
538 $url =
'card.php?track_id='.$object->track_id;
539 header(
"Location: ".$url);
544 if ($action ==
'set_categories' && $user->rights->ticket->write) {
545 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
546 $result = $object->setCategories(
GETPOST(
'categories',
'array'));
548 $url =
'card.php?track_id='.$object->track_id;
549 header(
"Location: ".$url);
554 if ($action ==
'setsubject' && $user->rights->ticket->write) {
555 if ($object->fetch(
GETPOST(
'id',
'int'))) {
556 if ($action ==
'setsubject') {
557 $object->subject =
GETPOST(
'subject',
'alphanohtml');
560 if ($action ==
'setsubject' && empty($object->subject)) {
562 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
566 if ($object->update($user) >= 0) {
567 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?track_id=".$object->track_id);
577 if ($action ==
'confirm_reopen' && $user->rights->ticket->manage && !
GETPOST(
'cancel')) {
578 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
580 if ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED) {
581 $res = $object->setStatut(Ticket::STATUS_ASSIGNED);
586 $url =
'card.php?track_id='.$object->track_id;
587 header(
"Location: ".$url);
595 } elseif ($action ==
'classin' && $permissiontoadd) {
597 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
598 $object->setProject($projectid);
599 $url =
'card.php?track_id='.$object->track_id;
600 header(
"Location: ".$url);
603 } elseif ($action ==
'setcontract' && $permissiontoadd) {
605 if ($object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha')) >= 0) {
606 $object->setContract(
GETPOST(
'contractid',
'int'));
607 $url =
'card.php?track_id='.$object->track_id;
608 header(
"Location: ".$url);
611 } elseif ($action ==
"set_message" && $user->rights->ticket->manage) {
613 $object->fetch(
'',
'',
GETPOST(
'track_id',
'alpha'));
614 $oldvalue_message = $object->message;
615 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
617 $object->message = $fieldtomodify;
618 $ret = $object->update($user);
622 include_once DOL_DOCUMENT_ROOT.
'/core/class/utils_diff.class.php';
626 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
634 } elseif ($action ==
'confirm_set_status' && $permissiontoadd && !
GETPOST(
'cancel')) {
636 if ($object->fetch(
GETPOST(
'id',
'int'),
GETPOST(
'track_id',
'alpha')) >= 0) {
637 $new_status =
GETPOST(
'new_status',
'int');
638 $old_status = $object->status;
639 $res = $object->setStatut($new_status);
642 $log_action = $langs->trans(
'TicketLogStatusChanged', $langs->transnoentities($object->statuts_short[$old_status]), $langs->transnoentities($object->statuts_short[$new_status]));
644 $url =
'card.php?track_id='.$object->track_id;
645 header(
"Location: ".$url);
655 if ($action ==
"update_extras" && $permissiontoadd) {
656 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
658 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
664 $result = $object->insertExtraFields(empty($triggermodname) ?
'' : $triggermodname, $user);
672 $action =
'edit_extras';
679 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
680 $object->fetch(
GETPOST(
'id',
'int'),
'',
GETPOST(
'track_id',
'alpha'));
682 $object->type_code =
GETPOST(
'update_value_type',
'aZ09');
683 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
684 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
686 $ret = $object->update($user);
699 $permissiondellink = $user->rights->ticket->write;
700 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
703 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
707 $triggersendname =
'TICKET_SENTBYMAIL';
709 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
710 $trackid =
'tic'.$object->id;
711 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
714 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
715 $action =
'presend_addmessage';
724$userstat =
new User($db);
725$form =
new Form($db);
727if (isModEnabled(
'project')) {
731$help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
733$title = $actionobject->getTitle($action);
737if ($action ==
'create' || $action ==
'presend') {
742 $formticket->trackid =
'';
743 $formticket->withfromsocid = $socid ? $socid : $user->socid;
744 $formticket->withfromcontactid = $contactid ? $contactid :
'';
745 $formticket->withtitletopic = 1;
746 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (
getDolGlobalString(
'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION') ? 1 : 0));
747 $formticket->withusercreate = 0;
748 $formticket->withref = 1;
749 $formticket->fk_user_create = $user->id;
750 $formticket->withfile = 2;
751 $formticket->withextrafields = 1;
752 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
754 $formticket->withcancel = 1;
756 $formticket->showForm(1,
'create', 0,
null, $action);
808} 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'
809 || $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') {
812 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) {
817 if ($action ==
'close') {
818 $thirdparty_contacts = $object->getInfosTicketExternalContact(1);
819 $contacts_select = array(
820 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
821 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
823 foreach ($thirdparty_contacts as $thirdparty_contact) {
824 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
829 $formquestion = array(
831 'name' =>
'contactid',
833 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
834 'values' => $contacts_select,
835 'default' => $default
839 print $form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
842 if ($action ==
'abandon') {
843 print $form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
846 if ($action ==
'delete') {
847 print $form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
850 if ($action ==
'reopen') {
851 print $form->formconfirm($url_page_current.
'?track_id='.$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
854 if ($action ==
'set_status') {
855 $new_status =
GETPOST(
'new_status');
857 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);
861 if ($projectid > 0) {
862 $projectstat =
new Project($db);
863 if ($projectstat->fetch($projectid) > 0) {
864 $projectstat->fetch_thirdparty();
868 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
874 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
876 print
'<table class="border centpercent">';
878 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
881 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
883 if (empty($user->rights->projet->all->lire)) {
884 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
885 $projectstat->next_prev_filter =
"rowid IN (".$db->sanitize(count($objectsListId) ? join(
',', array_keys($objectsListId)) :
'0').
")";
887 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
891 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
894 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
895 print
'<td colspan="3">';
896 if ($projectstat->thirdparty->id > 0) {
897 print $projectstat->thirdparty->getNomUrl(1);
905 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
906 if ($projectstat->public) {
907 print $langs->trans(
'SharedProject');
909 print $langs->trans(
'PrivateProject');
915 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
921 print
"ErrorRecordNotFound";
923 } elseif ($socid > 0) {
924 $object->fetch_thirdparty();
929 dol_banner_tab($object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
935 $object->next_prev_filter =
"te.fk_user_assign = ".((int) $user->id);
936 } elseif ($user->socid > 0) {
937 $object->next_prev_filter =
"te.fk_soc = ".((int) $user->socid);
944 $morehtmlref =
'<div class="refidno">';
945 $morehtmlref .= $object->subject;
947 if ($object->fk_user_create > 0) {
948 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
950 $fuser =
new User($db);
951 $fuser->fetch($object->fk_user_create);
952 $morehtmlref .= $fuser->getNomUrl(-1);
953 } elseif (!empty($object->email_msgid)) {
954 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
955 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
956 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.$object->email_msgid;
957 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date($object->email_date,
'dayhour');
958 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
959 } elseif (!empty($object->origin_email)) {
960 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
961 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
962 $htmltooptip = $langs->trans(
"IP").
': '.$object->ip;
963 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
966 $permissiontoedit = $object->status < 8 && !$user->socid && $user->rights->ticket->write;
970 if (isModEnabled(
"societe")) {
971 $morehtmlref .=
'<br>';
972 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
973 if ($action !=
'editcustomer' && $permissiontoedit) {
974 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.newToken().
'&track_id='.$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
976 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.$object->track_id, $object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
977 if (!empty($object->socid)) {
978 $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 if (isModEnabled(
'project')) {
984 $langs->load(
"projects");
985 $morehtmlref .=
'<br>';
986 if ($permissiontoedit) {
987 $object->fetch_project();
988 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object($object->project) && $object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
989 if ($action !=
'classify') {
990 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
992 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
994 if (!empty($object->fk_project)) {
995 $object->fetch_project();
996 $morehtmlref .= $object->project->getNomUrl(1);
997 if ($object->project->title) {
998 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($object->project->title).
'</span>';
1004 $morehtmlref .=
'</div>';
1006 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1008 dol_banner_tab($object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1010 print
'<div class="fichecenter">';
1011 print
'<div class="fichehalfleft">';
1012 print
'<div class="underbanner clearboth"></div>';
1014 print
'<table class="border tableforfield centpercent">';
1017 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1018 if (!empty($object->track_id)) {
1019 if (empty($object->ref)) {
1020 $object->ref = $object->id;
1021 print $form->showrefnav($object,
'id', $linkback, 1,
'rowid',
'track_id');
1023 print $object->track_id;
1026 print $langs->trans(
'None');
1032 print $form->editfieldkey(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1034 print $form->editfieldval(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1038 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1061 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1062 if (!empty($object->date_read)) {
1065 print
' / <i>'.convertSecondToTime(
roundUpToNextMultiple($now - $object->date_read, 60)).
'</i></span>';
1070 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1071 if (!empty($object->date_close)) {
1078 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1079 print $langs->trans(
"AssignedTo");
1080 if (isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->rights->ticket->manage) {
1081 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>';
1083 print
'</td></tr></table>';
1085 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $object->fk_user_assign > 0) {
1086 $userstat->fetch($object->fk_user_assign);
1087 print $userstat->getNomUrl(-1);
1091 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" && $object->status < 8 && !$user->socid && $user->rights->ticket->write) {
1092 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1093 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1094 print
'<input type="hidden" name="action" value="assign_user">';
1095 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1097 print $form->select_dolusers(empty($object->fk_user_assign)?$user->id:$object->fk_user_assign,
'fk_user_assign', 1);
1098 print
' <input type="submit" class="button small" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1105 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1106 print $langs->trans(
'Progression').
'</td><td class="left">';
1108 if ($action !=
'progression' && isset($object->status) && $object->status < $object::STATUS_CLOSED && !$user->socid) {
1109 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>';
1111 print
'</tr></table>';
1113 if ($user->rights->ticket->write && $action ==
'progression') {
1114 print
'<form action="'.$url_page_current.
'" method="post">';
1115 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1116 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1117 print
'<input type="hidden" name="action" value="set_progression">';
1118 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1119 print
' <input type="submit" class="button button-edit small" value="'.$langs->trans(
'Modify').
'">';
1122 print($object->progress > 0 ? $object->progress :
'0').
'%';
1128 if (isModEnabled(
'ficheinter')) {
1129 $object->fetchObjectLinked();
1130 $num = count($object->linkedObjects);
1134 foreach ($object->linkedObjects as $objecttype => $objects) {
1135 if ($objecttype ==
"fichinter") {
1136 foreach ($objects as $fichinter) {
1138 $timing += $fichinter->duration;
1144 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1151 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1157 print
'</div><div class="fichehalfright">';
1160 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1161 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1162 print
'<input type="hidden" name="action" value="change_property">';
1163 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1164 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1166 print
'<div class="underbanner clearboth"></div>';
1169 if (isModEnabled(
'categorie')) {
1170 print
'<table class="border centpercent tableforfield">';
1172 print
'<td class="valignmiddle titlefield">';
1173 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1174 print $langs->trans(
"Categories");
1175 if ($action !=
'categories' && !$user->socid) {
1176 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>';
1181 if ($user->rights->ticket->write && $action ==
'categories') {
1182 $cate_arbo = $form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 1);
1183 if (is_array($cate_arbo)) {
1185 print
'<td colspan="3">';
1186 print
'<form action="'.$url_page_current.
'" method="post">';
1187 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1188 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1189 print
'<input type="hidden" name="action" value="set_categories">';
1192 $cats = $category->containing($object->id,
'ticket');
1193 $arrayselected = array();
1194 foreach ($cats as $cat) {
1195 $arrayselected[] = $cat->id;
1198 print
img_picto(
'',
'category',
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'quatrevingtpercent widthcentpercentminusx', 0, 0);
1199 print
'<input type="submit" class="button button-edit small" value="'.$langs->trans(
'Save').
'">';
1204 print
'<td colspan="3">';
1205 print $form->showCategories($object->id, Categorie::TYPE_TICKET, 1);
1213 $actionobject->viewTicketOriginalMessage($user, $action, $object);
1216 print
'<div class="div-table-responsive-no-min">';
1217 print
'<table class="noborder tableforfield centpercent margintable">';
1218 print
'<tr class="liste_titre">';
1220 print $langs->trans(
'TicketProperties');
1223 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1224 print
'<input type="submit" class="button small" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1227 if (isset($object->status) && $object->status < $object::STATUS_NEED_MORE_INFO && $user->rights->ticket->write) {
1228 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1234 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1237 print
'<td class="titlefield">';
1238 print $langs->trans(
'Type');
1240 $formticket->selectTypesTickets($object->type_code,
'update_value_type',
'', 2);
1246 print $langs->trans(
'TicketCategory');
1248 $formticket->selectGroupTickets($object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1254 print $langs->trans(
'TicketSeverity');
1256 $formticket->selectSeveritiesTickets($object->severity_code,
'update_value_severity',
'', 2);
1261 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1262 if (!empty($object->type_code)) {
1263 print $langs->getLabelFromKey($db,
'TicketTypeShort'.$object->type_code,
'c_ticket_type',
'code',
'label', $object->type_code);
1268 if (!empty($object->category_code)) {
1269 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.$object->category_code,
'c_ticket_category',
'code',
'label', $object->category_code);
1271 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1275 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1276 if (!empty($object->severity_code)) {
1277 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.$object->severity_code,
'c_ticket_severity',
'code',
'label', $object->severity_code);
1287 print
'<!-- navbar with status -->';
1288 if (!$user->socid && $user->rights->ticket->write && isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set') !==
'properties') {
1289 $actionobject->viewStatusActions($object);
1294 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1296 print
'<div class="div-table-responsive-no-min">';
1297 print
'<div class="tagtable centpercent noborder allwidth">';
1299 print
'<div class="tagtr liste_titre">';
1300 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1301 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1302 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1303 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1304 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1305 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1306 print
'</div><!-- tagtr -->';
1309 $companystatic =
new Societe($db);
1310 $contactstatic =
new Contact($db);
1311 $userstatic =
new User($db);
1313 foreach (array(
'internal',
'external') as $source) {
1314 $tmpobject = $object;
1315 $tab = $tmpobject->listeContact(-1, $source);
1320 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1322 print
'<div class="tagtd left">';
1323 if ($tab[$i][
'source'] ==
'internal') {
1324 echo $langs->trans(
"User");
1327 if ($tab[$i][
'source'] ==
'external') {
1328 echo $langs->trans(
"ThirdPartyContact");
1332 print
'<div class="tagtd left">';
1334 if ($tab[$i][
'socid'] > 0) {
1335 $companystatic->fetch($tab[$i][
'socid']);
1336 echo $companystatic->getNomUrl(-1);
1338 if ($tab[$i][
'socid'] < 0) {
1341 if (!$tab[$i][
'socid']) {
1346 print
'<div class="tagtd">';
1347 if ($tab[$i][
'source'] ==
'internal') {
1348 if ($userstatic->fetch($tab[$i][
'id'])) {
1349 print $userstatic->getNomUrl(-1);
1352 if ($tab[$i][
'source'] ==
'external') {
1353 if ($contactstatic->fetch($tab[$i][
'id'])) {
1354 print $contactstatic->getNomUrl(-1);
1358 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1360 print
'<div class="tagtd">';
1362 print
dol_print_phone($tab[$i][
'phone'],
'',
'',
'',
'AC_TEL').
'<br>';
1364 if (!empty($tab[$i][
'phone_perso'])) {
1366 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'',
'',
'',
'AC_TEL').
'<br>';
1368 if (!empty($tab[$i][
'phone_mobile'])) {
1370 print
dol_print_phone($tab[$i][
'phone_mobile'],
'',
'',
'',
'AC_TEL').
'<br>';
1374 print
'<div class="tagtd center">';
1375 if ($object->status >= 0) {
1376 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1379 if ($tab[$i][
'source'] ==
'internal') {
1380 $userstatic->id = $tab[$i][
'id'];
1381 $userstatic->lastname = $tab[$i][
'lastname'];
1382 $userstatic->firstname = $tab[$i][
'firstname'];
1383 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1385 if ($tab[$i][
'source'] ==
'external') {
1386 $contactstatic->id = $tab[$i][
'id'];
1387 $contactstatic->lastname = $tab[$i][
'lastname'];
1388 $contactstatic->firstname = $tab[$i][
'firstname'];
1389 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1391 if ($object->status >= 0) {
1397 print
'</div><!-- tagtr -->';
1403 print
'</div><!-- contact list -->';
1407 print
'</div></div>';
1408 print
'<div class="clearboth"></div>';
1414 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1415 print
'<div class="tabsAction">'.
"\n";
1416 $parameters = array();
1417 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1422 if (empty($reshook)) {
1424 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1425 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&send_email=1&private_message=0&mode=init&token='.newToken().
'&track_id='.$object->track_id.
'#formmailbeforetitle',
'');
1429 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1430 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.newToken().
'&track_id='.$object->track_id.
'#formmailbeforetitle',
'');
1436 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1438 if ($object->fk_soc > 0 && isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1439 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddIntervention'),
'default', DOL_URL_ROOT.
'/fichinter/card.php?action=create&token='.newToken().
'&socid='. $object->fk_soc.
'&origin=ticket_ticket&originid='. $object->id,
'');
1443 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1444 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.newToken().
'&track_id='.$object->track_id,
'');
1448 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1449 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.newToken().
'&track_id='.$object->track_id,
'');
1453 if (!$user->socid && (isset($object->status) && ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1454 print
dolGetButtonAction(
'', $langs->trans(
'ReOpen'),
'default', $_SERVER[
"PHP_SELF"].
'?action=reopen&token='.newToken().
'&track_id='.$object->track_id,
'');
1458 if ($user->rights->ticket->delete && !$user->socid) {
1459 print
dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', $_SERVER[
"PHP_SELF"].
'?action=delete&token='.newToken().
'&track_id='.$object->track_id,
'');
1462 print
'</div>'.
"\n";
1468 if (
GETPOST(
'modelselected')) {
1469 $action =
'presend';
1472 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1473 $action =
'presend_addmessage';
1477 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1478 if ($object->fk_soc > 0) {
1479 $object->fetch_thirdparty();
1482 $outputlangs = $langs;
1485 $newlang =
GETPOST(
'lang_id',
'aZ09');
1486 } elseif (
getDolGlobalInt(
'MAIN_MULTILANGS') && empty($newlang) && is_object($object->thirdparty)) {
1487 $newlang = $object->thirdparty->default_lang;
1489 if (!empty($newlang)) {
1490 $outputlangs =
new Translate(
"", $conf);
1491 $outputlangs->setDefaultLang($newlang);
1494 $arrayoffamiliestoexclude = array(
'objectamount');
1496 $action =
'add_message';
1497 $modelmail =
'ticket_send';
1500 $morehtmlright =
'';
1503 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1507 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1509 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1515 $formticket->action = $action;
1516 $formticket->track_id = $object->track_id;
1517 $formticket->ref = $object->ref;
1518 $formticket->id = $object->id;
1519 $formticket->trackid =
'tic'.$object->id;
1521 $formticket->withfile = 2;
1522 $formticket->withcancel = 1;
1523 $formticket->param = array(
'fk_user_create' => $user->id);
1524 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1527 $formticket->param[
'models'] = $modelmail;
1528 $formticket->param[
'models_id'] =
GETPOST(
'modelmailselected',
'int');
1530 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.$object->track_id;
1532 $formticket->withsubstit = 1;
1533 $formticket->substit = $substitutionarray;
1534 $formticket->backtopage = $backtopage;
1536 $formticket->showMessageForm(
'100%');
1542 $param =
'&id='.$object->id;
1543 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1544 $param .=
'&contextpage='.$contextpage;
1546 if ($limit > 0 && $limit != $conf->liste_limit) {
1547 $param .=
'&limit='.$limit;
1550 $param .=
'&actioncode='.urlencode($actioncode);
1552 if ($search_agenda_label) {
1553 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1556 $morehtmlright =
'';
1558 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.$object->track_id;
1559 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1562 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1563 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1564 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', $btnstatus);
1567 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1568 $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);
1569 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', $btnstatus);
1571 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1575 $filters[
'search_agenda_label'] = $search_agenda_label;
1576 $filters[
'search_rowid'] = $search_rowid;
1578 show_actions_messaging($conf, $langs, $db, $object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1581 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1582 print
'<div class="fichecenter"><div class="fichehalfleft">';
1583 print
'<a name="builddoc"></a>';
1586 $linktoelem = $form->showLinkToObjectBlock($object,
null, array(
'ticket'));
1587 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1590 print
'<br><!-- Link to public interface -->'.
"\n";
1595 print
'<div class="fichehalfright">';
1599 $morehtmlcenter =
'<div class="nowraponall">';
1600 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.$object->id);
1601 $morehtmlcenter .=
' ';
1602 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.$object->id);
1603 $morehtmlcenter .=
'</div>';
1606 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1608 $somethingshown =
$formactions->showactions($object,
'ticket', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
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.
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)
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.
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.
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.