(file) Return to functions_post.php CVS log (file) (dir) Up to [RizwankCVS] / geekymedia_web / phpBB2 / includes

  1 rizwank 1.1 <?php
  2             /***************************************************************************
  3              *                            functions_post.php
  4              *                            -------------------
  5              *   begin                : Saturday, Feb 13, 2001
  6              *   copyright            : (C) 2001 The phpBB Group
  7              *   email                : support@phpbb.com
  8              *
  9              *   $Id: functions_post.php,v 1.9.2.25 2003/01/13 22:03:24 psotfx Exp $
 10              *
 11              *
 12              ***************************************************************************/
 13             
 14             /***************************************************************************
 15              *
 16              *   This program is free software; you can redistribute it and/or modify
 17              *   it under the terms of the GNU General Public License as published by
 18              *   the Free Software Foundation; either version 2 of the License, or
 19              *   (at your option) any later version.
 20              *
 21              ***************************************************************************/
 22 rizwank 1.1 
 23             if (!defined('IN_PHPBB'))
 24             {
 25             	die('Hacking attempt');
 26             }
 27             
 28             $html_entities_match = array('#&[a-z]+?;#', '#<#', '#>#');
 29             $html_entities_replace = array('&amp;', '&lt;', '&gt;');
 30             
 31             $unhtml_specialchars_match = array('#&gt;#', '#&lt;#', '#&quot;#', '#&amp;#');
 32             $unhtml_specialchars_replace = array('>', '<', '"', '&');
 33             
 34             //
 35             // This function will prepare a posted message for
 36             // entry into the database.
 37             //
 38             function prepare_message($message, $html_on, $bbcode_on, $smile_on, $bbcode_uid = 0)
 39             {
 40             	global $board_config, $html_entities_match, $html_entities_replace;
 41             
 42             	//
 43 rizwank 1.1 	// Clean up the message
 44             	//
 45             	$message = trim($message);
 46             
 47             	if ($html_on)
 48             	{
 49             		$allowed_html_tags = split(',', $board_config['allow_html_tags']);
 50             
 51             		$end_html = 0;
 52             		$start_html = 1;
 53             		$tmp_message = '';
 54             		$message = ' ' . $message . ' ';
 55             
 56             		while ($start_html = strpos($message, '<', $start_html))
 57             		{
 58             			$tmp_message .= preg_replace($html_entities_match, $html_entities_replace, substr($message, $end_html + 1, ($start_html - $end_html - 1)));
 59             
 60             			if ($end_html = strpos($message, '>', $start_html))
 61             			{
 62             				$length = $end_html - $start_html + 1;
 63             				$hold_string = substr($message, $start_html, $length);
 64 rizwank 1.1 
 65             				if (($unclosed_open = strrpos(' ' . $hold_string, '<')) != 1)
 66             				{
 67             					$tmp_message .= preg_replace($html_entities_match, $html_entities_replace, substr($hold_string, 0, $unclosed_open - 1));
 68             					$hold_string = substr($hold_string, $unclosed_open - 1);
 69             				}
 70             
 71             				$tagallowed = false;
 72             				for ($i = 0; $i < sizeof($allowed_html_tags); $i++)
 73             				{
 74             					$match_tag = trim($allowed_html_tags[$i]);
 75             					if (preg_match('#^<\/?' . $match_tag . '(?!(.*?)((style)|( on[\w]+?[\s]?=))[\s]*?)#i', $hold_string))
 76             					{
 77             						$tagallowed = true;
 78             					}
 79             				}
 80             
 81             				$tmp_message .= ($length && !$tagallowed) ? preg_replace($html_entities_match, $html_entities_replace, $hold_string) : $hold_string;
 82             
 83             				$start_html += $length;
 84             			}
 85 rizwank 1.1 			else
 86             			{
 87             				$tmp_message .= preg_replace($html_entities_match, $html_entities_replace, substr($message, $start_html, strlen($message)));
 88             
 89             				$start_html = strlen($message);
 90             				$end_html = $start_html;
 91             			}
 92             		}
 93             
 94             		if ($end_html != strlen($message) && $tmp_message != '')
 95             		{
 96             			$tmp_message .= preg_replace($html_entities_match, $html_entities_replace, substr($message, $end_html + 1));
 97             		}
 98             
 99             		$message = ($tmp_message != '') ? trim($tmp_message) : trim($message);
100             	}
101             	else
102             	{
103             		$message = preg_replace($html_entities_match, $html_entities_replace, $message);
104             	}
105             
106 rizwank 1.1 	if($bbcode_on && $bbcode_uid != '')
107             	{
108             		$message = bbencode_first_pass($message, $bbcode_uid);
109             	}
110             
111             	return $message;
112             }
113             
114             function unprepare_message($message)
115             {
116             	global $unhtml_specialchars_match, $unhtml_specialchars_replace;
117             
118             	return preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, $message);
119             }
120             
121             //
122             // Prepare a message for posting
123             // 
124             function prepare_post(&$mode, &$post_data, &$bbcode_on, &$html_on, &$smilies_on, &$error_msg, &$username, &$bbcode_uid, &$subject, &$message, &$poll_title, &$poll_options, &$poll_length)
125             {
126             	global $board_config, $userdata, $lang, $phpEx, $phpbb_root_path;
127 rizwank 1.1 
128             	// Check username
129             	if (!empty($username))
130             	{
131             		$username = trim(strip_tags($username));
132             
133             		if (!$userdata['session_logged_in'] || ($userdata['session_logged_in'] && $username != $userdata['username']))
134             		{
135             			include($phpbb_root_path . 'includes/functions_validate.'.$phpEx);
136             
137             			$result = validate_username($username);
138             			if ($result['error'])
139             			{
140             				$error_msg .= (!empty($error_msg)) ? '<br />' . $result['error_msg'] : $result['error_msg'];
141             			}
142             		}
143             		else
144             		{
145             			$username = '';
146             		}
147             	}
148 rizwank 1.1 
149             	// Check subject
150             	if (!empty($subject))
151             	{
152             		$subject = htmlspecialchars(trim($subject));
153             	}
154             	else if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post']))
155             	{
156             		$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_subject'] : $lang['Empty_subject'];
157             	}
158             
159             	// Check message
160             	if (!empty($message))
161             	{
162             		$bbcode_uid = ($bbcode_on) ? make_bbcode_uid() : '';
163             		$message = prepare_message(trim($message), $html_on, $bbcode_on, $smilies_on, $bbcode_uid);
164             	}
165             	else if ($mode != 'delete' && $mode != 'poll_delete') 
166             	{
167             		$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_message'] : $lang['Empty_message'];
168             	}
169 rizwank 1.1 
170             	//
171             	// Handle poll stuff
172             	//
173             	if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post']))
174             	{
175             		$poll_length = (isset($poll_length)) ? max(0, intval($poll_length)) : 0;
176             
177             		if (!empty($poll_title))
178             		{
179             			$poll_title = htmlspecialchars(trim($poll_title));
180             		}
181             
182             		if(!empty($poll_options))
183             		{
184             			$temp_option_text = array();
185             			while(list($option_id, $option_text) = @each($poll_options))
186             			{
187             				$option_text = trim($option_text);
188             				if (!empty($option_text))
189             				{
190 rizwank 1.1 					$temp_option_text[$option_id] = htmlspecialchars($option_text);
191             				}
192             			}
193             			$option_text = $temp_option_text;
194             
195             			if (count($poll_options) < 2)
196             			{
197             				$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['To_few_poll_options'] : $lang['To_few_poll_options'];
198             			}
199             			else if (count($poll_options) > $board_config['max_poll_options']) 
200             			{
201             				$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['To_many_poll_options'] : $lang['To_many_poll_options'];
202             			}
203             			else if ($poll_title == '')
204             			{
205             				$error_msg .= (!empty($error_msg)) ? '<br />' . $lang['Empty_poll_title'] : $lang['Empty_poll_title'];
206             			}
207             		}
208             	}
209             
210             	return;
211 rizwank 1.1 }
212             
213             //
214             // Post a new topic/reply/poll or edit existing post/poll
215             //
216             function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id, &$topic_type, &$bbcode_on, &$html_on, &$smilies_on, &$attach_sig, &$bbcode_uid, &$post_username, &$post_subject, &$post_message, &$poll_title, &$poll_options, &$poll_length)
217             {
218             	global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
219             	global $userdata, $user_ip;
220             
221             	include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
222             
223             	$current_time = time();
224             
225             	if ($mode == 'newtopic' || $mode == 'reply') 
226             	{
227             		//
228             		// Flood control
229             		//
230             		$where_sql = ($userdata['user_id'] == ANONYMOUS) ? "poster_ip = '$user_ip'" : 'poster_id = ' . $userdata['user_id'];
231             		$sql = "SELECT MAX(post_time) AS last_post_time
232 rizwank 1.1 			FROM " . POSTS_TABLE . "
233             			WHERE $where_sql";
234             		if ($result = $db->sql_query($sql))
235             		{
236             			if ($row = $db->sql_fetchrow($result))
237             			{
238             				if (intval($row['last_post_time']) > 0 && ($current_time - intval($row['last_post_time'])) < intval($board_config['flood_interval']))
239             				{
240             					message_die(GENERAL_MESSAGE, $lang['Flood_Error']);
241             				}
242             			}
243             		}
244             	}
245             	else if ($mode == 'editpost')
246             	{
247             		remove_search_post($post_id);
248             	}
249             
250             	if ($mode == 'newtopic' || ($mode == 'editpost' && $post_data['first_post']))
251             	{
252             		$topic_vote = (!empty($poll_title) && count($poll_options) >= 2) ? 1 : 0;
253 rizwank 1.1 		$sql  = ($mode != "editpost") ? "INSERT INTO " . TOPICS_TABLE . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_vote) VALUES ('$post_subject', " . $userdata['user_id'] . ", $current_time, $forum_id, " . TOPIC_UNLOCKED . ", $topic_type, $topic_vote)" : "UPDATE " . TOPICS_TABLE . " SET topic_title = '$post_subject', topic_type = $topic_type, topic_vote = $topic_vote WHERE topic_id = $topic_id";
254             		if (!$db->sql_query($sql))
255             		{
256             			message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
257             		}
258             
259             		if ($mode == 'newtopic')
260             		{
261             			$topic_id = $db->sql_nextid();
262             		}
263             	}
264             
265             	$edited_sql = ($mode == 'editpost' && !$post_data['last_post'] && $post_data['poster_post']) ? ", post_edit_time = $current_time, post_edit_count = post_edit_count + 1 " : "";
266             	$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig" . $edited_sql . " WHERE post_id = $post_id";
267             	if (!$db->sql_query($sql, BEGIN_TRANSACTION))
268             	{
269             		message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
270             	}
271             
272             	if ($mode != 'editpost')
273             	{
274 rizwank 1.1 		$post_id = $db->sql_nextid();
275             	}
276             
277             	$sql = ($mode != 'editpost') ? "INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, post_subject, bbcode_uid, post_text) VALUES ($post_id, '$post_subject', '$bbcode_uid', '$post_message')" : "UPDATE " . POSTS_TEXT_TABLE . " SET post_text = '$post_message',  bbcode_uid = '$bbcode_uid', post_subject = '$post_subject' WHERE post_id = $post_id";
278             	if (!$db->sql_query($sql))
279             	{
280             		message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
281             	}
282             
283             	add_search_words('single', $post_id, stripslashes($post_message), stripslashes($post_subject));
284             
285             	//
286             	// Add poll
287             	// 
288             	if (($mode == 'newtopic' || ($mode == 'editpost' && $post_data['edit_poll'])) && !empty($poll_title) && count($poll_options) >= 2)
289             	{
290             		$sql = (!$post_data['has_poll']) ? "INSERT INTO " . VOTE_DESC_TABLE . " (topic_id, vote_text, vote_start, vote_length) VALUES ($topic_id, '$poll_title', $current_time, " . ($poll_length * 86400) . ")" : "UPDATE " . VOTE_DESC_TABLE . " SET vote_text = '$poll_title', vote_length = " . ($poll_length * 86400) . " WHERE topic_id = $topic_id";
291             		if (!$db->sql_query($sql))
292             		{
293             			message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
294             		}
295 rizwank 1.1 
296             		$delete_option_sql = '';
297             		$old_poll_result = array();
298             		if ($mode == 'editpost' && $post_data['has_poll'])
299             		{
300             			$sql = "SELECT vote_option_id, vote_result  
301             				FROM " . VOTE_RESULTS_TABLE . " 
302             				WHERE vote_id = $poll_id 
303             				ORDER BY vote_option_id ASC";
304             			if (!($result = $db->sql_query($sql)))
305             			{
306             				message_die(GENERAL_ERROR, 'Could not obtain vote data results for this topic', '', __LINE__, __FILE__, $sql);
307             			}
308             
309             			while ($row = $db->sql_fetchrow($result))
310             			{
311             				$old_poll_result[$row['vote_option_id']] = $row['vote_result'];
312             
313             				if (!isset($poll_options[$row['vote_option_id']]))
314             				{
315             					$delete_option_sql .= ($delete_option_sql != '') ? ', ' . $row['vote_option_id'] : $row['vote_option_id'];
316 rizwank 1.1 				}
317             			}
318             		}
319             		else
320             		{
321             			$poll_id = $db->sql_nextid();
322             		}
323             
324             		@reset($poll_options);
325             
326             		$poll_option_id = 1;
327             		while (list($option_id, $option_text) = each($poll_options))
328             		{
329             			if (!empty($option_text))
330             			{
331             				$option_text = str_replace("\'", "''", htmlspecialchars($option_text));
332             				$poll_result = ($mode == "editpost" && isset($old_poll_result[$option_id])) ? $old_poll_result[$option_id] : 0;
333             
334             				$sql = ($mode != "editpost" || !isset($old_poll_result[$option_id])) ? "INSERT INTO " . VOTE_RESULTS_TABLE . " (vote_id, vote_option_id, vote_option_text, vote_result) VALUES ($poll_id, $poll_option_id, '$option_text', $poll_result)" : "UPDATE " . VOTE_RESULTS_TABLE . " SET vote_option_text = '$option_text', vote_result = $poll_result WHERE vote_option_id = $option_id AND vote_id = $poll_id";
335             				if (!$db->sql_query($sql))
336             				{
337 rizwank 1.1 					message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
338             				}
339             				$poll_option_id++;
340             			}
341             		}
342             
343             		if ($delete_option_sql != '')
344             		{
345             			$sql = "DELETE FROM " . VOTE_RESULTS_TABLE . " 
346             				WHERE vote_option_id IN ($delete_option_sql) 
347             					AND vote_id = $poll_id";
348             			if (!$db->sql_query($sql))
349             			{
350             				message_die(GENERAL_ERROR, 'Error deleting pruned poll options', '', __LINE__, __FILE__, $sql);
351             			}
352             		}
353             	}
354             
355             	$meta = '<meta http-equiv="refresh" content="3;url=' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $post_id) . '#' . $post_id . '">';
356             	$message = $lang['Stored'] . '<br /><br />' . sprintf($lang['Click_view_message'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_POST_URL . "=" . $post_id) . '#' . $post_id . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_forum'], '<a href="' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id") . '">', '</a>');
357             
358 rizwank 1.1 	return false;
359             }
360             
361             //
362             // Update post stats and details
363             //
364             function update_post_stats(&$mode, &$post_data, &$forum_id, &$topic_id, &$post_id, &$user_id)
365             {
366             	global $db;
367             
368             	$sign = ($mode == 'delete') ? '- 1' : '+ 1';
369             	$forum_update_sql = "forum_posts = forum_posts $sign";
370             	$topic_update_sql = '';
371             
372             	if ($mode == 'delete')
373             	{
374             		if ($post_data['last_post'])
375             		{
376             			if ($post_data['first_post'])
377             			{
378             				$forum_update_sql .= ', forum_topics = forum_topics - 1';
379 rizwank 1.1 			}
380             			else
381             			{
382             
383             				$topic_update_sql .= 'topic_replies = topic_replies - 1';
384             
385             				$sql = "SELECT MAX(post_id) AS last_post_id
386             					FROM " . POSTS_TABLE . " 
387             					WHERE topic_id = $topic_id";
388             				if (!($result = $db->sql_query($sql)))
389             				{
390             					message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
391             				}
392             
393             				if ($row = $db->sql_fetchrow($result))
394             				{
395             					$topic_update_sql .= ', topic_last_post_id = ' . $row['last_post_id'];
396             				}
397             			}
398             
399             			if ($post_data['last_topic'])
400 rizwank 1.1 			{
401             				$sql = "SELECT MAX(post_id) AS last_post_id
402             					FROM " . POSTS_TABLE . " 
403             					WHERE forum_id = $forum_id"; 
404             				if (!($result = $db->sql_query($sql)))
405             				{
406             					message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
407             				}
408             
409             				if ($row = $db->sql_fetchrow($result))
410             				{
411             					$forum_update_sql .= ($row['last_post_id']) ? ', forum_last_post_id = ' . $row['last_post_id'] : ', forum_last_post_id = 0';
412             				}
413             			}
414             		}
415             		else if ($post_data['first_post']) 
416             		{
417             			$sql = "SELECT MIN(post_id) AS first_post_id
418             				FROM " . POSTS_TABLE . " 
419             				WHERE topic_id = $topic_id";
420             			if (!($result = $db->sql_query($sql)))
421 rizwank 1.1 			{
422             				message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
423             			}
424             
425             			if ($row = $db->sql_fetchrow($result))
426             			{
427             				$topic_update_sql .= 'topic_replies = topic_replies - 1, topic_first_post_id = ' . $row['first_post_id'];
428             			}
429             		}
430             		else
431             		{
432             			$topic_update_sql .= 'topic_replies = topic_replies - 1';
433             		}
434             	}
435             	else if ($mode != 'poll_delete')
436             	{
437             		$forum_update_sql .= ", forum_last_post_id = $post_id" . (($mode == 'newtopic') ? ", forum_topics = forum_topics $sign" : ""); 
438             		$topic_update_sql = "topic_last_post_id = $post_id" . (($mode == 'reply') ? ", topic_replies = topic_replies $sign" : ", topic_first_post_id = $post_id");
439             	}
440             	else 
441             	{
442 rizwank 1.1 		$topic_update_sql .= 'topic_vote = 0';
443             	}
444             
445             	$sql = "UPDATE " . FORUMS_TABLE . " SET 
446             		$forum_update_sql 
447             		WHERE forum_id = $forum_id";
448             	if (!$db->sql_query($sql))
449             	{
450             		message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
451             	}
452             
453             	if ($topic_update_sql != '')
454             	{
455             		$sql = "UPDATE " . TOPICS_TABLE . " SET 
456             			$topic_update_sql 
457             			WHERE topic_id = $topic_id";
458             		if (!$db->sql_query($sql))
459             		{
460             			message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
461             		}
462             	}
463 rizwank 1.1 
464             	if ($mode != 'poll_delete')
465             	{
466             		$sql = "UPDATE " . USERS_TABLE . "
467             			SET user_posts = user_posts $sign 
468             			WHERE user_id = $user_id";
469             		if (!$db->sql_query($sql, END_TRANSACTION))
470             		{
471             			message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
472             		}
473             	}
474             
475             	return;
476             }
477             
478             //
479             // Delete a post/poll
480             //
481             function delete_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id)
482             {
483             	global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
484 rizwank 1.1 	global $userdata, $user_ip;
485             
486             	if ($mode != 'poll_delete')
487             	{
488             		include($phpbb_root_path . 'includes/functions_search.'.$phpEx);
489             
490             		$sql = "DELETE FROM " . POSTS_TABLE . " 
491             			WHERE post_id = $post_id";
492             		if (!$db->sql_query($sql))
493             		{
494             			message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
495             		}
496             
497             		$sql = "DELETE FROM " . POSTS_TEXT_TABLE . " 
498             			WHERE post_id = $post_id";
499             		if (!$db->sql_query($sql))
500             		{
501             			message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
502             		}
503             
504             		if ($post_data['last_post'])
505 rizwank 1.1 		{
506             			if ($post_data['first_post'])
507             			{
508             				$forum_update_sql .= ', forum_topics = forum_topics - 1';
509             				$sql = "DELETE FROM " . TOPICS_TABLE . " 
510             					WHERE topic_id = $topic_id 
511             						OR topic_moved_id = $topic_id";
512             				if (!$db->sql_query($sql))
513             				{
514             					message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
515             				}
516             
517             				$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . "
518             					WHERE topic_id = $topic_id";
519             				if (!$db->sql_query($sql))
520             				{
521             					message_die(GENERAL_ERROR, 'Error in deleting post', '', __LINE__, __FILE__, $sql);
522             				}
523             			}
524             		}
525             
526 rizwank 1.1 		remove_search_post($post_id);
527             	}
528             
529             	if ($mode == 'poll_delete' || ($mode == 'delete' && $post_data['first_post'] && $post_data['last_post']) && $post_data['has_poll'] && $post_data['edit_poll'])
530             	{
531             		$sql = "DELETE FROM " . VOTE_DESC_TABLE . " 
532             			WHERE topic_id = $topic_id";
533             		if (!$db->sql_query($sql))
534             		{
535             			message_die(GENERAL_ERROR, 'Error in deleting poll', '', __LINE__, __FILE__, $sql);
536             		}
537             
538             		$sql = "DELETE FROM " . VOTE_RESULTS_TABLE . " 
539             			WHERE vote_id = $poll_id";
540             		if (!$db->sql_query($sql))
541             		{
542             			message_die(GENERAL_ERROR, 'Error in deleting poll', '', __LINE__, __FILE__, $sql);
543             		}
544             
545             		$sql = "DELETE FROM " . VOTE_USERS_TABLE . " 
546             			WHERE vote_id = $poll_id";
547 rizwank 1.1 		if (!$db->sql_query($sql))
548             		{
549             			message_die(GENERAL_ERROR, 'Error in deleting poll', '', __LINE__, __FILE__, $sql);
550             		}
551             	}
552             
553             	if ($mode == 'delete' && $post_data['first_post'] && $post_data['last_post'])
554             	{
555             		$meta = '<meta http-equiv="refresh" content="3;url=' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . '=' . $forum_id) . '">';
556             		$message = $lang['Deleted'];
557             	}
558             	else
559             	{
560             		$meta = '<meta http-equiv="refresh" content="3;url=' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . '=' . $topic_id) . '">';
561             		$message = (($mode == 'poll_delete') ? $lang['Poll_delete'] : $lang['Deleted']) . '<br /><br />' . sprintf($lang['Click_return_topic'], '<a href="' . append_sid("viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id") . '">', '</a>');
562             	}
563             
564             	$message .=  '<br /><br />' . sprintf($lang['Click_return_forum'], '<a href="' . append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id") . '">', '</a>');
565             
566             	return;
567             }
568 rizwank 1.1 
569             //
570             // Handle user notification on new post
571             //
572             function user_notification($mode, &$post_data, &$topic_title, &$forum_id, &$topic_id, &$post_id, &$notify_user)
573             {
574             	global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
575             	global $userdata, $user_ip;
576             
577             	$current_time = time();
578             
579             	if ($mode == 'delete')
580             	{
581             		$delete_sql = (!$post_data['first_post'] && !$post_data['last_post']) ? " AND user_id = " . $userdata['user_id'] : '';
582             		$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . " WHERE topic_id = $topic_id" . $delete_sql;
583             		if (!$db->sql_query($sql))
584             		{
585             			message_die(GENERAL_ERROR, 'Could not change topic notify data', '', __LINE__, __FILE__, $sql);
586             		}
587             	}
588             	else 
589 rizwank 1.1 	{
590             		if ($mode == 'reply')
591             		{
592             			$sql = "SELECT ban_userid 
593             				FROM " . BANLIST_TABLE;
594             			if (!($result = $db->sql_query($sql)))
595             			{
596             				message_die(GENERAL_ERROR, 'Could not obtain banlist', '', __LINE__, __FILE__, $sql);
597             			}
598             
599             			$user_id_sql = '';
600             			while ($row = $db->sql_fetchrow($result))
601             			{
602             				if (isset($row['ban_userid']))
603             				{
604             					$user_id_sql = ', ' . $row['ban_userid'];
605             				}
606             			}
607             
608             			$sql = "SELECT u.user_id, u.user_email, u.user_lang 
609             				FROM " . TOPICS_WATCH_TABLE . " tw, " . USERS_TABLE . " u 
610 rizwank 1.1 				WHERE tw.topic_id = $topic_id 
611             					AND tw.user_id NOT IN (" . $userdata['user_id'] . ", " . ANONYMOUS . $user_id_sql . ") 
612             					AND tw.notify_status = " . TOPIC_WATCH_UN_NOTIFIED . " 
613             					AND u.user_id = tw.user_id";
614             			if (!($result = $db->sql_query($sql)))
615             			{
616             				message_die(GENERAL_ERROR, 'Could not obtain list of topic watchers', '', __LINE__, __FILE__, $sql);
617             			}
618             
619             			$update_watched_sql = '';
620             			$bcc_list_ary = array();
621             			if ($row = $db->sql_fetchrow($result))
622             			{
623             				// Sixty second limit
624             				@set_time_limit(60);
625             
626             				do
627             				{
628             					if ($row['user_email'] != '')
629             					{
630             						$bcc_list_ary[$row['user_lang']] .= (($bcc_list_ary[$row['user_lang']] != '') ? ', ' : '') . $row['user_email'];
631 rizwank 1.1 					}
632             					$update_watched_sql .= ($update_watched_sql != '') ? ', ' . $row['user_id'] : $row['user_id'];
633             				}
634             				while ($row = $db->sql_fetchrow($result));
635             
636             				//
637             				// Let's do some checking to make sure that mass mail functions
638             				// are working in win32 versions of php.
639             				//
640             				if (preg_match('/[c-z]:\\\.*/i', getenv('PATH')) && !$board_config['smtp_delivery'])
641             				{
642             					$ini_val = (@phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var';
643             
644             					// We are running on windows, force delivery to use our smtp functions
645             					// since php's are broken by default
646             					$board_config['smtp_delivery'] = 1;
647             					$board_config['smtp_host'] = @$ini_val('SMTP');
648             				}
649             
650             				if (sizeof($bcc_list_ary))
651             				{
652 rizwank 1.1 					include($phpbb_root_path . 'includes/emailer.'.$phpEx);
653             					$emailer = new emailer($board_config['smtp_delivery']);
654             
655             					$orig_word = array();
656             					$replacement_word = array();
657             					obtain_word_list($orig_word, $replacement_word);
658             
659             					$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));
660             					$script_name = ($script_name != '') ? $script_name . '/viewtopic.'.$phpEx : 'viewtopic.'.$phpEx;
661             					$server_name = trim($board_config['server_name']);
662             					$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
663             					$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/';
664             
665             					$email_headers = 'From: ' . $board_config['board_email'] . "\nReturn-Path: " . $board_config['board_email'] . "\n";
666             
667             					$topic_title = (count($orig_word)) ? preg_replace($orig_word, $replacement_word, unprepare_message($topic_title)) : unprepare_message($topic_title);
668             
669             					while (list($user_lang, $bcc_list) = each($bcc_list_ary))
670             					{
671             						$emailer->use_template('topic_notify', $user_lang);
672             						$emailer->email_address(' ');
673 rizwank 1.1 						// The Topic_reply_notification lang string below will be used
674             						// if for some reason the mail template subject cannot be read 
675             						// ... note it will not necessarily be in the posters own language!
676             						$emailer->set_subject($lang['Topic_reply_notification']); 
677             						
678             						$emailer->extra_headers($email_headers . "Bcc: $bcc_list\n");
679             
680             						// This is a nasty kludge to remove the username var ... till (if?)
681             						// translators update their templates
682             						$emailer->msg = preg_replace('#[ ]?{USERNAME}#', '', $emailer->msg);
683             
684             						$emailer->assign_vars(array(
685             							'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '',
686             							'SITENAME' => $board_config['sitename'],
687             							'TOPIC_TITLE' => $topic_title, 
688             
689             							'U_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id",
690             							'U_STOP_WATCHING_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_TOPIC_URL . "=$topic_id&unwatch=topic")
691             						);
692             
693             						$emailer->send();
694 rizwank 1.1 						$emailer->reset();
695             					}
696             				}
697             			}
698             			$db->sql_freeresult($result);
699             
700             			if ($update_watched_sql != '')
701             			{
702             				$sql = "UPDATE " . TOPICS_WATCH_TABLE . "
703             					SET notify_status = " . TOPIC_WATCH_NOTIFIED . "
704             					WHERE topic_id = $topic_id
705             						AND user_id IN ($update_watched_sql)";
706             				$db->sql_query($sql);
707             			}
708             		}
709             
710             		$sql = "SELECT topic_id 
711             			FROM " . TOPICS_WATCH_TABLE . "
712             			WHERE topic_id = $topic_id
713             				AND user_id = " . $userdata['user_id'];
714             		if (!($result = $db->sql_query($sql)))
715 rizwank 1.1 		{
716             			message_die(GENERAL_ERROR, 'Could not obtain topic watch information', '', __LINE__, __FILE__, $sql);
717             		}
718             
719             		$row = $db->sql_fetchrow($result);
720             
721             		if (!$notify_user && !empty($row['topic_id']))
722             		{
723             			$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . "
724             				WHERE topic_id = $topic_id
725             					AND user_id = " . $userdata['user_id'];
726             			if (!$db->sql_query($sql))
727             			{
728             				message_die(GENERAL_ERROR, 'Could not delete topic watch information', '', __LINE__, __FILE__, $sql);
729             			}
730             		}
731             		else if ($notify_user && empty($row['topic_id']))
732             		{
733             			$sql = "INSERT INTO " . TOPICS_WATCH_TABLE . " (user_id, topic_id, notify_status)
734             				VALUES (" . $userdata['user_id'] . ", $topic_id, 0)";
735             			if (!$db->sql_query($sql))
736 rizwank 1.1 			{
737             				message_die(GENERAL_ERROR, 'Could not insert topic watch information', '', __LINE__, __FILE__, $sql);
738             			}
739             		}
740             	}
741             }
742             
743             //
744             // Fill smiley templates (or just the variables) with smileys
745             // Either in a window or inline
746             //
747             function generate_smilies($mode, $page_id)
748             {
749             	global $db, $board_config, $template, $lang, $images, $theme, $phpEx, $phpbb_root_path;
750             	global $user_ip, $session_length, $starttime;
751             	global $userdata;
752             
753             	$inline_columns = 4;
754             	$inline_rows = 5;
755             	$window_columns = 8;
756             
757 rizwank 1.1 	if ($mode == 'window')
758             	{
759             		$userdata = session_pagestart($user_ip, $page_id);
760             		init_userprefs($userdata);
761             
762             		$gen_simple_header = TRUE;
763             
764             		$page_title = $lang['Review_topic'] . " - $topic_title";
765             		include($phpbb_root_path . 'includes/page_header.'.$phpEx);
766             
767             		$template->set_filenames(array(
768             			'smiliesbody' => 'posting_smilies.tpl')
769             		);
770             	}
771             
772             	$sql = "SELECT emoticon, code, smile_url   
773             		FROM " . SMILIES_TABLE . " 
774             		ORDER BY smilies_id";
775             	if ($result = $db->sql_query($sql))
776             	{
777             		$num_smilies = 0;
778 rizwank 1.1 		$rowset = array();
779             		while ($row = $db->sql_fetchrow($result))
780             		{
781             			if (empty($rowset[$row['smile_url']]))
782             			{
783             				$rowset[$row['smile_url']]['code'] = str_replace("'", "\\'", str_replace('\\', '\\\\', $row['code']));
784             				$rowset[$row['smile_url']]['emoticon'] = $row['emoticon'];
785             				$num_smilies++;
786             			}
787             		}
788             
789             		if ($num_smilies)
790             		{
791             			$smilies_count = ($mode == 'inline') ? min(19, $num_smilies) : $num_smilies;
792             			$smilies_split_row = ($mode == 'inline') ? $inline_columns - 1 : $window_columns - 1;
793             
794             			$s_colspan = 0;
795             			$row = 0;
796             			$col = 0;
797             
798             			while (list($smile_url, $data) = @each($rowset))
799 rizwank 1.1 			{
800             				if (!$col)
801             				{
802             					$template->assign_block_vars('smilies_row', array());
803             				}
804             
805             				$template->assign_block_vars('smilies_row.smilies_col', array(
806             					'SMILEY_CODE' => $data['code'],
807             					'SMILEY_IMG' => $board_config['smilies_path'] . '/' . $smile_url,
808             					'SMILEY_DESC' => $data['emoticon'])
809             				);
810             
811             				$s_colspan = max($s_colspan, $col + 1);
812             
813             				if ($col == $smilies_split_row)
814             				{
815             					if ($mode == 'inline' && $row == $inline_rows - 1)
816             					{
817             						break;
818             					}
819             					$col = 0;
820 rizwank 1.1 					$row++;
821             				}
822             				else
823             				{
824             					$col++;
825             				}
826             			}
827             
828             			if ($mode == 'inline' && $num_smilies > $inline_rows * $inline_columns)
829             			{
830             				$template->assign_block_vars('switch_smilies_extra', array());
831             
832             				$template->assign_vars(array(
833             					'L_MORE_SMILIES' => $lang['More_emoticons'], 
834             					'U_MORE_SMILIES' => append_sid("posting.$phpEx?mode=smilies"))
835             				);
836             			}
837             
838             			$template->assign_vars(array(
839             				'L_EMOTICONS' => $lang['Emoticons'], 
840             				'L_CLOSE_WINDOW' => $lang['Close_window'], 
841 rizwank 1.1 				'S_SMILIES_COLSPAN' => $s_colspan)
842             			);
843             		}
844             	}
845             
846             	if ($mode == 'window')
847             	{
848             		$template->pparse('smiliesbody');
849             
850             		include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
851             	}
852             }
853             
854             ?>

Rizwan Kassim
Powered by
ViewCVS 0.9.2