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-deploy/Package/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

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

namespace Magento\Deploy\Package;

use InvalidArgumentException;
use Magento\Framework\App\Area;
use Magento\Framework\App\DeploymentConfig;
use Magento\Framework\AppInterface;
use Magento\Framework\Config\ConfigOptionsListConstants;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Validator\Locale;
use Magento\Store\Model\Config\StoreView;
use Magento\User\Api\Data\UserInterface;
use Magento\User\Model\ResourceModel\User\Collection as UserCollection;
use Magento\User\Model\ResourceModel\User\CollectionFactory as UserCollectionFactory;
use Psr\Log\LoggerInterface;

/**
 * Deployment Package Locale Resolver class
 */
class LocaleResolver
{
    /**
     * Parameter to force deploying certain languages for the admin, without any users having configured them yet.
     */
    const ADMIN_LOCALES_FOR_DEPLOY = 'admin_locales_for_deploy';

    /**
     * @var StoreView
     */
    private $storeView;

    /**
     * @var UserCollectionFactory
     */
    private $userCollFactory;

    /**
     * @var DeploymentConfig
     */
    private $deploymentConfig;

    /**
     * @var Locale
     */
    private $locale;

    /**
     * @var LoggerInterface
     */
    private $logger;

    /**
     * @var array|null
     */
    private $usedStoreLocales;

    /**
     * @var array|null
     */
    private $usedAdminLocales;

    /**
     * LocaleResolver constructor.
     *
     * @param StoreView $storeView
     * @param UserCollectionFactory $userCollectionFactory
     * @param DeploymentConfig $deploymentConfig
     * @param Locale $locale
     * @param LoggerInterface $logger
     */
    public function __construct(
        StoreView $storeView,
        UserCollectionFactory $userCollectionFactory,
        DeploymentConfig $deploymentConfig,
        Locale $locale,
        LoggerInterface $logger
    ) {
        $this->storeView = $storeView;
        $this->userCollFactory = $userCollectionFactory;
        $this->deploymentConfig = $deploymentConfig;
        $this->locale = $locale;
        $this->logger = $logger;
    }

    /**
     * Get locales that are used for a given theme.
     * If it is a frontend theme, return supported frontend languages.
     * If it is an adminhtml theme, return languages that admin users have configured together with deployment config.
     *
     * @param Package $package
     *
     * @return array
     */
    public function getUsedPackageLocales(Package $package): array
    {
        switch ($package->getArea()) {
            case Area::AREA_ADMINHTML:
                $locales = $this->getUsedAdminLocales();
                break;
            case Area::AREA_FRONTEND:
                $locales = $this->getUsedStoreLocales();
                break;
            default:
                $locales = array_merge($this->getUsedAdminLocales(), $this->getUsedStoreLocales());
        }
        return $this->validateLocales($locales);
    }

    /**
     * Get used admin user locales, en_US is always included by default.
     *
     * @return array
     */
    private function getUsedAdminLocales(): array
    {
        if ($this->usedAdminLocales === null) {
            $deploymentConfig = $this->getDeploymentAdminLocales();
            $this->usedAdminLocales = array_merge([AppInterface::DISTRO_LOCALE_CODE], $deploymentConfig);

            if (!$this->isDbConnectionAvailable()) {
                return $this->usedAdminLocales;
            }

            /** @var UserCollection $userCollection */
            $userCollection = $this->userCollFactory->create();
            /** @var UserInterface $adminUser */
            foreach ($userCollection as $adminUser) {
                $this->usedAdminLocales[] = $adminUser->getInterfaceLocale();
            }
        }
        return $this->usedAdminLocales;
    }

    /**
     * Get used store locales.
     *
     * @return array
     */
    private function getUsedStoreLocales(): array
    {
        if ($this->usedStoreLocales === null) {
            $this->usedStoreLocales = $this->isDbConnectionAvailable()
                ? $this->storeView->retrieveLocales()
                : [AppInterface::DISTRO_LOCALE_CODE];
        }
        return $this->usedStoreLocales;
    }

    /**
     * Strip out duplicates and break on invalid locale codes.
     *
     * @param array $usedLocales
     *
     * @return array
     * @throws InvalidArgumentException if unknown locale is provided by the store configuration
     */
    private function validateLocales(array $usedLocales): array
    {
        return array_map(
            function ($locale) {
                if (!$this->locale->isValid($locale)) {
                    throw new InvalidArgumentException(
                        $locale . ' argument has invalid value, run info:language:list for list of available locales'
                    );
                }

                return $locale;
            },
            array_unique($usedLocales)
        );
    }

    /**
     * Check if a database connection is already set up.
     *
     * @return bool
     */
    private function isDbConnectionAvailable(): bool
    {
        try {
            $connections = $this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTIONS, []);
        } catch (LocalizedException $exception) {
            $this->logger->critical($exception);
        }
        return !empty($connections);
    }

    /**
     * Retrieve deployment configuration for admin locales that have to be deployed.
     *
     * @return array|mixed|string|null
     */
    private function getDeploymentAdminLocales(): array
    {
        try {
            return $this->deploymentConfig
                ->get(self::ADMIN_LOCALES_FOR_DEPLOY, []);
        } catch (LocalizedException $exception) {
            return [];
        }
    }
}

Spamworldpro Mini