Ankündigung

Einklappen
Keine Ankündigung bisher.

nextCloud (ownCloud) Kalender per CalDAV einbinden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • smai
    antwortet
    Wenn ihr calendar.waste habt, scheint ihr 2.9 (develop) zu nutzen.
    In dieser solltet ihr anstelle einer veralteten nextcloud.php besser den integrierten generischen CalDav-Provider nutzen.

    Einen Kommentar schreiben:


  • Beobachter
    antwortet
    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'] ) }}
    ergibt bei allen Kalender #A8C2E1.

    Kann mir jemand weiterhelfen?

    Gruß
    Johann

    PS: hänge da jetzt schon ziemlich drann

    Einen Kommentar schreiben:


  • Beobachter
    antwortet
    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;
            } 
    In dieser Version greift der Kalender nur auf die Standardeinstellungen zurück.
    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;
            } 
    Vielleicht kann das ja jemand gebrauchen

    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($urlfalse$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->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$matchesPREG_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->startdatearraySORT_ASC$this->data);
            
    $i 1;
            foreach(
    $this->data as $key => $value)
            {
                
    $this->data[$key]['pos'] = $i++;
            }

            
    $this->data array_slice($this->data0$this->count);
        }
    }


    // -----------------------------------------------------------------------------
    // call the service
    // -----------------------------------------------------------------------------

    $service = new calendar_caldav(array_merge($_GET$_POST));
    echo 
    $service->json();

    ?>
    Angehängte Dateien
    Zuletzt geändert von Beobachter; 21.08.2019, 20:36.

    Einen Kommentar schreiben:


  • pino
    antwortet
    Ich bekomme ihn nicht angezeigt und ich kann die Daten ( Müll , ( ferien )) nicht weiter verarbeiten.

    Einen Kommentar schreiben:


  • smai
    antwortet
    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.

    Einen Kommentar schreiben:


  • pino
    antwortet
    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

    Einen Kommentar schreiben:


  • smai
    antwortet
    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
    (
    )
    
    *******************************************************************************/
    
    []
    Ich nehme mal nicht an, dass bei dir nur ein blankes   principle_url  steht, mindestens ein paar Sterne und Striche müssten vorhanden sein.
    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.

    Einen Kommentar schreiben:


  • pino
    antwortet
    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

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Jupp, geht wieder - vielen Dank, Stefan!
    /tom

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Zitat von smai Beitrag anzeigen
    Ok, ich habe den Fehler gefunden und gefixt.
    jepp super danke funktioniert.

    Zitat von smai Beitrag anzeigen
    Eingebaut hatte ich ihn am 7. März, ihr habt aber lange gebraucht, das zu merken.
    Hehe ich war da super schnell
    Am 15.10. die Develop installiert und sofort den Bug gemeldet.

    Einen Kommentar schreiben:


  • smai
    antwortet
    Ok, ich habe den Fehler gefunden und gefixt.
    Eingebaut hatte ich ihn am 7. März, ihr habt aber lange gebraucht, das zu merken.

    Einen Kommentar schreiben:


  • smai
    antwortet
    Dann bin wohl ich schuld - ich weiss nur noch nicht, weshalb.

    Einen Kommentar schreiben:


  • Tom Bombadil
    antwortet
    Nein, auf Deinem Testsystem liegt die Installation aus dem Frühjahr, ohne jegliche Updates.
    /tom

    Einen Kommentar schreiben:


  • smai
    antwortet
    Irgendwas scheint wirklich falsch zu sein, ich weiss leider nur nicht was.
    Gross-/Kleinschreibung spielt keine Rolle.

    Tom Bombadil hast du irgend ein Update der owncload gemacht, seit wir es (im Frühjahr oder so) erfolgreich getestet hatten?

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Tom Bombadil
    mir fällt auf das der Kalendername in der Config.ini klein und in der html groß geschrieben ist
    Code:
    {% import "calendar.html" as calendar %}
    /** {% macro waste(id, title, calendar, count, repeat) %}**/
    /** {% macro list(id, title, count, color, repeat, calendar) %} **/
    {{ calendar.waste('waste', 'Mülltermine', 'Waste', 5) }} {{ calendar.list('clist', 'Andere Termine', '5', yellow, '', 'K1') }}
    meine Config geht wie gesagt auch nicht:
    Code:
    calendar_name = "visu"
    calendar_password = "geheim"
    calendar_service = "CalDav"
    calendar_url = "https://michael:geheim@cloud.domain.de/remote.php/dav/calendars/michael/"
    calendar_username = "michael"
    Code:
      
    {{ calendar.waste('muell', 'Müllabfuhr', 'visu', 5) }}
    {{ calendar.list('other', 'Termine', '5', yellow, '', 'visu') }}

    Einen Kommentar schreiben:

Lädt...
X