Dateimanagement: Fehler beim Umbenennen richtig zurückgeben
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 1 Mar 2017 13:16:31 +0000 (14:16 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 1 Mar 2017 13:25:28 +0000 (14:25 +0100)
commita6ed938f30a84e83a62432aa8ecd10f057efe677
treef31f31df88a702fdfc66e97a51a44edf0a87ff61
parent69e526ee5cfc3d153f738083b397a000c00c4468
Dateimanagement: Fehler beim Umbenennen richtig zurückgeben

Ist man z.B. bei den Artikelstammdaten und versucht, eine Datei
umzubenennen, und ändert den Namen nicht, so sollte eine Fehlermeldung
angezeigt werden. Wurde sie aber nicht, weil Folgendes passierte:

• Im ClientJS-Flash wird Fehlermeldung erzeugt und das ClientJS sofort
  gerendert, anschließend mit »return« der innerste Block verlassen
• Der innerste Block ist aber ein »eval { … }«, und nicht die Funktion
  selber. Daher geht der Kontrollfluss nach dem »eval« weiter. Dabei
  werden mehr Sachen auf das ClientJS raufgepusht und aschließend
  erneut gerendert.

Dieses zweite Rendern schreibt dann erneut HTTP-Response-Zeilen sowie
ein vollständiges Array von ClientJS-Aktionen.

Der JavaScript-Code auf der Browser-Seite bekommen somit:

• HTTP-Response-Zeilen #1
• ClientJS-Array #1
• HTTP-Response-Zeilen #2
• ClientJS-Array #2

Damit kann er natürlich nicht umgehen, ignoriert die komplette
Antwort, und die Fehlermeldung wird somit nicht angezeigt.

Der Fix ist, nur das Umbenennen innerhalb des »eval« zu machen, und
den Rückgabewert außerhalb des »eval« zu prüfen. Bei einem anderen
Wert als SL::File::RENAME_OK wird das ClientJS dann nur einmal
gerendert und anschließend die Funktion verlassen.
SL/Controller/File.pm