File: /var/www/vhost/disk-apps/magento.bikenow.co/vendor/magento/module-gift-message/Helper/Message.php
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\GiftMessage\Helper;
use Magento\Catalog\Model\Product\Attribute\Source\Boolean;
/**
* Gift Message helper
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class Message extends \Magento\Framework\App\Helper\AbstractHelper
{
/**
* Gift messages allow section in configuration
*
*/
const XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS = 'sales/gift_options/allow_items';
const XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ORDER = 'sales/gift_options/allow_order';
/**
* Next id for edit gift message block
*
* @var int
*/
protected $_nextId = 0;
/**
* Inner cache
*
* @var array
*/
protected $_innerCache = [];
/**
* @var \Magento\Catalog\Api\ProductRepositoryInterface
*/
protected $productRepository;
/**
* @var \Magento\Framework\View\LayoutFactory
*/
protected $_layoutFactory;
/**
* @var \Magento\GiftMessage\Model\MessageFactory
*/
protected $_giftMessageFactory;
/**
* @var \Magento\Framework\Escaper
*/
protected $_escaper;
/**
* Pages to skip message checks
*
* @var array
*/
protected $skipMessageCheck = [];
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
private $_storeManager;
/**
* @param \Magento\Framework\App\Helper\Context $context
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
* @param \Magento\Framework\View\LayoutFactory $layoutFactory
* @param \Magento\GiftMessage\Model\MessageFactory $giftMessageFactory
* @param \Magento\Framework\Escaper $escaper
* @param array $skipMessageCheck
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
*/
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
\Magento\Framework\View\LayoutFactory $layoutFactory,
\Magento\GiftMessage\Model\MessageFactory $giftMessageFactory,
\Magento\Framework\Escaper $escaper,
$skipMessageCheck = []
) {
$this->_escaper = $escaper;
$this->productRepository = $productRepository;
$this->_layoutFactory = $layoutFactory;
$this->_giftMessageFactory = $giftMessageFactory;
$this->skipMessageCheck = $skipMessageCheck;
$this->_storeManager = $storeManager;
parent::__construct(
$context
);
}
/**
* Retrieve inline giftmessage edit form for specified entity
*
* @param string $type
* @param \Magento\Framework\DataObject $entity
* @param bool $dontDisplayContainer
* @return string
*/
public function getInline($type, \Magento\Framework\DataObject $entity, $dontDisplayContainer = false)
{
if (!$this->skipPage($type) && !$this->isMessagesAllowed($type, $entity)) {
return '';
}
return $this->_layoutFactory->create()->createBlock(\Magento\GiftMessage\Block\Message\Inline::class)
->setId('giftmessage_form_' . $this->_nextId++)
->setDontDisplayContainer($dontDisplayContainer)
->setEntity($entity)
->setCheckoutType($type)->toHtml();
}
/**
* Skip page by page type
*
* @param string $pageType
* @return bool
*/
protected function skipPage($pageType)
{
return in_array($pageType, $this->skipMessageCheck);
}
/**
* Check if giftmessages is allowed for specified entity.
*
* @param string $type
* @param \Magento\Framework\DataObject $entity
* @param \Magento\Store\Model\Store|int|null $store
* @return bool|string|null
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function isMessagesAllowed($type, \Magento\Framework\DataObject $entity, $store = null)
{
if ($type == 'items') {
$items = $entity->getAllItems();
if (!is_array($items) || empty($items)) {
return $this->scopeConfig->getValue(
self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$store
);
}
if ($entity instanceof \Magento\Quote\Model\Quote) {
$_type = $entity->getIsMultiShipping() ? 'address_item' : 'item';
} else {
$_type = 'order_item';
}
foreach ($items as $item) {
if ($item->getParentItem()) {
continue;
}
if ($this->isMessagesAllowed($_type, $item, $store)) {
return true;
}
}
} elseif ($type == 'item') {
return $this->_getDependenceFromStoreConfig($entity->getProduct()->getGiftMessageAvailable(), $store);
} elseif ($type == 'order_item') {
return $this->_getDependenceFromStoreConfig($entity->getGiftMessageAvailable(), $store);
} elseif ($type == 'address_item') {
$storeId = is_numeric($store) ? $store : $this->_storeManager->getStore($store)->getId();
if (!$this->isCached('address_item_' . $entity->getProductId())) {
try {
$giftMessageAvailable = $this->productRepository->getById($entity->getProductId(), false, $storeId)
->getGiftMessageAvailable();
} catch (\Magento\Framework\Exception\NoSuchEntityException $noEntityException) {
$giftMessageAvailable = null;
}
$this->setCached('address_item_' . $entity->getProductId(), $giftMessageAvailable);
}
return $this->_getDependenceFromStoreConfig(
$this->getCached('address_item_' . $entity->getProductId()),
$store
);
} else {
return $this->scopeConfig->getValue(
self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ORDER,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$store
);
}
return false;
}
/**
* Check availability of gift messages from store config if flag eq 2.
*
* @param bool $productConfig
* @param \Magento\Store\Model\Store|int|null $store
* @return bool|string|null
*/
protected function _getDependenceFromStoreConfig($productConfig, $store = null)
{
$result = $this->scopeConfig->getValue(
self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS,
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$store
);
if ($productConfig === null || '' === $productConfig || $productConfig == Boolean::VALUE_USE_CONFIG) {
return $result;
} else {
return $productConfig;
}
}
/**
* Retrieve escaped and preformated gift message text for specified entity
*
* @param \Magento\Framework\DataObject $entity
* @return string|null
*/
public function getEscapedGiftMessage(\Magento\Framework\DataObject $entity)
{
$message = $this->getGiftMessageForEntity($entity);
if ($message) {
return nl2br($this->_escaper->escapeHtml($message->getMessage()));
}
return null;
}
/**
* Retrieve gift message for entity. If message not exists return null
*
* @param \Magento\Framework\DataObject $entity
* @return \Magento\GiftMessage\Model\Message
*/
public function getGiftMessageForEntity(\Magento\Framework\DataObject $entity)
{
if ($entity->getGiftMessageId() && !$entity->getGiftMessage()) {
$message = $this->getGiftMessage($entity->getGiftMessageId());
$entity->setGiftMessage($message);
}
return $entity->getGiftMessage();
}
/**
* Retrieve internal cached data with specified key.
*
* If cached data not found return null.
*
* @param string $key
* @return mixed
*/
public function getCached($key)
{
if ($this->isCached($key)) {
return $this->_innerCache[$key];
}
return null;
}
/**
* Check availability for internal cached data with specified key
*
* @param string $key
* @return bool
*/
public function isCached($key)
{
return isset($this->_innerCache[$key]);
}
/**
* Set internal cache data with specified key
*
* @param string $key
* @param mixed $value
* @return $this
*/
public function setCached($key, $value)
{
$this->_innerCache[$key] = $value;
return $this;
}
/**
* Check availability for onepage checkout items
*
* @param array $quote
* @param \Magento\Store\Model\Store|int|null $store
* @return bool
* @SuppressWarnings(PHPMD.BooleanGetMethodName)
*/
public function getAvailableForQuoteItems($quote, $store = null)
{
foreach ($quote->getAllItems() as $item) {
if ($this->isMessagesAllowed('item', $item, $store)) {
return true;
}
}
return false;
}
/**
* Check availability for multishipping checkout items
*
* @param array $items
* @param \Magento\Store\Model\Store|int|null $store
* @return bool
* @SuppressWarnings(PHPMD.BooleanGetMethodName)
*/
public function getAvailableForAddressItems($items, $store = null)
{
foreach ($items as $item) {
if ($this->isMessagesAllowed('address_item', $item, $store)) {
return true;
}
}
return false;
}
/**
* Retrieve gift message with specified id
*
* @param int $messageId
* @return \Magento\GiftMessage\Model\Message
*/
public function getGiftMessage($messageId = null)
{
$message = $this->_giftMessageFactory->create();
if ($messageId !== null) {
$message->load($messageId);
}
return $message;
}
}