<?php
namespace App\Controller\Recipes;
use Pimcore\Controller\FrontendController;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
use Pimcore\Localization\LocaleServiceInterface;
use Pimcore\Model\DataObject\ClassDefinition\Service;
use Pimcore\Model\DataObject\Recipe;
use Pimcore\Model\DataObject\Recipecategory;
use Pimcore\Model\DataObject\Review;
use Pimcore\Model\DataObject\Products;
use Pimcore\Model\DataObject\ChefSpecial;
use Pimcore\Model\DataObject\Userloyaltyprogram;
use Pimcore\Model\DataObject;
use Pimcore\Model\DataObject\Slider;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
class RecipesController extends FrontendController
{
public function advancefilterBlock(Request $request)
{
$recipe_categories = new Recipecategory\Listing();
$recipe_categories->load();
$featuredproducts = new Products\Listing();
$featuredproducts->setCondition('featured IN (?)', '1');
$featuredproducts->load();
$maining_ar = [];
$mainrecipeingrident = new Recipe\Listing();
$mainrecipeingrident->Load();
$maining = [];
foreach ($mainrecipeingrident as $key => $ingrident) {
if($ingrident->getServing_options()){
for($i=0; $i<count($ingrident->getServing_options()->getItems()); $i++){
// for($j =0; $j<count($ingrident->getServing_options()->getItems()[$i]->getIngredeints()); $j++){
$maining[] = $ingrident->getServing_options()->getItems()[$i]->getIngredeints()[0]['ingredient']->getdata();
$maining_ar[] = $ingrident->getServing_options()->getItems()[$i]->getIngredeints()[0]['ingredient_ar']->getdata();
// }
}
}
}
return $this->render('Recipes/advancefilter-block.html.twig' , [
'featured_products' =>$featuredproducts ,
'mainingredeints'=>$maining ,
'mainingredeints_ar'=>$maining_ar ,
'recipe_categories'=>$recipe_categories ,
]);
}
public function recipesAction(Request $request)
{
$ChefSpecialRecipe = new ChefSpecial\Listing();
$ChefSpecialRecipe->setLimit('1');
$ChefSpecialRecipe->Load();
$BrandRecipes = new Recipe\Listing();
$BrandRecipes->setCondition('o_id = 384 or o_id = 387 or o_id = 394 and brand IN (?)', '1');
// $BrandRecipes->setOffset(0);
$BrandRecipes->setLimit(3);
$BrandRecipes->Load();
$BrandRecipes1 = new Recipe\Listing();
$BrandRecipes1->setCondition('o_id = 411 or o_id = 449 or o_id = 401 and brand IN (?)', '1');
// $BrandRecipes1->setOffset(3);
$BrandRecipes1->setLimit(3);
$BrandRecipes1->Load();
$BrandRecipes2 = new Recipe\Listing();
$BrandRecipes2->setCondition('o_id != 401 and o_id != 411 and o_id != 449 and o_id != 384 and o_id != 387 and o_id != 394 and o_id != 374 and o_id != 406 and brand IN (?)', '1');
$BrandRecipes2->setLimit(3);
// if($request->get('page')){
// $page = $request->get('page');
// }else{
// $page = 2;
// }
// $start = ($page)*$limit;
// $end = $limit;
// $BrandRecipes2->setOffset($start);
// $BrandRecipes2->setLimit($end);
$BrandRecipes2->Load();
$GoodyRecipes = new Recipe\Listing();
$GoodyRecipes->setCondition('o_id = 47485 and brand IN (?)', '1');
$GoodyRecipes->setLimit(1);
$GoodyRecipes->Load();
if ($request->isXmlHttpRequest()) {
return $this->loadMoreRecipes($BrandRecipes2, $request);
}
return $this->render('Recipes/recipes.html.twig' ,
[
'chefspecialrecipe'=>$ChefSpecialRecipe,
'brandrecipes'=>$BrandRecipes,
'brandrecipes1'=>$BrandRecipes1,
'brandrecipes2'=>$BrandRecipes2,
'goodyrecipes'=>$GoodyRecipes
]);
}
public function loadMoreRecipes($BrandRecipes2, $request ){
$more_BrandRecipes2 = '';
foreach($BrandRecipes2 as $brandrecipes2){
if($brandrecipes2->getFeatured_image()){
$image = $brandrecipes2->getFeatured_image();
}else{
$image = '';
}
// if($product->getRegion()[0]['price']->getData()){
// $price = $product->getRegion()[0]['price']->getData();
// }else{
// $price = '';
// }
// if($product->getUrl()){
// $url = $product->getUrl()[0]->getSlug();
// }else{
// $url = '';
// }
if($request->getLocale() =='en'){
$weblink ='en';
}else{
$weblink ='ar';
}
$more_BrandRecipes2 .= '
<div class="slide">
<div class="slide-holder">
<figure class="slide-img">
<img src="'.$brandrecipes2->getFeatured_image().'" alt="'.$brandrecipes2->getName().'">
</figure>
<div class="slide-content">
<div class="frecipes-box">
<h3>'.$brandrecipes2->getName().'</h3>
<p>'.$brandrecipes2->getDescription().'</p>
<div class="chef-names">with '.$brandrecipes2->getBrand_name().'</div>
</div>
<ul class="list-unstyled recipe-info">
<li class="orders">No. Of Orders 8</li>
<li class="time">'.$brandrecipes2->getTypeofmeal().'</li>
</ul>
<div class="btn-holder">
<a href="/'.$request->getLocale().'/recipedetails/'.$brandrecipes2->getUrl().'" class="btn btn-custom btn-black">View Recipe</a>
</div>
</div>
</div>
</div>
';
}
return $this->json(array('success' => $more_BrandRecipes2));
}
public function searchforrecipeAction(Request $request)
{
$strBCond = "";
$localCond = "";
$Recipe = new Recipe\Listing();
if($request->get('product')){
$product =$request->get('product');
for($i=0; $i<count($product); $i++){
if($i > 0){
$localCond .= " OR ";
}
$localCond .= "featured_product LIKE ". $Recipe->quote("%,".$product[$i].",%");
}
if($localCond != ""){
$strBCond = " ( ". $localCond ." ) ";
$localCond = "";
}
}
if($request->get('tag_id')){
$tag_id =$request->get('tag_id');
$localCond .= "tags LIKE ". $Recipe->quote("%,".$tag_id.",%");
if($localCond != ""){
$strBCond = " ( ". $localCond ." ) ";
$localCond = "";
}
}
if($request->get('ing')){
$ingrident =$request->get('ing');
for($i=0; $i<count($ingrident); $i++){
if($i > 0){
$localCond .= " OR ";
}
$localCond .= "ing LIKE'%".$ingrident[$i]."%'";
}
if($localCond != ""){
if($strBCond != ""){
$strBCond .= " and ";
}
$strBCond .= " ( ". $localCond ." ) ";
$localCond = "";
}
}
if($request->get('time')){
$time = $request->get('time');
$localCond .= "time LIKE'%".$time."%'";
if($localCond != ""){
if($strBCond != ""){
$strBCond .= " and ";
}
$strBCond .= " ( ". $localCond ." ) ";
$localCond = "";
}
}
if($request->get('cuisine')){
$cuisine = $request->get('cuisine');
// dd($cuisine);
// $localCond .= "cuisine LIKE'%".$cuisine."%'";
$localCond .= "category LIKE ". $Recipe->quote("%,".$cuisine.",%");
if($localCond != ""){
if($strBCond != ""){
$strBCond .= " and ";
}
$strBCond .= " ( ". $localCond ." ) ";
$localCond = "";
}
}
if($request->get('serving')){
$serving = $request->get('serving');
$localCond .= "serves = $serving";
if($localCond != ""){
if($strBCond != ""){
$strBCond .= " and ";
}
$strBCond .= " ( ". $localCond ." ) ";
$localCond = "";
}
}
if($request->get('recipename')){
$recipename = $request->get('recipename');
$localCond .= "name LIKE'%".$recipename."%'";
if($localCond != ""){
if($strBCond != ""){
$strBCond .= " and ";
}
$strBCond .= " ( ". $localCond ." ) ";
$localCond = "";
}
}
if($request->get('typeofmeal')){
$typeofmeal = $request->get('typeofmeal');
$localCond .= "typeofmeal LIKE'%".$typeofmeal."%'";
if($localCond != ""){
if($strBCond != ""){
$strBCond .= " and ";
}
$strBCond .= " ( ". $localCond ." ) ";
$localCond = "";
}
}
if ($strBCond != "")
{
$Recipe->setCondition($strBCond);
}
$Recipe->load();
return $this->render('Recipes/searchforrecipe.html.twig',
[
'result' => $Recipe
]);
}
/**
* @Route("/{locale}/all-recipes/{url}", name="recipedetails")
*/
public function recipedetailsAction(Request $request)
{
$url = strip_tags($request->get('url'));
$recipedetails = new Recipe\Listing();
$recipedetails->setCondition("url = ?", [$url]);
$recipedetails->load();
if(count($recipedetails) > 0){
foreach ($recipedetails as $key => $recipedata) {
break;
}
//for rating purpose
//reviews start
$reviewsforraitngs = new Review\Listing();
$reviewsforraitngs->setCondition("recipe_id__id IN (?)",$recipedata->getId());
$reviewsforraitngs->setOrderKey("o_id");
$reviewsforraitngs->setOrder("desc");
$reviewsforraitngs->load();
$max = 0;
$n = count($reviewsforraitngs);
if(count($reviewsforraitngs) > 0){
foreach ($reviewsforraitngs as $key => $reviewsforraitng){
if(trim($reviewsforraitng->getName())){
$max = $max+$reviewsforraitng->getRating();
}
}
}
if($max != 0){
$rating = round($max / $n);
} else{
$rating =0;
}
//reviews statr
$reviews = new Review\Listing();
$reviews->setCondition("recipe_id__id IN (?)", $recipedata->getId());
$reviews->setOrderKey("o_id");
$reviews->setOrder("desc");
// Pagination
$limit = 2;
if($request->get('page')){
$page = $request->get('page');
}else{
$page = 0;
}
$start = ($page)*$limit;
$end = $limit;
$reviews->setOffset($start);
$reviews->setLimit($end);
$reviews->load();
if ($request->isXmlHttpRequest()) {
return $this->loadMoreRecipeReviews($reviews);
}
// Loyality Program Logic start
$uid = $this->get('session')->get('loginUID');
$rid = $recipedata->getId();
$Liked = new Userloyaltyprogram\Listing();
$Liked->setCondition("op_name = ? and u_id = ? and obj_id = ?",['Like',$uid,$rid]);
$Liked->load();
$Shared = new Userloyaltyprogram\Listing();
$Shared->setCondition("op_name = ? and u_id = ? and obj_id = ?",['Share',$uid,$rid]);
$Shared->load();
//dd($recipedata->getServing_options()->getItems()[0]->getRecipe_feature_product()[0]->getId());
$Recipe_Feature_Product_Ids = [];
if($recipedata->getServing_options()){
for($i=0; $i<count($recipedata->getServing_options()->getItems()); $i++){
for($j =0; $j<count($recipedata->getServing_options()->getItems()[$i]->getRecipe_feature_product()); $j++){
$Recipe_Feature_Product_Ids[] = $recipedata->getServing_options()->getItems()[$i]->getRecipe_feature_product()[$j]->getId();
}
}
}
//dd( $Recipe_Feature_Product_Ids);
$Liked_Recipe_feature_product = new Userloyaltyprogram\Listing();
$Liked_Recipe_feature_product->setCondition("op_name = ? and u_id = ? and obj_data__id IN (?)",['Like',$uid,$Recipe_Feature_Product_Ids]);
$Liked_Recipe_feature_product->load();
$Liked_Recipe_feature_product_Ids = [];
foreach($Liked_Recipe_feature_product as $liked_Recipe_feature_product){
$Liked_Recipe_feature_product_Ids[]=$liked_Recipe_feature_product->getObj_id();
}
// dd($Liked_Recipe_feature_product_Ids);
// Loyality Program Logic End
// Similar Recipes Start
$recipe_category = $recipedata->getCuisine();
$recipe_name = $recipedata->getName();
$similar_recipes = new Recipe\Listing();
$similar_recipes->setCondition("cuisine = ? and name != ?",[$recipe_category , $recipe_name]);
$similar_recipes->setLimit(3);
$similar_recipes->setOrderKey("RAND()", false);
$similar_recipes->load();
// Similar Recipes End
return $this->render('Recipes/reciepedetails.html.twig', [
'recipedetails'=>$recipedata ,
'review' =>$reviews ,
'rating'=>$rating,
'Liked'=>$Liked,
'Shared'=>$Shared,
'Liked_Recipe_feature_product_Ids'=>$Liked_Recipe_feature_product_Ids,
'similar_recipes'=>$similar_recipes,
]);
}else{
throw new NotFoundHttpException('Invalid Recipe Url');
}
}
public function loadMoreRecipeReviews($reviews){
$totla_reviews = 0;
if(!empty($reviews)){
$totla_reviews = (count($reviews->getData()));
}else{
$totla_reviews = '';
}
$more_review = '';
foreach($reviews as $review){
$more_review .= '
<div class="col-12 col-md-6">
<div class="comment-list-box">
<div class="comment-list-box-header">
<figure class="person-img">
<img src="/static/assets/images/user-icon-01.png" alt="user icon 01">
</figure>
<h5>'.$review->getName().'</h5>
<div class="rating">'.$review->getRating().'</div>
</div>
<p>'.$review->getComment().'</p>
<div class="date">'.$review->getMydate().'</div>
</div>
</div>
';
}
return $this->json(array('success' => $more_review , 'total_reviews' => $totla_reviews));
}
public function reviewAction(Request $request){
if(!empty($_POST['g-recaptcha-response'])){
if($_SERVER['HTTP_HOST'] == 'gfs2.centric.ae'){
$secret = $secretdev = '6LdxNsAgAAAAAOY5GPouinn81p6Vh8sih9o_s0xX';
}elseif ($_SERVER['HTTP_HOST'] == 'goodycs.com') {
$secret = $secretprod = '6Le5OcAgAAAAAIxdbVPc2Y3DN6WMEWzAmE2F85WR';
}
$url = 'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secret) . '&response=' . urlencode($_POST['g-recaptcha-response']);
// $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
$verifyResponse = file_get_contents($url);
$responseData = json_decode($verifyResponse);
if($responseData->success == true){
$success = 0;
$recipe = new Recipe\Listing();
$recipe = Recipe::getById($request->get('recipe_id'));
$Review = new Review();
$Review->setKey($request->get('email')."[".strtotime(date('Y-m-d H:i:s'))."]");
$Review->setParent(DataObject\Folder::getByPath('/reviews/'));
$Review->setName(strip_tags($request->get('name')));
$Review->setEmail(strip_tags($request->get('email')));
$Review->setComment(strip_tags($request->get('comment')));
$Review->setRating(strip_tags($request->get('addreviewrating')));
$Review->setRecipe_id($recipe);
$Review->setMydate(date('Y-m-d'));
$Review->setPublished(false);
$d = $Review->save();
if($d){
$success = 2;
}
}else{
$success = 1;
}
}else{
$success = 1;
}
return $this->json(array('success' =>$success));
// return $this->redirect('/'.$request->get('locale').'/all-recipes/'.$request->get('recipe_url'), 301);
}
public function ourchefAction(Request $request)
{
$chef = new ChefSpecial\Listing();
$chef->setOrderKey("order");
$chef->setOrder("asc");
$chef->load();
$chef_banner_spotlight = new Slider\Listing();
$chef_banner_spotlight->setCondition("o_id = 48095");
$chef_banner_spotlight->load();
foreach($chef_banner_spotlight as $chefbannerspotlight){
break;
}
return $this->render('Recipes/our-chef.html.twig', [
'chefs'=> $chef,
'chefbannerspotlight'=> $chefbannerspotlight,
]);
// return [];
}
public function allrecipesAction(Request $request, PaginatorInterface $paginator,TranslatorInterface $translator)
{
// $limit = 9;
$pageSize = LIMIT_PER_PAGE;
$page = $request->get('page', 1);
// $page = $request->query->getInt('page', 1); // Get the current page number, default to 1 if not present
$recipes = new Recipe\Listing();
$recipes = $paginator->paginate($recipes, $page, $pageSize);
// Calculate if there are more pages
$currentPage = $recipes->getCurrentPageNumber();
$totalPages = ceil($recipes->getTotalItemCount() / $recipes->getItemNumberPerPage());
$showLoadMoreButton = $currentPage < $totalPages;
if ($request->isXmlHttpRequest()) {
$html = $this->render('Recipes/partial.html.twig', [
'recipes' => $recipes->getItems(),
])->getContent();
return new JsonResponse([
'html' => $html,
'showLoadMoreButton' => $showLoadMoreButton
]);
}
return $this->render('Recipes/allrecipes.html.twig', [ 'recipes'=>$recipes ]);
}
/**
* @Route("/{locale}/recipes/{url}", name="recipes_category")
*/
public function recipeCategory(Request $request)
{
$cat_url = trim($request->get('url'));
$category = new Recipecategory\Listing();
$category->setCondition('cat_url = ?', [$cat_url]);
$category->Load();
if(count($category) > 0)
{
foreach($category as $Category){
$cat_id = $Category->getId();
}
$category_recipes = new Recipe\Listing();
// $category_recipes->setCondition('category IN (?)', [$cat_id]);
$category_recipes->setCondition("category REGEXP CONCAT('(^|,)(', REPLACE('$cat_id',',', '|'), ')(,|$)')");
$category_recipes->Load();
return $this->render('Recipes/recipe-category.html.twig',
[
'recipe_category'=>$Category,
'category_recipes' =>$category_recipes ,
]);
}else{
throw new NotFoundHttpException('Invalid Recipe Category Url');
}
}
}