From:Max Kellermann
Date:14.2.02 11:44
Subject:Re: I6: $metainfo->setValues() im Template
Reply-To:<imperia-users@imperia.de>
References:
  • 14.2.02 11:22 Raphael Richter
    [IMPERIA] I6: $metainfo->setValues() im Template
  • Hallo Raphael,
    
    On 2002/02/14 11:22, Raphael Richter <Raphael.Richter@uni-X.com> wrote:
    > general.pl sieht so aus:
    > 
    > ---------------
    > 
    > #!/bin/false
    > #
    > 
    > use strict;
    > 
    > my $filename = $metainfo->getValues('dateiname');
    > my $filesize = (-s $filename);
    > ($filesize) || ($filesize = "0");
    > $metainfo->setValues ('filesize' => "$filesize");
    > $metainfo->setValues('action' => "doit");
    > 
    > my $new = "Filesize: $filesize Filename: $filename";
    > 
    > --------------
    > 
    > Nun, das tut, was es soll. Ich bearbeite das Template, ...
    > Jetzt lese ich aber in einem Plugin im weiteren Workflow irgendwann die 
    > Metainformationen aus.
    > Alle möglichen Metas (defimage1,filename,...) bekomme ich dort 
    > rausgesaugt, nur nicht die in general.pl gesetzten.
    
    
    Was du hier probierst (und was von Guido in einem anderen Thread
    gestern faelschlicherweise vorgeschlagen wurde), ist nicht
    zulaessig. Die Metainformationen duerfen innerhalb eines
    Perl-Flexmodules oder Codeinclude nicht veraendert werden.
    
    Das hat folgenden technischen Hintergrund:
    
    Wenn du ein Dokument mit dem Edit-Workflow-Plugin bearbeitest,
    passiert im Hintergrund folgendes (etwas vereinfacht dargestellt):
    
    - Metainformationen werden von der Festplatte geladen
    - der Template-Prozessor macht aus den Metainformationen die
      HTML-Seite die du im Browser siehst - mit Eingabefeldern usw.
    - dabei wird dein Perlcode aus dem Codeinclude ausgefuehrt, das
      Meta::Info-Objekt wird modifiziert
    - die HTML-Seite wird zum Browser geschoben
    - das Meta::Info-Objekt wird danach allerdings nicht gespeichert
    
    Jetzt ist erstmal der User dran. Er sieht sein HTML-Formular und
    bearbeitet die Daten. Er klickt auf "Speichern" - dabei schickt sein
    Browser die geaenderten Felder zu Imperia zurueck, inklusive
    der Hidden-Felder, die von deinem Codeinclude moeglicherweise
    generiert worden sind.
    
    Weiter geht's also im Edit-Plugin:
    - Metainformationen werden nochmal von der Festplatte geladen
    - alles was der Browser geschickt hat, wird in die Metainformationen
      eingearbeitet
    - Metainformationen werden gespeichert
    
    Wie du siehst, wird das Template beim Speichern gar nicht mehr geladen
    oder ausgefuehrt. Das heisst: auch dein Perlcode im Codeinclude wird
    nicht ausgefuehrt. Folglich ist deine Modifikation auch weg.
    
    Das Meta::Info-Objekt darf, waehrend der Template-Prozessor laeuft,
    auf keinen Fall veraendert werden. Deine zweite Loesung, also das
    generieren von Hidden-Feldern, ist die "richtige" Methode
    dafuer. Dabei musst du aber daran denken, die Werte richtig zu
    escapen.
    
    Es gibt eine Ausnahme, wo der Exploit mit dem Meta::Info->setValues
    zufaellig funktioniert: der Publisher fuehrt erst den
    Template-Prozessor aus, und veroeffentlicht dann direkt die
    modifizierten Metadaten. Das fuehrt dazu, dass die Aenderungen dennoch
    uebernommen und gespeichert werden. Das ist jedoch undokumentiertes
    Verhalten und wird sich spaetestens mit Imperia 6.5 aendern. Daher
    kann ich davon wirklich nur abraten.
    
    Gruss
    -- 
    Max Kellermann
    Entwicklung
    
    Imperia AG
    Leyboldstr. 10
    50354 Huerth
    
    Tel./Fax: 02233 807-228 / -100
    E-Mail: max.kellermann@imperia.net
    http://www.imperia.net
    
    
    
    
    Thread (I6: $metainfo->setValues() im Template)

    © 2001, 2002 marchive.pl Christian Lackas

    [HOME]   [MARCHIVE]   [INDEX]   [IMPERIA]   [IMPRESSUM]   [DELTA]