2 /****************************************************************************/
4 /****************************************************************************/
5 /* Copyright (c) 2002-2010 */
6 /* Inclusive Design Institute */
9 /* This program is free software. You can redistribute it and/or */
10 /* modify it under the terms of the GNU General Public License */
11 /* as published by the Free Software Foundation. */
12 /****************************************************************************/
15 if (!defined('AT_INCLUDE_PATH')) { exit; }
18 * Returns an array of (shared and non-shared) forums belonging to the given course
20 * @param integer $course id of the course
21 * @return string array each row is a forum
22 * @see $db in include/vitals.inc.php
23 * @see is_shared_forum()
24 * @author Heidi Hazelton
25 * @author Joel Kronenberg
27 function get_forums($course) {
31 $sql = "SELECT F.*, DATE_FORMAT(F.last_post, '%Y-%m-%d %H:%i:%s') AS last_post FROM ".TABLE_PREFIX."forums_courses FC INNER JOIN ".TABLE_PREFIX."forums F USING (forum_id) WHERE FC.course_id=$course GROUP BY FC.forum_id ORDER BY F.title";
33 $sql = "SELECT F.*, FC.course_id, DATE_FORMAT(F.last_post, '%Y-%m-%d %H:%i:%s') AS last_post FROM ".TABLE_PREFIX."forums_courses FC INNER JOIN ".TABLE_PREFIX."forums F USING (forum_id) GROUP BY FC.forum_id ORDER BY F.title";
36 // 'nonshared' forums are always listed first:
37 $forums['nonshared'] = array();
38 $forums['shared'] = array();
39 $forums['group'] = array();
41 $result = mysql_query($sql, $db);
42 while ($row = mysql_fetch_assoc($result)) {
43 // for each forum, check if it's shared or not:
45 if (is_shared_forum($row['forum_id'])) {
46 $forums['shared'][] = $row;
48 $forums['nonshared'][] = $row;
52 // retrieve the group forums if course is given
54 if (!$_SESSION['groups'] || !$course) {
58 // filter out the groups that do not belong to the given course
59 foreach ($_SESSION['groups'] as $group) {
60 $sql = "SELECT * FROM ".TABLE_PREFIX."groups g, ". TABLE_PREFIX."groups_types gt
61 WHERE g.group_id=".$group."
62 AND g.type_id = gt.type_id
63 AND gt.course_id=".$course;
64 $result = mysql_query($sql, $db);
66 if (mysql_num_rows($result) > 0){
67 $groups = $group .',';
71 $groups = substr($groups, 0, -1);
72 $sql = "SELECT F.*, G.group_id FROM ".TABLE_PREFIX."forums_groups G
73 INNER JOIN ".TABLE_PREFIX."forums F
75 WHERE G.group_id IN ($groups)
78 $result = mysql_query($sql, $db);
79 while ($row = mysql_fetch_assoc($result)) {
80 $row['title'] = get_group_title($row['group_id']);
81 $forums['group'][] = $row;
89 * Returns true/false whether or not this forum is shared.
91 * @param integer $forum_id id of the forum
92 * @return boolean true if this forum is shared, false otherwise
93 * @see $db in include/vitals.inc.php
94 * @author Joel Kronenberg
96 function is_shared_forum($forum_id) {
99 $sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."forums_courses WHERE forum_id=$forum_id";
100 $result = mysql_query($sql, $db);
101 $row = mysql_fetch_assoc($result);
103 if ($row['cnt'] > 1) {
112 * Returns forum information for given forum_id
114 * @param integer $forum_id id of the forum
115 * @param integer $course id of the course (for non-admins)
116 * @return string array each row is a forum
117 * @see $db in include/vitals.inc.php
118 * @author Heidi Hazelton
120 function get_forum($forum_id, $course = '') {
123 if (!empty($course)) {
124 $sql = "SELECT * FROM ".TABLE_PREFIX."forums_courses fc, ".TABLE_PREFIX."forums f WHERE (fc.course_id=$course OR fc.course_id=0) AND fc.forum_id=f.forum_id and fc.forum_id=$forum_id ORDER BY title";
125 $result = mysql_query($sql, $db);
126 $forum = mysql_fetch_assoc($result);
127 } else if (empty($course)) { //only admins should be retrieving forums w/o a course! add this check
128 $sql = "SELECT * FROM ".TABLE_PREFIX."forums WHERE forum_id=$forum_id";
129 $result = mysql_query($sql, $db);
130 $forum = mysql_fetch_assoc($result);
140 * Checks to see if signed in member is allowed to view the forum page
142 * @param integer $forum_id id of the forum
143 * @return boolean view (true) or not view (false)
144 * @see $db in include/vitals.inc.php
145 * @author Heidi Hazelton
147 function valid_forum_user($forum_id) {
150 $sql = "SELECT forum_id FROM ".TABLE_PREFIX."forums_courses WHERE (course_id=$_SESSION[course_id] OR course_id=0) AND forum_id=$forum_id";
151 $result = mysql_query($sql, $db);
152 $row = mysql_fetch_assoc($result);
155 // not a course forum, let's check group:
156 if (!empty($_SESSION['groups'])){
157 $groups = implode(',', $_SESSION['groups']);
158 $sql = "SELECT forum_id FROM ".TABLE_PREFIX."forums_groups WHERE group_id IN ($groups) AND forum_id=$forum_id";
159 $result = mysql_query($sql, $db);
160 if ($row = mysql_fetch_assoc($result)) {
174 * @param array $_POST add-forum form variables
175 * @see $db in include/vitals.inc.php
176 * @see $addslashes in include/vitals.inc.php
177 * @author Heidi Hazelton
179 function add_forum($_POST) {
183 $_POST['title'] = $addslashes($_POST['title']);
184 $_POST['body'] = $addslashes($_POST['body']);
185 $_POST['edit'] = intval($_POST['edit']);
187 $sql = "INSERT INTO ".TABLE_PREFIX."forums VALUES (NULL,'$_POST[title]', '$_POST[body]', 0, 0, NOW(), $_POST[edit])";
188 $result = mysql_query($sql,$db);
190 $sql = "INSERT INTO ".TABLE_PREFIX."forums_courses VALUES (LAST_INSERT_ID(), $_SESSION[course_id])";
191 $result = mysql_query($sql,$db);
199 * @param array $_POST add-forum form variables
200 * @see $db in include/vitals.inc.php
201 * @see $addslashes in include/vitals.inc.php
202 * @author Heidi Hazelton
204 function edit_forum($_POST) {
208 $_POST['title'] = $addslashes($_POST['title']);
209 $_POST['body'] = $addslashes($_POST['body']);
211 $_POST['fid'] = intval($_POST['fid']);
212 $_POST['edit'] = intval($_POST['edit']);
214 $sql = "UPDATE ".TABLE_PREFIX."forums SET title='$_POST[title]', description='$_POST[body]', last_post=last_post, mins_to_edit=$_POST[edit] WHERE forum_id=$_POST[fid]";
215 $result = mysql_query($sql,$db);
221 * Deletes a forum (checks if its shared).
222 * Assumes the forum is not shared.
223 * Assumes the user has the priv to delete this forum.
225 * @param array $_POST add-forum form variables
226 * @see $db in include/vitals.inc.php
227 * @see $addslashes in include/vitals.inc.php
228 * @author Heidi Hazelton
230 function delete_forum($forum_id) {
233 $sql = "SELECT post_id FROM ".TABLE_PREFIX."forums_threads WHERE forum_id=$forum_id";
234 $result = mysql_query($sql, $db);
235 while ($row = mysql_fetch_array($result)) {
236 $sql = "DELETE FROM ".TABLE_PREFIX."forums_accessed WHERE post_id=$row[post_id]";
237 $result2 = mysql_query($sql, $db);
240 $sql = "DELETE FROM ".TABLE_PREFIX."forums_subscriptions WHERE forum_id=$forum_id";
241 $result = mysql_query($sql, $db);
243 $sql = "DELETE FROM ".TABLE_PREFIX."forums_threads WHERE forum_id=$forum_id";
244 $result = mysql_query($sql, $db);
246 $sql = "DELETE FROM ".TABLE_PREFIX."forums_courses WHERE forum_id=$forum_id";
247 $result = mysql_query($sql, $db);
249 $sql = "DELETE FROM ".TABLE_PREFIX."forums WHERE forum_id=$forum_id";
250 $result = mysql_query($sql, $db);
252 $sql = "DELETE FROM ".TABLE_PREFIX."content_forums_assoc WHERE forum_id=$forum_id";
253 $result = mysql_query($sql, $db);
255 $sql = "OPTIMIZE TABLE ".TABLE_PREFIX."forums_threads";
256 $result = mysql_query($sql, $db);
260 function print_entry($row) {
261 global $page, $system_courses, $forum_info;
265 $reply_link = '<a href="mods/_standard/forums/forum/view.php?fid='.$row['forum_id'].SEP.'pid=';
266 if ($row['parent_id'] == 0) {
267 $reply_link .= $row['post_id'];
269 $reply_link .= $row['parent_id'];
271 $reply_link .= SEP.'reply='.$row['post_id'].SEP.'page='.$page.'#post" >'._AT('reply').'</a>';
275 <li class="<?php if ($counter %2) { echo 'odd'; } else { echo 'even'; } ?>">
276 <a name="<?php echo $row['post_id']; ?>"></a>
277 <div class="forum-post-author">
278 <a href="profile.php?id=<?php echo $row['member_id']; ?>" class="title"><?php echo htmlspecialchars(get_display_name($row['member_id'])); ?></a><br />
279 <?php print_profile_img($row['member_id']); ?>
282 <div class="forum-post-content">
283 <h3><?php echo AT_print($row['subject'], 'forums_threads.subject'); ?></h3>
285 <div class="forum-post-ctrl">
286 <?php if (authenticate(AT_PRIV_FORUMS, AT_PRIV_RETURN)): ?>
287 <?php echo $reply_link; ?> | <a href="mods/_standard/forums/edit_post.php?fid=<?php echo $row['forum_id'].SEP.'pid='.$row['post_id']; ?>"><?php echo _AT('edit'); ?></a> | <a href="mods/_standard/forums/forum/delete_thread.php?fid=<?php echo $row['forum_id'].SEP.'pid='.$row['post_id'].SEP.'ppid='.$row['parent_id'].SEP; ?>nest=1"><?php echo _AT('delete'); ?></a>
288 <?php elseif (($row['member_id'] == $_SESSION['member_id']) && (($row['udate'] + $forum_info['mins_to_edit'] * 60) > time())): ?>
289 <?php echo $reply_link; ?> | <a href="mods/_standard/forums/edit_post.php?fid=<?php echo $row['forum_id'].SEP.'pid='.$row['post_id']; ?>"><?php echo _AT('edit'); ?></a> <span>(<?php echo _AT('edit_for_minutes', round((($row['udate'] + $forum_info['mins_to_edit'] * 60) - time())/60)); ?>)</span>
290 <?php elseif ($_SESSION['valid_user']): ?>
291 <?php echo $reply_link; ?>
294 <p class="date"> <?php echo AT_date(_AT('forum_date_format'), $row['date'], AT_DATE_MYSQL_DATETIME); ?></p>
299 <p><?php echo AT_print($row['body'], 'forums_threads.body'); ?></p>