34require
'../main.inc.php';
43require_once DOL_DOCUMENT_ROOT.
'/ticket/class/actions_ticket.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formticket.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/lib/ticket.lib.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
50require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
53 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
54 include_once DOL_DOCUMENT_ROOT.
'/core/lib/project.lib.php';
55 include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
58 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcontract.class.php';
59 include_once DOL_DOCUMENT_ROOT.
'/core/lib/contract.lib.php';
60 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');
76$action =
GETPOST(
'action',
'aZ09');
77$cancel =
GETPOST(
'cancel',
'alpha');
78$backtopage =
GETPOST(
'backtopage',
'alpha');
79$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
80$contextpage =
GETPOST(
'contextpage',
'aZ');
83$sortfield =
GETPOST(
'sortfield',
'aZ09comma') ?
GETPOST(
'sortfield',
'aZ09comma') :
"a.datep";
84$sortorder =
GETPOST(
'sortorder',
'aZ09comma') ?
GETPOST(
'sortorder',
'aZ09comma') :
"desc";
85$search_rowid =
GETPOST(
'search_rowid');
86$search_agenda_label =
GETPOST(
'search_agenda_label');
88if (
GETPOST(
'actioncode',
'array')) {
89 $actioncode =
GETPOST(
'actioncode',
'array', 3);
90 if (!count($actioncode)) {
99$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')) {
129if ($id || $track_id || $ref) {
130 $res =
$object->fetch($id, $ref, $track_id);
142$url_page_current = DOL_URL_ROOT.
'/ticket/card.php';
145if ($user->socid > 0) {
146 $socid = $user->socid;
150$triggermodname =
'TICKET_MODIFY';
153$permissiontoread = $user->hasRight(
'ticket',
'read');
154$permissiontoadd = $user->hasRight(
'ticket',
'write');
155$permissiontodelete = $user->hasRight(
'ticket',
'delete');
157$permissiontomanage = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'ticket',
'write')) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'ticket',
'manage_advance')));
158$permissiontoeditextra = $permissiontoadd;
159if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
161 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
164$upload_dir =
$conf->ticket->dir_output;
171$parameters = array();
172$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
178if (empty($reshook)) {
180 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
182 $search_agenda_label =
'';
185 $backurlforlist = DOL_URL_ROOT .
'/ticket/list.php';
187 if (empty($backtopage) || ($cancel && empty($id))) {
188 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
189 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
190 $backtopage = $backurlforlist;
192 $backtopage = DOL_URL_ROOT .
'/ticket/card.php?id=' . ((!empty($id) &&
$id > 0) ? $id :
'__ID__');
198 if (!empty($backtopageforcancel)) {
199 header(
"Location: " . $backtopageforcancel);
201 } elseif (!empty($backtopage)) {
202 header(
"Location: " . $backtopage);
208 if ((($action ==
'add' &&
GETPOST(
'save',
'alpha')) || ($action ==
'update' &&
$object->status < Ticket::STATUS_CLOSED)) && $permissiontoadd) {
209 $ifErrorAction = ($action ==
'add' ?
'create' :
'edit');
210 if ($action ==
'add') {
216 'ref' => [
'check' =>
'alpha',
'langs' =>
'Ref'],
217 'type_code' => [
'check' =>
'alpha',
'langs' =>
'TicketTypeRequest'],
218 'category_code' => [
'check' =>
'alpha',
'langs' =>
'TicketCategory'],
219 'severity_code' => [
'check' =>
'alpha',
'langs' =>
'TicketSeverity'],
220 'subject' => [
'check' =>
'alphanohtml',
'langs' =>
'Subject'],
221 'message' => [
'check' =>
'restricthtml',
'langs' =>
'Message']
226 if (!empty($error)) {
227 $action = $ifErrorAction;
230 $ret = $extrafields->setOptionalsFromPost(
null, $object);
234 $getRef =
GETPOST(
'ref',
'alpha');
236 if (!empty($getRef)) {
237 $isExistingRef =
$object->checkExistingRef($action, $getRef);
239 $isExistingRef =
true;
244 if ($isExistingRef) {
245 if ($action ==
'update') {
249 } elseif ($action ==
'add') {
254 if (!empty($getRef)) {
267 $fk_user_assign =
GETPOSTINT(
'fk_user_assign');
271 if ($fk_user_assign > 0) {
272 $object->fk_user_assign = $fk_user_assign;
273 $object->status = $object::STATUS_ASSIGNED;
276 if ($action ==
'add') {
278 $object->type_label = $langs->trans($langs->getLabelFromKey(
$db,
$object->type_code,
'c_ticket_type',
'code',
'label'));
279 $object->category_label = $langs->trans($langs->getLabelFromKey(
$db,
$object->category_code,
'c_ticket_category',
'code',
'label'));
280 $object->severity_label = $langs->trans($langs->getLabelFromKey(
$db,
$object->severity_code,
'c_ticket_severity',
'code',
'label'));
281 $object->fk_user_create = $user->id;
282 $object->email_from = $user->email;
284 $notifyTiers =
GETPOST(
"notify_tiers_at_create",
'alpha');
285 $object->notify_tiers_at_create = empty($notifyTiers) ? 0 : 1;
295 $action = $ifErrorAction;
300 $categories =
GETPOST(
'categories',
'array:int');
301 $object->setCategories($categories);
304 if ($action ==
'add') {
308 $type_contact =
GETPOST(
"type",
'alpha');
310 if ($contactid > 0 && $type_contact) {
312 $result =
$object->add_contact($contactid, $typeid,
'external');
316 if (
GETPOST(
'origin',
'alpha') ==
'projet') {
322 if ($projectid > 0) {
323 $object->setProject($projectid);
327 if (
getDolGlobalString(
'TICKET_AUTO_READ_WHEN_CREATED_FROM_BACKEND') && $permissiontomanage) {
328 if (!
$object->markAsRead($user) > 0) {
334 if ((empty($fk_user_assign) &&
getDolGlobalInt(
'TICKET_AUTO_ASSIGN_USER_CREATE') == 1) || (
getDolGlobalInt(
'TICKET_AUTO_ASSIGN_USER_CREATE') == 2)) {
335 $result =
$object->assignUser($user, $user->id, 1);
336 $object->add_contact($user->id,
"SUPPORTTEC",
'internal');
342 $object->copyFilesForTicket(
'');
348 if (!empty($backtopage)) {
352 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
355 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
358 header(
"Location: " . $url);
365 $action = $ifErrorAction;
370 if ($action ==
"set_read" && $permissiontomanage) {
373 if (
$object->markAsRead($user) > 0) {
376 header(
"Location: card.php?track_id=" .
$object->track_id);
385 if ($action ==
"assign_user" &&
GETPOST(
'btn_assign_user',
'alpha') && $permissiontomanage) {
387 $useroriginassign =
$object->fk_user_assign;
397 $ret =
$object->assignUser($user, $usertoassign);
405 if ($useroriginassign > 0) {
406 $internal_contacts =
$object->listeContact(-1,
'internal', 0,
'SUPPORTTEC');
407 foreach ($internal_contacts as $key => $contact) {
408 if ($contact[
'id'] !== $usertoassign) {
409 $result =
$object->delete_contact($contact[
'rowid']);
418 if ($usertoassign > 0 && $usertoassign !== $useroriginassign) {
419 $result =
$object->add_contact($usertoassign,
"SUPPORTTEC",
'internal', $notrigger = 0);
429 $object->fetch_user($usertoassign);
432 header(
"Location: card.php?track_id=" .
$object->track_id);
442 if ($action ==
'add_message' && GETPOSTISSET(
'btn_add_message') && $permissiontoread) {
446 if (!empty($backtopage)) {
449 $url =
'card.php?track_id=' . urlencode(
$object->track_id);
452 header(
"Location: " . $url);
460 if (($action ==
"confirm_close" || $action ==
"confirm_abandon") &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontomanage) {
462 if (GETPOSTISSET(
'contactid')) {
466 if (
$object->close($user, ($action ==
"confirm_abandon" ? 1 : 0)) > 0) {
469 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
470 header(
"Location: " . $url);
478 if ($action ==
"confirm_public_close" &&
GETPOST(
'confirm',
'alpha') ==
'yes' && $permissiontoadd) {
480 if ($_SESSION[
'email_customer'] ==
$object->origin_email || $_SESSION[
'email_customer'] ==
$object->thirdparty->email) {
483 if (
$object->close($user) > 0) {
484 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketMarkedAsClosed') .
'</div>',
null,
'mesgs');
486 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
487 header(
"Location: " . $url);
498 if ($action ==
'confirm_clone' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontomanage) {
502 header(
"Location: " . DOL_URL_ROOT .
"/ticket/card.php?id=".$newid);
511 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
513 if (
$object->delete($user) > 0) {
514 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketDeletedSuccess') .
'</div>',
null,
'mesgs');
515 header(
"Location: " . DOL_URL_ROOT .
"/ticket/list.php");
518 $langs->load(
"errors");
519 $mesg =
'<div class="error">' . $langs->trans(
$object->error) .
'</div>';
526 if ($action ==
'set_thirdparty' && $permissiontoadd) {
529 $url = $_SERVER[
"PHP_SELF"] .
'?track_id=' .
GETPOST(
'track_id',
'alpha');
530 header(
"Location: " . $url);
536 if ($action ==
'set_progression' && $permissiontoadd) {
540 $url =
'card.php?track_id=' .
$object->track_id;
541 header(
"Location: " . $url);
547 if ($action ==
'set_categories' && $permissiontoadd) {
551 $url =
'card.php?track_id=' .
$object->track_id;
552 header(
"Location: " . $url);
558 if ($action ==
'setsubject' && $permissiontoadd) {
560 if ($action ==
'setsubject') {
564 if ($action ==
'setsubject' && empty(
$object->subject)) {
566 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
570 if (!
$object->update($user) >= 0) {
576 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?track_id=" .
$object->track_id);
581 if ($action ==
'confirm_reopen' && $permissiontomanage && !
GETPOST(
'cancel')) {
584 if (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED) {
585 if (
$object->fk_user_assign !=
null) {
586 $res =
$object->setStatut(Ticket::STATUS_ASSIGNED,
null,
'', $triggermodname);
588 $res =
$object->setStatut(Ticket::STATUS_NOT_READ,
null,
'', $triggermodname);
591 $url =
'card.php?track_id=' .
$object->track_id;
592 header(
"Location: " . $url);
600 } elseif ($action ==
'classin' && $permissiontoadd) {
603 $object->setProject($projectid);
604 $url =
'card.php?track_id=' .
$object->track_id;
605 header(
"Location: " . $url);
608 } elseif ($action ==
'setcontract' && $permissiontoadd) {
612 $url =
'card.php?track_id=' .
$object->track_id;
613 header(
"Location: " . $url);
616 } elseif ($action ==
"set_message" && $permissiontoadd) {
620 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
622 $object->message = $fieldtomodify;
629 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
637 } elseif ($action ==
'confirm_set_status' && $permissiontomanage && !
GETPOST(
'cancel')) {
642 $res =
$object->setStatut($new_status,
null,
'', $triggermodname);
644 if ($new_status != Ticket::STATUS_NOT_READ) {
645 $res =
$object->setReadDate($user, 1);
651 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"ticket SET date_read = null WHERE rowid = ".((int)
$object->id);
652 $resql =
$db->query($sql);
657 $url =
'card.php?track_id=' .
$object->track_id;
658 header(
"Location: " . $url);
668 if ($action ==
"update_extras" && $permissiontoeditextra) {
671 $attribute_name =
GETPOST(
'attribute',
'aZ09');
673 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
679 $result =
$object->updateExtraField($attribute_name, $triggermodname);
687 $action =
'edit_extras';
691 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
695 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
696 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
709 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
711 $permissiondellink = $permissiontoadd;
712 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
715 include DOL_DOCUMENT_ROOT .
'/core/actions_printing.inc.php';
718 include DOL_DOCUMENT_ROOT .
'/core/actions_builddoc.inc.php';
721 $triggersendname =
'TICKET_SENTBYMAIL';
723 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
724 $trackid =
'tic' .
$object->id;
725 include DOL_DOCUMENT_ROOT .
'/core/actions_sendmails.inc.php';
728 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
729 $action =
'presend_addmessage';
743$help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
745$title = $actionobject->getTitle($action, $object);
747llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-ticket page-card');
749if ($action ==
'create' || $action ==
'presend') {
750 if (empty($permissiontoadd)) {
758 $formticket->trackid =
'';
760 if (
GETPOST(
"mode",
"aZ09") ==
'init' && empty($_POST)) {
761 $formticket->clear_attached_files();
764 $formticket->withfromsocid = $socid ? $socid : $user->socid;
765 $formticket->withfromcontactid = $contactid ? $contactid :
'';
766 $formticket->withtitletopic = 1;
767 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (
getDolGlobalString(
'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION') ? 1 : 0));
768 $formticket->withusercreate = 0;
769 $formticket->withref = 1;
770 $formticket->fk_user_create = $user->id;
771 $formticket->withfile = 2;
772 $formticket->withextrafields = 1;
773 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
775 $formticket->withcancel = 1;
778 if (
GETPOST(
"mode",
"aZ09") ==
'init') {
779 $formticket->clear_attached_files();
782 $formticket->showForm(1,
'create', 0,
null, $action, $object);
785} elseif ($action ==
'edit' && $permissiontoadd &&
$object->status < Ticket::STATUS_CLOSED) {
786 if (empty($permissiontoadd)) {
796 $formticket->trackid =
'tic'.$object->id;
797 $formticket->withfromsocid =
$object->socid;
798 $formticket->withtitletopic = 1;
800 $formticket->withnotifytiersatcreate = 0;
801 $formticket->withusercreate = 0;
802 $formticket->withref = 1;
803 $formticket->fk_user_create = $user->id;
804 $formticket->withfile = 0;
805 $formticket->action =
'update';
806 $formticket->withextrafields = 1;
807 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
809 $formticket->withcancel = 1;
811 $formticket->showForm(0,
'edit', 0,
null, $action, $object);
815 if (!empty($res) && $res > 0) {
817 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') &&
$object->fk_user_assign != $user->id) && !$permissiontomanage) {
821 $trackid =
'tic'.$object->id;
826 if ($action ==
'close' && $permissiontomanage) {
827 $thirdparty_contacts =
$object->getInfosTicketExternalContact(1);
828 $contacts_select = array(
829 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
830 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
832 foreach ($thirdparty_contacts as $thirdparty_contact) {
833 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
838 $formquestion = array(
840 'name' =>
'contactid',
842 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
843 'values' => $contacts_select,
844 'default' => $default
848 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
851 if ($action ==
'abandon' && $permissiontomanage) {
852 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
855 if ($action ==
'delete' && $permissiontodelete) {
856 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
859 if ($action ==
'reopen' && $permissiontomanage) {
860 $formconfirm = $form->formconfirm($url_page_current.
'?track_id='.
$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
863 if ($action ==
'set_status' && $permissiontomanage) {
866 $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);
869 if ($action ==
'clone') {
870 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneAsk',
$object->ref),
'confirm_clone',
'',
'yes', 1);
874 $parameters = array(
'formConfirm' => $formconfirm);
875 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
876 if (empty($reshook)) {
877 $formconfirm .= $hookmanager->resPrint;
878 } elseif ($reshook > 0) {
879 $formconfirm = $hookmanager->resPrint;
886 if ($projectid > 0) {
888 if ($projectstat->fetch($projectid) > 0) {
889 $projectstat->fetch_thirdparty();
893 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
899 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
901 print
'<table class="border centpercent">';
903 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
906 print
'<tr><td>'.$langs->trans(
'Ref').
'</td><td colspan="3">';
908 if (!$user->hasRight(
'projet',
'all',
'lire')) {
909 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
910 $projectstat->next_prev_filter =
"rowid:IN:".$db->sanitize(count($objectsListId) ? implode(
',', array_keys($objectsListId)) :
'0');
912 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
916 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
919 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
920 print
'<td colspan="3">';
921 if ($projectstat->thirdparty->id > 0) {
922 print $projectstat->thirdparty->getNomUrl(1);
930 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
931 if ($projectstat->public) {
932 print $langs->trans(
'SharedProject');
934 print $langs->trans(
'PrivateProject');
940 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
946 print
"ErrorRecordNotFound";
948 } elseif ($socid > 0) {
954 dol_banner_tab(
$object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
960 $object->next_prev_filter =
"te.fk_user_assign:=:".((int) $user->id);
961 } elseif ($user->socid > 0) {
962 $object->next_prev_filter =
"te.fk_soc:=:".((int) $user->socid);
967 print
dol_get_fiche_head($head,
'tabTicket', $langs->trans(
"Ticket"), -1,
'ticket', 0,
'',
'', 0,
'', 1);
969 $morehtmlref =
'<div class="refidno">';
971 if ($permissiontoadd && !$user->socid) {
972 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editsubject&token='.newToken().
'&track_id='.urlencode(
$object->track_id).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetTitle'), 0).
'</a> ';
974 if ($action !=
'editsubject') {
975 $morehtmlref .=
'<span class="smallonsmartphone">'.dolPrintLabel(
$object->subject).
'</span>';
977 $morehtmlref .=
'<form method="post" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
978 $morehtmlref .=
'<input type="hidden" name="action" value="setsubject">';
979 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
980 $morehtmlref .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
981 $morehtmlref .=
'<input type="text" class="minwidth300" id="subject" name="subject" value="'.$object->subject.
'" autofocus="" spellcheck="false">';
982 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button valignmiddle" name="modify" value="'.$langs->trans(
"Modify").
'">';
983 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button button-cancel valignmiddle" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
984 $morehtmlref .=
'</form>';
989 if (
$object->fk_user_create > 0) {
990 $morehtmlref .=
'<br>';
994 $fuser->fetch(
$object->fk_user_create);
995 $morehtmlref .= $fuser->getNomUrl(-4);
999 $createdfrompublicticket = 0;
1000 $createdfromemailcollector = 0;
1001 if (!empty(
$object->origin_email) && (empty(
$object->email_msgid) || preg_match(
'/dolibarr\-tic\d+/',
$object->email_msgid))) {
1003 $createdfrompublicticket = 1;
1004 } elseif (!empty(
$object->email_msgid)) {
1006 $createdfromemailcollector = 1;
1011 if ($createdfrompublicticket) {
1012 $htmltooltip .= $langs->trans(
"OriginEmail").
': '.
$object->origin_email;
1014 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
1016 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
1017 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltipcreatedbyportal').
'</small>';
1018 } elseif ($createdfromemailcollector) {
1019 $langs->load(
"mails");
1021 $htmltooltip .=
'<b>'.$langs->trans(
"EmailMsgID").
':</b> '.
$object->email_msgid;
1022 $htmltooltip .=
'<br><b>'.$langs->trans(
"EmailDate").
':</b> '.
dol_print_date(
$object->email_date,
'dayhour');
1023 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailFrom").
':</b> '.
$object->origin_email;
1024 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailReply").
':</b> '.
$object->origin_replyto;
1025 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailReferences").
':</b> '.
$object->origin_references;
1026 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
1028 $morehtmlref .=
img_picto(
'From',
'email',
'class="paddingrightonly"');
1030 if (
$object->origin_replyto) {
1031 $morehtmlref .=
' - '.img_picto(
'ReplyTo',
'email',
'class="paddingrightonly"');
1034 $morehtmlref .=
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltipcreatedbyemailcollector').
'</small>';
1037 $permissiontoedit =
$object->status < 8 && !$user->socid && $permissiontoadd;
1042 $morehtmlref .=
'<br>';
1043 if ($action !=
'editcustomer' && $permissiontoedit) {
1044 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
1045 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
1047 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.
$object->track_id, (
string)
$object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
1049 $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 paddingright"').$langs->trans(
"TicketHistory").
'</a>';
1055 $langs->load(
"projects");
1056 $morehtmlref .=
'<br>';
1057 if ($permissiontoedit) {
1059 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object(
$object->project) &&
$object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
1060 if ($action !=
'classify') {
1061 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1063 $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');
1065 if (!empty(
$object->fk_project)) {
1067 $morehtmlref .=
$object->project->getNomUrl(1);
1068 if (
$object->project->title) {
1069 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag(
$object->project->title).
'</span>';
1082 $langs->load(
'contracts');
1083 $morehtmlref .=
'<br>';
1084 if ($permissiontoedit) {
1085 $morehtmlref .=
img_picto($langs->trans(
"Contract"),
'contract',
'class="pictofixedwidth"');
1086 if ($action ==
'edit_contrat') {
1088 $morehtmlref .= $formcontract->formSelectContract($_SERVER[
"PHP_SELF"].
'?id='.
$object->id,
$object->socid,
$object->fk_contract,
'contratid', 0, 1, 1, 1);
1090 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edit_contrat&token='.newToken().
'&id='.
$object->id.
'">';
1091 $morehtmlref .=
img_edit($langs->trans(
'SetContract'));
1092 $morehtmlref .=
'</a>';
1095 if (!empty(
$object->fk_contract)) {
1097 $contratstatic->fetch(
$object->fk_contract);
1099 $morehtmlref .= $contratstatic->getNomUrl(0, 0, 1);
1106 $morehtmlref .=
'</div>';
1108 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1110 dol_banner_tab($object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1112 print
'<div class="fichecenter">';
1113 print
'<div class="fichehalfleft">';
1114 print
'<div class="underbanner clearboth"></div>';
1116 print
'<table class="border tableforfield centpercent">';
1128 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1130 print
'<span class="opacitymedium"><span class="small"> - '.$langs->trans(
"TimeElapsedSince").
': <b><i>'.
convertSecondToTime(roundUpToNextMultiple($now -
$object->datec, 60)).
'</i></b></span></span>';
1134 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1135 if (!empty(
$object->date_read)) {
1137 print
'<span class="opacitymedium"><span class="small"> - '.$langs->trans(
"TimeElapsedSince").
': ';
1140 print
'<b><i>'.convertSecondToTime(roundUpToNextMultiple($now -
$object->date_read, 60)).
'</i></b></span></span>';
1145 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1146 if (!empty(
$object->date_close)) {
1153 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1154 print $langs->trans(
"AssignedTo");
1155 if (isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $permissiontomanage) {
1156 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>';
1158 print
'</td></tr></table>';
1160 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" &&
$object->fk_user_assign > 0) {
1161 $userstat->fetch(
$object->fk_user_assign);
1162 print $userstat->getNomUrl(-1);
1166 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" &&
$object->status < 8 && !$user->socid && $permissiontomanage) {
1167 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1168 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1169 print
'<input type="hidden" name="action" value="assign_user">';
1170 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1171 print $form->select_dolusers(empty(
$object->fk_user_assign) ? $user->id :
$object->fk_user_assign,
'fk_user_assign', 1, null, 0,
'',
'',
'', 0, 0,
'', 0,
'',
'', 1);
1172 print
' <input type="submit" class="button smallpaddingimp" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1173 print
' <input type="submit" class="button smallpaddingimp" name="btn_cancel" value="'.$langs->trans(
"Cancel").
'" />';
1180 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1181 print $langs->trans(
'Progression').
'</td><td class="left">';
1183 if ($permissiontoadd && $action !=
'progression' && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED && !$user->socid) {
1184 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>';
1186 print
'</tr></table>';
1188 if ($permissiontoadd && $action ==
'progression') {
1189 print
'<form action="'.$url_page_current.
'" method="post">';
1190 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1191 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1192 print
'<input type="hidden" name="action" value="set_progression">';
1193 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1194 print
' <input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Modify').
'">';
1205 $num = count(
$object->linkedObjects);
1209 foreach (
$object->linkedObjects as $objecttype => $objects) {
1210 if ($objecttype ==
"fichinter") {
1211 '@phan-var-force Fichinter[] $objects';
1212 foreach ($objects as $fichinter) {
1215 $timing += $fichinter->duration;
1221 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1228 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1234 print
'</div><div class="fichehalfright">';
1237 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1238 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1239 print
'<input type="hidden" name="action" value="change_property">';
1240 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1241 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1244 print
'<div class="div-table-responsive-no-min">';
1245 print
'<table class="border tableforfield centpercent margintable bordertopimp">';
1246 print
'<tr class="liste_titre">';
1247 print
'<td class="valignmiddle titlefield">';
1248 print
'<table class="nobordernopadding centpercent"><tr><td class="none" style="border-bottom: none !important;">';
1249 print $langs->trans(
'TicketProperties');
1250 if (
GETPOST(
'set',
'alpha') !=
'properties' && isset(
$object->status) && (
$object->status < $object::STATUS_NEED_MORE_INFO || !
getDolGlobalInt(
'TICKET_DISALLOW_CLASSIFICATION_MODIFICATION_EVEN_IF_CLOSED')) && $permissiontoadd) {
1251 print
'</td><td class="right" style="border-bottom: none !important;"><a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1253 print
'</td></tr></table>';
1256 if (
GETPOST(
'set',
'alpha') ==
'properties' && $permissiontoadd) {
1257 print
'<input type="submit" class="button smallpaddingimp" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1262 if (
GETPOST(
'set',
'alpha') ==
'properties' && $permissiontoadd) {
1265 print
'<td class="titlefield">';
1266 print $langs->trans(
'Type');
1268 $formticket->selectTypesTickets(
$object->type_code,
'update_value_type',
'', 2);
1274 print $langs->trans(
'TicketCategory');
1276 $formticket->selectGroupTickets(
$object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1282 print $langs->trans(
'TicketSeverity');
1284 $formticket->selectSeveritiesTickets(
$object->severity_code,
'update_value_severity',
'', 2);
1289 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1290 if (!empty(
$object->type_code)) {
1291 print $langs->getLabelFromKey(
$db,
'TicketTypeShort'.
$object->type_code,
'c_ticket_type',
'code',
'label',
$object->type_code);
1296 if (!empty(
$object->category_code)) {
1297 $s = $langs->getLabelFromKey(
$db,
'TicketCategoryShort'.
$object->category_code,
'c_ticket_category',
'code',
'label',
$object->category_code);
1299 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1303 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1304 if (!empty(
$object->severity_code)) {
1305 print $langs->getLabelFromKey(
$db,
'TicketSeverityShort'.
$object->severity_code,
'c_ticket_severity',
'code',
'label',
$object->severity_code);
1316 print
'<!-- tag/categories -->'.
"\n";
1317 print
'<table class="border centpercent tableforfield">';
1319 print
'<td class="valignmiddle titlefield">';
1320 print
'<table class="nobordernopadding centpercent"><tr><td class="none">';
1321 print $langs->trans(
"Categories");
1322 if ($permissiontoadd && !in_array(
$object->status, [Ticket::STATUS_CLOSED, Ticket::STATUS_CANCELED]) && $action !=
'categories' && !$user->socid) {
1323 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>';
1329 if ($permissiontoadd && $action ==
'categories') {
1330 print
'<td colspan="3">';
1331 print
'<form action="'.$url_page_current.
'" method="POST">';
1332 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1333 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1334 print
'<input type="hidden" name="action" value="set_categories">';
1335 print $form->selectCategories(Categorie::TYPE_TICKET,
'categories', $object);
1336 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Save').
'">';
1340 print
'<td colspan="3">';
1341 print $form->showCategories(
$object->id, Categorie::TYPE_TICKET, 1);
1349 $actionobject->viewTicketOriginalMessage($user, $action, $object);
1353 print
'<!-- navbar with status -->';
1354 if (!$user->socid && $permissiontomanage && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED) {
1355 $actionobject->viewStatusActions($object);
1360 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1362 print
'<div class="div-table-responsive-no-min">';
1363 print
'<div class="tagtable centpercent noborder allwidth">';
1365 print
'<div class="tagtr liste_titre">';
1366 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1367 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1368 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1369 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1370 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1371 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1372 print
'</div><!-- tagtr -->';
1379 foreach (array(
'internal',
'external') as $source) {
1381 $tab = $tmpobject->listeContact(-1, $source);
1383 $num = is_array($tab) ? count($tab) : 0;
1385 foreach (array_keys($tab) as $i) {
1388 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1390 print
'<div class="tagtd left">';
1391 if ($tab_i[
'source'] ==
'internal') {
1392 echo $langs->trans(
"User");
1395 if ($tab_i[
'source'] ==
'external') {
1396 echo $langs->trans(
"ThirdPartyContact");
1400 print
'<div class="tagtd left">';
1402 if ($tab_i[
'socid'] > 0) {
1403 $companystatic->fetch($tab_i[
'socid']);
1404 echo $companystatic->getNomUrl(-1);
1406 if ($tab_i[
'socid'] < 0) {
1409 if (!$tab_i[
'socid']) {
1414 print
'<div class="tagtd">';
1415 if ($tab_i[
'source'] ==
'internal') {
1416 if ($userstatic->fetch($tab_i[
'id'])) {
1417 print $userstatic->getNomUrl(-1);
1420 if ($tab_i[
'source'] ==
'external') {
1421 if ($contactstatic->fetch($tab_i[
'id'])) {
1422 print $contactstatic->getNomUrl(-1);
1426 <div class="tagtd">' . $tab_i[
'libelle'].
'</div>';
1428 print
'<div class="tagtd">';
1432 if (array_key_exists(
'phone_perso', $tab_i) && !empty($tab_i[
'phone_perso'])) {
1434 print
'<br>'.dol_print_phone((
string) $tab_i[
'phone_perso'],
'', 0, 0,
'AC_TEL').
'<br>';
1436 if (!empty($tab_i[
'phone_mobile'])) {
1438 print
dol_print_phone($tab_i[
'phone_mobile'],
'', 0, 0,
'AC_TEL').
'<br>';
1442 print
'<div class="tagtd center">';
1444 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab_i[
'rowid'].
'">';
1447 if ($tab_i[
'source'] ==
'internal') {
1448 $userstatic->id = $tab_i[
'id'];
1449 $userstatic->lastname = $tab_i[
'lastname'];
1450 $userstatic->firstname = $tab_i[
'firstname'];
1451 echo $userstatic->LibStatut($tab_i[
'statuscontact'], 3);
1453 if ($tab_i[
'source'] ==
'external') {
1454 $contactstatic->id = $tab_i[
'id'];
1455 $contactstatic->lastname = $tab_i[
'lastname'];
1456 $contactstatic->firstname = $tab_i[
'firstname'];
1457 echo $contactstatic->LibStatut($tab_i[
'statuscontact'], 3);
1465 print
'</div><!-- tagtr -->';
1471 print
'</div><!-- contact list -->';
1475 print
'</div></div>';
1476 print
'<div class="clearboth"></div>';
1482 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1483 print
'<div class="tabsAction">'.
"\n";
1484 $parameters = array();
1485 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1490 if (empty($reshook)) {
1492 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1493 print dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&send_email=1&private_message=0&mode=init&token='.newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1497 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1498 print dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1504 print dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1506 if (
$object->fk_soc > 0 && isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1507 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,
'');
1511 if (isset(
$object->status) &&
$object->status >= 0 &&
$object->status < Ticket::STATUS_CLOSED && $permissiontomanage) {
1512 print dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.newToken().
'&track_id='.
$object->track_id,
'');
1516 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $permissiontomanage) {
1517 print dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.newToken().
'&track_id='.
$object->track_id,
'');
1521 if ($permissiontomanage && !$user->socid && (isset(
$object->status) && (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1522 print dolGetButtonAction(
'', $langs->trans(
'ReOpen'),
'default', $_SERVER[
"PHP_SELF"].
'?action=reopen&token='.newToken().
'&track_id='.
$object->track_id,
'');
1526 if ($permissiontoedit) {
1527 print dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.newToken(),
'', $permissiontoedit);
1531 if ($permissiontoadd) {
1532 print dolGetButtonAction(
'', $langs->trans(
'ToClone'),
'clone', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=clone&token='.newToken(),
'', $permissiontoadd);
1536 if ($permissiontodelete && !$user->socid) {
1537 print dolGetButtonAction(
'', $langs->trans(
'Delete'),
'delete', $_SERVER[
"PHP_SELF"].
'?action=delete&token='.newToken().
'&track_id='.
$object->track_id,
'');
1540 print
'</div>'.
"\n";
1544 if (
GETPOST(
'modelselected')) {
1545 $action =
'presend';
1548 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1549 $action =
'presend_addmessage';
1553 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1558 $outputlangs = $langs;
1561 $newlang =
GETPOST(
'lang_id',
'aZ09');
1563 $newlang =
$object->thirdparty->default_lang;
1565 if (!empty($newlang)) {
1567 $outputlangs->setDefaultLang($newlang);
1570 $arrayoffamiliestoexclude = array(
'objectamount');
1572 $action =
'add_message';
1573 $modelmail =
'ticket_send';
1576 $morehtmlright =
'';
1578 $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, $arrayoffamiliestoexclude, $object);
1584 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1586 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'fa-comment-dots');
1592 $formticket->action = $action;
1593 $formticket->track_id =
$object->track_id;
1594 $formticket->ref =
$object->ref;
1595 $formticket->id =
$object->id;
1596 $formticket->trackid =
'tic'.$object->id;
1598 $formticket->withfile = 2;
1599 $formticket->withcancel = 1;
1600 $formticket->param = array(
'fk_user_create' => $user->id);
1601 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1604 $formticket->param[
'models'] = $modelmail;
1605 $formticket->param[
'models_id'] =
GETPOSTINT(
'modelmailselected');
1607 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.urldecode(
$object->track_id);
1609 $formticket->withsubstit = 1;
1610 $formticket->substit = $substitutionarray;
1611 $formticket->backtopage = $backtopage;
1613 $formticket->withtitletopic = 1;
1615 $formticket->showMessageForm(
'100%', 0);
1622 $param =
'&id='.$object->id;
1623 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1624 $param .=
'&contextpage='.$contextpage;
1626 if ($limit > 0 && $limit !=
$conf->liste_limit) {
1627 $param .=
'&limit='.$limit;
1630 $param .=
'&actioncode='.urlencode($actioncode);
1632 if ($search_agenda_label) {
1633 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1636 $morehtmlright =
'';
1638 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.
$object->track_id;
1639 $morehtmlright .= dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1642 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1643 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1644 $morehtmlright .= dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', (
int) $btnstatus);
1647 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1648 $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);
1649 $morehtmlright .= dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', (
int) $btnstatus);
1651 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1655 $filters[
'search_agenda_label'] = $search_agenda_label;
1656 $filters[
'search_rowid'] = $search_rowid;
1658 show_actions_messaging(
$conf, $langs,
$db, $object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1661 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1662 print
'<div class="fichecenter"><div class="fichehalfleft">';
1663 print
'<a name="builddoc"></a>';
1669 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
1670 $genallowed = $permissiontoadd;
1671 $delallowed = $permissiontodelete;
1675 $codelang =
$object->thirdparty->default_lang;
1678 print $formfile->showdocuments(
'ticket', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $codelang);
1681 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'ticket'), 1);
1682 $linktoelem = $tmparray[
'linktoelem'];
1683 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
1684 print $htmltoenteralink;
1686 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1689 print
'<br><!-- Link to public interface -->'.
"\n";
1694 print
'<div class="fichehalfright">';
1698 $morehtmlcenter =
'<div class="nowraponall">';
1699 $morehtmlcenter .= dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.
$object->id);
1700 $morehtmlcenter .= dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.
$object->id);
1701 $morehtmlcenter .=
'</div>';
1704 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1706 $somethingshown = $formactions->showactions($object,
'ticket', $socid, 1,
'listactions', $MAXEVENT,
'', $morehtmlcenter);
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $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, $subtabs='')
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_now($mode='gmt')
Return date for now.
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.
dol_print_phone($phone, $countrycode='', $contactid=0, $socid=0, $addlink='', $separ=" ", $withpicto='', $titlealt='', $adddivfloat=0, $morecss='paddingright')
Format phone numbers according to country.
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_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.
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_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalBool($key, $default=false)
Return a Dolibarr global constant boolean value.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
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...
Class to generate the form for creating a new ticket.
project_prepare_head(Project $project, $moreparam='')
Prepare array with list of tabs.
print $langs trans('Date')." left Ref Label right Qty right Price right TotalHT right TotalTTC right right right right right right right right right centpercent right TotalHT right n right VAT right n right TotalVAT right n No sujeto a RE IRPF right TotalLT1 right n right TotalLT2 right n right TotalTTC right n takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency right TotalTTC takeposcustomercurrency right takeposcustomercurrency n right Paid right PaymentTypeShortLIQ right SELECT p pos_change as p datep as date
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.