831 |
florian |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
////////////////////////////////////////////////////////////////////////////////
|
|
|
4 |
// //
|
|
|
5 |
// Copyright (C) 2006 Phorum Development Team //
|
|
|
6 |
// http://www.phorum.org //
|
|
|
7 |
// //
|
|
|
8 |
// This program is free software. You can redistribute it and/or modify //
|
|
|
9 |
// it under the terms of either the current Phorum License (viewable at //
|
|
|
10 |
// phorum.org) or the Phorum License that was distributed with this file //
|
|
|
11 |
// //
|
|
|
12 |
// This program is distributed in the hope that it will be useful, //
|
|
|
13 |
// but WITHOUT ANY WARRANTY, without even the implied warranty of //
|
|
|
14 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
|
|
|
15 |
// //
|
|
|
16 |
// You should have received a copy of the Phorum License //
|
|
|
17 |
// along with this program. //
|
|
|
18 |
////////////////////////////////////////////////////////////////////////////////
|
|
|
19 |
define('phorum_page','read');
|
|
|
20 |
|
|
|
21 |
include_once("./common.php");
|
|
|
22 |
include_once("./include/email_functions.php");
|
|
|
23 |
include_once("./include/format_functions.php");
|
|
|
24 |
|
|
|
25 |
|
|
|
26 |
// set all our URL's ... we need these earlier
|
|
|
27 |
phorum_build_common_urls();
|
|
|
28 |
|
|
|
29 |
// checking read-permissions
|
|
|
30 |
if(!phorum_check_read_common()) {
|
|
|
31 |
return;
|
|
|
32 |
}
|
|
|
33 |
|
|
|
34 |
// somehow we got to a folder
|
|
|
35 |
if(empty($PHORUM["forum_id"]) || $PHORUM["folder_flag"]){
|
|
|
36 |
$dest_url = phorum_get_url(PHORUM_INDEX_URL, $PHORUM["forum_id"]);
|
|
|
37 |
phorum_redirect_by_url($dest_url);
|
|
|
38 |
exit();
|
|
|
39 |
}
|
|
|
40 |
|
|
|
41 |
if ($PHORUM["DATA"]["LOGGEDIN"]) { // reading newflags in
|
|
|
42 |
$PHORUM['user']['newinfo']=phorum_db_newflag_get_flags();
|
|
|
43 |
}
|
|
|
44 |
|
|
|
45 |
$PHORUM["DATA"]["MODERATOR"] = phorum_user_access_allowed(PHORUM_USER_ALLOW_MODERATE_MESSAGES);
|
|
|
46 |
|
|
|
47 |
if($PHORUM["DATA"]["MODERATOR"]) {
|
|
|
48 |
// find out how many forums this user can moderate
|
|
|
49 |
$forums=phorum_db_get_forums(0,-1,$PHORUM['vroot']);
|
|
|
50 |
|
|
|
51 |
$modforums=0;
|
|
|
52 |
foreach($forums as $id=>$forum){
|
|
|
53 |
if($forum["folder_flag"]==0 && phorum_user_moderate_allowed($id)){
|
|
|
54 |
$modforums++;
|
|
|
55 |
}
|
|
|
56 |
}
|
|
|
57 |
if($modforums > 1) {
|
|
|
58 |
$build_move_url=true;
|
|
|
59 |
} else {
|
|
|
60 |
$build_move_url=false;
|
|
|
61 |
}
|
|
|
62 |
}
|
|
|
63 |
|
|
|
64 |
// setup some stuff based on the url passed
|
|
|
65 |
if(empty($PHORUM["args"][1])) {
|
|
|
66 |
phorum_redirect_by_url(phorum_get_url(PHORUM_LIST_URL));
|
|
|
67 |
exit();
|
|
|
68 |
} elseif(empty($PHORUM["args"][2])) {
|
|
|
69 |
$thread = (int)$PHORUM["args"][1];
|
|
|
70 |
$message_id = (int)$PHORUM["args"][1];
|
|
|
71 |
} else{
|
|
|
72 |
if(!is_numeric($PHORUM["args"][2])) {
|
|
|
73 |
$dest_url="";
|
|
|
74 |
$newervar=(int)$PHORUM["args"][1];
|
|
|
75 |
|
|
|
76 |
switch($PHORUM["args"][2]) {
|
|
|
77 |
case "newer":
|
|
|
78 |
$thread = phorum_db_get_newer_thread($newervar);
|
|
|
79 |
break;
|
|
|
80 |
case "older":
|
|
|
81 |
$thread = phorum_db_get_older_thread($newervar);
|
|
|
82 |
break;
|
|
|
83 |
case "markthreadread":
|
|
|
84 |
// thread needs to be in $thread for the redirection
|
|
|
85 |
$thread = (int)$PHORUM["args"][1];
|
|
|
86 |
$thread_message=phorum_db_get_message($thread,'message_id');
|
|
|
87 |
|
|
|
88 |
$mids=array();
|
|
|
89 |
foreach($thread_message['meta']['message_ids'] as $mid) {
|
|
|
90 |
if(!isset($PHORUM['user']['newinfo'][$mid]) && $mid > $PHORUM['user']['newinfo']['min_id']) {
|
|
|
91 |
$mids[]=$mid;
|
|
|
92 |
}
|
|
|
93 |
}
|
|
|
94 |
|
|
|
95 |
$msg_count=count($mids);
|
|
|
96 |
|
|
|
97 |
// any messages left to update newinfo with?
|
|
|
98 |
if($msg_count > 0){
|
|
|
99 |
phorum_db_newflag_add_read($mids);
|
|
|
100 |
unset($mids);
|
|
|
101 |
}
|
|
|
102 |
break;
|
|
|
103 |
case "gotonewpost":
|
|
|
104 |
// thread needs to be in $thread for the redirection
|
|
|
105 |
$thread = (int)$PHORUM["args"][1];
|
|
|
106 |
$thread_message=phorum_db_get_message($thread,'message_id');
|
|
|
107 |
$message_ids=$thread_message['meta']['message_ids'];
|
|
|
108 |
|
|
|
109 |
foreach($message_ids as $mkey => $mid) {
|
|
|
110 |
// if already read, remove it from message-array
|
|
|
111 |
if(isset($PHORUM['user']['newinfo'][$mid]) || $mid <= $PHORUM['user']['newinfo']['min_id']) {
|
|
|
112 |
unset($message_ids[$mkey]);
|
|
|
113 |
}
|
|
|
114 |
|
|
|
115 |
}
|
|
|
116 |
|
|
|
117 |
// it could happen that they are all read
|
|
|
118 |
if(count($message_ids)) {
|
|
|
119 |
asort($message_ids,SORT_NUMERIC); // make sure they are sorted
|
|
|
120 |
|
|
|
121 |
|
|
|
122 |
$new_message=array_shift($message_ids); // get the first element
|
|
|
123 |
|
|
|
124 |
if(!$PHORUM['threaded_read']) { // get new page
|
|
|
125 |
$new_page=ceil(phorum_db_get_message_index($thread,$new_message)/$PHORUM['read_length']);
|
|
|
126 |
$dest_url=phorum_get_url(PHORUM_READ_URL,$thread,$new_message,"page=$new_page");
|
|
|
127 |
} else { // for threaded
|
|
|
128 |
$dest_url=phorum_get_url(PHORUM_READ_URL,$thread,$new_message);
|
|
|
129 |
}
|
|
|
130 |
} else {
|
|
|
131 |
// lets go back to the index if they are all read
|
|
|
132 |
$dest_url=phorum_get_url(PHORUM_LIST_URL);
|
|
|
133 |
}
|
|
|
134 |
|
|
|
135 |
break;
|
|
|
136 |
|
|
|
137 |
|
|
|
138 |
}
|
|
|
139 |
|
|
|
140 |
if(empty($dest_url)) {
|
|
|
141 |
if($thread > 0) {
|
|
|
142 |
$dest_url = phorum_get_url(PHORUM_READ_URL, $thread);
|
|
|
143 |
} else{
|
|
|
144 |
// we are either at the top or the bottom, go back to the list.
|
|
|
145 |
$dest_url = phorum_get_url(PHORUM_LIST_URL);
|
|
|
146 |
}
|
|
|
147 |
}
|
|
|
148 |
|
|
|
149 |
phorum_redirect_by_url($dest_url);
|
|
|
150 |
exit();
|
|
|
151 |
}
|
|
|
152 |
|
|
|
153 |
$thread = (int)$PHORUM["args"][1];
|
|
|
154 |
$message_id = (int)$PHORUM["args"][2];
|
|
|
155 |
}
|
|
|
156 |
|
|
|
157 |
// determining the page if page isn't given and message_id != thread
|
|
|
158 |
$page=0;
|
|
|
159 |
if(!$PHORUM["threaded_read"]) {
|
|
|
160 |
if(isset($PHORUM['args']['page']) && is_numeric($PHORUM["args"]["page"]) && $PHORUM["args"]["page"] > 0) {
|
|
|
161 |
$page=(int)$PHORUM["args"]["page"];
|
|
|
162 |
} elseif($message_id != $thread) {
|
|
|
163 |
$page=ceil(phorum_db_get_message_index($thread,$message_id)/$PHORUM['read_length']);
|
|
|
164 |
} else {
|
|
|
165 |
$page=1;
|
|
|
166 |
}
|
|
|
167 |
if(empty($page)) {
|
|
|
168 |
$page=1;
|
|
|
169 |
}
|
|
|
170 |
}
|
|
|
171 |
|
|
|
172 |
// Get the thread
|
|
|
173 |
$data = phorum_db_get_messages($thread,$page);
|
|
|
174 |
|
|
|
175 |
|
|
|
176 |
if(!empty($data) && isset($data[$thread]) && isset($data[$message_id])) {
|
|
|
177 |
|
|
|
178 |
$fetch_user_ids = $data['users'];
|
|
|
179 |
unset($data['users']);
|
|
|
180 |
|
|
|
181 |
// remove the unneeded message bodies in threaded view
|
|
|
182 |
// to avoid unnecessary formatting of bodies
|
|
|
183 |
if ($PHORUM["threaded_read"] &&
|
|
|
184 |
!(isset($PHORUM['TMP']['all_bodies_in_threaded_read']) &&
|
|
|
185 |
!empty($PHORUM['TMP']['all_bodies_in_threaded_read']) ) ) {
|
|
|
186 |
|
|
|
187 |
$remove_threaded_bodies=1;
|
|
|
188 |
// the flag is used in the foreach-loop later on
|
|
|
189 |
} else {
|
|
|
190 |
$remove_threaded_bodies=0;
|
|
|
191 |
}
|
|
|
192 |
|
|
|
193 |
// build URL's that apply only here.
|
|
|
194 |
if($PHORUM["float_to_top"]) {
|
|
|
195 |
$PHORUM["DATA"]["URL"]["OLDERTHREAD"] = phorum_get_url(PHORUM_READ_URL, $data[$thread]["modifystamp"], "older");
|
|
|
196 |
$PHORUM["DATA"]["URL"]["NEWERTHREAD"] = phorum_get_url(PHORUM_READ_URL, $data[$thread]["modifystamp"], "newer");
|
|
|
197 |
} else{
|
|
|
198 |
$PHORUM["DATA"]["URL"]["OLDERTHREAD"] = phorum_get_url(PHORUM_READ_URL, $thread, "older");
|
|
|
199 |
$PHORUM["DATA"]["URL"]["NEWERTHREAD"] = phorum_get_url(PHORUM_READ_URL, $thread, "newer");
|
|
|
200 |
}
|
|
|
201 |
|
|
|
202 |
$PHORUM["DATA"]["URL"]["MARKTHREADREAD"] = phorum_get_url(PHORUM_READ_URL, $thread, "markthreadread");
|
|
|
203 |
$PHORUM["DATA"]["POST"]["thread"] = $thread;
|
|
|
204 |
$PHORUM["DATA"]["POST"]["parentid"] = $message_id;
|
|
|
205 |
$PHORUM["DATA"]["POST"]["subject"] = $data[$message_id]["subject"];
|
|
|
206 |
|
|
|
207 |
$thread_is_closed = (bool)$data[$thread]["closed"];
|
|
|
208 |
$thread_is_announcement = ($data[$thread]["sort"]==PHORUM_SORT_ANNOUNCEMENT)?1:0;
|
|
|
209 |
|
|
|
210 |
// we might have more messages for mods
|
|
|
211 |
if($PHORUM["DATA"]["MODERATOR"] && isset($data[$thread]["meta"]["message_ids_moderator"])) {
|
|
|
212 |
$threadnum=count($data[$thread]['meta']['message_ids_moderator']);
|
|
|
213 |
} else {
|
|
|
214 |
$threadnum=$data[$thread]['thread_count'];
|
|
|
215 |
}
|
|
|
216 |
|
|
|
217 |
if(!$PHORUM["threaded_read"] && $threadnum > $PHORUM["read_length"]){
|
|
|
218 |
$pages=ceil($threadnum/$PHORUM["read_length"]);
|
|
|
219 |
|
|
|
220 |
if($pages<=11){
|
|
|
221 |
$page_start=1;
|
|
|
222 |
} elseif($pages-$page<5) {
|
|
|
223 |
$page_start=$pages-10;
|
|
|
224 |
} elseif($pages>11 && $page>6){
|
|
|
225 |
$page_start=$page-5;
|
|
|
226 |
} else {
|
|
|
227 |
$page_start=1;
|
|
|
228 |
}
|
|
|
229 |
|
|
|
230 |
for($x=0;$x<11 && $x<$pages;$x++){
|
|
|
231 |
$pageno=$x+$page_start;
|
|
|
232 |
$PHORUM["DATA"]["PAGES"][] = array(
|
|
|
233 |
"pageno"=>$pageno,
|
|
|
234 |
"url"=>phorum_get_url(PHORUM_READ_URL, $thread, "page=$pageno")
|
|
|
235 |
);
|
|
|
236 |
}
|
|
|
237 |
|
|
|
238 |
$PHORUM["DATA"]["CURRENTPAGE"]=$page;
|
|
|
239 |
$PHORUM["DATA"]["TOTALPAGES"]=$pages;
|
|
|
240 |
|
|
|
241 |
if($page_start>1){
|
|
|
242 |
$PHORUM["DATA"]["URL"]["FIRSTPAGE"]=phorum_get_url(PHORUM_READ_URL, $thread, "page=1");
|
|
|
243 |
}
|
|
|
244 |
|
|
|
245 |
if($pageno<$pages){
|
|
|
246 |
$PHORUM["DATA"]["URL"]["LASTPAGE"]=phorum_get_url(PHORUM_READ_URL, $thread, "page=$pages");
|
|
|
247 |
}
|
|
|
248 |
|
|
|
249 |
if($pages>$page){
|
|
|
250 |
$nextpage=$page+1;
|
|
|
251 |
$PHORUM["DATA"]["URL"]["NEXTPAGE"]=phorum_get_url(PHORUM_READ_URL, $thread, "page=$nextpage");
|
|
|
252 |
}
|
|
|
253 |
if($page>1){
|
|
|
254 |
$prevpage=$page-1;
|
|
|
255 |
$PHORUM["DATA"]["URL"]["PREVPAGE"]=phorum_get_url(PHORUM_READ_URL, $thread, "page=$prevpage");
|
|
|
256 |
}
|
|
|
257 |
}
|
|
|
258 |
|
|
|
259 |
// fetch_user_ids filled from phorum_db_get_messages
|
|
|
260 |
if(isset($fetch_user_ids) && count($fetch_user_ids)){
|
|
|
261 |
$user_info=phorum_user_get($fetch_user_ids, false);
|
|
|
262 |
// hook to modify user info
|
|
|
263 |
$user_info = phorum_hook("read_user_info", $user_info);
|
|
|
264 |
}
|
|
|
265 |
|
|
|
266 |
// URLS which are common for the thread
|
|
|
267 |
if($PHORUM["DATA"]["MODERATOR"]) {
|
|
|
268 |
if($build_move_url) {
|
|
|
269 |
$URLS["move_url"] = phorum_get_url(PHORUM_MODERATION_URL, PHORUM_MOVE_THREAD, $thread);
|
|
|
270 |
}
|
|
|
271 |
$URLS["merge_url"] = phorum_get_url(PHORUM_MODERATION_URL, PHORUM_MERGE_THREAD, $thread);
|
|
|
272 |
$URLS["close_url"] = phorum_get_url(PHORUM_MODERATION_URL, PHORUM_CLOSE_THREAD, $thread);
|
|
|
273 |
$URLS["reopen_url"] = phorum_get_url(PHORUM_MODERATION_URL, PHORUM_REOPEN_THREAD, $thread);
|
|
|
274 |
}
|
|
|
275 |
|
|
|
276 |
|
|
|
277 |
|
|
|
278 |
|
|
|
279 |
// main loop for template setup
|
|
|
280 |
$read_messages=array(); // needed for newinfo
|
|
|
281 |
foreach($data as $key => $row) {
|
|
|
282 |
|
|
|
283 |
// should we remove the bodies in threaded view
|
|
|
284 |
if($remove_threaded_bodies) {
|
|
|
285 |
if ($row["message_id"] != $message_id) {
|
|
|
286 |
unset($row["body"]); // strip body
|
|
|
287 |
}
|
|
|
288 |
}
|
|
|
289 |
|
|
|
290 |
// assign user data to the row
|
|
|
291 |
if($row["user_id"] && isset($user_info[$row["user_id"]])){
|
|
|
292 |
$row["user"]=$user_info[$row["user_id"]];
|
|
|
293 |
unset($row["user"]["password"]);
|
|
|
294 |
unset($row["user"]["password_tmp"]);
|
|
|
295 |
}
|
|
|
296 |
if(!$PHORUM["threaded_read"] && $PHORUM["DATA"]["LOGGEDIN"] && $row['message_id'] > $PHORUM['user']['newinfo']['min_id'] && !isset($PHORUM['user']['newinfo'][$row['message_id']])) { // set this message as read
|
|
|
297 |
$read_messages[] = array("id"=>$row['message_id'],"forum"=>$row['forum_id']);
|
|
|
298 |
}
|
|
|
299 |
// is the message unapproved?
|
|
|
300 |
$row["is_unapproved"] = ($row['status'] < 0) ? 1 : 0;
|
|
|
301 |
|
|
|
302 |
// all stuff that makes only sense for moderators or admin
|
|
|
303 |
if($PHORUM["DATA"]["MODERATOR"]) {
|
|
|
304 |
|
|
|
305 |
$row["delete_url1"] = phorum_get_url(PHORUM_MODERATION_URL, PHORUM_DELETE_MESSAGE, $row["message_id"]);
|
|
|
306 |
$row["delete_url2"] = phorum_get_url(PHORUM_MODERATION_URL, PHORUM_DELETE_TREE, $row["message_id"]);
|
|
|
307 |
$row["edit_url"]=phorum_get_url(PHORUM_POSTING_URL, "moderation", $row["message_id"]);
|
|
|
308 |
$row["split_url"]=phorum_get_url(PHORUM_MODERATION_URL, PHORUM_SPLIT_THREAD, $row["message_id"]);
|
|
|
309 |
if($row['is_unapproved']) {
|
|
|
310 |
$row["approve_url"]=phorum_get_url(PHORUM_MODERATION_URL, PHORUM_APPROVE_MESSAGE, $row["message_id"]);
|
|
|
311 |
} else {
|
|
|
312 |
$row["hide_url"]=phorum_get_url(PHORUM_MODERATION_URL, PHORUM_HIDE_POST, $row["message_id"]);
|
|
|
313 |
}
|
|
|
314 |
if($build_move_url) {
|
|
|
315 |
$row["move_url"] = $URLS["move_url"];
|
|
|
316 |
}
|
|
|
317 |
$row["merge_url"] = $URLS["merge_url"];
|
|
|
318 |
$row["close_url"] = $URLS["close_url"];
|
|
|
319 |
$row["reopen_url"] = $URLS["reopen_url"];
|
|
|
320 |
}
|
|
|
321 |
|
|
|
322 |
// allow editing only if logged in, allowed for forum, the thread is open,
|
|
|
323 |
// its the same user, and its within the time restriction
|
|
|
324 |
if($PHORUM["user"]["user_id"]==$row["user_id"] && phorum_user_access_allowed(PHORUM_USER_ALLOW_EDIT) &&
|
|
|
325 |
!$thread_is_closed &&($PHORUM["user_edit_timelimit"] == 0 || $row["datestamp"] + ($PHORUM["user_edit_timelimit"] * 60) >= time())) {
|
|
|
326 |
$row["edit"]=1;
|
|
|
327 |
if($PHORUM["DATA"]["MODERATOR"]) {
|
|
|
328 |
$row["edituser_url"]=$row["edit_url"];
|
|
|
329 |
} else {
|
|
|
330 |
$row["edituser_url"]=phorum_get_url(PHORUM_POSTING_URL, "edit", $row["message_id"]);
|
|
|
331 |
}
|
|
|
332 |
}
|
|
|
333 |
|
|
|
334 |
// this stuff is used in threaded and non threaded.
|
|
|
335 |
$row["short_datestamp"] = phorum_date($PHORUM["short_date"], $row["datestamp"]);
|
|
|
336 |
$row["datestamp"] = phorum_date($PHORUM["long_date"], $row["datestamp"]);
|
|
|
337 |
$row["url"] = phorum_get_url(PHORUM_READ_URL, $row["thread"], $row["message_id"]);
|
|
|
338 |
$row["reply_url"] = phorum_get_url(PHORUM_REPLY_URL, $row["thread"], $row["message_id"]);
|
|
|
339 |
$row["quote_url"] = phorum_get_url(PHORUM_REPLY_URL, $row["thread"], $row["message_id"], "quote=1");
|
|
|
340 |
$row["report_url"] = phorum_get_url(PHORUM_REPORT_URL, $row["message_id"]);
|
|
|
341 |
$row["follow_url"] = phorum_get_url(PHORUM_FOLLOW_URL, $row["thread"]);
|
|
|
342 |
|
|
|
343 |
// can only send private replies if the author is a registered user
|
|
|
344 |
if ($PHORUM["enable_pm"] && $row["user_id"]) {
|
|
|
345 |
$row["private_reply_url"] = phorum_get_url(PHORUM_PM_URL, "page=send", "message_id=".$row["message_id"]);
|
|
|
346 |
} else {
|
|
|
347 |
$row["private_reply_url"] = false;
|
|
|
348 |
}
|
|
|
349 |
|
|
|
350 |
// check if its the first message in the thread
|
|
|
351 |
if($row["message_id"] == $row["thread"]) {
|
|
|
352 |
$row["threadstart"] = true;
|
|
|
353 |
} else{
|
|
|
354 |
$row["threadstart"] = false;
|
|
|
355 |
}
|
|
|
356 |
|
|
|
357 |
// should we show the signature?
|
|
|
358 |
if(isset($row['body'])) {
|
|
|
359 |
if(isset($row["user"]["signature"])
|
|
|
360 |
&& isset($row['meta']['show_signature']) && $row['meta']['show_signature']==1){
|
|
|
361 |
|
|
|
362 |
$phorum_sig=trim($row["user"]["signature"]);
|
|
|
363 |
if(!empty($phorum_sig)){
|
|
|
364 |
$row["body"].="\n\n$phorum_sig";
|
|
|
365 |
}
|
|
|
366 |
}
|
|
|
367 |
|
|
|
368 |
// add the edited-message to a post if its edited
|
|
|
369 |
if(isset($row['meta']['edit_count']) && $row['meta']['edit_count'] > 0) {
|
|
|
370 |
$editmessage = str_replace ("%count%", $row['meta']['edit_count'], $PHORUM["DATA"]["LANG"]["EditedMessage"]);
|
|
|
371 |
$editmessage = str_replace ("%lastedit%", phorum_date($PHORUM["short_date"],$row['meta']['edit_date']), $editmessage);
|
|
|
372 |
$editmessage = str_replace ("%lastuser%", $row['meta']['edit_username'], $editmessage);
|
|
|
373 |
$row["body"].="\n\n\n\n$editmessage";
|
|
|
374 |
}
|
|
|
375 |
}
|
|
|
376 |
|
|
|
377 |
|
|
|
378 |
if(!empty($row["user_id"])) {
|
|
|
379 |
$row["profile_url"] = phorum_get_url(PHORUM_PROFILE_URL, $row["user_id"]);
|
|
|
380 |
// we don't normally put HTML in this code, but this makes it easier on template builders
|
|
|
381 |
$row["linked_author"] = "<a href=\"".$row["profile_url"]."\">$row[author]</a>";
|
|
|
382 |
} elseif(!empty($row["email"])) {
|
|
|
383 |
$row["email_url"] = phorum_html_encode("mailto:$row[email]");
|
|
|
384 |
// we don't normally put HTML in this code, but this makes it easier on template builders
|
|
|
385 |
$row["linked_author"] = "<a href=\"".$row["email_url"]."\">".htmlspecialchars($row["author"])."</a>";
|
|
|
386 |
} else {
|
|
|
387 |
$row["linked_author"] = htmlspecialchars($row["author"]);
|
|
|
388 |
}
|
|
|
389 |
|
|
|
390 |
// mask host if not a moderator
|
|
|
391 |
if(empty($PHORUM["user"]["admin"]) && (empty($PHORUM["DATA"]["MODERATOR"]) || !PHORUM_MOD_IP_VIEW)){
|
|
|
392 |
if($PHORUM["display_ip_address"]){
|
|
|
393 |
if($row["moderator_post"]){
|
|
|
394 |
$row["ip"]=$PHORUM["DATA"]["LANG"]["Moderator"];
|
|
|
395 |
} elseif(is_numeric(str_replace(".", "", $row["ip"]))){
|
|
|
396 |
$row["ip"]=substr($row["ip"],0,strrpos($row["ip"],'.')).'.---';
|
|
|
397 |
} else {
|
|
|
398 |
$row["ip"]="---".strstr($row["ip"], ".");
|
|
|
399 |
}
|
|
|
400 |
|
|
|
401 |
} else {
|
|
|
402 |
$row["ip"]=$PHORUM["DATA"]["LANG"]["IPLogged"];
|
|
|
403 |
}
|
|
|
404 |
}
|
|
|
405 |
|
|
|
406 |
if($PHORUM["max_attachments"]>0 && isset($row["meta"]["attachments"])){
|
|
|
407 |
$PHORUM["DATA"]["ATTACHMENTS"]=true;
|
|
|
408 |
$row["attachments"]=$row["meta"]["attachments"];
|
|
|
409 |
// unset($row["meta"]["attachments"]);
|
|
|
410 |
foreach($row["attachments"] as $key=>$file){
|
|
|
411 |
$row["attachments"][$key]["size"]=phorum_filesize($file["size"]);
|
|
|
412 |
$row["attachments"][$key]["name"]=htmlentities($file['name'], ENT_COMPAT, $PHORUM["DATA"]["CHARSET"]); // clear all special chars from name to avoid XSS
|
|
|
413 |
$row["attachments"][$key]["url"]=phorum_get_url(PHORUM_FILE_URL, "file={$file['file_id']}");
|
|
|
414 |
}
|
|
|
415 |
}
|
|
|
416 |
|
|
|
417 |
// newflag, if its NOT in newinfo AND newer than min_id, then its a new message
|
|
|
418 |
$row["new"]="";
|
|
|
419 |
if ($PHORUM["DATA"]["LOGGEDIN"]){
|
|
|
420 |
if (!isset($PHORUM['user']['newinfo'][$row['message_id']]) && $row['message_id'] > $PHORUM['user']['newinfo']['min_id']) {
|
|
|
421 |
$row["new"]= $PHORUM["DATA"]["LANG"]["newflag"];
|
|
|
422 |
}
|
|
|
423 |
}
|
|
|
424 |
|
|
|
425 |
$messages[$row["message_id"]]=$row;
|
|
|
426 |
}
|
|
|
427 |
|
|
|
428 |
if($PHORUM["threaded_read"]) {
|
|
|
429 |
// don't move this up. We want it to be conditional.
|
|
|
430 |
include_once("./include/thread_sort.php");
|
|
|
431 |
|
|
|
432 |
// run read-threads mods
|
|
|
433 |
$messages = phorum_hook("readthreads", $messages);
|
|
|
434 |
|
|
|
435 |
$messages = phorum_sort_threads($messages);
|
|
|
436 |
|
|
|
437 |
if($PHORUM["DATA"]["LOGGEDIN"] && !isset($PHORUM['user']['newinfo'][$message_id]) && $message_id > $PHORUM['user']['newinfo']['min_id']) {
|
|
|
438 |
$read_messages[] = array("id"=>$message_id,"forum"=>$messages[$message_id]['forum_id']);
|
|
|
439 |
}
|
|
|
440 |
|
|
|
441 |
// we have to loop again and create the urls for the Next and Previous links.
|
|
|
442 |
foreach($messages as $key => $row) {
|
|
|
443 |
|
|
|
444 |
if($PHORUM["count_views"]) { // show viewcount if enabled
|
|
|
445 |
if($PHORUM["count_views"] == 2) { // viewcount as column
|
|
|
446 |
$PHORUM["DATA"]["VIEWCOUNT_COLUMN"]=true;
|
|
|
447 |
$messages[$key]["viewcount"]=$row['viewcount'];
|
|
|
448 |
} else { // viewcount added to the subject
|
|
|
449 |
$messages[$key]["subject"]=$row["subject"]." ({$row['viewcount']} {$PHORUM['DATA']['LANG']['Views']})";
|
|
|
450 |
}
|
|
|
451 |
}
|
|
|
452 |
|
|
|
453 |
|
|
|
454 |
$messages[$key]["next_url"] = $PHORUM["DATA"]["URL"]["NEWERTHREAD"];
|
|
|
455 |
if(empty($last_key)) {
|
|
|
456 |
$messages[$key]["prev_url"] = $PHORUM["DATA"]["URL"]["OLDERTHREAD"];
|
|
|
457 |
} else{
|
|
|
458 |
$messages[$key]["prev_url"] = phorum_get_url(PHORUM_READ_URL, $row["thread"], $last_key);
|
|
|
459 |
$messages[$last_key]["next_url"] = phorum_get_url(PHORUM_READ_URL, $row["thread"], $row["message_id"]);
|
|
|
460 |
}
|
|
|
461 |
|
|
|
462 |
$last_key = $key;
|
|
|
463 |
}
|
|
|
464 |
}
|
|
|
465 |
|
|
|
466 |
// run read mods
|
|
|
467 |
$messages = phorum_hook("read", $messages);
|
|
|
468 |
|
|
|
469 |
// increment viewcount if enabled
|
|
|
470 |
if($PHORUM['count_views']) {
|
|
|
471 |
phorum_db_viewcount_inc($message_id);
|
|
|
472 |
}
|
|
|
473 |
|
|
|
474 |
// format messages
|
|
|
475 |
$messages = phorum_format_messages($messages);
|
|
|
476 |
|
|
|
477 |
// set up the data
|
|
|
478 |
$PHORUM["DATA"]["MESSAGE"] = $messages[$message_id];
|
|
|
479 |
|
|
|
480 |
// we need to remove the thread-starter from the data if we are not on the first page
|
|
|
481 |
$threadsubject = $messages[$thread]["subject"];
|
|
|
482 |
if($page > 1)
|
|
|
483 |
unset($messages[$thread]);
|
|
|
484 |
|
|
|
485 |
$PHORUM["DATA"]["MESSAGES"] = $messages;
|
|
|
486 |
|
|
|
487 |
|
|
|
488 |
// alter the HTML_TITLE
|
|
|
489 |
if(!empty($PHORUM["DATA"]["HTML_TITLE"])){
|
|
|
490 |
$PHORUM["DATA"]["HTML_TITLE"].=htmlentities(PHORUM_SEPARATOR, ENT_COMPAT, $PHORUM["DATA"]["CHARSET"] );;
|
|
|
491 |
}
|
|
|
492 |
// No htmlentities() needed. The subject is already escaped.
|
|
|
493 |
// Strip HTML tags from the HTML title. There might be HTML in
|
|
|
494 |
// here, because of modules adding images and formatting.
|
|
|
495 |
$PHORUM["DATA"]["HTML_TITLE"] .= trim(strip_tags($PHORUM["threaded_read"] ? $PHORUM["DATA"]["MESSAGE"]["subject"] : $threadsubject));
|
|
|
496 |
|
|
|
497 |
// include the correct template
|
|
|
498 |
|
|
|
499 |
include phorum_get_template("header");
|
|
|
500 |
phorum_hook("after_header");
|
|
|
501 |
|
|
|
502 |
if($PHORUM["threaded_read"]) {
|
|
|
503 |
include phorum_get_template("read_threads");
|
|
|
504 |
} else{
|
|
|
505 |
include phorum_get_template("read");
|
|
|
506 |
}
|
|
|
507 |
if($PHORUM["DATA"]["LOGGEDIN"]) { // setting read messages really read
|
|
|
508 |
phorum_db_newflag_add_read($read_messages);
|
|
|
509 |
}
|
|
|
510 |
|
|
|
511 |
// An anchor so clicking on a reply button can let the browser
|
|
|
512 |
// jump to the editor or the closed thread message.
|
|
|
513 |
if(isset($PHORUM["reply_on_read_page"]) && $PHORUM["reply_on_read_page"]) {
|
|
|
514 |
print '<a name="REPLY"></a>';
|
|
|
515 |
}
|
|
|
516 |
|
|
|
517 |
// Never show the reply box if the message is closed.
|
|
|
518 |
if($thread_is_closed) {
|
|
|
519 |
|
|
|
520 |
// Closed announcements have their own specific message.
|
|
|
521 |
$key = $thread_is_announcement ? "ThreadAnnouncement" : "ThreadClosed";
|
|
|
522 |
$PHORUM["DATA"]["MESSAGE"]=$PHORUM["DATA"]["LANG"][$key];
|
|
|
523 |
include phorum_get_template("message");
|
|
|
524 |
|
|
|
525 |
} elseif (isset($PHORUM["reply_on_read_page"]) && $PHORUM["reply_on_read_page"]) {
|
|
|
526 |
|
|
|
527 |
// Prepare the arguments for the posting.php script.
|
|
|
528 |
$goto_mode = "reply";
|
|
|
529 |
if (isset($PHORUM["args"]["quote"]) && $PHORUM["args"]["quote"]) {
|
|
|
530 |
$goto_mode = "quote";
|
|
|
531 |
}
|
|
|
532 |
|
|
|
533 |
$PHORUM["postingargs"] = array(
|
|
|
534 |
1 => $goto_mode,
|
|
|
535 |
2 => $message_id,
|
|
|
536 |
"as_include" => true
|
|
|
537 |
);
|
|
|
538 |
|
|
|
539 |
include("./posting.php");
|
|
|
540 |
}
|
|
|
541 |
|
|
|
542 |
phorum_hook("before_footer");
|
|
|
543 |
include phorum_get_template("footer");
|
|
|
544 |
|
|
|
545 |
|
|
|
546 |
} elseif($toforum=phorum_check_moved_message($thread)) { // is it a moved thread?
|
|
|
547 |
|
|
|
548 |
$PHORUM["DATA"]["MESSAGE"]=$PHORUM["DATA"]["LANG"]["MovedMessage"];
|
|
|
549 |
$PHORUM['DATA']["URL"]["REDIRECT"]=phorum_get_url(PHORUM_FOREIGN_READ_URL, $toforum, $thread);
|
|
|
550 |
$PHORUM['DATA']["BACKMSG"]=$PHORUM["DATA"]["LANG"]["MovedMessageTo"];
|
|
|
551 |
|
|
|
552 |
$PHORUM["DATA"]["HTML_TITLE"] = htmlentities( $PHORUM["DATA"]["HTML_TITLE"], ENT_COMPAT, $PHORUM["DATA"]["CHARSET"] );
|
|
|
553 |
// have to include the header here for the Redirect
|
|
|
554 |
include phorum_get_template("header");
|
|
|
555 |
phorum_hook("after_header");
|
|
|
556 |
include phorum_get_template("message");
|
|
|
557 |
phorum_hook("before_footer");
|
|
|
558 |
include phorum_get_template("footer");
|
|
|
559 |
|
|
|
560 |
} else { // message not found
|
|
|
561 |
$PHORUM["DATA"]["ERROR"]=$PHORUM["DATA"]["LANG"]["MessageNotFound"];
|
|
|
562 |
$PHORUM['DATA']["URL"]["REDIRECT"]=$PHORUM["DATA"]["URL"]["TOP"];
|
|
|
563 |
$PHORUM['DATA']["BACKMSG"]=$PHORUM["DATA"]["LANG"]["BackToList"];
|
|
|
564 |
|
|
|
565 |
$PHORUM["DATA"]["HTML_TITLE"] = htmlentities( $PHORUM["DATA"]["HTML_TITLE"], ENT_COMPAT, $PHORUM["DATA"]["CHARSET"] );
|
|
|
566 |
// have to include the header here for the Redirect
|
|
|
567 |
include phorum_get_template("header");
|
|
|
568 |
phorum_hook("after_header");
|
|
|
569 |
include phorum_get_template("message");
|
|
|
570 |
phorum_hook("before_footer");
|
|
|
571 |
include phorum_get_template("footer");
|
|
|
572 |
}
|
|
|
573 |
|
|
|
574 |
// find out if the given thread has been moved to another forum
|
|
|
575 |
function phorum_check_moved_message($thread) {
|
|
|
576 |
$forum_id=$GLOBALS['PHORUM']['forum_id'];
|
|
|
577 |
$message=phorum_db_get_message($thread,'message_id',true);
|
|
|
578 |
|
|
|
579 |
if(!empty($message) && $message['forum_id'] != $forum_id) {
|
|
|
580 |
$ret=$message['forum_id'];
|
|
|
581 |
} else {
|
|
|
582 |
$ret=false;
|
|
|
583 |
}
|
|
|
584 |
return $ret;
|
|
|
585 |
}
|
|
|
586 |
|
|
|
587 |
?>
|