Skip to content

Commit

Permalink
*8451* let custom templates be used for notifications, reviewer addit…
Browse files Browse the repository at this point in the history
…ions
  • Loading branch information
jnugent committed Oct 22, 2013
1 parent 671b94c commit 4addca7
Show file tree
Hide file tree
Showing 10 changed files with 209 additions and 9 deletions.
27 changes: 26 additions & 1 deletion controllers/grid/users/reviewer/ReviewerGridHandler.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,31 @@ function reviewHistory($args, &$request) {
}


/**
* Fetches an email template's message body and returns it via AJAX.
* @param $args array
* @param $request PKPRequest
*/
function fetchTemplateBody($args, $request) {
$templateId = $request->getUserVar('template');
import('classes.mail.MonographMailTemplate');
$template = new MonographMailTemplate($this->getMonograph(), $templateId);
if ($template) {
$user = $request->getUser();
$dispatcher = $request->getDispatcher();
$context = $request->getContext();

$template->assignParams(array(
'editorialContactSignature' => $user->getContactSignature(),
'signatureFullName' => $user->getFullname(),
));

$json = new JSONMessage(true, $template->getBody() . "\n" . $context->getSetting('emailSignature'));
return $json->getString();
}
}


//
// Private helper methods
//
Expand Down Expand Up @@ -715,7 +740,7 @@ function _getReviewAssignmentOps() {
function _getReviewRoundOps() {
// Define operations that need a review round policy.
return array('fetchGrid', 'fetchRow', 'showReviewerForm', 'reloadReviewerForm', 'createReviewer', 'enrollReviewer', 'updateReviewer',
'getReviewersNotAssignedToMonograph', 'getUsersNotAssignedAsReviewers');
'getReviewersNotAssignedToMonograph', 'getUsersNotAssignedAsReviewers', 'fetchTemplateBody');
}

/**
Expand Down
29 changes: 28 additions & 1 deletion controllers/grid/users/reviewer/form/ReviewerForm.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -210,11 +210,37 @@ function fetch(&$request) {
// Get the review method options.
$reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO');
$reviewMethods = $reviewAssignmentDao->getReviewMethodsTranslationKeys();
$submission = $this->getMonograph();

$templateMgr =& TemplateManager::getManager();
$templateMgr->assign('reviewMethods', $reviewMethods);
$templateMgr->assign('reviewerActions', $this->getReviewerFormActions());

// Allow the default template
$templateKeys[] = 'REVIEW_REQUEST';

// Determine if the current user can use any custom templates defined.
$user = $request->getUser();
$roleDao = DAORegistry::getDAO('RoleDAO');

$userRoles = $roleDao->getByUserId($user->getId(), $this->getMonographId());
foreach ($userRoles as $userRole) {
if (in_array($userRole->getId(), array(ROLE_ID_PRESS_MANAGER, ROLE_ID_SERIES_EDITOR, ROLE_ID_PRESS_ASSISTANT))) {
$emailTemplateDao = DAORegistry::getDAO('EmailTemplateDAO');
$customTemplates = $emailTemplateDao->getCustomTemplateKeys(ASSOC_TYPE_PRESS, $submission->getPressId());
$templateKeys = array_merge($templateKeys, $customTemplates);
break;
}
}

foreach ($templateKeys as $templateKey) {
$template = new MonographMailTemplate($submission, $templateKey, null, null, null, false);
$template->assignParams(array());
$templates[$templateKey] = $template->getSubject();
}

$templateMgr->assign('templates', $templates);

// Get the reviewer user groups for the create new reviewer/enroll existing user tabs
$press =& $request->getPress();
$userGroupDao =& DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
Expand Down Expand Up @@ -243,6 +269,7 @@ function readInputData() {
'reviewDueDate',
'reviewMethod',
'skipEmail',
'template',
'keywords',
'interestsTextOnly',
'reviewRoundId',
Expand Down Expand Up @@ -307,7 +334,7 @@ function execute($args, &$request) {

// Notify the reviewer via email.
import('classes.mail.MonographMailTemplate');
$mail = new MonographMailTemplate($submission, 'REVIEW_REQUEST', null, null, null, false);
$mail = new MonographMailTemplate($submission, $this->getData('template'), null, null, null, false);

if ($mail->isEnabled() && !$this->getData('skipEmail')) {
$userDao = & DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,26 @@ function fetch(&$request) {
$templateMgr->assign_by_ref('monographId', $monographId);
$templateMgr->assign_by_ref('itemId', $this->itemId);

$monographDao =& DAORegistry::getDAO('MonographDAO');
$monograph =& $monographDao->getById($monographId);

// All stages can choose the default template
$templateKeys = array('NOTIFICATION_CENTER_DEFAULT');

// Determine if the current user can use any custom templates defined.
$user = $request->getUser();
$roleDao = DAORegistry::getDAO('RoleDAO');
$userRoles = $roleDao->getByUserId($user->getId(), $monograph->getPressId());
foreach ($userRoles as $userRole) {
if (in_array($userRole->getId(), array(ROLE_ID_PRESS_MANAGER, ROLE_ID_SERIES_EDITOR, ROLE_ID_PRESS_ASSISTANT))) {
$emailTemplateDao = DAORegistry::getDAO('EmailTemplateDAO');
$customTemplates = $emailTemplateDao->getCustomTemplateKeys(ASSOC_TYPE_PRESS, $monograph->getPressId());
$templateKeys = array_merge($templateKeys, $customTemplates);
break;
}
}


// template keys indexed by stageId
$stageTemplates = array(
WORKFLOW_STAGE_ID_SUBMISSION => array(),
Expand All @@ -65,8 +82,6 @@ function fetch(&$request) {
WORKFLOW_STAGE_ID_PRODUCTION => array('LAYOUT_REQUEST', 'LAYOUT_COMPLETE', 'INDEX_REQUEST', 'INDEX_COMPLETE', 'EDITOR_ASSIGN')
);

$monographDao =& DAORegistry::getDAO('MonographDAO');
$monograph =& $monographDao->getById($monographId);
$currentStageId = $monograph->getStageId();

$templateKeys = array_merge($templateKeys, $stageTemplates[$currentStageId]);
Expand Down
110 changes: 110 additions & 0 deletions js/controllers/grid/users/reviewer/form/AddReviewerFormHandler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/**
* @defgroup js_controllers_grid_users_reviewer_form
*/
/**
* @file js/controllers/grid/users/reviewer/form/AddReviewerFormHandler.js
*
* Copyright (c) 2000-2013 John Willinsky
* Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
*
* @class AddReviewerFormHandler
* @ingroup js_controllers_grid_users_reviewer_form
*
* @brief Handle the Add Reviewer form (and template for message body).
*/
(function($) {

/** @type {Object} */
$.pkp.controllers.grid.users.reviewer =
$.pkp.controllers.grid.users.reviewer ||
{ form: { } };



/**
* @constructor
*
* @extends $.pkp.controllers.form.AjaxFormHandler
*
* @param {jQueryObject} $form the wrapped HTML form element.
* @param {Object} options form options.
*/
$.pkp.controllers.grid.users.reviewer.form.
AddReviewerFormHandler = function($form, options) {

this.parent($form, options);

// Set the URL to retrieve templates from.
if (options.templateUrl) {
this.templateUrl_ = options.templateUrl;
}

// Attach form elements events.
$form.find('#template').change(
this.callbackWrapper(this.selectTemplateHandler_));
};
$.pkp.classes.Helper.inherits(
$.pkp.controllers.grid.users.reviewer.form.
AddReviewerFormHandler,
$.pkp.controllers.form.AjaxFormHandler);


//
// Private properties
//
/**
* The URL to use to retrieve template bodies
* @private
* @type {string?}
*/
$.pkp.controllers.grid.users.reviewer.form.
AddReviewerFormHandler.prototype.templateUrl_ = null;


//
// Private methods
//
/**
* Respond to an "item selected" call by triggering a published event.
*
* @param {HTMLElement} sourceElement The element that
* issued the event.
* @param {Event} event The triggering event.
* @private
*/
$.pkp.controllers.grid.users.reviewer.form.
AddReviewerFormHandler.prototype.selectTemplateHandler_ =
function(sourceElement, event) {

var $form = this.getHtmlElement();
$.post(this.templateUrl_, $form.find('#template').serialize(),
this.callbackWrapper(this.updateTemplate), 'json');
};


/**
* Internal callback to replace the textarea with the contents of the
* template body.
*
* @param {HTMLElement} formElement The wrapped HTML form.
* @param {Object} jsonData The data returned from the server.
* @return {boolean} The response status.
*/
$.pkp.controllers.grid.users.reviewer.form.
AddReviewerFormHandler.prototype.updateTemplate =
function(formElement, jsonData) {

var $form = this.getHtmlElement(),
processedJsonData = this.handleJson(jsonData);

if (processedJsonData !== false) {
if (processedJsonData.content !== '') {
$form.find('textarea[name="personalMessage"]').val(processedJsonData.content);
}
}
return processedJsonData.status;
};

/** @param {jQuery} $ jQuery closure. */
}(jQuery));

1 change: 1 addition & 0 deletions templates/common/minifiedScripts.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
<script type="text/javascript" src="{$baseUrl}/lib/pkp/js/controllers/wizard/fileUpload/form/FileUploadFormHandler.js"></script>
<script type="text/javascript" src="{$baseUrl}/lib/pkp/js/controllers/wizard/fileUpload/form/RevisionConfirmationHandler.js"></script>
<script type="text/javascript" src="{$baseUrl}/js/controllers/grid/users/reviewer/AdvancedReviewerSearchHandler.js"></script>
<script type="text/javascript" src="{$baseUrl}/js/controllers/grid/users/reviewer/form/AddReviewerFormHandler.js"></script>
<script type="text/javascript" src="{$baseUrl}/js/controllers/grid/users/stageParticipant/form/AddParticipantFormHandler.js"></script>
<script type="text/javascript" src="{$baseUrl}/js/controllers/grid/content/spotlights/form/SpotlightFormHandler.js"></script>
<script type="text/javascript" src="{$baseUrl}/js/controllers/grid/files/signoff/form/AddAuditorFormHandler.js"></script>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@
<script type="text/javascript">
$(function() {ldelim}
// Attach the form handler.
$('#createReviewerForm').pkpHandler('$.pkp.controllers.form.AjaxFormHandler');
$('#createReviewerForm').pkpHandler('$.pkp.controllers.grid.users.reviewer.form.AddReviewerFormHandler',
{ldelim}
templateUrl: "{url|escape:'javascript' router=$smarty.const.ROUTE_COMPONENT component='grid.users.reviewer.ReviewerGridHandler' op='fetchTemplateBody' stageId=$stageId reviewRoundId=$reviewRoundId monographId=$monographId escape=false}"
{rdelim}
);
{rdelim});
</script>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@
<script type="text/javascript">
$(function() {ldelim}
// Attach the form handler.
$('#defaultReviewerForm').pkpHandler('$.pkp.controllers.form.AjaxFormHandler');
$('#defaultReviewerForm').pkpHandler('$.pkp.controllers.grid.users.reviewer.form.AddReviewerFormHandler',
{ldelim}
templateUrl: "{url|escape:'javascript' router=$smarty.const.ROUTE_COMPONENT component='grid.users.reviewer.ReviewerGridHandler' op='fetchTemplateBody' stageId=$stageId reviewRoundId=$reviewRoundId monographId=$monographId escape=false}"
{rdelim}
);
{rdelim});
</script>

<form class="pkp_form" id="searchByNameReviewerForm" method="post" action="{url op="updateReviewer"}" >
<form class="pkp_form" id="defaultReviewerForm" method="post" action="{url op="updateReviewer"}" >

{include file="controllers/grid/users/reviewer/form/reviewerFormFooter.tpl"}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@
<script type="text/javascript">
$(function() {ldelim}
// Attach the form handler.
$('#enrollExistingReviewerForm').pkpHandler('$.pkp.controllers.form.AjaxFormHandler');
$('#enrollExistingReviewerForm').pkpHandler('$.pkp.controllers.grid.users.reviewer.form.AddReviewerFormHandler',
{ldelim}
templateUrl: "{url|escape:'javascript' router=$smarty.const.ROUTE_COMPONENT component='grid.users.reviewer.ReviewerGridHandler' op='fetchTemplateBody' stageId=$stageId reviewRoundId=$reviewRoundId monographId=$monographId escape=false}"
{rdelim}
);
{rdelim});
</script>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
</script>

<div class="reviewerFormFooterContainer">
<!-- message template choice -->
{fbvFormSection title="informationCenter.notify.chooseMessage" for="template" size=$fbvStyles.size.medium}
{fbvElement type="select" from=$templates translate=false id="template" defaultValue="" defaultLabel=""}
{/fbvFormSection}


<!-- Message to reviewer textarea -->
{fbvFormSection title="editor.review.personalMessageToReviewer" for="personalMessage"}
{fbvElement type="textarea" name="personalMessage" id="personalMessage" value=$personalMessage|escape}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@
<script type="text/javascript">
$(function() {ldelim}
// Attach the form handler.
$('#searchByNameReviewerForm').pkpHandler('$.pkp.controllers.form.AjaxFormHandler');
$('#searchByNameReviewerForm').pkpHandler('$.pkp.controllers.grid.users.reviewer.form.AddReviewerFormHandler',
{ldelim}
templateUrl: "{url|escape:'javascript' router=$smarty.const.ROUTE_COMPONENT component='grid.users.reviewer.ReviewerGridHandler' op='fetchTemplateBody' stageId=$stageId reviewRoundId=$reviewRoundId monographId=$monographId escape=false}"
{rdelim}
);
{rdelim});
</script>

Expand Down

0 comments on commit 4addca7

Please sign in to comment.