Skip to content

Commit

Permalink
add mobile phone as customer attribute #1847 for magento 2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
gonzaloebiz committed Oct 23, 2023
1 parent f075414 commit 9d5a18f
Show file tree
Hide file tree
Showing 5 changed files with 270 additions and 93 deletions.
42 changes: 41 additions & 1 deletion Block/Subscribe.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
namespace Ebizmarts\MailChimp\Block;

use Magento\Framework\View\Element\Template;
use \Ebizmarts\MailChimp\Helper\Data as MailchimpHelper;
use Magento\Customer\Model\Session;
use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Customer\Model\CustomerFactory;
use Ebizmarts\MailChimp\Helper\Data as MailchimpHelper;

class Subscribe extends \Magento\Newsletter\Block\Subscribe
{
Expand All @@ -15,21 +18,38 @@ class Subscribe extends \Magento\Newsletter\Block\Subscribe
* @var MailchimpHelper
*/
protected $helper;
/**
* @var Session
*/
private $customerSession;
/**
* @var CustomerRepositoryInterface
*/
private $customerRepo;
private $customerFactory;

/**
* @param Template\Context $context
* @param MailchimpHelper $helper
* @param Session $customerSession
* @param CustomerRepositoryInterface $customerRepo
* @param array $data
*/
public function __construct(
Template\Context $context,
MailchimpHelper $helper,
Session $customerSession,
CustomerRepositoryInterface $customerRepo,
CustomerFactory $customerFactory,
array $data = []
)
{
parent::__construct($context, $data);
$this->context = $context;
$this->helper = $helper;
$this->customerSession = $customerSession;
$this->customerRepo = $customerRepo;
$this->customerFactory = $customerFactory;
}

public function getPopupUrl()
Expand All @@ -42,4 +62,24 @@ public function getFormActionUrl()
{
return $this->getUrl('mailchimp/subscriber/subscribe', ['_secure' => true]);
}
public function showMobilePhone()
{
$ret = true;
if ($this->customerSession->getCustomerId()) {
/**
* @var $customer \Magento\Customer\Model\Customer
*/
$customer = $this->customerFactory->create()->load($this->customerSession->getCustomerId());
// /**
// * @var $customer \Magento\Customer\Model\Customer
// */
// $customer = $this->customerRepo->getById($this->customerSession->getCustomerId());
$mobilePhone = $customer->getData('mobile_phone');
$this->helper->log("Mobile [$mobilePhone]");
if ($mobilePhone&&$mobilePhone!='') {
$ret = false;
}
}
return $ret;
}
}
199 changes: 116 additions & 83 deletions Helper/Data.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,30 @@

namespace Ebizmarts\MailChimp\Helper;

use Magento\Framework\App\ResourceConnection;
use Magento\Framework\Exception\ValidatorException;
use Magento\Store\Model\Store;
use Symfony\Component\Config\Definition\Exception\Exception;
use Magento\Framework\App\ResourceConnection;
use Magento\Framework\App\DeploymentConfig;
use Magento\Framework\App\Cache\TypeListInterface;
use Magento\Framework\App\Helper\Context;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Framework\Locale\Resolver;
use Magento\Framework\Serialize\Serializer\Json as JsonSerializer;
use Magento\Framework\Module\ModuleList\Loader;
use Magento\Framework\Encryption\Encryptor;
use Magento\Directory\Api\CountryInformationAcquirerInterface;
use Magento\Directory\Model\CountryFactory;
use Magento\Customer\Model\Session;
use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Customer\Model\ResourceModel\Attribute\CollectionFactory as AttributeCollectionFactory;
use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory as CustomerCollectionFactory;
use Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory as SubscriberCollectionFactory;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Config\Model\ResourceModel\Config;
use Ebizmarts\MailChimp\Model\Logger\Logger;
use Ebizmarts\MailChimp\Model\MailChimpSyncBatches;
use Ebizmarts\MailChimp\Model\MailChimpStoresFactory;
use Ebizmarts\MailChimp\Model\MailChimpStores;
use Ebizmarts\MailChimp\Model\MailChimpInterestGroupFactory;

class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
Expand Down Expand Up @@ -97,11 +117,11 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper

protected $counters = [];
/**
* @var \Magento\Store\Model\StoreManagerInterface
* @var StoreManagerInterface
*/
private $_storeManager;
/**
* @var \Ebizmarts\MailChimp\Model\Logger\Logger
* @var Logger
*/
private $_mlogger;
/**
Expand All @@ -113,139 +133,144 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
*/
protected $_request;
/**
* @var \Magento\Framework\Module\ModuleList\Loader
* @var Loader
*/
private $_loader;
/**
* @var \Magento\Config\Model\ResourceModel\Config
* @var Config
*/
private $_config;
/**
* @var \Mailchimp
*/
private $_api;

/**
* @var \Ebizmarts\MailChimp\Model\MailChimpSyncBatches
* @var MailChimpSyncBatches
*/
private $_syncBatches;
/**
* @var \Ebizmarts\MailChimp\Model\MailChimpStoresFactory
* @var MailChimpStoresFactory
*/
private $_mailChimpStoresFactory;
/**
* @var \Ebizmarts\MailChimp\Model\MailChimpStores
* @var MailChimpStores
*/
private $_mailChimpStores;
/**
* @var \Magento\Framework\Encryption\Encryptor
* @var Encryptor
*/
private $_encryptor;
/**
* @var \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory
* @var SubscriberCollectionFactory
*/
private $_subscriberCollection;
/**
* @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory
* @var CustomerCollectionFactory
*/
private $_customerCollection;
/**
* @var \Magento\Framework\App\ResourceConnection
* @var ResourceConnection
*/
private $_resource;
/**
* @var \Magento\Framework\App\Cache\TypeListInterface
* @var TypeListInterface
*/
private $_cacheTypeList;
/**
* @var \Magento\Customer\Model\ResourceModel\Attribute\CollectionFactory
* @var AttributeCollectionFactory
*/
private $_attCollection;
/**
* @var \Magento\Customer\Model\CustomerFactory
* @var CustomerRepositoryInterface
*/
protected $_customerFactory;
protected $_customerRepo;
/**
* @var \Magento\Directory\Api\CountryInformationAcquirerInterface
* @var CountryInformationAcquirerInterface
*/
protected $_countryInformation;
/**
* @var \Ebizmarts\MailChimp\Model\MailChimpInterestGroupFactory
* @var MailChimpInterestGroupFactory
*/
protected $_interestGroupFactory;
/**
* @var \Magento\Framework\Stdlib\DateTime\DateTime
* @var DateTime
*/
protected $_date;
/**
* @var \Magento\Framework\App\DeploymentConfig
* @var DeploymentConfig
*/
protected $_deploymentConfig;
/**
* @var \Magento\Framework\Serialize\Serializer\Json
* @var JsonSerializer
*/
protected $_serializer;
/**
* @var \Magento\Directory\Model\CountryFactory
* @var CountryFactory
*/
protected $countryFactory;
/**
* @var \Magento\Framework\Locale\Resolver
* @var Resolver
*/
protected $resolver;
private $customerAtt = null;
private $addressAtt = null;
private $_mapFields = null;
/**
* @var Session
*/
private $customerSession = null;

/**
* @param \Magento\Framework\App\Helper\Context $context
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param \Ebizmarts\MailChimp\Model\Logger\Logger $logger
* @param \Magento\Framework\Module\ModuleList\Loader $loader
* @param \Magento\Config\Model\ResourceModel\Config $config
* @param Context $context
* @param StoreManagerInterface $storeManager
* @param Logger $logger
* @param Loader $loader
* @param Config $config
* @param \Mailchimp $api
* @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
* @param \Ebizmarts\MailChimp\Model\MailChimpSyncBatches $syncBatches
* @param \Ebizmarts\MailChimp\Model\MailChimpStoresFactory $mailChimpStoresFactory
* @param \Ebizmarts\MailChimp\Model\MailChimpStores $mailChimpStores
* @param \Magento\Customer\Model\ResourceModel\Attribute\CollectionFactory $attCollection
* @param \Magento\Framework\Encryption\Encryptor $encryptor
* @param \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollection
* @param \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerCollection
* @param \Magento\Customer\Model\CustomerFactory $customerFactory
* @param \Magento\Directory\Api\CountryInformationAcquirerInterface $countryInformation
* @param TypeListInterface $cacheTypeList
* @param MailChimpSyncBatches $syncBatches
* @param MailChimpStoresFactory $mailChimpStoresFactory
* @param MailChimpStores $mailChimpStores
* @param AttributeCollectionFactory $attCollection
* @param Encryptor $encryptor
* @param SubscriberCollectionFactory $subscriberCollection
* @param CustomerCollectionFactory $customerCollection
* @param CustomerRepositoryInterface $customerRepository
* @param CountryInformationAcquirerInterface $countryInformation
* @param ResourceConnection $resource
* @param \Ebizmarts\MailChimp\Model\MailChimpInterestGroupFactory $interestGroupFactory
* @param \Magento\Framework\Serialize\Serializer\Json $serializer
* @param \Magento\Framework\App\DeploymentConfig $deploymentConfig
* @param \Magento\Framework\Stdlib\DateTime\DateTime $date
* @param \Magento\Directory\Model\CountryFactory $countryFactory
* @param \Magento\Framework\Locale\Resolver $resolver
* @param MailChimpInterestGroupFactory $interestGroupFactory
* @param JsonSerializer $serializer
* @param DeploymentConfig $deploymentConfig
* @param DateTime $date
* @param CountryFactory $countryFactory
* @param Resolver $resolver
* @param Session $customerSession
*/
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Ebizmarts\MailChimp\Model\Logger\Logger $logger,
\Magento\Framework\Module\ModuleList\Loader $loader,
\Magento\Config\Model\ResourceModel\Config $config,
Context $context,
StoreManagerInterface $storeManager,
Logger $logger,
Loader $loader,
Config $config,
\Mailchimp $api,
\Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
\Ebizmarts\MailChimp\Model\MailChimpSyncBatches $syncBatches,
\Ebizmarts\MailChimp\Model\MailChimpStoresFactory $mailChimpStoresFactory,
\Ebizmarts\MailChimp\Model\MailChimpStores $mailChimpStores,
\Magento\Customer\Model\ResourceModel\Attribute\CollectionFactory $attCollection,
\Magento\Framework\Encryption\Encryptor $encryptor,
\Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollection,
\Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerCollection,
\Magento\Customer\Model\CustomerFactory $customerFactory,
\Magento\Directory\Api\CountryInformationAcquirerInterface $countryInformation,
\Magento\Framework\App\ResourceConnection $resource,
\Ebizmarts\MailChimp\Model\MailChimpInterestGroupFactory $interestGroupFactory,
\Magento\Framework\Serialize\Serializer\Json $serializer,
\Magento\Framework\App\DeploymentConfig $deploymentConfig,
\Magento\Framework\Stdlib\DateTime\DateTime $date,
\Magento\Directory\Model\CountryFactory $countryFactory,
\Magento\Framework\Locale\Resolver $resolver
TypeListInterface $cacheTypeList,
MailChimpSyncBatches $syncBatches,
MailChimpStoresFactory $mailChimpStoresFactory,
MailChimpStores $mailChimpStores,
AttributeCollectionFactory $attCollection,
Encryptor $encryptor,
SubscriberCollectionFactory $subscriberCollection,
CustomerCollectionFactory $customerCollection,
CustomerRepositoryInterface $customerRepository,
CountryInformationAcquirerInterface $countryInformation,
ResourceConnection $resource,
MailChimpInterestGroupFactory $interestGroupFactory,
JsonSerializer $serializer,
DeploymentConfig $deploymentConfig,
DateTime $date,
CountryFactory $countryFactory,
Resolver $resolver,
Session $customerSession
) {

$this->_storeManager = $storeManager;
Expand All @@ -264,14 +289,15 @@ public function __construct(
$this->_resource = $resource;
$this->_cacheTypeList = $cacheTypeList;
$this->_attCollection = $attCollection;
$this->_customerFactory = $customerFactory;
$this->_customerRepo = $customerRepository;
$this->_countryInformation = $countryInformation;
$this->_interestGroupFactory = $interestGroupFactory;
$this->_serializer = $serializer;
$this->_deploymentConfig = $deploymentConfig;
$this->_date = $date;
$this->countryFactory = $countryFactory;
$this->resolver = $resolver;
$this->customerSession = $customerSession;
parent::__construct($context);
}

Expand Down Expand Up @@ -726,25 +752,32 @@ public function getMergeVarsBySubscriber(\Magento\Newsletter\Model\Subscriber $s
if ($this->getConfigValue(self::XML_FOOTER_PHONE, $webSiteId, "websites")) {
$phone_field = $this->getConfigValue(self::XML_FOOTER_MAP , $webSiteId, "websites");
$phone = $subscriber->getPhone();
if ($phone_field && $subscriber->getPhone()) {
$mergeVars[$phone_field] = $subscriber->getPhone();
if ($phone_field && $phone) {
$mergeVars[$phone_field] = $phone;
}
}
if (!$email) {
$email = $subscriber->getEmail();
}
try {
/**
* @var $customer \Magento\Customer\Model\Customer
*/
$customer = $this->_customerFactory->create();
$customer->setWebsiteId($webSiteId);
$customer->loadByEmail($email);
if ($customer->getData('email') == $email) {
$mergeVars = array_merge($mergeVars,$this->getMergeVars($customer, $customer->getStoreId()));
if ($this->customerSession->getCustomerId()) {
try {
/**
* @var $customer \Magento\Customer\Model\Customer
*/
$customer = $this->_customerRepo->getById($this->customerSession->getCustomerId());
if ($customer->getData('mobile_phone')) {
$this->log($customer->getData('mobile_phone'));
} else {
$this->log('no mobile phone');
}
if ($customer->getData('email') == $email) {
$mergeVars = array_merge($mergeVars, $this->getMergeVars($customer, $customer->getStoreId()));
}
} catch (\Exception $e) {
$this->log($e->getMessage());
}
} catch (\Exception $e) {
$this->log($e->getMessage());
} else {
$this->log("Subscriber is not a customer");
}
return $mergeVars;
}
Expand Down
Loading

0 comments on commit 9d5a18f

Please sign in to comment.