File: /var/www/vhosts/creativefellows.nl/test.creativefellows.nl/ergatis/src/class.cassette_form.php
<?php
class cassetteForm extends dbConnect{
function __construct($connection,$formid,$csrf_token=null,$captcha_key=null){
$this->connection = $connection;
$r = $this->run("SELECT * FROM `forms` WHERE `form_id` = $formid",false);
$this->formid = $formid;
$this->unique_id = $r["unique_id"];
$this->eName = $r["form_name"];
$this->response = $r["form_response"];
$this->desc = $r["form_desc"];
$this->btn_label = $r["button_label"];
$this->handler = $r["custom_handler"] != "" ? $r["custom_handler"] : "handle-form";
$this->showMsg = false;
$this->csrf_token = $csrf_token;
$this->captcha_key = $captcha_key;
$this->spamtoken = uniqid($this->security_key);
}
function getFields(){
$elements = array();
$form_fields = $this->run("SELECT * FROM `form_elements` WHERE `unique_id`= '$this->unique_id' ORDER BY `position` ASC ");
foreach($form_fields as $r)
{
$e = array();
$e["elementId"] = $r["form_element_id"];
$e["type"] = $r["field_id"];
$e["required"] = $r["value"];
if($e["required"] == 1) $this->showMsg = true;
$test = $this->getFormField($r['form_element_id'],$r['field_id'],$r["name"],$r["description"]);
foreach($test as $t => $v){
$e[$t] = $v;
}
array_push($elements,$e);
}
// add form id
array_push($elements,$this->addFormId());
// add form id
if($this->captcha_key != null) array_push($elements,$this->addCaptcha());
// add a csrf
array_push($elements,$this->addCsrf());
// add a button
array_push($elements,$this->addButton());
// add required filling fields
if($this->showMsg == true) array_push($elements,$this->addMsg());
return $elements;
}
function addCaptcha()
{
$d = array();
$d["type"] = "captcha";
$d["name"] = $this->captcha_key;//$naam;
$d["desc"] = $this->captcha_key;//$desc;
return $d;
}
function addMsg(){
$d = array();
$d["type"] = "msg";
$d["name"] = "*) Verplicht invullen";
$d["desc"] = "";
return $d;
}
function addButton(){
$d = array();
$d["type"] = "submit";
$d["name"] = "";//$naam;
$d["desc"] = "";//$desc;
return $d;
}
function addFormId(){
$d = array();
$d["type"] = "hidden";
$d["name"] = "formid";
$d["desc"] = $this->formid;
return $d;
}
function addCsrf(){
$d = array();
$d["type"] = "hidden";
$d["name"] = "csrf";
$d["desc"] = $this->csrf_token;
return $d;
}
function getFormField($form_el_id,$field_id,$naam,$desc){
$d = array();
$elementName = str_replace(" ","",$form_el_id."-".$naam);
switch($field_id){
// input
case 1:
$d["type"] = "input";
$d["name"] = $naam;
$d["desc"] = $desc;
break;
//dropdown
case 28:
$d["type"] = "select";
$d["name"] = $naam;
$d["desc"] = $desc;
$o = array();
$element_options = $this->run("SELECT * FROM form_elements_options WHERE form_element_id = $form_el_id ORDER BY form_option_id ASC");
foreach($element_options as $r)
{
array_push($o,$r['value']);
}
$d["options"] = $o;
break;
//radio
case 31:
$d["type"] = "radio";
$d["name"] = $naam;
$d["desc"] = $desc;
$o = array();
$element_options = $this->run("SELECT * FROM form_elements_options WHERE form_element_id = $form_el_id ORDER BY form_option_id ASC");
foreach($element_options as $r)
{
array_push($o,$r['value']);
}
$d["options"] = $o;
break;
//checkbox
case 24:
$d["type"] = "checkbox";
$d["name"] = $naam;
$d["desc"] = $desc;
$o = array();
$element_options = $this->run("SELECT * FROM form_elements_options WHERE form_element_id = $form_el_id");
foreach($element_options as $r){
array_push($o,$r['value']);
}
$d["options"] = $o;
break;
//multi text line
case 5:
$d["type"] = "textarea";
$d["name"] = $naam;
$d["desc"] = $desc;
break;
case 15:
$d["type"] = "deactivatedfield";
$d["name"] = $naam;
$d["desc"] = $desc;
break;
case 14:
$d["type"] = "datepicker";
$d["name"] = $naam;
$d["desc"] = $desc;
break;
case 16:
$d["type"] = "inactiveinput";
$d["name"] = $naam;
$d["desc"] = $desc;
break;
case 53:
case 54:
$d["type"] = "hidden";
$d["name"] = $naam;
$d["desc"] = $desc;
break;
case 32:
$d["type"] = "tussenkop";
$d["name"] = $naam;
$d["desc"] = $desc;
break;
case 18:
$d["type"] = "bijlage";
$d["name"] = $naam;
$d["desc"] = $desc;
break;
}
$d["valueName"] = preg_replace("/ /","_",strtolower($form_el_id."_".$naam));
return $d;
}
function spamtoken()
{
return $this->spamtoken;
}
function cassetteFormElement($array){
$hidefieldsets = array("submit","hidden","msg","captcha");
$type = $array["type"];
$name = $array["name"];
$desc = (trim($array["desc"]) != "") ? $array["desc"] : $name;
$opts = (isset($array["options"])) ? $array["options"] : null ;
$eid = (isset($array["elementId"])) ? $array["elementId"] : null;
$req = (isset($array["required"]) && $array["required"] == 1) ? " required" : "";
$lbl = (isset($array["required"]) && $array["required"] == 1) ? " *" : "";
$inpName = $eid.preg_replace("/[^0-9a-zA-Z]/","",strtolower($name));
$value = isset($_SESSION[ $this->vl($this->eName) ][$inpName]) ? $_SESSION[$this->vl($this->eName)][$inpName] : "";
$el = "";
switch($type){
case "input":
//$el .= "<legend>$desc $lbl</legend>";
$el .= "<label class='legend'>$name $lbl</label>";
$el .= "<div class='input-wrapper'><input type='text' class='form-text$req' name='$inpName' autocomplete='off' placeholder='". $array["desc"] ."' value='". $this->outputSafe($value) ."'/></div>";
break;
case "inactiveinput":
//$el .= "<legend>$desc $lbl</legend>";
$el .= "<label class='legend'>$desc $lbl</label>";
$el .= "<input type='text' name='$inpName' class='$req' value='#value#'disabled />";
break;
case "deactivatedfield":
$el .= "<input type='hidden' name='$inpName' value='$desc'/>";
break;
case "datepicker":
//$el .= "<legend>$desc $lbl</legend>";
$el .= "<label class='legend'>$desc $lbl</label>";
$el .= "<div class='input-wrapper'><input type='text' name='$inpName' class='form-text calendar$req' autocomplete='off' /></div>";
break;
case "select":
//$el .= "<legend>$desc $lbl</legend>";
$el .= "<label class='legend'>$desc $lbl</label>";
$el .= "<div class='option-wrapper'><select type='text' name='$inpName' class='select'>";
foreach($opts as $o){
$el .= "<option value='".htmlentities($o)."'>".utf8_decode($o)."</option>";
}
$el .= "</select></div>";
break;
case "radio":
$verplicht = ($array["required"] == 1) ? " required" : "";
//$el .= "<legend>$desc $lbl</legend>";
$el .= "<label class='legend'>$desc $lbl</label>";
$el .= "<div class='block$verplicht' id='$inpName'>";
foreach($opts as $i => $o){
$checked = ($i == 0) ? " checked" : null;
$el .= "<span class='floatleft'><input type='radio' name='$inpName' value='$o' $checked /> <label>$o</label></span>";
}
$el .= "</div>";
break;
case "checkbox":
$verplicht = ($array["required"] == 1) ? " required" : "";
$el .= "<label class='legend'>$desc $lbl</label>";
$el .= "<div class='block$verplicht' id='$inpName'>";
foreach($opts as $i => $o){
$checked = !empty($value) && in_array($o,$value) ? " checked" : "";
$el .= "<span class='floatleft'><input type='checkbox' name='".$inpName."[]' id='". $inpName . $i ."' value='$o' $checked/> <label for='". $inpName . $i ."'>$o</label></span>";
}
$el .= "</div>";
break;
case "textarea":
//$el .= "<legend>$desc $lbl</legend>";
$el .= "<label class='legend'>$desc $lbl</label>";
$el .= "<div class='input-wrapper'><textarea class='form-text textarea$req' name='$inpName' placeholder='". $array["desc"] ."'>". $this->outputSafe($value) ."</textarea></div>";
break;
case "submit":
$el .= '<div class="slide-message"><strong>Schuif het blauwe balkje naar rechts om het formulier te verzenden </strong><br >(Ter voorkoming van spam)</div>';
$el .= '<div class="fieldset hidden"><input type="text" name="slided_by_human" class="slided_by_human required" value="" /></div>';
$el .= '<div class="slide-submit">';
$el .= '<div class="slide-submit-text"></div>';
$el .= '<div class="slide-submit-thumb"></div>';
$el .= '</div>';
$el .= "<input type='hidden' name='slider-validate' value='". $this->spamtoken() ."'/>";
$el .= "<div class='button-wrapper' style='display:none'>";
$el .= "<input type='submit' name='". $this->eName ."' value='". $this->btn_label ."' class='form-button' id='".preg_replace("/[^0-9a-zA-Z]/","",strtolower($this->btn_label))."' />";
$el .= "</div>";
break;
case "hidden":
$el .= "<input type='hidden' name='$inpName' id='$inpName' value='$desc'/>";
break;
case "msg":
$el .= "<div class='msg-wrapper'><p>$desc</p></div>";
break;
case "tussenkop":
$el .= "<label class='group'>$name</label>";
if($array["desc"]) $el .= "<p>".$array["desc"]."</p>";
break;
case "bijlage":
$el .= "<label class='legend'>$desc $lbl</label>";
$el .= "<div class='file-wrapper'><input type='file' class='form-text$req' name='$inpName' accept='image/*' /></div>";
break;
case "captcha":
$el .= '<div class="g-recaptcha" data-sitekey="'. $name .'"></div>';
break;
}
$data = "";
if(!in_array($type,$hidefieldsets)) $data .= '<div class="form-row '. $type .' '. $f[3] .'">';
$data .= $el;
if(!in_array($type,$hidefieldsets)) $data .= "</div>";
return $data;
}
}
?>