Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.00 KB | None | 0 0
  1. <?php /* Base namespace: Application\Models */
  2. namespace Application\Models;
  3.  
  4. use MvcBox;
  5.  
  6. class Order extends \Model
  7. {
  8.     /**
  9.      *
  10.      */
  11.     private $streetsTable = 'streets';
  12.    
  13.     /**
  14.      *
  15.      */
  16.     private $ordersTable = 'orders';
  17.    
  18.     /**
  19.      *
  20.      */
  21.     private $usersTable = 'users';
  22.    
  23.     /**
  24.      *
  25.      */
  26.     public function getStreets()
  27.     {
  28.         $result = $this->db->select()->from($this->streetsTable)->cache(60)->get('d', 'a');
  29.        
  30.         return is_array($result) ? $result : array();
  31.     }
  32.    
  33.     /**
  34.      *
  35.      */
  36.     public function selectedValues()
  37.     {
  38.         $selected = array();
  39.        
  40.         if (! empty($this->io->post)) {
  41.             $selected = $this->io->post;
  42.            
  43.             setcookie(
  44.                 'selected_values',
  45.                 serialize(
  46.                     array(
  47.                         'fio'       => $selected['fio'],
  48.                         'email'     => $selected['email'],
  49.                         'phone'     => $selected['phone'],
  50.                         'street'    => $selected['street'],
  51.                         'house'     => $selected['house'] = $this->getNumsAsHtml($selected['street'], $selected['house']),
  52.                         'apartment' => $selected['apartment']
  53.                     )
  54.                 ),
  55.                 time() + 31536000,
  56.                 '/'
  57.             );
  58.         } elseif(isset($_COOKIE['selected_values'])) {
  59.             $selected = unserialize($_COOKIE['selected_values']);
  60.         }
  61.        
  62.         return $selected;
  63.     }
  64.    
  65.     /**
  66.      *
  67.      */
  68.     public function getHousesNums($streetId = 0)
  69.     {
  70.         $nums = $this->db
  71.                     ->select('house_nums')
  72.                     ->from($this->streetsTable)
  73.                     ->where(array('id' => (int)$streetId))
  74.                     ->limit(1)
  75.                     ->cache(60)
  76.                     ->get('d', 'a');
  77.        
  78.         if (is_array($nums)) {
  79.             return explode(',', $nums[0]['house_nums']);
  80.         }
  81.        
  82.         return array();
  83.     }
  84.    
  85.     /**
  86.      *
  87.      */
  88.     public function getNumsAsHtml($streetId = 0, $selectedHouse = 0)
  89.     {
  90.         return $this->load->view(
  91.             'ajax/house_nums',
  92.             array(
  93.                 'nums' => $this->getHousesNums($streetId),
  94.                 'selected_house' => $selectedHouse
  95.             ),
  96.             false
  97.         );
  98.     }
  99.    
  100.     /**
  101.      * 0 - Заказ успешно оформлен.
  102.      * 1 - Поле ФИО пустое.
  103.      * 2 - E-mail не введен или не соответствует формату.
  104.      * 3 - Номер телефона не введен или не соответствует формату.
  105.      * 4 - Выбрана некорректная улица.
  106.      * 5 - Выбран некоректный номер дома.
  107.      * 6 - Выбран некорректный номер квартиры.
  108.      * 7 - Выбран некорректный период доставки. Проверьте введенные данные.
  109.      * 8 - Поле с заказом не заполнено.
  110.      * 9 - Ошибка при создании нового заказа.
  111.      */
  112.     public function newOrder($post = array())
  113.     {
  114.         $post['fio'] = trim($post['fio']);
  115.         if (mb_strlen($post['fio']) == 0) {
  116.             return 1;
  117.         }
  118.        
  119.         $post['email'] = trim($post['email']);
  120.         if (! $this->validate->email($post['email'])) {
  121.             return 2;
  122.         }
  123.        
  124.         $post['phone'] = trim($post['phone']);
  125.         if (mb_strlen($post['phone']) == 0 || mb_strlen($post['phone']) > 10) {
  126.             return 3;
  127.         }
  128.        
  129.         $post['street'] = (int)$post['street'];
  130.         $street = $this->db->select()->from($this->streetsTable)->where(array('id' => $post['street']))->limit(1)->cache(60)->get('d', 'a');
  131.         if ($street === null) {
  132.             return 4;
  133.         } else {
  134.             $street = $street[0];
  135.         }
  136.        
  137.         if (! in_array($post['house'], explode(',', $street['house_nums']))) {
  138.             return 5;
  139.         }
  140.        
  141.         $post['apartment'] = (int)$post['apartment'];
  142.         if ($post['apartment'] < 1) {
  143.             return 6;
  144.         }
  145.        
  146.         $timeStart  = $this->date->get(false, $post['order_date'] . ' ' . $post['delivery_time_from']);
  147.         $timeFinish = $this->date->get(false, $post['order_date'] . ' ' . $post['delivery_time_to']);
  148.         if ($timeStart < $this->date->get(false) || $timeStart > $timeFinish) {
  149.             return 7;
  150.         }
  151.        
  152.         $post['order_content'] = $post['order_content'];
  153.         if (mb_strlen($post['order_content'])  == 0) {
  154.             return 8;
  155.         }
  156.        
  157.         $result = $this->db
  158.                     ->insert(
  159.                         array(
  160.                             'order_status'          => 1,
  161.                             'user_id'               => $this->getUserId($post['phone']),
  162.                             'user_name'             => $post['fio'],
  163.                             'email'                 => $post['email'],
  164.                             'phone'                 => $post['phone'],
  165.                             'street_id'             => $post['street'],
  166.                             'street_name'           => $this->getStreetName($post['street']),
  167.                             'house'                 => $post['house'],
  168.                             'apartment'             => $post['apartment'],
  169.                             'delivery_time_from'    => $timeStart,
  170.                             'delivery_time_to'      => $timeFinish,
  171.                             'order_content'         => $post['order_content'],
  172.                             'order_price'           => 0,
  173.                             'join_date'             => $this->date->get(false)
  174.                         )
  175.                     )
  176.                     ->from($this->ordersTable)
  177.                     ->get();
  178.        
  179.         return $result ? 0 : 9;
  180.     }
  181.    
  182.     /**
  183.      *
  184.      */
  185.     private function getUserId($phone = '')
  186.     {
  187.         $auth = $this->load->model('auth');
  188.        
  189.         if ($auth->isLogin()) {
  190.             $data = $auth->authData();
  191.            
  192.             return (int)$data['id'];
  193.         } else {
  194.             $userData = $this->db->select()->from($this->usersTable)->where(array('phone' => $phone))->limit(1)->cache(60)->get('d', 'a');
  195.            
  196.             return is_null($userData) ? 0 : (int)$userData[0]['id'];
  197.         }
  198.     }
  199.    
  200.     /**
  201.      *
  202.      */
  203.     private function getStreetName($streetId = 0)
  204.     {
  205.         $street = $this->db->select()->from($this->streetsTable)->where(array('id' => (int)$streetId))->limit(1)->cache(60)->get('d', 'a');
  206.         if ($street === null) {
  207.             return 'Неизвестная улица';
  208.         } else {
  209.             return $street[0]['name'];
  210.         }
  211.     }
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement