fluxbb-1.5.4 to fluxbb-1.5.5 Legend
Lines removed 
Lines changed
 Lines added

a/admin_bans.php b/admin_bans.php
 30:         { 30:         {
 31:             $user_id = intval($_GET['add_ban']); 31:             $user_id = intval($_GET['add_ban']);
 32:             if ($user_id < 2) 32:             if ($user_id < 2)
 33:                 message($lang_common['Bad request']); 33:                 message($lang_common['Bad request'], false, '404 Not Found');
 34:  34: 
 35:             $result = $db->query('SELECT group_id, username, email FROM '.$db->prefix.'users WHERE id='.$user_id) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error()); 35:             $result = $db->query('SELECT group_id, username, email FROM '.$db->prefix.'users WHERE id='.$user_id) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 36:             if ($db->num_rows($result)) 36:             if ($db->num_rows($result))
 84:     { 84:     {
 85:         $ban_id = intval($_GET['edit_ban']); 85:         $ban_id = intval($_GET['edit_ban']);
 86:         if ($ban_id < 1) 86:         if ($ban_id < 1)
 87:             message($lang_common['Bad request']); 87:             message($lang_common['Bad request'], false, '404 Not Found');
 88:  88: 
 89:         $result = $db->query('SELECT username, ip, email, message, expire FROM '.$db->prefix.'bans WHERE id='.$ban_id) or error('Unable to fetch ban info', __FILE__, __LINE__, $db->error()); 89:         $result = $db->query('SELECT username, ip, email, message, expire FROM '.$db->prefix.'bans WHERE id='.$ban_id) or error('Unable to fetch ban info', __FILE__, __LINE__, $db->error());
 90:         if ($db->num_rows($result)) 90:         if ($db->num_rows($result))
 91:             list($ban_user, $ban_ip, $ban_email, $ban_message, $ban_expire) = $db->fetch_row($result); 91:             list($ban_user, $ban_ip, $ban_email, $ban_message, $ban_expire) = $db->fetch_row($result);
 92:         else 92:         else
 93:             message($lang_common['Bad request']); 93:             message($lang_common['Bad request'], false, '404 Not Found');
 94:  94: 
 95:         $diff = ($pun_user['timezone'] + $pun_user['dst']) * 3600; 95:         $diff = ($pun_user['timezone'] + $pun_user['dst']) * 3600;
 96:         $ban_expire = ($ban_expire != '') ? gmdate('Y-m-d', $ban_expire + $diff) : ''; 96:         $ban_expire = ($ban_expire != '') ? gmdate('Y-m-d', $ban_expire + $diff) : '';
308: 308: 
309:     $ban_id = intval($_GET['del_ban']);309:     $ban_id = intval($_GET['del_ban']);
310:     if ($ban_id < 1)310:     if ($ban_id < 1)
311:         message($lang_common['Bad request']);311:         message($lang_common['Bad request'], false, '404 Not Found');
312: 312: 
313:     $db->query('DELETE FROM '.$db->prefix.'bans WHERE id='.$ban_id) or error('Unable to delete ban', __FILE__, __LINE__, $db->error());313:     $db->query('DELETE FROM '.$db->prefix.'bans WHERE id='.$ban_id) or error('Unable to delete ban', __FILE__, __LINE__, $db->error());
314: 314: 


a/admin_categories.php b/admin_categories.php
 41:  41: 
 42:     $cat_to_delete = intval($_POST['cat_to_delete']); 42:     $cat_to_delete = intval($_POST['cat_to_delete']);
 43:     if ($cat_to_delete < 1) 43:     if ($cat_to_delete < 1)
 44:         message($lang_common['Bad request']); 44:         message($lang_common['Bad request'], false, '404 Not Found');
 45:  45: 
 46:     if (isset($_POST['del_cat_comply'])) // Delete a category with all forums and posts 46:     if (isset($_POST['del_cat_comply'])) // Delete a category with all forums and posts
 47:     { 47:     {
128: 128: 
129:     $categories = $_POST['cat'];129:     $categories = $_POST['cat'];
130:     if (empty($categories))130:     if (empty($categories))
131:         message($lang_common['Bad request']);131:         message($lang_common['Bad request'], false, '404 Not Found');
132: 132: 
133:     foreach ($categories as $cat_id => $cur_cat)133:     foreach ($categories as $cat_id => $cur_cat)
134:     {134:     {


a/admin_forums.php b/admin_forums.php
 27:  27: 
 28:     $add_to_cat = intval($_POST['add_to_cat']); 28:     $add_to_cat = intval($_POST['add_to_cat']);
 29:     if ($add_to_cat < 1) 29:     if ($add_to_cat < 1)
 30:         message($lang_common['Bad request']); 30:         message($lang_common['Bad request'], false, '404 Not Found');
 31:  31: 
 32:     $db->query('INSERT INTO '.$db->prefix.'forums (forum_name, cat_id) VALUES(\''.$db->escape($lang_admin_forums['New forum']).'\', '.$add_to_cat.')') or error('Unable to create forum', __FILE__, __LINE__, $db->error()); 32:     $db->query('INSERT INTO '.$db->prefix.'forums (forum_name, cat_id) VALUES(\''.$db->escape($lang_admin_forums['New forum']).'\', '.$add_to_cat.')') or error('Unable to create forum', __FILE__, __LINE__, $db->error());
 33:  33: 
 47:  47: 
 48:     $forum_id = intval($_GET['del_forum']); 48:     $forum_id = intval($_GET['del_forum']);
 49:     if ($forum_id < 1) 49:     if ($forum_id < 1)
 50:         message($lang_common['Bad request']); 50:         message($lang_common['Bad request'], false, '404 Not Found');
 51:  51: 
 52:     if (isset($_POST['del_forum_comply'])) // Delete a forum with all posts 52:     if (isset($_POST['del_forum_comply'])) // Delete a forum with all posts
 53:     { 53:     {
147: {147: {
148:     $forum_id = intval($_GET['edit_forum']);148:     $forum_id = intval($_GET['edit_forum']);
149:     if ($forum_id < 1)149:     if ($forum_id < 1)
150:         message($lang_common['Bad request']);150:         message($lang_common['Bad request'], false, '404 Not Found');
151: 151: 
152:     // Update group permissions for $forum_id152:     // Update group permissions for $forum_id
153:     if (isset($_POST['save']))153:     if (isset($_POST['save']))
165:             message($lang_admin_forums['Must enter name message']);165:             message($lang_admin_forums['Must enter name message']);
166: 166: 
167:         if ($cat_id < 1)167:         if ($cat_id < 1)
168:             message($lang_common['Bad request']);168:             message($lang_common['Bad request'], false, '404 Not Found');
169: 169: 
170:         $forum_desc = ($forum_desc != '') ? '\''.$db->escape($forum_desc).'\'' : 'NULL';170:         $forum_desc = ($forum_desc != '') ? '\''.$db->escape($forum_desc).'\'' : 'NULL';
171:         $redirect_url = ($redirect_url != '') ? '\''.$db->escape($redirect_url).'\'' : 'NULL';171:         $redirect_url = ($redirect_url != '') ? '\''.$db->escape($redirect_url).'\'' : 'NULL';
225:     // Fetch forum info225:     // Fetch forum info
226:     $result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());226:     $result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
227:     if (!$db->num_rows($result))227:     if (!$db->num_rows($result))
228:         message($lang_common['Bad request']);228:         message($lang_common['Bad request'], false, '404 Not Found');
229: 229: 
230:     $cur_forum = $db->fetch_assoc($result);230:     $cur_forum = $db->fetch_assoc($result);
231: 231: 
371:         <h2><span><?php echo $lang_admin_forums['Add forum head'] ?></span></h2>371:         <h2><span><?php echo $lang_admin_forums['Add forum head'] ?></span></h2>
372:         <div class="box">372:         <div class="box">
373:             <form method="post" action="admin_forums.php?action=adddel">373:             <form method="post" action="admin_forums.php?action=adddel">
 374: <?php
 375: 
 376: $result = $db->query('SELECT id, cat_name FROM '.$db->prefix.'categories ORDER BY disp_position') or error('Unable to fetch category list', __FILE__, __LINE__, $db->error());
 377: 
 378: if ($db->num_rows($result) > 0)
 379: {
 380: 
 381: ?>
374:                 <div class="inform">382:                 <div class="inform">
375:                     <fieldset>383:                     <fieldset>
376:                         <legend><?php echo $lang_admin_forums['Create new subhead'] ?></legend>384:                         <legend><?php echo $lang_admin_forums['Create new subhead'] ?></legend>
382:                                         <select name="add_to_cat" tabindex="1">390:                                         <select name="add_to_cat" tabindex="1">
383: <?php391: <?php
384: 392: 
385:     $result = $db->query('SELECT id, cat_name FROM '.$db->prefix.'categories ORDER BY disp_position') or error('Unable to fetch category list', __FILE__, __LINE__, $db->error());393:     while ($cur_cat = $db->fetch_assoc($result))
386:     if ($db->num_rows($result) > 0)394:         echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$cur_cat['id'].'">'.pun_htmlspecialchars($cur_cat['cat_name']).'</option>'."\n";
387:     { 
388:         while ($cur_cat = $db->fetch_assoc($result)) 
389:             echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$cur_cat['id'].'">'.pun_htmlspecialchars($cur_cat['cat_name']).'</option>'."\n"; 
390:     } 
391:     else 
392:         echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="0" disabled="disabled">'.$lang_admin_forums['No categories exist'].'</option>'."\n"; 
393: 395: 
394: ?>396: ?>
395:                                         </select>397:                                         </select>
400:                         </div>402:                         </div>
401:                     </fieldset>403:                     </fieldset>
402:                 </div>404:                 </div>
 405: <?php
 406: 
 407: }
 408: else
 409: {
 410: 
 411: ?>
 412:                 <div class="inform">
 413:                     <fieldset>
 414:                         <legend><?php echo $lang_admin_common['None'] ?></legend>
 415:                         <div class="infldset">
 416:                             <p><?php echo $lang_admin_forums['No categories exist'] ?></p>
 417:                         </div>
 418:                     </fieldset>
 419:                 </div>
 420: <?php
 421: 
 422: }
 423: 
 424: ?>
403:             </form>425:             </form>
404:         </div>426:         </div>
405: <?php427: <?php


a/admin_groups.php b/admin_groups.php
 41:     { 41:     {
 42:         $group_id = intval($_GET['edit_group']); 42:         $group_id = intval($_GET['edit_group']);
 43:         if ($group_id < 1 || !isset($groups[$group_id])) 43:         if ($group_id < 1 || !isset($groups[$group_id]))
 44:             message($lang_common['Bad request']); 44:             message($lang_common['Bad request'], false, '404 Not Found');
 45:  45: 
 46:         $group = $groups[$group_id]; 46:         $group = $groups[$group_id];
 47:  47: 
383: 383: 
384:     // Make sure it's not the admin or guest groups384:     // Make sure it's not the admin or guest groups
385:     if ($group_id == PUN_ADMIN || $group_id == PUN_GUEST)385:     if ($group_id == PUN_ADMIN || $group_id == PUN_GUEST)
386:         message($lang_common['Bad request']);386:         message($lang_common['Bad request'], false, '404 Not Found');
387: 387: 
388:     // Make sure it's not a moderator group388:     // Make sure it's not a moderator group
389:     if ($groups[$group_id]['g_moderator'] != 0)389:     if ($groups[$group_id]['g_moderator'] != 0)
390:         message($lang_common['Bad request']);390:         message($lang_common['Bad request'], false, '404 Not Found');
391: 391: 
392:     $db->query('UPDATE '.$db->prefix.'config SET conf_value='.$group_id.' WHERE conf_name=\'o_default_user_group\'') or error('Unable to update board config', __FILE__, __LINE__, $db->error());392:     $db->query('UPDATE '.$db->prefix.'config SET conf_value='.$group_id.' WHERE conf_name=\'o_default_user_group\'') or error('Unable to update board config', __FILE__, __LINE__, $db->error());
393: 393: 
408: 408: 
409:     $group_id = isset($_POST['group_to_delete']) ? intval($_POST['group_to_delete']) : intval($_GET['del_group']);409:     $group_id = isset($_POST['group_to_delete']) ? intval($_POST['group_to_delete']) : intval($_GET['del_group']);
410:     if ($group_id < 5)410:     if ($group_id < 5)
411:         message($lang_common['Bad request']);411:         message($lang_common['Bad request'], false, '404 Not Found');
412: 412: 
413:     // Make sure we don't remove the default group413:     // Make sure we don't remove the default group
414:     if ($group_id == $pun_config['o_default_user_group'])414:     if ($group_id == $pun_config['o_default_user_group'])


a/admin_loader.php b/admin_loader.php
 20: // The plugin to load should be supplied via GET 20: // The plugin to load should be supplied via GET
 21: $plugin = isset($_GET['plugin']) ? $_GET['plugin'] : ''; 21: $plugin = isset($_GET['plugin']) ? $_GET['plugin'] : '';
 22: if (!preg_match('%^AM?P_(\w*?)\.php$%i', $plugin)) 22: if (!preg_match('%^AM?P_(\w*?)\.php$%i', $plugin))
 23:     message($lang_common['Bad request']); 23:     message($lang_common['Bad request'], false, '404 Not Found');
 24:  24: 
 25: // AP_ == Admins only, AMP_ == admins and moderators 25: // AP_ == Admins only, AMP_ == admins and moderators
 26: $prefix = substr($plugin, 0, strpos($plugin, '_')); 26: $prefix = substr($plugin, 0, strpos($plugin, '_'));
 35: if (!isset($_SERVER['REQUEST_URI'])) 35: if (!isset($_SERVER['REQUEST_URI']))
 36:     $_SERVER['REQUEST_URI'] = (isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '').'?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : ''); 36:     $_SERVER['REQUEST_URI'] = (isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '').'?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '');
 37:  37: 
 38: $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_common['Admin'], str_replace('_', ' ', substr($plugin, strpos($plugin, '_') + 1, -4))); 38: $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], str_replace('_', ' ', substr($plugin, strpos($plugin, '_') + 1, -4)));
 39: define('PUN_ACTIVE_PAGE', 'admin'); 39: define('PUN_ACTIVE_PAGE', 'admin');
 40: require PUN_ROOT.'header.php'; 40: require PUN_ROOT.'header.php';
 41:  41: 


a/admin_options.php b/admin_options.php
104: 104: 
105:     $languages = forum_list_langs();105:     $languages = forum_list_langs();
106:     if (!in_array($form['default_lang'], $languages))106:     if (!in_array($form['default_lang'], $languages))
107:         message($lang_common['Bad request']);107:         message($lang_common['Bad request'], false, '404 Not Found');
108: 108: 
109:     $styles = forum_list_styles();109:     $styles = forum_list_styles();
110:     if (!in_array($form['default_style'], $styles))110:     if (!in_array($form['default_style'], $styles))
111:         message($lang_common['Bad request']);111:         message($lang_common['Bad request'], false, '404 Not Found');
112: 112: 
113:     if ($form['time_format'] == '')113:     if ($form['time_format'] == '')
114:         $form['time_format'] = 'H:i:s';114:         $form['time_format'] = 'H:i:s';
183:         $form['disp_posts_default'] = 75;183:         $form['disp_posts_default'] = 75;
184: 184: 
185:     if ($form['feed_type'] < 0 || $form['feed_type'] > 2)185:     if ($form['feed_type'] < 0 || $form['feed_type'] > 2)
186:         message($lang_common['Bad request']);186:         message($lang_common['Bad request'], false, '404 Not Found');
187: 187: 
188:     if ($form['feed_ttl'] < 0)188:     if ($form['feed_ttl'] < 0)
189:         message($lang_common['Bad request']);189:         message($lang_common['Bad request'], false, '404 Not Found');
190: 190: 
191:     if ($form['report_method'] < 0 || $form['report_method'] > 2)191:     if ($form['report_method'] < 0 || $form['report_method'] > 2)
192:         message($lang_common['Bad request']);192:         message($lang_common['Bad request'], false, '404 Not Found');
193: 193: 
194:     if ($form['default_email_setting'] < 0 || $form['default_email_setting'] > 2)194:     if ($form['default_email_setting'] < 0 || $form['default_email_setting'] > 2)
195:         message($lang_common['Bad request']);195:         message($lang_common['Bad request'], false, '404 Not Found');
196: 196: 
197:     if ($form['timeout_online'] >= $form['timeout_visit'])197:     if ($form['timeout_online'] >= $form['timeout_visit'])
198:         message($lang_admin_options['Timeout error message']);198:         message($lang_admin_options['Timeout error message']);


a/admin_users.php b/admin_users.php
 25: { 25: {
 26:     $ip_stats = intval($_GET['ip_stats']); 26:     $ip_stats = intval($_GET['ip_stats']);
 27:     if ($ip_stats < 1) 27:     if ($ip_stats < 1)
 28:         message($lang_common['Bad request']); 28:         message($lang_common['Bad request'], false, '404 Not Found');
 29:  29: 
 30:     // Fetch ip count 30:     // Fetch ip count
 31:     $result = $db->query('SELECT poster_ip, MAX(posted) AS last_used FROM '.$db->prefix.'posts WHERE poster_id='.$ip_stats.' GROUP BY poster_ip') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error()); 31:     $result = $db->query('SELECT poster_ip, MAX(posted) AS last_used FROM '.$db->prefix.'posts WHERE poster_id='.$ip_stats.' GROUP BY poster_ip') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());


a/db_update.php b/db_update.php
  7:  */  7:  */
  8:   8: 
  9: // The FluxBB version this script updates to  9: // The FluxBB version this script updates to
 10: define('UPDATE_TO', '1.5.4'); 10: define('UPDATE_TO', '1.5.5');
 11:  11: 
 12: define('UPDATE_TO_DB_REVISION', 20); 12: define('UPDATE_TO_DB_REVISION', 20);
 13: define('UPDATE_TO_SI_REVISION', 2); 13: define('UPDATE_TO_SI_REVISION', 2);
266:     if ($old_charset != 'UTF-8' && !seems_utf8($str))266:     if ($old_charset != 'UTF-8' && !seems_utf8($str))
267:     {267:     {
268:         if (function_exists('iconv'))268:         if (function_exists('iconv'))
269:             $str = iconv($old_charset == 'ISO-8859-1' ? 'WINDOWS-1252' : 'ISO-8859-1', 'UTF-8', $str);269:             $str = iconv(!empty($old_charset) ? $old_charset : 'ISO-8859-1', 'UTF-8', $str);
270:         else if (function_exists('mb_convert_encoding'))270:         else if (function_exists('mb_convert_encoding'))
271:             $str = mb_convert_encoding($str, 'UTF-8', $old_charset == 'ISO-8859-1' ? 'WINDOWS-1252' : 'ISO-8859-1');271:             $str = mb_convert_encoding($str, 'UTF-8', !empty($old_charset) ? $old_charset : 'ISO-8859-1');
272:         else if ($old_charset == 'ISO-8859-1')272:         else if ($old_charset == 'ISO-8859-1')
273:             $str = utf8_encode($str);273:             $str = utf8_encode($str);
274:     }274:     }
1282: 1282: 
1283:             convert_to_utf8($cur_item['forum_name'], $old_charset);1283:             convert_to_utf8($cur_item['forum_name'], $old_charset);
1284:             convert_to_utf8($cur_item['forum_desc'], $old_charset);1284:             convert_to_utf8($cur_item['forum_desc'], $old_charset);
 1285:             convert_to_utf8($cur_item['last_poster'], $old_charset);
1285: 1286: 
1286:             if (!empty($moderators_utf8))1287:             if (!empty($moderators_utf8))
1287:                 $cur_item['moderators'] = serialize($moderators_utf8);1288:                 $cur_item['moderators'] = serialize($moderators_utf8);


a/include/cache.php b/include/cache.php
 73:     { 73:     {
 74:         // A group_id was not supplied, so we generate the quick jump cache for all groups 74:         // A group_id was not supplied, so we generate the quick jump cache for all groups
 75:         $result = $db->query('SELECT g_id, g_read_board FROM '.$db->prefix.'groups') or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error()); 75:         $result = $db->query('SELECT g_id, g_read_board FROM '.$db->prefix.'groups') or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error());
 76:         $num_groups = $db->num_rows($result); 
 77:  76: 
 78:         while ($row = $db->fetch_row($result)) 77:         while ($row = $db->fetch_row($result))
 79:             $groups[$row[0]] = $row[1]; 78:             $groups[$row[0]] = $row[1];


a/include/common.php b/include/common.php
 10:     exit('The constant PUN_ROOT must be defined and point to a valid FluxBB installation root directory.'); 10:     exit('The constant PUN_ROOT must be defined and point to a valid FluxBB installation root directory.');
 11:  11: 
 12: // Define the version and database revision that this code was written for 12: // Define the version and database revision that this code was written for
 13: define('FORUM_VERSION', '1.5.4'); 13: define('FORUM_VERSION', '1.5.5');
 14:  14: 
 15: define('FORUM_DB_REVISION', 20); 15: define('FORUM_DB_REVISION', 20);
 16: define('FORUM_SI_REVISION', 2); 16: define('FORUM_SI_REVISION', 2);


a/include/email.php b/include/email.php
 10: if (!defined('PUN')) 10: if (!defined('PUN'))
 11:     exit; 11:     exit;
 12:  12: 
  13: // Define line breaks in mail headers; possible values can be PHP_EOL, "\r\n", "\n" or "\r"
  14: if (!defined('FORUM_EOL'))
  15:     define('FORUM_EOL', PHP_EOL);
  16: 
 13: require PUN_ROOT.'include/utf8/utils/ascii.php'; 17: require PUN_ROOT.'include/utf8/utils/ascii.php';
 14:  18: 
 15: // 19: //
229:     $from = '"'.encode_mail_text($from_name).'" <'.$from_email.'>';233:     $from = '"'.encode_mail_text($from_name).'" <'.$from_email.'>';
230:     $subject = encode_mail_text($subject);234:     $subject = encode_mail_text($subject);
231: 235: 
232:     $headers = 'From: '.$from."\r\n".'Date: '.gmdate('r')."\r\n".'MIME-Version: 1.0'."\r\n".'Content-transfer-encoding: 8bit'."\r\n".'Content-type: text/plain; charset=utf-8'."\r\n".'X-Mailer: FluxBB Mailer';236:     $headers = 'From: '.$from.FORUM_EOL.'Date: '.gmdate('r').FORUM_EOL.'MIME-Version: 1.0'.FORUM_EOL.'Content-transfer-encoding: 8bit'.FORUM_EOL.'Content-type: text/plain; charset=utf-8'.FORUM_EOL.'X-Mailer: FluxBB Mailer';
233: 237: 
234:     // If we specified a reply-to email, we deal with it here238:     // If we specified a reply-to email, we deal with it here
235:     if (!empty($reply_to_email))239:     if (!empty($reply_to_email))
236:     {240:     {
237:         $reply_to = '"'.encode_mail_text($reply_to_name).'" <'.$reply_to_email.'>';241:         $reply_to = '"'.encode_mail_text($reply_to_name).'" <'.$reply_to_email.'>';
238: 242: 
239:         $headers .= "\r\n".'Reply-To: '.$reply_to;243:         $headers .= FORUM_EOL.'Reply-To: '.$reply_to;
240:     }244:     }
241: 245: 
242:     // Make sure all linebreaks are LF in message (and strip out any NULL bytes)246:     // Make sure all linebreaks are LF in message (and strip out any NULL bytes)
283: function smtp_mail($to, $subject, $message, $headers = '')287: function smtp_mail($to, $subject, $message, $headers = '')
284: {288: {
285:     global $pun_config;289:     global $pun_config;
 290:     static $local_host;
286: 291: 
287:     $recipients = explode(',', $to);292:     $recipients = explode(',', $to);
288: 293: 
307: 312: 
308:     server_parse($socket, '220');313:     server_parse($socket, '220');
309: 314: 
310:     if ($pun_config['o_smtp_user'] != '' && $pun_config['o_smtp_pass'] != '')315:     if (!isset($local_host))
311:     {316:     {
312:         // Here we try to determine the *real* hostname (reverse DNS entry preferably)317:         // Here we try to determine the *real* hostname (reverse DNS entry preferably)
313:         $local_host = php_uname('n');318:         $local_host = php_uname('n');
317:         {322:         {
318:             // Able to resolve IP back to name323:             // Able to resolve IP back to name
319:             if (($local_name = @gethostbyaddr($local_addr)) !== $local_addr)324:             if (($local_name = @gethostbyaddr($local_addr)) !== $local_addr)
320:             { 
321:                 $local_host = $local_name;325:                 $local_host = $local_name;
322:             } 
323:         }326:         }
 327:     }
324: 328: 
 329:     if ($pun_config['o_smtp_user'] != '' && $pun_config['o_smtp_pass'] != '')
 330:     {
325:         fwrite($socket, 'EHLO '.$local_host."\r\n");331:         fwrite($socket, 'EHLO '.$local_host."\r\n");
326:         server_parse($socket, '250');332:         server_parse($socket, '250');
327: 333: 
336:     }342:     }
337:     else343:     else
338:     {344:     {
339:         fwrite($socket, 'HELO '.$smtp_host."\r\n");345:         fwrite($socket, 'HELO '.$local_host."\r\n");
340:         server_parse($socket, '250');346:         server_parse($socket, '250');
341:     }347:     }
342: 348: 


a/include/functions.php b/include/functions.php
  6:  * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher  6:  * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
  7:  */  7:  */
  8:   8: 
  9: include PUN_ROOT.'include/srand.php'; 
 10:   9: 
 11:  10: 
 12: // 11: //
454: {453: {
455:     global $db, $pun_config, $errors, $lang_prof_reg, $lang_register, $lang_common, $pun_bans;454:     global $db, $pun_config, $errors, $lang_prof_reg, $lang_register, $lang_common, $pun_bans;
456: 455: 
 456:     // Include UTF-8 function
 457:     require PUN_ROOT.'include/utf8/strcasecmp.php';
 458: 
457:     // Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames)459:     // Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames)
458:     $username = preg_replace('%\s+%s', ' ', $username);460:     $username = preg_replace('%\s+%s', ' ', $username);
459: 461: 
462:         $errors[] = $lang_prof_reg['Username too short'];464:         $errors[] = $lang_prof_reg['Username too short'];
463:     else if (pun_strlen($username) > 25) // This usually doesn't happen since the form element only accepts 25 characters465:     else if (pun_strlen($username) > 25) // This usually doesn't happen since the form element only accepts 25 characters
464:         $errors[] = $lang_prof_reg['Username too long'];466:         $errors[] = $lang_prof_reg['Username too long'];
465:     else if (!strcasecmp($username, 'Guest') || !strcasecmp($username, $lang_common['Guest']))467:     else if (!strcasecmp($username, 'Guest') || !utf8_strcasecmp($username, $lang_common['Guest']))
466:         $errors[] = $lang_prof_reg['Username guest'];468:         $errors[] = $lang_prof_reg['Username guest'];
467:     else if (preg_match('%[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}%', $username) || preg_match('%((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))%', $username))469:     else if (preg_match('%[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}%', $username) || preg_match('%((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))%', $username))
468:         $errors[] = $lang_prof_reg['Username IP'];470:         $errors[] = $lang_prof_reg['Username IP'];
476:         $errors[] = $lang_register['Username censor'];478:         $errors[] = $lang_register['Username censor'];
477: 479: 
478:     // Check that the username (or a too similar username) is not already registered480:     // Check that the username (or a too similar username) is not already registered
479:     $query = ($exclude_id) ? ' AND id!='.$exclude_id : '';481:     $query = (!is_null($exclude_id)) ? ' AND id!='.$exclude_id : '';
480: 482: 
481:     $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE (UPPER(username)=UPPER(\''.$db->escape($username).'\') OR UPPER(username)=UPPER(\''.$db->escape(ucp_preg_replace('%[^\p{L}\p{N}]%u', '', $username)).'\')) AND id>1'.$query) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());483:     $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE (UPPER(username)=UPPER(\''.$db->escape($username).'\') OR UPPER(username)=UPPER(\''.$db->escape(ucp_preg_replace('%[^\p{L}\p{N}]%u', '', $username)).'\')) AND id>1'.$query) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
482: 484: 
834:         $ban_list = array();836:         $ban_list = array();
835: 837: 
836:         foreach ($pun_bans as $cur_ban)838:         foreach ($pun_bans as $cur_ban)
837:             $ban_list[] = strtolower($cur_ban['username']);839:             $ban_list[] = utf8_strtolower($cur_ban['username']);
838:     }840:     }
839: 841: 
840:     // If the user has a custom title842:     // If the user has a custom title
841:     if ($user['title'] != '')843:     if ($user['title'] != '')
842:         $user_title = pun_htmlspecialchars($user['title']);844:         $user_title = pun_htmlspecialchars($user['title']);
843:     // If the user is banned845:     // If the user is banned
844:     else if (in_array(strtolower($user['username']), $ban_list))846:     else if (in_array(utf8_strtolower($user['username']), $ban_list))
845:         $user_title = $lang_common['Banned'];847:         $user_title = $lang_common['Banned'];
846:     // If the user group has a default user title848:     // If the user group has a default user title
847:     else if ($user['g_user_title'] != '')849:     else if ($user['g_user_title'] != '')
1011: //1013: //
1012: function random_key($len, $readable = false, $hash = false)1014: function random_key($len, $readable = false, $hash = false)
1013: {1015: {
 1016:     if (!function_exists('secure_random_bytes'))
 1017:         include PUN_ROOT.'include/srand.php';
 1018: 
1014:     $key = secure_random_bytes($len);1019:     $key = secure_random_bytes($len);
1015: 1020: 
1016:     if ($hash)1021:     if ($hash)
1017:         $key = substr(bin2hex($key), 0, $len);1022:         return substr(bin2hex($key), 0, $len);
1018:     else if ($readable)1023:     else if ($readable)
1019:         $key = substr(base64_encode($key), 0, $len);1024:     {
 1025:         $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
 1026: 
 1027:         $result = '';
 1028:         for ($i = 0; $i < $len; ++$i)
 1029:             $result .= substr($chars, (ord($key[$i]) % strlen($chars)), 1);
 1030: 
 1031:         return $result;
 1032:     }
1020: 1033: 
1021:     return $key;1034:     return $key;
1022: }1035: }


a/include/parser.php b/include/parser.php
823:     $replace_callback[] = 'handle_url_tag($matches[1], $matches[2])';823:     $replace_callback[] = 'handle_url_tag($matches[1], $matches[2])';
824:     $replace[] = '<a href="mailto:$1">$1</a>';824:     $replace[] = '<a href="mailto:$1">$1</a>';
825:     $replace[] = '<a href="mailto:$1">$2</a>';825:     $replace[] = '<a href="mailto:$1">$2</a>';
826:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?id=.$matches[1]\')';826:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?id=\'.$matches[1])';
827:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?id=.$matches[1],$matches[2]\')';827:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?id=\'.$matches[1], $matches[2])';
828:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?pid=.$matches[1].#p.$matches[1]\')';828:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?pid=\'.$matches[1].\'#p\'.$matches[1])';
829:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?pid=.$matches[1].#p.$matches[1],$matches[2]\')';829:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?pid=\'.$matches[1].\'#p\'.$matches[1], $matches[2])';
830:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewforum.php?id=.$matches[1]\')';830:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewforum.php?id=\'.$matches[1])';
831:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewforum.php?id=.$matches[1],$matches[2]\')';831:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/viewforum.php?id=\'.$matches[1], $matches[2])';
832:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/profile.php?id=.$matches[1]\')';832:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/profile.php?id=\'.$matches[1])';
833:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/profile.php?id=.$matches[1],$matches[2]\')';833:     $replace_callback[] = 'handle_url_tag(\''.get_base_url(true).'/profile.php?id=\'.$matches[1], $matches[2])';
834: 834: 
835:     // This thing takes a while! :)835:     // This thing takes a while! :)
836:     $text = preg_replace($pattern, $replace, $text);836:     $text = preg_replace($pattern, $replace, $text);
849: function do_clickable($text)849: function do_clickable($text)
850: {850: {
851:     $text = ' '.$text;851:     $text = ' '.$text;
852:     $text = ucp_preg_replace_callback('%(?<=[\s\]\)])(<)?(\[)?(\()?([\'"]?)(https?|ftp|news){1}://([\p{L}\p{N}\-]+\.([\p{L}\p{N}\-]+\.)*[\p{L}\p{N}]+(:[0-9]+)?(/(?:[^\s\[]*[^\s.,?!\[;:-])?)?)\4(?(3)(\)))(?(2)(\]))(?(1)(>))(?![^\s]*\[/(?:url|img)\])%ui', 'stripslashes($matches[1].$matches[2].$matches[3].$matches[4]).handle_url_tag($matches[5]."://".$matches[6], $matches[5]."://".$matches[6], true).stripslashes($matches[4].$matches[10].$matches[11].$matches[12])', $text);852:     $text = ucp_preg_replace_callback('%(?<=[\s\]\)])(<)?(\[)?(\()?([\'"]?)(https?|ftp|news){1}://([\p{L}\p{N}\-]+\.([\p{L}\p{N}\-]+\.)*[\p{L}\p{N}]+(:[0-9]+)?(/(?:[^\s\[]*[^\s.,?!\[;:-])?)?)\4(?(3)(\)))(?(2)(\]))(?(1)(>))(?![^\s]*\[/(?:url|img)\])%ui', 'stripslashes($matches[1].$matches[2].$matches[3].$matches[4]).handle_url_tag($matches[5]."://".$matches[6], $matches[5]."://".$matches[6], true).stripslashes($matches[4].forum_array_key($matches, 10).forum_array_key($matches, 11).forum_array_key($matches, 12))', $text);
853:     $text = ucp_preg_replace_callback('%(?<=[\s\]\)])(<)?(\[)?(\()?([\'"]?)(www|ftp)\.(([\p{L}\p{N}\-]+\.)+[\p{L}\p{N}]+(:[0-9]+)?(/(?:[^\s\[]*[^\s.,?!\[;:-])?)?)\4(?(3)(\)))(?(2)(\]))(?(1)(>))(?![^\s]*\[/(?:url|img)\])%ui','stripslashes($matches[1].$matches[2].$matches[3].$matches[4]).handle_url_tag($matches[5].".".$matches[6], $matches[5].".".$matches[6], true).stripslashes($matches[4].$matches[10].$matches[11].$matches[12])', $text);853:     $text = ucp_preg_replace_callback('%(?<=[\s\]\)])(<)?(\[)?(\()?([\'"]?)(www|ftp)\.(([\p{L}\p{N}\-]+\.)+[\p{L}\p{N}]+(:[0-9]+)?(/(?:[^\s\[]*[^\s.,?!\[;:-])?)?)\4(?(3)(\)))(?(2)(\]))(?(1)(>))(?![^\s]*\[/(?:url|img)\])%ui','stripslashes($matches[1].$matches[2].$matches[3].$matches[4]).handle_url_tag($matches[5].".".$matches[6], $matches[5].".".$matches[6], true).stripslashes($matches[4].forum_array_key($matches, 10).forum_array_key($matches, 11).forum_array_key($matches, 12))', $text);
854: 854: 
855:     return substr($text, 1);855:     return substr($text, 1);
856: }856: }
857: 857: 
858: 858: 
859: //859: //
 860: // Return an array key, if it exists, otherwise return an empty string
 861: //
 862: function forum_array_key($arr, $key)
 863: {
 864:     return isset($arr[$key]) ? $arr[$key] : '';
 865: }
 866: 
 867: 
 868: //
860: // Convert a series of smilies to images869: // Convert a series of smilies to images
861: //870: //
862: function do_smilies($text)871: function do_smilies($text)
863: {872: {
864:     global $pun_config, $smilies;873:     global $smilies;
865: 874: 
866:     $text = ' '.$text.' ';875:     $text = ' '.$text.' ';
867: 876: 


a/install.php b/install.php
  7:  */  7:  */
  8:   8: 
  9: // The FluxBB version this script installs  9: // The FluxBB version this script installs
 10: define('FORUM_VERSION', '1.5.4'); 10: define('FORUM_VERSION', '1.5.5');
 11:  11: 
 12: define('FORUM_DB_REVISION', 20); 12: define('FORUM_DB_REVISION', 20);
 13: define('FORUM_SI_REVISION', 2); 13: define('FORUM_SI_REVISION', 2);


a/lang/English/help.php b/lang/English/help.php
 38: 'Quotes'                =>    'Quotes', 38: 'Quotes'                =>    'Quotes',
 39: 'Quotes info'            =>    'If you want to quote someone, you should use the quote tag.', 39: 'Quotes info'            =>    'If you want to quote someone, you should use the quote tag.',
 40: 'Quotes info 2'            =>    'If you don\'t want to quote anyone in particular, you can use the quote tag without specifying a name.', 40: 'Quotes info 2'            =>    'If you don\'t want to quote anyone in particular, you can use the quote tag without specifying a name.',
 41: 'Quote text'            =>    'This is the text i want to quote.', 41: 'Quote text'            =>    'This is the text I want to quote.',
 42: 'produces quote box'    =>    'produces a quote box like this:', 42: 'produces quote box'    =>    'produces a quote box like this:',
 43: 'quote note'            =>    'Note: If a username contains the characters [ or ] you can enclose it in quote marks.', 43: 'quote note'            =>    'Note: If a username contains the characters [ or ] you can enclose it in quote marks.',
 44:  44: 


a/lang/English/install.php b/lang/English/install.php
 65: 'Info 11'                        =>    'Settings for your board. You can change this later.', 65: 'Info 11'                        =>    'Settings for your board. You can change this later.',
 66: 'General information'            =>    'Enter your board\'s title and description.', 66: 'General information'            =>    'Enter your board\'s title and description.',
 67: 'Board description'                =>    'Board description (supports HTML)', 67: 'Board description'                =>    'Board description (supports HTML)',
 68: 'Info 14'                        =>    'The URL (without trailing slash) of your FluxBB forum (example: http://forum.myhost.com). This must be correct. Please note that the preset value below is just an educated guess by FluxBB.', 
 69: 'Appearance'                    =>    'Appearance', 68: 'Appearance'                    =>    'Appearance',
 70: 'Info 15'                        =>    'Make your forum yours. Choose a language and a style for your board.', 69: 'Info 15'                        =>    'Make your forum yours. Choose a language and a style for your board.',
 71: 'Default language'                =>    'Default language', 70: 'Default language'                =>    'Default language',


a/lang/English/update.php b/lang/English/update.php
  7: 'Update'                        =>    'Update FluxBB',  7: 'Update'                        =>    'Update FluxBB',
  8: 'Update message'                =>    'Your FluxBB database is out-of-date and must be upgraded in order to continue. If you are the board administrator, please follow the instructions below to complete the upgrade.',  8: 'Update message'                =>    'Your FluxBB database is out-of-date and must be upgraded in order to continue. If you are the board administrator, please follow the instructions below to complete the upgrade.',
  9: 'Note'                            =>    'Note:',  9: 'Note'                            =>    'Note:',
 10: 'Members message'                =>    'This process is for board administators only. If you are a member there is nothing to worry about - the forums will be back shortly!', 10: 'Members message'                =>    'This process is for board administrators only. If you are a member there is nothing to worry about - the forums will be back shortly!',
 11: 'Administrator only'            =>    'This step is for the board administrator only!', 11: 'Administrator only'            =>    'This step is for the board administrator only!',
 12: 'Database password info'        =>    'To perform the database update please enter the database password with which FluxBB was installed. If you cannot remember, this is stored in your \'config.php\' file.', 12: 'Database password info'        =>    'To perform the database update please enter the database password with which FluxBB was installed. If you cannot remember, this is stored in your \'config.php\' file.',
 13: 'Database password note'        =>    'If you are running SQLite (and hence have no database password) please use the database file name instead. This must exactly match the database file name given in your configuration file.', 13: 'Database password note'        =>    'If you are running SQLite (and hence have no database password) please use the database file name instead. This must exactly match the database file name given in your configuration file.',


a/misc.php b/misc.php
 22: if ($action == 'rules') 22: if ($action == 'rules')
 23: { 23: {
 24:     if ($pun_config['o_rules'] == '0' || ($pun_user['is_guest'] && $pun_user['g_read_board'] == '0' && $pun_config['o_regs_allow'] == '0')) 24:     if ($pun_config['o_rules'] == '0' || ($pun_user['is_guest'] && $pun_user['g_read_board'] == '0' && $pun_config['o_regs_allow'] == '0'))
 25:         message($lang_common['Bad request']); 25:         message($lang_common['Bad request'], false, '404 Not Found');
 26:  26: 
 27:     // Load the register.php language file 27:     // Load the register.php language file
 28:     require PUN_ROOT.'lang/'.$pun_user['language'].'/register.php'; 28:     require PUN_ROOT.'lang/'.$pun_user['language'].'/register.php';
 68:  68: 
 69:     $fid = isset($_GET['fid']) ? intval($_GET['fid']) : 0; 69:     $fid = isset($_GET['fid']) ? intval($_GET['fid']) : 0;
 70:     if ($fid < 1) 70:     if ($fid < 1)
 71:         message($lang_common['Bad request']); 71:         message($lang_common['Bad request'], false, '404 Not Found');
 72:  72: 
 73:     $tracked_topics = get_tracked_topics(); 73:     $tracked_topics = get_tracked_topics();
 74:     $tracked_topics['forums'][$fid] = time(); 74:     $tracked_topics['forums'][$fid] = time();
 85:  85: 
 86:     $recipient_id = intval($_GET['email']); 86:     $recipient_id = intval($_GET['email']);
 87:     if ($recipient_id < 2) 87:     if ($recipient_id < 2)
 88:         message($lang_common['Bad request']); 88:         message($lang_common['Bad request'], false, '404 Not Found');
 89:  89: 
 90:     $result = $db->query('SELECT username, email, email_setting FROM '.$db->prefix.'users WHERE id='.$recipient_id) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error()); 90:     $result = $db->query('SELECT username, email, email_setting FROM '.$db->prefix.'users WHERE id='.$recipient_id) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 91:     if (!$db->num_rows($result)) 91:     if (!$db->num_rows($result))
 92:         message($lang_common['Bad request']); 92:         message($lang_common['Bad request'], false, '404 Not Found');
 93:  93: 
 94:     list($recipient, $recipient_email, $email_setting) = $db->fetch_row($result); 94:     list($recipient, $recipient_email, $email_setting) = $db->fetch_row($result);
 95:  95: 
109:             message($lang_misc['No email subject']);109:             message($lang_misc['No email subject']);
110:         else if ($message == '')110:         else if ($message == '')
111:             message($lang_misc['No email message']);111:             message($lang_misc['No email message']);
112:         else if (pun_strlen($message) > PUN_MAX_POSTSIZE)112:         // Here we use strlen() not pun_strlen() as we want to limit the post to PUN_MAX_POSTSIZE bytes, not characters
 113:         else if (strlen($message) > PUN_MAX_POSTSIZE)
113:             message($lang_misc['Too long email message']);114:             message($lang_misc['Too long email message']);
114: 115: 
115:         if ($pun_user['last_email_sent'] != '' && (time() - $pun_user['last_email_sent']) < $pun_user['g_email_flood'] && (time() - $pun_user['last_email_sent']) >= 0)116:         if ($pun_user['last_email_sent'] != '' && (time() - $pun_user['last_email_sent']) < $pun_user['g_email_flood'] && (time() - $pun_user['last_email_sent']) >= 0)
207: else if (isset($_GET['report']))208: else if (isset($_GET['report']))
208: {209: {
209:     if ($pun_user['is_guest'])210:     if ($pun_user['is_guest'])
210:         message($lang_common['No permission']);211:         message($lang_common['No permission'], false, '403 Forbidden');
211: 212: 
212:     $post_id = intval($_GET['report']);213:     $post_id = intval($_GET['report']);
213:     if ($post_id < 1)214:     if ($post_id < 1)
214:         message($lang_common['Bad request']);215:         message($lang_common['Bad request'], false, '404 Not Found');
215: 216: 
216:     if (isset($_POST['form_sent']))217:     if (isset($_POST['form_sent']))
217:     {218:     {
228:         // Get the topic ID229:         // Get the topic ID
229:         $result = $db->query('SELECT topic_id FROM '.$db->prefix.'posts WHERE id='.$post_id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());230:         $result = $db->query('SELECT topic_id FROM '.$db->prefix.'posts WHERE id='.$post_id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
230:         if (!$db->num_rows($result))231:         if (!$db->num_rows($result))
231:             message($lang_common['Bad request']);232:             message($lang_common['Bad request'], false, '404 Not Found');
232: 233: 
233:         $topic_id = $db->result($result);234:         $topic_id = $db->result($result);
234: 235: 
235:         // Get the subject and forum ID236:         // Get the subject and forum ID
236:         $result = $db->query('SELECT subject, forum_id FROM '.$db->prefix.'topics WHERE id='.$topic_id) or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());237:         $result = $db->query('SELECT subject, forum_id FROM '.$db->prefix.'topics WHERE id='.$topic_id) or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());
237:         if (!$db->num_rows($result))238:         if (!$db->num_rows($result))
238:             message($lang_common['Bad request']);239:             message($lang_common['Bad request'], false, '404 Not Found');
239: 240: 
240:         list($subject, $forum_id) = $db->fetch_row($result);241:         list($subject, $forum_id) = $db->fetch_row($result);
241: 242: 
278:     // Fetch some info about the post, the topic and the forum279:     // Fetch some info about the post, the topic and the forum
279:     $result = $db->query('SELECT f.id AS fid, f.forum_name, t.id AS tid, t.subject FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.id='.$post_id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());280:     $result = $db->query('SELECT f.id AS fid, f.forum_name, t.id AS tid, t.subject FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'topics AS t ON t.id=p.topic_id INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND p.id='.$post_id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
280:     if (!$db->num_rows($result))281:     if (!$db->num_rows($result))
281:         message($lang_common['Bad request']);282:         message($lang_common['Bad request'], false, '404 Not Found');
282: 283: 
283:     $cur_post = $db->fetch_assoc($result);284:     $cur_post = $db->fetch_assoc($result);
284: 285: 
329: else if ($action == 'subscribe')330: else if ($action == 'subscribe')
330: {331: {
331:     if ($pun_user['is_guest'])332:     if ($pun_user['is_guest'])
332:         message($lang_common['No permission']);333:         message($lang_common['No permission'], false, '403 Forbidden');
333: 334: 
334:     $topic_id = isset($_GET['tid']) ? intval($_GET['tid']) : 0;335:     $topic_id = isset($_GET['tid']) ? intval($_GET['tid']) : 0;
335:     $forum_id = isset($_GET['fid']) ? intval($_GET['fid']) : 0;336:     $forum_id = isset($_GET['fid']) ? intval($_GET['fid']) : 0;
336:     if ($topic_id < 1 && $forum_id < 1)337:     if ($topic_id < 1 && $forum_id < 1)
337:         message($lang_common['Bad request']);338:         message($lang_common['Bad request'], false, '404 Not Found');
338: 339: 
339:     if ($topic_id)340:     if ($topic_id)
340:     {341:     {
341:         if ($pun_config['o_topic_subscriptions'] != '1')342:         if ($pun_config['o_topic_subscriptions'] != '1')
342:             message($lang_common['No permission']);343:             message($lang_common['No permission'], false, '403 Forbidden');
343: 344: 
344:         // Make sure the user can view the topic345:         // Make sure the user can view the topic
345:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$topic_id.' AND t.moved_to IS NULL') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());346:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topics AS t LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$topic_id.' AND t.moved_to IS NULL') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());
346:         if (!$db->num_rows($result))347:         if (!$db->num_rows($result))
347:             message($lang_common['Bad request']);348:             message($lang_common['Bad request'], false, '404 Not Found');
348: 349: 
349:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topic_subscriptions WHERE user_id='.$pun_user['id'].' AND topic_id='.$topic_id) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());350:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topic_subscriptions WHERE user_id='.$pun_user['id'].' AND topic_id='.$topic_id) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());
350:         if ($db->num_rows($result))351:         if ($db->num_rows($result))
358:     if ($forum_id)359:     if ($forum_id)
359:     {360:     {
360:         if ($pun_config['o_forum_subscriptions'] != '1')361:         if ($pun_config['o_forum_subscriptions'] != '1')
361:             message($lang_common['No permission']);362:             message($lang_common['No permission'], false, '403 Forbidden');
362: 363: 
363:         // Make sure the user can view the forum364:         // Make sure the user can view the forum
364:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());365:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
365:         if (!$db->num_rows($result))366:         if (!$db->num_rows($result))
366:             message($lang_common['Bad request']);367:             message($lang_common['Bad request'], false, '404 Not Found');
367: 368: 
368:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'forum_subscriptions WHERE user_id='.$pun_user['id'].' AND forum_id='.$forum_id) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());369:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'forum_subscriptions WHERE user_id='.$pun_user['id'].' AND forum_id='.$forum_id) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());
369:         if ($db->num_rows($result))370:         if ($db->num_rows($result))
379: else if ($action == 'unsubscribe')380: else if ($action == 'unsubscribe')
380: {381: {
381:     if ($pun_user['is_guest'])382:     if ($pun_user['is_guest'])
382:         message($lang_common['No permission']);383:         message($lang_common['No permission'], false, '403 Forbidden');
383: 384: 
384:     $topic_id = isset($_GET['tid']) ? intval($_GET['tid']) : 0;385:     $topic_id = isset($_GET['tid']) ? intval($_GET['tid']) : 0;
385:     $forum_id = isset($_GET['fid']) ? intval($_GET['fid']) : 0;386:     $forum_id = isset($_GET['fid']) ? intval($_GET['fid']) : 0;
386:     if ($topic_id < 1 && $forum_id < 1)387:     if ($topic_id < 1 && $forum_id < 1)
387:         message($lang_common['Bad request']);388:         message($lang_common['Bad request'], false, '404 Not Found');
388: 389: 
389:     if ($topic_id)390:     if ($topic_id)
390:     {391:     {
391:         if ($pun_config['o_topic_subscriptions'] != '1')392:         if ($pun_config['o_topic_subscriptions'] != '1')
392:             message($lang_common['No permission']);393:             message($lang_common['No permission'], false, '403 Forbidden');
393: 394: 
394:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topic_subscriptions WHERE user_id='.$pun_user['id'].' AND topic_id='.$topic_id) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());395:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topic_subscriptions WHERE user_id='.$pun_user['id'].' AND topic_id='.$topic_id) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());
395:         if (!$db->num_rows($result))396:         if (!$db->num_rows($result))
403:     if ($forum_id)404:     if ($forum_id)
404:     {405:     {
405:         if ($pun_config['o_forum_subscriptions'] != '1')406:         if ($pun_config['o_forum_subscriptions'] != '1')
406:             message($lang_common['No permission']);407:             message($lang_common['No permission'], false, '403 Forbidden');
407: 408: 
408:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'forum_subscriptions WHERE user_id='.$pun_user['id'].' AND forum_id='.$forum_id) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());409:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'forum_subscriptions WHERE user_id='.$pun_user['id'].' AND forum_id='.$forum_id) or error('Unable to fetch subscription info', __FILE__, __LINE__, $db->error());
409:         if (!$db->num_rows($result))410:         if (!$db->num_rows($result))
417: 418: 
418: 419: 
419: else420: else


a/moderate.php b/moderate.php
 24:     { 24:     {
 25:         $get_host = intval($_GET['get_host']); 25:         $get_host = intval($_GET['get_host']);
 26:         if ($get_host < 1) 26:         if ($get_host < 1)
 27:             message($lang_common['Bad request']); 27:             message($lang_common['Bad request'], false, '404 Not Found');
 28:  28: 
 29:         $result = $db->query('SELECT poster_ip FROM '.$db->prefix.'posts WHERE id='.$get_host) or error('Unable to fetch post IP address', __FILE__, __LINE__, $db->error()); 29:         $result = $db->query('SELECT poster_ip FROM '.$db->prefix.'posts WHERE id='.$get_host) or error('Unable to fetch post IP address', __FILE__, __LINE__, $db->error());
 30:         if (!$db->num_rows($result)) 30:         if (!$db->num_rows($result))
 87:             confirm_referrer('moderate.php'); 87:             confirm_referrer('moderate.php');
 88:  88: 
 89:             if (@preg_match('%[^0-9,]%', $posts)) 89:             if (@preg_match('%[^0-9,]%', $posts))
 90:                 message($lang_common['Bad request']); 90:                 message($lang_common['Bad request'], false, '404 Not Found');
 91:  91: 
 92:             // Verify that the post IDs are valid 92:             // Verify that the post IDs are valid
 93:             $admins_sql = ($pun_user['g_id'] != PUN_ADMIN) ? ' AND poster_id NOT IN('.implode(',', get_admin_ids()).')' : '';  93:             $admins_sql = ($pun_user['g_id'] != PUN_ADMIN) ? ' AND poster_id NOT IN('.implode(',', get_admin_ids()).')' : ''; 
 94:             $result = $db->query('SELECT 1 FROM '.$db->prefix.'posts WHERE id IN('.$posts.') AND topic_id='.$tid.$admins_sql) or error('Unable to check posts', __FILE__, __LINE__, $db->error()); 94:             $result = $db->query('SELECT 1 FROM '.$db->prefix.'posts WHERE id IN('.$posts.') AND topic_id='.$tid.$admins_sql) or error('Unable to check posts', __FILE__, __LINE__, $db->error());
 95:  95: 
 96:             if ($db->num_rows($result) != substr_count($posts, ',') + 1) 96:             if ($db->num_rows($result) != substr_count($posts, ',') + 1)
 97:                 message($lang_common['Bad request']); 97:                 message($lang_common['Bad request'], false, '404 Not Found');
 98:  98: 
 99:             // Delete the posts 99:             // Delete the posts
100:             $db->query('DELETE FROM '.$db->prefix.'posts WHERE id IN('.$posts.')') or error('Unable to delete posts', __FILE__, __LINE__, $db->error());100:             $db->query('DELETE FROM '.$db->prefix.'posts WHERE id IN('.$posts.')') or error('Unable to delete posts', __FILE__, __LINE__, $db->error());
155:             confirm_referrer('moderate.php');155:             confirm_referrer('moderate.php');
156: 156: 
157:             if (@preg_match('%[^0-9,]%', $posts))157:             if (@preg_match('%[^0-9,]%', $posts))
158:                 message($lang_common['Bad request']);158:                 message($lang_common['Bad request'], false, '404 Not Found');
159: 159: 
160:             $move_to_forum = isset($_POST['move_to_forum']) ? intval($_POST['move_to_forum']) : 0;160:             $move_to_forum = isset($_POST['move_to_forum']) ? intval($_POST['move_to_forum']) : 0;
161:             if ($move_to_forum < 1)161:             if ($move_to_forum < 1)
162:                 message($lang_common['Bad request']);162:                 message($lang_common['Bad request'], false, '404 Not Found');
163: 163: 
164:             // How many posts did we just split off?164:             // How many posts did we just split off?
165:             $num_posts_splitted = substr_count($posts, ',') + 1;165:             $num_posts_splitted = substr_count($posts, ',') + 1;
167:             // Verify that the post IDs are valid167:             // Verify that the post IDs are valid
168:             $result = $db->query('SELECT 1 FROM '.$db->prefix.'posts WHERE id IN('.$posts.') AND topic_id='.$tid) or error('Unable to check posts', __FILE__, __LINE__, $db->error());168:             $result = $db->query('SELECT 1 FROM '.$db->prefix.'posts WHERE id IN('.$posts.') AND topic_id='.$tid) or error('Unable to check posts', __FILE__, __LINE__, $db->error());
169:             if ($db->num_rows($result) != $num_posts_splitted)169:             if ($db->num_rows($result) != $num_posts_splitted)
170:                 message($lang_common['Bad request']);170:                 message($lang_common['Bad request'], false, '404 Not Found');
171: 171: 
172:             // Verify that the move to forum ID is valid172:             // Verify that the move to forum ID is valid
173:             $result = $db->query('SELECT 1 FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.group_id='.$pun_user['g_id'].' AND fp.forum_id='.$move_to_forum.') WHERE f.redirect_url IS NULL AND (fp.post_topics IS NULL OR fp.post_topics=1)') or error('Unable to fetch forum permissions', __FILE__, __LINE__, $db->error());173:             $result = $db->query('SELECT 1 FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.group_id='.$pun_user['g_id'].' AND fp.forum_id='.$move_to_forum.') WHERE f.redirect_url IS NULL AND (fp.post_topics IS NULL OR fp.post_topics=1)') or error('Unable to fetch forum permissions', __FILE__, __LINE__, $db->error());
174:             if (!$db->num_rows($result))174:             if (!$db->num_rows($result))
175:                 message($lang_common['Bad request']);175:                 message($lang_common['Bad request'], false, '404 Not Found');
176: 176: 
177:             // Load the post.php language file177:             // Load the post.php language file
178:             require PUN_ROOT.'lang/'.$pun_user['language'].'/post.php';178:             require PUN_ROOT.'lang/'.$pun_user['language'].'/post.php';
425:         confirm_referrer('moderate.php');425:         confirm_referrer('moderate.php');
426: 426: 
427:         if (@preg_match('%[^0-9,]%', $_POST['topics']))427:         if (@preg_match('%[^0-9,]%', $_POST['topics']))
428:             message($lang_common['Bad request']);428:             message($lang_common['Bad request'], false, '404 Not Found');
429: 429: 
430:         $topics = explode(',', $_POST['topics']);430:         $topics = explode(',', $_POST['topics']);
431:         $move_to_forum = isset($_POST['move_to_forum']) ? intval($_POST['move_to_forum']) : 0;431:         $move_to_forum = isset($_POST['move_to_forum']) ? intval($_POST['move_to_forum']) : 0;
432:         if (empty($topics) || $move_to_forum < 1)432:         if (empty($topics) || $move_to_forum < 1)
433:             message($lang_common['Bad request']);433:             message($lang_common['Bad request'], false, '404 Not Found');
434: 434: 
435:         // Verify that the topic IDs are valid435:         // Verify that the topic IDs are valid
436:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topics WHERE id IN('.implode(',',$topics).') AND forum_id='.$fid) or error('Unable to check topics', __FILE__, __LINE__, $db->error());436:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topics WHERE id IN('.implode(',',$topics).') AND forum_id='.$fid) or error('Unable to check topics', __FILE__, __LINE__, $db->error());
437: 437: 
438:         if ($db->num_rows($result) != count($topics))438:         if ($db->num_rows($result) != count($topics))
439:             message($lang_common['Bad request']);439:             message($lang_common['Bad request'], false, '404 Not Found');
440: 440: 
441:         // Verify that the move to forum ID is valid441:         // Verify that the move to forum ID is valid
442:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.group_id='.$pun_user['g_id'].' AND fp.forum_id='.$move_to_forum.') WHERE f.redirect_url IS NULL AND (fp.post_topics IS NULL OR fp.post_topics=1)') or error('Unable to fetch forum permissions', __FILE__, __LINE__, $db->error());442:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.group_id='.$pun_user['g_id'].' AND fp.forum_id='.$move_to_forum.') WHERE f.redirect_url IS NULL AND (fp.post_topics IS NULL OR fp.post_topics=1)') or error('Unable to fetch forum permissions', __FILE__, __LINE__, $db->error());
443:         if (!$db->num_rows($result))443:         if (!$db->num_rows($result))
444:             message($lang_common['Bad request']);444:             message($lang_common['Bad request'], false, '404 Not Found');
445: 445: 
446:         // Delete any redirect topics if there are any (only if we moved/copied the topic back to where it was once moved from)446:         // Delete any redirect topics if there are any (only if we moved/copied the topic back to where it was once moved from)
447:         $db->query('DELETE FROM '.$db->prefix.'topics WHERE forum_id='.$move_to_forum.' AND moved_to IN('.implode(',',$topics).')') or error('Unable to delete redirect topics', __FILE__, __LINE__, $db->error());447:         $db->query('DELETE FROM '.$db->prefix.'topics WHERE forum_id='.$move_to_forum.' AND moved_to IN('.implode(',',$topics).')') or error('Unable to delete redirect topics', __FILE__, __LINE__, $db->error());
483:     {483:     {
484:         $topics = intval($_GET['move_topics']);484:         $topics = intval($_GET['move_topics']);
485:         if ($topics < 1)485:         if ($topics < 1)
486:             message($lang_common['Bad request']);486:             message($lang_common['Bad request'], false, '404 Not Found');
487: 487: 
488:         $action = 'single';488:         $action = 'single';
489:     }489:     }
553:         confirm_referrer('moderate.php');553:         confirm_referrer('moderate.php');
554: 554: 
555:         if (@preg_match('%[^0-9,]%', $_POST['topics']))555:         if (@preg_match('%[^0-9,]%', $_POST['topics']))
556:             message($lang_common['Bad request']);556:             message($lang_common['Bad request'], false, '404 Not Found');
557: 557: 
558:         $topics = explode(',', $_POST['topics']);558:         $topics = explode(',', $_POST['topics']);
559:         if (count($topics) < 2)559:         if (count($topics) < 2)
562:         // Verify that the topic IDs are valid (redirect links will point to the merged topic after the merge)562:         // Verify that the topic IDs are valid (redirect links will point to the merged topic after the merge)
563:         $result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE id IN('.implode(',', $topics).') AND forum_id='.$fid.' ORDER BY id ASC') or error('Unable to check topics', __FILE__, __LINE__, $db->error());563:         $result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE id IN('.implode(',', $topics).') AND forum_id='.$fid.' ORDER BY id ASC') or error('Unable to check topics', __FILE__, __LINE__, $db->error());
564:         if ($db->num_rows($result) != count($topics))564:         if ($db->num_rows($result) != count($topics))
565:             message($lang_common['Bad request']);565:             message($lang_common['Bad request'], false, '404 Not Found');
566: 566: 
567:         // The topic that we are merging into is the one with the smallest ID567:         // The topic that we are merging into is the one with the smallest ID
568:         $merge_to_tid = $db->result($result);568:         $merge_to_tid = $db->result($result);
580:         $db->query('UPDATE '.$db->prefix.'posts SET topic_id='.$merge_to_tid.' WHERE topic_id IN('.implode(',', $topics).')') or error('Unable to merge the posts into the topic', __FILE__, __LINE__, $db->error());580:         $db->query('UPDATE '.$db->prefix.'posts SET topic_id='.$merge_to_tid.' WHERE topic_id IN('.implode(',', $topics).')') or error('Unable to merge the posts into the topic', __FILE__, __LINE__, $db->error());
581: 581: 
582:         // Update any subscriptions582:         // Update any subscriptions
583:         $result = $db->query('SELECT user_id FROM '.$db->prefix.'topic_subscriptions WHERE topic_id IN ('.implode(',', $topics).')') or error('Unable to fetch subscriptions of merged topics', __FILE__, __LINE__, $db->error());583:         $result = $db->query('SELECT DISTINCT user_id FROM '.$db->prefix.'topic_subscriptions WHERE topic_id IN('.implode(',', $topics).')') or error('Unable to fetch subscriptions of merged topics', __FILE__, __LINE__, $db->error());
584: 584: 
585:         $subscribed_users = array();585:         $subscribed_users = array();
586:         while ($cur_user_id = $db->result($result))586:         while ($row = $db->fetch_row($result))
587:             $subscribed_users[] = $cur_user_id;587:             $subscribed_users[] = $row[0];
588:         $subscribed_users = array_unique($subscribed_users); 
589: 588: 
590:         $db->query('DELETE FROM '.$db->prefix.'topic_subscriptions WHERE topic_id IN ('.implode(',', $topics).')') or error('Unable to delete subscriptions of merged topics', __FILE__, __LINE__, $db->error());589:         $db->query('DELETE FROM '.$db->prefix.'topic_subscriptions WHERE topic_id IN('.implode(',', $topics).')') or error('Unable to delete subscriptions of merged topics', __FILE__, __LINE__, $db->error());
591: 590: 
592:         foreach ($subscribed_users as $cur_user_id)591:         foreach ($subscribed_users as $cur_user_id)
593:             $db->query('INSERT INTO '.$db->prefix.'topic_subscriptions (topic_id, user_id) VALUES ('.$merge_to_tid.', '.$cur_user_id.')') or error('Unable to re-enter subscriptions for merge topic', __FILE__, __LINE__, $db->error());592:             $db->query('INSERT INTO '.$db->prefix.'topic_subscriptions (topic_id, user_id) VALUES ('.$merge_to_tid.', '.$cur_user_id.')') or error('Unable to re-enter subscriptions for merge topic', __FILE__, __LINE__, $db->error());
657:         confirm_referrer('moderate.php');656:         confirm_referrer('moderate.php');
658: 657: 
659:         if (@preg_match('%[^0-9,]%', $topics))658:         if (@preg_match('%[^0-9,]%', $topics))
660:             message($lang_common['Bad request']);659:             message($lang_common['Bad request'], false, '404 Not Found');
661: 660: 
662:         require PUN_ROOT.'include/search_idx.php';661:         require PUN_ROOT.'include/search_idx.php';
663: 662: 
665:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topics WHERE id IN('.$topics.') AND forum_id='.$fid) or error('Unable to check topics', __FILE__, __LINE__, $db->error());664:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topics WHERE id IN('.$topics.') AND forum_id='.$fid) or error('Unable to check topics', __FILE__, __LINE__, $db->error());
666: 665: 
667:         if ($db->num_rows($result) != substr_count($topics, ',') + 1)666:         if ($db->num_rows($result) != substr_count($topics, ',') + 1)
668:             message($lang_common['Bad request']);667:             message($lang_common['Bad request'], false, '404 Not Found');
669: 668: 
670:         // Verify that the posts are not by admins669:         // Verify that the posts are not by admins
671:         if ($pun_user['g_id'] != PUN_ADMIN)670:         if ($pun_user['g_id'] != PUN_ADMIN)
755: 754: 
756:         $topic_id = ($action) ? intval($_GET['close']) : intval($_GET['open']);755:         $topic_id = ($action) ? intval($_GET['close']) : intval($_GET['open']);
757:         if ($topic_id < 1)756:         if ($topic_id < 1)
758:             message($lang_common['Bad request']);757:             message($lang_common['Bad request'], false, '404 Not Found');
759: 758: 
760:         $db->query('UPDATE '.$db->prefix.'topics SET closed='.$action.' WHERE id='.$topic_id.' AND forum_id='.$fid) or error('Unable to close topic', __FILE__, __LINE__, $db->error());759:         $db->query('UPDATE '.$db->prefix.'topics SET closed='.$action.' WHERE id='.$topic_id.' AND forum_id='.$fid) or error('Unable to close topic', __FILE__, __LINE__, $db->error());
761: 760: 
772: 771: 
773:     $stick = intval($_GET['stick']);772:     $stick = intval($_GET['stick']);
774:     if ($stick < 1)773:     if ($stick < 1)
775:         message($lang_common['Bad request']);774:         message($lang_common['Bad request'], false, '404 Not Found');
776: 775: 
777:     $db->query('UPDATE '.$db->prefix.'topics SET sticky=\'1\' WHERE id='.$stick.' AND forum_id='.$fid) or error('Unable to stick topic', __FILE__, __LINE__, $db->error());776:     $db->query('UPDATE '.$db->prefix.'topics SET sticky=\'1\' WHERE id='.$stick.' AND forum_id='.$fid) or error('Unable to stick topic', __FILE__, __LINE__, $db->error());
778: 777: 
787: 786: 
788:     $unstick = intval($_GET['unstick']);787:     $unstick = intval($_GET['unstick']);
789:     if ($unstick < 1)788:     if ($unstick < 1)
790:         message($lang_common['Bad request']);789:         message($lang_common['Bad request'], false, '404 Not Found');
791: 790: 
792:     $db->query('UPDATE '.$db->prefix.'topics SET sticky=\'0\' WHERE id='.$unstick.' AND forum_id='.$fid) or error('Unable to unstick topic', __FILE__, __LINE__, $db->error());791:     $db->query('UPDATE '.$db->prefix.'topics SET sticky=\'0\' WHERE id='.$unstick.' AND forum_id='.$fid) or error('Unable to unstick topic', __FILE__, __LINE__, $db->error());
793: 792: 
809: 808: 
810: // Is this a redirect forum? In that case, abort!809: // Is this a redirect forum? In that case, abort!
811: if ($cur_forum['redirect_url'] != '')810: if ($cur_forum['redirect_url'] != '')
812:     message($lang_common['Bad request']);811:     message($lang_common['Bad request'], false, '404 Not Found');
813: 812: 
814: switch ($cur_forum['sort_by'])813: switch ($cur_forum['sort_by'])
815: {814: {


a/post.php b/post.php
 33:  33: 
 34: // Is someone trying to post into a redirect forum? 34: // Is someone trying to post into a redirect forum?
 35: if ($cur_posting['redirect_url'] != '') 35: if ($cur_posting['redirect_url'] != '')
 36:     message($lang_common['Bad request']); 36:     message($lang_common['Bad request'], false, '404 Not Found');
 37:  37: 
 38: // Sort out who the moderators are and if we are currently a moderator (or an admin) 38: // Sort out who the moderators are and if we are currently a moderator (or an admin)
 39: $mods_array = ($cur_posting['moderators'] != '') ? unserialize($cur_posting['moderators']) : array(); 39: $mods_array = ($cur_posting['moderators'] != '') ? unserialize($cur_posting['moderators']) : array();
523:     $form = '<form id="post" method="post" action="post.php?action=post&amp;fid='.$fid.'" onsubmit="return process_form(this)">';523:     $form = '<form id="post" method="post" action="post.php?action=post&amp;fid='.$fid.'" onsubmit="return process_form(this)">';
524: }524: }
525: else525: else
526:     message($lang_common['Bad request']);526:     message($lang_common['Bad request'], false, '404 Not Found');
527: 527: 
528: 528: 
529: $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $action);529: $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $action);


a/profile.php b/profile.php
924:         }924:         }
925: 925: 
926:         default:926:         default:
927:             message($lang_common['Bad request']);927:             message($lang_common['Bad request'], false, '404 Not Found');
928:     }928:     }
929: 929: 
930: 930: 
938:     }938:     }
939: 939: 
940:     if (empty($temp))940:     if (empty($temp))
941:         message($lang_common['Bad request']);941:         message($lang_common['Bad request'], false, '404 Not Found');
942: 942: 
943: 943: 
944:     $db->query('UPDATE '.$db->prefix.'users SET '.implode(',', $temp).' WHERE id='.$id) or error('Unable to update profile', __FILE__, __LINE__, $db->error());944:     $db->query('UPDATE '.$db->prefix.'users SET '.implode(',', $temp).' WHERE id='.$id) or error('Unable to update profile', __FILE__, __LINE__, $db->error());
1495:     else if ($section == 'personality')1495:     else if ($section == 'personality')
1496:     {1496:     {
1497:         if ($pun_config['o_avatars'] == '0' && $pun_config['o_signatures'] == '0')1497:         if ($pun_config['o_avatars'] == '0' && $pun_config['o_signatures'] == '0')
1498:             message($lang_common['Bad request']);1498:             message($lang_common['Bad request'], false, '404 Not Found');
1499: 1499: 
1500:         $avatar_field = '<span><a href="profile.php?action=upload_avatar&amp;id='.$id.'">'.$lang_profile['Change avatar'].'</a></span>';1500:         $avatar_field = '<span><a href="profile.php?action=upload_avatar&amp;id='.$id.'">'.$lang_profile['Change avatar'].'</a></span>';
1501: 1501: 
1821: 1821: 
1822:     }1822:     }
1823:     else1823:     else
1824:         message($lang_common['Bad request']);1824:         message($lang_common['Bad request'], false, '404 Not Found');
1825: 1825: 
1826: ?>1826: ?>
1827:     <div class="clearer"></div>1827:     <div class="clearer"></div>


a/register.php b/register.php
133:     {133:     {
134:         $language = preg_replace('%[\.\\\/]%', '', $_POST['language']);134:         $language = preg_replace('%[\.\\\/]%', '', $_POST['language']);
135:         if (!file_exists(PUN_ROOT.'lang/'.$language.'/common.php'))135:         if (!file_exists(PUN_ROOT.'lang/'.$language.'/common.php'))
136:             message($lang_common['Bad request']);136:             message($lang_common['Bad request'], false, '404 Not Found');
137:     }137:     }
138:     else138:     else
139:         $language = $pun_config['o_default_lang'];139:         $language = $pun_config['o_default_lang'];
159:         $db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, timezone, dst, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$db->escape($email1).'\', '.$email_setting.', '.$timezone.' , '.$dst.', \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.$db->escape(get_remote_address()).'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());159:         $db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, timezone, dst, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$db->escape($email1).'\', '.$email_setting.', '.$timezone.' , '.$dst.', \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.$db->escape(get_remote_address()).'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error());
160:         $new_uid = $db->insert_id();160:         $new_uid = $db->insert_id();
161: 161: 
 162:         if ($pun_config['o_regs_verify'] == '0')
 163:         {
 164:             // Regenerate the users info cache
 165:             if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
 166:                 require PUN_ROOT.'include/cache.php';
 167: 
 168:             generate_users_info_cache();
 169:         }
 170: 
162:         // If the mailing list isn't empty, we may need to send out some alerts171:         // If the mailing list isn't empty, we may need to send out some alerts
163:         if ($pun_config['o_mailing_list'] != '')172:         if ($pun_config['o_mailing_list'] != '')
164:         {173:         {
243:             message($lang_register['Reg email'].' <a href="mailto:'.pun_htmlspecialchars($pun_config['o_admin_email']).'">'.pun_htmlspecialchars($pun_config['o_admin_email']).'</a>.', true);252:             message($lang_register['Reg email'].' <a href="mailto:'.pun_htmlspecialchars($pun_config['o_admin_email']).'">'.pun_htmlspecialchars($pun_config['o_admin_email']).'</a>.', true);
244:         }253:         }
245: 254: 
246:         // Regenerate the users info cache 
247:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) 
248:             require PUN_ROOT.'include/cache.php'; 
249:  
250:         generate_users_info_cache(); 
251:  
252:         pun_setcookie($new_uid, $password_hash, time() + $pun_config['o_timeout_visit']);255:         pun_setcookie($new_uid, $password_hash, time() + $pun_config['o_timeout_visit']);
253: 256: 
254:         redirect('index.php', $lang_register['Reg complete']);257:         redirect('index.php', $lang_register['Reg complete']);


a/search.php b/search.php
 84:     else if ($action == 'show_replies') 84:     else if ($action == 'show_replies')
 85:     { 85:     {
 86:         if ($pun_user['is_guest']) 86:         if ($pun_user['is_guest'])
 87:             message($lang_common['Bad request']); 87:             message($lang_common['Bad request'], false, '404 Not Found');
 88:     } 88:     }
 89:     else if ($action != 'show_new' && $action != 'show_unanswered') 89:     else if ($action != 'show_new' && $action != 'show_unanswered')
 90:         message($lang_common['Bad request']); 90:         message($lang_common['Bad request'], false, '404 Not Found');
 91:  91: 
 92:  92: 
 93:     // If a valid search_id was supplied we attempt to fetch the search results from the db 93:     // If a valid search_id was supplied we attempt to fetch the search results from the db
379:             else if ($action == 'show_subscriptions')379:             else if ($action == 'show_subscriptions')
380:             {380:             {
381:                 if ($pun_user['is_guest'])381:                 if ($pun_user['is_guest'])
382:                     message($lang_common['Bad request']);382:                     message($lang_common['Bad request'], false, '404 Not Found');
383: 383: 
384:                 $result = $db->query('SELECT t.id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'topic_subscriptions AS s ON (t.id=s.topic_id AND s.user_id='.$user_id.') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) ORDER BY t.last_post DESC') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());384:                 $result = $db->query('SELECT t.id FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'topic_subscriptions AS s ON (t.id=s.topic_id AND s.user_id='.$user_id.') LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=t.forum_id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) ORDER BY t.last_post DESC') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
385:                 $num_hits = $db->num_rows($result);385:                 $num_hits = $db->num_rows($result);
407:             $db->free_result($result);407:             $db->free_result($result);
408:         }408:         }
409:         else409:         else
410:             message($lang_common['Bad request']);410:             message($lang_common['Bad request'], false, '404 Not Found');
411: 411: 
412: 412: 
413:         // Prune "old" search results413:         // Prune "old" search results


a/style/Air.css b/style/Air.css
673: }673: }
674: 674: 
675: .pun .blocktable .tclcon {675: .pun .blocktable .tclcon {
676:     height: 1%; 
677:     min-height: 1px;676:     min-height: 1px;
678:     overflow: hidden;677:     overflow: hidden;
679:     padding: 0 11px 0 12px;678:     padding: 0 11px 0 12px;
964: }963: }
965: 964: 
966: .pun .codebox pre {965: .pun .codebox pre {
967:     overflow: hidden;966:     overflow: auto;
968:     width: 100%;967:     width: 100%;
969:     direction: ltr;968:     direction: ltr;
970:     text-align: left;969:     text-align: left;


a/style/Cobalt.css b/style/Cobalt.css
516: .pun .blocktable .tclcon {516: .pun .blocktable .tclcon {
517:     padding: 0 11px 0 12px;517:     padding: 0 11px 0 12px;
518:     overflow: hidden;518:     overflow: hidden;
519:     height: 1%; 
520:     min-height: 1px;519:     min-height: 1px;
521:     position: relative;520:     position: relative;
522:     }521:     }


a/style/Earth.css b/style/Earth.css
672: }672: }
673: 673: 
674: .pun .blocktable .tclcon {674: .pun .blocktable .tclcon {
675:     height: 1%; 
676:     min-height: 1px;675:     min-height: 1px;
677:     overflow: hidden;676:     overflow: hidden;
678:     padding: 0 11px 0 12px;677:     padding: 0 11px 0 12px;
963: }962: }
964: 963: 
965: .pun .codebox pre {964: .pun .codebox pre {
966:     overflow: hidden;965:     overflow: auto;
967:     width: 100%;966:     width: 100%;
968:     direction: ltr;967:     direction: ltr;
969:     text-align: left;968:     text-align: left;


a/style/Fire.css b/style/Fire.css
672: }672: }
673: 673: 
674: .pun .blocktable .tclcon {674: .pun .blocktable .tclcon {
675:     height: 1%; 
676:     min-height: 1px;675:     min-height: 1px;
677:     overflow: hidden;676:     overflow: hidden;
678:     padding: 0 11px 0 12px;677:     padding: 0 11px 0 12px;
963: }962: }
964: 963: 
965: .pun .codebox pre {964: .pun .codebox pre {
966:     overflow: hidden;965:     overflow: auto;
967:     width: 100%;966:     width: 100%;
968:     direction: ltr;967:     direction: ltr;
969:     text-align: left;968:     text-align: left;


a/style/Lithium.css b/style/Lithium.css
516: .pun .blocktable .tclcon {516: .pun .blocktable .tclcon {
517:     padding: 0 11px 0 12px;517:     padding: 0 11px 0 12px;
518:     overflow: hidden;518:     overflow: hidden;
519:     height: 1%; 
520:     min-height: 1px;519:     min-height: 1px;
521:     position: relative;520:     position: relative;
522:     }521:     }


a/style/Mercury.css b/style/Mercury.css
516: .pun .blocktable .tclcon {516: .pun .blocktable .tclcon {
517:     padding: 0 11px 0 12px;517:     padding: 0 11px 0 12px;
518:     overflow: hidden;518:     overflow: hidden;
519:     height: 1%; 
520:     min-height: 1px;519:     min-height: 1px;
521:     position: relative;520:     position: relative;
522:     }521:     }


a/style/Oxygen.css b/style/Oxygen.css
517: .pun .blocktable .tclcon {517: .pun .blocktable .tclcon {
518:     padding: 0 11px 0 12px;518:     padding: 0 11px 0 12px;
519:     overflow: hidden;519:     overflow: hidden;
520:     height: 1%; 
521:     min-height: 1px;520:     min-height: 1px;
522:     position: relative;521:     position: relative;
523:     }522:     }


a/style/Radium.css b/style/Radium.css
516: .pun .blocktable .tclcon {516: .pun .blocktable .tclcon {
517:     padding: 0 11px 0 12px;517:     padding: 0 11px 0 12px;
518:     overflow: hidden;518:     overflow: hidden;
519:     height: 1%; 
520:     min-height: 1px;519:     min-height: 1px;
521:     position: relative;520:     position: relative;
522:     }521:     }


a/style/Sulfur.css b/style/Sulfur.css
516: .pun .blocktable .tclcon {516: .pun .blocktable .tclcon {
517:     padding: 0 11px 0 12px;517:     padding: 0 11px 0 12px;
518:     overflow: hidden;518:     overflow: hidden;
519:     height: 1%; 
520:     min-height: 1px;519:     min-height: 1px;
521:     position: relative;520:     position: relative;
522:     }521:     }


a/style/Technetium.css b/style/Technetium.css
582: .pun .blocktable .tclcon {582: .pun .blocktable .tclcon {
583:     padding: 0 11px 0 12px;583:     padding: 0 11px 0 12px;
584:     overflow: hidden;584:     overflow: hidden;
585:     height: 1%; 
586:     min-height: 1px;585:     min-height: 1px;
587:     position: relative;586:     position: relative;
588: }587: }


hdiff - version: 2.1.0 (modified)