Dann bin wohl ich schuld - ich weiss nur noch nicht, weshalb.
Ankündigung
Einklappen
Keine Ankündigung bisher.
nextCloud (ownCloud) Kalender per CalDAV einbinden
Einklappen
X
-
Zitat von smai Beitrag anzeigenOk, ich habe den Fehler gefunden und gefixt.
Zitat von smai Beitrag anzeigenEingebaut hatte ich ihn am 7. März, ihr habt aber lange gebraucht, das zu merken.
Am 15.10. die Develop installiert und sofort den Bug gemeldet.
Meine Installation: VM Debian Buster SH NG 1.8.1, SmartVISU 3.0, KNX, DMX, 1-wire, Fortigate 30E IPS, VMware vSphere 6.7
Kommentar
-
hallo ,
muß das thema mochmal aufgreifen,
bei dieser Debag anweisung muß was oder wie ist die Antwort die ich erhaltem muß,
so das alles geht.
http://localhost/smartVISU/lib/calen...Family&debug=1
jetzt sagt er mir
principle_url
Kommentar
-
Bei mir sieht es folgendermassen aus (Kalender ohne Termine), aber das hängt natürlich vom System ab.
Code:/******************************************************************************* principle_url -------------------------------------------------------------------------------- /owncloud/remote.php/caldav/principals/smai/ *******************************************************************************/ /******************************************************************************* calendar_home_url -------------------------------------------------------------------------------- /owncloud/remote.php/caldav/calendars/smai/ *******************************************************************************/ /******************************************************************************* calendar_url of 'personal' -------------------------------------------------------------------------------- /owncloud/remote.php/caldav/calendars/smai/personal/ *******************************************************************************/ /******************************************************************************* calendar_url of 'k2' -------------------------------------------------------------------------------- /owncloud/remote.php/caldav/calendars/smai/k2/ *******************************************************************************/ /******************************************************************************* calendar_url of 'waste' -------------------------------------------------------------------------------- /owncloud/remote.php/caldav/calendars/smai/mll/ *******************************************************************************/ /******************************************************************************* calendar_url of 'personal(rene)' -------------------------------------------------------------------------------- /owncloud/remote.php/caldav/calendars/smai/personal_shared_by_rene/ *******************************************************************************/ /******************************************************************************* data -------------------------------------------------------------------------------- Array ( ) *******************************************************************************/ []
Kopier also bitte die exakte Ausgabe.
P.S.: Lies bitte das nächste Mal deine Frage nochmal durch, bevor du sie abschickst. Ich musste diese etwa 5 mal lesen, bis ich halbwegs verstanden hatte, was du wissen willst.
Kommentar
-
also wäre das so OK
principle_url -------------------------------------------------------------------------------- /spica-calendar/caldav/principals/edwin.lars@t-online.de/ ************************************************** *****************************/ /************************************************** ***************************** calendar_home_url -------------------------------------------------------------------------------- /spica-calendar/caldav/principals/edwin.lars@t-online.de/calendars/ ************************************************** *****************************/ /************************************************** ***************************** calendar_url of 'feiertage nordrhein-westfalen' -------------------------------------------------------------------------------- /spica-calendar/caldav/principals/edwin.lars@t-online.de/calendars/INFO_CHANNEL-2-512/ ************************************************** *****************************/ /************************************************** ***************************** calendar_url of 'mein kalender' -------------------------------------------------------------------------------- /spica-calendar/caldav/principals/edwin.lars@t-online.de/calendars/USER_CALENDAR-MAIN/ ************************************************** *****************************/ /************************************************** ***************************** calendar_url of 'geburtstage' -------------------------------------------------------------------------------- /spica-calendar/caldav/principals/edwin.lars@t-online.de/calendars/ADDRESS_BOOK/ ************************************************** *****************************/ /************************************************** ***************************** calendar_url of 'feiertage rheinland-pfalz' -------------------------------------------------------------------------------- /spica-calendar/caldav/principals/edwin.lars@t-online.de/calendars/INFO_CHANNEL-2-1024/ ************************************************** *****************************/ /************************************************** ***************************** data -------------------------------------------------------------------------------- Array ( ) ************************************************** *****************************/ [] Oder ist halt t-online
Kommentar
-
Ja, könnte etwa hinkommen.
So richtig gut lesen kann ich es aber nicht, weil du es nicht als Code markiert hast.
Jetzt müsstest du statt "Family" noch einen deiner tatsächlichen Kalender abfragen.
Vielleicht solltest du aber auch einfach erst erzählen, was denn bei dir genau nicht funktioniert.
Kommentar
-
Hallo,
ich habe mich mit dem Service nextcloud.php beschäftigt und einen Fehler gefunden!
Original:PHP-Code:public function run()
{
$srcurl = $this->url;
if (strpos(config_calendar_name, ",") > 0)
{
$snippets = explode(",", config_calendar_name);
}
else
{
$snippets[] = config_calendar_name;
}
Die Einstellungen im Sourcecode werden nicht akzeptiert.
Mit den nachfolgenden Änderungen werden alle Kompinationen berücksichtig und man kann damit auch den Müllkalender extra aufrufen.
HTML-Code:{{ calendar.list( 'calendarlist', 'Kalender', 10, [ '#A8C2E1', '#FF0000', '#FFFF80', '#FFFF80'] ,'', ['personal','feiertage','div-geburtstage','contact_birthdays'] ) }}
HTML-Code:{{ calendar.waste( 'calendarwaste', 'Müllabfuhr', 'abfall', 10) }}
PHP-Code:public function run()
{
$srcurl = $this->url;
$calendarnames = $this->calendar_names;
if (strpos($calendarnames, ",") > 0)
{
$snippets = explode(",", $calendarnames);
}
else
{
$snippets = $this->calendar_names;
}
Johann
PS: noch die komplette nextcloud.php
PHP-Code:<?php
/**
* -----------------------------------------------------------------------------
* @package smartVISU
* @author Johannes Willnecker, Sebastian Helms
* @copyright 2015
* @license GPL [http://www.gnu.de]
* -----------------------------------------------------------------------------
*/
require_once '../../../lib/includes.php';
require_once const_path_system.'calendar/calendar.php';
/**
* This class reads a caldav calendar
*/
class calendar_caldav extends calendar
{
private function startElement($element)
{
if(strcmp($element,"VEVENT") == 0)
{
$this->vevent = array(
'start' => date('y-m-d', 0).' '.gmdate('H:i:s', 0),
'end' => date('y-m-d', 0).' '.gmdate('H:i:s', 0),
'title' => (string)(""),
'content' => (string)(""),
'where' => (string)(""),
'link' => (string)("")
);
$this->startts = 0;
$this->inVEVENT = true;
}
}
private function endElement($element)
{
if($element == 'VEVENT')
{
$this->startdatearray[] = $this->startts;
$this->data[] = $this->vevent;
$this->inVEVENT = false;
}
}
private function Value($name, $value)
{
if($this->inVEVENT == true)
{
if($name == 'SUMMARY')
{
$this->vevent['title'] = (string)($value);
}
if($name == 'DESCRIPTION')
{
$this->vevent['content'] = (string)($value);
foreach (explode("\\n", $value) as $line)
{
preg_match_all('/@([^ ]+) +(.*)$/', $line, $items);
if ($items[1][0] == "icon" or $items[1][0] == "color")
{
$this->vevent[$items[1][0]] = (string)$items[2][0];
}
}
}
if($name == 'LOCATION')
{
$this->vevent['where'] = (string)($value);
}
if($name == 'DTSTART')
{
preg_match('/((.*)=(.*):)?(.*)/', $value, $matches);
//TODO TZID handling
date_default_timezone_set('Europe/Berlin');
$ts = strtotime($matches[4]) + date("Z", strtotime($matches[4]));
$this->startts = $ts;
$this->vevent['start'] = date('y-m-d', $ts).' '.gmdate('H:i:s', $ts);
}
if($name == 'DTEND')
{
preg_match('/((.*)=(.*):)?(.*)/', $value, $matches);
//TODO TZID handling
date_default_timezone_set('Europe/Berlin');
$ts = strtotime($matches[4]) + date("Z", strtotime($matches[4]));
$this->vevent['end'] = date('y-m-d', $ts).' '.gmdate('H:i:s', $ts);
}
}
}
private function get_caldav_calendar($url)
{
$calStart = gmdate("Ymd\THis\Z");
$calEnd = gmdate("Ymd\THis\Z", strtotime("+4 weeks"));
$postdata = "<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<C:calendar-data>
<C:expand start="".$calStart.""
end="".$calEnd.""/>
</C:calendar-data>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:time-range start="".$calStart.""
end="".$calEnd.""/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>";
$ctxopts = array(
'ssl' =>
array ( 'verify_peer' => false,
'verify_peer_name' => false
),
'http' =>
array( 'method' => 'REPORT',
'header' => "Depth: 1\r\n",
"Content-Type: application/xml\r\n",
'content' => $postdata
)
);
$context = stream_context_create($ctxopts);
$content = file_get_contents($url, false, $context);
return $content;
}
public function run()
{
$srcurl = $this->url;
$calendarnames = $this->calendar_names;
if (strpos($calendarnames, ",") > 0)
{
$snippets = explode(",", $calendarnames);
}
else
{
$snippets = $this->calendar_names;
}
if (substr($srcurl,-1) !== "/" and $snippets[0] !== "")
{
$srcurl .= "/";
}
foreach ($snippets as $snippet)
{
$urls[] = $srcurl . $snippet;
}
foreach ($urls as $url)
{
$content = $this->get_caldav_calendar($url);
$this->debug($content);
if ($content !== false)
{
$xmls[] = simplexml_load_string($content);
}
}
foreach($xmls as $xml)
{
if ($xml !== false)
{
$this->i = 1;
foreach ($xml->children('d', true) as $entry)
{
foreach ($entry->propstat->prop->children('cal',true) as $cal)
{
if($cal->getName() == 'calendar-data')
{
$cal = str_replace (array("\r\n ", "\n ", "\r "), '', $cal);
preg_match_all('/(.[^;|:]*)?(;|:)(.*)/', $cal, $matches, PREG_SET_ORDER);
foreach($matches as $values)
{
if($values[1] == 'BEGIN')
{
$this->startElement(trim($values[3]));
}
else if($values[1] == 'END')
{
$this->endElement(trim($values[3]));
}
else
{
$this->Value($values[1], trim($values[3]));
}
}
}
}
}
}
else
{
$this->error('Calendar: caldav', 'caldav: Calendar read request failed!');
}
}
//order events:
array_multisort($this->startdatearray, SORT_ASC, $this->data);
$i = 1;
foreach($this->data as $key => $value)
{
$this->data[$key]['pos'] = $i++;
}
$this->data = array_slice($this->data, 0, $this->count);
}
}
// -----------------------------------------------------------------------------
// call the service
// -----------------------------------------------------------------------------
$service = new calendar_caldav(array_merge($_GET, $_POST));
echo $service->json();
?>Angehängte DateienZuletzt geändert von Johann.S; 21.08.2019, 20:36.
Kommentar
-
Hallo,
mit den Veränderungen in der nextcloud.php bekomme ich alle Kalender richtig angezeigt!
Jetzt wollte ich auch noch die Kalenderfarbe richtig angezeigt bekommen!
Ich komme aber nicht dahinter wie dass geht, es wird immer nur die erste Farbe verwendet:
Code:{{ calendar.list( 'calendarlist', 'Kalender', 10, [ '#A8C2E1', '#FF0000', '#FFFF80', '#FFFF80'] ,'', ['personal','feiertage','div-geburtstage','contact_birthdays'] ) }}
Kann mir jemand weiterhelfen?
Gruß
Johann
PS: hänge da jetzt schon ziemlich drann
Kommentar
Kommentar