30if (!defined(
'NOLOGIN')) {
33if (!defined(
'NOCSRFCHECK')) {
34 define(
"NOCSRFCHECK", 1);
36if (!defined(
'NOBROWSERNOTIF')) {
37 define(
'NOBROWSERNOTIF',
'1');
41require
'../../main.inc.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
47require_once DOL_DOCUMENT_ROOT.
'/bookcal/class/calendar.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/bookcal/class/availabilities.class.php';
49require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
50require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
53if (!isModEnabled(
'bookcal')) {
57$langs->loadLangs(array(
"main",
"other",
"dict",
"agenda",
"errors",
"companies"));
59$action =
GETPOST(
'action',
'aZ09');
61$id_availability =
GETPOSTINT(
'id_availability');
73$backtopage =
GETPOST(
"backtopage",
"alpha");
79if ($id_availability > 0) {
80 $result = $availability->fetch($id_availability);
85$nowyear = $nowarray[
'year'];
86$nowmonth = $nowarray[
'mon'];
87$nowday = $nowarray[
'mday'];
90$prev_year = $prev[
'year'];
91$prev_month = $prev[
'month'];
93$next_year = $next[
'year'];
94$next_month = $next[
'month'];
96$max_day_in_prev_month = idate(
"t",
dol_mktime(0, 0, 0, $prev_month, 1, $prev_year,
'gmt'));
97$max_day_in_month = idate(
"t",
dol_mktime(0, 0, 0, $month, 1, $year));
99$tmpday = - idate(
"w",
dol_mktime(12, 0, 0, $month, 1, $year,
'gmt')) + 2;
100$tmpday += ((isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1) - 1);
105$firstdaytoshow =
dol_mktime(0, 0, 0, $prev_month, $max_day_in_prev_month + $tmpday, $prev_year,
'tzuserrel');
106$next_day = 7 - ($max_day_in_month + 1 - $tmpday) % 7;
110$lastdaytoshow =
dol_mktime(0, 0, 0, $next_month, $next_day, $next_year,
'tzuserrel');
112$datechosen =
GETPOST(
'datechosen',
'alpha');
113$datetimechosen =
GETPOSTINT(
'datetimechosen');
114$isdatechosen =
false;
115$timebooking =
GETPOST(
"timebooking");
116$datetimebooking =
GETPOSTINT(
"datetimebooking");
117$durationbooking =
GETPOSTINT(
"durationbooking");
131function llxHeaderVierge($title, $head =
"", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
133 global $user, $conf, $langs, $mysoc;
135 top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
137 print
'<body id="mainbody" class="publicnewmemberform">';
145 $urllogo = DOL_URL_ROOT.
'/theme/common/login_logo.png';
147 if (!empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$mysoc->logo_small)) {
148 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/thumbs/'.$mysoc->logo_small);
149 } elseif (!empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$mysoc->logo)) {
150 $urllogo = DOL_URL_ROOT.
'/viewimage.php?modulepart=mycompany&entity='.$conf->entity.
'&file='.urlencode(
'logos/'.$mysoc->logo);
151 } elseif (is_readable(DOL_DOCUMENT_ROOT.
'/theme/dolibarr_logo.svg')) {
152 $urllogo = DOL_URL_ROOT.
'/theme/dolibarr_logo.svg';
157 print
'<div class="center">';
159 print
'<div class="backgreypublicpayment">';
160 print
'<div class="logopublicpayment">';
162 print
'<a href="'.(getDolGlobalString(
'BOOKCAL_PUBLIC_INTERFACE_TOPIC') ?
getDolGlobalString(
'BOOKCAL_PUBLIC_INTERFACE_TOPIC') :
dol_buildpath(
'/public/ticket/index.php?entity='.$conf->entity, 1)).
'">';
163 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'">';
167 print
'<div class="clearboth"></div><strong>'.(getDolGlobalString(
'BOOKCAL_PUBLIC_INTERFACE_TOPIC') ?
getDolGlobalString(
'BOOKCAL_PUBLIC_INTERFACE_TOPIC') : $langs->trans(
"BookCalSystem")).
'</strong>';
174 print
'<div class="poweredbypublicpayment opacitymedium right hideonsmartphone"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans(
"PoweredBy").
'<br><img src="'.DOL_URL_ROOT.
'/theme/dolibarr_logo.svg" width="80px"></a></div>';
180 print
'<div class="divmainbodylarge">';
188if ($action ==
'add') {
195 if (!is_object($user)) {
196 $user =
new User($db);
203 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Lastname")).
"<br>\n";
207 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Firstname")).
"<br>\n";
211 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Email")).
"<br>\n";
215 $sql =
"SELECT s.rowid";
216 $sql .=
" FROM ".MAIN_DB_PREFIX.
"socpeople as s";
217 $sql .=
" WHERE s.lastname = '".$db->escape(
GETPOST(
"lastname")).
"'";
218 $sql .=
" AND s.firstname = '".$db->escape(
GETPOST(
"firstname")).
"'";
219 $sql .=
" AND s.email = '".$db->escape(
GETPOST(
"email")).
"'";
220 $resql = $db->query($sql);
223 $num = $db->num_rows($resql);
225 $obj = $db->fetch_object($resql);
226 $idcontact = $obj->rowid;
227 $contact->fetch($idcontact);
229 $contact->lastname =
GETPOST(
"lastname");
230 $contact->firstname =
GETPOST(
"firstname");
231 $contact->email =
GETPOST(
"email");
232 $result = $contact->create($user);
235 $errmsg .= $contact->error.
" ".implode(
',', $contact->errors);
240 $errmsg .= $db->lasterror();
247 $actioncomm->label = $langs->trans(
"BookcalBookingTitle");
248 $actioncomm->type =
'AC_RDV';
249 $actioncomm->type_id = 5;
250 $actioncomm->datep =
GETPOSTINT(
"datetimebooking");
251 $actioncomm->datef = $dateend;
252 $actioncomm->note_private =
GETPOST(
"description");
253 $actioncomm->percentage = -1;
254 $actioncomm->fk_bookcal_calendar = $id;
255 $actioncomm->userownerid = $calendar->visibility;
256 $actioncomm->contact_id = $contact->id;
257 $actioncomm->socpeopleassigned = [
259 'id' => $contact->id,
261 'answer_status' => 0,
266 $result = $actioncomm->create($user);
269 $errmsg .= $actioncomm->error.
" ".implode(
',', $actioncomm->errors);
273 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources";
274 $sql .=
"(fk_actioncomm, element_type, fk_element, answer_status, mandatory, transparency";
275 $sql .=
") VALUES (";
276 $sql .= (int) $actioncomm->id;
277 $sql .=
", 'socpeople'";
278 $sql .=
", ". (int) $contact->id;
279 $sql .=
", 0, 0, 0)";
280 $resql = $db->query($sql);
283 $errmsg .= $db->lasterror();
290 $action =
'afteradd';
302$form =
new Form($db);
310if ($action ==
'create') {
311 $backtopage = $_SERVER[
"PHP_SELF"].
'?id='.$id.
'&datechosen='.$datechosen;
313 $backtopage = DOL_URL_ROOT.
'/public/bookcal/index.php?id='.$id;
318print
'<div class="bookcalpublicarea centpercent center" style="min-width:30%;width:fit-content;height:70%;top:60%;left: 50%;">';
319print
'<div class="bookcalform" style="min-height:50%">';
320if ($action ==
'afteradd') {
322 print $langs->trans(
"BookingSuccessfullyBooked");
328 print
'<table class="centpercent">';
331 if ($action !=
'create') {
332 print
'<form name="formsearch" action="'.$_SERVER[
"PHP_SELF"].
'">';
333 print
'<input type="hidden" name="id" value="'.$id.
'">';
335 $nav =
'<a href="?id='.$id.
"&year=".$prev_year.
"&month=".$prev_month.$param.
'"><i class="fa fa-chevron-left"></i></a> '.
"\n";
336 $nav .=
' <span id="month_name">'.dol_print_date(
dol_mktime(0, 0, 0, $month, 1, $year),
"%b %Y");
337 $nav .=
" </span>\n";
338 $nav .=
' <a href="?id='.$id.
"&year=".$next_year.
"&month=".$next_month.$param.
'"><i class="fa fa-chevron-right"></i></a>'.
"\n";
339 if (empty($conf->dol_optimize_smallscreen)) {
340 $nav .=
' <a href="?id='.$id.
"&year=".$nowyear.
"&month=".$nowmonth.
"&day=".$nowday.$param.
'" class="datenowlink">'.$langs->trans(
"Today").
'</a> ';
342 $nav .= $form->selectDate($dateselect,
'dateselect', 0, 0, 1,
'', 1, 0);
343 $nav .=
'<button type="submit" class="liste_titre button_search valignmiddle" name="button_search_x" value="x"><span class="fa fa-search"></span></button>';
350 print
'<div class="bookingtab hidden" style="height:50%">';
351 print
'<div id="bookingtabspandate"></div>';
357 if ($action ==
"create") {
359 if (empty($datetimebooking)) {
360 $timebookingarray = explode(
" - ", $timebooking);
361 $timestartarray = explode(
":", $timebookingarray[0]);
362 $timeendarray = explode(
":", $timebookingarray[1]);
366 print
'<span>'.img_picto(
"",
"calendar").
" ".
dol_print_date($datetimebooking,
'dayhourtext').
'</span>';
367 print
'<div class="center"><a href="'.$_SERVER[
"PHP_SELF"].
'?id=1&year=2024&month=2" class="small">('.$langs->trans(
"SelectANewDate").
')</a></div>';
371 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
372 print
'<table class="border" summary="form to subscribe" id="tablesubscribe">'.
"\n";
373 print
'<input type="hidden" name="token" value="'.newToken().
'">';
374 print
'<input type="hidden" name="action" value="add">';
375 print
'<input type="hidden" name="datetimebooking" value="'.$datetimebooking.
'">';
376 print
'<input type="hidden" name="datechosen" value="'.$datechosen.
'">';
377 print
'<input type="hidden" name="id" value="'.$id.
'">';
378 print
'<input type="hidden" name="durationbooking" value="'.$durationbooking.
'">';
381 print
'<tr><td><input autofocus type="text" name="lastname" class="minwidth150" placeholder="'.dol_escape_htmltag($langs->trans(
"Lastname").
'*').
'" value="'.
dol_escape_htmltag(
GETPOST(
'lastname')).
'"></td></tr>'.
"\n";
383 print
'<tr><td><input type="text" name="firstname" class="minwidth150" placeholder="'.dol_escape_htmltag($langs->trans(
"Firstname").
'*').
'" value="'.
dol_escape_htmltag(
GETPOST(
'firstname')).
'"></td></tr>'.
"\n";
385 print
'<tr><td><input type="email" name="email" maxlength="255" class="minwidth150" placeholder="'.dol_escape_htmltag($langs->trans(
"Email").
'*').
'" value="'.
dol_escape_htmltag(
GETPOST(
'email')).
'"></td></tr>'.
"\n";
389 print
'<td class="tdtop">';
390 print $langs->trans(
"Message");
391 print
'<textarea name="description" id="description" wrap="soft" class="quatrevingtpercent" rows="'.ROWS_4.
'">'.
dol_escape_htmltag(
GETPOST(
'description',
'restricthtml'), 0, 1).
'</textarea></td>';
393 print
'</table>'.
"\n";
394 print
'<div class="center">';
395 print
'<input type="submit" value="'.$langs->trans(
"Submit").
'" id="submitsave" class="button">';
401 print
'<table class="centpercent noborder nocellnopadd cal_pannel cal_month">';
402 print
' <tr class="">';
404 print
' <td class="center hideonsmartphone">#</td>';
407 $numdayinweek = (($i + (isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1)) % 7);
408 if (!empty($conf->dol_optimize_smallscreen)) {
409 print
' <td class="center bold uppercase tdfordaytitle'.($i == 0 ?
' borderleft' :
'').
'">';
410 $labelshort = array(0 =>
'SundayMin', 1 =>
'MondayMin', 2 =>
'TuesdayMin', 3 =>
'WednesdayMin', 4 =>
'ThursdayMin', 5 =>
'FridayMin', 6 =>
'SaturdayMin');
411 print $langs->trans($labelshort[$numdayinweek]);
414 print
' <td class="center minwidth75 bold uppercase small tdoverflowmax50 tdfordaytitle'.($i == 0 ?
' borderleft' :
'').
'">';
416 $labelshort = array(0 =>
'Sunday', 1 =>
'Monday', 2 =>
'Tuesday', 3 =>
'Wednesday', 4 =>
'Thursday', 5 =>
'Friday', 6 =>
'Saturday');
417 print $langs->trans($labelshort[$numdayinweek]);
425 $todaytms =
dol_mktime(0, 0, 0, $todayarray[
'mon'], $todayarray[
'mday'], $todayarray[
'year']);
428 $arrayofavailabledays = array();
430 $arrayofavailabilities = $availability->fetchAll(
'',
'', 0, 0,
'(status:=:1) AND (fk_bookcal_calendar:=:'.((
int) $id).
')');
431 if ($arrayofavailabilities < 0) {
434 foreach ($arrayofavailabilities as $key => $value) {
437 for ($i = $startarray[
'mday']; $i <= $endarray[
'mday']; $i++) {
438 if ($todayarray[
'mon'] >= $startarray[
'mon'] && $todayarray[
'mon'] <= $endarray[
'mon']) {
439 $arrayofavailabledays[
dol_mktime(0, 0, 0, $todayarray[
'mon'], $i, $todayarray[
'year'])] =
dol_mktime(0, 0, 0, $todayarray[
'mon'], $i, $todayarray[
'year']);
445 for ($iter_week = 0; $iter_week < 6; $iter_week++) {
449 $currdate0 = sprintf(
"%04d", $prev_year).sprintf(
"%02d", $prev_month).sprintf(
"%02d", $max_day_in_prev_month + $tmpday);
450 } elseif ($tmpday <= $max_day_in_month) {
451 $currdate0 = sprintf(
"%04d", $year).sprintf(
"%02d", $month).sprintf(
"%02d", $tmpday);
453 $currdate0 = sprintf(
"%04d", $next_year).sprintf(
"%02d", $next_month).sprintf(
"%02d", $tmpday - $max_day_in_month);
456 $numweek0 = idate(
"W", strtotime(date($currdate0)));
458 echo
' <td class="center weeknumber opacitymedium hideonsmartphone" style="min-width: 40px">'.$numweek0.
'</td>';
460 for ($iter_day = 0; $iter_day < 7; $iter_day++) {
463 $style =
'cal_other_month cal_past';
464 if ($iter_day == 6) {
465 $style .=
' cal_other_month_right';
467 echo
' <td class="'.$style.
' nowrap tdtop" width="14%">';
470 } elseif ($tmpday <= $max_day_in_month) {
472 $curtime =
dol_mktime(0, 0, 0, $month, $tmpday, $year);
473 $style =
'cal_current_month';
474 if ($iter_day == 6) {
475 $style .=
' cal_current_month_right';
478 if ($todayarray[
'mday'] == $tmpday && $todayarray[
'mon'] == $month && $todayarray[
'year'] == $year) {
482 if ($curtime > $todaytms && in_array($curtime, $arrayofavailabledays)) {
483 $style .=
' cal_available cursorpointer';
485 if ($curtime < $todaytms) {
486 $style .=
' cal_past';
488 $dateint = sprintf(
"%04d", $year).
'_'.sprintf(
"%02d", $month).
'_'.sprintf(
"%02d", $tmpday);
489 if (!empty(explode(
'dayevent_', $datechosen)[1]) && explode(
'dayevent_', $datechosen)[1] == $dateint) {
490 $style .=
' cal_chosen';
491 $isdatechosen =
true;
493 echo
' <td class="'.$style.
' nowrap tdtop" width="14%">';
498 $style =
'cal_other_month';
499 if ($iter_day == 6) {
500 $style .=
' cal_other_month_right';
502 echo
' <td class="'.$style.
' nowrap tdtop" width="14%">';
514 print
'<div class="center bookingtab" style="height:50%">';
515 print
'<div style="height:100%">';
516 print
'<form id="formbooking" name="formbooking" method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
517 print
'<input type="hidden" name="id" value="'.$id.
'">';
518 print
'<input type="hidden" name="token" value="'.newToken().
'">';
519 print
'<input type="hidden" name="action" value="create">';
520 print
'<input type="hidden" id="datechosen" name="datechosen" value="">';
521 print
'<input type="hidden" id="datetimechosen" name="datetimechosen" value="">';
522 print
'<input type="hidden" id="durationbooking" name="durationbooking" value="">';
524 print
'<div id="bookinghoursection">';
525 print
'<br><br><br><br><br><br><div class="opacitymedium center">'.$langs->trans(
"SelectADay").
'</div>';
540 function generateBookingButtons(timearray, datestring){
541 console.log("We generate all booking buttons of "+datestring);
544 for (index in timearray){
545 let hour = new Date("2000-01-01T" + index + ":00");
546 duration = timearray[index];
547 isalreadybooked = false;
550 isalreadybooked = true;
552 hour.setMinutes(hour.getMinutes() + duration);
554 let hours = hour.getHours().toString().padStart(2, "0"); // Formatter pour obtenir deux chiffres
555 let mins = hour.getMinutes().toString().padStart(2, "0"); // Formatter pour obtenir deux chiffres
557 timerange = index + " - " + `${hours}:${mins}`;
558 str += \'<input class="button btnsubmitbooking \'+(isalreadybooked == true ? "btnbookcalbooked" : "")+\'" type="submit" name="timebooking" value="\'+timerange+\'" data-duration="\'+duration+\'"><br>\';
561 $("#bookinghoursection").html(str);
562 $(".btnsubmitbooking").on("click", function(){
563 duration = $(this).data("duration");
564 $("#durationbooking").val(duration);
567 print
'$(document).ready(function() {
568 $(".cal_available").on("click", function(){
569 console.log("We click on cal_available");
570 $(".cal_chosen").removeClass("cal_chosen");
571 $(this).addClass("cal_chosen");
572 datestring = $(this).children("div").data("date");
575 url: "'.DOL_URL_ROOT.
'/public/bookcal/bookcalAjax.php",
577 action: "verifyavailability",
579 datetocheck: $(this).children("div").data("datetime"),
582 }).done(function (data) {
583 console.log("We show all booking");
584 if (data["code"] == "SUCCESS") {
585 /* TODO Replace this with a creating of allavailable hours button */
587 timearray = data["availability"];
588 console.log(timearray);
589 generateBookingButtons(timearray, datestring);
590 $(".btnbookcalbooked").prop("disabled", true);
592 if(data["code"] == "NO_DATA_FOUND"){
593 console.log("No booking to hide");
595 console.log(data["message"]);
599 $(".bookingtab").removeClass("hidden");
600 $("#bookingtabspandate").text($(this).children("div").data("date"));
601 $("#datechosen").val($(this).children("div").attr("id"));
602 $("#datetimechosen").val($(this).children("div").data("datetime"));
607 '.($datechosen ?
'$(".cal_chosen").trigger( "click" )' :
'').
'
627 if ($conf->use_javascript_ajax) {
628 $conf->global->MAIN_JS_SWITCH_AGENDA = 1;
631 $dateint = sprintf(
"%04d", $year).
'_'.sprintf(
"%02d", $month).
'_'.sprintf(
"%02d", $day);
632 $eventdatetime =
dol_mktime(-1, -1, -1, $month, $day, $year);
637 $curtime =
dol_mktime(0, 0, 0, $month, $day, $year);
639 print
'<div id="dayevent_'.$dateint.
'" class="dayevent tagtable centpercent nobordernopadding" data-datetime="'.$eventdatetime.
'" data-date="'.
dol_print_date($eventdatetime,
"daytext").
'">'.
"\n";
643 print
img_picto(
'today',
'fontawesome_circle_fas_black_7px');
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined( 'NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined( 'NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) if(!defined( 'NOLOGIN')) if(!defined('NOCSRFCHECK')) if(!defined( 'NOIPCHECK')) llxHeaderVierge()
Header function.
Class to manage agenda events (actions)
Class for Availabilities.
Class to manage Dolibarr users.
dol_get_prev_month($month, $year)
Return previous month.
dol_get_next_month($month, $year)
Return next month.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
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.
currentToken()
Return the value of token currently saved into session with name 'token'.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_htmloutput_errors($mesgstring='', $mesgarray=array(), $keepembedded=0)
Print formatted error messages to output (Used to show messages on html output).
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
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...
top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs=array(), $arrayofcss=array(), $disableforlogin=0, $disablenofollow=0, $disablenoindex=0)
Output html header of a page.
show_bookcal_day_events($day, $month, $year, $today=0)
Show event of a particular day.
httponly_accessforbidden($message='1', $http_response_code=403, $stringalreadysanitized=0)
Show a message to say access is forbidden and stop program.