Initial commit

This commit is contained in:
Chris Smith
2025-02-19 14:51:16 +01:00
commit d82a6cad96
198 changed files with 13819 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
<?php
namespace frontend\models;
use Yii;
use yii\base\Model;
/**
* ContactForm is the model behind the contact form.
*/
class ContactForm extends Model
{
public $name;
public $email;
public $subject;
public $body;
public $verifyCode;
/**
* {@inheritdoc}
*/
public function rules()
{
return [
// name, email, subject and body are required
[['name', 'email', 'subject', 'body'], 'required'],
// email has to be a valid email address
['email', 'email'],
// verifyCode needs to be entered correctly
['verifyCode', 'captcha'],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'verifyCode' => 'Verification Code',
];
}
/**
* Sends an email to the specified email address using the information collected by this model.
*
* @param string $email the target email address
* @return bool whether the email was sent
*/
public function sendEmail($email)
{
return Yii::$app->mailer->compose()
->setTo($email)
->setFrom([Yii::$app->params['senderEmail'] => Yii::$app->params['senderName']])
->setReplyTo([$this->email => $this->name])
->setSubject($this->subject)
->setTextBody($this->body)
->send();
}
}

View File

@@ -0,0 +1,82 @@
<?php
namespace frontend\models;
use common\jobs\EmailJob;
use Yii;
use yii\base\Model;
use common\models\User;
use const donatj\UserAgent\BROWSER;
use const donatj\UserAgent\PLATFORM;
/**
* Password reset request form
*/
class PasswordResetRequestForm extends Model
{
public $email;
/**
* {@inheritdoc}
*/
public function rules()
{
return [
['email', 'trim'],
['email', 'required'],
['email', 'email'],
['email', 'exist',
'targetClass' => '\common\models\User',
'filter' => ['status' => User::STATUS_ACTIVE],
'message' => 'There is no user with this email address.'
],
];
}
/**
* Sends an email with a link, for resetting the password.
*
* @return bool whether the email was send
*/
public function sendEmail()
{
/* @var $user User */
$user = User::findOne([
'status' => User::STATUS_ACTIVE,
'email' => $this->email,
]);
if (!$user) {
return true;
}
if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
$user->generatePasswordResetToken();
if (!$user->save()) {
return true;
}
}
try {
$uaInfo = \donatj\UserAgent\parse_user_agent();
} catch (\Exception $e) {
$uaInfo[PLATFORM] = 'unknown';
$uaInfo[BROWSER] = 'unknown';
}
Yii::$app->queue->push(new EmailJob([
'templateAlias' => EmailJob::PASSWORD_RESET,
'email' => $this->email,
'templateModel' => [
'name' => $user->first_name,
"operating_system" => $uaInfo[PLATFORM],
"action_url" => Yii::$app->urlManager->createAbsoluteUrl(['site/reset-password', 'token' => $user->password_reset_token]),
"browser_name" => $uaInfo[BROWSER],
]
]));
return true;
}
}

View File

@@ -0,0 +1,63 @@
<?php
namespace frontend\models;
use common\jobs\EmailJob;
use Yii;
use common\models\User;
use yii\base\Model;
class ResendVerificationEmailForm extends Model
{
/**
* @var string
*/
public $email;
/**
* {@inheritdoc}
*/
public function rules()
{
return [
['email', 'trim'],
['email', 'required'],
['email', 'email'],
['email', 'exist',
'targetClass' => '\common\models\User',
'filter' => ['status' => User::STATUS_UNVERIFIED],
'message' => 'There is no user with this email address.'
],
];
}
/**
* Sends confirmation email to user
*
* @return bool whether the email was sent
*/
public function sendEmail()
{
$user = User::findOne([
'email' => $this->email,
'status' => User::STATUS_UNVERIFIED
]);
if ($user === null) {
return false;
}
Yii::$app->queue->push(new EmailJob([
'templateAlias' => EmailJob::VERIFY_EMAIL,
'email' => $user->email,
'templateModel' => [
'name' => $user->first_name,
"action_url" => Yii::$app->urlManager->createAbsoluteUrl(['site/verify-email', 'token' => $user->verification_token]),
]
]));
return true;
}
}

View File

@@ -0,0 +1,73 @@
<?php
namespace frontend\models;
use yii\base\InvalidArgumentException;
use yii\base\Model;
use Yii;
use common\models\User;
/**
* Password reset form
*/
class ResetPasswordForm extends Model
{
public $password;
/**
* @var \common\models\User
*/
private $_user;
public $email;
public $first_name;
/**
* Creates a form model given a token.
*
* @param string $token
* @param array $config name-value pairs that will be used to initialize the object properties
* @throws InvalidArgumentException if token is empty or not valid
*/
public function __construct($token, $config = [])
{
if (empty($token) || !is_string($token)) {
throw new InvalidArgumentException('Password reset token cannot be blank.');
}
$this->_user = User::findByPasswordResetToken($token);
if (!$this->_user) {
throw new InvalidArgumentException('Wrong password reset token.');
}
$this->email = $this->_user->email;
$this->first_name = $this->_user->first_name;
parent::__construct($config);
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
['password', 'required'],
['password', 'string', 'min' => Yii::$app->params['user.passwordMinLength']],
];
}
/**
* Resets password.
*
* @return bool if password was reset.
*/
public function resetPassword()
{
$user = $this->_user;
$user->setPassword($this->password);
$user->removePasswordResetToken();
$user->generateAuthKey();
return $user->save(false);
}
}

View File

@@ -0,0 +1,82 @@
<?php
namespace frontend\models;
use Yii;
use yii\base\Model;
use common\models\User;
use common\jobs\EmailJob;
/**
* Signup form
*/
class SignupForm extends Model
{
public $first_name;
public $email;
public $password;
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['email','first_name'], 'trim'],
[['email','first_name'], 'required'],
['email', 'email'],
['email', 'string', 'max' => 255],
['email', 'unique', 'targetClass' => User::class, 'message' => 'This email address has already been taken.'],
['password', 'required'],
['password', 'string', 'min' => Yii::$app->params['user.passwordMinLength']],
];
}
/**
* Signs user up.
*
* @return bool whether the creating new account was successful and email was sent
*/
public function signup()
{
if (!$this->validate()) {
return null;
}
$user = new User();
$user->email = $this->email;
$user->first_name = $this->first_name;
$user->setPassword($this->password);
$user->generateAuthKey();
$user->generateEmailVerificationToken();
$user->save(false);
// the following three lines were added:
$auth = \Yii::$app->authManager;
$salesAgentRole = $auth->getRole('user');
$auth->assign($salesAgentRole, $user->getId());
return $this->sendEmail($user);
}
/**
* Sends confirmation email to user
* @param User $user user model to with email should be send
* @return bool whether the email was sent
*/
protected function sendEmail($user)
{
Yii::$app->queue->push(new EmailJob([
'templateAlias' => EmailJob::VERIFY_EMAIL,
'email' => $user->email,
'templateModel' => [
"name" => $user->first_name,
"action_url" => Yii::$app->urlManager->createAbsoluteUrl(['site/verify-email', 'token' => $user->verification_token]),
]
]));
return true;
}
}

View File

@@ -0,0 +1,65 @@
<?php
namespace frontend\models;
use common\jobs\EmailJob;
use common\models\User;
use Yii;
use yii\base\InvalidArgumentException;
use yii\base\Model;
class VerifyEmailForm extends Model
{
/**
* @var string
*/
public $token;
/**
* @var User
*/
private $_user;
/**
* Creates a form model with given token.
*
* @param string $token
* @param array $config name-value pairs that will be used to initialize the object properties
* @throws InvalidArgumentException if token is empty or not valid
*/
public function __construct($token, array $config = [])
{
if (empty($token) || !is_string($token)) {
throw new InvalidArgumentException('Verify email token cannot be blank.');
}
$this->_user = User::findByVerificationToken($token);
if (!$this->_user) {
throw new InvalidArgumentException('Wrong verify email token.');
}
parent::__construct($config);
}
/**
* Verify email
*
* @return User|null the saved model or null if saving fails
*/
public function verifyEmail()
{
$user = $this->_user;
$user->status = User::STATUS_VERIFIED;
Yii::$app->queue->push(new EmailJob([
'templateAlias' => EmailJob::ADMIN_NOTIFY,
"email" => Yii::$app->params['adminEmail'],
'templateModel' => [
"user_name" => $user->email,
"action_url" => Yii::$app->urlManager->createAbsoluteUrl(['user/update', 'id' => $user->id, 'approve' => 1]),
"action_edit_url" => Yii::$app->urlManager->createAbsoluteUrl(['user/update', 'id' => $user->id]),
]
]));
return $user->save(false) ? $user : null;
}
}