Skip to content

Commit

Permalink
https://github.com/mage2pro/core/issues/163
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitrii-fediuk committed Oct 26, 2021
1 parent 701c948 commit fd0dd47
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 35 deletions.
3 changes: 3 additions & 0 deletions Core/Session.php
Original file line number Diff line number Diff line change
Expand Up @@ -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]);}
Expand Down
1 change: 0 additions & 1 deletion Core/lib/empty.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
3 changes: 3 additions & 0 deletions Core/lib/lang/prop.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
11 changes: 0 additions & 11 deletions Customer/Model/Session.php
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
13 changes: 8 additions & 5 deletions Customer/Observer/RegisterSuccess.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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));
}
}
6 changes: 3 additions & 3 deletions Customer/Plugin/Block/Form/Register.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php
# 2016-12-03
namespace Df\Customer\Plugin\Block\Form;
use Df\Customer\Session as Sess;
use Magento\Customer\Block\Form\Register as Sb;
use Magento\Framework\DataObject as _DO;
final class Register {
Expand All @@ -14,8 +15,7 @@ final class Register {
* @see \Df\Sso\CustomerReturn::execute()
* https://github.com/mage2pro/core/blob/8473e12/Sso/CustomerReturn.php?ts=4#L54
*
* 2) тестовыми данными (дополнительно к данным пункта 1)
* при запуске Magento на моём локальном компьютере.
* 2) тестовыми данными (дополнительно к данным пункта 1) при запуске Magento на моём локальном компьютере.
*
* Установить пароль здесь нет возможности,
* потому что https://github.com/magento/magento2/blob/2.1.2/app/code/Magento/Customer/view/frontend/templates/form/register.phtml#L142-L148
Expand All @@ -28,7 +28,7 @@ final class Register {
* @return _DO
*/
function afterGetFormData(Sb $sb, _DO $r) {return $r->setData($r->getData()
+ df_eta(df_customer_session()->getDfSsoRegistrationData())
+ Sess::s()->ssoRegistrationData()
+ (!df_my_local() ? [] : [
'dob' => '1982-07-08'
,'email' => '[email protected]'
Expand Down
19 changes: 19 additions & 0 deletions Customer/Session.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion Customer/lib/o.php
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
27 changes: 13 additions & 14 deletions Sso/CustomerReturn.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?php
namespace Df\Sso;
use Df\Customer\Model\Session as DfSession;
use Df\Customer\Session as Sess;
use Df\Sso\Customer as DC;
use Df\Sso\Upgrade\Schema;
use Magento\Customer\Model\Address;
Expand All @@ -23,22 +24,20 @@ abstract class CustomerReturn extends \Df\OAuth\ReturnT {
*/
final protected function _execute() {
$s = df_customer_session(); /** @var Session|DfSession $s */
$s2 = Sess::s(); /** @var Sess $s2 */
if (!$this->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());
Expand Down

0 comments on commit fd0dd47

Please sign in to comment.