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,
GETPOSTINT(
'private_message'), 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,
null,
'',
'TICKET_MODIFY');
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,
null,
'',
'TICKET_MODIFY');
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 =
'';
744 if (
GETPOST(
"mode",
"aZ09") ==
'init' && empty($_POST)) {
745 $formticket->clear_attached_files();
748 $formticket->withfromsocid = $socid ? $socid : $user->socid;
749 $formticket->withfromcontactid = $contactid ? $contactid :
'';
750 $formticket->withtitletopic = 1;
751 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (
getDolGlobalString(
'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION') ? 1 : 0));
752 $formticket->withusercreate = 0;
753 $formticket->withref = 1;
754 $formticket->fk_user_create = $user->id;
755 $formticket->withfile = 2;
756 $formticket->withextrafields = 1;
757 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
759 $formticket->withcancel = 1;
761 $formticket->showForm(1,
'create', 0,
null, $action);
813} 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'
814 || $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') {
817 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) {
822 if ($action ==
'close') {
823 $thirdparty_contacts = $object->getInfosTicketExternalContact(1);
824 $contacts_select = array(
825 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
826 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
828 foreach ($thirdparty_contacts as $thirdparty_contact) {
829 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
834 $formquestion = array(
836 'name' =>
'contactid',
838 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
839 'values' => $contacts_select,
840 'default' => $default
844 print $form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
847 if ($action ==
'abandon') {
848 print $form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
851 if ($action ==
'delete') {
852 print $form->formconfirm($url_page_current.
"?track_id=".$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
855 if ($action ==
'reopen') {
856 print $form->formconfirm($url_page_current.
'?track_id='.$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
859 if ($action ==
'set_status') {
860 $new_status =
GETPOST(
'new_status');
862 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);
866 if ($projectid > 0) {
867 $projectstat =
new Project($db);
868 if ($projectstat->fetch($projectid) > 0) {
869 $projectstat->fetch_thirdparty();
873 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
879 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
881 print
'<table class="border centpercent">';
883 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
886 print
'<tr><td width="30%">'.$langs->trans(
'Ref').
'</td><td colspan="3">';
888 if (empty($user->rights->projet->all->lire)) {
889 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
890 $projectstat->next_prev_filter =
"rowid IN (".$db->sanitize(count($objectsListId) ? join(
',', array_keys($objectsListId)) :
'0').
")";
892 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
896 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
899 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
900 print
'<td colspan="3">';
901 if ($projectstat->thirdparty->id > 0) {
902 print $projectstat->thirdparty->getNomUrl(1);
910 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
911 if ($projectstat->public) {
912 print $langs->trans(
'SharedProject');
914 print $langs->trans(
'PrivateProject');
920 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
926 print
"ErrorRecordNotFound";
928 } elseif ($socid > 0) {
929 $object->fetch_thirdparty();
934 dol_banner_tab($object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
940 $object->next_prev_filter =
"te.fk_user_assign = ".((int) $user->id);
941 } elseif ($user->socid > 0) {
942 $object->next_prev_filter =
"te.fk_soc = ".((int) $user->socid);
949 $morehtmlref =
'<div class="refidno">';
950 $morehtmlref .= $object->subject;
952 if ($object->fk_user_create > 0) {
953 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
955 $fuser =
new User($db);
956 $fuser->fetch($object->fk_user_create);
957 $morehtmlref .= $fuser->getNomUrl(-1);
958 } elseif (!empty($object->email_msgid)) {
959 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
960 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
961 $htmltooltip = $langs->trans(
"EmailMsgID").
': '.$object->email_msgid;
962 $htmltooltip .=
'<br>'.$langs->trans(
"EmailDate").
': '.
dol_print_date($object->email_date,
'dayhour');
963 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
964 } elseif (!empty($object->origin_email)) {
965 $morehtmlref .=
'<br>'.$langs->trans(
"CreatedBy").
' : ';
966 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
967 $htmltooptip = $langs->trans(
"IP").
': '.$object->ip;
968 $morehtmlref .=
dol_escape_htmltag($object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooptip, 1,
'help',
'', 0, 3,
'tooltip').
'</small>';
971 $permissiontoedit = $object->status < 8 && !$user->socid && $user->rights->ticket->write;
975 if (isModEnabled(
"societe")) {
976 $morehtmlref .=
'<br>';
977 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
978 if ($action !=
'editcustomer' && $permissiontoedit) {
979 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.newToken().
'&track_id='.$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
981 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.$object->track_id, $object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
982 if (!empty($object->socid)) {
983 $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>';
988 if (isModEnabled(
'project')) {
989 $langs->load(
"projects");
990 $morehtmlref .=
'<br>';
991 if ($permissiontoedit) {
992 $object->fetch_project();
993 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object($object->project) && $object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
994 if ($action !=
'classify') {
995 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
997 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
999 if (!empty($object->fk_project)) {
1000 $object->fetch_project();
1001 $morehtmlref .= $object->project->getNomUrl(1);
1002 if ($object->project->title) {
1003 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($object->project->title).
'</span>';
1009 $morehtmlref .=
'</div>';
1011 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1013 dol_banner_tab($object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1015 print
'<div class="fichecenter">';
1016 print
'<div class="fichehalfleft">';
1017 print
'<div class="underbanner clearboth"></div>';
1019 print
'<table class="border tableforfield centpercent">';
1022 print
'<tr><td class="titlefield">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1023 if (!empty($object->track_id)) {
1024 if (empty($object->ref)) {
1025 $object->ref = $object->id;
1026 print $form->showrefnav($object,
'id', $linkback, 1,
'rowid',
'track_id');
1028 print $object->track_id;
1031 print $langs->trans(
'None');
1037 print $form->editfieldkey(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1039 print $form->editfieldval(
"Subject",
'subject', $object->subject, $object, $user->rights->ticket->write && !$user->socid,
'string');
1043 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1066 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1067 if (!empty($object->date_read)) {
1070 print
' / <i>'.convertSecondToTime(
roundUpToNextMultiple($now - $object->date_read, 60)).
'</i></span>';
1075 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1076 if (!empty($object->date_close)) {
1083 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1084 print $langs->trans(
"AssignedTo");
1085 if (isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->rights->ticket->manage) {
1086 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>';
1088 print
'</td></tr></table>';
1090 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $object->fk_user_assign > 0) {
1091 $userstat->fetch($object->fk_user_assign);
1092 print $userstat->getNomUrl(-1);
1096 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" && $object->status < 8 && !$user->socid && $user->rights->ticket->write) {
1097 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1098 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1099 print
'<input type="hidden" name="action" value="assign_user">';
1100 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1102 print $form->select_dolusers(empty($object->fk_user_assign)?$user->id:$object->fk_user_assign,
'fk_user_assign', 1);
1103 print
' <input type="submit" class="button small" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1110 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1111 print $langs->trans(
'Progression').
'</td><td class="left">';
1113 if ($action !=
'progression' && isset($object->status) && $object->status < $object::STATUS_CLOSED && !$user->socid) {
1114 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>';
1116 print
'</tr></table>';
1118 if ($user->rights->ticket->write && $action ==
'progression') {
1119 print
'<form action="'.$url_page_current.
'" method="post">';
1120 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1121 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1122 print
'<input type="hidden" name="action" value="set_progression">';
1123 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1124 print
' <input type="submit" class="button button-edit small" value="'.$langs->trans(
'Modify').
'">';
1127 print($object->progress > 0 ? $object->progress :
'0').
'%';
1133 if (isModEnabled(
'ficheinter')) {
1134 $object->fetchObjectLinked();
1135 $num = count($object->linkedObjects);
1139 foreach ($object->linkedObjects as $objecttype => $objects) {
1140 if ($objecttype ==
"fichinter") {
1141 foreach ($objects as $fichinter) {
1143 $timing += $fichinter->duration;
1149 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1156 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1162 print
'</div><div class="fichehalfright">';
1165 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1166 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1167 print
'<input type="hidden" name="action" value="change_property">';
1168 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1169 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1171 print
'<div class="underbanner clearboth"></div>';
1174 if (isModEnabled(
'categorie')) {
1175 print
'<table class="border centpercent tableforfield">';
1177 print
'<td class="valignmiddle titlefield">';
1178 print
'<table class="nobordernopadding centpercent"><tr><td class="titlefield">';
1179 print $langs->trans(
"Categories");
1180 if ($action !=
'categories' && !$user->socid) {
1181 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>';
1186 if ($user->rights->ticket->write && $action ==
'categories') {
1187 $cate_arbo = $form->select_all_categories(Categorie::TYPE_TICKET,
'',
'parent', 64, 0, 1);
1188 if (is_array($cate_arbo)) {
1190 print
'<td colspan="3">';
1191 print
'<form action="'.$url_page_current.
'" method="post">';
1192 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1193 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1194 print
'<input type="hidden" name="action" value="set_categories">';
1197 $cats = $category->containing($object->id,
'ticket');
1198 $arrayselected = array();
1199 foreach ($cats as $cat) {
1200 $arrayselected[] = $cat->id;
1203 print
img_picto(
'',
'category',
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected,
'', 0,
'quatrevingtpercent widthcentpercentminusx', 0, 0);
1204 print
'<input type="submit" class="button button-edit small" value="'.$langs->trans(
'Save').
'">';
1209 print
'<td colspan="3">';
1210 print $form->showCategories($object->id, Categorie::TYPE_TICKET, 1);
1218 $actionobject->viewTicketOriginalMessage($user, $action, $object);
1221 print
'<div class="div-table-responsive-no-min">';
1222 print
'<table class="noborder tableforfield centpercent margintable">';
1223 print
'<tr class="liste_titre">';
1225 print $langs->trans(
'TicketProperties');
1228 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1229 print
'<input type="submit" class="button small" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1232 if (isset($object->status) && $object->status < $object::STATUS_NEED_MORE_INFO && $user->rights->ticket->write) {
1233 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1239 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->rights->ticket->write) {
1242 print
'<td class="titlefield">';
1243 print $langs->trans(
'Type');
1245 $formticket->selectTypesTickets($object->type_code,
'update_value_type',
'', 2);
1251 print $langs->trans(
'TicketCategory');
1253 $formticket->selectGroupTickets($object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1259 print $langs->trans(
'TicketSeverity');
1261 $formticket->selectSeveritiesTickets($object->severity_code,
'update_value_severity',
'', 2);
1266 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1267 if (!empty($object->type_code)) {
1268 print $langs->getLabelFromKey($db,
'TicketTypeShort'.$object->type_code,
'c_ticket_type',
'code',
'label', $object->type_code);
1273 if (!empty($object->category_code)) {
1274 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.$object->category_code,
'c_ticket_category',
'code',
'label', $object->category_code);
1276 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1280 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1281 if (!empty($object->severity_code)) {
1282 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.$object->severity_code,
'c_ticket_severity',
'code',
'label', $object->severity_code);
1292 print
'<!-- navbar with status -->';
1293 if (!$user->socid && $user->rights->ticket->write && isset($object->status) && $object->status < $object::STATUS_CLOSED &&
GETPOST(
'set') !==
'properties') {
1294 $actionobject->viewStatusActions($object);
1299 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1301 print
'<div class="div-table-responsive-no-min">';
1302 print
'<div class="tagtable centpercent noborder allwidth">';
1304 print
'<div class="tagtr liste_titre">';
1305 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1306 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1307 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1308 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1309 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1310 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1311 print
'</div><!-- tagtr -->';
1314 $companystatic =
new Societe($db);
1315 $contactstatic =
new Contact($db);
1316 $userstatic =
new User($db);
1318 foreach (array(
'internal',
'external') as $source) {
1319 $tmpobject = $object;
1320 $tab = $tmpobject->listeContact(-1, $source);
1325 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1327 print
'<div class="tagtd left">';
1328 if ($tab[$i][
'source'] ==
'internal') {
1329 echo $langs->trans(
"User");
1332 if ($tab[$i][
'source'] ==
'external') {
1333 echo $langs->trans(
"ThirdPartyContact");
1337 print
'<div class="tagtd left">';
1339 if ($tab[$i][
'socid'] > 0) {
1340 $companystatic->fetch($tab[$i][
'socid']);
1341 echo $companystatic->getNomUrl(-1);
1343 if ($tab[$i][
'socid'] < 0) {
1346 if (!$tab[$i][
'socid']) {
1351 print
'<div class="tagtd">';
1352 if ($tab[$i][
'source'] ==
'internal') {
1353 if ($userstatic->fetch($tab[$i][
'id'])) {
1354 print $userstatic->getNomUrl(-1);
1357 if ($tab[$i][
'source'] ==
'external') {
1358 if ($contactstatic->fetch($tab[$i][
'id'])) {
1359 print $contactstatic->getNomUrl(-1);
1363 <div class="tagtd">' . $tab[$i][
'libelle'].
'</div>';
1365 print
'<div class="tagtd">';
1367 print
dol_print_phone($tab[$i][
'phone'],
'',
'',
'',
'AC_TEL').
'<br>';
1369 if (!empty($tab[$i][
'phone_perso'])) {
1371 print
'<br>'.dol_print_phone($tab[$i][
'phone_perso'],
'',
'',
'',
'AC_TEL').
'<br>';
1373 if (!empty($tab[$i][
'phone_mobile'])) {
1375 print
dol_print_phone($tab[$i][
'phone_mobile'],
'',
'',
'',
'AC_TEL').
'<br>';
1379 print
'<div class="tagtd center">';
1380 if ($object->status >= 0) {
1381 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab[$i][
'rowid'].
'">';
1384 if ($tab[$i][
'source'] ==
'internal') {
1385 $userstatic->id = $tab[$i][
'id'];
1386 $userstatic->lastname = $tab[$i][
'lastname'];
1387 $userstatic->firstname = $tab[$i][
'firstname'];
1388 echo $userstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1390 if ($tab[$i][
'source'] ==
'external') {
1391 $contactstatic->id = $tab[$i][
'id'];
1392 $contactstatic->lastname = $tab[$i][
'lastname'];
1393 $contactstatic->firstname = $tab[$i][
'firstname'];
1394 echo $contactstatic->LibStatut($tab[$i][
'statuscontact'], 3);
1396 if ($object->status >= 0) {
1402 print
'</div><!-- tagtr -->';
1408 print
'</div><!-- contact list -->';
1412 print
'</div></div>';
1413 print
'<div class="clearboth"></div>';
1419 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1420 print
'<div class="tabsAction">'.
"\n";
1421 $parameters = array();
1422 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1427 if (empty($reshook)) {
1429 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1430 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',
'');
1434 if (isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1435 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.newToken().
'&track_id='.$object->track_id.
'#formmailbeforetitle',
'');
1441 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1443 if ($object->fk_soc > 0 && isset($object->status) && $object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1444 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,
'');
1448 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1449 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.newToken().
'&track_id='.$object->track_id,
'');
1453 if (isset($object->status) && $object->status > 0 && $object->status < Ticket::STATUS_CLOSED && $user->rights->ticket->write) {
1454 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.newToken().
'&track_id='.$object->track_id,
'');
1458 if (!$user->socid && (isset($object->status) && ($object->status == Ticket::STATUS_CLOSED || $object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1459 print
dolGetButtonAction(
'', $langs->trans(
'ReOpen'),
'default', $_SERVER[
"PHP_SELF"].
'?action=reopen&token='.newToken().
'&track_id='.$object->track_id,
'');
1463 if ($user->rights->ticket->delete && !$user->socid) {
1464 print
dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', $_SERVER[
"PHP_SELF"].
'?action=delete&token='.newToken().
'&track_id='.$object->track_id,
'');
1467 print
'</div>'.
"\n";
1473 if (
GETPOST(
'modelselected')) {
1474 $action =
'presend';
1477 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1478 $action =
'presend_addmessage';
1482 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1483 if ($object->fk_soc > 0) {
1484 $object->fetch_thirdparty();
1487 $outputlangs = $langs;
1490 $newlang =
GETPOST(
'lang_id',
'aZ09');
1491 } elseif (
getDolGlobalInt(
'MAIN_MULTILANGS') && empty($newlang) && is_object($object->thirdparty)) {
1492 $newlang = $object->thirdparty->default_lang;
1494 if (!empty($newlang)) {
1495 $outputlangs =
new Translate(
"", $conf);
1496 $outputlangs->setDefaultLang($newlang);
1499 $arrayoffamiliestoexclude = array(
'objectamount');
1501 $action =
'add_message';
1502 $modelmail =
'ticket_send';
1505 $morehtmlright =
'';
1508 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1512 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1514 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1520 $formticket->action = $action;
1521 $formticket->track_id = $object->track_id;
1522 $formticket->ref = $object->ref;
1523 $formticket->id = $object->id;
1524 $formticket->trackid =
'tic'.$object->id;
1526 $formticket->withfile = 2;
1527 $formticket->withcancel = 1;
1528 $formticket->param = array(
'fk_user_create' => $user->id);
1529 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1532 $formticket->param[
'models'] = $modelmail;
1533 $formticket->param[
'models_id'] =
GETPOST(
'modelmailselected',
'int');
1535 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.$object->track_id;
1537 $formticket->withsubstit = 1;
1538 $formticket->substit = $substitutionarray;
1539 $formticket->backtopage = $backtopage;
1541 $formticket->showMessageForm(
'100%');
1547 $param =
'&id='.$object->id;
1548 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1549 $param .=
'&contextpage='.$contextpage;
1551 if ($limit > 0 && $limit != $conf->liste_limit) {
1552 $param .=
'&limit='.$limit;
1555 $param .=
'&actioncode='.urlencode($actioncode);
1557 if ($search_agenda_label) {
1558 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1561 $morehtmlright =
'';
1563 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.$object->track_id;
1564 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1567 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1568 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1569 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', $btnstatus);
1572 $btnstatus = $object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1573 $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);
1574 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', $btnstatus);
1576 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1580 $filters[
'search_agenda_label'] = $search_agenda_label;
1581 $filters[
'search_rowid'] = $search_rowid;
1583 show_actions_messaging($conf, $langs, $db, $object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1586 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1587 print
'<div class="fichecenter"><div class="fichehalfleft">';
1588 print
'<a name="builddoc"></a>';
1591 $linktoelem = $form->showLinkToObjectBlock($object,
null, array(
'ticket'));
1592 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1595 print
'<br><!-- Link to public interface -->'.
"\n";
1600 print
'<div class="fichehalfright">';
1604 $morehtmlcenter =
'<div class="nowraponall">';
1605 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.$object->id);
1606 $morehtmlcenter .=
' ';
1607 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.$object->id);
1608 $morehtmlcenter .=
'</div>';
1611 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1613 $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.
GETPOSTINT($paramname, $method=0)
Return value of a param into GET or POST supervariable.
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.