bizley/yii2-podium

View on GitHub
src/models/forms/ResetForm.php

Summary

Maintainability
B
7 hrs
Test Coverage
<?php
 
namespace bizley\podium\models\forms;
 
use bizley\podium\models\Content;
use bizley\podium\models\Email;
use bizley\podium\models\User;
use bizley\podium\Podium;
use Yii;
use yii\base\Model;
use yii\helpers\Html;
use yii\helpers\Url;
 
/**
* Reset Form model
* Calls for password reset.
*
* @author Paweł Bizley Brzozowski <pawel@positive.codes>
* @since 0.6
*
* @property User $user
*/
class ResetForm extends Model
{
/**
* @var string Username or email
*/
public $username;
 
/**
* @inheritdoc
*/
public function rules()
{
return [['username', 'required']];
}
 
private $_user = false;
 
/**
* Returns user.
* @param int $status
* @return User
*/
public function getUser($status = User::STATUS_ACTIVE)
{
if ($this->_user === false) {
$this->_user = User::findByKeyfield($this->username, $status);
}
return $this->_user;
}
 
/**
* Generates new password reset token.
* @return int
*/
Method `run` has 32 lines of code (exceeds 25 allowed). Consider refactoring.
public function run()
{
$user = $this->user;
if (empty($user)) {
return [
true,
Yii::t('podium/flash', 'Sorry! We can not find the account with that user name or e-mail address.'),
false
];
}
$user->scenario = 'token';
$user->generatePasswordResetToken();
if (!$user->save()) {
return [true, null, false];
}
if (empty($user->email)) {
return [
true,
Yii::t('podium/flash', 'Sorry! There is no e-mail address saved with your account. Contact administrator about resetting password.'),
true
];
}
if (!$this->sendResetEmail($user)) {
return [
true,
Yii::t('podium/flash', 'Sorry! There was some error while sending you the password reset link. Contact administrator about this problem.'),
true
];
}
Avoid too many `return` statements within this method.
return [
false,
Yii::t('podium/flash', 'The password reset link has been sent to your e-mail address.'),
true
];
}
 
/**
* Sends reset email.
* @param User $user
* @return bool
* @since 0.2
*/
Similar blocks of code found in 2 locations. Consider refactoring.
protected function sendResetEmail(User $user)
{
$forum = Podium::getInstance()->podiumConfig->get('name');
$email = Content::fill(Content::EMAIL_PASSWORD);
if ($email !== false) {
$link = Url::to(['account/password', 'token' => $user->password_reset_token], true);
return Email::queue(
$user->email,
str_replace('{forum}', $forum, $email->topic),
str_replace('{forum}', $forum, str_replace('{link}',
Html::a($link, $link), $email->content)),
!empty($user->id) ? $user->id : null
);
}
return false;
}
}