PageRenderTime 25ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 1ms

/vendor/magento/module-backend/Block/Widget/Grid/Column/Renderer/Action.php

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