Checkbox.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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 checkbox column renderer
  9. *
  10. * @api
  11. * @deprecated 100.2.0 in favour of UI component implementation
  12. * @since 100.0.2
  13. */
  14. class Checkbox extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
  15. {
  16. /**
  17. * @var int
  18. */
  19. protected $_defaultWidth = 55;
  20. /**
  21. * @var array
  22. */
  23. protected $_values;
  24. /**
  25. * @var \Magento\Backend\Block\Widget\Grid\Column\Renderer\Options\Converter
  26. */
  27. protected $_converter;
  28. /**
  29. * @param \Magento\Backend\Block\Context $context
  30. * @param \Magento\Backend\Block\Widget\Grid\Column\Renderer\Options\Converter $converter
  31. * @param array $data
  32. */
  33. public function __construct(
  34. \Magento\Backend\Block\Context $context,
  35. \Magento\Backend\Block\Widget\Grid\Column\Renderer\Options\Converter $converter,
  36. array $data = []
  37. ) {
  38. parent::__construct($context, $data);
  39. $this->_converter = $converter;
  40. }
  41. /**
  42. * Returns values of the column
  43. *
  44. * @return array
  45. */
  46. public function getValues()
  47. {
  48. if ($this->_values === null) {
  49. $this->_values = $this->getColumn()->getData('values') ? $this->getColumn()->getData('values') : [];
  50. }
  51. return $this->_values;
  52. }
  53. /**
  54. * Prepare data for renderer
  55. *
  56. * @return array
  57. */
  58. protected function _getValues()
  59. {
  60. $values = $this->getColumn()->getValues();
  61. return $this->_converter->toFlatArray($values);
  62. }
  63. /**
  64. * Renders grid column
  65. *
  66. * @param \Magento\Framework\DataObject $row
  67. * @return string
  68. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  69. * @SuppressWarnings(PHPMD.NPathComplexity)
  70. */
  71. public function render(\Magento\Framework\DataObject $row)
  72. {
  73. $values = $this->_getValues();
  74. $value = $row->getData($this->getColumn()->getIndex());
  75. $checked = '';
  76. if (is_array($values)) {
  77. $checked = in_array($value, $values) ? ' checked="checked"' : '';
  78. } else {
  79. $checkedValue = $this->getColumn()->getValue();
  80. if ($checkedValue !== null) {
  81. $checked = $value === $checkedValue ? ' checked="checked"' : '';
  82. }
  83. }
  84. $disabled = '';
  85. $disabledValues = $this->getColumn()->getDisabledValues();
  86. if (is_array($disabledValues)) {
  87. $disabled = in_array($value, $disabledValues) ? ' disabled="disabled"' : '';
  88. } else {
  89. $disabledValue = $this->getColumn()->getDisabledValue();
  90. if ($disabledValue !== null) {
  91. $disabled = $value === $disabledValue ? ' disabled="disabled"' : '';
  92. }
  93. }
  94. $this->setDisabled($disabled);
  95. if ($this->getNoObjectId() || $this->getColumn()->getUseIndex()) {
  96. $v = $value;
  97. } else {
  98. $v = $row->getId() != "" ? $row->getId() : $value;
  99. }
  100. return $this->_getCheckboxHtml($v, $checked);
  101. }
  102. /**
  103. * @param string $value Value of the element
  104. * @param bool $checked Whether it is checked
  105. * @return string
  106. */
  107. protected function _getCheckboxHtml($value, $checked)
  108. {
  109. $html = '<label class="data-grid-checkbox-cell-inner" ';
  110. $html .= ' for="id_' . $this->escapeHtml($value) . '">';
  111. $html .= '<input type="checkbox" ';
  112. $html .= 'name="' . $this->getColumn()->getFieldName() . '" ';
  113. $html .= 'value="' . $this->escapeHtml($value) . '" ';
  114. $html .= 'id="id_' . $this->escapeHtml($value) . '" ';
  115. $html .= 'class="' .
  116. ($this->getColumn()->getInlineCss() ? $this->getColumn()->getInlineCss() : 'checkbox') .
  117. ' admin__control-checkbox' . '"';
  118. $html .= $checked . $this->getDisabled() . '/>';
  119. $html .= '<label for="id_' . $this->escapeHtml($value) . '"></label>';
  120. $html .= '</label>';
  121. /* ToDo UI: add class="admin__field-label" after some refactoring _fields.less */
  122. return $html;
  123. }
  124. /**
  125. * Renders header of the column
  126. *
  127. * @return string
  128. */
  129. public function renderHeader()
  130. {
  131. if ($this->getColumn()->getHeader()) {
  132. return parent::renderHeader();
  133. }
  134. $checked = '';
  135. if ($filter = $this->getColumn()->getFilter()) {
  136. $checked = $filter->getValue() ? ' checked="checked"' : '';
  137. }
  138. $disabled = '';
  139. if ($this->getColumn()->getDisabled()) {
  140. $disabled = ' disabled="disabled"';
  141. }
  142. $html = '<th class="data-grid-th data-grid-actions-cell"><input type="checkbox" ';
  143. $html .= 'name="' . $this->getColumn()->getFieldName() . '" ';
  144. $html .= 'onclick="' . $this->getColumn()->getGrid()->getJsObjectName() . '.checkCheckboxes(this)" ';
  145. $html .= 'class="admin__control-checkbox"' . $checked . $disabled . ' ';
  146. $html .= 'title="' . __('Select All') . '"/><label></label></th>';
  147. return $html;
  148. }
  149. }