Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
Commit 928b91d3 authored by Nicolas's avatar Nicolas
Browse files

Refonte de la recherche d'un produit dans la base de données en fonction du nom du fichier

parent 5f5b7c47
No related branches found
No related tags found
No related merge requests found
......@@ -7,11 +7,15 @@ use \Magento\Backend\App\Action\Context;
use \Magento\Framework\App\Request\Http;
use \Magento\Framework\Controller\ResultInterface;
use \Magento\Framework\App\Config\ScopeConfigInterface;
use \Magento\Store\Model\ScopeInterface;
use \Magento\Store\Model\StoreManagerInterface;
use \Magento\Framework\Exception\NoSuchEntityException;
/** Liste de produits */
use \Magento\Catalog\Model\Product;
use \Magento\Catalog\Api\ProductRepositoryInterface;
use \Magento\Framework\Api\SearchCriteriaBuilder;
use \Magento\Framework\Api\FilterBuilder;
use \Magento\Framework\Api\Search\FilterGroupBuilder;
/**
* Class Uploader
......@@ -35,19 +39,19 @@ class Uploader extends Action
private $productInterface;
/**
* @var SearchCriteriaBuilder
* @var ScopeConfigInterface
*/
private $searchCriteria;
protected $scopeConfig;
/**
* @var FilterBuilder
* @var StoreManagerInterface
*/
private $filter;
protected $storeManager;
/**
* @var FilterGroupBuilder
* @var string
*/
private $filterGroup;
protected $delimiter;
/**
* Uploader constructor.
......@@ -55,25 +59,26 @@ class Uploader extends Action
* @param Context $context
* @param Http $requestHttp
* @param ProductRepositoryInterface $productInterface
* @param SearchCriteriaBuilder $searchCriteriaBuilder
* @param FilterBuilder $filterBuilder
* @param FilterGroupBuilder $filterGroupBuilder
* @param ScopeConfigInterface $scopeConfig
* @param StoreManagerInterface $storeManager
*/
public function __construct(
Context $context,
Http $requestHttp,
ProductRepositoryInterface $productInterface,
SearchCriteriaBuilder $searchCriteriaBuilder,
FilterBuilder $filterBuilder,
FilterGroupBuilder $filterGroupBuilder
ScopeConfigInterface $scopeConfig,
StoreManagerInterface $storeManager
) {
parent::__construct($context);
$this->requestHttp = $requestHttp;
$this->productInterface = $productInterface;
$this->searchCriteria = $searchCriteriaBuilder;
$this->filter = $filterBuilder;
$this->filterGroup = $filterGroupBuilder;
/* Pour récupérer les paramétres du module */
$this->scopeConfig = $scopeConfig;
$this->storeManager = $storeManager;
$this->delimiter = $this->getDelimiter();
}
/**
......@@ -89,53 +94,57 @@ class Uploader extends Action
/**
* Upload file controller action
*
* @return ResultInterface
* @return void
*/
public function execute()
{
if ($this->requestHttp->getParam('isAjax')) {
$files = $this->requestHttp->getFiles();
foreach ($files as $file) {
list($fileName, $fileExtension)= explode('.', $file['name']);
$filter = $this->filter
->setField('sku')
->setConditionType('like')
->setValue($fileName)
->create();
$filterGroup = $this->filterGroup
->addFilter($filter)
->create();
$searchCriteria = $this->searchCriteria
->setFilterGroups([$filterGroup])
->create();
/** @var ProductRepositoryInterface $products */
$products = $this->productInterface->getList($searchCriteria)->getItems();
if (empty($products)) {
$sku = $this->getSku($file);
/* Recherche des produits existants */
try {
/** @var Product $product */
$product = $this->productInterface->get($sku);
echo 'product-found';
} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
echo 'no-product';
} else {
foreach ($products as $product) {
/** TODO Trouver une classe pour $product */
if ($product->getSku() === $fileName) {
echo 'Un produit existe dans le catalogue.';
}
}
}
}
}
}
/**
* Retourne la valeur du délimiteur indiqué dans le BO, sinon renvoie la valeur par défaut "_"
*
* @return string
*/
private function getDelimiter () {
try {
$storeId = $this->storeManager->getStore()->getId();
} catch (NoSuchEntityException $e) {
return '_';
}
return $this->scopeConfig->getValue('importimagesproduct/pattern/delimiter', ScopeInterface::SCOPE_STORE, $storeId);
}
/**
* Retourne le SKU en fonction du nom du fichier
*
* @param $file
* @return string
*/
private function getSku ($file) {
/* On récupère le nom du fichier */
list($fileName) = explode('.', $file['name']);
/* On récupère le sku */
list($sku) = explode($this->delimiter, $fileName);
// $imageId = $this->_request->getParam('param_name', 'image');
//
// try {
// $result = $this->imageUploader->saveFileToTmpDir($imageId);
// } catch (Exception $e) {
// $result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()];
// }
// return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData($result);
return $sku;
}
}
......@@ -55,6 +55,9 @@ use \NicolasBejean\Importer\Block\Adminhtml\ProductImages\Index;
<div class="alert-modal-content no-product">
<p>No product</p>
</div>
<div class="alert-modal-content product-found">
<p>Product Found</p>
</div>
<div class="alert-modal-content other-response">
<p>Other Response</p>
</div>
......
......@@ -71,9 +71,9 @@ require([
if (response === 'no-product') {
/* Ouvre la modal correspondante */
$('.alert-modal-content.no-product').modal("openModal");
} else {
} else if (response === 'product-found') {
/* Ouvre la modal correspondante */
$('.alert-modal-content.other-response').modal("openModal");
$('.alert-modal-content.product-found').modal("openModal");
}
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment