AbstractSave.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. /**
  3. * Google Experiment Abstract Save observer
  4. *
  5. * Copyright © Magento, Inc. All rights reserved.
  6. * See COPYING.txt for license details.
  7. */
  8. namespace Magento\GoogleOptimizer\Observer;
  9. use Magento\Framework\Event\Observer;
  10. use Magento\Framework\Event\ObserverInterface;
  11. /**
  12. * @api
  13. * @since 100.0.2
  14. */
  15. abstract class AbstractSave implements ObserverInterface
  16. {
  17. /**
  18. * @var \Magento\GoogleOptimizer\Helper\Data
  19. */
  20. protected $_helper;
  21. /**
  22. * @var \Magento\GoogleOptimizer\Model\Code
  23. */
  24. protected $_modelCode;
  25. /**
  26. * @var \Magento\Framework\App\RequestInterface
  27. */
  28. protected $_request;
  29. /**
  30. * @var array
  31. */
  32. protected $_params;
  33. /**
  34. * @param \Magento\GoogleOptimizer\Helper\Data $helper
  35. * @param \Magento\GoogleOptimizer\Model\Code $modelCode
  36. * @param \Magento\Framework\App\RequestInterface $request
  37. */
  38. public function __construct(
  39. \Magento\GoogleOptimizer\Helper\Data $helper,
  40. \Magento\GoogleOptimizer\Model\Code $modelCode,
  41. \Magento\Framework\App\RequestInterface $request
  42. ) {
  43. $this->_helper = $helper;
  44. $this->_modelCode = $modelCode;
  45. $this->_request = $request;
  46. }
  47. /**
  48. * Save script after saving entity
  49. *
  50. * @param Observer $observer
  51. * @return $this
  52. */
  53. public function execute(Observer $observer)
  54. {
  55. $this->_initEntity($observer);
  56. if ($this->_isGoogleExperimentActive() && $this->isDataAvailable()) {
  57. $this->_processCode();
  58. }
  59. return $this;
  60. }
  61. /**
  62. * Init entity
  63. *
  64. * @param Observer $observer
  65. * @return void
  66. */
  67. abstract protected function _initEntity($observer);
  68. /**
  69. * Check is Google Experiment enabled
  70. *
  71. * @return bool
  72. */
  73. protected function _isGoogleExperimentActive()
  74. {
  75. return $this->_helper->isGoogleExperimentActive();
  76. }
  77. /**
  78. * Processes Save event of the entity
  79. *
  80. * @return void
  81. */
  82. protected function _processCode()
  83. {
  84. $this->_initRequestParams();
  85. if ($this->_isNewCode()) {
  86. $this->_saveCode();
  87. } else {
  88. $this->_loadCode();
  89. if ($this->_isEmptyCode()) {
  90. $this->_deleteCode();
  91. } else {
  92. $this->_saveCode();
  93. }
  94. }
  95. }
  96. /**
  97. * Init request params
  98. *
  99. * @return void
  100. * @throws \InvalidArgumentException
  101. */
  102. protected function _initRequestParams()
  103. {
  104. if (!$this->isDataAvailable()) {
  105. throw new \InvalidArgumentException('Wrong request parameters');
  106. }
  107. $this->_params = $this->getRequestData();
  108. }
  109. /**
  110. * Check is new model
  111. *
  112. * @return bool
  113. */
  114. protected function _isNewCode()
  115. {
  116. return empty($this->_params['code_id']);
  117. }
  118. /**
  119. * Save code model
  120. *
  121. * @return void
  122. */
  123. protected function _saveCode()
  124. {
  125. $this->_modelCode->addData($this->_getCodeData());
  126. $this->_modelCode->save();
  127. }
  128. /**
  129. * Get data for saving code model
  130. *
  131. * @return array
  132. */
  133. abstract protected function _getCodeData();
  134. /**
  135. * Load model code
  136. *
  137. * @return void
  138. * @throws \InvalidArgumentException
  139. */
  140. protected function _loadCode()
  141. {
  142. $this->_modelCode->load($this->_params['code_id']);
  143. if (!$this->_modelCode->getId()) {
  144. throw new \InvalidArgumentException('Code does not exist');
  145. }
  146. }
  147. /**
  148. * Is empty code
  149. *
  150. * @return bool
  151. */
  152. protected function _isEmptyCode()
  153. {
  154. return empty($this->_params['experiment_script']);
  155. }
  156. /**
  157. * Delete model code
  158. *
  159. * @return void
  160. * @throws \InvalidArgumentException
  161. */
  162. protected function _deleteCode()
  163. {
  164. $this->_modelCode->delete();
  165. }
  166. /**
  167. * @return bool
  168. */
  169. private function isDataAvailable()
  170. {
  171. $params = $this->getRequestData();
  172. return is_array($params) && isset($params['experiment_script']) && isset($params['code_id']);
  173. }
  174. /**
  175. * @return mixed
  176. */
  177. private function getRequestData()
  178. {
  179. return $this->_request->getParam('google_experiment');
  180. }
  181. }