Anhänge lassen sich nach Migration nicht mehr herunterladen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • LutzWinkler
    Contao-Nutzer
    • 02.09.2009
    • 151

    #1

    Anhänge lassen sich nach Migration nicht mehr herunterladen

    Hi Community,

    in den letzten Monaten haben wir nach einigen Umwegen unsere Contao-Installation von 2.11.17 auf 3.4.5 migriert. Auf beiden Versionen läuft Helpdesk in Version 1.3.0 stable.
    Die alten Nachrichten wurden erfolgreich übertragen, neue Nachrichten lassen sich posten.
    Das Problem sind jetzt die Anhänge der Forumsnachrichten. Die sind alle fein säuberlich in mehreren Unterordnern in tl_files/foren einsortiert. Nur leider lassen sie sich nicht mehr herunterladen. Contao meldet z.B. von der Adresse
    https://.../system/modules/helpdesk/...?msg=3178&id=1
    File not found (/.../cms/3_2//3178.1).
    Wenn ich nun z.B. die Datei 3178.1 aus dem Verzeichnis tl_files/foren/allgemein ins Rootverzeichnis verschiebe, wird sie problemlos heruntergeladen. Obwohl in der Tabelle tl_helpdesk_categories für alle Foren, in denen Anhänge zugelassen sind, im Feld atch_dir der korrekte Pfad steht, werden die Dateien offenbar dennoch im Rootverzeichnis gesucht.
    Nun gibt es im Backend ja unter den Forumseinstellungen die Option "Anhänge aktivieren". Wenn die aktiviert sind, erscheint ein Button "Auswahl ändern", um das Verzeichnis für die Anhänge zu selektieren. Soweit so gut. Nur leider wird die Auswahl nicht gespeichert! Wenn das man kein Bug ist?
    Nun könnte man das Problem lösen, indem man alle Dateien aus den Unterordnern von tl_files/foren ins Rootverzeichnis verschiebt. Dann funktioniert der Download wieder. Die schöne Ordnung ist danach allerdings perdu.

    Hat jemand eine Idee, wie ich das lösen könnte?

    Viele Grüße,
    Lutz
  • folkfreund
    Contao-Urgestein
    • 09.04.2010
    • 1928

    #2
    Hallo Lutz,

    wurde bei dem Update die Einstellung beibehalten, dass der Ordner 'tl_files' verwendet wird? Bei einer Neuinstallation heißt der Ordner 'files'.

    Außerdem ist in Contao 3.x auf ein DB-basiertes Filesystem umgestellt worden. Das könnte auch zu deinem Problem führen. Ich habe HelpDesk nicht im Einsatz und weiß nicht, ob die Version bereits dafür vorbereitet ist.

    a) im Backend unter 'Dateiverwaltung' einmal 'synchronisieren'.
    b) evtl. müssen in den Templates Anpassungen vorgenommen werden, falls du die Templates aus der 2.x-Version übernommen hast.

    Gruß,
    folkfreund

    EDIT: Lt. Erweiterungsliste ist HelpDesk 1.3.10 nicht für Contao 3.x verfügbar. Daran wird es wohl liegen...
    Den Thread zu Helpdesk mit Contao 3 kennst du sicher.
    Zuletzt geändert von folkfreund; 07.12.2015, 18:41.

    Kommentar

    • LutzWinkler
      Contao-Nutzer
      • 02.09.2009
      • 151

      #3
      Hallo folkfreund,

      danke für die prompte Antwort!

      Nun ist es ja nicht so, dass Helpdesk gar nicht funktioniert: Wenn ich ein neues Thema mit Anhang erstelle, wird dieser Anhang im Format xxxx.y im Rootverzeichnis gespeichert und kann auch beim Anklicken des Dateilinks in der Nachricht wieder heruntergeladen werden - obwohl sie im 'falschen' Verzeichnis liegen und nicht in der Tabelle tl_files vorhanden sind. Ein Workaround wäre also, alle alten Anhänge aus den Unterordnern von tl_files/foren ins Rootverzeichnis zu kopieren.

      Das merkwürdige ist, dass obwohl die alten Einträge korrekt in die neue Tabelle tl_files übernommen worden sind und auch im Dateissystem am richtigen Ort liegen, sie trotzdem nicht heruntergeladen werden. Sieht korrekt aus - funktioniert aber nicht!
      Da wir über 3000 Forumsnachrichten mit hunderten Anhängen haben, will ich Helpdesk nicht einfach einstampfen. Es hat ja bisher prima funktioniert.

      Viele Grüße,
      Lutz

      Kommentar

      • folkfreund
        Contao-Urgestein
        • 09.04.2010
        • 1928

        #4
        Klar, ich hatte schon verstanden, dass die Grundfunktionen noch funktionieren. Und das freut mich auch für dich :-)

        Es bleibt aber unklar, was alles nicht funktioniert.

        Du hast noch nicht beschrieben, wie du das Update durchgeführt hast (update über mehrer Versionen oder das ganze System neu aufgesetzt). Die gespeicherten Anhänge bleiben natürlich im Dateisystem erhalten, wenn du sie nicht ausdrücklich löschst. Ob aber dein neues Contao mit dem Ordner /files oder /tl_files arbeitet ist ebenfalls noch nicht beantwortet.
        Möglicherweise landen neue Anhänge im root, da der Zielordner nicht bekannt oder nicht beschreibbar ist. Wie sehen die Rechte von /tl_files aus?

        Ich meine, man kann im Contao 3 gezielt Ordner von der Datenbank-Indizierung ausschließen, kann dir aber nicht sagen wie das geht (meine mich nur zu erinnern, das mal gelesen zu haben). Vielleicht ergibt sich darüber eine Möglichkeit, Anhänge weiter mit der alten Helpdesk-Version zu verwalten. Vermutlich wirst du aber an irgendwelchen Templates Anpassungen vornehmen müssen.

        Gruß,
        folkfreund

        Kommentar

        • LutzWinkler
          Contao-Nutzer
          • 02.09.2009
          • 151

          #5
          Hab jetzt eine Lösung gefunden:
          In system/modules/helpdesk gibt es 5 Dateien, die die neue Klasse FilesModel nutzen:
          HelpdeskDownload.php
          HelpDeskCategory.php
          HelpdeskImport.php
          HelpdeskNotify.php
          HelpdeskAvatar.php

          Als erstes habe ich in den beiden ersten Dateien die Codezeilen gesucht, in denen auf FilesModel verwiesen wird.
          Z.B. in HelpDeskDownload.php:
          PHP-Code:
          $path = TL_ROOT.'/'.\FilesModel::findByPk($q->cat_atch_dir)->path.'/'; 
          
          diese Zeile habe ich ersetzt durch
          PHP-Code:
          $path = TL_ROOT.'/'.$q->cat_atch_dir.'/'; 
          
          ...und siehe da: die angehängten Dateien werden wieder gefunden!

          Analog habe ich die Datei HelpDeskCategory.php gepatcht:
          aus
          PHP-Code:
          $this->atch_dir = \FilesModel::findByPk($q->cat_atch_dir)->path; 
          
          wurde
          PHP-Code:
          $this->atch_size     = $q->cat_atch_size; 
          
          ...nun werden die Anhänge von neuen Nachrichten ebenfalls in die richtigen Ordner gepackt.

          Keine Ahnung, ob das nach dem nächsten Update noch funktioniert. Jetzt kann ich erst mal mit den Foren weiterarbeiten.

          Vielen Dank für die Unterstützung,
          Lutz

          Kommentar

          • folkfreund
            Contao-Urgestein
            • 09.04.2010
            • 1928

            #6
            Zunächst mal Glückwunsch, dass es für dich nun funktioniert!

            Was mich stutzig macht:
            • Die Verwendung von \FilesModel::findByPk() deutet auf eine aktuellere Version für Contao 3.x hin. Hast du vielleicht doch irgendwie ein Update installiert (z.B. von GitHub)?
            • Dann wiederum sollte es auch funktionieren, sofern der Ordner /tl_files von der DB erfasst wird (danach hatte ich mehrfach gefragt). Falls du ansonsten nun den Ordner /files nutzt, dann könnte es auch funktionieren, die Anhänge dahin zu verschieben und die Dateiverwaltung zu synchronisieren.

            Kommentar

            • LutzWinkler
              Contao-Nutzer
              • 02.09.2009
              • 151

              #7
              Hmmm... An der Migration waren mehrere Leute beteiligt. Deshalb weiß ich auch nicht, welches Repository verwandt wurde. Ich versuche jetzt, etwas Licht ins Chaos zu bringen.

              Die neue Site läuft unter Contao 3.4.5. Wenn ich im Backend in der Dateiverwaltung auf 'Synchronisieren' klicke, passiert erst mal eine Weile nichts und dann kommt ein 500er Server-Error. Dennoch scheint es zu einer Synchronisation der Dateien im Ordner tl_files mit der DB-Tabelle tl_files gekommen zu sein. Jedenfalls finden sich in der Datenbank auch die neu hinzugefügten Anhänge. Merkwürdigerweise allerdings auch Dateien, die nicht mehr im Dateisystem vorhanden sind.
              Beispiel:
              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: screenshot.PNG
Ansichten: 1
Größe: 17,8 KB
ID: 927797
              Die Datei 3176.1 ist im Dateisystem nur 1x im Ordner tl_files/helpdesk vorhanden, erscheint in der DB-Tabelle aber an 2 unterschiedlichen Orten.

              Wenn ich im Modul HelpdeskDownload.php die Zeile
              PHP-Code:
              $path = TL_ROOT.'/'.\FilesModel::findByPk($q->cat_atch_dir)->path.'/'; 
              
              reaktiviere, bekomme ich wieder wie gehabt die Fehlermeldung
              File not found (/kunden/465037_30627/webseiten/cms/3_2//3176.1).
              Der Workaround (die alte Routine?) findet die Datei:
              PHP-Code:
              $parts = explode('/',str_replace('\\', '/', $q->cat_atch_dir));
              $path = TL_ROOT.'/';
              foreach ($parts as $part) if (strlen($part)) $path .= $part.'/'; 
              
              Das ist es was ich nicht verstehe: Da ja offenbar die aktuelle Version meines Contao das Datenbank-Filesystem unterstützt, müsste wie du sagst, FilesModel::findByPk die Datei finden, zumal sie ja korrekt in der Datenbank abgelegt ist. Tut sie aber nicht. Im übrigen gibt es auch noch einen Ordner /files im Rootverzeichnis Server. Der scheint aber im Gegensatz zu dem von mir verwandten Ordner /tl_files nicht mit der DB synchronisiert zu werden.

              Viele Grüße,
              Lutz

              Kommentar

              • Spooky
                Community-Moderator
                Wandelndes Contao-Lexikon
                • 12.04.2012
                • 38811

                #8
                Zitat von LutzWinkler Beitrag anzeigen
                Als erstes habe ich in den beiden ersten Dateien die Codezeilen gesucht, in denen auf FilesModel verwiesen wird.
                Z.B. in HelpDeskDownload.php:
                PHP-Code:
                $path = TL_ROOT.'/'.\FilesModel::findByPk($q->cat_atch_dir)->path.'/'; 
                
                diese Zeile habe ich ersetzt durch
                PHP-Code:
                $path = TL_ROOT.'/'.$q->cat_atch_dir.'/'; 
                
                ...und siehe da: die angehängten Dateien werden wieder gefunden!
                Das deutet daraufhin, dass bei der Migration die Dateiverweise nicht auf IDs bzw. UUIDs aktualisiert wurden. Wenn du deine Änderung drinnen lässt könnte es sein, dass neue Anhänge nicht funktionieren werden.
                » sponsor me via GitHub or Revolut

                Kommentar

                • LutzWinkler
                  Contao-Nutzer
                  • 02.09.2009
                  • 151

                  #9
                  Wenn ich die Datenbankauszüge aus der Tabelle tl_files richtig interpretiere, sind die IDs und UUIDs schon aktualisiert worden (s. Screenshot in meinem Posting von gestern). Deshalb verstehe ich auch nicht, warum FilesModel::findByPk nicht funktioniert.
                  Du hast schon recht: auch neue Anhänge haben erst wieder funktioniert, nachdem ich die Moduldatei HelpDeskCategory.php gepatcht habe.

                  Ich kann mit den Patches im Moment schon leben. Ich wüsste nur gerne, warum das neue Datenbankfilesystem mit Helpdesk nicht funktioniert. Denn ich fürchte, dass spätestens beim nächsten Update auch noch andere Module Probleme machen könnten. Wir haben die ganze Migration ja gemacht, um endlich wieder ein aktuelles System zu haben. Wenn jetzt zentrale Module nur mit Workarounds funktionieren, ist das natürlich blöd.

                  Viele Grüße,
                  Lutz

                  Kommentar

                  • Spooky
                    Community-Moderator
                    Wandelndes Contao-Lexikon
                    • 12.04.2012
                    • 38811

                    #10
                    So habe ich das nicht gemeint. Dass in tl_files die UUIDs drinstehen ist ja gut und schön, aber es geht um die Referenzen in den helpdesk Tabellen. Wenn dieser Code funktioniert
                    PHP-Code:
                    $path = TL_ROOT.'/'.$q->cat_atch_dir.'/'; 
                    
                    und es aber eigentlich dieser Code sein sollte
                    PHP-Code:
                    $path = TL_ROOT.'/'.\FilesModel::findByPk($q->cat_atch_dir)->path.'/'; 
                    
                    dann steht in $q->cat_atch_dir, wo auch immer das herkommt, vermutlich aus einer helpdesk Tabelle, immer noch der Dateipfad drin, statt die UUID. Und die Code Änderung wird keine finale Lösung sein, denn vermutlich werden zukünftige Einträge dann nicht mehr funktionieren - weil dann wahrscheinlich UUIDs in die Tabelle gespeichert werden und nicht der Dateipfad.
                    » sponsor me via GitHub or Revolut

                    Kommentar

                    Lädt...