src/Controller/ProductController.php line 509

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  9. use Symfony\Component\HttpFoundation\Session\Session;
  10. use App\Entity\ProductCategory;
  11. use App\Entity\Partner;
  12. use App\Entity\Product;
  13. use App\Entity\ProductVariation;
  14. use App\Entity\ProductImage;
  15. use App\Entity\EntryDetail;
  16. use App\Entity\ProductEntry;
  17. use App\Entity\Attribute;
  18. use App\Entity\AttributeValues;
  19. use App\Entity\ProductAttribute;
  20. class ProductController extends AbstractController
  21. {
  22.     /**
  23.      * @Route("/admin/nn/list/products", name="sajong_ecom_admin_list_product")
  24.      */
  25.     public function productlist(Request $request)
  26.     {
  27.         $em $this->getDoctrine()->getManager();
  28.         $sizes = array();
  29.         $params = array();
  30.         if(!empty($request->get('brand'))) {
  31.           $extra .= " AND p.brand=:bid";
  32.           $params['bid'] = $request->get('brand');
  33.         }
  34.         
  35.         if(!empty($request->get('global_category'))) {
  36.           $extra .= " AND p.globalcategory=:gid";
  37.           $params['gid'] = $request->get('global_category');
  38.         }
  39.         
  40.         if(!empty($request->get('product_category'))) {
  41.           $extra .= " AND p.productcategory=:pid";
  42.           $params['pid'] = $request->get('product_category');
  43.         }
  44.         
  45.         if(!empty($request->get('title'))) {
  46.           $extra .= " AND p.title=:title";
  47.           $params['title'] = '%' $request->get('title') .'%';
  48.         }
  49.         if(!empty($request->get('collection'))) {
  50.           foreach($request->get('collection') as $attr) {
  51.             $collection_filterurl .= '&collection[]=' $attr;
  52.             $selected_coln[$attr] = 'active';
  53.             $params['collection'][] = $attr;
  54.           }
  55.           $extra .= " AND pa.attributeId IN (:collection)";
  56.           $extbl stristr($extbl", App\Entity\ProductAttribute pa")?'':", App\Entity\ProductAttribute pa";
  57.         }
  58.         if(!empty($request->get('size'))) {
  59.           foreach($request->get('size') as $attr) {
  60.             $size_filterurl .= '&size[]=' $attr;
  61.             $selected_size[$attr] = 'active';
  62.             $params['size'][] = $attr;
  63.           }
  64.           $extra .= " AND v.size IN (:size)";
  65.         }
  66.         if(!empty($request->get('category'))) {
  67.           foreach($request->get('category') as $attr) {
  68.             $category_filterurl .= '&category[]=' $attr;
  69.             $selected_cat[$attr] = 'active';
  70.             $params['category'][] = $attr;
  71.           }
  72.           $extra .= " AND pa.attributeId IN (:category)";
  73.           $extbl stristr($extbl", App\Entity\ProductAttribute pa")?'':", App\Entity\ProductAttribute pa";
  74.         }
  75.         if(!empty($request->get('style'))) {
  76.           $extra .= " AND p.style=:sid";
  77.           $params['sid'] = $request->get('style');
  78.           $sizes $em->createQuery("SELECT s.id, s.name, s.price FROM App\Entity\Size s, App\Entity\StyleSize ss WHERE ss.styleId=:stl AND ss.sizeId=s.id")->setParameters(['stl'=>$request->get('style')])->getArrayResult();
  79.         }
  80.         $brands $em->getRepository('App\Entity\Brand')->findByStatus(1, array('title'=>'ASC'));
  81.         $globalcategories $em->getRepository('App\Entity\GlobalCategory')->findByStatus(1, array('name'=>'ASC'));
  82.         $productcategories $em->getRepository('App\Entity\ProductCategory')->findByStatus(1, array('name'=>'ASC'));
  83.         $styles $em->getRepository('App\Entity\Style')->findByStatus(1, array('name'=>'ASC'));
  84.         $collection $em->getRepository('App\Entity\Attribute')->findOneByName('collections');
  85.         if($collection != null) {
  86.             $collections $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($collection->getId(), array('title'=>'ASC'));
  87.         }
  88.         else {
  89.             $collections = array();
  90.         }
  91.         $categoryatr $em->getRepository('App\Entity\Attribute')->findOneByName('category');
  92.         if($categoryatr != null) {
  93.             $categoryatv $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($categoryatr->getId(), array('title'=>'ASC'));
  94.         }
  95.         else {
  96.             $categoryatv = array();
  97.         } 
  98.         
  99.         if(!empty($extra)) {
  100.           $products $em->createQuery("SELECT p.id, p.path, p.title, p.description, pi.image, p.styledescription, p.type, MIN(v.price) price, MIN(v.actualPrice) actualPrice, MIN(v.total) total, p.productcount, p.quantity, p.totalcount, p.status, p.brand, b.title brandname, p.globalcategory, g.name gcname, p.productcategory, c.name pcname, p.style, s.name sname FROM App\Entity\Product p, App\Entity\ProductVariation v, App\Entity\ProductImage pi, App\Entity\Brand b, App\Entity\GlobalCategory g, App\Entity\ProductCategory c, App\Entity\Style s WHERE v.productId=p.id AND pi.productId=p.id AND b.id=p.brand AND g.id=p.globalcategory AND c.id=p.productcategory AND s.id=p.style " $extra " GROUP BY p.id ORDER BY p.id DESC")->setParameters($params)->getArrayResult();//->setMaxResults(20)
  101.         }
  102.         else {
  103.           $products $em->createQuery("SELECT p.id, p.path, p.title, p.description, pi.image, p.styledescription, p.type, MIN(v.price) price, MIN(v.actualPrice) actualPrice, MIN(v.total) total, p.productcount, p.quantity, p.totalcount, p.status, p.brand, b.title brandname, p.globalcategory, g.name gcname, p.productcategory, c.name pcname, p.style, s.name sname FROM App\Entity\Product p, App\Entity\ProductVariation v, App\Entity\ProductImage pi, App\Entity\Brand b, App\Entity\GlobalCategory g, App\Entity\ProductCategory c, App\Entity\Style s WHERE v.productId=p.id AND pi.productId=p.id AND b.id=p.brand AND g.id=p.globalcategory AND c.id=p.productcategory AND s.id=p.style GROUP BY p.id ORDER BY p.id DESC")->getArrayResult();//->setMaxResults(20)
  104.         }
  105.         //$products = $em->getRepository('App\Entity\Product')->findAll();
  106.         return $this->render('admin/products.html.twig', array('products'=> $products'status'=> array('Inactive''Active'), 'brands'=>$brands'globalcategories'=>$globalcategories'productcategories'=>$productcategories'styles'=>$styles'sizes'=>$sizes'collections'=>$collections'categoryatr'=>$categoryatr'categoryatv'=>$categoryatv'params'=>$params));
  107.     }
  108.     
  109.     /**
  110.      * @Route("/admin/nn/add/product", name="sajong_ecom_admin_add_product")
  111.      */
  112.     public function addproduct()
  113.     {
  114.         $em $this->getDoctrine()->getManager();
  115.         $brands $em->getRepository('App\Entity\Brand')->findByStatus(1, array('title'=>'ASC'));
  116.         $cities $em->getRepository('App\Entity\City')->findAll();
  117.         $city = array();
  118.         foreach ($cities as $c) {
  119.           $city[$c->getId()] = $c->getName();
  120.         }
  121.         $globalcategories $em->getRepository('App\Entity\GlobalCategory')->findByStatus(1, array('name'=>'ASC'));
  122.         $productcategories $em->getRepository('App\Entity\ProductCategory')->findByStatus(1, array('name'=>'ASC'));
  123.         $styles $em->getRepository('App\Entity\Style')->findByStatus(1, array('name'=>'ASC'));
  124.         $sizes $em->getRepository('App\Entity\Size')->findByStatus(1,array('name'=>'ASC'));
  125.         $colors $em->getRepository('App\Entity\Color')->findByStatus(1,array('name'=>'ASC'));
  126.         $producttypes $em->getRepository('App\Entity\ProductType')->findByStatus(1);
  127.         $collection $em->getRepository('App\Entity\Attribute')->findOneByName('collections');
  128.         if($collection != null) {
  129.             $collections $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($collection->getId(), array('title'=>'ASC'));
  130.         }
  131.         else {
  132.             $collections = array();
  133.         }
  134.         $categoryatr $em->getRepository('App\Entity\Attribute')->findOneByName('category');
  135.         if($categoryatr != null) {
  136.             $categoryatv $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($categoryatr->getId(), array('title'=>'ASC'));
  137.         }
  138.         else {
  139.             $categoryatv = array();
  140.         }        
  141.         return $this->render('admin/addproduct.html.twig', array('status'=> array('Inactive''Active'), 'brands'=>$brands'globalcategories'=>$globalcategories'productcategories'=>$productcategories'styles'=>$styles'sizes'=>$sizes'colors'=>$colors'collections'=>$collections'categoryatr'=>$categoryatr'categoryatv'=>$categoryatv'producttypes'=>$producttypes'city'=>$city));
  142.     }
  143.     
  144.     /**
  145.      * @Route("/admin/nn/edit/product/{id}", name="sajong_ecom_admin_edit_product")
  146.      */
  147.     public function editproduct($id)
  148.     {
  149.         $em $this->getDoctrine()->getManager();
  150.         $product $em->getRepository('App\Entity\Product')->find($id);
  151.         $productvariations $em->getRepository('App\Entity\ProductVariation')->findByProductId($id);
  152.         $variationimages = array();
  153.         foreach ($productvariations as $productvariation) {
  154.           $variationimages[$productvariation->getId()] = $em->getRepository('App\Entity\ProductImage')->findByVariationId($productvariation->getId());
  155.         }
  156.         $brands $em->getRepository('App\Entity\Brand')->findByStatus(1, array('title'=>'ASC'));
  157.         $cities $em->getRepository('App\Entity\City')->findAll();
  158.         $city = array();
  159.         foreach ($cities as $c) {
  160.           $city[$c->getId()] = $c->getName();
  161.         }
  162.         $globalcategories $em->getRepository('App\Entity\GlobalCategory')->findByStatus(1, array('name'=>'ASC'));
  163.         $productcategories $em->getRepository('App\Entity\ProductCategory')->findByStatus(1, array('name'=>'ASC'));
  164.         $apparelcategories $em->getRepository('App\Entity\ProductCategory')->findByGlobalCategory(65, array('name'=>'ASC'));
  165.         $styles $em->getRepository('App\Entity\Style')->findByStatus(1, array('name'=>'ASC'));
  166.         $sizes $em->getRepository('App\Entity\Size')->findByStatus(1,array('name'=>'ASC'));
  167.         $colors $em->getRepository('App\Entity\Color')->findByStatus(1,array('name'=>'ASC'));
  168.         $producttypes $em->getRepository('App\Entity\ProductType')->findByStatus(1);
  169.         $collection $em->getRepository('App\Entity\Attribute')->findOneByName('collections');
  170.         if($collection != null) {
  171.             $collections $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($collection->getId(), array('title'=>'ASC'));
  172.         }
  173.         else {
  174.             $collections = array();
  175.         }
  176.         $categoryatr $em->getRepository('App\Entity\Attribute')->findOneByName('category');
  177.         if($categoryatr != null) {
  178.             $categoryatv $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($categoryatr->getId(), array('title'=>'ASC'));
  179.         }
  180.         else {
  181.             $categoryatv = array();
  182.         }
  183.         return $this->render('admin/editproduct.html.twig', array('status'=> array('Inactive''Active'), 'product'=> $product'variations'=> $productvariations'variationimages'=> $variationimages'brands'=>$brands'globalcategories'=>$globalcategories'productcategories'=>$productcategories'apparelcategories'=>$apparelcategories'styles'=>$styles'sizes'=>$sizes'colors'=>$colors'collections'=>$collections'categoryatr'=>$categoryatr'categoryatv'=>$categoryatv'producttypes'=>$producttypes'city'=>$city ));
  184.     }
  185.     
  186.     /**
  187.      * @Route("/admin/nn/save/product", name="sajong_ecom_admin_save_product")
  188.      */
  189.     public function saveproduct(Request $request)
  190.     {
  191.         $em $this->getDoctrine()->getManager();
  192.         if(!empty($request->get('productid'))) {
  193.             $product $em->getRepository('App\Entity\Product')->find($request->get('productid'));
  194.             $this->addFlash('success''Product updated successfully');
  195.         }
  196.         else {
  197.             $product = new Product();
  198.             $product->setCreated(new \DateTime()); 
  199.             $this->addFlash('success''Product added successfully');
  200.         }
  201.         $product->setTitle($request->get('title')); 
  202.         $product->setPath($request->get('path')); 
  203.         $product->setDescription($request->get('description')); 
  204.         $product->setStyledescription($request->get('styledescription')); 
  205.         $product->setBrand($request->get('brand')); 
  206.         $product->setGlobalcategory($request->get('globalcategory')); 
  207.         $product->setProductcategory($request->get('productcategory')); 
  208.         $product->setStyle($request->get('style')); 
  209.         $product->setType($request->get('type')); 
  210.         $product->setQuantity(!empty($request->get('quantity'))?$request->get('quantity'):0); 
  211.         $product->setProductcount(!empty($request->get('productcount'))?$request->get('productcount'):0); 
  212.         $product->setPrice(!empty($request->get('price'))?($request->get('price')*100):0); 
  213.         $product->setTax(!empty($request->get('tax'))?($request->get('tax')*100):0); 
  214.         $product->setDiscount(!empty($request->get('discount'))?($request->get('discount')*100):0); 
  215.         //$product->setTotal(!empty($request->get('total'))?$request->get('total'):$request->get('price')); 
  216.         $product->setTotal(!empty($request->get('price'))?($request->get('price')*100):0); 
  217.         $product->setUpdated(new \DateTime()); 
  218.         $product->setCreatedBy($this->getUser()->getId()); 
  219.         $product->setAccess(new \DateTime()); 
  220.         $product->setTotalcount(0); 
  221.         $product->setStage('Approved'); 
  222.         $product->setStatus($request->get('status')); 
  223.         
  224.         $em->persist($product);
  225.         $em->flush();
  226.         
  227.         for($i=0$i<count($request->get('variationtitle')); $i++) {
  228.           if(!empty($request->get('variationtitle')[$i])) {
  229.             $productvariation null;
  230.             if (!empty($request->get('product_variationid')[$i])) {
  231.               $productvariation $em->getRepository('App\Entity\ProductVariation')->find($request->get('product_variationid')[$i]);
  232.             }
  233.             if($productvariation == null) {
  234.               $productvariation = new ProductVariation();
  235.               $productvariation->setProductId($product->getId()); 
  236.               $productvariation->setCreated(new \DateTime()); 
  237.               $productvariation->setCreatedBy($this->getUser()->getId()); 
  238.               $productvariation->setAccess(new \DateTime());
  239.             }
  240.             $findex $request->get('variationai')[$i];
  241.             $productvariation->setTitle($request->get('variationtitle')[$i]); 
  242.             $productvariation->setSku($request->get('variationsku')[$i]); 
  243.             $productvariation->setColor($request->get('variationcolor')[$i]); 
  244.             $productvariation->setSize($request->get('variationsize')[$i]); 
  245.             $productvariation->setActualPrice($request->get('variation_actual_price')[$i]*100); 
  246.             $productvariation->setPrice($request->get('variation_price')[$i]*100); 
  247.             $productvariation->setTax(0); 
  248.             $productvariation->setTotal($request->get('variation_price')[$i]*100); 
  249.             $productvariation->setUpdated(new \DateTime()); 
  250.             $productvariation->setTotalcount(!empty($request->get('variation_count')[$i])?$request->get('variation_count')[$i]:0); 
  251.             $productvariation->setStock($request->get('variation_stock')[$i]); 
  252.             $productvariation->setStatus(!empty($request->get('variation_status')[$i])?1:0); 
  253.             $em->persist($productvariation);
  254.             $em->flush();
  255.             if (!empty($request->get('product_variationid')[$i])) {
  256.                 if(!empty($request->get('evariationimage')[$findex])) {
  257.                   for($k=0$k<count($request->get('evariationimage')[$findex]); $k++) {
  258.                     if(!empty($request->get('evariationimage')[$findex][$k])) {
  259.                       $productimage = new ProductImage();
  260.                       $productimage->setProductId($product->getId()); 
  261.                       $productimage->setVariationId($productvariation->getId()); 
  262.                       $productimage->setImage($request->get('evariationimage')[$findex][$k]); 
  263.                       $productimage->setImageType('Product'); 
  264.                       $productimage->setWeight($request->get('evariationimgweight')[$findex][$k]); 
  265.                       $productimage->setCreated(new \DateTime()); 
  266.                       $productimage->setStatus(1); 
  267.                       $em->persist($productimage);
  268.                       $em->flush();
  269.                     }
  270.                   }
  271.                 }
  272.             }
  273.             else {
  274.                 if(!empty($request->get('variationimage')[$findex])) {
  275.                   for($k=0$k<count($request->get('variationimage')[$findex]); $k++) {
  276.                     if(!empty($request->get('variationimage')[$findex][$k])) {
  277.                       $productimage = new ProductImage();
  278.                       $productimage->setProductId($product->getId()); 
  279.                       $productimage->setVariationId($productvariation->getId()); 
  280.                       $productimage->setImage($request->get('variationimage')[$findex][$k]); 
  281.                       $productimage->setImageType('Product'); 
  282.                       $productimage->setWeight($request->get('variationimgweight')[$findex][$k]); 
  283.                       $productimage->setCreated(new \DateTime()); 
  284.                       $productimage->setStatus(1); 
  285.                       $em->persist($productimage);
  286.                       $em->flush();
  287.                     }
  288.                   }
  289.                 }
  290.             }
  291.           }
  292.         }
  293.         if(!empty($request->get('deleted_variations'))) {
  294.           $delvariations explode(","$request->get('deleted_variations'));
  295.           foreach ($delvariations as $dv) {
  296.             $delvariation $em->getRepository('App\Entity\ProductVariation')->find(trim($dv));
  297.             $em->remove($delvariation);
  298.             $em->flush();
  299.           }
  300.         }
  301.         $files explode(","$request->get('deleted_variation_images'));
  302.         foreach ($files as $f) {
  303.           if(!empty($f) && file_exists($f)) {
  304.             unlink($f);
  305.             $productimage $em->getRepository('App\Entity\ProductImage')->findOneByImage($f);
  306.             $em->remove($productimage);
  307.             $em->flush();
  308.           }
  309.         }
  310.         if(!empty($request->get('imageid'))) {
  311.           for($i=0$i<count($request->get('imageid')); $i++) {
  312.             $productimage $em->getRepository('App\Entity\ProductImage')->find($request->get('imageid')[$i]);
  313.             $productimage->setWeight(!empty($request->get('vimageweight')[$i])?$request->get('vimageweight')[$i]:$i);
  314.             $em->persist($productimage);
  315.             $em->flush();
  316.           }
  317.         }
  318.         
  319.         return $this->redirect($this->generateUrl('sajong_ecom_admin_list_product'));
  320.     }
  321.     
  322.     /**
  323.      * @Route("/admin/nn/delete/product/{id}", name="sajong_ecom_admin_delete_product")
  324.      */
  325.     public function deleteproduct($id)
  326.     {
  327.         $em $this->getDoctrine()->getManager();
  328.         $product $em->getRepository('App\Entity\Product')->find($id);
  329.         $em->remove($product);
  330.         $em->flush();
  331.         $this->addFlash('success''Product deleted successfully');
  332.         return $this->redirect($this->generateUrl('sajong_ecom_admin_list_product'));
  333.     }
  334.   
  335.   /**
  336.    * @Route("/uploadproductimage", name="sajong_ecom_upload_productimage")
  337.    */
  338.   public function uploadproductimage(Request $request)
  339.   {
  340.       $img $request->get('photo');
  341.       $fileName uniqid() . '.png';
  342.       $folderPath "uploads/products/";
  343.     
  344.       $file $folderPath $fileName;
  345.       $fp   fopen($file'w');
  346.       $data explode(','$img);
  347.       fwrite($fpbase64_decode($data[1]));
  348.       fclose($fp);
  349.       echo $folderPath $fileName; exit;
  350.   }
  351.     
  352.     /**
  353.      * @Route("/store", name="sajong_ecom_products_store")
  354.      */
  355.     public function store(Request $request)
  356.     {
  357.         $em $this->getDoctrine()->getManager();
  358.         
  359.         $srtb '';
  360.         $extra '';
  361.         $lftjoin '';
  362.         $srtodr '';
  363.         $extbl '';
  364.         $params = array();
  365.         $selected_prodtype = array();
  366.         $selected_style = array();
  367.         $selected_size = array();
  368.         $selected_color = array();
  369.         
  370.         $globalcategories $em->getRepository('App\Entity\GlobalCategory')->findByStatus(1, array('name'=>'ASC'));
  371.         $productcategories $em->getRepository('App\Entity\ProductCategory')->findByStatus(1, array('name'=>'ASC'));
  372.         $producttypes $em->getRepository('App\Entity\ProductType')->findByStatus(1, array('name'=>'ASC'));
  373.         $styles $em->getRepository('App\Entity\Style')->findByStatus(1, array('name'=>'ASC'));
  374.         $sizes $em->getRepository('App\Entity\Size')->findByStatus(1, array('name'=>'ASC'));
  375.         $colors $em->getRepository('App\Entity\Color')->findByStatus(1, array('name'=>'ASC'));
  376.         $collection $em->getRepository('App\Entity\Attribute')->findOneByName('collections');
  377.         if($collection != null) {
  378.             $collections $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($collection->getId(), array('title'=>'ASC'));
  379.         }
  380.         else {
  381.             $collections = array();
  382.         }
  383.         $categoryatr $em->getRepository('App\Entity\Attribute')->findOneByName('category');
  384.         if($categoryatr != null) {
  385.             $categoryatv $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($categoryatr->getId(), array('title'=>'ASC'));
  386.         }
  387.         else {
  388.             $categoryatv = array();
  389.         }
  390.         
  391.         if(!empty($_GET['global_category'])) {
  392.           $extra .= " AND p.globalcategory=:gid";
  393.           $params['gid'] = $_GET['global_category'];
  394.           $productcategories $em->getRepository('App\Entity\ProductCategory')->findByGlobalCategory($_GET['global_category'], array('name'=>'ASC'));
  395.         }
  396.         if(!empty($_GET['product_category'])) {
  397.           $extra .= " AND p.productcategory=:pid";
  398.           $params['pid'] = $_GET['product_category'];
  399.           $styles $em->getRepository('App\Entity\Style')->findByProductCategory($_GET['product_category'], array('name'=>'ASC'));
  400.         }
  401.         if(!empty($_GET['prodtype'])) {
  402.           foreach($_GET['prodtype'] as $attr) {
  403.             $params['prodtype'][] = $attr;
  404.             $selected_prodtype[$attr] = 'checked';
  405.           }
  406.           $extra .= " AND p.type IN (:prodtype)";
  407.         }
  408.         if(!empty($_GET['collection'])) {
  409.           foreach($_GET['collection'] as $attr) {
  410.             $params['collection'][] = $attr;
  411.           }
  412.           $extra .= " AND pa.attributeId IN (:collection)";
  413.           $extbl stristr($extbl", App\Entity\ProductAttribute pa")?'':", App\Entity\ProductAttribute pa";
  414.         }
  415.         if(!empty($_GET['category'])) {
  416.           foreach($_GET['category'] as $attr) {
  417.             $params['category'][] = $attr;
  418.           }
  419.           $extra .= " AND pa.attributeId IN (:category)";
  420.           $extbl stristr($extbl", App\Entity\ProductAttribute pa")?'':", App\Entity\ProductAttribute pa";
  421.         }
  422.         if(!empty($_GET['style'])) {
  423.           $params['sid'] = $_GET['style'];
  424.           $selected_style[$_GET['style']] = 'checked';
  425.           $extra .= " AND p.style=:sid";
  426.           //$sizes = $em->createQuery("SELECT s.id, s.name, s.price FROM App\Entity\Size s, App\Entity\StyleSize ss WHERE ss.styleId=:stl AND ss.sizeId=s.id")->setParameters(['stl'=>$_GET['style']])->getArrayResult();
  427.         }
  428.         if(!empty($_GET['size'])) {
  429.           foreach($_GET['size'] as $attr) {
  430.             $params['size'][] = $attr;
  431.             $selected_size[$attr] = 'checked';
  432.           }
  433.           $extra .= " AND v.size IN (:size)";
  434.         }
  435.         if(!empty($_GET['color'])) {
  436.           foreach($_GET['color'] as $attr) {
  437.             $params['color'][] = $attr;
  438.             $selected_color[$attr] = 'checked';
  439.           }
  440.           $extra .= " AND v.color IN (:color)";
  441.         }
  442.         
  443.         if(!empty($_GET['sort_by'])) {
  444.           if ($_GET['sort_by'] == 'l')
  445.             $srtodr " ORDER BY v.price ASC";
  446.           elseif ($_GET['sort_by'] == 'h')
  447.             $srtodr " ORDER BY v.price DESC";
  448.           elseif ($_GET['sort_by'] == 'r')
  449.             $srtodr " ORDER BY v.created DESC";
  450.           elseif ($_GET['sort_by'] == 'p') {
  451.             $lftjoin " LEFT JOIN App\Entity\Flagging f WITH f.entityId=p.id AND f.entityType='product' AND f.fid=3";
  452.             $srtodr " ORDER BY COUNT(f.id) DESC";
  453.           }
  454.           $srtb $_GET['sort_by'];
  455.         }
  456.         
  457.         $size = array();
  458.         $color = array();
  459.         $size[0] = '';
  460.         foreach ($sizes as $s) {
  461.           $size[$s->getId()] = " | " $s->getName();
  462.         }
  463.         $color[0] = '';
  464.         foreach ($colors as $c) {
  465.           $color[$c->getId()] = " | " $c->getName();
  466.         }
  467.         $products = array();
  468.         if(!empty($request->get('page')) && $request->get('page')=='infinitescroll') {
  469.           if(!empty($extra)) {
  470.             //$products = $em->createQuery("SELECT p.id, p.path, p.title, v.id vid, v.color, v.size, pi.image, p.styledescription, p.type, MIN(v.price) price, MIN(v.actualPrice) actualPrice, MIN(v.total) total, p.totalcount FROM App\Entity\Product p" . $lftjoin . ", App\Entity\ProductVariation v, App\Entity\ProductImage pi" . $extbl . " WHERE v.productId=p.id AND pi.productId=p.id AND p.status=1 " . $extra . " GROUP BY p.id" . $srtodr)->setParameters($params)->setFirstResult(12)->getArrayResult();
  471.             $products $em->createQuery("SELECT p.id, p.path, p.title, v.id vid, v.color, v.size, pi.image, p.styledescription, p.type, v.price, v.actualPrice, v.total, p.totalcount FROM App\Entity\Product p" $lftjoin ", App\Entity\ProductVariation v, App\Entity\ProductImage pi" $extbl " WHERE v.productId=p.id AND pi.productId=p.id AND p.status=1 " $extra  " GROUP BY p.id "$srtodr)->setParameters($params)->setFirstResult(12)->getArrayResult();
  472.           }
  473.           else {
  474.             //$products = $em->createQuery("SELECT p.id, p.path, p.title, v.id vid, v.color, v.size, pi.image, p.styledescription, p.type, MIN(v.price) price, MIN(v.actualPrice) actualPrice, MIN(v.total) total, p.totalcount FROM App\Entity\Product p" . $lftjoin . ", App\Entity\ProductVariation v, App\Entity\User u, App\Entity\ProductImage pi" . $extbl . " WHERE v.productId=p.id AND pi.productId=p.id AND p.createdBy=u.id AND p.status=1 GROUP BY p.id" . $srtodr)->setFirstResult(12)->getArrayResult();
  475.             $products $em->createQuery("SELECT p.id, p.path, p.title, v.id vid, v.color, v.size, pi.image, p.styledescription, p.type, v.price, v.actualPrice, v.total, p.totalcount FROM App\Entity\Product p" $lftjoin ", App\Entity\ProductVariation v, App\Entity\User u, App\Entity\ProductImage pi" $extbl " WHERE v.productId=p.id AND pi.productId=p.id AND p.createdBy=u.id AND p.status=1 "  " GROUP BY p.id "$srtodr)->setFirstResult(12)->getArrayResult();
  476.           }
  477.           //$this->get('session')->set('pageno', $this->get('session')->get('pageno')+1);
  478.           //$products = $em->createQuery("SELECT p.id, p.path, p.title, p.styledescription, p.type, p.price, 'test' as image,  'test' as firstname,  'test' as lastname, p.totalcount FROM App\Entity\Product p")->getArrayResult();
  479.           return $this->render('ecom/store_infinitescroll.html.twig', array('products'=>$products'globalcategories'=>$globalcategories'productcategories'=>$productcategories'producttypes'=> $producttypes'styles'=>$styles'sizes'=>$sizes'size'=>$size'colors'=>$colors'color'=>$color'collections'=>$collections'categoryatv'=>$categoryatv'srtb'=>$srtb'params'=>$params'selected_prodtype'=>$selected_prodtype'selected_style'=>$selected_style'selected_size'=>$selected_size'selected_color'=>$selected_color'page'=>($request->get('np')+1)));
  480.         }
  481.         else {
  482.           //$this->get('session')->set('pageno', 0);
  483.           if(!empty($extra)) {
  484.             //$products = $em->createQuery("SELECT p.id, p.path, p.title, v.id vid, v.color, v.size, pi.image, p.styledescription, p.type, MIN(v.price) price, MIN(v.actualPrice) actualPrice, MIN(v.total) total, p.totalcount FROM App\Entity\Product p" . $lftjoin . ", App\Entity\ProductVariation v, App\Entity\ProductImage pi" . $extbl . " WHERE v.productId=p.id AND pi.productId=p.id AND p.status=1 " . $extra . " GROUP BY p.id" . $srtodr)->setParameters($params)->setMaxResults(12)->getArrayResult();
  485.             $products $em->createQuery("SELECT p.id, p.path, p.title, v.id vid, v.color, v.size, pi.image, p.styledescription, p.type, v.price, v.actualPrice, v.total, p.totalcount FROM App\Entity\Product p" $lftjoin ", App\Entity\ProductVariation v, App\Entity\ProductImage pi" $extbl " WHERE v.productId=p.id AND pi.productId=p.id AND p.status=1 " $extra  " GROUP BY p.id "$srtodr)->setParameters($params)->setMaxResults(12)->getArrayResult();
  486.           }
  487.           else {
  488.             //$products = $em->createQuery("SELECT p.id, p.path, p.title, v.id vid, v.color, v.size, pi.image, p.styledescription, p.type, MIN(v.price) price, MIN(v.actualPrice) actualPrice, MIN(v.total) total, p.totalcount FROM App\Entity\Product p" . $lftjoin . ", App\Entity\ProductVariation v, App\Entity\ProductImage pi" . $extbl . " WHERE v.productId=p.id AND pi.productId=p.id AND p.status=1 GROUP BY p.id" . $srtodr)->setMaxResults(12)->getArrayResult();
  489.             $products $em->createQuery("SELECT p.id, p.path, p.title, v.id vid, v.color, v.size, pi.image, p.styledescription, p.type, v.price, v.actualPrice, v.total, p.totalcount FROM App\Entity\Product p" $lftjoin ", App\Entity\ProductVariation v, App\Entity\ProductImage pi" $extbl " WHERE v.productId=p.id AND pi.productId=p.id AND p.status=1" " GROUP BY p.id " $srtodr)->setMaxResults(12)->getArrayResult();
  490.           }
  491.           //print_r($products); exit;
  492.           return $this->render('ecom/store.html.twig', array('products'=>$products'globalcategories'=>$globalcategories'productcategories'=>$productcategories'producttypes'=> $producttypes'styles'=>$styles'sizes'=>$sizes'size'=>$size'colors'=>$colors'color'=>$color'collections'=>$collections'categoryatv'=>$categoryatv'srtb'=>$srtb'params'=>$params'selected_prodtype'=>$selected_prodtype'selected_style'=>$selected_style'selected_size'=>$selected_size'selected_color'=>$selected_color));
  493.         }
  494.     }
  495.     
  496.     /**
  497.      * @Route("/product/{path}", name="sajong_ecom_product_details")
  498.      */
  499.     public function productdetails(Request $request$path)
  500.     {
  501.         $em $this->getDoctrine()->getManager();
  502.         $session $request->getSession();
  503.         $product $em->getRepository('App\Entity\Product')->findOneByPath($path);
  504.         
  505.         $status_query " AND p.status=1";
  506.         $variations $em->getRepository('App\Entity\ProductVariation')->findByProductId($product->getId());
  507.         $globalcategories $em->createQuery("SELECT p.id, p.path, p.title, pi.image, p.totalcount, p.globalcategory, g.name FROM App\Entity\Product p, App\Entity\ProductImage pi, App\Entity\GlobalCategory g WHERE p.globalcategory=g.id " $status_query " GROUP BY p.globalcategory")->getArrayResult();
  508.         $productcategories = array();
  509.         $styles = array();
  510.         foreach($globalcategories as $gc) {
  511.           $productcategories[$gc['globalcategory']] = $em->createQuery("SELECT p.id, p.path, p.title, pi.image, p.totalcount, p.productcategory, c.name FROM App\Entity\Product p, App\Entity\ProductImage pi, App\Entity\ProductCategory c WHERE c.globalCategory=:gid AND p.productcategory=c.id " $status_query " GROUP BY p.productcategory")->setParameters([ 'gid'=>$gc['globalcategory']])->getArrayResult();
  512.           foreach($productcategories[$gc['globalcategory']] as $pc) {
  513.             $styles[$pc['productcategory']] = $em->createQuery("SELECT p.id, p.path, p.title, pi.image, p.totalcount, p.style, s.name FROM App\Entity\Product p, App\Entity\ProductImage pi, App\Entity\Style s WHERE s.productCategory=:cid AND p.style=s.id " $status_query " GROUP BY p.style")->setParameters(['cid'=>$pc['productcategory']])->getArrayResult();
  514.           }
  515.         }
  516.         $prod_colors $em->createQuery("SELECT DISTINCT v.id vid, c.id, c.name, c.colorCode, c.extraCode FROM App\Entity\ProductVariation v, App\Entity\Color c WHERE v.productId=:pid AND v.color=c.id GROUP BY c.id")->setParameters(['pid'=>$product->getId()])->getArrayResult();
  517.         //$prod_colors = $em->createQuery("SELECT DISTINCT c.id, c.name, c.colorCode, c.extraCode FROM App\Entity\ProductVariation v, App\Entity\Color c WHERE v.productId=:pid AND v.color=c.id")->setParameters(['pid'=>$product->getId()])->getArrayResult();
  518.         $prod_sizes $em->createQuery("SELECT DISTINCT s.id, s.name, v.id vid FROM App\Entity\ProductVariation v, App\Entity\Size s WHERE v.productId=:pid AND v.size=s.id GROUP BY s.id")->setParameters(['pid'=>$product->getId()])->getArrayResult();
  519.         $globalcategory $em->getRepository('App\Entity\GlobalCategory')->find($product->getGlobalcategory());
  520.         $productcategory $em->getRepository('App\Entity\ProductCategory')->find($product->getProductcategory());
  521.         $style $em->getRepository('App\Entity\Style')->find($product->getStyle());
  522.         $brand $em->getRepository('App\Entity\Brand')->find($product->getBrand());
  523.         $style_city $prod_colors $em->createQuery("SELECT DISTINCT c.name FROM App\Entity\BrandCategory bc, App\Entity\Brand b, App\Entity\City c WHERE bc.brand=b.id AND b.city=c.id AND bc.category=:style")->setParameters(['style'=>$product->getStyle()])->getSingleScalarResult();
  524.         //$productcategories = $em->getRepository('App\Entity\ProductCategory')->findByGlobalCategory($globalcategory->getId(), array('name'=>'ASC'));
  525.         $apparelcategories $em->getRepository('App\Entity\ProductCategory')->findByGlobalCategory(65, array('name'=>'ASC'));
  526.         //$styles = $em->getRepository('App\Entity\Style')->findByProductCategory($product->getProductcategory(), array('name'=>'ASC'));
  527.         $collection $em->getRepository('App\Entity\Attribute')->findOneByName('collections');
  528.         if($collection != null) {
  529.             $collections $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($collection->getId(), array('title'=>'ASC'));
  530.         }
  531.         else {
  532.             $collections = array();
  533.         }
  534.         $categoryatr $em->getRepository('App\Entity\Attribute')->findOneByName('category');
  535.         if($categoryatr != null) {
  536.             $categoryatv $em->getRepository('App\Entity\AttributeValues')->findByAttributeId($categoryatr->getId(), array('title'=>'ASC'));
  537.         }
  538.         else {
  539.             $categoryatv = array();
  540.         }
  541.         $productimages $em->getRepository('App\Entity\ProductImage')->findByVariationId($variations[0]->getId(), array('weight'=>'ASC'));
  542.         $comments $em->getRepository('App\Entity\Comment')->findByNid($product->getId());
  543.         $related_products $em->createQuery("SELECT p.id, p.path, p.title, pi.image, MIN(v.price) price, p.totalcount, p.style, u.username, u.firstname, u.lastname FROM App\Entity\Product p, App\Entity\ProductVariation v, App\Entity\User u, App\Entity\ProductImage pi WHERE v.productId=p.id AND pi.productId=p.id AND p.createdBy=u.id AND p.productcategory=:cid AND p.style=:sid AND p.id!=:pid GROUP BY p.id")->setParameters(['pid'=>$product->getId(),'cid'=>$product->getProductcategory(), 'sid'=>$product->getStyle()])->getArrayResult();
  544.                
  545.         $dope '';
  546.         $designdope $em->createQuery("SELECT COUNT(f.id) FROM App\Entity\Flagging f WHERE f.entityId=:did AND f.entityType=:etype AND f.uid=:uid AND f.fid=:fid")->setParameters(['did'=>$product->getId(),'etype'=>'product''uid'=>$this->getUser()!=null?$this->getUser()->getId():0'fid'=>5])->getSingleScalarResult();
  547.         $like_count $em->createQuery("SELECT COUNT(f.id) FROM App\Entity\Flagging f WHERE f.entityId=:did AND f.entityType=:etype AND f.fid=:fid")->setParameters(['did'=>$product->getId(),'etype'=>'product''fid'=>5])->getSingleScalarResult();
  548.         $extra_flag 'sajong_ecom_content_flagging';
  549.         if($designdope >) { $extra_flag 'sajong_ecom_content_unflagging'; }
  550.         return $this->render('ecom/productdetail.html.twig', array('product'=>$product'variations'=>$variations'globalcategories'=>$globalcategories'globalcategory'=>$globalcategory'productcategories'=>$productcategories'productcategory'=>$productcategory'styles'=>$styles'style'=>$style'brand'=>$brand'productimages'=> $productimages'prod_colors'=> $prod_colors'prod_sizes'=> $prod_sizes'comments'=> $comments'related_products'=> $related_products'designdope'=> $designdope'extra_flag'=> $extra_flag'like_count'=> $like_count'style_city'=> $style_city));
  551.     }
  552.     
  553.     /**
  554.      * @Route("/comment/{id}", name="sajong_ecom_prodcut_comment")
  555.      */
  556.     public function prodcut_comment($id)
  557.     {
  558.         $em $this->getDoctrine()->getManager();
  559.         $design $em->getRepository('App\Entity\Product')->find($id);
  560.         return $this->render('ecom/submit_design.html.twig', array('categories'=>$categories'attributes'=> $attributes'attributevalues'=> $attributevalues'attcount'=> $attcount'vcss'=> $vcss'mcss'=> $mcss));
  561.     }
  562.     
  563.     /**
  564.      * @Route("/saveprodcutcomment", name="sajong_ecom_save_prodcut_comment")
  565.      */
  566.     public function save_prodcut_comment(Request $request)
  567.     {
  568.         $em $this->getDoctrine()->getManager();
  569.         if($this->isCsrfTokenValid('comment_form'$request->get('form_token'))) {
  570.             $comment = new Comment();
  571.             $comment->setPid(!empty($request->get('pid'))?$request->get('pid'):0); 
  572.             $comment->setUid($this->getUser()?$this->getUser()->getId():0); 
  573.             $comment->setSubject($request->get('comment_body')); 
  574.             $comment->setHostname($_SERVER['REMOTE_ADDR']); 
  575.             $comment->setCreated(new \DateTime()); 
  576.             $comment->setUpdated(new \DateTime()); 
  577.             $comment->setStatus(1); 
  578.             $comment->setThread('01'); 
  579.             $comment->setName(!empty($request->get('name'))?$request->get('name'):($this->getUser()?$this->getUser()->getFirstName():'')); 
  580.             $comment->setEmail(!empty($request->get('email'))?$request->get('email'):($this->getUser()?$this->getUser()->getEmail():'')); 
  581.             $comment->setHomepage(''); 
  582.             $comment->setLanguage('EN');
  583.             $em->persist($comment);
  584.             $em->flush();
  585.             
  586.             return new JsonResponse(array('success'=>'Comment added successfully'));
  587.         }
  588.         else {
  589.             return new JsonResponse(array('success'=>'You are not authorized to add comment'));
  590.         }
  591.     }
  592.     
  593.     /**
  594.      * @Route("/product/size", name="sajong_ecom_prodcut_sizes")
  595.      */
  596.     public function prodcutsize(Request $request)
  597.     {
  598.         $em $this->getDoctrine()->getManager();
  599.         $prod_sizes $em->createQuery("SELECT DISTINCT s.id, s.name, MIN(v.price) price, v.id vid, v.title FROM App\Entity\ProductVariation v, App\Entity\Size s, App\Entity\Color c WHERE v.productId=:pid AND v.color=c.id AND v.size=s.id AND c.id=:cid GROUP BY s.id ORDER BY s.id")->setParameters(['pid'=>$request->get('pid'), 'cid'=>$request->get('cid')])->getArrayResult();
  600.         $prod_images $em->createQuery("SELECT DISTINCT pi.id, pi.image FROM App\Entity\ProductImage pi WHERE pi.variationId=:vid ORDER BY pi.weight")->setParameters(['vid'=>$prod_sizes[0]['vid']])->getArrayResult();
  601.         //$prod_images = $em->getRepository('App\Entity\ProductImage')->findByVariationId($prod_sizes[0]['vid']);
  602.         return new JsonResponse(array('sizes'=>$prod_sizes'images'=>$prod_images));
  603.     }
  604.     
  605.     /**
  606.      * @Route("/product/price", name="sajong_ecom_prodcut_price")
  607.      */
  608.     public function prodcutprice(Request $request)
  609.     {
  610.         $em $this->getDoctrine()->getManager();
  611.         //$price = $em->createQuery("SELECT v.price FROM App\Entity\ProductVariation v WHERE v.id=:vid")->setParameters(['vid'=>$request->get('vid')])->getSingleScalarResult();
  612.         $prod $em->getRepository('App\Entity\ProductVariation')->find($request->get('vid'));
  613.         //$prod_images = $em->getRepository('App\Entity\ProductImage')->findByVariationId($request->get('vid'));
  614.         $prod_images $em->createQuery("SELECT DISTINCT pi.id, pi.image FROM App\Entity\ProductImage pi WHERE pi.variationId=:vid")->setParameters(['vid'=>$request->get('vid')])->getArrayResult();
  615.         return new JsonResponse(array('price'=>$prod->getPrice(), 'images'=>$prod_images));
  616.     }
  617.     
  618.     /**
  619.      * @Route("/ecomsearch", name="sajong_ecom_prodcut_ecomsearch")
  620.      */
  621.     public function ecomsearch(Request $request)
  622.     {
  623.         $em $this->getDoctrine()->getManager();
  624.         $designs $em->createQuery("SELECT p.id, v.id vid, v.sku, p.title, p.path, pi.image, v.price, c.name color, s.name size FROM App\Entity\ProductImage pi, App\Entity\Product p, App\Entity\ProductVariation v, App\Entity\Color c, App\Entity\Size s WHERE p.id=v.productId AND pi.variationId=v.id AND c.id=v.color AND s.id=v.size AND (p.title like :title OR p.description like :title) ORDER BY p.title")->setParameters(array('title'=>'%' $_GET['term'] . '%'))->getArrayResult();
  625.         $design = array();
  626.         foreach($designs as $d) {
  627.           $design[] = array('label'=>$d['title'], 'value'=>$d['title'], 'id'=>$d['id'], 'vid'=>$d['vid'], 'sku'=>$d['sku'], 'price'=>$d['price'], 'color'=>$d['color'], 'size'=>$d['size'], 'img'=> $d['image']);
  628.         }
  629.         return new JsonResponse($design);
  630.     }    
  631.     
  632.     /*
  633.     * Auto Complete search for utmos global search
  634.     */
  635.     function _sajong_ecom_products_ecomsearch() {
  636.       $designs db_query("SELECT DISTINCT nid FROM {node}, {field_data_field_design_reference}, {field_data_field_about_the_design} a WHERE type='design_submit' AND status=1 AND (title like :title OR field_about_the_design_value like :title OR name like :title ) AND nid = field_design_reference_target_id AND nid = a.entity_id", array(':title'=>'%' $_GET['term'] . '%'));
  637.       $design = array();
  638.       foreach($designs as $d) {
  639.         $design_details node_load($d->nid);
  640.         $design[] = array('label'=>$design_details->title'value'=>$design_details->title'id'=>$design_details->nid'author'=>$design_details->name'price'=>$design_details->nid'img'=>file_create_url($design_details->field_design_image['und'][0]['uri']));
  641.       }
  642.       //$d = array(array('label'=>'Product 11', 'value'=>'Product 1', 'id'=>'Product 1', 'author'=>'Author 1', 'price'=>'$ 20', 'img'=>'http://localhost/nn/sites/default/files/pdt1.jpg'), array('label'=>'Product 2', 'value'=>'Product 2', 'id'=>'Product 2', 'author'=>'Author 2', 'price'=>'$ 40', 'img'=>'http://localhost/nn/sites/default/files/pdt2.jpg'), array('label'=>'Product 3', 'value'=>'Product 3', 'id'=>'Product 3', 'author'=>'Author 3', 'price'=>'$ 30', 'img'=>'http://localhost/nn/sites/default/files/pdt3.jpg'));
  643.       print json_encode($design);
  644.       exit;
  645.     }
  646.     
  647.     public function variable_get($path) {
  648.       $em $this->getDoctrine()->getManager();
  649.       $content $em->getRepository('App\Entity\Content')->findOneByPath($path);
  650.       if($content != null)
  651.         return $content->getBody();
  652.       else 
  653.         return '';
  654.       
  655.     }
  656. }