Files
ltsecurityinc/app/code/Plumrocket/Base/Model/Debug/CollectInfo.php
T

218 lines
6.1 KiB
PHP

<?php
/**
* @package Plumrocket_Base
* @copyright Copyright (c) 2020 Plumrocket Inc. (https://plumrocket.com)
* @license https://plumrocket.com/license End-user License Agreement
*/
declare(strict_types=1);
namespace Plumrocket\Base\Model\Debug;
use Magento\Framework\App\ProductMetadataInterface;
use Magento\Framework\App\State;
use Magento\Framework\Encryption\EncryptorInterface;
use Magento\Framework\Module\ModuleListInterface;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Framework\Util;
use Magento\Framework\View\Asset\ConfigInterface;
use Magento\Framework\View\Design\Theme\ThemeList;
use Plumrocket\Base\Model\Extension\Customer\GetTrueCustomerKey;
/**
* @since 2.3.0
*/
class CollectInfo
{
/**
* @var array
*/
private $notConflictingVendors = [
'Magento',
'Amazon',
'Klarna',
'MSP',
'Temando',
'Vertex',
'Dotdigitalgroup',
'Yotpo',
];
/**
* @var array
*/
private $notConflictingExtensions = [];
/**
* @var \Magento\Framework\App\State
*/
private $appState;
/**
* @var \Magento\Framework\Stdlib\DateTime\DateTime
*/
private $dateTime;
/**
* @var \Magento\Framework\App\ProductMetadataInterface
*/
private $productMetadata;
/**
* @var \Magento\Framework\Module\ModuleListInterface
*/
private $moduleList;
/**
* @var \Magento\Framework\Encryption\EncryptorInterface
*/
private $encryptor;
/**
* @var \Magento\Framework\View\Design\Theme\ThemeList
*/
private $themeList;
/**
* @var \Magento\Framework\Util
*/
private $util;
/**
* @var \Magento\Framework\View\Asset\ConfigInterface
*/
private $assetConfig;
/**
* @var \Plumrocket\Base\Model\Extension\Customer\GetTrueCustomerKey
*/
private $getTrueCustomerKey;
/**
* @param \Magento\Framework\App\State $appState
* @param \Magento\Framework\Stdlib\DateTime\DateTime $dateTime
* @param \Magento\Framework\App\ProductMetadataInterface $productMetadata
* @param \Magento\Framework\Module\ModuleListInterface $moduleList
* @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
* @param \Magento\Framework\View\Design\Theme\ThemeList $themeList
* @param \Magento\Framework\Util $util
* @param \Magento\Framework\View\Asset\ConfigInterface $assetConfig
* @param \Plumrocket\Base\Model\Extension\Customer\GetTrueCustomerKey $getTrueCustomerKey
*/
public function __construct(
State $appState,
DateTime $dateTime,
ProductMetadataInterface $productMetadata,
ModuleListInterface $moduleList,
EncryptorInterface $encryptor,
ThemeList $themeList,
Util $util,
ConfigInterface $assetConfig,
GetTrueCustomerKey $getTrueCustomerKey
) {
$this->appState = $appState;
$this->dateTime = $dateTime;
$this->productMetadata = $productMetadata;
$this->moduleList = $moduleList;
$this->encryptor = $encryptor;
$this->themeList = $themeList;
$this->util = $util;
$this->assetConfig = $assetConfig;
$this->getTrueCustomerKey = $getTrueCustomerKey;
}
/**
* Get debug information.
*
* @return array
*/
public function execute() : array
{
return [
'core' => $this->getCoreMagentoInfo(),
'phpVersion' => $this->util->getTrimmedPhpVersion(),
'additional' => [
'time' => $this->dateTime->date(),
'cssMinification' => $this->assetConfig->isMergeCssFiles(),
'jsMinification' => $this->assetConfig->isMergeJsFiles(),
'jsBundling' => $this->assetConfig->isBundlingJsFiles(),
'minifyHtml' => $this->assetConfig->isMinifyHtml(),
'potential_conflicts' => $this->getPotentialConflicts(),
'signature' => $this->encryptor->hash($this->getTrueCustomerKey->execute('Base')),
],
];
}
/**
* Get magento details.
*
* @return array
*/
private function getCoreMagentoInfo() : array
{
return [
'mode' => $this->appState->getMode(),
'version' => $this->productMetadata->getVersion(),
'name' => $this->productMetadata->getName(),
'edition' => $this->productMetadata->getEdition(),
];
}
/**
* Get third party extensions and themes.
*
* @return array
*/
private function getPotentialConflicts() : array
{
return [
'modules' => $this->getThirdPartyExtensions(),
'themes' => $this->getThirdPartyThemes(),
];
}
/**
* Get list of third party extensions.
*
* @return array
*/
private function getThirdPartyExtensions() : array
{
$notConflictingVendors = $this->notConflictingVendors;
$notConflictingExtensions = $this->notConflictingExtensions;
return array_values(
array_filter(
$this->moduleList->getNames(),
static function ($moduleFullName) use ($notConflictingVendors, $notConflictingExtensions) {
$vendor = explode('_', $moduleFullName)[0];
if (in_array($vendor, $notConflictingVendors, true)) {
return false;
}
if (in_array($moduleFullName, $notConflictingExtensions, true)) {
return false;
}
return true;
}
)
);
}
/**
* Get list of third party themes.
*
* @return array
*/
private function getThirdPartyThemes() : array
{
return array_filter(
$this->themeList->getColumnValues('code'),
static function ($theme) {
return strpos($theme, 'Magento/') !== 0;
}
);
}
}