fluxbb-1.4.0 to fluxbb-1.4.12 Legend
Lines removed 
Lines changed
 Lines added

/dev/null b/.gitattributes
   1: .gitattributes    export-ignore
   2: .gitignore    export-ignore


a/.gitignore b/.gitignore


/dev/null b/README
   1:     =====================
   2:       FluxBB 1.4 Readme
   3:     =====================
   4: 
   5:        About
   6:     ----------------
   7: FluxBB is an open source forum application released under the GNU General Public
   8: Licence. It is free to download and use and will remain so. FluxBB was conceived and
   9: designed to be fast and light with less of the "not so essential" features that some
  10: of the other forums have whilst not sacrificing essential functionality or usability.
  11: 
  12:       Requirements
  13:     ----------------
  14:  - A webserver
  15:  - PHP 4.4.0 or later
  16:  - A database such as MySQL 4.1.2 or later, PostgreSQL 7.0 or later, or SQLite 2
  17: 
  18:       Recommendations
  19:     -------------------
  20:  - Make use of a PHP accelerator such as APC or XCache
  21:  - Make sure PHP has the zlib module installed to allow FluxBB to gzip output
  22: 
  23:       Links
  24:     ---------
  25: 
  26:  - Homepage: http://fluxbb.org
  27:  - Documentation: http://fluxbb.org/docs/
  28:  - Community: http://fluxbb.org/forums/
  29:  - Resources: http://fluxbb.org/resources/
  30:  - IRC: irc://irc.freenode.net/fluxbb
  31:  - Development: http://github.com/fluxbb/fluxbb


a/admin_bans.php b/admin_bans.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if ($pun_user['g_id'] != PUN_ADMIN && ($pun_user['g_moderator'] != '1' || $pun_user['g_mod_ban_users'] == '0')) 17: if ($pun_user['g_id'] != PUN_ADMIN && ($pun_user['g_moderator'] != '1' || $pun_user['g_mod_ban_users'] == '0'))
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_bans.php language file 20: // Load the admin_bans.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_bans.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_bans.php';
 28:         // If the ID of the user to ban was provided through GET (a link from profile.php) 28:         // If the ID of the user to ban was provided through GET (a link from profile.php)
 29:         if (isset($_GET['add_ban'])) 29:         if (isset($_GET['add_ban']))
 30:         { 30:         {
 31:             $add_ban = intval($_GET['add_ban']); 31:             $user_id = intval($_GET['add_ban']);
 32:             if ($add_ban < 2) 32:             if ($user_id < 2)
 33:                 message($lang_common['Bad request']); 33:                 message($lang_common['Bad request']);
 34:  34: 
 35:             $user_id = $add_ban; 
 36:  
 37:             $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());
 38:             if ($db->num_rows($result)) 36:             if ($db->num_rows($result))
 39:                 list($group_id, $ban_user, $ban_email) = $db->fetch_row($result); 37:                 list($group_id, $ban_user, $ban_email) = $db->fetch_row($result);
 54:             } 52:             }
 55:         } 53:         }
 56:  54: 
 57:         // Make sure we're not banning an admin 55:         // Make sure we're not banning an admin or moderator
 58:         if (isset($group_id) && $group_id == PUN_ADMIN) 56:         if (isset($group_id))
 59:             message(sprintf($lang_admin_bans['User is admin message'], pun_htmlspecialchars($ban_user))); 57:         {
  58:             if ($group_id == PUN_ADMIN)
  59:                 message(sprintf($lang_admin_bans['User is admin message'], pun_htmlspecialchars($ban_user)));
  60: 
  61:             $result = $db->query('SELECT g_moderator FROM '.$db->prefix.'groups WHERE g_id='.$group_id) or error('Unable to fetch group info', __FILE__, __LINE__, $db->error());
  62:             $is_moderator_group = $db->result($result);
  63: 
  64:             if ($is_moderator_group)
  65:                 message(sprintf($lang_admin_bans['User is mod message'], pun_htmlspecialchars($ban_user)));
  66:         }
 60:  67: 
 61:         // If we have a $user_id, we can try to find the last known IP of that user 68:         // If we have a $user_id, we can try to find the last known IP of that user
 62:         if (isset($user_id)) 69:         if (isset($user_id))
 63:         { 70:         {
 64:             $result = $db->query('SELECT poster_ip FROM '.$db->prefix.'posts WHERE poster_id='.$user_id.' ORDER BY posted DESC LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error()); 71:             $result = $db->query('SELECT poster_ip FROM '.$db->prefix.'posts WHERE poster_id='.$user_id.' ORDER BY posted DESC LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
 65:             $ban_ip = ($db->num_rows($result)) ? $db->result($result) : ''; 72:             $ban_ip = ($db->num_rows($result)) ? $db->result($result) : '';
  73: 
  74:             if ($ban_ip == '')
  75:             {
  76:                 $result = $db->query('SELECT registration_ip FROM '.$db->prefix.'users WHERE id='.$user_id) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
  77:                 $ban_ip = ($db->num_rows($result)) ? $db->result($result) : '';
  78:             }
 66:         } 79:         }
 67:  80: 
 68:         $mode = 'add'; 81:         $mode = 'add';
114:                                 <tr>127:                                 <tr>
115:                                     <th scope="row"><?php echo $lang_admin_bans['IP label'] ?></th>128:                                     <th scope="row"><?php echo $lang_admin_bans['IP label'] ?></th>
116:                                     <td>129:                                     <td>
117:                                         <input type="text" name="ban_ip" size="45" maxlength="255" value="<?php if (isset($ban_ip)) echo $ban_ip; ?>" tabindex="2" />130:                                         <input type="text" name="ban_ip" size="45" maxlength="255" value="<?php if (isset($ban_ip)) echo pun_htmlspecialchars($ban_ip); ?>" tabindex="2" />
118:                                         <span><?php echo $lang_admin_bans['IP help'] ?><?php if ($ban_user != '' && isset($user_id)) printf(' '.$lang_admin_bans['IP help link'], '<a href="admin_users.php?ip_stats='.$user_id.'">'.$lang_admin_common['here'].'</a>') ?></span>131:                                         <span><?php echo $lang_admin_bans['IP help'] ?><?php if ($ban_user != '' && isset($user_id)) printf(' '.$lang_admin_bans['IP help link'], '<a href="admin_users.php?ip_stats='.$user_id.'">'.$lang_admin_common['here'].'</a>') ?></span>
119:                                     </td>132:                                     </td>
120:                                 </tr>133:                                 </tr>
121:                                 <tr>134:                                 <tr>
122:                                     <th scope="row"><?php echo $lang_admin_bans['E-mail label'] ?></th>135:                                     <th scope="row"><?php echo $lang_admin_bans['E-mail label'] ?></th>
123:                                     <td>136:                                     <td>
124:                                         <input type="text" name="ban_email" size="40" maxlength="80" value="<?php if (isset($ban_email)) echo strtolower($ban_email); ?>" tabindex="3" />137:                                         <input type="text" name="ban_email" size="40" maxlength="80" value="<?php if (isset($ban_email)) echo $ban_email; ?>" tabindex="3" />
125:                                         <span><?php echo $lang_admin_bans['E-mail help'] ?></span>138:                                         <span><?php echo $lang_admin_bans['E-mail help'] ?></span>
126:                                     </td>139:                                     </td>
127:                                 </tr>140:                                 </tr>
170:     confirm_referrer('admin_bans.php');183:     confirm_referrer('admin_bans.php');
171: 184: 
172:     $ban_user = pun_trim($_POST['ban_user']);185:     $ban_user = pun_trim($_POST['ban_user']);
173:     $ban_ip = trim($_POST['ban_ip']);186:     $ban_ip = pun_trim($_POST['ban_ip']);
174:     $ban_email = strtolower(trim($_POST['ban_email']));187:     $ban_email = strtolower(pun_trim($_POST['ban_email']));
175:     $ban_message = pun_trim($_POST['ban_message']);188:     $ban_message = pun_trim($_POST['ban_message']);
176:     $ban_expire = trim($_POST['ban_expire']);189:     $ban_expire = pun_trim($_POST['ban_expire']);
177: 190: 
178:     if ($ban_user == '' && $ban_ip == '' && $ban_email == '')191:     if ($ban_user == '' && $ban_ip == '' && $ban_email == '')
179:         message($lang_admin_bans['Must enter message']);192:         message($lang_admin_bans['Must enter message']);
180:     else if (strtolower($ban_user) == 'guest')193:     else if (strtolower($ban_user) == 'guest')
181:         message($lang_admin_bans['Cannot ban guest message']);194:         message($lang_admin_bans['Cannot ban guest message']);
182: 195: 
 196:     // Make sure we're not banning an admin or moderator
 197:     if (!empty($ban_user))
 198:     {
 199:         $result = $db->query('SELECT group_id FROM '.$db->prefix.'users WHERE username=\''.$db->escape($ban_user).'\' AND id>1') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 200:         if ($db->num_rows($result))
 201:         {
 202:             $group_id = $db->result($result);
 203: 
 204:             if ($group_id == PUN_ADMIN)
 205:                 message(sprintf($lang_admin_bans['User is admin message'], pun_htmlspecialchars($ban_user)));
 206: 
 207:             $result = $db->query('SELECT g_moderator FROM '.$db->prefix.'groups WHERE g_id='.$group_id) or error('Unable to fetch group info', __FILE__, __LINE__, $db->error());
 208:             $is_moderator_group = $db->result($result);
 209: 
 210:             if ($is_moderator_group)
 211:                 message(sprintf($lang_admin_bans['User is mod message'], pun_htmlspecialchars($ban_user)));
 212:         }
 213:     }
 214: 
183:     // Validate IP/IP range (it's overkill, I know)215:     // Validate IP/IP range (it's overkill, I know)
184:     if ($ban_ip != '')216:     if ($ban_ip != '')
185:     {217:     {
186:         $ban_ip = preg_replace('/\s{2,}/S', ' ', $ban_ip);218:         $ban_ip = preg_replace('%\s{2,}%S', ' ', $ban_ip);
187:         $addresses = explode(' ', $ban_ip);219:         $addresses = explode(' ', $ban_ip);
188:         $addresses = array_map('pun_trim', $addresses);220:         $addresses = array_map('pun_trim', $addresses);
189: 221: 
212:                 {244:                 {
213:                     $octets[$c] = (strlen($octets[$c]) > 1) ? ltrim($octets[$c], "0") : $octets[$c];245:                     $octets[$c] = (strlen($octets[$c]) > 1) ? ltrim($octets[$c], "0") : $octets[$c];
214: 246: 
215:                     if ($c > 3 || preg_match('/[^0-9]/', $octets[$c]) || intval($octets[$c]) > 255)247:                     if ($c > 3 || preg_match('%[^0-9]%', $octets[$c]) || intval($octets[$c]) > 255)
216:                         message($lang_admin_bans['Invalid IP message']);248:                         message($lang_admin_bans['Invalid IP message']);
217:                 }249:                 }
218: 250: 
227:     require PUN_ROOT.'include/email.php';259:     require PUN_ROOT.'include/email.php';
228:     if ($ban_email != '' && !is_valid_email($ban_email))260:     if ($ban_email != '' && !is_valid_email($ban_email))
229:     {261:     {
230:         if (!preg_match('/^[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/', $ban_email))262:         if (!preg_match('%^[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$%', $ban_email))
231:             message($lang_admin_bans['Invalid e-mail message']);263:             message($lang_admin_bans['Invalid e-mail message']);
232:     }264:     }
233: 265: 
298:     $form = array_map('pun_trim', $form);330:     $form = array_map('pun_trim', $form);
299:     $conditions = $query_str = array();331:     $conditions = $query_str = array();
300: 332: 
301:     $expire_after = isset($_GET['expire_after']) ? trim($_GET['expire_after']) : '';333:     $expire_after = isset($_GET['expire_after']) ? pun_trim($_GET['expire_after']) : '';
302:     $expire_before = isset($_GET['expire_before']) ? trim($_GET['expire_before']) : '';334:     $expire_before = isset($_GET['expire_before']) ? pun_trim($_GET['expire_before']) : '';
303:     $order_by = isset($_GET['order_by']) && in_array($_GET['order_by'], array('username', 'ip', 'email', 'expire')) ? $_GET['order_by'] : 'username';335:     $order_by = isset($_GET['order_by']) && in_array($_GET['order_by'], array('username', 'ip', 'email', 'expire')) ? 'b.'.$_GET['order_by'] : 'b.username';
304:     $direction = isset($_GET['direction']) && $_GET['direction'] == 'DESC' ? 'DESC' : 'ASC';336:     $direction = isset($_GET['direction']) && $_GET['direction'] == 'DESC' ? 'DESC' : 'ASC';
305: 337: 
306:     $query_str[] = 'order_by='.$order_by;338:     $query_str[] = 'order_by='.$order_by;
315:         if ($expire_after === false || $expire_after == -1)347:         if ($expire_after === false || $expire_after == -1)
316:             message($lang_admin_bans['Invalid date message']);348:             message($lang_admin_bans['Invalid date message']);
317: 349: 
318:         $conditions[] = 'expire>'.$expire_after;350:         $conditions[] = 'b.expire>'.$expire_after;
319:     }351:     }
320:     if ($expire_before != '')352:     if ($expire_before != '')
321:     {353:     {
325:         if ($expire_before === false || $expire_before == -1)357:         if ($expire_before === false || $expire_before == -1)
326:             message($lang_admin_bans['Invalid date message']);358:             message($lang_admin_bans['Invalid date message']);
327: 359: 
328:         $conditions[] = 'expire<'.$expire_before;360:         $conditions[] = 'b.expire<'.$expire_before;
329:     }361:     }
330: 362: 
331:     $like_command = ($db_type == 'pgsql') ? 'ILIKE' : 'LIKE';363:     $like_command = ($db_type == 'pgsql') ? 'ILIKE' : 'LIKE';
403:                 <tr>435:                 <tr>
404:                     <td class="tcl"><?php echo ($ban_data['username'] != '') ? pun_htmlspecialchars($ban_data['username']) : '&#160;' ?></td>436:                     <td class="tcl"><?php echo ($ban_data['username'] != '') ? pun_htmlspecialchars($ban_data['username']) : '&#160;' ?></td>
405:                     <td class="tc2"><?php echo ($ban_data['email'] != '') ? $ban_data['email'] : '&#160;' ?></td>437:                     <td class="tc2"><?php echo ($ban_data['email'] != '') ? $ban_data['email'] : '&#160;' ?></td>
406:                     <td class="tc3"><?php echo ($ban_data['ip'] != '') ? $ban_data['ip'] : '&#160;' ?></td>438:                     <td class="tc3"><?php echo ($ban_data['ip'] != '') ? pun_htmlspecialchars($ban_data['ip']) : '&#160;' ?></td>
407:                     <td class="tc4"><?php echo $expire ?></td>439:                     <td class="tc4"><?php echo $expire ?></td>
408:                     <td class="tc5"><?php echo ($ban_data['message'] != '') ? pun_htmlspecialchars($ban_data['message']) : '&#160;' ?></td>440:                     <td class="tc5"><?php echo ($ban_data['message'] != '') ? pun_htmlspecialchars($ban_data['message']) : '&#160;' ?></td>
409:                     <td class="tc6"><?php echo ($ban_data['ban_creator_username'] != '') ? '<a href="profile.php?id='.$ban_data['ban_creator'].'">'.pun_htmlspecialchars($ban_data['ban_creator_username']).'</a>' : $lang_admin_bans['Unknown'] ?></td>441:                     <td class="tc6"><?php echo ($ban_data['ban_creator_username'] != '') ? '<a href="profile.php?id='.$ban_data['ban_creator'].'">'.pun_htmlspecialchars($ban_data['ban_creator_username']).'</a>' : $lang_admin_bans['Unknown'] ?></td>


a/admin_categories.php b/admin_categories.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if ($pun_user['g_id'] != PUN_ADMIN) 17: if ($pun_user['g_id'] != PUN_ADMIN)
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_categories.php language file 20: // Load the admin_categories.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_categories.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_categories.php';
126: {126: {
127:     confirm_referrer('admin_categories.php');127:     confirm_referrer('admin_categories.php');
128: 128: 
129:     $cat_order = array_map('trim', $_POST['cat_order']);129:     $categories = $_POST['cat'];
130:     $cat_name = array_map('pun_trim', $_POST['cat_name']);130:     if (empty($categories))
131: 131:         message($lang_common['Bad request']);
132:     $result = $db->query('SELECT id, disp_position FROM '.$db->prefix.'categories ORDER BY disp_position') or error('Unable to fetch category list', __FILE__, __LINE__, $db->error()); 
133:     $num_cats = $db->num_rows($result); 
134: 132: 
135:     for ($i = 0; $i < $num_cats; ++$i)133:     foreach ($categories as $cat_id => $cur_cat)
136:     {134:     {
137:         if ($cat_name[$i] == '')135:         $cur_cat['name'] = pun_trim($cur_cat['name']);
 136:         $cur_cat['order'] = pun_trim($cur_cat['order']);
 137: 
 138:         if ($cur_cat['name'] == '')
138:             message($lang_admin_categories['Must enter name message']);139:             message($lang_admin_categories['Must enter name message']);
139: 140: 
140:         if ($cat_order[$i] == '' || preg_match('/[^0-9]/', $cat_order[$i]))141:         if ($cur_cat['order'] == '' || preg_match('%[^0-9]%', $cur_cat['order']))
141:             message($lang_admin_categories['Must enter integer message']);142:             message($lang_admin_categories['Must enter integer message']);
142: 143: 
143:         list($cat_id, $position) = $db->fetch_row($result);144:         $db->query('UPDATE '.$db->prefix.'categories SET cat_name=\''.$db->escape($cur_cat['name']).'\', disp_position='.$cur_cat['order'].' WHERE id='.intval($cat_id)) or error('Unable to update category', __FILE__, __LINE__, $db->error());
144:  
145:         $db->query('UPDATE '.$db->prefix.'categories SET cat_name=\''.$db->escape($cat_name[$i]).'\', disp_position='.$cat_order[$i].' WHERE id='.$cat_id) or error('Unable to update category', __FILE__, __LINE__, $db->error()); 
146:     }145:     }
147: 146: 
148:     // Regenerate the quick jump cache147:     // Regenerate the quick jump cache
159: $num_cats = $db->num_rows($result);158: $num_cats = $db->num_rows($result);
160: 159: 
161: for ($i = 0; $i < $num_cats; ++$i)160: for ($i = 0; $i < $num_cats; ++$i)
162:     $cat_list[] = $db->fetch_row($result);161:     $cat_list[] = $db->fetch_assoc($result);
163: 162: 
164: $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Categories']);163: $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Categories']);
165: define('PUN_ACTIVE_PAGE', 'admin');164: define('PUN_ACTIVE_PAGE', 'admin');
171:     <div class="blockform">170:     <div class="blockform">
172:         <h2><span><?php echo $lang_admin_categories['Add categories head'] ?></span></h2>171:         <h2><span><?php echo $lang_admin_categories['Add categories head'] ?></span></h2>
173:         <div class="box">172:         <div class="box">
174:             <form method="post" action="admin_categories.php?action=foo">173:             <form method="post" action="admin_categories.php">
175:                 <div class="inform">174:                 <div class="inform">
176:                     <fieldset>175:                     <fieldset>
177:                         <legend><?php echo $lang_admin_categories['Add categories subhead'] ?></legend>176:                         <legend><?php echo $lang_admin_categories['Add categories subhead'] ?></legend>
193: 192: 
194: <?php if ($num_cats): ?>        <h2 class="block2"><span><?php echo $lang_admin_categories['Delete categories head'] ?></span></h2>193: <?php if ($num_cats): ?>        <h2 class="block2"><span><?php echo $lang_admin_categories['Delete categories head'] ?></span></h2>
195:         <div class="box">194:         <div class="box">
196:             <form method="post" action="admin_categories.php?action=foo">195:             <form method="post" action="admin_categories.php">
197:                 <div class="inform">196:                 <div class="inform">
198:                     <fieldset>197:                     <fieldset>
199:                         <legend><?php echo $lang_admin_categories['Delete categories subhead'] ?></legend>198:                         <legend><?php echo $lang_admin_categories['Delete categories subhead'] ?></legend>
205:                                         <select name="cat_to_delete" tabindex="3">204:                                         <select name="cat_to_delete" tabindex="3">
206: <?php205: <?php
207: 206: 
208:     foreach ($cat_list as $category)207:     foreach ($cat_list as $cur_cat)
209:         echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$category[0].'">'.pun_htmlspecialchars($category[1]).'</option>'."\n";208:         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";
210: 209: 
211: ?>210: ?>
212:                                         </select>211:                                         </select>
223: 222: 
224: <?php if ($num_cats): ?>        <h2 class="block2"><span><?php echo $lang_admin_categories['Edit categories head'] ?></span></h2>223: <?php if ($num_cats): ?>        <h2 class="block2"><span><?php echo $lang_admin_categories['Edit categories head'] ?></span></h2>
225:         <div class="box">224:         <div class="box">
226:             <form method="post" action="admin_categories.php?action=foo">225:             <form method="post" action="admin_categories.php">
227:                 <div class="inform">226:                 <div class="inform">
228:                     <fieldset>227:                     <fieldset>
229:                         <legend><?php echo $lang_admin_categories['Edit categories subhead'] ?></legend>228:                         <legend><?php echo $lang_admin_categories['Edit categories subhead'] ?></legend>
238:                             <tbody>237:                             <tbody>
239: <?php238: <?php
240: 239: 
241:     foreach ($cat_list as $i => $category)240:     foreach ($cat_list as $cur_cat)
242:     {241:     {
243: 242: 
244: ?>243: ?>
245:                                 <tr>244:                                 <tr>
246:                                     <td class="tcl"><input type="text" name="cat_name[<?php echo $i ?>]" value="<?php echo pun_htmlspecialchars($category[1]) ?>" size="35" maxlength="80" /></td>245:                                     <td class="tcl"><input type="text" name="cat[<?php echo $cur_cat['id'] ?>][name]" value="<?php echo pun_htmlspecialchars($cur_cat['cat_name']) ?>" size="35" maxlength="80" /></td>
247:                                     <td><input type="text" name="cat_order[<?php echo $i ?>]" value="<?php echo $category[2] ?>" size="3" maxlength="3" /></td>246:                                     <td><input type="text" name="cat[<?php echo $cur_cat['id'] ?>][order]" value="<?php echo $cur_cat['disp_position'] ?>" size="3" maxlength="3" /></td>
248:                                 </tr>247:                                 </tr>
249: <?php248: <?php
250: 249: 


a/admin_censoring.php b/admin_censoring.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if (!$pun_user['is_admmod']) 17: if ($pun_user['g_id'] != PUN_ADMIN)
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_censoring.php language file 20: // Load the admin_censoring.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_censoring.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_censoring.php';
 28:     $search_for = pun_trim($_POST['new_search_for']); 28:     $search_for = pun_trim($_POST['new_search_for']);
 29:     $replace_with = pun_trim($_POST['new_replace_with']); 29:     $replace_with = pun_trim($_POST['new_replace_with']);
 30:  30: 
 31:     if ($search_for == '' || $replace_with == '') 31:     if ($search_for == '')
 32:         message($lang_admin_censoring['Must enter both message']); 32:         message($lang_admin_censoring['Must enter word message']);
 33:  33: 
 34:     $db->query('INSERT INTO '.$db->prefix.'censoring (search_for, replace_with) VALUES (\''.$db->escape($search_for).'\', \''.$db->escape($replace_with).'\')') or error('Unable to add censor word', __FILE__, __LINE__, $db->error()); 34:     $db->query('INSERT INTO '.$db->prefix.'censoring (search_for, replace_with) VALUES (\''.$db->escape($search_for).'\', \''.$db->escape($replace_with).'\')') or error('Unable to add censor word', __FILE__, __LINE__, $db->error());
 35:  35: 
  36:     // Regenerate the censoring cache
  37:     if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
  38:         require PUN_ROOT.'include/cache.php';
  39: 
  40:     generate_censoring_cache();
  41: 
 36:     redirect('admin_censoring.php', $lang_admin_censoring['Word added redirect']); 42:     redirect('admin_censoring.php', $lang_admin_censoring['Word added redirect']);
 37: } 43: }
 38:  44: 
 46:     $search_for = pun_trim($_POST['search_for'][$id]); 52:     $search_for = pun_trim($_POST['search_for'][$id]);
 47:     $replace_with = pun_trim($_POST['replace_with'][$id]); 53:     $replace_with = pun_trim($_POST['replace_with'][$id]);
 48:  54: 
 49:     if ($search_for == '' || $replace_with == '') 55:     if ($search_for == '')
 50:         message($lang_admin_censoring['Must search both message']); 56:         message($lang_admin_censoring['Must enter word message']);
 51:  57: 
 52:     $db->query('UPDATE '.$db->prefix.'censoring SET search_for=\''.$db->escape($search_for).'\', replace_with=\''.$db->escape($replace_with).'\' WHERE id='.$id) or error('Unable to update censor word', __FILE__, __LINE__, $db->error()); 58:     $db->query('UPDATE '.$db->prefix.'censoring SET search_for=\''.$db->escape($search_for).'\', replace_with=\''.$db->escape($replace_with).'\' WHERE id='.$id) or error('Unable to update censor word', __FILE__, __LINE__, $db->error());
 53:  59: 
  60:     // Regenerate the censoring cache
  61:     if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
  62:         require PUN_ROOT.'include/cache.php';
  63: 
  64:     generate_censoring_cache();
  65: 
 54:     redirect('admin_censoring.php', $lang_admin_censoring['Word updated redirect']); 66:     redirect('admin_censoring.php', $lang_admin_censoring['Word updated redirect']);
 55: } 67: }
 56:  68: 
 63:  75: 
 64:     $db->query('DELETE FROM '.$db->prefix.'censoring WHERE id='.$id) or error('Unable to delete censor word', __FILE__, __LINE__, $db->error()); 76:     $db->query('DELETE FROM '.$db->prefix.'censoring WHERE id='.$id) or error('Unable to delete censor word', __FILE__, __LINE__, $db->error());
 65:  77: 
  78:     // Regenerate the censoring cache
  79:     if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
  80:         require PUN_ROOT.'include/cache.php';
  81: 
  82:     generate_censoring_cache();
  83: 
 66:     redirect('admin_censoring.php',  $lang_admin_censoring['Word removed redirect']); 84:     redirect('admin_censoring.php',  $lang_admin_censoring['Word removed redirect']);
 67: } 85: }
 68:  86: 
 77:     <div class="blockform"> 95:     <div class="blockform">
 78:         <h2><span><?php echo $lang_admin_censoring['Censoring head'] ?></span></h2> 96:         <h2><span><?php echo $lang_admin_censoring['Censoring head'] ?></span></h2>
 79:         <div class="box"> 97:         <div class="box">
 80:             <form id="censoring" method="post" action="admin_censoring.php?action=foo"> 98:             <form id="censoring" method="post" action="admin_censoring.php">
 81:                 <div class="inform"> 99:                 <div class="inform">
 82:                     <fieldset>100:                     <fieldset>
 83:                         <legend><?php echo $lang_admin_censoring['Add word subhead'] ?></legend>101:                         <legend><?php echo $lang_admin_censoring['Add word subhead'] ?></legend>
 84:                         <div class="infldset">102:                         <div class="infldset">
 85:                             <p><?php printf($lang_admin_censoring['Add word info'], '<a href="admin_options.php#censoring">'.$lang_admin_common['Options'].'</a>') ?></p>103:                             <p><?php echo $lang_admin_censoring['Add word info'].' '.($pun_config['o_censoring'] == '1' ? sprintf($lang_admin_censoring['Censoring enabled'], '<a href="admin_options.php#censoring">'.$lang_admin_common['Options'].'</a>') : sprintf($lang_admin_censoring['Censoring disabled'], '<a href="admin_options.php#censoring">'.$lang_admin_common['Options'].'</a>')) ?></p>
 86:                             <table cellspacing="0">104:                             <table cellspacing="0">
 87:                             <thead>105:                             <thead>
 88:                                 <tr>106:                                 <tr>


a/admin_forums.php b/admin_forums.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if ($pun_user['g_id'] != PUN_ADMIN) 17: if ($pun_user['g_id'] != PUN_ADMIN)
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_forums.php language file 20: // Load the admin_forums.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_forums.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_forums.php';
 29:     if ($add_to_cat < 1) 29:     if ($add_to_cat < 1)
 30:         message($lang_common['Bad request']); 30:         message($lang_common['Bad request']);
 31:  31: 
 32:     $db->query('INSERT INTO '.$db->prefix.'forums (cat_id) VALUES('.$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: 
 34:     // Regenerate the quick jump cache 34:     // Regenerate the quick jump cache
 35:     if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) 35:     if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
 72:         $db->query('DELETE FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to delete forum', __FILE__, __LINE__, $db->error()); 72:         $db->query('DELETE FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to delete forum', __FILE__, __LINE__, $db->error());
 73:         $db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE forum_id='.$forum_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error()); 73:         $db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE forum_id='.$forum_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());
 74:  74: 
  75:         // Delete any subscriptions for this forum
  76:         $db->query('DELETE FROM '.$db->prefix.'forum_subscriptions WHERE forum_id='.$forum_id) or error('Unable to delete subscriptions', __FILE__, __LINE__, $db->error());
  77: 
 75:         // Regenerate the quick jump cache 78:         // Regenerate the quick jump cache
 76:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) 79:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
 77:             require PUN_ROOT.'include/cache.php'; 80:             require PUN_ROOT.'include/cache.php';
125:     foreach ($_POST['position'] as $forum_id => $disp_position)128:     foreach ($_POST['position'] as $forum_id => $disp_position)
126:     {129:     {
127:         $disp_position = trim($disp_position);130:         $disp_position = trim($disp_position);
128:         if ($disp_position == '' || preg_match('/[^0-9]/', $disp_position))131:         if ($disp_position == '' || preg_match('%[^0-9]%', $disp_position))
129:             message($lang_admin_forums['Must be integer message']);132:             message($lang_admin_forums['Must be integer message']);
130: 133: 
131:         $db->query('UPDATE '.$db->prefix.'forums SET disp_position='.$disp_position.' WHERE id='.intval($forum_id)) or error('Unable to update forum', __FILE__, __LINE__, $db->error());134:         $db->query('UPDATE '.$db->prefix.'forums SET disp_position='.$disp_position.' WHERE id='.intval($forum_id)) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
156:         $forum_desc = pun_linebreaks(pun_trim($_POST['forum_desc']));159:         $forum_desc = pun_linebreaks(pun_trim($_POST['forum_desc']));
157:         $cat_id = intval($_POST['cat_id']);160:         $cat_id = intval($_POST['cat_id']);
158:         $sort_by = intval($_POST['sort_by']);161:         $sort_by = intval($_POST['sort_by']);
159:         $redirect_url = isset($_POST['redirect_url']) ? trim($_POST['redirect_url']) : null;162:         $redirect_url = isset($_POST['redirect_url']) ? pun_trim($_POST['redirect_url']) : null;
160: 163: 
161:         if ($forum_name == '')164:         if ($forum_name == '')
162:             message($lang_admin_forums['Must enter name message']);165:             message($lang_admin_forums['Must enter name message']);
274:                                         <select name="sort_by" tabindex="4">277:                                         <select name="sort_by" tabindex="4">
275:                                             <option value="0"<?php if ($cur_forum['sort_by'] == '0') echo ' selected="selected"' ?>><?php echo $lang_admin_forums['Last post'] ?></option>278:                                             <option value="0"<?php if ($cur_forum['sort_by'] == '0') echo ' selected="selected"' ?>><?php echo $lang_admin_forums['Last post'] ?></option>
276:                                             <option value="1"<?php if ($cur_forum['sort_by'] == '1') echo ' selected="selected"' ?>><?php echo $lang_admin_forums['Topic start'] ?></option>279:                                             <option value="1"<?php if ($cur_forum['sort_by'] == '1') echo ' selected="selected"' ?>><?php echo $lang_admin_forums['Topic start'] ?></option>
 280:                                             <option value="2"<?php if ($cur_forum['sort_by'] == '2') echo ' selected="selected"' ?>><?php echo $lang_admin_forums['Subject'] ?></option>
277:                                         </select>281:                                         </select>
278:                                     </td>282:                                     </td>
279:                                 </tr>283:                                 </tr>
304: 308: 
305:     $result = $db->query('SELECT g.g_id, g.g_title, g.g_read_board, g.g_post_replies, g.g_post_topics, fp.read_forum, fp.post_replies, fp.post_topics FROM '.$db->prefix.'groups AS g LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (g.g_id=fp.group_id AND fp.forum_id='.$forum_id.') WHERE g.g_id!='.PUN_ADMIN.' ORDER BY g.g_id') or error('Unable to fetch group forum permission list', __FILE__, __LINE__, $db->error());309:     $result = $db->query('SELECT g.g_id, g.g_title, g.g_read_board, g.g_post_replies, g.g_post_topics, fp.read_forum, fp.post_replies, fp.post_topics FROM '.$db->prefix.'groups AS g LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (g.g_id=fp.group_id AND fp.forum_id='.$forum_id.') WHERE g.g_id!='.PUN_ADMIN.' ORDER BY g.g_id') or error('Unable to fetch group forum permission list', __FILE__, __LINE__, $db->error());
306: 310: 
 311:     $cur_index = 7;
 312: 
307:     while ($cur_perm = $db->fetch_assoc($result))313:     while ($cur_perm = $db->fetch_assoc($result))
308:     {314:     {
309:         $read_forum = ($cur_perm['read_forum'] != '0') ? true : false;315:         $read_forum = ($cur_perm['read_forum'] != '0') ? true : false;
320:                                     <th class="atcl"><?php echo pun_htmlspecialchars($cur_perm['g_title']) ?></th>326:                                     <th class="atcl"><?php echo pun_htmlspecialchars($cur_perm['g_title']) ?></th>
321:                                     <td<?php if (!$read_forum_def) echo ' class="nodefault"'; ?>>327:                                     <td<?php if (!$read_forum_def) echo ' class="nodefault"'; ?>>
322:                                         <input type="hidden" name="read_forum_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($read_forum) ? '1' : '0'; ?>" />328:                                         <input type="hidden" name="read_forum_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($read_forum) ? '1' : '0'; ?>" />
323:                                         <input type="checkbox" name="read_forum_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($read_forum) ? ' checked="checked"' : ''; ?><?php echo ($cur_perm['g_read_board'] == '0') ? ' disabled="disabled"' : ''; ?> />329:                                         <input type="checkbox" name="read_forum_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($read_forum) ? ' checked="checked"' : ''; ?><?php echo ($cur_perm['g_read_board'] == '0') ? ' disabled="disabled"' : ''; ?> tabindex="<?php echo $cur_index++ ?>" />
324:                                     </td>330:                                     </td>
325:                                     <td<?php if (!$post_replies_def && $cur_forum['redirect_url'] == '') echo ' class="nodefault"'; ?>>331:                                     <td<?php if (!$post_replies_def && $cur_forum['redirect_url'] == '') echo ' class="nodefault"'; ?>>
326:                                         <input type="hidden" name="post_replies_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($post_replies) ? '1' : '0'; ?>" />332:                                         <input type="hidden" name="post_replies_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($post_replies) ? '1' : '0'; ?>" />
327:                                         <input type="checkbox" name="post_replies_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($post_replies) ? ' checked="checked"' : ''; ?><?php echo ($cur_forum['redirect_url'] != '') ? ' disabled="disabled"' : ''; ?> />333:                                         <input type="checkbox" name="post_replies_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($post_replies) ? ' checked="checked"' : ''; ?><?php echo ($cur_forum['redirect_url'] != '') ? ' disabled="disabled"' : ''; ?> tabindex="<?php echo $cur_index++ ?>" />
328:                                     </td>334:                                     </td>
329:                                     <td<?php if (!$post_topics_def && $cur_forum['redirect_url'] == '') echo ' class="nodefault"'; ?>>335:                                     <td<?php if (!$post_topics_def && $cur_forum['redirect_url'] == '') echo ' class="nodefault"'; ?>>
330:                                         <input type="hidden" name="post_topics_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($post_topics) ? '1' : '0'; ?>" />336:                                         <input type="hidden" name="post_topics_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($post_topics) ? '1' : '0'; ?>" />
331:                                         <input type="checkbox" name="post_topics_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($post_topics) ? ' checked="checked"' : ''; ?><?php echo ($cur_forum['redirect_url'] != '') ? ' disabled="disabled"' : ''; ?> />337:                                         <input type="checkbox" name="post_topics_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($post_topics) ? ' checked="checked"' : ''; ?><?php echo ($cur_forum['redirect_url'] != '') ? ' disabled="disabled"' : ''; ?> tabindex="<?php echo $cur_index++ ?>" />
332:                                     </td>338:                                     </td>
333:                                 </tr>339:                                 </tr>
334: <?php340: <?php
338: ?>344: ?>
339:                             </tbody>345:                             </tbody>
340:                             </table>346:                             </table>
341:                             <div class="fsetsubmit"><input type="submit" name="revert_perms" value="<?php echo $lang_admin_forums['Revert to default'] ?>" /></div>347:                             <div class="fsetsubmit"><input type="submit" name="revert_perms" value="<?php echo $lang_admin_forums['Revert to default'] ?>" tabindex="<?php echo $cur_index++ ?>" /></div>
342:                         </div>348:                         </div>
343:                     </fieldset>349:                     </fieldset>
344:                 </div>350:                 </div>
345:                 <p class="submitend"><input type="submit" name="save" value="<?php echo $lang_admin_common['Save changes'] ?>" /></p>351:                 <p class="submitend"><input type="submit" name="save" value="<?php echo $lang_admin_common['Save changes'] ?>" tabindex="<?php echo $cur_index++ ?>" /></p>
346:             </form>352:             </form>
347:         </div>353:         </div>
348:     </div>354:     </div>
411:                 <p class="submittop"><input type="submit" name="update_positions" value="<?php echo $lang_admin_forums['Update positions'] ?>" tabindex="3" /></p>417:                 <p class="submittop"><input type="submit" name="update_positions" value="<?php echo $lang_admin_forums['Update positions'] ?>" tabindex="3" /></p>
412: <?php418: <?php
413: 419: 
414: $tabindex_count = 4;420: $cur_index = 4;
415: 421: 
416: $cur_category = 0;422: $cur_category = 0;
417: while ($cur_forum = $db->fetch_assoc($result))423: while ($cur_forum = $db->fetch_assoc($result))
442: 448: 
443: ?>449: ?>
444:                                 <tr>450:                                 <tr>
445:                                     <td class="tcl"><a href="admin_forums.php?edit_forum=<?php echo $cur_forum['fid'] ?>"><?php echo $lang_admin_forums['Edit link'] ?></a> | <a href="admin_forums.php?del_forum=<?php echo $cur_forum['fid'] ?>"><?php echo $lang_admin_forums['Delete link'] ?></a></td>451:                                     <td class="tcl"><a href="admin_forums.php?edit_forum=<?php echo $cur_forum['fid'] ?>" tabindex="<?php echo $cur_index++ ?>"><?php echo $lang_admin_forums['Edit link'] ?></a> | <a href="admin_forums.php?del_forum=<?php echo $cur_forum['fid'] ?>" tabindex="<?php echo $cur_index++ ?>"><?php echo $lang_admin_forums['Delete link'] ?></a></td>
446:                                     <td class="tc2"><input type="text" name="position[<?php echo $cur_forum['fid'] ?>]" size="3" maxlength="3" value="<?php echo $cur_forum['disp_position'] ?>" tabindex="<?php echo $tabindex_count ?>" /></td>452:                                     <td class="tc2"><input type="text" name="position[<?php echo $cur_forum['fid'] ?>]" size="3" maxlength="3" value="<?php echo $cur_forum['disp_position'] ?>" tabindex="<?php echo $cur_index++ ?>" /></td>
447:                                     <td class="tcr"><strong><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></strong></td>453:                                     <td class="tcr"><strong><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></strong></td>
448:                                 </tr>454:                                 </tr>
449: <?php455: <?php
450: 456: 
451:     $tabindex_count += 2; 
452: }457: }
453: 458: 
454: ?>459: ?>
457:                         </div>462:                         </div>
458:                     </fieldset>463:                     </fieldset>
459:                 </div>464:                 </div>
460:                 <p class="submitend"><input type="submit" name="update_positions" value="<?php echo $lang_admin_forums['Update positions'] ?>" tabindex="<?php echo $tabindex_count ?>" /></p>465:                 <p class="submitend"><input type="submit" name="update_positions" value="<?php echo $lang_admin_forums['Update positions'] ?>" tabindex="<?php echo $cur_index++ ?>" /></p>
461:             </form>466:             </form>
462:         </div>467:         </div>
463: <?php468: <?php


a/admin_groups.php b/admin_groups.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if ($pun_user['g_id'] != PUN_ADMIN) 17: if ($pun_user['g_id'] != PUN_ADMIN)
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_censoring.php language file 20: // Load the admin_censoring.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_groups.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_groups.php';
101:                                 <tr>101:                                 <tr>
102:                                     <th scope="row"><?php echo $lang_admin_groups['Rename users label'] ?></th>102:                                     <th scope="row"><?php echo $lang_admin_groups['Rename users label'] ?></th>
103:                                     <td>103:                                     <td>
104:                                         <input type="radio" name="mod_rename_users" value="1"<?php if ($group['g_mod_rename_users'] == '1') echo ' checked="checked"' ?> tabindex="5" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="mod_rename_users" value="0"<?php if ($group['g_mod_rename_users'] == '0') echo ' checked="checked"' ?> tabindex="6" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>104:                                         <input type="radio" name="mod_rename_users" value="1"<?php if ($group['g_mod_rename_users'] == '1') echo ' checked="checked"' ?> tabindex="7" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="mod_rename_users" value="0"<?php if ($group['g_mod_rename_users'] == '0') echo ' checked="checked"' ?> tabindex="8" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
105:                                         <span><?php echo $lang_admin_groups['Rename users help'] ?></span>105:                                         <span><?php echo $lang_admin_groups['Rename users help'] ?></span>
106:                                     </td>106:                                     </td>
107:                                 </tr>107:                                 </tr>
108:                                 <tr>108:                                 <tr>
109:                                     <th scope="row"><?php echo $lang_admin_groups['Change passwords label'] ?></th>109:                                     <th scope="row"><?php echo $lang_admin_groups['Change passwords label'] ?></th>
110:                                     <td>110:                                     <td>
111:                                         <input type="radio" name="mod_change_passwords" value="1"<?php if ($group['g_mod_change_passwords'] == '1') echo ' checked="checked"' ?> tabindex="5" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="mod_change_passwords" value="0"<?php if ($group['g_mod_change_passwords'] == '0') echo ' checked="checked"' ?> tabindex="6" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>111:                                         <input type="radio" name="mod_change_passwords" value="1"<?php if ($group['g_mod_change_passwords'] == '1') echo ' checked="checked"' ?> tabindex="9" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="mod_change_passwords" value="0"<?php if ($group['g_mod_change_passwords'] == '0') echo ' checked="checked"' ?> tabindex="10" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
112:                                         <span><?php echo $lang_admin_groups['Change passwords help'] ?></span>112:                                         <span><?php echo $lang_admin_groups['Change passwords help'] ?></span>
113:                                     </td>113:                                     </td>
114:                                 </tr>114:                                 </tr>
115:                                 <tr>115:                                 <tr>
116:                                     <th scope="row"><?php echo $lang_admin_groups['Ban users label'] ?></th>116:                                     <th scope="row"><?php echo $lang_admin_groups['Ban users label'] ?></th>
117:                                     <td>117:                                     <td>
118:                                         <input type="radio" name="mod_ban_users" value="1"<?php if ($group['g_mod_ban_users'] == '1') echo ' checked="checked"' ?> tabindex="5" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="mod_ban_users" value="0"<?php if ($group['g_mod_ban_users'] == '0') echo ' checked="checked"' ?> tabindex="6" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>118:                                         <input type="radio" name="mod_ban_users" value="1"<?php if ($group['g_mod_ban_users'] == '1') echo ' checked="checked"' ?> tabindex="11" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="mod_ban_users" value="0"<?php if ($group['g_mod_ban_users'] == '0') echo ' checked="checked"' ?> tabindex="12" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
119:                                         <span><?php echo $lang_admin_groups['Ban users help'] ?></span>119:                                         <span><?php echo $lang_admin_groups['Ban users help'] ?></span>
120:                                     </td>120:                                     </td>
121:                                 </tr>121:                                 </tr>
122: <?php endif; endif; ?>                                <tr>122: <?php endif; endif; ?>                                <tr>
123:                                     <th scope="row"><?php echo $lang_admin_groups['Read board label'] ?></th>123:                                     <th scope="row"><?php echo $lang_admin_groups['Read board label'] ?></th>
124:                                     <td>124:                                     <td>
125:                                         <input type="radio" name="read_board" value="1"<?php if ($group['g_read_board'] == '1') echo ' checked="checked"' ?> tabindex="3" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="read_board" value="0"<?php if ($group['g_read_board'] == '0') echo ' checked="checked"' ?> tabindex="4" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>125:                                         <input type="radio" name="read_board" value="1"<?php if ($group['g_read_board'] == '1') echo ' checked="checked"' ?> tabindex="13" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="read_board" value="0"<?php if ($group['g_read_board'] == '0') echo ' checked="checked"' ?> tabindex="14" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
126:                                         <span><?php echo $lang_admin_groups['Read board help'] ?></span>126:                                         <span><?php echo $lang_admin_groups['Read board help'] ?></span>
127:                                     </td>127:                                     </td>
128:                                 </tr>128:                                 </tr>
129:                                 <tr>129:                                 <tr>
130:                                     <th scope="row"><?php echo $lang_admin_groups['View user info label'] ?></th>130:                                     <th scope="row"><?php echo $lang_admin_groups['View user info label'] ?></th>
131:                                     <td>131:                                     <td>
132:                                         <input type="radio" name="view_users" value="1"<?php if ($group['g_view_users'] == '1') echo ' checked="checked"' ?> tabindex="3" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="view_users" value="0"<?php if ($group['g_view_users'] == '0') echo ' checked="checked"' ?> tabindex="4" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>132:                                         <input type="radio" name="view_users" value="1"<?php if ($group['g_view_users'] == '1') echo ' checked="checked"' ?> tabindex="15" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="view_users" value="0"<?php if ($group['g_view_users'] == '0') echo ' checked="checked"' ?> tabindex="16" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
133:                                         <span><?php echo $lang_admin_groups['View user info help'] ?></span>133:                                         <span><?php echo $lang_admin_groups['View user info help'] ?></span>
134:                                     </td>134:                                     </td>
135:                                 </tr>135:                                 </tr>
136:                                 <tr>136:                                 <tr>
137:                                     <th scope="row"><?php echo $lang_admin_groups['Post replies label'] ?></th>137:                                     <th scope="row"><?php echo $lang_admin_groups['Post replies label'] ?></th>
138:                                     <td>138:                                     <td>
139:                                         <input type="radio" name="post_replies" value="1"<?php if ($group['g_post_replies'] == '1') echo ' checked="checked"' ?> tabindex="5" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="post_replies" value="0"<?php if ($group['g_post_replies'] == '0') echo ' checked="checked"' ?> tabindex="6" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>139:                                         <input type="radio" name="post_replies" value="1"<?php if ($group['g_post_replies'] == '1') echo ' checked="checked"' ?> tabindex="17" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="post_replies" value="0"<?php if ($group['g_post_replies'] == '0') echo ' checked="checked"' ?> tabindex="18" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
140:                                         <span><?php echo $lang_admin_groups['Post replies help'] ?></span>140:                                         <span><?php echo $lang_admin_groups['Post replies help'] ?></span>
141:                                     </td>141:                                     </td>
142:                                 </tr>142:                                 </tr>
143:                                 <tr>143:                                 <tr>
144:                                     <th scope="row"><?php echo $lang_admin_groups['Post topics label'] ?></th>144:                                     <th scope="row"><?php echo $lang_admin_groups['Post topics label'] ?></th>
145:                                     <td>145:                                     <td>
146:                                         <input type="radio" name="post_topics" value="1"<?php if ($group['g_post_topics'] == '1') echo ' checked="checked"' ?> tabindex="7" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="post_topics" value="0"<?php if ($group['g_post_topics'] == '0') echo ' checked="checked"' ?> tabindex="8" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>146:                                         <input type="radio" name="post_topics" value="1"<?php if ($group['g_post_topics'] == '1') echo ' checked="checked"' ?> tabindex="19" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="post_topics" value="0"<?php if ($group['g_post_topics'] == '0') echo ' checked="checked"' ?> tabindex="20" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
147:                                         <span><?php echo $lang_admin_groups['Post topics help'] ?></span>147:                                         <span><?php echo $lang_admin_groups['Post topics help'] ?></span>
148:                                     </td>148:                                     </td>
149:                                 </tr>149:                                 </tr>
150: <?php if ($group['g_id'] != PUN_GUEST): ?>                                <tr>150: <?php if ($group['g_id'] != PUN_GUEST): ?>                                <tr>
151:                                     <th scope="row"><?php echo $lang_admin_groups['Edit posts label'] ?></th>151:                                     <th scope="row"><?php echo $lang_admin_groups['Edit posts label'] ?></th>
152:                                     <td>152:                                     <td>
153:                                         <input type="radio" name="edit_posts" value="1"<?php if ($group['g_edit_posts'] == '1') echo ' checked="checked"' ?> tabindex="11" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="edit_posts" value="0"<?php if ($group['g_edit_posts'] == '0') echo ' checked="checked"' ?> tabindex="12" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>153:                                         <input type="radio" name="edit_posts" value="1"<?php if ($group['g_edit_posts'] == '1') echo ' checked="checked"' ?> tabindex="21" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="edit_posts" value="0"<?php if ($group['g_edit_posts'] == '0') echo ' checked="checked"' ?> tabindex="22" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
154:                                         <span><?php echo $lang_admin_groups['Edit posts help'] ?></span>154:                                         <span><?php echo $lang_admin_groups['Edit posts help'] ?></span>
155:                                     </td>155:                                     </td>
156:                                 </tr>156:                                 </tr>
157:                                 <tr>157:                                 <tr>
158:                                     <th scope="row"><?php echo $lang_admin_groups['Delete posts label'] ?></th>158:                                     <th scope="row"><?php echo $lang_admin_groups['Delete posts label'] ?></th>
159:                                     <td>159:                                     <td>
160:                                         <input type="radio" name="delete_posts" value="1"<?php if ($group['g_delete_posts'] == '1') echo ' checked="checked"' ?> tabindex="13" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="delete_posts" value="0"<?php if ($group['g_delete_posts'] == '0') echo ' checked="checked"' ?> tabindex="14" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>160:                                         <input type="radio" name="delete_posts" value="1"<?php if ($group['g_delete_posts'] == '1') echo ' checked="checked"' ?> tabindex="23" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="delete_posts" value="0"<?php if ($group['g_delete_posts'] == '0') echo ' checked="checked"' ?> tabindex="24" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
161:                                         <span><?php echo $lang_admin_groups['Delete posts help'] ?></span>161:                                         <span><?php echo $lang_admin_groups['Delete posts help'] ?></span>
162:                                     </td>162:                                     </td>
163:                                 </tr>163:                                 </tr>
164:                                 <tr>164:                                 <tr>
165:                                     <th scope="row"><?php echo $lang_admin_groups['Delete topics label'] ?></th>165:                                     <th scope="row"><?php echo $lang_admin_groups['Delete topics label'] ?></th>
166:                                     <td>166:                                     <td>
167:                                         <input type="radio" name="delete_topics" value="1"<?php if ($group['g_delete_topics'] == '1') echo ' checked="checked"' ?> tabindex="15" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="delete_topics" value="0"<?php if ($group['g_delete_topics'] == '0') echo ' checked="checked"' ?> tabindex="16" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>167:                                         <input type="radio" name="delete_topics" value="1"<?php if ($group['g_delete_topics'] == '1') echo ' checked="checked"' ?> tabindex="25" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="delete_topics" value="0"<?php if ($group['g_delete_topics'] == '0') echo ' checked="checked"' ?> tabindex="26" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
168:                                         <span><?php echo $lang_admin_groups['Delete topics help'] ?></span>168:                                         <span><?php echo $lang_admin_groups['Delete topics help'] ?></span>
169:                                     </td>169:                                     </td>
170:                                 </tr>170:                                 </tr>
171:                                 <tr>171:                                 <tr>
172:                                     <th scope="row"><?php echo $lang_admin_groups['Set own title label'] ?></th>172:                                     <th scope="row"><?php echo $lang_admin_groups['Set own title label'] ?></th>
173:                                     <td>173:                                     <td>
174:                                         <input type="radio" name="set_title" value="1"<?php if ($group['g_set_title'] == '1') echo ' checked="checked"' ?> tabindex="17" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="set_title" value="0"<?php if ($group['g_set_title'] == '0') echo ' checked="checked"' ?> tabindex="18" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>174:                                         <input type="radio" name="set_title" value="1"<?php if ($group['g_set_title'] == '1') echo ' checked="checked"' ?> tabindex="27" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="set_title" value="0"<?php if ($group['g_set_title'] == '0') echo ' checked="checked"' ?> tabindex="28" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
175:                                         <span><?php echo $lang_admin_groups['Set own title help'] ?></span>175:                                         <span><?php echo $lang_admin_groups['Set own title help'] ?></span>
176:                                     </td>176:                                     </td>
177:                                 </tr>177:                                 </tr>
178: <?php endif; ?>                                <tr>178: <?php endif; ?>                                <tr>
179:                                     <th scope="row"><?php echo $lang_admin_groups['User search label'] ?></th>179:                                     <th scope="row"><?php echo $lang_admin_groups['User search label'] ?></th>
180:                                     <td>180:                                     <td>
181:                                         <input type="radio" name="search" value="1"<?php if ($group['g_search'] == '1') echo ' checked="checked"' ?> tabindex="19" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="search" value="0"<?php if ($group['g_search'] == '0') echo ' checked="checked"' ?> tabindex="20" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>181:                                         <input type="radio" name="search" value="1"<?php if ($group['g_search'] == '1') echo ' checked="checked"' ?> tabindex="29" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="search" value="0"<?php if ($group['g_search'] == '0') echo ' checked="checked"' ?> tabindex="30" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
182:                                         <span><?php echo $lang_admin_groups['User search help'] ?></span>182:                                         <span><?php echo $lang_admin_groups['User search help'] ?></span>
183:                                     </td>183:                                     </td>
184:                                 </tr>184:                                 </tr>
185:                                 <tr>185:                                 <tr>
186:                                     <th scope="row"><?php echo $lang_admin_groups['User list search label'] ?></th>186:                                     <th scope="row"><?php echo $lang_admin_groups['User list search label'] ?></th>
187:                                     <td>187:                                     <td>
188:                                         <input type="radio" name="search_users" value="1"<?php if ($group['g_search_users'] == '1') echo ' checked="checked"' ?> tabindex="21" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="search_users" value="0"<?php if ($group['g_search_users'] == '0') echo ' checked="checked"' ?> tabindex="22" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>188:                                         <input type="radio" name="search_users" value="1"<?php if ($group['g_search_users'] == '1') echo ' checked="checked"' ?> tabindex="31" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="search_users" value="0"<?php if ($group['g_search_users'] == '0') echo ' checked="checked"' ?> tabindex="32" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
189:                                         <span><?php echo $lang_admin_groups['User list search help'] ?></span>189:                                         <span><?php echo $lang_admin_groups['User list search help'] ?></span>
190:                                     </td>190:                                     </td>
191:                                 </tr>191:                                 </tr>
192: <?php if ($group['g_id'] != PUN_GUEST): ?>                                <tr>192: <?php if ($group['g_id'] != PUN_GUEST): ?>                                <tr>
193:                                     <th scope="row"><?php echo $lang_admin_groups['Send e-mails label'] ?></th>193:                                     <th scope="row"><?php echo $lang_admin_groups['Send e-mails label'] ?></th>
194:                                     <td>194:                                     <td>
195:                                         <input type="radio" name="send_email" value="1"<?php if ($group['g_send_email'] == '1') echo ' checked="checked"' ?> tabindex="21" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="send_email" value="0"<?php if ($group['g_send_email'] == '0') echo ' checked="checked"' ?> tabindex="22" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>195:                                         <input type="radio" name="send_email" value="1"<?php if ($group['g_send_email'] == '1') echo ' checked="checked"' ?> tabindex="33" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="send_email" value="0"<?php if ($group['g_send_email'] == '0') echo ' checked="checked"' ?> tabindex="34" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
196:                                         <span><?php echo $lang_admin_groups['Send e-mails help'] ?></span>196:                                         <span><?php echo $lang_admin_groups['Send e-mails help'] ?></span>
197:                                     </td>197:                                     </td>
198:                                 </tr>198:                                 </tr>
199: <?php endif; ?>                                <tr>199: <?php endif; ?>                                <tr>
200:                                     <th scope="row"><?php echo $lang_admin_groups['Post flood label'] ?></th>200:                                     <th scope="row"><?php echo $lang_admin_groups['Post flood label'] ?></th>
201:                                     <td>201:                                     <td>
202:                                         <input type="text" name="post_flood" size="5" maxlength="4" value="<?php echo $group['g_post_flood'] ?>" tabindex="24" />202:                                         <input type="text" name="post_flood" size="5" maxlength="4" value="<?php echo $group['g_post_flood'] ?>" tabindex="35" />
203:                                         <span><?php echo $lang_admin_groups['Post flood help'] ?></span>203:                                         <span><?php echo $lang_admin_groups['Post flood help'] ?></span>
204:                                     </td>204:                                     </td>
205:                                 </tr>205:                                 </tr>
206:                                 <tr>206:                                 <tr>
207:                                     <th scope="row"><?php echo $lang_admin_groups['Search flood label'] ?></th>207:                                     <th scope="row"><?php echo $lang_admin_groups['Search flood label'] ?></th>
208:                                     <td>208:                                     <td>
209:                                         <input type="text" name="search_flood" size="5" maxlength="4" value="<?php echo $group['g_search_flood'] ?>" tabindex="25" />209:                                         <input type="text" name="search_flood" size="5" maxlength="4" value="<?php echo $group['g_search_flood'] ?>" tabindex="36" />
210:                                         <span><?php echo $lang_admin_groups['Search flood help'] ?></span>210:                                         <span><?php echo $lang_admin_groups['Search flood help'] ?></span>
211:                                     </td>211:                                     </td>
212:                                 </tr>212:                                 </tr>
213: <?php if ($group['g_id'] != PUN_GUEST): ?>                                <tr>213: <?php if ($group['g_id'] != PUN_GUEST): ?>                                <tr>
214:                                     <th scope="row"><?php echo $lang_admin_groups['E-mail flood label'] ?></th>214:                                     <th scope="row"><?php echo $lang_admin_groups['E-mail flood label'] ?></th>
215:                                     <td>215:                                     <td>
216:                                         <input type="text" name="email_flood" size="5" maxlength="4" value="<?php echo $group['g_email_flood'] ?>" tabindex="26" />216:                                         <input type="text" name="email_flood" size="5" maxlength="4" value="<?php echo $group['g_email_flood'] ?>" tabindex="37" />
217:                                         <span><?php echo $lang_admin_groups['E-mail flood help'] ?></span>217:                                         <span><?php echo $lang_admin_groups['E-mail flood help'] ?></span>
218:                                     </td>218:                                     </td>
219:                                 </tr>219:                                 </tr>
 220:                                 <tr>
 221:                                     <th scope="row"><?php echo $lang_admin_groups['Report flood label'] ?></th>
 222:                                     <td>
 223:                                         <input type="text" name="report_flood" size="5" maxlength="4" value="<?php echo $group['g_report_flood'] ?>" tabindex="38" />
 224:                                         <span><?php echo $lang_admin_groups['Report flood help'] ?></span>
 225:                                     </td>
 226:                                 </tr>
220: <?php endif; endif; ?>                            </table>227: <?php endif; endif; ?>                            </table>
221: <?php if ($group['g_moderator'] == '1' ): ?>                            <p class="warntext"><?php echo $lang_admin_groups['Moderator info'] ?></p>228: <?php if ($group['g_moderator'] == '1' ): ?>                            <p class="warntext"><?php echo $lang_admin_groups['Moderator info'] ?></p>
222: <?php endif; ?>                        </div>229: <?php endif; ?>                        </div>
223:                     </fieldset>230:                     </fieldset>
224:                 </div>231:                 </div>
225:                 <p class="submitend"><input type="submit" name="add_edit_group" value="<?php echo $lang_admin_common['Save'] ?>" tabindex="26" /></p>232:                 <p class="submitend"><input type="submit" name="add_edit_group" value="<?php echo $lang_admin_common['Save'] ?>" tabindex="39" /></p>
226:             </form>233:             </form>
227:         </div>234:         </div>
228:     </div>235:     </div>
260:     $search = isset($_POST['search']) ? intval($_POST['search']) : '1';267:     $search = isset($_POST['search']) ? intval($_POST['search']) : '1';
261:     $search_users = isset($_POST['search_users']) ? intval($_POST['search_users']) : '1';268:     $search_users = isset($_POST['search_users']) ? intval($_POST['search_users']) : '1';
262:     $send_email = (isset($_POST['send_email']) && $_POST['send_email'] == '1') || $is_admin_group ? '1' : '0';269:     $send_email = (isset($_POST['send_email']) && $_POST['send_email'] == '1') || $is_admin_group ? '1' : '0';
263:     $post_flood = isset($_POST['post_flood']) ? intval($_POST['post_flood']) : '0';270:     $post_flood = (isset($_POST['post_flood']) && $_POST['post_flood'] >= 0) ? intval($_POST['post_flood']) : '0';
264:     $search_flood = isset($_POST['search_flood']) ? intval($_POST['search_flood']) : '0';271:     $search_flood = (isset($_POST['search_flood']) && $_POST['search_flood'] >= 0) ? intval($_POST['search_flood']) : '0';
265:     $email_flood = isset($_POST['email_flood']) ? intval($_POST['email_flood']) : '0';272:     $email_flood = (isset($_POST['email_flood']) && $_POST['email_flood'] >= 0) ? intval($_POST['email_flood']) : '0';
 273:     $report_flood = (isset($_POST['report_flood']) && $_POST['report_flood'] >= 0) ? intval($_POST['report_flood']) : '0';
266: 274: 
267:     if ($title == '')275:     if ($title == '')
268:         message($lang_admin_groups['Must enter title message']);276:         message($lang_admin_groups['Must enter title message']);
275:         if ($db->num_rows($result))283:         if ($db->num_rows($result))
276:             message(sprintf($lang_admin_groups['Title already exists message'], pun_htmlspecialchars($title)));284:             message(sprintf($lang_admin_groups['Title already exists message'], pun_htmlspecialchars($title)));
277: 285: 
278:         $db->query('INSERT INTO '.$db->prefix.'groups (g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_send_email, g_post_flood, g_search_flood, g_email_flood) VALUES(\''.$db->escape($title).'\', '.$user_title.', '.$moderator.', '.$mod_edit_users.', '.$mod_rename_users.', '.$mod_change_passwords.', '.$mod_ban_users.', '.$read_board.', '.$view_users.', '.$post_replies.', '.$post_topics.', '.$edit_posts.', '.$delete_posts.', '.$delete_topics.', '.$set_title.', '.$search.', '.$search_users.', '.$send_email.', '.$post_flood.', '.$search_flood.', '.$email_flood.')') or error('Unable to add group', __FILE__, __LINE__, $db->error());286:         $db->query('INSERT INTO '.$db->prefix.'groups (g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_send_email, g_post_flood, g_search_flood, g_email_flood, g_report_flood) VALUES(\''.$db->escape($title).'\', '.$user_title.', '.$moderator.', '.$mod_edit_users.', '.$mod_rename_users.', '.$mod_change_passwords.', '.$mod_ban_users.', '.$read_board.', '.$view_users.', '.$post_replies.', '.$post_topics.', '.$edit_posts.', '.$delete_posts.', '.$delete_topics.', '.$set_title.', '.$search.', '.$search_users.', '.$send_email.', '.$post_flood.', '.$search_flood.', '.$email_flood.', '.$report_flood.')') or error('Unable to add group', __FILE__, __LINE__, $db->error());
279:         $new_group_id = $db->insert_id();287:         $new_group_id = $db->insert_id();
280: 288: 
281:         // Now lets copy the forum specific permissions from the group which this group is based on289:         // Now lets copy the forum specific permissions from the group which this group is based on
289:         if ($db->num_rows($result))297:         if ($db->num_rows($result))
290:             message(sprintf($lang_admin_groups['Title already exists message'], pun_htmlspecialchars($title)));298:             message(sprintf($lang_admin_groups['Title already exists message'], pun_htmlspecialchars($title)));
291: 299: 
292:         $db->query('UPDATE '.$db->prefix.'groups SET g_title=\''.$db->escape($title).'\', g_user_title='.$user_title.', g_moderator='.$moderator.', g_mod_edit_users='.$mod_edit_users.', g_mod_rename_users='.$mod_rename_users.', g_mod_change_passwords='.$mod_change_passwords.', g_mod_ban_users='.$mod_ban_users.', g_read_board='.$read_board.', g_view_users='.$view_users.', g_post_replies='.$post_replies.', g_post_topics='.$post_topics.', g_edit_posts='.$edit_posts.', g_delete_posts='.$delete_posts.', g_delete_topics='.$delete_topics.', g_set_title='.$set_title.', g_search='.$search.', g_search_users='.$search_users.', g_send_email='.$send_email.', g_post_flood='.$post_flood.', g_search_flood='.$search_flood.', g_email_flood='.$email_flood.' WHERE g_id='.intval($_POST['group_id'])) or error('Unable to update group', __FILE__, __LINE__, $db->error());300:         $db->query('UPDATE '.$db->prefix.'groups SET g_title=\''.$db->escape($title).'\', g_user_title='.$user_title.', g_moderator='.$moderator.', g_mod_edit_users='.$mod_edit_users.', g_mod_rename_users='.$mod_rename_users.', g_mod_change_passwords='.$mod_change_passwords.', g_mod_ban_users='.$mod_ban_users.', g_read_board='.$read_board.', g_view_users='.$view_users.', g_post_replies='.$post_replies.', g_post_topics='.$post_topics.', g_edit_posts='.$edit_posts.', g_delete_posts='.$delete_posts.', g_delete_topics='.$delete_topics.', g_set_title='.$set_title.', g_search='.$search.', g_search_users='.$search_users.', g_send_email='.$send_email.', g_post_flood='.$post_flood.', g_search_flood='.$search_flood.', g_email_flood='.$email_flood.', g_report_flood='.$report_flood.' WHERE g_id='.intval($_POST['group_id'])) or error('Unable to update group', __FILE__, __LINE__, $db->error());
293:     }301:     }
294: 302: 
295:     // Regenerate the quick jump cache303:     // Regenerate the quick jump cache
296:     if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))304:     if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
297:         require PUN_ROOT.'include/cache.php';305:         require PUN_ROOT.'include/cache.php';
298: 306: 
299:     generate_quickjump_cache();307:     $group_id = $_POST['mode'] == 'add' ? $new_group_id : intval($_POST['group_id']);
 308:     generate_quickjump_cache($group_id);
300: 309: 
301:     if ($_POST['mode'] == 'edit')310:     if ($_POST['mode'] == 'edit')
302:         redirect('admin_groups.php', $lang_admin_groups['Group edited redirect']);311:         redirect('admin_groups.php', $lang_admin_groups['Group edited redirect']);
364:             $db->query('DELETE FROM '.$db->prefix.'groups WHERE g_id='.$group_id) or error('Unable to delete group', __FILE__, __LINE__, $db->error());373:             $db->query('DELETE FROM '.$db->prefix.'groups WHERE g_id='.$group_id) or error('Unable to delete group', __FILE__, __LINE__, $db->error());
365:             $db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE group_id='.$group_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());374:             $db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE group_id='.$group_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());
366: 375: 
367:             // Regenerate the quick jump cache 
368:             if (!defined('FORUM_CACHE_FUNCTIONS_LOADED')) 
369:                 require PUN_ROOT.'include/cache.php'; 
370:  
371:             generate_quickjump_cache(); 
372:  
373:             redirect('admin_groups.php', $lang_admin_groups['Group removed redirect']);376:             redirect('admin_groups.php', $lang_admin_groups['Group removed redirect']);
374:         }377:         }
375:         else378:         else
398:                         </div>401:                         </div>
399:                     </fieldset>402:                     </fieldset>
400:                 </div>403:                 </div>
401:                 <p class="buttons"><input type="submit" name="del_group_comply" value="<?php echo $lang_admin_common['Delete'] ?>" /><a href="javascript:history.go(-1)"><?php echo $lang_admin_common['Go back'] ?></a></p>404:                 <p class="buttons"><input type="submit" name="del_group_comply" value="<?php echo $lang_admin_common['Delete'] ?>" tabindex="1" /><a href="javascript:history.go(-1)" tabindex="2"><?php echo $lang_admin_common['Go back'] ?></a></p>
402:             </form>405:             </form>
403:         </div>406:         </div>
404:     </div>407:     </div>
470:     <div class="blockform">473:     <div class="blockform">
471:         <h2><span><?php echo $lang_admin_groups['Add groups head'] ?></span></h2>474:         <h2><span><?php echo $lang_admin_groups['Add groups head'] ?></span></h2>
472:         <div class="box">475:         <div class="box">
473:             <form id="groups" method="post" action="admin_groups.php?action=foo">476:             <form id="groups" method="post" action="admin_groups.php">
474:                 <div class="inform">477:                 <div class="inform">
475:                     <fieldset>478:                     <fieldset>
476:                         <legend><?php echo $lang_admin_groups['Add group subhead'] ?></legend>479:                         <legend><?php echo $lang_admin_groups['Add group subhead'] ?></legend>
545:                             <table cellspacing="0">548:                             <table cellspacing="0">
546: <?php549: <?php
547: 550: 
 551: $cur_index = 5;
 552: 
548: $result = $db->query('SELECT g_id, g_title FROM '.$db->prefix.'groups ORDER BY g_id') or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error());553: $result = $db->query('SELECT g_id, g_title FROM '.$db->prefix.'groups ORDER BY g_id') or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error());
549: 554: 
550: while ($cur_group = $db->fetch_assoc($result))555: while ($cur_group = $db->fetch_assoc($result))
551:     echo "\t\t\t\t\t\t\t\t".'<tr><th scope="row"><a href="admin_groups.php?edit_group='.$cur_group['g_id'].'">'.$lang_admin_groups['Edit link'].'</a>'.(($cur_group['g_id'] > PUN_MEMBER) ? ' | <a href="admin_groups.php?del_group='.$cur_group['g_id'].'">'.$lang_admin_groups['Delete link'].'</a>' : '').'</th><td>'.pun_htmlspecialchars($cur_group['g_title']).'</td></tr>'."\n";556:     echo "\t\t\t\t\t\t\t\t".'<tr><th scope="row"><a href="admin_groups.php?edit_group='.$cur_group['g_id'].'" tabindex="'.$cur_index++.'">'.$lang_admin_groups['Edit link'].'</a>'.(($cur_group['g_id'] > PUN_MEMBER) ? ' | <a href="admin_groups.php?del_group='.$cur_group['g_id'].'" tabindex="'.$cur_index++.'">'.$lang_admin_groups['Delete link'].'</a>' : '').'</th><td>'.pun_htmlspecialchars($cur_group['g_title']).'</td></tr>'."\n";
552: 557: 
553: ?>558: ?>
554:                             </table>559:                             </table>


a/admin_index.php b/admin_index.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if (!$pun_user['is_admmod']) 17: if (!$pun_user['is_admmod'])
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_index.php language file 20: // Load the admin_index.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_index.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_index.php';
 70:     $load_averages = @explode(' ', $load_averages); 70:     $load_averages = @explode(' ', $load_averages);
 71:     $server_load = isset($load_averages[2]) ? $load_averages[0].' '.$load_averages[1].' '.$load_averages[2] : $lang_admin_index['Not available']; 71:     $server_load = isset($load_averages[2]) ? $load_averages[0].' '.$load_averages[1].' '.$load_averages[2] : $lang_admin_index['Not available'];
 72: } 72: }
 73: else if (!in_array(PHP_OS, array('WINNT', 'WIN32')) && preg_match('/averages?: ([0-9\.]+),?\s+([0-9\.]+),?\s+([0-9\.]+)/i', @exec('uptime'), $load_averages)) 73: else if (!in_array(PHP_OS, array('WINNT', 'WIN32')) && preg_match('%averages?: ([0-9\.]+),?\s+([0-9\.]+),?\s+([0-9\.]+)%i', @exec('uptime'), $load_averages))
 74:     $server_load = $load_averages[1].' '.$load_averages[2].' '.$load_averages[3]; 74:     $server_load = $load_averages[1].' '.$load_averages[2].' '.$load_averages[3];
 75: else 75: else
 76:     $server_load = $lang_admin_index['Not available']; 76:     $server_load = $lang_admin_index['Not available'];
 85: if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb') 85: if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
 86: { 86: {
 87:     // Calculate total db size/row count 87:     // Calculate total db size/row count
 88:     $result = $db->query('SHOW TABLE STATUS FROM `'.$db_name.'`') or error('Unable to fetch table status', __FILE__, __LINE__, $db->error()); 88:     $result = $db->query('SHOW TABLE STATUS LIKE \''.$db->prefix.'%\'') or error('Unable to fetch table status', __FILE__, __LINE__, $db->error());
 89:  89: 
 90:     $total_records = $total_size = 0; 90:     $total_records = $total_size = 0;
 91:     while ($status = $db->fetch_assoc($result)) 91:     while ($status = $db->fetch_assoc($result))
126:         <h2><span><?php echo $lang_admin_index['Forum admin head'] ?></span></h2>126:         <h2><span><?php echo $lang_admin_index['Forum admin head'] ?></span></h2>
127:         <div id="adintro" class="box">127:         <div id="adintro" class="box">
128:             <div class="inbox">128:             <div class="inbox">
129:                 <p>129:                 <p><?php echo $lang_admin_index['Welcome to admin'] ?></p>
130:                     <?php echo $lang_admin_index['Welcome to admin'] ?><br /><br />130:                 <ul>
131:                     &#160;- <?php echo $lang_admin_index['Welcome 1'] ?><br />131:                     <li><span><?php echo $lang_admin_index['Welcome 1'] ?></span></li>
132:                     &#160;- <?php echo $lang_admin_index['Welcome 2'] ?><br />132:                     <li><span><?php echo $lang_admin_index['Welcome 2'] ?></span></li>
133:                     &#160;- <?php echo $lang_admin_index['Welcome 3'] ?><br />133:                     <li><span><?php echo $lang_admin_index['Welcome 3'] ?></span></li>
134:                     &#160;- <?php echo $lang_admin_index['Welcome 4'] ?><br />134:                     <li><span><?php echo $lang_admin_index['Welcome 4'] ?></span></li>
135:                     &#160;- <?php echo $lang_admin_index['Welcome 5'] ?><br />135:                     <li><span><?php echo $lang_admin_index['Welcome 5'] ?></span></li>
136:                     &#160;- <?php echo $lang_admin_index['Welcome 6'] ?><br />136:                     <li><span><?php echo $lang_admin_index['Welcome 6'] ?></span></li>
137:                     &#160;- <?php echo $lang_admin_index['Welcome 7'] ?><br />137:                     <li><span><?php echo $lang_admin_index['Welcome 7'] ?></span></li>
138:                     &#160;- <?php echo $lang_admin_index['Welcome 8'] ?><br />138:                     <li><span><?php echo $lang_admin_index['Welcome 8'] ?></span></li>
139:                     &#160;- <?php echo $lang_admin_index['Welcome 9'] ?>139:                     <li><span><?php echo $lang_admin_index['Welcome 9'] ?></span></li>
140:                 </p>140:                 </ul>
141:             </div>141:             </div>
142:         </div>142:         </div>
143: 143: 
147:                 <dl>147:                 <dl>
148:                     <dt><?php echo $lang_admin_index['FluxBB version label'] ?></dt>148:                     <dt><?php echo $lang_admin_index['FluxBB version label'] ?></dt>
149:                     <dd>149:                     <dd>
150:                         <?php printf($lang_admin_index['FluxBB version data'], $pun_config['o_cur_version'], '<a href="admin_index.php?action=check_upgrade">'.$lang_admin_index['Check for upgrade'].'</a>') ?><br />150:                         <?php printf($lang_admin_index['FluxBB version data']."\n", $pun_config['o_cur_version'], '<a href="admin_index.php?action=check_upgrade">'.$lang_admin_index['Check for upgrade'].'</a>') ?>
151:                     </dd>151:                     </dd>
152:                     <dt><?php echo $lang_admin_index['Server load label'] ?></dt>152:                     <dt><?php echo $lang_admin_index['Server load label'] ?></dt>
153:                     <dd>153:                     <dd>
154:                         <?php printf($lang_admin_index['Server load data'], $server_load, $num_online) ?>154:                         <?php printf($lang_admin_index['Server load data']."\n", $server_load, $num_online) ?>
155:                     </dd>155:                     </dd>
156: <?php if ($pun_user['g_id'] == PUN_ADMIN): ?>                    <dt><?php echo $lang_admin_index['Environment label'] ?></dt>156: <?php if ($pun_user['g_id'] == PUN_ADMIN): ?>                    <dt><?php echo $lang_admin_index['Environment label'] ?></dt>
157:                     <dd>157:                     <dd>
158:                         <?php printf($lang_admin_index['Environment data OS'], PHP_OS) ?><br />158:                         <?php printf($lang_admin_index['Environment data OS'], PHP_OS) ?><br />
159:                         <?php printf($lang_admin_index['Environment data version'], phpversion(), '<a href="admin_index.php?action=phpinfo">'.$lang_admin_index['Show info'].'</a>') ?><br />159:                         <?php printf($lang_admin_index['Environment data version'], phpversion(), '<a href="admin_index.php?action=phpinfo">'.$lang_admin_index['Show info'].'</a>') ?><br />
160:                         <?php printf($lang_admin_index['Environment data acc'], $php_accelerator) ?>160:                         <?php printf($lang_admin_index['Environment data acc']."\n", $php_accelerator) ?>
161:                     </dd>161:                     </dd>
162:                     <dt><?php echo $lang_admin_index['Database label'] ?></dt>162:                     <dt><?php echo $lang_admin_index['Database label'] ?></dt>
163:                     <dd>163:                     <dd>
164:                         <?php echo implode(' ', $db->get_version())."\n" ?>164:                         <?php echo implode(' ', $db->get_version())."\n" ?>
165: <?php if (isset($total_records) && isset($total_size)): ?>                        <br /><?php printf($lang_admin_index['Database data rows'], forum_number_format($total_records)) ?>165: <?php if (isset($total_records) && isset($total_size)): ?>                        <br /><?php printf($lang_admin_index['Database data rows']."\n", forum_number_format($total_records)) ?>
166:                         <br /><?php printf($lang_admin_index['Database data size'], $total_size) ?>166:                         <br /><?php printf($lang_admin_index['Database data size']."\n", $total_size) ?>
167: <?php endif; endif; ?>                    </dd>167: <?php endif; ?>                    </dd>
 168: <?php endif; ?>
168:                 </dl>169:                 </dl>
169:             </div>170:             </div>
170:         </div>171:         </div>


a/admin_loader.php b/admin_loader.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if (!$pun_user['is_admmod']) 17: if (!$pun_user['is_admmod'])
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 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']);
 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, '_'));
 27: if ($pun_user['g_moderator'] == '1' && $prefix == 'AP') 27: if ($pun_user['g_moderator'] == '1' && $prefix == 'AP')
 28:     message($lang_common['No permission']); 28:     message($lang_common['No permission'], false, '403 Forbidden');
 29:  29: 
 30: // Make sure the file actually exists 30: // Make sure the file actually exists
 31: if (!file_exists(PUN_ROOT.'plugins/'.$plugin)) 31: if (!file_exists(PUN_ROOT.'plugins/'.$plugin))


a/admin_maintenance.php b/admin_maintenance.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
 11: // Tell common.php that we don't want output buffering 11: // Tell common.php that we don't want output buffering
 12: define('PUN_DISABLE_BUFFERING', 1); 12: define('PUN_DISABLE_BUFFERING', 1);
 13:  13: 
 14: define('PUN_ROOT', './'); 14: define('PUN_ROOT', dirname(__FILE__).'/');
 15: require PUN_ROOT.'include/common.php'; 15: require PUN_ROOT.'include/common.php';
 16: require PUN_ROOT.'include/common_admin.php'; 16: require PUN_ROOT.'include/common_admin.php';
 17:  17: 
 18:  18: 
 19: if ($pun_user['g_id'] != PUN_ADMIN) 19: if ($pun_user['g_id'] != PUN_ADMIN)
 20:     message($lang_common['No permission']); 20:     message($lang_common['No permission'], false, '403 Forbidden');
 21:  21: 
 22: // Load the admin_maintenance.php language file 22: // Load the admin_maintenance.php language file
 23: require PUN_ROOT.'lang/'.$admin_language.'/admin_maintenance.php'; 23: require PUN_ROOT.'lang/'.$admin_language.'/admin_maintenance.php';
 24:  24: 
 25: if (isset($_GET['i_per_page']) && isset($_GET['i_start_at'])) 25: $action = isset($_REQUEST['action']) ? pun_trim($_REQUEST['action']) : '';
  26: 
  27: if ($action == 'rebuild')
 26: { 28: {
 27:     $per_page = intval($_GET['i_per_page']); 29:     $per_page = isset($_GET['i_per_page']) ? intval($_GET['i_per_page']) : 0;
 28:     $start_at = intval($_GET['i_start_at']); 30:     $start_at = isset($_GET['i_start_at']) ? intval($_GET['i_start_at']) : 0;
 29:     if ($per_page < 1 || $start_at < 1) 31: 
 30:         message($lang_common['Bad request']); 32:     // Check per page is > 0
  33:     if ($per_page < 1)
  34:         message($lang_admin_maintenance['Posts must be integer message']);
 31:  35: 
 32:     @set_time_limit(0); 36:     @set_time_limit(0);
 33:  37: 
110:         $result = $db->query('SELECT id FROM '.$db->prefix.'posts WHERE id > '.$end_at.' ORDER BY id ASC LIMIT 1') or error('Unable to fetch next ID', __FILE__, __LINE__, $db->error());114:         $result = $db->query('SELECT id FROM '.$db->prefix.'posts WHERE id > '.$end_at.' ORDER BY id ASC LIMIT 1') or error('Unable to fetch next ID', __FILE__, __LINE__, $db->error());
111: 115: 
112:         if ($db->num_rows($result) > 0)116:         if ($db->num_rows($result) > 0)
113:             $query_str = '?i_per_page='.$per_page.'&i_start_at='.$db->result($result);117:             $query_str = '?action=rebuild&i_per_page='.$per_page.'&i_start_at='.$db->result($result);
114:     }118:     }
115: 119: 
116:     $db->end_transaction();120:     $db->end_transaction();
119:     exit('<script type="text/javascript">window.location="admin_maintenance.php'.$query_str.'"</script><hr /><p>'.sprintf($lang_admin_maintenance['Javascript redirect failed'], '<a href="admin_maintenance.php'.$query_str.'">'.$lang_admin_maintenance['Click here'].'</a>').'</p>');123:     exit('<script type="text/javascript">window.location="admin_maintenance.php'.$query_str.'"</script><hr /><p>'.sprintf($lang_admin_maintenance['Javascript redirect failed'], '<a href="admin_maintenance.php'.$query_str.'">'.$lang_admin_maintenance['Click here'].'</a>').'</p>');
120: }124: }
121: 125: 
 126: if ($action == 'prune')
 127: {
 128:     $prune_from = pun_trim($_POST['prune_from']);
 129:     $prune_sticky = intval($_POST['prune_sticky']);
 130: 
 131:     if (isset($_POST['prune_comply']))
 132:     {
 133:         confirm_referrer('admin_maintenance.php');
 134: 
 135:         $prune_days = intval($_POST['prune_days']);
 136:         $prune_date = ($prune_days) ? time() - ($prune_days * 86400) : -1;
 137: 
 138:         @set_time_limit(0);
 139: 
 140:         if ($prune_from == 'all')
 141:         {
 142:             $result = $db->query('SELECT id FROM '.$db->prefix.'forums') or error('Unable to fetch forum list', __FILE__, __LINE__, $db->error());
 143:             $num_forums = $db->num_rows($result);
 144: 
 145:             for ($i = 0; $i < $num_forums; ++$i)
 146:             {
 147:                 $fid = $db->result($result, $i);
 148: 
 149:                 prune($fid, $prune_sticky, $prune_date);
 150:                 update_forum($fid);
 151:             }
 152:         }
 153:         else
 154:         {
 155:             $prune_from = intval($prune_from);
 156:             prune($prune_from, $prune_sticky, $prune_date);
 157:             update_forum($prune_from);
 158:         }
 159: 
 160:         // Locate any "orphaned redirect topics" and delete them
 161:         $result = $db->query('SELECT t1.id FROM '.$db->prefix.'topics AS t1 LEFT JOIN '.$db->prefix.'topics AS t2 ON t1.moved_to=t2.id WHERE t2.id IS NULL AND t1.moved_to IS NOT NULL') or error('Unable to fetch redirect topics', __FILE__, __LINE__, $db->error());
 162:         $num_orphans = $db->num_rows($result);
 163: 
 164:         if ($num_orphans)
 165:         {
 166:             for ($i = 0; $i < $num_orphans; ++$i)
 167:                 $orphans[] = $db->result($result, $i);
 168: 
 169:             $db->query('DELETE FROM '.$db->prefix.'topics WHERE id IN('.implode(',', $orphans).')') or error('Unable to delete redirect topics', __FILE__, __LINE__, $db->error());
 170:         }
 171: 
 172:         redirect('admin_maintenance.php', $lang_admin_maintenance['Posts pruned redirect']);
 173:     }
 174: 
 175:     $prune_days = pun_trim($_POST['req_prune_days']);
 176:     if ($prune_days == '' || preg_match('%[^0-9]%', $prune_days))
 177:         message($lang_admin_maintenance['Days must be integer message']);
 178: 
 179:     $prune_date = time() - ($prune_days * 86400);
 180: 
 181:     // Concatenate together the query for counting number of topics to prune
 182:     $sql = 'SELECT COUNT(id) FROM '.$db->prefix.'topics WHERE last_post<'.$prune_date.' AND moved_to IS NULL';
 183: 
 184:     if ($prune_sticky == '0')
 185:         $sql .= ' AND sticky=0';
 186: 
 187:     if ($prune_from != 'all')
 188:     {
 189:         $prune_from = intval($prune_from);
 190:         $sql .= ' AND forum_id='.$prune_from;
 191: 
 192:         // Fetch the forum name (just for cosmetic reasons)
 193:         $result = $db->query('SELECT forum_name FROM '.$db->prefix.'forums WHERE id='.$prune_from) or error('Unable to fetch forum name', __FILE__, __LINE__, $db->error());
 194:         $forum = '"'.pun_htmlspecialchars($db->result($result)).'"';
 195:     }
 196:     else
 197:         $forum = $lang_admin_maintenance['All forums'];
 198: 
 199:     $result = $db->query($sql) or error('Unable to fetch topic prune count', __FILE__, __LINE__, $db->error());
 200:     $num_topics = $db->result($result);
 201: 
 202:     if (!$num_topics)
 203:         message(sprintf($lang_admin_maintenance['No old topics message'], $prune_days));
 204: 
 205: 
 206:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Prune']);
 207:     define('PUN_ACTIVE_PAGE', 'admin');
 208:     require PUN_ROOT.'header.php';
 209: 
 210:     generate_admin_menu('maintenance');
 211: 
 212: ?>
 213:     <div class="blockform">
 214:         <h2><span><?php echo $lang_admin_maintenance['Prune head'] ?></span></h2>
 215:         <div class="box">
 216:             <form method="post" action="admin_maintenance.php">
 217:                 <div class="inform">
 218:                     <input type="hidden" name="action" value="prune" />
 219:                     <input type="hidden" name="prune_days" value="<?php echo $prune_days ?>" />
 220:                     <input type="hidden" name="prune_sticky" value="<?php echo $prune_sticky ?>" />
 221:                     <input type="hidden" name="prune_from" value="<?php echo $prune_from ?>" />
 222:                     <fieldset>
 223:                         <legend><?php echo $lang_admin_maintenance['Confirm prune subhead'] ?></legend>
 224:                         <div class="infldset">
 225:                             <p><?php printf($lang_admin_maintenance['Confirm prune info'], $prune_days, $forum, forum_number_format($num_topics)) ?></p>
 226:                             <p class="warntext"><?php echo $lang_admin_maintenance['Confirm prune warn'] ?></p>
 227:                         </div>
 228:                     </fieldset>
 229:                 </div>
 230:                 <p class="buttons"><input type="submit" name="prune_comply" value="<?php echo $lang_admin_common['Prune'] ?>" /><a href="javascript:history.go(-1)"><?php echo $lang_admin_common['Go back'] ?></a></p>
 231:             </form>
 232:         </div>
 233:     </div>
 234:     <div class="clearer"></div>
 235: </div>
 236: <?php
 237: 
 238:     require PUN_ROOT.'footer.php';
 239:     exit;
 240: }
 241: 
122: 242: 
123: // Get the first post ID from the db243: // Get the first post ID from the db
124: $result = $db->query('SELECT id FROM '.$db->prefix.'posts ORDER BY id ASC LIMIT 1') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());244: $result = $db->query('SELECT id FROM '.$db->prefix.'posts ORDER BY id ASC LIMIT 1') or error('Unable to fetch topic info', __FILE__, __LINE__, $db->error());
137:         <div class="box">257:         <div class="box">
138:             <form method="get" action="admin_maintenance.php">258:             <form method="get" action="admin_maintenance.php">
139:                 <div class="inform">259:                 <div class="inform">
 260:                     <input type="hidden" name="action" value="rebuild" />
140:                     <fieldset>261:                     <fieldset>
141:                         <legend><?php echo $lang_admin_maintenance['Rebuild index subhead'] ?></legend>262:                         <legend><?php echo $lang_admin_maintenance['Rebuild index subhead'] ?></legend>
142:                         <div class="infldset">263:                         <div class="infldset">
169:                     </fieldset>290:                     </fieldset>
170:                 </div>291:                 </div>
171:             </form>292:             </form>
 293: 
 294:             <form method="post" action="admin_maintenance.php" onsubmit="return process_form(this)">
 295:                 <div class="inform">
 296:                     <input type="hidden" name="action" value="prune" />
 297:                     <fieldset>
 298:                         <legend><?php echo $lang_admin_maintenance['Prune subhead'] ?></legend>
 299:                         <div class="infldset">
 300:                             <table class="aligntop" cellspacing="0">
 301:                                 <tr>
 302:                                     <th scope="row"><?php echo $lang_admin_maintenance['Days old label'] ?></th>
 303:                                     <td>
 304:                                         <input type="text" name="req_prune_days" size="3" maxlength="3" tabindex="5" />
 305:                                         <span><?php echo $lang_admin_maintenance['Days old help'] ?></span>
 306:                                     </td>
 307:                                 </tr>
 308:                                 <tr>
 309:                                     <th scope="row"><?php echo $lang_admin_maintenance['Prune sticky label'] ?></th>
 310:                                     <td>
 311:                                         <input type="radio" name="prune_sticky" value="1" tabindex="6" checked="checked" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="prune_sticky" value="0" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
 312:                                         <span><?php echo $lang_admin_maintenance['Prune sticky help'] ?></span>
 313:                                     </td>
 314:                                 </tr>
 315:                                 <tr>
 316:                                     <th scope="row"><?php echo $lang_admin_maintenance['Prune from label'] ?></th>
 317:                                     <td>
 318:                                         <select name="prune_from" tabindex="7">
 319:                                             <option value="all"><?php echo $lang_admin_maintenance['All forums'] ?></option>
 320: <?php
 321: 
 322:     $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id WHERE f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position') or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
 323: 
 324:     $cur_category = 0;
 325:     while ($forum = $db->fetch_assoc($result))
 326:     {
 327:         if ($forum['cid'] != $cur_category) // Are we still in the same category?
 328:         {
 329:             if ($cur_category)
 330:                 echo "\t\t\t\t\t\t\t\t\t\t\t".'</optgroup>'."\n";
 331: 
 332:             echo "\t\t\t\t\t\t\t\t\t\t\t".'<optgroup label="'.pun_htmlspecialchars($forum['cat_name']).'">'."\n";
 333:             $cur_category = $forum['cid'];
 334:         }
 335: 
 336:         echo "\t\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$forum['fid'].'">'.pun_htmlspecialchars($forum['forum_name']).'</option>'."\n";
 337:     }
 338: 
 339: ?>
 340:                                             </optgroup>
 341:                                         </select>
 342:                                         <span><?php echo $lang_admin_maintenance['Prune from help'] ?></span>
 343:                                     </td>
 344:                                 </tr>
 345:                             </table>
 346:                             <p class="topspace"><?php printf($lang_admin_maintenance['Prune info'], '<a href="admin_options.php#maintenance">'.$lang_admin_common['Maintenance mode'].'</a>') ?></p>
 347:                             <div class="fsetsubmit"><input type="submit" name="prune" value="<?php echo $lang_admin_common['Prune'] ?>" tabindex="8" /></div>
 348:                         </div>
 349:                     </fieldset>
 350:                 </div>
 351:             </form>
172:         </div>352:         </div>
173:     </div>353:     </div>
174:     <div class="clearer"></div>354:     <div class="clearer"></div>


a/admin_options.php b/admin_options.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if ($pun_user['g_id'] != PUN_ADMIN) 17: if ($pun_user['g_id'] != PUN_ADMIN)
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_options.php language file 20: // Load the admin_options.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_options.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_options.php';
 22:  22: 
 23: if (isset($_POST['form_sent'])) 23: if (isset($_POST['form_sent']))
 24: { 24: {
 25:     // Custom referrer check (so we can output a custom error message) 25:     confirm_referrer('admin_options.php', $lang_admin_options['Bad HTTP Referer message']);
 26:     if (!preg_match('#^'.preg_quote(str_replace('www.', '', $pun_config['o_base_url']).'/admin_options.php', '#').'#i', str_replace('www.', '', (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '')))) 
 27:         message($lang_admin_options['Bad HTTP Referer message']); 
 28:  26: 
 29:     $form = array( 27:     $form = array(
 30:         'board_title'            => pun_trim($_POST['form']['board_title']), 28:         'board_title'            => pun_trim($_POST['form']['board_title']),
 32:         'base_url'                => pun_trim($_POST['form']['base_url']), 30:         'base_url'                => pun_trim($_POST['form']['base_url']),
 33:         'default_timezone'        => floatval($_POST['form']['default_timezone']), 31:         'default_timezone'        => floatval($_POST['form']['default_timezone']),
 34:         'default_dst'            => $_POST['form']['default_dst'] != '1' ? '0' : '1', 32:         'default_dst'            => $_POST['form']['default_dst'] != '1' ? '0' : '1',
 35:         'default_lang'            => preg_replace('#[\.\\\/]#', '', pun_trim($_POST['form']['default_lang'])), 33:         'default_lang'            => pun_trim($_POST['form']['default_lang']),
 36:         'default_style'            => preg_replace('#[\.\\\/]#', '', pun_trim($_POST['form']['default_style'])), 34:         'default_style'            => pun_trim($_POST['form']['default_style']),
 37:         'time_format'            => pun_trim($_POST['form']['time_format']), 35:         'time_format'            => pun_trim($_POST['form']['time_format']),
 38:         'date_format'            => pun_trim($_POST['form']['date_format']), 36:         'date_format'            => pun_trim($_POST['form']['date_format']),
 39:         'timeout_visit'            => intval($_POST['form']['timeout_visit']), 37:         'timeout_visit'            => (intval($_POST['form']['timeout_visit']) > 0) ? intval($_POST['form']['timeout_visit']) : 1,
 40:         'timeout_online'        => intval($_POST['form']['timeout_online']), 38:         'timeout_online'        => (intval($_POST['form']['timeout_online']) > 0) ? intval($_POST['form']['timeout_online']) : 1,
 41:         'redirect_delay'        => intval($_POST['form']['redirect_delay']), 39:         'redirect_delay'        => (intval($_POST['form']['redirect_delay']) >= 0) ? intval($_POST['form']['redirect_delay']) : 0,
 42:         'show_version'            => $_POST['form']['show_version'] != '1' ? '0' : '1', 40:         'show_version'            => $_POST['form']['show_version'] != '1' ? '0' : '1',
 43:         'show_user_info'        => $_POST['form']['show_user_info'] != '1' ? '0' : '1', 41:         'show_user_info'        => $_POST['form']['show_user_info'] != '1' ? '0' : '1',
 44:         'show_post_count'        => $_POST['form']['show_post_count'] != '1' ? '0' : '1', 42:         'show_post_count'        => $_POST['form']['show_post_count'] != '1' ? '0' : '1',
 45:         'smilies'                => $_POST['form']['smilies'] != '1' ? '0' : '1', 43:         'smilies'                => $_POST['form']['smilies'] != '1' ? '0' : '1',
 46:         'smilies_sig'            => $_POST['form']['smilies_sig'] != '1' ? '0' : '1', 44:         'smilies_sig'            => $_POST['form']['smilies_sig'] != '1' ? '0' : '1',
 47:         'make_links'            => $_POST['form']['make_links'] != '1' ? '0' : '1', 45:         'make_links'            => $_POST['form']['make_links'] != '1' ? '0' : '1',
 48:         'topic_review'            => intval($_POST['form']['topic_review']), 46:         'topic_review'            => (intval($_POST['form']['topic_review']) >= 0) ? intval($_POST['form']['topic_review']) : 0,
 49:         'disp_topics_default'    => intval($_POST['form']['disp_topics_default']), 47:         'disp_topics_default'    => intval($_POST['form']['disp_topics_default']),
 50:         'disp_posts_default'    => intval($_POST['form']['disp_posts_default']), 48:         'disp_posts_default'    => intval($_POST['form']['disp_posts_default']),
 51:         'indent_num_spaces'        => intval($_POST['form']['indent_num_spaces']), 49:         'indent_num_spaces'        => (intval($_POST['form']['indent_num_spaces']) >= 0) ? intval($_POST['form']['indent_num_spaces']) : 0,
 52:         'quote_depth'            => intval($_POST['form']['quote_depth']), 50:         'quote_depth'            => (intval($_POST['form']['quote_depth']) > 0) ? intval($_POST['form']['quote_depth']) : 1,
 53:         'quickpost'                => $_POST['form']['quickpost'] != '1' ? '0' : '1', 51:         'quickpost'                => $_POST['form']['quickpost'] != '1' ? '0' : '1',
 54:         'users_online'            => $_POST['form']['users_online'] != '1' ? '0' : '1', 52:         'users_online'            => $_POST['form']['users_online'] != '1' ? '0' : '1',
 55:         'censoring'                => $_POST['form']['censoring'] != '1' ? '0' : '1', 53:         'censoring'                => $_POST['form']['censoring'] != '1' ? '0' : '1',
 62:         'search_all_forums'        => $_POST['form']['search_all_forums'] != '1' ? '0' : '1', 60:         'search_all_forums'        => $_POST['form']['search_all_forums'] != '1' ? '0' : '1',
 63:         'additional_navlinks'    => pun_trim($_POST['form']['additional_navlinks']), 61:         'additional_navlinks'    => pun_trim($_POST['form']['additional_navlinks']),
 64:         'feed_type'                => intval($_POST['form']['feed_type']), 62:         'feed_type'                => intval($_POST['form']['feed_type']),
  63:         'feed_ttl'                => intval($_POST['form']['feed_ttl']),
 65:         'report_method'            => intval($_POST['form']['report_method']), 64:         'report_method'            => intval($_POST['form']['report_method']),
 66:         'mailing_list'            => pun_trim($_POST['form']['mailing_list']), 65:         'mailing_list'            => pun_trim($_POST['form']['mailing_list']),
 67:         'avatars'                => $_POST['form']['avatars'] != '1' ? '0' : '1', 66:         'avatars'                => $_POST['form']['avatars'] != '1' ? '0' : '1',
 68:         'avatars_dir'            => pun_trim($_POST['form']['avatars_dir']), 67:         'avatars_dir'            => pun_trim($_POST['form']['avatars_dir']),
 69:         'avatars_width'            => intval($_POST['form']['avatars_width']), 68:         'avatars_width'            => (intval($_POST['form']['avatars_width']) > 0) ? intval($_POST['form']['avatars_width']) : 1,
 70:         'avatars_height'        => intval($_POST['form']['avatars_height']), 69:         'avatars_height'        => (intval($_POST['form']['avatars_height']) > 0) ? intval($_POST['form']['avatars_height']) : 1,
 71:         'avatars_size'            => intval($_POST['form']['avatars_size']), 70:         'avatars_size'            => (intval($_POST['form']['avatars_size']) > 0) ? intval($_POST['form']['avatars_size']) : 1,
 72:         'admin_email'            => strtolower(pun_trim($_POST['form']['admin_email'])), 71:         'admin_email'            => strtolower(pun_trim($_POST['form']['admin_email'])),
 73:         'webmaster_email'        => strtolower(pun_trim($_POST['form']['webmaster_email'])), 72:         'webmaster_email'        => strtolower(pun_trim($_POST['form']['webmaster_email'])),
 74:         'subscriptions'            => $_POST['form']['subscriptions'] != '1' ? '0' : '1', 73:         'forum_subscriptions'    => $_POST['form']['forum_subscriptions'] != '1' ? '0' : '1',
  74:         'topic_subscriptions'    => $_POST['form']['topic_subscriptions'] != '1' ? '0' : '1',
 75:         'smtp_host'                => pun_trim($_POST['form']['smtp_host']), 75:         'smtp_host'                => pun_trim($_POST['form']['smtp_host']),
 76:         'smtp_user'                => pun_trim($_POST['form']['smtp_user']), 76:         'smtp_user'                => pun_trim($_POST['form']['smtp_user']),
 77:         'smtp_pass'                => pun_trim($_POST['form']['smtp_pass']), 
 78:         'smtp_ssl'                => $_POST['form']['smtp_ssl'] != '1' ? '0' : '1', 77:         'smtp_ssl'                => $_POST['form']['smtp_ssl'] != '1' ? '0' : '1',
 79:         'regs_allow'            => $_POST['form']['regs_allow'] != '1' ? '0' : '1', 78:         'regs_allow'            => $_POST['form']['regs_allow'] != '1' ? '0' : '1',
 80:         'regs_verify'            => $_POST['form']['regs_verify'] != '1' ? '0' : '1', 79:         'regs_verify'            => $_POST['form']['regs_verify'] != '1' ? '0' : '1',
 95:     if (substr($form['base_url'], -1) == '/') 94:     if (substr($form['base_url'], -1) == '/')
 96:         $form['base_url'] = substr($form['base_url'], 0, -1); 95:         $form['base_url'] = substr($form['base_url'], 0, -1);
 97:  96: 
 98:     if (!file_exists(PUN_ROOT.'lang/'.$form['default_lang'].'/common.php')) 97:     $languages = forum_list_langs();
  98:     if (!in_array($form['default_lang'], $languages))
 99:         message($lang_common['Bad request']); 99:         message($lang_common['Bad request']);
100:     if (!file_exists(PUN_ROOT.'style/'.$form['default_style'].'.css'))100: 
 101:     $styles = forum_list_styles();
 102:     if (!in_array($form['default_style'], $styles))
101:         message($lang_common['Bad request']);103:         message($lang_common['Bad request']);
102: 104: 
103:     if ($form['time_format'] == '')105:     if ($form['time_format'] == '')
116:         message($lang_admin_options['Invalid webmaster e-mail message']);118:         message($lang_admin_options['Invalid webmaster e-mail message']);
117: 119: 
118:     if ($form['mailing_list'] != '')120:     if ($form['mailing_list'] != '')
119:         $form['mailing_list'] = strtolower(preg_replace('/\s/S', '', $form['mailing_list']));121:         $form['mailing_list'] = strtolower(preg_replace('%\s%S', '', $form['mailing_list']));
120: 122: 
121:     // Make sure avatars_dir doesn't end with a slash123:     // Make sure avatars_dir doesn't end with a slash
122:     if (substr($form['avatars_dir'], -1) == '/')124:     if (substr($form['avatars_dir'], -1) == '/')
125:     if ($form['additional_navlinks'] != '')127:     if ($form['additional_navlinks'] != '')
126:         $form['additional_navlinks'] = pun_trim(pun_linebreaks($form['additional_navlinks']));128:         $form['additional_navlinks'] = pun_trim(pun_linebreaks($form['additional_navlinks']));
127: 129: 
 130:     // Change or enter a SMTP password
 131:     if (isset($_POST['form']['smtp_change_pass']))
 132:     {
 133:         $smtp_pass1 = isset($_POST['form']['smtp_pass1']) ? pun_trim($_POST['form']['smtp_pass1']) : '';
 134:         $smtp_pass2 = isset($_POST['form']['smtp_pass2']) ? pun_trim($_POST['form']['smtp_pass2']) : '';
 135: 
 136:         if ($smtp_pass1 == $smtp_pass2)
 137:             $form['smtp_pass'] = $smtp_pass1;
 138:         else
 139:             message($lang_admin_options['SMTP passwords did not match']);
 140:     }
 141: 
128:     if ($form['announcement_message'] != '')142:     if ($form['announcement_message'] != '')
129:         $form['announcement_message'] = pun_linebreaks($form['announcement_message']);143:         $form['announcement_message'] = pun_linebreaks($form['announcement_message']);
130:     else144:     else
163:     if ($form['feed_type'] < 0 || $form['feed_type'] > 2)177:     if ($form['feed_type'] < 0 || $form['feed_type'] > 2)
164:         message($lang_common['Bad request']);178:         message($lang_common['Bad request']);
165: 179: 
 180:     if ($form['feed_ttl'] < 0)
 181:         message($lang_common['Bad request']);
 182: 
166:     if ($form['report_method'] < 0 || $form['report_method'] > 2)183:     if ($form['report_method'] < 0 || $form['report_method'] > 2)
167:         message($lang_common['Bad request']);184:         message($lang_common['Bad request']);
168: 185: 
191:         require PUN_ROOT.'include/cache.php';208:         require PUN_ROOT.'include/cache.php';
192: 209: 
193:     generate_config_cache();210:     generate_config_cache();
 211:     clear_feed_cache();
194: 212: 
195:     redirect('admin_options.php', $lang_admin_options['Options updated redirect']);213:     redirect('admin_options.php', $lang_admin_options['Options updated redirect']);
196: }214: }
205:     <div class="blockform">223:     <div class="blockform">
206:         <h2><span><?php echo $lang_admin_options['Options head'] ?></span></h2>224:         <h2><span><?php echo $lang_admin_options['Options head'] ?></span></h2>
207:         <div class="box">225:         <div class="box">
208:             <form method="post" action="admin_options.php?action=foo">226:             <form method="post" action="admin_options.php">
209:                 <p class="submittop"><input type="submit" name="save" value="<?php echo $lang_admin_common['Save changes'] ?>" /></p>227:                 <p class="submittop"><input type="submit" name="save" value="<?php echo $lang_admin_common['Save changes'] ?>" /></p>
210:                 <div class="inform">228:                 <div class="inform">
211:                     <input type="hidden" name="form_sent" value="1" />229:                     <input type="hidden" name="form_sent" value="1" />
230:                                 <tr>248:                                 <tr>
231:                                     <th scope="row"><?php echo $lang_admin_options['Base URL label'] ?></th>249:                                     <th scope="row"><?php echo $lang_admin_options['Base URL label'] ?></th>
232:                                     <td>250:                                     <td>
233:                                         <input type="text" name="form[base_url]" size="50" maxlength="100" value="<?php echo $pun_config['o_base_url'] ?>" />251:                                         <input type="text" name="form[base_url]" size="50" maxlength="100" value="<?php echo pun_htmlspecialchars($pun_config['o_base_url']) ?>" />
234:                                         <span><?php echo $lang_admin_options['Base URL help'] ?></span>252:                                         <span><?php echo $lang_admin_options['Base URL help'] ?></span>
235:                                     </td>253:                                     </td>
236:                                 </tr>254:                                 </tr>
285:                                 <tr>303:                                 <tr>
286:                                     <th scope="row"><?php echo $lang_admin_options['DST label'] ?></th>304:                                     <th scope="row"><?php echo $lang_admin_options['DST label'] ?></th>
287:                                     <td>305:                                     <td>
288:                                         <input type="radio" name="form[default_dst]" value="1"<?php if ($pun_config['o_default_dst'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[default_dst]" value="0"<?php if ($pun_config['o_default_dst'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>306:                                         <input type="radio" name="form[default_dst]" id="form_default_dst_1" value="1"<?php if ($pun_config['o_default_dst'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_default_dst_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[default_dst]" id="form_default_dst_0" value="0"<?php if ($pun_config['o_default_dst'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_default_dst_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
289:                                         <span><?php echo $lang_admin_options['DST help'] ?></span>307:                                         <span><?php echo $lang_admin_options['DST help'] ?></span>
290:                                     </td>308:                                     </td>
291:                                 </tr>309:                                 </tr>
393:                                 <tr>411:                                 <tr>
394:                                     <th scope="row"><?php echo $lang_admin_options['Version number label'] ?></th>412:                                     <th scope="row"><?php echo $lang_admin_options['Version number label'] ?></th>
395:                                     <td>413:                                     <td>
396:                                         <input type="radio" name="form[show_version]" value="1"<?php if ($pun_config['o_show_version'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[show_version]" value="0"<?php if ($pun_config['o_show_version'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>414:                                         <input type="radio" name="form[show_version]" id="form_show_version_1" value="1"<?php if ($pun_config['o_show_version'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_show_version_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[show_version]" id="form_show_version_0" value="0"<?php if ($pun_config['o_show_version'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_show_version_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
397:                                         <span><?php echo $lang_admin_options['Version number help'] ?></span>415:                                         <span><?php echo $lang_admin_options['Version number help'] ?></span>
398:                                     </td>416:                                     </td>
399:                                 </tr>417:                                 </tr>
400:                                 <tr>418:                                 <tr>
401:                                     <th scope="row"><?php echo $lang_admin_options['Info in posts label'] ?></th>419:                                     <th scope="row"><?php echo $lang_admin_options['Info in posts label'] ?></th>
402:                                     <td>420:                                     <td>
403:                                         <input type="radio" name="form[show_user_info]" value="1"<?php if ($pun_config['o_show_user_info'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[show_user_info]" value="0"<?php if ($pun_config['o_show_user_info'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>421:                                         <input type="radio" name="form[show_user_info]" id="form_show_user_info_1" value="1"<?php if ($pun_config['o_show_user_info'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_show_user_info_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[show_user_info]" id="form_show_user_info_0" value="0"<?php if ($pun_config['o_show_user_info'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_show_user_info_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
404:                                         <span><?php echo $lang_admin_options['Info in posts help'] ?></span>422:                                         <span><?php echo $lang_admin_options['Info in posts help'] ?></span>
405:                                     </td>423:                                     </td>
406:                                 </tr>424:                                 </tr>
407:                                 <tr>425:                                 <tr>
408:                                     <th scope="row"><?php echo $lang_admin_options['Post count label'] ?></th>426:                                     <th scope="row"><?php echo $lang_admin_options['Post count label'] ?></th>
409:                                     <td>427:                                     <td>
410:                                         <input type="radio" name="form[show_post_count]" value="1"<?php if ($pun_config['o_show_post_count'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[show_post_count]" value="0"<?php if ($pun_config['o_show_post_count'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>428:                                         <input type="radio" name="form[show_post_count]" id="form_show_post_count_1" value="1"<?php if ($pun_config['o_show_post_count'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_show_post_count_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[show_post_count]" id="form_show_post_count_0" value="0"<?php if ($pun_config['o_show_post_count'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_show_post_count_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
411:                                         <span><?php echo $lang_admin_options['Post count help'] ?></span>429:                                         <span><?php echo $lang_admin_options['Post count help'] ?></span>
412:                                     </td>430:                                     </td>
413:                                 </tr>431:                                 </tr>
414:                                 <tr>432:                                 <tr>
415:                                     <th scope="row"><?php echo $lang_admin_options['Smilies label'] ?></th>433:                                     <th scope="row"><?php echo $lang_admin_options['Smilies label'] ?></th>
416:                                     <td>434:                                     <td>
417:                                         <input type="radio" name="form[smilies]" value="1"<?php if ($pun_config['o_smilies'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[smilies]" value="0"<?php if ($pun_config['o_smilies'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>435:                                         <input type="radio" name="form[smilies]" id="form_smilies_1" value="1"<?php if ($pun_config['o_smilies'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_smilies_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[smilies]" id="form_smilies_0" value="0"<?php if ($pun_config['o_smilies'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_smilies_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
418:                                         <span><?php echo $lang_admin_options['Smilies help'] ?></span>436:                                         <span><?php echo $lang_admin_options['Smilies help'] ?></span>
419:                                     </td>437:                                     </td>
420:                                 </tr>438:                                 </tr>
421:                                 <tr>439:                                 <tr>
422:                                     <th scope="row"><?php echo $lang_admin_options['Smilies sigs label'] ?></th>440:                                     <th scope="row"><?php echo $lang_admin_options['Smilies sigs label'] ?></th>
423:                                     <td>441:                                     <td>
424:                                         <input type="radio" name="form[smilies_sig]" value="1"<?php if ($pun_config['o_smilies_sig'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[smilies_sig]" value="0"<?php if ($pun_config['o_smilies_sig'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>442:                                         <input type="radio" name="form[smilies_sig]" id="form_smilies_sig_1" value="1"<?php if ($pun_config['o_smilies_sig'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_smilies_sig_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[smilies_sig]" id="form_smilies_sig_0" value="0"<?php if ($pun_config['o_smilies_sig'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_smilies_sig_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
425:                                         <span><?php echo $lang_admin_options['Smilies sigs help'] ?></span>443:                                         <span><?php echo $lang_admin_options['Smilies sigs help'] ?></span>
426:                                     </td>444:                                     </td>
427:                                 </tr>445:                                 </tr>
428:                                 <tr>446:                                 <tr>
429:                                     <th scope="row"><?php echo $lang_admin_options['Clickable links label'] ?></th>447:                                     <th scope="row"><?php echo $lang_admin_options['Clickable links label'] ?></th>
430:                                     <td>448:                                     <td>
431:                                         <input type="radio" name="form[make_links]" value="1"<?php if ($pun_config['o_make_links'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[make_links]" value="0"<?php if ($pun_config['o_make_links'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>449:                                         <input type="radio" name="form[make_links]" id="form_make_links_1" value="1"<?php if ($pun_config['o_make_links'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_make_links_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[make_links]" id="form_make_links_0" value="0"<?php if ($pun_config['o_make_links'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_make_links_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
432:                                         <span><?php echo $lang_admin_options['Clickable links help'] ?></span>450:                                         <span><?php echo $lang_admin_options['Clickable links help'] ?></span>
433:                                     </td>451:                                     </td>
434:                                 </tr>452:                                 </tr>
479:                                 <tr>497:                                 <tr>
480:                                     <th scope="row"><?php echo $lang_admin_options['Quick post label'] ?></th>498:                                     <th scope="row"><?php echo $lang_admin_options['Quick post label'] ?></th>
481:                                     <td>499:                                     <td>
482:                                         <input type="radio" name="form[quickpost]" value="1"<?php if ($pun_config['o_quickpost'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[quickpost]" value="0"<?php if ($pun_config['o_quickpost'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>500:                                         <input type="radio" name="form[quickpost]" id="form_quickpost_1" value="1"<?php if ($pun_config['o_quickpost'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_quickpost_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[quickpost]" id="form_quickpost_0" value="0"<?php if ($pun_config['o_quickpost'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_quickpost_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
483:                                         <span><?php echo $lang_admin_options['Quick post help'] ?></span>501:                                         <span><?php echo $lang_admin_options['Quick post help'] ?></span>
484:                                     </td>502:                                     </td>
485:                                 </tr>503:                                 </tr>
486:                                 <tr>504:                                 <tr>
487:                                     <th scope="row"><?php echo $lang_admin_options['Users online label'] ?></th>505:                                     <th scope="row"><?php echo $lang_admin_options['Users online label'] ?></th>
488:                                     <td>506:                                     <td>
489:                                         <input type="radio" name="form[users_online]" value="1"<?php if ($pun_config['o_users_online'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[users_online]" value="0"<?php if ($pun_config['o_users_online'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>507:                                         <input type="radio" name="form[users_online]" id="form_users_online_1" value="1"<?php if ($pun_config['o_users_online'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_users_online_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[users_online]" id="form_users_online_0" value="0"<?php if ($pun_config['o_users_online'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_users_online_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
490:                                         <span><?php echo $lang_admin_options['Users online help'] ?></span>508:                                         <span><?php echo $lang_admin_options['Users online help'] ?></span>
491:                                     </td>509:                                     </td>
492:                                 </tr>510:                                 </tr>
493:                                 <tr>511:                                 <tr>
494:                                     <th scope="row"><a name="censoring"><?php echo $lang_admin_options['Censor words label'] ?></a></th>512:                                     <th scope="row"><a name="censoring"></a><?php echo $lang_admin_options['Censor words label'] ?></th>
495:                                     <td>513:                                     <td>
496:                                         <input type="radio" name="form[censoring]" value="1"<?php if ($pun_config['o_censoring'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[censoring]" value="0"<?php if ($pun_config['o_censoring'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>514:                                         <input type="radio" name="form[censoring]" id="form_censoring_1" value="1"<?php if ($pun_config['o_censoring'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_censoring_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[censoring]" id="form_censoring_0" value="0"<?php if ($pun_config['o_censoring'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_censoring_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
497:                                         <span><?php printf($lang_admin_options['Censor words help'], '<a href="admin_censoring.php">'.$lang_admin_common['Censoring'].'</a>') ?></span>515:                                         <span><?php printf($lang_admin_options['Censor words help'], '<a href="admin_censoring.php">'.$lang_admin_common['Censoring'].'</a>') ?></span>
498:                                     </td>516:                                     </td>
499:                                 </tr>517:                                 </tr>
500:                                 <tr>518:                                 <tr>
501:                                     <th scope="row"><a name="signatures"><?php echo $lang_admin_options['Signatures label'] ?></a></th>519:                                     <th scope="row"><a name="signatures"></a><?php echo $lang_admin_options['Signatures label'] ?></th>
502:                                     <td>520:                                     <td>
503:                                         <input type="radio" name="form[signatures]" value="1"<?php if ($pun_config['o_signatures'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[signatures]" value="0"<?php if ($pun_config['o_signatures'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>521:                                         <input type="radio" name="form[signatures]" id="form_signatures_1" value="1"<?php if ($pun_config['o_signatures'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_signatures_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[signatures]" id="form_signatures_0" value="0"<?php if ($pun_config['o_signatures'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_signatures_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
504:                                         <span><?php echo $lang_admin_options['Signatures help'] ?></span>522:                                         <span><?php echo $lang_admin_options['Signatures help'] ?></span>
505:                                     </td>523:                                     </td>
506:                                 </tr>524:                                 </tr>
507:                                 <tr>525:                                 <tr>
508:                                     <th scope="row"><a name="ranks"><?php echo $lang_admin_options['User ranks label'] ?></a></th>526:                                     <th scope="row"><a name="ranks"></a><?php echo $lang_admin_options['User ranks label'] ?></th>
509:                                     <td>527:                                     <td>
510:                                         <input type="radio" name="form[ranks]" value="1"<?php if ($pun_config['o_ranks'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[ranks]" value="0"<?php if ($pun_config['o_ranks'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>528:                                         <input type="radio" name="form[ranks]" id="form_ranks_1" value="1"<?php if ($pun_config['o_ranks'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_ranks_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[ranks]" id="form_ranks_0" value="0"<?php if ($pun_config['o_ranks'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_ranks_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
511:                                         <span><?php printf($lang_admin_options['User ranks help'], '<a href="admin_ranks.php">'.$lang_admin_common['Ranks'].'</a>') ?></span>529:                                         <span><?php printf($lang_admin_options['User ranks help'], '<a href="admin_ranks.php">'.$lang_admin_common['Ranks'].'</a>') ?></span>
512:                                     </td>530:                                     </td>
513:                                 </tr>531:                                 </tr>
514:                                 <tr>532:                                 <tr>
515:                                     <th scope="row"><?php echo $lang_admin_options['User has posted label'] ?></th>533:                                     <th scope="row"><?php echo $lang_admin_options['User has posted label'] ?></th>
516:                                     <td>534:                                     <td>
517:                                         <input type="radio" name="form[show_dot]" value="1"<?php if ($pun_config['o_show_dot'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[show_dot]" value="0"<?php if ($pun_config['o_show_dot'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>535:                                         <input type="radio" name="form[show_dot]" id="form_show_dot_1" value="1"<?php if ($pun_config['o_show_dot'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_show_dot_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[show_dot]" id="form_show_dot_0" value="0"<?php if ($pun_config['o_show_dot'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_show_dot_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
518:                                         <span><?php echo $lang_admin_options['User has posted help'] ?></span>536:                                         <span><?php echo $lang_admin_options['User has posted help'] ?></span>
519:                                     </td>537:                                     </td>
520:                                 </tr>538:                                 </tr>
521:                                 <tr>539:                                 <tr>
522:                                     <th scope="row"><?php echo $lang_admin_options['Topic views label'] ?></th>540:                                     <th scope="row"><?php echo $lang_admin_options['Topic views label'] ?></th>
523:                                     <td>541:                                     <td>
524:                                         <input type="radio" name="form[topic_views]" value="1"<?php if ($pun_config['o_topic_views'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[topic_views]" value="0"<?php if ($pun_config['o_topic_views'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>542:                                         <input type="radio" name="form[topic_views]" id="form_topic_views_1" value="1"<?php if ($pun_config['o_topic_views'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_topic_views_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[topic_views]" id="form_topic_views_0" value="0"<?php if ($pun_config['o_topic_views'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_topic_views_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
525:                                         <span><?php echo $lang_admin_options['Topic views help'] ?></span>543:                                         <span><?php echo $lang_admin_options['Topic views help'] ?></span>
526:                                     </td>544:                                     </td>
527:                                 </tr>545:                                 </tr>
528:                                 <tr>546:                                 <tr>
529:                                     <th scope="row"><?php echo $lang_admin_options['Quick jump label'] ?></th>547:                                     <th scope="row"><?php echo $lang_admin_options['Quick jump label'] ?></th>
530:                                     <td>548:                                     <td>
531:                                         <input type="radio" name="form[quickjump]" value="1"<?php if ($pun_config['o_quickjump'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[quickjump]" value="0"<?php if ($pun_config['o_quickjump'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>549:                                         <input type="radio" name="form[quickjump]" id="form_quickjump_1" value="1"<?php if ($pun_config['o_quickjump'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_quickjump_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[quickjump]" id="form_quickjump_0" value="0"<?php if ($pun_config['o_quickjump'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_quickjump_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
532:                                         <span><?php echo $lang_admin_options['Quick jump help'] ?></span>550:                                         <span><?php echo $lang_admin_options['Quick jump help'] ?></span>
533:                                     </td>551:                                     </td>
534:                                 </tr>552:                                 </tr>
535:                                 <tr>553:                                 <tr>
536:                                     <th scope="row"><?php echo $lang_admin_options['GZip label'] ?></th>554:                                     <th scope="row"><?php echo $lang_admin_options['GZip label'] ?></th>
537:                                     <td>555:                                     <td>
538:                                         <input type="radio" name="form[gzip]" value="1"<?php if ($pun_config['o_gzip'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[gzip]" value="0"<?php if ($pun_config['o_gzip'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>556:                                         <input type="radio" name="form[gzip]" id="form_gzip_1" value="1"<?php if ($pun_config['o_gzip'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_gzip_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[gzip]" id="form_gzip_0" value="0"<?php if ($pun_config['o_gzip'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_gzip_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
539:                                         <span><?php echo $lang_admin_options['GZip help'] ?></span>557:                                         <span><?php echo $lang_admin_options['GZip help'] ?></span>
540:                                     </td>558:                                     </td>
541:                                 </tr>559:                                 </tr>
542:                                 <tr>560:                                 <tr>
543:                                     <th scope="row"><?php echo $lang_admin_options['Search all label'] ?></th>561:                                     <th scope="row"><?php echo $lang_admin_options['Search all label'] ?></th>
544:                                     <td>562:                                     <td>
545:                                         <input type="radio" name="form[search_all_forums]" value="1"<?php if ($pun_config['o_search_all_forums'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[search_all_forums]" value="0"<?php if ($pun_config['o_search_all_forums'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>563:                                         <input type="radio" name="form[search_all_forums]" id="form_search_all_forums_1" value="1"<?php if ($pun_config['o_search_all_forums'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_search_all_forums_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[search_all_forums]" id="form_search_all_forums_0" value="0"<?php if ($pun_config['o_search_all_forums'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_search_all_forums_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
546:                                         <span><?php echo $lang_admin_options['Search all help'] ?></span>564:                                         <span><?php echo $lang_admin_options['Search all help'] ?></span>
547:                                     </td>565:                                     </td>
548:                                 </tr>566:                                 </tr>
553:                                         <span><?php echo $lang_admin_options['Menu items help'] ?></span>571:                                         <span><?php echo $lang_admin_options['Menu items help'] ?></span>
554:                                     </td>572:                                     </td>
555:                                 </tr>573:                                 </tr>
 574:                             </table>
 575:                         </div>
 576:                     </fieldset>
 577:                 </div>
 578:                 <div class="inform">
 579:                     <fieldset>
 580:                         <legend><?php echo $lang_admin_options['Feed subhead'] ?></legend>
 581:                         <div class="infldset">
 582:                             <table class="aligntop" cellspacing="0">
556:                                 <tr>583:                                 <tr>
557:                                     <th scope="row"><?php echo $lang_admin_options['Default feed label'] ?></th>584:                                     <th scope="row"><?php echo $lang_admin_options['Default feed label'] ?></th>
558:                                     <td>585:                                     <td>
559:                                         <input type="radio" name="form[feed_type]" value="0"<?php if ($pun_config['o_feed_type'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_options['None'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[feed_type]" value="1"<?php if ($pun_config['o_feed_type'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_options['RSS'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[feed_type]" value="2"<?php if ($pun_config['o_feed_type'] == '2') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_options['Atom'] ?></strong>586:                                         <input type="radio" name="form[feed_type]" id="form_feed_type_0" value="0"<?php if ($pun_config['o_feed_type'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_options['None'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[feed_type]" id="form_feed_type_1" value="1"<?php if ($pun_config['o_feed_type'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_feed_type_0"><strong><?php echo $lang_admin_options['RSS'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[feed_type]" id="form_feed_type_2" value="2"<?php if ($pun_config['o_feed_type'] == '2') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_feed_type_1"><strong><?php echo $lang_admin_options['Atom'] ?></strong></label>
560:                                         <span><?php echo $lang_admin_options['Default feed help'] ?></span>587:                                         <span><?php echo $lang_admin_options['Default feed help'] ?></span>
561:                                     </td>588:                                     </td>
562:                                 </tr>589:                                 </tr>
 590:                                 <tr>
 591:                                     <th scope="row"><?php echo $lang_admin_options['Feed TTL label'] ?></th>
 592:                                     <td>
 593:                                         <select name="form[feed_ttl]">
 594:                                             <option value="0"<?php if ($pun_config['o_feed_ttl'] == '0') echo ' selected="selected"'; ?>><?php echo $lang_admin_options['No cache'] ?></option>
 595: <?php
 596: 
 597:         $times = array(5, 15, 30, 60);
 598: 
 599:         foreach ($times as $time)
 600:             echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$time.'"'.($pun_config['o_feed_ttl'] == $time ? ' selected="selected"' : '').'>'.sprintf($lang_admin_options['Minutes'], $time).'</option>'."\n";
 601: 
 602: ?>
 603:                                         </select>
 604:                                         <span><?php echo $lang_admin_options['Feed TTL help'] ?></span>
 605:                                     </td>
 606:                                 </tr>
563:                             </table>607:                             </table>
564:                         </div>608:                         </div>
565:                     </fieldset>609:                     </fieldset>
572:                                 <tr>616:                                 <tr>
573:                                     <th scope="row"><?php echo $lang_admin_options['Reporting method label'] ?></th>617:                                     <th scope="row"><?php echo $lang_admin_options['Reporting method label'] ?></th>
574:                                     <td>618:                                     <td>
575:                                         <input type="radio" name="form[report_method]" value="0"<?php if ($pun_config['o_report_method'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_options['Internal'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[report_method]" value="1"<?php if ($pun_config['o_report_method'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_options['By e-mail'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[report_method]" value="2"<?php if ($pun_config['o_report_method'] == '2') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_options['Both'] ?></strong>619:                                         <input type="radio" name="form[report_method]" id="form_report_method_0" value="0"<?php if ($pun_config['o_report_method'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_options['Internal'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[report_method]" id="form_report_method_1" value="1"<?php if ($pun_config['o_report_method'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_report_method_0"><strong><?php echo $lang_admin_options['By e-mail'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[report_method]" id="form_report_method_2" value="2"<?php if ($pun_config['o_report_method'] == '2') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_report_method_1"><strong><?php echo $lang_admin_options['Both'] ?></strong></label>
576:                                         <span><?php echo $lang_admin_options['Reporting method help'] ?></span>620:                                         <span><?php echo $lang_admin_options['Reporting method help'] ?></span>
577:                                     </td>621:                                     </td>
578:                                 </tr>622:                                 </tr>
595:                                 <tr>639:                                 <tr>
596:                                     <th scope="row"><?php echo $lang_admin_options['Use avatars label'] ?></th>640:                                     <th scope="row"><?php echo $lang_admin_options['Use avatars label'] ?></th>
597:                                     <td>641:                                     <td>
598:                                         <input type="radio" name="form[avatars]" value="1"<?php if ($pun_config['o_avatars'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[avatars]" value="0"<?php if ($pun_config['o_avatars'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>642:                                         <input type="radio" name="form[avatars]" id="form_avatars_1" value="1"<?php if ($pun_config['o_avatars'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_avatars_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[avatars]" id="form_avatars_0" value="0"<?php if ($pun_config['o_avatars'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_avatars_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
599:                                         <span><?php echo $lang_admin_options['Use avatars help'] ?></span>643:                                         <span><?php echo $lang_admin_options['Use avatars help'] ?></span>
600:                                     </td>644:                                     </td>
601:                                 </tr>645:                                 </tr>
651:                                     </td>695:                                     </td>
652:                                 </tr>696:                                 </tr>
653:                                 <tr>697:                                 <tr>
654:                                     <th scope="row"><?php echo $lang_admin_options['Subscriptions label'] ?></th>698:                                     <th scope="row"><?php echo $lang_admin_options['Forum subscriptions label'] ?></th>
 699:                                     <td>
 700:                                         <input type="radio" name="form[forum_subscriptions]" id="form_forum_subscriptions_1" value="1"<?php if ($pun_config['o_forum_subscriptions'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_forum_subscriptions_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[forum_subscriptions]" id="form_forum_subscriptions_0" value="0"<?php if ($pun_config['o_forum_subscriptions'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_forum_subscriptions_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
 701:                                         <span><?php echo $lang_admin_options['Forum subscriptions help'] ?></span>
 702:                                     </td>
 703:                                 </tr>
 704:                                 <tr>
 705:                                     <th scope="row"><?php echo $lang_admin_options['Topic subscriptions label'] ?></th>
655:                                     <td>706:                                     <td>
656:                                         <input type="radio" name="form[subscriptions]" value="1"<?php if ($pun_config['o_subscriptions'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[subscriptions]" value="0"<?php if ($pun_config['o_subscriptions'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>707:                                         <input type="radio" name="form[topic_subscriptions]" id="form_topic_subscriptions_1" value="1"<?php if ($pun_config['o_topic_subscriptions'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_topic_subscriptions_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[topic_subscriptions]" id="form_topic_subscriptions_0" value="0"<?php if ($pun_config['o_topic_subscriptions'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_topic_subscriptions_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
657:                                         <span><?php echo $lang_admin_options['Subscriptions help'] ?></span>708:                                         <span><?php echo $lang_admin_options['Topic subscriptions help'] ?></span>
658:                                     </td>709:                                     </td>
659:                                 </tr>710:                                 </tr>
660:                                 <tr>711:                                 <tr>
674:                                 <tr>725:                                 <tr>
675:                                     <th scope="row"><?php echo $lang_admin_options['SMTP password label'] ?></th>726:                                     <th scope="row"><?php echo $lang_admin_options['SMTP password label'] ?></th>
676:                                     <td>727:                                     <td>
677:                                         <input type="text" name="form[smtp_pass]" size="25" maxlength="50" value="<?php echo pun_htmlspecialchars($pun_config['o_smtp_pass']) ?>" />728:                                         <span><input type="checkbox" name="form[smtp_change_pass]" id="form_smtp_change_pass" value="1" />&#160;&#160;<label class="conl" for="form_smtp_change_pass"><?php echo $lang_admin_options['SMTP change password help'] ?></label></span>
 729: <?php $smtp_pass = !empty($pun_config['o_smtp_pass']) ? random_key(pun_strlen($pun_config['o_smtp_pass']), true) : ''; ?>
 730:                                         <input type="password" name="form[smtp_pass1]" size="25" maxlength="50" value="<?php echo $smtp_pass ?>" />
 731:                                         <input type="password" name="form[smtp_pass2]" size="25" maxlength="50" value="<?php echo $smtp_pass ?>" />
678:                                         <span><?php echo $lang_admin_options['SMTP password help'] ?></span>732:                                         <span><?php echo $lang_admin_options['SMTP password help'] ?></span>
679:                                     </td>733:                                     </td>
680:                                 </tr>734:                                 </tr>
681:                                 <tr>735:                                 <tr>
682:                                     <th scope="row"><?php echo $lang_admin_options['SMTP SSL label'] ?></th>736:                                     <th scope="row"><?php echo $lang_admin_options['SMTP SSL label'] ?></th>
683:                                     <td>737:                                     <td>
684:                                         <input type="radio" name="form[smtp_ssl]" value="1"<?php if ($pun_config['o_smtp_ssl'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[smtp_ssl]" value="0"<?php if ($pun_config['o_smtp_ssl'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>738:                                         <input type="radio" name="form[smtp_ssl]" id="form_smtp_ssl_1" value="1"<?php if ($pun_config['o_smtp_ssl'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_smtp_ssl_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[smtp_ssl]" id="form_smtp_ssl_0" value="0"<?php if ($pun_config['o_smtp_ssl'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_smtp_ssl_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
685:                                         <span><?php echo $lang_admin_options['SMTP SSL help'] ?></span>739:                                         <span><?php echo $lang_admin_options['SMTP SSL help'] ?></span>
686:                                     </td>740:                                     </td>
687:                                 </tr>741:                                 </tr>
697:                                 <tr>751:                                 <tr>
698:                                     <th scope="row"><?php echo $lang_admin_options['Allow new label'] ?></th>752:                                     <th scope="row"><?php echo $lang_admin_options['Allow new label'] ?></th>
699:                                     <td>753:                                     <td>
700:                                         <input type="radio" name="form[regs_allow]" value="1"<?php if ($pun_config['o_regs_allow'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[regs_allow]" value="0"<?php if ($pun_config['o_regs_allow'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>754:                                         <input type="radio" name="form[regs_allow]" id="form_regs_allow_1" value="1"<?php if ($pun_config['o_regs_allow'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_regs_allow_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[regs_allow]" id="form_regs_allow_0" value="0"<?php if ($pun_config['o_regs_allow'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_regs_allow_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
701:                                         <span><?php echo $lang_admin_options['Allow new help'] ?></span>755:                                         <span><?php echo $lang_admin_options['Allow new help'] ?></span>
702:                                     </td>756:                                     </td>
703:                                 </tr>757:                                 </tr>
704:                                 <tr>758:                                 <tr>
705:                                     <th scope="row"><?php echo $lang_admin_options['Verify label'] ?></th>759:                                     <th scope="row"><?php echo $lang_admin_options['Verify label'] ?></th>
706:                                     <td>760:                                     <td>
707:                                         <input type="radio" name="form[regs_verify]" value="1"<?php if ($pun_config['o_regs_verify'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[regs_verify]" value="0"<?php if ($pun_config['o_regs_verify'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>761:                                         <input type="radio" name="form[regs_verify]" id="form_regs_verify_1" value="1"<?php if ($pun_config['o_regs_verify'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_regs_verify_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[regs_verify]" id="form_regs_verify_0" value="0"<?php if ($pun_config['o_regs_verify'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_regs_verify_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
708:                                         <span><?php echo $lang_admin_options['Verify help'] ?></span>762:                                         <span><?php echo $lang_admin_options['Verify help'] ?></span>
709:                                     </td>763:                                     </td>
710:                                 </tr>764:                                 </tr>
711:                                 <tr>765:                                 <tr>
712:                                     <th scope="row"><?php echo $lang_admin_options['Report new label'] ?></th>766:                                     <th scope="row"><?php echo $lang_admin_options['Report new label'] ?></th>
713:                                     <td>767:                                     <td>
714:                                         <input type="radio" name="form[regs_report]" value="1"<?php if ($pun_config['o_regs_report'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[regs_report]" value="0"<?php if ($pun_config['o_regs_report'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>768:                                         <input type="radio" name="form[regs_report]" id="form_regs_report_1" value="1"<?php if ($pun_config['o_regs_report'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_regs_report_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[regs_report]" id="form_regs_report_0" value="0"<?php if ($pun_config['o_regs_report'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_regs_report_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
715:                                         <span><?php echo $lang_admin_options['Report new help'] ?></span>769:                                         <span><?php echo $lang_admin_options['Report new help'] ?></span>
716:                                     </td>770:                                     </td>
717:                                 </tr>771:                                 </tr>
718:                                 <tr>772:                                 <tr>
719:                                     <th scope="row"><?php echo $lang_admin_options['Use rules label'] ?></th>773:                                     <th scope="row"><?php echo $lang_admin_options['Use rules label'] ?></th>
720:                                     <td>774:                                     <td>
721:                                         <input type="radio" name="form[rules]" value="1"<?php if ($pun_config['o_rules'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[rules]" value="0"<?php if ($pun_config['o_rules'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>775:                                         <input type="radio" name="form[rules]" id="form_rules_1" value="1"<?php if ($pun_config['o_rules'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_rules_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[rules]" id="form_rules_0" value="0"<?php if ($pun_config['o_rules'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_rules_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
722:                                         <span><?php echo $lang_admin_options['Use rules help'] ?></span>776:                                         <span><?php echo $lang_admin_options['Use rules help'] ?></span>
723:                                     </td>777:                                     </td>
724:                                 </tr>778:                                 </tr>
733:                                     <th scope="row"><?php echo $lang_admin_options['E-mail default label'] ?></th>787:                                     <th scope="row"><?php echo $lang_admin_options['E-mail default label'] ?></th>
734:                                     <td>788:                                     <td>
735:                                         <span><?php echo $lang_admin_options['E-mail default help'] ?></span>789:                                         <span><?php echo $lang_admin_options['E-mail default help'] ?></span>
736:                                         <input type="radio" name="form[default_email_setting]" value="0"<?php if ($pun_config['o_default_email_setting'] == '0') echo ' checked="checked"' ?> />&#160;<?php echo $lang_admin_options['Display e-mail label'] ?><br />790:                                         <input type="radio" name="form[default_email_setting]" id="form_default_email_setting_0" value="0"<?php if ($pun_config['o_default_email_setting'] == '0') echo ' checked="checked"' ?> />&#160;<?php echo $lang_admin_options['Display e-mail label'] ?><br />
737:                                         <input type="radio" name="form[default_email_setting]" value="1"<?php if ($pun_config['o_default_email_setting'] == '1') echo ' checked="checked"' ?> />&#160;<?php echo $lang_admin_options['Hide allow form label'] ?><br />791:                                         <input type="radio" name="form[default_email_setting]" id="form_default_email_setting_1" value="1"<?php if ($pun_config['o_default_email_setting'] == '1') echo ' checked="checked"' ?> />&#160;<?php echo $lang_admin_options['Hide allow form label'] ?><br />
738:                                         <input type="radio" name="form[default_email_setting]" value="2"<?php if ($pun_config['o_default_email_setting'] == '2') echo ' checked="checked"' ?> />&#160;<?php echo $lang_admin_options['Hide both label'] ?><br />792:                                         <input type="radio" name="form[default_email_setting]" id="form_default_email_setting_2" value="2"<?php if ($pun_config['o_default_email_setting'] == '2') echo ' checked="checked"' ?> />&#160;<?php echo $lang_admin_options['Hide both label'] ?><br />
739:                                     </td>793:                                     </td>
740:                                 </tr>794:                                 </tr>
741:                             </table>795:                             </table>
750:                                 <tr>804:                                 <tr>
751:                                     <th scope="row"><?php echo $lang_admin_options['Display announcement label'] ?></th>805:                                     <th scope="row"><?php echo $lang_admin_options['Display announcement label'] ?></th>
752:                                     <td>806:                                     <td>
753:                                         <input type="radio" name="form[announcement]" value="1"<?php if ($pun_config['o_announcement'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[announcement]" value="0"<?php if ($pun_config['o_announcement'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>807:                                         <input type="radio" name="form[announcement]" id="form_announcement_1" value="1"<?php if ($pun_config['o_announcement'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_announcement_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[announcement]" id="form_announcement_0" value="0"<?php if ($pun_config['o_announcement'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_announcement_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
754:                                         <span><?php echo $lang_admin_options['Display announcement help'] ?></span>808:                                         <span><?php echo $lang_admin_options['Display announcement help'] ?></span>
755:                                     </td>809:                                     </td>
756:                                 </tr>810:                                 </tr>
771:                         <div class="infldset">825:                         <div class="infldset">
772:                             <table class="aligntop" cellspacing="0">826:                             <table class="aligntop" cellspacing="0">
773:                                 <tr>827:                                 <tr>
774:                                     <th scope="row"><a name="maintenance"><?php echo $lang_admin_options['Maintenance mode label'] ?></a></th>828:                                     <th scope="row"><a name="maintenance"></a><?php echo $lang_admin_options['Maintenance mode label'] ?></th>
775:                                     <td>829:                                     <td>
776:                                         <input type="radio" name="form[maintenance]" value="1"<?php if ($pun_config['o_maintenance'] == '1') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="form[maintenance]" value="0"<?php if ($pun_config['o_maintenance'] == '0') echo ' checked="checked"' ?> />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>830:                                         <input type="radio" name="form[maintenance]" id="form_maintenance_1" value="1"<?php if ($pun_config['o_maintenance'] == '1') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_maintenance_1"><strong><?php echo $lang_admin_common['Yes'] ?></strong></label>&#160;&#160;&#160;<input type="radio" name="form[maintenance]" id="form_maintenance_0" value="0"<?php if ($pun_config['o_maintenance'] == '0') echo ' checked="checked"' ?> />&#160;<label class="conl" for="form_maintenance_0"><strong><?php echo $lang_admin_common['No'] ?></strong></label>
777:                                         <span><?php echo $lang_admin_options['Maintenance mode help'] ?></span>831:                                         <span><?php echo $lang_admin_options['Maintenance mode help'] ?></span>
778:                                     </td>832:                                     </td>
779:                                 </tr>833:                                 </tr>


a/admin_permissions.php b/admin_permissions.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if ($pun_user['g_id'] != PUN_ADMIN) 17: if ($pun_user['g_id'] != PUN_ADMIN)
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_permissions.php language file 20: // Load the admin_permissions.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_permissions.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_permissions.php';
 28:  28: 
 29:     foreach ($form as $key => $input) 29:     foreach ($form as $key => $input)
 30:     { 30:     {
  31:         // Make sure the input is never a negative value
  32:         if($input < 0)
  33:             $input = 0;
  34: 
 31:         // Only update values that have changed 35:         // Only update values that have changed
 32:         if (array_key_exists('p_'.$key, $pun_config) && $pun_config['p_'.$key] != $input) 36:         if (array_key_exists('p_'.$key, $pun_config) && $pun_config['p_'.$key] != $input)
 33:             $db->query('UPDATE '.$db->prefix.'config SET conf_value='.$input.' WHERE conf_name=\'p_'.$db->escape($key).'\'') or error('Unable to update board config', __FILE__, __LINE__, $db->error()); 37:             $db->query('UPDATE '.$db->prefix.'config SET conf_value='.$input.' WHERE conf_name=\'p_'.$db->escape($key).'\'') or error('Unable to update board config', __FILE__, __LINE__, $db->error());


a/admin_prune.php /dev/null


a/admin_ranks.php b/admin_ranks.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if ($pun_user['g_id'] != PUN_ADMIN) 17: if ($pun_user['g_id'] != PUN_ADMIN)
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_ranks.php language file 20: // Load the admin_ranks.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_ranks.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_ranks.php';
 26:     confirm_referrer('admin_ranks.php'); 26:     confirm_referrer('admin_ranks.php');
 27:  27: 
 28:     $rank = pun_trim($_POST['new_rank']); 28:     $rank = pun_trim($_POST['new_rank']);
 29:     $min_posts = trim($_POST['new_min_posts']); 29:     $min_posts = pun_trim($_POST['new_min_posts']);
 30:  30: 
 31:     if ($rank == '') 31:     if ($rank == '')
 32:         message($lang_admin_ranks['Must enter title message']); 32:         message($lang_admin_ranks['Must enter title message']);
 33:  33: 
 34:     if ($min_posts == '' || preg_match('/[^0-9]/', $min_posts)) 34:     if ($min_posts == '' || preg_match('%[^0-9]%', $min_posts))
 35:         message($lang_admin_ranks['Must be integer message']); 35:         message($lang_admin_ranks['Must be integer message']);
 36:  36: 
 37:     // Make sure there isn't already a rank with the same min_posts value 37:     // Make sure there isn't already a rank with the same min_posts value
 59:     $id = intval(key($_POST['update'])); 59:     $id = intval(key($_POST['update']));
 60:  60: 
 61:     $rank = pun_trim($_POST['rank'][$id]); 61:     $rank = pun_trim($_POST['rank'][$id]);
 62:     $min_posts = trim($_POST['min_posts'][$id]); 62:     $min_posts = pun_trim($_POST['min_posts'][$id]);
 63:  63: 
 64:     if ($rank == '') 64:     if ($rank == '')
 65:         message($lang_admin_ranks['Must enter title message']); 65:         message($lang_admin_ranks['Must enter title message']);
 66:  66: 
 67:     if ($min_posts == '' || preg_match('/[^0-9]/', $min_posts)) 67:     if ($min_posts == '' || preg_match('%[^0-9]%', $min_posts))
 68:         message($lang_admin_ranks['Must be integer message']); 68:         message($lang_admin_ranks['Must be integer message']);
 69:  69: 
 70:     // Make sure there isn't already a rank with the same min_posts value 70:     // Make sure there isn't already a rank with the same min_posts value
113:     <div class="blockform">113:     <div class="blockform">
114:         <h2><span><?php echo $lang_admin_ranks['Ranks head'] ?></span></h2>114:         <h2><span><?php echo $lang_admin_ranks['Ranks head'] ?></span></h2>
115:         <div class="box">115:         <div class="box">
116:             <form id="ranks" method="post" action="admin_ranks.php?action=foo">116:             <form id="ranks" method="post" action="admin_ranks.php">
117:                 <div class="inform">117:                 <div class="inform">
118:                     <fieldset>118:                     <fieldset>
119:                         <legend><?php echo $lang_admin_ranks['Add rank subhead'] ?></legend>119:                         <legend><?php echo $lang_admin_ranks['Add rank subhead'] ?></legend>
120:                         <div class="infldset">120:                         <div class="infldset">
121:                             <p><?php printf($lang_admin_ranks['Add rank info'], '<a href="admin_options.php#ranks">'.$lang_admin_common['Options'].'</a>') ?></p>121:                             <p><?php echo $lang_admin_ranks['Add rank info'].' '.($pun_config['o_ranks'] == '1' ? sprintf($lang_admin_ranks['Ranks enabled'], '<a href="admin_options.php#ranks">'.$lang_admin_common['Options'].'</a>') : sprintf($lang_admin_ranks['Ranks disabled'], '<a href="admin_options.php#ranks">'.$lang_admin_common['Options'].'</a>')) ?></p>
122:                             <table cellspacing="0">122:                             <table cellspacing="0">
123:                             <thead>123:                             <thead>
124:                                 <tr>124:                                 <tr>


a/admin_reports.php b/admin_reports.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if (!$pun_user['is_admmod']) 17: if (!$pun_user['is_admmod'])
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_reports.php language file 20: // Load the admin_reports.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_reports.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_reports.php';
 33:     if ($zapped == '') 33:     if ($zapped == '')
 34:         $db->query('UPDATE '.$db->prefix.'reports SET zapped='.time().', zapped_by='.$pun_user['id'].' WHERE id='.$zap_id) or error('Unable to zap report', __FILE__, __LINE__, $db->error()); 34:         $db->query('UPDATE '.$db->prefix.'reports SET zapped='.time().', zapped_by='.$pun_user['id'].' WHERE id='.$zap_id) or error('Unable to zap report', __FILE__, __LINE__, $db->error());
 35:  35: 
  36:     // Delete old reports (which cannot be viewed anyway)
  37:     $result = $db->query('SELECT zapped FROM '.$db->prefix.'reports WHERE zapped IS NOT NULL ORDER BY zapped DESC LIMIT 10,1') or error('Unable to fetch read reports to delete', __FILE__, __LINE__, $db->error());
  38:     if ($db->num_rows($result) > 0)
  39:     {
  40:         $zapped_threshold = $db->result($result);
  41:         $db->query('DELETE FROM '.$db->prefix.'reports WHERE zapped <= '.$zapped_threshold) or error('Unable to delete old read reports', __FILE__, __LINE__, $db->error());
  42:     }
  43: 
 36:     redirect('admin_reports.php', $lang_admin_reports['Report zapped redirect']); 44:     redirect('admin_reports.php', $lang_admin_reports['Report zapped redirect']);
 37: } 45: }
 38:  46: 
 60:         $forum = ($cur_report['forum_name'] != '') ? '<span><a href="viewforum.php?id='.$cur_report['forum_id'].'">'.pun_htmlspecialchars($cur_report['forum_name']).'</a></span>' : '<span>'.$lang_admin_reports['Deleted'].'</span>'; 68:         $forum = ($cur_report['forum_name'] != '') ? '<span><a href="viewforum.php?id='.$cur_report['forum_id'].'">'.pun_htmlspecialchars($cur_report['forum_name']).'</a></span>' : '<span>'.$lang_admin_reports['Deleted'].'</span>';
 61:         $topic = ($cur_report['subject'] != '') ? '<span>»&#160;<a href="viewtopic.php?id='.$cur_report['topic_id'].'">'.pun_htmlspecialchars($cur_report['subject']).'</a></span>' : '<span>»&#160;'.$lang_admin_reports['Deleted'].'</span>'; 69:         $topic = ($cur_report['subject'] != '') ? '<span>»&#160;<a href="viewtopic.php?id='.$cur_report['topic_id'].'">'.pun_htmlspecialchars($cur_report['subject']).'</a></span>' : '<span>»&#160;'.$lang_admin_reports['Deleted'].'</span>';
 62:         $post = str_replace("\n", '<br />', pun_htmlspecialchars($cur_report['message'])); 70:         $post = str_replace("\n", '<br />', pun_htmlspecialchars($cur_report['message']));
 63:         $postid = ($cur_report['pid'] != '') ? '<span>»&#160;<a href="viewtopic.php?pid='.$cur_report['pid'].'#p'.$cur_report['pid'].'">Post #'.$cur_report['pid'].'</a></span>' : '<span>»&#160;'.$lang_admin_reports['Deleted'].'</span>'; 71:         $post_id = ($cur_report['pid'] != '') ? '<span>»&#160;<a href="viewtopic.php?pid='.$cur_report['pid'].'#p'.$cur_report['pid'].'">'.sprintf($lang_admin_reports['Post ID'], $cur_report['pid']).'</a></span>' : '<span>»&#160;'.$lang_admin_reports['Deleted'].'</span>';
 64:         $report_location = array($forum, $topic, $postid); 72:         $report_location = array($forum, $topic, $post_id);
 65:  73: 
 66: ?> 74: ?>
 67:                 <div class="inform"> 75:                 <div class="inform">
122:         $forum = ($cur_report['forum_name'] != '') ? '<span><a href="viewforum.php?id='.$cur_report['forum_id'].'">'.pun_htmlspecialchars($cur_report['forum_name']).'</a></span>' : '<span>'.$lang_admin_reports['Deleted'].'</span>';130:         $forum = ($cur_report['forum_name'] != '') ? '<span><a href="viewforum.php?id='.$cur_report['forum_id'].'">'.pun_htmlspecialchars($cur_report['forum_name']).'</a></span>' : '<span>'.$lang_admin_reports['Deleted'].'</span>';
123:         $topic = ($cur_report['subject'] != '') ? '<span>»&#160;<a href="viewtopic.php?id='.$cur_report['topic_id'].'">'.pun_htmlspecialchars($cur_report['subject']).'</a></span>' : '<span>»&#160;'.$lang_admin_reports['Deleted'].'</span>';131:         $topic = ($cur_report['subject'] != '') ? '<span>»&#160;<a href="viewtopic.php?id='.$cur_report['topic_id'].'">'.pun_htmlspecialchars($cur_report['subject']).'</a></span>' : '<span>»&#160;'.$lang_admin_reports['Deleted'].'</span>';
124:         $post = str_replace("\n", '<br />', pun_htmlspecialchars($cur_report['message']));132:         $post = str_replace("\n", '<br />', pun_htmlspecialchars($cur_report['message']));
125:         $post_id = ($cur_report['pid'] != '') ? '<span>»&#160;<a href="viewtopic.php?pid='.$cur_report['pid'].'#p'.$cur_report['pid'].'">Post #'.$cur_report['pid'].'</a></span>' : '<span>»&#160;'.$lang_admin_reports['Deleted'].'</span>';133:         $post_id = ($cur_report['pid'] != '') ? '<span>»&#160;<a href="viewtopic.php?pid='.$cur_report['pid'].'#p'.$cur_report['pid'].'">'.sprintf($lang_admin_reports['Post ID'], $cur_report['pid']).'</a></span>' : '<span>»&#160;'.$lang_admin_reports['Deleted'].'</span>';
126:         $zapped_by = ($cur_report['zapped_by'] != '') ? '<a href="profile.php?id='.$cur_report['zapped_by_id'].'">'.pun_htmlspecialchars($cur_report['zapped_by']).'</a>' : $lang_admin_reports['NA'];134:         $zapped_by = ($cur_report['zapped_by'] != '') ? '<a href="profile.php?id='.$cur_report['zapped_by_id'].'">'.pun_htmlspecialchars($cur_report['zapped_by']).'</a>' : $lang_admin_reports['NA'];
127:         $zapped_by = ($cur_report['zapped_by'] != '') ? '<strong>'.pun_htmlspecialchars($cur_report['zapped_by']).'</strong>' : $lang_admin_reports['NA'];135:         $zapped_by = ($cur_report['zapped_by'] != '') ? '<strong>'.pun_htmlspecialchars($cur_report['zapped_by']).'</strong>' : $lang_admin_reports['NA'];
128:         $report_location = array($forum, $topic, $post_id);136:         $report_location = array($forum, $topic, $post_id);
173: </div>181: </div>
174: <?php182: <?php
175: 183: 
176: require PUN_ROOT.'footer.php'; 
177: 184: 
 185: require PUN_ROOT.'footer.php';


a/admin_users.php b/admin_users.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
  9: // Tell header.php to use the admin template  9: // Tell header.php to use the admin template
 10: define('PUN_ADMIN_CONSOLE', 1); 10: define('PUN_ADMIN_CONSOLE', 1);
 11:  11: 
 12: define('PUN_ROOT', './'); 12: define('PUN_ROOT', dirname(__FILE__).'/');
 13: require PUN_ROOT.'include/common.php'; 13: require PUN_ROOT.'include/common.php';
 14: require PUN_ROOT.'include/common_admin.php'; 14: require PUN_ROOT.'include/common_admin.php';
 15:  15: 
 16:  16: 
 17: if (!$pun_user['is_admmod']) 17: if (!$pun_user['is_admmod'])
 18:     message($lang_common['No permission']); 18:     message($lang_common['No permission'], false, '403 Forbidden');
 19:  19: 
 20: // Load the admin_users.php language file 20: // Load the admin_users.php language file
 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_users.php'; 21: require PUN_ROOT.'lang/'.$admin_language.'/admin_users.php';
 83:  83: 
 84: ?> 84: ?>
 85:                 <tr> 85:                 <tr>
 86:                     <td class="tcl"><a href="moderate.php?get_host=<?php echo $cur_ip['poster_ip'] ?>"><?php echo $cur_ip['poster_ip'] ?></a></td> 86:                     <td class="tcl"><a href="moderate.php?get_host=<?php echo pun_htmlspecialchars($cur_ip['poster_ip']) ?>"><?php echo pun_htmlspecialchars($cur_ip['poster_ip']) ?>"><?php echo $cur_ip['poster_ip'] ?></a></td>
 87:                     <td class="tc2"><?php echo format_time($cur_ip['last_used']) ?></td> 87:                     <td class="tc2"><?php echo format_time($cur_ip['last_used']) ?></td>
 88:                     <td class="tc3"><?php echo $cur_ip['used_times'] ?></td> 88:                     <td class="tc3"><?php echo $cur_ip['used_times'] ?></td>
 89:                     <td class="tcr"><a href="admin_users.php?show_users=<?php echo $cur_ip['poster_ip'] ?>"><?php echo $lang_admin_users['Results find more link'] ?></a></td> 89:                     <td class="tcr"><a href="admin_users.php?show_users=<?php echo pun_htmlspecialchars($cur_ip['poster_ip']) ?>"><?php echo $lang_admin_users['Results find more link'] ?></a></td>
 90:                 </tr> 90:                 </tr>
 91: <?php 91: <?php
 92:  92: 
123: 123: 
124: if (isset($_GET['show_users']))124: if (isset($_GET['show_users']))
125: {125: {
126:     $ip = $_GET['show_users'];126:     $ip = pun_trim($_GET['show_users']);
127: 127: 
128:     if (!@preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/', $ip) && !@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}:))$/', $ip))128:     if (!@preg_match('%^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$%', $ip) && !@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}:))$%', $ip))
129:         message($lang_admin_users['Bad IP message']);129:         message($lang_admin_users['Bad IP message']);
130: 130: 
131:     // Fetch user count131:     // Fetch user count
194:             {194:             {
195:                 $user_title = get_title($user_data);195:                 $user_title = get_title($user_data);
196: 196: 
197:                 $actions = '<a href="admin_users.php?ip_stats='.$user_data['id'].'">'.$lang_admin_users['Results view IP link'].'</a> | <a href="search.php?action=show_user&amp;user_id='.$user_data['id'].'">'.$lang_admin_users['Results show posts link'].'</a>';197:                 $actions = '<a href="admin_users.php?ip_stats='.$user_data['id'].'">'.$lang_admin_users['Results view IP link'].'</a> | <a href="search.php?action=show_user_posts&amp;user_id='.$user_data['id'].'">'.$lang_admin_users['Results show posts link'].'</a>';
198: 198: 
199: ?>199: ?>
200:                 <tr>200:                 <tr>
253: }253: }
254: 254: 
255: 255: 
 256: // Move multiple users to other user groups
 257: else if (isset($_POST['move_users']) || isset($_POST['move_users_comply']))
 258: {
 259:     if ($pun_user['g_id'] > PUN_ADMIN)
 260:         message($lang_common['No permission'], false, '403 Forbidden');
 261: 
 262:     confirm_referrer('admin_users.php');
 263: 
 264:     if (isset($_POST['users']))
 265:     {
 266:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);
 267:         $user_ids = array_map('intval', $user_ids);
 268: 
 269:         // Delete invalid IDs
 270:         $user_ids = array_diff($user_ids, array(0, 1));
 271:     }
 272:     else
 273:         $user_ids = array();
 274: 
 275:     if (empty($user_ids))
 276:         message($lang_admin_users['No users selected']);
 277: 
 278:     // Are we trying to batch move any admins?
 279:     $result = $db->query('SELECT COUNT(*) FROM '.$db->prefix.'users WHERE id IN ('.implode(',', $user_ids).') AND group_id='.PUN_ADMIN) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 280:     if ($db->result($result) > 0)
 281:         message($lang_admin_users['No move admins message']);
 282: 
 283:     // Fetch all user groups
 284:     $all_groups = array();
 285:     $result = $db->query('SELECT g_id, g_title FROM '.$db->prefix.'groups WHERE g_id NOT IN ('.PUN_GUEST.','.PUN_ADMIN.') ORDER BY g_title ASC') or error('Unable to fetch groups', __FILE__, __LINE__, $db->error());
 286:     while ($row = $db->fetch_row($result))
 287:         $all_groups[$row[0]] = $row[1];
 288: 
 289:     if (isset($_POST['move_users_comply']))
 290:     {
 291:         $new_group = isset($_POST['new_group']) && isset($all_groups[$_POST['new_group']]) ? $_POST['new_group'] : message($lang_admin_users['Invalid group message']);
 292: 
 293:         // Is the new group a moderator group?
 294:         $result = $db->query('SELECT g_moderator FROM '.$db->prefix.'groups WHERE g_id='.$new_group) or error('Unable to fetch group info', __FILE__, __LINE__, $db->error());
 295:         $new_group_mod = $db->result($result);
 296: 
 297:         // Fetch user groups
 298:         $user_groups = array();
 299:         $result = $db->query('SELECT id, group_id FROM '.$db->prefix.'users WHERE id IN ('.implode(',', $user_ids).')') or error('Unable to fetch user groups', __FILE__, __LINE__, $db->error());
 300:         while ($cur_user = $db->fetch_assoc($result))
 301:         {
 302:             if (!isset($user_groups[$cur_user['group_id']]))
 303:                 $user_groups[$cur_user['group_id']] = array();
 304: 
 305:             $user_groups[$cur_user['group_id']][] = $cur_user['id'];
 306:         }
 307: 
 308:         // Are any users moderators?
 309:         $group_ids = array_keys($user_groups);
 310:         $result = $db->query('SELECT g_id, g_moderator FROM '.$db->prefix.'groups WHERE g_id IN ('.implode(',', $group_ids).')') or error('Unable to fetch group moderators', __FILE__, __LINE__, $db->error());
 311:         while ($cur_group = $db->fetch_assoc($result))
 312:         {
 313:             if ($cur_group['g_moderator'] == '0')
 314:                 unset($user_groups[$cur_group['g_id']]);
 315:         }
 316: 
 317:         if (!empty($user_groups) && $new_group != PUN_ADMIN && $new_group_mod != '1')
 318:         {
 319:             // Fetch forum list and clean up their moderator list
 320:             $result = $db->query('SELECT id, moderators FROM '.$db->prefix.'forums') or error('Unable to fetch forum list', __FILE__, __LINE__, $db->error());
 321:             while ($cur_forum = $db->fetch_assoc($result))
 322:             {
 323:                 $cur_moderators = ($cur_forum['moderators'] != '') ? unserialize($cur_forum['moderators']) : array();
 324: 
 325:                 foreach ($user_groups as $group_users)
 326:                     $cur_moderators = array_diff($cur_moderators, $group_users);
 327: 
 328:                 $cur_moderators = (!empty($cur_moderators)) ? '\''.$db->escape(serialize($cur_moderators)).'\'' : 'NULL';
 329:                 $db->query('UPDATE '.$db->prefix.'forums SET moderators='.$cur_moderators.' WHERE id='.$cur_forum['id']) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
 330:             }
 331:         }
 332: 
 333:         // Change user group
 334:         $db->query('UPDATE '.$db->prefix.'users SET group_id='.$new_group.' WHERE id IN ('.implode(',', $user_ids).')') or error('Unable to change user group', __FILE__, __LINE__, $db->error());
 335: 
 336:         redirect('admin_users.php', $lang_admin_users['Users move redirect']);
 337:     }
 338: 
 339:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Users'], $lang_admin_users['Move users']);
 340:     define('PUN_ACTIVE_PAGE', 'admin');
 341:     require PUN_ROOT.'header.php';
 342: 
 343:     generate_admin_menu('users');
 344: 
 345: ?>
 346:     <div class="blockform">
 347:         <h2><span><?php echo $lang_admin_users['Move users'] ?></span></h2>
 348:         <div class="box">
 349:             <form name="confirm_move_users" method="post" action="admin_users.php">
 350:                 <input type="hidden" name="users" value="<?php echo implode(',', $user_ids) ?>" />
 351:                 <div class="inform">
 352:                     <fieldset>
 353:                         <legend><?php echo $lang_admin_users['Move users subhead'] ?></legend>
 354:                         <div class="infldset">
 355:                             <table class="aligntop" cellspacing="0">
 356:                                 <tr>
 357:                                     <th scope="row"><?php echo $lang_admin_users['New group label'] ?></th>
 358:                                     <td>
 359:                                         <select name="new_group" tabindex="1">
 360: <?php foreach ($all_groups as $gid => $group) : ?>                                            <option value="<?php echo $gid ?>"><?php echo pun_htmlspecialchars($group) ?></option>
 361: <?php endforeach; ?>
 362:                                         </select>
 363:                                         <span><?php echo $lang_admin_users['New group help'] ?></span>
 364:                                     </td>
 365:                                 </tr>
 366:                             </table>
 367:                         </div>
 368:                     </fieldset>
 369:                 </div>
 370:                 <p class="submitend"><input type="submit" name="move_users_comply" value="<?php echo $lang_admin_common['Save'] ?>" tabindex="2" /></p>
 371:             </form>
 372:         </div>
 373:     </div>
 374:     <div class="clearer"></div>
 375: </div>
 376: <?php
 377: 
 378:     require PUN_ROOT.'footer.php';
 379: }
 380: 
 381: 
 382: // Delete multiple users
 383: else if (isset($_POST['delete_users']) || isset($_POST['delete_users_comply']))
 384: {
 385:     if ($pun_user['g_id'] > PUN_ADMIN)
 386:         message($lang_common['No permission'], false, '403 Forbidden');
 387: 
 388:     confirm_referrer('admin_users.php');
 389: 
 390:     if (isset($_POST['users']))
 391:     {
 392:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);
 393:         $user_ids = array_map('intval', $user_ids);
 394: 
 395:         // Delete invalid IDs
 396:         $user_ids = array_diff($user_ids, array(0, 1));
 397:     }
 398:     else
 399:         $user_ids = array();
 400: 
 401:     if (empty($user_ids))
 402:         message($lang_admin_users['No users selected']);
 403: 
 404:     // Are we trying to delete any admins?
 405:     $result = $db->query('SELECT COUNT(*) FROM '.$db->prefix.'users WHERE id IN ('.implode(',', $user_ids).') AND group_id='.PUN_ADMIN) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 406:     if ($db->result($result) > 0)
 407:         message($lang_admin_users['No delete admins message']);
 408: 
 409:     if (isset($_POST['delete_users_comply']))
 410:     {
 411:         // Fetch user groups
 412:         $user_groups = array();
 413:         $result = $db->query('SELECT id, group_id FROM '.$db->prefix.'users WHERE id IN ('.implode(',', $user_ids).')') or error('Unable to fetch user groups', __FILE__, __LINE__, $db->error());
 414:         while ($cur_user = $db->fetch_assoc($result))
 415:         {
 416:             if (!isset($user_groups[$cur_user['group_id']]))
 417:                 $user_groups[$cur_user['group_id']] = array();
 418: 
 419:             $user_groups[$cur_user['group_id']][] = $cur_user['id'];
 420:         }
 421: 
 422:         // Are any users moderators?
 423:         $group_ids = array_keys($user_groups);
 424:         $result = $db->query('SELECT g_id, g_moderator FROM '.$db->prefix.'groups WHERE g_id IN ('.implode(',', $group_ids).')') or error('Unable to fetch group moderators', __FILE__, __LINE__, $db->error());
 425:         while ($cur_group = $db->fetch_assoc($result))
 426:         {
 427:             if ($cur_group['g_moderator'] == '0')
 428:                 unset($user_groups[$cur_group['g_id']]);
 429:         }
 430: 
 431:         // Fetch forum list and clean up their moderator list
 432:         $result = $db->query('SELECT id, moderators FROM '.$db->prefix.'forums') or error('Unable to fetch forum list', __FILE__, __LINE__, $db->error());
 433:         while ($cur_forum = $db->fetch_assoc($result))
 434:         {
 435:             $cur_moderators = ($cur_forum['moderators'] != '') ? unserialize($cur_forum['moderators']) : array();
 436: 
 437:             foreach ($user_groups as $group_users)
 438:                 $cur_moderators = array_diff($cur_moderators, $group_users);
 439: 
 440:             $cur_moderators = (!empty($cur_moderators)) ? '\''.$db->escape(serialize($cur_moderators)).'\'' : 'NULL';
 441:             $db->query('UPDATE '.$db->prefix.'forums SET moderators='.$cur_moderators.' WHERE id='.$cur_forum['id']) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
 442:         }
 443: 
 444:         // Delete any subscriptions
 445:         $db->query('DELETE FROM '.$db->prefix.'topic_subscriptions WHERE user_id IN ('.implode(',', $user_ids).')') or error('Unable to delete topic subscriptions', __FILE__, __LINE__, $db->error());
 446:         $db->query('DELETE FROM '.$db->prefix.'forum_subscriptions WHERE user_id IN ('.implode(',', $user_ids).')') or error('Unable to delete forum subscriptions', __FILE__, __LINE__, $db->error());
 447: 
 448:         // Remove them from the online list (if they happen to be logged in)
 449:         $db->query('DELETE FROM '.$db->prefix.'online WHERE user_id IN ('.implode(',', $user_ids).')') or error('Unable to remove users from online list', __FILE__, __LINE__, $db->error());
 450: 
 451:         // Should we delete all posts made by these users?
 452:         if (isset($_POST['delete_posts']))
 453:         {
 454:             require PUN_ROOT.'include/search_idx.php';
 455:             @set_time_limit(0);
 456: 
 457:             // Find all posts made by this user
 458:             $result = $db->query('SELECT p.id, p.topic_id, t.forum_id 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 WHERE p.poster_id IN ('.implode(',', $user_ids).')') or error('Unable to fetch posts', __FILE__, __LINE__, $db->error());
 459:             if ($db->num_rows($result))
 460:             {
 461:                 while ($cur_post = $db->fetch_assoc($result))
 462:                 {
 463:                     // Determine whether this post is the "topic post" or not
 464:                     $result2 = $db->query('SELECT id FROM '.$db->prefix.'posts WHERE topic_id='.$cur_post['topic_id'].' ORDER BY posted LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
 465: 
 466:                     if ($db->result($result2) == $cur_post['id'])
 467:                         delete_topic($cur_post['topic_id']);
 468:                     else
 469:                         delete_post($cur_post['id'], $cur_post['topic_id']);
 470: 
 471:                     update_forum($cur_post['forum_id']);
 472:                 }
 473:             }
 474:         }
 475:         else
 476:             // Set all their posts to guest
 477:             $db->query('UPDATE '.$db->prefix.'posts SET poster_id=1 WHERE poster_id IN ('.implode(',', $user_ids).')') or error('Unable to update posts', __FILE__, __LINE__, $db->error());
 478: 
 479:         // Delete the users
 480:         $db->query('DELETE FROM '.$db->prefix.'users WHERE id IN ('.implode(',', $user_ids).')') or error('Unable to delete users', __FILE__, __LINE__, $db->error());
 481: 
 482:         // Delete user avatars
 483:         foreach ($user_ids as $user_id)
 484:             delete_avatar($user_id);
 485: 
 486:         // Regenerate the users info cache
 487:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
 488:             require PUN_ROOT.'include/cache.php';
 489: 
 490:         generate_users_info_cache();
 491: 
 492:         redirect('admin_users.php', $lang_admin_users['Users delete redirect']);
 493:     }
 494: 
 495:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Users'], $lang_admin_users['Delete users']);
 496:     define('PUN_ACTIVE_PAGE', 'admin');
 497:     require PUN_ROOT.'header.php';
 498: 
 499:     generate_admin_menu('users');
 500: 
 501: ?>
 502:     <div class="blockform">
 503:         <h2><span><?php echo $lang_admin_users['Delete users'] ?></span></h2>
 504:         <div class="box">
 505:             <form name="confirm_del_users" method="post" action="admin_users.php">
 506:                 <input type="hidden" name="users" value="<?php echo implode(',', $user_ids) ?>" />
 507:                 <div class="inform">
 508:                     <fieldset>
 509:                         <legend><?php echo $lang_admin_users['Confirm delete legend'] ?></legend>
 510:                         <div class="infldset">
 511:                             <p><?php echo $lang_admin_users['Confirm delete info'] ?></p>
 512:                             <div class="rbox">
 513:                                 <label><input type="checkbox" name="delete_posts" value="1" checked="checked" /><?php echo $lang_admin_users['Delete posts'] ?><br /></label>
 514:                             </div>
 515:                             <p class="warntext"><strong><?php echo $lang_admin_users['Delete warning'] ?></strong></p>
 516:                         </div>
 517:                     </fieldset>
 518:                 </div>
 519:                 <p class="buttons"><input type="submit" name="delete_users_comply" value="<?php echo $lang_admin_users['Delete'] ?>" /> <a href="javascript:history.go(-1)"><?php echo $lang_admin_common['Go back'] ?></a></p>
 520:             </form>
 521:         </div>
 522:     </div>
 523:     <div class="clearer"></div>
 524: </div>
 525: <?php
 526: 
 527:     require PUN_ROOT.'footer.php';
 528: }
 529: 
 530: 
 531: // Ban multiple users
 532: else if (isset($_POST['ban_users']) || isset($_POST['ban_users_comply']))
 533: {
 534:     if ($pun_user['g_id'] != PUN_ADMIN && ($pun_user['g_moderator'] != '1' || $pun_user['g_mod_ban_users'] == '0'))
 535:         message($lang_common['No permission'], false, '403 Forbidden');
 536: 
 537:     confirm_referrer('admin_users.php');
 538: 
 539:     if (isset($_POST['users']))
 540:     {
 541:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);
 542:         $user_ids = array_map('intval', $user_ids);
 543: 
 544:         // Delete invalid IDs
 545:         $user_ids = array_diff($user_ids, array(0, 1));
 546:     }
 547:     else
 548:         $user_ids = array();
 549: 
 550:     if (empty($user_ids))
 551:         message($lang_admin_users['No users selected']);
 552: 
 553:     // Are we trying to ban any admins?
 554:     $result = $db->query('SELECT COUNT(*) FROM '.$db->prefix.'users WHERE id IN ('.implode(',', $user_ids).') AND group_id='.PUN_ADMIN) or error('Unable to fetch group info', __FILE__, __LINE__, $db->error());
 555:     if ($db->result($result) > 0)
 556:         message($lang_admin_users['No ban admins message']);
 557: 
 558:     // Also, we cannot ban moderators
 559:     $result = $db->query('SELECT COUNT(*) FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id WHERE g.g_moderator=1 AND u.id IN ('.implode(',', $user_ids).')') or error('Unable to fetch moderator group info', __FILE__, __LINE__, $db->error());
 560:     if ($db->result($result) > 0)
 561:         message($lang_admin_users['No ban mods message']);
 562: 
 563:     if (isset($_POST['ban_users_comply']))
 564:     {
 565:         $ban_message = pun_trim($_POST['ban_message']);
 566:         $ban_expire = pun_trim($_POST['ban_expire']);
 567:         $ban_the_ip = isset($_POST['ban_the_ip']) ? intval($_POST['ban_the_ip']) : 0;
 568: 
 569:         if ($ban_expire != '' && $ban_expire != 'Never')
 570:         {
 571:             $ban_expire = strtotime($ban_expire.' GMT');
 572: 
 573:             if ($ban_expire == -1 || !$ban_expire)
 574:                 message($lang_admin_users['Invalid date message'].' '.$lang_admin_users['Invalid date reasons']);
 575: 
 576:             $diff = ($pun_user['timezone'] + $pun_user['dst']) * 3600;
 577:             $ban_expire -= $diff;
 578: 
 579:             if ($ban_expire <= time())
 580:                 message($lang_admin_users['Invalid date message'].' '.$lang_admin_users['Invalid date reasons']);
 581:         }
 582:         else
 583:             $ban_expire = 'NULL';
 584: 
 585:         $ban_message = ($ban_message != '') ? '\''.$db->escape($ban_message).'\'' : 'NULL';
 586: 
 587:         // Fetch user information
 588:         $user_info = array();
 589:         $result = $db->query('SELECT id, username, email, registration_ip FROM '.$db->prefix.'users WHERE id IN ('.implode(',', $user_ids).')') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 590:         while ($cur_user = $db->fetch_assoc($result))
 591:             $user_info[$cur_user['id']] = array('username' => $cur_user['username'], 'email' => $cur_user['email'], 'ip' => $cur_user['registration_ip']);
 592: 
 593:         // Overwrite the registration IP with one from the last post (if it exists)
 594:         if ($ban_the_ip != 0)
 595:         {
 596:             $result = $db->query('SELECT p.poster_id, p.poster_ip FROM '.$db->prefix.'posts AS p INNER JOIN (SELECT MAX(id) AS id FROM '.$db->prefix.'posts WHERE poster_id IN ('.implode(',', $user_ids).') GROUP BY poster_id) AS i ON p.id=i.id') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
 597:             while ($cur_address = $db->fetch_assoc($result))
 598:                 $user_info[$cur_address['poster_id']]['ip'] = $cur_address['poster_ip'];
 599:         }
 600: 
 601:         // And insert the bans!
 602:         foreach ($user_ids as $user_id)
 603:         {
 604:             $ban_username = '\''.$db->escape($user_info[$user_id]['username']).'\'';
 605:             $ban_email = '\''.$db->escape($user_info[$user_id]['email']).'\'';
 606:             $ban_ip = ($ban_the_ip != 0) ? '\''.$db->escape($user_info[$user_id]['ip']).'\'' : 'NULL';
 607: 
 608:             $db->query('INSERT INTO '.$db->prefix.'bans (username, ip, email, message, expire, ban_creator) VALUES('.$ban_username.', '.$ban_ip.', '.$ban_email.', '.$ban_message.', '.$ban_expire.', '.$pun_user['id'].')') or error('Unable to add ban', __FILE__, __LINE__, $db->error());
 609:         }
 610: 
 611:         // Regenerate the bans cache
 612:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
 613:             require PUN_ROOT.'include/cache.php';
 614: 
 615:         generate_bans_cache();
 616: 
 617:         redirect('admin_users.php', $lang_admin_users['Users banned redirect']);
 618:     }
 619: 
 620:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Bans']);
 621:     $focus_element = array('bans2', 'ban_message');
 622:     define('PUN_ACTIVE_PAGE', 'admin');
 623:     require PUN_ROOT.'header.php';
 624: 
 625:     generate_admin_menu('users');
 626: 
 627: ?>
 628:     <div class="blockform">
 629:         <h2><span><?php echo $lang_admin_users['Ban users'] ?></span></h2>
 630:         <div class="box">
 631:             <form id="bans2" name="confirm_ban_users" method="post" action="admin_users.php">
 632:                 <input type="hidden" name="users" value="<?php echo implode(',', $user_ids) ?>" />
 633:                 <div class="inform">
 634:                     <fieldset>
 635:                         <legend><?php echo $lang_admin_users['Message expiry subhead'] ?></legend>
 636:                         <div class="infldset">
 637:                             <table class="aligntop" cellspacing="0">
 638:                                 <tr>
 639:                                     <th scope="row"><?php echo $lang_admin_users['Ban message label'] ?></th>
 640:                                     <td>
 641:                                         <input type="text" name="ban_message" size="50" maxlength="255" tabindex="1" />
 642:                                         <span><?php echo $lang_admin_users['Ban message help'] ?></span>
 643:                                     </td>
 644:                                 </tr>
 645:                                 <tr>
 646:                                     <th scope="row"><?php echo $lang_admin_users['Expire date label'] ?></th>
 647:                                     <td>
 648:                                         <input type="text" name="ban_expire" size="17" maxlength="10" tabindex="2" />
 649:                                         <span><?php echo $lang_admin_users['Expire date help'] ?></span>
 650:                                     </td>
 651:                                 </tr>
 652:                                 <tr>
 653:                                     <th scope="row"><?php echo $lang_admin_users['Ban IP label'] ?></th>
 654:                                     <td>
 655:                                         <input type="radio" name="ban_the_ip" tabindex="3" value="1" checked="checked" />&#160;<strong><?php echo $lang_admin_common['Yes'] ?></strong>&#160;&#160;&#160;<input type="radio" name="ban_the_ip" tabindex="4" value="0" checked="checked" />&#160;<strong><?php echo $lang_admin_common['No'] ?></strong>
 656:                                         <span><?php echo $lang_admin_users['Ban IP help'] ?></span>
 657:                                     </td>
 658:                                 </tr>
 659:                             </table>
 660:                         </div>
 661:                     </fieldset>
 662:                 </div>
 663:                 <p class="submitend"><input type="submit" name="ban_users_comply" value="<?php echo $lang_admin_common['Save'] ?>" tabindex="3" /></p>
 664:             </form>
 665:         </div>
 666:     </div>
 667:     <div class="clearer"></div>
 668: </div>
 669: <?php
 670: 
 671:     require PUN_ROOT.'footer.php';
 672: }
 673: 
 674: 
256: else if (isset($_GET['find_user']))675: else if (isset($_GET['find_user']))
257: {676: {
258:     $form = isset($_GET['form']) ? $_GET['form'] : array();677:     $form = isset($_GET['form']) ? $_GET['form'] : array();
261:     $form = array_map('pun_trim', $form);680:     $form = array_map('pun_trim', $form);
262:     $conditions = $query_str = array();681:     $conditions = $query_str = array();
263: 682: 
264:     $posts_greater = isset($_GET['posts_greater']) ? trim($_GET['posts_greater']) : '';683:     $posts_greater = isset($_GET['posts_greater']) ? pun_trim($_GET['posts_greater']) : '';
265:     $posts_less = isset($_GET['posts_less']) ? trim($_GET['posts_less']) : '';684:     $posts_less = isset($_GET['posts_less']) ? pun_trim($_GET['posts_less']) : '';
266:     $last_post_after = isset($_GET['last_post_after']) ? trim($_GET['last_post_after']) : '';685:     $last_post_after = isset($_GET['last_post_after']) ? pun_trim($_GET['last_post_after']) : '';
267:     $last_post_before = isset($_GET['last_post_before']) ? trim($_GET['last_post_before']) : '';686:     $last_post_before = isset($_GET['last_post_before']) ? pun_trim($_GET['last_post_before']) : '';
268:     $registered_after = isset($_GET['registered_after']) ? trim($_GET['registered_after']) : '';687:     $last_visit_after = isset($_GET['last_visit_after']) ? pun_trim($_GET['last_visit_after']) : '';
269:     $registered_before = isset($_GET['registered_before']) ? trim($_GET['registered_before']) : '';688:     $last_visit_before = isset($_GET['last_visit_before']) ? pun_trim($_GET['last_visit_before']) : '';
270:     $order_by = isset($_GET['order_by']) && in_array($_GET['order_by'], array('username', 'email', 'num_posts', 'last_post', 'registered')) ? $_GET['order_by'] : 'username';689:     $registered_after = isset($_GET['registered_after']) ? pun_trim($_GET['registered_after']) : '';
 690:     $registered_before = isset($_GET['registered_before']) ? pun_trim($_GET['registered_before']) : '';
 691:     $order_by = isset($_GET['order_by']) && in_array($_GET['order_by'], array('username', 'email', 'num_posts', 'last_post', 'last_visit', 'registered')) ? $_GET['order_by'] : 'username';
271:     $direction = isset($_GET['direction']) && $_GET['direction'] == 'DESC' ? 'DESC' : 'ASC';692:     $direction = isset($_GET['direction']) && $_GET['direction'] == 'DESC' ? 'DESC' : 'ASC';
272:     $user_group = isset($_GET['user_group']) ? intval($_GET['user_group']) : -1;693:     $user_group = isset($_GET['user_group']) ? intval($_GET['user_group']) : -1;
273: 694: 
275:     $query_str[] = 'direction='.$direction;696:     $query_str[] = 'direction='.$direction;
276:     $query_str[] = 'user_group='.$user_group;697:     $query_str[] = 'user_group='.$user_group;
277: 698: 
278:     if (preg_match('/[^0-9]/', $posts_greater.$posts_less))699:     if (preg_match('%[^0-9]%', $posts_greater.$posts_less))
279:         message($lang_admin_users['Non numeric message']);700:         message($lang_admin_users['Non numeric message']);
280: 701: 
281:     // Try to convert date/time to timestamps702:     // Try to convert date/time to timestamps
299: 720: 
300:         $conditions[] = 'u.last_post<'.$last_post_before;721:         $conditions[] = 'u.last_post<'.$last_post_before;
301:     }722:     }
 723:     if ($last_visit_after != '')
 724:     {
 725:         $query_str[] = 'last_visit_after='.$last_visit_after;
 726: 
 727:         $last_visit_after = strtotime($last_visit_after);
 728:         if ($last_visit_after === false || $last_visit_after == -1)
 729:             message($lang_admin_users['Invalid date time message']);
 730: 
 731:         $conditions[] = 'u.last_visit>'.$last_visit_after;
 732:     }
 733:     if ($last_visit_before != '')
 734:     {
 735:         $query_str[] = 'last_visit_before='.$last_visit_before;
 736: 
 737:         $last_visit_before = strtotime($last_visit_before);
 738:         if ($last_visit_before === false || $last_visit_before == -1)
 739:             message($lang_admin_users['Invalid date time message']);
 740: 
 741:         $conditions[] = 'u.last_visit<'.$last_visit_before;
 742:     }
302:     if ($registered_after != '')743:     if ($registered_after != '')
303:     {744:     {
304:         $query_str[] = 'registered_after='.$registered_after;745:         $query_str[] = 'registered_after='.$registered_after;
357:     // Generate paging links798:     // Generate paging links
358:     $paging_links = '<span class="pages-label">'.$lang_common['Pages'].' </span>'.paginate($num_pages, $p, 'admin_users.php?find_user=&amp;'.implode('&amp;', $query_str));799:     $paging_links = '<span class="pages-label">'.$lang_common['Pages'].' </span>'.paginate($num_pages, $p, 'admin_users.php?find_user=&amp;'.implode('&amp;', $query_str));
359: 800: 
 801:     // Some helper variables for permissions
 802:     $can_delete = $can_move = $pun_user['g_id'] == PUN_ADMIN;
 803:     $can_ban = $pun_user['g_id'] == PUN_ADMIN || ($pun_user['g_moderator'] == '1' && $pun_user['g_mod_ban_users'] == '1');
 804:     $can_action = ($can_delete || $can_ban || $can_move) && $num_users > 0;
 805: 
360:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Users'], $lang_admin_users['Results head']);806:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Users'], $lang_admin_users['Results head']);
 807:     $page_head = array('js' => '<script type="text/javascript" src="common.js"></script>');
361:     define('PUN_ACTIVE_PAGE', 'admin');808:     define('PUN_ACTIVE_PAGE', 'admin');
362:     require PUN_ROOT.'header.php';809:     require PUN_ROOT.'header.php';
363: 810: 
377: </div>824: </div>
378: 825: 
379: 826: 
 827: <form id="search-users-form" action="admin_users.php" method="post">
380: <div id="users2" class="blocktable">828: <div id="users2" class="blocktable">
381:     <h2><span><?php echo $lang_admin_users['Results head'] ?></span></h2>829:     <h2><span><?php echo $lang_admin_users['Results head'] ?></span></h2>
382:     <div class="box">830:     <div class="box">
390:                     <th class="tc4" scope="col"><?php echo $lang_admin_users['Results posts head'] ?></th>838:                     <th class="tc4" scope="col"><?php echo $lang_admin_users['Results posts head'] ?></th>
391:                     <th class="tc5" scope="col"><?php echo $lang_admin_users['Results admin note head'] ?></th>839:                     <th class="tc5" scope="col"><?php echo $lang_admin_users['Results admin note head'] ?></th>
392:                     <th class="tcr" scope="col"><?php echo $lang_admin_users['Results actions head'] ?></th>840:                     <th class="tcr" scope="col"><?php echo $lang_admin_users['Results actions head'] ?></th>
 841: <?php if ($can_action): ?>                    <th class="tcmod" scope="col"><?php echo $lang_admin_users['Select'] ?></th>
 842: <?php endif; ?>
393:                 </tr>843:                 </tr>
394:             </thead>844:             </thead>
395:             <tbody>845:             <tbody>
406:             if (($user_data['g_id'] == '' || $user_data['g_id'] == PUN_UNVERIFIED) && $user_title != $lang_common['Banned'])856:             if (($user_data['g_id'] == '' || $user_data['g_id'] == PUN_UNVERIFIED) && $user_title != $lang_common['Banned'])
407:                 $user_title = '<span class="warntext">'.$lang_admin_users['Not verified'].'</span>';857:                 $user_title = '<span class="warntext">'.$lang_admin_users['Not verified'].'</span>';
408: 858: 
409:             $actions = '<a href="admin_users.php?ip_stats='.$user_data['id'].'">'.$lang_admin_users['Results view IP link'].'</a> | <a href="search.php?action=show_user&amp;user_id='.$user_data['id'].'">'.$lang_admin_users['Results show posts link'].'</a>';859:             $actions = '<a href="admin_users.php?ip_stats='.$user_data['id'].'">'.$lang_admin_users['Results view IP link'].'</a> | <a href="search.php?action=show_user_posts&amp;user_id='.$user_data['id'].'">'.$lang_admin_users['Results show posts link'].'</a>';
410: 860: 
411: ?>861: ?>
412:                 <tr>862:                 <tr>
416:                     <td class="tc4"><?php echo forum_number_format($user_data['num_posts']) ?></td>866:                     <td class="tc4"><?php echo forum_number_format($user_data['num_posts']) ?></td>
417:                     <td class="tc5"><?php echo ($user_data['admin_note'] != '') ? pun_htmlspecialchars($user_data['admin_note']) : '&#160;' ?></td>867:                     <td class="tc5"><?php echo ($user_data['admin_note'] != '') ? pun_htmlspecialchars($user_data['admin_note']) : '&#160;' ?></td>
418:                     <td class="tcr"><?php echo $actions ?></td>868:                     <td class="tcr"><?php echo $actions ?></td>
 869: <?php if ($can_action): ?>                    <td class="tcmod"><input type="checkbox" name="users[<?php echo $user_data['id'] ?>]" value="1" /></td>
 870: <?php endif; ?>
419:                 </tr>871:                 </tr>
420: <?php872: <?php
421: 873: 
435:     <div class="inbox crumbsplus">887:     <div class="inbox crumbsplus">
436:         <div class="pagepost">888:         <div class="pagepost">
437:             <p class="pagelink"><?php echo $paging_links ?></p>889:             <p class="pagelink"><?php echo $paging_links ?></p>
 890: <?php if ($can_action): ?>            <p class="conr modbuttons"><a href="#" onclick="return select_checkboxes('search-users-form', this, '<?php echo $lang_admin_users['Unselect all'] ?>')"><?php echo $lang_admin_users['Select all'] ?></a> <?php if ($can_ban) : ?><input type="submit" name="ban_users" value="<?php echo $lang_admin_users['Ban'] ?>" /><?php endif; if ($can_delete) : ?><input type="submit" name="delete_users" value="<?php echo $lang_admin_users['Delete'] ?>" /><?php endif; if ($can_move) : ?><input type="submit" name="move_users" value="<?php echo $lang_admin_users['Change group'] ?>" /><?php endif; ?></p>
 891: <?php endif; ?>
438:         </div>892:         </div>
439:         <ul class="crumbs">893:         <ul class="crumbs">
440:             <li><a href="admin_index.php"><?php echo $lang_admin_common['Admin'].' '.$lang_admin_common['Index'] ?></a></li>894:             <li><a href="admin_index.php"><?php echo $lang_admin_common['Admin'].' '.$lang_admin_common['Index'] ?></a></li>
444:         <div class="clearer"></div>898:         <div class="clearer"></div>
445:     </div>899:     </div>
446: </div>900: </div>
 901: </form>
447: <?php902: <?php
448: 903: 
449:     require PUN_ROOT.'footer.php';904:     require PUN_ROOT.'footer.php';
453: else908: else
454: {909: {
455:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Users']);910:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Users']);
456:     $focus_element = array('find_user', 'username');911:     $focus_element = array('find_user', 'form[username]');
457:     define('PUN_ACTIVE_PAGE', 'admin');912:     define('PUN_ACTIVE_PAGE', 'admin');
458:     require PUN_ROOT.'header.php';913:     require PUN_ROOT.'header.php';
459: 914: 
542:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>997:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>
543:                                 </tr>998:                                 </tr>
544:                                 <tr>999:                                 <tr>
 1000:                                     <th scope="row"><?php echo $lang_admin_users['Last visit after label'] ?></th>
 1001:                                     <td><input type="text" name="last_visit_after" size="24" maxlength="19" tabindex="17" />
 1002:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>
 1003:                                 </tr>
 1004:                                 <tr>
 1005:                                     <th scope="row"><?php echo $lang_admin_users['Last visit before label'] ?></th>
 1006:                                     <td><input type="text" name="last_visit_before" size="24" maxlength="19" tabindex="18" />
 1007:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>
 1008:                                 </tr>
 1009:                                 <tr>
545:                                     <th scope="row"><?php echo $lang_admin_users['Registered after label'] ?></th>1010:                                     <th scope="row"><?php echo $lang_admin_users['Registered after label'] ?></th>
546:                                     <td><input type="text" name="registered_after" size="24" maxlength="19" tabindex="19" />1011:                                     <td><input type="text" name="registered_after" size="24" maxlength="19" tabindex="19" />
547:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>1012:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>
559:                                             <option value="email"><?php echo $lang_admin_users['Order by e-mail'] ?></option>1024:                                             <option value="email"><?php echo $lang_admin_users['Order by e-mail'] ?></option>
560:                                             <option value="num_posts"><?php echo $lang_admin_users['Order by posts'] ?></option>1025:                                             <option value="num_posts"><?php echo $lang_admin_users['Order by posts'] ?></option>
561:                                             <option value="last_post"><?php echo $lang_admin_users['Order by last post'] ?></option>1026:                                             <option value="last_post"><?php echo $lang_admin_users['Order by last post'] ?></option>
 1027:                                             <option value="last_visit"><?php echo $lang_admin_users['Order by last visit'] ?></option>
562:                                             <option value="registered"><?php echo $lang_admin_users['Order by registered'] ?></option>1028:                                             <option value="registered"><?php echo $lang_admin_users['Order by registered'] ?></option>
563:                                         </select>&#160;&#160;&#160;<select name="direction" tabindex="22">1029:                                         </select>&#160;&#160;&#160;<select name="direction" tabindex="22">
564:                                             <option value="ASC" selected="selected"><?php echo $lang_admin_users['Ascending'] ?></option>1030:                                             <option value="ASC" selected="selected"><?php echo $lang_admin_users['Ascending'] ?></option>


- No viewable Change -

- No viewable Change -

/dev/null b/common.js
   1: 
   2: /**
   3:  * Copyright (C) 2008-2012 FluxBB
   4:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
   5:  * License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
   6:  */
   7: 
   8: function select_checkboxes(curFormId, link, new_string)
   9: {
  10:     var curForm = document.getElementById(curFormId);
  11:     var inputlist = curForm.getElementsByTagName("input");
  12:     for (i = 0; i < inputlist.length; i++)
  13:     {
  14:         if (inputlist[i].getAttribute("type") == 'checkbox' && inputlist[i].disabled == false)
  15:             inputlist[i].checked = true;
  16:     }
  17:     
  18:     link.setAttribute('onclick', 'return unselect_checkboxes(\'' + curFormId + '\', this, \'' + link.innerHTML + '\')');
  19:     link.innerHTML = new_string;
  20: 
  21:     return false;
  22: }
  23: 
  24: function unselect_checkboxes(curFormId, link, new_string)
  25: {
  26:     var curForm = document.getElementById(curFormId);
  27:     var inputlist = curForm.getElementsByTagName("input");
  28:     for (i = 0; i < inputlist.length; i++)
  29:     {
  30:         if (inputlist[i].getAttribute("type") == 'checkbox' && inputlist[i].disabled == false)
  31:             inputlist[i].checked = false;
  32:     }
  33:     
  34:     link.setAttribute('onclick', 'return select_checkboxes(\'' + curFormId + '\', this, \'' + link.innerHTML + '\')');
  35:     link.innerHTML = new_string;
  36: 
  37:     return false;
  38: }


a/db_update.php b/db_update.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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: // The FluxBB version this script updates to  9: // The FluxBB version this script updates to
 10: define('UPDATE_TO', '1.4.0'); 10: define('UPDATE_TO', '1.4.12');
 11:  11: 
 12: define('UPDATE_TO_DB_REVISION', 7); 12: define('UPDATE_TO_DB_REVISION', 15);
 13: define('UPDATE_TO_SI_REVISION', 1); 13: define('UPDATE_TO_SI_REVISION', 2);
 14: define('UPDATE_TO_PARSER_REVISION', 1); 14: define('UPDATE_TO_PARSER_REVISION', 2);
 15:  15: 
 16: define('MIN_PHP_VERSION', '4.3.0'); 16: define('MIN_PHP_VERSION', '4.4.0');
 17: define('MIN_MYSQL_VERSION', '4.1.2'); 17: define('MIN_MYSQL_VERSION', '4.1.2');
 18: define('MIN_PGSQL_VERSION', '7.0.0'); 18: define('MIN_PGSQL_VERSION', '7.0.0');
 19: define('PUN_SEARCH_MIN_WORD', 3); 19: define('PUN_SEARCH_MIN_WORD', 3);
 20: define('PUN_SEARCH_MAX_WORD', 20); 20: define('PUN_SEARCH_MAX_WORD', 20);
 21:  21: 
  22: // The MySQL connection character set that was used for FluxBB 1.2 - in 99% of cases this should be detected automatically,
  23: // but can be overridden using the below constant if required.
  24: //define('FORUM_DEFAULT_CHARSET', 'latin1');
  25: 
 22:  26: 
 23: // The number of items to process per page view (lower this if the update script times out during UTF-8 conversion) 27: // The number of items to process per page view (lower this if the update script times out during UTF-8 conversion)
 24: define('PER_PAGE', 300); 28: define('PER_PAGE', 300);
 25:  29: 
  30: // Don't set to UTF-8 until after we've found out what the default character set is
  31: define('FORUM_NO_SET_NAMES', 1);
  32: 
 26: // Make sure we are running at least MIN_PHP_VERSION 33: // Make sure we are running at least MIN_PHP_VERSION
 27: if (!function_exists('version_compare') || version_compare(PHP_VERSION, MIN_PHP_VERSION, '<')) 34: if (!function_exists('version_compare') || version_compare(PHP_VERSION, MIN_PHP_VERSION, '<'))
 28:     exit('You are running PHP version '.PHP_VERSION.'. FluxBB '.UPDATE_TO.' requires at least PHP '.MIN_PHP_VERSION.' to run properly. You must upgrade your PHP installation before you can continue.'); 35:     exit('You are running PHP version '.PHP_VERSION.'. FluxBB '.UPDATE_TO.' requires at least PHP '.MIN_PHP_VERSION.' to run properly. You must upgrade your PHP installation before you can continue.');
 29:  36: 
 30: define('PUN_ROOT', './'); 37: define('PUN_ROOT', dirname(__FILE__).'/');
 31:  38: 
 32: // Attempt to load the configuration file config.php 39: // Attempt to load the configuration file config.php
 33: if (file_exists(PUN_ROOT.'config.php')) 40: if (file_exists(PUN_ROOT.'config.php'))
 37: if (defined('FORUM')) 44: if (defined('FORUM'))
 38:     define('PUN', FORUM); 45:     define('PUN', FORUM);
 39:  46: 
 40: // If PUN isn't defined, config.php is missing or corrupt or we are outside the root directory 47: // If PUN isn't defined, config.php is missing or corrupt
 41: if (!defined('PUN')) 48: if (!defined('PUN'))
 42:     exit('This file must be run from the forum root directory.'); 49: {
  50:     header('Location: install.php');
  51:     exit;
  52: }
 43:  53: 
 44: // Enable debug mode 54: // Enable debug mode
 45: if (!defined('PUN_DEBUG')) 55: if (!defined('PUN_DEBUG'))
 92: // Turn off PHP time limit102: // Turn off PHP time limit
 93: @set_time_limit(0);103: @set_time_limit(0);
 94: 104: 
 105: // Define a few commonly used constants
 106: define('PUN_UNVERIFIED', 0);
 107: define('PUN_ADMIN', 1);
 108: define('PUN_MOD', 2);
 109: define('PUN_GUEST', 3);
 110: define('PUN_MEMBER', 4);
 111: 
 95: // Load DB abstraction layer and try to connect112: // Load DB abstraction layer and try to connect
 96: require PUN_ROOT.'include/dblayer/common_db.php';113: require PUN_ROOT.'include/dblayer/common_db.php';
 97: 114: 
 115: // Check what the default character set is - since 1.2 didn't specify any we will use whatever the default was (usually latin1)
 116: $old_connection_charset = defined('FORUM_DEFAULT_CHARSET') ? FORUM_DEFAULT_CHARSET : $db->get_names();
 117: 
 118: // Set the connection to UTF-8 now
 119: $db->set_names('utf8');
 120: 
 121: // Get the forum config
 122: $result = $db->query('SELECT * FROM '.$db->prefix.'config') or error('Unable to fetch config.', __FILE__, __LINE__, $db->error());
 123: while ($cur_config_item = $db->fetch_row($result))
 124:     $pun_config[$cur_config_item[0]] = $cur_config_item[1];
 125: 
 126: // Load language file
 127: $default_lang = $pun_config['o_default_lang'];
 128: 
 129: if (!file_exists(PUN_ROOT.'lang/'.$default_lang.'/update.php'))
 130:     $default_lang = 'English';
 131: 
 132: require PUN_ROOT.'lang/'.$default_lang.'/common.php';
 133: require PUN_ROOT.'lang/'.$default_lang.'/update.php';
 134: 
 98: // Check current version135: // Check current version
 99: $result = $db->query('SELECT conf_value FROM '.$db->prefix.'config WHERE conf_name=\'o_cur_version\'') or error('Unable to fetch version info.', __FILE__, __LINE__, $db->error());136: $cur_version = $pun_config['o_cur_version'];
100: $cur_version = $db->result($result); 
101: 137: 
102: if (version_compare($cur_version, '1.2', '<'))138: if (version_compare($cur_version, '1.2', '<'))
103:     exit('Version mismatch. The database \''.$db_name.'\' doesn\'t seem to be running a FluxBB database schema supported by this update script.');139:     error(sprintf($lang_update['Version mismatch error'], $db_name));
104: 140: 
105: // Do some DB type specific checks141: // Do some DB type specific checks
106: $mysql = false;142: $mysql = false;
112:     case 'mysqli_innodb':148:     case 'mysqli_innodb':
113:         $mysql_info = $db->get_version();149:         $mysql_info = $db->get_version();
114:         if (version_compare($mysql_info['version'], MIN_MYSQL_VERSION, '<'))150:         if (version_compare($mysql_info['version'], MIN_MYSQL_VERSION, '<'))
115:             error('You are running MySQL version '.$mysql_version.'. FluxBB '.UPDATE_TO.' requires at least MySQL '.MIN_MYSQL_VERSION.' to run properly. You must upgrade your MySQL installation before you can continue.');151:             error(sprintf($lang_update['You are running error'], 'MySQL', $mysql_info['version'], UPDATE_TO, MIN_MYSQL_VERSION));
116: 152: 
117:         $mysql = true;153:         $mysql = true;
118:         break;154:         break;
120:     case 'pgsql':156:     case 'pgsql':
121:         $pgsql_info = $db->get_version();157:         $pgsql_info = $db->get_version();
122:         if (version_compare($pgsql_info['version'], MIN_PGSQL_VERSION, '<'))158:         if (version_compare($pgsql_info['version'], MIN_PGSQL_VERSION, '<'))
123:             error('You are running PostgreSQL version '.$pgsql_info.'. FluxBB '.UPDATE_TO.' requires at least PostgreSQL '.MIN_PGSQL_VERSION.' to run properly. You must upgrade your PostgreSQL installation before you can continue.');159:             error(sprintf($lang_update['You are running error'], 'PostgreSQL', $pgsql_info['version'], UPDATE_TO, MIN_PGSQL_VERSION));
124: 160: 
125:         break;161:         break;
126: }162: }
127: 163: 
128: // Get the forum config164: // Check the database, search index and parser revision and the current version
129: $result = $db->query('SELECT * FROM '.$db->prefix.'config') or error('Unable to fetch config.', __FILE__, __LINE__, $db->error()); 
130: while ($cur_config_item = $db->fetch_row($result)) 
131:     $pun_config[$cur_config_item[0]] = $cur_config_item[1]; 
132:  
133: // Check the database revision and the current version 
134: if (isset($pun_config['o_database_revision']) && $pun_config['o_database_revision'] >= UPDATE_TO_DB_REVISION &&165: if (isset($pun_config['o_database_revision']) && $pun_config['o_database_revision'] >= UPDATE_TO_DB_REVISION &&
135:         isset($pun_config['o_searchindex_revision']) && $pun_config['o_searchindex_revision'] >= UPDATE_TO_SI_REVISION &&166:         isset($pun_config['o_searchindex_revision']) && $pun_config['o_searchindex_revision'] >= UPDATE_TO_SI_REVISION &&
136:         isset($pun_config['o_parser_revision']) && $pun_config['o_parser_revision'] >= UPDATE_TO_PARSER_REVISION &&167:         isset($pun_config['o_parser_revision']) && $pun_config['o_parser_revision'] >= UPDATE_TO_PARSER_REVISION &&
137:         version_compare($pun_config['o_cur_version'], UPDATE_TO, '>='))168:         version_compare($pun_config['o_cur_version'], UPDATE_TO, '>='))
138:     exit('Your database is already as up-to-date as this script can make it.');169:     error($lang_update['No update error']);
139: 170: 
140: $default_style = $pun_config['o_default_style'];171: $default_style = $pun_config['o_default_style'];
141: if (!file_exists(PUN_ROOT.'style/'.$default_style.'.css'))172: if (!file_exists(PUN_ROOT.'style/'.$default_style.'.css'))
142:     $default_style = 'Air';173:     $default_style = 'Air';
143: 174: 
 175: // Start a session, used to queue up errors if duplicate users occur when converting from FluxBB v1.2.
 176: session_start();
 177: 
144: //178: //
145: // Determines whether $str is UTF-8 encoded or not179: // Determines whether $str is UTF-8 encoded or not
146: //180: //
220: //254: //
221: function convert_to_utf8(&$str, $old_charset)255: function convert_to_utf8(&$str, $old_charset)
222: {256: {
223:     if ($str === null || $str == '')257:     if (is_null($str) || $str == '')
224:         return false;258:         return false;
225: 259: 
226:     $save = $str;260:     $save = $str;
244:         $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');278:         $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
245: 279: 
246:     // Replace numeric entities280:     // Replace numeric entities
247:     $str = preg_replace_callback('/&#([0-9]+);/', 'utf8_callback_1', $str);281:     $str = preg_replace_callback('%&#([0-9]+);%', 'utf8_callback_1', $str);
248:     $str = preg_replace_callback('/&#x([a-f0-9]+);/i', 'utf8_callback_2', $str);282:     $str = preg_replace_callback('%&#x([a-f0-9]+);%i', 'utf8_callback_2', $str);
249: 283: 
250:     // Remove "bad" characters284:     // Remove "bad" characters
251:     $str = remove_bad_characters($str);285:     $str = remove_bad_characters($str);
297:     $result = $db->query('SHOW FULL COLUMNS FROM '.$table) or error('Unable to fetch column information', __FILE__, __LINE__, $db->error());331:     $result = $db->query('SHOW FULL COLUMNS FROM '.$table) or error('Unable to fetch column information', __FILE__, __LINE__, $db->error());
298:     while ($cur_column = $db->fetch_assoc($result))332:     while ($cur_column = $db->fetch_assoc($result))
299:     {333:     {
300:         if ($cur_column['Collation'] === null)334:         if (is_null($cur_column['Collation']))
301:             continue;335:             continue;
302: 336: 
303:         list($type) = explode('(', $cur_column['Type']);337:         list($type) = explode('(', $cur_column['Type']);
306:             $allow_null = ($cur_column['Null'] == 'YES');340:             $allow_null = ($cur_column['Null'] == 'YES');
307:             $collate = (substr($cur_column['Collation'], -3) == 'bin') ? 'utf8_bin' : 'utf8_general_ci';341:             $collate = (substr($cur_column['Collation'], -3) == 'bin') ? 'utf8_bin' : 'utf8_general_ci';
308: 342: 
309:             $db->alter_field($table, $cur_column['Field'], preg_replace('/'.$type.'/i', $types[$type], $cur_column['Type']), $allow_null, $cur_column['Default'], null, true) or error('Unable to alter field to binary', __FILE__, __LINE__, $db->error());343:             $db->alter_field($table, $cur_column['Field'], preg_replace('%'.$type.'%i', $types[$type], $cur_column['Type']), $allow_null, $cur_column['Default'], null, true) or error('Unable to alter field to binary', __FILE__, __LINE__, $db->error());
310:             $db->alter_field($table, $cur_column['Field'], $cur_column['Type'].' CHARACTER SET utf8 COLLATE '.$collate, $allow_null, $cur_column['Default'], null, true) or error('Unable to alter field to utf8', __FILE__, __LINE__, $db->error());344:             $db->alter_field($table, $cur_column['Field'], $cur_column['Type'].' CHARACTER SET utf8 COLLATE '.$collate, $allow_null, $cur_column['Default'], null, true) or error('Unable to alter field to utf8', __FILE__, __LINE__, $db->error());
311:         }345:         }
312:     }346:     }
316: // Safely converts text type columns into utf8350: // Safely converts text type columns into utf8
317: // If finished returns true, otherwise returns $end_at351: // If finished returns true, otherwise returns $end_at
318: //352: //
319: function convert_table_utf8($table, $callback, $old_charset, $key = null, $start_at = null)353: function convert_table_utf8($table, $callback, $old_charset, $key = null, $start_at = null, $error_callback = null)
320: {354: {
321:     global $mysql, $db;355:     global $mysql, $db, $old_connection_charset;
322: 356: 
323:     $finished = true;357:     $finished = true;
324:     $end_at = 0;358:     $end_at = 0;
325:     if ($mysql)359:     if ($mysql)
326:     {360:     {
327:         // Only set up the tables if we are doing this in 1 go, or its the first go361:         // Only set up the tables if we are doing this in 1 go, or its the first go
328:         if ($start_at === null || $start_at == 0)362:         if (is_null($start_at) || $start_at == 0)
329:         {363:         {
330:             // Drop any temp table that exists, in-case it's left over from a failed update364:             // Drop any temp table that exists, in-case it's left over from a failed update
331:             $db->drop_table($table.'_utf8', true) or error('Unable to drop left over temp table', __FILE__, __LINE__, $db->error());365:             $db->drop_table($table.'_utf8', true) or error('Unable to drop left over temp table', __FILE__, __LINE__, $db->error());
337:             alter_table_utf8($table.'_utf8');371:             alter_table_utf8($table.'_utf8');
338:         }372:         }
339: 373: 
340:         // Change to latin1 mode so MySQL doesn't attempt to perform conversion on the data from the old table374:         // Change to the old character set so MySQL doesn't attempt to perform conversion on the data from the old table
341:         $db->set_names('latin1');375:         $db->set_names($old_connection_charset);
342: 376: 
343:         // Move & Convert everything377:         // Move & Convert everything
344:         $result = $db->query('SELECT * FROM '.$table.($start_at === null ? '' : ' WHERE '.$key.'>'.$start_at).' ORDER BY '.$key.' ASC'.($start_at === null ? '' : ' LIMIT '.PER_PAGE), false) or error('Unable to select from old table', __FILE__, __LINE__, $db->error());378:         $result = $db->query('SELECT * FROM '.$table.(is_null($start_at) ? '' : ' WHERE '.$key.'>'.$start_at).' ORDER BY '.$key.' ASC'.(is_null($start_at) ? '' : ' LIMIT '.PER_PAGE), false) or error('Unable to select from old table', __FILE__, __LINE__, $db->error());
345: 379: 
346:         // Change back to utf8 mode so we can insert it into the new table380:         // Change back to utf8 mode so we can insert it into the new table
347:         $db->set_names('utf8');381:         $db->set_names('utf8');
352: 386: 
353:             $temp = array();387:             $temp = array();
354:             foreach ($cur_item as $idx => $value)388:             foreach ($cur_item as $idx => $value)
355:                 $temp[$idx] = $value === null ? 'NULL' : '\''.$db->escape($value).'\'';389:                 $temp[$idx] = is_null($value) ? 'NULL' : '\''.$db->escape($value).'\'';
356: 390: 
357:             $db->query('INSERT INTO '.$table.'_utf8('.implode(',', array_keys($temp)).') VALUES ('.implode(',', array_values($temp)).')') or error('Unable to insert data to new table', __FILE__, __LINE__, $db->error());391:             $db->query('INSERT INTO '.$table.'_utf8('.implode(',', array_keys($temp)).') VALUES ('.implode(',', array_values($temp)).')') or (is_null($error_callback) ? error('Unable to insert data to new table', __FILE__, __LINE__, $db->error()) : call_user_func($error_callback, $cur_item));
358: 392: 
359:             $end_at = $cur_item[$key];393:             $end_at = $cur_item[$key];
360:         }394:         }
361: 395: 
362:         // If we aren't doing this all in 1 go and $end_at has a value (i.e. we have processed at least 1 row), figure out if we have more to do or not396:         // If we aren't doing this all in 1 go and $end_at has a value (i.e. we have processed at least 1 row), figure out if we have more to do or not
363:         if ($start_at !== null && $end_at > 0)397:         if (!is_null($start_at) && $end_at > 0)
364:         {398:         {
365:             $result = $db->query('SELECT 1 FROM '.$table.' WHERE '.$key.'>'.$end_at.' ORDER BY '.$key.' ASC LIMIT 1') or error('Unable to check for next row', __FILE__, __LINE__, $db->error());399:             $result = $db->query('SELECT 1 FROM '.$table.' WHERE '.$key.'>'.$end_at.' ORDER BY '.$key.' ASC LIMIT 1') or error('Unable to check for next row', __FILE__, __LINE__, $db->error());
366:             $finished = $db->num_rows($result) == 0;400:             $finished = $db->num_rows($result) == 0;
383:     else417:     else
384:     {418:     {
385:         // Convert everything419:         // Convert everything
386:         $result = $db->query('SELECT * FROM '.$table.($start_at === null ? '' : ' WHERE '.$key.'>'.$start_at).' ORDER BY '.$key.' ASC'.($start_at === null ? '' : ' LIMIT '.PER_PAGE)) or error('Unable to select from table', __FILE__, __LINE__, $db->error());420:         $result = $db->query('SELECT * FROM '.$table.(is_null($start_at) ? '' : ' WHERE '.$key.'>'.$start_at).' ORDER BY '.$key.' ASC'.(is_null($start_at ) ? '' : ' LIMIT '.PER_PAGE)) or error('Unable to select from table', __FILE__, __LINE__, $db->error());
387:         while ($cur_item = $db->fetch_assoc($result))421:         while ($cur_item = $db->fetch_assoc($result))
388:         {422:         {
389:             $cur_item = call_user_func($callback, $cur_item, $old_charset);423:             $cur_item = call_user_func($callback, $cur_item, $old_charset);
390: 424: 
391:             $temp = array();425:             $temp = array();
392:             foreach ($cur_item as $idx => $value)426:             foreach ($cur_item as $idx => $value)
393:                 $temp[] = $idx.'='.($value === null ? 'NULL' : '\''.$db->escape($value).'\'');427:                 $temp[] = $idx.'='.(is_null($value) ? 'NULL' : '\''.$db->escape($value).'\'');
394: 428: 
395:             if (!empty($temp))429:             if (!empty($temp))
396:                 $db->query('UPDATE '.$table.' SET '.implode(', ', $temp).' WHERE '.$key.'=\''.$db->escape($cur_item[$key]).'\'') or error('Unable to update data', __FILE__, __LINE__, $db->error());430:                 $db->query('UPDATE '.$table.' SET '.implode(', ', $temp).' WHERE '.$key.'=\''.$db->escape($cur_item[$key]).'\'') or error('Unable to update data', __FILE__, __LINE__, $db->error());
398:             $end_at = $cur_item[$key];432:             $end_at = $cur_item[$key];
399:         }433:         }
400: 434: 
401:         if ($start_at !== null && $end_at > 0)435:         if (!is_null($start_at) && $end_at > 0)
402:         {436:         {
403:             $result = $db->query('SELECT 1 FROM '.$table.' WHERE '.$key.'>'.$end_at.' ORDER BY '.$key.' ASC LIMIT 1') or error('Unable to check for next row', __FILE__, __LINE__, $db->error());437:             $result = $db->query('SELECT 1 FROM '.$table.' WHERE '.$key.'>'.$end_at.' ORDER BY '.$key.' ASC LIMIT 1') or error('Unable to check for next row', __FILE__, __LINE__, $db->error());
404:             if ($db->num_rows($result) == 0)438:             if ($db->num_rows($result) == 0)
418: while (@ob_end_clean());452: while (@ob_end_clean());
419: 453: 
420: 454: 
421: $stage = isset($_GET['stage']) ? $_GET['stage'] : '';455: $stage = isset($_REQUEST['stage']) ? $_REQUEST['stage'] : '';
422: $old_charset = isset($_GET['req_old_charset']) ? str_replace('ISO8859', 'ISO-8859', strtoupper($_GET['req_old_charset'])) : 'ISO-8859-1';456: $old_charset = isset($_REQUEST['req_old_charset']) ? str_replace('ISO8859', 'ISO-8859', strtoupper($_REQUEST['req_old_charset'])) : 'ISO-8859-1';
423: $start_at = isset($_GET['start_at']) ? intval($_GET['start_at']) : 0;457: $start_at = isset($_REQUEST['start_at']) ? intval($_REQUEST['start_at']) : 0;
424: $query_str = '';458: $query_str = '';
425: 459: 
426: switch ($stage)460: // Show form
 461: if (empty($stage))
427: {462: {
428:     // Show form463:     if (file_exists(FORUM_CACHE_DIR.'db_update.lock'))
429:     case '':464:     {
 465:         // Deal with newlines, tabs and multiple spaces
 466:         $pattern = array("\t", '  ', '  ');
 467:         $replace = array('&#160; &#160; ', '&#160; ', ' &#160;');
 468:         $message = str_replace($pattern, $replace, $pun_config['o_maintenance_message']);
 469: 
 470: ?>
 471: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang_common['lang_identifier'] ?>" lang="<?php echo $lang_common['lang_identifier'] ?>" dir="<?php echo $lang_common['lang_direction'] ?>">
 472: <head>
 473: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 474: <title><?php echo $lang_update['Maintenance'] ?></title>
 475: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
 476: </head>
 477: <body>
 478: 
 479: <div id="punmaint" class="pun">
 480: <div class="top-box"><div><!-- Top Corners --></div></div>
 481: <div class="punwrap">
 482: 
 483: <div id="brdmain">
 484: <div class="block">
 485:     <h2><?php echo $lang_update['Maintenance'] ?></h2>
 486:     <div class="box">
 487:         <div class="inbox">
 488:             <p><?php echo $message ?></p>
 489:         </div>
 490:     </div>
 491: </div>
 492: </div>
 493: 
 494: </div>
 495: <div class="end-box"><div><!-- Bottom Corners --></div></div>
 496: </div>
 497: 
 498: </body>
 499: </html>
 500: <?php
 501: 
 502:     }
 503:     else
 504:     {
430: 505: 
431: ?>506: ?>
432: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">507: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
433: 508: 
434: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">509: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang_common['lang_identifier'] ?>" lang="<?php echo $lang_common['lang_identifier'] ?>" dir="<?php echo $lang_common['lang_direction'] ?>">
435: <head>510: <head>
436: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />511: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
437: <title>FluxBB Database Update</title>512: <title><?php echo $lang_update['Update'] ?></title>
438: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />513: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
439: </head>514: </head>
440: <body>515: <body onLoad="document.getElementById('install').req_db_pass.focus();document.getElementById('install').start.disabled=false;">
441: 516: 
442: <div id="pundb_update" class="pun">517: <div id="pundb_update" class="pun">
443: <div class="top-box"><div><!-- Top Corners --></div></div>518: <div class="top-box"><div><!-- Top Corners --></div></div>
444: <div class="punwrap">519: <div class="punwrap">
445: 520: 
 521: <div id="brdheader" class="block">
 522:     <div class="box">
 523:         <div id="brdtitle" class="inbox">
 524:             <h1><span><?php echo $lang_update['Update'] ?></span></h1>
 525:             <div id="brddesc"><p><?php echo $lang_update['Update message'] ?></p><p><strong><?php echo $lang_update['Note']; ?></strong> <?php echo $lang_update['Members message']; ?></p></div>
 526:         </div>
 527:     </div>
 528: </div>
 529: 
 530: <div id="brdmain">
446: <div class="blockform">531: <div class="blockform">
447:     <h2><span>FluxBB Update</span></h2>532:     <h2><span><?php echo $lang_update['Update'] ?></span></h2>
448:     <div class="box">533:     <div class="box">
449:         <form method="get" action="<?php echo pun_htmlspecialchars($_SERVER['REQUEST_URI']) ?>" onsubmit="this.start.disabled=true">534:         <form id="install" method="post" action="db_update.php">
450:         <input type="hidden" name="stage" value="start" />535:             <input type="hidden" name="stage" value="start" />
 536:             <div class="inform">
 537:                 <fieldset>
 538:                 <legend><?php echo $lang_update['Administrator only'] ?></legend>
 539:                     <div class="infldset">
 540:                         <p><?php echo $lang_update['Database password info'] ?></p>
 541:                         <p><strong><?php echo $lang_update['Note']; ?></strong> <?php echo $lang_update['Database password note'] ?></p>
 542:                         <label class="required"><strong><?php echo $lang_update['Database password'] ?> <span><?php echo $lang_update['Required'] ?></span></strong><br /><input type="password" id="req_db_pass" name="req_db_pass" /><br /></label>
 543:                         <p><?php echo $lang_update['Maintenance message info'] ?></p>
 544:                         <div class="txtarea">
 545:                             <label class="required"><strong><?php echo $lang_update['Maintenance message'] ?> <span><?php echo $lang_update['Required'] ?></span></strong><br />
 546:                             <textarea name="req_maintenance_message" rows="4" cols="65"><?php echo pun_htmlspecialchars($pun_config['o_maintenance_message']) ?></textarea><br /></label>
 547:                         </div>
 548:                     </div>
 549:                 </fieldset>
 550:             </div>
451:             <div class="inform">551:             <div class="inform">
452:                 <div class="forminfo">552:                 <div class="forminfo">
453:                     <p style="font-size: 1.1em">This script will update your forum database. The update procedure might take anything from a second to hours depending on the speed of the server and the size of the forum database. Don't forget to make a backup of the database before continuing.</p>553:                     <p><?php echo $lang_update['Intro 1'] ?></p>
454:                     <p style="font-size: 1.1em">Did you read the update instructions in the documentation? If not, start there.</p>554:                     <p><?php echo $lang_update['Intro 2'] ?></p>
455: <?php555: <?php
456: 556: 
457: if (strpos($cur_version, '1.2') === 0)557:     if (strpos($cur_version, '1.2') === 0)
458: { 
459:     if (!function_exists('iconv') && !function_exists('mb_convert_encoding')) 
460:     {558:     {
 559:         if (!function_exists('iconv') && !function_exists('mb_convert_encoding'))
 560:         {
461: 561: 
462: ?>562: ?>
463:                     <p style="font-size: 1.1em"><strong>IMPORTANT!</strong> FluxBB has detected that this PHP environment does not have support for the encoding mechanisms required to do UTF-8 conversion from character sets other than ISO-8859-1. What this means is that if the current character set is not ISO-8859-1, FluxBB won't be able to convert your forum database to UTF-8 and you will have to do it manually. Instructions for doing manual charset conversion can be found in the update instructions.</p>563:                     <p><?php echo $lang_update['No charset conversion'] ?></p>
464: <?php564: <?php
465: 565: 
466:     }566:         }
467: 567: 
468: ?>568: ?>
469:                 </div>569:                 </div>
470:             </div>570:             </div>
471:             <div class="inform">571:             <div class="inform">
472:                 <div class="forminfo">572:                 <div class="forminfo">
473:                     <p style="font-size: 1.1em"><strong>Enable conversion:</strong> When enabled this update script will, after it has made the required structural changes to the database, convert all text in the database from the current character set to UTF-8. This conversion is required if you're upgrading from version 1.2.</p>573:                     <p><?php echo $lang_update['Enable conversion'] ?></p>
474:                     <p style="font-size: 1.1em"><strong>Current character set:</strong> If the primary language in your forum is English, you can leave this at the default value. However, if your forum is non-English, you should enter the character set of the primary language pack used in the forum. <i>Getting this wrong can corrupt your database so don't just guess!</i> Note: This is required even if the old database is UTF-8.</p>574:                     <p><?php echo $lang_update['Current character set'] ?></p>
475:                 </div>575:                 </div>
476:                 <fieldset>576:                 <fieldset>
477:                     <legend>Charset conversion</legend>577:                     <legend><?php echo $lang_update['Charset conversion'] ?></legend>
478:                     <div class="infldset">578:                     <div class="infldset">
479:                         <div class="rbox">579:                         <div class="rbox">
480:                             <label><input type="checkbox" name="convert_charset" value="1" checked="checked" /><strong>Enable conversion</strong> (perform database charset conversion).<br /></label>580:                             <label><input type="checkbox" name="convert_charset" value="1" checked="checked" /><?php echo $lang_update['Enable conversion label'] ?><br /></label>
481:                         </div>581:                         </div>
482:                         <label>582:                         <label>
483:                             <strong>Current character set</strong><br />Accept default for English forums otherwise the character set of the primary language pack.<br />583:                             <strong><?php echo $lang_update['Current character set label'] ?></strong><br /><?php echo $lang_update['Current character set info'] ?><br />
484:                             <input type="text" name="req_old_charset" size="12" maxlength="20" value="<?php echo $old_charset ?>" /><br />584:                             <input type="text" name="req_old_charset" size="12" maxlength="20" value="<?php echo $old_charset ?>" /><br />
485:                         </label>585:                         </label>
486:                     </div>586:                     </div>
487:                 </fieldset>587:                 </fieldset>
488: <?php588: <?php
489: 589: 
490: }590:     }
491: else591:     else
492:     echo "\t\t\t\t".'</div>'."\n";592:         echo "\t\t\t\t".'</div>'."\n";
493: 593: 
494: ?>594: ?>
495:             </div>595:             </div>
496:             <p class="buttons"><input type="submit" name="start" value="Start update" /></p>596:             <p class="buttons"><input type="submit" name="start" value="<?php echo $lang_update['Start update'] ?>" /></p>
497:         </form>597:         </form>
498:     </div>598:     </div>
499: </div>599: </div>
 600: </div>
500: 601: 
501: </div>602: </div>
502: <div class="end-box"><div><!-- Bottom Corners --></div></div>603: <div class="end-box"><div><!-- Bottom Corners --></div></div>
506: </html>607: </html>
507: <?php608: <?php
508: 609: 
509:         break;610:     }
 611:     $db->end_transaction();
 612:     $db->close();
 613:     exit;
 614: 
 615: }
 616: 
 617: // Read the lock file
 618: $lock = file_exists(FORUM_CACHE_DIR.'db_update.lock') ? trim(file_get_contents(FORUM_CACHE_DIR.'db_update.lock')) : false;
 619: $lock_error = false;
510: 620: 
 621: // Generate or fetch the UID - this confirms we have a valid admin
 622: if (isset($_POST['req_db_pass']))
 623: {
 624:     $req_db_pass = strtolower(pun_trim($_POST['req_db_pass']));
 625: 
 626:     switch ($db_type)
 627:     {
 628:         // For SQLite we compare against the database file name, since the password is left blank
 629:         case 'sqlite':
 630:             if ($req_db_pass != strtolower($db_name))
 631:                 error(sprintf($lang_update['Invalid file error'], 'config.php'));
 632: 
 633:             break;
 634:         // For everything else, check the password matches
 635:         default:
 636:             if ($req_db_pass != strtolower($db_password))
 637:                 error(sprintf($lang_update['Invalid password error'], 'config.php'));
 638: 
 639:             break;
 640:     }
 641: 
 642:     // Generate a unique id to identify this session, only if this is a valid session
 643:     $uid = pun_hash($req_db_pass.'|'.uniqid(rand(), true));
 644:     if ($lock) // We already have a lock file
 645:         $lock_error = true;
 646:     else // Create the lock file
 647:     {
 648:         $fh = @fopen(FORUM_CACHE_DIR.'db_update.lock', 'wb');
 649:         if (!$fh)
 650:             error(sprintf($lang_update['Unable to lock error'], 'cache'));
 651: 
 652:         fwrite($fh, $uid);
 653:         fclose($fh);
 654: 
 655:         // Update maintenance message
 656:         if ($_POST['req_maintenance_message'] != '')
 657:             $maintenance_message = pun_trim(pun_linebreaks($_POST['req_maintenance_message']));
 658:         else
 659:         {
 660:             // Load the admin_options.php language file
 661:             require PUN_ROOT.'lang/'.$default_lang.'/admin_options.php';
 662: 
 663:             $maintenance_message = $lang_admin_options['Default maintenance message'];
 664:         }
 665: 
 666:         $db->query('UPDATE '.$db->prefix.'config SET conf_value=\''.$db->escape($maintenance_message).'\' WHERE conf_name=\'o_maintenance_message\'') or error('Unable to update board config', __FILE__, __LINE__, $db->error());
511: 667: 
 668:         // Regenerate the config cache
 669:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
 670:             require PUN_ROOT.'include/cache.php';
 671: 
 672:         generate_config_cache();
 673:     }
 674: }
 675: else if (isset($_GET['uid']))
 676: {
 677:     $uid = pun_trim($_GET['uid']);
 678:     if (!$lock || $lock != $uid) // The lock doesn't exist or doesn't match the given UID
 679:         $lock_error = true;
 680: }
 681: else
 682:     error($lang_update['No password error']);
 683: 
 684: // If there is an error with the lock file
 685: if ($lock_error)
 686:     error(sprintf($lang_update['Script runs error'], FORUM_CACHE_DIR.'db_update.lock'));
 687: 
 688: switch ($stage)
 689: {
512:     // Start by updating the database structure690:     // Start by updating the database structure
513:     case 'start':691:     case 'start':
514:         $query_str = '?stage=preparse_posts';692:         $query_str = '?stage=preparse_posts';
529:         $db->alter_field('posts', 'poster_ip', 'VARCHAR(39)', true) or error('Unable to alter poster_ip field', __FILE__, __LINE__, $db->error());707:         $db->alter_field('posts', 'poster_ip', 'VARCHAR(39)', true) or error('Unable to alter poster_ip field', __FILE__, __LINE__, $db->error());
530:         $db->alter_field('users', 'registration_ip', 'VARCHAR(39)', false, '0.0.0.0') or error('Unable to alter registration_ip field', __FILE__, __LINE__, $db->error());708:         $db->alter_field('users', 'registration_ip', 'VARCHAR(39)', false, '0.0.0.0') or error('Unable to alter registration_ip field', __FILE__, __LINE__, $db->error());
531: 709: 
 710:         // Make the message field MEDIUMTEXT to allow proper conversion of 65535 character posts to UTF-8
 711:         $db->alter_field('posts', 'message', 'MEDIUMTEXT', true) or error('Unable to alter message field', __FILE__, __LINE__, $db->error());
 712: 
532:         // Add the DST option to the users table713:         // Add the DST option to the users table
533:         $db->add_field('users', 'dst', 'TINYINT(1)', false, 0, 'timezone') or error('Unable to add dst field', __FILE__, __LINE__, $db->error());714:         $db->add_field('users', 'dst', 'TINYINT(1)', false, 0, 'timezone') or error('Unable to add dst field', __FILE__, __LINE__, $db->error());
534: 715: 
594:         if (!array_key_exists('o_feed_type', $pun_config))775:         if (!array_key_exists('o_feed_type', $pun_config))
595:             $db->query('INSERT INTO '.$db->prefix.'config (conf_name, conf_value) VALUES (\'o_feed_type\', \'2\')') or error('Unable to insert config value \'o_feed_type\'', __FILE__, __LINE__, $db->error());776:             $db->query('INSERT INTO '.$db->prefix.'config (conf_name, conf_value) VALUES (\'o_feed_type\', \'2\')') or error('Unable to insert config value \'o_feed_type\'', __FILE__, __LINE__, $db->error());
596: 777: 
 778:         // Insert new config option o_feed_ttl
 779:         if (!array_key_exists('o_feed_ttl', $pun_config))
 780:             $db->query('INSERT INTO '.$db->prefix.'config (conf_name, conf_value) VALUES (\'o_feed_ttl\', \'0\')') or error('Unable to insert config value \'o_feed_ttl\'', __FILE__, __LINE__, $db->error());
 781: 
597:         // Insert config option o_base_url which was removed in 1.3782:         // Insert config option o_base_url which was removed in 1.3
598:         if (!array_key_exists('o_base_url', $pun_config))783:         if (!array_key_exists('o_base_url', $pun_config))
599:         {784:         {
602:             {787:             {
603:                 // Make an educated guess regarding base_url788:                 // Make an educated guess regarding base_url
604:                 $base_url  = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';    // protocol789:                 $base_url  = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';    // protocol
605:                 $base_url .= preg_replace('/:(80|443)$/', '', $_SERVER['HTTP_HOST']);                            // host[:port]790:                 $base_url .= preg_replace('%:(80|443)$%', '', $_SERVER['HTTP_HOST']);                            // host[:port]
606:                 $base_url .= str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));                            // path791:                 $base_url .= str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));                            // path
607:             }792:             }
608: 793: 
636:                 $mod_gid = $db->result($result);821:                 $mod_gid = $db->result($result);
637:             else822:             else
638:             {823:             {
639:                 $db->query('INSERT INTO '.$db->prefix.'groups (g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_send_email, g_post_flood, g_search_flood, g_email_flood) VALUES('."'Moderators', 'Moderator', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0)") or error('Unable to add group', __FILE__, __LINE__, $db->error());824:                 $db->query('INSERT INTO '.$db->prefix.'groups (g_title, g_user_title, g_moderator, g_mod_edit_users, g_mod_rename_users, g_mod_change_passwords, g_mod_ban_users, g_read_board, g_view_users, g_post_replies, g_post_topics, g_edit_posts, g_delete_posts, g_delete_topics, g_set_title, g_search, g_search_users, g_send_email, g_post_flood, g_search_flood, g_email_flood, g_report_flood) VALUES('."'Moderators', 'Moderator', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0)") or error('Unable to add group', __FILE__, __LINE__, $db->error());
640:                 $mod_gid = $db->insert_id();825:                 $mod_gid = $db->insert_id();
641:             }826:             }
642: 827: 
799:         $db->add_field('groups', 'g_send_email', 'TINYINT(1)', false, 1, 'g_search_users') or error('Unable to add g_send_email field', __FILE__, __LINE__, $db->error());984:         $db->add_field('groups', 'g_send_email', 'TINYINT(1)', false, 1, 'g_search_users') or error('Unable to add g_send_email field', __FILE__, __LINE__, $db->error());
800:         $db->add_field('groups', 'g_email_flood', 'SMALLINT(6)', false, 60, 'g_search_flood') or error('Unable to add g_email_flood field', __FILE__, __LINE__, $db->error());985:         $db->add_field('groups', 'g_email_flood', 'SMALLINT(6)', false, 60, 'g_search_flood') or error('Unable to add g_email_flood field', __FILE__, __LINE__, $db->error());
801: 986: 
802:         // Set non-default g_send_email and g_flood_email values properly987:         // Add the last_report_sent column to the users table and the g_report_flood
 988:         // column to the groups table
 989:         $db->add_field('users', 'last_report_sent', 'INT(10) UNSIGNED', true, null, 'last_email_sent') or error('Unable to add last_report_sent field', __FILE__, __LINE__, $db->error());
 990:         $db->add_field('groups', 'g_report_flood', 'SMALLINT(6)', false, 60, 'g_email_flood') or error('Unable to add g_report_flood field', __FILE__, __LINE__, $db->error());
 991: 
 992:         // Set non-default g_send_email, g_flood_email and g_flood_report values properly
803:         $db->query('UPDATE '.$db->prefix.'groups SET g_send_email = 0 WHERE g_id = 3') or error('Unable to update group email permissions', __FILE__, __LINE__, $db->error());993:         $db->query('UPDATE '.$db->prefix.'groups SET g_send_email = 0 WHERE g_id = 3') or error('Unable to update group email permissions', __FILE__, __LINE__, $db->error());
804:         $db->query('UPDATE '.$db->prefix.'groups SET g_email_flood = 0 WHERE g_id IN (1,2,3)') or error('Unable to update group email permissions', __FILE__, __LINE__, $db->error());994:         $db->query('UPDATE '.$db->prefix.'groups SET g_email_flood = 0, g_report_flood = 0 WHERE g_id IN (1,2,3)') or error('Unable to update group email permissions', __FILE__, __LINE__, $db->error());
805: 995: 
806:         // Add the auto notify/subscription option to the users table996:         // Add the auto notify/subscription option to the users table
807:         $db->add_field('users', 'auto_notify', 'TINYINT(1)', false, 0, 'notify_with_post') or error('Unable to add auto_notify field', __FILE__, __LINE__, $db->error());997:         $db->add_field('users', 'auto_notify', 'TINYINT(1)', false, 0, 'notify_with_post') or error('Unable to add auto_notify field', __FILE__, __LINE__, $db->error());
835:         // Incase we had the fulltext search extension installed (1.3-legacy), remove it1025:         // Incase we had the fulltext search extension installed (1.3-legacy), remove it
836:         $db->drop_index('topics', 'subject_idx') or error('Unable to drop subject_idx index', __FILE__, __LINE__, $db->error());1026:         $db->drop_index('topics', 'subject_idx') or error('Unable to drop subject_idx index', __FILE__, __LINE__, $db->error());
837:         $db->drop_index('posts', 'message_idx') or error('Unable to drop message_idx index', __FILE__, __LINE__, $db->error());1027:         $db->drop_index('posts', 'message_idx') or error('Unable to drop message_idx index', __FILE__, __LINE__, $db->error());
 1028:         // Incase we had the fulltext search mod installed (1.2), remove it
 1029:         $db->drop_index('topics', 'subject_fulltext_search') or error('Unable to drop subject_fulltext_search index', __FILE__, __LINE__, $db->error());
 1030:         $db->drop_index('posts', 'message_fulltext_search') or error('Unable to drop message_fulltext_search index', __FILE__, __LINE__, $db->error());
838: 1031: 
839:         // If the search_cache table has been dropped by the fulltext search extension, recreate it1032:         // If the search_cache table has been dropped by the fulltext search extension, recreate it
840:         if (!$db->table_exists('search_cache'))1033:         if (!$db->table_exists('search_cache'))
929:             $db->create_table('search_words', $schema);1122:             $db->create_table('search_words', $schema);
930:         }1123:         }
931: 1124: 
 1125:         // Rename the subscription table
 1126:         $db->rename_table('subscriptions', 'topic_subscriptions');
 1127: 
 1128:         // if we don't have the forum_subscriptions table, create it
 1129:         if (!$db->table_exists('forum_subscriptions'))
 1130:         {
 1131:             $schema = array(
 1132:                 'FIELDS'        => array(
 1133:                     'user_id'        => array(
 1134:                         'datatype'        => 'INT(10) UNSIGNED',
 1135:                         'allow_null'    => false,
 1136:                         'default'        => '0'
 1137:                     ),
 1138:                     'forum_id'        => array(
 1139:                         'datatype'        => 'INT(10) UNSIGNED',
 1140:                         'allow_null'    => false,
 1141:                         'default'        => '0'
 1142:                     )
 1143:                 ),
 1144:                 'PRIMARY KEY'    => array('user_id', 'forum_id')
 1145:             );
 1146: 
 1147:             $db->create_table('forum_subscriptions', $schema) or error('Unable to create forum subscriptions table', __FILE__, __LINE__, $db->error());
 1148:         }
 1149: 
 1150:         // Insert new config option o_forum_subscriptions
 1151:         if (!array_key_exists('o_forum_subscriptions', $pun_config))
 1152:             $db->query('INSERT INTO '.$db->prefix.'config (conf_name, conf_value) VALUES (\'o_forum_subscriptions\', \'1\')') or error('Unable to insert config value \'o_forum_subscriptions\'', __FILE__, __LINE__, $db->error());
 1153: 
 1154:         // Rename config option o_subscriptions to o_topic_subscriptions
 1155:         if (!array_key_exists('o_topic_subscriptions', $pun_config))
 1156:             $db->query('UPDATE '.$db->prefix.'config SET conf_name=\'o_topic_subscriptions\' WHERE conf_name=\'o_subscriptions\'') or error('Unable to rename config value \'o_subscriptions\'', __FILE__, __LINE__, $db->error());
 1157: 
932:         // Change the default style if the old doesn't exist anymore1158:         // Change the default style if the old doesn't exist anymore
933:         if ($pun_config['o_default_style'] != $default_style)1159:         if ($pun_config['o_default_style'] != $default_style)
934:             $db->query('UPDATE '.$db->prefix.'config SET conf_value = \''.$db->escape($default_style).'\' WHERE conf_name = \'o_default_style\'') or error('Unable to update default style config', __FILE__, __LINE__, $db->error());1160:             $db->query('UPDATE '.$db->prefix.'config SET conf_value = \''.$db->escape($default_style).'\' WHERE conf_name = \'o_default_style\'') or error('Unable to update default style config', __FILE__, __LINE__, $db->error());
935: 1161: 
 1162:         // For MySQL(i) without InnoDB, change the engine of the online table (for performance reasons)
 1163:         if ($db_type == 'mysql' || $db_type == 'mysqli')
 1164:             $db->query('ALTER TABLE '.$db->prefix.'online ENGINE = MyISAM') or error('Unable to change engine type of online table to MyISAM', __FILE__, __LINE__, $db->error());
 1165: 
936:         // Should we do charset conversion or not?1166:         // Should we do charset conversion or not?
937:         if (strpos($cur_version, '1.2') === 0 && isset($_GET['convert_charset']))1167:         if (strpos($cur_version, '1.2') === 0 && isset($_POST['convert_charset']))
938:             $query_str = '?stage=conv_bans&req_old_charset='.$old_charset;1168:             $query_str = '?stage=conv_bans&req_old_charset='.$old_charset;
939: 1169: 
940:         break;1170:         break;
946: 1176: 
947:         function _conv_bans($cur_item, $old_charset)1177:         function _conv_bans($cur_item, $old_charset)
948:         {1178:         {
949:             echo 'Converting ban '.$cur_item['id'].' …<br />'."\n";1179:             global $lang_update;
 1180: 
 1181:             echo sprintf($lang_update['Converting item'], $lang_update['ban'], $cur_item['id']).'<br />'."\n";
950: 1182: 
951:             convert_to_utf8($cur_item['username'], $old_charset);1183:             convert_to_utf8($cur_item['username'], $old_charset);
952:             convert_to_utf8($cur_item['message'], $old_charset);1184:             convert_to_utf8($cur_item['message'], $old_charset);
966:     case 'conv_categories':1198:     case 'conv_categories':
967:         $query_str = '?stage=conv_censors&req_old_charset='.$old_charset;1199:         $query_str = '?stage=conv_censors&req_old_charset='.$old_charset;
968: 1200: 
969:         echo 'Converting categories …'."<br />\n";1201:         echo sprintf($lang_update['Converting'], $lang_update['categories']).'<br />'."\n";
970: 1202: 
971:         function _conv_categories($cur_item, $old_charset)1203:         function _conv_categories($cur_item, $old_charset)
972:         {1204:         {
984:     case 'conv_censors':1216:     case 'conv_censors':
985:         $query_str = '?stage=conv_config&req_old_charset='.$old_charset;1217:         $query_str = '?stage=conv_config&req_old_charset='.$old_charset;
986: 1218: 
987:         echo 'Converting censor words …'."<br />\n";1219:         echo sprintf($lang_update['Converting'], $lang_update['censor words']).'<br />'."\n";
988: 1220: 
989:         function _conv_censoring($cur_item, $old_charset)1221:         function _conv_censoring($cur_item, $old_charset)
990:         {1222:         {
1003:     case 'conv_config':1235:     case 'conv_config':
1004:         $query_str = '?stage=conv_forums&req_old_charset='.$old_charset;1236:         $query_str = '?stage=conv_forums&req_old_charset='.$old_charset;
1005: 1237: 
1006:         echo 'Converting configuration …'."<br />\n";1238:         echo sprintf($lang_update['Converting'], $lang_update['configuration']).'<br />'."\n";
1007: 1239: 
1008:         function _conv_config($cur_item, $old_charset)1240:         function _conv_config($cur_item, $old_charset)
1009:         {1241:         {
1021:     case 'conv_forums':1253:     case 'conv_forums':
1022:         $query_str = '?stage=conv_perms&req_old_charset='.$old_charset;1254:         $query_str = '?stage=conv_perms&req_old_charset='.$old_charset;
1023: 1255: 
1024:         echo 'Converting forums …'."<br />\n";1256:         echo sprintf($lang_update['Converting'], $lang_update['forums']).'<br />'."\n";
1025: 1257: 
1026:         function _conv_forums($cur_item, $old_charset)1258:         function _conv_forums($cur_item, $old_charset)
1027:         {1259:         {
1060:     case 'conv_groups':1292:     case 'conv_groups':
1061:         $query_str = '?stage=conv_online&req_old_charset='.$old_charset;1293:         $query_str = '?stage=conv_online&req_old_charset='.$old_charset;
1062: 1294: 
1063:         echo 'Converting groups …'."<br />\n";1295:         echo sprintf($lang_update['Converting'], $lang_update['groups']).'<br />'."\n";
1064: 1296: 
1065:         function _conv_groups($cur_item, $old_charset)1297:         function _conv_groups($cur_item, $old_charset)
1066:         {1298:         {
1093: 1325: 
1094:         function _conv_posts($cur_item, $old_charset)1326:         function _conv_posts($cur_item, $old_charset)
1095:         {1327:         {
1096:             echo 'Converting post '.$cur_item['id'].' …<br />'."\n";1328:             global $lang_update;
 1329: 
 1330:             echo sprintf($lang_update['Converting item'], $lang_update['post'], $cur_item['id']).'<br />'."\n";
1097: 1331: 
1098:             convert_to_utf8($cur_item['poster'], $old_charset);1332:             convert_to_utf8($cur_item['poster'], $old_charset);
1099:             convert_to_utf8($cur_item['message'], $old_charset);1333:             convert_to_utf8($cur_item['message'], $old_charset);
1114:     case 'conv_ranks':1348:     case 'conv_ranks':
1115:         $query_str = '?stage=conv_reports&req_old_charset='.$old_charset;1349:         $query_str = '?stage=conv_reports&req_old_charset='.$old_charset;
1116: 1350: 
1117:         echo 'Converting ranks …'."<br />\n";1351:         echo sprintf($lang_update['Converting'], $lang_update['ranks']).'<br />'."\n";
1118: 1352: 
1119:         function _conv_ranks($cur_item, $old_charset)1353:         function _conv_ranks($cur_item, $old_charset)
1120:         {1354:         {
1134: 1368: 
1135:         function _conv_reports($cur_item, $old_charset)1369:         function _conv_reports($cur_item, $old_charset)
1136:         {1370:         {
1137:             echo 'Converting report '.$cur_item['id'].' …<br />'."\n";1371:             global $lang_update;
 1372: 
 1373:             echo sprintf($lang_update['Converting item'], $lang_update['report'], $cur_item['id']).'<br />'."\n";
1138: 1374: 
1139:             convert_to_utf8($cur_item['message'], $old_charset);1375:             convert_to_utf8($cur_item['message'], $old_charset);
1140: 1376: 
1204:     case 'conv_subscriptions':1440:     case 'conv_subscriptions':
1205:         $query_str = '?stage=conv_topics&req_old_charset='.$old_charset;1441:         $query_str = '?stage=conv_topics&req_old_charset='.$old_charset;
1206: 1442: 
1207:         alter_table_utf8($db->prefix.'subscriptions');1443:         // By this stage we should have already renamed the subscription table
 1444:         alter_table_utf8($db->prefix.'topic_subscriptions');
 1445:         alter_table_utf8($db->prefix.'forum_subscriptions'); // This should actually already be utf8, but for consistency...
1208: 1446: 
1209:         break;1447:         break;
1210: 1448: 
1215: 1453: 
1216:         function _conv_topics($cur_item, $old_charset)1454:         function _conv_topics($cur_item, $old_charset)
1217:         {1455:         {
1218:             echo 'Converting topic '.$cur_item['id'].' …<br />'."\n";1456:             global $lang_update;
 1457: 
 1458:             echo sprintf($lang_update['Converting item'], $lang_update['topic'], $cur_item['id']).'<br />'."\n";
1219: 1459: 
1220:             convert_to_utf8($cur_item['poster'], $old_charset);1460:             convert_to_utf8($cur_item['poster'], $old_charset);
1221:             convert_to_utf8($cur_item['subject'], $old_charset);1461:             convert_to_utf8($cur_item['subject'], $old_charset);
1236:     case 'conv_users':1476:     case 'conv_users':
1237:         $query_str = '?stage=preparse_posts';1477:         $query_str = '?stage=preparse_posts';
1238: 1478: 
 1479:         if ($start_at == 0)
 1480:             $_SESSION['dupe_users'] = array();
 1481: 
1239:         function _conv_users($cur_item, $old_charset)1482:         function _conv_users($cur_item, $old_charset)
1240:         {1483:         {
1241:             echo 'Converting user '.$cur_item['id'].' …<br />'."\n";1484:             global $lang_update;
 1485: 
 1486:             echo sprintf($lang_update['Converting item'], $lang_update['user'], $cur_item['id']).'<br />'."\n";
1242: 1487: 
1243:             convert_to_utf8($cur_item['username'], $old_charset);1488:             convert_to_utf8($cur_item['username'], $old_charset);
1244:             convert_to_utf8($cur_item['title'], $old_charset);1489:             convert_to_utf8($cur_item['title'], $old_charset);
1250:             return $cur_item;1495:             return $cur_item;
1251:         }1496:         }
1252: 1497: 
1253:         $end_at = convert_table_utf8($db->prefix.'users', '_conv_users', $old_charset, 'id', $start_at);1498:         function _error_users($cur_user)
 1499:         {
 1500:             $_SESSION['dupe_users'][$cur_user['id']] = $cur_user;
 1501:         }
 1502: 
 1503:         $end_at = convert_table_utf8($db->prefix.'users', '_conv_users', $old_charset, 'id', $start_at, '_error_users');
1254: 1504: 
1255:         if ($end_at !== true)1505:         if ($end_at !== true)
1256:             $query_str = '?stage=conv_users&req_old_charset='.$old_charset.'&start_at='.$end_at;1506:             $query_str = '?stage=conv_users&req_old_charset='.$old_charset.'&start_at='.$end_at;
 1507:         else if (!empty($_SESSION['dupe_users']))
 1508:             $query_str = '?stage=conv_users_dupe';
 1509: 
 1510:         break;
 1511: 
 1512: 
 1513:     // Handle any duplicate users which occured due to conversion
 1514:     case 'conv_users_dupe':
 1515:         $query_str = '?stage=preparse_posts';
 1516: 
 1517:         if (!$mysql || empty($_SESSION['dupe_users']))
 1518:             break;
 1519: 
 1520:         if (isset($_POST['form_sent']))
 1521:         {
 1522:             $errors = array();
 1523: 
 1524:             require PUN_ROOT.'include/email.php';
 1525: 
 1526:             foreach ($_SESSION['dupe_users'] as $id => $cur_user)
 1527:             {
 1528:                 $errors[$id] = array();
 1529: 
 1530:                 $username = pun_trim($_POST['dupe_users'][$id]);
 1531: 
 1532:                 if (pun_strlen($username) < 2)
 1533:                     $errors[$id][] = $lang_update['Username too short error'];
 1534:                 else if (pun_strlen($username) > 25) // This usually doesn't happen since the form element only accepts 25 characters
 1535:                     $errors[$id][] = $lang_update['Username too long error'];
 1536:                 else if (!strcasecmp($username, 'Guest'))
 1537:                     $errors[$id][] = $lang_update['Username Guest reserved error'];
 1538:                 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))
 1539:                     $errors[$id][] = $lang_update['Username IP format error'];
 1540:                 else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
 1541:                     $errors[$id][] = $lang_update['Username bad characters error'];
 1542:                 else if (preg_match('%(?:\[/?(?:b|u|s|ins|del|em|i|h|colou?r|quote|code|img|url|email|list|\*)\]|\[(?:img|url|quote|list)=)%i', $username))
 1543:                     $errors[$id][] = $lang_update['Username BBCode error'];
 1544: 
 1545:                 $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') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
 1546: 
 1547:                 if ($db->num_rows($result))
 1548:                 {
 1549:                     $busy = $db->result($result);
 1550:                     $errors[$id][] = sprintf($lang_update['Username duplicate error'], pun_htmlspecialchars($busy));
 1551:                 }
 1552: 
 1553:                 if (empty($errors[$id]))
 1554:                 {
 1555:                     $old_username = $cur_user['username'];
 1556:                     $_SESSION['dupe_users'][$id]['username'] = $cur_user['username'] = $username;
 1557: 
 1558:                     $temp = array();
 1559:                     foreach ($cur_user as $idx => $value)
 1560:                         $temp[$idx] = is_null($value) ? 'NULL' : '\''.$db->escape($value).'\'';
 1561: 
 1562:                     // Insert the renamed user
 1563:                     $db->query('INSERT INTO '.$db->prefix.'users('.implode(',', array_keys($temp)).') VALUES ('.implode(',', array_values($temp)).')') or error('Unable to insert data to new table', __FILE__, __LINE__, $db->error());
 1564: 
 1565:                     // Renaming a user also affects a bunch of other stuff, lets fix that too...
 1566:                     $db->query('UPDATE '.$db->prefix.'posts SET poster=\''.$db->escape($username).'\' WHERE poster_id='.$id) or error('Unable to update posts', __FILE__, __LINE__, $db->error());
 1567: 
 1568:                     // TODO: The following must compare using collation utf8_bin otherwise we will accidently update posts/topics/etc belonging to both of the duplicate users, not just the one we renamed!
 1569:                     $db->query('UPDATE '.$db->prefix.'posts SET edited_by=\''.$db->escape($username).'\' WHERE edited_by=\''.$db->escape($old_username).'\' COLLATE utf8_bin') or error('Unable to update posts', __FILE__, __LINE__, $db->error());
 1570:                     $db->query('UPDATE '.$db->prefix.'topics SET poster=\''.$db->escape($username).'\' WHERE poster=\''.$db->escape($old_username).'\' COLLATE utf8_bin') or error('Unable to update topics', __FILE__, __LINE__, $db->error());
 1571:                     $db->query('UPDATE '.$db->prefix.'topics SET last_poster=\''.$db->escape($username).'\' WHERE last_poster=\''.$db->escape($old_username).'\' COLLATE utf8_bin') or error('Unable to update topics', __FILE__, __LINE__, $db->error());
 1572:                     $db->query('UPDATE '.$db->prefix.'forums SET last_poster=\''.$db->escape($username).'\' WHERE last_poster=\''.$db->escape($old_username).'\' COLLATE utf8_bin') or error('Unable to update forums', __FILE__, __LINE__, $db->error());
 1573:                     $db->query('UPDATE '.$db->prefix.'online SET ident=\''.$db->escape($username).'\' WHERE ident=\''.$db->escape($old_username).'\' COLLATE utf8_bin') or error('Unable to update online list', __FILE__, __LINE__, $db->error());
 1574: 
 1575:                     // If the user is a moderator or an administrator we have to update the moderator lists
 1576:                     $result = $db->query('SELECT g_moderator FROM '.$db->prefix.'groups WHERE g_id='.$cur_user['group_id']) or error('Unable to fetch group', __FILE__, __LINE__, $db->error());
 1577:                     $group_mod = $db->result($result);
 1578: 
 1579:                     if ($cur_user['group_id'] == PUN_ADMIN || $group_mod == '1')
 1580:                     {
 1581:                         $result = $db->query('SELECT id, moderators FROM '.$db->prefix.'forums') or error('Unable to fetch forum list', __FILE__, __LINE__, $db->error());
 1582: 
 1583:                         while ($cur_forum = $db->fetch_assoc($result))
 1584:                         {
 1585:                             $cur_moderators = ($cur_forum['moderators'] != '') ? unserialize($cur_forum['moderators']) : array();
 1586: 
 1587:                             if (in_array($id, $cur_moderators))
 1588:                             {
 1589:                                 unset($cur_moderators[$old_username]);
 1590:                                 $cur_moderators[$username] = $id;
 1591:                                 uksort($cur_moderators, 'utf8_strcasecmp');
 1592: 
 1593:                                 $db->query('UPDATE '.$db->prefix.'forums SET moderators=\''.$db->escape(serialize($cur_moderators)).'\' WHERE id='.$cur_forum['id']) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
 1594:                             }
 1595:                         }
 1596:                     }
 1597: 
 1598:                     // Email the user alerting them of the change
 1599:                     if (file_exists(PUN_ROOT.'lang/'.$cur_user['language'].'/mail_templates/rename.tpl'))
 1600:                         $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$cur_user['language'].'/mail_templates/rename.tpl'));
 1601:                     else if (file_exists(PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/mail_templates/rename.tpl'))
 1602:                         $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/mail_templates/rename.tpl'));
 1603:                     else
 1604:                         $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/English/mail_templates/rename.tpl'));
 1605: 
 1606:                     // The first row contains the subject
 1607:                     $first_crlf = strpos($mail_tpl, "\n");
 1608:                     $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
 1609:                     $mail_message = trim(substr($mail_tpl, $first_crlf));
 1610: 
 1611:                     $mail_subject = str_replace('<board_title>', $pun_config['o_board_title'], $mail_subject);
 1612:                     $mail_message = str_replace('<base_url>', get_base_url().'/', $mail_message);
 1613:                     $mail_message = str_replace('<old_username>', $old_username, $mail_message);
 1614:                     $mail_message = str_replace('<new_username>', $username, $mail_message);
 1615:                     $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
 1616: 
 1617:                     pun_mail($cur_user['email'], $mail_subject, $mail_message);
 1618: 
 1619:                     unset($_SESSION['dupe_users'][$id]);
 1620:                 }
 1621:             }
 1622:         }
 1623: 
 1624:         if (!empty($_SESSION['dupe_users']))
 1625:         {
 1626:             $query_str = '';
 1627: 
 1628: ?>
 1629: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 1630: 
 1631: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang_common['lang_identifier'] ?>" lang="<?php echo $lang_common['lang_identifier'] ?>" dir="<?php echo $lang_common['lang_direction'] ?>">
 1632: <head>
 1633: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 1634: <title><?php echo $lang_update['Update'] ?></title>
 1635: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
 1636: </head>
 1637: <body>
 1638: 
 1639: <div id="pundb_update" class="pun">
 1640: <div class="top-box"><div><!-- Top Corners --></div></div>
 1641: <div class="punwrap">
 1642: 
 1643: <div class="blockform">
 1644:     <h2><span><?php echo $lang_update['Error converting users'] ?></span></h2>
 1645:     <div class="box">
 1646:         <form method="post" action="db_update.php?stage=conv_users_dupe&amp;uid=<?php echo $uid ?>">
 1647:             <input type="hidden" name="form_sent" value="1" />
 1648:             <div class="inform">
 1649:                 <div class="forminfo">
 1650:                         <p style="font-size: 1.1em"><?php echo $lang_update['Error info 1'] ?></p>
 1651:                         <p style="font-size: 1.1em"><?php echo $lang_update['Error info 2'] ?></p>
 1652:                 </div>
 1653:             </div>
 1654: <?php
 1655: 
 1656:             foreach ($_SESSION['dupe_users'] as $id => $cur_user)
 1657:             {
 1658: 
 1659: ?>
 1660:             <div class="inform">
 1661:                 <fieldset>
 1662:                     <legend><?php echo pun_htmlspecialchars($cur_user['username']); ?></legend>
 1663:                     <div class="infldset">
 1664:                         <label class="required"><strong><?php echo $lang_update['New username'] ?> <span><?php echo $lang_update['Required'] ?></span></strong><br /><input type="text" name="<?php echo 'dupe_users['.$id.']'; ?>" value="<?php if (isset($_POST['dupe_users'][$id])) echo pun_htmlspecialchars($_POST['dupe_users'][$id]); ?>" size="25" maxlength="25" /><br /></label>
 1665:                     </div>
 1666:                 </fieldset>
 1667: <?php if (!empty($errors[$id])): ?>                <div class="forminfo error-info">
 1668:                     <h3><?php echo $lang_update['Correct errors'] ?></h3>
 1669:                     <ul class="error-list">
 1670: <?php
 1671: 
 1672: foreach ($errors[$id] as $cur_error)
 1673:     echo "\t\t\t\t\t\t".'<li><strong>'.$cur_error.'</strong></li>'."\n";
 1674: ?>
 1675:                     </ul>
 1676:                 </div>
 1677: <?php endif; ?>            </div>
 1678: <?php
 1679: 
 1680:             }
 1681: 
 1682: ?>
 1683:             <p class="buttons"><input type="submit" name="rename" value="<?php echo $lang_update['Rename users'] ?>" /></p>
 1684:         </form>
 1685:     </div>
 1686: </div>
 1687: 
 1688: </div>
 1689: <div class="end-box"><div><!-- Bottom Corners --></div></div>
 1690: </div>
 1691: 
 1692: </body>
 1693: </html>
 1694: <?php
 1695: 
 1696:         }
1257: 1697: 
1258:         break;1698:         break;
1259: 1699: 
1275:         $end_at = 0;1715:         $end_at = 0;
1276:         while ($cur_item = $db->fetch_assoc($result))1716:         while ($cur_item = $db->fetch_assoc($result))
1277:         {1717:         {
1278:             echo 'Preparsing post '.$cur_item['id'].' …<br />'."\n";1718:             echo sprintf($lang_update['Preparsing item'], $lang_update['post'], $cur_item['id']).'<br />'."\n";
1279:             $db->query('UPDATE '.$db->prefix.'posts SET message = \''.$db->escape(preparse_bbcode($cur_item['message'], $temp)).'\' WHERE id = '.$cur_item['id']) or error('Unable to update post', __FILE__, __LINE__, $db->error());1719:             $db->query('UPDATE '.$db->prefix.'posts SET message = \''.$db->escape(preparse_bbcode($cur_item['message'], $temp)).'\' WHERE id = '.$cur_item['id']) or error('Unable to update post', __FILE__, __LINE__, $db->error());
1280: 1720: 
1281:             $end_at = $cur_item['id'];1721:             $end_at = $cur_item['id'];
1310:         $end_at = 0;1750:         $end_at = 0;
1311:         while ($cur_item = $db->fetch_assoc($result))1751:         while ($cur_item = $db->fetch_assoc($result))
1312:         {1752:         {
1313:             echo 'Preparsing signature '.$cur_item['id'].' …<br />'."\n";1753:             echo sprintf($lang_update['Preparsing item'], $lang_update['signature'], $cur_item['id']).'<br />'."\n";
1314:             $db->query('UPDATE '.$db->prefix.'users SET signature = \''.$db->escape(preparse_bbcode($cur_item['signature'], $temp, true)).'\' WHERE id = '.$cur_item['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());1754:             $db->query('UPDATE '.$db->prefix.'users SET signature = \''.$db->escape(preparse_bbcode($cur_item['signature'], $temp, true)).'\' WHERE id = '.$cur_item['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());
1315: 1755: 
1316:             $end_at = $cur_item['id'];1756:             $end_at = $cur_item['id'];
1366:         $end_at = 0;1806:         $end_at = 0;
1367:         while ($cur_item = $db->fetch_assoc($result))1807:         while ($cur_item = $db->fetch_assoc($result))
1368:         {1808:         {
1369:             echo 'Rebuilding index for post '.$cur_item['id'].' …<br />'."\n";1809:             echo sprintf($lang_update['Rebuilding index item'], $lang_update['post'], $cur_item['id']).'<br />'."\n";
1370: 1810: 
1371:             if ($cur_item['id'] == $cur_item['first_post_id'])1811:             if ($cur_item['id'] == $cur_item['first_post_id'])
1372:                 update_search_index('post', $cur_item['id'], $cur_item['message'], $cur_item['subject']);1812:                 update_search_index('post', $cur_item['id'], $cur_item['message'], $cur_item['subject']);
1402:         // And the parser revision number1842:         // And the parser revision number
1403:         $db->query('UPDATE '.$db->prefix.'config SET conf_value = \''.UPDATE_TO_PARSER_REVISION.'\' WHERE conf_name = \'o_parser_revision\'') or error('Unable to update parser revision number', __FILE__, __LINE__, $db->error());1843:         $db->query('UPDATE '.$db->prefix.'config SET conf_value = \''.UPDATE_TO_PARSER_REVISION.'\' WHERE conf_name = \'o_parser_revision\'') or error('Unable to update parser revision number', __FILE__, __LINE__, $db->error());
1404: 1844: 
 1845:         // Check the default language still exists!
 1846:         if (!file_exists(PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/common.php'))
 1847:             $db->query('UPDATE '.$db->prefix.'config SET conf_value = \'English\' WHERE conf_name = \'o_default_lang\'') or error('Unable to update default language', __FILE__, __LINE__, $db->error());
 1848: 
 1849:         // Check the default style still exists!
 1850:         if (!file_exists(PUN_ROOT.'style/'.$pun_config['o_default_style'].'.css'))
 1851:             $db->query('UPDATE '.$db->prefix.'config SET conf_value = \'Air\' WHERE conf_name = \'o_default_style\'') or error('Unable to update default style', __FILE__, __LINE__, $db->error());
 1852: 
1405:         // This feels like a good time to synchronize the forums1853:         // This feels like a good time to synchronize the forums
1406:         $result = $db->query('SELECT id FROM '.$db->prefix.'forums') or error('Unable to fetch forum IDs', __FILE__, __LINE__, $db->error());1854:         $result = $db->query('SELECT id FROM '.$db->prefix.'forums') or error('Unable to fetch forum IDs', __FILE__, __LINE__, $db->error());
1407: 1855: 
1411:         // Empty the PHP cache1859:         // Empty the PHP cache
1412:         forum_clear_cache();1860:         forum_clear_cache();
1413: 1861: 
 1862:         // Delete the update lock file
 1863:         @unlink(FORUM_CACHE_DIR.'db_update.lock');
 1864: 
1414: ?>1865: ?>
1415: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">1866: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
1416: 1867: 
1417: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">1868: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang_common['lang_identifier'] ?>" lang="<?php echo $lang_common['lang_identifier'] ?>" dir="<?php echo $lang_common['lang_direction'] ?>">
1418: <head>1869: <head>
1419: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />1870: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
1420: <title>FluxBB Database Update</title>1871: <title><?php echo $lang_update['Update'] ?></title>
1421: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />1872: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
1422: </head>1873: </head>
1423: <body>1874: <body>
1427: <div class="punwrap">1878: <div class="punwrap">
1428: 1879: 
1429: <div class="blockform">1880: <div class="blockform">
1430:     <h2><span>FluxBB Update</span></h2>1881:     <h2><span><?php echo $lang_update['Update'] ?></span></h2>
1431:     <div class="box">1882:     <div class="box">
1432:         <div class="fakeform">1883:         <div class="fakeform">
1433:             <div class="inform">1884:             <div class="inform">
1434:                 <div class="forminfo">1885:                 <div class="forminfo">
1435:                     <p style="font-size: 1.1em">Your forum database was successfully updated. You may now <a href="<?php echo PUN_ROOT ?>index.php">go to the forum index</a>.</p>1886:                     <p style="font-size: 1.1em"><?php printf($lang_update['Successfully updated'], sprintf('<a href="index.php">%s</a>', $lang_update['go to index'])) ?></p>
1436:                 </div>1887:                 </div>
1437:             </div>1888:             </div>
1438:         </div>1889:         </div>
1454: $db->close();1905: $db->close();
1455: 1906: 
1456: if ($query_str != '')1907: if ($query_str != '')


a/delete.php b/delete.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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: define('PUN_ROOT', './');  9: define('PUN_ROOT', dirname(__FILE__).'/');
 10: require PUN_ROOT.'include/common.php'; 10: require PUN_ROOT.'include/common.php';
 11:  11: 
 12:  12: 
 13: if ($pun_user['g_read_board'] == '0') 13: if ($pun_user['g_read_board'] == '0')
 14:     message($lang_common['No view']); 14:     message($lang_common['No view'], false, '403 Forbidden');
 15:  15: 
 16:  16: 
 17: $id = isset($_GET['id']) ? intval($_GET['id']) : 0; 17: $id = isset($_GET['id']) ? intval($_GET['id']) : 0;
 18: if ($id < 1) 18: if ($id < 1)
 19:     message($lang_common['Bad request']); 19:     message($lang_common['Bad request'], false, '404 Not Found');
 20:  20: 
 21: // Fetch some info about the post, the topic and the forum 21: // Fetch some info about the post, the topic and the forum
 22: $result = $db->query('SELECT f.id AS fid, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.id AS tid, t.subject, t.posted, t.first_post_id, t.closed, p.poster, p.poster_id, p.message, p.hide_smilies 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='.$id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error()); 22: $result = $db->query('SELECT f.id AS fid, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.id AS tid, t.subject, t.first_post_id, t.closed, p.posted, p.poster, p.poster_id, p.message, p.hide_smilies 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='.$id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
 23: if (!$db->num_rows($result)) 23: if (!$db->num_rows($result))
 24:     message($lang_common['Bad request']); 24:     message($lang_common['Bad request'], false, '404 Not Found');
 25:  25: 
 26: $cur_post = $db->fetch_assoc($result); 26: $cur_post = $db->fetch_assoc($result);
 27:  27: 
 40:     $cur_post['poster_id'] != $pun_user['id'] || 40:     $cur_post['poster_id'] != $pun_user['id'] ||
 41:     $cur_post['closed'] == '1') && 41:     $cur_post['closed'] == '1') &&
 42:     !$is_admmod) 42:     !$is_admmod)
 43:     message($lang_common['No permission']); 43:     message($lang_common['No permission'], false, '403 Forbidden');
 44:  44: 
 45: // Load the delete.php language file 45: // Load the delete.php language file
 46: require PUN_ROOT.'lang/'.$pun_user['language'].'/delete.php'; 46: require PUN_ROOT.'lang/'.$pun_user['language'].'/delete.php';
 48:  48: 
 49: if (isset($_POST['delete'])) 49: if (isset($_POST['delete']))
 50: { 50: {
 51:     if ($is_admmod) 51:     // Make sure they got here from the site
 52:         confirm_referrer('delete.php'); 52:     confirm_referrer('delete.php');
 53:  53: 
 54:     require PUN_ROOT.'include/search_idx.php'; 54:     require PUN_ROOT.'include/search_idx.php';
 55:  55: 
 67:         delete_post($id, $cur_post['tid']); 67:         delete_post($id, $cur_post['tid']);
 68:         update_forum($cur_post['fid']); 68:         update_forum($cur_post['fid']);
 69:  69: 
 70:         redirect('viewtopic.php?id='.$cur_post['tid'], $lang_delete['Post del redirect']); 70:         // Redirect towards the previous post
  71:         $result = $db->query('SELECT id FROM '.$db->prefix.'posts WHERE topic_id='.$cur_post['tid'].' AND id < '.$id.' ORDER BY id DESC LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
  72:         $post_id = $db->result($result);
  73: 
  74:         redirect('viewtopic.php?pid='.$post_id.'#p'.$post_id, $lang_delete['Post del redirect']);
 71:     } 75:     }
 72: } 76: }
 73:  77: 
108: 112: 
109: <div id="postreview">113: <div id="postreview">
110:     <div class="blockpost">114:     <div class="blockpost">
111:         <div class="box<?php echo ($post_count % 2 == 0) ? ' roweven' : ' rowodd' ?>">115:         <div class="box">
112:             <div class="inbox">116:             <div class="inbox">
113:                 <div class="postbody">117:                 <div class="postbody">
114:                     <div class="postleft">118:                     <div class="postleft">


a/edit.php b/edit.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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: define('PUN_ROOT', './');  9: define('PUN_ROOT', dirname(__FILE__).'/');
 10: require PUN_ROOT.'include/common.php'; 10: require PUN_ROOT.'include/common.php';
 11:  11: 
 12:  12: 
 13: if ($pun_user['g_read_board'] == '0') 13: if ($pun_user['g_read_board'] == '0')
 14:     message($lang_common['No view']); 14:     message($lang_common['No view'], false, '403 Forbidden');
 15:  15: 
 16:  16: 
 17: $id = isset($_GET['id']) ? intval($_GET['id']) : 0; 17: $id = isset($_GET['id']) ? intval($_GET['id']) : 0;
 18: if ($id < 1) 18: if ($id < 1)
 19:     message($lang_common['Bad request']); 19:     message($lang_common['Bad request'], false, '404 Not Found');
 20:  20: 
 21: // Fetch some info about the post, the topic and the forum 21: // Fetch some info about the post, the topic and the forum
 22: $result = $db->query('SELECT f.id AS fid, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.id AS tid, t.subject, t.posted, t.first_post_id, t.closed, p.poster, p.poster_id, p.message, p.hide_smilies 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='.$id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error()); 22: $result = $db->query('SELECT f.id AS fid, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.id AS tid, t.subject, t.posted, t.first_post_id, t.sticky, t.closed, p.poster, p.poster_id, p.message, p.hide_smilies 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='.$id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
 23: if (!$db->num_rows($result)) 23: if (!$db->num_rows($result))
 24:     message($lang_common['Bad request']); 24:     message($lang_common['Bad request'], false, '404 Not Found');
 25:  25: 
 26: $cur_post = $db->fetch_assoc($result); 26: $cur_post = $db->fetch_assoc($result);
 27:  27: 
 42:     $cur_post['poster_id'] != $pun_user['id'] || 42:     $cur_post['poster_id'] != $pun_user['id'] ||
 43:     $cur_post['closed'] == '1') && 43:     $cur_post['closed'] == '1') &&
 44:     !$is_admmod) 44:     !$is_admmod)
 45:     message($lang_common['No permission']); 45:     message($lang_common['No permission'], false, '403 Forbidden');
 46:  46: 
 47: // Load the post.php/edit.php language file 47: // Load the post.php/edit.php language file
 48: require PUN_ROOT.'lang/'.$pun_user['language'].'/post.php'; 48: require PUN_ROOT.'lang/'.$pun_user['language'].'/post.php';
 53:  53: 
 54: if (isset($_POST['form_sent'])) 54: if (isset($_POST['form_sent']))
 55: { 55: {
 56:     if ($is_admmod) 56:     // Make sure they got here from the site
 57:         confirm_referrer('edit.php'); 57:     confirm_referrer('edit.php');
 58:  58: 
 59:     // If it's a topic it must contain a subject 59:     // If it's a topic it must contain a subject
 60:     if ($can_edit_subject) 60:     if ($can_edit_subject)
 61:     { 61:     {
 62:         $subject = pun_trim($_POST['req_subject']); 62:         $subject = pun_trim($_POST['req_subject']);
 63:  63: 
  64:         if ($pun_config['o_censoring'] == '1')
  65:             $censored_subject = pun_trim(censor_words($subject));
  66: 
 64:         if ($subject == '') 67:         if ($subject == '')
 65:             $errors[] = $lang_post['No subject']; 68:             $errors[] = $lang_post['No subject'];
  69:         else if ($pun_config['o_censoring'] == '1' && $censored_subject == '')
  70:             $errors[] = $lang_post['No subject after censoring'];
 66:         else if (pun_strlen($subject) > 70) 71:         else if (pun_strlen($subject) > 70)
 67:             $errors[] = $lang_post['Too long subject']; 72:             $errors[] = $lang_post['Too long subject'];
 68:         else if ($pun_config['p_subject_all_caps'] == '0' && is_all_uppercase($subject) && !$pun_user['is_admmod']) 73:         else if ($pun_config['p_subject_all_caps'] == '0' && is_all_uppercase($subject) && !$pun_user['is_admmod'])
 72:     // Clean up message from POST 77:     // Clean up message from POST
 73:     $message = pun_linebreaks(pun_trim($_POST['req_message'])); 78:     $message = pun_linebreaks(pun_trim($_POST['req_message']));
 74:  79: 
 75:     if (pun_strlen($message) > PUN_MAX_POSTSIZE) 80:     // Here we use strlen() not pun_strlen() as we want to limit the post to PUN_MAX_POSTSIZE bytes, not characters
 76:         $errors[] = $lang_post['Too long message']; 81:     if (strlen($message) > PUN_MAX_POSTSIZE)
  82:         $errors[] = sprintf($lang_post['Too long message'], forum_number_format(PUN_MAX_POSTSIZE));
 77:     else if ($pun_config['p_message_all_caps'] == '0' && is_all_uppercase($message) && !$pun_user['is_admmod']) 83:     else if ($pun_config['p_message_all_caps'] == '0' && is_all_uppercase($message) && !$pun_user['is_admmod'])
 78:         $errors[] = $lang_post['All caps message']; 84:         $errors[] = $lang_post['All caps message'];
 79:  85: 
 84:         $message = preparse_bbcode($message, $errors); 90:         $message = preparse_bbcode($message, $errors);
 85:     } 91:     }
 86:  92: 
 87:     if ($message == '') 93:     if (empty($errors))
 88:         $errors[] = $lang_post['No message']; 94:     {
  95:         if ($message == '')
  96:             $errors[] = $lang_post['No message'];
  97:         else if ($pun_config['o_censoring'] == '1')
  98:         {
  99:             // Censor message to see if that causes problems
 100:             $censored_message = pun_trim(censor_words($message));
 101: 
 102:             if ($censored_message == '')
 103:                 $errors[] = $lang_post['No message after censoring'];
 104:         }
 105:     }
 89: 106: 
 90:     $hide_smilies = isset($_POST['hide_smilies']) ? '1' : '0';107:     $hide_smilies = isset($_POST['hide_smilies']) ? '1' : '0';
 108:     $stick_topic = isset($_POST['stick_topic']) ? '1' : '0';
 109:     if (!$is_admmod)
 110:         $stick_topic = $cur_post['sticky'];
 111:     
 112:     // Replace four-byte characters (MySQL cannot handle them)
 113:     $message = strip_bad_multibyte_chars($message);
 91: 114: 
 92:     // Did everything go according to plan?115:     // Did everything go according to plan?
 93:     if (empty($errors) && !isset($_POST['preview']))116:     if (empty($errors) && !isset($_POST['preview']))
 94:     {117:     {
 95:         $edited_sql = (!isset($_POST['silent']) || !$is_admmod) ? $edited_sql = ', edited='.time().', edited_by=\''.$db->escape($pun_user['username']).'\'' : '';118:         $edited_sql = (!isset($_POST['silent']) || !$is_admmod) ? ', edited='.time().', edited_by=\''.$db->escape($pun_user['username']).'\'' : '';
 96: 119: 
 97:         require PUN_ROOT.'include/search_idx.php';120:         require PUN_ROOT.'include/search_idx.php';
 98: 121: 
 99:         if ($can_edit_subject)122:         if ($can_edit_subject)
100:         {123:         {
101:             // Update the topic and any redirect topics124:             // Update the topic and any redirect topics
102:             $db->query('UPDATE '.$db->prefix.'topics SET subject=\''.$db->escape($subject).'\' WHERE id='.$cur_post['tid'].' OR moved_to='.$cur_post['tid']) or error('Unable to update topic', __FILE__, __LINE__, $db->error());125:             $db->query('UPDATE '.$db->prefix.'topics SET subject=\''.$db->escape($subject).'\', sticky='.$stick_topic.' WHERE id='.$cur_post['tid'].' OR moved_to='.$cur_post['tid']) or error('Unable to update topic', __FILE__, __LINE__, $db->error());
103: 126: 
104:             // We changed the subject, so we need to take that into account when we update the search words127:             // We changed the subject, so we need to take that into account when we update the search words
105:             update_search_index('edit', $id, $message, $subject);128:             update_search_index('edit', $id, $message, $subject);
188: }211: }
189: 212: 
190: ?>213: ?>
191: <div class="blockform">214: <div id="editform" class="blockform">
192:     <h2><span><?php echo $lang_post['Edit post'] ?></span></h2>215:     <h2><span><?php echo $lang_post['Edit post'] ?></span></h2>
193:     <div class="box">216:     <div class="box">
194:         <form id="edit" method="post" action="edit.php?id=<?php echo $id ?>&amp;action=edit" onsubmit="return process_form(this)">217:         <form id="edit" method="post" action="edit.php?id=<?php echo $id ?>&amp;action=edit" onsubmit="return process_form(this)">
203:                         <textarea name="req_message" rows="20" cols="95" tabindex="<?php echo $cur_index++ ?>"><?php echo pun_htmlspecialchars(isset($_POST['req_message']) ? $message : $cur_post['message']) ?></textarea><br /></label>226:                         <textarea name="req_message" rows="20" cols="95" tabindex="<?php echo $cur_index++ ?>"><?php echo pun_htmlspecialchars(isset($_POST['req_message']) ? $message : $cur_post['message']) ?></textarea><br /></label>
204:                         <ul class="bblinks">227:                         <ul class="bblinks">
205:                             <li><span><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a> <?php echo ($pun_config['p_message_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></span></li>228:                             <li><span><a href="help.php#bbcode" onclick="window.open(this.href); return false;"><?php echo $lang_common['BBCode'] ?></a> <?php echo ($pun_config['p_message_bbcode'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></span></li>
206:                             <li><span><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a> <?php echo ($pun_config['p_message_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></span></li>229:                             <li><span><a href="help.php#img" onclick="window.open(this.href); return false;"><?php echo $lang_common['img tag'] ?></a> <?php echo ($pun_config['p_message_bbcode'] == '1' && $pun_config['p_message_img_tag'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></span></li>
207:                             <li><span><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a> <?php echo ($pun_config['o_smilies'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></span></li>230:                             <li><span><a href="help.php#smilies" onclick="window.open(this.href); return false;"><?php echo $lang_common['Smilies'] ?></a> <?php echo ($pun_config['o_smilies'] == '1') ? $lang_common['on'] : $lang_common['off']; ?></span></li>
208:                         </ul>231:                         </ul>
209:                     </div>232:                     </div>
211: <?php234: <?php
212: 235: 
213: $checkboxes = array();236: $checkboxes = array();
 237: if ($can_edit_subject && $is_admmod)
 238: {
 239:     if (isset($_POST['stick_topic']) || $cur_post['sticky'] == '1')
 240:         $checkboxes[] = '<label><input type="checkbox" name="stick_topic" value="1" checked="checked" tabindex="'.($cur_index++).'" />'.$lang_common['Stick topic'].'<br /></label>';
 241:     else
 242:         $checkboxes[] = '<label><input type="checkbox" name="stick_topic" value="1" tabindex="'.($cur_index++).'" />'.$lang_common['Stick topic'].'<br /></label>';
 243: }
 244: 
214: if ($pun_config['o_smilies'] == '1')245: if ($pun_config['o_smilies'] == '1')
215: {246: {
216:     if (isset($_POST['hide_smilies']) || $cur_post['hide_smilies'] == '1')247:     if (isset($_POST['hide_smilies']) || $cur_post['hide_smilies'] == '1')


a/extern.php b/extern.php
  1: <?php  1: <?php
  2:   2: 
  3: /**  3: /**
  4:  * Copyright (C) 2008-2010 FluxBB  4:  * Copyright (C) 2008-2012 FluxBB
  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB  5:  * based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
  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:  */
 26:   display posts) and type (output as HTML or RSS). The only 26:   display posts) and type (output as HTML or RSS). The only
 27:   mandatory variable is action. Possible/default values are: 27:   mandatory variable is action. Possible/default values are:
 28:  28: 
 29:     action: feed - show most recent topics/posts (HTML or RSS) 29:     action: feed - show most recent topics/posts (HTML or RSS)
 30:             online - show users online (HTML) 30:             online - show users online (HTML)
 31:             online_full - as above, but includes a full list (HTML) 31:             online_full - as above, but includes a full list (HTML)
 32:             stats - show board statistics (HTML) 32:             stats - show board statistics (HTML)
 33:  33: 
 34:     type:   rss - output as RSS 2.0 34:     type:   rss - output as RSS 2.0
 35:             atom - output as Atom 1.0 35:             atom - output as Atom 1.0
 36:             xml - output as XML 36:             xml - output as XML
 37:             html - output as HTML (<li>'s) 37:             html - output as HTML (<li>'s)
 38:  38: 
 39:     fid:    One or more forum IDs (comma-separated). If ignored, 39:     fid:    One or more forum IDs (comma-separated). If ignored,
 40:             topics from all readable forums will be pulled. 40:             topics from all readable forums will be pulled.
 41:  41: 
 42:     nfid:   One or more forum IDs (comma-separated) that are to be 42:     nfid:   One or more forum IDs (comma-separated) that are to be
 43:             excluded. E.g. the ID of a a test forum. 43:             excluded. E.g. the ID of a a test forum.
 44:  44: 
 45:     tid:    A topic ID from which to show posts. If a tid is supplied, 45:     tid:    A topic ID from which to show posts. If a tid is supplied,
 46:             fid and nfid are ignored. 46:             fid and nfid are ignored.
 47:  47: 
 48:     show:   Any integer value between 1 and 50. The default is 15. 48:     show:   Any integer value between 1 and 50. The default is 15.
 49:  49: 
 50:     order:  last_post - show topics ordered by when they were last 50:     order:  last_post - show topics ordered by when they were last
 51:                         posted in, giving information about the reply. 51:                         posted in, giving information about the reply.
 52:             posted - show topics ordered by when they were first 52:             posted - show topics ordered by when they were first
 53:                      posted, giving information about the original post. 53:                      posted, giving information about the original post.
 54:  54: 
 55: -----------------------------------------------------------------------------*/ 55: -----------------------------------------------------------------------------*/
 56:  56: 
 57: define('PUN_QUIET_VISIT', 1); 57: define('PUN_QUIET_VISIT', 1);
 58:  58: 
 59: if (!defined('PUN_ROOT')) 59: if (!defined('PUN_ROOT'))
 60:     define('PUN_ROOT', './'); 60:     define('PUN_ROOT', dirname(__FILE__).'/');
 61: require PUN_ROOT.'include/common.php'; 61: require PUN_ROOT.'include/common.php';
 62:  62: 
 63: // The length at which topic subjects will be truncated (for HTML output) 63: // The length at which topic subjects will be truncated (for HTML output)
 74:     exit($lang_common['No view']); 74:     exit($lang_common['No view']);
 75: } 75: }
 76:  76: 
 77: $action = isset($_GET['action']) ? $_GET['action'] : 'feed'; 77: $action = isset($_GET['action']) ? strtolower($_GET['action']) : 'feed';
 78:  78: 
  79: // Handle a couple old formats, from FluxBB 1.2
  80: switch ($action)
  81: {
  82:     case 'active':
  83:         $action = 'feed';
  84:         $_GET['order'] = 'last_post';
  85:         break;
  86: 
  87:     case 'new':
  88:         $action = 'feed';
  89:         $_GET['order'] = 'posted';
  90:         break;
  91: }
 79:  92: 
 80: // 93: //
 81: // Sends the proper headers for Basic HTTP Authentication 94: // Sends the proper headers for Basic HTTP Authentication
106:     header('Pragma: public');119:     header('Pragma: public');
107: 120: 
108:     echo '<?xml version="1.0" encoding="utf-8"?>'."\n";121:     echo '<?xml version="1.0" encoding="utf-8"?>'."\n";
109:     echo '<rss version="2.0">'."\n";122:     echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">'."\n";
110:     echo "\t".'<channel>'."\n";123:     echo "\t".'<channel>'."\n";
 124:     echo "\t\t".'<atom:link href="'.pun_htmlspecialchars(get_current_url()).'" rel="self" type="application/rss+xml" />'."\n";
111:     echo "\t\t".'<title><![CDATA['.escape_cdata($feed['title']).']]></title>'."\n";125:     echo "\t\t".'<title><![CDATA['.escape_cdata($feed['title']).']]></title>'."\n";
112:     echo "\t\t".'<link>'.$feed['link'].'</link>'."\n";126:     echo "\t\t".'<link>'.pun_htmlspecialchars($feed['link']).'</link>'."\n";
113:     echo "\t\t".'<description><![CDATA['.escape_cdata($feed['description']).']]></description>'."\n";127:     echo "\t\t".'<description><![CDATA['.escape_cdata($feed['description']).']]></description>'."\n";
114:     echo "\t\t".'<lastBuildDate>'.gmdate('r', count($feed['items']) ? $feed['items'][0]['pubdate'] : time()).'</lastBuildDate>'."\n";128:     echo "\t\t".'<lastBuildDate>'.gmdate('r', count($feed['items']) ? $feed['items'][0]['pubdate'] : time()).'</lastBuildDate>'."\n";
115: 129: 
122:     {136:     {
123:         echo "\t\t".'<item>'."\n";137:         echo "\t\t".'<item>'."\n";
124:         echo "\t\t\t".'<title><![CDATA['.escape_cdata($item['title']).']]></title>'."\n";138:         echo "\t\t\t".'<title><![CDATA['.escape_cdata($item['title']).']]></title>'."\n";
125:         echo "\t\t\t".'<link>'.$item['link'].'</link>'."\n";139:         echo "\t\t\t".'<link>'.pun_htmlspecialchars($item['link']).'</link>'."\n";
126:         echo "\t\t\t".'<description><![CDATA['.escape_cdata($item['description']).']]></description>'."\n";140:         echo "\t\t\t".'<description><![CDATA['.escape_cdata($item['description']).']]></description>'."\n";
127:         echo "\t\t\t".'<author><![CDATA['.(isset($item['author']['email']) ? escape_cdata($item['author']['email']) : 'dummy@example.com').' ('.escape_cdata($item['author']['name']).')]]></author>'."\n";141:         echo "\t\t\t".'<author><![CDATA['.(isset($item['author']['email']) ? escape_cdata($item['author']['email']) : 'dummy@example.com').' ('.escape_cdata($item['author']['name']).')]]></author>'."\n";
128:         echo "\t\t\t".'<pubDate>'.gmdate('r', $item['pubdate']).'</pubDate>'."\n";142:         echo "\t\t\t".'<pubDate>'.gmdate('r', $item['pubdate']).'</pubDate>'."\n";
129:         echo "\t\t\t".'<guid>'.$item['link'].'</guid>'."\n";143:         echo "\t\t\t".'<guid>'.pun_htmlspecialchars($item['link']).'</guid>'."\n";
130: 144: 
131:         echo "\t\t".'</item>'."\n";145:         echo "\t\t".'</item>'."\n";
132:     }146:     }
154: 168: 
155:     echo "\t".'<title type="html"><![CDATA['.escape_cdata($feed['title']).']]></title>'."\n";169:     echo "\t".'<title type="html"><![CDATA['.escape_cdata($feed['title']).']]></title>'."\n";
156:     echo "\t".'<link rel="self" href="'.pun_htmlspecialchars(get_current_url()).'"/>'."\n";170:     echo "\t".'<link rel="self" href="'.pun_htmlspecialchars(get_current_url()).'"/>'."\n";
157:     echo "\t".'<link href="'.$feed['link'].'"/>'."\n";171:     echo "\t".'<link href="'.pun_htmlspecialchars($feed['link']).'"/>'."\n";
158:     echo "\t".'<updated>'.gmdate('Y-m-d\TH:i:s\Z', count($feed['items']) ? $feed['items'][0]['pubdate'] : time()).'</updated>'."\n";172:     echo "\t".'<updated>'.gmdate('Y-m-d\TH:i:s\Z', count($feed['items']) ? $feed['items'][0]['pubdate'] : time()).'</updated>'."\n";
159: 173: 
160:     if ($pun_config['o_show_version'] == '1')174:     if ($pun_config['o_show_version'] == '1')
162:     else176:     else
163:         echo "\t".'<generator>FluxBB</generator>'."\n";177:         echo "\t".'<generator>FluxBB</generator>'."\n";
164: 178: 
165:     echo "\t".'<id>'.$feed['link'].'</id>'."\n";179:     echo "\t".'<id>'.pun_htmlspecialchars($feed['link']).'</id>'."\n";
166: 180: 
167:     $content_tag = ($feed['type'] == 'posts') ? 'content' : 'summary';181:     $content_tag = ($feed['type'] == 'posts') ? 'content' : 'summary';
168: 182: 
170:     {184:     {
171:         echo "\t".'<entry>'."\n";185:         echo "\t".'<entry>'."\n";
172:         echo "\t\t".'<title type="html"><![CDATA['.escape_cdata($item['title']).']]></title>'."\n";186:         echo "\t\t".'<title type="html"><![CDATA['.escape_cdata($item['title']).']]></title>'."\n";
173:         echo "\t\t".'<link rel="alternate" href="'.$item['link'].'"/>'."\n";187:         echo "\t\t".'<link rel="alternate" href="'.pun_htmlspecialchars($item['link']).'"/>'."\n";
174:         echo "\t\t".'<'.$content_tag.' type="html"><![CDATA['.escape_cdata($item['description']).']]></'.$content_tag.'>'."\n";188:         echo "\t\t".'<'.$content_tag.' type="html"><![CDATA['.escape_cdata($item['description']).']]></'.$content_tag.'>'."\n";
175:         echo "\t\t".'<author>'."\n";189:         echo "\t\t".'<author>'."\n";
176:         echo "\t\t\t".'<name><![CDATA['.escape_cdata($item['author']['name']).']]></name>'."\n";190:         echo "\t\t\t".'<name><![CDATA['.escape_cdata($item['author']['name']).']]></name>'."\n";
179:             echo "\t\t\t".'<email><![CDATA['.escape_cdata($item['author']['email']).']]></email>'."\n";193:             echo "\t\t\t".'<email><![CDATA['.escape_cdata($item['author']['email']).']]></email>'."\n";
180: 194: 
181:         if (isset($item['author']['uri']))195:         if (isset($item['author']['uri']))
182:             echo "\t\t\t".'<uri>'.$item['author']['uri'].'</uri>'."\n";196:             echo "\t\t\t".'<uri>'.pun_htmlspecialchars($item['author']['uri']).'</uri>'."\n";
183: 197: 
184:         echo "\t\t".'</author>'."\n";198:         echo "\t\t".'</author>'."\n";
185:         echo "\t\t".'<updated>'.gmdate('Y-m-d\TH:i:s\Z', $item['pubdate']).'</updated>'."\n";199:         echo "\t\t".'<updated>'.gmdate('Y-m-d\TH:i:s\Z', $item['pubdate']).'</updated>'."\n";
186: 200: 
187:         echo "\t\t".'<id>'.$item['link'].'</id>'."\n";201:         echo "\t\t".'<id>'.pun_htmlspecialchars($item['link']).'</id>'."\n";
188:         echo "\t".'</entry>'."\n";202:         echo "\t".'</entry>'."\n";
189:     }203:     }
190: 204: 
207: 221: 
208:     echo '<?xml version="1.0" encoding="utf-8"?>'."\n";222:     echo '<?xml version="1.0" encoding="utf-8"?>'."\n";
209:     echo '<source>'."\n";223:     echo '<source>'."\n";
210:     echo "\t".'<url>'.$feed['link'].'</url>'."\n";224:     echo "\t".'<url>'.pun_htmlspecialchars($feed['link']).'</url>'."\n";
211: 225: 
212:     $forum_tag = ($feed['type'] == 'posts') ? 'post' : 'topic';226:     $forum_tag = ($feed['type'] == 'posts') ? 'post' : 'topic';
213: 227: 
216:         echo "\t".'<'.$forum_tag.' id="'.$item['id'].'">'."\n";230:         echo "\t".'<'.$forum_tag.' id="'.$item['id'].'">'."\n";
217: 231: 
218:         echo "\t\t".'<title><![CDATA['.escape_cdata($item['title']).']]></title>'."\n";232:         echo "\t\t".'<title><![CDATA['.escape_cdata($item['title']).']]></title>'."\n";
219:         echo "\t\t".'<link>'.$item['link'].'</link>'."\n";233:         echo "\t\t".'<link>'.pun_htmlspecialchars($item['link']).'</link>'."\n";
220:         echo "\t\t".'<content><![CDATA['.escape_cdata($item['description']).']]></content>'."\n";234:         echo "\t\t".'<content><![CDATA['.escape_cdata($item['description']).']]></content>'."\n";
221:         echo "\t\t".'<author>'."\n";235:         echo "\t\t".'<author>'."\n";
222:         echo "\t\t\t".'<name><![CDATA['.escape_cdata($item['author']['name']).']]></name>'."\n";236:         echo "\t\t\t".'<name><![CDATA['.escape_cdata($item['author']['name']).']]></name>'."\n";
225:             echo "\t\t\t".'<email><![CDATA['.escape_cdata($item['author']['email']).']]></email>'."\n";239:             echo "\t\t\t".'<email><![CDATA['.escape_cdata($item['author']['email']).']]></email>'."\n";
226: 240: 
227:         if (isset($item['author']['uri']))241:         if (isset($item['author']['uri']))
228:             echo "\t\t\t".'<uri>'.$item['author']['uri'].'</uri>'."\n";242:             echo "\t\t\t".'<uri>'.pun_htmlspecialchars($item['author']['uri']).'</uri>'."\n";
229: 243: 
230:         echo "\t\t".'</author>'."\n";244:         echo "\t\t".'</author>'."\n";
231:         echo "\t\t".'<posted>'.gmdate('r', $item['pubdate']).'</posted>'."\n";245:         echo "\t\t".'<posted>'.gmdate('r', $item['pubdate']).'</posted>'."\n";
256:         else270:         else
257:             $subject_truncated = pun_htmlspecialchars($item['title']);271:             $subject_truncated = pun_htmlspecialchars($item['title']);
258: 272: 
259:         echo '<li><a href="'.$item['link'].'" title="'.pun_htmlspecialchars($item['title']).'">'.$subject_truncated.'</a></li>'."\n";273:         echo '<li><a href="'.pun_htmlspecialchars($item['link']).'" title="'.pun_htmlspecialchars($item['title']).'">'.$subject_truncated.'</a></li>'."\n";
260:     }274:     }
261: }275: }
262: 276: 
266:     require PUN_ROOT.'include/parser.php';280:     require PUN_ROOT.'include/parser.php';
267: 281: 
268:     // Determine what type of feed to output282:     // Determine what type of feed to output
269:     $type = isset($_GET['type']) && in_array($_GET['type'], array('html', 'rss', 'atom', 'xml')) ? $_GET['type'] : 'html';283:     $type = isset($_GET['type']) ? strtolower($_GET['type']) : 'html';
 284:     if (!in_array($type, array('html', 'rss', 'atom', 'xml')))
 285:         $type = 'html';
270: 286: 
271:     $show = isset($_GET['show']) ? intval($_GET['show']) : 15;287:     $show = isset($_GET['show']) ? intval($_GET['show']) : 15;
272:     if ($show < 1 || $show > 50)288:     if ($show < 1 || $show > 50)
293:         // Setup the feed309:         // Setup the feed
294:         $feed = array(310:         $feed = array(
295:             'title'         =>    $pun_config['o_board_title'].$lang_common['Title separator'].$cur_topic['subject'],311:             'title'         =>    $pun_config['o_board_title'].$lang_common['Title separator'].$cur_topic['subject'],
296:             'link'            =>    $pun_config['o_base_url'].'/viewtopic.php?id='.$tid,312:             'link'            =>    get_base_url(true).'/viewtopic.php?id='.$tid,
297:             'description'        =>    sprintf($lang_common['RSS description topic'], $cur_topic['subject']),313:             'description'        =>    sprintf($lang_common['RSS description topic'], $cur_topic['subject']),
298:             'items'            =>    array(),314:             'items'            =>    array(),
299:             'type'            =>    'posts'315:             'type'            =>    'posts'
308:             $item = array(324:             $item = array(
309:                 'id'            =>    $cur_post['id'],325:                 'id'            =>    $cur_post['id'],
310:                 'title'            =>    $cur_topic['first_post_id'] == $cur_post['id'] ? $cur_topic['subject'] : $lang_common['RSS reply'].$cur_topic['subject'],326:                 'title'            =>    $cur_topic['first_post_id'] == $cur_post['id'] ? $cur_topic['subject'] : $lang_common['RSS reply'].$cur_topic['subject'],
311:                 'link'            =>    $pun_config['o_base_url'].'/viewtopic.php?pid='.$cur_post['id'].'#p'.$cur_post['id'],327:                 'link'            =>    get_base_url(true).'/viewtopic.php?pid='.$cur_post['id'].'#p'.$cur_post['id'],
312:                 'description'        =>    $cur_post['message'],328:                 'description'        =>    $cur_post['message'],
313:                 'author'        =>    array(329:                 'author'        =>    array(
314:                     'name'    => $cur_post['poster'],330:                     'name'    => $cur_post['poster'],
321:                 if ($cur_post['email_setting'] == '0' && !$pun_user['is_guest'])337:                 if ($cur_post['email_setting'] == '0' && !$pun_user['is_guest'])
322:                     $item['author']['email'] = $cur_post['email'];338:                     $item['author']['email'] = $cur_post['email'];
323: 339: 
324:                 $item['author']['uri'] = $pun_config['o_base_url'].'/profile.php?id='.$cur_post['poster_id'];340:                 $item['author']['uri'] = get_base_url(true).'/profile.php?id='.$cur_post['poster_id'];
325:             }341:             }
326:             else if ($cur_post['poster_email'] != '' && !$pun_user['is_guest'])342:             else if ($cur_post['poster_email'] != '' && !$pun_user['is_guest'])
327:                 $item['author']['email'] = $cur_post['poster_email'];343:                 $item['author']['email'] = $cur_post['poster_email'];
334:     }350:     }
335:     else351:     else
336:     {352:     {
337:         $order_posted = isset($_GET['order']) && $_GET['order'] == 'posted';353:         $order_posted = isset($_GET['order']) && strtolower($_GET['order']) == 'posted';
338:         $forum_name = '';354:         $forum_name = '';
339:         $forum_sql = '';355:         $forum_sql = '';
340: 356: 
366:                 $forum_sql .= ' AND t.forum_id NOT IN('.implode(',', $nfids).')';382:                 $forum_sql .= ' AND t.forum_id NOT IN('.implode(',', $nfids).')';
367:         }383:         }
368: 384: 
369:         // Setup the feed385:         // Only attempt to cache if caching is enabled and we have all or a single forum
370:         $feed = array(386:         if ($pun_config['o_feed_ttl'] > 0 && ($forum_sql == '' || ($forum_name != '' && !isset($_GET['nfid']))))
371:             'title'  &n