Ankündigung

Einklappen
Keine Ankündigung bisher.

Anpassung calendar.php für ganztägige Events

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

    Anpassung calendar.php für ganztägige Events

    Hallo!

    Da ich gerade die Integration von Nextcloud in meine Smartvisu Anzeige vollzogen haben, möchte ich noch eine Anpassung meiner calendar.php teilen.

    Ich hab in ab Zeile 46
    Code:
                    $this->data[$id]['period'] = transdate('short', $start).'a - '.transdate('time', $end);
    in folgendes geändert:

    Code:
                    //$this->data[$id]['period'] = transdate('short', $start).'a - '.transdate('time', $end);
                    if (date('H:i', $start) == '00:00' && date('H:i', $end) == '00:00')
                    {
                        //Full day events: just show the date
                        $this->data[$id]['period'] = transdate('date', $start);
                    }
                    else
                    {
                        //not full day: show start and end time
                        $this->data[$id]['period'] = transdate('short', $start).' - '.transdate('time', $end);
                    }
    Dadurch werden jetzt auch bei eintägigen, ganztägigen Events (bei mir der Müll), die Uhrzeiten entfernt und nur noch das Datum ausgegeben.

    vorher:
    vorher.png

    nachher:
    nachher.png


    Grüße
    David
    Zuletzt geändert von kingolli; 01.02.2017, 08:48.

    #2
    Hallo David

    Welche Version der smartVISU nutzt du?
    In der aktuellen 2.8 steht genau an dieser Stelle schon sowas ähnliches: https://github.com/Martin-Gleiss/sma...ar.php#L45-L55

    Allerdings hat der Code wohl einen Fehler, die Reihenfolge müsste etwas anders sein, so greift er nicht richtig.
    Dafür wäre dieser zusätzlich noch ergänzt um mehrtägige Ganztagesevents (also z.B. 01.02.2017 - 05.02.2017 ohne 00:00).

    Ich habe dies im develop nun korrigiert.
    Wer es in 2.8 einbauen will, muss die Zeilen 45 - 55 durch folgendes ersetzen:
    Code:
                if (date('H:i', $start) == '00:00' && date('H:i', $end) == '00:00') // Full day events: don't show time
                {
                    if(date('Y-m-d', $start) == date('Y-m-d', $end-86400)) // One day only: Show just start date
                        $this->data[$id]['period'] = transdate('date', $start);
                    else // Multiple days: Show start and end date
                        $this->data[$id]['period'] = transdate('date', $start).' - '.transdate('date', $end-86400); // Show one day before end, as it ends 00:00
                }
                else if (date('Y-m-d', $start) == date('Y-m-d', $end)) // Start and end on same day: show day only once
                    $this->data[$id]['period'] = transdate('short', $start).' - '.transdate('time', $end);
                else
                    $this->data[$id]['period'] = transdate('short', $start).' - '.transdate('short', $end);
    Gruss
    Stefan

    Kommentar


      #3
      Zitat von smai Beitrag anzeigen
      Hallo David

      Welche Version der smartVISU nutzt du?
      In der aktuellen 2.8 steht genau an dieser Stelle schon sowas ähnliches: https://github.com/Martin-Gleiss/sma...ar.php#L45-L55

      Allerdings hat der Code wohl einen Fehler, die Reihenfolge müsste etwas anders sein, so greift er nicht richtig.
      Dafür wäre dieser zusätzlich noch ergänzt um mehrtägige Ganztagesevents (also z.B. 01.02.2017 - 05.02.2017 ohne 00:00).

      Ich habe dies im develop nun korrigiert.
      Wer es in 2.8 einbauen will, muss die Zeilen 45 - 55 durch folgendes ersetzen:
      Code:
       if (date('H:i', $start) == '00:00' && date('H:i', $end) == '00:00') // Full day events: don't show time
      {
      if(date('Y-m-d', $start) == date('Y-m-d', $end-86400)) // One day only: Show just start date
      $this->data[$id]['period'] = transdate('date', $start);
      else // Multiple days: Show start and end date
      $this->data[$id]['period'] = transdate('date', $start).' - '.transdate('date', $end-86400); // Show one day before end, as it ends 00:00
      }
      else if (date('Y-m-d', $start) == date('Y-m-d', $end)) // Start and end on same day: show day only once
      $this->data[$id]['period'] = transdate('short', $start).' - '.transdate('time', $end);
      else
      $this->data[$id]['period'] = transdate('short', $start).' - '.transdate('short', $end);
      Gruss
      Stefan
      Hallo Stefan!

      Ich nutze die 2.8, die Reihenfolge im Code ist mir aufgefallen, allerdings habe ich nicht die Zeit gehabt, mich korrekt "einzudenken".

      Bei deinem neuen Code ist mir nicht klar, warum du vom Ende-Datum nochmal 86400 abziehst, bei mir stehen bei ganztägigen Events als Start-Datum und Ende-Datum der gleiche Tag drin.

      Grüße
      David

      Kommentar


        #4
        Zitat von kingolli Beitrag anzeigen
        Bei deinem neuen Code ist mir nicht klar, warum du vom Ende-Datum nochmal 86400 abziehst, bei mir stehen bei ganztägigen Events als Start-Datum und Ende-Datum der gleiche Tag drin.
        Ok, dann hängt das wohl vom Quellsystem ab. Im Google ics steht da bei einem Ganztag:
        Code:
        DTSTART;VALUE=DATE:20170207
        DTEND;VALUE=DATE:20170208
        Und bei 2 Ganztagen:
        Code:
        DTSTART;VALUE=DATE:20170207
        DTEND;VALUE=DATE:20170209
        Was eigentlich IMHO nicht falsch ist, der Event geht ja von 07.02.2017 (00:00) bis 08.02.2017 (00:00).
        Wenn Start und Ende gleich sind, würde er ja gar nicht stattfinden (da wirds metaphysisch).

        Oder wird das evtl. im Nextcloud Service umgeändert?
        Was steht denn in deinen Quelldaten genau drin?
        Zuletzt geändert von smai; 01.02.2017, 09:57.

        Kommentar


          #5
          Zitat von smai Beitrag anzeigen
          Oder wird das evtl. im Nextcloud Service umgeändert?
          Was steht denn in deinen Quelldaten genau drin?
          Moin,
          habe in meiner OwnCloud (9.1.3) gerade mal schnell einen ganztägigen Termin hinzugefügt. Der wird von der aktuellen SV 2.8 (ohne die Änderungen aus diesem Fred) bei mir richtig behandelt. Es wird nur das Datum angezeigt. Ich benutze für die Anzeige in der Visu auch die NextCloud Erweiterung.

          Grundsätzlich scheint es für ganztägige Ereignisse aber noch ein zusätzlichen Marker zu geben.
          Erstelle ich einen Termin als Ganztag wird er im iPad und der OwnCloud Weboberfläche ohne Zeit angezeigt.
          Erstelle ich einen Termin ohne den Haken bei Ganztag zu setzen als 24Std. Termin mit Beginn um 00:00 Uhr wird der Termin sowohl auf dem iPad Kalender als auch in der OC-Weboberfläche mit Startzeit angezeigt.
          Der SmartVISU ist das, IMHO richtigerweise, egal. Die zeigt bei Terminen mit 0 bis 0 Uhr genauso nur das Datum wie bei Terminen mit gesetztem Ganztag Haken.

          Zitat von kingolli Beitrag anzeigen
          bei mir stehen bei ganztägigen Events als Start-Datum und Ende-Datum der gleiche Tag drin.
          Wo steht das bei dir drin? Im Userfrontend oder in den Daten die die WebDAV Schnittstelle liefert?
          Bei mir wird in den Userfrontends (iOS Kalender genauso wie OwnCloud Frontend) ebenfalls bei Start und Ende der gleiche Tag angezeigt.
          In der SV ist die Anzeige trotz Substraktion der 24h richtig.
          Erstelle ich einen Nicht-Ganztagstermin der als Dauer 0 Std. hat (z.B. 07.02.2017 00:00 bis 07.02.2017 00:00) wird in der SV erwartungsgemäß auch die Uhrzeit angezeigt da Start != End -24h ist.

          Gruß, Sebastian
          Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
          Ruhri? -> Komm zum Stammtisch

          Kommentar


            #6
            Sorry, war mein Fehler.

            Ich habe eine ICS aus Excel generiert, die die Mülltermine enthält, dort habe ich Start und Ende auf das gleiche Datum gesetzt und diese in den Kalendar der Nextcloud importiert, dort wurde alles richtig dargestellt. Wenn ich in der Nextcloud neue Termine eintrage und ein ICS erstelle, steht der nächste Tag als Ende drin.

            Ich habe jetzt mein Makro für die ICS angepasst, jetzt klappts.

            Danke und Grüße
            David

            Kommentar


              #7
              Hallo nochmal.

              Wo wie hier gerade so gemütlich über den Kalendar philosophieren: kann ich im Widget "calendar.list" irgendwie die Kalendar filtern?

              Danke und Grüße
              David

              Kommentar


                #8
                Zitat von Bainit Beitrag anzeigen
                Der wird von der aktuellen SV 2.8 (ohne die Änderungen aus diesem Fred) bei mir richtig behandelt. Es wird nur das Datum angezeigt.
                Stimmt, es war in 2.8 doch nicht so falsch, wie ich gedacht hatte.
                Genau weil bei Ganztag das Enddatum ein Tag nach dem Startdatum ist, trifft die Bedingung date('Y-m-d', $start) == date('Y-m-d', $end) nicht zu und damit wird das else if mit 00:00 aufgerufen.

                Ich werde also meine Änderung wohl rückgängig machen.

                Kommentar


                  #9
                  Zitat von kingolli Beitrag anzeigen
                  Wo wie hier gerade so gemütlich über den Kalendar philosophieren: kann ich im Widget "calendar.list" irgendwie die Kalendar filtern?
                  Leider nein.
                  Die Kalendergeschichte braucht eine ganzheitliche Überarbeitung, deshalb mache ich im Moment nur das Nötigste daran.
                  Aber ich werde das wohl nicht mehr für 2.9 erledigen, ausser jemand anderes nimmt das in Kürze in die Hand.

                  Kommentar


                    #10
                    Moin,
                    Es geht evtl. indem du das Widget kopierst und mit neuen Parametern fütterst.
                    Hierzu musst du dann in deinem Kalender Serverseitig aber neue Benutzer anlegen und zusätzlich mit Fehlermeldungen auf deinem Cloudserver leben.
                    Beschrieben habe ich das in Müllplugin Eintrag 11

                    Ich hab das aber auch nur gemacht, da das Müllplugin eh getrennt ist. Wenn man das Kalenderwidget kopiert muss man mit Sicherheit noch auf einiges mehr achten. Ich würde das dann unter quick and dirty verbuchen.

                    Gruß, Sebastian
                    Baustelle 2.0 (Detailprogrammierung und Restarbeiten)
                    Ruhri? -> Komm zum Stammtisch

                    Kommentar

                    Lädt...
                    X