/var/www/vhosts/ihelp.ro/httpdocs/src/Controller
NameSizeModeActions
Admin/-0755rm
Api/-0755rm
Async/-0755rm
Component/-0755rm
Dashboard/-0755rm
AjaxController.php9040644editdlrm
AppController.php60900644editdlrm
CartsController.bk.php302280644editdlrm
CartsController.php182420644editdlrm
CategoriesController.php48970644editdlrm
CausesController.php110500644editdlrm
DonationsController.php29690644editdlrm
ErrorController.php17710644editdlrm
OrdersController.php203170644editdlrm
PagesController.php23170644editdlrm
PaymentsController.php90470644editdlrm
ProductFavoritesController.php65950644editdlrm
ProductsController.php71350644editdlrm
ProposedCausesController.php11920644editdlrm
SearchController.php30430644editdlrm
ShowcaseController.php6690644editdlrm
UserAddressesController.php14820644editdlrm
UsersController.php228460644editdlrm
Edit: /var/www/vhosts/ihelp.ro/httpdocs/src/Controller/CartsController.php (18242B)
loadComponent('Tools'); } public function beforeFilter(\Cake\Event\EventInterface $event) { parent::beforeFilter($event); // Configure the login action to not require authentication, preventing // the infinite redirect loop issue $this->Authentication->addUnauthenticatedActions(['add', 'index', 'view', 'edit', 'delete', 'editCustomPrice']); } /** * View method */ public function view() { // daca este user logat if (!empty($this->userAuth->id) && $this->userAuth->id) { $cart = $this->Carts->find('all') ->contain(['CartProducts']) ->where(['user_id' => $this->userAuth->id, 'Carts.is_active' => true]) ->last(); //daca exita cos de cumparaturi if ($cart) { $cartItems = $this->Carts->CartProducts->find() ->contain(['Products', 'Products.FeaturedImage']) ->where(['CartProducts.cart_id' => $cart->id]) ->toList(); $totalPriceCart = $this->Tools->totalPriceCart($cart); $cartIsUpdated = false; foreach ($cartItems as $cartItem) { $stock = $cartItem->product->stock; $qnt = $cartItem['qnt']; // daca stocul este mai mic decat cantitatea selectata if ($stock < $qnt) { if ($stock < 1) { if ($cartItem && $this->Carts->CartProducts->delete($cartItem)) { $cartIsUpdated = true; } $this->Flash->error(__('Ne pare rău, produsul {0} nu mai este în stoc.', $cartItem->product->name)); } else { $this->loadModel('CartProducts'); $this->CartProducts->id = $cartItem->id; $this->CartProducts->saveField('qnt', $stock); $cartIsUpdated = true; $this->Flash->error(__('Ne pare rău, produsul {0} mai are doar {1} bucați.', $cartItem->product->name, $stock)); } } } // daca avem cart id corect si produse cu stoc $cartItemsCount = $this->Carts->CartProducts->find() ->contain(['Products', 'Products.FeaturedImage']) ->where(['CartProducts.cart_id' => $cart->id, 'Products.stock >' => 0]) ->count(); // daca nu sunt produse in cos, stergem cosul if ($cartItemsCount < 1) { $this->Carts->delete($cart); } if ($cartIsUpdated) { return $this->redirect($this->referer()); } $this->set(compact('cartItems', 'totalPriceCart', 'cart')); } else { //$this->Flash->error( __( 'Nu sunt produse in cos' ) ); } } else { // nu este logat $cart_identifier = $this->identifireIdCartSession(); $cart = $this->Carts->find('all') ->contain('CartProducts') ->where(['uuid' => $cart_identifier, 'Carts.is_active' => true]) ->last(); //daca exita cos de cumparaturi if ($cart) { $cartItems = $this->Carts->CartProducts->find() ->contain(['Products', 'Products.FeaturedImage']) ->where(['CartProducts.cart_id' => $cart->id]) ->toList(); $totalPriceCart = $this->Tools->totalPriceCart($cart); $cartIsUpdated = false; foreach ($cartItems as $cartItem) { $stock = $cartItem->product->stock; $qnt = $cartItem['qnt']; // daca stocul este mai mic decat cantitatea selectata if ($stock < $qnt) { if ($stock < 1) { if ($cartItem && $this->Carts->CartProducts->delete($cartItem)) { $cartIsUpdated = true; } $this->Flash->error(__('Ne pare rău, produsul {0} nu mai este în stoc.', $cartItem->product->name)); } else { $this->loadModel('CartProducts'); $this->CartProducts->id = $cartItem->id; $this->CartProducts->saveField('qnt', $stock); $cartIsUpdated = true; $this->Flash->error(__('Ne pare rău, produsul {0} mai are doar {1} bucați.', $cartItem->product->name, $stock)); } } } // daca avem cart id corect si produse cu stoc $cartItemsCount = $this->Carts->CartProducts->find() ->contain('Products') ->where(['CartProducts.cart_id' => $cart->id, 'Products.stock >' => 0]) ->count(); // daca nu sunt produse in cos, stergem cosul if ($cartItemsCount < 1) { $this->Carts->delete($cart); } if ($cartIsUpdated) { return $this->redirect($this->referer()); } $this->set(compact('cartItems', 'totalPriceCart', 'cart')); } else { //$this->Flash->error( __( 'Nu sunt produse in cos' ) ); } } } /** * Add method */ public function add($uuid = false) { # is post # exist uuid # exist product # exist stock # exist auth # exist cart # exist cartProduct # stock product > q cart # is price fixed if ($this->request->is(['patch', 'post', 'put'])) { $formData = $this->request->getData(); if (!empty($formData['uuid'])) { # exist uuid $uuid = $formData['uuid']; $cartNewEmptyEntity = $this->Carts->newEmptyEntity(); $this->loadModel('CartProducts'); $this->loadModel('Products'); $product = $this->Products->find('all') ->where(['Products.uuid' => $uuid, 'Products.is_active' => true])->first(); if (!empty($product)) { # exist product $custom_price = NULL; if (!$product->is_price_fixed) { # is price fixed if (!empty($formData['custom_price']) && $formData['custom_price'] >= $product->price) { $custom_price = $formData['custom_price']; } else { # NOT price fixed $this->Flash->error(__('Prețul introdus este mai mic decât pretul minim recomandat.')); return $this->redirect($this->referer()); } } if ($product->stock >= 1) { # exist stock if (!empty($this->userAuth->id)) { # exist auth $cart = $this->Carts->find('all') ->where(['Carts.user_id' => $this->userAuth->id, 'Carts.is_active' => true]) ->last(); if (empty($cart)) { # NOT exist cart //creare intrare in tabela cart daca user este auth si nu exista in cart $cartData = [ 'uuid' => $this->Tools->generateUUID(), 'user_id' => $this->userAuth->id ]; //salveaza intrarea in tabela cart $cartPatchEntity = $this->Carts->patchEntity($cartNewEmptyEntity, $cartData); if ($this->Carts->save($cartPatchEntity)) { //! addCartProduct $this->addCartProduct($product, $cartPatchEntity, $custom_price); return $this->redirect($this->referer()); } } else { # exist cart $cartProduct = $this->CartProducts->find('all') ->where(['CartProducts.cart_id' => $cart->id, 'CartProducts.product_id' => $product->id]) ->first(); if (!empty($cartProduct)) { //! updateCartProduct $this->updateCartProduct($product, $cartProduct, $custom_price); return $this->redirect($this->referer()); } else { //! addCartProduct $this->addCartProduct($product, $cart, $custom_price); return $this->redirect($this->referer()); } } } else { # NOT exist Auth $cart_identifier = $this->identifireIdCartSession(); $cart = $this->Carts->find() ->where(['Carts.uuid' => $cart_identifier, 'Carts.is_active' => true]) ->last(); if (empty($cart)) { # NOT exist cart //creare intrare in tabela cart daca user nu este auth si nu exista in cart $cartData = [ 'uuid' => $cart_identifier, 'user_id' => null ]; //salveaza intrarea in tabela cart $cartPatchEntity = $this->Carts->patchEntity($cartNewEmptyEntity, $cartData); if ($this->Carts->save($cartPatchEntity)) { //! addCartProduct $this->addCartProduct($product, $cartPatchEntity, $custom_price); return $this->redirect($this->referer()); } } else { # exist cart $cartProduct = $this->CartProducts->find() ->where(['CartProducts.cart_id' => $cart->id, 'CartProducts.product_id' => $product->id]) ->first(); if (!empty($cartProduct)) { //! updateCartProduct $this->updateCartProduct($product, $cartProduct, $custom_price); return $this->redirect($this->referer()); } else { //! addCartProduct $this->addCartProduct($product, $cart, $custom_price); return $this->redirect($this->referer()); } } } } } $this->Flash->error(__('Ne pare rău, produsul nu mai este în stoc')); return $this->redirect($this->referer()); } } $this->Flash->error(__('A intervenit o eroare. Produsul nu a fost gasit')); return $this->redirect($this->referer()); } /** * Edit updateCartProduct */ private function updateCartProduct($product, $cartProduct, $custom_price) { if ($product->stock > $cartProduct['qnt']) { $this->CartProducts->id = $cartProduct->id; if ($this->CartProducts->saveField('qnt', $cartProduct['qnt'] + 1)) { $this->CartProducts->saveField('custom_price', $custom_price); $this->Flash->success(__('Produsul tău a fost adăugat în coș.')); return true; } else { $this->Flash->error(__('Ne pare rău, a intervenit o eroare. Te rugăm încearcă din nou.')); return false; } } $this->Flash->error(__('Ne pare rău, stoc insuficient')); return false; } /** * Edit addCartProduct */ private function addCartProduct($product, $cart, $custom_price) { $this->loadModel('CartProducts'); $cartProductEmptyEntity = $this->CartProducts->newEmptyEntity(); $cartItem = [ 'cart_id' => $cart->id, 'product_id' => $product->id, 'qnt' => 1, 'custom_price' => $custom_price, ]; // add product in cart $cartProductPatchEntity = $this->CartProducts->patchEntity($cartProductEmptyEntity, $cartItem); if ($this->CartProducts->save($cartProductPatchEntity)) { $this->Flash->success(__('Produsul tău a fost adăugat în coș.')); return true; } $this->Flash->error(__('Ne pare rău, a intervenit o eroare. Te rugăm încearcă din nou.')); return false; } /** * Edit method */ public function edit() { $response = ['error' => true, 'msg' => 'A intervenit o eroare', 'forceRedir' => false]; if ($this->request->is(['patch', 'post', 'put'])) { if (!empty($this->userAuth->id) && $this->userAuth->id) { $data = $this->request->getData(); $this->loadModel('CartProducts'); $cartProduct = $this->CartProducts->find('all') ->contain('Products') ->where(['CartProducts.id' => $data['id']]) ->first(); if ($cartProduct) { if ($cartProduct->product->stock >= $data['qnt']) { $this->CartProducts->id = $cartProduct->id; $this->CartProducts->saveField('qnt', $data['qnt']); $response = ['error' => false, 'msg' => 'Coșul a fost actualizat cu succes', 'forceRedir' => false]; } else { $response = ['error' => true, 'msg' => 'Ne pare rău, stoc insuficient', 'forceRedir' => true]; } } } else { // nu este logat $cart_identifier = $this->identifireIdCartSession(); $cart = $this->Carts->find('all') ->where(['Carts.uuid' => $cart_identifier, 'Carts.is_active' => true]) ->first(); if ($cart) { $data = $this->request->getData(); $this->loadModel('CartProducts'); $cartProduct = $this->CartProducts->find('all') ->contain('Products') ->where(['CartProducts.id' => $data['id']]) ->first(); if ($cartProduct) { if ($cartProduct->product->stock >= $data['qnt']) { $this->CartProducts->id = $cartProduct->id; $this->CartProducts->saveField('qnt', $data['qnt']); $response = ['error' => false, 'msg' => 'Coșul a fost actualizat cu succes', 'forceRedir' => false]; } else { $response = ['error' => true, 'msg' => 'Ne pare rău, stoc insuficient', 'forceRedir' => true]; } } } } } echo json_encode($response); die(); } /** * Delete method */ public function delete($id = null) { $this->request->allowMethod(['post', 'delete']); if (!empty($this->userAuth->id) && $this->userAuth->id) { $cartItem = $this->Carts->CartProducts->find('all') ->contain('Carts') ->where(['CartProducts.id' => $id, 'Carts.user_id' => $this->userAuth->id]) ->first(); if ($cartItem && $this->Carts->CartProducts->delete($cartItem)) { $cartItemsCount = $this->Carts->CartProducts->find() ->where(['CartProducts.cart_id' => $cartItem->cart->id]) ->count(); if ($cartItemsCount < 1) { $this->Carts->delete($cartItem->cart); } $this->Flash->success(__('Produsul a fost sters din cos.')); } else { $this->Flash->error(__('Produsul nu a fost sters din cos.')); } } else { // nu este logat $cart_identifier = $this->identifireIdCartSession(); $cartItem = $this->Carts->CartProducts->find('all') ->contain('Carts') ->where(['CartProducts.id' => $id, 'Carts.uuid' => $cart_identifier]) ->first(); if ($cartItem && $this->Carts->CartProducts->delete($cartItem)) { $cartItemsCount = $this->Carts->CartProducts->find() ->where(['CartProducts.cart_id' => $cartItem->cart->id]) ->count(); if ($cartItemsCount < 1) { $this->Carts->delete($cartItem->cart); } $this->Flash->success(__('Produsul a fost șters din coș.')); } else { $this->Flash->error(__('Produsul nu a fost șters din coș.')); } } return $this->redirect($this->referer()); } }