DataProvider.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Cms\Ui\Component;
  7. use Magento\Framework\Api\Filter;
  8. use Magento\Framework\Api\FilterBuilder;
  9. use Magento\Framework\Api\Search\SearchCriteriaBuilder;
  10. use Magento\Framework\App\ObjectManager;
  11. use Magento\Framework\App\RequestInterface;
  12. use Magento\Framework\AuthorizationInterface;
  13. use Magento\Framework\View\Element\UiComponent\DataProvider\Reporting;
  14. /**
  15. * DataProvider for cms ui.
  16. */
  17. class DataProvider extends \Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider
  18. {
  19. /**
  20. * @var AuthorizationInterface
  21. */
  22. private $authorization;
  23. /**
  24. * @var AddFilterInterface[]
  25. */
  26. private $additionalFilterPool;
  27. /**
  28. * @param string $name
  29. * @param string $primaryFieldName
  30. * @param string $requestFieldName
  31. * @param Reporting $reporting
  32. * @param SearchCriteriaBuilder $searchCriteriaBuilder
  33. * @param RequestInterface $request
  34. * @param FilterBuilder $filterBuilder
  35. * @param array $meta
  36. * @param array $data
  37. * @param array $additionalFilterPool
  38. * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  39. */
  40. public function __construct(
  41. $name,
  42. $primaryFieldName,
  43. $requestFieldName,
  44. Reporting $reporting,
  45. SearchCriteriaBuilder $searchCriteriaBuilder,
  46. RequestInterface $request,
  47. FilterBuilder $filterBuilder,
  48. array $meta = [],
  49. array $data = [],
  50. array $additionalFilterPool = []
  51. ) {
  52. parent::__construct(
  53. $name,
  54. $primaryFieldName,
  55. $requestFieldName,
  56. $reporting,
  57. $searchCriteriaBuilder,
  58. $request,
  59. $filterBuilder,
  60. $meta,
  61. $data
  62. );
  63. $this->meta = array_replace_recursive($meta, $this->prepareMetadata());
  64. $this->additionalFilterPool = $additionalFilterPool;
  65. }
  66. /**
  67. * Get authorization info.
  68. *
  69. * @deprecated 101.0.7
  70. * @return AuthorizationInterface|mixed
  71. */
  72. private function getAuthorizationInstance()
  73. {
  74. if ($this->authorization === null) {
  75. $this->authorization = ObjectManager::getInstance()->get(AuthorizationInterface::class);
  76. }
  77. return $this->authorization;
  78. }
  79. /**
  80. * Prepares Meta
  81. *
  82. * @return array
  83. */
  84. public function prepareMetadata()
  85. {
  86. $metadata = [];
  87. if (!$this->getAuthorizationInstance()->isAllowed('Magento_Cms::save')) {
  88. $metadata = [
  89. 'cms_page_columns' => [
  90. 'arguments' => [
  91. 'data' => [
  92. 'config' => [
  93. 'editorConfig' => [
  94. 'enabled' => false
  95. ],
  96. 'componentType' => \Magento\Ui\Component\Container::NAME
  97. ]
  98. ]
  99. ]
  100. ]
  101. ];
  102. }
  103. return $metadata;
  104. }
  105. /**
  106. * @inheritdoc
  107. */
  108. public function addFilter(Filter $filter)
  109. {
  110. if (!empty($this->additionalFilterPool[$filter->getField()])) {
  111. $this->additionalFilterPool[$filter->getField()]->addFilter($this->searchCriteriaBuilder, $filter);
  112. } else {
  113. parent::addFilter($filter);
  114. }
  115. }
  116. }