Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Message.php
Go to the documentation of this file.
1 <?php
8 
10 
16 {
21  const XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS = 'sales/gift_options/allow_items';
22 
23  const XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ORDER = 'sales/gift_options/allow_order';
24 
30  protected $_nextId = 0;
31 
37  protected $_innerCache = [];
38 
42  protected $productRepository;
43 
47  protected $_layoutFactory;
48 
53 
57  protected $_escaper;
58 
64  protected $skipMessageCheck = [];
65 
69  private $_storeManager;
70 
81  public function __construct(
82  \Magento\Framework\App\Helper\Context $context,
83  \Magento\Store\Model\StoreManagerInterface $storeManager,
84  \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
85  \Magento\Framework\View\LayoutFactory $layoutFactory,
86  \Magento\GiftMessage\Model\MessageFactory $giftMessageFactory,
87  \Magento\Framework\Escaper $escaper,
89  ) {
90  $this->_escaper = $escaper;
91  $this->productRepository = $productRepository;
92  $this->_layoutFactory = $layoutFactory;
93  $this->_giftMessageFactory = $giftMessageFactory;
94  $this->skipMessageCheck = $skipMessageCheck;
95  $this->_storeManager = $storeManager;
96 
97  parent::__construct(
98  $context
99  );
100  }
101 
110  public function getInline($type, \Magento\Framework\DataObject $entity, $dontDisplayContainer = false)
111  {
112  if (!$this->skipPage($type) && !$this->isMessagesAllowed($type, $entity)) {
113  return '';
114  }
115  return $this->_layoutFactory->create()->createBlock(\Magento\GiftMessage\Block\Message\Inline::class)
116  ->setId('giftmessage_form_' . $this->_nextId++)
117  ->setDontDisplayContainer($dontDisplayContainer)
118  ->setEntity($entity)
119  ->setCheckoutType($type)->toHtml();
120  }
121 
126  protected function skipPage($pageType)
127  {
128  return in_array($pageType, $this->skipMessageCheck);
129  }
130 
140  public function isMessagesAllowed($type, \Magento\Framework\DataObject $entity, $store = null)
141  {
142  if ($type == 'items') {
143  $items = $entity->getAllItems();
144  if (!is_array($items) || empty($items)) {
145  return $this->scopeConfig->getValue(
146  self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS,
147  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
148  $store
149  );
150  }
151  if ($entity instanceof \Magento\Quote\Model\Quote) {
152  $_type = $entity->getIsMultiShipping() ? 'address_item' : 'item';
153  } else {
154  $_type = 'order_item';
155  }
156  foreach ($items as $item) {
157  if ($item->getParentItem()) {
158  continue;
159  }
160  if ($this->isMessagesAllowed($_type, $item, $store)) {
161  return true;
162  }
163  }
164  } elseif ($type == 'item') {
165  return $this->_getDependenceFromStoreConfig($entity->getProduct()->getGiftMessageAvailable(), $store);
166  } elseif ($type == 'order_item') {
167  return $this->_getDependenceFromStoreConfig($entity->getGiftMessageAvailable(), $store);
168  } elseif ($type == 'address_item') {
169  $storeId = is_numeric($store) ? $store : $this->_storeManager->getStore($store)->getId();
170  if (!$this->isCached('address_item_' . $entity->getProductId())) {
171  try {
172  $giftMessageAvailable = $this->productRepository->getById($entity->getProductId(), false, $storeId)
173  ->getGiftMessageAvailable();
174  } catch (\Magento\Framework\Exception\NoSuchEntityException $noEntityException) {
175  $giftMessageAvailable = null;
176  }
177  $this->setCached('address_item_' . $entity->getProductId(), $giftMessageAvailable);
178  }
179  return $this->_getDependenceFromStoreConfig(
180  $this->getCached('address_item_' . $entity->getProductId()),
181  $store
182  );
183  } else {
184  return $this->scopeConfig->getValue(
185  self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ORDER,
186  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
187  $store
188  );
189  }
190  return false;
191  }
192 
200  protected function _getDependenceFromStoreConfig($productConfig, $store = null)
201  {
202  $result = $this->scopeConfig->getValue(
203  self::XPATH_CONFIG_GIFT_MESSAGE_ALLOW_ITEMS,
204  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
205  $store
206  );
207  if ($productConfig === null || '' === $productConfig || $productConfig == Boolean::VALUE_USE_CONFIG) {
208  return $result;
209  } else {
210  return $productConfig;
211  }
212  }
213 
220  public function getEscapedGiftMessage(\Magento\Framework\DataObject $entity)
221  {
222  $message = $this->getGiftMessageForEntity($entity);
223  if ($message) {
224  return nl2br($this->_escaper->escapeHtml($message->getMessage()));
225  }
226  return null;
227  }
228 
235  public function getGiftMessageForEntity(\Magento\Framework\DataObject $entity)
236  {
237  if ($entity->getGiftMessageId() && !$entity->getGiftMessage()) {
238  $message = $this->getGiftMessage($entity->getGiftMessageId());
239  $entity->setGiftMessage($message);
240  }
241  return $entity->getGiftMessage();
242  }
243 
252  public function getCached($key)
253  {
254  if ($this->isCached($key)) {
255  return $this->_innerCache[$key];
256  }
257  return null;
258  }
259 
266  public function isCached($key)
267  {
268  return isset($this->_innerCache[$key]);
269  }
270 
278  public function setCached($key, $value)
279  {
280  $this->_innerCache[$key] = $value;
281  return $this;
282  }
283 
292  public function getAvailableForQuoteItems($quote, $store = null)
293  {
294  foreach ($quote->getAllItems() as $item) {
295  if ($this->isMessagesAllowed('item', $item, $store)) {
296  return true;
297  }
298  }
299  return false;
300  }
301 
310  public function getAvailableForAddressItems($items, $store = null)
311  {
312  foreach ($items as $item) {
313  if ($this->isMessagesAllowed('address_item', $item, $store)) {
314  return true;
315  }
316  }
317  return false;
318  }
319 
326  public function getGiftMessage($messageId = null)
327  {
328  $message = $this->_giftMessageFactory->create();
329  if ($messageId !== null) {
330  $message->load($messageId);
331  }
332  return $message;
333  }
334 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
getEscapedGiftMessage(\Magento\Framework\DataObject $entity)
Definition: Message.php:220
$quote
$storeManager
$message
getGiftMessage($messageId=null)
Definition: Message.php:326
$type
Definition: item.phtml:13
isMessagesAllowed($type, \Magento\Framework\DataObject $entity, $store=null)
Definition: Message.php:140
$value
Definition: gender.phtml:16
_getDependenceFromStoreConfig($productConfig, $store=null)
Definition: Message.php:200
$entity
Definition: element.phtml:22
__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=[])
Definition: Message.php:81
getInline($type, \Magento\Framework\DataObject $entity, $dontDisplayContainer=false)
Definition: Message.php:110
getGiftMessageForEntity(\Magento\Framework\DataObject $entity)
Definition: Message.php:235
getAvailableForQuoteItems($quote, $store=null)
Definition: Message.php:292
getAvailableForAddressItems($items, $store=null)
Definition: Message.php:310
$items