From afcfc5faba3adf89ea3a5621b52849c629715bce Mon Sep 17 00:00:00 2001 From: Carlos Alvarado Date: Thu, 11 Feb 2021 15:16:12 -0500 Subject: [PATCH] Announcements: Sending group notifications from system notifications #3541 - refs BT#18151 --- main/admin/system_announcements.php | 15 +++++---- main/inc/lib/system_announcements.lib.php | 40 ++++++++++++++++++----- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/main/admin/system_announcements.php b/main/admin/system_announcements.php index 1b9a4e36ab..2e29125f27 100755 --- a/main/admin/system_announcements.php +++ b/main/admin/system_announcements.php @@ -301,6 +301,7 @@ if ($action_todo) { } $sendMail = isset($values['send_mail']) ? $values['send_mail'] : null; + $groupToSend = isset($values['group']) ? $values['group'] : 0; switch ($values['action']) { case 'add': @@ -315,14 +316,15 @@ if ($action_todo) { empty($values['add_to_calendar']) ? false : true, empty($values['send_email_test']) ? false : true, isset($values['career_id']) ? $values['career_id'] : 0, - isset($values['promotion_id']) ? $values['promotion_id'] : 0 + isset($values['promotion_id']) ? $values['promotion_id'] : 0, + $groupToSend ); if ($announcement_id !== false) { - if (isset($values['group'])) { + if ($groupToSend != 0) { SystemAnnouncementManager::announcement_for_groups( $announcement_id, - [$values['group']] + [$groupToSend] ); } @@ -346,12 +348,13 @@ if ($action_todo) { $sendMail, $sendMailTest, isset($values['career_id']) ? $values['career_id'] : 0, - isset($values['promotion_id']) ? $values['promotion_id'] : 0 + isset($values['promotion_id']) ? $values['promotion_id'] : 0, + $groupToSend )) { - if (isset($values['group'])) { + if (isset($groupToSend)) { SystemAnnouncementManager::announcement_for_groups( $values['id'], - [$values['group']] + [$groupToSend] ); echo Display::return_message( get_lang('AnnouncementUpdated'), diff --git a/main/inc/lib/system_announcements.lib.php b/main/inc/lib/system_announcements.lib.php index ac035f32d6..37c7e8aa5e 100755 --- a/main/inc/lib/system_announcements.lib.php +++ b/main/inc/lib/system_announcements.lib.php @@ -251,6 +251,7 @@ class SystemAnnouncementManager * @param bool $sendEmailTest * @param int $careerId * @param int $promotionId + * @param int $groupId * * @return mixed insert_id on success, false on failure */ @@ -265,7 +266,8 @@ class SystemAnnouncementManager $add_to_calendar = false, $sendEmailTest = false, $careerId = 0, - $promotionId = 0 + $promotionId = 0, + $groupId = 0 ) { $original_content = $content; $a_dateS = explode(' ', $date_start); @@ -362,7 +364,9 @@ class SystemAnnouncementManager if ($send_mail == 1) { self::send_system_announcement_by_email( $resultId, - $visibility + $visibility, + false, + $groupId ); } } @@ -475,7 +479,8 @@ class SystemAnnouncementManager $send_mail = 0, $sendEmailTest = false, $careerId = 0, - $promotionId = 0 + $promotionId = 0, + $groupId = 0 ) { $em = Database::getManager(); $announcement = $em->find('ChamiloCoreBundle:SysAnnouncement', $id); @@ -582,7 +587,9 @@ class SystemAnnouncementManager if ($send_mail == 1) { self::send_system_announcement_by_email( $id, - $visibility + $visibility, + false, + $groupId ); } } @@ -665,6 +672,7 @@ class SystemAnnouncementManager * @param int $id * @param array $visibility * @param bool $sendEmailTest + * @param int $groupId * * @return bool True if the message was sent or there was no destination matching. * False on database or e-mail sending error. @@ -672,7 +680,8 @@ class SystemAnnouncementManager public static function send_system_announcement_by_email( $id, $visibility, - $sendEmailTest = false + $sendEmailTest = false, + $groupId = 0 ) { $announcement = self::get_announcement($id); @@ -693,6 +702,21 @@ class SystemAnnouncementManager return true; } + $whereUsersInGroup = ''; + if($groupId != 0){ + $tblGroupRelUser = Database::get_main_table(TABLE_USERGROUP_REL_USER); + $sql = "select user_id from $tblGroupRelUser where usergroup_id = $groupId"; + $result = Database::query($sql); + $data = Database::store_result($result); + Database::free_result($result); + $usersId = []; + $totalUsers = count($data); + for ($i = 0; $i < $totalUsers; $i++) { + $usersId[] = $data[$i]['user_id']; + } + $usersId = implode(',', $usersId); + $whereUsersInGroup = " AND u.user_id in ($usersId) "; + } $urlJoin = ''; $urlCondition = ''; @@ -706,17 +730,17 @@ class SystemAnnouncementManager if ($teacher != 0 && $student == 0) { $sql = "SELECT DISTINCT u.user_id FROM $user_table u $urlJoin - WHERE status = '1' $urlCondition"; + WHERE status = '1' $urlCondition $whereUsersInGroup"; } if ($teacher == 0 && $student != 0) { $sql = "SELECT DISTINCT u.user_id FROM $user_table u $urlJoin - WHERE status = '5' $urlCondition"; + WHERE status = '5' $urlCondition $whereUsersInGroup"; } if ($teacher != 0 && $student != 0) { $sql = "SELECT DISTINCT u.user_id FROM $user_table u $urlJoin - WHERE 1 = 1 $urlCondition"; + WHERE 1 = 1 $urlCondition $whereUsersInGroup"; } if (!isset($sql)) {