452 lines
13 KiB
PHP
Executable File
452 lines
13 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* @author Olegnax
|
|
* @package Olegnax_Core
|
|
* @copyright Copyright (c) 2023 Olegnax (http://olegnax.com/). All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Olegnax\Core\Helper;
|
|
|
|
use Exception;
|
|
use Magento\Catalog\Helper\Product\Compare;
|
|
use Magento\Cms\Model\Template\FilterProvider;
|
|
use Magento\Customer\Model\Session;
|
|
use Magento\Framework\App\Area;
|
|
use Magento\Framework\App\Cache\Frontend\Pool;
|
|
use Magento\Framework\App\Cache\TypeListInterface;
|
|
use Magento\Framework\App\Config\ScopeConfigInterface;
|
|
use Magento\Framework\App\Config\Storage\WriterInterface;
|
|
use Magento\Framework\App\Helper\AbstractHelper;
|
|
use Magento\Framework\App\Helper\Context;
|
|
use Magento\Framework\App\ObjectManager;
|
|
use Magento\Framework\App\ProductMetadataInterface;
|
|
use Magento\Framework\App\State;
|
|
use Magento\Framework\UrlInterface;
|
|
use Magento\Framework\View\DesignInterface;
|
|
use Magento\Store\Model\ScopeInterface;
|
|
use Magento\Store\Model\StoreManagerInterface;
|
|
use Magento\Wishlist\Helper\Data;
|
|
use Olegnax\Core\Block\ChildTemplate;
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
class Helper extends AbstractHelper
|
|
{
|
|
|
|
|
|
const XML_PATH_CORE_LAZY = 'olegnax_core_settings/general/lazyload';
|
|
const CONFIG_MODULE = 'olegnax_core_settings';
|
|
const CHILD_TEMPLATE = ChildTemplate::class;
|
|
|
|
/**
|
|
* @var ObjectManager
|
|
*/
|
|
protected $objectManager;
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $isArea = [];
|
|
/**
|
|
* @var LoggerInterface
|
|
*/
|
|
public $logger;
|
|
|
|
public function __construct(
|
|
Context $context,
|
|
LoggerInterface $logger
|
|
)
|
|
{
|
|
$this->logger = $logger;
|
|
|
|
parent::__construct($context);
|
|
if (!$this->getModuleConfig(
|
|
'general/install_date',
|
|
0,
|
|
ScopeConfigInterface::SCOPE_TYPE_DEFAULT
|
|
)
|
|
) {
|
|
$this->setModuleConfig('general/install_date', time());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function isEnabled()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public function setModuleConfig(
|
|
$path,
|
|
$value,
|
|
$scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
|
|
$scopeId = 0
|
|
) {
|
|
if (!empty($path)) {
|
|
$path = static::CONFIG_MODULE . '/' . $path;
|
|
}
|
|
return $this->setSystemValue($path, $value, $scope, $scopeId);
|
|
}
|
|
|
|
public function setSystemValue($path, $value, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeId = 0)
|
|
{
|
|
$result = $this->_loadObject(WriterInterface::class)->save($path, $value, $scope, $scopeId);
|
|
$this->scopeConfig->clean();
|
|
return $result;
|
|
}
|
|
|
|
public function deleteSystemValue($path, $scope = ScopeConfigInterface::SCOPE_TYPE_DEFAULT, $scopeId = 0)
|
|
{
|
|
$result = $this->_loadObject(WriterInterface::class)->delete($path, $scope, $scopeId);
|
|
$this->scopeConfig->clean();
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @return mixed
|
|
*/
|
|
public function _loadObject($path)
|
|
{
|
|
return ObjectManager::getInstance()->get($path);
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function getThemeCode()
|
|
{
|
|
/** @var DesignInterface $appState */
|
|
$appState = $this->_loadObject(DesignInterface::class);
|
|
return $appState->getDesignTheme()->getCode();
|
|
}
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function isMobileTheme()
|
|
{
|
|
return (bool) preg_match('@^Olegnax\/a2m@', $this->getThemeCode());
|
|
}
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function isLazyLoadEnabled(){
|
|
return (bool) $this->getSystemValue(static::XML_PATH_CORE_LAZY);
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @param integer $storeCode
|
|
* @param string $scopeType
|
|
* @return mixed
|
|
*/
|
|
public function getModuleConfig($path = '', $storeCode = null, $scopeType = ScopeInterface::SCOPE_STORE)
|
|
{
|
|
if (empty($path)) {
|
|
$path = static::CONFIG_MODULE;
|
|
} else {
|
|
$path = static::CONFIG_MODULE . '/' . $path;
|
|
}
|
|
return $this->getSystemValue($path, $storeCode, $scopeType);
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @param integer $storeCode
|
|
* @param string $scopeType
|
|
* @return mixed
|
|
*/
|
|
public function getSystemValue($path, $storeCode = null, $scopeType = ScopeInterface::SCOPE_STORE)
|
|
{
|
|
$value = $this->scopeConfig->getValue(
|
|
$path,
|
|
$scopeType,
|
|
$storeCode
|
|
);
|
|
if (is_null($value)) {
|
|
$value = '';
|
|
}
|
|
return $value;
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @return mixed
|
|
*/
|
|
public function getSystemDefaultValue($path)
|
|
{
|
|
return $this->getSystemValue(
|
|
$path,
|
|
0,
|
|
ScopeConfigInterface::SCOPE_TYPE_DEFAULT
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function isAdmin()
|
|
{
|
|
return $this->isArea(Area::AREA_ADMINHTML);
|
|
}
|
|
|
|
/**
|
|
* @param string $area
|
|
* @return bool
|
|
*/
|
|
public function isArea($area = Area::AREA_FRONTEND)
|
|
{
|
|
if (!isset($this->isArea[$area])) {
|
|
/** @var State $state */
|
|
$state = $this->_loadObject(State::class);
|
|
|
|
try {
|
|
$this->isArea[$area] = ($state->getAreaCode() == $area);
|
|
} catch ( Exception $e) {
|
|
$this->isArea[$area] = false;
|
|
}
|
|
}
|
|
|
|
return $this->isArea[$area];
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @param array $arguments
|
|
* @return mixed
|
|
*/
|
|
public function _createObject($path, $arguments = [])
|
|
{
|
|
return ObjectManager::getInstance()->create($path, $arguments);
|
|
}
|
|
|
|
public function getLayoutTemplateHtml($block, $option_path = '', $fileName = '', $arguments = [])
|
|
{
|
|
$value = $this->getSystemValue($option_path);
|
|
|
|
if (is_string($value) || is_numeric($value)) {
|
|
return $this->getLayoutTemplateHtmlbyValue($block, $value, $fileName, $arguments);
|
|
}
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @param integer $storeCode
|
|
* @return mixed
|
|
*/
|
|
public function getConfig($path, $storeCode = null)
|
|
{
|
|
return $this->getSystemValue($path, $storeCode);
|
|
}
|
|
|
|
public function getLayoutTemplateHtmlbyValue(
|
|
$block,
|
|
$value = null,
|
|
$fileName = null,
|
|
$arguments = [],
|
|
$separator = '/'
|
|
) {
|
|
$_fileName = '';
|
|
if (empty($fileName)) {
|
|
$blockTemplate = $block->getTemplate();
|
|
if (preg_match('/(\.[^\.]+?)$/', $blockTemplate)) {
|
|
$fileName = preg_replace('/(\.[^\.]+?)$/', '%s%s$1', $blockTemplate);
|
|
} else {
|
|
$fileName .= '%s%s';
|
|
}
|
|
if (!preg_match('#([^_\:])_([^_\:])\:\:#i', $fileName)) {
|
|
$className = array_slice(array_filter(explode('\\', get_class($block))), 0, 2);
|
|
if ('Magento' !== $className[0]) {
|
|
$fileName = implode('_', $className) . '::' . $fileName;
|
|
}
|
|
}
|
|
} else {
|
|
$_fileName = $fileName;
|
|
}
|
|
$blockName = $separator . $block->getNameInLayout() . $separator . $_fileName . $separator . $value;
|
|
$fileName = sprintf($fileName, $separator, $value);
|
|
while ($block->getLayout()->getBlock($blockName)) {
|
|
$blockName .= '_0';
|
|
}
|
|
$_block = $block->getLayout()->createBlock(static::CHILD_TEMPLATE, $blockName);
|
|
$block->setChild($_block->getNameInLayout(), $_block);
|
|
if (!empty($arguments) && is_array($arguments)) {
|
|
$_block->addData($arguments);
|
|
}
|
|
$content = $_block->setTemplate($fileName)->toHtml();
|
|
|
|
return $content;
|
|
}
|
|
|
|
public function isLoggedIn()
|
|
{
|
|
return $this->_loadObject(Session::class)->isLoggedIn();
|
|
}
|
|
|
|
public function getWishlistCount()
|
|
{
|
|
return $this->_loadObject(Data::class)->getItemCount();
|
|
}
|
|
|
|
/**
|
|
* Get Product version
|
|
*
|
|
* @return string
|
|
*/
|
|
function getVersion()
|
|
{
|
|
return $this->_loadObject(ProductMetadataInterface::class)->getVersion();
|
|
}
|
|
|
|
/**
|
|
* @param string $version
|
|
* @param string $operator
|
|
* @return bool
|
|
*/
|
|
function getVersionCompare($version, $operator = '<=')
|
|
{
|
|
return version_compare($this->getVersion(), $version, $operator);
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function isLegacyJQuery() {
|
|
return $this->getVersionCompare('2.3.2');
|
|
}
|
|
|
|
|
|
public function getCompareListUrl()
|
|
{
|
|
return $this->_loadObject(Compare::class)->getListUrl();
|
|
}
|
|
|
|
public function getCompareListCount()
|
|
{
|
|
return $this->_loadObject(Compare::class)->getItemCount();
|
|
}
|
|
|
|
public function getBaseUrl($type = UrlInterface::URL_TYPE_LINK, $secure = null)
|
|
{
|
|
return $this->getStore()->getBaseUrl($type, $secure);
|
|
}
|
|
|
|
public function getStore()
|
|
{
|
|
/** @var StoreManagerInterface $storeManager */
|
|
$storeManager = $this->_loadObject(StoreManagerInterface::class);
|
|
return $storeManager->getStore();
|
|
}
|
|
|
|
public function isMobile()
|
|
{
|
|
$regex_match = "/(nokia|iphone|android|motorola|^mot\-|softbank|foma|docomo|kddi|up\.browser|up\.link|"
|
|
. "htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|"
|
|
. "blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam\-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|"
|
|
. "symbian|smartphone|mmp|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte\-|longcos|pantech|gionee|^sie\-|portalmmm|"
|
|
. "jig\s browser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mobi|opera\*mini|320x320|240x320|176x220"
|
|
. ")/i";
|
|
|
|
if (preg_match($regex_match, strtolower((string)$_SERVER['HTTP_USER_AGENT']))) {
|
|
return TRUE;
|
|
}
|
|
|
|
if ((strpos(strtolower((string)$_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))) {
|
|
return TRUE;
|
|
}
|
|
|
|
$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'], 0, 4));
|
|
$mobile_agents = array(
|
|
'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
|
|
'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
|
|
'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
|
|
'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
|
|
'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
|
|
'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
|
|
'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
|
|
'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
|
|
'wapr','webc','winw','winw','xda ','xda-');
|
|
|
|
if (in_array($mobile_ua,$mobile_agents)) {
|
|
return TRUE;
|
|
}
|
|
|
|
if (isset($_SERVER['ALL_HTTP']) && strpos(strtolower((string)$_SERVER['ALL_HTTP']),'OperaMini') > 0) {
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
public function getBlockTemplateProcessor($content = '')
|
|
{
|
|
if (empty($content) || !is_string($content)) {
|
|
$content = '';
|
|
}
|
|
$blockFilter = $this->_loadObject(FilterProvider::class)->getBlockFilter();
|
|
return $blockFilter->filter(trim($content));
|
|
}
|
|
|
|
public function getUrl($route = '', $params = [])
|
|
{
|
|
/** @var UrlInterface $urlBuilder */
|
|
$urlBuilder = $this->_loadObject(UrlInterface::class);
|
|
return $urlBuilder->getUrl($route, $params);
|
|
}
|
|
|
|
public function isHomePage()
|
|
{
|
|
$currentUrl = $this->getUrl('', ['_current' => true]);
|
|
$urlRewrite = $this->getUrl('*/*/*', ['_current' => true, '_use_rewrite' => true]);
|
|
return $currentUrl == $urlRewrite;
|
|
}
|
|
|
|
|
|
public function clearCache()
|
|
{
|
|
/** @var TypeListInterface $cacheTypeList */
|
|
$cacheTypeList = $this->_loadObject(TypeListInterface::class);
|
|
$types = [
|
|
'config',
|
|
'layout',
|
|
'block_html',
|
|
'collections',
|
|
'reflection',
|
|
'db_ddl',
|
|
'eav',
|
|
'config_integration',
|
|
'config_integration_api',
|
|
'full_page',
|
|
'translate',
|
|
'config_webservice',
|
|
];
|
|
foreach ($types as $type) {
|
|
$cacheTypeList->cleanType($type);
|
|
}
|
|
/** @var Pool $CacheFrontendPool */
|
|
$CacheFrontendPool = $this->_loadObject(Pool::class);
|
|
foreach ($CacheFrontendPool as $cacheFrontend) {
|
|
$cacheFrontend->getBackend()->clean();
|
|
}
|
|
}
|
|
|
|
public function getLogger()
|
|
{
|
|
return $this->logger;
|
|
}
|
|
|
|
public function log($level, $plugin, $message, array $context = [])
|
|
{
|
|
$message = sprintf('%s: %s', $plugin, trim($message));
|
|
$this->getLogger()->log($level, $message, $context);
|
|
// $this->getLogger()->debug($message, $context);
|
|
}
|
|
|
|
public function debug($plugin, $message, array $context = [])
|
|
{
|
|
$this->log(100, $plugin, $message, $context);
|
|
}
|
|
}
|