<?php
namespace Kiwi\EshopBundle\Service;
use Kiwi\EshopBundle\Entity\Producers;
class EshopProducersHandle {
protected $em;
protected $languages;
/**
* @var \Kiwi\EshopBundle\Service\EshopProductsHandle
*/
private $eshopProductsHandle;
/**
* @var \Kiwi\EshopBundle\Service\EshopCategoriesHandle
*/
private $eshopCategoriesHandle;
var $controller = null;
var $repo = 'Kiwi\EshopBundle\Entity\Producers';
public function __construct(\Doctrine\ORM\EntityManager $em,
\Kiwi\LanguagesBundle\Service\LanguagesHandle $languages,
\Kiwi\EshopBundle\Service\EshopProductsHandle $eshopProductsHandle,
\Kiwi\EshopBundle\Service\EshopCategoriesHandle $eshopCategoriesHandle) {
$this->em = $em;
$this->languages = $languages;
$this->eshopProductsHandle = $eshopProductsHandle;
$this->eshopCategoriesHandle = $eshopCategoriesHandle;
}
public function setController($controller) {
$this->controller = $controller;
return $this;
}
public function producerAddArticle(Producers $customParams){
$article = $this->controller->get('article_handle')->createBlankArticle();
$customParams->setArticle($article);
$this->em->persist($customParams);
$this->em->flush();
return $article;
}
public function getProducerByCode($code) {
return $this->em->getRepository($this->repo)->findOneBy(array('code' => addslashes($code)));
}
public function getProducer(int $producer_id) {
return $this->em->getRepository($this->repo)->find((int)$producer_id);
}
public function getProducers(Producers $direct_producer = null, $include_products = false, $include_categories = false, $lang = 'cz') {
if($direct_producer) {
$producers = array($direct_producer);
} else {
$producers = $this->em->getRepository($this->repo)->findAll();
}
//inject producers products
if($include_products or $include_categories) {
$producers_ids = [];
foreach ($producers as $producer) {
$producers_ids[] = $producer->getId();
$producer->products = [];
$producer->categories = [];
$producer->full_link = $this->getProducerLink($producer, $lang);
}
$products = ($direct_producer) ? $this->getProducerProducts($producers_ids) : array('filtered' => []);
foreach ($producers as $producer) {
$producers_ids[] = $producer->getId();
foreach ($products['filtered'] as $product) {
if($product['producer']) {
if($product['producer']['id'] == $producer->getId()) {
$producer->products[] = $product;
}
}
}
}
}
//inject producers categories
if($include_categories) {
foreach ($producers as $producer) {
if(count($producer->products) >= 1) {
$categories = [];
foreach ($producer->products as $product) {
$categories = array_merge_recursive($categories, $product['categories']);
}
foreach (array_unique($categories) as $a_category_id) {
$category_obj = $this->eshopCategoriesHandle->getCategory($a_category_id);
$category_obj->full_link = $this->eshopCategoriesHandle->getCategoryLink($category_obj, $lang);
$producer->categories[] = $category_obj;
}
}
}
}
if($direct_producer) {
if(isset($producers[0])) {
return $producers[0];
} else {
return false;
}
}
return $producers;
}
public function getProducerProducts(array $producers_ids, $lang = 'cz') {
return $this->eshopProductsHandle->findProducts($lang, array('producer' => $producers_ids, 'results_per_page' => 9999));
/*
return $this->em->getRepository($phObj->repo_categories)->findBy(array(
'category_id' => (int)$category_id,
'is_deleted' => false
));
*/
}
public function getProducerLink(\Kiwi\EshopBundle\Entity\Producers $producer, $lang = 'cz') {
$data = $this->controller->get('page_twig_extension')->kpathFunction(21, $lang);
//$data .= $this->pageExtensions->webalizeFunction($kategorieTree->getName());
$data .= $producer->getCode();
return $data;
}
}