Advertisement
fabi0

Untitled

Aug 5th, 2014
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.59 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * Form Validator
  5.  *
  6.  * @author Ivaylo Ivanov
  7.  */
  8. class Validator {
  9.  
  10.     private $_errors = array();
  11.     private $_data;
  12.  
  13.     /**
  14.      *
  15.      * @var \Database
  16.      */
  17.     private $_databseInstance;
  18.  
  19.     public function __construct() {
  20.        
  21.     }
  22.  
  23.     public function validate($data) {
  24.         if (!empty($data)) {
  25.             $this->_data = $data;
  26.             foreach ($data as $field_params) {
  27.  
  28.                 foreach ($field_params['rules'] as $rule => $rule_value) {
  29.                     if ($rule == 'required' || $rule == 'email' || $rule == 'available') {
  30.                         $this->{$rule}($field_params['name'], $field_params['data']);
  31.                     } else {
  32.                         $this->{$rule}($field_params['name'], $field_params['data'], $rule_value);
  33.                     }
  34.                 }
  35.             }
  36.         }
  37.     }
  38.  
  39.     private function required($field_name, $field_data) {
  40.         ($field_data == '') ? $this->_errors[] = 'Полето <strong>' . $field_name . '</strong> не е въведено !' : '';
  41.     }
  42.  
  43.     private function email($field_name, $field_data) {
  44.         $field_name = '';
  45.         (!filter_var($field_data, FILTER_VALIDATE_EMAIL)) ? $this->_errors[] = 'Невалиден имейл !' : '';
  46.     }
  47.  
  48.     public function getErrors() {
  49.         return $this->_errors;
  50.     }
  51.  
  52. }
  53.  
  54. /**
  55.  * Sending Mails
  56.  *
  57.  * @author Ivaylo Ivanov
  58.  */
  59. class Mailer {
  60.  
  61.     /**
  62.      * This is destination email address
  63.      * @var string
  64.      */
  65.     private $toEmail;
  66.  
  67.     /**
  68.      *
  69.      * @var string
  70.      */
  71.     private $toName;
  72.  
  73.     /**
  74.      * This is source email address
  75.      * @var string
  76.      */
  77.     private $fromEmail;
  78.  
  79.     /**
  80.      *  This is from sender
  81.      * @var string
  82.      */
  83.     private $fromName;
  84.  
  85.     /**
  86.      * This is return path email address
  87.      * @var string
  88.      */
  89.     private $return;
  90.  
  91.     /**
  92.      * This is subject for email
  93.      * @var string
  94.      */
  95.     private $subject;
  96.  
  97.     /**
  98.      * This is header for email
  99.      * @var string
  100.      */
  101.     private $header;
  102.  
  103.     /**
  104.      * Pass Variable
  105.      * @param   string  $from_email    Content from email address
  106.      * @param   string  $from_name  Sender Name
  107.      * @param   string  $to_email      Content to email address
  108.      * @param   string  $subject Content subject email
  109.      * @param   string  $return  Content return path email address
  110.      * No return value. Pass variable into this class
  111.      */
  112.     function __construct() {
  113.        
  114.     }
  115.  
  116.     public function setToEmail($toEmail) {
  117.         $this->toEmail = $toEmail;
  118.         return $this;
  119.     }
  120.  
  121.     public function setToName($toName) {
  122.         $this->toName = $toName;
  123.         return $this;
  124.     }
  125.  
  126.     public function setFromEmail($fromEmail) {
  127.         $this->fromEmail = $fromEmail;
  128.         return $this;
  129.     }
  130.  
  131.     public function setFromName($fromName) {
  132.         $this->fromName = $fromName;
  133.         return $this;
  134.     }
  135.  
  136.     public function setReturn($return) {
  137.         $this->return = $return;
  138.         return $this;
  139.     }
  140.  
  141.     public function setSubject($subject) {
  142.         $this->subject = $subject;
  143.         return $this;
  144.     }
  145.  
  146.     /**
  147.      * Изпраща обикновен Имейл
  148.      * @param   string  $message    Content for this email
  149.      * No return value. Send email
  150.      * @access  public
  151.      * @access  static
  152.      */
  153.     public function simpleMail($message) {
  154.         $this->header = "From: " . $this->fromName . ' <' . $this->fromEmail . ">\n";
  155.         $this->header .= "Reply-To: " . $this->fromEmail . "\n";
  156.         $this->header .= "Return-Path: " . $this->return . "\n";
  157.         $this->header .= "X-Mailer: PHP/" . phpversion() . "\n";
  158.         $this->send($message);
  159.     }
  160.  
  161.     /**
  162.      * Изпраща HTML емаил
  163.      * @param type $html
  164.      * @param type $plainText
  165.      */
  166.     public function htmlMail($html) {
  167.         // Уникално ид
  168.         $boundary = md5(uniqid(time()));
  169.  
  170.         // Хедъри
  171.         $this->header = "From: " . $this->fromName . ' <' . $this->fromEmail . ">" . "\r\n";
  172.         $this->header .= "To: " . $this->toEmail . "\r\n";
  173.         $this->header .= "Return-Path: " . $this->return . "\r\n";
  174.         $this->header .= "MIME-Version: 1.0\n";
  175.         $this->header .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '"' . "\r\n";
  176.  
  177.         // Текст версия
  178.         $msgPlainText = "--" . $boundary . "\r\n";
  179.         $msgPlainText .= 'Content-Type: text/plain; charset="iso-8589-1"' . "\r\n";
  180.         $msgPlainText .= "Content-Transfer-Encoding: 8bit" . "\r\n";
  181.         $msgPlainText .= "If you are seeing this is because you may need to change your" . "\r\n";
  182.         $msgPlainText .= "preferred message format from HTML to plain text." . "\r\n" . "\r\n";
  183.  
  184.  
  185.         // HTML Версия
  186.         $msgHtml = "--" . $boundary . "\r\n";
  187.         $msgHtml .= 'Content-Type: text/html; charset="iso-8589-1"' . "\r\n";
  188.         $msgHtml .= "Content-Transfer-Encoding: 8bit" . "\r\n" . "\r\n";
  189.         $msgHtml .= $html;
  190.  
  191.         // Събиране
  192.         $message = $msgPlainText . $msgHtml . PHP_EOL;
  193.  
  194.         // Изпращане
  195.         $this->send($message);
  196.     }
  197.  
  198.     /**
  199.      * Send simple email with attachment
  200.      * @param   string  $file       File for attachment (file name or path of file)
  201.      * @param   string  $plainText  Message in plain text format
  202.      * No return value. Send simple email with attachment
  203.      * @access  public
  204.      * @access  static
  205.      */
  206.     public function simpleAttachment($file, $plainText = '') {
  207.         $handle = fopen($file, 'rb');
  208.         $data = fread($handle, filesize($file));
  209.         $data = chunk_split(base64_encode($data));
  210.         $filetype = mime_content_type($file);
  211.  
  212.         $boundary = md5(uniqid(time()));
  213.         $this->header = "From: " . $this->fromEmail . "\r\n";
  214.         $this->header .= "To: " . $this->toEmail . "\r\n";
  215.         $this->header .= "Return-Path: " . $this->return . "\r\n";
  216.         $this->header .= "MIME-Version: 1.0\r\n";
  217.         $this->header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"';
  218.  
  219.         // Text Version
  220.         $msgPlainText = "--" . $boundary . "\n";
  221.         $msgPlainText .= "Content-Type: text/plain; charset=utf-8\r\n";
  222.         $msgPlainText .= "Content-Transfer-Encoding: 8bit\r\n";
  223.         if ($plainText != '') {
  224.             $msgPlainText .= $plainText . "\r\n";
  225.         }
  226.  
  227.         // Attachment Version
  228.         $attach = "--" . $boundary . "\r\n";
  229.         $attach .= "Content-Type: " . $filetype . "; name=\"" . $file . "\"\r\n";
  230.         $attach .= "Content-Transfer-Encoding: base64 \r\n";
  231.         // Need two end of lines
  232.         $attach .= "Content-Disposition: attachment; filename=\"" . $file . "\"\r\n\r\n";
  233.         $attach .= $data . "\r\n\r\n";
  234.  
  235.         $message = $msgPlainText . $attach;
  236.         // Send Email
  237.         $this->send($message);
  238.     }
  239.  
  240.     /**
  241.      * Изпраща HTML емаил с прикачен файл
  242.      * @param type $file
  243.      * @param type $html
  244.      * @param type $plainText
  245.      */
  246.     public function htmlAttachment($file, $html, $plainText = '') {
  247.         $handle = fopen($file, 'rb');
  248.         $data = fread($handle, filesize($file));
  249.         $data = chunk_split(base64_encode($data));
  250.         $filetype = mime_content_type($file);
  251.  
  252.         $boundary = md5(uniqid(time()));
  253.         $this->header = "From: " . $this->fromEmail . "\n";
  254.         $this->header .= "To: " . $this->toEmail . "\n";
  255.         $this->header .= "Return-Path: " . $this->return . "\n";
  256.         $this->header .= "MIME-Version: 1.0\n";
  257.         $this->header .= "Content-Type: multipart/related; boundary=\"" . $boundary . "\"\n";
  258.  
  259.         // Text Version
  260.         $msgPlainText = "--" . $boundary . "\n";
  261.         $msgPlainText .= "Content-Type: text/plain; charset=iso-8589-1\n";
  262.         $msgPlainText .= "Content-Transfer-Encoding: 8bit\n";
  263.         $msgPlainText .= "If you are seeing this is because you may need to change your\n";
  264.         $msgPlainText .= "preferred message format from HTML to plain text.\n\n";
  265.         if ($plainText == '') {
  266.             $plainText = strip_tags($html);
  267.         }
  268.         $msgPlainText .= $plainText . "\n";
  269.  
  270.         // HTML Version
  271.         $msgHtml = "--" . $boundary . "\n";
  272.         $msgHtml .= "Content-Type: text/html; charset=iso-8589-1\n";
  273.         $msgHtml .= "Content-Transfer-Encoding: 8bit\n";
  274.         $msgHtml .= $html . "\n";
  275.  
  276.         // Attachment Version
  277.         $attach = "--" . $boundary . "\n";
  278.         $attach .= "Content-Type: " . $filetype . "; name=\"" . $file . "\"\n";
  279.         $attach .= "Content-Transfer-Encoding: base64 \n";
  280.         // Need two end of lines
  281.         $attach .= "Content-Disposition: attachment; filename=\"" . $file . "\"\n\n";
  282.         $attach .= $data . "\n\n";
  283.  
  284.         $message = "Content-Type: multipart/alternative; boundary=\"" . $boundary . "\"";
  285.         $message .= $msgPlainText . $msgHtml . $attach;
  286.         // Send Email
  287.  
  288.         $this->send($message);
  289.     }
  290.  
  291.     /**
  292.      * return function mail()
  293.      * @param   string  $message    Content for this email
  294.      * return function mail()
  295.      * @access  private
  296.      * @access  static
  297.      */
  298.     private function send($message) {
  299.  
  300.         return mail($this->toEmail, $this->subject, $message, $this->header, '-f' . $this->return);
  301.     }
  302.  
  303. }
  304.  
  305. if (!empty($_POST)) {
  306.     $fromEmail = 'mail@mail.com';
  307.     $fromName = 'Име на фирмата';
  308.     $subject = '';
  309.     header('Content-Type: application/json; charset=utf-8');
  310.     $return = [];
  311.     $validate = new Validator();
  312.     $postData = [
  313.         'name' => ['name' => 'Име', 'data' => filter_input(INPUT_POST, 'name'), 'rules' => ['required' => true]],
  314.         'family' => ['name' => 'Фамилия', 'data' => filter_input(INPUT_POSTt, 'family'), 'rules' => ['required' => true]],
  315.         'address' => ['name' => 'Адрес', 'data' => filter_input(INPUT_POST, 'address'), 'rules' => ['required' => true]],
  316.         'email' => ['name' => 'Емейл', 'data' => filter_input(INPUT_POST, 'email'), 'rules' => ['required' => true, 'email' => true]],
  317.         'total' => ['name' => 'Тотал', 'data' => filter_input(INPUT_POST, 'total'), 'rules' => ['required' => true]],
  318.         'selectedItems' => ['name' => 'Избрани продукти', 'data' => filter_input(INPUT_POST, 'selectedItems'), 'rules' => ['required' => true]],
  319.         'phone' => ['name' => 'Телефон', 'data' => filter_input(INPUT_POST, 'phone'), 'rules' => ['required' => true]],
  320.         'text' => ['name' => 'Допълнителна информация', 'data' => filter_input(INPUT_POST, 'text'), 'rules' => []]
  321.     ];
  322.  
  323.     $validate->validate($postData);
  324.     $errors = $validate->getErrors();
  325.     if (!empty($errors)) {
  326.         $return['success'] = false;
  327.         foreach ($errors as $error) {
  328.             $return['errors'][] = $error;
  329.         }
  330.         echo json_encode($return);
  331.         die();
  332.     } else {
  333.         $html = '<table>';
  334.         $html .= "<tr><td colspan='2'>Вашата заявка бе приета успешно.</td></tr>";
  335.         $html .= "<tr><td>Име и фамилия</td><td>{$postData['name']['data']} {$postData['family']['data']}</td></tr>";
  336.         $html .= "<tr><td>Телефон:/td><td>{$postData['phone']['data']}</td></tr>";
  337.         $html .= "<tr><td>Имейл:/td><td>{$postData['email']['data']}</td></tr>";
  338.         $html .= "<tr><td>Адрес:/td><td>{$postData['address']['data']}</td></tr>";
  339.         $html .= "<tr><td>Избрани продукти:td><td>{$postData['selectedItems']['data']}</td></tr>";
  340.         $html .= "<tr><td>Допълнителна Информация:<br/>{$postData['text']['data']}</td></tr>";
  341.         $html .= "<tr><td>Цена:<br/>{$postData['total']['data']}</td></tr>";
  342.         $html .= '</table';
  343.         $mailer = new Mailer();
  344.         $mailer->setFromEmail($fromEmail)
  345.                 ->setFromName($fromName)
  346.                 ->setSubject($subject)
  347.                 ->setToEmail($postData['email']['data'])
  348.                 ->setToName($postData['email']['data'])
  349.                 ->htmlMail($html);
  350.         $mailer->setFromEmail($fromEmail)
  351.                 ->setFromName($fromName)
  352.                 ->setSubject($subject)
  353.                 ->setToEmail($fromEmail)
  354.                 ->setToName($fromName)
  355.                 ->htmlMail($html);
  356.  
  357.         $return = [
  358.             'success' => true,
  359.             'message' => 'Вашата заявка бе приета успешно !'
  360.         ];
  361.         echo json_encode($return);
  362.         die();
  363.     }
  364. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement