Пример #1
0
 /**
  * 2016-08-22
  * @return C|null
  */
 protected function c()
 {
     return dfc($this, function () {
         /** @var int|null $id $id */
         $id = $this->o()->getCustomerId();
         return !$id ? null : df_customer_get($id);
     });
 }
Пример #2
0
 /**
  * 2016-07-27
  * Цель плагина — добавление возможности отключения необходимости платёжного адреса.
  * Это будет использоваться моими платёжными модулями.
  * Помимо этого плагина для данной функциональности нужны ещё 2:
  * @see \Df\Customer\Plugin\Model\Address\AbstractAddress
  * @see \Df\Sales\Plugin\Model\Order\Address\Validator
  *
  * @see \Magento\Customer\Model\ResourceModel\AddressRepository::save()
  * @param Sb $sb
  * @param \Closure $proceed
  * @param AI|CDA $address
  * @return AI
  * @throws InputException
  */
 public function aroundSave(Sb $sb, \Closure $proceed, AI $address)
 {
     /** @var AI $result */
     /**
      * 2016-07-27
      * Адрес приобретает тип, только когда используется при оформлении заказа.
      * Пока же адрес просто принадлежит покупателю
      * @see \Magento\Customer\Model\Data\Address
      * @see \Magento\Customer\Api\Data\AddressInterface
      * а не используется в контексте оформления заказа, то такой адрес ещё типа не имеет,
      * и в будущем, в зависимости от контекста,
      * может использоваться и как адрес доставки, и как платёжный адрес.
      *
      * По этой причине мы не вызываем здесь @see df_address_is_billing()
      * В то же время, мы попадаем сюда при оформлении заказа,
      * поэтому мы не можем проводить валидацию адреса,
      * если необходимость платёжного адреса отключена администратором.
      * Поэтому ветка S::disabled() нужна.
      */
     if (!S::disabled()) {
         $result = $proceed($address);
     } else {
         /** @var Customer $customer */
         $customer = df_customer_get($address->getCustomerId());
         /** @var Address $addressM */
         $addressM = null;
         if ($address->getId()) {
             $addressM = df_address_registry()->retrieve($address->getId());
         }
         if ($addressM) {
             $addressM->updateData($address);
         } else {
             $addressM = df_om()->create(Address::class);
             $addressM->updateData($address);
             $addressM->setCustomer($customer);
         }
         // 2016-07-27
         // Вот здесь в ядре валидация, а мы её пропускаем.
         $addressM->save();
         // Clean up the customer registry since the Address save has side effect on customer:
         // \Magento\Customer\Model\ResourceModel\Address::_afterSave
         df_customer_registry()->remove($address->getCustomerId());
         df_address_registry()->push($addressM);
         $customer->getAddressesCollection()->clear();
         $result = $addressM->getDataModel();
     }
     return $result;
 }
Пример #3
0
/**
 * 2016-08-22
 * Имеется ещё метод @see \Magento\Customer\Model\Session::getCustomer()
 * однако смущает, что он напрямую загружает объект из БД, а не пользуется репозиторием.
 * @return C|null
 */
function df_current_customer()
{
    return df_customer_session()->isLoggedIn() ? df_customer_get(df_customer_session()->getCustomerId()) : null;
}