From 688a07e7688a654ef2d96819e8094d1dd2353c4e Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 27 Jul 2012 15:17:30 +0200 Subject: [PATCH] Should fix bug when sending announcements see #4715 --- .../announcement_email.class.php | 98 ++++--- main/announcements/announcements.php | 241 +++++++++--------- main/inc/lib/main_api.lib.php | 9 +- 3 files changed, 175 insertions(+), 173 deletions(-) diff --git a/main/announcements/announcement_email.class.php b/main/announcements/announcement_email.class.php index f3de6c0390..16299f08cd 100644 --- a/main/announcements/announcement_email.class.php +++ b/main/announcements/announcement_email.class.php @@ -76,39 +76,24 @@ class AnnouncementEmail * @return array */ public function all_users() - { - $tbl_user = Database::get_main_table(TABLE_MAIN_USER); - $tbl_course_user = Database::get_main_table(TABLE_MAIN_COURSE_USER); + { $course_code = $this->course('code'); - $course_code = Database::escape_string($course_code); - if (empty($this->session_id)) { - $rel_rh = COURSE_RELATION_TYPE_RRHH; - $sql = "SELECT user.user_id, user.email, user.lastname, user.firstname - FROM $tbl_course_user, $tbl_user - WHERE active = 1 AND - course_code = '$course_code' AND - course_rel_user.user_id = user.user_id AND - relation_type <> $rel_rh"; + $group_id = api_get_group_id(); + if (empty($group_id)) { + $user_list = CourseManager::get_user_list_from_course_code($course_code); + } else { + $user_list = GroupManager::get_users($group_id); + $new_user_list = array(); + foreach ($user_list as $user) { + $new_user_list[] = array('user_id' => $user); + } + $user_list = $new_user_list; + } } else { - $tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER); - $session_id = $this->session_id; - $sql = "SELECT user.user_id, user.email, user.lastname, user.firstname - FROM $tbl_user - INNER JOIN $tbl_session_course_user - ON $tbl_user.user_id = $tbl_session_course_user.id_user AND - $tbl_session_course_user.course_code = '$course_code' AND - $tbl_session_course_user.id_session = $session_id - WHERE - active = 1"; - } - - $rs = Database::query($sql); - $result = array(); - while ($data = Database::fetch_array($rs)) { - $result[] = $data; + $user_list = CourseManager::get_user_list_from_course_code($course_code, $this->session_id); } - return $result; + return $user_list; } /** @@ -160,20 +145,27 @@ class AnnouncementEmail $users = $sent_to['users']; $users = $users ? $users : array(); $groups = $sent_to['groups']; - + if ($users) { $users = UserManager::get_user_list_by_ids($users, true); } else { $users = self::all_users(); - } + } if (!empty($groups)) { $group_users = GroupManager::get_groups_users($groups); $group_users = UserManager::get_user_list_by_ids($group_users, true); - $users = array_merge($users, $group_users); + $users = array_merge($users, $group_users); } - - return $users; + + //Clean users just in case + $new_list_users = array(); + if (!empty($users)) { + foreach ($users as $user) { + $new_list_users[$user['user_id']] = array('user_id' => $user['user_id']); + } + } + return $new_list_users; } /** @@ -214,19 +206,23 @@ class AnnouncementEmail $content = stripslashes($content); $content = AnnouncementManager::parse_content($content, $this->course('code')); - $user_firstname = $this->sender('firstName'); - $user_lastname = $this->sender('lastName'); - $user_email = $this->sender('mail'); - - $www = api_get_path(WEB_CODE_PATH); + $user_email = $this->sender('mail'); $course_param = api_get_cidreq(); - $course_name = $this->course('title'); - - $result = ''; - $result .= "
$content
"; - $result .= '--
'; - $result .= "$user_firstname $user_lastname
"; - $result .= "$course_name
"; + $course_name = $this->course('title'); + + $result = "
$content
"; + + //Adding attachment + $attachment = $this->attachement(); + if (!empty($attachment)) { + $result .= '
'; + $result .= Display::url($attachment['filename'], api_get_path(WEB_CODE_PATH).'announcements/download.php?file='.basename($attachment['path']).'&'.$course_param).'
'; + } + + $result .= '
'; + $sender_name = api_get_person_name($this->sender('firstName'), $this->sender('lastName'), PERSON_NAME_EMAIL_ADDRESS); + $result .= ''.$sender_name.'
'; + $result .= ''.$course_name.'
'; return $result; } @@ -265,14 +261,14 @@ class AnnouncementEmail $subject = $this->subject(); $message = $this->message(); - $attachement = $this->attachement(); - + // Send email one by one to avoid antispam $users = $this->sent_to(); foreach ($users as $user) { - $recipient_name = api_get_person_name($user['firstname'], $user['lastname'], null, PERSON_NAME_EMAIL_ADDRESS); - $recipient_email = $user['email']; - @api_mail_html($recipient_name, $recipient_email, $subject, $message, $sender_name, $sender_email, null, $attachement, true); + MessageManager::send_message($user['user_id'], $subject, $message, null, null, null, null, null, null, $sender['user_id']); + //$recipient_name = api_get_person_name($user['firstname'], $user['lastname'], null, PERSON_NAME_EMAIL_ADDRESS); + //$recipient_email = $user['email']; + //@api_mail_html($recipient_name, $recipient_email, $subject, $message, $sender_name, $sender_email, null, $attachement, true); } $this->log_mail_sent(); } diff --git a/main/announcements/announcements.php b/main/announcements/announcements.php index 55d5392505..bfa85eebe4 100644 --- a/main/announcements/announcements.php +++ b/main/announcements/announcements.php @@ -158,11 +158,13 @@ if (!empty($_SESSION['formelements']) and !empty($_GET['originalresource']) and if(!empty($_GET['remind_inactive'])) { $to[] = 'USER:'.intval($_GET['remind_inactive']); } -if (!empty($_SESSION['toolgroup'])){ - $_clean_toolgroup=intval($_SESSION['toolgroup']); - $group_properties = GroupManager :: get_group_properties($_clean_toolgroup); + +$group_id = api_get_group_id(); + +if (!empty($group_id)) { + $group_properties = GroupManager :: get_group_properties($group_id); $interbreadcrumb[] = array ("url" => "../group/group.php", "name" => get_lang('Groups')); - $interbreadcrumb[] = array ("url"=>"../group/group_space.php?gidReq=".$_clean_toolgroup, "name"=> get_lang('GroupSpace').' '.$group_properties['name']); + $interbreadcrumb[] = array ("url"=>"../group/group_space.php?gidReq=".$group_id, "name"=> get_lang('GroupSpace').' '.$group_properties['name']); } $announcement_id = intval($_GET['id']); @@ -268,12 +270,12 @@ if (api_is_allowed_to_edit(false,true) OR (api_get_course_setting('allow_user_ed $title_to_modify = $myrow['title']; if ($originalresource!=="no") { - $to=AnnouncementManager::load_edit_users("announcement", $announcement_to_modify); + $to = AnnouncementManager::load_edit_users("announcement", $announcement_to_modify); } $display_announcement_list = false; } - if ($to=="everyone" OR !empty($_SESSION['toolgroup'])) { + if ($to=="everyone" OR !empty($group_id)) { $_SESSION['select_groupusers']="hide"; } else { $_SESSION['select_groupusers']="show"; @@ -342,7 +344,7 @@ if (api_is_allowed_to_edit(false,true) OR (api_get_course_setting('allow_user_ed $emailTitle=(!empty($_POST['emailTitle'])?$safe_emailTitle:''); $newContent=(!empty($_POST['newContent'])?$safe_newContent:''); - $submitAnnouncement=isset($_POST['submitAnnouncement'])?$_POST['submitAnnouncement']:0; + $submitAnnouncement = isset($_POST['submitAnnouncement'])?$_POST['submitAnnouncement']:0; $id = 0; if (!empty($_POST['id'])) { @@ -370,27 +372,26 @@ if (api_is_allowed_to_edit(false,true) OR (api_get_course_setting('allow_user_ed } else { //insert mode if ($ctok == $_POST['sec_token']) { + + $sql = "SELECT MAX(display_order) FROM $tbl_announcement WHERE c_id = $course_id AND (session_id=".api_get_session_id()." OR session_id=0)"; + $result = Database::query($sql); + list($orderMax) = Database::fetch_row($result); + $order = $orderMax + 1; + $file = $_FILES['user_upload']; + $file_comment = $_POST['file_comment']; + if (!empty($group_id)) { + $insert_id = AnnouncementManager::add_group_announcement($safe_emailTitle, $safe_newContent, $order, array('GROUP:'.$group_id), $_POST['selectedform'], $file, $file_comment); + } else { + $insert_id = AnnouncementManager::add_announcement($safe_emailTitle, $safe_newContent, $order, $_POST['selectedform'], $file, $file_comment); + } + //store_resources($_SESSION['source_type'],$insert_id); + $_SESSION['select_groupusers']="hide"; + $message = get_lang('AnnouncementAdded'); - //if (!$surveyid) { - $sql = "SELECT MAX(display_order) FROM $tbl_announcement WHERE c_id = $course_id AND (session_id=".api_get_session_id()." OR session_id=0)"; - $result = Database::query($sql); - list($orderMax) = Database::fetch_row($result); - $order = $orderMax + 1; - $file = $_FILES['user_upload']; - $file_comment = $_POST['file_comment']; - if (!empty($_SESSION['toolgroup'])) { - $insert_id = AnnouncementManager::add_group_announcement($safe_emailTitle,$safe_newContent,$order,array('GROUP:'.$_SESSION['toolgroup']),$_POST['selectedform'],$file,$file_comment); - } else { - $insert_id = AnnouncementManager::add_announcement($safe_emailTitle, $safe_newContent, $order, $_POST['selectedform'], $file, $file_comment); - } - //store_resources($_SESSION['source_type'],$insert_id); - $_SESSION['select_groupusers']="hide"; - $message = get_lang('AnnouncementAdded'); - - /* MAIL FUNCTION */ - if ($_POST['email_ann'] && empty($_POST['onlyThoseMails'])) { - AnnouncementManager::send_email($insert_id); - } + /* MAIL FUNCTION */ + if ($_POST['email_ann'] && empty($_POST['onlyThoseMails'])) { + AnnouncementManager::send_email($insert_id); + } } // end condition token } // isset @@ -446,91 +447,91 @@ if (api_is_allowed_to_edit(false,true)) { } } else { // students only get to see the visible announcements - if (empty($_GET['origin']) or $_GET['origin'] !== 'learnpath') { - $group_memberships=GroupManager::get_group_ids($_course['real_id'], $_user['user_id']); + if (empty($_GET['origin']) or $_GET['origin'] !== 'learnpath') { + $group_memberships=GroupManager::get_group_ids($_course['real_id'], $_user['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) { - $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()."))"; - } - } else { - if (api_get_group_id() == 0) { - $cond_user_id = " AND ( ip.to_user_id='".$_user['user_id']."'" . - "OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).")) "; - } else { - $cond_user_id = " AND ( ip.to_user_id='".$_user['user_id']."'" . - "OR ip.to_group_id IN (0, ".api_get_group_id().")) "; - } - } - - // 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 - 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 - GROUP BY ip.ref - ORDER BY display_order DESC - LIMIT 0,$maximum"; - } else { - // the user is not member of any group - // this is an identified user => show the general announcements AND his personal announcements - if ($_user['user_id']) { - - if ((api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) { - $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='0')) "; - } else { - $cond_user_id = " AND ( ip.to_user_id='".$_user['user_id']."' OR ip.to_group_id='0') "; - } - $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 - GROUP BY ip.ref - ORDER BY display_order DESC - LIMIT 0,$maximum"; - } else { + if (api_get_group_id() == 0) { + $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()."))"; + } + } else { + if (api_get_group_id() == 0) { + $cond_user_id = " AND ( ip.to_user_id='".$_user['user_id']."'" . + "OR ip.to_group_id IN (0, ".implode(", ", $group_memberships).")) "; + } else { + $cond_user_id = " AND ( ip.to_user_id='".$_user['user_id']."'" . + "OR ip.to_group_id IN (0, ".api_get_group_id().")) "; + } + } - if (api_get_course_setting('allow_user_edit_announcement')) { - $cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."' OR ip.to_group_id='0') "; - } else { - $cond_user_id = " AND ip.to_group_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 + 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 + GROUP BY ip.ref + ORDER BY display_order DESC + LIMIT 0,$maximum"; + } else { + // the user is not member of any group + // this is an identified user => show the general announcements AND his personal announcements + if ($_user['user_id']) { + + if ((api_get_course_setting('allow_user_edit_announcement') && !api_is_anonymous())) { + $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='0')) "; + } else { + $cond_user_id = " AND ( ip.to_user_id='".$_user['user_id']."' OR ip.to_group_id='0') "; + } + $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 + GROUP BY ip.ref + ORDER BY display_order DESC + LIMIT 0,$maximum"; + } else { + + if (api_get_course_setting('allow_user_edit_announcement')) { + $cond_user_id = " AND (ip.lastedit_user_id = '".api_get_user_id()."' OR ip.to_group_id='0') "; + } else { + $cond_user_id = " AND ip.to_group_id='0' "; + } - // the user is not identiefied => show only the general announcements - $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' - AND ip.to_group_id='0' - $condition_session - GROUP BY ip.ref - ORDER BY display_order DESC - LIMIT 0,$maximum"; - } - } - } + // the user is not identiefied => show only the general announcements + $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' + AND ip.to_group_id='0' + $condition_session + GROUP BY ip.ref + ORDER BY display_order DESC + LIMIT 0,$maximum"; + } + } + } } $result = Database::query($sql); @@ -606,7 +607,7 @@ if ($display_form) { //this variable defines if the course administrator can send a message to a specific user / group or not //@todo use formvalidator - if (empty($_SESSION['toolgroup'])) { + if (empty($group_id)) { echo '