Example #1
0
 /**
  * Send customer email
  *
  * @return bool
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function send()
 {
     if ($this->_website === null || $this->_customer === null) {
         return false;
     }
     if ($this->_type == 'price' && count($this->_priceProducts) == 0 || $this->_type == 'stock' && count($this->_stockProducts) == 0) {
         return false;
     }
     if (!$this->_website->getDefaultGroup() || !$this->_website->getDefaultGroup()->getDefaultStore()) {
         return false;
     }
     if ($this->_customer->getStoreId() > 0) {
         $store = $this->_storeManager->getStore($this->_customer->getStoreId());
     } else {
         $store = $this->_website->getDefaultStore();
     }
     $storeId = $store->getId();
     if ($this->_type == 'price' && !$this->_scopeConfig->getValue(self::XML_PATH_EMAIL_PRICE_TEMPLATE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId)) {
         return false;
     } elseif ($this->_type == 'stock' && !$this->_scopeConfig->getValue(self::XML_PATH_EMAIL_STOCK_TEMPLATE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId)) {
         return false;
     }
     if ($this->_type != 'price' && $this->_type != 'stock') {
         return false;
     }
     $this->_appEmulation->startEnvironmentEmulation($storeId);
     if ($this->_type == 'price') {
         $this->_getPriceBlock()->setStore($store)->reset();
         foreach ($this->_priceProducts as $product) {
             $product->setCustomerGroupId($this->_customer->getGroupId());
             $this->_getPriceBlock()->addProduct($product);
         }
         $block = $this->_getPriceBlock();
         $templateId = $this->_scopeConfig->getValue(self::XML_PATH_EMAIL_PRICE_TEMPLATE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId);
     } else {
         $this->_getStockBlock()->setStore($store)->reset();
         foreach ($this->_stockProducts as $product) {
             $product->setCustomerGroupId($this->_customer->getGroupId());
             $this->_getStockBlock()->addProduct($product);
         }
         $block = $this->_getStockBlock();
         $templateId = $this->_scopeConfig->getValue(self::XML_PATH_EMAIL_STOCK_TEMPLATE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId);
     }
     $alertGrid = $this->_appState->emulateAreaCode(\Magento\Framework\App\Area::AREA_FRONTEND, [$block, 'toHtml']);
     $this->_appEmulation->stopEnvironmentEmulation();
     $transport = $this->_transportBuilder->setTemplateIdentifier($templateId)->setTemplateOptions(['area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $storeId])->setTemplateVars(['customerName' => $this->_customerHelper->getCustomerName($this->_customer), 'alertGrid' => $alertGrid])->setFrom($this->_scopeConfig->getValue(self::XML_PATH_EMAIL_IDENTITY, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId))->addTo($this->_customer->getEmail(), $this->_customerHelper->getCustomerName($this->_customer))->getTransport();
     $transport->sendMessage();
     return true;
 }
 /**
  * Send email to customer when his password is reset
  *
  * @param CustomerInterface $customer
  * @return $this
  */
 protected function sendPasswordResetNotificationEmail($customer)
 {
     $storeId = $customer->getStoreId();
     if (!$storeId) {
         $storeId = $this->getWebsiteStoreId($customer);
     }
     $customerEmailData = $this->getFullCustomerObject($customer);
     $this->sendEmailTemplate($customer, self::XML_PATH_RESET_PASSWORD_TEMPLATE, self::XML_PATH_FORGOT_EMAIL_IDENTITY, ['customer' => $customerEmailData, 'store' => $this->storeManager->getStore($storeId)], $storeId);
     return $this;
 }
Example #3
0
 /**
  * Send email with new customer password
  *
  * @param CustomerInterface $customer
  * @param string $newPasswordToken
  * @return $this
  */
 public function sendPasswordReminderEmail($customer, $newPasswordToken)
 {
     $this->url->setScope($customer->getStoreId());
     //TODO : Fix how template is built. Maybe Framework Object or create new Email template data model?
     // Check template to see what values need to be set in the data model to be passed
     // Need to set the reset_password_url property of the object
     $store = $this->storeManager->getStore($customer->getStoreId());
     $resetUrl = $this->url->getUrl('customer/account/createPassword', ['_query' => ['id' => $customer->getId(), 'token' => $newPasswordToken], '_store' => $customer->getStoreId(), '_secure' => $store->isFrontUrlSecure()]);
     $customerEmailData = $this->getFullCustomerObject($customer);
     $customerEmailData->setResetPasswordUrl($resetUrl);
     $this->sendEmailTemplate($customer, self::XML_PATH_REMIND_EMAIL_TEMPLATE, self::XML_PATH_FORGOT_EMAIL_IDENTITY, ['customer' => $customerEmailData, 'store' => $store], $customer->getStoreId());
     return $this;
 }
Example #4
0
 /**
  * Send email to customer when his password is reset
  *
  * @param CustomerInterface $customer
  * @return $this
  */
 protected function sendPasswordResetNotificationEmail($customer)
 {
     $storeId = $customer->getStoreId();
     if (!$storeId) {
         $storeId = $this->getWebsiteStoreId($customer);
     }
     $customerEmailData = $this->getFullCustomerObject($customer);
     /** @var \Magento\Framework\Mail\TransportInterface $transport */
     $transport = $this->transportBuilder->setTemplateIdentifier($this->scopeConfig->getValue(self::XML_PATH_RESET_PASSWORD_TEMPLATE, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId))->setTemplateOptions(['area' => \Magento\Framework\App\Area::AREA_FRONTEND, 'store' => $storeId])->setTemplateVars(['customer' => $customerEmailData, 'store' => $this->storeManager->getStore($storeId)])->setFrom($this->scopeConfig->getValue(self::XML_PATH_FORGOT_EMAIL_IDENTITY, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId))->addTo($customer->getEmail(), $this->customerViewHelper->getCustomerName($customer))->getTransport();
     $transport->sendMessage();
     return $this;
 }
 /**
  * Send email to customer when his password is reset
  *
  * @param CustomerInterface $customer
  * @return void
  */
 private function passwordReset(CustomerInterface $customer)
 {
     $storeId = $customer->getStoreId();
     if (!$storeId) {
         $storeId = $this->getWebsiteStoreId($customer);
     }
     $customerEmailData = $this->getFullCustomerObject($customer);
     $this->sendEmailTemplate($customer, self::XML_PATH_RESET_PASSWORD_TEMPLATE, self::XML_PATH_FORGOT_EMAIL_IDENTITY, ['customer' => $customerEmailData, 'store' => $this->storeManager->getStore($storeId)], $storeId);
 }