Skip to content
Browse files

Merge branch 'hotfix/stable_compat'

  • Loading branch information...
2 parents 73db3aa + 4f81607 commit c68f149e3dc04768d4eef21b6a6239fd1d5d9ac4 @adamlundrigan adamlundrigan committed Oct 24, 2012
View
10 Module.php
@@ -37,9 +37,6 @@ public function getConfig($env = null)
public function getServiceConfig()
{
return array(
- 'invokables' => array(
- 'cdlitwostagesignup_ev_form' => 'CdliTwoStageSignup\Form\EmailVerification',
- ),
'factories' => array(
'cdlitwostagesignup_module_options' => function($sm) {
$config = $sm->get('Configuration');
@@ -68,11 +65,18 @@ public function getServiceConfig()
'cdlitwostagesignup_ev_service' => function($sm) {
$obj = new Service\EmailVerification();
$obj->setEmailVerificationMapper($sm->get('cdlitwostagesignup_ev_modelmapper'));
+ $obj->setEmailVerificationForm($sm->get('cdlitwostagesignup_ev_form'));
$obj->setMessageRenderer($sm->get('Zend\View\Renderer\PhpRenderer'));
$obj->setMessageTransport($sm->get('Zend\Mail\Transport\Sendmail'));
$obj->setEmailMessageOptions($sm->get('cdlitwostagesignup_module_options'));
return $obj;
},
+ 'cdlitwostagesignup_ev_form' => function($sm) {
+ $obj = new Form\EmailVerification();
+ $obj->setHydrator(new Mapper\EmailVerificationHydrator());
+ $obj->setInputFilter($sm->get('cdlitwostagesignup_ev_filter'));
+ return $obj;
+ },
'cdlitwostagesignup_ev_filter' => function($sm) {
return new Form\EmailVerificationFilter(
new ZfcUserUniqueEmailValidator(array(
View
4 config/module.config.php
@@ -40,12 +40,12 @@
'step2' => array(
'type' => 'Regex',
'options' => array(
- 'regex' => '/step2/token/(?<token>[A-F0-9]+)',
+ 'regex' => '/step2/(?<token>[A-F0-9]+)',
'defaults' => array(
'controller' => 'cdlitwostagesignup_ev_controller',
'action' => 'check-token',
),
- 'spec' => '/step2/token/%token%',
+ 'spec' => '/step2/%token%',
),
),
),
View
185 src/CdliTwoStageSignup/Controller/RegisterController.php
@@ -2,134 +2,143 @@
namespace CdliTwoStageSignup\Controller;
-use Zend\Mvc\Controller\AbstractActionController,
- Zend\Http\Response,
- Zend\View\Model\ViewModel,
- CdliTwoStageSignup\Form\EmailVerification as EvrForm,
- CdliTwoStageSignup\Form\EmailVerificationFilter as EvrFilter,
- CdliTwoStageSignup\Entity\EmailVerification as EvrModel,
- CdliTwoStageSignup\Service\EmailVerification as EvrService;
+use Zend\Mvc\Controller\AbstractActionController;
+use Zend\Http\Response;
+use Zend\View\Model\ViewModel;
+use CdliTwoStageSignup\Form\EmailVerification as EvrForm;
+use CdliTwoStageSignup\Form\EmailVerificationFilter as EvrFilter;
+use CdliTwoStageSignup\Entity\EmailVerification as EvrModel;
+use CdliTwoStageSignup\Service\EmailVerification as EvrService;
+use ZfcUser\Options\ModuleOptions as ZfcUserOptions;
class RegisterController extends AbstractActionController
{
protected $emailVerificationForm = NULL;
- protected $emailVerificationFilter = NULL;
protected $emailVerificationService = NULL;
+ protected $zfcUserOptions = NULL;
public function emailVerificationAction()
{
- $this->getEmailVerificationService()->cleanExpiredVerificationRequests();
-
+ $service = $this->getEmailVerificationService();
$form = $this->getEmailVerificationForm();
- $form->setInputFilter($this->getEmailVerificationFilter());
- if ( $this->getRequest()->isPost() )
- {
- $form->setData($this->getRequest()->getPost());
- if ( $form->isValid() )
- {
- $service = $this->getEmailVerificationService();
- $model = $service->createFromForm($form);
- $service->sendVerificationEmailMessage($model);
-
- $vm = new ViewModel(array('record' => $model));
- $vm->setTemplate('cdli-twostagesignup/email-verification/sent');
- return $vm;
- }
- }
- // Render the form
- $vm = new ViewModel(array(
+ $service->cleanExpiredVerificationRequests();
+
+ // Render the form page for rendering
+ $formViewModel = new ViewModel(array(
'form' => $form,
- 'enableRegistration' => $this->getServiceLocator()->get('zfcuser_module_options')->getEnableRegistration()
+ 'enableRegistration' => $this->getZfcUserOptions()->getEnableRegistration()
));
- $vm->setTemplate('cdli-twostagesignup/email-verification/form');
+ $formViewModel->setTemplate('cdli-twostagesignup/email-verification/form');
+
+ // Process form submissions using the POST-Redirect-GET (PRG) plugin
+ $prg = $this->prg($this->url()->fromRoute('zfcuser/register'), true);
+ if ($prg instanceof Response) {
+ return $prg;
+ } elseif ($prg === false) {
+ return $formViewModel;
+ }
+
+ // Attempt to process the form
+ $form->setData($prg);
+ $model = $service->createFromForm($form);
+ if (!$model) {
+ return $formViewModel;
+ }
+ $service->sendVerificationEmailMessage($model);
+
+ $vm = new ViewModel(array('record' => $model));
+ $vm->setTemplate('cdli-twostagesignup/email-verification/sent');
return $vm;
}
public function checkTokenAction()
{
- $this->getEmailVerificationService()->cleanExpiredVerificationRequests();
+ $service = $this->getEmailVerificationService();
+ $events = $this->getServiceLocator()->get('SharedEventManager');
+ $service->cleanExpiredVerificationRequests();
+
+ // Pull and validate the Request Key
$token = $this->plugin('params')->fromRoute('token');
$validator = new \Zend\Validator\Hex();
- if ( $validator->isValid($token) )
+ if ( !$validator->isValid($token) ) {
+ throw new \InvalidArgumentException('Invalid Token!');
+ }
+
+ // Find the request key in ze database
+ $model = $service->findByRequestKey($token);
+ if ( ! $model instanceof EvrModel ) {
+ throw new \InvalidArgumentException('Invalid Token!');
+ }
+
+ // Listen for registration completion and delete the email verification record if the
+ // user account was registered successfully
+ $events->attach('ZfcUser\Service\User', 'register.post', function($e) use ($service, $model) {
+ $user = $e->getParam('user');
+ if ($user instanceof \ZfcUser\Entity\UserInterface && !is_null($user->getID())) {
+ $service->remove($model);
+ }
+ });
+
+
+ // Ensure that the email address wasn't changed on the client side before POSTing
+ if ($this->getRequest()->isPost()) {
+ $this->getRequest()->getPost()->set('email', $model->getEmailAddress());
+ }
+
+ // Hook into existing form processing logic
+ $vm = $this->forward()->dispatch('zfcuser', array('action' => 'register'));
+ if ( $vm instanceof Response )
{
- $model = $this->getEmailVerificationService()->findByRequestKey($token);
- if ( $model instanceof EvrModel )
- {
- $locator = $this->getServiceLocator();
- $formAction = $this->url()->fromRoute('zfcuser/register/step2', array('token'=>$model->getRequestKey()));
-
- // Listen for the form's init event
- $events = \Zend\EventManager\StaticEventManager::getInstance();
- $events->attach('ZfcUser\Form\Register','init', function($e) use ($model) {
- $form = $e->getTarget();
- $form->get('email')->setLabel('')->setAttributes(array(
- 'type' => 'hidden',
- 'value' => $model->getEmailAddress(),
- ));
- });
-
- // Listen for registration completion and delete the email verification record
- $service = $this->getEmailVerificationService();
- $zfcServiceEvents = $locator->get('zfcuser_user_service')->getEventManager();
- $zfcServiceEvents->attach('register', function($e) use ($service, $model) {
- $service->remove($model);
- });
-
- // Hook into existing form processing logic
- $vm = $this->forward()->dispatch('zfcuser', array('action' => 'register'));
- if ( $vm instanceof Response )
- {
- $zfcUserAction = $this->url()->fromRoute('zfcuser/register');
- $stepTwoRoute = $this->url()->fromRoute('zfcuser/register/step2', array('token' => $token));
-
- // Intercept form validation failure redirects from ZfcUser
- $allHeaders = $this->getResponse()->getHeaders();
- $locationHeader = $allHeaders->get('Location');
- if ( $locationHeader->getUri() == $zfcUserAction ) {
- $locationHeader->setUri($stepTwoRoute);
- }
- return $vm;
- }
-
- // Defeat ZfcUser's attempt to render it's own view script
- $vm->setVariable('formAction', $formAction);
- $vm->setVariable('record', $model);
- $vm->setTemplate('cdli-twostagesignup/register');
- return $vm;
+ $zfcUserAction = $this->url()->fromRoute('zfcuser/register');
+ $stepTwoRoute = $this->url()->fromRoute('zfcuser/register/step2', array('token' => $token));
+
+ // Intercept form validation failure redirects from ZfcUser and change the URI
+ // to point to this controller action
+ $allHeaders = $this->getResponse()->getHeaders();
+ $locationHeader = $allHeaders->get('Location');
+ if ( $locationHeader->getUri() == $zfcUserAction ) {
+ $locationHeader->setUri($stepTwoRoute);
}
+ return $vm;
}
- die('ERROR!');
+
+ // Defeat ZfcUser's attempt to render it's own view script
+ // (necessary because it doesn't allow changing the form action)
+ $vm->setVariable('model', $model);
+ $vm->setTemplate('cdli-twostagesignup/register');
+ return $vm;
+
}
- public function getEmailVerificationForm()
+ public function getZfcUserOptions()
{
- if ($this->emailVerificationForm === null)
+ if ($this->zfcUserOptions === null)
{
- $this->emailVerificationForm = $this->getServiceLocator()->get('cdlitwostagesignup_ev_form');
+ $this->zfcUserOptions = $this->getServiceLocator()->get('zfcuser_module_options');
}
- return $this->emailVerificationForm;
+ return $this->zfcUserOptions;
}
- public function setEmailVerificationForm(EvrForm $emailVerificationForm)
+ public function setZfcUserOptions(ZfcUserOptions $o)
{
- $this->emailVerificationForm = $emailVerificationForm;
+ $this->zfcUserOptions = $o;
return $this;
}
- public function getEmailVerificationFilter()
+ public function getEmailVerificationForm()
{
- if ($this->emailVerificationFilter === null)
+ if ($this->emailVerificationForm === null)
{
- $this->emailVerificationFilter = $this->getServiceLocator()->get('cdlitwostagesignup_ev_filter');
+ $this->emailVerificationForm = $this->getServiceLocator()->get('cdlitwostagesignup_ev_form');
}
- return $this->emailVerificationFilter;
+ return $this->emailVerificationForm;
}
- public function setEmailVerificationFilter(EvrFilter $emailVerificationFilter)
+ public function setEmailVerificationForm(EvrForm $emailVerificationForm)
{
- $this->emailVerificationFilter = $emailVerificationFilter;
+ $this->emailVerificationForm = $emailVerificationForm;
return $this;
}
View
22 src/CdliTwoStageSignup/Entity/EmailVerification.php
@@ -4,19 +4,19 @@
class EmailVerification
{
- protected $requestKey;
- protected $emailAddress;
- protected $requestTime;
+ protected $request_key;
+ protected $email_address;
+ protected $request_time;
public function setRequestKey($key)
{
- $this->requestKey = $key;
+ $this->request_key = $key;
return $this;
}
public function getRequestKey()
{
- return $this->requestKey;
+ return $this->request_key;
}
public function generateRequestKey()
@@ -30,30 +30,30 @@ public function generateRequestKey()
public function setEmailAddress($email)
{
- $this->emailAddress = $email;
+ $this->email_address = $email;
return $this;
}
public function getEmailAddress()
{
- return $this->emailAddress;
+ return $this->email_address;
}
public function setRequestTime($time)
{
if ( ! $time instanceof \DateTime ) {
$time = new \DateTime($time);
}
- $this->requestTime = $time;
+ $this->request_time = $time;
return $this;
}
public function getRequestTime()
{
- if ( ! $this->requestTime instanceof \DateTime ) {
- $this->requestTime = new \DateTime('now');
+ if ( ! $this->request_time instanceof \DateTime ) {
+ $this->request_time = new \DateTime('now');
}
- return $this->requestTime;
+ return $this->request_time;
}
public function isExpired()
View
2 src/CdliTwoStageSignup/Form/EmailVerification.php
@@ -14,7 +14,7 @@ public function __construct()
parent::__construct();
$this->add(array(
- 'name' => 'email',
+ 'name' => 'email_address',
'options' => array(
'label' => 'Email Address',
),
View
2 src/CdliTwoStageSignup/Form/EmailVerificationFilter.php
@@ -29,7 +29,7 @@ public function __construct(ValidatorInterface $uniqueEmailAddressValidator, Val
$this->setUniqueRegistrationSessionValidator($uniqueRegistrationSessionValidator);
$this->add(array(
- 'name' => 'email',
+ 'name' => 'email_address',
'required' => true,
'validators' => array(
array( 'name' => 'EmailAddress' ),
View
74 src/CdliTwoStageSignup/Mapper/EmailVerification.php
@@ -2,80 +2,46 @@
namespace CdliTwoStageSignup\Mapper;
use ZfcBase\Mapper\AbstractDbMapper;
-use CdliTwoStageSignup\Model\EmailVerification as Model;
+use CdliTwoStageSignup\Entity\EmailVerification as Model;
use Zend\Db\Sql\Sql;
+use Zend\Stdlib\Hydrator\HydratorInterface;
class EmailVerification extends AbstractDbMapper
{
- protected $tableName = 'user_signup_email_verification';
- protected $keyField = 'request_key';
- protected $emailField = 'email_address';
- protected $reqtimeField = 'request_time';
-
- public function remove($evrModel)
- {
- $sql = new Sql($this->getDbAdapter(), $this->tableName);
- $delete= $sql->delete();
- $delete->where->equalTo($this->keyField, $evrModel->getRequestKey());
- $statement = $sql->prepareStatementForSqlObject($delete);
- $statement->execute();
- return true;
- }
+ protected $tableName = 'user_signup_email_verification';
public function findByEmail($email)
{
- $select = $this->select()
- ->from($this->tableName)
- ->where(array($this->emailField => $email));
- return $this->selectWith($select)->current();
+ $select = $this->getSelect($this->tableName)->where(array('email_address' => $email));
+ $entity = $this->select($select)->current();
+ $this->getEventManager()->trigger('find', $this, array('entity' => $entity));
+ return $entity;
}
public function findByRequestKey($key)
{
- $select = $this->select()
- ->from($this->tableName)
- ->where(array($this->keyField => $key));
- return $this->selectWith($select)->current();
+ $select = $this->getSelect($this->tableName)->where(array('request_key' => $key));
+ return $this->select($select)->current();
}
public function cleanExpiredVerificationRequests($expiryTime=86400)
{
- $now = new \DateTime((int)$expiryTime . ' seconds ago');
-
- $sql = new Sql($this->getDbAdapter(), $this->tableName);
- $delete = $sql->delete();
- $delete ->where->lessThanOrEqualTo($this->reqtimeField, $now->format('Y-m-d H:i:s'));
- $statement = $sql->prepareStatementForSqlObject($delete);
- $statement->execute();
- return true;
- }
-
- protected function fromRow($row)
- {
- if (!$row) return false;
- $evr = Model::fromArray($row->getArrayCopy());
- return $evr;
+ $delete = $this->delete(function($where) use ($expiryTime) {
+ $now = new \DateTime((int)$expiryTime . ' seconds ago');
+ $where->lessThanOrEqualTo('request_time', $now->format('Y-m-d H:i:s'));
+ });
+ return $delete->count();
}
- public function toScalarValueArray($evrModel)
+ public function insert($entity, $tableName = null, HydratorInterface $hydrator = null)
{
- return new \ArrayObject(array(
- $this->keyField => $evrModel->getRequestKey(),
- $this->emailField => $evrModel->getEmailAddress(),
- $this->reqtimeField => $evrModel->getRequestTime()->format('Y-m-d H:i:s'),
- ));
+ $result = parent::insert($entity, $tableName, $hydrator);
+ return $result;
}
- /**
- * @todo
- */
- public function persist($evrModel)
+ public function remove(Model $evrModel)
{
- return parent::insert($evrModel);
+ $this->delete(array('request_key' => $evrModel->getRequestKey()));
+ return true;
}
-
- public function getTableName() { return $this->tableName; }
- public function getPrimaryKey() { $this->keyField; }
- public function getPaginatorAdapter(array $params) { }
- public function getClassName() { return 'CdliTwoStageSignup\Model\EmailVerification'; }
}
View
12 src/CdliTwoStageSignup/Mapper/EmailVerificationHydrator.php
@@ -21,7 +21,8 @@ public function extract($object)
}
/* @var $object Entity*/
$data = parent::extract($object);
- if ( $data['request_time'] instanceof \DateTime ) {
+ unset($data['is_expired']);
+ if ( isset($data['request_time']) && $data['request_time'] instanceof \DateTime ) {
$data['request_time'] = $data['request_time']->format('Y-m-d H:i:s');
}
return $data;
@@ -40,16 +41,9 @@ public function hydrate(array $data, $object)
if (!$object instanceof Entity) {
throw new \InvalidArgumentException('$object must be an instance of EmailVerification entity');
}
- if ( ! $data['request_time'] instanceof \DateTime ) {
+ if ( isset($data['request_time']) && ! $data['request_time'] instanceof \DateTime ) {
$data['request_time'] = new \DateTime($data['request_time']);
}
return parent::hydrate($data, $object);
}
-
- protected function mapField($keyFrom, $keyTo, array $array)
- {
- $array[$keyTo] = $array[$keyFrom];
- unset($array[$keyFrom]);
- return $array;
- }
}
View
31 src/CdliTwoStageSignup/Service/EmailVerification.php
@@ -6,17 +6,18 @@
Zend\EventManager\ListenerAggregate,
ZfcBase\EventManager\EventProvider,
CdliTwoStageSignup\Entity\EmailVerification as Model,
- CdliTwoStageSignup\Mapper\EmailVerification as ModelMapper,
+ CdliTwoStageSignup\Mapper\EmailVerification as EvrMapper,
Zend\Mail\Message as EmailMessage,
Zend\Mail\Transport\TransportInterface as EmailTransport,
Zend\View\Model\ViewModel,
Zend\View\Renderer\RendererInterface as ViewRenderer;
use CdliTwoStageSignup\Options\EmailOptionsInterface;
+use CdliTwoStageSignup\Form\EmailVerification as EvrForm;
class EmailVerification extends EventProvider
{
/**
- * @var ModelMapper
+ * @var EvrMapper
*/
protected $evrMapper;
protected $serviceLocator;
@@ -52,14 +53,15 @@ public function remove(Model $m)
*/
public function createFromForm(Form $form)
{
- $data = $form->getData();
+ $form->bind(new Model());
+ if (!$form->isValid()) {
+ return false;
+ }
- $model = new Model();
- $model->setEmailAddress($data['email']);
- $model->setRequestTime(new \DateTime('now'));
+ $model = $form->getData();
$model->generateRequestKey();
$this->getEventManager()->trigger(__FUNCTION__, $this, array('record' => $model, 'form' => $form));
- $this->getEmailVerificationMapper()->persist($model);
+ $this->getEmailVerificationMapper()->insert($model);
return $model;
}
@@ -83,10 +85,10 @@ public function sendVerificationEmailMessage(Model $record)
/**
* setEmailVerificationMapper
*
- * @param ModelMapper $evrMapper
+ * @param EvrMapper $evrMapper
* @return User
*/
- public function setEmailVerificationMapper(ModelMapper $evrMapper)
+ public function setEmailVerificationMapper(EvrMapper $evrMapper)
{
$this->evrMapper = $evrMapper;
return $this;
@@ -97,6 +99,17 @@ public function getEmailVerificationMapper()
return $this->evrMapper;
}
+ public function setEmailVerificationForm(EvrForm $f)
+ {
+ $this->evrForm = $f;
+ return $this;
+ }
+
+ public function getEmailVerificationForm()
+ {
+ return $this->evrForm;
+ }
+
public function setMessageRenderer(ViewRenderer $emailRenderer)
{
$this->emailRenderer = $emailRenderer;
View
7 tests/CdliTwoStageSignupTest/Mapper/EmailVerificationTest.php
@@ -24,7 +24,7 @@ public function setUp()
public function testPersist()
{
- $this->mapper->persist($this->model);
+ $this->mapper->insert($this->model);
// Find the inserted record and verify it was created properly
$result = $this->_queryFindByRequestKey($this->model->getRequestKey());
@@ -66,13 +66,12 @@ public function testCleanExpiredVerificationRequests()
$m = new Entity();
$m->setEmailAddress('bar@baz.com');
$m->generateRequestKey();
- $this->mapper->persist($m);
+ $this->mapper->insert($m);
$this->mapper->cleanExpiredVerificationRequests();
$set = $this->db->query('SELECT * FROM '.$this->db->platform->quoteIdentifier('user_signup_email_verification'))->execute();
- # @TODO Count with PDO Sqlite appears to be broken (always zero)
- #$this->assertEquals(1, $set->count());
+ $this->assertEquals(1, $set->count());
$actualEntity = $set->current();
$this->assertEquals($m->getRequestKey(), $actualEntity['request_key']);
$this->assertEquals($m->getEmailAddress(), $actualEntity['email_address']);
View
10 tests/CdliTwoStageSignupTest/Service/EmailVerificationTest.php
@@ -77,14 +77,20 @@ public function testRemove()
public function testCreateFromForm()
{
+ $model = new Entity();
+ $model->setEmailAddress('foo@bar.com');
+
$form = $this->getMock('Zend\Form\Form');
$form->expects($this->any())
->method('getData')
- ->will($this->returnValue(array('email'=>'foo@bar.com')));
+ ->will($this->returnValue($model));
+ $form->expects($this->any())
+ ->method('isValid')
+ ->will($this->returnValue(true));
$evrMapper = $this->getMock('CdliTwoStageSignup\Mapper\EmailVerification');
$evrMapper->expects($this->once())
- ->method('persist')
+ ->method('insert')
->with($this->isInstanceOf('CdliTwoStageSignup\Entity\EmailVerification'))
->will($this->returnValue(NULL));
View
2 tests/config/database.local.php.dist
@@ -1,7 +1,7 @@
<?php
return array(
- 'cdli-twostagesignup' => array(
+ 'cdli-twostagesignup-test' => array(
'test_database_schema_up' => 'schema_up.sqlite.sql',
'test_database_schema_down' => 'schema_down.sql',
),
View
40 view/cdli-twostagesignup/register.phtml
@@ -1,29 +1,35 @@
<h1>Register</h1>
<?php
-if(!$this->enableRegistration)
-{
+if(!$this->enableRegistration) {
print '<div class="alert alert-error">Registration is disabled</div>';
return;
}
$form = $this->registerForm;
-
$form->prepare();
-$form->setAttribute('action', $this->formAction);
+$form->setAttribute('action', $this->url('zfcuser/register/step2', array('token'=>$this->model->getRequestKey())));
$form->setAttribute('method', 'post');
-
-echo $this->form()->openTag($form);
-
?>
-<dl class="zend_form">
-
-<?php foreach ($form->getElements() as $element) { ?>
- <?php if ($element->getLabel()) { ?>
- <dt><?php echo $this->formLabel($element); ?></dt>
- <?php } ?>
- <dd><?php echo $this->formInput($element) . $this->formElementErrors($element); ?></dd>
-<?php } ?>
-
-</dl>
+<?php echo $this->form()->openTag($form) ?>
+ <dl class="zend_form">
+ <?php foreach ($form as $element): ?>
+ <?php if ($element->getName() == 'email') continue; /* Don't render the email element, as we've added it below as a hidden field */ ?>
+ <?php if (!$element instanceof Zend\Form\Element\Button): ?>
+ <dt><?php echo $this->formLabel($element) ?></dt>
+ <?php endif ?>
+ <?php if ($element instanceof Zend\Form\Element\Button): ?>
+ <dd><?php echo $this->formButton($element) ?></dd>
+ <?php elseif ($element instanceof Zend\Form\Element\Captcha): ?>
+ <dd><?php echo $this->formCaptcha($element) . $this->formElementErrors($element) ?></dd>
+ <?php else: ?>
+ <dd><?php echo $this->formInput($element) . $this->formElementErrors($element) ?></dd>
+ <?php endif ?>
+ <?php endforeach ?>
+ </dl>
+ <?php if ($this->redirect): ?>
+ <input type="hidden" name="redirect" value="<?php echo $this->redirect ?>" />
+ <?php endif ?>
+ <input type="hidden" name="email" value="<?php echo $this->escapeHtmlAttr($this->model->getEmailAddress()); ?>" />
+<?php echo $this->form()->closeTag() ?>

0 comments on commit c68f149

Please sign in to comment.
Something went wrong with that request. Please try again.