Files
yii2-usuario/src/User/Factory/MailFactory.php

140 lines
4.0 KiB
PHP

<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Factory;
use Da\User\Event\MailEvent;
use Da\User\Model\Token;
use Da\User\Model\User;
use Da\User\Module;
use Da\User\Service\MailService;
use Yii;
use yii\base\InvalidConfigException;
class MailFactory
{
/**
* @param User $user
* @param bool $showPassword
*
* @throws InvalidConfigException
* @return MailService
*/
public static function makeWelcomeMailerService(User $user, $showPassword = false)
{
/** @var Module $module */
$module = Yii::$app->getModule('user');
$to = $user->email;
$from = $module->mailParams['fromEmail'];
$subject = $module->mailParams['welcomeMailSubject'];
$params = [
'user' => $user,
'token' => null,
'module' => $module,
'showPassword' => $showPassword,
];
return static::makeMailerService(MailEvent::TYPE_WELCOME, $from, $to, $subject, 'welcome', $params);
}
/**
* @param string $email
* @param Token $token
*
* @throws InvalidConfigException
* @return MailService
*/
public static function makeRecoveryMailerService($email, Token $token = null)
{
/** @var Module $module */
$module = Yii::$app->getModule('user');
$to = $email;
$from = $module->mailParams['fromEmail'];
$subject = $module->mailParams['recoveryMailSubject'];
$params = [
'user' => $token && $token->user ? $token->user : null,
'token' => $token,
];
return static::makeMailerService(MailEvent::TYPE_RECOVERY, $from, $to, $subject, 'recovery', $params);
}
/**
* @param User $user
* @param Token|null $token
*
* @throws InvalidConfigException
* @return MailService
*/
public static function makeConfirmationMailerService(User $user, Token $token = null)
{
/** @var Module $module */
$module = Yii::$app->getModule('user');
$to = $user->email;
$from = $module->mailParams['fromEmail'];
$subject = $module->mailParams['confirmationMailSubject'];
$params = [
'user' => $token && $token->user ? $token->user : null,
'token' => $token,
];
return static::makeMailerService(MailEvent::TYPE_CONFIRM, $from, $to, $subject, 'recovery', $params);
}
/**
* @param User $user
* @param Token $token
*
* @throws InvalidConfigException
* @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(MailEvent::TYPE_RECONFIRM, $from, $to, $subject, 'reconfirmation', $params);
}
/**
* Builds a MailerService.
*
* @param string $type
* @param string $from
* @param string $to
* @param string $subject
* @param string $view
* @param array $params
*
* @throws InvalidConfigException
* @return MailService
*
*/
public static function makeMailerService($type, $from, $to, $subject, $view, $params = [])
{
/** @noinspection PhpIncompatibleReturnTypeInspection */
return Yii::$container->get(
MailService::class,
[$type, $from, $to, $subject, $view, $params, Yii::$app->getMailer()]
);
}
}