function churchcal_updateICalSource($id) { // Set modified date to not load this calendar each cron job //db_query("UPDATE {cc_calcategory} SET modified_date = now() WHERE id = :id", (array(":id"=>$id))); $cat = db_query("SELECT * FROM {cc_calcategory}\n WHERE id = :id", array(":id" => $id))->fetch(); if (!$cat) { throw new CTException("No calcategory found"); } include_once ASSETS . '/ics-parser/class.iCalReader.php'; $ical = new ICal($cat->ical_source_url); $events = $ical->events(); if (!$events) { ct_log("iCal Source from {$cat->bezeichnung} could not readed and processed!", 2, "calcategory", $id); } else { db_query("DELETE FROM {cc_cal} WHERE category_id = :id", array(":id" => $id)); include_once CHURCHCAL . '/churchcal_db.php'; foreach ($events as $event) { $data = array(); $data["startdate"] = churchcore_icalToDate($event["DTSTART"]); if (isset($event["DTEND"])) { $data["enddate"] = churchcore_icalToDate($event["DTEND"]); } $data["bezeichnung"] = utf8_encode(getVar("SUMMARY", "", $event)); $data["category_id"] = $id; $data["repeat_id"] = 0; $data["intern_yn"] = 0; $data["modified_pid"] = -1; $data["notizen"] = getVar("SUMMARY", "", $event) . " " . getVar("DESCRIPTION", "", $event); $data["link"] = getVar("URL", "", $event); $data["ort"] = ""; if ($data["startdate"] != "") { // Substract one day if it is a whole day date $sd = new Datetime($data["startdate"]); if (!isset($data["enddate"])) { $ed = new Datetime($data["startdate"]); } else { $ed = new Datetime($data["enddate"]); if (isFullDay($sd, $ed)) { $ed->modify("-1 DAY"); } } $data["startdate"] = $sd->format("Y-m-d H:i"); $data["enddate"] = $ed->format("Y-m-d H:i"); churchcal_createEvent($data, null, true); } } ct_log("iCal Source from {$cat->bezeichnung} readed and processed!", 2, $id, "category"); } }
/** * check if two dates conflict with each other * TODO: seems like $_enddate/$_enddate2 is not really needed * * @param DateTime $startdate * @param DateTime $enddate * @param DateTime $startdate2 * @param DateTime $enddate2 * * @return boolean */ function datesInConflict($startdate, $enddate, $startdate2, $enddate2) { $_enddate = $enddate; $_enddate2 = $enddate2; if (isFullDay($startdate, $enddate)) { $_enddate->modify("+1 day"); $_enddate->modify("-1 second"); } if (isFullDay($startdate2, $enddate2)) { $_enddate2->modify("+1 day"); $_enddate2->modify("-1 second"); } // enddate2 inside date //TODO: not tested, but > is higher in the operator list then && :-) if ($_enddate2 > $startdate && $_enddate2 < $_enddate || $startdate2 > $startdate && $startdate2 < $_enddate || $startdate2 <= $startdate && $_enddate2 >= $_enddate || $startdate2 >= $startdate && $_enddate2 <= $_enddate) { return true; } return false; }
function datesInConflict($startdate, $enddate, $startdate2, $enddate2) { $_enddate = $enddate; $_enddate2 = $enddate2; if (isFullDay($startdate, $enddate)) { $_enddate->modify("+1 day"); $_enddate->modify("-1 second"); } if (isFullDay($startdate2, $enddate2)) { $_enddate2->modify("+1 day"); $_enddate2->modify("-1 second"); } // enddate2 inside date if ($_enddate2 > $startdate && $_enddate2 < $_enddate || $startdate2 > $startdate && $startdate2 < $_enddate || $startdate2 <= $startdate && $_enddate2 >= $_enddate || $startdate2 >= $startdate && $_enddate2 <= $_enddate) { return true; } return false; }