Untitled
unknown
php
8 months ago
8.7 kB
6
Indexable
<?php
require_once 'smarty/smarty.class.php';
require_once 'dompdf/autoload.inc.php';
require_once 'mail.class.php';
use Dompdf\Dompdf;
function convertImage() : String {
$filename = $_SERVER['DOCUMENT_ROOT'] . "/php/logo.jpg";
if (!file_exists($filename))
throw new Exception('File not found');
$mime = mime_content_type($filename);
if ($mime === false)
throw new Exception('Illegal MIME type.');
$raw_data = file_get_contents($filename);
if (empty($raw_data))
throw new Exception('File not readable or empty.');
return "data:{$mime};base64," . base64_encode($raw_data);
}
class Form extends Mail {
private $post;
private $filename;
private function view($template, array $data) {
$smarty = new Smarty;
$smarty->debugging = false;
$smarty->setTemplateDir($_SERVER['DOCUMENT_ROOT'] . '/php/views');
$smarty->setCompileDir($_SERVER['DOCUMENT_ROOT'] . '/php/views/compiled');
$smarty->assign('pagehost', $_SERVER['DOCUMENT_ROOT']);
$smarty->assign('data', $data);
$smarty->assign('mail', $this->settings['smtp']['mail']);
return $smarty->fetch("{$template}.tpl");
}
private function filename() {
$date = date('dmYHis');
$this->filename = "planwesela_{$this->post['email']}_{$date}.pdf";
return $this->filename;
}
private function renderPDF($html) {
$dompdf = new Dompdf();
$dompdf->loadHtml($html, 'UTF-8');
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
if (!is_dir(dirname(dirname(__FILE__)) . $this->settings['config']['dir'])) {
mkdir(dirname(dirname(__FILE__)) . $this->settings['config']['dir'], 0777, true);
}
if (file_put_contents(dirname(dirname(__FILE__)) . "{$this->settings['config']['dir']}{$this->filename()}", $output)) return true;
return false;
}
private function mail(array $args) {
$this->subject = $args['subject'];
$this->send_to = $args['to'];
$this->attachement = $args['attachement'];
$this->body = $this->view($args['template'], $args);
$this->send();
}
private function validate($post) {
$validation = array();
$validation['error'] = false;
$inputsToValidate = [
'wedding_date',
'lady_name',
'lady_phone_number',
'man_name',
'man_phone_number',
'wedding_place',
'wedding_hour',
'church_adress',
'expected_arrival_time',
'greetings',
'lady_parents',
'man_parents',
'man_march',
'lady_march',
'onsite_blessing',
'onsite_blessing_song',
'onsite_blessing_hour',
'first_dance',
'first_dance_details',
'first_dance_title',
'second_dance',
'second_dance_song',
'deser',
'tort',
'cake_song',
'parents_thanks',
'oczepiny',
'wedding_fun',
'afterparty'
];
if (isset($post['validator']) and !empty($post['validator'])) {
$validation['error'] = true;
$validation['elements'][] = 'validator';
}
if (isset($post['g-recaptcha-response']) and empty($post['g-recaptcha-response'])) {
$validation['error'] = true;
$validation['elements'][] = 'g-captcha';
}
foreach ($inputsToValidate as $input_name) {
if (!isset($post[$input_name]) or empty($post[$input_name])) {
$validation['error'] = true;
$validation['elements'][] = $input_name;
}
if (isset($post[$input_name]) and is_array($post[$input_name])) {
if (!isset($post[$input_name]['option'])) {
$validation['error'] = true;
$validation['elements'][] = "{$input_name}[option]";
}
if (isset($post[$input_name]['option']) and $post[$input_name]['option'] === 'tak') {
foreach ($post[$input_name]['inputs'] as $key => $value) {
if (empty($value)) {
$validation['error'] = true;
$validation['elements'][] = "{$input_name}[inputs][{$key}]";
}
if (is_array($post[$input_name]['inputs'][$key]) and count($post[$input_name]['inputs'][$key]) < 2) {
$validation['error'] = true;
$validation['elements'][] = "{$input_name}[inputs][{$key}][]";
}
}
}
if (isset($post[$input_name]['option']) and $post[$input_name]['option'] === 'null') {
$validation['error'] = true;
$validation['elements'][] = "{$input_name}[option]";
}
}
}
// email validations
if (strlen($post['email']) === 0 or !preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $post['email'])) {
$validation['error'] = true;
$validation['elements'][] = 'email';
}
return $validation;
}
function response($status, array $data) {
ignore_user_abort(true);
set_time_limit(0);
ob_start();
$data['status'] = $status;
echo json_encode($data);
header('Connection: close');
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
return true;
}
function post($post) {
$this->post = $post;
$validation = $this->validate($post);
if ($validation['error']) {
$this->response('error', $validation);
die;
} else {
$html = $this->view('formularz', $post);
if ($this->renderPDF($html)) {
$user = array(
"to" => $post['email'],
"subject" => "Formularz planu wesela",
"attachement" => dirname(dirname(__FILE__)) . "{$this->settings['config']['dir']}{$this->filename}",
"download" => "{$this->settings['config']['path']}{$this->filename}",
"template" => "mail_user"
);
$admin = array(
"to" => $this->settings['smtp']['mail'],
"subject" => "Formularz planu wesela",
"attachement" => dirname(dirname(__FILE__)) . "{$this->settings['config']['dir']}{$this->filename}",
"download" => "{$this->settings['config']['path']}{$this->filename}",
"template" => "mail_admin",
"post" => $post
);
if ($this->response('success', $post)) {
$this->mail($user);
$this->mail($admin);
}
}
}
}
}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$form = new Form;
$form->post($_POST);
}
?>
Editor is loading...
Leave a Comment