File: /var/www/vhosts/creativefellows.nl/dhwd.creativefellows.nl/src/CassetteForm.php
<?php
class CassetteForm extends BaseController{
function __construct($db_connection,$formid,$csrf_token=null,$captcha_key=null)
{
$this->db = $db_connection;
$r = $this->db->run("SELECT * FROM `forms` WHERE `form_id` = ". $this->db->esc($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;
}
public function insertFormResponse($table,$columns,$values)
{
$values[3] = $this->db->esc($values[3]);
$this->db->insert($table, $columns, $values);
}
public function getUid()
{
return uniqid();
}
public function getId()
{
return $this->formid;
}
public function getName()
{
return $this->eName;
}
public function getClientResponseEmail()
{
return $this->response;
}
public function getResponseMessage()
{
return preg_replace("/\n/","<br />",$this->desc);
}
function getFields()
{
$elements = array();
$form_fields = $this->db->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"] = "*) Mandatory field";
$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->db->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->db->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->db->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 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"] = $form_el_id . preg_replace("/[^0-9a-zA-Z]/","",strtolower($naam));
return $d;
}
function cassetteFormElement($array)
{
$hidefieldsets = array("hidden","msg","captcha");
$full_width = array("tussenkop","submit","textarea");
$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" : "";
$inpName = $eid.preg_replace("/[^0-9a-zA-Z]/","",strtolower($name));
$required_msg = '<span class="form-error">Mandatory field</span>';
$el = "";
switch($type){
case "input":
$el .= '<label>'. $desc;
$el .= '<input type="text" name="'. $inpName .'" autocomplete="off" placeholder="'. $desc .'" '. $req .' />';
$el .= $required_msg;
$el .= '</label>';
break;
case "inactiveinput":
$el .= '<label>'. $desc;
$el .= "<input type='text' name='$inpName' value='#value#' disabled />";
$el .= '</label>';
break;
case "deactivatedfield":
$el .= "<input type='hidden' name='$inpName' value='$desc'/>";
break;
case "datepicker":
$el .= '<label>'. $desc;
$el .= '<input type="text" name="'. $inpName .'" class="form-text calendar" autocomplete="off" '. $req .' />';
$el .= $required_msg;
$el .= '</label>';
break;
case "select":
$el .= '<label>'. $desc;
$el .= '<select type="text" name="'. $inpName .'" '. $req .'>';
foreach($opts as $o)
{
$el .= '<option value="'. htmlentities($o) .'">'. utf8_decode($o) .'</option>';
}
$el .= "</select>";
$el .= $required_msg;
$el .= '</label>';
break;
case "radio":
$el .= '<legend>'. $desc . '</legend>';
foreach($opts as $i => $o)
{
$checked = $i == 0 ? " checked" : null;
$el .= '<input type="radio" id="'. $inpName . $i .'" name="'. $inpName .'" value="'. $o .'" '. $req .' /> <label for="'. $inpName . $i .'">'. $o .'</label>';
}
$el .= $required_msg;
$el .= '</label>';
break;
case "checkbox":
$el .= '<legend>'. $desc . '</legend>';
foreach($opts as $o){
$el .= '<input type="checkbox" id="'. $inpName . $i .'" name="'. $inpName .'[]" value="'. $o .'" /> <label for="'. $inpName . $i .'">'. $o .'</label>';
}
break;
case "textarea":
$el .= '<label>'. $desc;
$el .= '<textarea name="'. $inpName .'"" placeholder="'. $desc .'"></textarea>';
$el .= '</label>';
break;
case "submit":
$el .= '<button class="button" type="submit">'. $this->btn_label .'</button><br /><br />';
break;
case "hidden":
$el .= '<input type="hidden" name="'. $inpName .'" value="'. $desc .'" />';
break;
case "msg":
$el .= "<p>". $desc ."</p>";
break;
case "tussenkop":
$el .= "<label class='group'>$name</label>";
if($array["desc"]) $el .= "<p>".$array["desc"]."</p>";
break;
case "bijlage":
$el .= '<label>'. $desc;
$el .= '<input type="file" name="'. $inpName .'"" accept="image/*" />';
$el .= '</label>';
break;
case "captcha":
$el .= '<div class="g-recaptcha" data-sitekey="'. $name .'"></div>';
break;
}
$data = "";
if(!in_array($type,$hidefieldsets)) $data .= '<fieldset class="'. (!in_array($type,$full_width) ? "small-12 medium-6" : "small-12" ) .' columns '. $f[3] .'">';
$data .= $el;
if(!in_array($type,$hidefieldsets)) $data .= '</fieldset>';
return $data;
}
}
?>