<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Pimcore\Mail;
use \Pimcore\Model\DataObject;
use Pimcore\Model\DataObject\CustomerAccount;
use Pimcore\Model\DataObject\AvailabilityCountry;
use Symfony\Component\HttpFoundation\Request;
use Pimcore\Model\Document;
use Carbon\Carbon;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\Intl\Intl;
use Symfony\Component\Intl\Countries;
use Pimcore\Model\Asset;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\Session;
// lass AccountController extends \Website\Controller\CartAware
//class AccountController extends FrontendControllerWebsite\Controller\CartAware
class AccountController extends Action
{
public $translator;
public function __construct(TranslatorInterface $translator)
{
$this->translator = $translator;
}
//public function init() {
public function onKernelController(FilterControllerEvent $event)
{
parent::onKernelController($event);
$params = $event->getRequest()->request->all();
//$this->view->preview = $event->getRequest()->get('pimcore_preview');
}
/**
* show Sign In
*/
public function historyAction(Request $request)
{
$data = [];
$data['locale'] = $request->getLocale();
$data['downloaddir'] = realpath("downloads");
// Set Us as default country
$defaultCountry = DataObject\AvailabilityCountry::getByPath('/availability-countries/us');
if (isset($this->country)) {
$availableCountry = $this->country;
} else {
$availableCountry = $defaultCountry;
$data['country'] = $defaultCountry;
}
//$this->layout()->setLayout('account');
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
if ($authNamespace && $authNamespace->has('customeraccount')) {
$data['email'] = $authNamespace->get('customeraccount')->getEmail();
$company = $authNamespace->get('customeraccount')->getCompany();
if ($company) {
$company = $company[0]->getObject();
$data['companyname'] = $company->getCompanyName();
}
$data['accountname'] = $authNamespace->get('customeraccount')->getFirstName() . " " . $authNamespace->get('customeraccount')->getLastName();
$orders = new DataObject\OnlineShopOrder\Listing();
$orders->setCondition(" customer__id = '" . $authNamespace->get('customeraccount')->getId() . "'");
$orders->setOrderKey("orderdate", false);
$orders->setOrder("desc");
$orders->load();
$data['orders'] = $orders;
}
return $this->render('Account/history.html.twig', $data);
}
/**
* show Sign Out
*/
public function signOutAction(Request $request)
{
//$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
if ($authNamespace) {
$authNamespace->remove('customeraccount');
$authNamespace->remove('lastlogindate');
}
//$urlHelper = $this->container->get('pimcore.templating.view_helper.pimcore_url');
$urlHelper = $this->generateUrl('sign-in', array('prefix' => strtolower($request->getLocale())));
return $this->redirect($urlHelper);
}
public function signInAction(Request $request)
{
//**$this->layout()->setLayout('signin');
$this->view->loggedin = false;
//Set the next step if available
$this->view->nextstep = $request->get("ns");
//navigation and breadcrumbs
$this->view->hideNav = true;
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
if ($authNamespace->has('customeraccount')) {
$this->view->loggedin = true;
//echo "Welcome " . $authNamespace->customeraccount->getFirstName() . " " . $authNamespace->customeraccount->getLastName();
//return $this->redirect("/" . $request->getLocale() . "/");
}
p_r($_POST);exit;
if (!empty($_POST)) {
$email = filter_var($request->get("email"), FILTER_VALIDATE_EMAIL);
$password = htmlspecialchars($request->get("password"), ENT_QUOTES, 'UTF-8');
$customeraccounts = new DataObject\CustomerAccount\Listing();
$customeraccounts->setCondition(" email = ? AND password = ? AND o_published = 1", array($email, md5($password)));
$customeraccounts->load();
foreach ($customeraccounts as $customeraccount) {
break;
}
if ($customeraccount) {
$authNamespace->get('lastlogindate', $customeraccount->getLastLoginDate());
$date = Carbon::now();
$customeraccount->setLastLoginDate($date);
$customeraccount->save();
$authNamespace->set('customeraccount', $customeraccount);
//get country availability. If not assigned, default to united-states
$defaultUserCountry = $customeraccount->geteSpiritsCountryAvailabilityList();
if ($defaultUserCountry) {
$defaultUserCountry = $defaultUserCountry[0]->getObject();
} else {
$defaultUserCountry = DataObject\AvailabilityCountry::getByPath("/availability-countries/us");
$this->view->country = $defaultUserCountry;
}
$defaulteSpirits = strtolower($defaultUserCountry->geteSpiritsLanguageSiteList()[0]);
$authNamespace->defaultUserCountry = $defaultUserCountry;
$authNamespace->defaulteSpirits = $defaulteSpirits;
if ($request->get("ns") && $request->get("ns") == "confirm") {
return $this->redirect($this->view->url(array("prefix" => $defaulteSpirits, 'action' => 'confirm'), 'checkout', true));
} else {
return $this->redirect($defaulteSpirits . "/");
}
} else {
$this->view->errormessage = $this->get('translator')->trans("espirits.login.incorrect-password");
}
}
return $this->renderTemplate('Account/signIn.html');
}
/**
* forgot password
*/
public function forgotPasswordAction(Request $request)
{
$data['locale'] = $request->getLocale();
$data['errormessage'] = '';
$data['editpassword'] = 0;
//$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
if (($authNamespace->has('forgotpasswordedit')) && $authNamespace->get('forgotpasswordedit') == 1) {
$data['editpassword'] = 1;
}
//Check if the email exists
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = filter_var($request->get("email"), FILTER_VALIDATE_EMAIL);
$password = htmlspecialchars($request->get("password"), ENT_QUOTES, 'UTF-8');
$passwordverify = htmlspecialchars($request->get("passwordverify"), ENT_QUOTES, 'UTF-8');
if ($email && !empty($email)) {
$customeraccount = DataObject\CustomerAccount::getByEmail($email, 1);
if ($customeraccount) {
//Send the email to reset password
$code = substr(md5($email . rand(6, 20) . $email), 0, 6);
$authNamespace->set('forgotpasswordauthenticationcode', $code);
$authNamespace->set('email', $email);
$authNamespace->set('customername', htmlentities($customeraccount->getFirstName(), ENT_QUOTES, 'UTF-8') . " " . htmlentities($customeraccount->getLastName(), ENT_QUOTES, 'UTF-8'));
$data['locale'] = $request->getLocale() == 'en' ? 'en_us' : $request->getLocale();
$this->SendTempCode($data['locale'], $email, "/espirits/" . $data['locale'] . "/emails/password-reset");
$url = $this->generateUrl('authentication-code', array('prefix' => strtolower($data['locale'])));
return $this->redirect($url);
} else {
$errorMessage = $this->translator->trans("espirits.login.no-email");
$errorMessage = str_replace("register", '<a href="/' . $request->getLocale() . '/account/register">register</a>', $errorMessage);
$data['errormessage'] = $errorMessage;
}
} else if ($password && !empty($password)) {
if ($password != $passwordverify) {
$data['errormessage'] = $this->translator->trans("espirits.login.password-match");
return $this->redirect("/en_us/account/forgot-password");
} else {
$customeraccount = DataObject\CustomerAccount::getByEmail($authNamespace->get('email'), 1);
if ($customeraccount) {
$customeraccount->setPassword($password);
$customeraccount->save();
$authNamespace->remove('forgotpasswordedit');
$authNamespace->set('authenticated', 1);
$authNamespace->set('customeraccountid', $customeraccount->getO_id());
$authNamespace->set('customeraccountname', htmlentities($customeraccount->getFirstName(), ENT_QUOTES, 'UTF-8') . " " . htmlentities($customeraccount->getLastName(), ENT_QUOTES, 'UTF-8'));
//Send them to account page
$data['locale'] = $request->getLocale() == 'en' ? 'en_us' : $request->getLocale();
$url = $this->generateUrl('product-landing', array('prefix' => strtolower($data['locale'])));
return $this->redirect($url);
//return $this->redirect( $this->view->url(["prefix" => $request->getLocale()], "product-landing", true) );
}
}
}
}
return $this->render('Account/forgotPassword.html.twig', $data);
}
public function authenticationCodeAction(Request $request)
{
//**$this->layout()->setLayout('signin');
$data['locale'] = $request->getLocale();
$data['errormessage'] = '';
$data['loggedin'] = '';
$data['nextstep'] = '';
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
if (!empty($_POST)) {
if (($authNamespace->has('forgotpasswordauthenticationcode'))) {
$authenticationcode = $request->get("authenticationcode");
if ($authNamespace->get('forgotpasswordauthenticationcode') == $authenticationcode) {
$authNamespace->set('forgotpasswordedit', 1);
$authNamespace->remove('forgotpasswordauthenticationcode');
$data['locale'] = $request->getLocale() == 'en' ? 'en_us' : $request->getLocale();
$url = $this->generateUrl('forgot-password', array('prefix' => $data['locale']));
return $this->redirect($url);
} else {
$data['errormessage'] = $this->translator->trans("espirits.login.authentication-invalid");
}
} else {
$data['errormessage'] = $this->translator->trans("espirits.login.authentication-expired");
}
}
return $this->render('Account/authenticationCode.html.twig', $data);
}
protected function SendTempCode($locale, $email)
{
$mail = new Mail();
$mail->setIgnoreDebugMode(true);
$mail->addTo($email);
$mail->subject($this->translator->trans("espirits.login.reset-email.subject"));
//$mail->setDefaultFrom("contact@beamsuntory.com","Forgot Password");
$locale == 'en' ? $locale = 'en_us' : $locale;
$emailDocument = Document::getByPath("/espirits/" . $locale . "/emails/authentication-code");
$mail->setDocument($emailDocument);
$mail->send();
}
public function emailAuthenticationCodeAction(Request $request)
{
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
$params['authenticationcode'] = $authNamespace->get('forgotpasswordauthenticationcode');
$params['customername'] = $authNamespace->get('customername');
return $this->render('Account/emailAuthenticationCode.html.twig', $params);
}
public function emailPasswordResetAction(Request $request)
{
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
$data['authenticationcode'] = $authNamespace->get('forgotpasswordauthenticationcode');
$data['customername'] = $authNamespace->get('customername');
return $this->render('Account/emailPasswordReset.html.twig', $data);
}
/**
* forgot password
*/
public function resetPasswordAction(Request $request)
{
$data = [];
$data['locale'] = $request->getLocale();
$data['errormessage'] = '';
$data['country'] = $this->country;
// Set Us as default country
$defaultCountry = DataObject\AvailabilityCountry::getByPath('/availability-countries/us');
if (isset($this->country)) {
$availableCountry = $this->country;
} else {
$availableCountry = $defaultCountry;
$data['country'] = $defaultCountry;
}
//$this->layout()->setLayout('account');
//$this->enableLayout();
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
if ($authNamespace && $authNamespace->has('customeraccount')) {
$data['loggedin'] = true;
//Check if the email exists
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = $authNamespace->get('customeraccount')->getEmail();
$currentpassword = htmlspecialchars($request->get("currentpassword"), ENT_QUOTES, 'UTF-8');
$password = htmlspecialchars($request->get("password"), ENT_QUOTES, 'UTF-8');
$passwordverify = htmlspecialchars($request->get("passwordverify"), ENT_QUOTES, 'UTF-8');
$customeraccounts = new DataObject\CustomerAccount\Listing();
$customeraccounts->setCondition(" email = ? AND password = ? AND o_published = 1", array($email, md5($currentpassword)));
$customeraccounts->load();
foreach ($customeraccounts as $customeraccount) {
break;
}
if (!$customeraccount) {
$data['errormessage'] = $this->translator->trans("espirits.login.password-incorrect");
} else {
if ($password && !empty($password)) {
if ($password != $passwordverify) {
$data['errormessage'] = $this->translator->trans("espirits.login.password-match");
} else {
if ($customeraccount) {
$customeraccount->setPassword($password);
$customeraccount->save();
//Send them to account page
return $this->redirect("/" . strtolower($request->getLocale()) . "/account/history");
}
}
} else {
$data['errormessage'] = $this->translator->trans("espirits.login.password-empty");
}
}
}
return $this->render('Account/resetPassword.html.twig', $data);
}
}
/**
* show Sign Up
*/
public function signUpAction(Request $request)
{
//Set the layout
#$this->layout()->setLayout('signin');
#$this->enableLayout();
$this->view->loggedin = false;
$this->view->signup = true;
//Set the next step if available
$this->view->nextstep = $request->get("ns");
//navigation and breadcrumbs
$this->view->hideNav = true;
//Set the auth namespace
$session = $this->get('session');
$authNamespace = $session->getBag('espirit');
if ($authNamespace->get('customeraccount')) {
$this->view->loggedin = true;
return $this->redirect("/" . $request->getLocale() . "/");
return;
}
//If the post is not empty set up the account
if (!empty($_POST)) {
$firstName = htmlentities($request->get("firstName"), ENT_QUOTES, 'UTF-8');
$lastName = htmlentities($request->get("lastName"), ENT_QUOTES, 'UTF-8');
$email = htmlentities($request->get("email"), ENT_QUOTES, 'UTF-8');
$companyName = htmlentities($request->get("companyName"), ENT_QUOTES, 'UTF-8');
$country = htmlentities($request->get("country"), ENT_QUOTES, 'UTF-8');
$password = htmlspecialchars($request->get("password"), ENT_QUOTES, 'UTF-8');
$customeraccounts = new DataObject\CustomerAccount\Listing();
$customeraccounts->setCondition(" email = ? AND o_published = 1 ", array($email));
$customeraccounts->load();
if (count($customeraccounts) > 0) {
$this->view->errormessage = $$this->translator->trans("espirits.register.email-already-exists");
return;
} else {
//Now create the account under the country
//Set up the new customer account
$customeraccount = new DataObject\CustomerAccount();
$key = \Pimcore\File::getValidFilename(strtolower($email));
$customeraccount->setKey($key);
//get the sso folder to save accounts
$ssofolder = Databject\Folder::getByPath("/customer-accounts/" . strtolower($country));
$customeraccount->setParentId($ssofolder->getId());
$customeraccount->setCreationDate(time());
//Set the company as file metadata
$customeraccount->setCompanyName($companyName);
$customeraccount->setfirstName($firstName);
$customeraccount->setlastName($lastName);
$customeraccount->setemail($email);
$customeraccount->setpassword($password);
//Set the Country
//Set the country
$countries = new DataObject\AvailabilityCountry\Listing();
if ($countries) {
foreach ($countries as $eachcountry) {
if ($eachcountry->getCountry() == $country) {
//Set the country as file metadata
$countryArray = [];
$countryMetadata = new DataObject\Data\ObjectMetadata('AvailabilityCountry', [], $eachcountry);
$countryArray[] = $countryMetadata;
$customeraccount->seteSpiritsCountryAvailabilityList($countryArray);
}
}
}
$customeraccount->save();
//Sign up done, show the msg
$this->view->signup = false;
}
}
$esCountry = [];
$countries = new DataObject\AvailabilityCountry\Listing();
$countries->setCondition(" eSpiritsEnable = 1 AND o_published = 1 ");
$countries->load();
foreach ($countries as $country) {
$esCountry[] = ["value" => $country->getCountry(), "name" => $country->getAltName()];
}
$this->view->esCountries = $esCountry;
}
/**
* @Route("/saml2/auth")
*/
public function azSignInAction(Request $request)
{
$adminSessions = new Session();
//Check for saml response
if ($_POST["SAMLResponse"]) {
$samlXml = base64_decode($_POST["SAMLResponse"]);
$samlObj = simplexml_load_string($samlXml);
try {
$xmlDoc = new \DOMDocument();
$xmlDoc->loadXML($samlXml);
$xpath = new \DOMXPath($xmlDoc);
$xpath->registerNamespace('secdsig', 'http://www.w3.org/2000/09/xmldsig#');
// fetch Signature node from XML
$query = ".//secdsig:Signature";
$nodeset = $xpath->query($query, $xmlDoc);
$signatureNode = $nodeset->item(0);
// fetch SignedInfo node from XML
$query = "./secdsig:SignedInfo";
$nodeset = $xpath->query($query, $signatureNode);
$signedInfoNode = $nodeset->item(0);
// canonicalize SignedInfo using the method descried in
// ./secdsig:SignedInfo/secdsig:CanonicalizationMethod/@Algorithm
$signedInfoNodeCanonicalized = $signedInfoNode->C14N(true, false);
// fetch the x509 certificate from XML
$query = 'string(./secdsig:KeyInfo/secdsig:X509Data/secdsig:X509Certificate)';
$x509cert = $xpath->evaluate($query, $signatureNode);
// we have to re-wrap the certificate from XML to respect the PEM standard
$localcert = file_get_contents(__DIR__ . '/secrets/PimCore.cer');
// fetch public key from x509 certificate
$publicKey = openssl_get_publickey($localcert);
// fetch the signature from XML
$query = 'string(./secdsig:SignatureValue)';
$signature = base64_decode($xpath->evaluate($query, $signatureNode));
// verify the signature
$ok = openssl_verify($signedInfoNodeCanonicalized, $signature, $publicKey, "sha256");
} catch (Exception $e) {
}
//Get the name and email address
if ($ok && $samlObj->Assertion->AttributeStatement) {
foreach ($samlObj->Assertion->AttributeStatement->Attribute as $attr) {
switch ($attr["Name"]) {
case "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname":
$firstname = (string)$attr->AttributeValue;
break;
case "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname":
$lastname = (string)$attr->AttributeValue;
break;
case "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress":
$email = (string)$attr->AttributeValue;
break;
case "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country":
$country = (string)$attr->AttributeValue;
break;
}
}
$new = 0;
$country = "us";
//Set the customer account now, if we cannot find by email
$customeraccount = DataObject\CustomerAccount::getByEmail($email, 1);
if (!$customeraccount) {
//Set up the new customer account
$customeraccount = new DataObject\CustomerAccount();
$key = \Pimcore\File::getValidFilename(strtolower($email));
$customeraccount->setKey($key);
//get the sso folder to save accounts
$ssofolder = DataObject\CustomerCompany::getByPath("/customer-accounts/sso");
$customeraccount->setParentId($ssofolder->getId());
$customeraccount->setCreationDate(time());
//Set the company as file metadata
$companyArray = [];
$companyMetadata = new DataObject\Data\ObjectMetadata('company', [], $ssofolder);
$companyArray[] = $companyMetadata;
$customeraccount->setCompany($companyArray);
$new = 1;
} else {
$customeraccount->seteSpiritsCountryAvailabilityList([]);
}
//Set the country
$countries = new DataObject\AvailabilityCountry\Listing();
if ($countries) {
foreach ($countries as $eachcountry) {
if ($eachcountry->getName() == $this->getShortCountryName($country)) {
//Set the country as file metadata
$countryArray = [];
$countryMetadata = new DataObject\Data\ObjectMetadata('AvailabilityCountry', [], $eachcountry);
$countryArray[] = $countryMetadata;
$customeraccount->seteSpiritsCountryAvailabilityList($countryArray);
}
}
}
//Set the values and publish
$customeraccount->setPublished(true);
$customeraccount->setFirstName($firstname);
$customeraccount->setLastName($lastname);
$customeraccount->setCountry($this->getShortCountryName($country));
$customeraccount->setEmail($email);
$date = Carbon::now();
$customeraccount->setLastLoginDate($date);
$customeraccount->save();
if ($new == 1) {
// Disable email sending
//$this->approveAccountAction($customeraccount->getId());
}
// p_r($customeraccount);exit;
//Set up the zend auth for session details
$session = $request->getSession();
$authNamespace = $session->getBag('espirit');
if ($customeraccount) {
$authNamespace->get('lastlogindate', $customeraccount->getLastLoginDate());
$date = Carbon::now();
$customeraccount->setLastLoginDate($date);
$customeraccount->save();
$authNamespace->set('customeraccount', $customeraccount);
//get country availability. If not assigned, default to united-states
$defaultUserCountry = $customeraccount->geteSpiritsCountryAvailabilityList();
if ($defaultUserCountry) {
$defaultUserCountry = $defaultUserCountry[0]->getObject();
} else {
$defaultUserCountry = DataObject\AvailabilityCountry::getByPath("/availability-countries/us");
//$this->view->country = $defaultUserCountry;
}
$defaulteSpirits = strtolower($defaultUserCountry->geteSpiritsLanguageSiteList()[0]);
$authNamespace->defaultUserCountry = $defaultUserCountry;
$authNamespace->defaulteSpirits = $defaulteSpirits;
setcookie('customeraccount', $customeraccount, time() + 5, "/");
setcookie('defaultUserCountry', $defaultUserCountry, time() + 5, "/");
setcookie('defaulteSpirits', $defaulteSpirits, time() + 5, "/");
if ($request->get("ns") && $request->get("ns") == "confirm") {
return $this->redirect($this->view->url(array("prefix" => $defaulteSpirits, 'action' => 'confirm'), 'checkout', true));
} else {
return $this->redirect($defaulteSpirits);
}
}
}
}
return $this->redirect("/");
}
private function getShortCountryName($country)
{
switch ($country) {
case "United States":
return "US";
case "Germany":
return "DE";
case "France":
return "FR";
}
}
/**
* sign-in-sso
*/
public function signInSsoAction(Request $request)
{
$session = $request->getSession();
$data['locale'] = strtolower($request->getLocale());
$data['errormessage'] = '';
#$this->layout()->setLayout('signin');
#$this->enableLayout();
$data['loggedin'] = false;
//$this->view->loggedin = false;
//Set the next step if available
//$this->view->nextstep = $request->get("ns");
$data['nextstep'] = $request->get("ns");
//navigation and breadcrumbs
//$this->view->hideNav = true;
$data['hideNav'] = true;
//$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$authNamespace = $session->getBag('espirit');
if ($authNamespace->has('customeraccount')) {
$data['loggedin'] = true;
return $this->redirect("/" . strtolower($request->getLocale()) . "/");
}
if (!empty($_POST)) {
$email = filter_var($request->get("email"), FILTER_VALIDATE_EMAIL);
$password = htmlspecialchars($request->get("password"), ENT_QUOTES, 'UTF-8');
$customeraccounts = new DataObject\CustomerAccount\Listing();
$customeraccounts->setCondition(" email = ? AND password = ? AND o_published = 1", array($email, md5($password)));
$customeraccounts->load();
$customerData = $customeraccounts->getData();
$customeraccount = (!empty($customerData)) ? $customerData[0] : null;
if ($customeraccount) {
$authNamespace->set('lastlogindate', $customeraccount->getLastLoginDate());
$date = Carbon::now();
$customeraccount->setLastLoginDate($date);
$customeraccount->save();
$authNamespace->set('customeraccount', $customeraccount);
//get country availability. If not assigned, default to united-states
$defaultUserCountry = $customeraccount->geteSpiritsCountryAvailabilityList();
if ($defaultUserCountry) {
$defaultUserCountry = $defaultUserCountry[0]->getObject();
} else {
$defaultUserCountry = DataObject\AvailabilityCountry::getByPath("/availability-countries/us");
}
$defaulteSpirits = $defaultUserCountry->geteSpiritsLanguageSiteList()[0];
$authNamespace->set('defaultUserCountry', $defaultUserCountry);
$authNamespace->set('defaulteSpirits', $defaulteSpirits);
if ($request->get("ns") && $request->get("ns") == "confirm") {
$urlHelper = \Pimcore::getContainer()->get('pimcore.templating.view_helper.pimcore_url');
return $this->redirect($urlHelper(array("prefix" => $defaulteSpirits, 'action' => 'confirm'), 'checkout', true));
} else {
return $this->redirect($defaulteSpirits . "/");
}
} else {
$data['errormessage'] = $this->translator->trans("espirits.login.incorrect-password");
return $this->redirect("/en_us/account/sign-in");
}
}
return $this->render('Account/signInSso.html.twig', $data);
}
/**
* register
*/
public function registerAction(Request $request)
{
$data['locale'] = strtolower($request->getLocale());
$data['loggedin'] = false;
$data['errormessage'] = '';
$data['errorfield'] = '';
$data['firstname'] = '';
$data['lastname'] = '';
$data['email'] = '';
$data['company'] = '';
$data['country'] = '';
//get available countries
$countriesView = [];
$x = 0;
$countries = new DataObject\AvailabilityCountry\Listing();
$countries->setCondition(" eSpiritsEnable = 1 "); // probably need a new flag for registerEnable on the object
$countries->load();
foreach ($countries as $enabledCountry) {
if ($enabledCountry->getAltCode()) {
$countriesView[$x]["Value"] = $enabledCountry->getAltCode();
$countriesView[$x]["Name"] = $enabledCountry->getAltName();
} else {
$countriesView[$x]["Value"] = $enabledCountry->getCountry();
$countriesView[$x]["Name"] = Countries::getName($enabledCountry->getName());
}
if ($request->getLocale() == $enabledCountry->getKey()) {
$countriesView[$x]["Selected"] = "Selected";
}
$countriesView[$x]["Icon"] = $enabledCountry->getFlagIconImage();
$x++;
}
$data['countries'] = $countriesView;
//If the post is not empty set up the account
if (!empty($_POST)) {
//Set the view properties and local variables
$firstName = $data['firstname'] =
htmlentities(
$request->get("firstname"),
ENT_QUOTES,
'UTF-8'
);
$lastName = $data['lastname'] =
htmlentities(
$request->get("lastname"),
ENT_QUOTES,
'UTF-8'
);
$email = $data['email'] = filter_var($request->get("email"), FILTER_VALIDATE_EMAIL);
$companyName = $data['company'] =
htmlentities(
$request->get("company"),
ENT_QUOTES,
'UTF-8'
);
$country = $data['country'] =
htmlentities(
$request->get("country"),
ENT_QUOTES,
'UTF-8'
);
$password = htmlspecialchars($request->get("createpassword"), ENT_QUOTES, 'UTF-8');
$verifypassword = htmlspecialchars($request->get("verifypassword"), ENT_QUOTES, 'UTF-8');
//Check email validation
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$data['errorfield'] = "email";
$data['errormessage'] = $this->translator->trans("espirits.register.email-invalid");
return;
}
//Check for password similarity check
if ($password != $verifypassword) {
$data['errorfield'] = "password";
$data['errormessage'] = $this->translator->trans("espirits.register.passwords-dont-match");
return;
}
//Password requirement checks
$passwordRegEx = "/^(?=.*[A-Z])(?=.*\d)[a-zA-Z\d\W]{8,}$/";
if (!preg_match($passwordRegEx, $password)) {
$data['errorfield'] = "password";
$data['errormessage'] = $this->translator->trans("espirits.register.password-requirement-error");
return;
}
//Check company name
if (strlen($companyName) < 3) {
$data['errorfield'] = "companyName";
$data['errormessage'] = $this->translator->trans("espirits.register.company-requirement-error");
return;
}
//Start creating the customer account and make sure NOT TO PUBLISH
$customeraccounts = new DataObject\CustomerAccount\Listing();
$customeraccounts->setUnpublished(true);
$customeraccounts->setCondition(" email = ? AND o_published = 1 ", array($email));
$customeraccounts->load();
if (count($customeraccounts) > 0) {
//Email address already exists.
$errorMessage = $this->translator->trans("espirits.register.email-already-exists");
$errorMessage = str_replace("login", '<a href="/' . $request->getLocale() . '/account/sign-in">login</a>', $errorMessage);
$errorMessage = str_replace("reset", '<a href="/' . $request->getLocale() . '/account/forgot-password">reset</a>', $errorMessage);
$data['errormessage'] = $errorMessage;
$data['errorfield'] = "email";
return;
} else {
//Now create the account under the country
//Set up the new customer account
$customeraccount = new DataObject\CustomerAccount();
$key = \Pimcore\File::getValidFilename(strtolower($email));
$customeraccount->setKey($key);
//get the sso folder to save accounts
$ssofolder = DataObject\Folder::getByPath("/customer-accounts/" . strtolower($country));
$customeraccount->setParentId($ssofolder->getId());
$customeraccount->setCreationDate(time());
//Set the company as file metadata
$customeraccount->setCompanyName($companyName);
$customeraccount->setfirstName($firstName);
$customeraccount->setlastName($lastName);
$customeraccount->setemail($email);
$customeraccount->setpassword($password);
//Set the Country
//Set the country
$countries = new DataObject\AvailabilityCountry\Listing();
if ($countries) {
foreach ($countries as $eachcountry) {
if ($eachcountry->getCountry() == $country) {
//Set the country as file metadata
$countryArray = [];
$countryMetadata = new DataObject\Data\ObjectMetadata('AvailabilityCountry', [], $eachcountry);
$countryArray[] = $countryMetadata;
$customeraccount->seteSpiritsCountryAvailabilityList($countryArray);
}
}
}
$customeraccount->setPublished(false);
$customeraccount->save();
//Send the admin Email, Disable for now
//$this->approveAccountAction($customeraccount->getId());
/*
//if (strrpos($customeraccount->getPath(),"/de/") > 0) {
//Send the confirmation email
} else {
$this->sendPendingAccountEmail($customeraccount);
}
*/
//Sign up done, show the msg
return $this->redirect("/" . strtolower($request->getLocale()) . "/account/register-confirm");
}
}
return $this->render('Account/register.html.twig', $data);
//$this->renderTemplate("Account/register.html.php");
}
/**
* register-confirm
*/
public function registerConfirmAction(Request $request)
{
//Set the layout and enable it
//$this->layout()->setLayout('signin');
//$this->enableLayout();
$data['locale'] = strtolower($request->getLocale());
$data['loggedin'] = false;
$data['errormessage'] = false;
$data['nextstep'] = false;
return $this->render('Account/signIn.html.twig', $data);
}
/**
* email-approve-account
*/
public function emailApproveAccountAction(Request $request)
{
}
/**
* approve-account
*/
public function approveAccountAction(/*Request $request,*/$id = null)
{
//if ($request->get("id")) {
// $id = $request->get("id");
//}
$customerAccount = DataObject\CustomerAccount::getById($id, 1);
if ($customerAccount) {
$mail = new Mail();
$mail->setIgnoreDebugMode(true);
$mail->addTo($customerAccount->getEmail());
$mail->subject($this->translator->trans("espirits.login.approve-account.subject"));
//$mail->setDefaultFrom("contact@beamsuntory.com","Forgot Password");
if ($customerAccount->geteSpiritsCountryAvailabilityList()[0] == '/availability-countries/us' || !$customerAccount->geteSpiritsCountryAvailabilityList()[0]) {
$emailPath = "/espirits/en_us/emails/approve-account";
$downloadInstructions = Asset::getByPath("/espirits/how-to/en_us/download-instructions.pdf");
if ($downloadInstructions) {
$mail->attach($downloadInstructions->getData(), $downloadInstructions->getType(), "eSpirits Download Instructions.pdf");
}
$espiritsPortal = Asset::getByPath("/espirits/how-to/en_us/espirits-portal.pdf");
if ($espiritsPortal) {
$mail->attach($espiritsPortal->getData(), $espiritsPortal->getType(), "eSpirits Portal.pdf");
}
} else if ($customerAccount->geteSpiritsCountryAvailabilityList()[0] == '/availability-countries/de') {
$emailPath = "/espirits/de/emails/approve-account";
}
//$docPath = substr($_SERVER["REQUEST_URI"],0, strrpos($_SERVER["REQUEST_URI"],"?"));
//$docPath = str_replace("/account","/emails",$docPath);
$emailDocument = Document::getByPath($emailPath);
$mail->setDocument($emailDocument);
$mail->send();
}
return;
}
/**
* email-approve-account
*/
public function sendPendingAccountEmail($customeraccount)
{
//set the email doc path
$emailPath = "/espirits/en_us/emails/pending-account";
if (strrpos($customeraccount->getPath(), "/de/") > 0) {
$emailPath = "/espirits/de/emails/pending-account";
}
//Set the params
$params = array(
'firstName' => $customeraccount->getFirstname(),
'lastName' => $customeraccount->getLastname(),
'email' => $customeraccount->getEmail(),
'link' => 'https://' . $_SERVER["HTTP_HOST"] . '/admin/login/deeplink?object_' . $customeraccount->getId() . '_object'
);
//Send the email now
$mail = new Mail();
$mail->setIgnoreDebugMode(true);
$emailDocument = Document::getByPath($emailPath);
$mail->setDocument($emailDocument);
$mail->setParams($params);
$mail->send();
}
}