* @copyright 2021 DIGITAL RETAIL TECHNOLOGIES SL * @license https://opensource.org/licenses/MIT The MIT License * * Don't forget to prefix your containers with your own identifier * to avoid any conflicts with others containers. */ class RetailcrmSettings { /** * @var RetailcrmSettingsItems */ private $settings; /** * @var RetailcrmSettingsItemHtml */ private $consultantScript; /** * @var RetailcrmSettingsValidator */ private $validator; public function __construct(RetailCRM $module) { $this->settings = new RetailcrmSettingsItems(); $this->consultantScript = new RetailcrmSettingsItemHtml('consultantScript', RetailCRM::CONSULTANT_SCRIPT); $this->validator = new RetailcrmSettingsValidator($this->settings, $module->reference); } /** * Save settings handler * * @return array */ public function save() { if ($this->validator->validate(true)) { $this->settings->updateValueAll(); if (array_key_exists('apiKey', $this->settings->getChanged())) { $this->setClientId(); RetailCRM::updateCrmModuleState(Context::getContext()->shop->id); } } $changed = $this->settings->getChanged(); if ($this->consultantScript->issetValue()) { $this->updateConsultantCode(); $changed['consultantScript'] = $this->consultantScript->getValueStored(); } return [ 'success' => $this->validator->getSuccess(), 'errors' => $this->validator->getErrors(), 'warnings' => $this->validator->getWarnings(), 'changed' => $changed, ]; } private function setClientId() { $context = Context::getContext(); Configuration::updateValue(RetailCRM::CLIENT_ID, hash( 'sha256', $context->shop->id . Configuration::get('PS_SHOP_DOMAIN') )); return true; } private function updateConsultantCode() { $consultantCode = $this->consultantScript->getValue(); if (!empty($consultantCode)) { $extractor = new RetailcrmConsultantRcctExtractor(); $rcct = $extractor->setConsultantScript($consultantCode)->build()->getDataString(); if (!empty($rcct)) { $this->consultantScript->updateValue(); Configuration::updateValue(RetailCRM::CONSULTANT_RCCT, $rcct); Cache::getInstance()->set(RetailCRM::CONSULTANT_RCCT, $rcct); } else { $this->consultantScript->deleteValue(); Configuration::deleteByName(RetailCRM::CONSULTANT_RCCT); Cache::getInstance()->delete(RetailCRM::CONSULTANT_RCCT); } } } }