Grid.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\AdvancedSearch\Block\Adminhtml\Search;
  7. /**
  8. * Search query relations edit grid
  9. *
  10. * @api
  11. * @author Magento Core Team <core@magentocommerce.com>
  12. * @since 100.0.2
  13. */
  14. class Grid extends \Magento\Backend\Block\Widget\Grid
  15. {
  16. /**
  17. * @var \Magento\AdvancedSearch\Model\Adminhtml\Search\Grid\Options
  18. */
  19. protected $_options;
  20. /**
  21. * @var \Magento\Framework\Registry
  22. */
  23. protected $_registryManager;
  24. /**
  25. * @var \Magento\Framework\Json\Helper\Data
  26. */
  27. protected $jsonHelper;
  28. /**
  29. * @param \Magento\Backend\Block\Template\Context $context
  30. * @param \Magento\Backend\Helper\Data $backendHelper
  31. * @param \Magento\AdvancedSearch\Model\Adminhtml\Search\Grid\Options $options
  32. * @param \Magento\Framework\Registry $registry
  33. * @param \Magento\Framework\Json\Helper\Data $jsonHelper
  34. * @param array $data
  35. */
  36. public function __construct(
  37. \Magento\Backend\Block\Template\Context $context,
  38. \Magento\Backend\Helper\Data $backendHelper,
  39. \Magento\AdvancedSearch\Model\Adminhtml\Search\Grid\Options $options,
  40. \Magento\Framework\Registry $registry,
  41. \Magento\Framework\Json\Helper\Data $jsonHelper,
  42. array $data = []
  43. ) {
  44. $this->jsonHelper = $jsonHelper;
  45. parent::__construct($context, $backendHelper, $data);
  46. $this->_options = $options;
  47. $this->_registryManager = $registry;
  48. $this->setDefaultFilter(['query_id_selected' => 1]);
  49. }
  50. /**
  51. * Retrieve a value from registry by a key
  52. *
  53. * @return mixed
  54. */
  55. public function getQuery()
  56. {
  57. return $this->_registryManager->registry('current_catalog_search');
  58. }
  59. /**
  60. * Add column filter to collection
  61. *
  62. * @param \Magento\Backend\Block\Widget\Grid\Column $column
  63. * @return $this
  64. */
  65. protected function _addColumnFilterToCollection($column)
  66. {
  67. // Set custom filter for query selected flag
  68. if ($column->getId() == 'query_id_selected' && $this->getQuery()->getId()) {
  69. $selectedIds = $this->getSelectedQueries();
  70. if (empty($selectedIds)) {
  71. $selectedIds = 0;
  72. }
  73. if ($column->getFilter()->getValue()) {
  74. $this->getCollection()->addFieldToFilter('query_id', ['in' => $selectedIds]);
  75. } elseif (!empty($selectedIds)) {
  76. $this->getCollection()->addFieldToFilter('query_id', ['nin' => $selectedIds]);
  77. }
  78. } else {
  79. parent::_addColumnFilterToCollection($column);
  80. }
  81. return $this;
  82. }
  83. /**
  84. * Retrieve selected related queries from grid
  85. *
  86. * @return array
  87. */
  88. public function getSelectedQueries()
  89. {
  90. return $this->_options->toOptionArray();
  91. }
  92. /**
  93. * Get queries json
  94. *
  95. * @return string
  96. */
  97. public function getQueriesJson()
  98. {
  99. $queries = array_flip($this->getSelectedQueries());
  100. if (!empty($queries)) {
  101. return $this->jsonHelper->jsonEncode($queries);
  102. }
  103. return '{}';
  104. }
  105. }