Example #1
1
 /**
  * @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);
 }
Example #2
0
 /**
  * 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;
 }