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 a0b647a7 authored by Nicolas's avatar Nicolas
Browse files

Mise en place de GraphQL

parent fb26cb33
No related branches found
No related tags found
No related merge requests found
# Changelog
## [1.2.2] - 2020-04-25
### Added
- Mise en place du GraphQL
- Ajout des dépendances pour le GraphQL
## [1.1.2] - 2020-04-23
### Added
- Ajout du bouton Save and New
......
<?php
declare(strict_types=1);
namespace NicolasBejean\ImageSliderManager\Model\Resolver\DataProvider;
use \NicolasBejean\ImageSliderManager\Api\ImageSliderRepositoryInterface;
use \NicolasBejean\ImageSliderManager\Api\Data\ImageSliderInterface;
use \NicolasBejean\ImageSliderManager\Model\ImageSlider as ImageSliderModel;
use \Magento\Widget\Model\Template\FilterEmulate;
use \Magento\Framework\Exception\NoSuchEntityException;
/**
* Class ImageSlider
*
* @category PHP
* @package NicolasBejean\ImageSliderManager\Model\Resolver\DataProvider
* @author Nicolas Béjean <nicolas@bejean.eu>
* @license https://github.com/nicolasbejean/imageslidermanager/blob/master/licence.txt BSD Licence
* @link https://www.bejean.eu
*/
class ImageSlider
{
/**
* @var ImageSliderRepositoryInterface
*/
private $imageSliderRepository;
/**
* @var FilterEmulate
*/
private $widgetFilter;
/**
* @param ImageSliderRepositoryInterface $imageSliderRepository
* @param FilterEmulate $widgetFilter
*/
public function __construct(
ImageSliderRepositoryInterface $imageSliderRepository,
FilterEmulate $widgetFilter
) {
$this->imageSliderRepository = $imageSliderRepository;
$this->widgetFilter = $widgetFilter;
}
/**
* Get Image Slider data
*
* @param string $imageSliderIdentifier
* @return array
* @throws NoSuchEntityException
*/
public function getData(string $imageSliderIdentifier): array
{
/** @var ImageSliderModel $imageSlider */
$imageSlider = $this->imageSliderRepository->getById($imageSliderIdentifier);
if (false === $imageSlider->isActive()) {
throw new NoSuchEntityException(
__('The Image Slider with the "%1" ID doesn\'t exist.', $imageSliderIdentifier)
);
}
/* TODO : Faire un explode du content pour renvoyer chaque image */
$content = $imageSlider->getContent();
$imageSliderData = [
ImageSliderInterface::IDENTIFIER => $imageSlider->getIdentifier(),
ImageSliderInterface::NAME => $imageSlider->getName(),
ImageSliderInterface::CONTENT => $content,
];
return $imageSliderData;
}
}
<?php
declare(strict_types=1);
namespace NicolasBejean\ImageSliderManager\Model\Resolver\ImageSlider;
use \NicolasBejean\ImageSliderManager\Api\Data\ImageSliderInterface;
use \Magento\Framework\GraphQl\Query\Resolver\IdentityInterface;
/**
* Class ImageSlider
*
* @category PHP
* @package NicolasBejean\ImageSliderManager\Model\Resolver\ImageSlider
* @author Nicolas Béjean <nicolas@bejean.eu>
* @license https://github.com/nicolasbejean/imageslidermanager/blob/master/licence.txt BSD Licence
* @link https://www.bejean.eu
*/
class Identity implements IdentityInterface
{
/** @var string */
private $cacheTag = \NicolasBejean\ImageSliderManager\Model\ImageSlider::CACHE_TAG;
/**
* Get Image Slider identities from resolved data
*
* @param array $resolvedData
* @return string[]
*/
public function getIdentities(array $resolvedData): array
{
$ids = [];
$items = $resolvedData['items'] ?? [];
foreach ($items as $item) {
if (is_array($item) && !empty($item[ImageSliderInterface::ENTITY_ID])) {
$ids[] = sprintf('%s_%s', $this->cacheTag, $item[ImageSliderInterface::ENTITY_ID]);
$ids[] = sprintf('%s_%s', $this->cacheTag, $item[ImageSliderInterface::IDENTIFIER]);
}
}
if (!empty($ids)) {
array_unshift($ids, $this->cacheTag);
}
return $ids;
}
}
<?php
declare(strict_types=1);
namespace NicolasBejean\ImageSliderManager\Model\Resolver;
use \NicolasBejean\ImageSliderManager\Model\Resolver\DataProvider\ImageSlider as ImageSliderDataProvider;
use \Magento\Framework\GraphQl\Config\Element\Field;
use \Magento\Framework\GraphQl\Query\ResolverInterface;
use \Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
use \Magento\Framework\Exception\NoSuchEntityException;
use \Magento\Framework\GraphQl\Exception\GraphQlInputException;
use \Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
/**
* Class ImageSliders
*
* @category PHP
* @package NicolasBejean\ImageSliderManager\Model\Resolver
* @author Nicolas Béjean <nicolas@bejean.eu>
* @license https://github.com/nicolasbejean/imageslidermanager/blob/master/licence.txt BSD Licence
* @link https://www.bejean.eu
*/
class ImageSliders implements ResolverInterface
{
/**
* @var ImageSliderDataProvider
*/
private $dataProvider;
/**
* @param ImageSliderDataProvider $dataProvider
*/
public function __construct(
ImageSliderDataProvider $dataProvider
) {
$this->dataProvider = $dataProvider;
}
/**
* @inheritdoc
*/
public function resolve(
Field $field,
$context,
ResolveInfo $info,
array $value = null,
array $args = null
) {
$imageSliderIdentifiers = $this->getImageSliderIdentifiers($args);
$imageSlidersData = $this->getImageSlidersData($imageSliderIdentifiers);
$resultData = [
'items' => $imageSlidersData,
];
return $resultData;
}
/**
* Get Image Slider identifiers
*
* @param array $args
* @return string[]
* @throws GraphQlInputException
*/
private function getImageSliderIdentifiers(array $args): array
{
if (!isset($args['identifiers']) || !is_array($args['identifiers']) || count($args['identifiers']) === 0) {
throw new GraphQlInputException(__('"identifiers" of Image Sliders should be specified'));
}
return $args['identifiers'];
}
/**
* Get image sliders data
*
* @param array $imageSliderIdentifiers
* @return array
* @throws GraphQlNoSuchEntityException
*/
private function getImageSlidersData(array $imageSliderIdentifiers): array
{
$imageSlidersData = [];
foreach ($imageSliderIdentifiers as $imageSliderIdentifier) {
try {
$imageSlidersData[$imageSliderIdentifier] = $this->dataProvider->getData($imageSliderIdentifier);
} catch (NoSuchEntityException $e) {
$imageSlidersData[$imageSliderIdentifier] = new GraphQlNoSuchEntityException(__($e->getMessage()), $e);
}
}
return $imageSlidersData;
}
}
type Query {
ImageSliderManager (
id: [Int] @doc(description: "ID of the Image Slider Manager")
identifier: [Int] @doc(description: "Identifier of the Image Slider Manager")
): ImageSliderManagers @resolver(class: "NicolasBejean\\ImageSliderManager\\Model\\Resolver\\ImageSliders") @doc(description: "The Image Slider Manager query returns information about Slider") @cache(cacheIdentity: "NicolasBejean\\ImageSliderManager\\Model\\Resolver\\ImageSlider\\Identity")
ImageSlidersManager (
identifiers: [String] @doc(description: "Identifiers of the Image Sliders")
): ImageSlidersManager @resolver(class: "NicolasBejean\\ImageSliderManager\\Model\\Resolver\\ImageSliders") @doc(description: "The Image Slider Manager query returns information about Slider") @cache(cacheIdentity: "NicolasBejean\\ImageSliderManager\\Model\\Resolver\\ImageSlider\\Identity")
}
type ImageSliderManagers @doc(description: "Images information") {
items: [ImageSliderManager] @doc(description: "An array of Slider")
type ImageSlidersManager @doc(description: "Images information") {
items: [ImageSlider] @doc(description: "An array of Slider")
}
type ImageSliderManager @doc(description: "Image Slider Manager defines all Images information") {
type ImageSlider @doc(description: "Image Slider Manager defines all Images information") {
identifier: String @doc(description: "Image Slider Manager identifier")
content: String @doc(description: "Image Slider Manager content")
name: String @doc(description: "Image Slider Manager name")
content: String @doc(description: "Image Slider Manager content")
}
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