<?php
namespace App\Controller;
use App\Entity\Categorie;
use App\Entity\Subcategorie;
use App\Entity\Products;
use App\Entity\CustomerVotes;
use App\Entity\Complaint;
use App\Entity\Province;
use App\Service\FileUploader;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
class FrontController extends AbstractController
{
private $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
/**
* @Route("/switch_lang/{lang}/{page}", name="app_switch_lang")
*/
public function switch_lang($lang,$page)
{
if($lang == 1){
$session = $this->requestStack->getSession();
$session->set('lang', 'english');
}else{
$session = $this->requestStack->getSession();
$session->set('lang', 'french');
}
return $this->redirect($_SERVER['HTTP_REFERER']);
}
/**
* @Route("/", name="app_front")
*/
public function index(Request $request,RequestStack $requestStack): Response
{
$session = $this->requestStack->getSession();
$language = $session->get('lang');
if($language == 'english'){
$pageContent=["all_product"=>"All Products",
"product_campaign"=>"Product Campaign",
"home"=>"Home",
"search"=>"Search",
"privacy_policy"=>"Privacy Policy",
"filterproducts"=>"Filter Products",
"filters"=>"Filters",
"category"=>"Category",
"subcategory"=>"Sub-Category",
"submit"=>"Submit",
"back"=>"Back",
"productdetails"=>"Product Details",
"productname"=>"Product Name",
"wholesaleprice"=>"Wholesale Price",
"retailprice"=>"Retail Price",
"semiretailprice"=>"Semi Retail Price",
"description"=>"Description",
"markcomplaint"=>"Mark Complaint",
"shopkeepername"=>"Shopkeeper Name",
"entershopkeepername"=>"Enter Shopkeeper Name",
"shopkeeperaddress"=>"Shopkeeper's Address",
"entershopkeeperaddress"=>"Enter Shopkeeper's Address*",
"zipcode"=>"Zipcode",
"enterzipcode"=>"Enter Zipcode",
"province"=>"Province",
"selectprovince"=>"Select Province",
"selectcity"=>"Select City",
"city"=>"City",
"image"=>"Add Entrance Image",
"placeholdimage"=>"Upload or capture image",
"remark"=>"Remark",
"enterremark"=>"Enter Remark",
"submitcomplaint"=>"Submit Complaint",
];
}else{
$pageContent=["all_product"=>"Tous les produits",
"product_campaign"=>"Campagne produit",
"home"=>"Accueil",
"search"=>"Chercher",
"privacy_policy"=>"Politique de confidentialité",
"filterproducts"=>"Filtrer les produits",
"filters"=>"Filtres",
"category"=>"Catégorie",
"subcategory"=>"Sous-catégorie",
"submit"=>"Enregistrer",
"back"=>"Retour",
"productdetails"=>"Détails du produit",
"productname"=>"Nom du produit",
"wholesaleprice"=>"Prix de gros",
"retailprice"=>"Prix en détail",
"semiretailprice"=>"Prix semi-grossiste",
"description"=>"La description",
"markcomplaint"=>"Denoncer",
"shopkeepername"=>"Nom du commerçant",
"entershopkeepername"=>"Entrer le nom du commerçant",
"shopkeeperaddress"=>"Adresse du commerçant",
"entershopkeeperaddress"=>"Entrer l'adresse du commerçant",
"zipcode"=>"Code postal",
"enterzipcode"=>"Entrer le code postal",
"province"=>"Province",
"city"=>"Ville",
"selectprovince"=>"Sélectionnez une province",
"selectcity"=>"Sélectionnez une ville",
"image"=>"Ajouter une image d'entrée",
"placeholdimage"=>"Télécharger ou capturer une image",
"remark"=>"Remarque",
"enterremark"=>"Entrez une remarque",
"submitcomplaint"=>"Soumettre une plainte",
];
}
// dd($pageContent);
$input=$request->request->all();
if (!empty($input)) {
if(!empty($input['category']) && empty($input['subcategory'])){
$category=$input['category'];
$products = $this->getDoctrine()->getRepository('App\Entity\Products')->findOneBySomeField($category)->findBy(
array('status'=>true));
}elseif(!empty($input['category']) && !empty($input['subcategory'])){
$category=$input['category'];
$subcategory=$input['subcategory'];
$products = $this->getDoctrine()->getRepository('App\Entity\Products')->findOneByCatSubcatField($category,$subcategory);
}else{
$products = $this->getDoctrine()->getRepository('App\Entity\Products')->findBy(
array('status'=>true),
array('id'=>'desc'),);
}
}else{
$products = $this->getDoctrine()->getRepository('App\Entity\Products')->findBy(
array('status'=>true),
array('id'=>'desc'),);
}
$citys = $this->getDoctrine()->getRepository('App\Entity\City')->findBy(
array(),
array('name'=>'asc'),
);
$province = $this->getDoctrine()->getRepository('App\Entity\Province')->findBy(
array(),
array('name'=>'asc'),
);
$categorie = $this->getDoctrine()->getRepository(Categorie::class)->findBy(array(),array('id'=>'desc'));
$subcategorie = $this->getDoctrine()->getRepository(Subcategorie::class)->findBy(array('status'=>'1'));
return $this->render('front/index.html.twig', [
'products'=>$products,
'category'=>$categorie,
'subcategory'=>$subcategorie,
'citys'=>$citys,
'province'=>$province,
'pageContent'=>$pageContent,
'language'=>$language,
]);
}
/**
* @Route("/product-campaign", name="app_product_campaign")
*/
public function product_campaign(RequestStack $requestStack): Response
{
$session = $this->requestStack->getSession();
$language = $session->get('lang');
if($language == 'english'){
$pageContent=["all_product"=>"All Products",
"product_campaign"=>"Product Campaign",
"home"=>"Home",
"search"=>"Search",
"privacy_policy"=>"Privacy Policy",
"voteforproduct"=>"Vote for Product",
];
}else{
$pageContent=["all_product"=>"Tous les produits",
"product_campaign"=>"Campagne produit",
"home"=>"Accueil",
"search"=>"Chercher",
"privacy_policy"=>"Politique de confidentialité",
"voteforproduct"=>"Votez pour le produit",
];
}
$campaign = $this->getDoctrine()->getRepository('App\Entity\Campaign')->findByExampleField();
return $this->render('front/compaign.html.twig', [
'campaign'=>$campaign,
'pageContent'=>$pageContent,
'language'=>$language,
]);
}
/**
* @Route("/privacy-policy", name="app_privacy_policy")
*/
public function privacy_policy(RequestStack $requestStack): Response
{
$session = $this->requestStack->getSession();
$language = $session->get('lang');
if($language == 'english'){
$pageContent=["all_product"=>"All Products",
"product_campaign"=>"Product Campaign",
"home"=>"Home",
"search"=>"Search",
"privacy_policy"=>"Privacy Policy",
];
}else{
$pageContent=["all_product"=>"Tous les produits",
"product_campaign"=>"Campagne produit",
"home"=>"Accueil",
"search"=>"Chercher",
"privacy_policy"=>"Politique de confidentialité",
];
}
return $this->render('front/privacy_policy.html.twig', [
'language'=>$language,
'pageContent'=>$pageContent,
]);
}
/**
* @Route("/campaign-all-product/{id}", name="app_campaign_allproduct")
*/
public function campaign_allproduct(Request $request,$id,RequestStack $requestStack): Response
{
$session = $this->requestStack->getSession();
$language = $session->get('lang');
if($language == 'english'){
$pageContent=["all_product"=>"All Products",
"product_campaign"=>"Product Campaign",
"home"=>"Home",
"privacy_policy"=>"Privacy Policy",
"search"=>"Search",
"voteforproduct"=>"Vote for Product",
"filterproducts"=>"Filter Products",
"filters"=>"Filters",
"category"=>"Category",
"subcategory"=>"Sub-Category",
"submit"=>"Submit",
"back"=>"Back",
"vote"=>"Vote",
"votes"=>"Vote",
];
}else{
$pageContent=["all_product"=>"Tous les produits",
"product_campaign"=>"Campagne produit",
"home"=>"Accueil",
"privacy_policy"=>"Politique de confidentialité",
"search"=>"Chercher",
"voteforproduct"=>"Votez pour le produit",
"filterproducts"=>"Filtrer les produits",
"filters"=>"Filtres",
"category"=>"Catégorie",
"subcategory"=>"Sous-catégorie",
"submit"=>"Nous faire parvenir",
"back"=>"Retour",
"vote"=>"Voter",
"votes"=>"Voix",
];
}
$input=$request->request->all();
if (!empty($input)) {
if(!empty($input['category']) && empty($input['subcategory'])){
$campaign = $this->getDoctrine()->getRepository('App\Entity\Campaign')->findOneBy(array('id'=>$id,'status'=>true));
$allcatid=explode(",", $campaign->getcategoryId());
$category=$input['category'];
$results = $this->getDoctrine()->getRepository('App\Entity\Products')->findBy(
array('category'=>$category));
foreach($results as $key => $value){
$CustomerVotes = $this->getDoctrine()->getRepository('App\Entity\CustomerVotes')->findBy(array('product_id'=>$value->getId(),'campaign_id'=>$id));
$vote_count =count($CustomerVotes);
$results[$key]->vote_counts=$vote_count;
$ipadress=$request->getClientIp();
$search_vote = $this->getDoctrine()->getRepository('App\Entity\CustomerVotes')->findOneBy(array('product_id'=>$value->getId(),'campaign_id'=>$id,'ipaddress'=>$ipadress));
if(!empty($search_vote)){
$results[$key]->voted=1;
}else{
$results[$key]->voted=0;
}
}
}elseif(!empty($input['category']) && !empty($input['subcategory'])){
$campaign = $this->getDoctrine()->getRepository('App\Entity\Campaign')->findOneBy(array('id'=>$id,'status'=>true));
$allcatid=explode(",", $campaign->getcategoryId());
$category=$input['category'];
$subcategory=$input['subcategory'];
$results = $this->getDoctrine()->getRepository('App\Entity\Products')->findOneByCatSubcatField($category,$subcategory);
foreach($results as $key => $value){
$CustomerVotes = $this->getDoctrine()->getRepository('App\Entity\CustomerVotes')->findBy(array('product_id'=>$value->getId(),'campaign_id'=>$id));
$vote_count =count($CustomerVotes);
$results[$key]->vote_counts=$vote_count;
$ipadress=$request->getClientIp();
$search_vote = $this->getDoctrine()->getRepository('App\Entity\CustomerVotes')->findOneBy(array('product_id'=>$value->getId(),'campaign_id'=>$id,'ipaddress'=>$ipadress));
if(!empty($search_vote)){
$results[$key]->voted=1;
}else{
$results[$key]->voted=0;
}
}
}else{
$campaign = $this->getDoctrine()->getRepository('App\Entity\Campaign')->findOneBy(array('id'=>$id,'status'=>true));
$allcatid=explode(",", $campaign->getcategoryId());
$results = $this->getDoctrine()->getRepository('App\Entity\Products')->findOneBySomeField($allcatid);
foreach($results as $key => $value){
$CustomerVotes = $this->getDoctrine()->getRepository('App\Entity\CustomerVotes')->findBy(array('product_id'=>$value->getId(),'campaign_id'=>$id));
$vote_count =count($CustomerVotes);
$results[$key]->vote_counts=$vote_count;
$ipadress=$request->getClientIp();
$search_vote = $this->getDoctrine()->getRepository('App\Entity\CustomerVotes')->findOneBy(array('product_id'=>$value->getId(),'campaign_id'=>$id,'ipaddress'=>$ipadress));
if(!empty($search_vote)){
$results[$key]->voted=1;
}else{
$results[$key]->voted=0;
}
}
}
}else{
$campaign = $this->getDoctrine()->getRepository('App\Entity\Campaign')->findOneBy(array('id'=>$id,'status'=>true));
$allcatid=explode(",", $campaign->getcategoryId());
$results = $this->getDoctrine()->getRepository('App\Entity\Products')->findOneBySomeField($allcatid);
foreach($results as $key => $value){
$CustomerVotes = $this->getDoctrine()->getRepository('App\Entity\CustomerVotes')->findBy(array('product_id'=>$value->getId(),'campaign_id'=>$id));
$vote_count =count($CustomerVotes);
$results[$key]->vote_counts=$vote_count;
$ipadress=$request->getClientIp();
$search_vote = $this->getDoctrine()->getRepository('App\Entity\CustomerVotes')->findOneBy(array('product_id'=>$value->getId(),'campaign_id'=>$id,'ipaddress'=>$ipadress));
if(!empty($search_vote)){
$results[$key]->voted=1;
}else{
$results[$key]->voted=0;
}
}
}
// dd($results);
$categorie = $this->getDoctrine()->getRepository(Categorie::class)->findOneBySomeField($allcatid);
$subcategorie = $this->getDoctrine()->getRepository(Subcategorie::class)->findBy(array('status'=>'1'));
return $this->render('front/compaign_product.html.twig', [
'results'=>$results,
'campaign'=>$campaign,
'category'=>$categorie,
'subcategory'=>$subcategorie,
'camp_id'=>$id,
'pageContent'=>$pageContent,
'language'=>$language,
]);
}
/**
* @Route("/voting-product/{id}/{product}", name="app_voting_on_product")
*/
public function voting_on_product(Request $request,$id,$product,RequestStack $requestStack)
{
// dd($id);
$em = $this->getDoctrine()->getManager();
$ipadress=$request->getClientIp();
$addRequest = new CustomerVotes;
$addRequest->setCampaignId($id);
$addRequest->setProductId($product);
$addRequest->setVoteCount('1');
$addRequest->setIpaddress($ipadress);
$addRequest->setVoteDate(date( "Y-m-d", strtotime(date('Y-m-d'))));
$em = $this->getDoctrine()->getManager();
$em->persist($addRequest);
$em->flush();
$session = $this->requestStack->getSession();
$language = $session->get('lang');
if($language == 'english'){
$this->addFlash('green', 'You have vote this product successfully. Thank You!');
}else{
$this->addFlash('green', 'Vous avez voté ce produit avec succès. Merci!');
}
return $this->redirectToRoute('app_campaign_allproduct', array('id' => $id));
}
/**
* @Route("/product-complaint", name="app_product_complaint")
*/
public function product_complaint(Request $request,string $uploadDirthree,FileUploader $uploader,RequestStack $requestStack)
{
$session = $this->requestStack->getSession();
$language = $session->get('lang');
$input=$request->request->all();
if(count($request->files->get('image')) <= 4 && !empty($input['product_id']) && !empty($input['shopkeepername']) && !empty($input['longitude']) && !empty($input['latitude'])){
if ($request->getMethod() === "POST") {
// dd($request->request->all());
$product_id = $this->getDoctrine()->getRepository('App\Entity\Products')->findOneBy(
array('id'=>$request->request->get('product_id')),
);
$Province = $this->getDoctrine()->getRepository('App\Entity\Province')->findOneBy(
array('id'=>$request->request->get('province')),
);
$citys = $this->getDoctrine()->getRepository('App\Entity\City')->findOneBy(
array('id'=>$request->request->get('city')),
);
$files = $request->files->get('image');
if (!empty($files))
{
$imgs=array();
foreach ($files as $key => $file) {
$filename = $file->getClientOriginalName();
$extensions=$file->getClientOriginalExtension();
$imagename='images/complaint_img/product_complaint_'.rand(1111,9999).time().'.'.$extensions;
$uploader->upload($uploadDirthree, $file, $imagename);
$imgs[]=$imagename;
}
$product_image=implode(",", $imgs);
}else{
$product_image = null;
}
$ipadress=$request->getClientIp();
$addRequest = new Complaint;
$addRequest->setProduct($product_id);
$addRequest->setShopkeepername($input['shopkeepername']);
$addRequest->setAddress($input['address']);
$addRequest->setLongitude($input['longitude']);
$addRequest->setLatitude($input['latitude']);
$addRequest->setProvince($Province);
$addRequest->setCity($citys);
$addRequest->setZipcode($input['zipcode']);
$addRequest->setRemark($input['remark']);
$addRequest->setIpaddress($ipadress);
$addRequest->setImage($product_image);
$addRequest->setCdate(date( "Y-m-d", strtotime(date('Y-m-d'))));
$addRequest->setResolvedDate(date( "Y-m-d", strtotime(date('Y-m-d'))));
$addRequest->setAssignDate(date( "Y-m-d", strtotime(date('Y-m-d'))));
$addRequest->setGrpid('0');
$addRequest->setCompstatus('Pending');
$addRequest->setStatus('0');
$addRequest->setShowStatus('1');
$addRequest->setFraud('0');
$addRequest->setAgentid('0');
$addRequest->setOperationalId('0');
$em = $this->getDoctrine()->getManager();
$em->persist($addRequest);
$em->flush();
$addRequest->getId();
$complaint = $this->getDoctrine()->getRepository('App\Entity\Complaint')->findBy(array('id'=>$addRequest->getId()));
if($language == 'english'){
$this->addFlash('green', 'Your complaint has been submitted successfully. Thank You!');
}else{
$this->addFlash('green', 'Votre plainte a été soumise avec succès. Merci!');
}
return $this->redirectToRoute('app_front');
// $output['data'] = $complaint;
}else{
$output['status'] = false;
return $this->redirectToRoute('app_front');
}
}else{
if(empty($input['product_id']) || empty($input['shopkeepername']) || empty($input['address']) || empty($input['longitude']) || empty($input['latitude']) || empty($input['zipcode']) || empty($input['remark'])){
if($language == 'english'){
$this->addFlash('red', 'Please enter all the required fields.');
}else{
$this->addFlash('red', 'Veuillez remplir tous les champs obligatoires.');
}
}
if($language == 'english'){
$this->addFlash('red', 'You are only allowed to upload a maximum of 4 files.');
}else{
$this->addFlash('red', "Vous n'êtes autorisé à télécharger que 4 fichiers au maximum.");
}
return $this->redirectToRoute('app_front');
}
}
/**
* @Route("/request-subcategoryall/", name="app_get_subcategoryall")
*/
public function get_subcategoryall(Request $request)
{
// print_r($request->request->get('cacheckboxValues'));die;
if($request->request->get('cacheckboxValues'))
{
$result = $this->getDoctrine()->getRepository('App\Entity\Subcategorie')->findOneBySomeFieldIds($request->request->get('cacheckboxValues'));
}
return $this->json($result);
}
//class end
}