From e728daf034f22808ac643806dca52c18410269ee Mon Sep 17 00:00:00 2001 From: oesi Date: Thu, 9 Apr 2015 19:01:55 +0200 Subject: [PATCH] Fehler in der Caldav Schnittstelle behoben bei der die Termine nicht immer korrekt exportiert wurden wenn zur selben Zeit ein LVPlan Eintrag und eine Reservierung vorhanden ist --- include/wochenplan.class.php | 5 ++++- webdav/Caldav_Backend.php | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/wochenplan.class.php b/include/wochenplan.class.php index 76e497230..c924f098c 100644 --- a/include/wochenplan.class.php +++ b/include/wochenplan.class.php @@ -2438,6 +2438,8 @@ class wochenplan extends basis_db 'Description'=>$description, 'dtstart'=>$start_date_time_ical, 'dtend'=>$end_date_time_ical, + 'reservierung'=>$this->std_plan[$i][$j][$idx]->reservierung, + 'reservierung_id'=>($this->std_plan[$i][$j][$idx]->reservierung?$this->std_plan[$i][$j][$idx]->stundenplan_id:''), 'updateamum'=>$this->std_plan[$i][$j][$idx]->updateamum, 'data'=>'BEGIN:VEVENT'.$this->crlf .'UID:'.$UID.$this->crlf @@ -2488,7 +2490,8 @@ class wochenplan extends basis_db $lektor1 = $this->std_plan[$tag][$stunde][$idx]->lektor; $lektor2 = $this->std_plan[$tag][$stunde][$idx1]->lektor; - if($unr1==$unr2 && ($ort1==$ort2 || $lektor1==$lektor2)) + if($unr1==$unr2 && ($ort1==$ort2 || $lektor1==$lektor2) + && !$this->std_plan[$tag][$stunde][$idx]->reservierung && !$this->std_plan[$tag][$stunde][$idx1]->reservierung) return true; else return false; diff --git a/webdav/Caldav_Backend.php b/webdav/Caldav_Backend.php index 71f5780c1..d107341d2 100644 --- a/webdav/Caldav_Backend.php +++ b/webdav/Caldav_Backend.php @@ -211,7 +211,7 @@ class MySabre_CalDAV_Backend extends \Sabre\CalDAV\Backend\AbstractBackend foreach($val as $row) { //einzelnen Eintrag holen - if($row['dtstart']==$dtstart && $row['unr'][0]==$unr) + if($row['dtstart']==$dtstart && ($row['unr'][0]==$unr) || $unr=='R'.$row['reservierung_id']) { return $row; } @@ -221,6 +221,7 @@ class MySabre_CalDAV_Backend extends \Sabre\CalDAV\Backend\AbstractBackend $data=array_merge($data, $val); } $endtime = microtime(true); + //error_log("\n\nDATA".print_r($data,true)); //error_log("getCalendarData time:".($endtime-$starttime)); //$data.="\nEND:VCALENDAR"; return $data; @@ -280,9 +281,16 @@ END:VTIMEZONE\n".$event."\nEND:VCALENDAR"; $return = array(); foreach($data as $row) { + // Reservierungen werden mit einem R markiert und mit der ReservierungID da sonst + // Termine verloren gehen koennen wenn zur selben Zeit eine Reservierung und ein LVPlan Eintrag vorhanden ist + if($row['reservierung']) + $uri = $row['dtstart'].'-R'.$row['reservierung_id']; + else + $uri = $row['dtstart'].'-'.$row['unr'][0]; + $return[] = array("id"=>$row['UID'], "calendardata"=>$this->makeCal($row['data']), - "uri"=>$row['dtstart'].'-'.$row['unr'][0], + "uri"=>$uri, "lastmodified"=>$row['updateamum'], "etag"=>'"'.$row['UID'].'"', "calendarid"=>$calendarId);