dolibarr 19.0.3
datepicker.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) phpBSM
3 * Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2007 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
6 *
7 * This file is a modified version of datepicker.php from phpBSM to fix some
8 * bugs, to add new features and to dramatically increase speed.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
29if (!defined('NOREQUIREUSER')) {
30 define('NOREQUIREUSER', '1'); // disabled
31}
32//if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled cause need to load personalized language
33if (!defined('NOREQUIRESOC')) {
34 define('NOREQUIRESOC', '1');
35}
36//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Not disabled cause need to do translations
37if (!defined('NOCSRFCHECK')) {
38 define('NOCSRFCHECK', 1);
39}
40if (!defined('NOTOKENRENEWAL')) {
41 define('NOTOKENRENEWAL', 1);
42}
43if (!defined('NOLOGIN')) {
44 define('NOLOGIN', 1); // disabled
45}
46if (!defined('NOREQUIREMENU')) {
47 define('NOREQUIREMENU', 1);
48}
49if (!defined('NOREQUIREHTML')) {
50 define('NOREQUIREHTML', 1);
51}
52
53require_once '../main.inc.php';
54require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
55
56if (GETPOST('lang', 'aZ09')) {
57 $langs->setDefaultLang(GETPOST('lang', 'aZ09')); // If language was forced on URL by the main.inc.php
58}
59
60// Load translation files required by the page
61$langs->loadLangs(array("main", "agenda"));
62
63$right = ($langs->trans("DIRECTION") == 'rtl' ? 'left' : 'right');
64$left = ($langs->trans("DIRECTION") == 'rtl' ? 'right' : 'left');
65
66//var_dump($langs->defaultlang);
67//var_dump($conf->format_date_short_java);
68//var_dump($langs->trans("FormatDateShortJava"));
69
70
71// URL http://mydolibarr/core/datepicker.php?mode=test&m=10&y=2038 can be used for tests
72print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'."\n";
73print '<html>'."\n";
74print '<head>'."\n";
75if (GETPOST('mode') && GETPOST('mode') == 'test') {
76 print '<script nonce="'.getNonce().'" type="text/javascript" src="'.DOL_URL_ROOT.'/core/js/lib_head.js.php"></script>'."\n";
77} else {
78 print '<title>'.$langs->trans("Calendar").'</title>';
79}
80
81// Define tradMonths javascript array (we define this in datapicker AND in parent page to avoid errors with IE8)
82$tradTemp = array(
83 $langs->trans("January"),
84 $langs->trans("February"),
85 $langs->trans("March"),
86 $langs->trans("April"),
87 $langs->trans("May"),
88 $langs->trans("June"),
89 $langs->trans("July"),
90 $langs->trans("August"),
91 $langs->trans("September"),
92 $langs->trans("October"),
93 $langs->trans("November"),
94 $langs->trans("December")
95);
96print '<script nonce="'.getNonce().'" type="text/javascript">';
97print 'var tradMonths = [';
98foreach ($tradTemp as $val) {
99 print '"'.addslashes($val).'",';
100}
101print '""];';
102print '</script>'."\n";
103print '</head>'."\n";
104
105print '<body>'."\n";
106
107
108$qualified = true;
109
110if (!isset($_GET["sd"])) {
111 $_GET["sd"] = "00000000";
112}
113
114if (!isset($_GET["m"]) || !isset($_GET["y"])) {
115 $qualified = false;
116}
117if (isset($_GET["m"]) && isset($_GET["y"])) {
118 if ($_GET["m"] < 1 || $_GET["m"] > 12) {
119 $qualified = false;
120 }
121 if ($_GET["y"] < 0 || $_GET["y"] > 9999) {
122 $qualified = false;
123 }
124}
125
126// If parameters provided, we show calendar
127if ($qualified) {
128 //print $_GET["cm"].",".$_GET["sd"].",".$_GET["m"].",".$_GET["y"];exit;
129 displayBox(GETPOST("sd", 'alpha'), GETPOST("m", 'int'), GETPOST("y", 'int'));
130} else {
131 dol_print_error('', 'ErrorBadParameters');
132}
133
134
135print '</body></html>'."\n";
136
143function xyzToUnixTimestamp($mysqldate)
144{
145 $year = substr($mysqldate, 0, 4);
146 $month = substr($mysqldate, 4, 2);
147 $day = substr($mysqldate, 6, 2);
148 $unixtimestamp = dol_mktime(12, 0, 0, $month, $day, $year);
149 return $unixtimestamp;
150}
151
160function displayBox($selectedDate, $month, $year)
161{
162 global $langs, $conf;
163
164 //print "$selectedDate,$month,$year";
165 $thedate = dol_mktime(12, 0, 0, $month, 1, $year);
166 //print "thedate=$thedate";
167 $today = dol_now();
168 $todayArray = dol_getdate($today);
169 if ($selectedDate != "00000000") {
170 $selDate = xyzToUnixTimestamp($selectedDate);
171 $xyz = dol_print_date($selDate, "%Y%m%d");
172 } else {
173 $selDate = 0;
174 $xyz = 0;
175 } ?>
176<table class="dp">
177 <tr>
178 <td colspan="6" class="dpHead"><?php
179 $selectMonth = dol_print_date($thedate, '%m');
180 $selectYear = dol_print_date($thedate, '%Y');
181 echo $langs->trans("Month".$selectMonth).", ".$selectYear; ?></td>
182 <td class="dpHead">
183 <button type="button" class="dpInvisibleButtons" id="DPCancel"
184 onClick="closeDPBox();">X</button>
185 </td>
186 </tr>
187 <tr>
188 <td class="dpButtons"
189 onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php echo $month?>','<?php echo $year - 1?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')">&lt;&lt;</td>
190 <td class="dpButtons"
191 onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php if ($month == 1) {
192 echo "12";
193 } else {
194 echo $month - 1;
195 } ?>','<?php if ($month == 1) {
196 echo $year - 1;
197 } else {
198 echo $year;
199 } ?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')">&lt;</td>
200 <td colspan="3" class="dpButtons"
201 onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php echo (int) dol_print_date($today, '%m')?>','<?php echo $todayArray["year"]?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')"><?php echo '-' ?></td>
202 <td class="dpButtons"
203 onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php if ($month == 12) {
204 echo "1";
205 } else {
206 echo $month + 1;
207 } ?>','<?php if ($month == 12) {
208 echo $year + 1;
209 } else {
210 echo $year;
211 } ?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')">&gt;</td>
212 <td class="dpButtons"
213 onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php echo $month?>','<?php echo $year + 1?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')">&gt;&gt;</td>
214 </tr>
215 <tr class="dpDayNames">
216 <?php
217 $startday = isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1;
218 $day_names = array('ShortSunday', 'ShortMonday', 'ShortTuesday', 'ShortWednesday', 'ShortThursday', 'ShortFriday', 'ShortSaturday');
219 for ($i = 0; $i < 7; $i++) {
220 echo '<td width="', (int) (($i + 1) * 100 / 7) - (int) ($i * 100 / 7), '%">', $langs->trans($day_names[($i + $startday) % 7]), '</td>', "\n";
221 }
222 print '</tr>';
223 //print "x ".$thedate." y"; // $thedate = first day of month
224 $firstdate = dol_getdate($thedate);
225 //var_dump($firstdateofweek);
226 $mydate = dol_get_first_day_week(1, $month, $year, true); // mydate = cursor date
227
228 // Loop on each day of month
229 $stoploop = 0;
230 $day = 1;
231 $cols = 0;
232 while (!$stoploop) {
233 //print_r($mydate);
234 if ($mydate < $firstdate) { // At first run
235 echo "<tr class=\"dpWeek\">";
236 //echo $conf->global->MAIN_START_WEEK.' '.$firstdate["wday"].' '.$startday;
237 $cols = 0;
238 for ($i = 0; $i < 7; $i++) {
239 $w = ($i + $startday) % 7;
240 if ($w == $firstdate["wday"]) {
241 $mydate = $firstdate;
242 break;
243 }
244 echo "<td>&nbsp;</td>";
245 $cols++;
246 }
247 } else {
248 if ($mydate["wday"] == $startday) {
249 echo "<tr class=\"dpWeek\">";
250 $cols = 0;
251 }
252 }
253
254 $dayclass = "dpReg";
255 if ($thedate == $selDate) {
256 $dayclass = "dpSelected";
257 } elseif ($thedate == $today) {
258 $dayclass = "dpToday";
259 }
260
261 if ($langs->trans("FormatDateShortJavaInput") == "FormatDateShortJavaInput") {
262 print "ERROR FormatDateShortJavaInput not defined for language ".$langs->defaultlang;
263 exit;
264 }
265
266 // Sur click dans calendrier, appelle fonction dpClickDay
267 echo "<td class=\"".$dayclass."\"";
268 echo " onMouseOver=\"dpHighlightDay(".$mydate["year"].",parseInt('".dol_print_date($thedate, "%m")."',10),".$mydate["mday"].",tradMonths)\"";
269 echo " onClick=\"dpClickDay(".$mydate["year"].",parseInt('".dol_print_date($thedate, "%m")."',10),".$mydate["mday"].",'".$langs->trans("FormatDateShortJavaInput")."')\"";
270 echo ">".sprintf("%02s", $mydate["mday"])."</td>";
271 $cols++;
272
273 if (($mydate["wday"] + 1) % 7 == $startday) {
274 echo "</TR>\n";
275 }
276
277 //$thedate=strtotime("tomorrow",$thedate);
278 $day++;
279 $thedate = dol_mktime(12, 0, 0, $month, $day, $year);
280 if ($thedate == '') {
281 $stoploop = 1;
282 } else {
283 $mydate = dol_getdate($thedate);
284 if ($firstdate["month"] != $mydate["month"]) {
285 $stoploop = 1;
286 }
287 }
288 }
289
290 if ($cols < 7) {
291 for ($i = 6; $i >= $cols; $i--) {
292 echo "<td>&nbsp;</td>";
293 }
294 echo "</tr>\n";
295 } ?>
296 <tr>
297 <td id="dpExp" class="dpExplanation" colspan="7"><?php
298 if ($selDate) {
299 $tempDate = dol_getdate($selDate);
300 print $langs->trans("Month".$selectMonth)." ";
301 print sprintf("%02s", $tempDate["mday"]);
302 print ", ".$selectYear;
303 } else {
304 print "Click a Date";
305 } ?></td>
306 </tr>
307</table>
308 <?php
309}//end function
dol_get_first_day_week($day, $month, $year, $gm=false)
Return first day of week for a date.
Definition date.lib.php:668
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
ui dialog ui datepicker calendar ui widget content ui state ui datepicker calendar ui widget header ui state ui datepicker calendar ui button
0 = Do not include form tag and submit button -1 = Do not include form tag but include submit button
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition repair.php:121