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/setup/src/Magento/Setup/Model/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/setup/src/Magento/Setup/Model/SearchConfig.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\Setup\Model;

use Magento\Framework\Setup\Option\AbstractConfigOption;
use Magento\Framework\Validation\ValidationException;
use Magento\Search\Model\SearchEngine\Validator;
use Magento\Search\Setup\CompositeInstallConfig;
use Magento\Setup\Exception as SetupException;

/**
 * Configure search engine
 */
class SearchConfig
{
    /**
     * @var SearchConfigOptionsList
     */
    private $searchConfigOptionsList;

    /**
     * @var Validator
     */
    private $searchValidator;

    /**
     * @var CompositeInstallConfig
     */
    private $installConfig;

    /**
     * @param SearchConfigOptionsList $searchConfigOptionsList
     * @param Validator $searchValidator
     * @param CompositeInstallConfig $installConfig
     */
    public function __construct(
        SearchConfigOptionsList $searchConfigOptionsList,
        Validator $searchValidator,
        CompositeInstallConfig $installConfig
    ) {
        $this->searchConfigOptionsList = $searchConfigOptionsList;
        $this->searchValidator = $searchValidator;
        $this->installConfig = $installConfig;
    }

    /**
     * Save the search engine configuration
     *
     * @param array $inputOptions
     * @throws SetupException
     * @throws ValidationException
     */
    public function saveConfiguration(array $inputOptions)
    {
        $searchConfigOptions = $this->extractSearchOptions($inputOptions);
        if (!empty($searchConfigOptions[SearchConfigOptionsList::INPUT_KEY_SEARCH_ENGINE])) {
            $this->validateSearchEngineSelection($searchConfigOptions);
        }
        try {
            $this->installConfig->configure($searchConfigOptions);
        } catch (\Exception $e) {
            throw new SetupException($e->getMessage());
        }
        $this->validateSearchEngine();
    }

    /**
     * Validate search engine
     *
     * @throws ValidationException
     */
    public function validateSearchEngine()
    {
        $validationErrors = $this->searchValidator->validate();
        if (!empty($validationErrors)) {
            throw new ValidationException(__(implode(PHP_EOL, $validationErrors)));
        }
    }

    /**
     * Validate the selected search engine
     *
     * @param array $searchOptions
     * @throws SetupException
     */
    private function validateSearchEngineSelection(array $searchOptions)
    {
        if (isset($searchOptions[SearchConfigOptionsList::INPUT_KEY_SEARCH_ENGINE])) {
            $selectedEngine = $searchOptions[SearchConfigOptionsList::INPUT_KEY_SEARCH_ENGINE];
            $availableEngines = $this->searchConfigOptionsList->getAvailableSearchEngineList();
            if (!isset($availableEngines[$selectedEngine])) {
                throw new SetupException("Search engine '{$selectedEngine}' is not an available search engine.");
            }
        }
    }

    /**
     * Extract configuration options for search
     *
     * @param array $inputOptions
     * @return array
     */
    private function extractSearchOptions(array $inputOptions): array
    {
        $searchOptions = [];
        $installOptions = $this->searchConfigOptionsList->getOptionsList();
        /** @var AbstractConfigOption $option */
        foreach ($installOptions as $option) {
            $optionName = $option->getName();
            if (isset($inputOptions[$optionName])) {
                $searchOptions[$optionName] = $inputOptions[$optionName];
            }
        }
        return $searchOptions;
    }
}

Spamworldpro Mini