25 if (!defined(
'NOCSRFCHECK')) {
26 define(
'NOCSRFCHECK',
'1');
29 if (!defined(
'NOREQUIREMENU')) {
30 define(
'NOREQUIREMENU',
'1');
33 if (!defined(
"NOLOGIN")) {
34 define(
"NOLOGIN",
'1');
36 if (!defined(
'NOIPCHECK')) define(
'NOIPCHECK',
'1');
37 if (!defined(
'NOBROWSERNOTIF')) define(
'NOBROWSERNOTIF',
'1');
40 require
'../../main.inc.php';
41 require_once DOL_DOCUMENT_ROOT.
'/ticket/class/actions_ticket.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formticket.class.php';
43 require_once DOL_DOCUMENT_ROOT.
'/core/class/CMailFile.class.php';
44 require_once DOL_DOCUMENT_ROOT.
'/core/lib/ticket.lib.php';
45 require_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
46 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
47 require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
50 $langs->loadLangs(array(
"companies",
"other",
"ticket"));
53 $track_id =
GETPOST(
'track_id',
'alpha');
54 $cancel =
GETPOST(
'cancel',
'alpha');
55 $action =
GETPOST(
'action',
'aZ09');
56 $email =
GETPOST(
'email',
'alpha');
58 if (
GETPOST(
'btn_view_ticket')) {
59 unset($_SESSION[
'email_customer']);
61 if (isset($_SESSION[
'email_customer'])) {
62 $email = $_SESSION[
'email_customer'];
74 if (!empty($backtopage))
76 header(
"Location: ".$backtopage);
79 $action =
'view_ticket';
82 if ($action ==
"view_ticket" || $action ==
"presend" || $action ==
"close" || $action ==
"confirm_public_close" || $action ==
"add_message") {
84 $display_ticket =
false;
85 if (!strlen($track_id)) {
87 array_push($object->errors, $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"TicketTrackId")));
90 if (!strlen($email)) {
92 array_push($object->errors, $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Email")));
97 array_push($object->errors, $langs->trans(
"ErrorEmailInvalid"));
103 $ret = $object->fetch(
'',
'', $track_id);
104 if ($ret && $object->dao->id > 0) {
107 if ($emailofticket == $email)
109 $display_ticket =
true;
110 $_SESSION[
'email_customer'] = $email;
114 $contacts = $object->dao->liste_contact(-1,
'external');
115 foreach ($contacts as $contact) {
116 if ($contact[
'email'] == $email) {
117 $display_ticket =
true;
118 $_SESSION[
'email_customer'] = $email;
121 $display_ticket =
false;
126 if ($object->dao->fk_soc > 0 || $object->dao->socid > 0) {
127 $object->dao->fetch_thirdparty();
128 if ($email == $object->dao->thirdparty->email) {
129 $display_ticket =
true;
130 $_SESSION[
'email_customer'] = $email;
134 if ($object->dao->fk_user_create > 0)
136 $tmpuser =
new User($db);
137 $tmpuser->fetch($object->dao->fk_user_create);
138 if ($email == $tmpuser->email) {
139 $display_ticket =
true;
140 $_SESSION[
'email_customer'] = $email;
144 if ($object->dao->fk_user_assign > 0 && $object->dao->fk_user_assign != $object->dao->fk_user_create)
146 $tmpuser =
new User($db);
147 $tmpuser->fetch($object->dao->fk_user_assign);
148 if ($email == $tmpuser->email) {
149 $display_ticket =
true;
150 $_SESSION[
'email_customer'] = $email;
155 array_push($object->errors, $langs->trans(
"ErrorTicketNotFound", $track_id));
160 if (!$error && $action ==
'confirm_public_close' && $display_ticket)
162 if ($object->dao->close($user)) {
165 $url =
'view.php?action=view_ticket&track_id='.GETPOST(
'track_id',
'alpha');
166 header(
"Location: ".$url);
174 if (!$error && $action ==
"add_message" && $display_ticket &&
GETPOSTISSET(
'btn_add_message'))
177 $ret = $object->dao->newMessage($user, $action, 0, 1);
184 $action =
'view_ticket';
188 if ($error || $errors) {
190 if ($action ==
"add_message")
202 $triggersendname =
'TICKET_SENTBYMAIL';
204 $autocopy =
'MAIN_MAIL_AUTOCOPY_TICKET_TO';
205 $trackid =
'tic'.$object->id;
206 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
214 $form =
new Form($db);
217 if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) {
218 print '<div class="error">'.$langs->trans(
'TicketPublicInterfaceForbidden').
'</div>';
223 $arrayofjs = array();
224 $arrayofcss = array(
'/ticket/css/styles.css.php');
226 llxHeaderTicket($langs->trans(
"Tickets"),
"", 0, 0, $arrayofjs, $arrayofcss);
228 print '<div class="ticketpublicarea">';
230 if ($action ==
"view_ticket" || $action ==
"presend" || $action ==
"close" || $action ==
"confirm_public_close") {
234 if ($action ==
'close') {
235 print $form->formconfirm(
$_SERVER[
"PHP_SELF"].
"?track_id=".$track_id, $langs->trans(
"CloseATicket"), $langs->trans(
"ConfirmCloseAticket"),
"confirm_public_close",
'',
'', 1);
238 print
'<div id="form_view_ticket" class="margintoponly">';
240 print
'<table class="ticketpublictable centpercent tableforfield">';
243 print
'<tr><td class="titlefield">'.$langs->trans(
"Ref").
'</td><td>';
248 print
'<tr><td>'.$langs->trans(
"TicketTrackId").
'</td><td>';
253 print
'<tr><td>'.$langs->trans(
"Subject").
'</td><td>';
258 print
'<tr><td>'.$langs->trans(
"Status").
'</td><td>';
259 print $object->dao->getLibStatut(2);
263 print
'<tr><td>'.$langs->trans(
"Type").
'</td><td>';
268 print
'<tr><td>'.$langs->trans(
"Category").
'</td><td>';
273 print
'<tr><td>'.$langs->trans(
"Severity").
'</td><td>';
278 print
'<tr><td>'.$langs->trans(
"DateCreation").
'</td><td>';
283 print
'<tr><td>'.$langs->trans(
"Author").
'</td><td>';
284 if ($object->dao->fk_user_create > 0) {
285 $langs->load(
"users");
286 $fuser =
new User($db);
287 $fuser->fetch($object->dao->fk_user_create);
288 print $fuser->getFullName($langs);
296 if (!empty($object->dao->date_read)) {
297 print
'<tr><td>'.$langs->trans(
"TicketReadOn").
'</td><td>';
303 if (!empty($object->dao->date_close)) {
304 print
'<tr><td>'.$langs->trans(
"TicketCloseOn").
'</td><td>';
310 print
'<tr><td>'.$langs->trans(
"AssignedTo").
'</td><td>';
311 if ($object->dao->fk_user_assign > 0) {
312 $fuser =
new User($db);
313 $fuser->fetch($object->dao->fk_user_assign);
314 print $fuser->getFullName($langs, 1);
319 print
'<tr><td>'.$langs->trans(
"Progression").
'</td><td>';
327 print
'<div style="clear: both; margin-top: 1.5em;"></div>';
329 if ($action ==
'presend') {
330 print
load_fiche_titre($langs->trans(
'TicketAddMessage'),
'',
'messages@ticket');
334 $formticket->action =
"add_message";
335 $formticket->track_id = $object->dao->track_id;
336 $formticket->id = $object->dao->id;
338 $formticket->param = array(
'track_id' => $object->dao->track_id,
'fk_user_create' =>
'-1',
'returnurl' => DOL_URL_ROOT.
'/public/ticket/view.php');
340 $formticket->withfile = 2;
341 $formticket->withcancel = 1;
343 $formticket->showMessageForm(
'100%');
346 if ($action !=
'presend') {
347 print
'<form method="post" id="form_view_ticket_list" name="form_view_ticket_list" enctype="multipart/form-data" action="'.DOL_URL_ROOT.
'/public/ticket/list.php">';
348 print
'<input type="hidden" name="token" value="'.newToken().
'">';
349 print
'<input type="hidden" name="action" value="view_ticketlist">';
350 print
'<input type="hidden" name="track_id" value="'.$object->dao->track_id.
'">';
351 print
'<input type="hidden" name="email" value="'.$_SESSION[
'email_customer'].
'">';
355 print
'<div class="tabsAction">';
358 print
'<div class="inline-block divButAction"><a class="left" style="padding-right: 50px" href="javascript:$(\'#form_view_ticket_list\').submit();">'.$langs->trans(
'ViewMyTicketList').
'</a></div>';
360 if ($object->dao->fk_statut < Ticket::STATUS_CLOSED) {
362 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?action=presend&mode=init&track_id='.$object->dao->track_id.
'">'.$langs->trans(
'AddMessage').
'</a></div>';
366 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?action=close&track_id='.$object->dao->track_id.
'">'.$langs->trans(
'CloseTicket').
'</a></div>';
374 print
load_fiche_titre($langs->trans(
'TicketMessagesList'),
'',
'object_conversation');
375 $object->viewTicketMessages(
false,
true, $object->dao);
377 print
'<div class="error">Not Allowed<br><a href="'.$_SERVER[
'PHP_SELF'].
'?track_id='.$object->dao->track_id.
'" rel="nofollow noopener">'.$langs->trans(
'Back').
'</a></div>';
380 print
'<div class="center opacitymedium margintoponly marginbottomonly">'.$langs->trans(
"TicketPublicMsgViewLogIn").
'</div>';
382 print
'<div id="form_view_ticket">';
383 print
'<form method="post" name="form_view_ticket" enctype="multipart/form-data" action="'.$_SERVER[
'PHP_SELF'].
'">';
384 print
'<input type="hidden" name="token" value="'.newToken().
'">';
385 print
'<input type="hidden" name="action" value="view_ticket">';
387 print
'<p><label for="track_id" style="display: inline-block; width: 30%; "><span class="fieldrequired">'.$langs->trans(
"TicketTrackId").
'</span></label>';
388 print
'<input size="30" id="track_id" name="track_id" value="'.(GETPOST(
'track_id',
'alpha') ?
GETPOST(
'track_id',
'alpha') :
'').
'" />';
391 print
'<p><label for="email" style="display: inline-block; width: 30%; "><span class="fieldrequired">'.$langs->trans(
'Email').
'</span></label>';
392 print
'<input size="30" id="email" name="email" value="'.(GETPOST(
'email',
'alpha') ?
GETPOST(
'email',
'alpha') : $_SESSION[
'customer_email']).
'" />';
395 print
'<p style="text-align: center; margin-top: 1.5em;">';
396 print
'<input class="button" type="submit" name="btn_view_ticket" value="'.$langs->trans(
'ViewTicket').
'" />';
406 htmlPrintOnlinePaymentFooter($mysoc, $langs, 0, $suffix, $object);
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
Class to manage Dolibarr users.
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
static getValidAddress($address, $format, $encode=0, $maxnumberofemail=0)
Return a formatted address string for SMTP protocol.
llxHeaderTicket($title, $head="", $disablejs=0, $disablehead=0, $arrayofjs= '', $arrayofcss= '')
Show header for public pages.
print $_SERVER["PHP_SELF"]
Edit parameters.
print
Draft customers invoices.
dol_print_date($time, $format= '', $tzoutput= 'auto', $outputlangs= '', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
Class Actions of the module ticket.
const STATUS_NOT_READ
Status.
isValidEmail($address, $acceptsupervisorkey=0)
Return true if email syntax is ok.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $keepmoretags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...