Browse Source

Should fix bug when sending announcements see #4715

Julio Montoya 12 years ago
parent
commit
688a07e768

+ 47 - 51
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 .= "<div>$content</div>";
-        $result .= '--<br/>';
-        $result .= "<a href=\"mailto:$user_email\">$user_firstname $user_lastname</a><br/>";
-        $result .= "<a href=\"$www/announcements/announcements.php?$course_param\">$course_name</a><br/>";
+        $course_name  = $this->course('title');
+        
+        $result = "<div>$content</div>";
+        
+        //Adding attachment
+        $attachment = $this->attachement();        
+        if (!empty($attachment)) {
+            $result .= '<br />';            
+            $result .= Display::url($attachment['filename'], api_get_path(WEB_CODE_PATH).'announcements/download.php?file='.basename($attachment['path']).'&'.$course_param).'<br />';            
+        }
+        
+        $result .= '<hr />';
+        $sender_name = api_get_person_name($this->sender('firstName'), $this->sender('lastName'), PERSON_NAME_EMAIL_ADDRESS);
+        $result .= '<a href="mailto:'.$user_email.'">'.$sender_name.'</a><br/>';
+        $result .= '<a href="'.api_get_path(WEB_CODE_PATH).'announcements/announcements.php?'.$course_param.'">'.$course_name.'</a><br/>';
         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();
     }

+ 121 - 120
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 '	<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>
@@ -666,14 +667,14 @@ if ($display_form) {
 			$announcement_to_modify ="";
 		}
 
-			($email_ann=='1' || !empty($surveyid))?$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">'.get_lang('MyGroup').'</span>
-				  <a href="#" onclick="toggle_sendto();">'.get_lang('ModifyRecipientList').'</a>';
-			      AnnouncementManager::show_to_form_group($_SESSION['toolgroup']);
-			echo '</div></div>';
+        ($email_ann=='1' || !empty($surveyid))?$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">'.get_lang('MyGroup').'</span>
+              <a href="#" onclick="toggle_sendto();">'.get_lang('ModifyRecipientList').'</a>';
+              AnnouncementManager::show_to_form_group($group_id);
+        echo '</div></div>';
 	}
 
 	// the announcement title
@@ -740,7 +741,7 @@ if ($display_form) {
 	echo'<br />';
 	echo '<div class="row"><div class="formw">';
 
-	if (empty($_SESSION['toolgroup'])) {
+	if (empty($group_id)) {
 		echo '<input type="hidden" name="submitAnnouncement" value="OK">';
 		echo '<input type="hidden" name="sec_token" value="'.$stok.'" />';
 		echo '<button class="btn save" type="button"  value="'.'  '.get_lang('Send').'  '.'" onclick="selectAll(this.form.elements[3],true)" >'.get_lang('ButtonPublishAnnouncement').'</button><br /><br />';
@@ -1010,8 +1011,8 @@ if ($display_announcement_list) {
                 echo Display::tag('td', Security::remove_XSS($title), array('class' => $style));
 
                 $user_info		= api_get_user_info($myrow['insert_user_id']);
-                $username = sprintf(get_lang("LoginX"), $user_info['username']);
-                $username_span = Display::tag('span', api_get_person_name($user_info['firstName'], $user_info['lastName']), array('title'=>$username));
+                $username       = sprintf(get_lang("LoginX"), $user_info['username']);
+                $username_span  = Display::tag('span', api_get_person_name($user_info['firstName'], $user_info['lastName']), array('title'=>$username));
     			echo Display::tag('td', $username_span);
                 echo Display::tag('td', api_convert_and_format_date($myrow['insert_date'], DATE_TIME_FORMAT_LONG));
 

+ 7 - 2
main/inc/lib/main_api.lib.php

@@ -5752,13 +5752,18 @@ function api_get_course_url($course_code = null, $session_id = null) {
         $course_info = api_get_course_info($course_code);
     }
     if (empty($session_id)) {
-        if (api_get_session_id() != 0)
         $session_url = '?id_session='.api_get_session_id();
     } else {
         $session_url = '?id_session='.intval($session_id);
     }
+    /*
+    if (empty($group_id)) {
+        $group_url = '&gidReq='.api_get_group_id();
+    } else {
+        $group_url = '&gidReq='.intval($group_id);
+    }*/
     if (!empty($course_info['path'])) {
-        return api_get_path(WEB_COURSE_PATH).$course_info['path'].'/'.$session_url;
+        return api_get_path(WEB_COURSE_PATH).$course_info['path'].'/index.php'.$session_url;
     }
     return null;
 }