0c8db8a018ca4d0ae507a00b4ba9e68665994906
[atutor.git] / docs / mods / _standard / forums / forum / new_thread.php
1 <?php
2 /****************************************************************/
3 /* ATutor                                                                                                               */
4 /****************************************************************/
5 /* Copyright (c) 2002-2010                                      */
6 /* Inclusive Design Institute                                   */
7 /* http://atutor.ca                                                                                             */
8 /*                                                              */
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 /****************************************************************/
13 // $Id$
14
15 define('AT_INCLUDE_PATH', '../../../../include/');
16 require(AT_INCLUDE_PATH.'vitals.inc.php');
17 require(AT_INCLUDE_PATH.'../mods/_standard/forums/lib/forums.inc.php');
18
19 $fid = intval($_REQUEST['fid']);
20 $_POST['parent_id'] = intval($_REQUEST['parent_id']);
21
22 $_pages['mods/_standard/forums/forum/index.php?fid='.$fid]['title']    = get_forum_name($fid);
23 $_pages['mods/_standard/forums/forum/index.php?fid='.$fid]['parent']   = 'mods/_standard/forums/forum/list.php';
24 $_pages['mods/_standard/forums/forum/index.php?fid='.$fid]['children'] = array('mods/_standard/forums/forum/new_thread.php');
25
26 $_pages['mods/_standard/forums/forum/new_thread.php']['title_var'] = 'new_thread';
27 $_pages['mods/_standard/forums/forum/new_thread.php']['parent']    = 'mods/_standard/forums/forum/index.php?fid='.$fid;
28
29 if (!valid_forum_user($fid) || !$_SESSION['enroll']) {
30         $msg->addError('FORUM_DENIED');
31         require(AT_INCLUDE_PATH.'header.inc.php');
32         require(AT_INCLUDE_PATH.'footer.inc.php');
33         exit;
34 }
35
36
37 if (isset($_POST['cancel'])) {
38         $msg->addFeedback('CANCELLED');
39         header('Location: '.url_rewrite('mods/_standard/forums/forum/index.php?fid='.$fid, AT_PRETTY_URL_IS_HEADER));
40         exit;
41 } else if (isset($_POST['submit'])) {
42         $missing_fields = array();
43
44         if ($_POST['subject'] == '')  {
45                 $missing_fields[] = _AT('subject');
46         } else {
47                 //60 was set by db
48                 $_POST['subject'] = validate_length($_POST['subject'], 60);
49         }
50
51         if ($_POST['body'] == '') {
52                 $missing_fields[] = _AT('body');
53         }
54         if ($missing_fields) {
55                 $missing_fields = implode(', ', $missing_fields);
56                 $msg->addError(array('EMPTY_FIELDS', $missing_fields));
57         }
58         if (!$msg->containsErrors()) {
59                 if ($_POST['replytext'] != '') {
60                         $_POST['body'] .= "\n\n".'[reply][b]'._AT('in_reply_to').': [/b]'."\n";
61                         if ($strlen($_POST['replytext']) > 200) {
62                                 $_POST['body'] .= $substr($_POST['replytext'], 0, 200).'...';
63                         } else {
64                                 $_POST['body'] .= $_POST['replytext'];
65                         }
66                         $num_open_replies = substr_count($_POST['body'], '[reply]');
67                         $num_close_replies = substr_count($_POST['body'], '[/reply]');
68                         $num_replies_add = $num_open_replies - $num_close_replies - 1;
69                         for ($i=0; $i < $num_replies_add; $i++) {
70                                 $_POST['body'] .= '[/reply]';
71                         }
72
73                         $_POST['body'] .= "\n".'[op]mods/_standard/forums/forum/view.php?fid='.$_POST['fid'].SEP.'pid='.$_POST['parent_id'].SEP.'page='.$_POST['page'].'#'.$_POST['reply'];
74                         $_POST['body'] .= '[/op][/reply]';
75                 }
76
77                 /* use this value instead of NOW(), because we want the parent post to have the exact */
78                 /* same date. and not a second off if that may happen */
79                 $now = date('Y-m-d H:i:s');
80
81                 $sql_subject = $addslashes($_POST['subject']);
82                 $sql_body    = $addslashes($_POST['body']);
83
84                 $sql = "INSERT INTO ".TABLE_PREFIX."forums_threads VALUES (NULL, $_POST[parent_id], $_SESSION[member_id], $_POST[fid], '$now', 0, '$sql_subject', '$sql_body', '$now', 0, 0)";
85                 $result = mysql_query($sql, $db);
86                 $this_id = mysql_insert_id($db);
87
88                 /* Increment count for posts in forums table in database */
89                 $sql = "UPDATE ".TABLE_PREFIX."forums SET num_posts=num_posts+1, last_post='$now' WHERE forum_id=$_POST[fid]";
90                 $result  = mysql_query($sql, $db);
91
92                 // If there are subscribers to this forum, send them an email notification
93                 $subscriber_email_list = array(); // list of subscribers array('email', 'full_name')
94                 $subscriber_list       = '';
95                 $enrolled = array();
96                 //get list of student enrolled in this course
97                 // This needs to be replaced with a tool to clean forum subscriptions when unenrolling
98                 $sql = "SELECT member_id from ".TABLE_PREFIX."course_enrollment WHERE course_id = '$_SESSION[course_id]' AND approved = 'y'";
99                 $result1 = mysql_query($sql, $db);
100                 while($row = mysql_fetch_assoc($result1)){
101                         $enrolled[] = $row['member_id'];
102                 }
103                 //get a list of users subscribed to this forum
104                 $sql = "SELECT member_id FROM ".TABLE_PREFIX."forums_subscriptions WHERE forum_id=$fid";
105                 $result = mysql_query($sql, $db);
106                 while($row = mysql_fetch_assoc($result)){
107                         $subscriber_list .= $row['member_id'] . ',';
108                 }
109                 if ($_POST['parent_id']) {
110                         $sql = "SELECT member_id FROM ".TABLE_PREFIX."forums_accessed WHERE post_id=$_POST[parent_id] AND subscribe=1";
111                         $result = mysql_query($sql, $db);
112                         while($row = mysql_fetch_assoc($result)){
113                                 if(in_array($row['member_id'], $enrolled)){
114                                         $subscriber_list .= $row['member_id'] . ',';
115                                 }
116                         }
117                 }
118                 $subscriber_list = $substr($subscriber_list, 0, -1);
119
120                 if ($subscriber_list != '') {
121                         $sql = "SELECT first_name, second_name, last_name, email, member_id FROM ".TABLE_PREFIX."members WHERE member_id IN ($subscriber_list)";
122                         $result = mysql_query($sql, $db);
123                         while ($row = mysql_fetch_assoc($result)) {
124                                 $subscriber_email_list[] = array('email'=> $row['email'], 'full_name' => $row['first_name'] . ' '. $row['second_name'] . ' ' . $row['last_name'], 'member_id'=>$row['member_id']);
125                         }
126                 }
127                 $sql = "UPDATE ".TABLE_PREFIX."forums_threads SET num_comments=num_comments+1, last_comment='$now', date=date WHERE post_id=$_POST[parent_id]";
128                 $result = mysql_query($sql, $db);
129
130                 if ($subscriber_email_list) {
131                         require(AT_INCLUDE_PATH . 'classes/phpmailer/atutormailer.class.php');
132
133                         if ($_POST['parent_name'] == ''){
134                                 $_POST['parent_name'] = $_POST['subject'];
135                         }
136                         $_POST['parent_name'] = urldecode($_POST['parent_name']);
137                         foreach ($subscriber_email_list as $subscriber){
138                                 $mail = new ATutorMailer;
139                                 $mail->AddAddress($subscriber['email'], get_display_name($subscriber['member_id']));
140                                 $body = _AT('forum_new_submsg', $_SESSION['course_title'],  get_forum_name($_POST['fid']), $_POST['parent_name'],  AT_BASE_HREF.'mods/_standard/forums/forum/view.php?fid='.$_POST['fid'].SEP.'pid='.$_POST['parent_id']);
141                                 $body .= "\n----------------------------------------------\n";
142                                 $body .= _AT('posted_by').": ".get_display_name($_SESSION['member_id'])."\n";
143                                 $body .= $_POST['body']."\n";
144                                 $mail->FromName = $_config['site_name'];
145                                 $mail->From     = $_config['contact_email'];
146                                 $mail->Subject = _AT('thread_notify1');
147                                 $mail->Body    = $body;
148
149                                 if(!$mail->Send()) {
150                                         $msg->addError('SENDING_ERROR');
151                                 }
152
153                                 unset($mail);
154                         }
155                 }
156                 if ($_REQUEST['subscribe']) {
157                         if($_POST['parent_id'] != 0){
158                                 $this_id = $_POST['parent_id'];
159                                 $subject = $_POST['parent_name'];
160                         } else {
161                                 $subject = $_POST['subject'];
162                         }
163                         $sql    = "REPLACE INTO ".TABLE_PREFIX."forums_accessed VALUES ($this_id, $_SESSION[member_id], NOW(), 1)";
164                         $result = mysql_query($sql, $db);
165
166                         $msg->addFeedback(array('THREAD_SUBSCRIBED', $subject));
167                 } else if ($_POST['parent_id'] == 0) {
168                         // not subscribe and it's a new thread, mark read:
169
170                         $sql    = "REPLACE INTO ".TABLE_PREFIX."forums_accessed VALUES ($this_id, $_SESSION[member_id], NOW(), 0)";
171                         $result = mysql_query($sql, $db);
172                 }
173
174                 if ($_POST['parent_id'] == 0) {
175                         $sql = "UPDATE ".TABLE_PREFIX."forums SET num_topics=num_topics+1, last_post='$now' WHERE forum_id=$_POST[fid]";
176                         $result  = mysql_query($sql, $db);
177                         $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY');
178                         $_POST['parent_id'] = $this_id;
179                 }
180
181                 $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY');
182                 header('Location: '.url_rewrite('mods/_standard/forums/forum/view.php?fid='.$fid.SEP.'pid='.$_POST['parent_id'].SEP.'page='.$_POST['page'], AT_PRETTY_URL_IS_HEADER));
183                 exit;
184         }
185 }
186
187 $onload = 'document.form.subject.focus();';
188
189 require(AT_INCLUDE_PATH.'header.inc.php');
190         
191 $parent_id = 0;
192 $new_thread = TRUE;
193 require(AT_INCLUDE_PATH.'../mods/_standard/forums/html/new_thread.inc.php');
194 require(AT_INCLUDE_PATH.'footer.inc.php');
195
196 ?>