Issue #67 resolved
Alexander Eifler
created an issue

Scoutnet bietet zwar viele Funktionen, dennoch fehlen ein paar essentielle Sachen:

  • Anlage / Editierung von Terminen nicht über API möglich
  • Support der Schnittstelle fraglich (wird seid 4 Jahren nicht mehr weiterentwickelt)
  • Anfrage-Latenzen

Für die nächste Version ist ein neues Kalender-Backend anzustreben, mit dem man auch Termine verwalten kann. Die Integration in das "Ökosystem" sollte demnach auch verbessert werden können.

  • Neues Design ist nötig

Für den Kalender sind folgende Daten zwingend notwendig:

  • ID
  • Titel
  • Beschreibung
  • Ort (mit Name, Straße, Hausnummer, PLZ, Ort, Latitude + Longitude)
  • Start- und Enddatum
  • Start- und Endzeit
  • Ganztagstermin ja/nein
  • Interner Download-Links (für Anmeldung, Packliste, etc.)
  • URL (auf externe Seite bspw.)
  • Stufen (die es betrifft)
  • Kategorien (die auf den Termin zutreffen)
  • Vorschaubildchen (als Quick-Info / qtip)

Comments (26)

  1. Jan Brohl

    Anelegen/Editieren von Terminen ist über einen angeblich öffentlichen RPC-Client in PHP (Typo3-Plugin?) möglich der auch aktuell noch weiterentwickelt wird aber nicht wirklich dokumentiert ist. Ich glaube es ist https://bitbucket.org/scoutnet/plugins.typo3.sh_scoutnet_webservice

    An der REST-API wurde in der tat schon lange nichts mehr gemacht weil man sie wohl für fertig hält und es ja den RPC-Client gibt. Es wurde aber vor einer Weile noch einegroße Demo für den PHP-Client für die REST-API veröffentlicht was ich als Hinweis auf eine langfristige Unterstützung sehe. Siehe http://www.scoutnet.de/api-info/php.html bzw http://www.scoutnet.de/navigator/

    (Die Javascript-Demo ist auch "neu")

    Grundsätzlich gibt es übrigens auch noch die Kalender-Einbindung über Smarty-Templates ( http://www.scoutnet.de/kalender/include/einbindung-homepage.html ) die es quasi schon immer gibt und - vor allem weil ihr ja eh schon Smarty benutzt - wahrscheinlich am einfachsten ist.

  2. Jan Brohl

    Ich kann jetzt den ganzen Scoutnet-API-Quellcode sehen - glaube ich.

    Theoretisch darf ich auch dran herumbasteln.

    Bei der REST-API geht ganz viel über eine sebstgeschriebene Codegenerierung - da steige ich (noch) nicht wirklich durch.

    Mit dem alten Entwickler stehe ich zwar in Kontakt und er möchte mich unterstützen aber alles was es da an Änderungen geben soll muss ich selber implementieren.

    Ich gehe davon aus dass nur die Verionsnummer verwirrend ist - da müsste einfach 1.0 statt 0.2 stehen. Die API sooll soweit ich weiß quasi für immer weiter verfügbar bleiben.

    Die RPC-API wird zwar noch weiterentwickelt aber da da bisher keine Versionierung vorgesehen ist, ist sie nicht so zuverlässig stabil.

  3. Alexander Eifler reporter

    Fabian hat im #136 gemeldet, dass auf mobilen Endgeräten (hier ein Tablet) teilweise hohe Latenzen beim Laden der Kalender-Daten auftreten. Cachen ist hier aktuell keine Alternative, da man dann auch gleich das ganze Kalender-System neu schreiben könnte... hab das schon häufig beobachtet. Gibts da vom Hosting her mal irgendwann Verbesserungen, @Jan Brohl ?

  4. Jan Brohl

    Es kann am Caching des Typo3 (Die REST-API wird da durchgeschleust und sie RPC-API ist direkt ein Typo3-Plugin) liegen - da sind die Einstellungen vielleicht unterschiedlich bei den verschiedenen APIs - oder daran dass der Client nicht so toll ist (beide sind wohl nicht ganz bugfrei)

    Um den REST-Client zu fixen müsste ich wohl bei der Codegenerierung durchsteigen aber da bin ich nicht so zuversichtlich.

    Um das Problem kurzfristig zu beheben könntest du entweder die Bibliothek wegwerfen und direkt https://www.scoutnet.de/api/0.2/group/1460/events/ als JSON laden oder du könntest es mit dem anderen API-Client ( https://github.com/scoutnet/plugins.sn_webservice ) versuchen der auch eine andere URL abfragt.

    Ich arbeite zwar an einem kompletten Rewrite des des Kalender-Servers aber das kann noch eine Weile dauern. Wie es mit den APIs weitergeht wird wohl auf dem nächsten Treffen am 18.3. Besprochen und ich habe vor da hin zu kommen.

  5. Jan Brohl

    Die Latenzen sind als Problem bekannt und man will sich das mal ansehen. Die RPC-API soll da besser sein.

    Aktueller Stand beim Kalender ist, dass eine Überarbeitung der APIs geplant ist aber die alten Schnittstellen wohl trotzdem weiter betrieben werden müssen.

    Mit dem RPC-Client wäre es soweit ich verstanden habe möglich die Termine zentral von unserer Seite aus zu bearbeiten wenn man sich dafür einen extra-benutzer macht der automatisch eingelogt wird wenn nötig oder nur nicht ausgelogt wird - zumindest sieht es für mich so aus als würden andere das so machen.

    Wenn ich mir ScoutnetMediator.php und calendar.php so ansehe glaube ich dass das Event-Format von der RPC-API auch besser dem entspricht was Ihr an Eluceo weitergeben wollt.

  6. Jan Brohl

    Haha - ich habe noch eine API gefunden.

    CalDAV - siehe https://www.scoutnet.de/kalender/include/einbindung-programme.html (Lesender und Schreibender Zugriff)

    Eigentlich müsste man darüber alle wichtigen Funktionen zum Bearbeiten haben und die Authentifizierung ist einfach. Einzige Probleme sind dass man eine entsprechende Bibliothek braucht und da noch Daten als JSON in das Description-Feld gepackt werden ( https://github.com/scoutnet/public/issues/48 erklärt warum JSON )

  7. Jan Brohl

    Die Scoutnet-REST-API gibt nur maximal 500 Events zurück - bin mir nicht sicher ob das in der Clientbibliothek abgefangen wird aber unser Stamm hat tatsächlich mehr als 500 Termine im Kalender

  8. Jan Brohl

    Ergebnis der Scoutnet-Versammlung ist, dass in naher Zukunft JSON-RPC 2.0 unterstützt wird und damit die verbreiteten Clientbibliotheken. Ansonsten wird sich auf absehbare Zeit quasi nichts tun. Die REST-API wird nicht mehr supported und mittelfristig wohl auch unbrauchbar werden.

    Dauerhaften Support gibt es sicher für das Smarty-Template und wahrscheinlich für die RPC-API.

    Wir sollten nochmal darüber sprechen wie das mit dem Kalender gemacht werden soll.

  9. Jan Brohl

    Ich kriege das Testen nicht gebacken aber eigentlich sollte mit

    {
    
      "require": {
        "smarty/smarty": "3.1.31",
        "scoutnet/sn-webservice": "1.0.1",
        "slim/slim": "3.8.1",
        "phpmailer/phpmailer": "5.2.23",
        "ezyang/htmlpurifier": "4.9.2",
        "eluceo/ical": "0.11.0",
        "piwik/piwik-php-tracker": "1.2.0",
        "matthiasmullie/minify": "1.3.44"
      }
    }
    

    etwas ähnliches wie der folgende Code laufen.

    public static function getEvents($from,$to){
        $scoutNetApi = new \ScoutNet\Api\ScoutnetApi();
        global $session;
    
        $events = array();
        foreach ($scoutNetApi->get_events_for_global_id_with_filter(SCOUTNET_ID, ['startDate' => $from, 'endDate' => $to]) as $e){
            $es = array();
            $ens = array();
            foreach ($e->getCategories() as $cat){
                $ens[] = $cat->getText();
                $sectionFound = false;
    
            }
            foreach($e->getStufen() as $section){
                foreach(self::getSections() as $nr=>$name){
                    if($section.getBezeichnung() == $name){
                        $sectionFound = true;
                        $es[] = array(
                            "id" => $nr,
                            "name" => $name
                        );
                    }
                }
            }
    
            sort($es);
            sort($ens);
    
            $events[] = array(
                "id" => $e->uid,
                "title" => $e->title,
                "start" => $e->getStartDate().($e->getAllDayEvent()?"":"T".$e->getStartTime()."Z"),
                "end" => $e->getEndDate().($e->getAllDayEvent()?($e->getAllDayEvent()?"":"T24:00:00Z"):"T".$e->getStartTime()."Z"),
                "allDay" => $e->getAllDayEvent(),
                "location" => $e->getLocation(),
                "url_text" => $e->getUrlText(),
                "url" => $e->getUrl(),
                "description" => $e->getDescription(),
                "keywords" => $es,
                "sections" => $ens,
                "CSRFToken" => $session->get("CSRFToken")
            );
        }
        return $events;
    }
    
  10. Log in to comment