dolibarr  19.0.0-dev
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 
29 if (!defined('NOREQUIREUSER')) {
30  define('NOREQUIREUSER', '1'); // disabled
31 }
32 //if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled cause need to load personalized language
33 if (!defined('NOREQUIRESOC')) {
34  define('NOREQUIRESOC', '1');
35 }
36 //if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Not disabled cause need to do translations
37 if (!defined('NOCSRFCHECK')) {
38  define('NOCSRFCHECK', 1);
39 }
40 if (!defined('NOTOKENRENEWAL')) {
41  define('NOTOKENRENEWAL', 1);
42 }
43 if (!defined('NOLOGIN')) {
44  define('NOLOGIN', 1); // disabled
45 }
46 if (!defined('NOREQUIREMENU')) {
47  define('NOREQUIREMENU', 1);
48 }
49 if (!defined('NOREQUIREHTML')) {
50  define('NOREQUIREHTML', 1);
51 }
52 
53 require_once '../main.inc.php';
54 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
55 
56 if (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
72 print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'."\n";
73 print '<html>'."\n";
74 print '<head>'."\n";
75 if (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 );
96 print '<script nonce="'.getNonce().'" type="text/javascript">';
97 print 'var tradMonths = [';
98 foreach ($tradTemp as $val) {
99  print '"'.addslashes($val).'",';
100 }
101 print '""];';
102 print '</script>'."\n";
103 print '</head>'."\n";
104 
105 print '<body>'."\n";
106 
107 
108 $qualified = true;
109 
110 if (!isset($_GET["sd"])) {
111  $_GET["sd"] = "00000000";
112 }
113 
114 if (!isset($_GET["m"]) || !isset($_GET["y"])) {
115  $qualified = false;
116 }
117 if (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
127 if ($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 
135 print '</body></html>'."\n";
136 
143 function 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 
160 function 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:651
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.
table tableforfield button
0 = Do not include form tag and submit button -1 = Do not include form tag but include submit button
Definition: style.css.php:848
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
Definition: repair.php:120