diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..4be1c918 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Disable LF normalization for all files +* -text \ No newline at end of file diff --git a/dav/calendar.friendica.fnk.php b/dav/calendar.friendica.fnk.php index 1d4600c6..af4a0175 100644 --- a/dav/calendar.friendica.fnk.php +++ b/dav/calendar.friendica.fnk.php @@ -22,11 +22,17 @@ define("CARDDAV_NAMESPACE_PHONECONTACTS", 2); define("CALDAV_DB_VERSION", 1); +/** + * @return int + */ function getCurMicrotime () { list($usec, $sec) = explode(" ", microtime()); return sprintf("%14.0f", $sec * 10000 + $usec * 10000); } // function getCurMicrotime +/** + * + */ function debug_time() { $cur = getCurMicrotime(); if ($GLOBALS["debug_time_last"] > 0) { @@ -80,13 +86,30 @@ function dav_compat_principal2uid($principalUri = "") return dav_compat_username2id($username); } + +/** + * @param string $name + * @return null|string + */ +function dav_compat_getRequestVar($name = "") { + if (x($_REQUEST, $name)) return $_REQUEST[$name]; + else return null; +} + /** * @param $text - * @return mixed + * @return null|string */ -function wdcal_parse_text_serverside($text) +function dav_compat_parse_text_serverside($text) { - return $text; + return dav_compat_getRequestVar($text); +} + +/** + * @param string $uri + */ +function dav_compat_redirect($uri = "") { + goaway($uri); } /** diff --git a/dav/common/calendar.fnk.php b/dav/common/calendar.fnk.php index 51b7f5e0..410c60dd 100644 --- a/dav/common/calendar.fnk.php +++ b/dav/common/calendar.fnk.php @@ -477,6 +477,67 @@ function wdcal_get_list_range_params($day, $weekstartday, $num_days, $type) } + + + +/** + * @param string $uri + * @param string $recurr_uri + * @param int $uid + * @param string $timezone + * @param string $goaway_url + * @return string + */ +function wdcal_postEditPage($uri, $recurr_uri = "", $uid = 0, $timezone = "", $goaway_url = "") +{ + $uid = IntVal($uid); + $localization = wdcal_local::getInstanceByUser($uid); + + if (isset($_REQUEST["allday"])) { + $start = $localization->date_parseLocal($_REQUEST["start_date"] . " 00:00"); + $end = $localization->date_parseLocal($_REQUEST["end_date"] . " 20:00"); + $isallday = true; + } else { + $start = $localization->date_parseLocal($_REQUEST["start_date"] . " " . $_REQUEST["start_time"]); + $end = $localization->date_parseLocal($_REQUEST["end_date"] . " " . $_REQUEST["end_time"]); + $isallday = false; + } + + if ($uri == "new") { + $cals = dav_getMyCals($uid); + foreach ($cals as $c) { + $cs = wdcal_calendar_factory($uid, $c->namespace, $c->namespace_id); + $p = $cs->getPermissionsCalendar($uid); + + if ($p["write"]) try { + $cs->addItem($start, $end, dav_compat_getRequestVar("subject"), $isallday, dav_compat_parse_text_serverside("wdcal_desc"), + dav_compat_getRequestVar("location"), dav_compat_getRequestVar("color"), $timezone, + isset($_REQUEST["notification"]), $_REQUEST["notification_type"], $_REQUEST["notification_value"]); + } catch (Exception $e) { + notification(t("Error") . ": " . $e); + } + dav_compat_redirect($goaway_url); + } + + } else { + $cals = dav_getMyCals($uid); + foreach ($cals as $c) { + $cs = wdcal_calendar_factory($uid, $c->namespace, $c->namespace_id); + $p = $cs->getPermissionsItem($uid, $uri, $recurr_uri); + if ($p["write"]) try { + $cs->updateItem($uri, $start, $end, + dav_compat_getRequestVar("subject"), $isallday, dav_compat_parse_text_serverside("wdcal_desc"), + dav_compat_getRequestVar("location"), dav_compat_getRequestVar("color"), $timezone, + isset($_REQUEST["notification"]), $_REQUEST["notification_type"], $_REQUEST["notification_value"]); + } catch (Exception $e) { + notification(t("Error") . ": " . $e); + } + dav_compat_redirect($goaway_url); + } + } +} + + /** * */ diff --git a/dav/common/wdcal.js b/dav/common/wdcal.js index cbdc5a43..877d3852 100644 --- a/dav/common/wdcal.js +++ b/dav/common/wdcal.js @@ -1,17 +1,53 @@ +function wdcal_edit_getStartEnd() { + "use strict"; + + var start = $("#cal_start_date").datepicker("getDate"); + var start_time = $.timePicker("#cal_start_time").getTime(); + start.setHours(start_time.getHours()); + start.setMinutes(start_time.getMinutes()); + + var end = $("#cal_end_date").datepicker("getDate"); + var end_time = $.timePicker("#cal_end_time").getTime(); + end.setHours(end_time.getHours()); + end.setMinutes(end_time.getMinutes()); + + return {"start": start, "end": end}; +} + +function wdcal_edit_checktime_startChanged() { + "use strict"; + var time = wdcal_edit_getStartEnd(); + if (time.start.getTime() >= time.end.getTime()) { + var newend = new Date(time.start.getTime() + 3600000); + $("#cal_end_date").datepicker("setDate", newend); + $.timePicker("#cal_end_time").setTime(newend); + } +} + +function wdcal_edit_checktime_endChanged() { + "use strict"; + var time = wdcal_edit_getStartEnd(); + if (time.start.getTime() >= time.end.getTime()) { + var newstart = new Date(time.end.getTime() - 3600000); + $("#cal_start_date").datepicker("setDate", newstart); + $.timePicker("#cal_start_time").setTime(newstart); + } +} + function wdcal_edit_init(dateFormat) { "use strict"; $("#cal_color").colorPicker(); - $("#cal_start_time").timePicker({ step: 15 }); - $("#cal_end_time").timePicker(); + $("#cal_start_time").timePicker({ step: 15 }).on("change", wdcal_edit_checktime_startChanged); + $("#cal_end_time").timePicker().on("change", wdcal_edit_checktime_endChanged); $("#cal_start_date").datepicker({ "dateFormat": dateFormat - }); + }).on("change", wdcal_edit_checktime_startChanged); $("#cal_end_date").datepicker({ "dateFormat": dateFormat - }); + }).on("change", wdcal_edit_checktime_endChanged); $("#notification").on("click change", function() { if ($(this).prop("checked")) $("#notification_detail").show(); diff --git a/dav/common/wdcal/js/jquery.calendar.js b/dav/common/wdcal/js/jquery.calendar.js index 88987cf5..194ae566 100644 --- a/dav/common/wdcal/js/jquery.calendar.js +++ b/dav/common/wdcal/js/jquery.calendar.js @@ -195,6 +195,7 @@ * {Number} Calendar height, false for page height by default. */ height:false, + baseurl: "", /** * @description {Config} url * {String} Url to request calendar data. @@ -1744,21 +1745,21 @@ temparr.push(i18n.xgcalendar.time, ':