Action.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Block\Widget\Grid\Column\Renderer;
  7. /**
  8. * Grid column widget for rendering action grid cells
  9. *
  10. * @api
  11. * @deprecated 100.2.0 in favour of UI component implementation
  12. * @since 100.0.2
  13. */
  14. class Action extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\Text
  15. {
  16. /**
  17. * @var \Magento\Framework\Json\EncoderInterface
  18. */
  19. protected $_jsonEncoder;
  20. /**
  21. * @param \Magento\Backend\Block\Context $context
  22. * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
  23. * @param array $data
  24. */
  25. public function __construct(
  26. \Magento\Backend\Block\Context $context,
  27. \Magento\Framework\Json\EncoderInterface $jsonEncoder,
  28. array $data = []
  29. ) {
  30. $this->_jsonEncoder = $jsonEncoder;
  31. parent::__construct($context, $data);
  32. }
  33. /**
  34. * Renders column
  35. *
  36. * @param \Magento\Framework\DataObject $row
  37. * @return string
  38. */
  39. public function render(\Magento\Framework\DataObject $row)
  40. {
  41. $actions = $this->getColumn()->getActions();
  42. if (empty($actions) || !is_array($actions)) {
  43. return '&nbsp;';
  44. }
  45. if (sizeof($actions) == 1 && !$this->getColumn()->getNoLink()) {
  46. foreach ($actions as $action) {
  47. if (is_array($action)) {
  48. return $this->_toLinkHtml($action, $row);
  49. }
  50. }
  51. }
  52. $out = '<select class="admin__control-select" onchange="varienGridAction.execute(this);">' .
  53. '<option value=""></option>';
  54. $i = 0;
  55. foreach ($actions as $action) {
  56. $i++;
  57. if (is_array($action)) {
  58. $out .= $this->_toOptionHtml($action, $row);
  59. }
  60. }
  61. $out .= '</select>';
  62. return $out;
  63. }
  64. /**
  65. * Render single action as dropdown option html
  66. *
  67. * @param array $action
  68. * @param \Magento\Framework\DataObject $row
  69. * @return string
  70. */
  71. protected function _toOptionHtml($action, \Magento\Framework\DataObject $row)
  72. {
  73. $actionAttributes = new \Magento\Framework\DataObject();
  74. $actionCaption = '';
  75. $this->_transformActionData($action, $actionCaption, $row);
  76. $htmlAttributes = [
  77. 'value' => $this->escapeHtmlAttr($this->_jsonEncoder->encode($action), false)
  78. ];
  79. $actionAttributes->setData($htmlAttributes);
  80. return '<option ' . $actionAttributes->serialize() . '>' . $actionCaption . '</option>';
  81. }
  82. /**
  83. * Render single action as link html
  84. *
  85. * @param array $action
  86. * @param \Magento\Framework\DataObject $row
  87. * @return string
  88. */
  89. protected function _toLinkHtml($action, \Magento\Framework\DataObject $row)
  90. {
  91. $actionAttributes = new \Magento\Framework\DataObject();
  92. $actionCaption = '';
  93. $this->_transformActionData($action, $actionCaption, $row);
  94. if (isset($action['confirm'])) {
  95. $action['onclick'] = 'return window.confirm(\'' . addslashes(
  96. $this->escapeHtml($action['confirm'])
  97. ) . '\')';
  98. unset($action['confirm']);
  99. }
  100. $actionAttributes->setData($action);
  101. return '<a ' . $actionAttributes->serialize() . '>' . $actionCaption . '</a>';
  102. }
  103. /**
  104. * Prepares action data for html render
  105. *
  106. * @param array &$action
  107. * @param string &$actionCaption
  108. * @param \Magento\Framework\DataObject $row
  109. * @return $this
  110. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  111. * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  112. */
  113. protected function _transformActionData(&$action, &$actionCaption, \Magento\Framework\DataObject $row)
  114. {
  115. foreach ($action as $attribute => $value) {
  116. if (isset($action[$attribute]) && !is_array($action[$attribute])) {
  117. $this->getColumn()->setFormat($action[$attribute]);
  118. $action[$attribute] = parent::render($row);
  119. } else {
  120. $this->getColumn()->setFormat(null);
  121. }
  122. switch ($attribute) {
  123. case 'caption':
  124. $actionCaption = $action['caption'];
  125. unset($action['caption']);
  126. break;
  127. case 'url':
  128. if (is_array($action['url']) && isset($action['field'])) {
  129. $params = [$action['field'] => $this->_getValue($row)];
  130. if (isset($action['url']['params'])) {
  131. $params = array_merge($action['url']['params'], $params);
  132. }
  133. $action['href'] = $this->getUrl($action['url']['base'], $params);
  134. unset($action['field']);
  135. } else {
  136. $action['href'] = $action['url'];
  137. }
  138. unset($action['url']);
  139. break;
  140. case 'popup':
  141. $action['onclick'] = 'popWin(this.href,\'_blank\',\'width=800,height=700,resizable=1,'
  142. . 'scrollbars=1\');return false;';
  143. break;
  144. }
  145. }
  146. return $this;
  147. }
  148. }