File: /var/www/vhosts/creativefellows.nl/test.creativefellows.nl/geomil/classes/CassetteForm.php
<?php
class CassetteForm extends BaseController{
function __construct($settings,$form_data,$form_fields,$client_settings,$uploaded_files=null)
{
$this->client = $client_settings;
$this->settings = $settings;
$this->formHandler = $form_data["custom_handler"] != "" ? $form_data["custom_handler"] : "handle-form";
$this->uploaded_files = $uploaded_files;
foreach($form_data as $el => $val)
{
$this->$el = $val;
}
$this->fields = $form_fields;
$this->config = new BaseController($this->settings,$this->client);
}
public function getFormIntro($class=null)
{
//$return = '<h2 class="'. $class .'">'. $this->getFormName() .'</h2>';
if( $desc = $this->getFormDesc() ) return $desc;
}
public function handleForm($post)
{
/*
* form settings
*/
$to_client_email = $this->getClientResponseEmail();
$unique_id = $this->getFormId();
$response = $this->getResponseMessage();
$subject = $this->getFormName();
$response_field = $this->getResponseField();
$referrer = $_SERVER['HTTP_REFERER'];
$post_to_email = null;
$reply_to_email = null;
$form_header = $this->getFormHeader($subject);
$form_footer = $this->getFormFooter();
$html_email = "";
/*
* loop fields
*/
foreach($this->fields as $f)
{
/*
* Only show visible html fields
*/
if(!$f["elementId"]) continue;
/*
* Read post
*/
$postValue = $post[$f["valueName"]];
/*
* Check if user gets a copy of the email
*/
if($response_field == $f["elementId"] && isset($post[$f["valueName"]]) && $post[$f["valueName"]] != "")
{
$post_to_email .= $postValue;
$reply_to_email = $postValue;
}
/*
* Post element is array
*/
if(is_array($postValue))
{
$value = "";
foreach($postValue as $i => $pv)
{
$value .= $f["options"][$i];
}
$postValue = $value;
}
/*
* Form field header
*/
if($f["type"] == "tussenkop")
{
$html_email .= "<tr>";
$html_email .= "<td colspan=\"2\"> </td>";
$html_email .= "</tr>";
$html_email .= "<tr>";
$html_email .= "<td colspan=\"2\"><strong>". ucfirst($f["name"]) ."</strong></td>";
$html_email .= "</tr>";
}
/*
* Postcode check
*/
elseif($f["type"] == "postcode")
{
$html_email .= "<tr>";
$html_email .= "<td style='width:200px;'>".ucfirst($f["name"])."</td><td>".$postValue."</td>";
$html_email .= "</tr>";
}
/*
* File Upload
*/
elseif($f["type"] == "bijlage")
{
// get upload data
$uploadedFile = $this->uploaded_files[ $f["valueName"] ];
// check of upload is valid
if($uploadedFile->getError() === UPLOAD_ERR_OK){
// upload file
$filename = $this->moveUploadedFile( $this->config->getSetting("upload_path"), $uploadedFile);
// security hash
$hash = $this->getFormHash($filename);
$upload_response = '<a href="'. $this->config->getSiteUrl() ."download-file/". $hash ."/" . $filename .'">' . $filename .'</a>';
}
else $upload_response = 'Fout bij uploaden bestand';
$html_email .= "<tr>";
$html_email .= "<td style='vertical-align:top;'>".ucfirst($f["name"])."</td>";
$html_email .= "<td>";
$html_email .= $upload_response;
$html_email .= "<td>";
$html_email .= "</tr>";
}
/*
* Default field
*/
else
{
$html_email .= "<tr>";
$html_email .= "<td style='width:200px;'>".ucfirst($f["name"])."</td><td>".$postValue."</td>";
$html_email .= "</tr>";
}
}
// die();
/*
* merge email contentsts
*/
$mail_contents = $form_header.$html_email.$form_footer;
$this->mail_contents = $mail_contents;
//die($mail_contents);
/*
* copy to user
*/
if($post_to_email != null) $this->sendMail($post_to_email, $subject, $mail_contents);
/*
* submit to form response addresses
*/
if( $this->sendMail($to_client_email, $subject, $mail_contents,$reply_to_email) ) return true;
else return false;
}
private function moveUploadedFile($directory, $uploadedFile)
{
$extension = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);
$basename = bin2hex(random_bytes(8)); // see http://php.net/manual/en/function.random-bytes.php
$filename = sprintf('%s.%0.8s', $basename, $extension);
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
return $filename;
}
private function sendMail($post_to_email, $subject, $mail_contents,$reply_to_email=null)
{
if(mail($post_to_email, $subject, $mail_contents, $this->getMailHeaders($reply_to_email))) return true;
else return false;
}
/*
* email headers
*/
private function getMailHeaders($reply_to_email=null)
{
// die("mail:" . $reply_to_email);
$headers = "From: ". $this->client["master_email"] ."\n";
$headers .= "Reply-To: ". ($reply_to_email == null ? $this->client["master_email"] : $reply_to_email) ."\n";
$headers .= "Return-Path: ". $this->client["master_email"] ."\n";
$headers .= "Content-type: text/html; charset=UTF-8\n";
$headers .= "MIME-Version: 1.0\n";
return $headers;
}
private function getWebsiteUrl()
{
return $this->settings["site_url"];
}
private function getFormHeader($subject_email)
{
/*
* Start HTML
*/
$data = "<html><head></head><body><table cellpadding='5' cellspacing='0' border='0' style='font:12px Helvetica,Arial,sans-serif;' width='600' align='center'>";
$data .= "<tr>";
$data .= "<td colspan='2' style='font-size:14px;font-weight:bold;padding-bottom:15px;'> </td>";
$data .= "</tr>";
/*
* Company logo
*/
$data .= "<tr>";
$data .= "<td colspan='2' style='font-size:14px;font-weight:bold;'>". $this->getEmailLogo() ."</td>";
$data .= "</tr>";
$data .= "<tr>";
$data .= "<td colspan='2' style='font-size:14px;font-weight:bold;'> </td>";
$data .= "</tr>";
/*
* subject
*/
$data .= "<tr>";
$data .= "<td colspan='2' style='font-size:14px;font-weight:bold;padding-bottom:15px;padding-top:15px;border-bottom:solid 1px #efefef;border-top:solid 1px #efefef;'>". $subject_email ."</td>";
$data .= "</tr>";
return $data;
}
private function getFormFooter()
{
return "</table></body></html>";;
}
private function getPostName($response_field_arr)
{
return preg_replace("/[^0-9a-zA-Z]/","",strtolower($response_field_arr["form_element_id"].$response_field_arr["name"]));
}
private function getResponseField(){
return $this->field_response;
}
private function getClientResponseEmail()
{
return $this->form_response;
}
public function getFormName()
{
return $this->form_name;
}
private function getFormId()
{
return $this->form_id;
}
public function getResponseMessage()
{
return $this->form_submitted;
}
private function getFormDesc()
{
return $this->form_desc;
}
public function getFormHtml($custom_fields_array=null,$grid_sizes="small-12 medium-6")
{
if($this->custom_form_code != "") return $this->getCustomFormHtml();
$html = '<form class="form regular" action="'. $this->getFormHandler() .'" method="post" enctype="multipart/form-data" data-abide novalidate>';
$html .= '<div class="grid-x grid-padding-x">';
if($custom_fields_array != null)
{
foreach($custom_fields_array as $el)
{
$html .= $this->cassetteFormElement($el,$grid_sizes);
}
}
foreach($this->getFields() as $el)
{
$html .= $this->cassetteFormElement($el,$grid_sizes);
}
$html .= "</div>";
$html .= "</form>";
return $html;
}
private function getCustomFormHtml()
{
return $this->custom_form_code;
}
private function getMandatoryLabel()
{
return $this->config->getlabel("mandatory_field");
}
private function cassetteFormElement($array,$grid_sizes)
{
$hidefieldsets = array("hidden","msg");
$full_width = array("tussenkop","submit","textarea","button","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" : "";
$req_sign = (isset($array["required"]) && $array["required"] == 1) ? " *" : " ";
$inpName = $eid.preg_replace("/[^0-9a-zA-Z]/","",strtolower($name));
$required_msg = '<span class="form-error">'. $this->getMandatoryLabel() .'</span>';
$el = "";
//d($array);
switch($type){
case "input":
// default
//$type = "text";
$pattern = "";
// email
if(preg_match("/mail/",$inpName)) $pattern = "email";
// phone
if(preg_match("/phone|telefoon|mobiel/",$inpName)) $pattern = "number";
$el .= '<label><span>'. $desc . $req_sign .'</span>';
$el .= '<input type="text" name="'. $inpName .'" id="'. $inpName .'" autocomplete="off" placeholder="'. $desc .'" pattern="'. $pattern .'" '. $req .' />';
$el .= $required_msg;
$el .= '</label>';
break;
case "inactiveinput":
$el .= '<label><span>'. $desc .'</span>';
$el .= '<input type="text" autocomplete="off" disabled />';
$el .= '<input type="hidden" name="'. $inpName .'" id="'. $inpName .'" autocomplete="off" placeholder="'. $desc .'" '. $req .' />';
$el .= $required_msg;
$el .= '</label>';
break;
case "deactivatedfield":
$el .= "<input type='hidden' name='$inpName' value='$desc'/>";
break;
case "datepicker":
$el .= '<label><span>'. $desc . $req_sign .'</span>';
$el .= '<input type="text" name="'. $inpName .'" class="form-text calendar" autocomplete="off" '. $req .' />';
$el .= $required_msg;
$el .= '</label>';
break;
case "select":
$el .= '<label><span>'. $desc . $req_sign .'</span>';
$el .= '<select type="text" id="'. $inpName .'" name="'. $inpName .'" '. $req .'>';
foreach($opts as $i => $o)
{
$value = ($i == 0) ? "" : htmlentities($o);
$el .= '<option value="'. $value .'">'. utf8_decode($o) .'</option>';
}
$el .= "</select>";
$el .= $required_msg;
$el .= '</label>';
break;
case "radio":
$el .= '<legend><span>'. $desc . $req_sign . '</span></legend>';
$el .= '<div class="element-options">';
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 .= '</div>';
$el .= $required_msg;
//$el .= '</label>';
break;
case "checkbox":
$el .= '<legend><span>'. $desc . $req_sign . '</span></legend>';
$el .= '<div class="element-options">';
foreach($opts as $i => $o){
$el .= '<div><input type="checkbox" id="'. $inpName . $i .'" name="'. $inpName .'[]" value="'. $i .'" '. $req .' /> <label for="'. $inpName . $i .'">'. $o .'</label></div>';
}
$el .= '</div>';
$el .= $required_msg;
$grid_sizes = "small-12";
break;
case "textarea":
$el .= '<label><span>'. $desc . $req_sign .'</span>';
$el .= '<textarea name="'. $inpName .'" placeholder="'. $desc .'"></textarea>';
$el .= '</label>';
$grid_sizes = "small-12";
break;
case "submit":
$el .= '<button class="button" type="submit">'. $this->getButtonLabel() .'</button>';
$el .= '<span class="form-required-msg">* Mandatory field</span>';
$grid_sizes = "small-12";
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>';
$el .= '<label><span>'. $desc . $req_sign .'</span></label>';
$el .= '<label for="'. $inpName .'" class="button secondary upload-button">Kies bestand</label>';
$el .= '<input type="file" id="'. $inpName .'" name="'. $inpName .'" class="show-for-sr" accept=".doc, .docx, .pdf, .odt, application/msword, application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document">';
break;
case "captcha":
$el .= '<div class="g-recaptcha" data-sitekey="'. $name .'"></div>';
$grid_sizes = "small-12";
break;
//case "bijlage":
// $el .= "<label class='legend'>$desc $lbl</label>";
// $el .= "<div class='file-wrapper'><span><input type='file' class='form-text$req' name='$inpName' accept='.doc, .docx, .pdf, .odt, application/msword, application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document,'/></span></div>";
// break;
}
$data = "";
if(!in_array($type,$hidefieldsets)) $data .= '<fieldset class="cell '. $grid_sizes . '">';
$data .= $el;
if(!in_array($type,$hidefieldsets)) $data .= '</fieldset>';
return $data;
}
private function getButtonLabel()
{
return $this->button_label;
}
private function getFormHandler()
{
return $this->formHandler;
}
private function getFields()
{
return $this->fields;
}
}
?>