Skip to content
Snippets Groups Projects
Select Git revision
  • 3819f1cc333beec195bbb0437a8aff88da50f067
  • master default protected
  • simple-task/7248-eol-check-add-node-22
  • 6877_check_iml_deployment
4 results

check_fs_writable

Blame
  • 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 &quot;type&quot; 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;
        }
        
    }
    
    ?>