123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- <?php
- /* Copyright (C) phpBSM
- * Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
- * Copyright (C) 2005-2007 Regis Houssin <regis.houssin@inodbox.com>
- * Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
- *
- * This file is a modified version of datepicker.php from phpBSM to fix some
- * bugs, to add new features and to dramatically increase speed.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
- /**
- * \file htdocs/core/datepicker.php
- * \brief File to manage popup date selector
- */
- if (!defined('NOREQUIREUSER')) {
- define('NOREQUIREUSER', '1'); // disabled
- }
- //if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Not disabled cause need to load personalized language
- if (!defined('NOREQUIRESOC')) {
- define('NOREQUIRESOC', '1');
- }
- //if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN','1'); // Not disabled cause need to do translations
- if (!defined('NOCSRFCHECK')) {
- define('NOCSRFCHECK', 1);
- }
- if (!defined('NOTOKENRENEWAL')) {
- define('NOTOKENRENEWAL', 1);
- }
- if (!defined('NOLOGIN')) {
- define('NOLOGIN', 1); // disabled
- }
- if (!defined('NOREQUIREMENU')) {
- define('NOREQUIREMENU', 1);
- }
- if (!defined('NOREQUIREHTML')) {
- define('NOREQUIREHTML', 1);
- }
- require_once '../main.inc.php';
- require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
- if (GETPOST('lang', 'aZ09')) {
- $langs->setDefaultLang(GETPOST('lang', 'aZ09')); // If language was forced on URL by the main.inc.php
- }
- // Load translation files required by the page
- $langs->loadLangs(array("main", "agenda"));
- $right = ($langs->trans("DIRECTION") == 'rtl' ? 'left' : 'right');
- $left = ($langs->trans("DIRECTION") == 'rtl' ? 'right' : 'left');
- //var_dump($langs->defaultlang);
- //var_dump($conf->format_date_short_java);
- //var_dump($langs->trans("FormatDateShortJava"));
- // URL http://mydolibarr/core/datepicker.php?mode=test&m=10&y=2038 can be used for tests
- print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'."\n";
- print '<html>'."\n";
- print '<head>'."\n";
- if (GETPOST('mode') && GETPOST('mode') == 'test') {
- print '<script nonce="'.getNonce().'" type="text/javascript" src="'.DOL_URL_ROOT.'/core/js/lib_head.js.php"></script>'."\n";
- } else {
- print '<title>'.$langs->trans("Calendar").'</title>';
- }
- // Define tradMonths javascript array (we define this in datapicker AND in parent page to avoid errors with IE8)
- $tradTemp = array(
- $langs->trans("January"),
- $langs->trans("February"),
- $langs->trans("March"),
- $langs->trans("April"),
- $langs->trans("May"),
- $langs->trans("June"),
- $langs->trans("July"),
- $langs->trans("August"),
- $langs->trans("September"),
- $langs->trans("October"),
- $langs->trans("November"),
- $langs->trans("December")
- );
- print '<script nonce="'.getNonce().'" type="text/javascript">';
- print 'var tradMonths = [';
- foreach ($tradTemp as $val) {
- print '"'.addslashes($val).'",';
- }
- print '""];';
- print '</script>'."\n";
- print '</head>'."\n";
- print '<body>'."\n";
- $qualified = true;
- if (!isset($_GET["sd"])) {
- $_GET["sd"] = "00000000";
- }
- if (!isset($_GET["m"]) || !isset($_GET["y"])) {
- $qualified = false;
- }
- if (isset($_GET["m"]) && isset($_GET["y"])) {
- if ($_GET["m"] < 1 || $_GET["m"] > 12) {
- $qualified = false;
- }
- if ($_GET["y"] < 0 || $_GET["y"] > 9999) {
- $qualified = false;
- }
- }
- // If parameters provided, we show calendar
- if ($qualified) {
- //print $_GET["cm"].",".$_GET["sd"].",".$_GET["m"].",".$_GET["y"];exit;
- displayBox(GETPOST("sd", 'alpha'), GETPOST("m", 'int'), GETPOST("y", 'int'));
- } else {
- dol_print_error('', 'ErrorBadParameters');
- }
- print '</body></html>'."\n";
- /**
- * Convert date to timestamp
- *
- * @param string $mysqldate Date YYYMMDD
- * @return integer Timestamp
- */
- function xyzToUnixTimestamp($mysqldate)
- {
- $year = substr($mysqldate, 0, 4);
- $month = substr($mysqldate, 4, 2);
- $day = substr($mysqldate, 6, 2);
- $unixtimestamp = dol_mktime(12, 0, 0, $month, $day, $year);
- return $unixtimestamp;
- }
- /**
- * Show box
- *
- * @param string $selectedDate Date YYYMMDD
- * @param int $month Month
- * @param int $year Year
- * @return void
- */
- function displayBox($selectedDate, $month, $year)
- {
- global $langs, $conf;
- //print "$selectedDate,$month,$year";
- $thedate = dol_mktime(12, 0, 0, $month, 1, $year);
- //print "thedate=$thedate";
- $today = dol_now();
- $todayArray = dol_getdate($today);
- if ($selectedDate != "00000000") {
- $selDate = xyzToUnixTimestamp($selectedDate);
- $xyz = dol_print_date($selDate, "%Y%m%d");
- } else {
- $selDate = 0;
- $xyz = 0;
- }
- ?>
- <table class="dp">
- <tr>
- <td colspan="6" class="dpHead"><?php
- $selectMonth = dol_print_date($thedate, '%m');
- $selectYear = dol_print_date($thedate, '%Y');
- echo $langs->trans("Month".$selectMonth).", ".$selectYear;
- ?></td>
- <td class="dpHead">
- <button type="button" class="dpInvisibleButtons" id="DPCancel"
- onClick="closeDPBox();">X</button>
- </td>
- </tr>
- <tr>
- <td class="dpButtons"
- onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php echo $month?>','<?php echo $year - 1?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')"><<</td>
- <td class="dpButtons"
- onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php if ($month == 1) {
- echo "12";
- } else {
- echo $month - 1;
- }?>','<?php if ($month == 1) {
- echo $year - 1;
- } else {
- echo $year;
- }?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')"><</td>
- <td colspan="3" class="dpButtons"
- 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>
- <td class="dpButtons"
- onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php if ($month == 12) {
- echo "1";
- } else {
- echo $month + 1;
- }?>','<?php if ($month == 12) {
- echo $year + 1;
- } else {
- echo $year;
- } ?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')">></td>
- <td class="dpButtons"
- onClick="loadMonth('<?php echo DOL_URL_ROOT.'/core/' ?>','<?php echo $month?>','<?php echo $year + 1?>','<?php echo $xyz ?>','<?php echo $langs->defaultlang ?>')">>></td>
- </tr>
- <tr class="dpDayNames">
- <?php
- $startday = isset($conf->global->MAIN_START_WEEK) ? $conf->global->MAIN_START_WEEK : 1;
- $day_names = array('ShortSunday', 'ShortMonday', 'ShortTuesday', 'ShortWednesday', 'ShortThursday', 'ShortFriday', 'ShortSaturday');
- for ($i = 0; $i < 7; $i++) {
- echo '<td width="', (int) (($i + 1) * 100 / 7) - (int) ($i * 100 / 7), '%">', $langs->trans($day_names[($i + $startday) % 7]), '</td>', "\n";
- }
- print '</tr>';
- //print "x ".$thedate." y"; // $thedate = first day of month
- $firstdate = dol_getdate($thedate);
- //var_dump($firstdateofweek);
- $mydate = dol_get_first_day_week(1, $month, $year, true); // mydate = cursor date
- // Loop on each day of month
- $stoploop = 0;
- $day = 1;
- $cols = 0;
- while (!$stoploop) {
- //print_r($mydate);
- if ($mydate < $firstdate) { // At first run
- echo "<tr class=\"dpWeek\">";
- //echo $conf->global->MAIN_START_WEEK.' '.$firstdate["wday"].' '.$startday;
- $cols = 0;
- for ($i = 0; $i < 7; $i++) {
- $w = ($i + $startday) % 7;
- if ($w == $firstdate["wday"]) {
- $mydate = $firstdate;
- break;
- }
- echo "<td> </td>";
- $cols++;
- }
- } else {
- if ($mydate["wday"] == $startday) {
- echo "<tr class=\"dpWeek\">";
- $cols = 0;
- }
- }
- $dayclass = "dpReg";
- if ($thedate == $selDate) {
- $dayclass = "dpSelected";
- } elseif ($thedate == $today) {
- $dayclass = "dpToday";
- }
- if ($langs->trans("FormatDateShortJavaInput") == "FormatDateShortJavaInput") {
- print "ERROR FormatDateShortJavaInput not defined for language ".$langs->defaultlang;
- exit;
- }
- // Sur click dans calendrier, appelle fonction dpClickDay
- echo "<td class=\"".$dayclass."\"";
- echo " onMouseOver=\"dpHighlightDay(".$mydate["year"].",parseInt('".dol_print_date($thedate, "%m")."',10),".$mydate["mday"].",tradMonths)\"";
- echo " onClick=\"dpClickDay(".$mydate["year"].",parseInt('".dol_print_date($thedate, "%m")."',10),".$mydate["mday"].",'".$langs->trans("FormatDateShortJavaInput")."')\"";
- echo ">".sprintf("%02s", $mydate["mday"])."</td>";
- $cols++;
- if (($mydate["wday"] + 1) % 7 == $startday) {
- echo "</TR>\n";
- }
- //$thedate=strtotime("tomorrow",$thedate);
- $day++;
- $thedate = dol_mktime(12, 0, 0, $month, $day, $year);
- if ($thedate == '') {
- $stoploop = 1;
- } else {
- $mydate = dol_getdate($thedate);
- if ($firstdate["month"] != $mydate["month"]) {
- $stoploop = 1;
- }
- }
- }
- if ($cols < 7) {
- for ($i = 6; $i >= $cols; $i--) {
- echo "<td> </td>";
- }
- echo "</tr>\n";
- }
- ?>
- <tr>
- <td id="dpExp" class="dpExplanation" colspan="7"><?php
- if ($selDate) {
- $tempDate = dol_getdate($selDate);
- print $langs->trans("Month".$selectMonth)." ";
- print sprintf("%02s", $tempDate["mday"]);
- print ", ".$selectYear;
- } else {
- print "Click a Date";
- }
- ?></td>
- </tr>
- </table>
- <?php
- }//end function
|