/** * @override * @see _P::execute() * @return \Magento\Framework\Controller\Result\Redirect */ public function execute() { // 2016-06-05 // @see urldecode() здесь вызывать уже не надо, проверял. /** @var string $redirectUrl */ $redirectUrl = df_request($this->redirectUrlKey()) ?: df_url(); /** * 2016-12-02 * Если адрес для перенаправления покупателя передётся в адресе возврата, * то адрес для перенаправления там закодирован посредством @see base64_encode() * @see \Dfe\BlackbaudNetCommunity\Url::get() */ if (!df_starts_with($redirectUrl, 'http')) { $redirectUrl = base64_decode($redirectUrl); } try { /** @var Session|DfSession $s */ $s = df_customer_session(); if (!$this->mc()) { /** * 2016-12-01 * Учётная запись покупателя отсутствует в Magento, * и в то же время информации провайдера SSO недостаточно * для автоматической регистрации покупателя в Magento * (случай Blackbaud NetCommunity). * Перенаправляем покупателя на стандартную страницу регистрации Magento, * где часть полей будет уже заполнена данными от провайдера SSO, * а пароль будет либо скрытым, либо необязательным полем. * После регистрации свежесозданная учётная запись будет привязана * к учётной записи покупателя в провайдере SSO. */ $redirectUrl = df_customer_url()->getRegisterUrl(); } else { /** * 2015-10-08 * По аналогии с @see \Magento\Customer\Controller\Account\LoginPost::execute() * https://github.com/magento/magento2/blob/1.0.0-beta4/app/code/Magento/Customer/Controller/Account/LoginPost.php#L84-L85 */ $s->setCustomerDataAsLoggedIn($this->mc()->getDataModel()); $s->regenerateId(); /** * По аналогии с @see \Magento\Customer\Model\Account\Redirect::updateLastCustomerId() * Напрямую тот метод вызвать не можем, потому что он protected, * а использовать весь класс @see \Magento\Customer\Model\Account\Redirect пробовал, * но оказалось неудобно из-за слишком сложной процедуры перенаправлений. */ if ($s->getLastCustomerId() != $s->getId()) { $s->unsBeforeAuthUrl()->setLastCustomerId($s->getId()); } } } catch (\Exception $e) { df_message_error($e); } $this->postProcess(); return $this->resultRedirectFactory->create()->setUrl($redirectUrl); }
/** * 2016-07-30 * @used-by \Df\Config\Backend\Serialized::valueSerialize() * @used-by \Df\Config\Backend\Serialized::valueUnserialize() * @param array(string => mixed) $result * @return array(string => mixed) * @throws \Exception */ private function processA(array $result) { try { $result = $this->processI($result); } catch (\Exception $e) { /** * 2016-08-02 * Если некорректость данных обнаружена при их сохранении, * то там удобнее возбудить исключительную ситуацию, * чтобы администратор магазина увидел диагностическое сообщение на экране. * Далее администратор может скорректировать данные посредством интерфейса. * * Если же некорректость данных обнаружена при их загрузке, * то это значит, что некорректные данные находятся в базе данных, * и администратор всё равно не сможет скорректировать их посредством интерфейса. * Поэтому вместо возбуждения исключительной ситуации просто сбрасываем данные. * * Некорректость данных при их загрузке возможна, например, * если поменялся формат данных в ещё разрабатываемом модуле: * тогда нам вместо конквертации данных проще их сбросить, * чтобы не сопровождать код по такой конвертации, * который с релизом модуля больше никогда не понадобится. */ if ($this->isSaving()) { throw $e; } $result = []; //df_cfg_delete($this->getPath()); //df_cfg_save($this->getPath(), null, ); df_log($e); df_message_error(__("The store's database contains incorrect data for the «<b>%1</b>» option." . "<br/>The data for this options are reset.", $this->label())); } return $result; }