Skip to content

Commit

Permalink
System announcements: Allow multiselect for groups BT#18963
Browse files Browse the repository at this point in the history
  • Loading branch information
jmontoyaa committed Jul 6, 2021
1 parent 1c99735 commit df255e3
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 72 deletions.
49 changes: 20 additions & 29 deletions main/admin/system_announcements.php
Expand Up @@ -4,8 +4,6 @@

/**
* This page allows the administrator to manage the system announcements.
*
* @package chamilo.admin.announcement
*/

// Resetting the course id.
Expand Down Expand Up @@ -166,7 +164,9 @@ function showCareer() {
$values['lang'] = $announcement->lang;
$values['action'] = 'edit';
$groups = SystemAnnouncementManager::get_announcement_groups($announcement->id);
$values['group'] = isset($groups['group_id']) ? $groups['group_id'] : 0;
if (!empty($groups)) {
$values['groups'] = array_column($groups, 'group_id');
}
$action_todo = true;
break;
}
Expand Down Expand Up @@ -261,23 +261,23 @@ function showCareer() {
if (!empty($group_list)) {
$group_list = array_column($group_list, 'name', 'id');
$group_list[0] = get_lang('All');
$form->addElement(
'select',
'group',
$form->addSelect(
'groups',
get_lang('AnnouncementForGroup'),
$group_list
$group_list,
['multiple' => 'multiple']
);
}

$values['group'] = isset($values['group']) ? $values['group'] : '0';
$values['groups'] = isset($values['groups']) ? $values['groups'] : [];
$form->addElement('checkbox', 'send_mail', null, get_lang('SendMail'));

if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'add') {
if (isset($_REQUEST['action']) && $_REQUEST['action'] === 'add') {
$form->addElement('checkbox', 'add_to_calendar', null, get_lang('AddToCalendar'));
$text = get_lang('AddNews');
$class = 'add';
$form->addElement('hidden', 'action', 'add');
} elseif (isset($_REQUEST['action']) && $_REQUEST['action'] == 'edit') {
} elseif (isset($_REQUEST['action']) && $_REQUEST['action'] === 'edit') {
$text = get_lang('EditNews');
$class = 'save';
$form->addElement('hidden', 'action', 'edit');
Expand All @@ -296,12 +296,12 @@ function showCareer() {
$visibilityResult[$key] = $values[$key];
}

if ($values['lang'] == 'all') {
if ($values['lang'] === 'all') {
$values['lang'] = null;
}

$sendMail = isset($values['send_mail']) ? $values['send_mail'] : null;
$groupToSend = isset($values['group']) ? $values['group'] : 0;
$groupsToSend = $values['groups'] ?? [];

switch ($values['action']) {
case 'add':
Expand All @@ -317,15 +317,12 @@ function showCareer() {
empty($values['send_email_test']) ? false : true,
isset($values['career_id']) ? $values['career_id'] : 0,
isset($values['promotion_id']) ? $values['promotion_id'] : 0,
$groupToSend
$groupsToSend
);

if ($announcement_id !== false) {
if ($groupToSend != 0) {
SystemAnnouncementManager::announcement_for_groups(
$announcement_id,
[$groupToSend]
);
if (!empty($groupsToSend)) {
SystemAnnouncementManager::announcement_for_groups($announcement_id, $groupsToSend);
}

echo Display::return_message(get_lang('AnnouncementAdded'), 'confirmation');
Expand All @@ -349,23 +346,17 @@ function showCareer() {
$sendMailTest,
isset($values['career_id']) ? $values['career_id'] : 0,
isset($values['promotion_id']) ? $values['promotion_id'] : 0,
$groupToSend
$groupsToSend
)) {
if (0 != $groupToSend) {
SystemAnnouncementManager::announcement_for_groups(
$values['id'],
[$groupToSend]
);
if (!empty($groupsToSend)) {
SystemAnnouncementManager::announcement_for_groups($values['id'], $groupsToSend);
echo Display::return_message(
get_lang('AnnouncementUpdated'),
'confirmation'
);
} else {
// Deletes groups
SystemAnnouncementManager::announcement_for_groups(
$values['id'],
[]
);
// Delete groups
SystemAnnouncementManager::announcement_for_groups($values['id'], []);
}
} else {
$show_announcement_list = false;
Expand Down
76 changes: 33 additions & 43 deletions main/inc/lib/system_announcements.lib.php
Expand Up @@ -251,7 +251,7 @@ public static function get_all_announcements()
* @param bool $sendEmailTest
* @param int $careerId
* @param int $promotionId
* @param int $groupId
* @param array $groups
*
* @return mixed insert_id on success, false on failure
*/
Expand All @@ -267,7 +267,7 @@ public static function add_announcement(
$sendEmailTest = false,
$careerId = 0,
$promotionId = 0,
$groupId = 0
$groups = []
) {
$original_content = $content;
$a_dateS = explode(' ', $date_start);
Expand Down Expand Up @@ -366,7 +366,7 @@ public static function add_announcement(
$resultId,
$visibility,
false,
$groupId
$groups
);
}
}
Expand All @@ -392,40 +392,30 @@ public static function add_announcement(
* Makes the announcement id visible only for groups in groups_array.
*
* @param int $announcement_id
* @param array $group_array array of group id
* @param array $groups array of group id
*
* @return bool
*/
public static function announcement_for_groups($announcement_id, $group_array)
public static function announcement_for_groups($announcement_id, $groups)
{
$tbl_announcement_group = Database::get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS_GROUPS);

$announcement_id = (int) $announcement_id;

if (empty($announcement_id)) {
return false;
}

//first delete all group associations for this announcement
$res = Database::query(
"DELETE FROM $tbl_announcement_group
WHERE announcement_id=".$announcement_id
);
// First delete all group associations for this announcement
$sql = "DELETE FROM $tbl_announcement_group WHERE announcement_id= $announcement_id";
Database::query($sql);

if ($res === false) {
return false;
}

if (!empty($group_array)) {
foreach ($group_array as $group_id) {
if (!empty($groups)) {
foreach ($groups as $group_id) {
if (intval($group_id) != 0) {
$sql = "INSERT INTO $tbl_announcement_group SET
announcement_id=".$announcement_id.",
group_id=".intval($group_id);
$res = Database::query($sql);
if ($res === false) {
return false;
}
Database::query($sql);
}
}
}
Expand Down Expand Up @@ -453,9 +443,8 @@ public static function get_announcement_groups($announcement_id)
announcement_id =".intval($announcement_id)." AND
ag.group_id = g.id";
$res = Database::query($sql);
$groups = Database::fetch_array($res);

return $groups;
return Database::store_result($res);
}

/**
Expand All @@ -472,6 +461,7 @@ public static function get_announcement_groups($announcement_id)
* @param bool $sendEmailTest
* @param int $careerId
* @param int $promotionId
* @param array $groups
*
* @return bool True on success, false on failure
*/
Expand All @@ -487,7 +477,7 @@ public static function update_announcement(
$sendEmailTest = false,
$careerId = 0,
$promotionId = 0,
$groupId = 0
$groups = []
) {
$em = Database::getManager();
$announcement = $em->find('ChamiloCoreBundle:SysAnnouncement', $id);
Expand Down Expand Up @@ -560,7 +550,7 @@ public static function update_announcement(
//->setVisibleGuest($visible_guest)
->setAccessUrlId(api_get_current_access_url_id());

$em->merge($announcement);
$em->persist($announcement);
$em->flush();

// Update visibility
Expand Down Expand Up @@ -596,7 +586,7 @@ public static function update_announcement(
$id,
$visibility,
false,
$groupId
$groups
);
}
}
Expand Down Expand Up @@ -679,28 +669,22 @@ public static function set_visibility($id, $user, $visible)
* @param int $id
* @param array $visibility
* @param bool $sendEmailTest
* @param int $groupId
* @param array $groups
*
* @return bool True if the message was sent or there was no destination matching.
* False on database or e-mail sending error.
*/
public static function send_system_announcement_by_email(
$id,
$visibility,
$sendEmailTest = false,
$groupId = 0
) {
public static function send_system_announcement_by_email($id, $visibility, $sendEmailTest = false, $groups = [])
{
$announcement = self::get_announcement($id);

if (empty($announcement)) {
return false;
}

$groupId = (int) $groupId;
$title = $announcement->title;
$content = $announcement->content;
$language = $announcement->lang;

$content = str_replace(['\r\n', '\n', '\r'], '', $content);
$now = api_get_utc_datetime();
$teacher = $visibility['visible_teacher'];
Expand All @@ -710,16 +694,22 @@ public static function send_system_announcement_by_email(

return true;
}

$whereUsersInGroup = '';
if (0 != $groupId) {
$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);
$usersId = [];
foreach ($data as $userArray) {
$usersId[] = $userArray['user_id'];
$usersId = [];
foreach ($groups as $groupId) {
if (0 != $groupId) {
$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);
foreach ($data as $userArray) {
$usersId[] = $userArray['user_id'];
}
}
}

if (!empty($usersId)) {
$usersId = implode(',', $usersId);
$whereUsersInGroup = " AND u.user_id in ($usersId) ";
}
Expand Down

0 comments on commit df255e3

Please sign in to comment.