-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4 from asdoria/develop
Develop
- Loading branch information
Showing
33 changed files
with
434 additions
and
153 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{ | ||
"bundles": { | ||
"Asdoria\\SyliusPictogramPlugin\\AsdoriaSyliusPictogramPlugin": [ | ||
"all" | ||
] | ||
}, | ||
"copy-from-recipe": { | ||
"config/": "%CONFIG_DIR%/" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
imports: | ||
- { resource: "@AsdoriaSyliusPictogramPlugin/Resources/config/config.yaml"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
asdoria_sylius_pictogram_plugin: | ||
resource: "@AsdoriaSyliusPictogramPlugin/Resources/config/routing.yaml" | ||
prefix: '/%sylius_admin.path_name%' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
<?php | ||
declare(strict_types=1); | ||
|
||
namespace Asdoria\SyliusPictogramPlugin\Controller; | ||
|
||
use Asdoria\SyliusPictogramPlugin\Model\PictogramGroupInterface; | ||
use Sylius\Bundle\ResourceBundle\Controller\ResourceController; | ||
use Sylius\Component\Core\Model\ProductVariantInterface; | ||
use Sylius\Component\Resource\ResourceActions; | ||
use Symfony\Component\HttpFoundation\JsonResponse; | ||
use Symfony\Component\HttpFoundation\Request; | ||
use Symfony\Component\HttpFoundation\Response; | ||
use Symfony\Component\HttpKernel\Exception\HttpException; | ||
|
||
/** | ||
* Class PictogramController | ||
* @package Asdoria\SyliusPictogramPlugin\Controller | ||
* | ||
* @author Hugo Duval <[email protected]> | ||
*/ | ||
class PictogramGroupController extends ResourceController | ||
{ | ||
/** | ||
* @throws HttpException | ||
*/ | ||
public function updatePositionsAction(Request $request): Response | ||
{ | ||
$configuration = $this->requestConfigurationFactory->create($this->metadata, $request); | ||
$this->isGrantedOr403($configuration, ResourceActions::UPDATE); | ||
$pictogramGroupsToUpdate = $request->get('pictogramGroups'); | ||
|
||
if ($configuration->isCsrfProtectionEnabled() && !$this->isCsrfTokenValid('update-pictogram-group-position', $request->request->get('_csrf_token'))) { | ||
throw new HttpException(Response::HTTP_FORBIDDEN, 'Invalid csrf token.'); | ||
} | ||
|
||
if (in_array($request->getMethod(), ['POST', 'PUT', 'PATCH'], true) && null !== $pictogramGroupsToUpdate) { | ||
foreach ($pictogramGroupsToUpdate as $pictogramGroupToUpdate) { | ||
if (!is_numeric($pictogramGroupToUpdate['position'])) { | ||
throw new HttpException( | ||
Response::HTTP_NOT_ACCEPTABLE, | ||
sprintf('The pictogramGroup position "%s" is invalid.', $pictogramGroupToUpdate['position']) | ||
); | ||
} | ||
|
||
/** @var PictogramGroupInterface $pictogramGroup */ | ||
$pictogramGroup = $this->repository->findOneBy(['id' => $pictogramGroupToUpdate['id']]); | ||
$pictogramGroup->setPosition((int) $pictogramGroupToUpdate['position']); | ||
$this->manager->flush(); | ||
} | ||
} | ||
|
||
return new JsonResponse(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
177 changes: 177 additions & 0 deletions
177
src/Form/DataTransformer/ProductsToPictogramGroupsTransformer.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
<?php | ||
declare(strict_types=1); | ||
|
||
namespace Asdoria\SyliusPictogramPlugin\Form\DataTransformer; | ||
|
||
use App\Model\PictogramGroupInterface; | ||
use App\Model\PictogramInterface; | ||
use Doctrine\Common\Collections\ArrayCollection; | ||
use Doctrine\Common\Collections\Collection; | ||
use Sylius\Component\Core\Model\ProductInterface; | ||
use Sylius\Component\Core\Model\ProductVariantInterface; | ||
use Sylius\Component\Product\Repository\ProductRepositoryInterface; | ||
use Sylius\Component\Resource\Factory\FactoryInterface; | ||
use Sylius\Component\Resource\Repository\RepositoryInterface; | ||
use Symfony\Component\Form\DataTransformerInterface; | ||
|
||
/** | ||
* Class ProductsToPictogramGroupsTransformer | ||
* @package Asdoria\SyliusPictogramPlugin\Form\DataTransformer | ||
* | ||
* @author Philippe Vesin <[email protected]> | ||
*/ | ||
class ProductsToPictogramGroupsTransformer implements DataTransformerInterface | ||
{ | ||
/** @var FactoryInterface */ | ||
private $pictogramFactory; | ||
|
||
/** @var ProductRepositoryInterface */ | ||
private $productRepository; | ||
|
||
/** @var RepositoryInterface */ | ||
private $pictogramGroupRepository; | ||
|
||
/** @var Collection */ | ||
private $pictograms; | ||
|
||
/** | ||
* ProductsToPictogramsTransformer constructor. | ||
* | ||
* @param FactoryInterface $pictogramFactory | ||
* @param ProductRepositoryInterface $productRepository | ||
* @param RepositoryInterface $pictogramGroupRepository | ||
*/ | ||
public function __construct( | ||
FactoryInterface $pictogramFactory, | ||
ProductRepositoryInterface $productRepository, | ||
RepositoryInterface $pictogramGroupRepository | ||
) | ||
{ | ||
$this->pictogramFactory = $pictogramFactory; | ||
$this->productRepository = $productRepository; | ||
$this->pictogramGroupRepository = $pictogramGroupRepository; | ||
} | ||
|
||
/** | ||
* {@inheritdoc} | ||
*/ | ||
public function transform($pictograms) | ||
{ | ||
$this->setPictograms($pictograms); | ||
|
||
if (null === $pictograms) { | ||
return ''; | ||
} | ||
|
||
$values = []; | ||
|
||
/** @var PictogramInterface $pictogram */ | ||
foreach ($pictograms as $pictogram) { | ||
$values[$pictogram->getPictogramGroup()->getCode()] = $pictogram->getCode(); | ||
} | ||
|
||
return $values; | ||
} | ||
|
||
/** | ||
* {@inheritdoc} | ||
*/ | ||
public function reverseTransform($values): ?Collection | ||
{ | ||
if (null === $values || '' === $values || !is_array($values)) { | ||
return null; | ||
} | ||
|
||
$pictograms = new ArrayCollection(); | ||
foreach ($values as $pictogramGroupCode => $productCodes) { | ||
if (null === $productCodes) { | ||
continue; | ||
} | ||
|
||
/** @var PictogramInterface $pictogram */ | ||
$pictogram = $this->getPictogramByGroupCode($pictogramGroupCode); | ||
$this->setAssociatedProductsByProductCodes($pictogram, $productCodes); | ||
$pictograms->add($pictogram); | ||
} | ||
|
||
$this->setPictograms(null); | ||
|
||
return $pictograms; | ||
} | ||
|
||
/** | ||
* @param Collection $products | ||
* | ||
* @return string|null | ||
*/ | ||
private function getCodesAsStringFromProducts(Collection $products): ?string | ||
{ | ||
if ($products->isEmpty()) { | ||
return null; | ||
} | ||
|
||
$codes = []; | ||
|
||
/** @var ProductInterface|ProductVariantInterface $product */ | ||
foreach ($products as $product) { | ||
$codes[] = $product->getCode(); | ||
} | ||
|
||
return implode(',', $codes); | ||
} | ||
|
||
/** | ||
* @param string $pictogramGroupCode | ||
* | ||
* @return PictogramInterface | ||
*/ | ||
private function getPictogramByGroupCode(string $pictogramGroupCode): PictogramInterface | ||
{ | ||
/** @var PictogramInterface $pictogram */ | ||
foreach ($this->pictograms as $pictogram) { | ||
if ($pictogramGroupCode === $pictogram->getPictogramGroup()->getCode()) { | ||
return $pictogram; | ||
} | ||
} | ||
|
||
/** @var PictogramGroupInterface $pictogramGroup */ | ||
$pictogramGroup = $this->pictogramGroupRepository->findOneBy([ | ||
'code' => $pictogramGroupCode, | ||
]); | ||
|
||
/** @var PictogramInterface $pictogram */ | ||
$pictogram = $this->pictogramFactory->createNew(); | ||
$pictogram->setPictogramGroup($pictogramGroup); | ||
|
||
return $pictogram; | ||
} | ||
|
||
/** | ||
* @param PictogramInterface $pictogram | ||
* @param string $productCodes | ||
*/ | ||
private function setAssociatedProductsByProductCodes( | ||
PictogramInterface $pictogram, | ||
string $productCodes | ||
): void | ||
{ | ||
$products = $this->productRepository->findBy(['code' => explode(',', $productCodes)]); | ||
|
||
foreach ($pictogram->getProducts() as $product) { | ||
$pictogram->removeProduct($product); | ||
} | ||
|
||
/** @var ProductInterface $product */ | ||
foreach ($products as $product) { | ||
$pictogram->addProduct($product); | ||
} | ||
} | ||
|
||
/** | ||
* @param Collection|null $pictograms | ||
*/ | ||
private function setPictograms(?Collection $pictograms): void | ||
{ | ||
$this->pictograms = $pictograms; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.