Untitled

 avatar
unknown
php
22 days ago
8.7 kB
4
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