Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/vendor/magento/module-eav-graph-ql/Model/Resolver/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/old/vendor/magento/module-eav-graph-ql/Model/Resolver/CustomAttributeMetadata.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\EavGraphQl\Model\Resolver;

use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
use Magento\EavGraphQl\Model\Resolver\Query\Type;
use Magento\EavGraphQl\Model\Resolver\Query\Attribute;
use Magento\Framework\Exception\InputException;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\GraphQl\Config\Element\Field;
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
use Magento\Framework\GraphQl\Query\ResolverInterface;
use Magento\Eav\Api\Data\AttributeInterface;

/**
 * Resolve data for custom attribute metadata requests
 */
class CustomAttributeMetadata implements ResolverInterface
{
    /**
     * @var Type
     */
    private $type;

    /**
     * @var Attribute
     */
    private $attribute;

    /**
     * @param Type $type
     * @param Attribute $attribute
     */
    public function __construct(Type $type, Attribute $attribute)
    {
        $this->type = $type;
        $this->attribute = $attribute;
    }

    /**
     * @inheritdoc
     */
    public function resolve(
        Field $field,
        $context,
        ResolveInfo $info,
        array $value = null,
        array $args = null
    ) {
        $attributes['items'] = null;
        $attributeInputs = $args['attributes'];
        foreach ($attributeInputs as $attributeInput) {
            if (!isset($attributeInput['attribute_code']) || !isset($attributeInput['entity_type'])) {
                $attributes['items'][] = $this->createInputException($attributeInput);
                continue;
            }
            try {
                $attribute = $this->attribute->getAttribute(
                    $attributeInput['attribute_code'],
                    $attributeInput['entity_type']
                );
                $type = $this->type->getType($attributeInput['attribute_code'], $attributeInput['entity_type']);
            } catch (InputException $exception) {
                $attributes['items'][] = new GraphQlNoSuchEntityException(
                    __(
                        'Attribute code %1 of entity type %2 not configured to have a type.',
                        [$attributeInput['attribute_code'], $attributeInput['entity_type']]
                    )
                );
                continue;
            } catch (LocalizedException $exception) {
                $attributes['items'][] = new GraphQlInputException(
                    __(
                        'Invalid entity_type specified: %1',
                        [$attributeInput['entity_type']]
                    )
                );
                continue;
            }

            if (empty($type)) {
                continue;
            }

            $attributes['items'][] = [
                'attribute_code' => $attributeInput['attribute_code'],
                'entity_type' => $attributeInput['entity_type'],
                'attribute_type' => ucfirst($type),
                'input_type' => isset($attribute) ? $attribute->getFrontendInput() : null,
                'storefront_properties' => isset($attribute) ?$this->getStorefrontProperties($attribute) : null
            ];
        }

        return $attributes;
    }

    /**
     * Format storefront properties
     *
     * @param AttributeInterface $attribute
     * @return array
     */
    private function getStorefrontProperties(AttributeInterface $attribute)
    {
        return [
            'position'=> $attribute->getPosition(),
            'visible_on_catalog_pages'=> $attribute->getIsVisibleOnFront(),
            'use_in_search_results_layered_navigation' => $attribute->getIsFilterableInSearch(),
            'use_in_product_listing'=> $attribute->getUsedInProductListing(),
            'use_in_layered_navigation'=>
                $this->getLayeredNavigationPropertiesEnum()[$attribute->getisFilterable()] ?? null
        ];
    }

    /**
     * Return enum for resolving use in layered navigation
     *
     * @return string[]
     */
    private function getLayeredNavigationPropertiesEnum() {
        return [
            0 => 'NO',
            1 => 'FILTERABLE_WITH_RESULTS',
            2 => 'FILTERABLE_NO_RESULT'
        ];
    }

    /**
     * Create GraphQL input exception for an invalid attribute input
     *
     * @param array $attribute
     * @return GraphQlInputException
     */
    private function createInputException(array $attribute) : GraphQlInputException
    {
        $isCodeSet = isset($attribute['attribute_code']);
        $isEntitySet = isset($attribute['entity_type']);
        $messagePart = !$isCodeSet ? 'attribute_code' : 'entity_type';
        $messagePart .= !$isCodeSet && !$isEntitySet ? '/entity_type' : '';
        $identifier = "Empty AttributeInput";
        if ($isCodeSet) {
            $identifier = 'attribute_code: ' . $attribute['attribute_code'];
        } elseif ($isEntitySet) {
            $identifier = 'entity_type: ' . $attribute['entity_type'];
        }

        return new GraphQlInputException(
            __(
                'Missing %1 for the input %2.',
                [$messagePart, $identifier]
            )
        );
    }
}

Spamworldpro Mini