Fixing when dealing with agenda/announcements in groups

skala
Julio Montoya 13 years ago
parent c0f5c0da20
commit 0fe6e0aa88
  1. 52
      main/announcements/announcements.php
  2. 14
      main/calendar/agenda.lib.php
  3. 71
      main/inc/lib/announcements.inc.php
  4. 42
      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());
if ((api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) {
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()."'".
"OR ip.to_group_id IN (0, ".implode(", ", $group_memberships)."))) ";
@ -445,23 +444,24 @@ if (api_is_allowed_to_edit(false, true)) {
$cond_user_id = " AND ( ip.to_user_id='".api_get_user_id()."'".
"OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).")) ";
} else {
$cond_user_id = " AND ( ip.to_user_id='".api_get_user_id()."'".
"OR ip.to_group_id IN (0, ".api_get_group_id().")) ";
$cond_user_id = " AND (
(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 ) ";
}
}
// the user is member of several groups => display personal announcements AND his group announcements AND the general announcements
if (is_array($group_memberships) && count($group_memberships) > 0) {
$sql = "SELECT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id
$sql = "SELECT announcement.*, ip.visibility, ip.to_group_id, ip.insert_user_id
FROM $tbl_announcement announcement, $tbl_item_property ip
WHERE
announcement.c_id = $course_id AND
ip.c_id = $course_id AND
announcement.id = ip.ref AND
ip.tool='announcement'
AND ip.visibility='1'
$cond_user_id
$condition_session
announcement.c_id = $course_id AND
ip.c_id = $course_id AND
announcement.id = ip.ref AND
ip.tool='announcement' AND
ip.visibility='1'
$cond_user_id
$condition_session
GROUP BY ip.ref
ORDER BY display_order DESC
LIMIT 0,$maximum";
@ -588,8 +588,8 @@ if ($display_form) {
//@todo use formvalidator
if (empty($group_id)) {
echo ' <div class="control-group">
<label class="control-label">'.
echo '<div class="control-group">
<label class="control-label">'.
Display::return_icon('group.png', get_lang('ModifyRecipientList'), array('align' => 'absmiddle'), ICON_SIZE_SMALL).'<a href="#" onclick="toggle_sendto();">'.get_lang('SentTo').'</a>
</label>
<div class="controls">';
@ -614,10 +614,8 @@ if ($display_form) {
// setting the variables for the form elements: the message has to be sent by email
$email_ann = '1';
// 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'));
// 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);
// 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') {
@ -646,13 +644,13 @@ if ($display_form) {
$announcement_to_modify = "";
}
($email_ann == '1' || !empty($surveyid)) ? $checked = 'checked' : $checked = '';
($email_ann == '1') ? $checked = 'checked' : $checked = '';
echo '<div class="control-group">
<div class="controls">
<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>
<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>';
}
@ -763,7 +761,7 @@ if ($display_announcement_list) {
ip.c_id = $course_id AND
announcement.id = ip.ref AND
ip.tool = 'announcement' AND
(ip.to_user_id=$user_id OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).") )
(ip.to_user_id = $user_id OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).") )
$condition_session
ORDER BY display_order DESC";
@ -831,21 +829,25 @@ if ($display_announcement_list) {
//STUDENT
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) {
//No group
$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)."))) ";
} else {
$cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."'
OR ip.to_group_id IN (0, ".api_get_group_id()."))";
$cond_user_id = " AND (
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 {
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).")) ";
} 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>';
} 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'));
}
} else {
@ -951,9 +952,6 @@ if ($display_announcement_list) {
$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);
$myrow['visibility'] = $item_visibility;

@ -465,13 +465,21 @@ class Agenda {
$session_id = intval($session_id);
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).") ) ";
} 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
WHERE agenda.id = ip.ref AND
ip.tool ='".TOOL_CALENDAR_EVENT."' AND

@ -142,35 +142,33 @@ class AnnouncementManager
$tbl_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY);
$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.*
FROM $tbl_announcement announcement, $tbl_item_property toolitemproperties
WHERE announcement.id = toolitemproperties.ref
AND announcement.id = '$announcement_id'
AND toolitemproperties.tool='announcement' AND
announcement.c_id = $course_id AND
toolitemproperties.c_id = $course_id
WHERE
announcement.id = toolitemproperties.ref AND
announcement.id = '$announcement_id' AND
toolitemproperties.tool='announcement' AND
announcement.c_id = $course_id AND
toolitemproperties.c_id = $course_id
ORDER BY display_order DESC";
} 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'";
if (GroupManager::is_tutor_of_group(api_get_user_id(), api_get_group_id())) {
$visibility_condition = " toolitemproperties.visibility IN ('0', '1') ";
}
if (api_get_user_id() != 0) {
$sql_query = " SELECT announcement.*, toolitemproperties.*
$sql_query = " SELECT announcement.*, toolitemproperties.*
FROM $tbl_announcement announcement, $tbl_item_property toolitemproperties
WHERE
announcement.id = toolitemproperties.ref AND
announcement.id = '$announcement_id' 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
announcement.c_id = $course_id AND
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.
*/
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 "<tr>";
echo "<td>";
echo "<select name=\"not_selected_form[]\" size=5 class=\"span4\" multiple>";
$group_users = GroupManager::get_subscribed_users($group_id);
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>';
}
@ -609,12 +608,22 @@ class AnnouncementManager
echo "<td>";
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 "</td>";
echo "</tr>";
echo "</table>";
}
/*
CONSTRUCT_NOT_SELECT_SELECT_FORM
*/
@ -800,22 +809,26 @@ class AnnouncementManager
$id = Database::escape_string($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);
while ($row = Database::fetch_array($result)) {
$to_group = $row['to_group_id'];
switch ($to_group) {
// it was send to one specific user
case null:
$to[] = "USER:".$row['to_user_id'];
break;
// it was sent to everyone
case 0:
return "everyone";
exit;
break;
default:
$to[] = "GROUP:".$row['to_group_id'];
$to_user = $row['to_user_id'];
if (empty($to_user) && empty($to_group)) {
return "everyone";
}
if (!empty($to_user) && !empty($to_group)) {
$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;

@ -3161,7 +3161,7 @@ function api_get_item_visibility($_course, $tool, $id, $session=0) {
* @version January 2005
* @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.
$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);
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
@ -3373,25 +3373,25 @@ function api_get_item_property_id($course_code, $tool, $ref) {
*/
function api_track_item_property_update($tool, $ref, $title, $content, $progress) {
$tbl_stats_item_property = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ITEM_PROPERTY);
$course_id = api_get_real_course_id(); //numeric
$course_code = api_get_course_id(); //alphanumeric
$item_property_id = api_get_item_property_id($course_code, $tool, $ref);
if (!empty($item_property_id)) {
$sql = "INSERT IGNORE INTO $tbl_stats_item_property SET
course_id = '$course_id',
item_property_id = '$item_property_id',
title = '".Database::escape_string($title)."',
content = '".Database::escape_string($content)."',
progress = '".intval($progress)."',
lastedit_date = '".api_get_utc_datetime()."',
lastedit_user_id = '".api_get_user_id()."',
session_id = '".api_get_session_id()."'";
Database::query($sql);
$affected_rows = Database::affected_rows();
return $affected_rows;
}
return false;
$tbl_stats_item_property = Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ITEM_PROPERTY);
$course_id = api_get_real_course_id(); //numeric
$course_code = api_get_course_id(); //alphanumeric
$item_property_id = api_get_item_property_id($course_code, $tool, $ref);
if (!empty($item_property_id)) {
$sql = "INSERT IGNORE INTO $tbl_stats_item_property SET
course_id = '$course_id',
item_property_id = '$item_property_id',
title = '".Database::escape_string($title)."',
content = '".Database::escape_string($content)."',
progress = '".intval($progress)."',
lastedit_date = '".api_get_utc_datetime()."',
lastedit_user_id = '".api_get_user_id()."',
session_id = '".api_get_session_id()."'";
Database::query($sql);
$affected_rows = Database::affected_rows();
return $affected_rows;
}
return false;
}
function api_get_track_item_property_history($tool, $ref) {

Loading…
Cancel
Save