Select Git revision
check_php-fpm-status
formgen.class.php 12.06 KiB
<?php
class formgen {
var $aForm=array();
var $sRequired=' <span title="Eingabe ist erforderlich"><span style="color:#c00;">*</span></span>';
/**
* constructor
* @param array $aNewFormData
* @return boolean
*/
public function __construct($aNewFormData=array()) {
if (count($aNewFormData)) return $this->setFormarray($aNewFormData);
return true;
}
/**
* set a new array
* @param array $aNewFormData
* @return boolean
*/
public function setFormarray($aNewFormData=array()){
if (!is_array($aNewFormData) || !count($aNewFormData)){
return false;
}
return $this->aForm=$aNewFormData;
}
/**
* render a complete form
* @param string $sFormId
* @return string html output
*/
public function renderHtml($sFormId){
$sReturn=false;
if (!array_key_exists($sFormId, $this->aForm)) {
die("ERROR: " . __CLASS__ . ":".__FUNCTION__ . " - form id " . $sFormId . " does not exist.");
}
$sReturn.='<form ';
if (array_key_exists("meta", $this->aForm[$sFormId])){
foreach (array("method","action","target","accept-charset") as $sAttr){
if (array_key_exists($sAttr, $this->aForm[$sFormId]["meta"])){
$sReturn.=$sAttr.'="'.$this->aForm[$sFormId]["meta"][$sAttr].'" ';
}
}
}
$sReturn.='>';
foreach ($this->aForm[$sFormId]["form"] as $elementKey=>$elementData){
$sReturn.=$this->renderHtmlElement($elementKey, $elementData);
}
$sReturn.='</form>';
return $sReturn;
}
/**
* add html attributes if they exist
* @param array $aAttributes list of attributes to search for
* @param array $elementData array of form element
* @return string
*/
private function _addHtmlAtrributes($aAttributes,$elementData){
$sReturn=false;
foreach($aAttributes as $sAtrr){
if (array_key_exists($sAtrr, $elementData) && $elementData[$sAtrr]){
if ($sReturn) $sReturn.=' ';
$sReturn.=$sAtrr.'="'.$elementData[$sAtrr].'"';
}
}
return $sReturn;
}
private function _addLabel($sLabel, $sFor, $sClass=false){
$sReturn=false;
$sReturn='<label for="'.$sFor.'"';
if ($sClass)$sReturn.=' class="'.$sClass.'"';
$sReturn.='>'.$sLabel.'</label>';
$sReturn.="\n";
return $sReturn;
}
private function _checkReqiredKeys($aArray, $aRequiredKeys, $sLabel=false){
$bReturn=true;
foreach ($aRequiredKeys as $sKey){
if (!array_key_exists($sKey, $aArray)){
die("ERROR: $sLabel<br>Missing key \"$sKey\" in the array of a form element:<pre>" . print_r($aArray, true) . "</pre>");
$bReturn=false;
}
}
return $bReturn;
}
/**
* render a single form element
* @param string $sId id of a form element
* @param array $elementData array of form element
* @return string html output
*/
public function renderHtmlElement($sId, $elementData){
$sReturn=false;
$aAllowedHtmlAttributes=array();
$sDefaultAttributes="class,onclick,onmouseover,onmouseout,title";
if (!array_key_exists("type", $elementData)) {
print_r($elementData);
die("ERROR: " . __CLASS__ . ":".__FUNCTION__ . " - key "type" does not exist.");
}
$sFormElement=false;
$sLabelText='';
$sLabelElement=false;
$sHtmlDefault='';
$sHtmlTable='';
if (array_key_exists("label", $elementData)){
$sLabelText=$elementData["label"];
$sLabelText.=(array_key_exists("required", $elementData) && $elementData["required"])?$this->sRequired:'';
}
switch ($elementData["type"]) {
case "button":
$this->_checkReqiredKeys($elementData, array("value"));
$sFormElement.=' <button id="'.$sId.'" ';
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked,name"), $elementData);
$sFormElement.='>'.$elementData["value"].'</button>';
$sFormElement.="\n";
$sHtmlDefault=$sFormElement;
break;
case "checkbox":
$this->_checkReqiredKeys($elementData, array("name"));
foreach ($elementData["options"] as $idOption=>$aOptionData) {
$sFormElement.="\n";
$s=preg_replace('/\W/iu', '', $sId.$idOption);
$sOptionId=preg_replace('/[äöüß]/i', '', $s);
$sFormElement.=' <input type="checkbox" id="'.$sOptionId.'" value="'.$idOption.'" ';
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked"), $aOptionData);
$sFormElement.=' name="'.$elementData["name"].'[]"';
$sFormElement.='/><label for="'.$sOptionId.'">' . $aOptionData["label"] . '</label>';
}
$sFormElement.="\n";
$sLabelElement.='<span class="help-block">'.$sLabelText.'</span>';
$sLabelElement.="\n";
$sHtmlDefault=$sLabelElement.$sFormElement;
$sHtmlTable='<td>'.$sLabelText.'</td><td>'.$sFormElement.'</td>';
break;
case "hidden":
$this->_checkReqiredKeys($elementData, array("value"));
$sFormElement.=' <input type="hidden" id="'.$sId.'" ';
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "name,value"), $elementData);
$sFormElement.=" />";
$sFormElement.="\n";
$sHtmlDefault=$sFormElement."\n";
break;
case "markup":
if (array_key_exists("value", $elementData))
$sHtmlDefault=$elementData["value"]."\n";
break;
case "radio":
$this->_checkReqiredKeys($elementData, array("name"));
foreach ($elementData["options"] as $idOption=>$aOptionData) {
$sFormElement.="\n";
$s=preg_replace('/\W/iu', '', $sId.$idOption);
$sOptionId=preg_replace('/[äöüß]/i', '', $s);
$sFormElement.=' <input type="radio" id="'.$sOptionId.'" value="'.$idOption.'" ';
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,checked"), $aOptionData);
$sFormElement.=" ".$this->_addHtmlAtrributes(explode(",", "name"), $elementData);
$sFormElement.='/><label for="'.$sOptionId.'">' . $aOptionData["label"] . '</label>';
}
$sFormElement.="\n";
if ($sLabelText) {
$sLabelElement.='<span class="help-block">'.$sLabelText.'</span>'."\n";
}
$sHtmlTable='<td>'.$sLabelText.'</td><td>'.$sFormElement.'</td>';
$sHtmlDefault=$sLabelElement.$sFormElement;
// $sReturn.=$this->_addLabel($sFormElement,$sId,"checkbox");
break;
case "select":
// HINWEIS optgroups werden nicht unterstuezt - nur einfache Listen
$this->_checkReqiredKeys($elementData, array("name"));
$sFormElement.='<select id="'.$sId.'" ';;
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name"), $elementData);
$sFormElement.=">\n";
foreach ($elementData["options"] as $idOption=>$aOptionData) {
$s=preg_replace('/\W/iu', '', $sId.$idOption);
$sOptionId=preg_replace('/[äöüß]/i', '', $s);
$sFormElement.=' <option value="'.$idOption.'" ';
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes"), $aOptionData);
$sFormElement.='>'.$aOptionData["label"].'</option>'."\n";
}
$sFormElement.="</select>\n";
if ($sLabelText) {
$sLabelElement.='<span class="help-block">'.$sLabelText.'</span>'."\n";
}
$sHtmlTable='<td>'.$sLabelText.'</td><td>'.$sFormElement.'</td>';
$sHtmlDefault=$sLabelElement.$sFormElement;
// $sReturn.=$this->_addLabel($sFormElement,$sId,"checkbox");
break;
case "submit":
$this->_checkReqiredKeys($elementData, array("value"));
$sFormElement.=' <button id="'.$sId.'" class="btn btn-large btn-primary" type="submit" ';
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes"), $elementData);
$sFormElement.='>'.$elementData["value"].'</button>';
$sFormElement.="\n";
$sHtmlDefault=$sFormElement;
break;
case "text":
$this->_checkReqiredKeys($elementData, array("name"));
$sFormElement.=' <input type="text" id="'.$sId.'" ';
$aAllowedHtmlAttributes["text"]=explode(",", "");
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name,disabled,onkeyup,onkeydown,onchange,pattern,placeholder,required,size,value"), $elementData);
// $sFormElement.=$this->_addHtmlAtrributes(array("name", "value", "size", "placeholder", "required"), $elementData);
// IE: Return abfangen lassen
$sFormElement.=' onkeypress="return checkKey(event);"';
$sFormElement.=' />';
$sFormElement.="\n";
$sLabelElement=$this->_addLabel($sLabelText,$sId, "control-label" );
$sHtmlDefault=$sLabelElement.'<div class="controls">'."\n".$sFormElement.'</div>'."\n";
$sHtmlTable='<td>'.$sLabelText.'</td><td>'.$sFormElement.'</td>';
break;
case "textarea":
$this->_checkReqiredKeys($elementData, array("name"));
$sFormElement.=' <textarea id="'.$sId.'" ';
$aAllowedHtmlAttributes["text"]=explode(",", "");
$sFormElement.=$this->_addHtmlAtrributes(explode(",", "$sDefaultAttributes,name,onkeyup,onkeydown,onchange,placeholder,required,cols,rows"), $elementData);
// $sFormElement.=$this->_addHtmlAtrributes(array("name", "value", "size", "placeholder", "required"), $elementData);
$sFormElement.='></textarea>';
$sFormElement.="\n";
$sLabelElement=$this->_addLabel($sLabelText,$sId, "control-label" );
$sHtmlDefault=$sLabelElement.'<div class="controls">'."\n".$sFormElement.'</div>'."\n";
$sHtmlTable='<td>'.$sLabelElement.'</td><td>'.$sFormElement.'</td>';
break;
default:
die("ERROR: " . __CLASS__ . ":".__FUNCTION__ . " - formelement type ".$elementData["type"]." ist not supported (yet).");
break;
}
// Default or table mode?
if (array_key_exists("mode", $elementData) && $elementData["mode"]=='table' && $sHtmlTable) {
$sHtmlDefault=$sHtmlTable;
} else {
if ($elementData["type"]!="button" && $elementData["type"]!="fieldset" && $elementData["type"]!="markup"){
$sHtmlDefault="<fieldset>". $sHtmlDefault."</fieldset>\n";
}
}
$sReturn.="<!-- " . $elementData["type"] ." -->\n";
$sReturn.=$sHtmlDefault."\n";
return $sReturn;
}
}
?>