src/models/forms/ResetForm.php
<?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; }}