33require
'../main.inc.php';
34require_once DOL_DOCUMENT_ROOT.
'/ticket/class/actions_ticket.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formticket.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/lib/ticket.lib.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
41require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
44if (isModEnabled(
'project')) {
45 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
46 include_once DOL_DOCUMENT_ROOT.
'/core/lib/project.lib.php';
47 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
49if (isModEnabled(
'contract')) {
50 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcontract.class.php';
51 include_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
52 include_once DOL_DOCUMENT_ROOT.
'/contrat/class/contrat.class.php';
64$langs->loadLangs(array(
"companies",
"other",
"ticket"));
69$track_id =
GETPOST(
'track_id',
'alpha', 3);
73$notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
75$action =
GETPOST(
'action',
'aZ09');
76$cancel =
GETPOST(
'cancel',
'alpha');
77$backtopage =
GETPOST(
'backtopage',
'alpha');
78$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
79$contextpage =
GETPOST(
'contextpage',
'aZ');
82$sortfield =
GETPOST(
'sortfield',
'aZ09comma') ?
GETPOST(
'sortfield',
'aZ09comma') :
"a.datep";
83$sortorder =
GETPOST(
'sortorder',
'aZ09comma') ?
GETPOST(
'sortorder',
'aZ09comma') :
"desc";
84$search_rowid =
GETPOST(
'search_rowid');
85$search_agenda_label =
GETPOST(
'search_agenda_label');
87if (
GETPOST(
'actioncode',
'array')) {
88 $actioncode =
GETPOST(
'actioncode',
'array', 3);
89 if (!count($actioncode)) {
98$hookmanager->initHooks(array(
'ticketcard',
'globalcard'));
104$extrafields->fetch_name_optionals_label(
$object->table_element);
106$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
109$search_all =
GETPOST(
"search_all",
'alpha');
111foreach (
$object->fields as $key => $val) {
112 if (
GETPOST(
'search_'.$key,
'alpha')) {
113 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
117if (empty($action) && empty($id) && empty($ref)) {
122if (
GETPOST(
'modelselected',
'alpha')) {
128if ($id || $track_id || $ref) {
129 $res =
$object->fetch($id, $ref, $track_id);
141$url_page_current = DOL_URL_ROOT.
'/ticket/card.php';
144if ($user->socid > 0) {
145 $socid = $user->socid;
149$triggermodname =
'TICKET_MODIFY';
152$permissiontoread = $user->hasRight(
'ticket',
'read');
153$permissiontoadd = $user->hasRight(
'ticket',
'write');
154$permissiontodelete = $user->hasRight(
'ticket',
'delete');
155$permissiontoeditextra = $permissiontoadd;
156if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
158 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
161$upload_dir =
$conf->ticket->dir_output;
169$parameters = array();
170$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
176if (empty($reshook)) {
178 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
180 $search_agenda_label =
'';
183 $backurlforlist = DOL_URL_ROOT .
'/ticket/list.php';
185 if (empty($backtopage) || ($cancel && empty($id))) {
186 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
187 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
188 $backtopage = $backurlforlist;
190 $backtopage = DOL_URL_ROOT .
'/ticket/card.php?id=' . ((!empty($id) &&
$id > 0) ? $id :
'__ID__');
196 if (!empty($backtopageforcancel)) {
197 header(
"Location: " . $backtopageforcancel);
199 } elseif (!empty($backtopage)) {
200 header(
"Location: " . $backtopage);
206 if ((($action ==
'add' &&
GETPOST(
'save',
'alpha')) || ($action ==
'update' &&
$object->status < Ticket::STATUS_CLOSED)) && $permissiontoadd) {
207 $ifErrorAction = ($action ==
'add' ?
'create' :
'edit');
208 if ($action ==
'add') {
214 'ref' => [
'check' =>
'alpha',
'langs' =>
'Ref'],
215 'type_code' => [
'check' =>
'alpha',
'langs' =>
'TicketTypeRequest'],
216 'category_code' => [
'check' =>
'alpha',
'langs' =>
'TicketCategory'],
217 'severity_code' => [
'check' =>
'alpha',
'langs' =>
'TicketSeverity'],
218 'subject' => [
'check' =>
'alphanohtml',
'langs' =>
'Subject'],
219 'message' => [
'check' =>
'restricthtml',
'langs' =>
'Message']
224 if (!empty($error)) {
225 $action = $ifErrorAction;
228 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
232 $getRef =
GETPOST(
'ref',
'alpha');
234 if (!empty($getRef)) {
235 $isExistingRef =
$object->checkExistingRef($action, $getRef);
237 $isExistingRef =
true;
242 if ($isExistingRef) {
243 if ($action ==
'update') {
247 } elseif ($action ==
'add') {
252 if (!empty($getRef)) {
265 $fk_user_assign =
GETPOSTINT(
'fk_user_assign');
269 if ($fk_user_assign > 0) {
270 $object->fk_user_assign = $fk_user_assign;
271 $object->status = $object::STATUS_ASSIGNED;
274 if ($action ==
'add') {
276 $object->type_label = $langs->trans($langs->getLabelFromKey($db,
$object->type_code,
'c_ticket_type',
'code',
'label'));
277 $object->category_label = $langs->trans($langs->getLabelFromKey($db,
$object->category_code,
'c_ticket_category',
'code',
'label'));
278 $object->severity_label = $langs->trans($langs->getLabelFromKey($db,
$object->severity_code,
'c_ticket_severity',
'code',
'label'));
279 $object->fk_user_create = $user->id;
280 $object->email_from = $user->email;
282 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
283 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
293 $action = $ifErrorAction;
298 $categories =
GETPOST(
'categories',
'array');
299 $object->setCategories($categories);
302 if ($action ==
'add') {
306 $type_contact =
GETPOST(
"type",
'alpha');
308 if ($contactid > 0 && $type_contact) {
310 $result =
$object->add_contact($contactid, $typeid,
'external');
314 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
320 if ($projectid > 0) {
321 $object->setProject($projectid);
325 if (
getDolGlobalString(
'TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND') && $user->hasRight(
'ticket',
'write')) {
326 if (!
$object->markAsRead($user) > 0) {
332 if ((empty($fk_user_assign) &&
getDolGlobalInt(
'TICKET_AUTO_ASSIGN_USER_CREATE') == 1) || (
getDolGlobalInt(
'TICKET_AUTO_ASSIGN_USER_CREATE') == 2)) {
333 $result =
$object->assignUser($user, $user->id, 1);
334 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
340 $object->copyFilesForTicket(
'');
346 if (!empty($backtopage)) {
350 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
353 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
356 header(
"Location: " . $url);
363 $action = $ifErrorAction;
368 if ($action ==
"set_read" && $permissiontoadd) {
371 if (
$object->markAsRead($user) > 0) {
374 header(
"Location: card.php?track_id=" .
$object->track_id);
383 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $permissiontoadd) {
385 $useroriginassign =
$object->fk_user_assign;
395 $ret =
$object->assignUser($user, $usertoassign);
403 if ($useroriginassign > 0) {
404 $internal_contacts =
$object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
405 foreach ($internal_contacts as $key => $contact) {
406 if ($contact[
'id'] !== $usertoassign) {
407 $result =
$object->delete_contact($contact[
'rowid']);
416 if ($usertoassign > 0 && $usertoassign !== $useroriginassign) {
417 $result =
$object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
427 $object->fetch_user($usertoassign);
430 header(
"Location: card.php?track_id=" .
$object->track_id);
440 if ($action ==
'add_message' && GETPOSTISSET(
'btn_add_message') && $permissiontoread) {
444 if (!empty($backtopage)) {
447 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
450 header(
"Location: " . $url);
458 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
460 if (GETPOSTISSET(
'contactid')) {
464 if (
$object->close($user, ($action ==
"confirm_abandon" ? 1 : 0))) {
467 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
468 header(
"Location: " . $url);
476 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
478 if ($_SESSION[
'email_customer'] ==
$object->origin_email || $_SESSION[
'email_customer'] ==
$object->thirdparty->email) {
483 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketMarkedAsClosed') .
'</div>',
null,
'mesgs');
485 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
486 header(
"Location: " . $url);
494 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
496 if (
$object->delete($user) > 0) {
497 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketDeletedSuccess') .
'</div>',
null,
'mesgs');
498 header(
"Location: " . DOL_URL_ROOT .
"/ticket/list.php");
501 $langs->load(
"errors");
502 $mesg =
'<div class="error">' . $langs->trans(
$object->error) .
'</div>';
509 if ($action ==
'set_thirdparty' && $user->hasRight(
'ticket',
'write')) {
512 $url = $_SERVER[
"PHP_SELF"] .
'?track_id=' .
GETPOST(
'track_id',
'alpha');
513 header(
"Location: " . $url);
519 if ($action ==
'set_progression' && $user->hasRight(
'ticket',
'write')) {
523 $url =
'card.php?track_id=' .
$object->track_id;
524 header(
"Location: " . $url);
530 if ($action ==
'set_categories' && $user->hasRight(
'ticket',
'write')) {
534 $url =
'card.php?track_id=' .
$object->track_id;
535 header(
"Location: " . $url);
541 if ($action ==
'setsubject' && $user->hasRight(
'ticket',
'write')) {
543 if ($action ==
'setsubject') {
547 if ($action ==
'setsubject' && empty(
$object->subject)) {
549 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
553 if (!
$object->update($user) >= 0) {
559 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?track_id=" .
$object->track_id);
564 if ($action ==
'confirm_reopen' && $user->hasRight(
'ticket',
'manage') && !
GETPOST(
'cancel')) {
567 if (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED) {
568 if (
$object->fk_user_assign !=
null) {
569 $res =
$object->setStatut(Ticket::STATUS_ASSIGNED,
null,
'', $triggermodname);
571 $res =
$object->setStatut(Ticket::STATUS_NOT_READ,
null,
'', $triggermodname);
574 $url =
'card.php?track_id=' .
$object->track_id;
575 header(
"Location: " . $url);
583 } elseif ($action ==
'classin' && $permissiontoadd) {
586 $object->setProject($projectid);
587 $url =
'card.php?track_id=' .
$object->track_id;
588 header(
"Location: " . $url);
591 } elseif ($action ==
'setcontract' && $permissiontoadd) {
595 $url =
'card.php?track_id=' .
$object->track_id;
596 header(
"Location: " . $url);
599 } elseif ($action ==
"set_message" && $user->hasRight(
'ticket',
'manage')) {
603 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
605 $object->message = $fieldtomodify;
612 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
620 } elseif ($action ==
'confirm_set_status' && $permissiontoadd && !
GETPOST(
'cancel')) {
625 $res =
$object->setStatut($new_status,
null,
'',
'TICKET_MODIFY');
628 $url =
'card.php?track_id=' .
$object->track_id;
629 header(
"Location: " . $url);
639 if ($action ==
"update_extras" && $permissiontoeditextra) {
642 $attribute_name =
GETPOST(
'attribute',
'aZ09');
644 $ret = $extrafields->setOptionalsFromPost(
null,
$object, $attribute_name);
650 $result =
$object->updateExtraField($attribute_name, $triggermodname);
658 $action =
'edit_extras';
662 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
666 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
667 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
680 $permissiondellink = $user->hasRight(
'ticket',
'write');
681 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
684 include DOL_DOCUMENT_ROOT .
'/core/actions_printing.inc.php';
687 include DOL_DOCUMENT_ROOT .
'/core/actions_builddoc.inc.php';
690 $triggersendname =
'TICKET_SENTBYMAIL';
692 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
693 $trackid =
'tic' .
$object->id;
694 include DOL_DOCUMENT_ROOT .
'/core/actions_sendmails.inc.php';
697 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
698 $action =
'presend_addmessage';
707$userstat =
new User($db);
708$form =
new Form($db);
711if (isModEnabled(
'project')) {
715$help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
717$title = $actionobject->getTitle($action,
$object);
719llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-ticket page-card');
721if ($action ==
'create' || $action ==
'presend') {
722 if (empty($permissiontoadd)) {
730 $formticket->trackid =
'';
732 if (
GETPOST(
"mode",
"aZ09") ==
'init' && empty($_POST)) {
733 $formticket->clear_attached_files();
736 $formticket->withfromsocid = $socid ? $socid : $user->socid;
737 $formticket->withfromcontactid = $contactid ? $contactid :
'';
738 $formticket->withtitletopic = 1;
739 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (
getDolGlobalString(
'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION') ? 1 : 0));
740 $formticket->withusercreate = 0;
741 $formticket->withref = 1;
742 $formticket->fk_user_create = $user->id;
743 $formticket->withfile = 2;
744 $formticket->withextrafields = 1;
745 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
747 $formticket->withcancel = 1;
750 if (
GETPOST(
"mode",
"aZ09") ==
'init') {
751 $formticket->clear_attached_files();
754 $formticket->showForm(1,
'create', 0,
null, $action,
$object);
757} elseif ($action ==
'edit' && $user->rights->ticket->write &&
$object->status < Ticket::STATUS_CLOSED) {
758 if (empty($permissiontoadd)) {
768 $formticket->trackid =
$object->track_id;
769 $formticket->withfromsocid =
$object->socid;
770 $formticket->withtitletopic = 1;
772 $formticket->withnotifytiersatcreate = 0;
773 $formticket->withusercreate = 0;
774 $formticket->withref = 1;
775 $formticket->fk_user_create = $user->id;
776 $formticket->withfile = 0;
777 $formticket->action =
'update';
778 $formticket->withextrafields = 1;
779 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
781 $formticket->withcancel = 1;
783 $formticket->showForm(0,
'edit', 0,
null, $action,
$object);
787 if (!empty($res) && $res > 0) {
789 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') &&
$object->fk_user_assign != $user->id) && !$user->hasRight(
'ticket',
'manage')) {
796 if ($action ==
'close') {
797 $thirdparty_contacts =
$object->getInfosTicketExternalContact(1);
798 $contacts_select = array(
799 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
800 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
802 foreach ($thirdparty_contacts as $thirdparty_contact) {
803 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
808 $formquestion = array(
810 'name' =>
'contactid',
812 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
813 'values' => $contacts_select,
814 'default' => $default
818 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
821 if ($action ==
'abandon') {
822 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
825 if ($action ==
'delete') {
826 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
829 if ($action ==
'reopen') {
830 $formconfirm = $form->formconfirm($url_page_current.
'?track_id='.
$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
833 if ($action ==
'set_status') {
836 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id.
"&new_status=".$new_status, $langs->trans(
"TicketChangeStatus"), $langs->trans(
"TicketConfirmChangeStatus", $langs->transnoentities(
$object->labelStatusShort[$new_status])),
"confirm_set_status",
'',
'', 1);
840 $parameters = array(
'formConfirm' => $formconfirm);
841 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
842 if (empty($reshook)) {
843 $formconfirm .= $hookmanager->resPrint;
844 } elseif ($reshook > 0) {
845 $formconfirm = $hookmanager->resPrint;
852 if ($projectid > 0) {
853 $projectstat =
new Project($db);
854 if ($projectstat->fetch($projectid) > 0) {
855 $projectstat->fetch_thirdparty();
859 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
865 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
867 print
'<table class="border centpercent">';
869 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
872 print
'<tr><td>'.$langs->trans(
'Ref').
'</td><td colspan="3">';
874 if (!$user->hasRight(
'projet',
'all',
'lire')) {
875 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
876 $projectstat->next_prev_filter =
"rowid:IN:".$db->sanitize(count($objectsListId) ? implode(
',', array_keys($objectsListId)) :
'0');
878 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
882 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
885 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
886 print
'<td colspan="3">';
887 if ($projectstat->thirdparty->id > 0) {
888 print $projectstat->thirdparty->getNomUrl(1);
896 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
897 if ($projectstat->public) {
898 print $langs->trans(
'SharedProject');
900 print $langs->trans(
'PrivateProject');
906 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
912 print
"ErrorRecordNotFound";
914 } elseif ($socid > 0) {
920 dol_banner_tab(
$object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
926 $object->next_prev_filter =
"te.fk_user_assign:=:".((int) $user->id);
927 } elseif ($user->socid > 0) {
928 $object->next_prev_filter =
"te.fk_soc:=:".((int) $user->socid);
933 print
dol_get_fiche_head($head,
'tabTicket', $langs->trans(
"Ticket"), -1,
'ticket', 0,
'',
'', 0,
'', 1);
935 $morehtmlref =
'<div class="refidno">';
937 if ($user->hasRight(
'ticket',
'write') && !$user->socid) {
938 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editsubject&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetTitle'), 0).
'</a> ';
940 if ($action !=
'editsubject') {
943 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'">';
944 $morehtmlref .=
'<input type="hidden" name="action" value="setsubject">';
945 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
946 $morehtmlref .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
947 $morehtmlref .=
'<input type="text" class="minwidth300" id="subject" name="subject" value="'.$object->subject.
'" autofocus="">';
948 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button valignmiddle" name="modify" value="'.$langs->trans(
"Modify").
'">';
949 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button button-cancel vlignmiddle" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
950 $morehtmlref .=
'</form>';
955 if (
$object->fk_user_create > 0) {
956 $morehtmlref .=
'<br>';
959 $fuser =
new User($db);
960 $fuser->fetch(
$object->fk_user_create);
961 $morehtmlref .= $fuser->getNomUrl(-1);
965 $createdfrompublicticket = 0;
966 $createdfromemailcollector = 0;
967 if (!empty(
$object->origin_email) && (empty(
$object->email_msgid) || preg_match(
'/dolibarr\-tic\d+/',
$object->email_msgid))) {
969 $createdfrompublicticket = 1;
970 } elseif (!empty(
$object->email_msgid)) {
972 $createdfromemailcollector = 1;
977 if ($createdfrompublicticket) {
978 $htmltooltip .= $langs->trans(
"OriginEmail").
': '.
$object->origin_email;
980 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
982 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
983 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltipcreatedbyportal').
'</small>';
984 } elseif ($createdfromemailcollector) {
985 $langs->load(
"mails");
987 $htmltooltip .=
'<b>'.$langs->trans(
"EmailMsgID").
':</b> '.
$object->email_msgid;
988 $htmltooltip .=
'<br><b>'.$langs->trans(
"EmailDate").
':</b> '.
dol_print_date(
$object->email_date,
'dayhour');
989 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailFrom").
':</b> '.
$object->origin_email;
990 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailReply").
':</b> '.
$object->origin_replyto;
991 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailReferences").
':</b> '.
$object->origin_references;
992 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
994 $morehtmlref .=
img_picto(
'From',
'email',
'class="paddingrightonly"');
997 $morehtmlref .=
' - '.img_picto(
'ReplyTo',
'email',
'class="paddingrightonly"');
1000 $morehtmlref .=
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltipcreatedbyemailcollector').
'</small>';
1003 $permissiontoedit =
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write');
1007 if (isModEnabled(
"societe")) {
1008 $morehtmlref .=
'<br>';
1009 if ($action !=
'editcustomer' && $permissiontoedit) {
1010 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
1011 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
1013 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.
$object->track_id, (
string)
$object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
1015 $morehtmlref .=
' - <a href="'.DOL_URL_ROOT.
'/ticket/list.php?socid='.
$object->socid.
'&sortfield=t.datec&sortorder=desc'.(
getDolGlobalBool(
'TICKET_CLIENT_OTHER_TICKET_ONLY_OPEN') ?
'&search_fk_statut[]=openall' :
'').
'">'.
img_picto($langs->trans(
"Tickets"),
'ticket',
'class="pictofixedwidth"').
' '.$langs->trans(
"TicketHistory").
'</a>';
1020 if (isModEnabled(
'project')) {
1021 $langs->load(
"projects");
1022 $morehtmlref .=
'<br>';
1023 if ($permissiontoedit) {
1025 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object(
$object->project) &&
$object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
1026 if ($action !=
'classify') {
1027 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1029 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid, (
string)
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1031 if (!empty(
$object->fk_project)) {
1033 $morehtmlref .=
$object->project->getNomUrl(1);
1034 if (
$object->project->title) {
1035 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag(
$object->project->title).
'</span>';
1044 if (isModEnabled(
'contract')) {
1045 $langs->load(
'contracts');
1046 $morehtmlref .=
'<br>';
1047 if ($permissiontoedit) {
1048 $morehtmlref .=
img_picto($langs->trans(
"Contract"),
'contract',
'class="pictofixedwidth"');
1049 if ($action ==
'edit_contrat') {
1051 $morehtmlref .= $formcontract->formSelectContract($_SERVER[
"PHP_SELF"].
'?id='.
$object->id,
$object->socid,
$object->fk_contract,
'contratid', 0, 1, 1, 1);
1053 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edit_contrat&token='.
newToken().
'&id='.
$object->id.
'">';
1054 $morehtmlref .=
img_edit($langs->trans(
'SetContract'));
1055 $morehtmlref .=
'</a>';
1058 if (!empty(
$object->fk_contract)) {
1059 $contratstatic =
new Contrat($db);
1060 $contratstatic->fetch(
$object->fk_contract);
1062 $morehtmlref .= $contratstatic->getNomUrl(0, 0, 1);
1068 $morehtmlref .=
'</div>';
1070 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1072 dol_banner_tab(
$object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1074 print
'<div class="fichecenter">';
1075 print
'<div class="fichehalfleft">';
1076 print
'<div class="underbanner clearboth"></div>';
1078 print
'<table class="border tableforfield centpercent">';
1081 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1082 if (!empty(
$object->track_id)) {
1085 print $form->showrefnav(
$object,
'id', $linkback, 1,
'rowid',
'track_id');
1090 print $langs->trans(
'None');
1104 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1127 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1128 if (!empty(
$object->date_read)) {
1130 print
'<span class="opacitymedium"><span class="small"> - '.$langs->trans(
"TimeElapsedSince").
': ';
1138 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1139 if (!empty(
$object->date_close)) {
1146 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1147 print $langs->trans(
"AssignedTo");
1148 if (isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->hasRight(
'ticket',
'manage')) {
1149 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>';
1151 print
'</td></tr></table>';
1153 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" &&
$object->fk_user_assign > 0) {
1154 $userstat->fetch(
$object->fk_user_assign);
1155 print $userstat->getNomUrl(-1);
1159 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" &&
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write')) {
1160 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1161 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1162 print
'<input type="hidden" name="action" value="assign_user">';
1163 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1165 print $form->select_dolusers(empty(
$object->fk_user_assign) ? $user->id :
$object->fk_user_assign,
'fk_user_assign', 1);
1166 print
' <input type="submit" class="button smallpaddingimp" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1173 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1174 print $langs->trans(
'Progression').
'</td><td class="left">';
1176 if ($action !=
'progression' && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED && !$user->socid) {
1177 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>';
1179 print
'</tr></table>';
1181 if ($user->hasRight(
'ticket',
'write') && $action ==
'progression') {
1182 print
'<form action="'.$url_page_current.
'" method="post">';
1183 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1184 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1185 print
'<input type="hidden" name="action" value="set_progression">';
1186 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1187 print
' <input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Modify').
'">';
1196 if (isModEnabled(
'intervention')) {
1198 $num = count(
$object->linkedObjects);
1202 foreach (
$object->linkedObjects as $objecttype => $objects) {
1203 if ($objecttype ==
"fichinter") {
1204 '@phan-var-force Fichinter[] $objects';
1205 foreach ($objects as $fichinter) {
1208 $timing += $fichinter->duration;
1214 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1221 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1227 print
'</div><div class="fichehalfright">';
1230 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1231 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1232 print
'<input type="hidden" name="action" value="change_property">';
1233 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1234 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1237 print
'<div class="div-table-responsive-no-min">';
1238 print
'<table class="border tableforfield centpercent margintable bordertopimp">';
1239 print
'<tr class="liste_titre">';
1241 print $langs->trans(
'TicketProperties');
1244 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1245 print
'<input type="submit" class="button smallpaddingimp" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1248 if (isset(
$object->status) && (
$object->status < $object::STATUS_NEED_MORE_INFO || !
getDolGlobalInt(
'TICKET_DISALLOW_CLASSIFICATION_MODIFICATION_EVEN_IF_CLOSED')) && $user->hasRight(
'ticket',
'write')) {
1249 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1255 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1258 print
'<td class="titlefield">';
1259 print $langs->trans(
'Type');
1261 $formticket->selectTypesTickets(
$object->type_code,
'update_value_type',
'', 2);
1267 print $langs->trans(
'TicketCategory');
1269 $formticket->selectGroupTickets(
$object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1275 print $langs->trans(
'TicketSeverity');
1277 $formticket->selectSeveritiesTickets(
$object->severity_code,
'update_value_severity',
'', 2);
1282 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1283 if (!empty(
$object->type_code)) {
1284 print $langs->getLabelFromKey($db,
'TicketTypeShort'.
$object->type_code,
'c_ticket_type',
'code',
'label',
$object->type_code);
1289 if (!empty(
$object->category_code)) {
1290 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.
$object->category_code,
'c_ticket_category',
'code',
'label',
$object->category_code);
1292 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1296 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1297 if (!empty(
$object->severity_code)) {
1298 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.
$object->severity_code,
'c_ticket_severity',
'code',
'label',
$object->severity_code);
1308 if (isModEnabled(
'category')) {
1309 print
'<!-- tag/categories -->'.
"\n";
1310 print
'<table class="border centpercent tableforfield">';
1312 print
'<td class="valignmiddle titlefield">';
1313 print
'<table class="nobordernopadding centpercent"><tr><td class="none">';
1314 print $langs->trans(
"Categories");
1315 if ($action !=
'categories' && !$user->socid) {
1316 print
'</td><td class="right"><a class="editfielda" href="'.$url_page_current.
'?action=categories&track_id='.urlencode(
$object->track_id).
'">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1322 if ($user->hasRight(
'ticket',
'write') && $action ==
'categories') {
1323 print
'<td colspan="3">';
1324 print
'<form action="'.$url_page_current.
'" method="POST">';
1325 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1326 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1327 print
'<input type="hidden" name="action" value="set_categories">';
1328 print $form->selectCategories(Categorie::TYPE_TICKET,
'categories',
$object);
1329 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Save').
'">';
1333 print
'<td colspan="3">';
1334 print $form->showCategories(
$object->id, Categorie::TYPE_TICKET, 1);
1342 $actionobject->viewTicketOriginalMessage($user, $action,
$object);
1346 print
'<!-- navbar with status -->';
1347 if (!$user->socid && $user->hasRight(
'ticket',
'write') && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED) {
1348 $actionobject->viewStatusActions(
$object);
1353 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1355 print
'<div class="div-table-responsive-no-min">';
1356 print
'<div class="tagtable centpercent noborder allwidth">';
1358 print
'<div class="tagtr liste_titre">';
1359 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1360 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1361 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1362 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1363 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1364 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1365 print
'</div><!-- tagtr -->';
1368 $companystatic =
new Societe($db);
1369 $contactstatic =
new Contact($db);
1370 $userstatic =
new User($db);
1372 foreach (array(
'internal',
'external') as $source) {
1374 $tab = $tmpobject->listeContact(-1, $source);
1376 $num = is_array($tab) ? count($tab) : 0;
1378 foreach (array_keys($tab) as $i) {
1381 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1383 print
'<div class="tagtd left">';
1384 if ($tab_i[
'source'] ==
'internal') {
1385 echo $langs->trans(
"User");
1388 if ($tab_i[
'source'] ==
'external') {
1389 echo $langs->trans(
"ThirdPartyContact");
1393 print
'<div class="tagtd left">';
1395 if ($tab_i[
'socid'] > 0) {
1396 $companystatic->fetch($tab_i[
'socid']);
1397 echo $companystatic->getNomUrl(-1);
1399 if ($tab_i[
'socid'] < 0) {
1402 if (!$tab_i[
'socid']) {
1407 print
'<div class="tagtd">';
1408 if ($tab_i[
'source'] ==
'internal') {
1409 if ($userstatic->fetch($tab_i[
'id'])) {
1410 print $userstatic->getNomUrl(-1);
1413 if ($tab_i[
'source'] ==
'external') {
1414 if ($contactstatic->fetch($tab_i[
'id'])) {
1415 print $contactstatic->getNomUrl(-1);
1419 <div class="tagtd">' . $tab_i[
'libelle'].
'</div>';
1421 print
'<div class="tagtd">';
1425 if (array_key_exists(
'phone_perso', $tab_i) && !empty($tab_i[
'phone_perso'])) {
1427 print
'<br>'.dol_print_phone((
string) $tab_i[
'phone_perso'],
'', 0, 0,
'AC_TEL').
'<br>';
1429 if (!empty($tab_i[
'phone_mobile'])) {
1431 print
dol_print_phone($tab_i[
'phone_mobile'],
'', 0, 0,
'AC_TEL').
'<br>';
1435 print
'<div class="tagtd center">';
1437 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab_i[
'rowid'].
'">';
1440 if ($tab_i[
'source'] ==
'internal') {
1441 $userstatic->id = $tab_i[
'id'];
1442 $userstatic->lastname = $tab_i[
'lastname'];
1443 $userstatic->firstname = $tab_i[
'firstname'];
1444 echo $userstatic->LibStatut($tab_i[
'statuscontact'], 3);
1446 if ($tab_i[
'source'] ==
'external') {
1447 $contactstatic->id = $tab_i[
'id'];
1448 $contactstatic->lastname = $tab_i[
'lastname'];
1449 $contactstatic->firstname = $tab_i[
'firstname'];
1450 echo $contactstatic->LibStatut($tab_i[
'statuscontact'], 3);
1458 print
'</div><!-- tagtr -->';
1464 print
'</div><!-- contact list -->';
1468 print
'</div></div>';
1469 print
'<div class="clearboth"></div>';
1475 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1476 print
'<div class="tabsAction">'.
"\n";
1477 $parameters = array();
1478 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
1483 if (empty($reshook)) {
1485 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1486 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',
'');
1490 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1491 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1497 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1499 if (
$object->fk_soc > 0 && isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1500 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,
'');
1504 if (isset(
$object->status) &&
$object->status >= 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1505 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1509 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1510 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1514 if (!$user->socid && (isset(
$object->status) && (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1519 if ($permissiontoedit) {
1520 print
dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.
newToken(),
'', $permissiontoedit);
1524 if ($user->hasRight(
'ticket',
'delete') && !$user->socid) {
1528 print
'</div>'.
"\n";
1532 if (
GETPOST(
'modelselected')) {
1533 $action =
'presend';
1536 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1537 $action =
'presend_addmessage';
1541 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1546 $outputlangs = $langs;
1549 $newlang =
GETPOST(
'lang_id',
'aZ09');
1551 $newlang =
$object->thirdparty->default_lang;
1553 if (!empty($newlang)) {
1555 $outputlangs->setDefaultLang($newlang);
1558 $arrayoffamiliestoexclude = array(
'objectamount');
1560 $action =
'add_message';
1561 $modelmail =
'ticket_send';
1564 $morehtmlright =
'';
1566 $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, $arrayoffamiliestoexclude,
$object);
1568 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1572 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1574 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1580 $formticket->action = $action;
1581 $formticket->track_id =
$object->track_id;
1582 $formticket->ref =
$object->ref;
1583 $formticket->id =
$object->id;
1584 $formticket->trackid =
'tic'.$object->id;
1586 $formticket->withfile = 2;
1587 $formticket->withcancel = 1;
1588 $formticket->param = array(
'fk_user_create' => $user->id);
1589 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1592 $formticket->param[
'models'] = $modelmail;
1593 $formticket->param[
'models_id'] =
GETPOSTINT(
'modelmailselected');
1595 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.urldecode(
$object->track_id);
1597 $formticket->withsubstit = 1;
1598 $formticket->substit = $substitutionarray;
1599 $formticket->backtopage = $backtopage;
1601 $formticket->showMessageForm(
'100%');
1607 $param =
'&id='.$object->id;
1608 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1609 $param .=
'&contextpage='.$contextpage;
1611 if ($limit > 0 && $limit !=
$conf->liste_limit) {
1612 $param .=
'&limit='.$limit;
1615 $param .=
'&actioncode='.urlencode($actioncode);
1617 if ($search_agenda_label) {
1618 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1621 $morehtmlright =
'';
1623 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.
$object->track_id;
1624 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1627 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1628 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1629 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', (
int) $btnstatus);
1632 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1633 $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);
1634 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', (
int) $btnstatus);
1636 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1640 $filters[
'search_agenda_label'] = $search_agenda_label;
1641 $filters[
'search_rowid'] = $search_rowid;
1643 show_actions_messaging(
$conf, $langs, $db,
$object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1646 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1647 print
'<div class="fichecenter"><div class="fichehalfleft">';
1648 print
'<a name="builddoc"></a>';
1654 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
1655 $genallowed = $permissiontoadd;
1656 $delallowed = $permissiontodelete;
1660 $codelang =
$object->thirdparty->default_lang;
1663 print $formfile->showdocuments(
'ticket', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $codelang);
1666 $tmparray = $form->showLinkToObjectBlock(
$object, array(), array(
'ticket'), 1);
1667 $linktoelem = $tmparray[
'linktoelem'];
1668 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
1669 print $htmltoenteralink;
1671 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
1674 print
'<br><!-- Link to public interface -->'.
"\n";
1679 print
'<div class="fichehalfright">';
1683 $morehtmlcenter =
'<div class="nowraponall">';
1684 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.
$object->id);
1685 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.
$object->id);
1686 $morehtmlcenter .=
'</div>';
1689 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1691 $somethingshown = $formactions->showactions(
$object,
'ticket', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
$id
Support class for third parties, contacts, members, users or resources.
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class Actions of the module ticket.
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.
show_actions_messaging($conf, $langs, $db, $filterobj, $objcon=null, $noprint=0, $actioncode='', $donetodo='done', $filters=array(), $sortfield='a.datep, a.id', $sortorder='DESC')
Show html area with actions in messaging format.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
dol_print_ip($ip, $mode=0, $showname=0)
Return an IP formatted to be shown on screen.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_print_phone($phone, $countrycode='', $cid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0, $morecss='paddingright')
Format phone numbers according to country.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
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.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dolPrintLabel($s, $escapeonlyhtmltags=0)
Return a string label (so on 1 line only and that should not contains any HTML) ready to be output on...
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
getDolGlobalBool($key, $default=false)
Return a Dolibarr global constant boolean value.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
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.