src/Controller/ProductController.php line 251
<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Symfony\Bridge\Twig\Attribute\Template;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Contracts\Translation\TranslatorInterface;
use Pimcore\Localization\LocaleServiceInterface;
use Pimcore\Model\DataObject\Recipe;
use Pimcore\Model\DataObject\Review;
use Pimcore\Model\DataObject\ProductBanner;
use Pimcore\Model\DataObject\Product;
use Pimcore\Model\DataObject\ProductAttribute;
use Pimcore\Model\DataObject\ProductCategory;
use Pimcore\Bundle\PersonalizationBundle\Targeting\VisitorInfoStorageInterface;
use Pimcore\Model\Tool\Targeting;
use Pimcore\Model\Tool\Targeting\TargetGroup;
use GeoIp2\Database\Reader;
/**
*
*@IgnoreAnnotation("Template")
* @author PcCom
*/
class ProductController extends FrontendController {
/**
* @Template
*
* @param Request $request
*
* @return array
*/
/**
* @var LocaleService
*/
// /**
// * @var VisitorInfoStorageInterface
// */
private $visitorInfoStorage;
public function __construct(VisitorInfoStorageInterface $visitorInfoStorage) {
$this->visitorInfoStorage = $visitorInfoStorage;
}
public function defaultAction(Request $request) {
return [];
}
public function productAction(Request $request) {
// $visitorInfo = $this->visitorInfoStorage->getVisitorInfo();
// $groups = $visitorInfo->getAssignedTargetGroups();
// $groupids = [];
// foreach ($groups as $key => $val) {
// $groupids[] = $val->id;
// }
// if(!$groupids){
// $groupids[] = '1';
// }
//print_r($groupids);die();
$groups = [];
$code = 'AE';
if (!$this->visitorInfoStorage->hasVisitorInfo()) {
$groups = [];
$code = 'AE';
}else{
$visitorInfo = $this->visitorInfoStorage->getVisitorInfo();
if($visitorInfo instanceof \Pimcore\Targeting\Model\VisitorInfo){
$groups = $visitorInfo->getAssignedTargetGroups();
$city = $visitorInfo->get('geoip');
if($city){
$code = $city['country']['iso_code'];
}
if (!$code) {
$code = 'AE';
}
}
}
$groupids = [];
foreach ($groups as $key => $val) {
$groupids[] = $val->getId();
}
if(!$groupids){
$groupids[] = '22';
}
// Region wise ip Handler start
try {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
} else if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_X_FORWARDED'])) {
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
} else if (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_FORWARDED'])) {
$ipaddress = $_SERVER['HTTP_FORWARDED'];
} else if (isset($_SERVER['REMOTE_ADDR'])) {
$ipaddress = $_SERVER['REMOTE_ADDR'];
} else {
$ipaddress = 'UNKNOWN';
}
if ($ipaddress != 'UNKNOWN') {
$ip_info = new Reader(__DIR__ . '/GeoLite2-Country.mmdb');
$record = $ip_info->country($ipaddress);
if ($record) {
$ip = $record->country->isoCode;
}
}
} catch (\Exception $e) {
$ip = '';
}
$code = $ip; // issign country-iso code to code varible
if ($code == 'AE') {
$groupids[] = '29';
} elseif ($code == 'SA') {
$groupids[] = '27';
} elseif ($code == 'OM' || $code == 'QA' || $code == 'KW' || $code == 'BH') {
$groupids[] = '28';
} else {
//$code = 'AE';
$groupids[] = '29';
}
if(!$groupids){
$groupids[] = '22';
}
// Region wise ip Handler end
$Products = new Product\Listing();
//$Products->setCondition("regions IN (?)", [$groupids]);
$Products->load();
foreach ($Products as $key => $Product) {
$product[] = $Product;
}
$Categories = new ProductCategory\Listing();
$Categories->setOrderKey("sort");
$Categories->setOrder("asc");
$Categories->load();
foreach ($Categories as $key => $Category) {
$category[] = $Category;
//$categoryy[] = $Category->getName() . $Category->getSort();
}
//print_r($categoryy);die();
$Banner = new ProductBanner\Listing();
return $this->render('Product/Product.html.twig', [
'banners' => $Banner,
'product' => $product,
'category' => $category,
'groupids' => $groupids,
// 'groupids'=>'1', // temporary basses
]);
// $this->view->banners = $Banner;
// $this->view->product = $product;
// $this->view->category = $category;
// $this->view->groupids = $groupids;
}
// /**
// * @Route("/{locale}/product/{url}", name="product_category")
// */
// public function productcategoryAction(Request $request)
// {
// // $url = strtolower($request->get('url'));
// // $recipes = new Recipe\Listing();
// // $recipes->load();
// // foreach ($recipes as $key => $recipe) {
// // // $product = DefaultProduct::getById($product->getId());
// // break;
// // }
// // $this->view->recipe = $recipe;
// $visitorInfo = $this->visitorInfoStorage->getVisitorInfo();
// $groups = $visitorInfo->getAssignedTargetGroups();
// $groupids = [];
// // $city = $visitorInfo->get('geoip');
// // $code = $city['country']['iso_code'];
// // if (!$code) {
// // $code = 'AE';
// // }
// foreach ($groups as $key => $val) {
// $groupids[] = $val->id;
// }
// if(!$groupids){
// $groupids[] = '1';
// }
// if($request->get('url')){
// $url = strtolower($request->get('url'));
// $locale = $request->getLocale();
// $id = $request->get('id');
// $Products = new ProductCategory\Listing();
// $Products->setCondition("url IN (?)", [[$url]]);
// $Products->load();
// foreach ($Products as $key => $Product) {
// $product[] = ProductCategory::getById($Product->getId());
// }
// }
// return $this->render('Product/ProductCategory.html.twig', [
// 'category'=>$product,
// 'locale'=>$locale,
// 'groupids'=>$groupids,
// //'country'=>$code,
// 'country'=>'AE', // temporary basses
// ]);
// // $this->view->category = $product;
// // $this->view->locale = $locale;
// // $this->view->groupids = $groupids;
// // $this->view->country = $code;
// }
// /**
// * @Route("/{locale}/product/{url}", name="blog_list")
// */
public function productdetailsAction(Request $request) {
// Region wise ip Handler start
try {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
} else if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_X_FORWARDED'])) {
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
} else if (isset($_SERVER['HTTP_FORWARDED_FOR'])) {
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
} else if (isset($_SERVER['HTTP_FORWARDED'])) {
$ipaddress = $_SERVER['HTTP_FORWARDED'];
} else if (isset($_SERVER['REMOTE_ADDR'])) {
$ipaddress = $_SERVER['REMOTE_ADDR'];
} else {
$ipaddress = 'UNKNOWN';
}
if ($ipaddress != 'UNKNOWN') {
$ip_info = new Reader(__DIR__ . '/GeoLite2-Country.mmdb');
$record = $ip_info->country($ipaddress);
if ($record) {
$ip = $record->country->isoCode;
}
}
} catch (\Exception $e) {
$ip = '';
}
$code = $ip; // issign country-iso code to code varible
if ($code == 'AE') {
$groupids[] = '29';
} elseif ($code == 'SA') {
$groupids[] = '27';
} elseif ($code == 'OM' || $code == 'QA' || $code == 'KW' || $code == 'BH') {
$groupids[] = '28';
} else {
//$code = 'AE';
$groupids[] = '29';
}
// Region wise ip Handler end
if ($request->get('url')) {
$variant_id = 0;
$url = strtolower($request->get('url'));
$locale = $request->getLocale();
$cat = false;
$cats = new ProductCategory\Listing();
$cats->setCondition("url IN (?)", [[$url]]);
$cats->load();
if ($cats && count($cats) > 0) {
foreach ($cats as $key => $Product) {
$productt[] = ProductCategory::getById($Product->getId());
}
$cat = true;
}
//die($url);
$products = new Product\Listing();
$products->setCondition("url IN (?)", [[$url]]);
$products->load();
$count = count($products);
if ($count > 0) {
foreach ($products as $key => $product) {
$product = Product::getById($product->getId());
}
} else {
$ProductAttribute = new ProductAttribute\Listing();
$ProductAttribute->setCondition("url IN (?)", [[$url]]);
$ProductAttribute->load();
$product_used_recipe_IDs = [];
foreach ($ProductAttribute as $key => $productt) {
$variant_id = $productt->getId();
$product = ProductAttribute::getById($productt->getId())->getProduct();
if(empty($product)){
$productsList = new Product\Listing();
$productsList->setCondition("attributes LIKE :attributes", ["attributes" => "%object|".$variant_id."%"]);
$productsList->load();
if(!empty($productsList)){
foreach ($productsList as $key => $value) {
# code...
$product = $value;
break;
}
}
}
foreach ($product->getRecipe() as $product_used_recipes) {
$product_used_recipe_IDs[] = $product_used_recipes->getID();
}
}
$product_recipe_reviews = new Review\Listing();
$product_recipe_reviews->setCondition("recipe_id__id in (?)", [$product_used_recipe_IDs ]);
$product_recipe_reviews->setLimit(4);
$product_recipe_reviews->load();
}
}
if ($cat) {
return $this->render('Product/ProductCategory.html.twig', [
'category' => $productt,
'locale' => $locale,
'groupids' => $groupids,
'country' => $code,
//'country'=>'AE', // temporary basses
'cat' => $cat,
]);
// $this->view->category = $productt;
// $this->view->locale = $locale;
// $this->view->groupids = $groupids;
// $this->view->country = $code;
// $this->view->cat = $cat;
} else {
return $this->render('Product/Productdetail.html.twig', [
'country' => $code,
//'country'=>'AE', // temporary basses
//'vindex'=>$id2,
'variant_id' => $variant_id,
'product' => $product,
'productsss' => $product,
'product_recipe_reviews' => $product_recipe_reviews,
'product_used_recipe_IDs' => $product_used_recipe_IDs,
]);
// $this->view->country = $code;
// $this->view->vindex = $id2;
// $this->view->variant_id = $variant_id;
// $this->view->product = $product;
// $this->view->productsss = $product;
}
}
}