Save.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. /**
  3. * Copyright © 2016 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\Controller\Adminhtml\Post;
  9. use Magefan\Blog\Model\Post;
  10. /**
  11. * Blog post save controller
  12. */
  13. class Save extends \Magefan\Blog\Controller\Adminhtml\Post
  14. {
  15. /**
  16. * Before model save
  17. * @param \Magefan\Blog\Model\Post $model
  18. * @param \Magento\Framework\App\Request\Http $request
  19. * @return void
  20. */
  21. protected function _beforeSave($model, $request)
  22. {
  23. /* Prepare dates */
  24. $dateFilter = $this->_objectManager->create('Magento\Framework\Stdlib\DateTime\Filter\Date');
  25. $data = $model->getData();
  26. $filterRules = [];
  27. foreach (['publish_time', 'custom_theme_from', 'custom_theme_to'] as $dateField) {
  28. if (!empty($data[$dateField])) {
  29. $filterRules[$dateField] = $dateFilter;
  30. }
  31. }
  32. $inputFilter = new \Zend_Filter_Input(
  33. $filterRules,
  34. [],
  35. $data
  36. );
  37. $data = $inputFilter->getUnescaped();
  38. $model->setData($data);
  39. /* Prepare author */
  40. if (!$model->getAuthorId()) {
  41. $authSession = $this->_objectManager->get('Magento\Backend\Model\Auth\Session');
  42. $model->setAuthorId($authSession->getUser()->getId());
  43. }
  44. /* Prepare relative links */
  45. $data = $request->getPost('data');
  46. $links = isset($data['links']) ? $data['links'] : ['post' => [], 'product' => []];
  47. if (is_array($links)) {
  48. foreach (['post', 'product'] as $linkType) {
  49. if (isset($links[$linkType]) && is_array($links[$linkType])) {
  50. $linksData = [];
  51. foreach ($links[$linkType] as $item) {
  52. $linksData[$item['id']] = [
  53. 'position' => isset($item['position']) ? $item['position'] : 0
  54. ];
  55. }
  56. $links[$linkType] = $linksData;
  57. } else {
  58. $links[$linkType] = [];
  59. }
  60. }
  61. $model->setData('links', $links);
  62. }
  63. /* Prepare images */
  64. $data = $model->getData();
  65. foreach (['featured_img', 'og_img'] as $key) {
  66. if (isset($data[$key]) && is_array($data[$key])) {
  67. if (!empty($data[$key]['delete'])) {
  68. $model->setData($key, null);
  69. } else {
  70. if (isset($data[$key][0]['name']) && isset($data[$key][0]['tmp_name'])) {
  71. $image = $data[$key][0]['name'];
  72. $model->setData($key, Post::BASE_MEDIA_PATH . '/' . $image);
  73. $imageUploader = $this->_objectManager->get(
  74. 'Magefan\Blog\ImageUpload'
  75. );
  76. $imageUploader->moveFileFromTmp($image);
  77. } else {
  78. if (isset($data[$key][0]['name'])) {
  79. $model->setData($key, $data[$key][0]['name']);
  80. }
  81. }
  82. }
  83. } else {
  84. $model->setData($key, null);
  85. }
  86. }
  87. /* Prepare Media Gallery */
  88. $data = $model->getData();
  89. if (!empty($data['media_gallery']['images'])) {
  90. $images = $data['media_gallery']['images'];
  91. usort($images, function ($imageA, $imageB) {
  92. return ($imageA['position'] < $imageB['position']) ? -1 : 1;
  93. });
  94. $gallery = array();
  95. foreach ($images as $image) {
  96. if (empty($image['removed'])) {
  97. if (!empty($image['value_id'])) {
  98. $gallery[] = $image['value_id'];
  99. } else {
  100. $imageUploader = $this->_objectManager->get(
  101. 'Magefan\Blog\ImageUpload'
  102. );
  103. $imageUploader->moveFileFromTmp($image['file']);
  104. $gallery[] = Post::BASE_MEDIA_PATH . '/' . $image['file'];
  105. }
  106. }
  107. }
  108. $model->setGalleryImages($gallery);
  109. }
  110. }
  111. }