/** * Sends an email with a personal message and the selected * review attachements to the author. Also marks review attachments * selected by the editor as "viewable" for the author. * @param $submission Submission * @param $emailKey string An email template. * @param $request PKPRequest */ function _sendReviewMailToAuthor($submission, $emailKey, $request) { // Send personal message to author. import('lib.pkp.classes.mail.SubmissionMailTemplate'); $email = new SubmissionMailTemplate($submission, $emailKey, null, null, null, false); $email->setBody($this->getData('personalMessage')); $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); $userDao = DAORegistry::getDAO('UserDAO'); $submitterAssignments = $stageAssignmentDao->getBySubmissionAndRoleId($submission->getId(), ROLE_ID_AUTHOR); while ($submitterAssignment = $submitterAssignments->next()) { $submitterUser = $userDao->getById($submitterAssignment->getUserId()); $email->addRecipient($submitterUser->getEmail(), $submitterUser->getFullName()); } DAORegistry::getDAO('SubmissionEmailLogDAO'); // Load constants $email->setEventType(SUBMISSION_EMAIL_EDITOR_NOTIFY_AUTHOR); // Get review round. $reviewRound = $this->getReviewRound(); if (is_a($reviewRound, 'ReviewRound')) { // Retrieve review indexes. $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */ $reviewIndexes = $reviewAssignmentDao->getReviewIndexesForRound($submission->getId(), $reviewRound->getId()); assert(is_array($reviewIndexes)); // Add a review index for review attachments not associated with // a review assignment (i.e. attachments uploaded by the editor). $lastIndex = end($reviewIndexes); $reviewIndexes[-1] = $lastIndex + 1; // Attach the selected reviewer attachments to the email. $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */ $selectedAttachments = $this->getData('selectedAttachments'); if (is_array($selectedAttachments)) { foreach ($selectedAttachments as $fileId) { // Retrieve the submission file. $submissionFile = $submissionFileDao->getLatestRevision($fileId); assert(is_a($submissionFile, 'SubmissionFile')); // Check the association information. if ($submissionFile->getAssocType() == ASSOC_TYPE_REVIEW_ASSIGNMENT) { // The review attachment has been uploaded by a reviewer. $reviewAssignmentId = $submissionFile->getAssocId(); assert(is_numeric($reviewAssignmentId)); } else { // The review attachment has been uploaded by the editor. $reviewAssignmentId = -1; } // Identify the corresponding review index. assert(isset($reviewIndexes[$reviewAssignmentId])); $reviewIndex = $reviewIndexes[$reviewAssignmentId]; assert(!is_null($reviewIndex)); // Add the attachment to the email. $email->addAttachment($submissionFile->getFilePath(), String::enumerateAlphabetically($reviewIndex) . '-' . $submissionFile->getOriginalFileName()); // Update submission file to set viewable as true, so author // can view the file on their submission summary page. $submissionFile->setViewable(true); $submissionFileDao->updateObject($submissionFile); } } } // Send the email. if (!$this->getData('skipEmail')) { $router = $request->getRouter(); $dispatcher = $router->getDispatcher(); $context = $request->getContext(); $email->assignParams(array('submissionUrl' => $dispatcher->url($request, ROUTE_PAGE, null, 'authorDashboard', 'submission', $submission->getId()), 'contextName' => $context->getLocalizedName())); $email->send($request); } }
/** * Assign user to copyedit the selected files * @see Form::execute() */ function execute($request) { // Decode the "files" list import('lib.pkp.classes.controllers.listbuilder.ListbuilderHandler'); ListbuilderHandler::unpack($request, $this->getData('files')); // Send the message to the user $submission = $this->getSubmission(); import('lib.pkp.classes.mail.SubmissionMailTemplate'); $email = new SubmissionMailTemplate($submission, 'AUDITOR_REQUEST', null, null, null, false); $email->setBody($this->getData('personalMessage')); $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */ // FIXME: How to validate user IDs? $user = $userDao->getById($this->getData('userId')); import('lib.pkp.controllers.grid.submissions.SubmissionsListGridCellProvider'); list($page, $operation) = SubmissionsListGridCellProvider::getPageAndOperationByUserRoles($request, $submission, $user->getId()); $dispatcher = $request->getDispatcher(); $auditUrl = $dispatcher->url($request, ROUTE_PAGE, null, $page, $operation, array('submissionId' => $submission->getId())); // Other parameters assigned above; see bug #7090. $email->assignParams(array('auditorName' => $user->getFullName(), 'auditorUserName' => $user->getUsername(), 'auditUrl' => $auditUrl)); $email->addRecipient($user->getEmail(), $user->getFullName()); $email->setEventType($this->getEventType()); if (!$this->getData('skipEmail')) { $email->send($request); } }