aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Parviainen <saparvia@caterva.eu>2014-10-19 10:47:42 +0200
committerStefan Parviainen <saparvia@caterva.eu>2014-10-19 10:47:42 +0200
commit519ef4850021c929764f1175a9aae569d1ae36a6 (patch)
treebe466e8e2160d7391d0e368e93f238d50201b4d4
parentd9817779fbeaebf4b75c0670da7013bf4482b72b (diff)
downloadvolse-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.php121
-rwxr-xr-xmod/events.php4
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:'),