DeleteButton.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Backend\Ui\Component\Control;
  8. use Magento\Framework\App\RequestInterface;
  9. use Magento\Framework\Escaper;
  10. use Magento\Framework\UrlInterface;
  11. use Magento\Framework\View\Element\UiComponent\Control\ButtonProviderInterface;
  12. /**
  13. * Represents delete button with pre-configured options
  14. * Provide an ability to show confirmation message on click on the "Delete" button
  15. *
  16. * @api
  17. * @since 101.0.0
  18. */
  19. class DeleteButton implements ButtonProviderInterface
  20. {
  21. /**
  22. * @var RequestInterface
  23. */
  24. private $request;
  25. /**
  26. * @var UrlInterface
  27. */
  28. private $urlBuilder;
  29. /**
  30. * @var Escaper
  31. */
  32. private $escaper;
  33. /**
  34. * @var string
  35. */
  36. private $confirmationMessage;
  37. /**
  38. * @var string
  39. */
  40. private $idFieldName;
  41. /**
  42. * @var string
  43. */
  44. private $deleteRoutePath;
  45. /**
  46. * @var int
  47. */
  48. private $sortOrder;
  49. /**
  50. * @param RequestInterface $request
  51. * @param UrlInterface $urlBuilder
  52. * @param Escaper $escaper
  53. * @param string $confirmationMessage
  54. * @param string $idFieldName
  55. * @param string $deleteRoutePath
  56. * @param int $sortOrder
  57. */
  58. public function __construct(
  59. RequestInterface $request,
  60. UrlInterface $urlBuilder,
  61. Escaper $escaper,
  62. string $confirmationMessage,
  63. string $idFieldName,
  64. string $deleteRoutePath,
  65. int $sortOrder
  66. ) {
  67. $this->request = $request;
  68. $this->urlBuilder = $urlBuilder;
  69. $this->escaper = $escaper;
  70. $this->confirmationMessage = $confirmationMessage;
  71. $this->idFieldName = $idFieldName;
  72. $this->deleteRoutePath = $deleteRoutePath;
  73. $this->sortOrder = $sortOrder;
  74. }
  75. /**
  76. * {@inheritdoc}
  77. * @since 101.0.0
  78. */
  79. public function getButtonData()
  80. {
  81. $data = [];
  82. $fieldId = $this->escaper->escapeJs($this->escaper->escapeHtml($this->request->getParam($this->idFieldName)));
  83. if (null !== $fieldId) {
  84. $url = $this->urlBuilder->getUrl($this->deleteRoutePath);
  85. $escapedMessage = $this->escaper->escapeJs($this->escaper->escapeHtml($this->confirmationMessage));
  86. $data = [
  87. 'label' => __('Delete'),
  88. 'class' => 'delete',
  89. 'on_click' => "deleteConfirm('{$escapedMessage}', '{$url}', {data:{{$this->idFieldName}:{$fieldId}}})",
  90. 'sort_order' => $this->sortOrder,
  91. ];
  92. }
  93. return $data;
  94. }
  95. }