Fixing when dealing with agenda/announcements in groups

skala
Julio Montoya 13 years ago
parent c0f5c0da20
commit 0fe6e0aa88
  1. 34
      main/announcements/announcements.php
  2. 18
      main/calendar/agenda.lib.php
  3. 63
      main/inc/lib/announcements.inc.php
  4. 4
      main/inc/lib/main_api.lib.php

@ -432,7 +432,6 @@ if (api_is_allowed_to_edit(false, true)) {
$group_memberships = GroupManager::get_group_ids($_course['real_id'], api_get_user_id()); $group_memberships = GroupManager::get_group_ids($_course['real_id'], api_get_user_id());
if ((api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) { if ((api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) {
if (api_get_group_id() == 0) { if (api_get_group_id() == 0) {
$cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."' OR ( ip.to_user_id='".api_get_user_id()."'". $cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."' OR ( ip.to_user_id='".api_get_user_id()."'".
"OR ip.to_group_id IN (0, ".implode(", ", $group_memberships)."))) "; "OR ip.to_group_id IN (0, ".implode(", ", $group_memberships)."))) ";
@ -445,8 +444,9 @@ if (api_is_allowed_to_edit(false, true)) {
$cond_user_id = " AND ( ip.to_user_id='".api_get_user_id()."'". $cond_user_id = " AND ( ip.to_user_id='".api_get_user_id()."'".
"OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).")) "; "OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).")) ";
} else { } else {
$cond_user_id = " AND ( ip.to_user_id='".api_get_user_id()."'". $cond_user_id = " AND (
"OR ip.to_group_id IN (0, ".api_get_group_id().")) "; (ip.to_user_id='".api_get_user_id()."' AND ip.to_group_id = ".api_get_group_id().") OR
ip.to_group_id IN (".api_get_group_id().") AND ip.to_user_id = 0 ) ";
} }
} }
@ -458,8 +458,8 @@ if (api_is_allowed_to_edit(false, true)) {
announcement.c_id = $course_id AND announcement.c_id = $course_id AND
ip.c_id = $course_id AND ip.c_id = $course_id AND
announcement.id = ip.ref AND announcement.id = ip.ref AND
ip.tool='announcement' ip.tool='announcement' AND
AND ip.visibility='1' ip.visibility='1'
$cond_user_id $cond_user_id
$condition_session $condition_session
GROUP BY ip.ref GROUP BY ip.ref
@ -614,10 +614,8 @@ if ($display_form) {
// setting the variables for the form elements: the message has to be sent by email // setting the variables for the form elements: the message has to be sent by email
$email_ann = '1'; $email_ann = '1';
// setting the variables for the form elements: the title of the email // setting the variables for the form elements: the title of the email
//$title_to_modify = sprintf(get_lang('RemindInactiveLearnersMailSubject'), api_get_setting('siteName'),' > ',$_course['name']);
$title_to_modify = sprintf(get_lang('RemindInactiveLearnersMailSubject'), api_get_setting('siteName')); $title_to_modify = sprintf(get_lang('RemindInactiveLearnersMailSubject'), api_get_setting('siteName'));
// setting the variables for the form elements: the message of the email // setting the variables for the form elements: the message of the email
//$content_to_modify = sprintf(get_lang('RemindInactiveLearnersMailContent'),api_get_setting('siteName'),' > ',$_course['name'],$since);
$content_to_modify = sprintf(get_lang('RemindInactiveLearnersMailContent'), api_get_setting('siteName'), $since); $content_to_modify = sprintf(get_lang('RemindInactiveLearnersMailContent'), api_get_setting('siteName'), $since);
// when we want to remind the users who have never been active then we have a different subject and content for the announcement // when we want to remind the users who have never been active then we have a different subject and content for the announcement
if ($_GET['since'] == 'never') { if ($_GET['since'] == 'never') {
@ -646,13 +644,13 @@ if ($display_form) {
$announcement_to_modify = ""; $announcement_to_modify = "";
} }
($email_ann == '1' || !empty($surveyid)) ? $checked = 'checked' : $checked = ''; ($email_ann == '1') ? $checked = 'checked' : $checked = '';
echo '<div class="control-group"> echo '<div class="control-group">
<div class="controls"> <div class="controls">
<input class="checkbox" type="checkbox" value="1" name="email_ann" '.$checked.'> <input class="checkbox" type="checkbox" value="1" name="email_ann" '.$checked.'>
'.get_lang('EmailOption').': <span id="recipient_overview">'.Display::label(get_lang('MyGroup'), 'success').'</span> '.get_lang('EmailOption').': <span id="recipient_overview">'.Display::label(get_lang('MyGroup'), 'success').'</span>
<a href="#" onclick="toggle_sendto();">'.get_lang('ModifyRecipientList').'</a>'; <a href="#" onclick="toggle_sendto();">'.get_lang('ModifyRecipientList').'</a>';
AnnouncementManager::show_to_form_group($group_id); AnnouncementManager::show_to_form_group($group_id, $to);
echo '</div></div>'; echo '</div></div>';
} }
@ -831,21 +829,25 @@ if ($display_announcement_list) {
//STUDENT //STUDENT
if (is_array($group_memberships) && count($group_memberships) > 0) { if (is_array($group_memberships) && count($group_memberships) > 0) {
if ((api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) { if (AnnouncementManager::user_can_edit_announcement()) {
if (api_get_group_id() == 0) { if (api_get_group_id() == 0) {
//No group //No group
$cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."' OR ( ip.to_user_id='".$_user['user_id']."'". $cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."' OR ( ip.to_user_id='".$_user['user_id']."'".
" OR ip.to_group_id IN (0, ".implode(", ", $group_memberships)."))) "; " OR ip.to_group_id IN (0, ".implode(", ", $group_memberships)."))) ";
} else { } else {
$cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."' $cond_user_id = " AND (
OR ip.to_group_id IN (0, ".api_get_group_id()."))"; ip.lastedit_user_id = '".api_get_user_id()."' OR
ip.to_group_id IN (".api_get_group_id().")
)";
} }
//$cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."' OR (ip.to_user_id=$user_id OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).") )) ";
} else { } else {
if (api_get_group_id() == 0) { if (api_get_group_id() == 0) {
$cond_user_id = " AND (ip.to_user_id=$user_id OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).")) "; $cond_user_id = " AND (ip.to_user_id=$user_id OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).")) ";
} else { } else {
$cond_user_id = " AND (ip.to_user_id = $user_id OR ip.to_group_id IN (".api_get_group_id()."))"; $cond_user_id = " AND (
(ip.to_user_id = $user_id AND ip.to_group_id = ".api_get_group_id().") OR
(ip.to_group_id IN (".api_get_group_id().") AND ip.to_user_id = 0 )
)";
} }
} }
@ -922,7 +924,6 @@ if ($display_announcement_list) {
echo '</div>'; echo '</div>';
echo '</div>'; echo '</div>';
} else { } else {
//echo "<a href='".api_get_self()."?".api_get_cidreq()."&action=add&origin=".(empty($_GET['origin'])?'':$_GET['origin'])."'>".Display::return_icon('new_announce.png',get_lang('AddAnnouncement'),'',ICON_SIZE_MEDIUM)."</a>";
Display::display_warning_message(get_lang('NoAnnouncements')); Display::display_warning_message(get_lang('NoAnnouncements'));
} }
} else { } else {
@ -951,9 +952,6 @@ if ($display_announcement_list) {
$title = $myrow['title'].$sent_to_icon; $title = $myrow['title'].$sent_to_icon;
/* DATE */
$last_post_datetime = $myrow['end_date'];
$item_visibility = api_get_item_visibility($_course, TOOL_ANNOUNCEMENT, $myrow['id'], $session_id); $item_visibility = api_get_item_visibility($_course, TOOL_ANNOUNCEMENT, $myrow['id'], $session_id);
$myrow['visibility'] = $item_visibility; $myrow['visibility'] = $item_visibility;

@ -465,13 +465,21 @@ class Agenda {
$session_id = intval($session_id); $session_id = intval($session_id);
if (is_array($group_memberships) && count($group_memberships) > 0) { if (is_array($group_memberships) && count($group_memberships) > 0) {
if (api_is_allowed_to_edit()) { if (api_is_allowed_to_edit() || GroupManager::is_tutor_of_group(api_get_user_id(), $group_id)) {
$where_condition = "( ip.to_group_id is null OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).") ) "; $where_condition = "( ip.to_group_id is null OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).") ) ";
} else { } else {
$where_condition = "( ip.to_user_id = $user_id OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).") ) "; $where_condition = "(
} (ip.to_user_id = $user_id AND ip.to_group_id = $group_id ) OR
ip.to_group_id IN (0, ".implode(", ", $group_memberships).") AND ip.to_user_id = 0 ) ";
$sql = "SELECT DISTINCT agenda.*, ip.visibility, ip.to_group_id, ip.insert_user_id, ip.ref, to_user_id }
$sql = "SELECT DISTINCT
agenda.*,
ip.visibility,
ip.to_group_id,
ip.insert_user_id,
ip.ref,
to_user_id
FROM ".$tlb_course_agenda." agenda, ".$tbl_property." ip FROM ".$tlb_course_agenda." agenda, ".$tbl_property." ip
WHERE agenda.id = ip.ref AND WHERE agenda.id = ip.ref AND
ip.tool ='".TOOL_CALENDAR_EVENT."' AND ip.tool ='".TOOL_CALENDAR_EVENT."' AND

@ -142,22 +142,17 @@ class AnnouncementManager
$tbl_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY); $tbl_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY);
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
if (api_is_allowed_to_edit(false, true) || (api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) { if (self::user_can_edit_announcement()) {
$sql_query = " SELECT announcement.*, toolitemproperties.* $sql_query = " SELECT announcement.*, toolitemproperties.*
FROM $tbl_announcement announcement, $tbl_item_property toolitemproperties FROM $tbl_announcement announcement, $tbl_item_property toolitemproperties
WHERE announcement.id = toolitemproperties.ref WHERE
AND announcement.id = '$announcement_id' announcement.id = toolitemproperties.ref AND
AND toolitemproperties.tool='announcement' AND announcement.id = '$announcement_id' AND
toolitemproperties.tool='announcement' AND
announcement.c_id = $course_id AND announcement.c_id = $course_id AND
toolitemproperties.c_id = $course_id toolitemproperties.c_id = $course_id
ORDER BY display_order DESC"; ORDER BY display_order DESC";
} else { } else {
$group_list = GroupManager::get_group_ids($course_id, api_get_user_id());
if (empty($group_list)) {
$group_list[] = 0;
}
$visibility_condition = " toolitemproperties.visibility='1'"; $visibility_condition = " toolitemproperties.visibility='1'";
if (GroupManager::is_tutor_of_group(api_get_user_id(), api_get_group_id())) { if (GroupManager::is_tutor_of_group(api_get_user_id(), api_get_group_id())) {
$visibility_condition = " toolitemproperties.visibility IN ('0', '1') "; $visibility_condition = " toolitemproperties.visibility IN ('0', '1') ";
@ -170,7 +165,10 @@ class AnnouncementManager
announcement.id = toolitemproperties.ref AND announcement.id = toolitemproperties.ref AND
announcement.id = '$announcement_id' AND announcement.id = '$announcement_id' AND
toolitemproperties.tool='announcement' AND toolitemproperties.tool='announcement' AND
(toolitemproperties.to_user_id='".api_get_user_id()."' OR toolitemproperties.to_group_id IN ('0', '".implode("', '", $group_list)."')) AND (
(toolitemproperties.to_user_id='".api_get_user_id()."' AND toolitemproperties.to_group_id = ".api_get_group_id().") OR
toolitemproperties.to_group_id IN ('".api_get_group_id()."') AND toolitemproperties.to_user_id = 0
) AND
$visibility_condition AND $visibility_condition AND
announcement.c_id = $course_id AND announcement.c_id = $course_id AND
toolitemproperties.c_id = $course_id toolitemproperties.c_id = $course_id
@ -587,13 +585,14 @@ class AnnouncementManager
/** /**
* this function shows the form for sending a message to a specific group or user. * this function shows the form for sending a message to a specific group or user.
*/ */
public static function show_to_form_group($group_id) public static function show_to_form_group($group_id, $to = array())
{ {
$group_users = GroupManager::get_subscribed_users($group_id);
echo "<table id=\"recipient_list\" style=\"display: none;\">"; echo "<table id=\"recipient_list\" style=\"display: none;\">";
echo "<tr>"; echo "<tr>";
echo "<td>"; echo "<td>";
echo "<select name=\"not_selected_form[]\" size=5 class=\"span4\" multiple>"; echo "<select name=\"not_selected_form[]\" size=5 class=\"span4\" multiple>";
$group_users = GroupManager::get_subscribed_users($group_id);
foreach ($group_users as $user) { foreach ($group_users as $user) {
echo '<option value="'.$user['user_id'].'" title="'.sprintf(get_lang('LoginX'), $user['username']).'" >'.api_get_person_name($user['firstname'], $user['lastname']).'</option>'; echo '<option value="'.$user['user_id'].'" title="'.sprintf(get_lang('LoginX'), $user['username']).'" >'.api_get_person_name($user['firstname'], $user['lastname']).'</option>';
} }
@ -609,12 +608,22 @@ class AnnouncementManager
echo "<td>"; echo "<td>";
echo "<select id=\"selectedform\" name=\"selectedform[]\" size=5 class=\"span4\" multiple>"; echo "<select id=\"selectedform\" name=\"selectedform[]\" size=5 class=\"span4\" multiple>";
if (!empty($to)) {
foreach ($to as $user) {
$user = explode(':', $user);
if ($user[0] == 'USER') {
$user = api_get_user_info($user[1]);
echo '<option value="'.$user['user_id'].'" title="'.sprintf(get_lang('LoginX'), $user['username']).'" >'.api_get_person_name($user['firstname'], $user['lastname']).'</option>';
}
}
}
echo '</select>'; echo '</select>';
echo "</td>"; echo "</td>";
echo "</tr>"; echo "</tr>";
echo "</table>"; echo "</table>";
} }
/* /*
CONSTRUCT_NOT_SELECT_SELECT_FORM CONSTRUCT_NOT_SELECT_SELECT_FORM
*/ */
@ -800,22 +809,26 @@ class AnnouncementManager
$id = Database::escape_string($id); $id = Database::escape_string($id);
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
$sql = "SELECT * FROM $tbl_item_property WHERE c_id = $course_id AND tool='$tool' AND ref='$id'"; $sql = "SELECT to_group_id, to_user_id FROM $tbl_item_property WHERE c_id = $course_id AND tool='$tool' AND ref='$id'";
$result = Database::query($sql); $result = Database::query($sql);
while ($row = Database::fetch_array($result)) { while ($row = Database::fetch_array($result)) {
$to_group = $row['to_group_id']; $to_group = $row['to_group_id'];
switch ($to_group) { $to_user = $row['to_user_id'];
// it was send to one specific user
case null: if (empty($to_user) && empty($to_group)) {
$to[] = "USER:".$row['to_user_id'];
break;
// it was sent to everyone
case 0:
return "everyone"; return "everyone";
exit; }
break;
default: if (!empty($to_user) && !empty($to_group)) {
$to[] = "GROUP:".$row['to_group_id']; $to[] = "USER:".$to_user;
}
if (empty($to_user) && !empty($to_group)) {
$to[] = "GROUP:".$to_group;
}
if (!empty($to_user) && empty($to_group)) {
$to[] = "USER:".$to_user;
} }
} }
return $to; return $to;

@ -3161,7 +3161,7 @@ function api_get_item_visibility($_course, $tool, $id, $session=0) {
* @version January 2005 * @version January 2005
* @desc update the item_properties table (if entry not exists, insert) of the course * @desc update the item_properties table (if entry not exists, insert) of the course
*/ */
function api_item_property_update($_course, $tool, $item_id, $lastedit_type, $user_id, $to_group_id = 0, $to_user_id = null, $start_visible = 0, $end_visible = 0, $session_id = 0) { function api_item_property_update($_course, $tool, $item_id, $lastedit_type, $user_id, $to_group_id = 0, $to_user_id = 0, $start_visible = 0, $end_visible = 0, $session_id = 0) {
// Definition of variables. // Definition of variables.
$tool = Database::escape_string($tool); $tool = Database::escape_string($tool);
@ -3185,7 +3185,7 @@ function api_item_property_update($_course, $tool, $item_id, $lastedit_type, $us
$TABLE_ITEMPROPERTY = Database::get_course_table(TABLE_ITEM_PROPERTY); $TABLE_ITEMPROPERTY = Database::get_course_table(TABLE_ITEM_PROPERTY);
if ($to_user_id <= 0) { if ($to_user_id <= 0) {
$to_user_id = null; // No to_user_id set $to_user_id = 0; // No to_user_id set
} }
// Set filters for $to_user_id and $to_group_id, with priority for $to_user_id // Set filters for $to_user_id and $to_group_id, with priority for $to_user_id

Loading…
Cancel
Save