dolibarr 18.0.6
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 ?>
177<table class="dp">
178 <tr>
179 <td colspan="6" class="dpHead"><?php
180 $selectMonth = dol_print_date($thedate, '%m');
181 $selectYear = dol_print_date($thedate, '%Y');
182 echo $langs->trans("Month".$selectMonth).", ".$selectYear;
183 ?></td>
184 <td class="dpHead">
185 <button type="button" class="dpInvisibleButtons" id="DPCancel"
186 onClick="closeDPBox();">X</button>
187 </td>
188 </tr>
189 <tr>
190 <td class="dpButtons"
191 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>
192 <td class="dpButtons"
193 onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php if ($month == 1) {
194 echo "12";
195 } else {
196 echo $month - 1;
197 }?>','<?php if ($month == 1) {
198 echo $year - 1;
199 } else {
200 echo $year;
201 }?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')">&lt;</td>
202 <td colspan="3" class="dpButtons"
203 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>
204 <td class="dpButtons"
205 onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php if ($month == 12) {
206 echo "1";
207 } else {
208 echo $month + 1;
209 }?>','<?php if ($month == 12) {
210 echo $year + 1;
211 } else {
212 echo $year;
213 } ?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')">&gt;</td>
214 <td class="dpButtons"
215 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>
216 </tr>
217 <tr class="dpDayNames">
218 <?php
219 $startday = isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1;
220 $day_names = array('ShortSunday', 'ShortMonday', 'ShortTuesday', 'ShortWednesday', 'ShortThursday', 'ShortFriday', 'ShortSaturday');
221 for ($i = 0; $i < 7; $i++) {
222 echo '<td width="', (int) (($i + 1) * 100 / 7) - (int) ($i * 100 / 7), '%">', $langs->trans($day_names[($i + $startday) % 7]), '</td>', "\n";
223 }
224 print '</tr>';
225 //print "x ".$thedate." y"; // $thedate = first day of month
226 $firstdate = dol_getdate($thedate);
227 //var_dump($firstdateofweek);
228 $mydate = dol_get_first_day_week(1, $month, $year, true); // mydate = cursor date
229
230 // Loop on each day of month
231 $stoploop = 0;
232 $day = 1;
233 $cols = 0;
234 while (!$stoploop) {
235 //print_r($mydate);
236 if ($mydate < $firstdate) { // At first run
237 echo "<tr class=\"dpWeek\">";
238 //echo $conf->global->MAIN_START_WEEK.' '.$firstdate["wday"].' '.$startday;
239 $cols = 0;
240 for ($i = 0; $i < 7; $i++) {
241 $w = ($i + $startday) % 7;
242 if ($w == $firstdate["wday"]) {
243 $mydate = $firstdate;
244 break;
245 }
246 echo "<td>&nbsp;</td>";
247 $cols++;
248 }
249 } else {
250 if ($mydate["wday"] == $startday) {
251 echo "<tr class=\"dpWeek\">";
252 $cols = 0;
253 }
254 }
255
256 $dayclass = "dpReg";
257 if ($thedate == $selDate) {
258 $dayclass = "dpSelected";
259 } elseif ($thedate == $today) {
260 $dayclass = "dpToday";
261 }
262
263 if ($langs->trans("FormatDateShortJavaInput") == "FormatDateShortJavaInput") {
264 print "ERROR FormatDateShortJavaInput not defined for language ".$langs->defaultlang;
265 exit;
266 }
267
268 // Sur click dans calendrier, appelle fonction dpClickDay
269 echo "<td class=\"".$dayclass."\"";
270 echo " onMouseOver=\"dpHighlightDay(".$mydate["year"].",parseInt('".dol_print_date($thedate, "%m")."',10),".$mydate["mday"].",tradMonths)\"";
271 echo " onClick=\"dpClickDay(".$mydate["year"].",parseInt('".dol_print_date($thedate, "%m")."',10),".$mydate["mday"].",'".$langs->trans("FormatDateShortJavaInput")."')\"";
272 echo ">".sprintf("%02s", $mydate["mday"])."</td>";
273 $cols++;
274
275 if (($mydate["wday"] + 1) % 7 == $startday) {
276 echo "</TR>\n";
277 }
278
279 //$thedate=strtotime("tomorrow",$thedate);
280 $day++;
281 $thedate = dol_mktime(12, 0, 0, $month, $day, $year);
282 if ($thedate == '') {
283 $stoploop = 1;
284 } else {
285 $mydate = dol_getdate($thedate);
286 if ($firstdate["month"] != $mydate["month"]) {
287 $stoploop = 1;
288 }
289 }
290 }
291
292 if ($cols < 7) {
293 for ($i = 6; $i >= $cols; $i--) {
294 echo "<td>&nbsp;</td>";
295 }
296 echo "</tr>\n";
297 }
298 ?>
299 <tr>
300 <td id="dpExp" class="dpExplanation" colspan="7"><?php
301 if ($selDate) {
302 $tempDate = dol_getdate($selDate);
303 print $langs->trans("Month".$selectMonth)." ";
304 print sprintf("%02s", $tempDate["mday"]);
305 print ", ".$selectYear;
306 } else {
307 print "Click a Date";
308 }
309 ?></td>
310 </tr>
311</table>
312 <?php
313}//end function
dol_get_first_day_week($day, $month, $year, $gm=false)
Return first day of week for a date.
Definition date.lib.php:652
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:120