123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- <?php
- /**
- * Google Experiment Abstract Save observer
- *
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\GoogleOptimizer\Observer;
- use Magento\Framework\Event\Observer;
- use Magento\Framework\Event\ObserverInterface;
- /**
- * @api
- * @since 100.0.2
- */
- abstract class AbstractSave implements ObserverInterface
- {
- /**
- * @var \Magento\GoogleOptimizer\Helper\Data
- */
- protected $_helper;
- /**
- * @var \Magento\GoogleOptimizer\Model\Code
- */
- protected $_modelCode;
- /**
- * @var \Magento\Framework\App\RequestInterface
- */
- protected $_request;
- /**
- * @var array
- */
- protected $_params;
- /**
- * @param \Magento\GoogleOptimizer\Helper\Data $helper
- * @param \Magento\GoogleOptimizer\Model\Code $modelCode
- * @param \Magento\Framework\App\RequestInterface $request
- */
- public function __construct(
- \Magento\GoogleOptimizer\Helper\Data $helper,
- \Magento\GoogleOptimizer\Model\Code $modelCode,
- \Magento\Framework\App\RequestInterface $request
- ) {
- $this->_helper = $helper;
- $this->_modelCode = $modelCode;
- $this->_request = $request;
- }
- /**
- * Save script after saving entity
- *
- * @param Observer $observer
- * @return $this
- */
- public function execute(Observer $observer)
- {
- $this->_initEntity($observer);
- if ($this->_isGoogleExperimentActive() && $this->isDataAvailable()) {
- $this->_processCode();
- }
- return $this;
- }
- /**
- * Init entity
- *
- * @param Observer $observer
- * @return void
- */
- abstract protected function _initEntity($observer);
- /**
- * Check is Google Experiment enabled
- *
- * @return bool
- */
- protected function _isGoogleExperimentActive()
- {
- return $this->_helper->isGoogleExperimentActive();
- }
- /**
- * Processes Save event of the entity
- *
- * @return void
- */
- protected function _processCode()
- {
- $this->_initRequestParams();
- if ($this->_isNewCode()) {
- $this->_saveCode();
- } else {
- $this->_loadCode();
- if ($this->_isEmptyCode()) {
- $this->_deleteCode();
- } else {
- $this->_saveCode();
- }
- }
- }
- /**
- * Init request params
- *
- * @return void
- * @throws \InvalidArgumentException
- */
- protected function _initRequestParams()
- {
- if (!$this->isDataAvailable()) {
- throw new \InvalidArgumentException('Wrong request parameters');
- }
- $this->_params = $this->getRequestData();
- }
- /**
- * Check is new model
- *
- * @return bool
- */
- protected function _isNewCode()
- {
- return empty($this->_params['code_id']);
- }
- /**
- * Save code model
- *
- * @return void
- */
- protected function _saveCode()
- {
- $this->_modelCode->addData($this->_getCodeData());
- $this->_modelCode->save();
- }
- /**
- * Get data for saving code model
- *
- * @return array
- */
- abstract protected function _getCodeData();
- /**
- * Load model code
- *
- * @return void
- * @throws \InvalidArgumentException
- */
- protected function _loadCode()
- {
- $this->_modelCode->load($this->_params['code_id']);
- if (!$this->_modelCode->getId()) {
- throw new \InvalidArgumentException('Code does not exist');
- }
- }
- /**
- * Is empty code
- *
- * @return bool
- */
- protected function _isEmptyCode()
- {
- return empty($this->_params['experiment_script']);
- }
- /**
- * Delete model code
- *
- * @return void
- * @throws \InvalidArgumentException
- */
- protected function _deleteCode()
- {
- $this->_modelCode->delete();
- }
- /**
- * @return bool
- */
- private function isDataAvailable()
- {
- $params = $this->getRequestData();
- return is_array($params) && isset($params['experiment_script']) && isset($params['code_id']);
- }
- /**
- * @return mixed
- */
- private function getRequestData()
- {
- return $this->_request->getParam('google_experiment');
- }
- }
|