373 lines
11 KiB
PHP
373 lines
11 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @defgroup controllers_tab_user
|
|
*/
|
|
|
|
/**
|
|
* @file controllers/tab/user/ProfileTabHandler.php
|
|
*
|
|
* Copyright (c) 2014-2021 Simon Fraser University
|
|
* Copyright (c) 2003-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class ProfileTabHandler
|
|
*
|
|
* @ingroup controllers_tab_user
|
|
*
|
|
* @brief Handle requests for profile tab operations.
|
|
*/
|
|
|
|
namespace PKP\controllers\tab\user;
|
|
|
|
use APP\handler\Handler;
|
|
use APP\notification\form\NotificationSettingsForm;
|
|
use APP\notification\NotificationManager;
|
|
use PKP\core\JSONMessage;
|
|
use PKP\core\PKPApplication;
|
|
use PKP\core\PKPRequest;
|
|
use PKP\security\authorization\UserRequiredPolicy;
|
|
use PKP\session\SessionManager;
|
|
use PKP\user\form\APIProfileForm;
|
|
use PKP\user\form\ChangePasswordForm;
|
|
use PKP\user\form\ContactForm;
|
|
use PKP\user\form\IdentityForm;
|
|
use PKP\user\form\PublicProfileForm;
|
|
use PKP\user\form\RolesForm;
|
|
|
|
class ProfileTabHandler extends Handler
|
|
{
|
|
//
|
|
// Implement template methods from PKPHandler
|
|
//
|
|
/**
|
|
* @copydoc PKPHandler::authorize()
|
|
*/
|
|
public function authorize($request, &$args, $roleAssignments)
|
|
{
|
|
// User must be logged in
|
|
$this->addPolicy(new UserRequiredPolicy($request));
|
|
|
|
return parent::authorize($request, $args, $roleAssignments);
|
|
}
|
|
|
|
/**
|
|
* Display form to edit user's identity.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function identity($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
$identityForm = new IdentityForm($request->getUser());
|
|
$identityForm->initData();
|
|
return new JSONMessage(true, $identityForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Validate and save changes to user's identity info.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function saveIdentity($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
|
|
$identityForm = new IdentityForm($request->getUser());
|
|
$identityForm->readInputData();
|
|
if ($identityForm->validate()) {
|
|
$identityForm->execute();
|
|
$notificationMgr = new NotificationManager();
|
|
$notificationMgr->createTrivialNotification($request->getUser()->getId());
|
|
return new JSONMessage(true);
|
|
}
|
|
return new JSONMessage(true, $identityForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Display form to edit user's contact information.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function contact($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
$contactForm = new ContactForm($request->getUser());
|
|
$contactForm->initData();
|
|
return new JSONMessage(true, $contactForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Validate and save changes to user's contact info.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function saveContact($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
|
|
$contactForm = new ContactForm($request->getUser());
|
|
$contactForm->readInputData();
|
|
if ($contactForm->validate()) {
|
|
$contactForm->execute();
|
|
$notificationMgr = new NotificationManager();
|
|
$notificationMgr->createTrivialNotification($request->getUser()->getId());
|
|
return new JSONMessage(true);
|
|
}
|
|
return new JSONMessage(true, $contactForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Display form to edit user's roles information.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function roles($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
$rolesForm = new RolesForm($request->getUser());
|
|
$rolesForm->initData();
|
|
return new JSONMessage(true, $rolesForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Validate and save changes to user's roles info.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function saveRoles($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
|
|
$rolesForm = new RolesForm($request->getUser());
|
|
$rolesForm->readInputData();
|
|
if ($rolesForm->validate()) {
|
|
$rolesForm->execute();
|
|
$notificationMgr = new NotificationManager();
|
|
$notificationMgr->createTrivialNotification($request->getUser()->getId());
|
|
return new JSONMessage(true);
|
|
}
|
|
return new JSONMessage(false, $rolesForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Display form to edit user's publicProfile information.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function publicProfile($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
$publicProfileForm = new PublicProfileForm($request->getUser());
|
|
$publicProfileForm->initData();
|
|
return new JSONMessage(true, $publicProfileForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Upload a public profile image.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function uploadProfileImage($args, $request)
|
|
{
|
|
$publicProfileForm = new PublicProfileForm($request->getUser());
|
|
$result = $publicProfileForm->uploadProfileImage();
|
|
if ($result) {
|
|
return $request->redirectUrlJson($request->getDispatcher()->url($request, PKPApplication::ROUTE_PAGE, null, 'user', 'profile', null, ['uniq' => uniqid()], 'publicProfile'));
|
|
} else {
|
|
return new JSONMessage(false, __('common.uploadFailed'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove a public profile image.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*/
|
|
public function deleteProfileImage($args, $request)
|
|
{
|
|
$publicProfileForm = new PublicProfileForm($request->getUser());
|
|
$publicProfileForm->deleteProfileImage();
|
|
$request->redirectUrl($request->getDispatcher()->url($request, PKPApplication::ROUTE_PAGE, null, 'user', 'profile', null, ['uniq' => uniqid()], 'publicProfile'));
|
|
}
|
|
|
|
/**
|
|
* Validate and save changes to user's publicProfile info.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function savePublicProfile($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
|
|
$publicProfileForm = new PublicProfileForm($request->getUser());
|
|
$publicProfileForm->readInputData();
|
|
if ($publicProfileForm->validate()) {
|
|
$publicProfileForm->execute();
|
|
$notificationMgr = new NotificationManager();
|
|
$notificationMgr->createTrivialNotification($request->getUser()->getId());
|
|
return new JSONMessage(true);
|
|
}
|
|
return new JSONMessage(true, $publicProfileForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Display form to edit user's API key settings.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function apiProfile($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
$apiProfileForm = new APIProfileForm($request->getUser());
|
|
$apiProfileForm->initData();
|
|
return new JSONMessage(true, $apiProfileForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Validate and save changes to user's API key settings.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function saveAPIProfile($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
|
|
$apiProfileForm = new APIProfileForm($request->getUser());
|
|
$apiProfileForm->readInputData();
|
|
if ($apiProfileForm->validate()) {
|
|
$apiProfileForm->execute();
|
|
$notificationMgr = new NotificationManager();
|
|
$notificationMgr->createTrivialNotification($request->getUser()->getId());
|
|
return new JSONMessage(true, $apiProfileForm->fetch($request));
|
|
}
|
|
return new JSONMessage(true, $apiProfileForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Display form to change user's password.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function changePassword($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
$passwordForm = new ChangePasswordForm($request->getUser(), $request->getSite());
|
|
$passwordForm->initData();
|
|
return new JSONMessage(true, $passwordForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Save user's new password.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function savePassword($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
|
|
$user = $request->getUser();
|
|
|
|
$passwordForm = new ChangePasswordForm($user, $request->getSite());
|
|
$passwordForm->readInputData();
|
|
|
|
if ($passwordForm->validate()) {
|
|
$passwordForm->execute();
|
|
|
|
$sessionManager = SessionManager::getManager();
|
|
$sessionManager->invalidateSessions($user->getId(), $sessionManager->getUserSession()->getId());
|
|
|
|
$notificationMgr = new NotificationManager();
|
|
$notificationMgr->createTrivialNotification($user->getId());
|
|
|
|
return new JSONMessage(true);
|
|
}
|
|
|
|
return new JSONMessage(true, $passwordForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Fetch notifications tab content.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function notificationSettings($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
|
|
$user = $request->getUser();
|
|
$notificationSettingsForm = new NotificationSettingsForm();
|
|
return new JSONMessage(true, $notificationSettingsForm->fetch($request));
|
|
}
|
|
|
|
/**
|
|
* Save user notification settings.
|
|
*
|
|
* @param array $args
|
|
* @param PKPRequest $request
|
|
*
|
|
* @return JSONMessage JSON-formatted response
|
|
*/
|
|
public function saveNotificationSettings($args, $request)
|
|
{
|
|
$this->setupTemplate($request);
|
|
|
|
$notificationSettingsForm = new NotificationSettingsForm();
|
|
$notificationSettingsForm->readInputData();
|
|
|
|
$json = new JSONMessage();
|
|
if ($notificationSettingsForm->validate()) {
|
|
$notificationSettingsForm->execute();
|
|
$notificationMgr = new NotificationManager();
|
|
$notificationMgr->createTrivialNotification($request->getUser()->getId());
|
|
} else {
|
|
$json->setStatus(false);
|
|
}
|
|
|
|
return $json;
|
|
}
|
|
}
|