Form.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. /**
  7. * Adminhtml Review Edit Form
  8. */
  9. namespace Magento\Review\Block\Adminhtml\Edit;
  10. class Form extends \Magento\Backend\Block\Widget\Form\Generic
  11. {
  12. /**
  13. * Review data
  14. *
  15. * @var \Magento\Review\Helper\Data
  16. */
  17. protected $_reviewData = null;
  18. /**
  19. * @var \Magento\Customer\Api\CustomerRepositoryInterface
  20. */
  21. protected $customerRepository;
  22. /**
  23. * Catalog product factory
  24. *
  25. * @var \Magento\Catalog\Model\ProductFactory
  26. */
  27. protected $_productFactory;
  28. /**
  29. * Core system store model
  30. *
  31. * @var \Magento\Store\Model\System\Store
  32. */
  33. protected $_systemStore;
  34. /**
  35. * @param \Magento\Backend\Block\Template\Context $context
  36. * @param \Magento\Framework\Registry $registry
  37. * @param \Magento\Framework\Data\FormFactory $formFactory
  38. * @param \Magento\Store\Model\System\Store $systemStore
  39. * @param \Magento\Customer\APi\CustomerRepositoryInterface $customerRepository
  40. * @param \Magento\Catalog\Model\ProductFactory $productFactory
  41. * @param \Magento\Review\Helper\Data $reviewData
  42. * @param array $data
  43. */
  44. public function __construct(
  45. \Magento\Backend\Block\Template\Context $context,
  46. \Magento\Framework\Registry $registry,
  47. \Magento\Framework\Data\FormFactory $formFactory,
  48. \Magento\Store\Model\System\Store $systemStore,
  49. \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
  50. \Magento\Catalog\Model\ProductFactory $productFactory,
  51. \Magento\Review\Helper\Data $reviewData,
  52. array $data = []
  53. ) {
  54. $this->_reviewData = $reviewData;
  55. $this->customerRepository = $customerRepository;
  56. $this->_productFactory = $productFactory;
  57. $this->_systemStore = $systemStore;
  58. parent::__construct($context, $registry, $formFactory, $data);
  59. }
  60. /**
  61. * Prepare edit review form
  62. *
  63. * @return $this
  64. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  65. */
  66. protected function _prepareForm()
  67. {
  68. $review = $this->_coreRegistry->registry('review_data');
  69. $product = $this->_productFactory->create()->load($review->getEntityPkValue());
  70. /** @var \Magento\Framework\Data\Form $form */
  71. $form = $this->_formFactory->create(
  72. [
  73. 'data' => [
  74. 'id' => 'edit_form',
  75. 'action' => $this->getUrl(
  76. 'review/*/save',
  77. [
  78. 'id' => $this->getRequest()->getParam('id'),
  79. 'ret' => $this->_coreRegistry->registry('ret')
  80. ]
  81. ),
  82. 'method' => 'post',
  83. ],
  84. ]
  85. );
  86. $fieldset = $form->addFieldset(
  87. 'review_details',
  88. ['legend' => __('Review Details'), 'class' => 'fieldset-wide']
  89. );
  90. $fieldset->addField(
  91. 'product_name',
  92. 'note',
  93. [
  94. 'label' => __('Product'),
  95. 'text' => '<a href="' . $this->getUrl(
  96. 'catalog/product/edit',
  97. ['id' => $product->getId()]
  98. ) . '" onclick="this.target=\'blank\'">' . $this->escapeHtml(
  99. $product->getName()
  100. ) . '</a>'
  101. ]
  102. );
  103. try {
  104. $customer = $this->customerRepository->getById($review->getCustomerId());
  105. $customerText = __(
  106. '<a href="%1" onclick="this.target=\'blank\'">%2 %3</a> <a href="mailto:%4">(%4)</a>',
  107. $this->getUrl('customer/index/edit', ['id' => $customer->getId(), 'active_tab' => 'review']),
  108. $this->escapeHtml($customer->getFirstname()),
  109. $this->escapeHtml($customer->getLastname()),
  110. $this->escapeHtml($customer->getEmail())
  111. );
  112. } catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
  113. $customerText = ($review->getStoreId() == \Magento\Store\Model\Store::DEFAULT_STORE_ID)
  114. ? __('Administrator') : __('Guest');
  115. }
  116. $fieldset->addField('customer', 'note', ['label' => __('Author'), 'text' => $customerText]);
  117. $fieldset->addField(
  118. 'summary-rating',
  119. 'note',
  120. [
  121. 'label' => __('Summary Rating'),
  122. 'text' => $this->getLayout()->createBlock(
  123. \Magento\Review\Block\Adminhtml\Rating\Summary::class
  124. )->toHtml()
  125. ]
  126. );
  127. $fieldset->addField(
  128. 'detailed-rating',
  129. 'note',
  130. [
  131. 'label' => __('Detailed Rating'),
  132. 'required' => true,
  133. 'text' => '<div id="rating_detail">' . $this->getLayout()->createBlock(
  134. \Magento\Review\Block\Adminhtml\Rating\Detailed::class
  135. )->toHtml() . '</div>'
  136. ]
  137. );
  138. $fieldset->addField(
  139. 'status_id',
  140. 'select',
  141. [
  142. 'label' => __('Status'),
  143. 'required' => true,
  144. 'name' => 'status_id',
  145. 'values' => $this->_reviewData->getReviewStatusesOptionArray()
  146. ]
  147. );
  148. /**
  149. * Check is single store mode
  150. */
  151. if (!$this->_storeManager->hasSingleStore()) {
  152. $field = $fieldset->addField(
  153. 'select_stores',
  154. 'multiselect',
  155. [
  156. 'label' => __('Visibility'),
  157. 'required' => true,
  158. 'name' => 'stores[]',
  159. 'values' => $this->_systemStore->getStoreValuesForForm()
  160. ]
  161. );
  162. $renderer = $this->getLayout()->createBlock(
  163. \Magento\Backend\Block\Store\Switcher\Form\Renderer\Fieldset\Element::class
  164. );
  165. $field->setRenderer($renderer);
  166. $review->setSelectStores($review->getStores());
  167. } else {
  168. $fieldset->addField(
  169. 'select_stores',
  170. 'hidden',
  171. ['name' => 'stores[]', 'value' => $this->_storeManager->getStore(true)->getId()]
  172. );
  173. $review->setSelectStores($this->_storeManager->getStore(true)->getId());
  174. }
  175. $fieldset->addField(
  176. 'nickname',
  177. 'text',
  178. ['label' => __('Nickname'), 'required' => true, 'name' => 'nickname']
  179. );
  180. $fieldset->addField(
  181. 'title',
  182. 'text',
  183. ['label' => __('Summary of Review'), 'required' => true, 'name' => 'title']
  184. );
  185. $fieldset->addField(
  186. 'detail',
  187. 'textarea',
  188. ['label' => __('Review'), 'required' => true, 'name' => 'detail', 'style' => 'height:24em;']
  189. );
  190. $form->setUseContainer(true);
  191. $form->setValues($review->getData());
  192. $this->setForm($form);
  193. return parent::_prepareForm();
  194. }
  195. }