*/ require_once(PATH_tslib."class.tslib_pibase.php"); class tx_vjforms_validationRule extends tslib_pibase { /**/ var $scriptRelPath = "pi1/class.tx_vjforms_validationRule.php"; var $extKey = "vjforms"; var $className = "tx_vjforms_validationRule"; /** *Der Name des zu validierenden Elements */ var $elementName; /** *Das Label des zu validierenden Elements */ var $elementLabel; /** *Zusätzliche Parameter, die bei bestimmten Validierungsregeln erforderlich sein können *wird von jeder Unterklasse individuell genutzt */ var $additionalParams; /** *Konstruktor *@param string der Name des zu validierenden Elements *@param string das Label des zu validierenden Elements *@param string|int|array Zusätzliche Parameter, die bei bestimmten Validierungsregeln erforderlich sein können */ function tx_vjforms_validationRule($elementName, $elementLabel = null, $additionalParams = null) { $this->tslib_pibase(); $this->pi_loadLL(); $this->elementName = $elementName; //ist das Label nicht gesetzt, dann den Elementnamen dafür verwenden if($elementLabel == null) { $this->elementLabel = $elementName; } else { $this->elementLabel = $elementLabel; } //Endet das Label mit einem ":", dann diesen abschneiden (ist sinnvoller //bei Fehlerausgabe bei Nichteinhalten der Validierungsfunktion if(strrpos($this->elementLabel, ':') == strlen($this->elementLabel)-1) { $this->elementLabel = substr($this->elementLabel, 0, strlen($this->elementLabel)-1); } $this->additionalParams = $additionalParams; } /** *prüft, ob ein Element mit dem Namen $elementName in den zu validierenden Daten existiert *die Methode ist von allen Unterklassen zu überschreiben und als erstes aufzurufen. In der *überschriebenen Methode muss eine Unterklasse von tx_vjforms_validationRule anschliessend den eigentlichen *Validierungsvorgang implementieren und den Elementinhalt zurückgeben, falls die Validierung *erfolgreich war, ansonsten false *@param array $data die Daten, in denen das Element gesucht werden soll (z.B. $_POST) *@returns true|tx_vjforms_pi1_Error Fehler, wenn kein Element mit dem Namen $elementName in den *Daten existiert, true sonst */ function apply($data) { //überprüfen, ob Element mit angegebenen Namen in Daten existiert if(!array_key_exists($this->elementName, $data)) { return $this->throwError($this->elementLabel); } return true; } /** Gibt true zurück, falls das Element ausgefüllt werden muss * @return boolean */ function isRequired() { return 0; } function getErrorMessage($classname, $str1, $str2 = "") { return sprintf($this->pi_getLL($classname), $str1, $str2); } function throwError($str1, $str2 = "") { return tx_vjforms_pi1::throwError($this->pi_getLL("tx_vjforms_validationError"), 0, $this->getErrorMessage($this->className, $str1, $str2)); } function throwErrorSuffix($suffix,$str1, $str2 = "") { return tx_vjforms_pi1::throwError($this->pi_getLL("tx_vjforms_validationError"), 0,$this->getErrorMessage($this->className.'.'.$suffix, $str1, $str2)); } } /** *Validierungsregel, die überprüft, ob ein Element nicht mehr als n Zeichen enthält *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_validationRuleMaxLength extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleMaxLength"; /** *Konstruktor *@param string der Name des zu validierenden Elements *@param string das Label des zu validierenden Elements *@param int die Anzahl Zeichen, die der Elementinhalt nicht überschreiten darf */ function tx_vjforms_validationRuleMaxLength($elementName, $elementLabel, $additionalParams) { parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } /** *überprüft, ob ein Element nicht mehr als n Zeichen enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt zu lang oder das Element nicht existent, der *Elementinhalt sonst */ function apply($data) { //Super-Methode aufrufen $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } //Prüfen, ob Elementinhalt nicht zu lang if(strlen($data[$this->elementName]) > $this->additionalParams) { return $this->throwError($this->elementLabel, $this->additionalParams); } //Bei Erfolg Elementinhalt zurückliefern return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, ob ein Element nicht weniger als n Zeichen enthält *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_validationRuleMinLength extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleMinLength"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements *@param int die Anzahl Zeichen, die der Elementinhalt nicht *unterschreiten darf */ function tx_vjforms_validationRuleMinLength($elementName, $elementLabel, $additionalParams) { parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } /** *überprüft, ob ein Element nicht weniger als n Zeichen enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt zu lang oder das Element nicht existent, der *Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } if(strlen($data[$this->elementName]) < $this->additionalParams) { return $this->throwError($this->elementLabel, $this->additionalParams); } return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, ob ein Element nur Ziffern enthält *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_validationRuleIsNumeric extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsNumeric"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRuleIsNumeric($elementName, $elementLabel = null) { parent::tx_vjforms_validationRule($elementName, $elementLabel, null); } /** *überprüft, ob ein Element nur Ziffern enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt nicht nur Ziffern enthält oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } if(!preg_match ("/^\d+$/", $data[$this->elementName]) && !$data[$this->elementName] == '') { return $this->throwError($this->elementLabel); } return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, ob ein Element einer regulären Expression entspricht *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_validationRulePregMatch extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRulePregMatch"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRulePregMatch($elementName, $elementLabel, $additionalParams) { parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } /** *überprüft, ob ein Element nur Ziffern enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt nicht nur Ziffern enthält oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } if(!preg_match ('/'.$this->additionalParams[0].'/', $data[$this->elementName]) && !$data[$this->elementName] == '') { return $this->throwError($this->elementLabel, $this->additionalParams[1]); } return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, ob ein Element nur Ziffern enthält *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_validationRuleIsAlphaNumeric extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsAlphaNumeric"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRuleIsAlphaNumeric($elementName, $elementLabel = null) { parent::tx_vjforms_validationRule($elementName, $elementLabel, null); } /** *überprüft, ob ein Element nur Ziffern enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt nicht nur Ziffern enthält oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } if(!preg_match ("/^[0-9a-zA-Z]+$/", $data[$this->elementName]) && !$data[$this->elementName] == '') { return $this->throwError($this->elementLabel); } return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, ob ein Element leer ist *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_validationRuleMustNotBeEmpty extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleMustNotBeEmpty"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRuleMustNotBeEmpty($elementName, $elementLabel) { parent::tx_vjforms_validationRule($elementName, $elementLabel, null); } /** *überprüft, ob ein Element nein Element leer ist *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt leer ist oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } if(strlen($data[$this->elementName]) == 0) { return $this->throwError($this->elementLabel); } return $data[$this->elementName]; } function isRequired() { return true; } } /** *Validierungsregel, die überprüft, dass ein Element nur Werte aus einem vorher angegebenen *Array enthält *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_validationRuleInArray extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleInArray"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements *@param array Array mit den Werten, die das Element annehmen darf */ function tx_vjforms_validationRuleInArray($elementName, $elementLabel, $additionalParams) { parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } /** *wendet die Regel an *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error tx_vjforms_pi1_Error, wenn Elementinhalt nicht einem der Vorgabewerte entspricht oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { //Super-Methode aufrufen $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } //Wurde nur ein möglicher Wert vorgegeben, dann diesen in Array umwandeln if(!is_array($this->additionalParams)) { $this->additionalParams = array($this->additionalParams); } //Wenn das Element nicht einen der vorgegebenen Werte enthält, Fehler zurückgeben if(!in_array($data[$this->elementName], $this->additionalParams)) { return $this->throwError($this->elementLabel); } //Bei Erfolg Elementinhalt zurückliefern return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, dass ein Element KEINEN der Werte aus einem vorher angegebenen *Array enthält *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_validationRuleNotInArray extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleNotInArray"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements *@param array Array mit den Werten, die das Element NICHT annehmen darf */ function tx_vjforms_validationRuleNotInArray($elementName, $elementLabel, $additionalParams) { parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } /** *wendet die Regel an *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error tx_vjforms_pi1_Error, wenn Elementinhalt einem der Vorgabewerte entspricht oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { //Super-Methode aufrufen $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } //Wurde nur ein möglicher Wert vorgegeben, dann diesen in Array umwandeln if(!is_array($this->additionalParams)) { $this->additionalParams = array($this->additionalParams); } //Wenn das Element einem der vorgegebenen Werte entspricht, Fehler zurückgeben if(in_array($data[$this->elementName], $this->additionalParams)) { return $this->throwError($this->elementLabel); } //Bei Erfolg Elementinhalt zurückliefern return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, dass ein Element nicht den Wert "NO_SELECTION" enthält *(gedacht für Radiobuttons oder Listboxen, aus denen ein Wert ausgewählt werden soll) */ class tx_vjforms_validationRuleNoSelectionNotAllowed extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleNoSelectionNotAllowed"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRuleNoSelectionNotAllowed($elementName, $elementLabel = null) { parent::tx_vjforms_validationRule($elementName, $elementLabel, null); } /** *wendet die Regel an *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error tx_vjforms_pi1_Error, wenn Elementinhalt NO_SELECTION ist oder das Element nicht existent, *der Elementinhalt sonst */ function apply($data) { //Super-Methode aufrufen $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } //Wenn das Element NO_SELECTION entspricht, Fehler zurückgeben if($data[$this->elementName] == NO_SELECTION) { return $this->throwError($this->elementLabel); } //Bei Erfolg Elementinhalt zurückliefern return $data[$this->elementName]; } function isRequired() { return true; } } /** *Validierungsregel, die überprüft, ob ein Element nur Ziffern enthält *@package jaMVC *@author Vincent Tietz */ class tx_vjforms_validationRuleIsDate extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsDate"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRuleIsDate($elementName, $elementLabel = null) { parent::tx_vjforms_validationRule($elementName, $elementLabel, null); } /** *überprüft, ob ein Element ein Datum im Format YYYY-MM-DD HH:MM:SS enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt kein Datum ist oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } if(!preg_match ("/^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}( [0-9]{2}:[0-9]{2}:[0-9]{2})?$/", $data[$this->elementName]) && !$data[$this->elementName] == '') { return $this->throwErrorSuffix(1, $this->elementLabel); } if(is_string($data[$this->elementName])) { $timestamp = @strtotime($data[$this->elementName]); if ($timestamp === -1) return $this->throwErrorSuffix(2, $this->elementLabel); } return date("Y-m-d H:i:s", $timestamp); } } /** *Validierungsregel, die überprüft, ob ein Element nur Ziffern enthält *@package jaMVC *@author Vincent Tietz */ class tx_vjforms_validationRuleIsShortDateString extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsShortDateString"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRuleIsShortDateString($elementName, $elementLabel = null) { parent::tx_vjforms_validationRule($elementName, $elementLabel, null); } /** *überprüft, ob ein Element ein Datum im Format YYYY-MM-DD HH:MM:SS enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt kein Datum ist oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } if(!preg_match ("/^[0-9]{2}\\.[0-9]{2}\\.[0-9]{4}$/", $data[$this->elementName]) && !$data[$this->elementName] == '') { return $this->throwError($this->elementLabel); } return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, ob ein Element nur Ziffern enthält *@package jaMVC *@author Vincent Tietz */ class tx_vjforms_validationRuleIsShortDate extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsShortDate"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRuleIsShortDate($elementName, $elementLabel = null) { parent::tx_vjforms_validationRule($elementName, $elementLabel, null); } /** *überprüft, ob ein Element ein Datum im Format YYYY-MM-DD HH:MM:SS enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt kein Datum ist oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } $values = explode('.',$data[$this->elementName]); $day = $values[0]; $month = $values[1]; $year = $values[2]; $day = (strlen($day) < 2) ? ($day = "0".$day) : $day; $month = (strlen($month) < 2) ? ($month = "0".$month) : $month; if($year == "") $year = strftime("%Y"); else $year = (strlen($year) == 2) ? ($year = "20".$year) : $year; $data[$this->elementName] = $day.".".$month.".".$year; if(!preg_match ("/^[0-9]{2}\\.[0-9]{2}\\.[0-9]{4}$/", $data[$this->elementName]) && !$data[$this->elementName] == '') { return $this->throwErrorSuffix(1, $this->elementLabel); } if(is_string($data[$this->elementName])) { $date = tx_vjforms_validator::transformDate($data[$this->elementName]); $timestamp = @strtotime($date); if ($timestamp === -1) return $this->throwErrorSuffix(2, $this->elementLabel); } //return date("d.m.Y", $timestamp); return $data[$this->elementName]; } } /** *Validierungsregel, die überprüft, ob ein Element nur Ziffern enthält *@package jaMVC *@author Vincent Tietz */ class tx_vjforms_validationRuleIsTime extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsTime"; /** *Konstruktor *@param string Name des zu validierenden Elements *@param string Label des zu validierenden Elements */ function tx_vjforms_validationRuleIsTime($elementName, $elementLabel = null) { parent::tx_vjforms_validationRule($elementName, $elementLabel, null); } /** *überprüft, ob ein Element ein Datum im Format YYYY-MM-DD HH:MM:SS enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt kein Datum ist oder *das Element nicht existent, der Elementinhalt sonst */ function apply($data) { $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } if(preg_match ("/^[0-9]{1}:[0-9]{2}$/", $data[$this->elementName]) && !$data[$this->elementName] == '') { $data[$this->elementName] = "0".$data[$this->elementName]; } if(!preg_match ("/^[0-9]{2}:[0-9]{2}$/", $data[$this->elementName]) && !$data[$this->elementName] == '') { return $this->throwErrorSuffix(1, $this->elementLabel); } if(is_string($data[$this->elementName])) { $timestamp = @strtotime($data[$this->elementName]); if ($timestamp === -1) return $this->throwErrorSuffix(2, $this->elementLabel); } return $data[$this->elementName]; //return date("H:i", $timestamp); } } /** *Validierungsregel, die überprüft, ob ein Element nicht mehr als n Zeichen enthält *@package jaMVC *@author Vincent Tietz */ class tx_vjforms_validationRuleIsLessThan extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsLessThan"; /** *Konstruktor *@param string der Name des zu validierenden Elements *@param string das Label des zu validierenden Elements *@param Vergleichsobjekt */ function tx_vjforms_validationRuleIsLessThan($elementName, $elementLabel, $additionalParams) { parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } /** *überprüft, ob ein Element nicht mehr als n Zeichen enthält *@param array die Daten, auf die die Regel anzuwenden ist (z.B. $_POST) *@return string|tx_vjforms_pi1_Error Fehler, wenn Elementinhalt größer als Minimum, der *Elementinhalt sonst */ function apply($data) { //Super-Methode aufrufen $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } //Prüfen, ob Elementinhalt nicht zu lang if($data[$this->elementName] < $this->additionalParams) { return $this->throwError($this->elementLabel, $this->additionalParams); } //Bei Erfolg Elementinhalt zurückliefern return $data[$this->elementName]; } } class tx_vjforms_validationRuleIsEmail extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsEmail"; function tx_vjforms_validationRuleIsEmail($elementName, $elementLabel, $additionalParams) { parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } function apply($data) { $email = $data[$this->elementName]; // checks proper syntax if( !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $email)) { return $this->throwError($this->elementLabel); } error_reporting(1); // gets domain name list($username,$domain)=split('@',$email); // checks for if MX records in the DNS $mxhosts = array(); if(!getmxrr($domain, $mxhosts)) { // no mx records, ok to check domain if (!fsockopen($domain,25,$errno,$errstr,30)) { return $this->throwError($this->elementLabel); } else { return $email; } } else { // mx records found foreach ($mxhosts as $host) { if (fsockopen($host,25,$errno,$errstr,30)) { return $email; } } return $this->throwError($this->elementLabel); } error_reporting(E_ALL); } /** * GetMXRR for Windows */ function getmxrr($hostname, &$mxhosts) { $mxhosts = array(); exec('nslookup -type=mx '.$hostname, $result_arr); foreach($result_arr as $line) { if (preg_match("/.*mail exchanger = (.*)/", $line, $matches)) $mxhosts[] = $matches[1]; } return( count($mxhosts) > 0 ); }//--End of workaround } class tx_vjforms_validationRuleIsEqual extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsEqual"; function tx_vjforms_validationRuleIsEqual($elementName, $elementLabel, $additionalParams) { parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } function apply($data) { if(is_array($this->additionalParams)) { if($data[$this->elementName] != $data[$this->additionalParams["elementName"]]) return $this->throwError($this->elementLabel, $this->additionalParams["elementLabel"]); } else { if($data[$this->elementName] != $data[$this->additionalParams]) return $this->throwError($this->elementLabel, $this->additionalParams); } return $data[$elementName]; } } // Validation Rule to check Uploaded Filetype class tx_vjforms_validationRuleIsFileType extends tx_vjforms_validationRule { var $className = "tx_vjforms_validationRuleIsFileType"; function tx_vjforms_validationRuleIsFileType($elementName, $elementLabel, $additionalParams) { // call super constructor parent::tx_vjforms_validationRule($elementName, $elementLabel, $additionalParams); } function apply($data) { var_dump($data); // call super method $res = parent::apply($data); if(tx_vjforms_pi1::isError($res)) { return $res; } var_dump($this->additionalParams); var_dump(array_pop(explode(".",$this->additionalParams))); if($data[$this->additionalParams]) { switch ($data[$this->additionalParams]) { //Audio case '1': /* $fileType = array ( 1=> 'wav', 2=> 'mp3', 3=> 'rpm', 4=> 'ra', 5=> 'ram' */ if(preg_match("/*.(wav|mp3|rpm|ra|ram|jpg)$/", $data[$elementName])) /*if (!in_array(array_pop(explode(".",$data[$elementName])),$fileType)){ */ return $this->throwError($this->elementLabel); break; //Applet case '2': { $fileType = array ( 1=> '' ); } break; //CSS case '3' : { $fileType= array ( 1 => 'css' ); if (!in_array(array_pop(explode(".",$data[$elementName])), $fileType)) return $this->throwError($this->elementLabel); } break; //Image case '4' :{ $fileType= array ( 1=> 'jpg', 2=> 'gif', 3=> 'tiff' ); if (!in_array(array_pop(explode(".",$data[$this->elementName])), $fileType)) return $this->throwError($this->elementLabel); } break; //Javascript case '5' :{ $fileType= array ( 1=> 'js' ); if (!in_array(array_pop(explode(".",$data[$elementName])), $fileType)) return $this->throwError($this->elementLabel); } break; //Multimedia case '6' : { $fileType= array ( 1=> 'swf' ); if (!in_array(array_pop(explode(".",$data[$elementName])), $fileType)) return $this->throwError($this->elementLabel); } break; //Text case '7' :{ $fileType= array ( 1=> 'txt', 2=> 'html', 3=> 'htm', ); if (!in_array(array_pop(explode(".",$data[$elementName])), $fileType)) return $this->throwError($this->elementLabel); } break; //Video case '8' : { $fileType= array ( 1=> 'avi', 2=> 'mpg', 3=> 'mpeg', 4=> 'mov', 5=> 'gt' ); if (!in_array(array_pop(explode(".",$data[$elementName])), $fileType)) return $this->throwError($this->elementLabel); } break; //Other Media case '9' :{ $fileType= array ( ); } break; } } // all ok return value return $data[$elementName]; } } if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/vjforms/pi1/class.tx_vjforms_validationRule.php"]) { include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/vjforms/pi1/class.tx_vjforms_validationRule.php"]); } ?> message = $message; $this->code = $code; $this->userinfo = $userinfo; } function toString() { return $this->message.' '.$this->userinfo; } function isError($data) { if (is_object($data) && (get_class($data) == 'tx_vjforms_error' || is_subclass_of($data, 'tx_vjforms_error'))) { return true; } return false; } } if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/vjforms/pi1/class.tx_vjforms_error.php"]) { include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/vjforms/pi1/class.tx_vjforms_error.php"]); } ?>name = $name; $this->EC = new tx_vjforms_errorContainer(); }*/ /** *Konstruktor *@param string der Name des Elements (muss einmalig für das enthaltende Formular sein) *@param string das Label, das neben dem Element angezeigt wird *@param string|int der voreingetragene Wert des Elements (bei Textfeldern oder Radiogroups) *@param string die CSS-Klasse, mit der das Element dargestellt werden soll (Wert des *HTML-Attributs "class") */ function tx_vjforms_element($name = "", $label = "", $value = "", $cssClass = null) { $this->init($name, $label, $value, $cssClass); } function init($name = '', $label = "", $value = "", $cssClass = null) { $this->name = $name ? $name : md5(microtime()); $this->label = $label; $this->cssClass = $cssClass; if(!is_array($value)) { $this->value = htmlspecialchars($value); } else { $this->value = $value; } $this->EC = new tx_vjforms_errorContainer(); } /** *fügt eine Validierungsregel für das Element hinzu *@param string der Klassenname der Regel (vorzugsweise eine der in der *class.Validator.php deklarierten Konstanten) *@param mixed die zusätzlichen Parameter, die für die Regel ggf. notwendig sind */ function addValidationRule($validationRuleName, $additionalParams = null) { //neue Validierungsregel mit Elementnamen und -label hinzufügen $this->validationRules[$validationRuleName] = new $validationRuleName($this->name, $this->label, $additionalParams); } /** *validiert das Element * *überprüft das Element in den übergebenen POST-Daten vorhanden ist und wendet *die Validierungsregeln dieses Elements an *@param array Das Array, für das die Validierung durchgeführt werden soll *(normalerweise die POST-Daten) *@return Array ist das Element erfolgreich validiert, wird ein indiziertes *Array der Form Elementname => Elementinhalt zurückgegeben, sonst ein Array *der Form Elementname => ErrorContainer (enthält die Validierungsfehler) *Die Rückgabe als Array wurde wg. der Kompatibilät zu ElementGroup gewählt */ function validate($post) { $VL = new tx_vjforms_validator($post); $theValue = array(); foreach ($this->validationRules as $rule) { //var_dump($rule); $res = $VL->validate($rule); if(tx_vjforms_pi1::isError($res)) { $this->EC->addError($res); // $EC->addError($res); } } if($this->EC->getErrorCount() > 0) { //$theValue[$this->name] = $EC; return $this->EC; } else { //$theValue[$this->name] = $VL->getValue($this->name); $theValue[$this->name] = $this->value; } return $theValue; } /** *setzt den voreingestellten Wert des Elements *@param mixed der zu setzende Wert */ function setValue($value) { if(!is_array($value)) { $this->value = htmlspecialchars($value); } else { $this->value = $value; } } /** *setzt den Wert des Elements anhand eines indizierten Arrays * *Existiert im übergebenen Array ein Eintrag mit dem Namen dieses Elements, *wird der dort gespeicherte Wert als value für das HTML-Element übernommen; *wird aufgerufen von Form-Instanzen, die auf autoFillInOnError *gestellt sind; diese zeigen das Formular nach einem Submitfehler (zB. Verletzung von *Validierungsregeln) erneut an und übernehmen dabei die zuvor per POST übermittelten Werte *@param array das Array, aus dem der Wert übernommen werden soll */ function setValueByArray($data) { if(!is_array($data)) { $data = array($data); } // if(array_key_exists($this->name, $data)) { $this->setValue($data[$this->name]); // } } /** *liefert den HTML-Code des Elements zurück *@return string der HTML-Code des Elements *@abstract */ function getHtml() { } function enable() { $this->enabled = true; } function disable() { $this->enabled = false; } function isRequired() { foreach ($this->validationRules as $rule) { if ($rule->isRequired()) return true; } return false; } function addError($error) { $this->EC->addError($error); } function hasErrors() { return $this->EC->getErrorCount(); } function makeId($string) { $theValue = ereg_replace('[\[|\_]','-',$string); $theValue = str_replace(']','',$theValue); return $theValue; } function getId() { $theValue = $this->name; return $this->makeId($this->name); } function makeAttributes($array = NULL) { if(!is_array($array)) $array = array($array); // defaults $array['name'] = $array['name'] ? $array['id'] : $this->name; $array['id'] = $array['id'] ? $array['id'] : $this->getId(); if($array['class']) $class = $array['class']; else { $class = $this->makeId(get_class($this)).' label-'.$this->renderLabel; if($this->cssClass) { $class .= ' '.$this->cssClass; } } $array['class'] = $class; $array['disabled'] = $array['disabled'] ? $array['disabled'] : ($this->enabled ? '' : 'disabled'); $array['title'] = $array['title'] ? $array['title'] : ($this->title ? $this->title : $this->label); if(!$this->visible) { $array['class'] = ''; $array['title'] = ''; $array['size'] = ''; } $theValue = ''; foreach($array as $key => $value) { if($value != NULL) $theValue .= ' '.$key.'="'.$value.'"'; } return $theValue; } } /** *Eine Gruppe von HTML-Elementen * *dient zur Anordnung von Elementen, wenn ein einfaches *Template des umschliessenden Formulars nicht ausreicht; (Beispiel: Ein Formular zeigt *alle Elemente untereinander in einer Tabelle an (Spalte für Label, Spalte für Element selbst), *und unten sollen zwei Buttons nebeneinander erscheinen; diese Buttons können dann in einer *Gruppe zusammengefasst werden, die ein eigenes Template besitzt; Die Gruppe dient dabei nur *zur optischen Gruppierung, trotzdem tauchen alle Elemente des umschliessenden Formulars *alle gleichberechtigt und ohne Gruppierungen in den POST-Daten auf *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_elementGroup extends tx_vjforms_element { /** *die in der Gruppe enthaltenen HTML-Elemente */ var $elements = array(); var $seperator; /**Konstruktor *@param Name der Gruppe *@param Label der Gruppe *@param Name der Template-Datei */ function tx_vjforms_elementGroup($name = '', $label = '', $seperator = '') { $this->tx_vjforms_element($name, $label, ""); $this->seperator = $seperator ? $seperator : '   '; } /** *fügt ein tx_vjforms_element zur Gruppe hinzu *@param tx_vjforms_element das hinzuzufügende Element *@return bool liefert true zurück, wenn das Hinzufügen erfolgreich war, false *sonst (weil schon ein Element gleichen Namens in der Gruppe existierte) */ function addElement(&$element) { if(array_key_exists($element->name, $this->elements)) { return false; } else { $this->elements[$element->name] =& $element; return true; } } /** *liefert HTML-Code der Gruppe zurück *@return string der HTML-Code der Gruppe */ function getHtml() { foreach($this->elements as $element) { $theValue .= $element->getHtml().$this->seperator; } $theValue = substr($theValue,0, strlen($theValue)-strlen($this->seperator)); return '
'.$theValue.'
'; } function disable() { foreach($this->elements as $key => $element) { $this->elements[$key]->enabled = false; } } function enable() { foreach($this->elements as $key => $element) { $this->elements[$key]->enabled = true; } } /** *validiert die Gruppe * *dazu wird die validate()-Methode der in der Gruppe enthaltenene Elemente *aufgerufen *@param array Das Array, für das die Validierung durchgeführt werden soll *(normalerweise die POST-Daten) *@return array liefert ein indiziertes Array mit den Validierungsergebnissen *der enthaltenen HTML-Elemente zurück */ function validate($post) { //sammelt die Validierungsergebnisse der einzelnen Elemente ein $theValue = array(); //Elemente durchlaufen foreach ($this->elements as $element) { //Element validieren und bei Erfolg zu den validatedElements stecken $res = $this->elements[$element->name]->validate($post); $theValue = array_merge($theValue, $res); } return $theValue; } /** *setzt für die enthaltenen Elemente Vorgabewerte aus einem indizierten Array ein * *delegiert dazu den Methodenaufruf an alle in der Gruppe enthaltenen Elemente *@param array anhand dessen die Werte zu setzen sind */ function setValueByArray($data) { foreach($this->elements as $element) { $this->elements[$element->name]->setValueByArray($data); } } /** *ruft setErrorOnValidation() aller in der Gruppe enthaltenen Elemente auf *@param bool der zu setzende Wert */ function setErrorOnValidation($boolean) { $this->errorOnValidation = $boolean; foreach($this->elements as $element) { $this->elements[$element->name]->errorOnValidation = $boolean; } } } /** *eine Formularschaltfläche (z.B. zum Absenden des Formulars) *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_button extends tx_vjforms_element { /** *Der Typ des Buttons (entweder "submit" oder "reset" order "image") */ var $renderLabel = 0; var $image = NULL; /** *Konstruktor *@param string der Name des Buttons *@param string das Label, das neben dem Button angezeigt wird (meist leer) *@param string die Beschriftung des Buttons (z.B. "Absenden") *@param string der Typ des Buttons ("submit" oder "reset") *@param string die CSS-Klasse, mit der der Button dargestellt werden soll (Wert des *HTML-Attributs "class") */ function tx_vjforms_button($name = '', $label = '', $value = '', $type = '', $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->type = $type ? $type : 'submit'; } /** *liefert HTML-Code des Buttons zurück *@return string der HTML-Code des Buttons */ function getHtml() { $attribs = array(); $attribs['type'] = $this->type; $attribs['value'] = $this->value; $attribs['title'] = $this->value; if($this->image) { $attribs['src'] = $this->image['src']; $attribs['width'] = $this->image['width']; $attribs['height'] = $this->image['height']; $attribs['alt'] = $this->image['alt']; } return 'makeAttributes($attribs).' />'; } /** *validiert das Element * *Ist der Typ des Buttons "reset", wird dieser nicht per POST übermittelt; *darum wird in diesem Fall ein Eintrag im übergebenen Array angelegt und dann *tx_vjforms_element::validate() aufgerufen *@param array Das Array, für das die Validierung durchgeführt werden soll *(normalerweise die POST-Daten) *@return array liefert ein indiziertes Array mit dem Validierungsergebnis zurück */ function validate($post) { if($this->type == 'reset') { $post[$this->name] = $this->value; } return parent::validate($post); } function setValue($value) { } } /** *repräsentiert eine Schaltfläche, die bei Anklicken zu einer Url wechselt *(JavaScript beim Nutzer muss aktiviert sein); Kann z.B. sinnvoll sein für Abbrechenbuttons, *die als Url Werte wie $_SERVER['PHPSELF']."?vid=xy" enthalten (vid der vorherigen Seite) *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_navigationButton extends tx_vjforms_element { /** *Die Url, zu der beim Klicken gewechselt werden soll */ var $link; /** *Konstruktor *@param string der Name des Buttons *@param string das Label, das neben dem Button angezeigt wird (meist leer) *@param string die Beschriftung des Buttons (z.B. "Weg hier") *@param string Die Url, zu der beim Klicken des Buttons gewechselt wird *@param string die CSS-Klasse, mit der der Button dargestellt werden soll (Wert des *HTML-Attributs "class") */ function tx_vjforms_navigationButton($name = '', $label = '', $value = '', $link = '', $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->link = $link; } /** *liefert HTML-Code des Buttons zurück *@return string der HTML-Code des Buttons */ function getHtml() { $attribs = array(); $attribs['type'] = 'button'; $attribs['value'] = $this->value; $attribs['title'] = $this->value; $attribs['onClick'] = 'self.location.href=\''.$this->link. '\''; return 'makeAttributes($attribs).' />'; } function setValue($value) { } /** *validiert das Element * *Dieses Element wird nicht per POST übermittelt; *darum wird ein Eintrag im übergebenen Array angelegt und dann *tx_vjforms_element::validate() aufgerufen *@param array Das Array, für das die Validierung durchgeführt werden soll *(normalerweise die POST-Daten) *@return array liefert ein indiziertes Array mit dem Validierungsergebnis zurück */ function validate($post) { $post[$this->name] = $this->value; return parent::validate($post); } } /** *repräsentiert eine Schaltfläche, der beliebiger HTML-Code übergeben werden kann, der *dann im Tag ausgegeben wird; z.B. 'onclick="javascript:xy()"' *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_eventButton extends tx_vjforms_element { /** *beliebiger Code, der im HTML-Tag des Buttons ausgegeben wird */ var $event; /** *Konstruktor *@param string der Name des Buttons *@param string das Label, das neben dem Button angezeigt wird (meist leer) *@param string die Beschriftung des Buttons *@param string Der HTML-Code, der im Tag ausgegeben wird *@param string die CSS-Klasse, mit der der Button dargestellt werden soll (Wert des *HTML-Attributs "class") */ function tx_vjforms_eventButton($name = '', $label = '', $value = '', $event = '', $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->event = $event; } /** *liefert HTML-Code des Buttons zurück *@return string der HTML-Code des Buttons */ function getHtml() { $attribs = array(); $attribs['type'] = 'button'; $attribs['value'] = $this->value; $attribs['title'] = $this->value; $attribs['alt'] = $this->value; return 'makeAttributes($attribs).' '.$this->event. '/>'; } /** *validiert das Element * *Dieses Element wird nicht per POST übermittelt; *darum wird ein Eintrag im übergebenen Array angelegt und dann *tx_vjforms_element::validate() aufgerufen *@param array Das Array, für das die Validierung durchgeführt werden soll *(normalerweise die POST-Daten) *@return array liefert ein indiziertes Array mit dem Validierungsergebnis zurück */ function validate($post) { $post[$this->name] = $this->value; return parent::validate($post); } function setValue($value) { } } /** *repräsentiert ein HTML-Textfeld *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_textField extends tx_vjforms_element { /** *Die Breite des Textfeldes in Zeichen */ var $size; /** *Die Anzahl an Zeichen, die in das Textfeld maximal eingebbar sind */ var $maxLength; var $type = 'text'; /** *Konstruktor *@param string der Name des Textfeldes (muss einmalig für das enthaltende Formular sein) *@param string das Label, das neben dem Textfeld angezeigt wird *@param string der voreigetragene Text des Feldes *@param int die Breite des Textfeldes in Anzahl der Zeichen *@param int die maximale Anzahl an Zeichen, die in das Feld eingegeben werden kann *@param bool gibt an ob das Textfeld "hidden" sein soll *@param string die CSS-Klasse, mit der der Button dargestellt werden soll (Wert des *HTML-Attributs "class") */ function tx_vjforms_textField($name = '', $label = '', $value = '', $size = '', $maxLength = null, $visible = true, $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->size = $size; $this->maxLength = $maxLength; $this->visible = $visible; } /** *liefert HTML-Code des TextFields zurück *@return string der HTML-Code des TextFields */ function getHtml() { $attribs = array(); $attribs['type'] = $this->visible ? $this->type : 'hidden'; $attribs['value'] = $this->value; $attribs['size'] = $this->size; $attribs['maxlength'] = $this->maxLength; return 'makeAttributes($attribs).' '.$this->event. '/>'; } } /** *repräsentiert ein HTML-Textfeld *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_checkBox extends tx_vjforms_element { var $checked; var $caption; var $type = 'checkbox'; function tx_vjforms_checkBox($name = '', $caption = '', $value = '', $checked = false, $cssClass = null) { $this->init($name, '', $value, $cssClass); $this->size = $size; $this->maxLength = $maxLength; $this->label = $caption; $this->renderLabel = 2; } /** *liefert HTML-Code des TextFields zurück *@return string der HTML-Code des TextFields */ function getHtml() { if(!$this->visible) { $input = new tx_vjforms_textField($this->name, '', $this->value, '', 0, 0); $input->visible = false; return $input->getHtml(); } $attribs = array(); $attribs['type'] = $this->visible ? $this->type : 'hidden'; $attribs['value'] = $this->value; $attribs['checked'] = $this->checked ? 'checked' : ''; $attribs['size'] = $this->size; $attribs['maxlength'] = $this->maxLength; $theValue = 'makeAttributes($attribs).' '.$this->event. '/>'; // $theValue .= ''; return $theValue; } function setValueByArray($data) { if(isset($data[$this->name])) { $this->checked = true; $this->value = $data[$this->name]; } else { $this->checked = false; } } } /** *repräsentiert ein Textfeld zur Eingabe von Passwortern (statt Buchstaben werden Sternchen *angezeigt) *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_passwordField extends tx_vjforms_textField { /** *Die Breite des PasswordField in Zeichen */ var $size; /** *Die Anzahl an Zeichen, die in das PasswordField maximal eingebbar sind */ var $maxLength; /** *Konstruktor *@param string der Name des Passwortfeldes (muss einmalig für das enthaltende Formular sein) *@param string das Label, das neben dem Passwortfeld angezeigt wird *@param string der voreigetragene Text des Feldes *@param int die Breite des Passwortfeldes in Anzahl der Zeichen *@param int die maximale Anzahl an Zeichen, die in das Feld eingegeben werden kann *@param string die CSS-Klasse, mit der der Button dargestellt werden soll (Wert des *HTML-Attributs "class") */ function tx_vjforms_passwordField($name = '', $label = '', $value = '', $size = '', $maxLength = '', $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->size = $size; $this->maxLength = $maxLength; $this->type = 'password'; } } /** *repräsentiert ein Textfeld zur Eingabe von Passwortern (statt Buchstaben werden Sternchen *angezeigt) *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_file extends tx_vjforms_textField { /** *Konstruktor *@param string der Name des Passwortfeldes (muss einmalig für das enthaltende Formular sein) *@param string das Label, das neben dem Passwortfeld angezeigt wird *@param string der voreigetragene Text des Feldes *@param int die Breite des Passwortfeldes in Anzahl der Zeichen *@param int die maximale Anzahl an Zeichen, die in das Feld eingegeben werden kann *@param string die CSS-Klasse, mit der der Button dargestellt werden soll (Wert des *HTML-Attributs "class") */ function tx_vjforms_tx_vjforms_file($name = '', $label = '', $value = '', $size = '', $maxLength = '', $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->size = $size; $this->maxLength = $maxLength; $this->type = 'file'; } /** *liefert HTML-Code des PasswordFields zurück *@return string der HTML-Code des PasswordFields */ function getHtml() { $attribs = array(); $attribs['type'] = 'password'; $attribs['value'] = $this->value; $attribs['size'] = $this->size; $attribs['maxlength'] = $this->maxLength; return 'makeAttributes($attribs).' '.$this->event. '/>'; } } /** *repräsentiert eine Gruppe von Radiobuttons mit zugehöriger Beschriftung; nur einer der Buttons *kann ausgewählt werden *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_radioGroup1 extends tx_vjforms_element { /** *assoz. Array mit den Werten für die einzelnen Buttons (value => label) */ var $values; /** *TemplateEngineAdapter */ var $TEA; /** *Konstruktor *@param string der Name der Radiogroup (muss einmalig für das enthaltende Formular sein); *wird mit einem "_" allen Radiobutton-Namen vorangestellt *@param string das Label, das neben der Gruppe angezeigt wird *@param array assoz. Array mit den Werten für die einzelnen Buttons (value => label) *@param int|string der vorausgewählte Wert der Gruppe (muss einer der Values aus dem $values-Array sein) *@param string der Name des zu verwendenden Templates für die Gruppe, ist der *Wert null, wird verticalRadioGroup.tpl.htm verwendet *@param string die CSS-Klasse, mit der die Buttons dargestellt werden sollen */ function tx_vjforms_radioGroup1($name = '', $label = '', $values = '', $value = '', $templateName = null, $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->values = $values; $this->TEA = new TemplateEngineAdapter(); if($templateName == null) { $templateName = 'verticalRadioGroup.tpl.htm'; } $this->TEA->setTemplate($templateName); } /** *liefert HTML-Code der Gruppe zurück *@return string der HTML-Code der Gruppe */ function getHtml() { $this->TEA->assign('values', $this->values); $this->TEA->assign('name', $this->name); $this->TEA->assign('checkedValue', $this->value); $this->TEA->assign('cssClass', $this->cssClass); return $this->TEA->getTemplateContents(); } /** *validiert das Element * *Wurde keine Option ausgewählt, wird die Gruppe nicht per POST übermittelt; *darum wird ein Eintrag im übergebenen Array angelegt und dann *tx_vjforms_element::validate() aufgerufen *@param array Das Array, für das die Validierung durchgeführt werden soll *(normalerweise die POST-Daten) *@return array liefert ein indiziertes Array mit dem Validierungsergebnis zurück */ function validate($post) { //Wurde kein Wert ausgewählt, existiert kein Eintrag in den Post-Daten -> diesen simulieren if(!array_key_exists($this->name, $post)) { $post[$this->name] = NO_SELECTION; } return parent::validate($post); } } /** *repräsentiert eine Gruppe von Checkboxen, von denen mehrere angekreuzt werden dürfen *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_checkboxGroup extends tx_vjforms_element { /** *assoz. Array mit den Werten für die einzelnen Buttons (value => label) */ var $values; var $seperator; var $disabled; var $checked; /** *Konstruktor *@param string der Name der CheckboxGroup (muss einmalig für das enthaltende Formular sein); *wird mit einem "_" allen Checkbox-Namen vorangestellt *@param string das Label, das neben der Gruppe angezeigt wird *@param array assoz. Array mit den Werten für die einzelnen Buttons (value => label) *@param int|string|array der vorausgewählte Wert der Gruppe, kann auch ein Array sein (mit einem/ *mehreren der Values aus dem $values-Array) *@param string der Name des zu verwendenden Templates für die Gruppe, ist der *Wert null, wird verticalCheckboxGroup.tpl.htm verwendet *@param string die CSS-Klasse, mit der die Buttons dargestellt werden sollen */ function tx_vjforms_checkboxGroup($name = '', $label = '', $values = '', $checked = '', $disabled = array(), $seperator = '', $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->values = $values; $this->value = $values; $this->checked = $checked; $this->disabled = $disabled; $this->seperator = $seperator; } /** *liefert HTML-Code der Gruppe zurück *@return string der HTML-Code der Gruppe */ function getHtml() { $theValue = ''; //ggf. ein Array aus den voreingestellten Werten machen if(!is_array($this->value)) { $this->value = array($this->value); } //var_dump($this->values); $theValue = ''; foreach($this->values as $key => $value) { $name = $this->name.'-'.$key; // $name, $label, $caption, $value, $checked = false, $cssClass = null $element = new tx_vjforms_checkbox($name, $value, $key, $this->checked[$key], $this->cssClass); $element->disabled = $this->disabled[$key] || (!$this->enabled); /* $theValue .= 'disabled[$key] || (!$this->enabled)) { $theValue .= ' disabled="disabled"'; } if($this->checked[$key]) $theValue .= ' checked="checked"'; if($cssClass != null) $theValue .= ' class="'.$this->cssClass.'"'; $theValue .=''; $theValue .= $this->seperator; */ } return substr($theValue,0, strlen($theValue)-strlen($this->seperator)); } /** *validiert das Element * *Wurde keine Option ausgewählt, wird die Gruppe nicht per POST übermittelt; *darum wird ein Eintrag im übergebenen Array angelegt und dann *tx_vjforms_element::validate() aufgerufen *@param array Das Array, für das die Validierung durchgeführt werden soll *(normalerweise die POST-Daten) *@return array liefert ein indiziertes Array mit dem Validierungsergebnis zurück */ function validate($post) { //Wurde kein Wert ausgewählt, existiert kein Eintrag in den Post-Daten -> diesen simulieren if(!array_key_exists($this->name, $post)) { $post[$this->name] = NO_SELECTION; } return parent::validate($post); } function setValue($value) { $this->checked = array(); if(!is_array($value)) { return false; } else { foreach($value as $val) { $this->checked[$val] = 1; } } } } class tx_vjforms_radioGroup extends tx_vjforms_checkboxGroup { function getHtml() { $theValue = ''; //ggf. ein Array aus den voreingestellten Werten machen if(!is_array($this->value)) { $this->value = array($this->value); } //var_dump($this->values); $theValue = ''; foreach($this->values as $key => $value) { $theValue .= 'disabled[$key] || (!$this->enabled)) { $theValue .= ' disabled="disabled"'; } if($this->checked[$key]) $theValue .= ' checked="checked"'; if($cssClass != null) $theValue .= ' class="'.$this->cssClass.'"'; $theValue .=''; $theValue .= $this->seperator; } return substr($theValue,0, strlen($theValue)-strlen($this->seperator)); } } /** *repräsentiert eine Listbox (aka Combobox, Dropdown) *@TODO: multiple selection *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_listBox extends tx_vjforms_element { /** *assoz. Array mit den Werten für die einzelnen Buttons (value => label) */ var $values; /** *die Höhe in Zeilen (meist 1) */ var $height; var $multiple; /** *Konstruktor *@param string der Name der Listbox (muss einmalig für das enthaltende Formular sein) *@param string das Label, das neben der Listbox angezeigt wird *@param array assoz. Array mit den Werten für die einzelnen Zeilen der Box (value => label) *@param int|string der vorausgewählte Wert der Listbox (muss eine der Values aus dem $values-Array sein *@param int die Höhe der Box in Zeilen *@param string die CSS-Klasse, mit der die Box dargestellt wird */ function tx_vjforms_listBox($name = '', $label = '', $values = '', $value = '', $height = '', $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->values = $values; $this->height = $height; } /** *liefert HTML-Code der Box zurück *@return string der HTML-Code der Box */ function getHtml() { $attribs = array(); //$attribs['value'] = $this->value; $attribs['size'] = $this->size; $attribs['multiple'] = $this->multiple ? 'multiple' : ''; $attribs['size'] = $this->height ? $this->height : '1'; $theValue = 'makeAttributes($attribs).' '.$this->jsCommand.' '.$this->event. '>'; foreach($this->values as $key => $value) { $theValue .= '\n"; } $theValue .= ''; return $theValue; } } /** *repräsentiert ein mehrzeiliges Texteingabefeld *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_textArea extends tx_vjforms_element { /** *Die Breite des Feldes in Zeichen */ var $cols; /** *Die Höhe des Feldes in Zeilen */ var $rows; /** *Konstruktor *@param string der Name der Textarea (muss einmalig für das enthaltende Formular sein) *@param string das Label, das neben der Textarea angezeigt wird *@param string der voreingetragene Wert der Textarea *@param int die Breite der Textarea in Zeichen *@param int die Höhe der Textarea in Zeilen *@param string die CSS-Klasse, mit der die Textarea dargestellt wird */ function tx_vjforms_textArea($name = '', $label = '', $value = '', $cols = '', $rows = '', $cssClass = null) { $this->init($name, $label, $value, $cssClass); $this->cols = $cols ? $cols : 40; $this->rows = $rows ? $rows : 10; } /** *liefert HTML-Code der TextArea zurück *@return string der HTML-Code der TextArea */ function getHtml() { if(!$this->visible) { $input = new tx_vjforms_textField($this->name, '', $this->value, '', 0, 0); $input->visible = false; return $input->getHtml(); } $attribs = array(); $attribs['value'] = $this->value; $attribs['rows'] = $this->rows; $attribs['cols'] = $this->cols; return 'makeAttributes($attribs).'>'.$this->value.''; } } /** *ein Pseudo-HTML-Element, das zur Ausgabe statischer Werte dient, die der Nutzer zwar *nicht ändern soll, die aber trotzdem im Formular mit auftauchen sollen *@package jaMVC *@author Vincent Tietz & Gunnar Morling */ class tx_vjforms_staticText extends tx_vjforms_element { /** *Konstruktor *@param string der Name des Elements (muss einmalig für das enthaltende Formular sein) *@param string das Label, das neben dem Text angezeigt wird *@param string der Inhalt des Elements */ function tx_vjforms_staticText($name = '', $label = '', $value = '') { $this->init($name, $label, $value); $this->value = $value; $this->renderLabel = 0; } /** *liefert HTML-Code des StaticText zurück *@return string der HTML-Code des StaticText */ function getHtml() { $theValue = 'makeAttributes().'>'.$this->value.'

'; return $theValue; } /** *validiert das Element * *Dieses Element wird nicht per POST übermittelt; *darum wird ein Eintrag im übergebenen Array angelegt und dann *tx_vjforms_element::validate() aufgerufen *@param array Das Array, für das die Validierung durchgeführt werden soll *(normalerweise die POST-Daten) *@return array liefert ein indiziertes Array mit dem Validierungsergebnis zurück */ function validate($post) { return array( $this->name => $this->value ); } } class tx_vjforms_backButton extends tx_vjforms_button { /* function tx_vjforms_backButton($value = '') { $this->init('cancel', '', $value, 'onClick="window.location.href=\''.htmlspecialchars(t3lib_div::getIndpEnv('HTTP_REFERER')).'\'"'); }*/ function tx_vjforms_backButton($value = '') { parent::tx_vjforms_button('tx-vjforms-back', '',$value, 'submit'); } } class tx_vjforms_sectionHeader extends tx_vjforms_element { function tx_vjforms_sectionHeader($name = '', $value = '') { $this->init($name, null, $value); } function getHtml() { return $this->value; } } class tx_vjforms_sectionEnd extends tx_vjforms_element { function tx_vjforms_sectionEnd($name = '') { $this->init($name, null, null); } function getHtml() { return ''; } } if (defined("TYPO3_MODE") && $TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/vjforms/pi1/lib.tx_vjforms_element.php"]) { include_once($TYPO3_CONF_VARS[TYPO3_MODE]["XCLASS"]["ext/vjforms/pi1/lib.tx_vjforms_element.php"]); } ?>