Merge branch '38-admin-send-activation-password-resets-to-email' into dev
This commit is contained in:
commit
8c9455a2d5
8 changed files with 79 additions and 3 deletions
|
|
@ -70,8 +70,11 @@ router:
|
|||
backend-user-edit:
|
||||
pattern: '/admin/user/{id:([0-9]+)}'
|
||||
path: backend::user::edit
|
||||
backend-user-activation-email:
|
||||
pattern: '/admin/user/{id:([0-9]+)}/activation'
|
||||
path: backend::user::activation-email
|
||||
backend-user-status:
|
||||
pattern: '/admin/user/{id:([0-9]+)}/{type}'
|
||||
pattern: '/admin/user/{id:([0-9]+)}/status/{type}'
|
||||
path:
|
||||
module: backend
|
||||
controller: user
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ use App\Controller\ControllerBase,
|
|||
App\Model\Data\Callback as CallbackModel,
|
||||
App\Model\Data\Request as RequestModel,
|
||||
App\Model\Data\RequestMeta as RequestMetaModel,
|
||||
App\Model\Data\User,
|
||||
App\Model\Data\UserActivation;
|
||||
|
||||
class ApiController extends ControllerBase
|
||||
|
|
|
|||
|
|
@ -97,4 +97,20 @@ class UserController extends \Phalcon\Mvc\Controller
|
|||
$this->flash->success('The account was: ' . $status);
|
||||
$this->response->redirect('/admin');
|
||||
}
|
||||
|
||||
public function activationEmailAction($id)
|
||||
{
|
||||
$user = User::findFirstById($id);
|
||||
if ($user) {
|
||||
if ($user->isSuspended()) {
|
||||
$this->eventsManager->fire('auth:onSentActivation', $user);
|
||||
$this->flash->success('Activation email sent to: ' . $user->email);
|
||||
} else {
|
||||
$this->flash->error('Only suspended users can be sent activation emails.');
|
||||
}
|
||||
} else {
|
||||
$this->flash->error('Invalid user: ' . $id);
|
||||
}
|
||||
$this->response->redirect('/admin');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,8 @@ use Httpcb\Auth,
|
|||
|
||||
use App\Listener\AccessListener,
|
||||
App\Listener\DispatchListener,
|
||||
App\Listener\ActivityLog;
|
||||
App\Listener\ActivityLog,
|
||||
App\Listener\AuthEmailListener;
|
||||
|
||||
class Services extends DiDefault
|
||||
{
|
||||
|
|
@ -345,6 +346,7 @@ class Services extends DiDefault
|
|||
$eventsManager = new \Phalcon\Events\Manager();
|
||||
$eventsManager->attach('user', $activityLog);
|
||||
$eventsManager->attach('auth', $activityLog);
|
||||
$eventsManager->attach('auth', new AuthEmailListener);
|
||||
|
||||
return $eventsManager;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,6 +65,18 @@ class ActivityLog extends Injectable
|
|||
$this->_log($user, sprintf("OAuth disconnected (%s)", $providerName));
|
||||
}
|
||||
|
||||
/**
|
||||
* Fired when a activation email is sent.
|
||||
*
|
||||
* @param Event $event
|
||||
* @param User $user
|
||||
* @param string $providerName
|
||||
*/
|
||||
public function onSentActivation(Event $event, User $user)
|
||||
{
|
||||
$this->_log($user, sprintf("Activation email sent"));
|
||||
}
|
||||
|
||||
protected function _log(User $user, $message)
|
||||
{
|
||||
$ip = (new \Phalcon\Http\Request())->getClientAddress(true);
|
||||
|
|
|
|||
25
app/listeners/AuthEmailListener.php
Normal file
25
app/listeners/AuthEmailListener.php
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace App\Listener;
|
||||
|
||||
use App\Model\Data\User,
|
||||
App\Model\Data\UserActivation;
|
||||
|
||||
use Phalcon\Di\Injectable,
|
||||
Phalcon\Events\Event;
|
||||
|
||||
class AuthEmailListener extends Injectable
|
||||
{
|
||||
public function onSentActivation(Event $event, User $user)
|
||||
{
|
||||
$activation = new UserActivation();
|
||||
$activation->setUserId($user->getId())
|
||||
->save();
|
||||
|
||||
$content = $this->di->getShared('template')->render('mail/account_activation', [
|
||||
'link' => $activation->getActivationKey()
|
||||
]);
|
||||
|
||||
$this->di->getMail()->send('Httpcb account activation', $user->getEmail(), $content);
|
||||
}
|
||||
}
|
||||
|
|
@ -265,6 +265,16 @@ class User extends Base
|
|||
return $this->status == self::STATUS_ACTIVE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this user is suspended.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isSuspended()
|
||||
{
|
||||
return $this->status == self::STATUS_SUSPENDED;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
|
|
@ -282,7 +292,7 @@ class User extends Base
|
|||
$this->password = $password;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -56,6 +56,13 @@
|
|||
{% if (user.getId()) %}
|
||||
{% set actions = [ 'Activate': 'Active', 'Suspend': 'Suspended', 'Delete': 'Deleted' ] %}
|
||||
<div class="float-end">
|
||||
|
||||
{% if user.isSuspended() %}
|
||||
<a class="button button-info" href="{{ url(['for': 'backend-user-activation-email', 'id': user.getId() ]) }}">
|
||||
Send activation email
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% for label, status in actions %}
|
||||
|
||||
{% if (user.status != status) %}
|
||||
|
|
|
|||
Reference in a new issue