System announcements: Allow multiselect for groups BT#18963

pull/3932/head
Julio Montoya 4 years ago
parent 1c99735bc7
commit df255e32e7
  1. 49
      main/admin/system_announcements.php
  2. 62
      main/inc/lib/system_announcements.lib.php

@ -4,8 +4,6 @@
/** /**
* This page allows the administrator to manage the system announcements. * This page allows the administrator to manage the system announcements.
*
* @package chamilo.admin.announcement
*/ */
// Resetting the course id. // Resetting the course id.
@ -166,7 +164,9 @@ switch ($action) {
$values['lang'] = $announcement->lang; $values['lang'] = $announcement->lang;
$values['action'] = 'edit'; $values['action'] = 'edit';
$groups = SystemAnnouncementManager::get_announcement_groups($announcement->id); $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; $action_todo = true;
break; break;
} }
@ -261,23 +261,23 @@ if ($action_todo) {
if (!empty($group_list)) { if (!empty($group_list)) {
$group_list = array_column($group_list, 'name', 'id'); $group_list = array_column($group_list, 'name', 'id');
$group_list[0] = get_lang('All'); $group_list[0] = get_lang('All');
$form->addElement( $form->addSelect(
'select', 'groups',
'group',
get_lang('AnnouncementForGroup'), 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')); $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')); $form->addElement('checkbox', 'add_to_calendar', null, get_lang('AddToCalendar'));
$text = get_lang('AddNews'); $text = get_lang('AddNews');
$class = 'add'; $class = 'add';
$form->addElement('hidden', 'action', 'add'); $form->addElement('hidden', 'action', 'add');
} elseif (isset($_REQUEST['action']) && $_REQUEST['action'] == 'edit') { } elseif (isset($_REQUEST['action']) && $_REQUEST['action'] === 'edit') {
$text = get_lang('EditNews'); $text = get_lang('EditNews');
$class = 'save'; $class = 'save';
$form->addElement('hidden', 'action', 'edit'); $form->addElement('hidden', 'action', 'edit');
@ -296,12 +296,12 @@ if ($action_todo) {
$visibilityResult[$key] = $values[$key]; $visibilityResult[$key] = $values[$key];
} }
if ($values['lang'] == 'all') { if ($values['lang'] === 'all') {
$values['lang'] = null; $values['lang'] = null;
} }
$sendMail = isset($values['send_mail']) ? $values['send_mail'] : null; $sendMail = isset($values['send_mail']) ? $values['send_mail'] : null;
$groupToSend = isset($values['group']) ? $values['group'] : 0; $groupsToSend = $values['groups'] ?? [];
switch ($values['action']) { switch ($values['action']) {
case 'add': case 'add':
@ -317,15 +317,12 @@ if ($action_todo) {
empty($values['send_email_test']) ? false : true, empty($values['send_email_test']) ? false : true,
isset($values['career_id']) ? $values['career_id'] : 0, 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 $groupsToSend
); );
if ($announcement_id !== false) { if ($announcement_id !== false) {
if ($groupToSend != 0) { if (!empty($groupsToSend)) {
SystemAnnouncementManager::announcement_for_groups( SystemAnnouncementManager::announcement_for_groups($announcement_id, $groupsToSend);
$announcement_id,
[$groupToSend]
);
} }
echo Display::return_message(get_lang('AnnouncementAdded'), 'confirmation'); echo Display::return_message(get_lang('AnnouncementAdded'), 'confirmation');
@ -349,23 +346,17 @@ if ($action_todo) {
$sendMailTest, $sendMailTest,
isset($values['career_id']) ? $values['career_id'] : 0, 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 $groupsToSend
)) { )) {
if (0 != $groupToSend) { if (!empty($groupsToSend)) {
SystemAnnouncementManager::announcement_for_groups( SystemAnnouncementManager::announcement_for_groups($values['id'], $groupsToSend);
$values['id'],
[$groupToSend]
);
echo Display::return_message( echo Display::return_message(
get_lang('AnnouncementUpdated'), get_lang('AnnouncementUpdated'),
'confirmation' 'confirmation'
); );
} else { } else {
// Deletes groups // Delete groups
SystemAnnouncementManager::announcement_for_groups( SystemAnnouncementManager::announcement_for_groups($values['id'], []);
$values['id'],
[]
);
} }
} else { } else {
$show_announcement_list = false; $show_announcement_list = false;

@ -251,7 +251,7 @@ class SystemAnnouncementManager
* @param bool $sendEmailTest * @param bool $sendEmailTest
* @param int $careerId * @param int $careerId
* @param int $promotionId * @param int $promotionId
* @param int $groupId * @param array $groups
* *
* @return mixed insert_id on success, false on failure * @return mixed insert_id on success, false on failure
*/ */
@ -267,7 +267,7 @@ class SystemAnnouncementManager
$sendEmailTest = false, $sendEmailTest = false,
$careerId = 0, $careerId = 0,
$promotionId = 0, $promotionId = 0,
$groupId = 0 $groups = []
) { ) {
$original_content = $content; $original_content = $content;
$a_dateS = explode(' ', $date_start); $a_dateS = explode(' ', $date_start);
@ -366,7 +366,7 @@ class SystemAnnouncementManager
$resultId, $resultId,
$visibility, $visibility,
false, false,
$groupId $groups
); );
} }
} }
@ -392,40 +392,30 @@ class SystemAnnouncementManager
* Makes the announcement id visible only for groups in groups_array. * Makes the announcement id visible only for groups in groups_array.
* *
* @param int $announcement_id * @param int $announcement_id
* @param array $group_array array of group id * @param array $groups array of group id
* *
* @return bool * @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); $tbl_announcement_group = Database::get_main_table(TABLE_MAIN_SYSTEM_ANNOUNCEMENTS_GROUPS);
$announcement_id = (int) $announcement_id; $announcement_id = (int) $announcement_id;
if (empty($announcement_id)) { if (empty($announcement_id)) {
return false; return false;
} }
//first delete all group associations for this announcement // First delete all group associations for this announcement
$res = Database::query( $sql = "DELETE FROM $tbl_announcement_group WHERE announcement_id= $announcement_id";
"DELETE FROM $tbl_announcement_group Database::query($sql);
WHERE announcement_id=".$announcement_id
);
if ($res === false) {
return false;
}
if (!empty($group_array)) { if (!empty($groups)) {
foreach ($group_array as $group_id) { foreach ($groups as $group_id) {
if (intval($group_id) != 0) { if (intval($group_id) != 0) {
$sql = "INSERT INTO $tbl_announcement_group SET $sql = "INSERT INTO $tbl_announcement_group SET
announcement_id=".$announcement_id.", announcement_id=".$announcement_id.",
group_id=".intval($group_id); group_id=".intval($group_id);
$res = Database::query($sql); Database::query($sql);
if ($res === false) {
return false;
}
} }
} }
} }
@ -453,9 +443,8 @@ class SystemAnnouncementManager
announcement_id =".intval($announcement_id)." AND announcement_id =".intval($announcement_id)." AND
ag.group_id = g.id"; ag.group_id = g.id";
$res = Database::query($sql); $res = Database::query($sql);
$groups = Database::fetch_array($res);
return $groups; return Database::store_result($res);
} }
/** /**
@ -472,6 +461,7 @@ class SystemAnnouncementManager
* @param bool $sendEmailTest * @param bool $sendEmailTest
* @param int $careerId * @param int $careerId
* @param int $promotionId * @param int $promotionId
* @param array $groups
* *
* @return bool True on success, false on failure * @return bool True on success, false on failure
*/ */
@ -487,7 +477,7 @@ class SystemAnnouncementManager
$sendEmailTest = false, $sendEmailTest = false,
$careerId = 0, $careerId = 0,
$promotionId = 0, $promotionId = 0,
$groupId = 0 $groups = []
) { ) {
$em = Database::getManager(); $em = Database::getManager();
$announcement = $em->find('ChamiloCoreBundle:SysAnnouncement', $id); $announcement = $em->find('ChamiloCoreBundle:SysAnnouncement', $id);
@ -560,7 +550,7 @@ class SystemAnnouncementManager
//->setVisibleGuest($visible_guest) //->setVisibleGuest($visible_guest)
->setAccessUrlId(api_get_current_access_url_id()); ->setAccessUrlId(api_get_current_access_url_id());
$em->merge($announcement); $em->persist($announcement);
$em->flush(); $em->flush();
// Update visibility // Update visibility
@ -596,7 +586,7 @@ class SystemAnnouncementManager
$id, $id,
$visibility, $visibility,
false, false,
$groupId $groups
); );
} }
} }
@ -679,28 +669,22 @@ class SystemAnnouncementManager
* @param int $id * @param int $id
* @param array $visibility * @param array $visibility
* @param bool $sendEmailTest * @param bool $sendEmailTest
* @param int $groupId * @param array $groups
* *
* @return bool True if the message was sent or there was no destination matching. * @return bool True if the message was sent or there was no destination matching.
* False on database or e-mail sending error. * False on database or e-mail sending error.
*/ */
public static function send_system_announcement_by_email( public static function send_system_announcement_by_email($id, $visibility, $sendEmailTest = false, $groups = [])
$id, {
$visibility,
$sendEmailTest = false,
$groupId = 0
) {
$announcement = self::get_announcement($id); $announcement = self::get_announcement($id);
if (empty($announcement)) { if (empty($announcement)) {
return false; return false;
} }
$groupId = (int) $groupId;
$title = $announcement->title; $title = $announcement->title;
$content = $announcement->content; $content = $announcement->content;
$language = $announcement->lang; $language = $announcement->lang;
$content = str_replace(['\r\n', '\n', '\r'], '', $content); $content = str_replace(['\r\n', '\n', '\r'], '', $content);
$now = api_get_utc_datetime(); $now = api_get_utc_datetime();
$teacher = $visibility['visible_teacher']; $teacher = $visibility['visible_teacher'];
@ -710,16 +694,22 @@ class SystemAnnouncementManager
return true; return true;
} }
$whereUsersInGroup = ''; $whereUsersInGroup = '';
$usersId = [];
foreach ($groups as $groupId) {
if (0 != $groupId) { if (0 != $groupId) {
$tblGroupRelUser = Database::get_main_table(TABLE_USERGROUP_REL_USER); $tblGroupRelUser = Database::get_main_table(TABLE_USERGROUP_REL_USER);
$sql = "SELECT user_id FROM $tblGroupRelUser WHERE usergroup_id = $groupId"; $sql = "SELECT user_id FROM $tblGroupRelUser WHERE usergroup_id = $groupId";
$result = Database::query($sql); $result = Database::query($sql);
$data = Database::store_result($result); $data = Database::store_result($result);
$usersId = [];
foreach ($data as $userArray) { foreach ($data as $userArray) {
$usersId[] = $userArray['user_id']; $usersId[] = $userArray['user_id'];
} }
}
}
if (!empty($usersId)) {
$usersId = implode(',', $usersId); $usersId = implode(',', $usersId);
$whereUsersInGroup = " AND u.user_id in ($usersId) "; $whereUsersInGroup = " AND u.user_id in ($usersId) ";
} }

Loading…
Cancel
Save