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';
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';
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:int');
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)) > 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) {
481 if (
$object->close($user) > 0) {
482 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketMarkedAsClosed') .
'</div>',
null,
'mesgs');
484 $url =
'card.php?track_id=' .
GETPOST(
'track_id',
'alpha');
485 header(
"Location: " . $url);
496 if ($action ==
'confirm_clone' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontoadd) {
500 header(
"Location: " . DOL_URL_ROOT .
"/ticket/card.php?id=".$newid);
509 if ($action ==
'confirm_delete_ticket' &&
GETPOST(
'confirm',
'alpha') ==
"yes" && $permissiontodelete) {
511 if (
$object->delete($user) > 0) {
512 setEventMessages(
'<div class="confirm">' . $langs->trans(
'TicketDeletedSuccess') .
'</div>',
null,
'mesgs');
513 header(
"Location: " . DOL_URL_ROOT .
"/ticket/list.php");
516 $langs->load(
"errors");
517 $mesg =
'<div class="error">' . $langs->trans(
$object->error) .
'</div>';
524 if ($action ==
'set_thirdparty' && $user->hasRight(
'ticket',
'write')) {
527 $url = $_SERVER[
"PHP_SELF"] .
'?track_id=' .
GETPOST(
'track_id',
'alpha');
528 header(
"Location: " . $url);
534 if ($action ==
'set_progression' && $user->hasRight(
'ticket',
'write')) {
538 $url =
'card.php?track_id=' .
$object->track_id;
539 header(
"Location: " . $url);
545 if ($action ==
'set_categories' && $user->hasRight(
'ticket',
'write')) {
549 $url =
'card.php?track_id=' .
$object->track_id;
550 header(
"Location: " . $url);
556 if ($action ==
'setsubject' && $user->hasRight(
'ticket',
'write')) {
558 if ($action ==
'setsubject') {
562 if ($action ==
'setsubject' && empty(
$object->subject)) {
564 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Subject")),
null,
'errors');
568 if (!
$object->update($user) >= 0) {
574 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?track_id=" .
$object->track_id);
579 if ($action ==
'confirm_reopen' && $user->hasRight(
'ticket',
'manage') && !
GETPOST(
'cancel')) {
582 if (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED) {
583 if (
$object->fk_user_assign !=
null) {
584 $res =
$object->setStatut(Ticket::STATUS_ASSIGNED,
null,
'', $triggermodname);
586 $res =
$object->setStatut(Ticket::STATUS_NOT_READ,
null,
'', $triggermodname);
589 $url =
'card.php?track_id=' .
$object->track_id;
590 header(
"Location: " . $url);
598 } elseif ($action ==
'classin' && $permissiontoadd) {
601 $object->setProject($projectid);
602 $url =
'card.php?track_id=' .
$object->track_id;
603 header(
"Location: " . $url);
606 } elseif ($action ==
'setcontract' && $permissiontoadd) {
610 $url =
'card.php?track_id=' .
$object->track_id;
611 header(
"Location: " . $url);
614 } elseif ($action ==
"set_message" && $user->hasRight(
'ticket',
'manage')) {
618 $fieldtomodify =
GETPOST(
'message_initial',
'restricthtml');
620 $object->message = $fieldtomodify;
627 setEventMessages($langs->trans(
'TicketMessageSuccesfullyUpdated'),
null,
'mesgs');
635 } elseif ($action ==
'confirm_set_status' && $permissiontoadd && !
GETPOST(
'cancel')) {
640 $res =
$object->setStatut($new_status,
null,
'',
'TICKET_MODIFY');
643 $url =
'card.php?track_id=' .
$object->track_id;
644 header(
"Location: " . $url);
654 if ($action ==
"update_extras" && $permissiontoeditextra) {
657 $attribute_name =
GETPOST(
'attribute',
'aZ09');
659 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
665 $result =
$object->updateExtraField($attribute_name, $triggermodname);
673 $action =
'edit_extras';
677 if ($action ==
"change_property" &&
GETPOST(
'btn_update_ticket_prop',
'alpha') && $permissiontoadd) {
681 $object->severity_code =
GETPOST(
'update_value_severity',
'aZ09');
682 $object->category_code =
GETPOST(
'update_value_category',
'aZ09');
695 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
697 $permissiondellink = $user->hasRight(
'ticket',
'write');
698 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
701 include DOL_DOCUMENT_ROOT .
'/core/actions_printing.inc.php';
704 include DOL_DOCUMENT_ROOT .
'/core/actions_builddoc.inc.php';
707 $triggersendname =
'TICKET_SENTBYMAIL';
709 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
710 $trackid =
'tic' .
$object->id;
711 include DOL_DOCUMENT_ROOT .
'/core/actions_sendmails.inc.php';
714 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
715 $action =
'presend_addmessage';
724$userstat =
new User($db);
725$form =
new Form($db);
732$help_url =
'EN:Module_Ticket|FR:DocumentationModuleTicket';
734$title = $actionobject->getTitle($action, $object);
736llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-ticket page-card');
738if ($action ==
'create' || $action ==
'presend') {
739 if (empty($permissiontoadd)) {
747 $formticket->trackid =
'';
749 if (
GETPOST(
"mode",
"aZ09") ==
'init' && empty($_POST)) {
750 $formticket->clear_attached_files();
753 $formticket->withfromsocid = $socid ? $socid : $user->socid;
754 $formticket->withfromcontactid = $contactid ? $contactid :
'';
755 $formticket->withtitletopic = 1;
756 $formticket->withnotifytiersatcreate = ($notifyTiers ? 1 : (
getDolGlobalString(
'TICKET_CHECK_NOTIFY_THIRDPARTY_AT_CREATION') ? 1 : 0));
757 $formticket->withusercreate = 0;
758 $formticket->withref = 1;
759 $formticket->fk_user_create = $user->id;
760 $formticket->withfile = 2;
761 $formticket->withextrafields = 1;
762 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
764 $formticket->withcancel = 1;
767 if (
GETPOST(
"mode",
"aZ09") ==
'init') {
768 $formticket->clear_attached_files();
771 $formticket->showForm(1,
'create', 0,
null, $action, $object);
774} elseif ($action ==
'edit' && $user->hasRight(
'ticket',
'write') &&
$object->status < Ticket::STATUS_CLOSED) {
775 if (empty($permissiontoadd)) {
785 $formticket->trackid =
$object->track_id;
786 $formticket->withfromsocid =
$object->socid;
787 $formticket->withtitletopic = 1;
789 $formticket->withnotifytiersatcreate = 0;
790 $formticket->withusercreate = 0;
791 $formticket->withref = 1;
792 $formticket->fk_user_create = $user->id;
793 $formticket->withfile = 0;
794 $formticket->action =
'update';
795 $formticket->withextrafields = 1;
796 $formticket->param = array(
'origin' =>
GETPOST(
'origin'),
'originid' =>
GETPOST(
'originid'));
798 $formticket->withcancel = 1;
800 $formticket->showForm(0,
'edit', 0,
null, $action, $object);
804 if (!empty($res) && $res > 0) {
806 if (!$user->socid && (
getDolGlobalString(
'TICKET_LIMIT_VIEW_ASSIGNED_ONLY') &&
$object->fk_user_assign != $user->id) && !$user->hasRight(
'ticket',
'manage')) {
813 if ($action ==
'close') {
814 $thirdparty_contacts =
$object->getInfosTicketExternalContact(1);
815 $contacts_select = array(
816 '-2' => $langs->trans(
'TicketNotifyAllTiersAtClose'),
817 '-3' => $langs->trans(
'TicketNotNotifyTiersAtClose')
819 foreach ($thirdparty_contacts as $thirdparty_contact) {
820 $contacts_select[$thirdparty_contact[
'id']] = $thirdparty_contact[
'civility'] .
' ' . $thirdparty_contact[
'lastname'] .
' ' . $thirdparty_contact[
'firstname'];
825 $formquestion = array(
827 'name' =>
'contactid',
829 'label' => $langs->trans(
'NotifyThirdpartyOnTicketClosing'),
830 'values' => $contacts_select,
831 'default' => $default
835 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_close", $formquestion,
'', 1);
838 if ($action ==
'abandon') {
839 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"AbandonTicket"), $langs->trans(
"ConfirmAbandonTicket"),
"confirm_abandon",
'',
'', 1);
842 if ($action ==
'delete') {
843 $formconfirm = $form->formconfirm($url_page_current.
"?track_id=".
$object->track_id, $langs->trans(
"Delete"), $langs->trans(
"ConfirmDeleteTicket"),
"confirm_delete_ticket",
'',
'', 1);
846 if ($action ==
'reopen') {
847 $formconfirm = $form->formconfirm($url_page_current.
'?track_id='.
$object->track_id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenTicket'),
'confirm_reopen',
'',
'', 1);
850 if ($action ==
'set_status') {
853 $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);
856 if ($action ==
'clone') {
857 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneAsk',
$object->ref),
'confirm_clone',
'',
'yes', 1);
861 $parameters = array(
'formConfirm' => $formconfirm);
862 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
863 if (empty($reshook)) {
864 $formconfirm .= $hookmanager->resPrint;
865 } elseif ($reshook > 0) {
866 $formconfirm = $hookmanager->resPrint;
873 if ($projectid > 0) {
874 $projectstat =
new Project($db);
875 if ($projectstat->fetch($projectid) > 0) {
876 $projectstat->fetch_thirdparty();
880 $userWrite = $projectstat->restrictedProjectArea($user,
'write');
886 print
dol_get_fiche_head($head,
'ticket', $langs->trans(
"Project"), 0, ($projectstat->public ?
'projectpub' :
'project'));
888 print
'<table class="border centpercent">';
890 $linkback =
'<a href="'.DOL_URL_ROOT.
'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
893 print
'<tr><td>'.$langs->trans(
'Ref').
'</td><td colspan="3">';
895 if (!$user->hasRight(
'projet',
'all',
'lire')) {
896 $objectsListId = $projectstat->getProjectsAuthorizedForUser($user, $mine, 0);
897 $projectstat->next_prev_filter =
"rowid:IN:".$db->sanitize(count($objectsListId) ? implode(
',', array_keys($objectsListId)) :
'0');
899 print $form->showrefnav($projectstat,
'ref', $linkback, 1,
'ref',
'ref',
'');
903 print
'<tr><td>'.$langs->trans(
"Label").
'</td><td>'.$projectstat->title.
'</td></tr>';
906 print
"<tr><td>".$langs->trans(
"ThirdParty").
"</td>";
907 print
'<td colspan="3">';
908 if ($projectstat->thirdparty->id > 0) {
909 print $projectstat->thirdparty->getNomUrl(1);
917 print
'<tr><td>'.$langs->trans(
"Visibility").
'</td><td>';
918 if ($projectstat->public) {
919 print $langs->trans(
'SharedProject');
921 print $langs->trans(
'PrivateProject');
927 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>'.$projectstat->getLibStatut(4).
'</td></tr>';
933 print
"ErrorRecordNotFound";
935 } elseif ($socid > 0) {
941 dol_banner_tab(
$object->thirdparty,
'socid',
'', ($user->socid ? 0 : 1),
'rowid',
'nom');
947 $object->next_prev_filter =
"te.fk_user_assign:=:".((int) $user->id);
948 } elseif ($user->socid > 0) {
949 $object->next_prev_filter =
"te.fk_soc:=:".((int) $user->socid);
954 print
dol_get_fiche_head($head,
'tabTicket', $langs->trans(
"Ticket"), -1,
'ticket', 0,
'',
'', 0,
'', 1);
956 $morehtmlref =
'<div class="refidno">';
958 if ($user->hasRight(
'ticket',
'write') && !$user->socid) {
959 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editsubject&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetTitle'), 0).
'</a> ';
961 if ($action !=
'editsubject') {
964 $morehtmlref .=
'<form method="post" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
965 $morehtmlref .=
'<input type="hidden" name="action" value="setsubject">';
966 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
967 $morehtmlref .=
'<input type="hidden" name="id" value="'.$object->id.
'">';
968 $morehtmlref .=
'<input type="text" class="minwidth300" id="subject" name="subject" value="'.$object->subject.
'" autofocus="">';
969 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button valignmiddle" name="modify" value="'.$langs->trans(
"Modify").
'">';
970 $morehtmlref .=
'<input type="submit" class="smallpaddingimp button button-cancel valignmiddle" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
971 $morehtmlref .=
'</form>';
976 if (
$object->fk_user_create > 0) {
977 $morehtmlref .=
'<br>';
980 $fuser =
new User($db);
981 $fuser->fetch(
$object->fk_user_create);
982 $morehtmlref .= $fuser->getNomUrl(-1);
986 $createdfrompublicticket = 0;
987 $createdfromemailcollector = 0;
988 if (!empty(
$object->origin_email) && (empty(
$object->email_msgid) || preg_match(
'/dolibarr\-tic\d+/',
$object->email_msgid))) {
990 $createdfrompublicticket = 1;
991 } elseif (!empty(
$object->email_msgid)) {
993 $createdfromemailcollector = 1;
998 if ($createdfrompublicticket) {
999 $htmltooltip .= $langs->trans(
"OriginEmail").
': '.
$object->origin_email;
1001 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
1003 $morehtmlref .=
img_picto(
'',
'email',
'class="paddingrightonly"');
1004 $morehtmlref .=
dol_escape_htmltag(
$object->origin_email).
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByPublicPortal"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltipcreatedbyportal').
'</small>';
1005 } elseif ($createdfromemailcollector) {
1006 $langs->load(
"mails");
1008 $htmltooltip .=
'<b>'.$langs->trans(
"EmailMsgID").
':</b> '.
$object->email_msgid;
1009 $htmltooltip .=
'<br><b>'.$langs->trans(
"EmailDate").
':</b> '.
dol_print_date(
$object->email_date,
'dayhour');
1010 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailFrom").
':</b> '.
$object->origin_email;
1011 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailReply").
':</b> '.
$object->origin_replyto;
1012 $htmltooltip .=
'<br><b>'.$langs->trans(
"MailReferences").
':</b> '.
$object->origin_references;
1013 $morehtmlref .= ($createdbyshown ?
' - ' :
'<br>');
1015 $morehtmlref .=
img_picto(
'From',
'email',
'class="paddingrightonly"');
1017 if (
$object->origin_replyto) {
1018 $morehtmlref .=
' - '.img_picto(
'ReplyTo',
'email',
'class="paddingrightonly"');
1021 $morehtmlref .=
' <small class="hideonsmartphone opacitymedium">- '.$form->textwithpicto($langs->trans(
"CreatedByEmailCollector"), $htmltooltip, 1,
'help',
'', 0, 3,
'tooltipcreatedbyemailcollector').
'</small>';
1024 $permissiontoedit =
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write');
1029 $morehtmlref .=
'<br>';
1030 if ($action !=
'editcustomer' && $permissiontoedit) {
1031 $morehtmlref .=
img_picto($langs->trans(
"ThirdParty"),
'company',
'class="pictofixedwidth"');
1032 $morehtmlref .=
'<a class="editfielda" href="'.$url_page_current.
'?action=editcustomer&token='.
newToken().
'&track_id='.
$object->track_id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty'), 0).
'</a> ';
1034 $morehtmlref .= $form->form_thirdparty($url_page_current.
'?track_id='.
$object->track_id, (
string)
$object->socid, $action ==
'editcustomer' ?
'editcustomer' :
'none',
'', 1, 0, 0, array(), 1);
1036 $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>';
1042 $langs->load(
"projects");
1043 $morehtmlref .=
'<br>';
1044 if ($permissiontoedit) {
1046 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project'.((is_object(
$object->project) &&
$object->project->public) ?
'pub' :
''),
'class="pictofixedwidth"');
1047 if ($action !=
'classify') {
1048 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1050 $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');
1052 if (!empty(
$object->fk_project)) {
1054 $morehtmlref .=
$object->project->getNomUrl(1);
1055 if (
$object->project->title) {
1056 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag(
$object->project->title).
'</span>';
1066 $langs->load(
'contracts');
1067 $morehtmlref .=
'<br>';
1068 if ($permissiontoedit) {
1069 $morehtmlref .=
img_picto($langs->trans(
"Contract"),
'contract',
'class="pictofixedwidth"');
1070 if ($action ==
'edit_contrat') {
1072 $morehtmlref .= $formcontract->formSelectContract($_SERVER[
"PHP_SELF"].
'?id='.
$object->id,
$object->socid,
$object->fk_contract,
'contratid', 0, 1, 1, 1);
1074 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edit_contrat&token='.
newToken().
'&id='.
$object->id.
'">';
1075 $morehtmlref .=
img_edit($langs->trans(
'SetContract'));
1076 $morehtmlref .=
'</a>';
1079 if (!empty(
$object->fk_contract)) {
1080 $contratstatic =
new Contrat($db);
1081 $contratstatic->fetch(
$object->fk_contract);
1083 $morehtmlref .= $contratstatic->getNomUrl(0, 0, 1);
1089 $morehtmlref .=
'</div>';
1091 $linkback =
'<a href="'.DOL_URL_ROOT.
'/ticket/list.php?restore_lastsearch_values=1"><strong>'.$langs->trans(
"BackToList").
'</strong></a> ';
1093 dol_banner_tab($object,
'ref', $linkback, ($user->socid ? 0 : 1),
'ref',
'ref', $morehtmlref);
1095 print
'<div class="fichecenter">';
1096 print
'<div class="fichehalfleft">';
1097 print
'<div class="underbanner clearboth"></div>';
1099 print
'<table class="border tableforfield centpercent">';
1102 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
"TicketTrackId").
'</td><td>';
1103 if (!empty(
$object->track_id)) {
1106 print $form->showrefnav($object,
'id', $linkback, 1,
'rowid',
'track_id');
1111 print $langs->trans(
'None');
1125 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
1148 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
1149 if (!empty(
$object->date_read)) {
1151 print
'<span class="opacitymedium"><span class="small"> - '.$langs->trans(
"TimeElapsedSince").
': ';
1159 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
1160 if (!empty(
$object->date_close)) {
1167 print
'<table class="nobordernopadding" width="100%"><tr><td class="nowrap">';
1168 print $langs->trans(
"AssignedTo");
1169 if (isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED &&
GETPOST(
'set',
'alpha') !=
"assign_ticket" && $user->hasRight(
'ticket',
'manage')) {
1170 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>';
1172 print
'</td></tr></table>';
1174 if (
GETPOST(
'set',
'alpha') !=
"assign_ticket" &&
$object->fk_user_assign > 0) {
1175 $userstat->fetch(
$object->fk_user_assign);
1176 print $userstat->getNomUrl(-1);
1180 if (
GETPOST(
'set',
'alpha') ==
"assign_ticket" &&
$object->status < 8 && !$user->socid && $user->hasRight(
'ticket',
'write')) {
1181 print
'<form method="post" name="ticket" enctype="multipart/form-data" action="'.$url_page_current.
'">';
1182 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1183 print
'<input type="hidden" name="action" value="assign_user">';
1184 print
'<input type="hidden" name="track_id" value="'.$object->track_id.
'">';
1186 print $form->select_dolusers(empty(
$object->fk_user_assign) ? $user->id :
$object->fk_user_assign,
'fk_user_assign', 1);
1187 print
' <input type="submit" class="button smallpaddingimp" name="btn_assign_user" value="'.$langs->trans(
"Validate").
'" />';
1194 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1195 print $langs->trans(
'Progression').
'</td><td class="left">';
1197 if ($action !=
'progression' && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED && !$user->socid) {
1198 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>';
1200 print
'</tr></table>';
1202 if ($user->hasRight(
'ticket',
'write') && $action ==
'progression') {
1203 print
'<form action="'.$url_page_current.
'" method="post">';
1204 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1205 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1206 print
'<input type="hidden" name="action" value="set_progression">';
1207 print
'<input type="text" class="flat width75" name="progress" value="'.$object->progress.
'">';
1208 print
' <input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Modify').
'">';
1219 $num = count(
$object->linkedObjects);
1223 foreach (
$object->linkedObjects as $objecttype => $objects) {
1224 if ($objecttype ==
"fichinter") {
1225 '@phan-var-force Fichinter[] $objects';
1226 foreach ($objects as $fichinter) {
1229 $timing += $fichinter->duration;
1235 print $form->textwithpicto($langs->trans(
"TicketDurationAuto"), $langs->trans(
"TicketDurationAutoInfos"), 1);
1242 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1248 print
'</div><div class="fichehalfright">';
1251 print
'<form method="post" name="formticketproperties" action="'.$url_page_current.
'">';
1252 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1253 print
'<input type="hidden" name="action" value="change_property">';
1254 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1255 print
'<input type="hidden" name="trackid" value="'.$trackid.
'">';
1258 print
'<div class="div-table-responsive-no-min">';
1259 print
'<table class="border tableforfield centpercent margintable bordertopimp">';
1260 print
'<tr class="liste_titre">';
1262 print $langs->trans(
'TicketProperties');
1265 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1266 print
'<input type="submit" class="button smallpaddingimp" name="btn_update_ticket_prop" value="'.$langs->trans(
"Modify").
'" />';
1269 if (isset(
$object->status) && (
$object->status < $object::STATUS_NEED_MORE_INFO || !
getDolGlobalInt(
'TICKET_DISALLOW_CLASSIFICATION_MODIFICATION_EVEN_IF_CLOSED')) && $user->hasRight(
'ticket',
'write')) {
1270 print
' <a class="editfielda" href="card.php?track_id='.$object->track_id.
'&set=properties">'.
img_edit($langs->trans(
'Modify')).
'</a>';
1276 if (
GETPOST(
'set',
'alpha') ==
'properties' && $user->hasRight(
'ticket',
'write')) {
1279 print
'<td class="titlefield">';
1280 print $langs->trans(
'Type');
1282 $formticket->selectTypesTickets(
$object->type_code,
'update_value_type',
'', 2);
1288 print $langs->trans(
'TicketCategory');
1290 $formticket->selectGroupTickets(
$object->category_code,
'update_value_category',
'', 2, 0, 0, 0,
'maxwidth500 widthcentpercentminusxx');
1296 print $langs->trans(
'TicketSeverity');
1298 $formticket->selectSeveritiesTickets(
$object->severity_code,
'update_value_severity',
'', 2);
1303 print
'<tr><td class="titlefield">'.$langs->trans(
"Type").
'</td><td>';
1304 if (!empty(
$object->type_code)) {
1305 print $langs->getLabelFromKey($db,
'TicketTypeShort'.
$object->type_code,
'c_ticket_type',
'code',
'label',
$object->type_code);
1310 if (!empty(
$object->category_code)) {
1311 $s = $langs->getLabelFromKey($db,
'TicketCategoryShort'.
$object->category_code,
'c_ticket_category',
'code',
'label',
$object->category_code);
1313 print
'<tr><td>'.$langs->trans(
"TicketCategory").
'</td><td class="tdoverflowmax200" title="'.
dol_escape_htmltag($s).
'">';
1317 print
'<tr><td>'.$langs->trans(
"TicketSeverity").
'</td><td>';
1318 if (!empty(
$object->severity_code)) {
1319 print $langs->getLabelFromKey($db,
'TicketSeverityShort'.
$object->severity_code,
'c_ticket_severity',
'code',
'label',
$object->severity_code);
1330 print
'<!-- tag/categories -->'.
"\n";
1331 print
'<table class="border centpercent tableforfield">';
1333 print
'<td class="valignmiddle titlefield">';
1334 print
'<table class="nobordernopadding centpercent"><tr><td class="none">';
1335 print $langs->trans(
"Categories");
1336 if ($action !=
'categories' && !$user->socid) {
1337 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>';
1343 if ($user->hasRight(
'ticket',
'write') && $action ==
'categories') {
1344 print
'<td colspan="3">';
1345 print
'<form action="'.$url_page_current.
'" method="POST">';
1346 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1347 print
'<input type="hidden" name="track_id" value="'.$track_id.
'">';
1348 print
'<input type="hidden" name="action" value="set_categories">';
1349 print $form->selectCategories(Categorie::TYPE_TICKET,
'categories', $object);
1350 print
'<input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
'Save').
'">';
1354 print
'<td colspan="3">';
1355 print $form->showCategories(
$object->id, Categorie::TYPE_TICKET, 1);
1363 $actionobject->viewTicketOriginalMessage($user, $action, $object);
1367 print
'<!-- navbar with status -->';
1368 if (!$user->socid && $user->hasRight(
'ticket',
'write') && isset(
$object->status) &&
$object->status < $object::STATUS_CLOSED) {
1369 $actionobject->viewStatusActions($object);
1374 print
load_fiche_titre($langs->trans(
'Contacts'),
'',
'title_companies.png');
1376 print
'<div class="div-table-responsive-no-min">';
1377 print
'<div class="tagtable centpercent noborder allwidth">';
1379 print
'<div class="tagtr liste_titre">';
1380 print
'<div class="tagtd">'.$langs->trans(
"Source").
'</div>
1381 <div class="tagtd">' . $langs->trans(
"Company").
'</div>
1382 <div class="tagtd">' . $langs->trans(
"Contacts").
'</div>
1383 <div class="tagtd">' . $langs->trans(
"ContactType").
'</div>
1384 <div class="tagtd">' . $langs->trans(
"Phone").
'</div>
1385 <div class="tagtd center">' . $langs->trans(
"Status").
'</div>';
1386 print
'</div><!-- tagtr -->';
1389 $companystatic =
new Societe($db);
1390 $contactstatic =
new Contact($db);
1391 $userstatic =
new User($db);
1393 foreach (array(
'internal',
'external') as $source) {
1395 $tab = $tmpobject->listeContact(-1, $source);
1397 $num = is_array($tab) ? count($tab) : 0;
1399 foreach (array_keys($tab) as $i) {
1402 print
'<div class="tagtr '.($var ?
'pair' :
'impair').
'">';
1404 print
'<div class="tagtd left">';
1405 if ($tab_i[
'source'] ==
'internal') {
1406 echo $langs->trans(
"User");
1409 if ($tab_i[
'source'] ==
'external') {
1410 echo $langs->trans(
"ThirdPartyContact");
1414 print
'<div class="tagtd left">';
1416 if ($tab_i[
'socid'] > 0) {
1417 $companystatic->fetch($tab_i[
'socid']);
1418 echo $companystatic->getNomUrl(-1);
1420 if ($tab_i[
'socid'] < 0) {
1423 if (!$tab_i[
'socid']) {
1428 print
'<div class="tagtd">';
1429 if ($tab_i[
'source'] ==
'internal') {
1430 if ($userstatic->fetch($tab_i[
'id'])) {
1431 print $userstatic->getNomUrl(-1);
1434 if ($tab_i[
'source'] ==
'external') {
1435 if ($contactstatic->fetch($tab_i[
'id'])) {
1436 print $contactstatic->getNomUrl(-1);
1440 <div class="tagtd">' . $tab_i[
'libelle'].
'</div>';
1442 print
'<div class="tagtd">';
1446 if (array_key_exists(
'phone_perso', $tab_i) && !empty($tab_i[
'phone_perso'])) {
1448 print
'<br>'.dol_print_phone((
string) $tab_i[
'phone_perso'],
'', 0, 0,
'AC_TEL').
'<br>';
1450 if (!empty($tab_i[
'phone_mobile'])) {
1452 print
dol_print_phone($tab_i[
'phone_mobile'],
'', 0, 0,
'AC_TEL').
'<br>';
1456 print
'<div class="tagtd center">';
1458 echo
'<a href="contact.php?track_id='.$object->track_id.
'&action=swapstatut&ligne='.$tab_i[
'rowid'].
'">';
1461 if ($tab_i[
'source'] ==
'internal') {
1462 $userstatic->id = $tab_i[
'id'];
1463 $userstatic->lastname = $tab_i[
'lastname'];
1464 $userstatic->firstname = $tab_i[
'firstname'];
1465 echo $userstatic->LibStatut($tab_i[
'statuscontact'], 3);
1467 if ($tab_i[
'source'] ==
'external') {
1468 $contactstatic->id = $tab_i[
'id'];
1469 $contactstatic->lastname = $tab_i[
'lastname'];
1470 $contactstatic->firstname = $tab_i[
'firstname'];
1471 echo $contactstatic->LibStatut($tab_i[
'statuscontact'], 3);
1479 print
'</div><!-- tagtr -->';
1485 print
'</div><!-- contact list -->';
1489 print
'</div></div>';
1490 print
'<div class="clearboth"></div>';
1496 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'editline') {
1497 print
'<div class="tabsAction">'.
"\n";
1498 $parameters = array();
1499 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1504 if (empty($reshook)) {
1506 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1507 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',
'');
1511 if (isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage") {
1512 print
dolGetButtonAction(
'', $langs->trans(
'TicketAddPrivateMessage'),
'default', $_SERVER[
"PHP_SELF"].
'?action=presend_addmessage&mode=init&token='.
newToken().
'&track_id='.
$object->track_id.
'#formmailbeforetitle',
'');
1518 print
dolGetButtonAction($langs->trans(
'UnableToCreateInterIfNoSocid'), $langs->trans(
'TicketAddIntervention'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
1520 if (
$object->fk_soc > 0 && isset(
$object->status) &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ficheinter',
'creer')) {
1521 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,
'');
1525 if (isset(
$object->status) &&
$object->status >= 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1526 print
dolGetButtonAction(
'', $langs->trans(
'CloseTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=close&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1530 if (isset(
$object->status) &&
$object->status > 0 &&
$object->status < Ticket::STATUS_CLOSED && $user->hasRight(
'ticket',
'write')) {
1531 print
dolGetButtonAction(
'', $langs->trans(
'AbandonTicket'),
'default', $_SERVER[
"PHP_SELF"].
'?action=abandon&token='.
newToken().
'&track_id='.
$object->track_id,
'');
1535 if (!$user->socid && (isset(
$object->status) && (
$object->status == Ticket::STATUS_CLOSED ||
$object->status == Ticket::STATUS_CANCELED)) && !$user->socid) {
1540 if ($permissiontoedit) {
1541 print
dolGetButtonAction(
'', $langs->trans(
'Modify'),
'default', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=edit&token='.
newToken(),
'', $permissiontoedit);
1545 if ($permissiontoadd) {
1546 print
dolGetButtonAction(
'', $langs->trans(
'ToClone'),
'default', $_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=clone&token='.
newToken(),
'', $permissiontoadd);
1550 if ($user->hasRight(
'ticket',
'delete') && !$user->socid) {
1554 print
'</div>'.
"\n";
1558 if (
GETPOST(
'modelselected')) {
1559 $action =
'presend';
1562 if (GETPOSTISSET(
'actionbis') && $action ==
'presend') {
1563 $action =
'presend_addmessage';
1567 if ($action ==
'presend' || $action ==
'presend_addmessage') {
1572 $outputlangs = $langs;
1575 $newlang =
GETPOST(
'lang_id',
'aZ09');
1577 $newlang =
$object->thirdparty->default_lang;
1579 if (!empty($newlang)) {
1580 $outputlangs =
new Translate(
"", $conf);
1581 $outputlangs->setDefaultLang($newlang);
1584 $arrayoffamiliestoexclude = array(
'objectamount');
1586 $action =
'add_message';
1587 $modelmail =
'ticket_send';
1590 $morehtmlright =
'';
1592 $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, $arrayoffamiliestoexclude, $object);
1594 $morehtmlright .= $form->textwithpicto(
'<span class="opacitymedium">'.$langs->trans(
"TicketMessageSubstitutionReplacedByGenericValues").
'</span>', $help, 1,
'helpclickable',
'', 0, 3,
'helpsubstitution');
1598 print
'<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
1600 print
load_fiche_titre($langs->trans(
'TicketAddMessage'), $morehtmlright,
'messages@ticket');
1606 $formticket->action = $action;
1607 $formticket->track_id =
$object->track_id;
1608 $formticket->ref =
$object->ref;
1609 $formticket->id =
$object->id;
1610 $formticket->trackid =
'tic'.$object->id;
1612 $formticket->withfile = 2;
1613 $formticket->withcancel = 1;
1614 $formticket->param = array(
'fk_user_create' => $user->id);
1615 $formticket->param[
'langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
1618 $formticket->param[
'models'] = $modelmail;
1619 $formticket->param[
'models_id'] =
GETPOSTINT(
'modelmailselected');
1621 $formticket->param[
'returnurl'] = $_SERVER[
"PHP_SELF"].
'?track_id='.urldecode(
$object->track_id);
1623 $formticket->withsubstit = 1;
1624 $formticket->substit = $substitutionarray;
1625 $formticket->backtopage = $backtopage;
1627 $formticket->showMessageForm(
'100%');
1633 $param =
'&id='.$object->id;
1634 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
1635 $param .=
'&contextpage='.$contextpage;
1637 if ($limit > 0 && $limit != $conf->liste_limit) {
1638 $param .=
'&limit='.$limit;
1641 $param .=
'&actioncode='.urlencode($actioncode);
1643 if ($search_agenda_label) {
1644 $param .=
'&search_agenda_label='.urlencode($search_agenda_label);
1647 $morehtmlright =
'';
1649 $messagingUrl = DOL_URL_ROOT.
'/ticket/agenda.php?track_id='.
$object->track_id;
1650 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'MessageListViewType'),
'',
'fa fa-bars imgforviewmode', $messagingUrl,
'', 1);
1653 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1654 $url =
'card.php?track_id='.$object->track_id.
'&action=presend_addmessage&mode=init';
1655 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'TicketAddMessage'),
'',
'fa fa-comment-dots', $url,
'add-new-ticket-title-button', (
int) $btnstatus);
1658 $btnstatus =
$object->status < Ticket::STATUS_CLOSED && $action !=
"presend" && $action !=
"presend_addmessage" && $action !=
"add_message";
1659 $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);
1660 $morehtmlright .=
dolGetButtonTitle($langs->trans(
'AddAction'),
'',
'fa fa-plus-circle', $url,
'add-new-ticket-even-button', (
int) $btnstatus);
1662 print_barre_liste($langs->trans(
"ActionsOnTicket"), 0, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder,
'', 0, -1,
'', 0, $morehtmlright,
'', 0, 1, 1);
1666 $filters[
'search_agenda_label'] = $search_agenda_label;
1667 $filters[
'search_rowid'] = $search_rowid;
1669 show_actions_messaging($conf, $langs, $db, $object,
null, 0, $actioncode,
'', $filters, $sortfield, $sortorder);
1672 if ($action !=
'presend' && $action !=
'presend_addmessage' && $action !=
'add_message') {
1673 print
'<div class="fichecenter"><div class="fichehalfleft">';
1674 print
'<a name="builddoc"></a>';
1680 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
1681 $genallowed = $permissiontoadd;
1682 $delallowed = $permissiontodelete;
1686 $codelang =
$object->thirdparty->default_lang;
1689 print $formfile->showdocuments(
'ticket', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $codelang);
1692 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'ticket'), 1);
1693 $linktoelem = $tmparray[
'linktoelem'];
1694 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
1695 print $htmltoenteralink;
1697 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1700 print
'<br><!-- Link to public interface -->'.
"\n";
1705 print
'<div class="fichehalfright">';
1709 $morehtmlcenter =
'<div class="nowraponall">';
1710 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode', DOL_URL_ROOT.
'/ticket/messaging.php?id='.
$object->id);
1711 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'FullList'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/ticket/agenda.php?id='.
$object->id);
1712 $morehtmlcenter .=
'</div>';
1715 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1717 $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)
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.
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.
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.
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_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.
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.
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.
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.
if(getDolGlobalString( 'TAKEPOS_SHOW_CUSTOMER')) print $langs trans('Date')." left 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 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.