Main.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <?php
  2. /**
  3. * Copyright © 2015 Ihor Vansach (ihor@magefan.com). All rights reserved.
  4. * See LICENSE.txt for license details (http://opensource.org/licenses/osl-3.0.php).
  5. *
  6. * Glory to Ukraine! Glory to the heroes!
  7. */
  8. namespace Magefan\Blog\Block\Adminhtml\Post\Edit\Tab;
  9. /**
  10. * Admin blog post edit form main tab
  11. */
  12. class Main extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface
  13. {
  14. /**
  15. * @var \Magento\Store\Model\System\Store
  16. */
  17. protected $_systemStore;
  18. /**
  19. * @var \Magefan\Blog\Model\ResourceModel\Category\Collection
  20. */
  21. protected $_categoryCollection;
  22. /**
  23. * @param \Magento\Backend\Block\Template\Context $context
  24. * @param \Magento\Framework\Registry $registry
  25. * @param \Magento\Framework\Data\FormFactory $formFactory
  26. * @param \Magento\Store\Model\System\Store $systemStore
  27. * @param array $data
  28. */
  29. public function __construct(
  30. \Magento\Backend\Block\Template\Context $context,
  31. \Magento\Framework\Registry $registry,
  32. \Magento\Framework\Data\FormFactory $formFactory,
  33. \Magento\Store\Model\System\Store $systemStore,
  34. \Magefan\Blog\Model\ResourceModel\Category\Collection $categoryCollection,
  35. array $data = []
  36. ) {
  37. $this->_systemStore = $systemStore;
  38. $this->_categoryCollection = $categoryCollection;
  39. parent::__construct($context, $registry, $formFactory, $data);
  40. }
  41. /**
  42. * Prepare form
  43. *
  44. * @return $this
  45. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  46. */
  47. protected function _prepareForm()
  48. {
  49. /* @var $model \Magento\Cms\Model\Page */
  50. $model = $this->_coreRegistry->registry('current_model');
  51. /*
  52. * Checking if user have permissions to save information
  53. */
  54. $isElementDisabled = !$this->_isAllowedAction('Magefan_Blog::post');
  55. /** @var \Magento\Framework\Data\Form $form */
  56. $form = $this->_formFactory->create();
  57. $form->setHtmlIdPrefix('post_');
  58. $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Post Information')]);
  59. if ($model->getId()) {
  60. $fieldset->addField('post_id', 'hidden', ['name' => 'id']);
  61. }
  62. $fieldset->addField(
  63. 'title',
  64. 'text',
  65. [
  66. 'name' => 'post[title]',
  67. 'label' => __('Post Title'),
  68. 'title' => __('Post Title'),
  69. 'required' => true,
  70. 'disabled' => $isElementDisabled
  71. ]
  72. );
  73. $fieldset->addField(
  74. 'identifier',
  75. 'text',
  76. [
  77. 'name' => 'post[identifier]',
  78. 'label' => __('URL Key'),
  79. 'title' => __('URL Key'),
  80. 'class' => 'validate-identifier',
  81. 'note' => __('Relative to Web Site Base URL'),
  82. 'disabled' => $isElementDisabled
  83. ]
  84. );
  85. $fieldset->addField(
  86. 'is_active',
  87. 'select',
  88. [
  89. 'label' => __('Status'),
  90. 'title' => __('Post Status'),
  91. 'name' => 'post[is_active]',
  92. 'required' => true,
  93. 'options' => $model->getAvailableStatuses(),
  94. 'disabled' => $isElementDisabled
  95. ]
  96. );
  97. if (!$model->getId()) {
  98. $model->setData('is_active', $isElementDisabled ? '0' : '1');
  99. }
  100. /**
  101. * Check is single store mode
  102. */
  103. if (!$this->_storeManager->isSingleStoreMode()) {
  104. $field = $fieldset->addField(
  105. 'store_id',
  106. 'multiselect',
  107. [
  108. 'name' => 'post[stores][]',
  109. 'label' => __('Store View'),
  110. 'title' => __('Store View'),
  111. 'required' => true,
  112. 'values' => $this->_systemStore->getStoreValuesForForm(false, true),
  113. 'disabled' => $isElementDisabled,
  114. ]
  115. );
  116. $renderer = $this->getLayout()->createBlock(
  117. 'Magento\Backend\Block\Store\Switcher\Form\Renderer\Fieldset\Element'
  118. );
  119. $field->setRenderer($renderer);
  120. } else {
  121. $fieldset->addField(
  122. 'store_id',
  123. 'hidden',
  124. ['name' => 'post[stores][]', 'value' => $this->_storeManager->getStore(true)->getId()]
  125. );
  126. $model->setStoreId($this->_storeManager->getStore(true)->getId());
  127. }
  128. $categories[] = ['label' => __('Please select'), 'value' => 0];
  129. $collection = $this->_categoryCollection
  130. ->setOrder('position')
  131. ->getTreeOrderedArray();
  132. foreach($collection as $item) {
  133. $categories[] = array(
  134. 'label' => $this->_getSpaces($item->getLevel()).' '.$item->getTitle() . ($item->getIsActive() ? '' : ' ('.__('Disabled').')' ),
  135. 'value' => $item->getId() ,
  136. );
  137. }
  138. $field = $fieldset->addField(
  139. 'categories',
  140. 'multiselect',
  141. [
  142. 'name' => 'post[categories][]',
  143. 'label' => __('Categories'),
  144. 'title' => __('Categories'),
  145. 'values' => $categories,
  146. 'disabled' => $isElementDisabled,
  147. 'style' => 'width:100%',
  148. ]
  149. );
  150. if (is_array($model->getData('featured_img'))) {
  151. $model->setData('featured_img', $model->getData('featured_img')['value']);
  152. }
  153. $fieldset->addField(
  154. 'featured_img',
  155. 'image',
  156. [
  157. 'title' => __('Featured Image'),
  158. 'label' => __('Featured Image'),
  159. 'name' => 'post[featured_img]',
  160. 'note' => __('Allow image type: jpg, jpeg, gif, png'),
  161. ]
  162. );
  163. $dateFormat = $this->_localeDate->getDateFormat(
  164. \IntlDateFormatter::SHORT
  165. );
  166. $fieldset->addField(
  167. 'publish_time',
  168. 'date',
  169. [
  170. 'name' => 'post[publish_time]',
  171. 'label' => __('Publish At'),
  172. 'date_format' => $dateFormat,
  173. 'disabled' => $isElementDisabled,
  174. 'class' => 'validate-date validate-date-range date-range-custom_theme-from'
  175. ]
  176. );
  177. $this->_eventManager->dispatch('magefan_blog_post_edit_tab_main_prepare_form', ['form' => $form]);
  178. $form->setValues($model->getData());
  179. $this->setForm($form);
  180. return parent::_prepareForm();
  181. }
  182. /**
  183. * Generate spaces
  184. * @param int $n
  185. * @return string
  186. */
  187. protected function _getSpaces($n)
  188. {
  189. $s = '';
  190. for($i = 0; $i < $n; $i++) {
  191. $s .= '--- ';
  192. }
  193. return $s;
  194. }
  195. /**
  196. * Prepare label for tab
  197. *
  198. * @return \Magento\Framework\Phrase
  199. */
  200. public function getTabLabel()
  201. {
  202. return __('Post Information');
  203. }
  204. /**
  205. * Prepare title for tab
  206. *
  207. * @return \Magento\Framework\Phrase
  208. */
  209. public function getTabTitle()
  210. {
  211. return __('Post Information');
  212. }
  213. /**
  214. * Returns status flag about this tab can be shown or not
  215. *
  216. * @return bool
  217. */
  218. public function canShowTab()
  219. {
  220. return true;
  221. }
  222. /**
  223. * Returns status flag about this tab hidden or not
  224. *
  225. * @return bool
  226. */
  227. public function isHidden()
  228. {
  229. return false;
  230. }
  231. /**
  232. * Check permission for passed action
  233. *
  234. * @param string $resourceId
  235. * @return bool
  236. */
  237. protected function _isAllowedAction($resourceId)
  238. {
  239. return $this->_authorization->isAllowed($resourceId);
  240. }
  241. }