HEX
Server: Apache
System: Linux v38079.2is.nl 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: democfellows (10015)
PHP: 8.1.34
Disabled: opcache_get_status
Upload Files
File: /var/www/vhosts/creativefellows.nl/geomil.creativefellows.nl/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\">&nbsp;</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;'>&nbsp;</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;'>&nbsp;</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) ? " *" : " &nbsp;";

			$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;
		}
	
	
	}	
	
	
	
?>