From fd0dd47ad356442032a17bef12a22461d4c0a001 Mon Sep 17 00:00:00 2001 From: Dmitry Fedyuk Date: Wed, 27 Oct 2021 04:41:54 +0600 Subject: [PATCH] https://github.com/mage2pro/core/issues/163 --- Core/Session.php | 3 +++ Core/lib/empty.php | 1 - Core/lib/lang/prop.php | 3 +++ Customer/Model/Session.php | 11 ---------- Customer/Observer/RegisterSuccess.php | 13 +++++++----- Customer/Plugin/Block/Form/Register.php | 6 +++--- Customer/Session.php | 19 +++++++++++++++++ Customer/lib/o.php | 1 - Sso/CustomerReturn.php | 27 ++++++++++++------------- 9 files changed, 49 insertions(+), 35 deletions(-) diff --git a/Core/Session.php b/Core/Session.php index ba53d9b9a..00c8edbfc 100644 --- a/Core/Session.php +++ b/Core/Session.php @@ -87,6 +87,9 @@ private function k($k) {return "df_$k";} * @used-by df_checkout_message() * @used-by \Df\Checkout\B\Messages::_toHtml() * @used-by \Df\Customer\Observer\CopyFieldset\OrderAddressToCustomer::execute() + * @used-by \Df\Customer\Observer\RegisterSuccess::execute() + * @used-by \Df\Customer\Plugin\Block\Form\Register::afterGetFormData() + * @used-by \Df\Sso\CustomerReturn::_execute() * @return self */ final static function s() {return dfcf(function($c) {return new $c;}, [static::class]);} diff --git a/Core/lib/empty.php b/Core/lib/empty.php index bdbe01bd9..ca14dfa54 100644 --- a/Core/lib/empty.php +++ b/Core/lib/empty.php @@ -16,7 +16,6 @@ * @used-by \Df\API\Facade::p() * @used-by \Df\Config\Backend\Serialized::valueUnserialize() * @used-by \Df\Config\Settings::json() - * @used-by \Df\Customer\Plugin\Block\Form\Register::afterGetFormData() * @used-by \Df\Directory\FE\Country::getValues() * @used-by \Df\Xml\X::importString() * @used-by \Df\Zf\Validate\ArrayT::filter() diff --git a/Core/lib/lang/prop.php b/Core/lib/lang/prop.php index 5aa3357a2..f2df783a9 100644 --- a/Core/lib/lang/prop.php +++ b/Core/lib/lang/prop.php @@ -45,6 +45,9 @@ function df_n_set($v) {return is_null($v) ? DF_N : $v;} * @used-by \Df\API\Client::logging() * @used-by \Df\API\FacadeOptions::resC() * @used-by \Df\API\FacadeOptions::silent() + * @used-by \Df\Checkout\Session::customer() + * @used-by \Df\Checkout\Session::messages() + * @used-by \Df\Customer\Session::ssoRegistrationData() * @used-by \Dfe\Sift\API\Client::cfg() * @used-by \Inkifi\Pwinty\API\Entity\Image::attributes() * @used-by \Inkifi\Pwinty\API\Entity\Image::copies() diff --git a/Customer/Model/Session.php b/Customer/Model/Session.php index 2540d9ad0..4a8c050e2 100644 --- a/Customer/Model/Session.php +++ b/Customer/Model/Session.php @@ -9,17 +9,6 @@ * @method int|null getLastCustomerId(bool $clear = false) * @method Session setLastCustomerId($v) * - * 2016-12-03 - * @method array|null getDfSsoRegistrationData(bool $clear = false) - * @used-by \Df\Customer\Plugin\Block\Form\Register::afterGetFormData() - * @method void setDfSsoRegistrationData(array $v) - * @method Session unsDfSsoRegistrationData() - * - * 2016-12-03 - * @method string|null getDfSsoId(bool $clear = false) - * @method void setDfSsoId(string $v) - * @method Session unsDfSsoId() - * * 2016-12-02 * @method string|null getDfSsoProvider(bool $clear = false) * @method void setDfSsoProvider(string $v) diff --git a/Customer/Observer/RegisterSuccess.php b/Customer/Observer/RegisterSuccess.php index f21b9c424..61d46785b 100644 --- a/Customer/Observer/RegisterSuccess.php +++ b/Customer/Observer/RegisterSuccess.php @@ -7,6 +7,7 @@ */ namespace Df\Customer\Observer; use Df\Customer\Model\Session; +use Df\Customer\Session as Sess; use Df\Sso\Upgrade\Schema; use Magento\Customer\Model\Customer; use Magento\Framework\Event\Observer as O; @@ -22,17 +23,19 @@ final class RegisterSuccess implements ObserverInterface { function execute(O $o) { $c = df_customer($o['customer']); /** @var Customer $c */ $s = df_customer_session(); /** @var Session $s */ - if ($s->getDfSsoId()) { - $c[Schema::fIdC($s->getDfSsoProvider())] = $s->getDfSsoId(); + $s2 = Sess::s(); /** @var Sess $s2 */ + if ($s2->ssoId()) { + $c[Schema::fIdC($s->getDfSsoProvider())] = $s2->ssoId(); /** * 2016-12-04 * Нельзя использовать здесь @see df_eav_update(), - * потому что наше поле не является атрибутом EAV, - * а является просто полем таблицы customer_entity. + * потому что наше поле не является атрибутом EAV, а является просто полем таблицы customer_entity. */ $c->save(); } - $s->unsDfSsoId()->unsDfSsoProvider()->unsDfSsoRegistrationData(); + $s2->ssoId(null); + $s2->ssoRegistrationData([]); + $s->unsDfSsoProvider(); $s->setDfNeedConfirm(df_customer_is_need_confirm($c)); } } \ No newline at end of file diff --git a/Customer/Plugin/Block/Form/Register.php b/Customer/Plugin/Block/Form/Register.php index a0f1115af..3842c04b2 100644 --- a/Customer/Plugin/Block/Form/Register.php +++ b/Customer/Plugin/Block/Form/Register.php @@ -1,6 +1,7 @@ setData($r->getData() - + df_eta(df_customer_session()->getDfSsoRegistrationData()) + + Sess::s()->ssoRegistrationData() + (!df_my_local() ? [] : [ 'dob' => '1982-07-08' ,'email' => 'test-customer@mage2.pro' diff --git a/Customer/Session.php b/Customer/Session.php index e97f6eec6..d88c18057 100644 --- a/Customer/Session.php +++ b/Customer/Session.php @@ -3,6 +3,25 @@ use Magento\Customer\Model\Session\Storage; # 2021-10-26 "Improve the custom session data handling interface": https://github.com/mage2pro/core/issues/163 final class Session extends \Df\Core\Session { + /** + * 2016-12-03, 2021-10-26 + * @used-by \Df\Customer\Observer\RegisterSuccess::execute() + * @used-by \Df\Sso\CustomerReturn::_execute() + * @param string $v [optional] + * @return $this|string + */ + function ssoId($v = DF_N) {return df_prop($this, $v, []);} + + /** + * 2016-12-03, 2021-10-26 + * @used-by \Df\Customer\Observer\RegisterSuccess::execute() + * @used-by \Df\Customer\Plugin\Block\Form\Register::afterGetFormData() + * @used-by \Df\Sso\CustomerReturn::_execute() + * @param array(string => mixed)|string $v [optional] + * @return $this|array(string => mixed) + */ + function ssoRegistrationData($v = DF_N) {return df_prop($this, $v, []);} + /** * 2021-10-26 * @override diff --git a/Customer/lib/o.php b/Customer/lib/o.php index db6cfc49d..14f6414ad 100644 --- a/Customer/lib/o.php +++ b/Customer/lib/o.php @@ -57,7 +57,6 @@ function df_customer_resource() {return df_o(CR::class);} * @used-by wolf_sess_get() * @used-by wolf_set() * @used-by \Df\Customer\Observer\RegisterSuccess::execute() - * @used-by \Df\Customer\Plugin\Block\Form\Register::afterGetFormData() * @used-by \Df\Sso\Css::isAccConfirmation() * @used-by \Df\Sso\Css::isRegCompletion() * @used-by \Df\Sso\CustomerReturn::_execute() diff --git a/Sso/CustomerReturn.php b/Sso/CustomerReturn.php index 379f9224b..d0dc1bb6d 100644 --- a/Sso/CustomerReturn.php +++ b/Sso/CustomerReturn.php @@ -1,6 +1,7 @@ mc()) { - /** - * 2016-12-01 - * Учётная запись покупателя отсутствует в Magento, - * и в то же время информации провайдера SSO недостаточно - * для автоматической регистрации покупателя в Magento - * (случай Blackbaud NetCommunity). - * Перенаправляем покупателя на стандартную страницу регистрации Magento, - * где часть полей будет уже заполнена данными от провайдера SSO, - * а пароль будет либо скрытым, либо необязательным полем. - * После регистрации свежесозданная учётная запись будет привязана - * к учётной записи покупателя в провайдере SSO. - */ + # 2016-12-01 + # Учётная запись покупателя отсутствует в Magento, + # и в то же время информации провайдера SSO недостаточно + # для автоматической регистрации покупателя в Magento (случай Blackbaud NetCommunity). + # Перенаправляем покупателя на стандартную страницу регистрации Magento, + # где часть полей будет уже заполнена данными от провайдера SSO, + # а пароль будет либо скрытым, либо необязательным полем. + # После регистрации свежесозданная учётная запись будет привязана + # к учётной записи покупателя в провайдере SSO. $this->_redirectToRegistration = true; - $s->setDfSsoId($this->c()->id()); - $s->setDfSsoRegistrationData($this->registrationData()); + $s2->ssoId($this->c()->id()); + $s2->ssoRegistrationData($this->registrationData()); $s->setDfSsoProvider(df_module_name($this)); $settings = dfs($this); /** @var Settings $settings */ df_message_success($settings->regCompletionMessage());