function sendMessage($userId, $submission, $request)
{
$template = $this->getData('template');
$fromUser = $request->getUser();
$email = $this->_getMailTemplate($submission, $template, false);
$email->setReplyTo($fromUser->getEmail(), $fromUser->getFullName());
import('lib.pkp.controllers.grid.submissions.SubmissionsListGridCellProvider');
$dispatcher = $request->getDispatcher();
$userDao = DAORegistry::getDAO('UserDAO');
$user = $userDao->getById($userId);
if (isset($user)) {
$email->addRecipient($user->getEmail(), $user->getFullName());
$email->setBody($this->getData('message'));
$submissionUrl = SubmissionsListGridCellProvider::getUrlByUserRoles($request, $submission, $user->getId());
// Parameters for various emails
$email->assignParams(array('participantName' => $user->getFullName(), 'participantUsername' => $user->getUsername(), 'submissionUrl' => $submissionUrl, 'editorialContactName' => $user->getFullname(), 'editorUsername' => $user->getUsername()));
$email->send($request);
// remove the INDEX_ and LAYOUT_ tasks if a user has sent the appropriate _COMPLETE email
switch ($template) {
case 'COPYEDIT_REQUEST':
$this->_addAssignmentTaskNotification($request, NOTIFICATION_TYPE_COPYEDIT_ASSIGNMENT, $user->getId(), $submission->getId());
break;
case 'LAYOUT_REQUEST':
$this->_addAssignmentTaskNotification($request, NOTIFICATION_TYPE_LAYOUT_ASSIGNMENT, $user->getId(), $submission->getId());
break;
case 'INDEX_REQUEST':
$this->_addAssignmentTaskNotification($request, NOTIFICATION_TYPE_INDEX_ASSIGNMENT, $user->getId(), $submission->getId());
break;
}
// Create a query
$queryDao = DAORegistry::getDAO('QueryDAO');
$query = $queryDao->newDataObject();
$query->setAssocType(ASSOC_TYPE_SUBMISSION);
$query->setAssocId($submission->getId());
$query->setStageId($this->_stageId);
$query->setSequence(REALLY_BIG_NUMBER);
$queryDao->insertObject($query);
$queryDao->resequence(ASSOC_TYPE_SUBMISSION, $submission->getId());
// Add the current user and message recipient as participants.
$queryDao->insertParticipant($query->getId(), $user->getId());
if ($user->getId() != $request->getUser()->getId()) {
$queryDao->insertParticipant($query->getId(), $request->getUser()->getId());
}
// Create a head note
$noteDao = DAORegistry::getDAO('NoteDAO');
$headNote = $noteDao->newDataObject();
$headNote->setUserId($request->getUser()->getId());
$headNote->setAssocType(ASSOC_TYPE_QUERY);
$headNote->setAssocId($query->getId());
$headNote->setDateCreated(Core::getCurrentDate());
$headNote->setTitle($email->getSubject());
$headNote->setContents($email->getBody());
$noteDao->insertObject($headNote);
$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, $submission->getId());
}
}