diff options
author | Stefan Parviainen <saparvia@caterva.eu> | 2014-10-19 10:47:42 +0200 |
---|---|---|
committer | Stefan Parviainen <saparvia@caterva.eu> | 2014-10-19 10:47:42 +0200 |
commit | 519ef4850021c929764f1175a9aae569d1ae36a6 (patch) | |
tree | be466e8e2160d7391d0e368e93f238d50201b4d4 | |
parent | d9817779fbeaebf4b75c0670da7013bf4482b72b (diff) | |
download | volse-hubzilla-519ef4850021c929764f1175a9aae569d1ae36a6.tar.gz volse-hubzilla-519ef4850021c929764f1175a9aae569d1ae36a6.tar.bz2 volse-hubzilla-519ef4850021c929764f1175a9aae569d1ae36a6.zip |
Changes in the datetimesel api, prevent user from picking event end date earlier than start date
-rw-r--r-- | include/datetime.php | 121 | ||||
-rwxr-xr-x | mod/events.php | 4 |
2 files changed, 53 insertions, 72 deletions
diff --git a/include/datetime.php b/include/datetime.php index 3d0ae0404..76c3ddb25 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -130,11 +130,12 @@ function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d function dob($dob) { list($year,$month,$day) = sscanf($dob,'%4d-%2d-%2d'); - $y = datetime_convert('UTC',date_default_timezone_get(),'now','Y'); $f = get_config('system','birthday_input_format'); if(! $f) $f = 'ymd'; - $o = datesel($f,'dob',1920,$y,true,$year,$month,$day); + + $o = datesel($f,mktime(0,0,0,0,0,1900),mktime(),mktime(0,0,0,$month,$day,$year),'dob'); + return $o; } @@ -173,101 +174,81 @@ function datesel_format($f) { * returns a date selector * @param $format * format string, e.g. 'ymd' or 'mdy'. Not currently supported + * @param $min + * unix timestamp of minimum date + * @param $max + * unix timestap of maximum date + * @param $default + * unix timestamp of default date * @param $id - * id and name of datetimepicker (defaults to "datepicker") - * @param $ymin - * first year shown in selector dropdown - * @param $ymax - * last year shown in selector dropdown - * @param $allow_blank - * allow an empty response on any field. Not currently supported - * @param $y - * already selected year - * @param $m - * already selected month - * @param $d - * already selected day + * id and name of datetimepicker (defaults to "datetimepicker") */ -function datesel($format, $id, $ymin, $ymax, $allow_blank, $y, $m, $d) { - if($ymin > $ymax) list($ymin,$ymax) = array($ymax,$ymin); - - if($id == '') $id = 'datepicker'; - - $o = ''; - - $dateformat = 'YYYY-MM-DD'; - $mindate = $ymin ? "new Date($ymin,1,1)" : ''; - $maxdate = $ymin ? "new Date($ymax,11,31)" : ''; // Yes, JS months really go from 0 to 11. - - $m = $m -1; // Because JavaScript month weirdness - - $defaultDate = ($y != 0 && $m != 0 && $d != 0) ? ", defaultDate: new Date($y,$m,$d)" : ''; - - $o .= "<div class='date' id='$id'><input type='text' placeholder='$dateformat' name='$id'/></div>"; - $o .= "<script type='text/javascript'>\$(function () {\$('#$id').datetimepicker({pickTime: false, minDate: $mindate, maxDate: $maxdate, format: '$dateformat', useCurrent: false $defaultDate}); });</script>"; - return $o; +function datesel($format, $min, $max, $default,$id = 'datepicker') { + return datetimesel($format,$min,$max,$default,$id,true,false); } /** * returns a date selector * @param $format * format string, e.g. 'ymd' or 'mdy'. Not currently supported - * @param $id - * id and name of datetimepicker (defaults to "timepicker") * @param $h * already selected hour * @param $m * already selected minute + * @param $id + * id and name of datetimepicker (defaults to "timepicker") */ -function timesel($format,$id,$h,$m) { - if($id == '') $id = 'timepicker'; - - $timeformat = 'HH:mm'; - - $o = ''; - $o .= "<div class='date' id='$id'><input type='text' placeholder='$timeformat' name='$id'/></div>"; - $o .= "<script type='text/javascript'>\$(function () {\$('#$id').datetimepicker({pickDate: false, format: '$timeformat', useCurrent: false, defaultDate: new Date(0,0,0,$h,$m)}); });</script>"; - return $o; +function timesel($format,$h,$m,$id='timepicker') { + return datetimesel($format,mktime(),mktime(),mktime($h,$m),$id,false,true); } /** * returns a datetime selector * @param $format * format string, e.g. 'ymd' or 'mdy'. Not currently supported + * @param $min + * unix timestamp of minimum date + * @param $max + * unix timestap of maximum date + * @param $default + * unix timestamp of default date * @param $id * id and name of datetimepicker (defaults to "datetimepicker") - * @param $ymin - * first year shown in selector dropdown - * @param $ymax - * last year shown in selector dropdown - * @param $allow_blank - * allow an empty response on any field. Not currently supported - * @param $y - * already selected year - * @param $m - * already selected month - * @param $d - * already selected day - * @param $h - * already selected hour - * @param $min - * already selected minute + * @param $pickdate + * true to show date picker (default) + * @param $picktime + * true to show time picker (default) + * @param $minfrom + * set minimum date from picker with id $minfrom (none by default) + * @param $maxfrom + * set maximum date from picker with id $maxfrom (none by default) */ -function datetimesel($format, $id, $ymin, $ymax, $allow_blank, $y, $m, $d, $h, $min) { - if($ymin > $ymax) list($ymin,$ymax) = array($ymax,$ymin); - - if($id == '') $id = 'datetimepicker'; - +function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '') { $o = ''; - $dateformat = 'YYYY-MM-DD HH:mm'; - $mindate = $ymin ? "new Date($ymin,1,1)" : ''; - $maxdate = $ymin ? "new Date($ymax,11,31)" : ''; + $dateformat = ''; + if($pickdate) $dateformat .= 'YYYY-MM-DD'; + if($pickdate && $picktime) $dateformat .= ' '; + if($picktime) $dateformat .= 'HH:mm'; + + $mindate = $min ? "new Date($min*1000)" : ''; + $maxdate = $max ? "new Date($max*1000)" : ''; - $defaultDate = ($y != 0 && $m != 0 && $d != 0) ? ", defaultDate: new Date($y, $m, $d, $h, $min)" : ''; + $defaultDate = $default ? ", defaultDate: new Date($default*1000)" : ''; + + $pickers = ''; + if(!$pickdate) $pickers .= 'pickDate: false,'; + if(!$picktime) $pickers .= 'pickTime: false,'; + + $extra_js = ''; + if($minfrom != '') + $extra_js .= "\$('#$minfrom').on('dp.change',function (e) { \$('#$id').data('DateTimePicker').setMinDate(e.date); });"; + + if($maxfrom != '') + $extra_js .= "\$('#$maxfrom').on('dp.change',function (e) { \$('#$id').data('DateTimePicker').setMaxDate(e.date); });"; $o .= "<div class='date' id='$id'><input type='text' placeholder='$dateformat' name='$id'/></div>"; - $o .= "<script type='text/javascript'>\$(function () {\$('#$id').datetimepicker({sideBySide: true, minDate: $mindate, maxDate: $maxdate, format: '$dateformat', useCurrent: false $defaultDate}); });</script>"; + $o .= "<script type='text/javascript'>\$(function () {\$('#$id').datetimepicker({sideBySide: true, $pickers minDate: $mindate, maxDate: $maxdate, format: '$dateformat', useCurrent: false $defaultDate}); $extra_js});</script>"; return $o; } diff --git a/mod/events.php b/mod/events.php index e5ae7c662..459ed05bb 100755 --- a/mod/events.php +++ b/mod/events.php @@ -554,11 +554,11 @@ function events_content(&$a) { '$ftext' => $ftext, '$ModalCANCEL' => t('Cancel'), '$ModalOK' => t('OK'), - '$s_dsel' => datetimesel($f,'start_text',$syear+5,$syear,false,$syear,$smonth,$sday,$shour,$sminute), + '$s_dsel' => datetimesel($f,mktime(),mktime(0,0,0,0,0,$syear+5),mktime(),'start_text'), '$n_text' => t('Finish date/time is not known or not relevant'), '$n_checked' => $n_checked, '$f_text' => t('Event Finishes:'), - '$f_dsel' => datetimesel($f,'finish_text',$fyear+5,$fyear,false,$fyear,$fmonth,$fday,$fhour,$fminute), + '$f_dsel' => datetimesel($f,mktime(),mktime(0,0,0,0,0,$fyear+5),mktime(),'finish_text',true,true,'start_text'), '$a_text' => t('Adjust for viewer timezone'), '$a_checked' => $a_checked, '$d_text' => t('Description:'), |