added email change strategies

This commit is contained in:
Antonio Ramirez
2016-12-10 14:14:42 +01:00
parent 3fe09e3eb3
commit e215fd58bf
19 changed files with 626 additions and 119 deletions

View File

@ -0,0 +1,67 @@
<?php
namespace Da\User\Factory;
use Da\User\Contracts\MailChangeStrategyInterface;
use Da\User\Contracts\StrategyInterface;
use Da\User\Form\SettingsForm;
use Da\User\Strategy\DefaultEmailChangeStrategy;
use Da\User\Strategy\InsecureEmailChangeStrategy;
use Da\User\Strategy\SecureEmailChangeStrategy;
use Yii;
use Exception;
class EmailChangeStrategyFactory
{
protected static $map = [
MailChangeStrategyInterface::TYPE_INSECURE => InsecureEmailChangeStrategy::class,
MailChangeStrategyInterface::TYPE_DEFAULT => DefaultEmailChangeStrategy::class,
MailChangeStrategyInterface::TYPE_SECURE => SecureEmailChangeStrategy::class
];
/**
* @param $strategy
* @param SettingsForm $form
*
* @return MailChangeStrategyInterface
* @throws Exception
*/
public static function makeByStrategyType($strategy, SettingsForm $form)
{
if (array_key_exists($strategy, static::$map)) {
return Yii::createObject(static::$map[$strategy], [$form]);
}
throw new Exception('Unknown strategy type');
}
/**
* @param SettingsForm $form
*
* @return DefaultEmailChangeStrategy
*/
public static function makeDefaultEmailChangeStrategy(SettingsForm $form)
{
return Yii::createObject(static::$map[MailChangeStrategyInterface::TYPE_DEFAULT], [$form]);
}
/**
* @param SettingsForm $form
*
* @return InsecureEmailChangeStrategy
*/
public static function makeInsecureEmailChangeStrategy(SettingsForm $form)
{
return Yii::createObject(static::$map[MailChangeStrategyInterface::TYPE_INSECURE], [$form]);
}
/**
* @param SettingsForm $form
*
* @return SecureEmailChangeStrategy
*/
public static function makeSecureEmailChangeStrategy(SettingsForm $form)
{
return Yii::createObject(static::$map[MailChangeStrategyInterface::TYPE_SECURE], [$form]);
}
}

View File

@ -52,6 +52,12 @@ class MailFactory
return static::makeMailerService($from, $to, $subject, 'recovery', $params);
}
/**
* @param User $user
* @param Token|null $token
*
* @return MailService
*/
public static function makeConfirmationMailerService(User $user, Token $token = null)
{
/** @var Module $module */
@ -67,6 +73,29 @@ class MailFactory
return static::makeMailerService($from, $to, $subject, 'recovery', $params);
}
/**
* @param User $user
* @param Token $token
*
* @return MailService
*/
public static function makeReconfirmationMailerService(User $user, Token $token) {
/** @var Module $module */
$module = Yii::$app->getModule('user');
$to = $token->type === Token::TYPE_CONFIRM_NEW_EMAIL
? $user->unconfirmed_email
: $user->email;
$from = $module->mailParams['fromEmail'];
$subject = $module->mailParams['reconfirmationMailSubject'];
$params = [
'user' => $token && $token->user ? $token->user : null,
'token' => $token
];
return static::makeMailerService($from, $to, $subject, 'recovery', $params);
}
/**
* Builds a MailerService
*

View File

@ -37,6 +37,20 @@ class TokenFactory
return $token;
}
/**
* @param $userId
*
* @return Token
*/
public static function makeConfirmOldMailToken($userId)
{
$token = self::make($userId, Token::TYPE_CONFIRM_OLD_EMAIL);
$token->save(false);
return $token;
}
/**
* @param $userId
*