Skip to content

Commit

Permalink
Closes #3193 Added user email templates to the discussion and grouped…
Browse files Browse the repository at this point in the history
… user templates in the assign participant.
  • Loading branch information
jonasraoni committed Feb 7, 2021
1 parent 2e9f5e0 commit 65cbd87
Show file tree
Hide file tree
Showing 6 changed files with 344 additions and 161 deletions.
132 changes: 76 additions & 56 deletions controllers/grid/queries/QueriesGridHandler.inc.php
Expand Up @@ -33,14 +33,14 @@ class QueriesGridHandler extends GridHandler {
function __construct() {
parent::__construct();
$this->addRoleAssignment(
array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR),
array('fetchGrid', 'fetchRow', 'readQuery', 'participants', 'addQuery', 'editQuery', 'updateQuery', 'deleteQuery'));
[ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR],
['fetchGrid', 'fetchRow', 'readQuery', 'participants', 'addQuery', 'editQuery', 'updateQuery', 'deleteQuery']);
$this->addRoleAssignment(
array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT),
array('openQuery', 'closeQuery', 'saveSequence'));
[ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT],
['openQuery', 'closeQuery', 'saveSequence', 'fetchTemplateBody']);
$this->addRoleAssignment(
array(ROLE_ID_MANAGER),
array('leaveQuery'));
[ROLE_ID_MANAGER],
['leaveQuery']);
}


Expand Down Expand Up @@ -161,23 +161,23 @@ function initialize($request, $args = null) {
null,
null,
$cellProvider,
array('html' => TRUE, 'width' => 20)
['html' => true, 'width' => 20]
));
$this->addColumn(new GridColumn(
'lastReply',
'submission.query.lastReply',
null,
null,
$cellProvider,
array('html' => TRUE, 'width' => 20)
['html' => true, 'width' => 20]
));
$this->addColumn(new GridColumn(
'replies',
'submission.query.replies',
null,
null,
$cellProvider,
array('width' => 10, 'alignment' => COLUMN_ALIGNMENT_CENTER)
['width' => 10, 'alignment' => COLUMN_ALIGNMENT_CENTER]
));

$this->addColumn(
Expand All @@ -187,7 +187,7 @@ function initialize($request, $args = null) {
null,
'controllers/grid/common/cell/selectStatusCell.tpl',
$cellProvider,
array('width' => 10, 'alignment' => COLUMN_ALIGNMENT_CENTER)
['width' => 10, 'alignment' => COLUMN_ALIGNMENT_CENTER]
)
);

Expand Down Expand Up @@ -231,7 +231,7 @@ function getDataElementSequence($row) {
* @copydoc GridHandler::setDataElementSequence()
*/
function setDataElementSequence($request, $rowId, $gridDataElement, $newSequence) {
$queryDao = DAORegistry::getDAO('QueryDAO'); /* @var $queryDao QueryDAO */
$queryDao = DAORegistry::getDAO('QueryDAO'); /** @var QueryDAO $queryDao */
$query = $queryDao->getById($rowId, $this->getAssocType(), $this->getAssocId());
$query->setSequence($newSequence);
$queryDao->updateObject($query);
Expand Down Expand Up @@ -265,17 +265,17 @@ function getAccessHelper() {
* @return array
*/
function getRequestArgs() {
return array(
return [
'submissionId' => $this->getSubmission()->getId(),
'stageId' => $this->getStageId(),
);
];
}

/**
* @copydoc GridHandler::loadData()
*/
function loadData($request, $filter = null) {
$queryDao = DAORegistry::getDAO('QueryDAO'); /* @var $queryDao QueryDAO */
$queryDao = DAORegistry::getDAO('QueryDAO'); /** @var QueryDAO $queryDao */
return $queryDao->getByAssoc(
$this->getAssocType(),
$this->getAssocId(),
Expand All @@ -289,8 +289,8 @@ function loadData($request, $filter = null) {
//
/**
* Add a query
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function addQuery($args, $request) {
Expand All @@ -309,18 +309,18 @@ function addQuery($args, $request) {

/**
* Delete a query.
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function deleteQuery($args, $request) {
$query = $this->getQuery();
if (!$request->checkCSRF() || !$query || !$this->getAccessHelper()->getCanDelete($query->getId())) return new JSONMessage(false);

$queryDao = DAORegistry::getDAO('QueryDAO'); /* @var $queryDao QueryDAO */
$queryDao = DAORegistry::getDAO('QueryDAO'); /** @var QueryDAO $queryDao */
$queryDao->deleteObject($query);

$notificationDao = DAORegistry::getDAO('NotificationDAO'); /* @var $notificationDao NotificationDAO */
$notificationDao = DAORegistry::getDAO('NotificationDAO'); /** @var NotificationDAO $notificationDao */
$notificationDao->deleteByAssoc(ASSOC_TYPE_QUERY, $query->getId());

if ($this->getStageId() == WORKFLOW_STAGE_ID_EDITING ||
Expand All @@ -330,12 +330,12 @@ function deleteQuery($args, $request) {
$notificationMgr = new NotificationManager();
$notificationMgr->updateNotification(
$request,
array(
[
NOTIFICATION_TYPE_ASSIGN_COPYEDITOR,
NOTIFICATION_TYPE_AWAITING_COPYEDITS,
NOTIFICATION_TYPE_ASSIGN_PRODUCTIONUSER,
NOTIFICATION_TYPE_AWAITING_REPRESENTATIONS,
),
],
null,
ASSOC_TYPE_SUBMISSION,
$this->getAssocId()
Expand All @@ -347,31 +347,31 @@ function deleteQuery($args, $request) {

/**
* Open a closed query.
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function openQuery($args, $request) {
$query = $this->getQuery();
if (!$query || !$this->getAccessHelper()->getCanOpenClose($query)) return new JSONMessage(false);

$queryDao = DAORegistry::getDAO('QueryDAO'); /* @var $queryDao QueryDAO */
$queryDao = DAORegistry::getDAO('QueryDAO'); /** @var QueryDAO $queryDao */
$query->setIsClosed(false);
$queryDao->updateObject($query);
return DAO::getDataChangedEvent($query->getId());
}

/**
* Close an open query.
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function closeQuery($args, $request) {
$query = $this->getQuery();
if (!$query || !$this->getAccessHelper()->getCanOpenClose($query)) return new JSONMessage(false);

$queryDao = DAORegistry::getDAO('QueryDAO'); /* @var $queryDao QueryDAO */
$queryDao = DAORegistry::getDAO('QueryDAO'); /** @var QueryDAO $queryDao */
$query->setIsClosed(true);
$queryDao->updateObject($query);
return DAO::getDataChangedEvent($query->getId());
Expand All @@ -387,8 +387,8 @@ function getQueryNotesGridHandlerName() {

/**
* Read a query
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function readQuery($args, $request) {
Expand All @@ -397,7 +397,7 @@ function readQuery($args, $request) {
$user = $request->getUser();
$context = $request->getContext();

$actionArgs = array_merge($this->getRequestArgs(), array('queryId' => $query->getId()));
$actionArgs = array_merge($this->getRequestArgs(), ['queryId' => $query->getId()]);

// If appropriate, create an Edit action for the participants list
if ($this->getAccessHelper()->getCanEdit($query->getId())) {
Expand Down Expand Up @@ -438,31 +438,31 @@ function readQuery($args, $request) {
}

$templateMgr = TemplateManager::getManager($request);
$templateMgr->assign(array(
$templateMgr->assign([
'queryNotesGridHandlerName' => $this->getQueryNotesGridHandlerName(),
'requestArgs' => $this->getRequestArgs(),
'query' => $query,
'editAction' => $editAction,
'leaveQueryLinkAction' => $leaveQueryLinkAction,
'showLeaveQueryButton' => $showLeaveQueryButton,
));
]);
return new JSONMessage(true, $templateMgr->fetch('controllers/grid/queries/readQuery.tpl'));
}

/**
* Fetch the list of participants for a query
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function participants($args, $request) {
$query = $this->getQuery();
$queryDao = DAORegistry::getDAO('QueryDAO'); /* @var $queryDao QueryDAO */
$userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
$queryDao = DAORegistry::getDAO('QueryDAO'); /** @var QueryDAO $queryDao */
$userDao = DAORegistry::getDAO('UserDAO'); /** @var UserDAO $userDao */
$context = $request->getContext();
$user = $request->getUser();

$participants = array();
$participants = [];
foreach ($queryDao->getParticipantIds($query->getId()) as $userId) {
$participants[] = $userDao->getById($userId);
}
Expand All @@ -478,14 +478,14 @@ function participants($args, $request) {
$json = new JSONMessage();
$json->setStatus(true);
$json->setContent($templateMgr->fetch('controllers/grid/queries/participants.tpl'));
$json->setAdditionalAttributes(array('showLeaveQueryButton' => $showLeaveQueryButton));
$json->setAdditionalAttributes(['showLeaveQueryButton' => $showLeaveQueryButton]);
return $json;
}

/**
* Edit a query
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function editQuery($args, $request) {
Expand All @@ -507,8 +507,8 @@ function editQuery($args, $request) {

/**
* Save a query
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function updateQuery($args, $request) {
Expand All @@ -535,12 +535,12 @@ function updateQuery($args, $request) {
$notificationMgr = new NotificationManager();
$notificationMgr->updateNotification(
$request,
array(
[
NOTIFICATION_TYPE_ASSIGN_COPYEDITOR,
NOTIFICATION_TYPE_AWAITING_COPYEDITS,
NOTIFICATION_TYPE_ASSIGN_PRODUCTIONUSER,
NOTIFICATION_TYPE_AWAITING_REPRESENTATIONS,
),
],
null,
ASSOC_TYPE_SUBMISSION,
$this->getAssocId()
Expand All @@ -556,24 +556,23 @@ function updateQuery($args, $request) {
false,
array_merge(
$this->getRequestArgs(),
array('queryId' => $query->getId())
['queryId' => $query->getId()]
)
)
);
}

/**
* Leave query
* @param $args array
* @param $request PKPRequest
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
function leaveQuery($args, $request) {
$queryId = $args['queryId'];
$user = $request->getUser();
$context = $request->getContext();
if ($user && $this->_getCurrentUserCanLeave($queryId)) {
$queryDao = DAORegistry::getDAO('QueryDAO'); /* @var $queryDao QueryDAO */
$queryDao = DAORegistry::getDAO('QueryDAO'); /** @var QueryDAO $queryDao */
$queryDao->removeParticipant($queryId, $user->getId());
$json = new JSONMessage();
$json->setEvent('user-left-discussion');
Expand All @@ -585,23 +584,44 @@ function leaveQuery($args, $request) {

/**
* Check if the current user can leave a query. Only allow if query has more than two participants.
* @param $queryId int
* @param int $queryId
* @return boolean
*/
function _getCurrentUserCanLeave($queryId) {
$userRoles = $this->getAuthorizedContextObject(ASSOC_TYPE_USER_ROLES);
if (!in_array(ROLE_ID_MANAGER, $userRoles)) {
return false;
return false;
}
$queryDao = DAORegistry::getDAO('QueryDAO'); /* @var $queryDao QueryDAO */
$queryDao = DAORegistry::getDAO('QueryDAO'); /** @var QueryDAO $queryDao */
$participantIds = $queryDao->getParticipantIds($queryId);
if (count($participantIds) < 3) {
return false;
return false;
}
$user = Application::get()->getRequest()->getUser();
return in_array($user->getId(), $participantIds);
}

/**
* Fetches an email template's message body.
* @param array $args
* @param PKPRequest $request
* @return JSONMessage JSON object
*/
public function fetchTemplateBody(array $args, PKPRequest $request) : JSONMessage {
$templateId = $request->getUserVar('template');
import('lib.pkp.classes.mail.SubmissionMailTemplate');
$template = new SubmissionMailTemplate($this->getSubmission(), $templateId);
if ($template) {
$user = $request->getUser();
$template->assignParams([
'editorialContactSignature' => $user->getContactSignature(),
'signatureFullName' => $user->getFullname(),
]);
$template->replaceParams();
return new JSONMessage(
true,
['body' => $template->getBody()]
);
}
}
}


0 comments on commit 65cbd87

Please sign in to comment.