Example #1
0
 public function parseFields($data, $cart)
 {
     $fields = \Ecommerce\UserAdds\Field::getList();
     $name = '';
     foreach ($fields as $field) {
         if ($field->save && !empty($data[$field->id])) {
             $name .= htmlspecialchars($data[$field->id]) . ' ';
         }
     }
     $name = trim($name);
     $userAdds = Ecommerce\UserAdds::get([['user_id', $cart->user->id], ['name', $name]]);
     if (!$userAdds) {
         $userAdds = new Ecommerce\UserAdds();
         $userAdds->user_id = $cart->user->id;
         $userAdds->name = $name;
         $userAdds->save();
         foreach ($fields as $field) {
             if (!$field->save) {
                 continue;
             }
             $userAddsValue = new Ecommerce\UserAdds\Value();
             $userAddsValue->value = htmlspecialchars($data[$field->id]);
             $userAddsValue->useradds_field_id = $field->id;
             $userAddsValue->useradds_id = $userAdds->id;
             $userAddsValue->save();
         }
     }
     $user = \Users\User::get($cart->user_id);
     foreach ($fields as $field) {
         $info = new \Ecommerce\Cart\Info();
         $info->name = $field->name;
         $info->value = htmlspecialchars($data[$field->id]);
         $info->useradds_field_id = $field->id;
         $info->cart_id = $cart->id;
         $info->save();
         $relations = [];
         if ($field->userfield) {
             if (strpos($field->userfield, ':')) {
                 $path = explode(':', $field->userfield);
                 if (!$user->{$path[0]}->{$path[1]}) {
                     $user->{$path[0]}->{$path[1]} = $info->value;
                     $relations[$path[0]] = $path[0];
                 }
             } else {
                 if (!$user->{$field->userfield}) {
                     $user->{$field->userfield} = $info->value;
                 }
             }
         }
         foreach ($relations as $rel) {
             $user->{$rel}->save();
         }
         $user->save();
     }
     return $userAdds;
 }
Example #2
0
 public function buyCardAction()
 {
     $this->view->setTitle('Покупка карты');
     $bread = [];
     $bread[] = ['text' => 'Покупка карты'];
     $user = Users\User::$cur;
     if (!empty($_POST) && !empty($_POST['card_id'])) {
         $error = false;
         $card = \Ecommerce\Card::get((int) $_POST['card_id']);
         if (!$card) {
             $error = true;
             Msg::add('Такой карты не существует', 'danger');
         }
         if (!Users\User::$cur->id) {
             $user_id = $this->Users->registration($_POST, true);
             if (!$user_id) {
                 $error = true;
                 $user = null;
             } else {
                 $user = Users\User::get($user_id);
             }
         }
         $userCard = \Ecommerce\Card\Item::get([['card_id', $card->id], ['user_id', $user->id]]);
         if ($userCard) {
             $error = true;
             Msg::add('У вас уже есть такая карта', 'danger');
         }
         $fields = \Ecommerce\UserAdds\Field::getList();
         foreach ($fields as $field) {
             if (empty($_POST['userAdds']['fields'][$field->id]) && $field->required) {
                 $error = 1;
                 Msg::add('Вы не указали: ' . $field->name);
             }
         }
         if (!$error) {
             $cardItem = new \Ecommerce\Card\Item();
             $cardItem->card_id = $card->id;
             $cardItem->user_id = $user->id;
             $cardItem->save();
             $cart = new \Ecommerce\Cart();
             $cart->user_id = $user->user_id;
             $cart->cart_status_id = 2;
             $cart->comment = htmlspecialchars($_POST['comment']);
             $cart->date_status = date('Y-m-d H:i:s');
             $cart->complete_data = date('Y-m-d H:i:s');
             if (!empty($_SESSION['cart']['cart_id'])) {
                 $cart->card_item_id = $cardItem->id;
             }
             $cart->save();
             $this->module->parseFields($_POST['userAdds']['fields'], $cart);
             $extra = new \Ecommerce\Cart\Extra();
             $extra->name = $card->name;
             $extra->price = $card->price;
             $extra->count = 1;
             $extra->cart_id = $cart->id;
             $extra->info = 'card:' . $card->id . '|cardItem:' . $cardItem->id;
             $extra->save();
             Tools::redirect('/ecommerce/cart/success');
         }
     }
     $this->view->page(['data' => compact('bread')]);
 }
Example #3
0
 public function indexAction()
 {
     $cart = '';
     $deliverys = \Ecommerce\Delivery::getList(['order' => ['weight', 'ASC']]);
     $payTypes = \Ecommerce\PayType::getList(['order' => ['weight', 'ASC']]);
     if (!empty($_SESSION['cart']['cart_id'])) {
         $cart = Ecommerce\Cart::get($_SESSION['cart']['cart_id']);
         if (!empty($_POST)) {
             $error = false;
             if (!Users\User::$cur->id) {
                 $user_id = $this->Users->registration($_POST, true);
                 if (!$user_id) {
                     $error = true;
                 } else {
                     $user = Users\User::get($user_id);
                 }
             } else {
                 $user = Users\User::$cur;
             }
             $ids = [];
             if (!empty($_POST['cartItems'])) {
                 foreach ($_POST['cartItems'] as $cartItemId => $cartItemCont) {
                     $cartItem = \Ecommerce\Cart\Item::get((int) $cartItemId);
                     if (!$cartItem) {
                         continue;
                     }
                     if ($cartItem->cart_id != $cart->id) {
                         continue;
                     }
                     $count = (double) $cartItemCont;
                     if ($count < 0.001) {
                         $count = 1;
                     }
                     $cartItem->count = $count;
                     $cartItem->save();
                     $ids[] = $cartItemId;
                 }
             }
             foreach ($cart->cartItems as $cartItem) {
                 if (!in_array($cartItem->id, $ids)) {
                     $cartItem->delete();
                 }
             }
             $cart = Ecommerce\Cart::get($cart->id);
             if (!$cart->cartItems) {
                 Tools::redirect('/ecommerce', 'Ваша корзина пуста');
             }
             if (empty($this->module->config['sell_over_warehouse'])) {
                 foreach ($cart->cartItems as $cartitem) {
                     $warecount = $cartitem->price->offer->warehouseCount($cart->id);
                     if ($cartitem->count > $warecount) {
                         $error = true;
                         Msg::add('Вы заказали <b>' . $cartitem->item->name . '</b> больше чем есть на складе. на складе: <b>' . $warecount . '</b>', 'danger');
                     }
                 }
             }
             if ($deliverys && empty($deliverys[$_POST['delivery']])) {
                 $error = 1;
                 Msg::add('Выберите способ доставки');
             } elseif ($deliverys && !empty($deliverys[$_POST['delivery']])) {
                 $cart->delivery_id = $_POST['delivery'];
                 foreach ($deliverys[$cart->delivery_id]->fields as $field) {
                     if (empty($_POST['deliveryFields'][$field->id]) && $field->required) {
                         $error = 1;
                         Msg::add('Вы не указали: ' . $field->name);
                     }
                 }
             }
             if ($payTypes && empty($payTypes[$_POST['payType']])) {
                 $error = 1;
                 Msg::add('Выберите способ оплаты');
             } elseif ($payTypes && !empty($payTypes[$_POST['payType']])) {
                 $payType = $payTypes[$_POST['payType']];
                 $cart->paytype_id = $payType->id;
             } else {
                 $payType = null;
             }
             foreach (\Ecommerce\UserAdds\Field::getList() as $field) {
                 if (empty($_POST['userAdds']['fields'][$field->id]) && $field->required) {
                     $error = 1;
                     Msg::add('Вы не указали: ' . $field->name);
                 }
             }
             if (!empty($_POST['discounts']['card_item_id'])) {
                 $userCard = \Ecommerce\Card\Item::get((int) $_POST['discounts']['card_item_id']);
                 if (!$userCard) {
                     $error = true;
                     Msg::add('Такой карты не существует');
                 } elseif ($userCard->user_id != $user->id) {
                     $error = true;
                     Msg::add('Это не ваша карта');
                 } else {
                     $cart->card_item_id = $userCard->id;
                 }
             }
             $cart->save();
             if (!$error && !empty($_POST['action']) && ($_POST['action'] = 'order')) {
                 $cart->user_id = $user->user_id;
                 $this->module->parseFields($_POST['userAdds']['fields'], $cart);
                 if ($payTypes && !empty($payTypes[$cart->paytype_id]) && !empty($_POST['deliveryFields'])) {
                     $this->module->parseDeliveryFields($_POST['deliveryFields'], $cart, $deliverys[$cart->delivery_id]->fields);
                 }
                 $cart->cart_status_id = 2;
                 $cart->comment = htmlspecialchars($_POST['comment']);
                 $cart->date_status = date('Y-m-d H:i:s');
                 $cart->complete_data = date('Y-m-d H:i:s');
                 $cart->warehouse_block = 1;
                 $cart->save();
                 $cart = \Ecommerce\Cart::get($cart->id);
                 foreach ($cart->cartItems as $cartItem) {
                     $cartItem->discount = $cartItem->discount();
                     $cartItem->final_price = $cartItem->price->price - $cartItem->discount;
                     $cartItem->save();
                 }
                 $cart = \Ecommerce\Cart::get($cart->id);
                 if (!empty(\App::$cur->ecommerce->config['notify_mail'])) {
                     $text = 'Перейдите в админ панель чтобы просмотреть новый заказ <a href = "http://' . idn_to_utf8(INJI_DOMAIN_NAME) . '/admin/ecommerce/Cart">Админ панель</a>';
                     $title = 'Новый заказ в интернет магазине на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME);
                     \Tools::sendMail('noreply@' . INJI_DOMAIN_NAME, \App::$cur->ecommerce->config['notify_mail'], $title, $text);
                 }
                 if ($this->notifications) {
                     $notification = new Notifications\Notification();
                     $notification->name = 'Новый заказ в интернет магазине на сайте ' . idn_to_utf8(INJI_DOMAIN_NAME);
                     $notification->text = 'Перейдите в админ панель чтобы просмотреть новый заказ';
                     $notification->chanel_id = $this->notifications->getChanel('Ecommerce-orders')->id;
                     $notification->save();
                 }
                 $handlers = $this->ecommerce->getSnippets('payTypeHandler');
                 $redirect = ['/ecommerce/cart/success'];
                 if ($payType && !empty($handlers[$payType->handler]['handler'])) {
                     $newRedirect = $handlers[$payType->handler]['handler']($cart);
                     if (!empty($newRedirect)) {
                         $redirect = $newRedirect;
                     }
                 }
                 unset($_SESSION['cart']['cart_id']);
                 call_user_func_array(['Tools', 'redirect'], $redirect);
             }
         }
     }
     $this->view->setTitle('Корзина');
     $bread = [];
     $bread[] = ['text' => 'Каталог', 'href' => '/ecommerce'];
     $bread[] = ['text' => 'Корзина', 'href' => '/ecommerce/cart'];
     $this->view->page(['data' => compact('cart', 'items', 'deliverys', 'payTypes', 'packItem', 'bread')]);
 }