form:imagebutton wird nicht gesendet

Das Forum ist für das Melden von Bugs gedacht. // This forum is intended to report bugs with the APF.
Gesperrt
GeneralCrime
Beiträge: 77
Registriert: 14.12.2011, 07:13:16

form:imagebutton wird nicht gesendet

Beitrag von GeneralCrime » 05.12.2012, 14:29:48

Hallo Adventure Team,
ich hab derzeit ein merkwürdiges Problem.

der Tag form:imagebutton wird in meinem Quellcode nicht gesendet und das bei Firefox bei Chorem geht alles perfekt.

Code: Alles auswählen

$Form = &$this->getForm('Abbort');
if ($Form->isSent()) {
 .......
}
 
Alle normalen buttons im Formular funktionieren nur der imagebutton nicht.

mfg Christian

PS: nutze API v1.15

PSS: Der Button wird so eingebaut:

Code: Alles auswählen

$ObjectID = $Form->addFormElementBeforeMarker('BuildingContent','form:imagebutton',array('style' => 'border:0px; width:20px;', 'src' => 'apps/sites/gateworld-beta1/pres/images/icons/error.gif', 'title' => $TemplateCancel->transformTemplate(), 'name' => 'cancel_'.$BaseBuildingObject->get('BuildingID'), 'value' => 'Abbrechen')); 

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: form:imagebutton wird nicht gesendet

Beitrag von dr.e. » 06.12.2012, 00:16:46

Hallo Christian,

vielen Dank für deinen Report. Für die weitere Bearbeitung interessieren mich zwei Punkte:
  • Ist der Output von

    Code: Alles auswählen

    $BaseBuildingObject->get('BuildingID') 
    für jeden Request gleich? Falls nein, kann der Trigger natürlich nicht ausgelöst werden.
  • Steht der Call für addFormElementBeforeMarker() vor $Form->isSent()? Falls nein, kann das evtl. auch zu Problemen führen.
Viele Grüße,
Christian

GeneralCrime
Beiträge: 77
Registriert: 14.12.2011, 07:13:16

Re: form:imagebutton wird nicht gesendet

Beitrag von GeneralCrime » 21.12.2012, 14:02:08

Sorry das ich mich erst so spät melde hatte erstmal einen Normalen Button genommen.
Ist der Output von
$BaseBuildingObject->get('BuildingID')
für jeden Request gleich? Falls nein, kann der Trigger natürlich nicht ausgelöst werden.
Ja der ändert sich nicht nur falls mehrere Buttons existieren gibt es natürlich unterschiedliche IDs
Steht der Call für addFormElementBeforeMarker() vor $Form->isSent()? Falls nein, kann das evtl. auch zu Problemen führen.
Ja auch dies ist korrekt das Formular wird erst komplett erstellt und dann isSent() geprüft. Sonst würde der Normale Button ja auch versagen.

PS Nutze: 1.15-stable
Habe nur Änderungen im Pfad für Configs getätigt context vor namespace gesetzt da ich es vorziehe alle configs eines projekts direkt zu haben als alle configs eines moduls. Aber dies nimmt ja keinen einfluss dadrauf.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: form:imagebutton wird nicht gesendet

Beitrag von dr.e. » 21.12.2012, 20:16:27

Hallo,

ok, verstanden. Kannst du mir bitte einen Gefallen tun und ein kleines Beispiel für die Reproduzierbarkeit bauen und hier posten? Ich fixe das dann im Anschluss.
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: form:imagebutton wird nicht gesendet

Beitrag von dr.e. » 12.01.2013, 10:31:55

Hi,

ich habe mir das Thema gerade im Detail angesehen und konnte den Fehler im form_taglib_imagebutton reproduzieren. Da du das APF in der Version 1.15 einsetzt, schlage ich einen manuellen Patch vor. Im aktuellen Entwicklungszweig 1.17 habe ich den Fehler im SVN behoben.

Bitte ergänze im File /apps/tools/form/taglib/form_taglib_imagebutton.php in der Klasse form_taglib_imagebutton die folgende Methode:

Code: Alles auswählen

   public function onParseTime() {

      $buttonName = $this->getAttribute('name');
      if ($buttonName === null) {
         $formName = $this->getParentObject()->getAttribute('name');
         throw new FormException('[ImageButtonTag::onAfterAppend()] Missing required attribute '
               . '"name" in <form:imagebutton /> tag in form "' . $formName . '". '
               . 'Please check your form definition!', E_USER_ERROR);
      }

      // check name attribute in request to indicate, that the
      // form was sent. Mark button as sent, too. Due to potential
      // XSS issues, we distinguish between GET and POST requests
      $method = strtolower($this->getParentObject()->getAttribute(HtmlFormTag::$METHOD_ATTRIBUTE_NAME));
      if ($method == HtmlFormTag::$METHOD_POST_VALUE_NAME) {
         if (isset($_POST[$buttonName . '_x']) && isset($_POST[$buttonName . '_y'])) {
            $this->controlIsSent = true;
         }
      } else {
         if (isset($_GET[$buttonName . '_x']) && isset($_GET[$buttonName . '_y'])) {
            $this->controlIsSent = true;
         }
      }
   } 
Damit wird das Formular für den Button ausgelöst und sofern der Validator auf den Image-Button registriert ist auch ausgelöst.

Hoffe das hilft dir weiter!
Viele Grüße,
Christian

GeneralCrime
Beiträge: 77
Registriert: 14.12.2011, 07:13:16

Re: form:imagebutton wird nicht gesendet

Beitrag von GeneralCrime » 21.04.2013, 13:30:07

Super das der Fehler gefunden wurde.
Mittlerweile nutze ich ja schon 1.17 und denke werde diesen einen Button den ich hatte wieder in ein Image ändern.

Sorry das ich mich nicht gemeldet habe.
Es ging nur um 1 einzigen Button den ich dann zum normalen gemacht habe.
Das Thema war dann für mich erledigt, und hatte das hier auch ganz vergessen.

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast