Fix work notifications see BT#13533

- Fix wrong URL for students
- Fix missing get_lang in template
- Add optional sms parameters, in order to use the SMS plugins.
- Format code
- Validate user using api_get_user_info()
- Change function parameter order
pull/2487/head
jmontoyaa 8 years ago
parent d8bfcdf073
commit 61e12ac27b
  1. 24
      main/inc/lib/message.lib.php
  2. 11
      main/inc/lib/notification.lib.php
  3. 2
      main/template/default/mail/new_work_alert_hrm.tpl
  4. 80
      main/work/work.lib.php

@ -269,6 +269,7 @@ class MessageManager
* @param int $sender_id * @param int $sender_id
* @param bool $directMessage * @param bool $directMessage
* @param int $forwardId * @param int $forwardId
* @param array $smsParameters
* *
* @return bool * @return bool
*/ */
@ -284,7 +285,8 @@ class MessageManager
$topic_id = 0, $topic_id = 0,
$sender_id = null, $sender_id = null,
$directMessage = false, $directMessage = false,
$forwardId = 0 $forwardId = 0,
$smsParameters = []
) { ) {
$table_message = Database::get_main_table(TABLE_MESSAGE); $table_message = Database::get_main_table(TABLE_MESSAGE);
$group_id = intval($group_id); $group_id = intval($group_id);
@ -493,6 +495,8 @@ class MessageManager
* @param int $sender_id * @param int $sender_id
* @param bool $sendCopyToDrhUsers send copy to related DRH users * @param bool $sendCopyToDrhUsers send copy to related DRH users
* @param bool $directMessage * @param bool $directMessage
* @param bool $smsParameters
* @param bool $uploadFiles Do not upload files using the MessageManager class
* *
* @return bool * @return bool
*/ */
@ -502,20 +506,28 @@ class MessageManager
$message, $message,
$sender_id = null, $sender_id = null,
$sendCopyToDrhUsers = false, $sendCopyToDrhUsers = false,
$directMessage = false $directMessage = false,
$smsParameters = [],
$uploadFiles = true
) { ) {
$files = $_FILES ? $_FILES : [];
if ($uploadFiles === false) {
$files = [];
}
$result = self::send_message( $result = self::send_message(
$receiver_user_id, $receiver_user_id,
$subject, $subject,
$message, $message,
$_FILES ? $_FILES : [], $files,
[], [],
null, null,
null, null,
null, null,
null, null,
$sender_id, $sender_id,
$directMessage $directMessage,
0,
$smsParameters
); );
if ($sendCopyToDrhUsers) { if ($sendCopyToDrhUsers) {
@ -677,7 +689,7 @@ class MessageManager
// user's file name // user's file name
$file_name = $file_attach['name']; $file_name = $file_attach['name'];
if (!filter_extension($new_file_name)) { if (!filter_extension($new_file_name)) {
echo Display::return_message(get_lang('UplUnableToSaveFileFilteredExtension'), 'error'); Display::addFlash(Display::return_message(get_lang('UplUnableToSaveFileFilteredExtension'), 'error'));
} else { } else {
$new_file_name = uniqid(''); $new_file_name = uniqid('');
if (!empty($receiver_user_id)) { if (!empty($receiver_user_id)) {
@ -699,11 +711,11 @@ class MessageManager
} }
$path_message_attach = $path_user_info['dir'].'message_attachments/'; $path_message_attach = $path_user_info['dir'].'message_attachments/';
// If this directory does not exist - we create it. // If this directory does not exist - we create it.
if (!file_exists($path_message_attach)) { if (!file_exists($path_message_attach)) {
@mkdir($path_message_attach, api_get_permissions_for_new_directories(), true); @mkdir($path_message_attach, api_get_permissions_for_new_directories(), true);
} }
$new_path = $path_message_attach.$new_file_name; $new_path = $path_message_attach.$new_file_name;
if (is_uploaded_file($file_attach['tmp_name'])) { if (is_uploaded_file($file_attach['tmp_name'])) {
@copy($file_attach['tmp_name'], $new_path); @copy($file_attach['tmp_name'], $new_path);

@ -221,6 +221,7 @@ class Notification extends Model
* @param string $content * @param string $content
* @param array $senderInfo result of api_get_user_info() or GroupPortalManager:get_group_data() * @param array $senderInfo result of api_get_user_info() or GroupPortalManager:get_group_data()
* @param array $attachments * @param array $attachments
* @param array $smsParameters
* *
*/ */
public function save_notification( public function save_notification(
@ -228,8 +229,9 @@ class Notification extends Model
$userList, $userList,
$title, $title,
$content, $content,
$senderInfo = array(), $senderInfo = [],
$attachments = array() $attachments = [],
$smsParameters = []
) { ) {
$this->type = intval($type); $this->type = intval($type);
$content = $this->formatContent($content, $senderInfo); $content = $this->formatContent($content, $senderInfo);
@ -297,7 +299,6 @@ class Notification extends Model
case self::NOTIFY_INVITATION_AT_ONCE: case self::NOTIFY_INVITATION_AT_ONCE:
case self::NOTIFY_GROUP_AT_ONCE: case self::NOTIFY_GROUP_AT_ONCE:
$extraHeaders = []; $extraHeaders = [];
if (isset($senderInfo['email'])) { if (isset($senderInfo['email'])) {
$extraHeaders = array( $extraHeaders = array(
'reply_to' => array( 'reply_to' => array(
@ -316,7 +317,9 @@ class Notification extends Model
$this->adminName, $this->adminName,
$this->adminEmail, $this->adminEmail,
$extraHeaders, $extraHeaders,
$attachments $attachments,
false,
$smsParameters
); );
} }
$sendDate = api_get_utc_datetime(); $sendDate = api_get_utc_datetime();

@ -1,5 +1,5 @@
<p>{{ 'DearXComma'|get_lang|format(hrm_name) }}</p> <p>{{ 'DearXComma'|get_lang|format(hrm_name) }}</p>
<p>{{ 'AsHRMYouReceiveThisMailToAlertThatXHasNewWorkInCourseY'|get_lang }}</p> <p>{{ 'AsHRMYouReceiveThisMailToAlertThatXHasNewWorkInCourseY'|get_lang | format(student.complete_name, course.name) }}</p>
<dl> <dl>
<dt>{{ 'Student'|get_lang }}</dt> <dt>{{ 'Student'|get_lang }}</dt>
<dd>{{ student.complete_name }}</dd> <dd>{{ student.complete_name }}</dd>

@ -2381,7 +2381,7 @@ function send_reminder_users_without_publication($task_data)
foreach ($list_users as $user) { foreach ($list_users as $user) {
$name_user = api_get_person_name($user[1], $user[0], null, PERSON_NAME_EMAIL_ADDRESS); $name_user = api_get_person_name($user[1], $user[0], null, PERSON_NAME_EMAIL_ADDRESS);
$dear_line = get_lang('Dear')." ".api_get_person_name($user[1], $user[0]).", \n\n"; $dear_line = get_lang('Dear')." ".api_get_person_name($user[1], $user[0]).", \n\n";
$body = $dear_line.$content; $body = $dear_line.$content;
MessageManager::send_message($user[3], $subject, $body); MessageManager::send_message($user[3], $subject, $body);
$mails_sent_to[] = $name_user; $mails_sent_to[] = $name_user;
} }
@ -2389,18 +2389,18 @@ function send_reminder_users_without_publication($task_data)
} }
/** /**
* @param int $courseId The course ID
* @param int $workId The work ID * @param int $workId The work ID
* @param int $courseId The course ID
* @param int $sessionId Optional. The session ID * @param int $sessionId Optional. The session ID
*/ */
function sendEmailToDrhOnHomeworkCreation($courseId, $workId, $sessionId = 0) function sendEmailToDrhOnHomeworkCreation($workId, $courseId, $sessionId = 0)
{ {
$courseInfo = api_get_course_info_by_id($courseId); $courseInfo = api_get_course_info_by_id($courseId);
$assignment = get_work_assignment_by_id($workId, $courseId); $assignment = get_work_assignment_by_id($workId, $courseId);
$work = get_work_data_by_id($workId, $courseId, $sessionId); $work = get_work_data_by_id($workId, $courseId, $sessionId);
$workInfo = array_merge($assignment, $work); $workInfo = array_merge($assignment, $work);
if (empty($session_id)) { if (empty($sessionId)) {
$students = CourseManager::get_student_list_from_course_code($courseInfo['code']); $students = CourseManager::get_student_list_from_course_code($courseInfo['code']);
} else { } else {
$students = CourseManager::get_student_list_from_course_code($courseInfo['code'], true, $sessionId); $students = CourseManager::get_student_list_from_course_code($courseInfo['code'], true, $sessionId);
@ -2409,14 +2409,17 @@ function sendEmailToDrhOnHomeworkCreation($courseId, $workId, $sessionId = 0)
$bodyView = new Template(null, false, false, false, false, false); $bodyView = new Template(null, false, false, false, false, false);
foreach ($students as $student) { foreach ($students as $student) {
$student['complete_name'] = api_get_person_name($student["firstname"], $student["lastname"]); $studentInfo = api_get_user_info($student['user_id']);
$hrms = UserManager::getDrhListFromUser($student['id']); if (empty($studentInfo)) {
continue;
}
$hrms = UserManager::getDrhListFromUser($student['id']);
foreach ($hrms as $hrm) { foreach ($hrms as $hrm) {
$hrmName = api_get_person_name($hrm['firstname'], $hrm['lastname'], null, PERSON_NAME_EMAIL_ADDRESS); $hrmName = api_get_person_name($hrm['firstname'], $hrm['lastname'], null, PERSON_NAME_EMAIL_ADDRESS);
$bodyView->assign('hrm_name', $hrmName); $bodyView->assign('hrm_name', $hrmName);
$bodyView->assign('student', $student); $bodyView->assign('student', $studentInfo);
$bodyView->assign('course', $courseInfo); $bodyView->assign('course', $courseInfo);
$bodyView->assign('course_link', api_get_course_url($courseInfo['code'], $sessionId)); $bodyView->assign('course_link', api_get_course_url($courseInfo['code'], $sessionId));
$bodyView->assign('work', $workInfo); $bodyView->assign('work', $workInfo);
@ -2439,20 +2442,19 @@ function sendEmailToDrhOnHomeworkCreation($courseId, $workId, $sessionId = 0)
/** /**
* Sends an email to the students of a course when a homework is created * Sends an email to the students of a course when a homework is created
* *
* @param int $courseId course_id * @param int $workId
* @param int $sessionId session_id * @param int $courseId
* @param int $workId work_id * @param int $sessionId
*
* *
* @author Guillaume Viguier <guillaume.viguier@beeznest.com> * @author Guillaume Viguier <guillaume.viguier@beeznest.com>
* @author Julio Montoya <gugli100@gmail.com> Adding session support - 2011 * @author Julio Montoya <gugli100@gmail.com> Adding session support - 2011
*/ */
function sendEmailToStudentsOnHomeworkCreation($courseId, $sessionId = 0, $workId) function sendEmailToStudentsOnHomeworkCreation($workId, $courseId, $sessionId = 0)
{ {
$courseInfo = api_get_course_info_by_id($courseId); $courseInfo = api_get_course_info_by_id($courseId);
$courseCode = $courseInfo['code']; $courseCode = $courseInfo['code'];
// Get the students of the course // Get the students of the course
if (empty($session_id)) { if (empty($sessionId)) {
$students = CourseManager::get_student_list_from_course_code($courseCode); $students = CourseManager::get_student_list_from_course_code($courseCode);
} else { } else {
$students = CourseManager::get_student_list_from_course_code($courseCode, true, $sessionId); $students = CourseManager::get_student_list_from_course_code($courseCode, true, $sessionId);
@ -2461,43 +2463,30 @@ function sendEmailToStudentsOnHomeworkCreation($courseId, $sessionId = 0, $workI
$currentUser = api_get_user_info(api_get_user_id()); $currentUser = api_get_user_info(api_get_user_id());
if (!empty($students)) { if (!empty($students)) {
foreach ($students as $student) { foreach ($students as $student) {
$user_info = api_get_user_info($student["user_id"]); $user_info = api_get_user_info($student['user_id']);
if (!empty($user_info["mail"])) { if (!empty($user_info)) {
$name_user = api_get_person_name( $link = api_get_path(WEB_CODE_PATH).'work/work_list.php?'.api_get_cidreq().'&id='.$workId;
$user_info["firstname"], $emailbody = get_lang('Dear')." ".$user_info['complete_name'].",\n\n";
$user_info["lastname"],
null,
PERSON_NAME_EMAIL_ADDRESS
);
$link = api_get_path(WEB_CODE_PATH).'work/work_list_all.php?'.api_get_cidreq().'&id='.$workId;
$emailbody = get_lang('Dear')." ".$name_user.",\n\n";
$emailbody .= get_lang('HomeworkHasBeenCreatedForTheCourse')." ".$courseCode.". "."\n\n". $emailbody .= get_lang('HomeworkHasBeenCreatedForTheCourse')." ".$courseCode.". "."\n\n".
'<a href="'.$link.'">'.get_lang('PleaseCheckHomeworkPage').'</a>'; '<a href="'.$link.'">'.get_lang('PleaseCheckHomeworkPage').'</a>';
$emailbody .= "\n\n".api_get_person_name($currentUser["firstname"], $currentUser["lastname"]); $emailbody .= "\n\n".$currentUser['complete_name'];
$additionalParameters = array( $additionalParameters = array(
'smsType' => SmsPlugin::ASSIGNMENT_BEEN_CREATED_COURSE, 'smsType' => SmsPlugin::ASSIGNMENT_BEEN_CREATED_COURSE,
'userId' => $student["user_id"], 'userId' => $student['user_id'],
'courseTitle' => $courseCode, 'courseTitle' => $courseCode,
'link' => $link 'link' => $link
); );
api_mail_html( MessageManager::send_message_simple(
$name_user, $student['user_id'],
$user_info["mail"],
$emailsubject, $emailsubject,
$emailbody, $emailbody,
api_get_person_name(
$currentUser["firstname"],
$currentUser["lastname"],
null,
PERSON_NAME_EMAIL_ADDRESS
),
$currentUser["mail"],
null,
null, null,
null, false,
$additionalParameters false,
$additionalParameters,
false
); );
} }
} }
@ -4112,7 +4101,7 @@ function processWorkForm(
* @param int $user_id * @param int $user_id
* @param array $courseInfo * @param array $courseInfo
* @param int $groupId * @param int $groupId
* @param int $session_id * @param int $sessionId
* @return bool|int * @return bool|int
* @note $params can have the following elements, but should at least have the 2 first ones: ( * @note $params can have the following elements, but should at least have the 2 first ones: (
* 'new_dir' => 'some-name', * 'new_dir' => 'some-name',
@ -4122,7 +4111,7 @@ function processWorkForm(
* 'allow_text_assignment' => 0/1/2, * 'allow_text_assignment' => 0/1/2,
* @todo Rename createAssignment or createWork, or something like that * @todo Rename createAssignment or createWork, or something like that
*/ */
function addDir($formValues, $user_id, $courseInfo, $groupId, $session_id) function addDir($formValues, $user_id, $courseInfo, $groupId, $sessionId = 0)
{ {
$em = Database::getManager(); $em = Database::getManager();
@ -4135,7 +4124,8 @@ function addDir($formValues, $user_id, $courseInfo, $groupId, $session_id)
$groupInfo = GroupManager::get_group_properties($groupId); $groupInfo = GroupManager::get_group_properties($groupId);
$groupIid = $groupInfo['iid']; $groupIid = $groupInfo['iid'];
} }
$session = $em->find('ChamiloCoreBundle:Session', $session_id); $sessionId = (int) $sessionId;
$session = $em->find('ChamiloCoreBundle:Session', $sessionId);
$base_work_dir = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/work'; $base_work_dir = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/work';
$course_id = $courseInfo['real_id']; $course_id = $courseInfo['real_id'];
@ -4224,16 +4214,16 @@ function addDir($formValues, $user_id, $courseInfo, $groupId, $session_id)
switch ($sendEmailAlert) { switch ($sendEmailAlert) {
case 1: case 1:
sendEmailToStudentsOnHomeworkCreation( sendEmailToStudentsOnHomeworkCreation(
$workTable->getIid(),
$course_id, $course_id,
$session ? $session->getId() : 0, $sessionId
$workTable->getIid()
); );
//no break //no break
case 2: case 2:
sendEmailToDrhOnHomeworkCreation( sendEmailToDrhOnHomeworkCreation(
$course_id,
$workTable->getIid(), $workTable->getIid(),
$session ? $session->getId() : 0 $course_id,
$sessionId
); );
break; break;
} }

Loading…
Cancel
Save