fluxbb-1.4.5 to fluxbb-1.4.6 Legend
Lines removed 
Lines changed
 Lines added

a/.gitignore b/.gitignore
   1: /*.sublime-project
   2: /.project
   3: /.settings/
   4: /nbproject/
   5: *.sublime-project
  1: /cache/cache_*.php  6: /cache/cache_*.php
   7: /cache/*.cache
  2: /cache/db_update.lock  8: /cache/db_update.lock
  3: /modules/  9: /modules/
  4: /include/user/* 10: /include/user/*.php
  5: /img/avatars/*.png 11: /img/avatars/*.png
  6: /img/avatars/*.jpg 12: /img/avatars/*.jpg
  7: /img/avatars/*.gif 13: /img/avatars/*.gif


a/admin_bans.php b/admin_bans.php
192:         message($lang_admin_bans['Must enter message']);192:         message($lang_admin_bans['Must enter message']);
193:     else if (strtolower($ban_user) == 'guest')193:     else if (strtolower($ban_user) == 'guest')
194:         message($lang_admin_bans['Cannot ban guest message']);194:         message($lang_admin_bans['Cannot ban guest message']);
195:     195: 
196:     // Make sure we're not banning an admin or moderator196:     // Make sure we're not banning an admin or moderator
197:     if (!empty($ban_user))197:     if (!empty($ban_user))
198:     {198:     {
200:         if ($db->num_rows($result))200:         if ($db->num_rows($result))
201:         {201:         {
202:             $group_id = $db->result($result);202:             $group_id = $db->result($result);
203:             203: 
204:             if ($group_id == PUN_ADMIN)204:             if ($group_id == PUN_ADMIN)
205:                 message(sprintf($lang_admin_bans['User is admin message'], pun_htmlspecialchars($ban_user)));205:                 message(sprintf($lang_admin_bans['User is admin message'], pun_htmlspecialchars($ban_user)));
206:     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());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);208:             $is_moderator_group = $db->result($result);
209:     209: 
210:             if ($is_moderator_group)210:             if ($is_moderator_group)
211:                 message(sprintf($lang_admin_bans['User is mod message'], pun_htmlspecialchars($ban_user)));211:                 message(sprintf($lang_admin_bans['User is mod message'], pun_htmlspecialchars($ban_user)));
212:         }212:         }
215:     // Validate IP/IP range (it's overkill, I know)215:     // Validate IP/IP range (it's overkill, I know)
216:     if ($ban_ip != '')216:     if ($ban_ip != '')
217:     {217:     {
218:         $ban_ip = preg_replace('/\s{2,}/S', ' ', $ban_ip);218:         $ban_ip = preg_replace('%\s{2,}%S', ' ', $ban_ip);
219:         $addresses = explode(' ', $ban_ip);219:         $addresses = explode(' ', $ban_ip);
220:         $addresses = array_map('pun_trim', $addresses);220:         $addresses = array_map('pun_trim', $addresses);
221: 221: 
244:                 {244:                 {
245:                     $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];
246: 246: 
247:                     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)
248:                         message($lang_admin_bans['Invalid IP message']);248:                         message($lang_admin_bans['Invalid IP message']);
249:                 }249:                 }
250: 250: 
259:     require PUN_ROOT.'include/email.php';259:     require PUN_ROOT.'include/email.php';
260:     if ($ban_email != '' && !is_valid_email($ban_email))260:     if ($ban_email != '' && !is_valid_email($ban_email))
261:     {261:     {
262:         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))
263:             message($lang_admin_bans['Invalid e-mail message']);263:             message($lang_admin_bans['Invalid e-mail message']);
264:     }264:     }
265: 265: 


a/admin_categories.php b/admin_categories.php
138:         if ($cur_cat['name'] == '')138:         if ($cur_cat['name'] == '')
139:             message($lang_admin_categories['Must enter name message']);139:             message($lang_admin_categories['Must enter name message']);
140: 140: 
141:         if ($cur_cat['order'] == '' || preg_match('/[^0-9]/', $cur_cat['order']))141:         if ($cur_cat['order'] == '' || preg_match('%[^0-9]%', $cur_cat['order']))
142:             message($lang_admin_categories['Must enter integer message']);142:             message($lang_admin_categories['Must enter integer message']);
143: 143: 
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:         $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());


a/admin_forums.php b/admin_forums.php
128:     foreach ($_POST['position'] as $forum_id => $disp_position)128:     foreach ($_POST['position'] as $forum_id => $disp_position)
129:     {129:     {
130:         $disp_position = trim($disp_position);130:         $disp_position = trim($disp_position);
131:         if ($disp_position == '' || preg_match('/[^0-9]/', $disp_position))131:         if ($disp_position == '' || preg_match('%[^0-9]%', $disp_position))
132:             message($lang_admin_forums['Must be integer message']);132:             message($lang_admin_forums['Must be integer message']);
133: 133: 
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());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());
308: 308: 
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());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());
310: 310: 
 311:     $cur_index = 7;
 312: 
311:     while ($cur_perm = $db->fetch_assoc($result))313:     while ($cur_perm = $db->fetch_assoc($result))
312:     {314:     {
313:         $read_forum = ($cur_perm['read_forum'] != '0') ? true : false;315:         $read_forum = ($cur_perm['read_forum'] != '0') ? true : false;
324:                                     <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>
325:                                     <td<?php if (!$read_forum_def) echo ' class="nodefault"'; ?>>327:                                     <td<?php if (!$read_forum_def) echo ' class="nodefault"'; ?>>
326:                                         <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'; ?>" />
327:                                         <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++ ?>" />
328:                                     </td>330:                                     </td>
329:                                     <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"'; ?>>
330:                                         <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'; ?>" />
331:                                         <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++ ?>" />
332:                                     </td>334:                                     </td>
333:                                     <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"'; ?>>
334:                                         <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'; ?>" />
335:                                         <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++ ?>" />
336:                                     </td>338:                                     </td>
337:                                 </tr>339:                                 </tr>
338: <?php340: <?php
342: ?>344: ?>
343:                             </tbody>345:                             </tbody>
344:                             </table>346:                             </table>
345:                             <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>
346:                         </div>348:                         </div>
347:                     </fieldset>349:                     </fieldset>
348:                 </div>350:                 </div>
349:                 <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>
350:             </form>352:             </form>
351:         </div>353:         </div>
352:     </div>354:     </div>
415:                 <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>
416: <?php418: <?php
417: 419: 
418: $tabindex_count = 4;420: $cur_index = 4;
419: 421: 
420: $cur_category = 0;422: $cur_category = 0;
421: while ($cur_forum = $db->fetch_assoc($result))423: while ($cur_forum = $db->fetch_assoc($result))
446: 448: 
447: ?>449: ?>
448:                                 <tr>450:                                 <tr>
449:                                     <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>
450:                                     <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>
451:                                     <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>
452:                                 </tr>454:                                 </tr>
453: <?php455: <?php
454: 456: 
455:     $tabindex_count += 2; 
456: }457: }
457: 458: 
458: ?>459: ?>
461:                         </div>462:                         </div>
462:                     </fieldset>463:                     </fieldset>
463:                 </div>464:                 </div>
464:                 <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>
465:             </form>466:             </form>
466:         </div>467:         </div>
467: <?php468: <?php


a/admin_groups.php b/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>
263:     $post_flood = isset($_POST['post_flood']) ? intval($_POST['post_flood']) : '0';270:     $post_flood = isset($_POST['post_flood']) ? intval($_POST['post_flood']) : '0';
264:     $search_flood = isset($_POST['search_flood']) ? intval($_POST['search_flood']) : '0';271:     $search_flood = isset($_POST['search_flood']) ? intval($_POST['search_flood']) : '0';
265:     $email_flood = isset($_POST['email_flood']) ? intval($_POST['email_flood']) : '0';272:     $email_flood = isset($_POST['email_flood']) ? intval($_POST['email_flood']) : '0';
 273:     $report_flood = isset($_POST['report_flood']) ? 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
393:                         </div>401:                         </div>
394:                     </fieldset>402:                     </fieldset>
395:                 </div>403:                 </div>
396:                 <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>
397:             </form>405:             </form>
398:         </div>406:         </div>
399:     </div>407:     </div>
540:                             <table cellspacing="0">548:                             <table cellspacing="0">
541: <?php549: <?php
542: 550: 
 551: $cur_index = 5;
 552: 
543: $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());
544: 554: 
545: while ($cur_group = $db->fetch_assoc($result))555: while ($cur_group = $db->fetch_assoc($result))
546:     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";
547: 557: 
548: ?>558: ?>
549:                             </table>559:                             </table>


a/admin_index.php b/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'];
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>') ?>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; ?>                    </dd><?php endif; ?>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
 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


a/admin_maintenance.php b/admin_maintenance.php
173:     }173:     }
174: 174: 
175:     $prune_days = trim($_POST['req_prune_days']);175:     $prune_days = trim($_POST['req_prune_days']);
176:     if ($prune_days == '' || preg_match('/[^0-9]/', $prune_days))176:     if ($prune_days == '' || preg_match('%[^0-9]%', $prune_days))
177:         message($lang_admin_maintenance['Days must be integer message']);177:         message($lang_admin_maintenance['Days must be integer message']);
178: 178: 
179:     $prune_date = time() - ($prune_days * 86400);179:     $prune_date = time() - ($prune_days * 86400);


a/admin_options.php b/admin_options.php
118:         message($lang_admin_options['Invalid webmaster e-mail message']);118:         message($lang_admin_options['Invalid webmaster e-mail message']);
119: 119: 
120:     if ($form['mailing_list'] != '')120:     if ($form['mailing_list'] != '')
121:         $form['mailing_list'] = strtolower(preg_replace('/\s/S', '', $form['mailing_list']));121:         $form['mailing_list'] = strtolower(preg_replace('%\s%S', '', $form['mailing_list']));
122: 122: 
123:     // Make sure avatars_dir doesn't end with a slash123:     // Make sure avatars_dir doesn't end with a slash
124:     if (substr($form['avatars_dir'], -1) == '/')124:     if (substr($form['avatars_dir'], -1) == '/')


a/admin_ranks.php b/admin_ranks.php
 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
 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


a/admin_users.php b/admin_users.php
125: {125: {
126:     $ip = trim($_GET['show_users']);126:     $ip = 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
260:         message($lang_common['No permission']);260:         message($lang_common['No permission']);
261: 261: 
262:     confirm_referrer('admin_users.php');262:     confirm_referrer('admin_users.php');
263:     263: 
264:     if (isset($_POST['users']))264:     if (isset($_POST['users']))
265:     {265:     {
266:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);266:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);
267:         $user_ids = array_map('intval', $user_ids);267:         $user_ids = array_map('intval', $user_ids);
268:         268: 
269:         // Delete invalid IDs269:         // Delete invalid IDs
270:         $user_ids = array_diff($user_ids, array(0, 1));270:         $user_ids = array_diff($user_ids, array(0, 1));
271:     }271:     }
272:     else272:     else
273:         $user_ids = array();273:         $user_ids = array();
274:     274: 
275:     if (empty($user_ids))275:     if (empty($user_ids))
276:         message($lang_admin_users['No users selected']);276:         message($lang_admin_users['No users selected']);
277:     277: 
278:     // Are we trying to batch move any admins?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());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)280:     if ($db->result($result) > 0)
281:         message($lang_admin_users['No move admins message']);281:         message($lang_admin_users['No move admins message']);
282:     282: 
283:     // Fetch all user groups283:     // Fetch all user groups
284:     $all_groups = array();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());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());
289:     if (isset($_POST['move_users_comply']))289:     if (isset($_POST['move_users_comply']))
290:     {290:     {
291:         $new_group = isset($_POST['new_group']) && isset($all_groups[$_POST['new_group']]) ? $_POST['new_group'] : message($lang_admin_users['Invalid group message']);291:         $new_group = isset($_POST['new_group']) && isset($all_groups[$_POST['new_group']]) ? $_POST['new_group'] : message($lang_admin_users['Invalid group message']);
292:         292: 
293:         // Is the new group a moderator group?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());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);295:         $new_group_mod = $db->result($result);
296:         296: 
297:         // Fetch user groups297:         // Fetch user groups
298:         $user_groups = array();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());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());
301:         {301:         {
302:             if (!isset($user_groups[$cur_user['group_id']]))302:             if (!isset($user_groups[$cur_user['group_id']]))
303:                 $user_groups[$cur_user['group_id']] = array();303:                 $user_groups[$cur_user['group_id']] = array();
304:             304: 
305:             $user_groups[$cur_user['group_id']][] = $cur_user['id'];305:             $user_groups[$cur_user['group_id']][] = $cur_user['id'];
306:         }306:         }
307:         307: 
308:         // Are any users moderators?308:         // Are any users moderators?
309:         $group_ids = array_keys($user_groups);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());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());
313:             if ($cur_group['g_moderator'] == '0')313:             if ($cur_group['g_moderator'] == '0')
314:                 unset($user_groups[$cur_group['g_id']]);314:                 unset($user_groups[$cur_group['g_id']]);
315:         }315:         }
316:         316: 
317:         if (!empty($user_groups) && $new_group != PUN_ADMIN && $new_group_mod != '1')317:         if (!empty($user_groups) && $new_group != PUN_ADMIN && $new_group_mod != '1')
318:         {318:         {
319:             // Fetch forum list and clean up their moderator list319:             // Fetch forum list and clean up their moderator list
321:             while ($cur_forum = $db->fetch_assoc($result))321:             while ($cur_forum = $db->fetch_assoc($result))
322:             {322:             {
323:                 $cur_moderators = ($cur_forum['moderators'] != '') ? unserialize($cur_forum['moderators']) : array();323:                 $cur_moderators = ($cur_forum['moderators'] != '') ? unserialize($cur_forum['moderators']) : array();
324:     324: 
325:                 foreach ($user_groups as $group_users)325:                 foreach ($user_groups as $group_users)
326:                     $cur_moderators = array_diff($cur_moderators, $group_users);326:                     $cur_moderators = array_diff($cur_moderators, $group_users);
327:                 327: 
328:                 $cur_moderators = (!empty($cur_moderators)) ? '\''.$db->escape(serialize($cur_moderators)).'\'' : 'NULL';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());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:             }330:             }
331:         }331:         }
332:         332: 
333:         // Change user group333:         // 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());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:         335: 
336:         redirect('admin_users.php', $lang_admin_users['Users move redirect']);336:         redirect('admin_users.php', $lang_admin_users['Users move redirect']);
337:     }337:     }
338: 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']);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');340:     define('PUN_ACTIVE_PAGE', 'admin');
341:     require PUN_ROOT.'header.php';341:     require PUN_ROOT.'header.php';
342:     342: 
343:     generate_admin_menu('users');343:     generate_admin_menu('users');
344: 344: 
345: ?>345: ?>
386:         message($lang_common['No permission']);386:         message($lang_common['No permission']);
387: 387: 
388:     confirm_referrer('admin_users.php');388:     confirm_referrer('admin_users.php');
389:     389: 
390:     if (isset($_POST['users']))390:     if (isset($_POST['users']))
391:     {391:     {
392:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);392:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);
393:         $user_ids = array_map('intval', $user_ids);393:         $user_ids = array_map('intval', $user_ids);
394:         394: 
395:         // Delete invalid IDs395:         // Delete invalid IDs
396:         $user_ids = array_diff($user_ids, array(0, 1));396:         $user_ids = array_diff($user_ids, array(0, 1));
397:     }397:     }
398:     else398:     else
399:         $user_ids = array();399:         $user_ids = array();
400:     400: 
401:     if (empty($user_ids))401:     if (empty($user_ids))
402:         message($lang_admin_users['No users selected']);402:         message($lang_admin_users['No users selected']);
403:     403: 
404:     // Are we trying to delete any admins?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());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)406:     if ($db->result($result) > 0)
415:         {415:         {
416:             if (!isset($user_groups[$cur_user['group_id']]))416:             if (!isset($user_groups[$cur_user['group_id']]))
417:                 $user_groups[$cur_user['group_id']] = array();417:                 $user_groups[$cur_user['group_id']] = array();
418:             418: 
419:             $user_groups[$cur_user['group_id']][] = $cur_user['id'];419:             $user_groups[$cur_user['group_id']][] = $cur_user['id'];
420:         }420:         }
421:         421: 
422:         // Are any users moderators?422:         // Are any users moderators?
423:         $group_ids = array_keys($user_groups);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());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());
427:             if ($cur_group['g_moderator'] == '0')427:             if ($cur_group['g_moderator'] == '0')
428:                 unset($user_groups[$cur_group['g_id']]);428:                 unset($user_groups[$cur_group['g_id']]);
429:         }429:         }
430:         430: 
431:         // Fetch forum list and clean up their moderator list431:         // 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());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))433:         while ($cur_forum = $db->fetch_assoc($result))
436: 436: 
437:             foreach ($user_groups as $group_users)437:             foreach ($user_groups as $group_users)
438:                 $cur_moderators = array_diff($cur_moderators, $group_users);438:                 $cur_moderators = array_diff($cur_moderators, $group_users);
439:             439: 
440:             $cur_moderators = (!empty($cur_moderators)) ? '\''.$db->escape(serialize($cur_moderators)).'\'' : 'NULL';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());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:         }442:         }
443:         443: 
444:         // Delete any subscriptions444:         // 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());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());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:         447: 
448:         // Remove them from the online list (if they happen to be logged in)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());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:         450: 
451:         // Should we delete all posts made by these users?451:         // Should we delete all posts made by these users?
452:         if (isset($_POST['delete_posts']))452:         if (isset($_POST['delete_posts']))
453:         {453:         {
482:         // Delete user avatars482:         // Delete user avatars
483:         foreach ($user_ids as $user_id)483:         foreach ($user_ids as $user_id)
484:             delete_avatar($user_id);484:             delete_avatar($user_id);
485:         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: 
486:         redirect('admin_users.php', $lang_admin_users['Users delete redirect']);492:         redirect('admin_users.php', $lang_admin_users['Users delete redirect']);
487:     }493:     }
488: 494: 
489:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Users'], $lang_admin_users['Delete users']);495:     $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_admin_common['Admin'], $lang_admin_common['Users'], $lang_admin_users['Delete users']);
490:     define('PUN_ACTIVE_PAGE', 'admin');496:     define('PUN_ACTIVE_PAGE', 'admin');
491:     require PUN_ROOT.'header.php';497:     require PUN_ROOT.'header.php';
492:     498: 
493:     generate_admin_menu('users');499:     generate_admin_menu('users');
494: 500: 
495: ?>501: ?>
529:         message($lang_common['No permission']);535:         message($lang_common['No permission']);
530: 536: 
531:     confirm_referrer('admin_users.php');537:     confirm_referrer('admin_users.php');
532:     538: 
533:     if (isset($_POST['users']))539:     if (isset($_POST['users']))
534:     {540:     {
535:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);541:         $user_ids = is_array($_POST['users']) ? array_keys($_POST['users']) : explode(',', $_POST['users']);
536:         $user_ids = array_map('intval', $user_ids);542:         $user_ids = array_map('intval', $user_ids);
537:         543: 
538:         // Delete invalid IDs544:         // Delete invalid IDs
539:         $user_ids = array_diff($user_ids, array(0, 1));545:         $user_ids = array_diff($user_ids, array(0, 1));
540:     }546:     }
541:     else547:     else
542:         $user_ids = array();548:         $user_ids = array();
543:     549: 
544:     if (empty($user_ids))550:     if (empty($user_ids))
545:         message($lang_admin_users['No users selected']);551:         message($lang_admin_users['No users selected']);
546:     552: 
547:     // Are we trying to ban any admins?553:     // Are we trying to ban any admins?
548:     $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());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());
549:     if ($db->result($result) > 0)555:     if ($db->result($result) > 0)
550:         message($lang_admin_users['No ban admins message']);556:         message($lang_admin_users['No ban admins message']);
551:     557: 
552:     // Also, we cannot ban moderators558:     // Also, we cannot ban moderators
553:     $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());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());
554:     if ($db->result($result) > 0)560:     if ($db->result($result) > 0)
555:         message($lang_admin_users['No ban mods message']);561:         message($lang_admin_users['No ban mods message']);
556:     562: 
557:     if (isset($_POST['ban_users_comply']))563:     if (isset($_POST['ban_users_comply']))
558:     {564:     {
559:         $ban_message = pun_trim($_POST['ban_message']);565:         $ban_message = pun_trim($_POST['ban_message']);
560:         $ban_expire = pun_trim($_POST['ban_expire']);566:         $ban_expire = pun_trim($_POST['ban_expire']);
561:         $ban_the_ip = isset($_POST['ban_the_ip']) ? intval($_POST['ban_the_ip']) : 0;567:         $ban_the_ip = isset($_POST['ban_the_ip']) ? intval($_POST['ban_the_ip']) : 0;
562:         568: 
563:         if ($ban_expire != '' && $ban_expire != 'Never')569:         if ($ban_expire != '' && $ban_expire != 'Never')
564:         {570:         {
565:             $ban_expire = strtotime($ban_expire.' GMT');571:             $ban_expire = strtotime($ban_expire.' GMT');
566:     572: 
567:             if ($ban_expire == -1 || !$ban_expire)573:             if ($ban_expire == -1 || !$ban_expire)
568:                 message($lang_admin_users['Invalid date message'].' '.$lang_admin_users['Invalid date reasons']);574:                 message($lang_admin_users['Invalid date message'].' '.$lang_admin_users['Invalid date reasons']);
569:     575: 
570:             $diff = ($pun_user['timezone'] + $pun_user['dst']) * 3600;576:             $diff = ($pun_user['timezone'] + $pun_user['dst']) * 3600;
571:             $ban_expire -= $diff;577:             $ban_expire -= $diff;
572:     578: 
573:             if ($ban_expire <= time())579:             if ($ban_expire <= time())
574:                 message($lang_admin_users['Invalid date message'].' '.$lang_admin_users['Invalid date reasons']);580:                 message($lang_admin_users['Invalid date message'].' '.$lang_admin_users['Invalid date reasons']);
575:         }581:         }
576:         else582:         else
577:             $ban_expire = 'NULL';583:             $ban_expire = 'NULL';
578:     584: 
579:         $ban_message = ($ban_message != '') ? '\''.$db->escape($ban_message).'\'' : 'NULL';585:         $ban_message = ($ban_message != '') ? '\''.$db->escape($ban_message).'\'' : 'NULL';
580:         586: 
581:         // Fetch user information587:         // Fetch user information
582:         $user_info = array();588:         $user_info = array();
583:         $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());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());
584:         while ($cur_user = $db->fetch_assoc($result))590:         while ($cur_user = $db->fetch_assoc($result))
585:             $user_info[$cur_user['id']] = array('username' => $cur_user['username'], 'email' => $cur_user['email'], 'ip' => $cur_user['registration_ip']);591:             $user_info[$cur_user['id']] = array('username' => $cur_user['username'], 'email' => $cur_user['email'], 'ip' => $cur_user['registration_ip']);
586:         592: 
587:         // Overwrite the registration IP with one from the last post (if it exists)593:         // Overwrite the registration IP with one from the last post (if it exists)
588:         if ($ban_the_ip != 0)594:         if ($ban_the_ip != 0)
589:         {595:         {
591:             while ($cur_address = $db->fetch_assoc($result))597:             while ($cur_address = $db->fetch_assoc($result))
592:                 $user_info[$cur_address['poster_id']]['ip'] = $cur_address['poster_ip'];598:                 $user_info[$cur_address['poster_id']]['ip'] = $cur_address['poster_ip'];
593:         }599:         }
594:         600: 
595:         // And insert the bans!601:         // And insert the bans!
596:         foreach ($user_ids as $user_id)602:         foreach ($user_ids as $user_id)
597:         {603:         {
598:             $ban_username = '\''.$db->escape($user_info[$user_id]['username']).'\'';604:             $ban_username = '\''.$db->escape($user_info[$user_id]['username']).'\'';
599:             $ban_email = '\''.$db->escape($user_info[$user_id]['email']).'\'';605:             $ban_email = '\''.$db->escape($user_info[$user_id]['email']).'\'';
600:             $ban_ip = ($ban_the_ip != 0) ? '\''.$db->escape($user_info[$user_id]['ip']).'\'' : 'NULL';606:             $ban_ip = ($ban_the_ip != 0) ? '\''.$db->escape($user_info[$user_id]['ip']).'\'' : 'NULL';
601:             607: 
602:             $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());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());
603:         }609:         }
604:         610: 
605:         // Regenerate the bans cache611:         // Regenerate the bans cache
606:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))612:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
607:             require PUN_ROOT.'include/cache.php';613:             require PUN_ROOT.'include/cache.php';
608:     614: 
609:         generate_bans_cache();615:         generate_bans_cache();
610:     616: 
611:         redirect('admin_users.php', $lang_admin_users['Users banned redirect']);617:         redirect('admin_users.php', $lang_admin_users['Users banned redirect']);
612:     }618:     }
613: 619: 
678:     $posts_less = isset($_GET['posts_less']) ? trim($_GET['posts_less']) : '';684:     $posts_less = isset($_GET['posts_less']) ? trim($_GET['posts_less']) : '';
679:     $last_post_after = isset($_GET['last_post_after']) ? trim($_GET['last_post_after']) : '';685:     $last_post_after = isset($_GET['last_post_after']) ? trim($_GET['last_post_after']) : '';
680:     $last_post_before = isset($_GET['last_post_before']) ? trim($_GET['last_post_before']) : '';686:     $last_post_before = isset($_GET['last_post_before']) ? trim($_GET['last_post_before']) : '';
 687:     $last_visit_after = isset($_GET['last_visit_after']) ? trim($_GET['last_visit_after']) : '';
 688:     $last_visit_before = isset($_GET['last_visit_before']) ? trim($_GET['last_visit_before']) : '';
681:     $registered_after = isset($_GET['registered_after']) ? trim($_GET['registered_after']) : '';689:     $registered_after = isset($_GET['registered_after']) ? trim($_GET['registered_after']) : '';
682:     $registered_before = isset($_GET['registered_before']) ? trim($_GET['registered_before']) : '';690:     $registered_before = isset($_GET['registered_before']) ? trim($_GET['registered_before']) : '';
683:     $order_by = isset($_GET['order_by']) && in_array($_GET['order_by'], array('username', 'email', 'num_posts', 'last_post', 'registered')) ? $_GET['order_by'] : 'username';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';
684:     $direction = isset($_GET['direction']) && $_GET['direction'] == 'DESC' ? 'DESC' : 'ASC';692:     $direction = isset($_GET['direction']) && $_GET['direction'] == 'DESC' ? 'DESC' : 'ASC';
685:     $user_group = isset($_GET['user_group']) ? intval($_GET['user_group']) : -1;693:     $user_group = isset($_GET['user_group']) ? intval($_GET['user_group']) : -1;
686: 694: 
688:     $query_str[] = 'direction='.$direction;696:     $query_str[] = 'direction='.$direction;
689:     $query_str[] = 'user_group='.$user_group;697:     $query_str[] = 'user_group='.$user_group;
690: 698: 
691:     if (preg_match('/[^0-9]/', $posts_greater.$posts_less))699:     if (preg_match('%[^0-9]%', $posts_greater.$posts_less))
692:         message($lang_admin_users['Non numeric message']);700:         message($lang_admin_users['Non numeric message']);
693: 701: 
694:     // Try to convert date/time to timestamps702:     // Try to convert date/time to timestamps
712: 720: 
713:         $conditions[] = 'u.last_post<'.$last_post_before;721:         $conditions[] = 'u.last_post<'.$last_post_before;
714:     }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:     }
715:     if ($registered_after != '')743:     if ($registered_after != '')
716:     {744:     {
717:         $query_str[] = 'registered_after='.$registered_after;745:         $query_str[] = 'registered_after='.$registered_after;
769: 797: 
770:     // Generate paging links798:     // Generate paging links
771:     $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));
772:     800: 
773:     // Some helper variables for permissions801:     // Some helper variables for permissions
774:     $can_delete = $can_move = $pun_user['g_id'] == PUN_ADMIN;802:     $can_delete = $can_move = $pun_user['g_id'] == PUN_ADMIN;
775:     $can_ban = $pun_user['g_id'] == PUN_ADMIN || ($pun_user['g_moderator'] == '1' && $pun_user['g_mod_ban_users'] == '1');803:     $can_ban = $pun_user['g_id'] == PUN_ADMIN || ($pun_user['g_moderator'] == '1' && $pun_user['g_mod_ban_users'] == '1');
839:                     <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>
840:                     <td class="tcr"><?php echo $actions ?></td>868:                     <td class="tcr"><?php echo $actions ?></td>
841: <?php if ($can_action): ?>                    <td class="tcmod"><input type="checkbox" name="users[<?php echo $user_data['id'] ?>]" value="1" /></td>869: <?php if ($can_action): ?>                    <td class="tcmod"><input type="checkbox" name="users[<?php echo $user_data['id'] ?>]" value="1" /></td>
842: <?php endif; ?> 870: <?php endif; ?>
843:                 </tr>871:                 </tr>
844: <?php872: <?php
845: 873: 
969:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>997:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>
970:                                 </tr>998:                                 </tr>
971:                                 <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>
972:                                     <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>
973:                                     <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" />
974:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>1012:                                     <span><?php echo $lang_admin_users['Date help'] ?></span></td>
986:                                             <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>
987:                                             <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>
988:                                             <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>
989:                                             <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>
990:                                         </select>&#160;&#160;&#160;<select name="direction" tabindex="22">1029:                                         </select>&#160;&#160;&#160;<select name="direction" tabindex="22">
991:                                             <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>


a/db_update.php b/db_update.php
  7:  */  7:  */
  8:   8: 
  9: // The FluxBB version this script updates to  9: // The FluxBB version this script updates to
 10: define('UPDATE_TO', '1.4.5'); 10: define('UPDATE_TO', '1.4.6');
 11:  11: 
 12: define('UPDATE_TO_DB_REVISION', 11); 12: define('UPDATE_TO_DB_REVISION', 15);
 13: define('UPDATE_TO_SI_REVISION', 2); 13: define('UPDATE_TO_SI_REVISION', 2);
 14: define('UPDATE_TO_PARSER_REVISION', 2); 14: define('UPDATE_TO_PARSER_REVISION', 2);
 15:  15: 
277:         $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');277:         $str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
278: 278: 
279:     // Replace numeric entities279:     // Replace numeric entities
280:     $str = preg_replace_callback('/&#([0-9]+);/', 'utf8_callback_1', $str);280:     $str = preg_replace_callback('%&#([0-9]+);%', 'utf8_callback_1', $str);
281:     $str = preg_replace_callback('/&#x([a-f0-9]+);/i', 'utf8_callback_2', $str);281:     $str = preg_replace_callback('%&#x([a-f0-9]+);%i', 'utf8_callback_2', $str);
282: 282: 
283:     // Remove "bad" characters283:     // Remove "bad" characters
284:     $str = remove_bad_characters($str);284:     $str = remove_bad_characters($str);
339:             $allow_null = ($cur_column['Null'] == 'YES');339:             $allow_null = ($cur_column['Null'] == 'YES');
340:             $collate = (substr($cur_column['Collation'], -3) == 'bin') ? 'utf8_bin' : 'utf8_general_ci';340:             $collate = (substr($cur_column['Collation'], -3) == 'bin') ? 'utf8_bin' : 'utf8_general_ci';
341: 341: 
342:             $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());342:             $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'], $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());343:             $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:         }344:         }
345:     }345:     }
459: // Show form459: // Show form
460: if (empty($stage))460: if (empty($stage))
461: {461: {
 462:     if (file_exists(FORUM_CACHE_DIR.'db_update.lock'))
 463:     {
 464:         // Deal with newlines, tabs and multiple spaces
 465:         $pattern = array("\t", '  ', '  ');
 466:         $replace = array('&#160; &#160; ', '&#160; ', ' &#160;');
 467:         $message = str_replace($pattern, $replace, $pun_config['o_maintenance_message']);
 468: 
 469: ?>
 470: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
 471: <head>
 472: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 473: <title><?php echo $lang_update['Maintenance'] ?></title>
 474: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
 475: </head>
 476: <body>
 477: 
 478: <div id="punmaint" class="pun">
 479: <div class="top-box"><div><!-- Top Corners --></div></div>
 480: <div class="punwrap">
 481: 
 482: <div id="brdmain">
 483: <div class="block">
 484:     <h2><?php echo $lang_update['Maintenance'] ?></h2>
 485:     <div class="box">
 486:         <div class="inbox">
 487:             <p><?php echo $message ?></p>
 488:         </div>
 489:     </div>
 490: </div>
 491: </div>
 492: 
 493: </div>
 494: <div class="end-box"><div><!-- Bottom Corners --></div></div>
 495: </div>
 496: 
 497: </body>
 498: </html>
 499: <?php
 500: 
 501:     }
 502:     else
 503:     {
462: 504: 
463: ?>505: ?>
464: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">506: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
469: <title><?php echo $lang_update['Update'] ?></title>511: <title><?php echo $lang_update['Update'] ?></title>
470: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />512: <link rel="stylesheet" type="text/css" href="style/<?php echo $default_style ?>.css" />
471: </head>513: </head>
472: <body onload="document.getElementById('install').req_db_type.focus();document.getElementById('install').start.disabled=false;">514: <body onload="document.getElementById('install').req_db_pass.focus();document.getElementById('install').start.disabled=false;">
473: 515: 
474: <div id="pundb_update" class="pun">516: <div id="pundb_update" class="pun">
475: <div class="top-box"><div><!-- Top Corners --></div></div>517: <div class="top-box"><div><!-- Top Corners --></div></div>
488: <div class="blockform">530: <div class="blockform">
489:     <h2><span><?php echo $lang_update['Update'] ?></span></h2>531:     <h2><span><?php echo $lang_update['Update'] ?></span></h2>
490:     <div class="box">532:     <div class="box">
491:         <form method="post" action="db_update.php">533:         <form id="install" method="post" action="db_update.php">
492:             <input type="hidden" name="stage" value="start" />534:             <input type="hidden" name="stage" value="start" />
493:             <div class="inform">535:             <div class="inform">
494:                 <fieldset>536:                 <fieldset>
497:                         <p><?php echo $lang_update['Database password info'] ?></p>539:                         <p><?php echo $lang_update['Database password info'] ?></p>
498:                         <p><strong><?php echo $lang_update['Note']; ?></strong> <?php echo $lang_update['Database password note'] ?></p>540:                         <p><strong><?php echo $lang_update['Note']; ?></strong> <?php echo $lang_update['Database password note'] ?></p>
499:                         <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>541:                         <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>
 542:                         <p><?php echo $lang_update['Maintenance message info'] ?></p>
 543:                         <div class="txtarea">
 544:                             <label class="required"><strong><?php echo $lang_update['Maintenance message'] ?> <span><?php echo $lang_update['Required'] ?></span></strong><br />
 545:                             <textarea name="req_maintenance_message" rows="4" cols="65"><?php echo pun_htmlspecialchars($pun_config['o_maintenance_message']) ?></textarea><br /></label>
 546:                         </div>
500:                     </div>547:                     </div>
501:                 </fieldset>548:                 </fieldset>
502:             </div>549:             </div>
559: </html>606: </html>
560: <?php607: <?php
561: 608: 
 609:     }
562:     $db->end_transaction();610:     $db->end_transaction();
563:     $db->close();611:     $db->close();
564:     exit;612:     exit;
602: 650: 
603:         fwrite($fh, $uid);651:         fwrite($fh, $uid);
604:         fclose($fh);652:         fclose($fh);
 653: 
 654:         // Update maintenance message
 655:         if ($_POST['req_maintenance_message'] != '')
 656:             $maintenance_message = pun_trim(pun_linebreaks($_POST['req_maintenance_message']));
 657:         else
 658:         {
 659:             // Load the admin_options.php language file
 660:             require PUN_ROOT.'lang/'.$default_lang.'/admin_options.php';
 661: 
 662:             $maintenance_message = $lang_admin_options['Default maintenance message'];
 663:         }
 664: 
 665:         $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());
 666: 
 667:         // Regenerate the config cache
 668:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
 669:             require PUN_ROOT.'include/cache.php';
 670: 
 671:         generate_config_cache();
605:     }672:     }
606: }673: }
607: else if (isset($_GET['uid']))674: else if (isset($_GET['uid']))
719:             {786:             {
720:                 // Make an educated guess regarding base_url787:                 // Make an educated guess regarding base_url
721:                 $base_url  = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';    // protocol788:                 $base_url  = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';    // protocol
722:                 $base_url .= preg_replace('/:(80|443)$/', '', $_SERVER['HTTP_HOST']);                            // host[:port]789:                 $base_url .= preg_replace('%:(80|443)$%', '', $_SERVER['HTTP_HOST']);                            // host[:port]
723:                 $base_url .= str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));                            // path790:                 $base_url .= str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));                            // path
724:             }791:             }
725: 792: 
753:                 $mod_gid = $db->result($result);820:                 $mod_gid = $db->result($result);
754:             else821:             else
755:             {822:             {
756:                 $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());823:                 $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());
757:                 $mod_gid = $db->insert_id();824:                 $mod_gid = $db->insert_id();
758:             }825:             }
759: 826: 
916:         $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());983:         $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());
917:         $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());984:         $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());
918: 985: 
919:         // Set non-default g_send_email and g_flood_email values properly986:         // Add the last_report_sent column to the users table and the g_report_flood
 987:         // column to the groups table
 988:         $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());
 989:         $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());
 990: 
 991:         // Set non-default g_send_email, g_flood_email and g_flood_report values properly
920:         $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());992:         $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());
921:         $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());993:         $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());
922: 994: 
923:         // Add the auto notify/subscription option to the users table995:         // Add the auto notify/subscription option to the users table
924:         $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());996:         $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());
1086:         if ($pun_config['o_default_style'] != $default_style)1158:         if ($pun_config['o_default_style'] != $default_style)
1087:             $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());1159:             $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());
1088: 1160: 
 1161:         // For MySQL(i) without InnoDB, change the engine of the online table (for performance reasons)
 1162:         if ($db_type == 'mysql' || $db_type == 'mysqli')
 1163:             $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());
 1164: 
1089:         // Should we do charset conversion or not?1165:         // Should we do charset conversion or not?
1090:         if (strpos($cur_version, '1.2') === 0 && isset($_POST['convert_charset']))1166:         if (strpos($cur_version, '1.2') === 0 && isset($_POST['convert_charset']))
1091:             $query_str = '?stage=conv_bans&req_old_charset='.$old_charset;1167:             $query_str = '?stage=conv_bans&req_old_charset='.$old_charset;
1458:                     $errors[$id][] = $lang_update['Username too long error'];1534:                     $errors[$id][] = $lang_update['Username too long error'];
1459:                 else if (!strcasecmp($username, 'Guest'))1535:                 else if (!strcasecmp($username, 'Guest'))
1460:                     $errors[$id][] = $lang_update['Username Guest reserved error'];1536:                     $errors[$id][] = $lang_update['Username Guest reserved error'];
1461:                 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))1537:                 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))
1462:                     $errors[$id][] = $lang_update['Username IP format error'];1538:                     $errors[$id][] = $lang_update['Username IP format error'];
1463:                 else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)1539:                 else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
1464:                     $errors[$id][] = $lang_update['Username bad characters error'];1540:                     $errors[$id][] = $lang_update['Username bad characters error'];
1465:                 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))1541:                 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))
1466:                     $errors[$id][] = $lang_update['Username BBCode error'];1542:                     $errors[$id][] = $lang_update['Username BBCode error'];
1467: 1543: 
1468:                 $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());1544:                 $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());
1469: 1545: 
1470:                 if ($db->num_rows($result))1546:                 if ($db->num_rows($result))
1471:                 {1547:                 {
1535:                     $mail_message = str_replace('<base_url>', get_base_url().'/', $mail_message);1611:                     $mail_message = str_replace('<base_url>', get_base_url().'/', $mail_message);
1536:                     $mail_message = str_replace('<old_username>', $old_username, $mail_message);1612:                     $mail_message = str_replace('<old_username>', $old_username, $mail_message);
1537:                     $mail_message = str_replace('<new_username>', $username, $mail_message);1613:                     $mail_message = str_replace('<new_username>', $username, $mail_message);
1538:                     $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' Mailer', $mail_message);1614:                     $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
1539: 1615: 
1540:                     pun_mail($cur_user['email'], $mail_subject, $mail_message);1616:                     pun_mail($cur_user['email'], $mail_subject, $mail_message);
1541: 1617: 
1828: $db->close();1904: $db->close();
1829: 1905: 
1830: if ($query_str != '')1906: if ($query_str != '')


a/header.php b/header.php
 41: $tpl_main = file_get_contents($tpl_file); 41: $tpl_main = file_get_contents($tpl_file);
 42:  42: 
 43: // START SUBST - <pun_include "*"> 43: // START SUBST - <pun_include "*">
 44: preg_match_all('#<pun_include "([^/\\\\]*?)\.(php[45]?|inc|html?|txt)">#', $tpl_main, $pun_includes, PREG_SET_ORDER); 44: preg_match_all('%<pun_include "([^/\\\\]*?)\.(php[45]?|inc|html?|txt)">%i', $tpl_main, $pun_includes, PREG_SET_ORDER);
 45:  45: 
 46: foreach ($pun_includes as $cur_include) 46: foreach ($pun_includes as $cur_include)
 47: { 47: {
142: // JavaScript tricks for IE6 and older142: // JavaScript tricks for IE6 and older
143: echo '<!--[if lte IE 6]><script type="text/javascript" src="style/imports/minmax.js"></script><![endif]-->'."\n";143: echo '<!--[if lte IE 6]><script type="text/javascript" src="style/imports/minmax.js"></script><![endif]-->'."\n";
144: 144: 
145: if (!isset($page_head))145: if (isset($page_head))
146:     $page_head = array();146:     echo implode("\n", $page_head)."\n";
147:  
148: $page_head['top'] = '<link rel="top" href="index.php" title="'.$lang_common['Forum index'].'" />'; 
149:  
150: echo implode("\n", $page_head)."\n"; 
151: 147: 
152: $tpl_temp = trim(ob_get_contents());148: $tpl_temp = trim(ob_get_contents());
153: $tpl_main = str_replace('<pun_head>', $tpl_temp, $tpl_main);149: $tpl_main = str_replace('<pun_head>', $tpl_temp, $tpl_main);
212: // Are there any additional navlinks we should insert into the array before imploding it?208: // Are there any additional navlinks we should insert into the array before imploding it?
213: if ($pun_user['g_read_board'] == '1' && $pun_config['o_additional_navlinks'] != '')209: if ($pun_user['g_read_board'] == '1' && $pun_config['o_additional_navlinks'] != '')
214: {210: {
215:     if (preg_match_all('#([0-9]+)\s*=\s*(.*?)\n#s', $pun_config['o_additional_navlinks']."\n", $extra_links))211:     if (preg_match_all('%([0-9]+)\s*=\s*(.*?)\n%s', $pun_config['o_additional_navlinks']."\n", $extra_links))
216:     {212:     {
217:         // Insert any additional links into the $links array (at the correct index)213:         // Insert any additional links into the $links array (at the correct index)
218:         $num_links = count($extra_links[1]);214:         $num_links = count($extra_links[1]);
230: $page_statusinfo = $page_topicsearches = array();226: $page_statusinfo = $page_topicsearches = array();
231: 227: 
232: if ($pun_user['is_guest'])228: if ($pun_user['is_guest'])
233:     $page_statusinfo = '<p>'.$lang_common['Not logged in'].'</p>';229:     $page_statusinfo = '<p class="conl">'.$lang_common['Not logged in'].'</p>';
234: else230: else
235: {231: {
236:     $page_statusinfo[] = '<li><span>'.$lang_common['Logged in as'].' <strong>'.pun_htmlspecialchars($pun_user['username']).'</strong></span></li>';232:     $page_statusinfo[] = '<li><span>'.$lang_common['Logged in as'].' <strong>'.pun_htmlspecialchars($pun_user['username']).'</strong></span></li>';
266: 262: 
267: 263: 
268: // Generate all that jazz264: // Generate all that jazz
269: $tpl_temp = '<div id="brdwelcome" class="inbox">'."\n\t\t\t";265: $tpl_temp = '<div id="brdwelcome" class="inbox">';
270: 266: 
271: // The status information267: // The status information
272: if (is_array($page_statusinfo))268: if (is_array($page_statusinfo))
283: {279: {
284:     $tpl_temp .= "\n\t\t\t".'<ul class="conr">';280:     $tpl_temp .= "\n\t\t\t".'<ul class="conr">';
285:     $tpl_temp .= "\n\t\t\t\t".'<li><span>'.$lang_common['Topic searches'].' '.implode(' | ', $page_topicsearches).'</span></li>';281:     $tpl_temp .= "\n\t\t\t\t".'<li><span>'.$lang_common['Topic searches'].' '.implode(' | ', $page_topicsearches).'</span></li>';
286:     $tpl_temp .= "\n\t\t\t".'</ul>'."\n\t\t\t".'<div class="clearer"></div>';282:     $tpl_temp .= "\n\t\t\t".'</ul>';
287: }283: }
288: 284: 
289: $tpl_temp .= "\n\t\t".'</div>';285: $tpl_temp .= "\n\t\t\t".'<div class="clearer"></div>'."\n\t\t".'</div>';
290: 286: 
291: $tpl_main = str_replace('<pun_status>', $tpl_temp, $tpl_main);287: $tpl_main = str_replace('<pun_status>', $tpl_temp, $tpl_main);
292: // END SUBST - <pun_status>288: // END SUBST - <pun_status>


a/help.php b/help.php
 55:         <p><?php echo $lang_help['Links info'] ?></p> 55:         <p><?php echo $lang_help['Links info'] ?></p>
 56:         <p><code>[url=<?php echo pun_htmlspecialchars(get_base_url(true).'/') ?>]<?php echo pun_htmlspecialchars($pun_config['o_board_title']) ?>[/url]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/') ?>"><?php echo pun_htmlspecialchars($pun_config['o_board_title']) ?></a></samp></p> 56:         <p><code>[url=<?php echo pun_htmlspecialchars(get_base_url(true).'/') ?>]<?php echo pun_htmlspecialchars($pun_config['o_board_title']) ?>[/url]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/') ?>"><?php echo pun_htmlspecialchars($pun_config['o_board_title']) ?></a></samp></p>
 57:         <p><code>[url]<?php echo pun_htmlspecialchars(get_base_url(true).'/') ?>[/url]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/') ?>"><?php echo pun_htmlspecialchars(get_base_url(true).'/') ?></a></samp></p> 57:         <p><code>[url]<?php echo pun_htmlspecialchars(get_base_url(true).'/') ?>[/url]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/') ?>"><?php echo pun_htmlspecialchars(get_base_url(true).'/') ?></a></samp></p>
  58:         <p><code>[url=/help.php]<?php echo $lang_help['This help page'] ?>[/url]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo get_base_url(true).'/help.php' ?>"><?php echo $lang_help['This help page'] ?></a></samp></p>
 58:         <p><code>[email]myname@mydomain.com[/email]</code> <?php echo $lang_help['produces'] ?> <samp><a href="mailto:myname@mydomain.com">myname@mydomain.com</a></samp></p> 59:         <p><code>[email]myname@mydomain.com[/email]</code> <?php echo $lang_help['produces'] ?> <samp><a href="mailto:myname@mydomain.com">myname@mydomain.com</a></samp></p>
 59:         <p><code>[email=myname@mydomain.com]<?php echo $lang_help['My email address'] ?>[/email]</code> <?php echo $lang_help['produces'] ?> <samp><a href="mailto:myname@mydomain.com"><?php echo $lang_help['My email address'] ?></a></samp></p> 60:         <p><code>[email=myname@mydomain.com]<?php echo $lang_help['My email address'] ?>[/email]</code> <?php echo $lang_help['produces'] ?> <samp><a href="mailto:myname@mydomain.com"><?php echo $lang_help['My email address'] ?></a></samp></p>
  61:         <p><code>[topic=1]<?php echo $lang_help['Test topic'] ?>[/topic]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/viewtopic.php?id=1') ?>"><?php echo $lang_help['Test topic'] ?></a></samp></p>
  62:         <p><code>[topic]1[/topic]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/viewtopic.php?id=1') ?>"><?php echo pun_htmlspecialchars(get_base_url(true).'/viewtopic.php?id=1') ?></a></samp></p>
  63:         <p><code>[post=1]<?php echo $lang_help['Test post'] ?>[/post]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/viewtopic.php?pid=1#p1') ?>"><?php echo $lang_help['Test post'] ?></a></samp></p>
  64:         <p><code>[post]1[/post]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/viewtopic.php?pid=1#p1') ?>"><?php echo pun_htmlspecialchars(get_base_url(true).'/viewtopic.php?pid=1#p1') ?></a></samp></p>
  65:         <p><code>[forum=1]<?php echo $lang_help['Test forum'] ?>[/forum]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/viewforum.php?id=1') ?>"><?php echo $lang_help['Test forum'] ?></a></samp></p>
  66:         <p><code>[forum]1[/forum]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/viewforum.php?id=1') ?>"><?php echo pun_htmlspecialchars(get_base_url(true).'/viewforum.php?id=1') ?></a></samp></p>
  67:         <p><code>[user=2]<?php echo $lang_help['Test user'] ?>[/user]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/profile.php?id=2') ?>"><?php echo $lang_help['Test user'] ?></a></samp></p>
  68:         <p><code>[user]2[/user]</code> <?php echo $lang_help['produces'] ?> <samp><a href="<?php echo pun_htmlspecialchars(get_base_url(true).'/profile.php?id=2') ?>"><?php echo pun_htmlspecialchars(get_base_url(true).'/profile.php?id=2') ?></a></samp></p>
 60:     </div> 69:     </div>
 61:     <div class="inbox"> 70:     <div class="inbox">
 62:         <p><a name="img"></a><?php echo $lang_help['Images info'] ?></p> 71:         <p><a name="img"></a><?php echo $lang_help['Images info'] ?></p>
 63:         <p><code>[img=<?php echo $lang_help['FluxBB bbcode test'] ?>]<?php echo pun_htmlspecialchars(get_base_url(true)) ?>/img/test.png[/img]</code> <?php echo $lang_help['produces'] ?> <samp><img src="<?php echo pun_htmlspecialchars(get_base_url(true)) ?>/img/test.png" alt="<?php echo $lang_help['FluxBB bbcode test'] ?>" /></samp></p> 72:         <p><code>[img=<?php echo $lang_help['FluxBB bbcode test'] ?>]<?php echo pun_htmlspecialchars(get_base_url(true)) ?>/img/test.png[/img]</code> <?php echo $lang_help['produces'] ?> <samp><img style="height: 21px" src="<?php echo pun_htmlspecialchars(get_base_url(true)) ?>/img/test.png" alt="<?php echo $lang_help['FluxBB bbcode test'] ?>" /></samp></p>
 64:     </div> 73:     </div>
 65: </div> 74: </div>
 66: <h2><span><?php echo $lang_help['Quotes'] ?></span></h2> 75: <h2><span><?php echo $lang_help['Quotes'] ?></span></h2>


- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

- No viewable Change -

a/include/cache.php b/include/cache.php
183:     for ($i = 0; $i < $num_words; $i++)183:     for ($i = 0; $i < $num_words; $i++)
184:     {184:     {
185:         list($search_for[$i], $replace_with[$i]) = $db->fetch_row($result);185:         list($search_for[$i], $replace_with[$i]) = $db->fetch_row($result);
186:         $search_for[$i] = '/(?<=[^\p{L}\p{N}])('.str_replace('\*', '[\p{L}\p{N}]*?', preg_quote($search_for[$i], '/')).')(?=[^\p{L}\p{N}])/iu';186:         $search_for[$i] = '%(?<=[^\p{L}\p{N}])('.str_replace('\*', '[\p{L}\p{N}]*?', preg_quote($search_for[$i], '%')).')(?=[^\p{L}\p{N}])%iu';
187:     }187:     }
188: 188: 
189:     // Output censored words as PHP code189:     // Output censored words as PHP code


a/include/common.php b/include/common.php
 10:     exit('The constant PUN_ROOT must be defined and point to a valid FluxBB installation root directory.'); 10:     exit('The constant PUN_ROOT must be defined and point to a valid FluxBB installation root directory.');
 11:  11: 
 12: // Define the version and database revision that this code was written for 12: // Define the version and database revision that this code was written for
 13: define('FORUM_VERSION', '1.4.5'); 13: define('FORUM_VERSION', '1.4.6');
 14:  14: 
 15: define('FORUM_DB_REVISION', 11); 15: define('FORUM_DB_REVISION', 15);
 16: define('FORUM_SI_REVISION', 2); 16: define('FORUM_SI_REVISION', 2);
 17: define('FORUM_PARSER_REVISION', 2); 17: define('FORUM_PARSER_REVISION', 2);
 18:  18: 
 70: if (get_magic_quotes_runtime()) 70: if (get_magic_quotes_runtime())
 71:     set_magic_quotes_runtime(0); 71:     set_magic_quotes_runtime(0);
 72:  72: 
 73: // Strip slashes from GET/POST/COOKIE (if magic_quotes_gpc is enabled) 73: // Strip slashes from GET/POST/COOKIE/REQUEST/FILES (if magic_quotes_gpc is enabled)
 74: if (get_magic_quotes_gpc()) 74: if (get_magic_quotes_gpc())
 75: { 75: {
 76:     function stripslashes_array($array) 76:     function stripslashes_array($array)
 82:     $_POST = stripslashes_array($_POST); 82:     $_POST = stripslashes_array($_POST);
 83:     $_COOKIE = stripslashes_array($_COOKIE); 83:     $_COOKIE = stripslashes_array($_COOKIE);
 84:     $_REQUEST = stripslashes_array($_REQUEST); 84:     $_REQUEST = stripslashes_array($_REQUEST);
  85:     $_FILES = stripslashes_array($_FILES);
 85: } 86: }
 86:  87: 
 87: // If a cookie name is not specified in config.php, we use the default (pun_cookie) 88: // If a cookie name is not specified in config.php, we use the default (pun_cookie)
120: 121: 
121: // Verify that we are running the proper database schema revision122: // Verify that we are running the proper database schema revision
122: if (!isset($pun_config['o_database_revision']) || $pun_config['o_database_revision'] < FORUM_DB_REVISION ||123: if (!isset($pun_config['o_database_revision']) || $pun_config['o_database_revision'] < FORUM_DB_REVISION ||
123:         !isset($pun_config['o_searchindex_revision']) || $pun_config['o_searchindex_revision'] < FORUM_SI_REVISION ||124:     !isset($pun_config['o_searchindex_revision']) || $pun_config['o_searchindex_revision'] < FORUM_SI_REVISION ||
124:         !isset($pun_config['o_parser_revision']) || $pun_config['o_parser_revision'] < FORUM_PARSER_REVISION ||125:     !isset($pun_config['o_parser_revision']) || $pun_config['o_parser_revision'] < FORUM_PARSER_REVISION ||
125:         version_compare($pun_config['o_cur_version'], FORUM_VERSION, '<'))126:     version_compare($pun_config['o_cur_version'], FORUM_VERSION, '<'))
126:     {127: {
127:         header('Location: db_update.php');128:     header('Location: db_update.php');
128:         exit;129:     exit;
129:     }130: }
130: 131: 
131: // Enable output buffering132: // Enable output buffering
132: if (!defined('PUN_DISABLE_BUFFERING'))133: if (!defined('PUN_DISABLE_BUFFERING'))


a/include/common_admin.php b/include/common_admin.php
 14: if (file_exists(PUN_ROOT.'lang/'.$pun_user['language'].'/admin_common.php')) 14: if (file_exists(PUN_ROOT.'lang/'.$pun_user['language'].'/admin_common.php'))
 15:     $admin_language = $pun_user['language']; 15:     $admin_language = $pun_user['language'];
 16: else if (file_exists(PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/admin_common.php')) 16: else if (file_exists(PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/admin_common.php'))
 17:     $admin_language = $pun_config['language']; 17:     $admin_language = $pun_config['o_default_lang'];
 18: else 18: else
 19:     $admin_language = 'English'; 19:     $admin_language = 'English';
 20:  20: 
 83:                 <ul> 83:                 <ul>
 84: <?php 84: <?php
 85:  85: 
 86:         foreach ($plugins as $cur_plugin) 86:         foreach ($plugins as $plugin_name => $plugin)
 87:             echo "\t\t\t\t\t".'<li'.(($page == $cur_plugin[1]) ? ' class="isactive"' : '').'><a href="admin_loader.php?plugin='.$cur_plugin[1].'">'.str_replace('_', ' ', $cur_plugin[0]).'</a></li>'."\n"; 87:             echo "\t\t\t\t\t".'<li'.(($page == $plugin_name) ? ' class="isactive"' : '').'><a href="admin_loader.php?plugin='.$plugin_name.'">'.str_replace('_', ' ', $plugin).'</a></li>'."\n";
 88:  88: 
 89: ?> 89: ?>
 90:                 </ul> 90:                 </ul>


a/include/dblayer/common_db.php b/include/dblayer/common_db.php
 15: switch ($db_type) 15: switch ($db_type)
 16: { 16: {
 17:     case 'mysql': 17:     case 'mysql':
 18:         require PUN_ROOT.'include/dblayer/mysql.php'; 18:         require_once PUN_ROOT.'include/dblayer/mysql.php';
 19:         break; 19:         break;
 20:  20: 
 21:     case 'mysql_innodb': 21:     case 'mysql_innodb':
 22:         require PUN_ROOT.'include/dblayer/mysql_innodb.php'; 22:         require_once PUN_ROOT.'include/dblayer/mysql_innodb.php';
 23:         break; 23:         break;
 24:  24: 
 25:     case 'mysqli': 25:     case 'mysqli':
 26:         require PUN_ROOT.'include/dblayer/mysqli.php'; 26:         require_once PUN_ROOT.'include/dblayer/mysqli.php';
 27:         break; 27:         break;
 28:  28: 
 29:     case 'mysqli_innodb': 29:     case 'mysqli_innodb':
 30:         require PUN_ROOT.'include/dblayer/mysqli_innodb.php'; 30:         require_once PUN_ROOT.'include/dblayer/mysqli_innodb.php';
 31:         break; 31:         break;
 32:  32: 
 33:     case 'pgsql': 33:     case 'pgsql':
 34:         require PUN_ROOT.'include/dblayer/pgsql.php'; 34:         require_once PUN_ROOT.'include/dblayer/pgsql.php';
 35:         break; 35:         break;
 36:  36: 
 37:     case 'sqlite': 37:     case 'sqlite':
 38:         require PUN_ROOT.'include/dblayer/sqlite.php'; 38:         require_once PUN_ROOT.'include/dblayer/sqlite.php';
 39:         break; 39:         break;
 40:  40: 
 41:     default: 41:     default:


a/include/dblayer/mysql.php b/include/dblayer/mysql.php
 24:     var $error_msg = 'Unknown'; 24:     var $error_msg = 'Unknown';
 25:  25: 
 26:     var $datatype_transformations = array( 26:     var $datatype_transformations = array(
 27:         '/^SERIAL$/'    =>    'INT(10) UNSIGNED AUTO_INCREMENT' 27:         '%^SERIAL$%'    =>    'INT(10) UNSIGNED AUTO_INCREMENT'
 28:     ); 28:     );
 29:  29: 
 30:  30: 
204: 204: 
205:         return array(205:         return array(
206:             'name'        => 'MySQL Standard',206:             'name'        => 'MySQL Standard',
207:             'version'    => preg_replace('/^([^-]+).*$/', '\\1', $this->result($result))207:             'version'    => preg_replace('%^([^-]+).*$%', '\\1', $this->result($result))
208:         );208:         );
209:     }209:     }
210: 210: 


a/include/dblayer/mysql_innodb.php b/include/dblayer/mysql_innodb.php
 25:     var $error_msg = 'Unknown'; 25:     var $error_msg = 'Unknown';
 26:  26: 
 27:     var $datatype_transformations = array( 27:     var $datatype_transformations = array(
 28:         '/^SERIAL$/'    =>    'INT(10) UNSIGNED AUTO_INCREMENT' 28:         '%^SERIAL$%'    =>    'INT(10) UNSIGNED AUTO_INCREMENT'
 29:     ); 29:     );
 30:  30: 
 31:  31: 
218: 218: 
219:         return array(219:         return array(
220:             'name'        => 'MySQL Standard (InnoDB)',220:             'name'        => 'MySQL Standard (InnoDB)',
221:             'version'    => preg_replace('/^([^-]+).*$/', '\\1', $this->result($result))221:             'version'    => preg_replace('%^([^-]+).*$%', '\\1', $this->result($result))
222:         );222:         );
223:     }223:     }
224: 224: 


a/include/dblayer/mysqli.php b/include/dblayer/mysqli.php
 24:     var $error_msg = 'Unknown'; 24:     var $error_msg = 'Unknown';
 25:  25: 
 26:     var $datatype_transformations = array( 26:     var $datatype_transformations = array(
 27:         '/^SERIAL$/'    =>    'INT(10) UNSIGNED AUTO_INCREMENT' 27:         '%^SERIAL$%'    =>    'INT(10) UNSIGNED AUTO_INCREMENT'
 28:     ); 28:     );
 29:  29: 
 30:  30: 
211: 211: 
212:         return array(212:         return array(
213:             'name'        => 'MySQL Improved',213:             'name'        => 'MySQL Improved',
214:             'version'    => preg_replace('/^([^-]+).*$/', '\\1', $this->result($result))214:             'version'    => preg_replace('%^([^-]+).*$%', '\\1', $this->result($result))
215:         );215:         );
216:     }216:     }
217: 217: 


a/include/dblayer/mysqli_innodb.php b/include/dblayer/mysqli_innodb.php
 25:     var $error_msg = 'Unknown'; 25:     var $error_msg = 'Unknown';
 26:  26: 
 27:     var $datatype_transformations = array( 27:     var $datatype_transformations = array(
 28:         '/^SERIAL$/'    =>    'INT(10) UNSIGNED AUTO_INCREMENT' 28:         '%^SERIAL$%'    =>    'INT(10) UNSIGNED AUTO_INCREMENT'
 29:     ); 29:     );
 30:  30: 
 31:  31: 
224: 224: 
225:         return array(225:         return array(
226:             'name'        => 'MySQL Improved (InnoDB)',226:             'name'        => 'MySQL Improved (InnoDB)',
227:             'version'    => preg_replace('/^([^-]+).*$/', '\\1', $this->result($result))227:             'version'    => preg_replace('%^([^-]+).*$%', '\\1', $this->result($result))
228:         );228:         );
229:     }229:     }
230: 230: 


a/include/dblayer/pgsql.php b/include/dblayer/pgsql.php
 26:     var $error_msg = 'Unknown'; 26:     var $error_msg = 'Unknown';
 27:  27: 
 28:     var $datatype_transformations = array( 28:     var $datatype_transformations = array(
 29:         '/^(TINY|SMALL)INT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$/i'            =>    'SMALLINT', 29:         '%^(TINY|SMALL)INT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$%i'            =>    'SMALLINT',
 30:         '/^(MEDIUM)?INT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$/i'                =>    'INTEGER', 30:         '%^(MEDIUM)?INT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$%i'                =>    'INTEGER',
 31:         '/^BIGINT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$/i'                        =>    'BIGINT', 31:         '%^BIGINT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$%i'                        =>    'BIGINT',
 32:         '/^(TINY|MEDIUM|LONG)?TEXT$/i'                                        =>    'TEXT', 32:         '%^(TINY|MEDIUM|LONG)?TEXT$%i'                                        =>    'TEXT',
 33:         '/^DOUBLE( )?(\\([0-9,]+\\))?( )?(UNSIGNED)?$/i'                    =>    'DOUBLE PRECISION', 33:         '%^DOUBLE( )?(\\([0-9,]+\\))?( )?(UNSIGNED)?$%i'                    =>    'DOUBLE PRECISION',
 34:         '/^FLOAT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$/i'                        =>    'REAL' 34:         '%^FLOAT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$%i'                        =>    'REAL'
 35:     ); 35:     );
 36:  36: 
 37:  37: 
100:     function query($sql, $unbuffered = false) // $unbuffered is ignored since there is no pgsql_unbuffered_query()100:     function query($sql, $unbuffered = false) // $unbuffered is ignored since there is no pgsql_unbuffered_query()
101:     {101:     {
102:         if (strrpos($sql, 'LIMIT') !== false)102:         if (strrpos($sql, 'LIMIT') !== false)
103:             $sql = preg_replace('#LIMIT ([0-9]+),([ 0-9]+)#', 'LIMIT \\2 OFFSET \\1', $sql);103:             $sql = preg_replace('%LIMIT ([0-9]+),([ 0-9]+)%', 'LIMIT \\2 OFFSET \\1', $sql);
104: 104: 
105:         if (defined('PUN_SHOW_QUERIES'))105:         if (defined('PUN_SHOW_QUERIES'))
106:             $q_start = get_microtime();106:             $q_start = get_microtime();
173: 173: 
174:         if ($query_id && $this->last_query_text[$query_id] != '')174:         if ($query_id && $this->last_query_text[$query_id] != '')
175:         {175:         {
176:             if (preg_match('/^INSERT INTO ([a-z0-9\_\-]+)/is', $this->last_query_text[$query_id], $table_name))176:             if (preg_match('%^INSERT INTO ([a-z0-9\_\-]+)%is', $this->last_query_text[$query_id], $table_name))
177:             {177:             {
178:                 // Hack (don't ask)178:                 // Hack (don't ask)
179:                 if (substr($table_name[1], -6) == 'groups')179:                 if (substr($table_name[1], -6) == 'groups')
266: 266: 
267:         return array(267:         return array(
268:             'name'        => 'PostgreSQL',268:             'name'        => 'PostgreSQL',
269:             'version'    => preg_replace('/^[^0-9]+([^\s,-]+).*$/', '\\1', $this->result($result))269:             'version'    => preg_replace('%^[^0-9]+([^\s,-]+).*$%', '\\1', $this->result($result))
270:         );270:         );
271:     }271:     }
272: 272: 


a/include/dblayer/sqlite.php b/include/dblayer/sqlite.php
 25:     var $error_msg = 'Unknown'; 25:     var $error_msg = 'Unknown';
 26:  26: 
 27:     var $datatype_transformations = array( 27:     var $datatype_transformations = array(
 28:         '/^SERIAL$/'                                                            =>    'INTEGER', 28:         '%^SERIAL$%'                                                            =>    'INTEGER',
 29:         '/^(TINY|SMALL|MEDIUM|BIG)?INT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$/i'    =>    'INTEGER', 29:         '%^(TINY|SMALL|MEDIUM|BIG)?INT( )?(\\([0-9]+\\))?( )?(UNSIGNED)?$%i'    =>    'INTEGER',
 30:         '/^(TINY|MEDIUM|LONG)?TEXT$/i'                                            =>    'TEXT' 30:         '%^(TINY|MEDIUM|LONG)?TEXT$%i'                                            =>    'TEXT'
 31:     ); 31:     );
 32:  32: 
 33:  33: 
279:         if (!$this->num_rows($result))279:         if (!$this->num_rows($result))
280:             return false;280:             return false;
281: 281: 
282:         return preg_match('/[\r\n]'.preg_quote($field_name).' /', $this->result($result));282:         return preg_match('%[\r\n]'.preg_quote($field_name, '%').' %', $this->result($result));
283:     }283:     }
284: 284: 
285: 285: 
405:         $table['columns'] = array();405:         $table['columns'] = array();
406:         foreach ($table_lines as $table_line)406:         foreach ($table_lines as $table_line)
407:         {407:         {
408:             $table_line = pun_trim($table_line);408:             $table_line = trim($table_line, " \t\n\r,"); // trim spaces, tabs, newlines, and commas
409:             if (substr($table_line, 0, 12) == 'CREATE TABLE')409:             if (substr($table_line, 0, 12) == 'CREATE TABLE')
410:                 continue;410:                 continue;
411:             else if (substr($table_line, 0, 11) == 'PRIMARY KEY')411:             else if (substr($table_line, 0, 11) == 'PRIMARY KEY')
413:             else if (substr($table_line, 0, 6) == 'UNIQUE')413:             else if (substr($table_line, 0, 6) == 'UNIQUE')
414:                 $table['unique'] = $table_line;414:                 $table['unique'] = $table_line;
415:             else if (substr($table_line, 0, strpos($table_line, ' ')) != '')415:             else if (substr($table_line, 0, strpos($table_line, ' ')) != '')
416:                 $table['columns'][substr($table_line, 0, strpos($table_line, ' '))] = pun_trim(substr($table_line, strpos($table_line, ' ')));416:                 $table['columns'][substr($table_line, 0, strpos($table_line, ' '))] = trim(substr($table_line, strpos($table_line, ' ')));
417:         }417:         }
418: 418: 
419:         return $table;419:         return $table;
444:         $query .= ' DEFAULT '.$default_value;444:         $query .= ' DEFAULT '.$default_value;
445: 445: 
446:         $old_columns = array_keys($table['columns']);446:         $old_columns = array_keys($table['columns']);
447:         array_insert($table['columns'], $after_field, $query.',', $field_name);447:         array_insert($table['columns'], $after_field, $query, $field_name);
448: 448: 
449:         $new_table = 'CREATE TABLE '.($no_prefix ? '' : $this->prefix).$this->escape($table_name).' (';449:         $new_table = 'CREATE TABLE '.($no_prefix ? '' : $this->prefix).$this->escape($table_name).' (';
450: 450: 
451:         foreach ($table['columns'] as $cur_column => $column_details)451:         foreach ($table['columns'] as $cur_column => $column_details)
452:             $new_table .= "\n".$cur_column.' '.$column_details;452:             $new_table .= "\n".$cur_column.' '.$column_details.',';
453: 453: 
454:         if (isset($table['unique']))454:         if (isset($table['unique']))
455:             $new_table .= "\n".$table['unique'].',';455:             $new_table .= "\n".$table['unique'].',';
456: 456: 
457:         if (isset($table['primary_key']))457:         if (isset($table['primary_key']))
458:             $new_table .= "\n".$table['primary_key'];458:             $new_table .= "\n".$table['primary_key'].',';
459: 459: 
460:         $new_table = trim($new_table, ',')."\n".');';460:         $new_table = trim($new_table, ',')."\n".');';
461: 461: 
509:         $new_table = 'CREATE TABLE '.($no_prefix ? '' : $this->prefix).$this->escape($table_name).' (';509:         $new_table = 'CREATE TABLE '.($no_prefix ? '' : $this->prefix).$this->escape($table_name).' (';
510: 510: 
511:         foreach ($table['columns'] as $cur_column => $column_details)511:         foreach ($table['columns'] as $cur_column => $column_details)
512:             $new_table .= "\n".$cur_column.' '.$column_details;512:             $new_table .= "\n".$cur_column.' '.$column_details.',';
513: 513: 
514:         if (isset($table['unique']))514:         if (isset($table['unique']))
515:             $new_table .= "\n".$table['unique'].',';515:             $new_table .= "\n".$table['unique'].',';
516: 516: 
517:         if (isset($table['primary_key']))517:         if (isset($table['primary_key']))
518:             $new_table .= "\n".$table['primary_key'];518:             $new_table .= "\n".$table['primary_key'].',';
519: 519: 
520:         $new_table = trim($new_table, ',')."\n".');';520:         $new_table = trim($new_table, ',')."\n".');';
521: 521: 


a/include/email.php b/include/email.php
 20:     if (strlen($email) > 80) 20:     if (strlen($email) > 80)
 21:         return false; 21:         return false;
 22:  22: 
 23:     return preg_match('/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|("[^"]+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-zA-Z\d\-]+\.)+[a-zA-Z]{2,}))$/', $email); 23:     return preg_match('%^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|("[^"]+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-zA-Z\d\-]+\.)+[a-zA-Z]{2,}))$%', $email);
 24: } 24: }
 25:  25: 
 26:  26: 
 56:  56: 
 57:  57: 
 58: // 58: //
  59: // Make a post email safe
  60: //
  61: function bbcode2email($text, $wrap_length = 72)
  62: {
  63:     static $base_url;
  64: 
  65:     if (!isset($base_url))
  66:         $base_url = get_base_url();
  67: 
  68:     $text = pun_trim($text, "\t\n ");
  69: 
  70:     $shortcut_urls = array(
  71:         'topic' => '/viewtopic.php?id=$1',
  72:         'post' => '/viewtopic.php?pid=$1#p$1',
  73:         'forum' => '/viewforum.php?id=$1',
  74:         'user' => '/profile.php?id=$1',
  75:     );
  76: 
  77:     // Split code blocks and text so BBcode in codeblocks won't be touched
  78:     list($code, $text) = extract_blocks($text, '[code]', '[/code]');
  79: 
  80:     // Strip all bbcodes, except the quote, url, img, email, code and list items bbcodes
  81:     $text = preg_replace(array(
  82:         '%\[/?(?!(?:quote|url|topic|post|user|forum|img|email|code|list|\*))[a-z]+(?:=[^\]]+)?\]%i',
  83:         '%\n\[/?list(?:=[^\]]+)?\]%i' // A separate regex for the list tags to get rid of some whitespace
  84:     ), '', $text);
  85: 
  86:     // Match the deepest nested bbcode
  87:     // An adapted example from Mastering Regular Expressions
  88:     $match_quote_regex = '%
  89:         \[(quote|\*|url|img|email|topic|post|user|forum)(?:=([^\]]+))?\]
  90:         (
  91:             (?>[^\[]*)
  92:             (?>
  93:                 (?!\[/?\1(?:=[^\]]+)?\])
  94:                 \[
  95:                 [^\[]*
  96:             )*
  97:         )
  98:         \[/\1\]
  99:     %ix';
 100: 
 101:     $url_index = 1;
 102:     $url_stack = array();
 103:     while (preg_match($match_quote_regex, $text, $matches))
 104:     {
 105:         // Quotes
 106:         if ($matches[1] == 'quote')
 107:         {
 108:             // Put '>' or '> ' at the start of a line
 109:             $replacement = preg_replace(
 110:                 array('%^(?=\>)%m', '%^(?!\>)%m'),
 111:                 array('>', '> '),
 112:                 $matches[2]." said:\n".$matches[3]);
 113:         }
 114: 
 115:         // List items
 116:         elseif ($matches[1] == '*')
 117:         {
 118:             $replacement = ' * '.$matches[3];
 119:         }
 120: 
 121:         // URLs and emails
 122:         elseif (in_array($matches[1], array('url', 'email')))
 123:         {
 124:             if (!empty($matches[2]))
 125:             {
 126:                 $replacement = '['.$matches[3].']['.$url_index.']';
 127:                 $url_stack[$url_index] = $matches[2];
 128:                 $url_index++;
 129:             }
 130:             else
 131:                 $replacement = '['.$matches[3].']';
 132:         }
 133: 
 134:         // Images
 135:         elseif ($matches[1] == 'img')
 136:         {
 137:             if (!empty($matches[2]))
 138:                 $replacement = '['.$matches[2].']['.$url_index.']';
 139:             else
 140:                 $replacement = '['.basename($matches[3]).']['.$url_index.']';
 141: 
 142:             $url_stack[$url_index] = $matches[3];
 143:             $url_index++;
 144:         }
 145: 
 146:         // Topic, post, forum and user URLs
 147:         elseif (in_array($matches[1], array('topic', 'post', 'forum', 'user')))
 148:         {
 149:             $url = isset($shortcut_urls[$matches[1]]) ? $base_url.$shortcut_urls[$matches[1]] : '';
 150: 
 151:             if (!empty($matches[2]))
 152:             {
 153:                 $replacement = '['.$matches[3].']['.$url_index.']';
 154:                 $url_stack[$url_index] = str_replace('$1', $matches[2], $url);
 155:                 $url_index++;
 156:             }
 157:             else
 158:                 $replacement = '['.str_replace('$1', $matches[3], $url).']';
 159:         }
 160: 
 161:         // Update the main text if there is a replacment
 162:         if (!is_null($replacement))
 163:         {
 164:             $text = str_replace($matches[0], $replacement, $text);
 165:             $replacement = null;
 166:         }
 167:     }
 168: 
 169:     // Put code blocks and text together
 170:     if (isset($code))
 171:     {
 172:         $parts = explode("\1", $text);
 173:         $text = '';
 174:         foreach ($parts as $i => $part)
 175:         {
 176:             $text .= $part;
 177:             if (isset($code[$i]))
 178:                 $text .= trim($code[$i], "\n\r");
 179:         }
 180:     }
 181: 
 182:     // Put URLs at the bottom
 183:     if ($url_stack)
 184:     {
 185:         $text .= "\n\n";
 186:         foreach ($url_stack as $i => $url)
 187:             $text .= "\n".' ['.$i.']: '.$url;
 188:     }
 189: 
 190:     // Wrap lines if $wrap_length is higher than -1
 191:     if ($wrap_length > -1)
 192:     {
 193:         // Split all lines and wrap them individually
 194:         $parts = explode("\n", $text);
 195:         foreach ($parts as $k => $part)
 196:         {
 197:             preg_match('%^(>+ )?(.*)%', $part, $matches);
 198:             $parts[$k] = wordwrap($matches[1].$matches[2], $wrap_length -
 199:                 strlen($matches[1]), "\n".$matches[1]);
 200:         }
 201: 
 202:         return implode("\n", $parts);
 203:     }
 204:     else
 205:         return $text;
 206: }
 207: 
 208: 
 209: //
 59: // Wrapper for PHP's mail()210: // Wrapper for PHP's mail()
 60: //211: //
 61: function pun_mail($to, $subject, $message, $reply_to_email = '', $reply_to_name = '')212: function pun_mail($to, $subject, $message, $reply_to_email = '', $reply_to_name = '')
 63:     global $pun_config, $lang_common;214:     global $pun_config, $lang_common;
 64: 215: 
 65:     // Default sender/return address216:     // Default sender/return address
 66:     $from_name = str_replace('"', '', $pun_config['o_board_title'].' '.$lang_common['Mailer']);217:     $from_name = sprintf($lang_common['Mailer'], $pun_config['o_board_title']);
 67:     $from_email = $pun_config['o_webmaster_email'];218:     $from_email = $pun_config['o_webmaster_email'];
 68: 219: 
 69:     // Do a little spring cleaning220:     // Do a little spring cleaning
 70:     $to = pun_trim(preg_replace('#[\n\r]+#s', '', $to));221:     $to = pun_trim(preg_replace('%[\n\r]+%s', '', $to));
 71:     $subject = pun_trim(preg_replace('#[\n\r]+#s', '', $subject));222:     $subject = pun_trim(preg_replace('%[\n\r]+%s', '', $subject));
 72:     $from_email = pun_trim(preg_replace('#[\n\r:]+#s', '', $from_email));223:     $from_email = pun_trim(preg_replace('%[\n\r:]+%s', '', $from_email));
 73:     $from_name = pun_trim(preg_replace('#[\n\r:]+#s', '', str_replace('"', '', $from_name)));224:     $from_name = pun_trim(preg_replace('%[\n\r:]+%s', '', str_replace('"', '', $from_name)));
 74:     $reply_to_email = pun_trim(preg_replace('#[\n\r:]+#s', '', $reply_to_email));225:     $reply_to_email = pun_trim(preg_replace('%[\n\r:]+%s', '', $reply_to_email));
 75:     $reply_to_name = pun_trim(preg_replace('#[\n\r:]+#s', '', str_replace('"', '', $reply_to_name)));226:     $reply_to_name = pun_trim(preg_replace('%[\n\r:]+%s', '', str_replace('"', '', $reply_to_name)));
 76: 227: 
 77:     // Set up some headers to take advantage of UTF-8228:     // Set up some headers to take advantage of UTF-8
 78:     $from = encode_mail_text($from_name).' <'.$from_email.'>';229:     $from = '"'.encode_mail_text($from_name).'" <'.$from_email.'>';
 79:     $subject = encode_mail_text($subject);230:     $subject = encode_mail_text($subject);
 80: 231: 
 81:     $headers = 'From: '.$from."\r\n".'Date: '.gmdate('r')."\r\n".'MIME-Version: 1.0'."\r\n".'Content-transfer-encoding: 8bit'."\r\n".'Content-type: text/plain; charset=utf-8'."\r\n".'X-Mailer: FluxBB Mailer';232:     $headers = 'From: '.$from."\r\n".'Date: '.gmdate('r')."\r\n".'MIME-Version: 1.0'."\r\n".'Content-transfer-encoding: 8bit'."\r\n".'Content-type: text/plain; charset=utf-8'."\r\n".'X-Mailer: FluxBB Mailer';
 83:     // If we specified a reply-to email, we deal with it here234:     // If we specified a reply-to email, we deal with it here
 84:     if (!empty($reply_to_email))235:     if (!empty($reply_to_email))
 85:     {236:     {
 86:         $reply_to = encode_mail_text($reply_to_name).' <'.$reply_to_email.'>';237:         $reply_to = '"'.encode_mail_text($reply_to_name).'" <'.$reply_to_email.'>';
 87: 238: 
 88:         $headers .= "\r\n".'Reply-To: '.$reply_to;239:         $headers .= "\r\n".'Reply-To: '.$reply_to;
 89:     }240:     }
 90: 241: 
 91:     // Make sure all linebreaks are CRLF in message (and strip out any NULL bytes)242:     // Make sure all linebreaks are LF in message (and strip out any NULL bytes)
 92:     $message = str_replace(array("\n", "\0"), array("\r\n", ''), pun_linebreaks($message));243:     $message = str_replace("\0", '', pun_linebreaks($message));
 93: 244: 
 94:     if ($pun_config['o_smtp_host'] != '')245:     if ($pun_config['o_smtp_host'] != '')
 246:     {
 247:         // Headers should be \r\n
 248:         // Message should be ??
 249:         $message = str_replace("\n", "\r\n", $message);
 95:         smtp_mail($to, $subject, $message, $headers);250:         smtp_mail($to, $subject, $message, $headers);
 251:     }
 96:     else252:     else
 97:     {253:     {
 98:         // Change the linebreaks used in the headers according to OS254:         // Headers should be \r\n
 99:         if (strtoupper(substr(PHP_OS, 0, 3)) == 'MAC')255:         // Message should be \n
100:             $headers = str_replace("\r\n", "\r", $headers); 
101:         else if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') 
102:             $headers = str_replace("\r\n", "\n", $headers); 
103:  
104:         mail($to, $subject, $message, $headers);256:         mail($to, $subject, $message, $headers);
105:     }257:     }
106: }258: }


a/include/functions.php b/include/functions.php
 26:     $now = time(); 26:     $now = time();
 27:  27: 
 28:     // If the cookie is set and it matches the correct pattern, then read the values from it 28:     // If the cookie is set and it matches the correct pattern, then read the values from it
 29:     if (isset($_COOKIE[$cookie_name]) && preg_match('/^(\d+)\|([0-9a-fA-F]+)\|(\d+)\|([0-9a-fA-F]+)$/', $_COOKIE[$cookie_name], $matches)) 29:     if (isset($_COOKIE[$cookie_name]) && preg_match('%^(\d+)\|([0-9a-fA-F]+)\|(\d+)\|([0-9a-fA-F]+)$%', $_COOKIE[$cookie_name], $matches))
 30:     { 30:     {
 31:         $cookie = array( 31:         $cookie = array(
 32:             'user_id'            => intval($matches[1]), 32:             'user_id'            => intval($matches[1]),
246:     // Fetch guest user246:     // Fetch guest user
247:     $result = $db->query('SELECT u.*, g.*, o.logged, o.last_post, o.last_search FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$db->prefix.'online AS o ON o.ident=\''.$remote_addr.'\' WHERE u.id=1') or error('Unable to fetch guest information', __FILE__, __LINE__, $db->error());247:     $result = $db->query('SELECT u.*, g.*, o.logged, o.last_post, o.last_search FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$db->prefix.'online AS o ON o.ident=\''.$remote_addr.'\' WHERE u.id=1') or error('Unable to fetch guest information', __FILE__, __LINE__, $db->error());
248:     if (!$db->num_rows($result))248:     if (!$db->num_rows($result))
249:         exit('Unable to fetch guest information. The table \''.$db->prefix.'users\' must contain an entry with id = 1 that represents anonymous users.');249:         exit('Unable to fetch guest information. Your database must contain both a guest user and a guest user group.');
250: 250: 
251:     $pun_user = $db->fetch_assoc($result);251:     $pun_user = $db->fetch_assoc($result);
252: 252: 
428:     global $db, $pun_config, $errors, $lang_prof_reg, $lang_register, $lang_common, $pun_bans;428:     global $db, $pun_config, $errors, $lang_prof_reg, $lang_register, $lang_common, $pun_bans;
429: 429: 
430:     // Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames)430:     // Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames)
431:     $username = preg_replace('#\s+#s', ' ', $username);431:     $username = preg_replace('%\s+%s', ' ', $username);
432: 432: 
433:     // Validate username433:     // Validate username
434:     if (pun_strlen($username) < 2)434:     if (pun_strlen($username) < 2)
437:         $errors[] = $lang_prof_reg['Username too long'];437:         $errors[] = $lang_prof_reg['Username too long'];
438:     else if (!strcasecmp($username, 'Guest') || !strcasecmp($username, $lang_common['Guest']))438:     else if (!strcasecmp($username, 'Guest') || !strcasecmp($username, $lang_common['Guest']))
439:         $errors[] = $lang_prof_reg['Username guest'];439:         $errors[] = $lang_prof_reg['Username guest'];
440:     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))440:     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))
441:         $errors[] = $lang_prof_reg['Username IP'];441:         $errors[] = $lang_prof_reg['Username IP'];
442:     else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)442:     else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
443:         $errors[] = $lang_prof_reg['Username reserved chars'];443:         $errors[] = $lang_prof_reg['Username reserved chars'];
444:     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))444:     else if (preg_match('%(?:\[/?(?:b|u|s|ins|del|em|i|h|colou?r|quote|code|img|url|email|list|\*|topic|post|forum|user)\]|\[(?:img|url|quote|list)=)%i', $username))
445:         $errors[] = $lang_prof_reg['Username BBCode'];445:         $errors[] = $lang_prof_reg['Username BBCode'];
446: 446: 
447:     // Check username for any censored words447:     // Check username for any censored words
451:     // Check that the username (or a too similar username) is not already registered451:     // Check that the username (or a too similar username) is not already registered
452:     $query = ($exclude_id) ? ' AND id!='.$exclude_id : '';452:     $query = ($exclude_id) ? ' AND id!='.$exclude_id : '';
453: 453: 
454:     $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE (UPPER(username)=UPPER(\''.$db->escape($username).'\') OR UPPER(username)=UPPER(\''.$db->escape(ucp_preg_replace('/[^\p{L}\p{N}]/u', '', $username)).'\')) AND id>1'.$query) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());454:     $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE (UPPER(username)=UPPER(\''.$db->escape($username).'\') OR UPPER(username)=UPPER(\''.$db->escape(ucp_preg_replace('%[^\p{L}\p{N}]%u', '', $username)).'\')) AND id>1'.$query) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
455: 455: 
456:     if ($db->num_rows($result))456:     if ($db->num_rows($result))
457:     {457:     {
1224:     $tpl_maint = file_get_contents($tpl_file);1224:     $tpl_maint = file_get_contents($tpl_file);
1225: 1225: 
1226:     // START SUBST - <pun_include "*">1226:     // START SUBST - <pun_include "*">
1227:     preg_match_all('#<pun_include "([^/\\\\]*?)\.(php[45]?|inc|html?|txt)">#', $tpl_maint, $pun_includes, PREG_SET_ORDER);1227:     preg_match_all('%<pun_include "([^/\\\\]*?)\.(php[45]?|inc|html?|txt)">%i', $tpl_maint, $pun_includes, PREG_SET_ORDER);
1228: 1228: 
1229:     foreach ($pun_includes as $cur_include)1229:     foreach ($pun_includes as $cur_include)
1230:     {1230:     {
1314:         $destination_url = get_base_url(true).'/'.$destination_url;1314:         $destination_url = get_base_url(true).'/'.$destination_url;
1315: 1315: 
1316:     // Do a little spring cleaning1316:     // Do a little spring cleaning
1317:     $destination_url = preg_replace('/([\r\n])|(%0[ad])|(;\s*data\s*:)/i', '', $destination_url);1317:     $destination_url = preg_replace('%([\r\n])|(\%0[ad])|(;\s*data\s*:)%i', '', $destination_url);
1318: 1318: 
1319:     // If the delay is 0 seconds, we might as well skip the redirect all together1319:     // If the delay is 0 seconds, we might as well skip the redirect all together
1320:     if ($pun_config['o_redirect_delay'] == '0')1320:     if ($pun_config['o_redirect_delay'] == '0')
1343:     $tpl_redir = file_get_contents($tpl_file);1343:     $tpl_redir = file_get_contents($tpl_file);
1344: 1344: 
1345:     // START SUBST - <pun_include "*">1345:     // START SUBST - <pun_include "*">
1346:     preg_match_all('#<pun_include "([^/\\\\]*?)\.(php[45]?|inc|html?|txt)">#', $tpl_redir, $pun_includes, PREG_SET_ORDER);1346:     preg_match_all('%<pun_include "([^/\\\\]*?)\.(php[45]?|inc|html?|txt)">%i', $tpl_redir, $pun_includes, PREG_SET_ORDER);
1347: 1347: 
1348:     foreach ($pun_includes as $cur_include)1348:     foreach ($pun_includes as $cur_include)
1349:     {1349:     {
1627:     $array = utf8_bad_strip($array);1627:     $array = utf8_bad_strip($array);
1628: 1628: 
1629:     // Remove control characters1629:     // Remove control characters
1630:     $array = preg_replace('/[\x{00}-\x{08}\x{0b}-\x{0c}\x{0e}-\x{1f}]/', '', $array);1630:     $array = preg_replace('%[\x{00}-\x{08}\x{0b}-\x{0c}\x{0e}-\x{1f}]%', '', $array);
1631: 1631: 
1632:     // Replace some "bad" characters1632:     // Replace some "bad" characters
1633:     $array = str_replace(array_keys($bad_utf8_chars), array_values($bad_utf8_chars), $array);1633:     $array = str_replace(array_keys($bad_utf8_chars), array_values($bad_utf8_chars), $array);
1641: //1641: //
1642: function file_size($size)1642: function file_size($size)
1643: {1643: {
 1644:     global $lang_common;
 1645: 
1644:     $units = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB');1646:     $units = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB');
1645: 1647: 
1646:     for ($i = 0; $size > 1024; $i++)1648:     for ($i = 0; $size > 1024; $i++)
1647:         $size /= 1024;1649:         $size /= 1024;
1648: 1650: 
1649:     return round($size, 2).' '.$units[$i];1651:     return sprintf($lang_common['Size unit '.$units[$i]], round($size, 2));;
1650: }1652: }
1651: 1653: 
1652: 1654: 
1736:         $suffix = substr($entry, strlen($entry) - 4);1738:         $suffix = substr($entry, strlen($entry) - 4);
1737: 1739: 
1738:         if ($suffix == '.php' && ((!$is_admin && $prefix == 'AMP') || ($is_admin && ($prefix == 'AP' || $prefix == 'AMP'))))1740:         if ($suffix == '.php' && ((!$is_admin && $prefix == 'AMP') || ($is_admin && ($prefix == 'AP' || $prefix == 'AMP'))))
1739:             $plugins[] = array(substr($entry, strpos($entry, '_') + 1, -4), $entry);1741:             $plugins[$entry] = substr($entry, strpos($entry, '_') + 1, -4);
1740:     }1742:     }
1741:     $d->close();1743:     $d->close();
1742: 1744: 
 1745:     natcasesort($plugins);
 1746: 
1743:     return $plugins;1747:     return $plugins;
1744: }1748: }
1745: 1749: 
1751: {1755: {
1752:     global $pun_config, $lang_common;1756:     global $pun_config, $lang_common;
1753: 1757: 
1754:     $tokens = explode($start, $text);1758:     $result = array(0 => array(), 1 => array()); // 0 = inside, 1 = outside
 1759: 
 1760:     // split the text into parts
 1761:     $parts = preg_split('%'.preg_quote($start, '%').'(.*)'.preg_quote($end, '%').'%Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
 1762:     $num_parts = count($parts);
1755: 1763: 
1756:     $outside[] = $tokens[0];1764:     // preg_split results in outside parts having even indices, inside parts having odd
 1765:     for ($i = 0;$i < $num_parts;$i++)
 1766:         $result[1 - ($i % 2)][] = $parts[$i];
1757: 1767: 
1758:     $num_tokens = count($tokens);1768:     if ($pun_config['o_indent_num_spaces'] != 8 && $retab)
1759:     for ($i = 1; $i < $num_tokens; ++$i) 
1760:     {1769:     {
1761:         $temp = explode($end, $tokens[$i]);1770:         $spaces = str_repeat(' ', $pun_config['o_indent_num_spaces']);
 1771:         $result[1] = str_replace("\t", $spaces, $result[1]);
 1772:     }
 1773: 
 1774:     return $result;
 1775: }
 1776: 
 1777: 
 1778: //
 1779: // Extract blocks from a text with a starting and ending string
 1780: // This function always matches the most outer block so nesting is possible
 1781: //
 1782: function extract_blocks($text, $start, $end, &$errors = array(), $retab = true)
 1783: {
 1784:     global $pun_config;
1762: 1785: 
1763:         if (count($temp) != 2)1786:     $code = array();
 1787:     $start_len = strlen($start);
 1788:     $end_len = strlen($end);
 1789:     $regex = '%(?:'.preg_quote($start, '%').'|'.preg_quote($end, '%').')%';
 1790:     $matches = array();
 1791: 
 1792:     if (preg_match_all($regex, $text, $matches))
 1793:     {
 1794:         $counter = $offset = 0;
 1795:         $start_pos = $end_pos = false;
 1796: 
 1797:         foreach ($matches[0] as $match)
1764:         {1798:         {
1765:             $errors[] = $lang_common['BBCode code problem'];1799:             if ($match == $start)
1766:             return array(null, array($text));1800:             {
 1801:                 if ($counter == 0)
 1802:                     $start_pos = strpos($text, $start);
 1803:                 $counter++;
 1804:             }
 1805:             elseif ($match == $end)
 1806:             {
 1807:                 $counter--;
 1808:                 if ($counter == 0)
 1809:                     $end_pos = strpos($text, $end, $offset + 1);
 1810:                 $offset = strpos($text, $end, $offset + 1);
 1811:             }
 1812: 
 1813:             if ($start_pos !== false && $end_pos !== false)
 1814:             {
 1815:                 $code[] = substr($text, $start_pos + $start_len,
 1816:                     $end_pos - $start_pos - $start_len);
 1817:                 $text = substr_replace($text, "\1", $start_pos,
 1818:                     $end_pos - $start_pos + $end_len);
 1819:                 $start_pos = $end_pos = false;
 1820:                 $offset = 0;
 1821:             }
1767:         }1822:         }
1768:         $inside[] = $temp[0]; 
1769:         $outside[] = $temp[1]; 
1770:     }1823:     }
1771: 1824: 
1772:     if ($pun_config['o_indent_num_spaces'] != 8 && $retab)1825:     if ($pun_config['o_indent_num_spaces'] != 8 && $retab)
1773:     {1826:     {
1774:         $spaces = str_repeat(' ', $pun_config['o_indent_num_spaces']);1827:         $spaces = str_repeat(' ', $pun_config['o_indent_num_spaces']);
1775:         $inside = str_replace("\t", $spaces, $inside);1828:         $text = str_replace("\t", $spaces, $text);
1776:     }1829:     }
1777: 1830: 
1778:     return array($inside, $outside);1831:     return array($code, $text);
1779: }1832: }
1780: 1833: 
 1834: 
1781: //1835: //
1782: // function url_valid($url) {1836: // function url_valid($url) {
1783: //1837: //
1897: function ucp_preg_replace($pattern, $replace, $subject)1951: function ucp_preg_replace($pattern, $replace, $subject)
1898: {1952: {
1899:     $replaced = preg_replace($pattern, $replace, $subject);1953:     $replaced = preg_replace($pattern, $replace, $subject);
1900:     1954: 
1901:     // If preg_replace() returns false, this probably means unicode support is not built-in, so we need to modify the pattern a little1955:     // If preg_replace() returns false, this probably means unicode support is not built-in, so we need to modify the pattern a little
1902:     if ($replaced === false)1956:     if ($replaced === false)
1903:     {1957:     {
1905:         {1959:         {
1906:             foreach ($pattern as $cur_key => $cur_pattern)1960:             foreach ($pattern as $cur_key => $cur_pattern)
1907:                 $pattern[$cur_key] = str_replace('\p{L}\p{N}', '\w', $cur_pattern);1961:                 $pattern[$cur_key] = str_replace('\p{L}\p{N}', '\w', $cur_pattern);
1908:             1962: 
1909:             $replaced = preg_replace($pattern, $replace, $subject);1963:             $replaced = preg_replace($pattern, $replace, $subject);
1910:         }1964:         }
1911:         else1965:         else
1912:             $replaced = preg_replace(str_replace('\p{L}\p{N}', '\w', $pattern), $replace, $subject);1966:             $replaced = preg_replace(str_replace('\p{L}\p{N}', '\w', $pattern), $replace, $subject);
1913:     }1967:     }
1914:     1968: 
1915:     return $replaced;1969:     return $replaced;
1916: }1970: }
1917: 1971: 


a/include/parser.php b/include/parser.php
 76:  76: 
 77:     // If the message contains a code tag we have to split it up (text within [code][/code] shouldn't be touched) 77:     // If the message contains a code tag we have to split it up (text within [code][/code] shouldn't be touched)
 78:     if (strpos($text, '[code]') !== false && strpos($text, '[/code]') !== false) 78:     if (strpos($text, '[code]') !== false && strpos($text, '[/code]') !== false)
 79:     { 79:         list($inside, $text) = extract_blocks($text, '[code]', '[/code]', $errors);
 80:         list($inside, $outside) = split_text($text, '[code]', '[/code]', $errors); 
 81:         $text = implode("\1", $outside); 
 82:     } 
 83:  80: 
 84:     // Tidy up lists 81:     // Tidy up lists
 85:     $temp = preg_replace($re_list, 'preparse_list_tag(\'$2\', \'$1\', $errors)', $text); 82:     $temp = preg_replace($re_list, 'preparse_list_tag(\'$2\', \'$1\', $errors)', $text);
144: {141: {
145:     // If the message contains a code tag we have to split it up (empty tags within [code][/code] are fine)142:     // If the message contains a code tag we have to split it up (empty tags within [code][/code] are fine)
146:     if (strpos($text, '[code]') !== false && strpos($text, '[/code]') !== false)143:     if (strpos($text, '[code]') !== false && strpos($text, '[/code]') !== false)
147:     {144:         list($inside, $text) = extract_blocks($text, '[code]', '[/code]', $errors);
148:         list($inside, $outside) = split_text($text, '[code]', '[/code]', $errors); 
149:         $text = implode("\1", $outside); 
150:     } 
151: 145: 
152:     // Remove empty tags146:     // Remove empty tags
153:     while (($new_text = preg_replace('/\[(b|u|s|ins|del|em|i|h|colou?r|quote|img|url|email|list)(?:\=[^\]]*)?\]\s*\[\/\1\]/', '', $text)) !== NULL)147:     while (($new_text = preg_replace('%\[(b|u|s|ins|del|em|i|h|colou?r|quote|img|url|email|list|topic|post|forum|user)(?:\=[^\]]*)?\]\s*\[/\1\]%', '', $text)) !== NULL)
154:     {148:     {
155:         if ($new_text != $text)149:         if ($new_text != $text)
156:             $text = $new_text;150:             $text = $new_text;
159:     }153:     }
160: 154: 
161:     // If we split up the message before we have to concatenate it together again (code tags)155:     // If we split up the message before we have to concatenate it together again (code tags)
162:     if (isset($inside))156:     if (isset($inside)) {
163:     {157:         $parts = explode("\1", $text);
164:         $outside = explode("\1", $text);158:         $text = '';
165:         $text = '';159:         foreach ($parts as $i => $part)
166: 160:         {
167:         $num_tokens = count($outside);161:             $text .= $part;
168:         for ($i = 0; $i < $num_tokens; ++$i)162:             if (isset($inside[$i]))
169:         {163:                 $text .= '[code]'.$inside[$i].'[/code]';
170:             $text .= $outside[$i];164:         }
171:             if (isset($inside[$i]))165:     }
172:                 $text .= '[code]'.$inside[$i].'[/code]'; 
173:         } 
174:     } 
175: 166: 
176:     // Remove empty code tags167:     // Remove empty code tags
177:     while (($new_text = preg_replace('/\[(code)\]\s*\[\/\1\]/', '', $text)) !== NULL)168:     while (($new_text = preg_replace('%\[(code)\]\s*\[/\1\]%', '', $text)) !== NULL)
178:     {169:     {
179:         if ($new_text != $text)170:         if ($new_text != $text)
180:             $text = $new_text;171:             $text = $new_text;
196:     // Start off by making some arrays of bbcode tags and what we need to do with each one187:     // Start off by making some arrays of bbcode tags and what we need to do with each one
197: 188: 
198:     // List of all the tags189:     // List of all the tags
199:     $tags = array('quote', 'code', 'b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'url', 'email', 'img', 'list', '*', 'h');190:     $tags = array('quote', 'code', 'b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'url', 'email', 'img', 'list', '*', 'h', 'topic', 'post', 'forum', 'user');
200:     // List of tags that we need to check are open (You could not put b,i,u in here then illegal nesting like [b][i][/b][/i] would be allowed)191:     // List of tags that we need to check are open (You could not put b,i,u in here then illegal nesting like [b][i][/b][/i] would be allowed)
201:     $tags_opened = $tags;192:     $tags_opened = $tags;
202:     // and tags we need to check are closed (the same as above, added it just in case)193:     // and tags we need to check are closed (the same as above, added it just in case)
208:     // Block tags, block tags can only go within another block tag, they cannot be in a normal tag199:     // Block tags, block tags can only go within another block tag, they cannot be in a normal tag
209:     $tags_block = array('quote', 'code', 'list', 'h', '*');200:     $tags_block = array('quote', 'code', 'list', 'h', '*');
210:     // Inline tags, we do not allow new lines in these201:     // Inline tags, we do not allow new lines in these
211:     $tags_inline = array('b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'h');202:     $tags_inline = array('b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'h', 'topic', 'post', 'forum', 'user');
212:     // Tags we trim interior space203:     // Tags we trim interior space
213:     $tags_trim = array('img');204:     $tags_trim = array('img');
214:     // Tags we remove quotes from the argument205:     // Tags we remove quotes from the argument
215:     $tags_quotes = array('url', 'email', 'img');206:     $tags_quotes = array('url', 'email', 'img', 'topic', 'post', 'forum', 'user');
216:     // Tags we limit bbcode in207:     // Tags we limit bbcode in
217:     $tags_limit_bbcode = array(208:     $tags_limit_bbcode = array(
218:         '*'     => array('b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'url', 'email', 'list', 'img', 'code'),209:         '*'     => array('b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'url', 'email', 'list', 'img', 'code', 'topic', 'post', 'forum', 'user'),
219:         'list'     => array('*'),210:         'list'     => array('*'),
220:         'url'     => array('b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'img'),211:         'url'     => array('img'),
221:         'email' => array('b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'img'),212:         'email' => array('img'),
 213:         'topic' => array('img'),
 214:         'post'  => array('img'),
 215:         'forum' => array('img'),
 216:         'user'  => array('img'),
222:         'img'     => array(),217:         'img'     => array(),
223:         'h'        => array('b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'url', 'email'),218:         'h'        => array('b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'url', 'email', 'topic', 'post', 'forum', 'user'),
224:     );219:     );
225:     // Tags we can automatically fix bad nesting220:     // Tags we can automatically fix bad nesting
226:     $tags_fix = array('quote', 'b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'url', 'email', 'h');221:     $tags_fix = array('quote', 'b', 'i', 'u', 's', 'ins', 'del', 'em', 'color', 'colour', 'url', 'email', 'h', 'topic', 'post', 'forum', 'user');
227: 222: 
228:     $split_text = preg_split("/(\[[\*a-zA-Z0-9-\/]*?(?:=.*?)?\])/", $text, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);223:     $split_text = preg_split('%(\[[\*a-zA-Z0-9-/]*?(?:=.*?)?\])%', $text, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
229: 224: 
230:     $open_tags = array('post');225:     $open_tags = array('fluxbb-bbcode');
231:     $open_args = array('');226:     $open_args = array('');
232:     $opened_tag = 0;227:     $opened_tag = 0;
233:     $new_text = '';228:     $new_text = '';
235:     $current_nest = '';230:     $current_nest = '';
236:     $current_depth = array();231:     $current_depth = array();
237:     $limit_bbcode = $tags;232:     $limit_bbcode = $tags;
 233:     $count_ignored = array();
238: 234: 
239:     foreach ($split_text as $current)235:     foreach ($split_text as $current)
240:     {236:     {
245:         if (substr($current, 0, 1) != '[' || substr($current, -1, 1) != ']')241:         if (substr($current, 0, 1) != '[' || substr($current, -1, 1) != ']')
246:         {242:         {
247:             // It's not a bbcode tag so we put it on the end and continue243:             // It's not a bbcode tag so we put it on the end and continue
248:  
249:             // If we are nested too deeply don't add to the end244:             // If we are nested too deeply don't add to the end
250:             if ($current_nest)245:             if ($current_nest)
251:                 continue;246:                 continue;
255:             if (in_array($open_tags[$opened_tag], $tags_inline) && strpos($current, "\n") !== false)250:             if (in_array($open_tags[$opened_tag], $tags_inline) && strpos($current, "\n") !== false)
256:             {251:             {
257:                 // Deal with new lines252:                 // Deal with new lines
258:                 $split_current = preg_split("/(\n\n+)/", $current, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);253:                 $split_current = preg_split('%(\n\n+)%', $current, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
259:                 $current = '';254:                 $current = '';
260: 255: 
261:                 if (!pun_trim($split_current[0], "\n")) // The first part is a linebreak so we need to handle any open tags first256:                 if (!pun_trim($split_current[0], "\n")) // The first part is a linebreak so we need to handle any open tags first
357:             $current = strtolower($current);352:             $current = strtolower($current);
358: 353: 
359:         // This is if we are currently in a tag which escapes other bbcode such as code354:         // This is if we are currently in a tag which escapes other bbcode such as code
 355:         // We keep a cound of ignored bbcodes (code tags) so we can nest them, but
 356:         // only balanced sets of tags can be nested
360:         if ($current_ignore)357:         if ($current_ignore)
361:         {358:         {
 359:             // Increase the current ignored tags counter
 360:             if ('['.$current_ignore.']' == $current)
 361:             {
 362:                 if (!isset($count_ignored[$current_tag]))
 363:                     $count_ignored[$current_tag] = 2;
 364:                 else
 365:                     $count_ignored[$current_tag]++;
 366:             }
 367: 
 368:             // Decrease the current ignored tags counter
362:             if ('[/'.$current_ignore.']' == $current)369:             if ('[/'.$current_ignore.']' == $current)
 370:                 $count_ignored[$current_tag]--;
 371: 
 372:             if ('[/'.$current_ignore.']' == $current && $count_ignored[$current_tag] == 0)
363:             {373:             {
364:                 // We've finished the ignored section374:                 // We've finished the ignored section
365:                 $current = '[/'.$current_tag.']';375:                 $current = '[/'.$current_tag.']';
366:                 $current_ignore = '';376:                 $current_ignore = '';
 377:                 $count_ignored = array();
367:             }378:             }
368: 379: 
369:             $new_text .= $current;380:             $new_text .= $current;
398:         if (substr($current, 1, 1) == '/')409:         if (substr($current, 1, 1) == '/')
399:         {410:         {
400:             // This is if we are closing a tag411:             // This is if we are closing a tag
401:  
402:             if ($opened_tag == 0 || !in_array($current_tag, $open_tags))412:             if ($opened_tag == 0 || !in_array($current_tag, $open_tags))
403:             {413:             {
404:                 // We tried to close a tag which is not open414:                 // We tried to close a tag which is not open
552:             // Remove quotes from arguments for certain tags562:             // Remove quotes from arguments for certain tags
553:             if (strpos($current, '=') !== false && in_array($current_tag, $tags_quotes))563:             if (strpos($current, '=') !== false && in_array($current_tag, $tags_quotes))
554:             {564:             {
555:                 $current = preg_replace('#\['.$current_tag.'=("|\'|)(.*?)\\1\]\s*#i', '['.$current_tag.'=$2]', $current);565:                 $current = preg_replace('%\['.$current_tag.'=("|\'|)(.*?)\\1\]\s*%i', '['.$current_tag.'=$2]', $current);
556:             }566:             }
557: 567: 
558:             if (in_array($current_tag, array_keys($tags_limit_bbcode)))568:             if (in_array($current_tag, array_keys($tags_limit_bbcode)))
627:         $full_url = 'http://'.$full_url;637:         $full_url = 'http://'.$full_url;
628:     else if (strpos($url, 'ftp.') === 0) // Else if it starts with ftp, we add ftp://638:     else if (strpos($url, 'ftp.') === 0) // Else if it starts with ftp, we add ftp://
629:         $full_url = 'ftp://'.$full_url;639:         $full_url = 'ftp://'.$full_url;
 640:     else if (strpos($url, '/') === 0) // Allow for relative URLs that start with a slash
 641:         $full_url = get_base_url(true).$full_url;
630:     else if (!preg_match('#^([a-z0-9]{3,6})://#', $url)) // Else if it doesn't start with abcdef://, we add http://642:     else if (!preg_match('#^([a-z0-9]{3,6})://#', $url)) // Else if it doesn't start with abcdef://, we add http://
631:         $full_url = 'http://'.$full_url;643:         $full_url = 'http://'.$full_url;
632: 644: 
713: 725: 
714:     if (strpos($text, '[quote') !== false)726:     if (strpos($text, '[quote') !== false)
715:     {727:     {
716:         $text = preg_replace('#\[quote\]\s*#', '</p><div class="quotebox"><blockquote><div><p>', $text);728:         $text = preg_replace('%\[quote\]\s*%', '</p><div class="quotebox"><blockquote><div><p>', $text);
717:         $text = preg_replace('#\[quote=(&quot;|&\#039;|"|\'|)(.*?)\\1\]#se', '"</p><div class=\"quotebox\"><cite>".str_replace(array(\'[\', \'\\"\'), array(\'&#91;\', \'"\'), \'$2\')." ".$lang_common[\'wrote\']."</cite><blockquote><div><p>"', $text);729:         $text = preg_replace('%\[quote=(&quot;|&\#039;|"|\'|)(.*?)\\1\]%se', '"</p><div class=\"quotebox\"><cite>".str_replace(array(\'[\', \'\\"\'), array(\'&#91;\', \'"\'), \'$2\')." ".$lang_common[\'wrote\']."</cite><blockquote><div><p>"', $text);
718:         $text = preg_replace('#\s*\[\/quote\]#S', '</p></div></blockquote></div><p>', $text);730:         $text = preg_replace('%\s*\[\/quote\]%S', '</p></div></blockquote></div><p>', $text);
719:     }731:     }
720: 732: 
721:     if (!$is_signature)733:     if (!$is_signature)
724:         $replace[] = 'handle_list_tag(\'$2\', \'$1\')';736:         $replace[] = 'handle_list_tag(\'$2\', \'$1\')';
725:     }737:     }
726: 738: 
727:     $pattern[] = '#\[b\](.*?)\[/b\]#ms';739:     $pattern[] = '%\[b\](.*?)\[/b\]%ms';
728:     $pattern[] = '#\[i\](.*?)\[/i\]#ms';740:     $pattern[] = '%\[i\](.*?)\[/i\]%ms';
729:     $pattern[] = '#\[u\](.*?)\[/u\]#ms';741:     $pattern[] = '%\[u\](.*?)\[/u\]%ms';
730:     $pattern[] = '#\[s\](.*?)\[/s\]#ms';742:     $pattern[] = '%\[s\](.*?)\[/s\]%ms';
731:     $pattern[] = '#\[del\](.*?)\[/del\]#ms';743:     $pattern[] = '%\[del\](.*?)\[/del\]%ms';
732:     $pattern[] = '#\[ins\](.*?)\[/ins\]#ms';744:     $pattern[] = '%\[ins\](.*?)\[/ins\]%ms';
733:     $pattern[] = '#\[em\](.*?)\[/em\]#ms';745:     $pattern[] = '%\[em\](.*?)\[/em\]%ms';
734:     $pattern[] = '#\[colou?r=([a-zA-Z]{3,20}|\#[0-9a-fA-F]{6}|\#[0-9a-fA-F]{3})](.*?)\[/colou?r\]#ms';746:     $pattern[] = '%\[colou?r=([a-zA-Z]{3,20}|\#[0-9a-fA-F]{6}|\#[0-9a-fA-F]{3})](.*?)\[/colou?r\]%ms';
735:     $pattern[] = '#\[h\](.*?)\[/h\]#ms';747:     $pattern[] = '%\[h\](.*?)\[/h\]%ms';
736: 748: 
737:     $replace[] = '<strong>$1</strong>';749:     $replace[] = '<strong>$1</strong>';
738:     $replace[] = '<em>$1</em>';750:     $replace[] = '<em>$1</em>';
746: 758: 
747:     if (($is_signature && $pun_config['p_sig_img_tag'] == '1') || (!$is_signature && $pun_config['p_message_img_tag'] == '1'))759:     if (($is_signature && $pun_config['p_sig_img_tag'] == '1') || (!$is_signature && $pun_config['p_message_img_tag'] == '1'))
748:     {760:     {
749:         $pattern[] = '#\[img\]((ht|f)tps?://)([^\s<"]*?)\[/img\]#e';761:         $pattern[] = '%\[img\]((ht|f)tps?://)([^\s<"]*?)\[/img\]%e';
750:         $pattern[] = '#\[img=([^\[]*?)\]((ht|f)tps?://)([^\s<"]*?)\[/img\]#e';762:         $pattern[] = '%\[img=([^\[]*?)\]((ht|f)tps?://)([^\s<"]*?)\[/img\]%e';
751:         if ($is_signature)763:         if ($is_signature)
752:         {764:         {
753:             $replace[] = 'handle_img_tag(\'$1$3\', true)';765:             $replace[] = 'handle_img_tag(\'$1$3\', true)';
760:         }772:         }
761:     }773:     }
762: 774: 
763:     $pattern[] = '#\[url\]([^\[]*?)\[/url\]#e';775:     $pattern[] = '%\[url\]([^\[]*?)\[/url\]%e';
764:     $pattern[] = '#\[url=([^\[]+?)\](.*?)\[/url\]#e';776:     $pattern[] = '%\[url=([^\[]+?)\](.*?)\[/url\]%e';
765:     $pattern[] = '#\[email\]([^\[]*?)\[/email\]#';777:     $pattern[] = '%\[email\]([^\[]*?)\[/email\]%';
766:     $pattern[] = '#\[email=([^\[]+?)\](.*?)\[/email\]#';778:     $pattern[] = '%\[email=([^\[]+?)\](.*?)\[/email\]%';
 779:     $pattern[] = '%\[topic\]([^\[]*?)\[/topic\]%e';
 780:     $pattern[] = '%\[topic=([^\[]+?)\](.*?)\[/topic\]%e';
 781:     $pattern[] = '%\[post\]([^\[]*?)\[/post\]%e';
 782:     $pattern[] = '%\[post=([^\[]+?)\](.*?)\[/post\]%e';
 783:     $pattern[] = '%\[forum\]([^\[]*?)\[/forum\]%e';
 784:     $pattern[] = '%\[forum=([^\[]+?)\](.*?)\[/forum\]%e';
 785:     $pattern[] = '%\[user\]([^\[]*?)\[/user\]%e';
 786:     $pattern[] = '%\[user=([^\[]+?)\](.*?)\[/user\]%e';
767: 787: 
768:     $replace[] = 'handle_url_tag(\'$1\')';788:     $replace[] = 'handle_url_tag(\'$1\')';
769:     $replace[] = 'handle_url_tag(\'$1\', \'$2\')';789:     $replace[] = 'handle_url_tag(\'$1\', \'$2\')';
770:     $replace[] = '<a href="mailto:$1">$1</a>';790:     $replace[] = '<a href="mailto:$1">$1</a>';
771:     $replace[] = '<a href="mailto:$1">$2</a>';791:     $replace[] = '<a href="mailto:$1">$2</a>';
 792:     $replace[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?id=$1\')';
 793:     $replace[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?id=$1\', \'$2\')';
 794:     $replace[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?pid=$1#p$1\')';
 795:     $replace[] = 'handle_url_tag(\''.get_base_url(true).'/viewtopic.php?pid=$1#p$1\', \'$2\')';
 796:     $replace[] = 'handle_url_tag(\''.get_base_url(true).'/viewforum.php?id=$1\')';
 797:     $replace[] = 'handle_url_tag(\''.get_base_url(true).'/viewforum.php?id=$1\', \'$2\')';
 798:     $replace[] = 'handle_url_tag(\''.get_base_url(true).'/profile.php?id=$1\')';
 799:     $replace[] = 'handle_url_tag(\''.get_base_url(true).'/profile.php?id=$1\', \'$2\')';
772: 800: 
773:     // This thing takes a while! :)801:     // This thing takes a while! :)
774:     $text = preg_replace($pattern, $replace, $text);802:     $text = preg_replace($pattern, $replace, $text);
784: {812: {
785:     $text = ' '.$text;813:     $text = ' '.$text;
786: 814: 
787:     $text = ucp_preg_replace('#(?<=[\s\]\)])(<)?(\[)?(\()?([\'"]?)(https?|ftp|news){1}://([\p{L}\p{N}\-]+\.([\p{L}\p{N}\-]+\.)*[\p{L}\p{N}]+(:[0-9]+)?(/[^\s\[]*[^\s.,?!\[;:-])?)\4(?(3)(\)))(?(2)(\]))(?(1)(>))(?![^\s]*\[/(?:url|img)\])#uie', 'stripslashes(\'$1$2$3$4\').handle_url_tag(\'$5://$6\', \'$5://$6\', true).stripslashes(\'$4$10$11$12\')', $text);815:     $text = ucp_preg_replace('%(?<=[\s\]\)])(<)?(\[)?(\()?([\'"]?)(https?|ftp|news){1}://([\p{L}\p{N}\-]+\.([\p{L}\p{N}\-]+\.)*[\p{L}\p{N}]+(:[0-9]+)?(/[^\s\[]*[^\s.,?!\[;:-])?)\4(?(3)(\)))(?(2)(\]))(?(1)(>))(?![^\s]*\[/(?:url|img)\])%uie', 'stripslashes(\'$1$2$3$4\').handle_url_tag(\'$5://$6\', \'$5://$6\', true).stripslashes(\'$4$10$11$12\')', $text);
788:     $text = ucp_preg_replace('#(?<=[\s\]\)])(<)?(\[)?(\()?([\'"]?)(www|ftp)\.(([\p{L}\p{N}\-]+\.)*[\p{L}\p{N}]+(:[0-9]+)?(/[^\s\[]*[^\s.,?!\[;:-])?)\4(?(3)(\)))(?(2)(\]))(?(1)(>))(?![^\s]*\[/(?:url|img)\])#uie', 'stripslashes(\'$1$2$3$4\').handle_url_tag(\'$5.$6\', \'$5.$6\', true).stripslashes(\'$4$10$11$12\')', $text);816:     $text = ucp_preg_replace('%(?<=[\s\]\)])(<)?(\[)?(\()?([\'"]?)(www|ftp)\.(([\p{L}\p{N}\-]+\.)*[\p{L}\p{N}]+(:[0-9]+)?(/[^\s\[]*[^\s.,?!\[;:-])?)\4(?(3)(\)))(?(2)(\]))(?(1)(>))(?![^\s]*\[/(?:url|img)\])%uie', 'stripslashes(\'$1$2$3$4\').handle_url_tag(\'$5.$6\', \'$5.$6\', true).stripslashes(\'$4$10$11$12\')', $text);
789: 817: 
790:     return substr($text, 1);818:     return substr($text, 1);
791: }819: }
803:     foreach ($smilies as $smiley_text => $smiley_img)831:     foreach ($smilies as $smiley_text => $smiley_img)
804:     {832:     {
805:         if (strpos($text, $smiley_text) !== false)833:         if (strpos($text, $smiley_text) !== false)
806:             $text = ucp_preg_replace('#(?<=[>\s])'.preg_quote($smiley_text, '#').'(?=[^\p{L}\p{N}])#um', '<img src="'.pun_htmlspecialchars(get_base_url(true).'/img/smilies/'.$smiley_img).'" width="15" height="15" alt="'.substr($smiley_img, 0, strrpos($smiley_img, '.')).'" />', $text);834:             $text = ucp_preg_replace('%(?<=[>\s])'.preg_quote($smiley_text, '%').'(?=[^\p{L}\p{N}])%um', '<img src="'.pun_htmlspecialchars(get_base_url(true).'/img/smilies/'.$smiley_img).'" width="15" height="15" alt="'.substr($smiley_img, 0, strrpos($smiley_img, '.')).'" />', $text);
807:     }835:     }
808: 836: 
809:     return substr($text, 1, -1);837:     return substr($text, 1, -1);
825: 853: 
826:     // If the message contains a code tag we have to split it up (text within [code][/code] shouldn't be touched)854:     // If the message contains a code tag we have to split it up (text within [code][/code] shouldn't be touched)
827:     if (strpos($text, '[code]') !== false && strpos($text, '[/code]') !== false)855:     if (strpos($text, '[code]') !== false && strpos($text, '[/code]') !== false)
828:     {856:         list($inside, $text) = extract_blocks($text, '[code]', '[/code]', $errors);
829:         list($inside, $outside) = split_text($text, '[code]', '[/code]', $errors); 
830:         $text = implode("\1", $outside); 
831:     } 
832: 857: 
833:     if ($pun_config['p_message_bbcode'] == '1' && strpos($text, '[') !== false && strpos($text, ']') !== false)858:     if ($pun_config['p_message_bbcode'] == '1' && strpos($text, '[') !== false && strpos($text, ']') !== false)
834:         $text = do_bbcode($text);859:         $text = do_bbcode($text);
842:     $text = str_replace($pattern, $replace, $text);867:     $text = str_replace($pattern, $replace, $text);
843: 868: 
844:     // If we split up the message before we have to concatenate it together again (code tags)869:     // If we split up the message before we have to concatenate it together again (code tags)
845:     if (isset($inside))870:     if (isset($inside)) {
846:     {871:         $parts = explode("\1", $text);
847:         $outside = explode("\1", $text);872:         $text = '';
848:         $text = '';873:         foreach ($parts as $i => $part)
849: 874:         {
850:         $num_tokens = count($outside);875:             $text .= $part;
851: 876:             if (isset($inside[$i]))
852:         for ($i = 0; $i < $num_tokens; ++$i)877:             {
853:         {878:                 $num_lines = (substr_count($inside[$i], "\n"));
854:             $text .= $outside[$i];879:                 $text .= '</p><div class="codebox"><pre'.(($num_lines > 28) ? ' class="vscroll"' : '').'><code>'.pun_trim($inside[$i], "\n\r").'</code></pre></div><p>';
855:             if (isset($inside[$i]))880:             }
856:             //    $text .= '</p><div class="codebox"><pre><code>'.pun_trim($inside[$i], "\n\r").'</code></pre></div><p>';881:         }
857:             {882:     }
858:                 $num_lines = (substr_count($inside[$i], "\n")); 
859:                 $text .= '</p><div class="codebox"><pre'.(($num_lines > 28) ? ' class="vscroll"' : '').'><code>'.pun_trim($inside[$i], "\n\r").'</code></pre></div><p>'; 
860:             } 
861:         } 
862:     } 
863: 883: 
864:     // Add paragraph tag around post, but make sure there are no empty paragraphs884:     // Add paragraph tag around post, but make sure there are no empty paragraphs
865:     $text = preg_replace('#<br />\s*?<br />((\s*<br />)*)#i', "</p>$1<p>", $text);885:     $text = preg_replace('%<br />\s*?<br />((\s*<br />)*)%i', "</p>$1<p>", $text);
866:     $text = str_replace('<p><br />', '<p>', $text);886:     $text = str_replace('<p><br />', '<p>', $text);
867:     $text = str_replace('<p></p>', '', '<p>'.$text.'</p>');887:     $text = str_replace('<p></p>', '', '<p>'.$text.'</p>');
868: 888: 
896:     $text = str_replace($pattern, $replace, $text);916:     $text = str_replace($pattern, $replace, $text);
897: 917: 
898:     // Add paragraph tag around post, but make sure there are no empty paragraphs918:     // Add paragraph tag around post, but make sure there are no empty paragraphs
899:     $text = preg_replace('#<br />\s*?<br />((\s*<br />)*)#i', "</p>$1<p>", $text);919:     $text = preg_replace('%<br />\s*?<br />((\s*<br />)*)%i', "</p>$1<p>", $text);
900:     $text = str_replace('<p><br />', '<p>', $text);920:     $text = str_replace('<p><br />', '<p>', $text);
901:     $text = str_replace('<p></p>', '', '<p>'.$text.'</p>');921:     $text = str_replace('<p></p>', '', '<p>'.$text.'</p>');
902: 922: 


a/include/search_idx.php b/include/search_idx.php
 48: function split_words($text, $idx) 48: function split_words($text, $idx)
 49: { 49: {
 50:     // Remove BBCode 50:     // Remove BBCode
 51:     $text = preg_replace('/\[\/?(b|u|s|ins|del|em|i|h|colou?r|quote|code|img|url|email|list)(?:\=[^\]]*)?\]/', ' ', $text); 51:     $text = preg_replace('%\[/?(b|u|s|ins|del|em|i|h|colou?r|quote|code|img|url|email|list)(?:\=[^\]]*)?\]%', ' ', $text);
 52:  52: 
 53:     // Remove any apostrophes or dashes which aren't part of words 53:     // Remove any apostrophes or dashes which aren't part of words
 54:     $text = substr(ucp_preg_replace('/((?<=[^\p{L}\p{N}])[\'\-]|[\'\-](?=[^\p{L}\p{N}]))/u', '', ' '.$text.' '), 1, -1); 54:     $text = substr(ucp_preg_replace('%((?<=[^\p{L}\p{N}])[\'\-]|[\'\-](?=[^\p{L}\p{N}]))%u', '', ' '.$text.' '), 1, -1);
 55:  55: 
 56:     // Remove punctuation and symbols (actually anything that isn't a letter or number), allow apostrophes and dashes (and % * if we aren't indexing) 56:     // Remove punctuation and symbols (actually anything that isn't a letter or number), allow apostrophes and dashes (and % * if we aren't indexing)
 57:     $text = ucp_preg_replace('/(?![\'\-'.($idx ? '' : '%\*').'])[^\p{L}\p{N}]+/u', ' ', $text); 57:     $text = ucp_preg_replace('%(?![\'\-'.($idx ? '' : '\%\*').'])[^\p{L}\p{N}]+%u', ' ', $text);
 58:  58: 
 59:     // Replace multiple whitespace or dashes 59:     // Replace multiple whitespace or dashes
 60:     $text = preg_replace('/(\s){2,}/u', '\1', $text); 60:     $text = preg_replace('%(\s){2,}%u', '\1', $text);
 61:  61: 
 62:     // Fill an array with all the words 62:     // Fill an array with all the words
 63:     $words = array_unique(explode(' ', $text)); 63:     $words = array_unique(explode(' ', $text));
128: //128: //
129: function is_cjk($word)129: function is_cjk($word)
130: {130: {
131:     return preg_match('/^'.PUN_CJK_HANGUL_REGEX.'+$/u', $word) ? true : false;131:     return preg_match('%^'.PUN_CJK_HANGUL_REGEX.'+$%u', $word) ? true : false;
132: }132: }
133: 133: 
134: 134: 
142:     if (!isset($patterns))142:     if (!isset($patterns))
143:     {143:     {
144:         $patterns = array(144:         $patterns = array(
145:             '%\[img=([^\]]*+)\][^[]*+\[/img\]%'                                    =>    '$1',    // Keep the alt description145:             '%\[img=([^\]]*+)\]([^[]*+)\[/img\]%'                                    =>    '$2 $1',    // Keep the url and description
146:             '%\[(url|email)=[^\]]*+\]([^[]*+(?:(?!\[/\1\])\[[^[]*+)*)\[/\1\]%' =>    '$2',    // Keep the text146:             '%\[(url|email)=([^\]]*+)\]([^[]*+(?:(?!\[/\1\])\[[^[]*+)*)\[/\1\]%'    =>    '$2 $3',    // Keep the url and text
147:             '%\[(img|url|email)\]([^[]*+(?:(?!\[/\1\])\[[^[]*+)*)\[/\1\]%'        =>    '',        // Remove the whole thing147:             '%\[(img|url|email)\]([^[]*+(?:(?!\[/\1\])\[[^[]*+)*)\[/\1\]%'            =>    '$2',        // Keep the url
148:         );148:         );
149:     }149:     }
150: 150: 


/dev/null b/include/user/index.html
   1: <html><head><title>.</title></head><body>.</body></html>


a/install.php b/install.php
  7:  */  7:  */
  8:   8: 
  9: // The FluxBB version this script installs  9: // The FluxBB version this script installs
 10: define('FORUM_VERSION', '1.4.5'); 10: define('FORUM_VERSION', '1.4.6');
 11:  11: 
 12: define('FORUM_DB_REVISION', 11); 12: define('FORUM_DB_REVISION', 15);
 13: define('FORUM_SI_REVISION', 2); 13: define('FORUM_SI_REVISION', 2);
 14: define('FORUM_PARSER_REVISION', 2); 14: define('FORUM_PARSER_REVISION', 2);
 15:  15: 
 22:  22: 
 23: define('PUN_ROOT', dirname(__FILE__).'/'); 23: define('PUN_ROOT', dirname(__FILE__).'/');
 24:  24: 
 25: // If we've been passed a default language, use it 
 26: $install_lang = isset($_REQUEST['install_lang']) ? trim($_REQUEST['install_lang']) : 'English'; 
 27:  
 28: // If such a language pack doesn't exist, or isn't up-to-date enough to translate this page, default to English 
 29: if (!file_exists(PUN_ROOT.'lang/'.$install_lang.'/install.php')) 
 30:     $install_lang = 'English'; 
 31:  
 32: require PUN_ROOT.'lang/'.$install_lang.'/install.php'; 
 33:  
 34: if (file_exists(PUN_ROOT.'config.php')) 
 35: { 
 36:     // Check to see whether FluxBB is already installed 
 37:     include PUN_ROOT.'config.php'; 
 38:  
 39:     // If we have the 1.3-legacy constant defined, define the proper 1.4 constant so we don't get an incorrect "need to install" message 
 40:     if (defined('FORUM')) 
 41:         define('PUN', FORUM); 
 42:  
 43:     // If PUN is defined, config.php is probably valid and thus the software is installed 
 44:     if (defined('PUN')) 
 45:         exit($lang_install['Already installed']); 
 46: } 
 47:  
 48: // Define PUN because email.php requires it 
 49: define('PUN', 1); 
 50:  
 51: // If the cache directory is not specified, we use the default setting 
 52: if (!defined('FORUM_CACHE_DIR')) 
 53:     define('FORUM_CACHE_DIR', PUN_ROOT.'cache/'); 
 54:  
 55: // Make sure we are running at least MIN_PHP_VERSION 
 56: if (!function_exists('version_compare') || version_compare(PHP_VERSION, MIN_PHP_VERSION, '<')) 
 57:     exit(sprintf($lang_install['You are running error'], 'PHP', PHP_VERSION, FORUM_VERSION, MIN_PHP_VERSION)); 
 58:  
 59: // Load the functions script 25: // Load the functions script
 60: require PUN_ROOT.'include/functions.php'; 26: require PUN_ROOT.'include/functions.php';
 61:  27: 
 95: // Turn off PHP time limit 61: // Turn off PHP time limit
 96: @set_time_limit(0); 62: @set_time_limit(0);
 97:  63: 
  64: 
  65: // If we've been passed a default language, use it
  66: $install_lang = isset($_REQUEST['install_lang']) ? trim($_REQUEST['install_lang']) : 'English';
  67: 
  68: // If such a language pack doesn't exist, or isn't up-to-date enough to translate this page, default to English
  69: if (!file_exists(PUN_ROOT.'lang/'.$install_lang.'/install.php'))
  70:     $install_lang = 'English';
  71: 
  72: require PUN_ROOT.'lang/'.$install_lang.'/install.php';
  73: 
  74: if (file_exists(PUN_ROOT.'config.php'))
  75: {
  76:     // Check to see whether FluxBB is already installed
  77:     include PUN_ROOT.'config.php';
  78: 
  79:     // If we have the 1.3-legacy constant defined, define the proper 1.4 constant so we don't get an incorrect "need to install" message
  80:     if (defined('FORUM'))
  81:         define('PUN', FORUM);
  82: 
  83:     // If PUN is defined, config.php is probably valid and thus the software is installed
  84:     if (defined('PUN'))
  85:         exit($lang_install['Already installed']);
  86: }
  87: 
  88: // Define PUN because email.php requires it
  89: define('PUN', 1);
  90: 
  91: // If the cache directory is not specified, we use the default setting
  92: if (!defined('FORUM_CACHE_DIR'))
  93:     define('FORUM_CACHE_DIR', PUN_ROOT.'cache/');
  94: 
  95: // Make sure we are running at least MIN_PHP_VERSION
  96: if (!function_exists('version_compare') || version_compare(PHP_VERSION, MIN_PHP_VERSION, '<'))
  97:     exit(sprintf($lang_install['You are running error'], 'PHP', PHP_VERSION, FORUM_VERSION, MIN_PHP_VERSION));
  98: 
  99: 
 98: //100: //
 99: // Generate output to be used for config.php101: // Generate output to be used for config.php
100: //102: //
129: {131: {
130:     // Make an educated guess regarding base_url132:     // Make an educated guess regarding base_url
131:     $base_url  = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';    // protocol133:     $base_url  = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';    // protocol
132:     $base_url .= preg_replace('/:(80|443)$/', '', $_SERVER['HTTP_HOST']);                            // host[:port]134:     $base_url .= preg_replace('%:(80|443)$%', '', $_SERVER['HTTP_HOST']);                            // host[:port]
133:     $base_url .= str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));                            // path135:     $base_url .= str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));                            // path
134: 136: 
135:     if (substr($base_url, -1) == '/')137:     if (substr($base_url, -1) == '/')
172:         $alerts[] = $lang_install['Username 2'];174:         $alerts[] = $lang_install['Username 2'];
173:     else if (!strcasecmp($username, 'Guest'))175:     else if (!strcasecmp($username, 'Guest'))
174:         $alerts[] = $lang_install['Username 3'];176:         $alerts[] = $lang_install['Username 3'];
175:     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))177:     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))
176:         $alerts[] = $lang_install['Username 4'];178:         $alerts[] = $lang_install['Username 4'];
177:     else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)179:     else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false)
178:         $alerts[] = $lang_install['Username 5'];180:         $alerts[] = $lang_install['Username 5'];
179:     else if (preg_match('/(?:\[\/?(?:b|u|i|h|colou?r|quote|code|img|url|email|list)\]|\[(?:code|quote|list)=)/i', $username))181:     else if (preg_match('%(?:\[/?(?:b|u|i|h|colou?r|quote|code|img|url|email|list)\]|\[(?:code|quote|list)=)%i', $username))
180:         $alerts[] = $lang_install['Username 6'];182:         $alerts[] = $lang_install['Username 6'];
181: 183: 
182:     if (pun_strlen($password1) < 4)184:     if (pun_strlen($password1) < 4)
286: /* ]]> */288: /* ]]> */
287: </script>289: </script>
288: </head>290: </head>
289: <body onload="document.getElementById('install').req_db_type.focus();document.getElementById('install').start.disabled=false;">291: <body onload="document.getElementById('install').req_db_type.focus();document.getElementById('install').start.disabled=false;" onunload="">
290: 292: 
291: <div id="puninstall" class="pun">293: <div id="puninstall" class="pun">
292: <div class="top-box"><div><!-- Top Corners --></div></div>294: <div class="top-box"><div><!-- Top Corners --></div></div>
579:     $db = new DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, false);581:     $db = new DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, false);
580: 582: 
581:     // Validate prefix583:     // Validate prefix
582:     if (strlen($db_prefix) > 0 && (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $db_prefix) || strlen($db_prefix) > 40))584:     if (strlen($db_prefix) > 0 && (!preg_match('%^[a-zA-Z_][a-zA-Z0-9_]*$%', $db_prefix) || strlen($db_prefix) > 40))
583:         error(sprintf($lang_install['Table prefix error'], $db->prefix));585:         error(sprintf($lang_install['Table prefix error'], $db->prefix));
584: 586: 
585:     // Do some DB type specific checks587:     // Do some DB type specific checks
945:                 'datatype'        => 'SMALLINT(6)',947:                 'datatype'        => 'SMALLINT(6)',
946:                 'allow_null'    => false,948:                 'allow_null'    => false,
947:                 'default'        => '60'949:                 'default'        => '60'
 950:             ),
 951:             'g_report_flood'            => array(
 952:                 'datatype'        => 'SMALLINT(6)',
 953:                 'allow_null'    => false,
 954:                 'default'        => '60'
948:             )955:             )
949:         ),956:         ),
950:         'PRIMARY KEY'    => array('g_id')957:         'PRIMARY KEY'    => array('g_id')
990:         'INDEXES'        => array(997:         'INDEXES'        => array(
991:             'ident_idx'        => array('ident'),998:             'ident_idx'        => array('ident'),
992:             'logged_idx'    => array('logged')999:             'logged_idx'    => array('logged')
993:         ),1000:         )
994:         'ENGINE'        => 'HEAP' 
995:     );1001:     );
996: 1002: 
997:     if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')1003:     if ($db_type == 'mysql' || $db_type == 'mysqli' || $db_type == 'mysql_innodb' || $db_type == 'mysqli_innodb')
1485:             'language'            => array(1491:             'language'            => array(
1486:                 'datatype'        => 'VARCHAR(25)',1492:                 'datatype'        => 'VARCHAR(25)',
1487:                 'allow_null'    => false,1493:                 'allow_null'    => false,
1488:                 'default'        => '\'English\''1494:                 'default'        => '\''.$db->escape($default_lang).'\''
1489:             ),1495:             ),
1490:             'style'                => array(1496:             'style'                => array(
1491:                 'datatype'        => 'VARCHAR(25)',1497:                 'datatype'        => 'VARCHAR(25)',
1509:                 'datatype'        => 'INT(10) UNSIGNED',1515:                 'datatype'        => 'INT(10) UNSIGNED',
1510:                 'allow_null'    => true1516:                 'allow_null'    => true
1511:             ),1517:             ),
 1518:             'last_report_sent'    => array(
 1519:                 'datatype'        => 'INT(10) UNSIGNED',
 1520:                 'allow_null'    => true
 1521:             ),
1512:             'registered'        => array(1522:             'registered'        => array(
1513:                 'datatype'        => 'INT(10) UNSIGNED',1523:                 'datatype'        => 'INT(10) UNSIGNED',
1514:                 'allow_null'    => false,1524:                 'allow_null'    => false,
1555:     $now = time();1565:     $now = time();
1556: 1566: 
1557:     // Insert the four preset groups1567:     // Insert the four preset groups
1558:     $db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'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_type != 'pgsql' ? '1, ' : '').'\''.$db->escape($lang_install['Administrators']).'\', \''.$db->escape($lang_install['Administrator']).'\', 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0)') or error('Unable to add group', __FILE__, __LINE__, $db->error());1568:     $db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'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_type != 'pgsql' ? '1, ' : '').'\''.$db->escape($lang_install['Administrators']).'\', \''.$db->escape($lang_install['Administrator']).'\', 0, 0, 0, 0, 0, 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());
1559: 1569: 
1560:     $db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'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_type != 'pgsql' ? '2, ' : '').'\''.$db->escape($lang_install['Moderators']).'\', \''.$db->escape($lang_install['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());1570:     $db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'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_type != 'pgsql' ? '2, ' : '').'\''.$db->escape($lang_install['Moderators']).'\', \''.$db->escape($lang_install['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());
1561: 1571: 
1562:     $db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'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_type != 'pgsql' ? '3, ' : '').'\''.$db->escape($lang_install['Guests']).'\', NULL, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 60, 30, 0)') or error('Unable to add group', __FILE__, __LINE__, $db->error());1572:     $db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'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_type != 'pgsql' ? '3, ' : '').'\''.$db->escape($lang_install['Guests']).'\', NULL, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 60, 30, 0, 0)') or error('Unable to add group', __FILE__, __LINE__, $db->error());
1563: 1573: 
1564:     $db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'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_type != 'pgsql' ? '4, ' : '').'\''.$db->escape($lang_install['Members']).'\', NULL, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 60, 30, 60)') or error('Unable to add group', __FILE__, __LINE__, $db->error());1574:     $db->query('INSERT INTO '.$db->prefix.'groups ('.($db_type != 'pgsql' ? 'g_id, ' : '').'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_type != 'pgsql' ? '4, ' : '').'\''.$db->escape($lang_install['Members']).'\', NULL, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 60, 30, 60, 60)') or error('Unable to add group', __FILE__, __LINE__, $db->error());
1565: 1575: 
1566:     // Insert guest and first admin user1576:     // Insert guest and first admin user
1567:     $db->query('INSERT INTO '.$db_prefix.'users (group_id, username, password, email) VALUES(3, \''.$db->escape($lang_install['Guest']).'\', \''.$db->escape($lang_install['Guest']).'\', \''.$db->escape($lang_install['Guest']).'\')')1577:     $db->query('INSERT INTO '.$db_prefix.'users (group_id, username, password, email) VALUES(3, \''.$db->escape($lang_install['Guest']).'\', \''.$db->escape($lang_install['Guest']).'\', \''.$db->escape($lang_install['Guest']).'\')')


a/lang/English/admin_groups.php b/lang/English/admin_groups.php
 26: 'Group delete head'                =>    'Group delete', 26: 'Group delete head'                =>    'Group delete',
 27: 'Confirm delete subhead'        =>    'Confirm delete group', 27: 'Confirm delete subhead'        =>    'Confirm delete group',
 28: 'Confirm delete info'            =>    'Are you sure that you want to delete the group <strong>%s</strong>?', 28: 'Confirm delete info'            =>    'Are you sure that you want to delete the group <strong>%s</strong>?',
 29: 'Confirm delete warn'            =>    'WARNING! After you deleted a group you can not restore it.', 29: 'Confirm delete warn'            =>    'WARNING! After you deleted a group you cannot restore it.',
 30: 'Delete group head'                =>    'Delete group', 30: 'Delete group head'                =>    'Delete group',
 31: 'Move users subhead'            =>    'Move users currently in group', 31: 'Move users subhead'            =>    'Move users currently in group',
 32: 'Move users info'                =>    'The group <strong>%s</strong> currently has <strong>%s</strong> members. Please select a group to which these members will be assigned upon deletion.', 32: 'Move users info'                =>    'The group <strong>%s</strong> currently has <strong>%s</strong> members. Please select a group to which these members will be assigned upon deletion.',
 77: 'Search flood help'                =>    'Number of seconds that users in this group have to wait between searches. Set to 0 to disable.', 77: 'Search flood help'                =>    'Number of seconds that users in this group have to wait between searches. Set to 0 to disable.',
 78: 'E-mail flood label'            =>    'Email flood interval', 78: 'E-mail flood label'            =>    'Email flood interval',
 79: 'E-mail flood help'                =>    'Number of seconds that users in this group have to wait between emails. Set to 0 to disable.', 79: 'E-mail flood help'                =>    'Number of seconds that users in this group have to wait between emails. Set to 0 to disable.',
  80: 'Report flood label'            =>    'Report flood interval',
  81: 'Report flood help'                =>    'Number of seconds that users in this group have to wait between reports. Set to 0 to disable.',
 80: 'Moderator info'                =>    'Please note that in order for a user in this group to have moderator abilities, he/she must be assigned to moderate one or more forums. This is done via the user administration page of the user\'s profile.', 82: 'Moderator info'                =>    'Please note that in order for a user in this group to have moderator abilities, he/she must be assigned to moderate one or more forums. This is done via the user administration page of the user\'s profile.',
 81:  83: 
 82: ); 84: );


a/lang/English/admin_index.php b/lang/English/admin_index.php
 32: 'Show info'                            =>    'Show info', 32: 'Show info'                            =>    'Show info',
 33: 'Environment data version'            =>    'PHP: %s - %s', 33: 'Environment data version'            =>    'PHP: %s - %s',
 34: 'Environment data acc'                =>    'Accelerator: %s', 34: 'Environment data acc'                =>    'Accelerator: %s',
 35: 'Turck MMCache'                        =>    'Turk MMCache', 35: 'Turck MMCache'                        =>    'Turck MMCache',
 36: 'Turck MMCache link'                =>    'turck-mmcache.sourceforge.net', 36: 'Turck MMCache link'                =>    'turck-mmcache.sourceforge.net/',
 37: 'ionCube PHP Accelerator'            =>    'ionCube PHP Accelerator', 37: 'ionCube PHP Accelerator'            =>    'ionCube PHP Accelerator',
 38: 'ionCube PHP Accelerator link'        =>    'www.php-accelerator.co.uk/', 38: 'ionCube PHP Accelerator link'        =>    'www.php-accelerator.co.uk/',
 39: 'Alternative PHP Cache (APC)'        =>    'Alternative PHP Cache (APC)', 39: 'Alternative PHP Cache (APC)'        =>    'Alternative PHP Cache (APC)',
 40: 'Alternative PHP Cache (APC) link'    =>    'www.php.net/apc/', 40: 'Alternative PHP Cache (APC) link'    =>    'www.php.net/apc/',
 41: 'Zend Optimizer'                    =>    'Zend Optimizer', 41: 'Zend Optimizer'                    =>    'Zend Optimizer',
 42: 'Zend Optimizer link'                =>    'www.zend.com/products/guard/zend-optimizer', 42: 'Zend Optimizer link'                =>    'www.zend.com/products/guard/zend-optimizer/',
 43: 'eAccelerator'                        =>    'eAccelerator', 43: 'eAccelerator'                        =>    'eAccelerator',
 44: 'eAccelerator link'                    =>    'www.eaccelerator.net/', 44: 'eAccelerator link'                    =>    'www.eaccelerator.net/',
 45: 'XCache'                            =>    'XCache', 45: 'XCache'                            =>    'XCache',


a/lang/English/admin_users.php b/lang/English/admin_users.php
 58: 'Last post after label'        =>    'Last post is after', 58: 'Last post after label'        =>    'Last post is after',
 59: 'Date help'                    =>    '(yyyy-mm-dd hh:mm:ss)', 59: 'Date help'                    =>    '(yyyy-mm-dd hh:mm:ss)',
 60: 'Last post before label'    =>    'Last post is before', 60: 'Last post before label'    =>    'Last post is before',
  61: 'Last visit after label'    =>    'Last visit is after',
  62: 'Last visit before label'    =>    'Last visit is before',
 61: 'Registered after label'    =>    'Registered after', 63: 'Registered after label'    =>    'Registered after',
 62: 'Registered before label'    =>    'Registered before', 64: 'Registered before label'    =>    'Registered before',
 63: 'Order by label'            =>    'Order by', 65: 'Order by label'            =>    'Order by',
 65: 'Order by e-mail'            =>    'Email', 67: 'Order by e-mail'            =>    'Email',
 66: 'Order by posts'            =>    'Number of posts', 68: 'Order by posts'            =>    'Number of posts',
 67: 'Order by last post'        =>    'Last post', 69: 'Order by last post'        =>    'Last post',
  70: 'Order by last visit'        =>    'Last visit',
 68: 'Order by registered'        =>    'Registered', 71: 'Order by registered'        =>    'Registered',
 69: 'Ascending'                    =>    'Ascending', 72: 'Ascending'                    =>    'Ascending',
 70: 'Descending'                =>    'Descending', 73: 'Descending'                =>    'Descending',


a/lang/English/common.php b/lang/English/common.php
 64: 'and'                                =>    'and', 64: 'and'                                =>    'and',
 65: 'Image link'                        =>    'image', // This is displayed (i.e. <image>) instead of images when "Show images" is disabled in the profile 65: 'Image link'                        =>    'image', // This is displayed (i.e. <image>) instead of images when "Show images" is disabled in the profile
 66: 'wrote'                                =>    'wrote:', // For [quote]'s 66: 'wrote'                                =>    'wrote:', // For [quote]'s
 67: 'Mailer'                            =>    'Mailer', // As in "MyForums Mailer" in the signature of outgoing emails 67: 'Mailer'                            =>    '%s Mailer', // As in "MyForums Mailer" in the signature of outgoing emails
 68: 'Important information'                =>    'Important information', 68: 'Important information'                =>    'Important information',
 69: 'Write message legend'                =>    'Write your message and submit', 69: 'Write message legend'                =>    'Write your message and submit',
 70: 'Previous'                            =>    'Previous', 70: 'Previous'                            =>    'Previous',
 71: 'Next'                                =>    'Next', 71: 'Next'                                =>    'Next',
 72: 'Forum index'                        =>    'Forum index', 
 73: 'Spacer'                            =>    '…', // Ellipsis for paginate 72: 'Spacer'                            =>    '…', // Ellipsis for paginate
 74:  73: 
 75: // Title 74: // Title
137: 'Query'                                =>    'Query',136: 'Query'                                =>    'Query',
138: 'Total query time'                    =>    'Total query time: %s',137: 'Total query time'                    =>    'Total query time: %s',
139: 138: 
140: // Email related notifications 
141: 'New user notification'                =>    'Alert - New registration', 
142: 'New user message'                    =>    'User \'%s\' registered in the forums at %s', 
143: 'Banned email notification'            =>    'Alert - Banned email detected', 
144: 'Banned email register message'        =>    'User \'%s\' registered with banned email address: %s', 
145: 'Banned email change message'        =>    'User \'%s\' changed to banned email address: %s', 
146: 'Banned email post message'            =>    'User \'%s\' posted with banned email address: %s', 
147: 'Duplicate email notification'        =>    'Alert - Duplicate email detected', 
148: 'Duplicate email register message'    =>    'User \'%s\' registered with an email address that also belongs to: %s', 
149: 'Duplicate email change message'    =>    'User \'%s\' changed to an email address that also belongs to: %s', 
150: 'Report notification'                =>    'Report(%d) - \'%s\'', 
151: 'Report message 1'                    =>    'User \'%s\' has reported the following message: %s', 
152: 'Report message 2'                    =>    'Reason: %s', 
153:  
154: 'User profile'                        =>    'User profile: %s', 
155: 'Post URL'                            =>    'Post URL: %s', 
156: 'Email signature'                    =>    'Forum Mailer'."\n".'(Do not reply to this message)', 
157:  
158: // For extern.php RSS feed139: // For extern.php RSS feed
159: 'RSS description'                    =>    'The most recent topics at %s.',140: 'RSS description'                    =>    'The most recent topics at %s.',
160: 'RSS description topic'                =>    'The most recent posts in %s.',141: 'RSS description topic'                =>    'The most recent posts in %s.',
170: 'New reports'                        =>    'There are new reports',151: 'New reports'                        =>    'There are new reports',
171: 'Maintenance mode enabled'            =>    'Maintenance mode is enabled!',152: 'Maintenance mode enabled'            =>    'Maintenance mode is enabled!',
172: 153: 
 154: // Units for file sizes
 155: 'Size unit B'                        =>    '%s B',
 156: 'Size unit KiB'                        =>    '%s KiB',
 157: 'Size unit MiB'                        =>    '%s MiB',
 158: 'Size unit GiB'                        =>    '%s GiB',
 159: 'Size unit TiB'                        =>    '%s TiB',
 160: 'Size unit PiB'                        =>    '%s PiB',
 161: 'Size unit EiB'                        =>    '%s EiB',
 162: 
173: );163: );


a/lang/English/help.php b/lang/English/help.php
 25:  25: 
 26: 'Links and images'        =>    'Links and images', 26: 'Links and images'        =>    'Links and images',
 27: 'Links info'            =>    'You can create links to other documents or to email addresses using the following tags:', 27: 'Links info'            =>    'You can create links to other documents or to email addresses using the following tags:',
  28: 'This help page'        =>    'This help page',
 28: 'My email address'        =>    'My email address', 29: 'My email address'        =>    'My email address',
 29: 'Images info'            =>    'If you want to display an image you can use the img tag. The text appearing after the "=" sign in the opening tag is used for the alt attribute and should be included whenever possible.', 30: 'Images info'            =>    'If you want to display an image you can use the img tag. The text appearing after the "=" sign in the opening tag is used for the alt attribute and should be included whenever possible.',
 30: 'FluxBB bbcode test'    =>    'FluxBB bbcode test', 31: 'FluxBB bbcode test'    =>    'FluxBB bbcode test',
 31:  32: 
  33: 'Test topic'            =>    'Test topic',
  34: 'Test post'                =>    'Test post',
  35: 'Test forum'            =>    'Test forum',
  36: 'Test user'                =>    'Test user',
  37: 
 32: 'Quotes'                =>    'Quotes', 38: 'Quotes'                =>    'Quotes',
 33: 'Quotes info'            =>    'If you want to quote someone, you should use the quote tag.', 39: 'Quotes info'            =>    'If you want to quote someone, you should use the quote tag.',
 34: 'Quotes info 2'            =>    'If you don\'t want to quote anyone in particular, you can use the quote tag without specifying a name.', 40: 'Quotes info 2'            =>    'If you don\'t want to quote anyone in particular, you can use the quote tag without specifying a name.',


a/lang/English/mail_templates/activate_email.tpl b/lang/English/mail_templates/activate_email.tpl
  8: <activation_url>  8: <activation_url>
  9:   9: 
 10: -- 10: --
 11: <board_mailer> 11: <board_mailer> Mailer
 12: (Do not reply to this message) 12: (Do not reply to this message)


a/lang/English/mail_templates/activate_password.tpl b/lang/English/mail_templates/activate_password.tpl
 10: <activation_url> 10: <activation_url>
 11:  11: 
 12: -- 12: --
 13: <board_mailer> 13: <board_mailer> Mailer
 14: (Do not reply to this message) 14: (Do not reply to this message)


/dev/null b/lang/English/mail_templates/banned_email_change.tpl
   1: Subject: Alert - Banned email detected
   2: 
   3: User '<username>' changed to banned email address: <email>
   4: 
   5: User profile: <profile_url>
   6: 
   7: --
   8: <board_mailer> Mailer
   9: (Do not reply to this message)


/dev/null b/lang/English/mail_templates/banned_email_post.tpl
   1: Subject: Alert - Banned email detected
   2: 
   3: User '<username>' posted with banned email address: <email>
   4: 
   5: Post URL: <post_url>
   6: 
   7: --
   8: <board_mailer> Mailer
   9: (Do not reply to this message)


/dev/null b/lang/English/mail_templates/banned_email_register.tpl
   1: Subject: Alert - Banned email detected
   2: 
   3: User '<username>' registered with banned email address: <email>
   4: 
   5: User profile: <profile_url>
   6: 
   7: --
   8: <board_mailer> Mailer
   9: (Do not reply to this message)


/dev/null b/lang/English/mail_templates/dupe_email_change.tpl
   1: Subject: Alert - Duplicate email detected
   2: 
   3: User '<username>' changed to an email address that also belongs to: <dupe_list>
   4: 
   5: User profile: <profile_url>
   6: 
   7: --
   8: <board_mailer> Mailer
   9: (Do not reply to this message)


/dev/null b/lang/English/mail_templates/dupe_email_register.tpl
   1: Subject: Alert - Duplicate email detected
   2: 
   3: User '<username>' registered with an email address that also belongs to: <dupe_list>
   4: 
   5: User profile: <profile_url>
   6: 
   7: --
   8: <board_mailer> Mailer
   9: (Do not reply to this message)


a/lang/English/mail_templates/form_email.tpl b/lang/English/mail_templates/form_email.tpl
 10: ----------------------------------------------------------------------- 10: -----------------------------------------------------------------------
 11:  11: 
 12: -- 12: --


a/lang/English/mail_templates/new_reply.tpl b/lang/English/mail_templates/new_reply.tpl
  7: You can unsubscribe by going to <unsubscribe_url>  7: You can unsubscribe by going to <unsubscribe_url>
  8:   8: 
  9: --  9: --
 10: <board_mailer> 10: <board_mailer> Mailer
 11: (Do not reply to this message) 11: (Do not reply to this message)


a/lang/English/mail_templates/new_reply_full.tpl b/lang/English/mail_templates/new_reply_full.tpl
 14: You can unsubscribe by going to <unsubscribe_url> 14: You can unsubscribe by going to <unsubscribe_url>
 15:  15: 
 16: -- 16: --
 17: <board_mailer> 17: <board_mailer> Mailer
 18: (Do not reply to this message) 18: (Do not reply to this message)


/dev/null b/lang/English/mail_templates/new_report.tpl
   1: Subject: Report(<forum_id>) - '<topic_subject>'
   2: 
   3: User '<username>' has reported the following message: <post_url>
   4: 
   5: Reason: <reason>
   6: 
   7: --
   8: <board_mailer> Mailer
   9: (Do not reply to this message)


a/lang/English/mail_templates/new_topic.tpl b/lang/English/mail_templates/new_topic.tpl
  7: You can unsubscribe by going to <unsubscribe_url>  7: You can unsubscribe by going to <unsubscribe_url>
  8:   8: 
  9: --  9: --
 10: <board_mailer> 10: <board_mailer> Mailer
 11: (Do not reply to this message) 11: (Do not reply to this message)


a/lang/English/mail_templates/new_topic_full.tpl b/lang/English/mail_templates/new_topic_full.tpl
 14: You can unsubscribe by going to <unsubscribe_url> 14: You can unsubscribe by going to <unsubscribe_url>
 15:  15: 
 16: -- 16: --
 17: <board_mailer> 17: <board_mailer> Mailer
 18: (Do not reply to this message) 18: (Do not reply to this message)


/dev/null b/lang/English/mail_templates/new_user.tpl
   1: Subject: Alert - New registration
   2: 
   3: User '<username>' registered in the forums at <base_url>
   4: 
   5: User profile: <profile_url>
   6: 
   7: --
   8: <board_mailer> Mailer
   9: (Do not reply to this message)


a/lang/English/mail_templates/rename.tpl b/lang/English/mail_templates/rename.tpl
  8: We apologise for any inconvenience caused.  8: We apologise for any inconvenience caused.
  9:   9: 
 10: -- 10: --
 11: <board_mailer> 11: <board_mailer> Mailer
 12: (Do not reply to this message) 12: (Do not reply to this message)


a/lang/English/mail_templates/welcome.tpl b/lang/English/mail_templates/welcome.tpl
  8: Login at <login_url> to activate the account.  8: Login at <login_url> to activate the account.
  9:   9: 
 10: -- 10: --
 11: <board_mailer> 11: <board_mailer> Mailer
 12: (Do not reply to this message) 12: (Do not reply to this message)


a/lang/English/profile.php b/lang/English/profile.php
 81: 'Realname'                        =>    'Real name', 81: 'Realname'                        =>    'Real name',
 82: 'Location'                        =>    'Location', 82: 'Location'                        =>    'Location',
 83: 'Website'                        =>    'Website', 83: 'Website'                        =>    'Website',
  84: 'Invalid website URL'                    =>    'The website URL you entered is invalid.',
 84: 'Jabber'                        =>    'Jabber', 85: 'Jabber'                        =>    'Jabber',
 85: 'ICQ'                            =>    'ICQ', 86: 'ICQ'                            =>    'ICQ',
 86: 'MSN'                            =>    'MSN Messenger', 87: 'MSN'                            =>    'MSN Messenger',


a/lang/English/search.php b/lang/English/search.php
 14: 'Author search'                        =>    'Author search', 14: 'Author search'                        =>    'Author search',
 15: 'Search in legend'                    =>    'Select where to search', 15: 'Search in legend'                    =>    'Select where to search',
 16: 'Search in info'                    =>    'Choose in which forum you would like to search and if you want to search in topic subjects, message text or both.', 16: 'Search in info'                    =>    'Choose in which forum you would like to search and if you want to search in topic subjects, message text or both.',
  17: 'Search multiple forums info'        =>    'If no forums are selected, all forums will be searched.',
 17: 'Forum search'                        =>    'Forum', 18: 'Forum search'                        =>    'Forum',
 18: 'All forums'                        =>    'All forums', 19: 'All forums'                        =>    'All forums',
 19: 'Search in'                            =>    'Search in', 20: 'Search in'                            =>    'Search in',
 35: 'Show as posts'                        =>    'Posts', 36: 'Show as posts'                        =>    'Posts',
 36:  37: 
 37: // Results 38: // Results
  39: 'Search'                            =>    'Search',
 38: 'Search results'                    =>    'Search results', 40: 'Search results'                    =>    'Search results',
 39: 'Search topics'                        =>    'Search topics', 
 40: 'Search posts'                        =>    'Search posts', 
 41: 'Quick search show_new'                =>    'New', 41: 'Quick search show_new'                =>    'New',
 42: 'Quick search show_recent'            =>    'Active', 42: 'Quick search show_recent'            =>    'Active',
 43: 'Quick search show_unanswered'        =>    'Unanswered', 43: 'Quick search show_unanswered'        =>    'Unanswered',
 44: 'Quick search show_replies'            =>    'Posted', 44: 'Quick search show_replies'            =>    'Posted',
 45: 'Quick search show_user_topics'        =>    'By %s', 45: 'Quick search show_user_topics'        =>    'Topics by %s',
 46: 'Quick search show_user_posts'        =>    'By %s', 46: 'Quick search show_user_posts'        =>    'Posts by %s',
 47: 'Quick search show_subscriptions'    =>    'Subscribed by %s', 47: 'Quick search show_subscriptions'    =>    'Subscribed by %s',
 48: 'By keywords show as topics'        =>    'With posts with keywords \'%s\'', 48: 'By keywords show as topics'        =>    'Topics with posts containing \'%s\'',
 49: 'By keywords show as posts'            =>    'With keywords \'%s\'', 49: 'By keywords show as posts'            =>    'Posts containing \'%s\'',
 50: 'By user show as topics'            =>    'With posts by %s', 50: 'By user show as topics'            =>    'Topics with posts by %s',
 51: 'By user show as posts'                =>    'By %s', 51: 'By user show as posts'                =>    'Posts by %s',
 52: 'By both show as topics'            =>    'With keywords \'%s\' in posts by %s', 52: 'By both show as topics'            =>    'Topics with posts containing \'%s\', by %s',
 53: 'By both show as posts'                =>    'With keywords \'%s\' by %s', 53: 'By both show as posts'                =>    'Posts containing \'%s\', by %s',
 54: 'No terms'                            =>    'You have to enter at least one keyword and/or an author to search for.', 54: 'No terms'                            =>    'You have to enter at least one keyword and/or an author to search for.',
 55: 'No hits'                            =>    'Your search returned no hits.', 55: 'No hits'                            =>    'Your search returned no hits.',
 56: 'No user posts'                        =>    'There are no posts by this user in this forum.', 56: 'No user posts'                        =>    'There are no posts by this user in this forum.',


a/lang/English/update.php b/lang/English/update.php
 12: 'Database password info'        =>    'To perform the database update please enter the database password with which FluxBB was installed. If you cannot remember, this is stored in your \'config.php\' file.', 12: 'Database password info'        =>    'To perform the database update please enter the database password with which FluxBB was installed. If you cannot remember, this is stored in your \'config.php\' file.',
 13: 'Database password note'        =>    'If you are running SQLite (and hence have no database password) please use the database file name instead. This must exactly match the database file name given in your configuration file.', 13: 'Database password note'        =>    'If you are running SQLite (and hence have no database password) please use the database file name instead. This must exactly match the database file name given in your configuration file.',
 14: 'Database password'                =>    'Database password', 14: 'Database password'                =>    'Database password',
  15: 'Maintenance'                    =>    'Maintenance',
  16: 'Maintenance message info'        =>    'The message that will be displayed to users during the updating process. This text will not be parsed like regular posts and thus may contain HTML.',
  17: 'Maintenance message'            =>    'Maintenance message',
 15: 'Next'                            =>    'Next', 18: 'Next'                            =>    'Next',
 16:  19: 
 17: 'You are running error'            =>    'You are running %1$s version %2$s. FluxBB %3$s requires at least %1$s %4$s to run properly. You must upgrade your %1$s installation before you can continue.', 20: 'You are running error'            =>    'You are running %1$s version %2$s. FluxBB %3$s requires at least %1$s %4$s to run properly. You must upgrade your %1$s installation before you can continue.',
 70: 'Username BBCode error'            =>    'Usernames may not contain any of the text formatting tags (BBCode) that the forum uses. Please choose another username.', 73: 'Username BBCode error'            =>    'Usernames may not contain any of the text formatting tags (BBCode) that the forum uses. Please choose another username.',
 71: 'Username duplicate error'        =>    'Someone is already registered with the username %s. The username you entered is too similar. The username must differ from that by at least one alphanumerical character (a-z or 0-9). Please choose a different username.', 74: 'Username duplicate error'        =>    'Someone is already registered with the username %s. The username you entered is too similar. The username must differ from that by at least one alphanumerical character (a-z or 0-9). Please choose a different username.',
 72:  75: 
 73: 'JavaScript disabled'            =>    'JavaScript seems to be disabled. %s.', 
 74: 'Click here to continue'        =>    'Click here to continue', 
 75: 'Required field'                =>    'is a required field in this form.' 
 76:  
 77: ); 76: );


a/login.php b/login.php
143: 143: 
144:                 // Do the generic replacements first (they apply to all emails sent out here)144:                 // Do the generic replacements first (they apply to all emails sent out here)
145:                 $mail_message = str_replace('<base_url>', get_base_url().'/', $mail_message);145:                 $mail_message = str_replace('<base_url>', get_base_url().'/', $mail_message);
146:                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);146:                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
147: 147: 
148:                 // Loop through users we found148:                 // Loop through users we found
149:                 while ($cur_hit = $db->fetch_assoc($result))149:                 while ($cur_hit = $db->fetch_assoc($result))
251:     if (!isset($valid['path']))251:     if (!isset($valid['path']))
252:         $valid['path'] = '';252:         $valid['path'] = '';
253: 253: 
254:     if ($referrer['host'] == $valid['host'] && preg_match('#^'.preg_quote($valid['path']).'/(.*?)\.php#i', $referrer['path']))254:     if ($referrer['host'] == $valid['host'] && preg_match('%^'.preg_quote($valid['path'], '%').'/(.*?)\.php%i', $referrer['path']))
255:         $redirect_url = $_SERVER['HTTP_REFERER'];255:         $redirect_url = $_SERVER['HTTP_REFERER'];
256: }256: }
257: 257: 
283:                         </div>283:                         </div>
284: 284: 
285:                         <p class="clearb"><?php echo $lang_login['Login info'] ?></p>285:                         <p class="clearb"><?php echo $lang_login['Login info'] ?></p>
286:                         <p class="actions"><span><a href="register.php" tabindex="4"><?php echo $lang_login['Not registered'] ?></a></span> <span><a href="login.php?action=forget" tabindex="5"><?php echo $lang_login['Forgotten pass'] ?></a></span></p>286:                         <p class="actions"><span><a href="register.php" tabindex="5"><?php echo $lang_login['Not registered'] ?></a></span> <span><a href="login.php?action=forget" tabindex="6"><?php echo $lang_login['Forgotten pass'] ?></a></span></p>
287:                     </div>287:                     </div>
288:                 </fieldset>288:                 </fieldset>
289:             </div>289:             </div>
290:             <p class="buttons"><input type="submit" name="login" value="<?php echo $lang_common['Login'] ?>" tabindex="3" /></p>290:             <p class="buttons"><input type="submit" name="login" value="<?php echo $lang_common['Login'] ?>" tabindex="4" /></p>
291:         </form>291:         </form>
292:     </div>292:     </div>
293: </div>293: </div>


a/misc.php b/misc.php
125:         $mail_message = str_replace('<sender>', $pun_user['username'], $mail_message);125:         $mail_message = str_replace('<sender>', $pun_user['username'], $mail_message);
126:         $mail_message = str_replace('<board_title>', $pun_config['o_board_title'], $mail_message);126:         $mail_message = str_replace('<board_title>', $pun_config['o_board_title'], $mail_message);
127:         $mail_message = str_replace('<mail_message>', $message, $mail_message);127:         $mail_message = str_replace('<mail_message>', $message, $mail_message);
128:         $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);128:         $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
129: 129: 
130:         require_once PUN_ROOT.'include/email.php';130:         require_once PUN_ROOT.'include/email.php';
131: 131: 
150:         if (strpos($valid['host'], 'www.') === 0)150:         if (strpos($valid['host'], 'www.') === 0)
151:             $valid['host'] = substr($valid['host'], 4);151:             $valid['host'] = substr($valid['host'], 4);
152: 152: 
153:         if ($referrer['host'] == $valid['host'] && preg_match('#^'.preg_quote($valid['path']).'/(.*?)\.php#i', $referrer['path']))153:         if ($referrer['host'] == $valid['host'] && preg_match('%^'.preg_quote($valid['path'], '%').'/(.*?)\.php%i', $referrer['path']))
154:             $redirect_url = $_SERVER['HTTP_REFERER'];154:             $redirect_url = $_SERVER['HTTP_REFERER'];
155:     }155:     }
156: 156: 
210:         else if (strlen($reason) > 65535) // TEXT field can only hold 65535 bytes210:         else if (strlen($reason) > 65535) // TEXT field can only hold 65535 bytes
211:             message($lang_misc['Reason too long']);211:             message($lang_misc['Reason too long']);
212: 212: 
213:         if ($pun_user['last_email_sent'] != '' && (time() - $pun_user['last_email_sent']) < $pun_user['g_email_flood'] && (time() - $pun_user['last_email_sent']) >= 0)213:         if ($pun_user['last_report_sent'] != '' && (time() - $pun_user['last_report_sent']) < $pun_user['g_report_flood'] && (time() - $pun_user['last_report_sent']) >= 0)
214:             message(sprintf($lang_misc['Report flood'], $pun_user['g_email_flood']));214:             message(sprintf($lang_misc['Report flood'], $pun_user['g_report_flood']));
215: 215: 
216:         // Get the topic ID216:         // Get the topic ID
217:         $result = $db->query('SELECT topic_id FROM '.$db->prefix.'posts WHERE id='.$post_id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());217:         $result = $db->query('SELECT topic_id FROM '.$db->prefix.'posts WHERE id='.$post_id) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
237:             // We send it to the complete mailing-list in one swoop237:             // We send it to the complete mailing-list in one swoop
238:             if ($pun_config['o_mailing_list'] != '')238:             if ($pun_config['o_mailing_list'] != '')
239:             {239:             {
240:                 $mail_subject = sprintf($lang_common['Report notification'], $forum_id, $subject);240:                 // Load the "new report" template
241:                 $mail_message = sprintf($lang_common['Report message 1'], $pun_user['username'], get_base_url().'/viewtopic.php?pid='.$post_id.'#p'.$post_id)."\n";241:                 $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/new_report.tpl'));
242:                 $mail_message .= sprintf($lang_common['Report message 2'], $reason)."\n";242: 
243:                 $mail_message .= "\n".'--'."\n".$lang_common['Email signature'];243:                 // The first row contains the subject
 244:                 $first_crlf = strpos($mail_tpl, "\n");
 245:                 $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
 246:                 $mail_message = trim(substr($mail_tpl, $first_crlf));
 247: 
 248:                 $mail_subject = str_replace('<forum_id>', $forum_id, $mail_subject);
 249:                 $mail_subject = str_replace('<topic_subject>', $subject, $mail_subject);
 250:                 $mail_message = str_replace('<username>', $pun_user['username'], $mail_message);
 251:                 $mail_message = str_replace('<post_url>', get_base_url().'/viewtopic.php?pid='.$post_id.'#p'.$post_id, $mail_message);
 252:                 $mail_message = str_replace('<reason>', $reason, $mail_message);
 253:                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
244: 254: 
245:                 require PUN_ROOT.'include/email.php';255:                 require PUN_ROOT.'include/email.php';
246: 256: 
248:             }258:             }
249:         }259:         }
250: 260: 
251:         $db->query('UPDATE '.$db->prefix.'users SET last_email_sent='.time().' WHERE id='.$pun_user['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());261:         $db->query('UPDATE '.$db->prefix.'users SET last_report_sent='.time().' WHERE id='.$pun_user['id']) or error('Unable to update user', __FILE__, __LINE__, $db->error());
252: 262: 
253:         redirect('viewtopic.php?pid='.$post_id.'#p'.$post_id, $lang_misc['Report redirect']);263:         redirect('viewtopic.php?pid='.$post_id.'#p'.$post_id, $lang_misc['Report redirect']);
254:     }264:     }


a/moderate.php b/moderate.php
 18:         message($lang_common['No permission']); 18:         message($lang_common['No permission']);
 19:  19: 
 20:     // Is get_host an IP address or a post ID? 20:     // Is get_host an IP address or a post ID?
 21:     if (@preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $_GET['get_host']) || @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}:))$/', $_GET['get_host'])) 21:     if (@preg_match('%^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$%', $_GET['get_host']) || @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}:))$%', $_GET['get_host']))
 22:         $ip = $_GET['get_host']; 22:         $ip = $_GET['get_host'];
 23:     else 23:     else
 24:     { 24:     {
 86:         { 86:         {
 87:             confirm_referrer('moderate.php'); 87:             confirm_referrer('moderate.php');
 88:  88: 
 89:             if (@preg_match('/[^0-9,]/', $posts)) 89:             if (@preg_match('%[^0-9,]%', $posts))
 90:                 message($lang_common['Bad request']); 90:                 message($lang_common['Bad request']);
 91:  91: 
 92:             // Verify that the post IDs are valid 92:             // Verify that the post IDs are valid
153:         {153:         {
154:             confirm_referrer('moderate.php');154:             confirm_referrer('moderate.php');
155: 155: 
156:             if (@preg_match('/[^0-9,]/', $posts))156:             if (@preg_match('%[^0-9,]%', $posts))
157:                 message($lang_common['Bad request']);157:                 message($lang_common['Bad request']);
158: 158: 
159:             $move_to_forum = isset($_POST['move_to_forum']) ? intval($_POST['move_to_forum']) : 0;159:             $move_to_forum = isset($_POST['move_to_forum']) ? intval($_POST['move_to_forum']) : 0;
420:     {420:     {
421:         confirm_referrer('moderate.php');421:         confirm_referrer('moderate.php');
422: 422: 
423:         if (@preg_match('/[^0-9,]/', $_POST['topics']))423:         if (@preg_match('%[^0-9,]%', $_POST['topics']))
424:             message($lang_common['Bad request']);424:             message($lang_common['Bad request']);
425: 425: 
426:         $topics = explode(',', $_POST['topics']);426:         $topics = explode(',', $_POST['topics']);
548:     {548:     {
549:         confirm_referrer('moderate.php');549:         confirm_referrer('moderate.php');
550: 550: 
551:         if (@preg_match('/[^0-9,]/', $_POST['topics']))551:         if (@preg_match('%[^0-9,]%', $_POST['topics']))
552:             message($lang_common['Bad request']);552:             message($lang_common['Bad request']);
553: 553: 
554:         $topics = explode(',', $_POST['topics']);554:         $topics = explode(',', $_POST['topics']);
555:         if (count($topics) < 2)555:         if (count($topics) < 2)
556:             message($lang_misc['Not enough topics selected']);556:             message($lang_misc['Not enough topics selected']);
557: 557: 
558:         // Verify that the topic IDs are valid (moved topics can not be merged?)558:         // Verify that the topic IDs are valid (redirect links will point to the merged topic after the merge)
559:         // $result = $db->query('SELECT 1 FROM '.$db->prefix.'topics WHERE id IN('.implode(',', $topics).') AND moved_to IS NULL AND forum_id='.$fid) or error('Unable to check topics', __FILE__, __LINE__, $db->error());559:         $result = $db->query('SELECT id FROM '.$db->prefix.'topics WHERE id IN('.implode(',', $topics).') AND forum_id='.$fid.' ORDER BY id ASC') or error('Unable to check topics', __FILE__, __LINE__, $db->error());
560:         $result = $db->query('SELECT 1 FROM '.$db->prefix.'topics WHERE id IN('.implode(',', $topics).') AND forum_id='.$fid) or error('Unable to check topics', __FILE__, __LINE__, $db->error()); 
561:         if ($db->num_rows($result) != count($topics))560:         if ($db->num_rows($result) != count($topics))
562:             message($lang_common['Bad request']);561:             message($lang_common['Bad request']);
563: 562: 
564:         // Fetch the topic that we're merging into563:         // The topic that we are merging into is the one with the smallest ID
565:         $result = $db->query('SELECT MIN(t.id) FROM '.$db->prefix.'topics AS t WHERE t.id IN('.implode(',', $topics).')') or error('Unable to get topic', __FILE__, __LINE__, $db->error()); 
566:         $merge_to_tid = $db->result($result);564:         $merge_to_tid = $db->result($result);
567: 565: 
568:         // Make any redirect topics point to our new, merged topic566:         // Make any redirect topics point to our new, merged topic
644:     {642:     {
645:         confirm_referrer('moderate.php');643:         confirm_referrer('moderate.php');
646: 644: 
647:         if (@preg_match('/[^0-9,]/', $topics))645:         if (@preg_match('%[^0-9,]%', $topics))
648:             message($lang_common['Bad request']);646:             message($lang_common['Bad request']);
649: 647: 
650:         require PUN_ROOT.'include/search_idx.php';648:         require PUN_ROOT.'include/search_idx.php';


a/post.php b/post.php
 59: // Did someone just hit "Submit" or "Preview"? 59: // Did someone just hit "Submit" or "Preview"?
 60: if (isset($_POST['form_sent'])) 60: if (isset($_POST['form_sent']))
 61: { 61: {
 62:     // Make sure form_user is correct 
 63:     if (($pun_user['is_guest'] && $_POST['form_user'] != 'Guest') || (!$pun_user['is_guest'] && $_POST['form_user'] != $pun_user['username'])) 
 64:         message($lang_common['Bad request']); 
 65:  
 66:     // Flood protection 62:     // Flood protection
 67:     if (!isset($_POST['preview']) && $pun_user['last_post'] != '' && (time() - $pun_user['last_post']) < $pun_user['g_post_flood']) 63:     if (!isset($_POST['preview']) && $pun_user['last_post'] != '' && (time() - $pun_user['last_post']) < $pun_user['g_post_flood'])
 68:         $errors[] = $lang_post['Flood start'].' '.$pun_user['g_post_flood'].' '.$lang_post['flood end']; 64:         $errors[] = $lang_post['Flood start'].' '.$pun_user['g_post_flood'].' '.$lang_post['flood end'];
 96:     { 92:     {
 97:         $username = pun_trim($_POST['req_username']); 93:         $username = pun_trim($_POST['req_username']);
 98:         $email = strtolower(trim(($pun_config['p_force_guest_email'] == '1') ? $_POST['req_email'] : $_POST['email'])); 94:         $email = strtolower(trim(($pun_config['p_force_guest_email'] == '1') ? $_POST['req_email'] : $_POST['email']));
  95:         $banned_email = false;
 99:  96: 
100:         // Load the register.php/profile.php language files 97:         // Load the register.php/prof_reg.php language files
101:         require PUN_ROOT.'lang/'.$pun_user['language'].'/prof_reg.php'; 98:         require PUN_ROOT.'lang/'.$pun_user['language'].'/prof_reg.php';
102:         require PUN_ROOT.'lang/'.$pun_user['language'].'/register.php'; 99:         require PUN_ROOT.'lang/'.$pun_user['language'].'/register.php';
103: 100: 
119: 116: 
120:                 $banned_email = true; // Used later when we send an alert email117:                 $banned_email = true; // Used later when we send an alert email
121:             }118:             }
122:             else 
123:                 $banned_email = false; 
124:         }119:         }
125:     }120:     }
126: 121: 
188:             else183:             else
189:             {184:             {
190:                 // It's a guest. Insert the new post185:                 // It's a guest. Insert the new post
191:                 $email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$email.'\'' : 'NULL';186:                 $email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$db->escape($email).'\'' : 'NULL';
192:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.get_remote_address().'\', '.$email_sql.', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());187:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.get_remote_address().'\', '.$email_sql.', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
193:                 $new_pid = $db->insert_id();188:                 $new_pid = $db->insert_id();
194:             }189:             }
219: 214: 
220:                     $notification_emails = array();215:                     $notification_emails = array();
221: 216: 
 217:                     if ($pun_config['o_censoring'] == '1')
 218:                         $cleaned_message = bbcode2email($censored_message, -1);
 219:                     else
 220:                         $cleaned_message = bbcode2email($message, -1);
 221: 
222:                     // Loop through subscribed users and send emails222:                     // Loop through subscribed users and send emails
223:                     while ($cur_subscriber = $db->fetch_assoc($result))223:                     while ($cur_subscriber = $db->fetch_assoc($result))
224:                     {224:                     {
247:                                 $mail_message = str_replace('<replier>', $username, $mail_message);247:                                 $mail_message = str_replace('<replier>', $username, $mail_message);
248:                                 $mail_message = str_replace('<post_url>', get_base_url().'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message);248:                                 $mail_message = str_replace('<post_url>', get_base_url().'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message);
249:                                 $mail_message = str_replace('<unsubscribe_url>', get_base_url().'/misc.php?action=unsubscribe&tid='.$tid, $mail_message);249:                                 $mail_message = str_replace('<unsubscribe_url>', get_base_url().'/misc.php?action=unsubscribe&tid='.$tid, $mail_message);
250:                                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);250:                                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
251: 251: 
252:                                 $mail_subject_full = str_replace('<topic_subject>', $cur_posting['subject'], $mail_subject_full);252:                                 $mail_subject_full = str_replace('<topic_subject>', $cur_posting['subject'], $mail_subject_full);
253:                                 $mail_message_full = str_replace('<topic_subject>', $cur_posting['subject'], $mail_message_full);253:                                 $mail_message_full = str_replace('<topic_subject>', $cur_posting['subject'], $mail_message_full);
254:                                 $mail_message_full = str_replace('<replier>', $username, $mail_message_full);254:                                 $mail_message_full = str_replace('<replier>', $username, $mail_message_full);
255:                                 $mail_message_full = str_replace('<message>', $pun_config['o_censoring'] == '1' ? $censored_message : $message, $mail_message_full);255:                                 $mail_message_full = str_replace('<message>', $cleaned_message, $mail_message_full);
256:                                 $mail_message_full = str_replace('<post_url>', get_base_url().'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message_full);256:                                 $mail_message_full = str_replace('<post_url>', get_base_url().'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message_full);
257:                                 $mail_message_full = str_replace('<unsubscribe_url>', get_base_url().'/misc.php?action=unsubscribe&tid='.$tid, $mail_message_full);257:                                 $mail_message_full = str_replace('<unsubscribe_url>', get_base_url().'/misc.php?action=unsubscribe&tid='.$tid, $mail_message_full);
258:                                 $mail_message_full = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message_full);258:                                 $mail_message_full = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message_full);
259: 259: 
260:                                 $notification_emails[$cur_subscriber['language']][0] = $mail_subject;260:                                 $notification_emails[$cur_subscriber['language']][0] = $mail_subject;
261:                                 $notification_emails[$cur_subscriber['language']][1] = $mail_message;261:                                 $notification_emails[$cur_subscriber['language']][1] = $mail_message;
275:                                 pun_mail($cur_subscriber['email'], $notification_emails[$cur_subscriber['language']][2], $notification_emails[$cur_subscriber['language']][3]);275:                                 pun_mail($cur_subscriber['email'], $notification_emails[$cur_subscriber['language']][2], $notification_emails[$cur_subscriber['language']][3]);
276:                         }276:                         }
277:                     }277:                     }
 278: 
 279:                     unset($cleaned_message);
278:                 }280:                 }
279:             }281:             }
280:         }282:         }
297:             else299:             else
298:             {300:             {
299:                 // Create the post ("topic post")301:                 // Create the post ("topic post")
300:                 $email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$email.'\'' : 'NULL';302:                 $email_sql = ($pun_config['p_force_guest_email'] == '1' || $email != '') ? '\''.$db->escape($email).'\'' : 'NULL';
301:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.get_remote_address().'\', '.$email_sql.', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());303:                 $db->query('INSERT INTO '.$db->prefix.'posts (poster, poster_ip, poster_email, message, hide_smilies, posted, topic_id) VALUES(\''.$db->escape($username).'\', \''.get_remote_address().'\', '.$email_sql.', \''.$db->escape($message).'\', '.$hide_smilies.', '.$now.', '.$new_tid.')') or error('Unable to create post', __FILE__, __LINE__, $db->error());
302:             }304:             }
303:             $new_pid = $db->insert_id();305:             $new_pid = $db->insert_id();
320: 322: 
321:                     $notification_emails = array();323:                     $notification_emails = array();
322: 324: 
 325:                     if ($pun_config['o_censoring'] == '1')
 326:                         $cleaned_message = bbcode2email($censored_message, -1);
 327:                     else
 328:                         $cleaned_message = bbcode2email($message, -1);
 329: 
323:                     // Loop through subscribed users and send emails330:                     // Loop through subscribed users and send emails
324:                     while ($cur_subscriber = $db->fetch_assoc($result))331:                     while ($cur_subscriber = $db->fetch_assoc($result))
325:                     {332:                     {
349:                                 $mail_message = str_replace('<poster>', $username, $mail_message);356:                                 $mail_message = str_replace('<poster>', $username, $mail_message);
350:                                 $mail_message = str_replace('<topic_url>', get_base_url().'/viewtopic.php?id='.$new_tid, $mail_message);357:                                 $mail_message = str_replace('<topic_url>', get_base_url().'/viewtopic.php?id='.$new_tid, $mail_message);
351:                                 $mail_message = str_replace('<unsubscribe_url>', get_base_url().'/misc.php?action=unsubscribe&fid='.$cur_posting['id'], $mail_message);358:                                 $mail_message = str_replace('<unsubscribe_url>', get_base_url().'/misc.php?action=unsubscribe&fid='.$cur_posting['id'], $mail_message);
352:                                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);359:                                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
353: 360: 
354:                                 $mail_subject_full = str_replace('<forum_name>', $cur_posting['forum_name'], $mail_subject_full);361:                                 $mail_subject_full = str_replace('<forum_name>', $cur_posting['forum_name'], $mail_subject_full);
355:                                 $mail_message_full = str_replace('<topic_subject>', $pun_config['o_censoring'] == '1' ? $censored_subject : $subject, $mail_message_full);362:                                 $mail_message_full = str_replace('<topic_subject>', $pun_config['o_censoring'] == '1' ? $censored_subject : $subject, $mail_message_full);
356:                                 $mail_message_full = str_replace('<forum_name>', $cur_posting['forum_name'], $mail_message_full);363:                                 $mail_message_full = str_replace('<forum_name>', $cur_posting['forum_name'], $mail_message_full);
357:                                 $mail_message_full = str_replace('<poster>', $username, $mail_message_full);364:                                 $mail_message_full = str_replace('<poster>', $username, $mail_message_full);
358:                                 $mail_message_full = str_replace('<message>', $pun_config['o_censoring'] == '1' ? $censored_message : $message, $mail_message_full);365:                                 $mail_message_full = str_replace('<message>', $cleaned_message, $mail_message_full);
359:                                 $mail_message_full = str_replace('<topic_url>', get_base_url().'/viewtopic.php?id='.$new_tid, $mail_message_full);366:                                 $mail_message_full = str_replace('<topic_url>', get_base_url().'/viewtopic.php?id='.$new_tid, $mail_message_full);
360:                                 $mail_message_full = str_replace('<unsubscribe_url>', get_base_url().'/misc.php?action=unsubscribe&fid='.$cur_posting['id'], $mail_message_full);367:                                 $mail_message_full = str_replace('<unsubscribe_url>', get_base_url().'/misc.php?action=unsubscribe&fid='.$cur_posting['id'], $mail_message_full);
361:                                 $mail_message_full = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message_full);368:                                 $mail_message_full = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message_full);
362: 369: 
363:                                 $notification_emails[$cur_subscriber['language']][0] = $mail_subject;370:                                 $notification_emails[$cur_subscriber['language']][0] = $mail_subject;
364:                                 $notification_emails[$cur_subscriber['language']][1] = $mail_message;371:                                 $notification_emails[$cur_subscriber['language']][1] = $mail_message;
378:                                 pun_mail($cur_subscriber['email'], $notification_emails[$cur_subscriber['language']][2], $notification_emails[$cur_subscriber['language']][3]);385:                                 pun_mail($cur_subscriber['email'], $notification_emails[$cur_subscriber['language']][2], $notification_emails[$cur_subscriber['language']][3]);
379:                         }386:                         }
380:                     }387:                     }
 388: 
 389:                     unset($cleaned_message);
381:                 }390:                 }
382:             }391:             }
383:         }392:         }
385:         // If we previously found out that the email was banned394:         // If we previously found out that the email was banned
386:         if ($pun_user['is_guest'] && $banned_email && $pun_config['o_mailing_list'] != '')395:         if ($pun_user['is_guest'] && $banned_email && $pun_config['o_mailing_list'] != '')
387:         {396:         {
388:             $mail_subject = $lang_common['Banned email notification'];397:             // Load the "banned email post" template
389:             $mail_message = sprintf($lang_common['Banned email post message'], $username, $email)."\n";398:             $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/banned_email_post.tpl'));
390:             $mail_message .= sprintf($lang_common['Post URL'], get_base_url().'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid)."\n";399: 
391:             $mail_message .= "\n".'--'."\n".$lang_common['Email signature'];400:             // The first row contains the subject
 401:             $first_crlf = strpos($mail_tpl, "\n");
 402:             $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
 403:             $mail_message = trim(substr($mail_tpl, $first_crlf));
 404: 
 405:             $mail_message = str_replace('<username>', $username, $mail_message);
 406:             $mail_message = str_replace('<email>', $email, $mail_message);
 407:             $mail_message = str_replace('<post_url>', get_base_url().'/viewtopic.php?pid='.$new_pid.'#p'.$new_pid, $mail_message);
 408:             $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
392: 409: 
393:             pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);410:             pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
394:         }411:         }
596:                     <legend><?php echo $lang_common['Write message legend'] ?></legend>613:                     <legend><?php echo $lang_common['Write message legend'] ?></legend>
597:                     <div class="infldset txtarea">614:                     <div class="infldset txtarea">
598:                         <input type="hidden" name="form_sent" value="1" />615:                         <input type="hidden" name="form_sent" value="1" />
599:                         <input type="hidden" name="form_user" value="<?php echo (!$pun_user['is_guest']) ? pun_htmlspecialchars($pun_user['username']) : 'Guest'; ?>" /> 
600: <?php616: <?php
601: 617: 
602: if ($pun_user['is_guest'])618: if ($pun_user['is_guest'])


a/profile.php b/profile.php
210:                 message($lang_prof_reg['Banned email']);210:                 message($lang_prof_reg['Banned email']);
211:             else if ($pun_config['o_mailing_list'] != '')211:             else if ($pun_config['o_mailing_list'] != '')
212:             {212:             {
213:                 $mail_subject = $lang_common['Banned email notification'];213:                 // Load the "banned email change" template
214:                 $mail_message = sprintf($lang_common['Banned email change message'], $pun_user['username'], $new_email)."\n";214:                 $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/banned_email_change.tpl'));
215:                 $mail_message .= sprintf($lang_common['User profile'], get_base_url().'/profile.php?id='.$id)."\n";215: 
216:                 $mail_message .= "\n".'--'."\n".$lang_common['Email signature'];216:                 // The first row contains the subject
 217:                 $first_crlf = strpos($mail_tpl, "\n");
 218:                 $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
 219:                 $mail_message = trim(substr($mail_tpl, $first_crlf));
 220: 
 221:                 $mail_message = str_replace('<username>', $pun_user['username'], $mail_message);
 222:                 $mail_message = str_replace('<email>', $new_email, $mail_message);
 223:                 $mail_message = str_replace('<profile_url>', get_base_url().'/profile.php?id='.$id, $mail_message);
 224:                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
217: 225: 
218:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);226:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
219:             }227:             }
230:                 while ($cur_dupe = $db->fetch_assoc($result))238:                 while ($cur_dupe = $db->fetch_assoc($result))
231:                     $dupe_list[] = $cur_dupe['username'];239:                     $dupe_list[] = $cur_dupe['username'];
232: 240: 
233:                 $mail_subject = $lang_common['Duplicate email notification'];241:                 // Load the "dupe email change" template
234:                 $mail_message = sprintf($lang_common['Duplicate email change message'], $pun_user['username'], implode(', ', $dupe_list))."\n";242:                 $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/dupe_email_change.tpl'));
235:                 $mail_message .= sprintf($lang_common['User profile'], get_base_url().'/profile.php?id='.$id)."\n";243: 
236:                 $mail_message .= "\n".'--'."\n".$lang_common['Email signature'];244:                 // The first row contains the subject
 245:                 $first_crlf = strpos($mail_tpl, "\n");
 246:                 $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
 247:                 $mail_message = trim(substr($mail_tpl, $first_crlf));
 248: 
 249:                 $mail_message = str_replace('<username>', $pun_user['username'], $mail_message);
 250:                 $mail_message = str_replace('<dupe_list>', implode(', ', $dupe_list), $mail_message);
 251:                 $mail_message = str_replace('<profile_url>', get_base_url().'/profile.php?id='.$id, $mail_message);
 252:                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
237: 253: 
238:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);254:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
239:             }255:             }
255:         $mail_message = str_replace('<username>', $pun_user['username'], $mail_message);271:         $mail_message = str_replace('<username>', $pun_user['username'], $mail_message);
256:         $mail_message = str_replace('<base_url>', get_base_url(), $mail_message);272:         $mail_message = str_replace('<base_url>', get_base_url(), $mail_message);
257:         $mail_message = str_replace('<activation_url>', get_base_url().'/profile.php?action=change_email&id='.$id.'&key='.$new_email_key, $mail_message);273:         $mail_message = str_replace('<activation_url>', get_base_url().'/profile.php?action=change_email&id='.$id.'&key='.$new_email_key, $mail_message);
258:         $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);274:         $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
259: 275: 
260:         pun_mail($new_email, $mail_subject, $mail_message);276:         pun_mail($new_email, $mail_subject, $mail_message);
261: 277: 
523:     if ($pun_user['g_id'] != PUN_ADMIN && ($pun_user['g_moderator'] != '1' || $pun_user['g_mod_ban_users'] == '0'))539:     if ($pun_user['g_id'] != PUN_ADMIN && ($pun_user['g_moderator'] != '1' || $pun_user['g_mod_ban_users'] == '0'))
524:         message($lang_common['No permission']);540:         message($lang_common['No permission']);
525: 541: 
526:     redirect('admin_bans.php?add_ban='.$id, $lang_profile['Ban redirect']);542:     // Get the username of the user we are banning
 543:     $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE id='.$id) or error('Unable to fetch username', __FILE__, __LINE__, $db->error());
 544:     $username = $db->result($result);
 545: 
 546:     // Check whether user is already banned
 547:     $result = $db->query('SELECT id FROM '.$db->prefix.'bans WHERE username = \''.$db->escape($username).'\' ORDER BY expire IS NULL DESC, expire DESC LIMIT 1') or error('Unable to fetch ban ID', __FILE__, __LINE__, $db->error());
 548:     if ($db->num_rows($result))
 549:     {
 550:         $ban_id = $db->result($result);
 551:         redirect('admin_bans.php?edit_ban='.$ban_id.'&amp;exists', $lang_profile['Ban redirect']);
 552:     }
 553:     else
 554:         redirect('admin_bans.php?add_ban='.$id, $lang_profile['Ban redirect']);
527: }555: }
528: 556: 
529: 557: 
739:             );767:             );
740: 768: 
741:             // Add http:// if the URL doesn't contain it already (while allowing https://, too)769:             // Add http:// if the URL doesn't contain it already (while allowing https://, too)
742:             if ($form['url'] != '' && !preg_match('#^https?://#i', $form['url']))770:             if ($form['url'] != '')
743:                 $form['url'] = 'http://'.$form['url'];771:             {
 772:                 $url = url_valid($form['url']);
 773: 
 774:                 if ($url === false)
 775:                     message($lang_profile['Invalid website URL']);
 776: 
 777:                 $form['url'] = $url['url'];
 778:             }
744: 779: 
745:             if ($pun_user['g_id'] == PUN_ADMIN)780:             if ($pun_user['g_id'] == PUN_ADMIN)
746:                 $form['title'] = pun_trim($_POST['title']);781:                 $form['title'] = pun_trim($_POST['title']);
773:             );808:             );
774: 809: 
775:             // If the ICQ UIN contains anything other than digits it's invalid810:             // If the ICQ UIN contains anything other than digits it's invalid
776:             if (preg_match('/[^0-9]/', $form['icq']))811:             if (preg_match('%[^0-9]%', $form['icq']))
777:                 message($lang_prof_reg['Bad ICQ']);812:                 message($lang_prof_reg['Bad ICQ']);
778: 813: 
779:             break;814:             break;
924:                 }959:                 }
925:             }960:             }
926:         }961:         }
 962: 
 963:         // Regenerate the users info cache
 964:         if (!defined('FORUM_CACHE_FUNCTIONS_LOADED'))
 965:             require PUN_ROOT.'include/cache.php';
 966: 
 967:         generate_users_info_cache();
927:     }968:     }
928: 969: 
929:     redirect('profile.php?section='.$section.'&amp;id='.$id, $lang_profile['Profile redirect']);970:     redirect('profile.php?section='.$section.'&amp;id='.$id, $lang_profile['Profile redirect']);


a/register.php b/register.php
131:     // Make sure we got a valid language string131:     // Make sure we got a valid language string
132:     if (isset($_POST['language']))132:     if (isset($_POST['language']))
133:     {133:     {
134:         $language = preg_replace('#[\.\\\/]#', '', $_POST['language']);134:         $language = preg_replace('%[\.\\\/]%', '', $_POST['language']);
135:         if (!file_exists(PUN_ROOT.'lang/'.$language.'/common.php'))135:         if (!file_exists(PUN_ROOT.'lang/'.$language.'/common.php'))
136:             message($lang_common['Bad request']);136:             message($lang_common['Bad request']);
137:     }137:     }
165:             // If we previously found out that the email was banned165:             // If we previously found out that the email was banned
166:             if ($banned_email)166:             if ($banned_email)
167:             {167:             {
168:                 $mail_subject = $lang_common['Banned email notification'];168:                 // Load the "banned email register" template
169:                 $mail_message = sprintf($lang_common['Banned email register message'], $username, $email1)."\n";169:                 $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/banned_email_register.tpl'));
170:                 $mail_message .= sprintf($lang_common['User profile'], get_base_url().'/profile.php?id='.$new_uid)."\n";170: 
171:                 $mail_message .= "\n".'--'."\n".$lang_common['Email signature'];171:                 // The first row contains the subject
 172:                 $first_crlf = strpos($mail_tpl, "\n");
 173:                 $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
 174:                 $mail_message = trim(substr($mail_tpl, $first_crlf));
 175: 
 176:                 $mail_message = str_replace('<username>', $username, $mail_message);
 177:                 $mail_message = str_replace('<email>', $email1, $mail_message);
 178:                 $mail_message = str_replace('<profile_url>', get_base_url().'/profile.php?id='.$new_uid, $mail_message);
 179:                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
172: 180: 
173:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);181:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
174:             }182:             }
176:             // If we previously found out that the email was a dupe184:             // If we previously found out that the email was a dupe
177:             if (!empty($dupe_list))185:             if (!empty($dupe_list))
178:             {186:             {
179:                 $mail_subject = $lang_common['Duplicate email notification'];187:                 // Load the "dupe email register" template
180:                 $mail_message = sprintf($lang_common['Duplicate email register message'], $username, implode(', ', $dupe_list))."\n";188:                 $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/dupe_email_register.tpl'));
181:                 $mail_message .= sprintf($lang_common['User profile'], get_base_url().'/profile.php?id='.$new_uid)."\n";189: 
182:                 $mail_message .= "\n".'--'."\n".$lang_common['Email signature'];190:                 // The first row contains the subject
 191:                 $first_crlf = strpos($mail_tpl, "\n");
 192:                 $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
 193:                 $mail_message = trim(substr($mail_tpl, $first_crlf));
 194: 
 195:                 $mail_message = str_replace('<username>', $username, $mail_message);
 196:                 $mail_message = str_replace('<dupe_list>', implode(', ', $dupe_list), $mail_message);
 197:                 $mail_message = str_replace('<profile_url>', get_base_url().'/profile.php?id='.$new_uid, $mail_message);
 198:                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
183: 199: 
184:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);200:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
185:             }201:             }
187:             // Should we alert people on the admin mailing list that a new user has registered?203:             // Should we alert people on the admin mailing list that a new user has registered?
188:             if ($pun_config['o_regs_report'] == '1')204:             if ($pun_config['o_regs_report'] == '1')
189:             {205:             {
190:                 $mail_subject = $lang_common['New user notification'];206:                 // Load the "new user" template
191:                 $mail_message = sprintf($lang_common['New user message'], $username, get_base_url().'/')."\n";207:                 $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/new_user.tpl'));
192:                 $mail_message .= sprintf($lang_common['User profile'], get_base_url().'/profile.php?id='.$new_uid)."\n";208: 
193:                 $mail_message .= "\n".'--'."\n".$lang_common['Email signature'];209:                 // The first row contains the subject
 210:                 $first_crlf = strpos($mail_tpl, "\n");
 211:                 $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8));
 212:                 $mail_message = trim(substr($mail_tpl, $first_crlf));
 213: 
 214:                 $mail_message = str_replace('<username>', $username, $mail_message);
 215:                 $mail_message = str_replace('<base_url>', get_base_url().'/', $mail_message);
 216:                 $mail_message = str_replace('<profile_url>', get_base_url().'/profile.php?id='.$new_uid, $mail_message);
 217:                 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
194: 218: 
195:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);219:                 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message);
196:             }220:             }
212:             $mail_message = str_replace('<username>', $username, $mail_message);236:             $mail_message = str_replace('<username>', $username, $mail_message);
213:             $mail_message = str_replace('<password>', $password1, $mail_message);237:             $mail_message = str_replace('<password>', $password1, $mail_message);
214:             $mail_message = str_replace('<login_url>', get_base_url().'/login.php', $mail_message);238:             $mail_message = str_replace('<login_url>', get_base_url().'/login.php', $mail_message);
215:             $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message);239:             $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'], $mail_message);
216: 240: 
217:             pun_mail($email1, $mail_subject, $mail_message);241:             pun_mail($email1, $mail_subject, $mail_message);
218: 242: 
242: $dst = isset($dst) ? $dst : $pun_config['o_default_dst'];266: $dst = isset($dst) ? $dst : $pun_config['o_default_dst'];
243: $email_setting = isset($email_setting) ? $email_setting : $pun_config['o_default_email_setting'];267: $email_setting = isset($email_setting) ? $email_setting : $pun_config['o_default_email_setting'];
244: 268: 
245: ?> 
246: <?php 
247:  
248: // If there are errors, we display them269: // If there are errors, we display them
249: if (!empty($errors))270: if (!empty($errors))
250: {271: {
280:                     <p><?php echo $lang_register['Desc 1'] ?></p>301:                     <p><?php echo $lang_register['Desc 1'] ?></p>
281:                     <p><?php echo $lang_register['Desc 2'] ?></p>302:                     <p><?php echo $lang_register['Desc 2'] ?></p>
282:                 </div>303:                 </div>
283:             </div> 
284:             <div class="inform"> 
285:                 <fieldset>304:                 <fieldset>
286:                     <legend><?php echo $lang_register['Username legend'] ?></legend>305:                     <legend><?php echo $lang_register['Username legend'] ?></legend>
287:                     <div class="infldset">306:                     <div class="infldset">


a/search.php b/search.php
 28: if (isset($_GET['action']) || isset($_GET['search_id'])) 28: if (isset($_GET['action']) || isset($_GET['search_id']))
 29: { 29: {
 30:     $action = (isset($_GET['action'])) ? $_GET['action'] : null; 30:     $action = (isset($_GET['action'])) ? $_GET['action'] : null;
 31:     $forum = (isset($_GET['forum'])) ? intval($_GET['forum']) : -1; 31:     $forums = isset($_GET['forums']) ? (is_array($_GET['forums']) ? $_GET['forums'] : explode(',', $_GET['forums'])) : (isset($_GET['forum']) ? array($_GET['forum']) : array());
 32:     $sort_dir = (isset($_GET['sort_dir']) && $_GET['sort_dir'] == 'DESC') ? 'DESC' : 'ASC'; 32:     $sort_dir = (isset($_GET['sort_dir']) && $_GET['sort_dir'] == 'DESC') ? 'DESC' : 'ASC';
 33:  33: 
  34:     $forums = array_map('intval', $forums);
  35: 
 34:     // Allow the old action names for backwards compatibility reasons 36:     // Allow the old action names for backwards compatibility reasons
 35:     if ($action == 'show_user') 37:     if ($action == 'show_user')
 36:         $action = 'show_user_posts'; 38:         $action = 'show_user_posts';
 50:         $keywords = (isset($_GET['keywords'])) ? utf8_strtolower(pun_trim($_GET['keywords'])) : null; 52:         $keywords = (isset($_GET['keywords'])) ? utf8_strtolower(pun_trim($_GET['keywords'])) : null;
 51:         $author = (isset($_GET['author'])) ? utf8_strtolower(pun_trim($_GET['author'])) : null; 53:         $author = (isset($_GET['author'])) ? utf8_strtolower(pun_trim($_GET['author'])) : null;
 52:  54: 
 53:         if (preg_match('#^[\*%]+$#', $keywords) || (pun_strlen(str_replace(array('*', '%'), '', $keywords)) < PUN_SEARCH_MIN_WORD && !is_cjk($keywords))) 55:         if (preg_match('%^[\*\%]+$%', $keywords) || (pun_strlen(str_replace(array('*', '%'), '', $keywords)) < PUN_SEARCH_MIN_WORD && !is_cjk($keywords)))
 54:             $keywords = ''; 56:             $keywords = '';
 55:  57: 
 56:         if (preg_match('#^[\*%]+$#', $author) || pun_strlen(str_replace(array('*', '%'), '', $author)) < 2) 58:         if (preg_match('%^[\*\%]+$%', $author) || pun_strlen(str_replace(array('*', '%'), '', $author)) < 2)
 57:             $author = ''; 59:             $author = '';
 58:  60: 
 59:         if (!$keywords && !$author) 61:         if (!$keywords && !$author)
 62:         if ($author) 64:         if ($author)
 63:             $author = str_replace('*', '%', $author); 65:             $author = str_replace('*', '%', $author);
 64:  66: 
 65:         $show_as = (isset($_GET['show_as'])) ? $_GET['show_as'] : 'posts'; 67:         $show_as = (isset($_GET['show_as']) && $_GET['show_as'] == 'topics') ? 'topics' : 'posts';
 66:         $sort_by = (isset($_GET['sort_by'])) ? intval($_GET['sort_by']) : null; 68:         $sort_by = (isset($_GET['sort_by'])) ? intval($_GET['sort_by']) : 0;
 67:         $search_in = (!isset($_GET['search_in']) || $_GET['search_in'] == 'all') ? 0 : (($_GET['search_in'] == 'message') ? 1 : -1); 69:         $search_in = (!isset($_GET['search_in']) || $_GET['search_in'] == '0') ? 0 : (($_GET['search_in'] == '1') ? 1 : -1);
 68:     } 70:     }
 69:     // If it's a user search (by ID) 71:     // If it's a user search (by ID)
 70:     else if ($action == 'show_user_posts' || $action == 'show_user_topics' || $action == 'show_subscriptions') 72:     else if ($action == 'show_user_posts' || $action == 'show_user_topics' || $action == 'show_subscriptions')
115:         $keyword_results = $author_results = array();117:         $keyword_results = $author_results = array();
116: 118: 
117:         // Search a specific forum?119:         // Search a specific forum?
118:         $forum_sql = ($forum != -1 || ($forum == -1 && $pun_config['o_search_all_forums'] == '0' && !$pun_user['is_admmod'])) ? ' AND t.forum_id = '.$forum : '';120:         $forum_sql = (!empty($forums) || (empty($forums) && $pun_config['o_search_all_forums'] == '0' && !$pun_user['is_admmod'])) ? ' AND t.forum_id IN ('.implode(',', $forums).')' : '';
119: 121: 
120:         if (!empty($author) || !empty($keywords))122:         if (!empty($author) || !empty($keywords))
121:         {123:         {
283:             if ($author && $keywords)285:             if ($author && $keywords)
284:             {286:             {
285:                 $search_ids = array_intersect_assoc($keyword_results, $author_results);287:                 $search_ids = array_intersect_assoc($keyword_results, $author_results);
286:                 $search_type = array('both', array($keywords, pun_trim($_GET['author'])), $forum, isset($_GET['search_in']) ? $_GET['search_in'] : '');288:                 $search_type = array('both', array($keywords, pun_trim($_GET['author'])), implode(',', $forums), $search_in);
287:             }289:             }
288:             else if ($keywords)290:             else if ($keywords)
289:             {291:             {
290:                 $search_ids = $keyword_results;292:                 $search_ids = $keyword_results;
291:                 $search_type = array('keywords', $keywords, $forum, isset($_GET['search_in']) ? $_GET['search_in'] : '');293:                 $search_type = array('keywords', $keywords, implode(',', $forums), $search_in);
292:             }294:             }
293:             else295:             else
294:             {296:             {
295:                 $search_ids = $author_results;297:                 $search_ids = $author_results;
296:                 $search_type = array('author', pun_trim($_GET['author']), $forum, isset($_GET['search_in']) ? $_GET['search_in'] : '');298:                 $search_type = array('author', pun_trim($_GET['author']), implode(',', $forums), $search_in);
297:             }299:             }
298: 300: 
299:             unset($keyword_results, $author_results);301:             unset($keyword_results, $author_results);
498:             $search_set[] = $row;500:             $search_set[] = $row;
499: 501: 
500:         $crumbs_text = array();502:         $crumbs_text = array();
501:         $crumbs_text['show_as'] = $show_as == 'topics' ? $lang_search['Search topics'] : $lang_search['Search posts'];503:         $crumbs_text['show_as'] = $lang_search['Search'];
502: 504: 
503:         if ($search_type[0] == 'action')505:         if ($search_type[0] == 'action')
504:         {506:         {
520:                 $crumbs_text['search_type'] = '<a href="search.php?action=show_subscriptions&amp;user_id='.$subscriber_id.'">'.sprintf($lang_search['Quick search show_subscriptions'], pun_htmlspecialchars($subscriber_name)).'</a>';522:                 $crumbs_text['search_type'] = '<a href="search.php?action=show_subscriptions&amp;user_id='.$subscriber_id.'">'.sprintf($lang_search['Quick search show_subscriptions'], pun_htmlspecialchars($subscriber_name)).'</a>';
521:             }523:             }
522:             else524:             else
523:                 $crumbs_text['search_type'] = '<a href="search.php?action='.pun_htmlspecialchars($search_type[1]).'">'.$lang_search['Quick search '.$search_type[1]].'</a>';525:                 $crumbs_text['search_type'] = '<a href="search.php?action='.$search_type[1].'">'.$lang_search['Quick search '.$search_type[1]].'</a>';
524:         }526:         }
525:         else527:         else
526:         {528:         {
542:                 $crumbs_text['search_type'] = sprintf($lang_search['By user show as '.$show_as], pun_htmlspecialchars($author));544:                 $crumbs_text['search_type'] = sprintf($lang_search['By user show as '.$show_as], pun_htmlspecialchars($author));
543:             }545:             }
544: 546: 
545:             $crumbs_text['search_type'] = '<a href="search.php?action=search&amp;keywords='.pun_htmlspecialchars($keywords).'&amp;author='.pun_htmlspecialchars($author).'&amp;forum='.pun_htmlspecialchars($search_type[2]).'&amp;search_in='.pun_htmlspecialchars($search_type[3]).'&amp;sort_by='.pun_htmlspecialchars($sort_by).'&amp;sort_dir='.pun_htmlspecialchars($sort_dir).'&amp;show_as='.pun_htmlspecialchars($show_as).'">'.$crumbs_text['search_type'].'</a>';547:             $crumbs_text['search_type'] = '<a href="search.php?action=search&amp;keywords='.urlencode($keywords).'&amp;author='.urlencode($author).'&amp;forums='.$search_type[2].'&amp;search_in='.$search_type[3].'&amp;sort_by='.$sort_by.'&amp;sort_dir='.$sort_dir.'&amp;show_as='.$show_as.'">'.$crumbs_text['search_type'].'</a>';
546:         }548:         }
547: 549: 
548:         $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_search['Search results']);550:         $page_title = array(pun_htmlspecialchars($pun_config['o_board_title']), $lang_search['Search results']);
796:                 <fieldset>798:                 <fieldset>
797:                     <legend><?php echo $lang_search['Search in legend'] ?></legend>799:                     <legend><?php echo $lang_search['Search in legend'] ?></legend>
798:                     <div class="infldset">800:                     <div class="infldset">
799:                         <label class="conl"><?php echo $lang_search['Forum search']."\n" ?> 
800:                         <br /><select id="forum" name="forum"> 
801: <?php801: <?php
802: 802: 
 803: $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_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 f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
 804: 
 805: // We either show a list of forums of which multiple can be selected
803: if ($pun_config['o_search_all_forums'] == '1' || $pun_user['is_admmod'])806: if ($pun_config['o_search_all_forums'] == '1' || $pun_user['is_admmod'])
804:     echo "\t\t\t\t\t\t\t".'<option value="-1">'.$lang_search['All forums'].'</option>'."\n";807: {
 808:     echo "\t\t\t\t\t\t".'<div class="conl multiselect">'.$lang_search['Forum search']."\n";
 809:     echo "\t\t\t\t\t\t".'<br />'."\n";
 810:     echo "\t\t\t\t\t\t".'<div class="checklist">'."\n";
805: 811: 
806: $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_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 f.redirect_url IS NULL ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());812:     $cur_category = 0;
 813:     while ($cur_forum = $db->fetch_assoc($result))
 814:     {
 815:         if ($cur_forum['cid'] != $cur_category) // A new category since last iteration?
 816:         {
 817:             if ($cur_category)
 818:                 echo "\t\t\t\t\t\t\t".'</fieldset>'."\n";
 819: 
 820:             echo "\t\t\t\t\t\t\t".'<fieldset><legend><span>'.pun_htmlspecialchars($cur_forum['cat_name']).'</span></legend>'."\n";
 821:             $cur_category = $cur_forum['cid'];
 822:         }
807: 823: 
808: $cur_category = 0;824:         echo "\t\t\t\t\t\t\t\t".'<div class="checklist-item"><span class="fld-input"><input type="checkbox" name="forums[]" id="forum-'.$cur_forum['fid'].'" value="'.$cur_forum['fid'].'" /></span> <label for="forum-'.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</label></div>'."\n";
809: while ($cur_forum = $db->fetch_assoc($result))825:     }
 826: 
 827:     echo "\t\t\t\t\t\t\t".'</fieldset>'."\n";
 828:     echo "\t\t\t\t\t\t".'</div>'."\n";
 829:     echo "\t\t\t\t\t\t".'</div>'."\n";
 830: }
 831: // ... or a simple select list for one forum only
 832: else
810: {833: {
811:     if ($cur_forum['cid'] != $cur_category) // A new category since last iteration?834:     echo "\t\t\t\t\t\t".'<label class="conl">'.$lang_search['Forum search']."\n";
 835:     echo "\t\t\t\t\t\t".'<br />'."\n";
 836:     echo "\t\t\t\t\t\t".'<select id="forum" name="forum">'."\n";
 837: 
 838:     $cur_category = 0;
 839:     while ($cur_forum = $db->fetch_assoc($result))
812:     {840:     {
813:         if ($cur_category)841:         if ($cur_forum['cid'] != $cur_category) // A new category since last iteration?
814:             echo "\t\t\t\t\t\t\t".'</optgroup>'."\n";842:         {
 843:             if ($cur_category)
 844:                 echo "\t\t\t\t\t\t\t".'</optgroup>'."\n";
815: 845: 
816:         echo "\t\t\t\t\t\t\t".'<optgroup label="'.pun_htmlspecialchars($cur_forum['cat_name']).'">'."\n";846:             echo "\t\t\t\t\t\t\t".'<optgroup label="'.pun_htmlspecialchars($cur_forum['cat_name']).'">'."\n";
817:         $cur_category = $cur_forum['cid'];847:             $cur_category = $cur_forum['cid'];
 848:         }
 849: 
 850:         echo "\t\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</option>'."\n";
818:     }851:     }
819: 852: 
820:     echo "\t\t\t\t\t\t\t\t".'<option value="'.$cur_forum['fid'].'">'.pun_htmlspecialchars($cur_forum['forum_name']).'</option>'."\n";853:     echo "\t\t\t\t\t\t\t".'</optgroup>'."\n";
 854:     echo "\t\t\t\t\t\t".'</select>'."\n";
 855:     echo "\t\t\t\t\t\t".'<br /></label>'."\n";
821: }856: }
822: 857: 
823: ?>858: ?>
824:                             </optgroup> 
825:                         </select> 
826:                         <br /></label> 
827:                         <label class="conl"><?php echo $lang_search['Search in']."\n" ?>859:                         <label class="conl"><?php echo $lang_search['Search in']."\n" ?>
828:                         <br /><select id="search_in" name="search_in">860:                         <br /><select id="search_in" name="search_in">
829:                             <option value="all"><?php echo $lang_search['Message and subject'] ?></option>861:                             <option value="0"><?php echo $lang_search['Message and subject'] ?></option>
830:                             <option value="message"><?php echo $lang_search['Message only'] ?></option>862:                             <option value="1"><?php echo $lang_search['Message only'] ?></option>
831:                             <option value="topic"><?php echo $lang_search['Topic only'] ?></option>863:                             <option value="-1"><?php echo $lang_search['Topic only'] ?></option>
832:                         </select>864:                         </select>
833:                         <br /></label>865:                         <br /></label>
834:                         <p class="clearb"><?php echo $lang_search['Search in info'] ?></p>866:                         <p class="clearl"><?php echo $lang_search['Search in info'] ?></p>
 867: <?php echo ($pun_config['o_search_all_forums'] == '1' || $pun_user['is_admmod'] ? '<p>'.$lang_search['Search multiple forums info'].'</p>' : '') ?>
835:                     </div>868:                     </div>
836:                 </fieldset>869:                 </fieldset>
837:             </div>870:             </div>


a/style/Air.css b/style/Air.css
151:     clear: none;151:     clear: none;
152: }152: }
153: 153: 
 154: .clearl {
 155:     clear: left;
 156: }
 157: 
 158: 
154: /*****************************************************************159: /*****************************************************************
155: 2. COMMON STYLES160: 2. COMMON STYLES
156: *****************************************************************/161: *****************************************************************/
767: }772: }
768: 773: 
769: .pun .blockpost .postleft, .pun .blockpost .postfootleft {774: .pun .blockpost .postleft, .pun .blockpost .postfootleft {
770:     width: 206px;775:     width: 194px;
771:     padding: 7px 0 7px 12px;776:     padding: 7px 12px 7px 12px;
772:     float: left;777:     float: left;
773:     margin-left: -218px;778:     margin-left: -218px;
774:     position: relative;779:     position: relative;
1275:     padding: 7px 12px;1280:     padding: 7px 12px;
1276: }1281: }
1277: 1282: 
 1283: .pun .multiselect {
 1284:     float: left;
 1285:     padding-bottom: 7px;
 1286: }
 1287: 
 1288: .pun .checklist {
 1289:     border-width: 1px;
 1290:     border-style: solid;
 1291:     max-height: 9em;
 1292:     width: 20em;
 1293:     overflow: auto;
 1294:     padding: 0.25em 0.5em;
 1295:     margin: 0.25em 16px 0 0.15em;
 1296: }
 1297: 
 1298: .pun .checklist legend {
 1299:     padding: 0;
 1300: }
 1301: 
 1302: .pun .checklist legend span {
 1303:     width: auto;
 1304:     max-width: 25em;
 1305: }
 1306: 
 1307: .pun .checklist .checklist-item {
 1308:     position: relative;
 1309: }
 1310: 
 1311: .pun .checklist .checklist-item label {
 1312:     padding: 0 0 0 1.75em;
 1313: }
 1314: 
 1315: .pun .checklist .checklist-item .fld-input {
 1316:     position: absolute;
 1317:     left: 0;
 1318:     top: 0;
 1319:     padding: 0;
 1320:     margin: 0;
 1321: }
 1322: 
 1323: .pun .checklist .checklist-item input {
 1324:     margin: 0;
 1325:     height: 1.55em;
 1326:     width: 1.55em;
 1327: }
 1328: 
1278: /*****************************************************************1329: /*****************************************************************
1279: PROFILES (+ ADMIN MENU)1330: PROFILES (+ ADMIN MENU)
1280: *****************************************************************/1331: *****************************************************************/
1609:     background: #d59b9b;1660:     background: #d59b9b;
1610: }1661: }
1611: 1662: 
 1663: .pun .multiselect {
 1664:     color: #357082;
 1665: }
 1666: 
 1667: .pun .checklist {
 1668:     background: white;
 1669:     border-color: #ccc;
 1670: }
 1671: 
1612: /* Status Indicators1672: /* Status Indicators
1613: ----------------------------------------------------------------*/1673: ----------------------------------------------------------------*/
1614: 1674: 


a/style/Air/base_admin.css b/style/Air/base_admin.css
123:     text-align: center;123:     text-align: center;
124: }124: }
125: 125: 
126: #users2 .tcl, #users2 .tc3, #users2 .tc5, #bans1 .tcl, #bans1 .tc3, #bans1 .tc5, #bans1 .tc6 {126: #users2 .tcl, #bans1 .tcl {
127:     width: 15%;127:     width: auto;
128:     text-align: left;128:     text-align: left;
129: }129: }
130: 130: 
131: #users2 .tc2, #bans1 .tc2 {131: #users2 .tc2, #bans1 .tc2 {
132:     width: 22%;132:     width: 18%;
 133:     text-align: left;
 134: }
 135: 
 136: #users2 .tc3, #users2 .tc5, #bans1 .tc3, #bans1 .tc5, #bans1 .tc6 {
 137:     width: 12%;
133:     text-align: left;138:     text-align: left;
134: }139: }
135: 140: 
136: #users2 .tc4, #bans1 .tc4 {141: #users2 .tc4, #bans1 .tc4 {
137:     width: 8%;142:     width: 10%;
138:     text-align: center;143:     text-align: center;
139: }144: }
140: 145: 
141: #users2 .tcr, #bans1 .tcr {146: #users2 .tcr {
 147:     width: 20%;
 148:     white-space: nowrap;
 149: }
 150: 
 151: #bans1 .tcr {
 152:     width: 15%;
142:     white-space: nowrap;153:     white-space: nowrap;
143: }154: }
144: 155: 
 156: #users2 .tcmod {
 157:     width: 10%;
 158:     text-align: center;
 159: }
 160: 
145: .plugin p {161: .plugin p {
146:     padding: 12px 18px 0;162:     padding: 12px 18px 0;
147: }163: }


a/style/Cobalt.css b/style/Cobalt.css
 48:     min-height: 1px 48:     min-height: 1px
 49:     } 49:     }
 50:  50: 
  51: .clearl {
  52:     clear: left;
  53:     }
 51:  54: 
 52: /* Hidden Elements 55: /* Hidden Elements
 53: ----------------------------------------------------------------*/ 56: ----------------------------------------------------------------*/
 72:  75: 
 73: .pun { 76: .pun {
 74:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif; 77:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif;
  78:     line-height: normal;
 75:     } 79:     }
 76:  80: 
 77: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend { 81: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend {
108: .pun h2 {112: .pun h2 {
109:     font-size: 1em;113:     font-size: 1em;
110:     font-weight: normal;114:     font-weight: normal;
111:     padding: 4px 7px;115:     padding: 4px 6px;
112:     }116:     }
113: 117: 
114: .pun h3 {118: .pun h3 {
209: /* Page Layout213: /* Page Layout
210: ----------------------------------------------------------------*/214: ----------------------------------------------------------------*/
211: 215: 
 216: html, body {
 217:     margin: 0;
 218:     padding: 0
 219:     }
 220: 
212: .pun {221: .pun {
213:     margin: 12px 20px222:     margin: 12px 20px
214:     }223:     }
225:     margin: 0 0 12px 0;234:     margin: 0 0 12px 0;
226:     }235:     }
227: 236: 
 237: #brdtitle p {
 238:     padding-top: 0px
 239:     }
 240: 
228: #announce, #brdstats {241: #announce, #brdstats {
229:     margin: 12px 0 12px 0;242:     margin: 12px 0 12px 0;
230:     }243:     }
281: ----------------------------------------------------------------*/294: ----------------------------------------------------------------*/
282: 295: 
283: #brdtitle h1 {296: #brdtitle h1 {
284:     font-size: 1.454em;297:     font-size: 1.4em;
285:     font-weight: bold;298:     font-weight: bold;
286:     line-height: 1em; 
287:     padding: 3px 0 0 0;299:     padding: 3px 0 0 0;
288:     }300:     }
289: 301: 
290: #brddesc { 
291:     padding: 3px 0; 
292:     } 
293:  
294: #brddesc * { 
295:     padding-top: 0; 
296:     padding-bottom: 0; 
297:     } 
298:  
299: #brdmenu li {302: #brdmenu li {
300:     display: inline;303:     display: inline;
301:     margin-right: 12px;304:     margin-right: 12px;
435: 438: 
436: .pun td, .pun th {439: .pun td, .pun th {
437:     padding: 4px 6px;440:     padding: 4px 6px;
438:     line-height: 1.273em; 
439:     text-align: left;441:     text-align: left;
440:     font-weight: normal;442:     font-weight: normal;
441:     }443:     }
442: 444: 
443: .pun td {445: .pun td, .pun th {
444:     border-style: solid none none solid;446:     border-style: solid none none solid;
445:     border-width: 1px;447:     border-width: 1px;
446:     }448:     }
525:     }527:     }
526: 528: 
527: .pun .icon {529: .pun .icon {
528:     border-width: 7px;530:     margin: 0.1em 0 0 0.2em;
 531:     border-width: 0.6em;
529:     border-style: solid;532:     border-style: solid;
530:     height: 0;533:     height: 0;
531:     width: 0;534:     width: 0;
598:     margin-right: 10px601:     margin-right: 10px
599:     }602:     }
600: 603: 
601: .pun select { 
602:     padding-top: 1px; 
603:     padding-bottom: 1px; 
604:     } 
605:  
606: .pun fieldset .rbox { 
607:     } 
608:  
609: .pun fieldset .rbox br {604: .pun fieldset .rbox br {
610:     display: none;605:     display: none;
611:     }606:     }
665:     margin-right: 12px;660:     margin-right: 12px;
666:     }661:     }
667: 662: 
 663: .pun .multiselect {
 664:     float: left;
 665:     padding-bottom: 7px;
 666:     }
 667: 
 668: .pun .checklist {
 669:     border-width: 1px;
 670:     border-style: solid;
 671:     max-height: 9em;
 672:     width: 20em;
 673:     overflow: auto;
 674:     padding: 0.3em 0.5em;
 675:     margin: 0.25em 16px 0 0.15em;
 676:     }
 677: 
 678: .pun .checklist fieldset {
 679:     border: 0;
 680:     padding: 0;
 681:     }
 682: 
 683: .pun .checklist legend {
 684:     padding: 0;
 685:     }
 686: 
 687: .pun .checklist legend span {
 688:     width: auto;
 689:     max-width: 25em;
 690:     }
 691: 
 692: .pun .checklist .checklist-item {
 693:     position: relative;
 694:     margin: .2em 0;
 695:     }
 696: 
 697: .pun .checklist .checklist-item label {
 698:     padding: 0 0 0 2.1em;
 699:     }
 700: 
 701: .pun .checklist .checklist-item .fld-input {
 702:     position: absolute;
 703:     left: 0;
 704:     top: 0;
 705:     padding: 0;
 706:     margin: 0;
 707:     }
 708: 
 709: .pun .checklist .checklist-item input {
 710:     margin: 0;
 711:     height: 1.15em;
 712:     width: 1.55em;
 713:     }
 714: 
668: /*****************************************************************715: /*****************************************************************
669: 7. PROFILES AND ADMIN716: 7. PROFILES AND ADMIN
670: *****************************************************************/717: *****************************************************************/
674:     }721:     }
675: 722: 
676: .pun .block2col .blockform, .pun .block2col .block {723: .pun .block2col .blockform, .pun .block2col .block {
677:     margin-left: 17em724:     margin-left: 14em
678:     }725:     }
679: 726: 
680: .pun .blockmenu {727: .pun .blockmenu {
681:     float:left;728:     float:left;
682:     width: 16em729:     width: 13em
683:     }730:     }
684: 731: 
685: .pun .blockmenu li {732: .pun .blockmenu li {
756:     }803:     }
757: 804: 
758: .pun .postleft dl {805: .pun .postleft dl {
759:     padding: 0.75em 6px;806:     padding: 6px;
760:     }807:     }
761: 808: 
762: .pun .postleft .usercontacts, .pun .postleft .icon {809: .pun .postleft .usercontacts, .pun .postleft .icon {
807: 854: 
808: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,855: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,
809: .pun .postfootleft p {856: .pun .postfootleft p {
810:     padding: 6px 6px 6px 6px;857:     padding: 10px 6px 5px 6px;
811:     }858:     }
812: 859: 
813: .pun .postfootright li {860: .pun .postfootright li {
814:     display: inline;861:     display: inline;
815:     margin-left: 12px;862:     }
 863: 
 864: .pun .postfootright li:before {
 865:     content: " | ";
 866:     }
 867: 
 868: .pun .postfootright li:first-child:before {
 869:     content: "";
816:     }870:     }
817: 871: 
818: .pun .postfootright a:link, .pun .postfootright a:visited {872: .pun .postfootright a:link, .pun .postfootright a:visited {
926:     text-align: center;980:     text-align: center;
927:     }981:     }
928: 982: 
 983: #brdwelcome, #brdfooter dl a, div.blockmenu li, div.rbox input {
 984:     line-height: 1.4em
 985:     }
 986: 
 987: #announce div.inbox div {
 988:     padding: 3px 0
 989:     }
 990: 
929: /*****************************************************************991: /*****************************************************************
930: COLOUR SCHEME992: COLOUR SCHEME
931: *****************************************************************/993: *****************************************************************/
978:     color: #d4d4d41040:     color: #d4d4d4
979:     }1041:     }
980: 1042: 
 1043: .pun .multiselect, .pun .checklist {
 1044:     color: #D4D4D4;
 1045:     }
 1046: 
 1047: .pun .checklist {
 1048:     border-color: #666;
 1049:     }
 1050: 
981: /* Posts1051: /* Posts
982: ----------------------------------------------------------------*/1052: ----------------------------------------------------------------*/
983: 1053: 
1021:     border-color: #5656561091:     border-color: #565656
1022:     }1092:     }
1023: 1093: 
1024: .pun th, .pun fieldset {1094: .pun th {
1025:     border-color: #4848481095:     border-color: #484848
1026:     }1096:     }
1027: 1097: 
 1098: .pun fieldset {
 1099:     border-color: #606060
 1100:     }
 1101: 
1028: #adminconsole td, #adminconsole th {1102: #adminconsole td, #adminconsole th {
1029:     border-color: #3838381103:     border-color: #383838
1030:     }1104:     }


a/style/Earth.css b/style/Earth.css
151:     clear: none;151:     clear: none;
152: }152: }
153: 153: 
 154: .clearl {
 155:     clear: left;
 156: }
 157: 
154: /*****************************************************************158: /*****************************************************************
155: 2. COMMON STYLES159: 2. COMMON STYLES
156: *****************************************************************/160: *****************************************************************/
767: }771: }
768: 772: 
769: .pun .blockpost .postleft, .pun .blockpost .postfootleft {773: .pun .blockpost .postleft, .pun .blockpost .postfootleft {
770:     width: 206px;774:     width: 194px;
771:     padding: 7px 0 7px 12px;775:     padding: 7px 12px 7px 12px;
772:     float: left;776:     float: left;
773:     margin-left: -218px;777:     margin-left: -218px;
774:     position: relative;778:     position: relative;
1275:     padding: 7px 12px;1279:     padding: 7px 12px;
1276: }1280: }
1277: 1281: 
 1282: .pun .multiselect {
 1283:     float: left;
 1284:     padding-bottom: 7px;
 1285: }
 1286: 
 1287: .pun .checklist {
 1288:     border-width: 1px;
 1289:     border-style: solid;
 1290:     max-height: 9em;
 1291:     width: 20em;
 1292:     overflow: auto;
 1293:     padding: 0.25em 0.5em;
 1294:     margin: 0.25em 16px 0 0.15em;
 1295: }
 1296: 
 1297: .pun .checklist legend {
 1298:     padding: 0;
 1299: }
 1300: 
 1301: .pun .checklist legend span {
 1302:     width: auto;
 1303:     max-width: 25em;
 1304: }
 1305: 
 1306: .pun .checklist .checklist-item {
 1307:     position: relative;
 1308: }
 1309: 
 1310: .pun .checklist .checklist-item label {
 1311:     padding: 0 0 0 1.75em;
 1312: }
 1313: 
 1314: .pun .checklist .checklist-item .fld-input {
 1315:     position: absolute;
 1316:     left: 0;
 1317:     top: 0;
 1318:     padding: 0;
 1319:     margin: 0;
 1320: }
 1321: 
 1322: .pun .checklist .checklist-item input {
 1323:     margin: 0;
 1324:     height: 1.55em;
 1325:     width: 1.55em;
 1326: }
 1327: 
1278: /*****************************************************************1328: /*****************************************************************
1279: PROFILES (+ ADMIN MENU)1329: PROFILES (+ ADMIN MENU)
1280: *****************************************************************/1330: *****************************************************************/
1609:     background: #d59b9b;1659:     background: #d59b9b;
1610: }1660: }
1611: 1661: 
 1662: .pun .multiselect {
 1663:     color: #83866A;
 1664: }
 1665: 
 1666: .pun .checklist {
 1667:     background: white;
 1668:     border-color: #ccc;
 1669: }
 1670: 
1612: /* Status Indicators1671: /* Status Indicators
1613: ----------------------------------------------------------------*/1672: ----------------------------------------------------------------*/
1614: 1673: 


a/style/Earth/base_admin.css b/style/Earth/base_admin.css
123:     text-align: center;123:     text-align: center;
124: }124: }
125: 125: 
126: #users2 .tcl, #users2 .tc3, #users2 .tc5, #bans1 .tcl, #bans1 .tc3, #bans1 .tc5, #bans1 .tc6 {126: #users2 .tcl, #bans1 .tcl {
127:     width: 15%;127:     width: auto;
128:     text-align: left;128:     text-align: left;
129: }129: }
130: 130: 
131: #users2 .tc2, #bans1 .tc2 {131: #users2 .tc2, #bans1 .tc2 {
132:     width: 22%;132:     width: 18%;
 133:     text-align: left;
 134: }
 135: 
 136: #users2 .tc3, #users2 .tc5, #bans1 .tc3, #bans1 .tc5, #bans1 .tc6 {
 137:     width: 12%;
133:     text-align: left;138:     text-align: left;
134: }139: }
135: 140: 
136: #users2 .tc4, #bans1 .tc4 {141: #users2 .tc4, #bans1 .tc4 {
137:     width: 8%;142:     width: 10%;
138:     text-align: center;143:     text-align: center;
139: }144: }
140: 145: 
141: #users2 .tcr, #bans1 .tcr {146: #users2 .tcr {
 147:     width: 20%;
 148:     white-space: nowrap;
 149: }
 150: 
 151: #bans1 .tcr {
 152:     width: 15%;
142:     white-space: nowrap;153:     white-space: nowrap;
143: }154: }
144: 155: 
 156: #users2 .tcmod {
 157:     width: 10%;
 158:     text-align: center;
 159: }
 160: 
145: .plugin p {161: .plugin p {
146:     padding: 12px 18px 0;162:     padding: 12px 18px 0;
147: }163: }


a/style/Fire.css b/style/Fire.css
151:     clear: none;151:     clear: none;
152: }152: }
153: 153: 
 154: .clearl {
 155:     clear: left;
 156: }
 157: 
154: /*****************************************************************158: /*****************************************************************
155: 2. COMMON STYLES159: 2. COMMON STYLES
156: *****************************************************************/160: *****************************************************************/
767: }771: }
768: 772: 
769: .pun .blockpost .postleft, .pun .blockpost .postfootleft {773: .pun .blockpost .postleft, .pun .blockpost .postfootleft {
770:     width: 206px;774:     width: 194px;
771:     padding: 7px 0 7px 12px;775:     padding: 7px 12px 7px 12px;
772:     float: left;776:     float: left;
773:     margin-left: -218px;777:     margin-left: -218px;
774:     position: relative;778:     position: relative;
1275:     padding: 7px 12px;1279:     padding: 7px 12px;
1276: }1280: }
1277: 1281: 
 1282: .pun .multiselect {
 1283:     float: left;
 1284:     padding-bottom: 7px;
 1285: }
 1286: 
 1287: .pun .checklist {
 1288:     border-width: 1px;
 1289:     border-style: solid;
 1290:     max-height: 9em;
 1291:     width: 20em;
 1292:     overflow: auto;
 1293:     padding: 0.25em 0.5em;
 1294:     margin: 0.25em 16px 0 0.15em;
 1295: }
 1296: 
 1297: .pun .checklist legend {
 1298:     padding: 0;
 1299: }
 1300: 
 1301: .pun .checklist legend span {
 1302:     width: auto;
 1303:     max-width: 25em;
 1304: }
 1305: 
 1306: .pun .checklist .checklist-item {
 1307:     position: relative;
 1308: }
 1309: 
 1310: .pun .checklist .checklist-item label {
 1311:     padding: 0 0 0 1.75em;
 1312: }
 1313: 
 1314: .pun .checklist .checklist-item .fld-input {
 1315:     position: absolute;
 1316:     left: 0;
 1317:     top: 0;
 1318:     padding: 0;
 1319:     margin: 0;
 1320: }
 1321: 
 1322: .pun .checklist .checklist-item input {
 1323:     margin: 0;
 1324:     height: 1.55em;
 1325:     width: 1.55em;
 1326: }
 1327: 
1278: /*****************************************************************1328: /*****************************************************************
1279: PROFILES (+ ADMIN MENU)1329: PROFILES (+ ADMIN MENU)
1280: *****************************************************************/1330: *****************************************************************/
1609:     background: #d59b9b;1659:     background: #d59b9b;
1610: }1660: }
1611: 1661: 
 1662: .pun .multiselect {
 1663:     color: #836359;
 1664: }
 1665: 
 1666: .pun .checklist {
 1667:     background: white;
 1668:     border-color: #ccc;
 1669: }
 1670: 
1612: /* Status Indicators1671: /* Status Indicators
1613: ----------------------------------------------------------------*/1672: ----------------------------------------------------------------*/
1614: 1673: 


a/style/Fire/base_admin.css b/style/Fire/base_admin.css
123:     text-align: center;123:     text-align: center;
124: }124: }
125: 125: 
126: #users2 .tcl, #users2 .tc3, #users2 .tc5, #bans1 .tcl, #bans1 .tc3, #bans1 .tc5, #bans1 .tc6 {126: #users2 .tcl, #bans1 .tcl {
127:     width: 15%;127:     width: auto;
128:     text-align: left;128:     text-align: left;
129: }129: }
130: 130: 
131: #users2 .tc2, #bans1 .tc2 {131: #users2 .tc2, #bans1 .tc2 {
132:     width: 22%;132:     width: 18%;
 133:     text-align: left;
 134: }
 135: 
 136: #users2 .tc3, #users2 .tc5, #bans1 .tc3, #bans1 .tc5, #bans1 .tc6 {
 137:     width: 12%;
133:     text-align: left;138:     text-align: left;
134: }139: }
135: 140: 
136: #users2 .tc4, #bans1 .tc4 {141: #users2 .tc4, #bans1 .tc4 {
137:     width: 8%;142:     width: 10%;
138:     text-align: center;143:     text-align: center;
139: }144: }
140: 145: 
141: #users2 .tcr, #bans1 .tcr {146: #users2 .tcr {
 147:     width: 20%;
 148:     white-space: nowrap;
 149: }
 150: 
 151: #bans1 .tcr {
 152:     width: 15%;
142:     white-space: nowrap;153:     white-space: nowrap;
143: }154: }
144: 155: 
 156: #users2 .tcmod {
 157:     width: 10%;
 158:     text-align: center;
 159: }
 160: 
145: .plugin p {161: .plugin p {
146:     padding: 12px 18px 0;162:     padding: 12px 18px 0;
147: }163: }


a/style/Lithium.css b/style/Lithium.css
 48:     min-height: 1px 48:     min-height: 1px
 49:     } 49:     }
 50:  50: 
  51: .clearl {
  52:     clear: left;
  53:     }
 51:  54: 
 52: /* Hidden Elements 55: /* Hidden Elements
 53: ----------------------------------------------------------------*/ 56: ----------------------------------------------------------------*/
 72:  75: 
 73: .pun { 76: .pun {
 74:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif; 77:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif;
  78:     line-height: normal;
 75:     } 79:     }
 76:  80: 
 77: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend { 81: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend {
108: .pun h2 {112: .pun h2 {
109:     font-size: 1em;113:     font-size: 1em;
110:     font-weight: normal;114:     font-weight: normal;
111:     padding: 4px 7px;115:     padding: 4px 6px;
112:     }116:     }
113: 117: 
114: .pun h3 {118: .pun h3 {
209: /* Page Layout213: /* Page Layout
210: ----------------------------------------------------------------*/214: ----------------------------------------------------------------*/
211: 215: 
 216: html, body {
 217:     margin: 0;
 218:     padding: 0
 219:     }
 220: 
212: .pun {221: .pun {
213:     margin: 12px 20px222:     margin: 12px 20px
214:     }223:     }
225:     margin: 0 0 12px 0;234:     margin: 0 0 12px 0;
226:     }235:     }
227: 236: 
 237: #brdtitle p {
 238:     padding-top: 0px
 239:     }
 240: 
228: #announce, #brdstats {241: #announce, #brdstats {
229:     margin: 12px 0 12px 0;242:     margin: 12px 0 12px 0;
230:     }243:     }
281: ----------------------------------------------------------------*/294: ----------------------------------------------------------------*/
282: 295: 
283: #brdtitle h1 {296: #brdtitle h1 {
284:     font-size: 1.454em;297:     font-size: 1.4em;
285:     font-weight: bold;298:     font-weight: bold;
286:     line-height: 1em; 
287:     padding: 3px 0 0 0;299:     padding: 3px 0 0 0;
288:     }300:     }
289: 301: 
290: #brddesc { 
291:     padding: 3px 0; 
292:     } 
293:  
294: #brddesc * { 
295:     padding-top: 0; 
296:     padding-bottom: 0; 
297:     } 
298:  
299: #brdmenu li {302: #brdmenu li {
300:     display: inline;303:     display: inline;
301:     margin-right: 12px;304:     margin-right: 12px;
435: 438: 
436: .pun td, .pun th {439: .pun td, .pun th {
437:     padding: 4px 6px;440:     padding: 4px 6px;
438:     line-height: 1.273em; 
439:     text-align: left;441:     text-align: left;
440:     font-weight: normal;442:     font-weight: normal;
441:     }443:     }
442: 444: 
443: .pun td {445: .pun td, .pun th {
444:     border-style: solid none none solid;446:     border-style: solid none none solid;
445:     border-width: 1px;447:     border-width: 1px;
446:     }448:     }
525:     }527:     }
526: 528: 
527: .pun .icon {529: .pun .icon {
528:     border-width: 7px;530:     margin: 0.1em 0 0 0.2em;
 531:     border-width: 0.6em;
529:     border-style: solid;532:     border-style: solid;
530:     height: 0;533:     height: 0;
531:     width: 0;534:     width: 0;
598:     margin-right: 10px601:     margin-right: 10px
599:     }602:     }
600: 603: 
601: .pun select { 
602:     padding-top: 1px; 
603:     padding-bottom: 1px; 
604:     } 
605:  
606: .pun fieldset .rbox { 
607:     } 
608:  
609: .pun fieldset .rbox br {604: .pun fieldset .rbox br {
610:     display: none;605:     display: none;
611:     }606:     }
665:     margin-right: 12px;660:     margin-right: 12px;
666:     }661:     }
667: 662: 
 663: .pun .multiselect {
 664:     float: left;
 665:     padding-bottom: 7px;
 666:     }
 667: 
 668: .pun .checklist {
 669:     border-width: 1px;
 670:     border-style: solid;
 671:     max-height: 9em;
 672:     width: 20em;
 673:     overflow: auto;
 674:     padding: 0.3em 0.5em;
 675:     margin: 0.25em 16px 0 0.15em;
 676:     }
 677: 
 678: .pun .checklist fieldset {
 679:     border: 0;
 680:     padding: 0;
 681:     }
 682: 
 683: .pun .checklist legend {
 684:     padding: 0;
 685:     }
 686: 
 687: .pun .checklist legend span {
 688:     width: auto;
 689:     max-width: 25em;
 690:     }
 691: 
 692: .pun .checklist .checklist-item {
 693:     position: relative;
 694:     margin: .2em 0;
 695:     }
 696: 
 697: .pun .checklist .checklist-item label {
 698:     padding: 0 0 0 2.1em;
 699:     }
 700: 
 701: .pun .checklist .checklist-item .fld-input {
 702:     position: absolute;
 703:     left: 0;
 704:     top: 0;
 705:     padding: 0;
 706:     margin: 0;
 707:     }
 708: 
 709: .pun .checklist .checklist-item input {
 710:     margin: 0;
 711:     height: 1.15em;
 712:     width: 1.55em;
 713:     }
 714: 
668: /*****************************************************************715: /*****************************************************************
669: 7. PROFILES AND ADMIN716: 7. PROFILES AND ADMIN
670: *****************************************************************/717: *****************************************************************/
674:     }721:     }
675: 722: 
676: .pun .block2col .blockform, .pun .block2col .block {723: .pun .block2col .blockform, .pun .block2col .block {
677:     margin-left: 17em724:     margin-left: 14em
678:     }725:     }
679: 726: 
680: .pun .blockmenu {727: .pun .blockmenu {
681:     float:left;728:     float:left;
682:     width: 16em729:     width: 13em
683:     }730:     }
684: 731: 
685: .pun .blockmenu li {732: .pun .blockmenu li {
756:     }803:     }
757: 804: 
758: .pun .postleft dl {805: .pun .postleft dl {
759:     padding: 0.75em 6px;806:     padding: 6px;
760:     }807:     }
761: 808: 
762: .pun .postleft .usercontacts, .pun .postleft .icon {809: .pun .postleft .usercontacts, .pun .postleft .icon {
807: 854: 
808: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,855: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,
809: .pun .postfootleft p {856: .pun .postfootleft p {
810:     padding: 6px 6px 6px 6px;857:     padding: 10px 6px 5px 6px;
811:     }858:     }
812: 859: 
813: .pun .postfootright li {860: .pun .postfootright li {
814:     display: inline;861:     display: inline;
815:     margin-left: 12px;862:     }
 863: 
 864: .pun .postfootright li:before {
 865:     content: " | ";
 866:     }
 867: 
 868: .pun .postfootright li:first-child:before {
 869:     content: "";
816:     }870:     }
817: 871: 
818: .pun .postfootright a:link, .pun .postfootright a:visited {872: .pun .postfootright a:link, .pun .postfootright a:visited {
926:     text-align: center;980:     text-align: center;
927:     }981:     }
928: 982: 
 983: #brdwelcome, #brdfooter dl a, div.blockmenu li, div.rbox input {
 984:     line-height: 1.4em
 985:     }
 986: 
 987: #announce div.inbox div {
 988:     padding: 3px 0
 989:     }
 990: 
929: /*****************************************************************991: /*****************************************************************
930: COLOUR SCHEME992: COLOUR SCHEME
931: *****************************************************************/993: *****************************************************************/
973:     color: #3331035:     color: #333
974:     }1036:     }
975: 1037: 
 1038: .pun .multiselect, .pun .checklist {
 1039:     color: #333;
 1040:     }
 1041: 
 1042: .pun .checklist {
 1043:     border-color: #ACA899;
 1044:     }
 1045: 
976: /* posts1046: /* posts
977: ----------------------------------------------------------------*/1047: ----------------------------------------------------------------*/
978: 1048: 
1020:     border-color: #cedeb91090:     border-color: #cedeb9
1021:     }1091:     }
1022: 1092: 
1023: .pun th, .pun fieldset {1093: .pun th {
1024:     border-color: #d1d1d11094:     border-color: #d1d1d1
1025:     }1095:     }
1026: 1096: 
 1097: .pun fieldset {
 1098:     border-color: #aca899
 1099:     }
 1100: 
1027: #adminconsole td, #adminconsole th {1101: #adminconsole td, #adminconsole th {
1028:     border-color: #f1f1f11102:     border-color: #f1f1f1
1029:     }1103:     }


a/style/Mercury.css b/style/Mercury.css
 48:     min-height: 1px 48:     min-height: 1px
 49:     } 49:     }
 50:  50: 
  51: .clearl {
  52:     clear: left;
  53:     }
 51:  54: 
 52: /* Hidden Elements 55: /* Hidden Elements
 53: ----------------------------------------------------------------*/ 56: ----------------------------------------------------------------*/
 72:  75: 
 73: .pun { 76: .pun {
 74:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif; 77:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif;
  78:     line-height: normal;
 75:     } 79:     }
 76:  80: 
 77: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend { 81: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend {
108: .pun h2 {112: .pun h2 {
109:     font-size: 1em;113:     font-size: 1em;
110:     font-weight: normal;114:     font-weight: normal;
111:     padding: 4px 7px;115:     padding: 4px 6px;
112:     }116:     }
113: 117: 
114: .pun h3 {118: .pun h3 {
209: /* Page Layout213: /* Page Layout
210: ----------------------------------------------------------------*/214: ----------------------------------------------------------------*/
211: 215: 
 216: html, body {
 217:     margin: 0;
 218:     padding: 0
 219:     }
 220: 
212: .pun {221: .pun {
213:     margin: 12px 20px222:     margin: 12px 20px
214:     }223:     }
225:     margin: 0 0 12px 0;234:     margin: 0 0 12px 0;
226:     }235:     }
227: 236: 
 237: #brdtitle p {
 238:     padding-top: 0px
 239:     }
 240: 
228: #announce, #brdstats {241: #announce, #brdstats {
229:     margin: 12px 0 12px 0;242:     margin: 12px 0 12px 0;
230:     }243:     }
281: ----------------------------------------------------------------*/294: ----------------------------------------------------------------*/
282: 295: 
283: #brdtitle h1 {296: #brdtitle h1 {
284:     font-size: 1.454em;297:     font-size: 1.4em;
285:     font-weight: bold;298:     font-weight: bold;
286:     line-height: 1em; 
287:     padding: 3px 0 0 0;299:     padding: 3px 0 0 0;
288:     }300:     }
289: 301: 
290: #brddesc { 
291:     padding: 3px 0; 
292:     } 
293:  
294: #brddesc * { 
295:     padding-top: 0; 
296:     padding-bottom: 0; 
297:     } 
298:  
299: #brdmenu li {302: #brdmenu li {
300:     display: inline;303:     display: inline;
301:     margin-right: 12px;304:     margin-right: 12px;
435: 438: 
436: .pun td, .pun th {439: .pun td, .pun th {
437:     padding: 4px 6px;440:     padding: 4px 6px;
438:     line-height: 1.273em; 
439:     text-align: left;441:     text-align: left;
440:     font-weight: normal;442:     font-weight: normal;
441:     }443:     }
442: 444: 
443: .pun td {445: .pun td, .pun th {
444:     border-style: solid none none solid;446:     border-style: solid none none solid;
445:     border-width: 1px;447:     border-width: 1px;
446:     }448:     }
525:     }527:     }
526: 528: 
527: .pun .icon {529: .pun .icon {
528:     border-width: 7px;530:     margin: 0.1em 0 0 0.2em;
 531:     border-width: 0.6em;
529:     border-style: solid;532:     border-style: solid;
530:     height: 0;533:     height: 0;
531:     width: 0;534:     width: 0;
598:     margin-right: 10px601:     margin-right: 10px
599:     }602:     }
600: 603: 
601: .pun select { 
602:     padding-top: 1px; 
603:     padding-bottom: 1px; 
604:     } 
605:  
606: .pun fieldset .rbox { 
607:     } 
608:  
609: .pun fieldset .rbox br {604: .pun fieldset .rbox br {
610:     display: none;605:     display: none;
611:     }606:     }
665:     margin-right: 12px;660:     margin-right: 12px;
666:     }661:     }
667: 662: 
 663: .pun .multiselect {
 664:     float: left;
 665:     padding-bottom: 7px;
 666:     }
 667: 
 668: .pun .checklist {
 669:     border-width: 1px;
 670:     border-style: solid;
 671:     max-height: 9em;
 672:     width: 20em;
 673:     overflow: auto;
 674:     padding: 0.3em 0.5em;
 675:     margin: 0.25em 16px 0 0.15em;
 676:     }
 677: 
 678: .pun .checklist fieldset {
 679:     border: 0;
 680:     padding: 0;
 681:     }
 682: 
 683: .pun .checklist legend {
 684:     padding: 0;
 685:     }
 686: 
 687: .pun .checklist legend span {
 688:     width: auto;
 689:     max-width: 25em;
 690:     }
 691: 
 692: .pun .checklist .checklist-item {
 693:     position: relative;
 694:     margin: .2em 0;
 695:     }
 696: 
 697: .pun .checklist .checklist-item label {
 698:     padding: 0 0 0 2.1em;
 699:     }
 700: 
 701: .pun .checklist .checklist-item .fld-input {
 702:     position: absolute;
 703:     left: 0;
 704:     top: 0;
 705:     padding: 0;
 706:     margin: 0;
 707:     }
 708: 
 709: .pun .checklist .checklist-item input {
 710:     margin: 0;
 711:     height: 1.15em;
 712:     width: 1.55em;
 713:     }
 714: 
668: /*****************************************************************715: /*****************************************************************
669: 7. PROFILES AND ADMIN716: 7. PROFILES AND ADMIN
670: *****************************************************************/717: *****************************************************************/
674:     }721:     }
675: 722: 
676: .pun .block2col .blockform, .pun .block2col .block {723: .pun .block2col .blockform, .pun .block2col .block {
677:     margin-left: 17em724:     margin-left: 14em
678:     }725:     }
679: 726: 
680: .pun .blockmenu {727: .pun .blockmenu {
681:     float:left;728:     float:left;
682:     width: 16em729:     width: 13em
683:     }730:     }
684: 731: 
685: .pun .blockmenu li {732: .pun .blockmenu li {
756:     }803:     }
757: 804: 
758: .pun .postleft dl {805: .pun .postleft dl {
759:     padding: 0.75em 6px;806:     padding: 6px;
760:     }807:     }
761: 808: 
762: .pun .postleft .usercontacts, .pun .postleft .icon {809: .pun .postleft .usercontacts, .pun .postleft .icon {
807: 854: 
808: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,855: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,
809: .pun .postfootleft p {856: .pun .postfootleft p {
810:     padding: 6px 6px 6px 6px;857:     padding: 10px 6px 5px 6px;
811:     }858:     }
812: 859: 
813: .pun .postfootright li {860: .pun .postfootright li {
814:     display: inline;861:     display: inline;
815:     margin-left: 12px;862:     }
 863: 
 864: .pun .postfootright li:before {
 865:     content: " | ";
 866:     }
 867: 
 868: .pun .postfootright li:first-child:before {
 869:     content: "";
816:     }870:     }
817: 871: 
818: .pun .postfootright a:link, .pun .postfootright a:visited {872: .pun .postfootright a:link, .pun .postfootright a:visited {
926:     text-align: center;980:     text-align: center;
927:     }981:     }
928: 982: 
 983: #brdwelcome, #brdfooter dl a, div.blockmenu li, div.rbox input {
 984:     line-height: 1.4em
 985:     }
 986: 
 987: #announce div.inbox div {
 988:     padding: 3px 0
 989:     }
 990: 
929: /*****************************************************************991: /*****************************************************************
930: COLOUR SCHEME992: COLOUR SCHEME
931: *****************************************************************/993: *****************************************************************/
978:     color: #d4d4d41040:     color: #d4d4d4
979:     }1041:     }
980: 1042: 
 1043: .pun .multiselect, .pun .checklist {
 1044:     color: #D4D4D4;
 1045:     }
 1046: 
 1047: .pun .checklist {
 1048:     border-color: #666;
 1049:     }
 1050: 
981: /* Posts1051: /* Posts
982: ----------------------------------------------------------------*/1052: ----------------------------------------------------------------*/
983: 1053: 
1021:     border-color: #5656561091:     border-color: #565656
1022:     }1092:     }
1023: 1093: 
1024: .pun th, .pun fieldset {1094: .pun th {
1025:     border-color: #4848481095:     border-color: #484848
1026:     }1096:     }
1027: 1097: 
 1098: .pun fieldset {
 1099:     border-color: #565656
 1100:     }
 1101: 
1028: #adminconsole td, #adminconsole th {1102: #adminconsole td, #adminconsole th {
1029:     border-color: #3838381103:     border-color: #383838
1030:     }1104:     }


a/style/Oxygen.css b/style/Oxygen.css
 48:     min-height: 1px 48:     min-height: 1px
 49:     } 49:     }
 50:  50: 
  51: .clearl {
  52:     clear: left;
  53:     }
 51:  54: 
 52: /* Hidden Elements 55: /* Hidden Elements
 53: ----------------------------------------------------------------*/ 56: ----------------------------------------------------------------*/
 72:  75: 
 73: .pun { 76: .pun {
 74:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif; 77:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif;
  78:     line-height: normal;
 75:     } 79:     }
 76:  80: 
 77: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun small, .pun samp, .pun legend { 81: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun small, .pun samp, .pun legend {
108: .pun h2 {112: .pun h2 {
109:     font-size: 1em;113:     font-size: 1em;
110:     font-weight: normal;114:     font-weight: normal;
111:     padding: 4px 7px;115:     padding: 4px 6px;
112:     }116:     }
113: 117: 
114: .pun h3 {118: .pun h3 {
210: /* Page Layout214: /* Page Layout
211: ----------------------------------------------------------------*/215: ----------------------------------------------------------------*/
212: 216: 
 217: html, body {
 218:     margin: 0;
 219:     padding: 0
 220:     }
 221: 
213: .pun {222: .pun {
214:     margin: 12px 20px223:     margin: 12px 20px
215:     }224:     }
226:     margin: 0 0 12px 0;235:     margin: 0 0 12px 0;
227:     }236:     }
228: 237: 
 238: #brdtitle p {
 239:     padding-top: 0px
 240:     }
 241: 
229: #announce, #brdstats {242: #announce, #brdstats {
230:     margin: 12px 0 12px 0;243:     margin: 12px 0 12px 0;
231:     }244:     }
282: ----------------------------------------------------------------*/295: ----------------------------------------------------------------*/
283: 296: 
284: #brdtitle h1 {297: #brdtitle h1 {
285:     font-size: 1.454em;298:     font-size: 1.4em;
286:     font-weight: bold;299:     font-weight: bold;
287:     line-height: 1em; 
288:     padding: 3px 0 0 0;300:     padding: 3px 0 0 0;
289:     }301:     }
290: 302: 
291: #brddesc { 
292:     padding: 3px 0; 
293:     } 
294:  
295: #brddesc * { 
296:     padding-top: 0; 
297:     padding-bottom: 0; 
298:     } 
299:  
300: #brdmenu li {303: #brdmenu li {
301:     display: inline;304:     display: inline;
302:     margin-right: 12px;305:     margin-right: 12px;
436: 439: 
437: .pun td, .pun th {440: .pun td, .pun th {
438:     padding: 4px 6px;441:     padding: 4px 6px;
439:     line-height: 1.273em; 
440:     text-align: left;442:     text-align: left;
441:     font-weight: normal;443:     font-weight: normal;
442:     }444:     }
443: 445: 
444: .pun td {446: .pun td, .pun th {
445:     border-style: solid none none solid;447:     border-style: solid none none solid;
446:     border-width: 1px;448:     border-width: 1px;
447:     }449:     }
526:     }528:     }
527: 529: 
528: .pun .icon {530: .pun .icon {
529:     border-width: 7px;531:     margin: 0.1em 0 0 0.2em;
 532:     border-width: 0.6em;
530:     border-style: solid;533:     border-style: solid;
531:     height: 0;534:     height: 0;
532:     width: 0;535:     width: 0;
599:     margin-right: 10px602:     margin-right: 10px
600:     }603:     }
601: 604: 
602: .pun select { 
603:     padding-top: 1px; 
604:     padding-bottom: 1px; 
605:     } 
606:  
607: .pun fieldset .rbox { 
608:     } 
609:  
610: .pun fieldset .rbox br {605: .pun fieldset .rbox br {
611:     display: none;606:     display: none;
612:     }607:     }
666:     margin-right: 12px;661:     margin-right: 12px;
667:     }662:     }
668: 663: 
 664: .pun .multiselect {
 665:     float: left;
 666:     padding-bottom: 7px;
 667:     }
 668: 
 669: .pun .checklist {
 670:     border-width: 1px;
 671:     border-style: solid;
 672:     max-height: 9em;
 673:     width: 20em;
 674:     overflow: auto;
 675:     padding: 0.3em 0.5em;
 676:     margin: 0.25em 16px 0 0.15em;
 677:     }
 678: 
 679: .pun .checklist fieldset {
 680:     border: 0;
 681:     padding: 0;
 682:     }
 683: 
 684: .pun .checklist legend {
 685:     padding: 0;
 686:     }
 687: 
 688: .pun .checklist legend span {
 689:     width: auto;
 690:     max-width: 25em;
 691:     }
 692: 
 693: .pun .checklist .checklist-item {
 694:     position: relative;
 695:     margin: .2em 0;
 696:     }
 697: 
 698: .pun .checklist .checklist-item label {
 699:     padding: 0 0 0 2.1em;
 700:     }
 701: 
 702: .pun .checklist .checklist-item .fld-input {
 703:     position: absolute;
 704:     left: 0;
 705:     top: 0;
 706:     padding: 0;
 707:     margin: 0;
 708:     }
 709: 
 710: .pun .checklist .checklist-item input {
 711:     margin: 0;
 712:     height: 1.15em;
 713:     width: 1.55em;
 714:     }
 715: 
669: /*****************************************************************716: /*****************************************************************
670: 7. PROFILES AND ADMIN717: 7. PROFILES AND ADMIN
671: *****************************************************************/718: *****************************************************************/
675:     }722:     }
676: 723: 
677: .pun .block2col .blockform, .pun .block2col .block {724: .pun .block2col .blockform, .pun .block2col .block {
678:     margin-left: 17em725:     margin-left: 14em
679:     }726:     }
680: 727: 
681: .pun .blockmenu {728: .pun .blockmenu {
682:     float:left;729:     float:left;
683:     width: 16em730:     width: 13em
684:     }731:     }
685: 732: 
686: .pun .blockmenu li {733: .pun .blockmenu li {
757:     }804:     }
758: 805: 
759: .pun .postleft dl {806: .pun .postleft dl {
760:     padding: 0.75em 6px;807:     padding: 6px;
761:     }808:     }
762: 809: 
763: .pun .postleft .usercontacts, .pun .postleft .icon {810: .pun .postleft .usercontacts, .pun .postleft .icon {
808: 855: 
809: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,856: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,
810: .pun .postfootleft p {857: .pun .postfootleft p {
811:     padding: 6px 6px 6px 6px;858:     padding: 10px 6px 5px 6px;
812:     }859:     }
813: 860: 
814: .pun .postfootright li {861: .pun .postfootright li {
815:     display: inline;862:     display: inline;
816:     margin-right: 12px;863:     }
 864: 
 865: .pun .postfootright li:before {
 866:     content: " | ";
 867:     }
 868: 
 869: .pun .postfootright li:first-child:before {
 870:     content: "";
817:     }871:     }
818: 872: 
819: .pun .postfootright a:link, .pun .postfootright a:visited {873: .pun .postfootright a:link, .pun .postfootright a:visited {
927:     text-align: center;981:     text-align: center;
928:     }982:     }
929: 983: 
 984: #brdwelcome, #brdfooter dl a, div.blockmenu li, div.rbox input {
 985:     line-height: 1.4em
 986:     }
 987: 
 988: #announce div.inbox div {
 989:     padding: 3px 0
 990:     }
 991: 
930: /*****************************************************************992: /*****************************************************************
931: COLOUR SCHEME993: COLOUR SCHEME
932: *****************************************************************/994: *****************************************************************/
974:     color: #3331036:     color: #333
975:     }1037:     }
976: 1038: 
 1039: .pun .multiselect, .pun .checklist {
 1040:     color: #333;
 1041:     }
 1042: 
 1043: .pun .checklist {
 1044:     border-color: #ACA899;
 1045:     }
 1046: 
977: /* Posts1047: /* Posts
978: ----------------------------------------------------------------*/1048: ----------------------------------------------------------------*/
979: 1049: 
1021:     border-color: #bbcede1091:     border-color: #bbcede
1022:     }1092:     }
1023: 1093: 
1024: .pun th, .pun fieldset {1094: .pun th {
1025:     border-color: #d1d1d11095:     border-color: #d1d1d1
1026:     }1096:     }
1027: 1097: 
 1098: .pun fieldset {
 1099:     border-color: #aca899
 1100:     }
 1101: 
1028: #adminconsole td, #adminconsole th {1102: #adminconsole td, #adminconsole th {
1029:     border-color: #f1f1f11103:     border-color: #f1f1f1
1030:     }1104:     }


a/style/Radium.css b/style/Radium.css
 48:     min-height: 1px 48:     min-height: 1px
 49:     } 49:     }
 50:  50: 
  51: .clearl {
  52:     clear: left;
  53:     }
 51:  54: 
 52: /* Hidden Elements 55: /* Hidden Elements
 53: ----------------------------------------------------------------*/ 56: ----------------------------------------------------------------*/
 72:  75: 
 73: .pun { 76: .pun {
 74:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif; 77:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif;
  78:     line-height: normal;
 75:     } 79:     }
 76:  80: 
 77: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend { 81: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend {
108: .pun h2 {112: .pun h2 {
109:     font-size: 1em;113:     font-size: 1em;
110:     font-weight: normal;114:     font-weight: normal;
111:     padding: 4px 7px;115:     padding: 4px 6px;
112:     }116:     }
113: 117: 
114: .pun h3 {118: .pun h3 {
209: /* Page Layout213: /* Page Layout
210: ----------------------------------------------------------------*/214: ----------------------------------------------------------------*/
211: 215: 
 216: html, body {
 217:     margin: 0;
 218:     padding: 0
 219:     }
 220: 
212: .pun {221: .pun {
213:     margin: 12px 20px222:     margin: 12px 20px
214:     }223:     }
225:     margin: 0 0 12px 0;234:     margin: 0 0 12px 0;
226:     }235:     }
227: 236: 
 237: #brdtitle p {
 238:     padding-top: 0px
 239:     }
 240: 
228: #announce, #brdstats {241: #announce, #brdstats {
229:     margin: 12px 0 12px 0;242:     margin: 12px 0 12px 0;
230:     }243:     }
281: ----------------------------------------------------------------*/294: ----------------------------------------------------------------*/
282: 295: 
283: #brdtitle h1 {296: #brdtitle h1 {
284:     font-size: 1.454em;297:     font-size: 1.4em;
285:     font-weight: bold;298:     font-weight: bold;
286:     line-height: 1em; 
287:     padding: 3px 0 0 0;299:     padding: 3px 0 0 0;
288:     }300:     }
289: 301: 
290: #brddesc { 
291:     padding: 3px 0; 
292:     } 
293:  
294: #brddesc * { 
295:     padding-top: 0; 
296:     padding-bottom: 0; 
297:     } 
298:  
299: #brdmenu li {302: #brdmenu li {
300:     display: inline;303:     display: inline;
301:     margin-right: 12px;304:     margin-right: 12px;
435: 438: 
436: .pun td, .pun th {439: .pun td, .pun th {
437:     padding: 4px 6px;440:     padding: 4px 6px;
438:     line-height: 1.273em; 
439:     text-align: left;441:     text-align: left;
440:     font-weight: normal;442:     font-weight: normal;
441:     }443:     }
442: 444: 
443: .pun td {445: .pun td, .pun th {
444:     border-style: solid none none solid;446:     border-style: solid none none solid;
445:     border-width: 1px;447:     border-width: 1px;
446:     }448:     }
525:     }527:     }
526: 528: 
527: .pun .icon {529: .pun .icon {
528:     border-width: 7px;530:     margin: 0.1em 0 0 0.2em;
 531:     border-width: 0.6em;
529:     border-style: solid;532:     border-style: solid;
530:     height: 0;533:     height: 0;
531:     width: 0;534:     width: 0;
598:     margin-right: 10px601:     margin-right: 10px
599:     }602:     }
600: 603: 
601: .pun select { 
602:     padding-top: 1px; 
603:     padding-bottom: 1px; 
604:     } 
605:  
606: .pun fieldset .rbox { 
607:     } 
608:  
609: .pun fieldset .rbox br {604: .pun fieldset .rbox br {
610:     display: none;605:     display: none;
611:     }606:     }
665:     margin-right: 12px;660:     margin-right: 12px;
666:     }661:     }
667: 662: 
 663: .pun .multiselect {
 664:     float: left;
 665:     padding-bottom: 7px;
 666:     }
 667: 
 668: .pun .checklist {
 669:     border-width: 1px;
 670:     border-style: solid;
 671:     max-height: 9em;
 672:     width: 20em;
 673:     overflow: auto;
 674:     padding: 0.3em 0.5em;
 675:     margin: 0.25em 16px 0 0.15em;
 676:     }
 677: 
 678: .pun .checklist fieldset {
 679:     border: 0;
 680:     padding: 0;
 681:     }
 682: 
 683: .pun .checklist legend {
 684:     padding: 0;
 685:     }
 686: 
 687: .pun .checklist legend span {
 688:     width: auto;
 689:     max-width: 25em;
 690:     }
 691: 
 692: .pun .checklist .checklist-item {
 693:     position: relative;
 694:     margin: .2em 0;
 695:     }
 696: 
 697: .pun .checklist .checklist-item label {
 698:     padding: 0 0 0 2.1em;
 699:     }
 700: 
 701: .pun .checklist .checklist-item .fld-input {
 702:     position: absolute;
 703:     left: 0;
 704:     top: 0;
 705:     padding: 0;
 706:     margin: 0;
 707:     }
 708: 
 709: .pun .checklist .checklist-item input {
 710:     margin: 0;
 711:     height: 1.15em;
 712:     width: 1.55em;
 713:     }
 714: 
668: /*****************************************************************715: /*****************************************************************
669: 7. PROFILES AND ADMIN716: 7. PROFILES AND ADMIN
670: *****************************************************************/717: *****************************************************************/
674:     }721:     }
675: 722: 
676: .pun .block2col .blockform, .pun .block2col .block {723: .pun .block2col .blockform, .pun .block2col .block {
677:     margin-left: 17em724:     margin-left: 14em
678:     }725:     }
679: 726: 
680: .pun .blockmenu {727: .pun .blockmenu {
681:     float:left;728:     float:left;
682:     width: 16em729:     width: 13em
683:     }730:     }
684: 731: 
685: .pun .blockmenu li {732: .pun .blockmenu li {
756:     }803:     }
757: 804: 
758: .pun .postleft dl {805: .pun .postleft dl {
759:     padding: 0.75em 6px;806:     padding: 6px;
760:     }807:     }
761: 808: 
762: .pun .postleft .usercontacts, .pun .postleft .icon {809: .pun .postleft .usercontacts, .pun .postleft .icon {
807: 854: 
808: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,855: .pun .postfootright ul, .pun .postfootright div, .pun .postfootright p,
809: .pun .postfootleft p {856: .pun .postfootleft p {
810:     padding: 6px 6px 6px 6px;857:     padding: 10px 6px 5px 6px;
811:     }858:     }
812: 859: 
813: .pun .postfootright li {860: .pun .postfootright li {
814:     display: inline;861:     display: inline;
815:     margin-left: 12px;862:     }
 863: 
 864: .pun .postfootright li:before {
 865:     content: " | ";
 866:     }
 867: 
 868: .pun .postfootright li:first-child:before {
 869:     content: "";
816:     }870:     }
817: 871: 
818: .pun .postfootright a:link, .pun .postfootright a:visited {872: .pun .postfootright a:link, .pun .postfootright a:visited {
926:     text-align: center;980:     text-align: center;
927:     }981:     }
928: 982: 
 983: #brdwelcome, #brdfooter dl a, div.blockmenu li, div.rbox input {
 984:     line-height: 1.4em
 985:     }
 986: 
 987: #announce div.inbox div {
 988:     padding: 3px 0
 989:     }
 990: 
929: /*****************************************************************991: /*****************************************************************
930: COLOUR SCHEME992: COLOUR SCHEME
931: *****************************************************************/993: *****************************************************************/
978:     color: #d4d4d41040:     color: #d4d4d4
979:     }1041:     }
980: 1042: 
 1043: .pun .multiselect, .pun .checklist {
 1044:     color: #D4D4D4;
 1045:     }
 1046: 
 1047: .pun .checklist {
 1048:     border-color: #666;
 1049:     }
 1050: 
981: /* Posts1051: /* Posts
982: ----------------------------------------------------------------*/1052: ----------------------------------------------------------------*/
983: 1053: 
1021:     border-color: #5656561091:     border-color: #565656
1022:     }1092:     }
1023: 1093: 
1024: .pun th, .pun fieldset {1094: .pun th {
1025:     border-color: #4848481095:     border-color: #484848
1026:     }1096:     }
1027: 1097: 
 1098: .pun fieldset {
 1099:     border-color: #606060
 1100:     }
 1101: 
1028: #adminconsole td, #adminconsole th {1102: #adminconsole td, #adminconsole th {
1029:     border-color: #3838381103:     border-color: #383838
1030:     }1104:     }


a/style/Sulfur.css b/style/Sulfur.css
 48:     min-height: 1px 48:     min-height: 1px
 49:     } 49:     }
 50:  50: 
  51: .clearl {
  52:     clear: left;
  53:     }
 51:  54: 
 52: /* Hidden Elements 55: /* Hidden Elements
 53: ----------------------------------------------------------------*/ 56: ----------------------------------------------------------------*/
 72:  75: 
 73: .pun { 76: .pun {
 74:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif; 77:     font: 68.75%/1.4545em Verdana, Helvetica, Arial, sans-serif;
  78:     line-height: normal;
 75:     } 79:     }
 76:  80: 
 77: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend { 81: .pun table, .pun td, .pun th, .pun input, .pun select, .pun optgroup, .pun textarea, .pun samp, .pun legend {
108: .pun h2 {112: .pun h2 {
109:     font-size: 1em;113:     font-size: 1em;
110:     font-weight: normal;114:     font-weight: normal;
111:     padding: 4px 7px;115:     padding: 4px 6px;
112:     }116:     }
113: 117: 
114: .pun h3 {118: .pun h3 {
209: /* Page Layout213: /* Page Layout
210: ----------------------------------------------------------------*/214: ----------------------------------------------------------------*/
211: 215: 
 216: html, body {
 217:     margin: 0;
 218:     padding: 0
 219:     }
 220: 
212: .pun {221: .pun {
213:     margin: 12px 20px222:     margin: 12px 20px
214:     }223:     }
225:     margin: 0 0 12px 0;234:     margin: 0 0 12px 0;
226:     }235:     }
227: 236: 
 237: #brdtitle p {
 238:     padding-top: 0px
 239:     }
 240: 
228: #announce, #brdstats {241: #announce, #brdstats {
229:     margin: 12px 0 12px 0;242:     margin: 12px 0 12px 0;
230:     }243:     }
281: ----------------------------------------------------------------*/294: ----------------------------------------------------------------*/
282: 295: 
283: #brdtitle h1 {296: #brdtitle h1 {
284:     font-size: 1.454em;297:     font-size: 1.4em;
285:     font-weight: bold;298:     font-weight: bold;
286:     line-height: 1em; 
287:     padding: 3px 0 0 0;299:     padding: 3px 0 0 0;
288:     }300:     }
289: 301: 
290: #brddesc { 
291:     padding: 3px 0; 
292:     } 
293:  
294: #brddesc * { 
295:     padding-top: 0; 
296:     padding-bottom: 0; 
297:     } 
298:  
299: #brdmenu li {302: #brdmenu li {
300:     display: inline;303:     display: inline;
301:     margin-right: 12px;304:     margin-right: 12px;
435: 438: 
436: .pun td, .pun th {439: .pun td, .pun th {
437:     padding: 4px 6px;440:     padding: 4px 6px;
438:     line-height: 1.273em; 
439:     text-align: left;441:     text-align: left;
440:     font-weight: normal;442:     font-weight: normal;
441:     }443:     }
442: 444: 
443: .pun td {445: .pun td, .pun th {
444:     border-style: solid none none solid;446:     border-style: solid none none solid;
445:     border-width: 1px;447:     border-width: 1px;
446:     }448:     }
525:     }527:     }
526: 528: 
527: .pun .icon {529: .pun .icon {
528:     border-width: 7px;530:     margin: 0.1em 0 0 0.2em;
 531:     border-width: 0.6em;
529:     border-style: solid;532:     border-style: solid;
530:     height: 0;533:     height: 0;
531:     width: 0;534:     width: 0;
598:     margin-right: 10px601:     margin-right: 10px
599:     }602:     }
600: 603: 
601: .pun select { 
602:     padding-top: 1px; 
603:     padding-bottom: 1px; 
604:     } 
605:  
606: .pun fieldset .rbox { 
607:     } 
608:  
609: .pun fieldset .rbox br {604: .pun fieldset .rbox br {
610:     display: none;605:     display: none;
611:     }606:     }
665:     margin-right: 12px;660:     margin-right: 12px;
666:     }661:     }
667: 662: 
 663: .pun .multiselect {
 664:     float: left;
 665:     padding-bottom: 7px;
 666:     }
 667: 
 668: .pun .checklist {
 669:     border-width: 1px;
 670:     border-style: solid;
 671:     max-height: 9em;
 672:     width: 20em;
 673:     overflow: auto;
 674:     padding: 0.3em 0.5em;
 675:     margin: 0.25em 16px 0 0.15em;
 676:     }
 677: 
 678: .pun .checklist fieldset {
 679:     border: 0;
 680:     padding: 0;
 681:     }
 682: 
 683: .pun .checklist legend {
 684:     padding: 0;
 685:     }
 686: 
 687: .pun .checklist legend span {
 688:     width: auto;
 689:     max-width: 25em;
 690:     }
 691: 
 692: .pun .checklist .checklist-item {
 693:     position: relative;
 694:     margin: .2em 0;
 695:     }
 696: 
 697: .pun .checklist .checklist-item label {
 698:     padding: 0 0 0 2.1em;
 699:     }
 700: 
 701: .pun .checklist .checklist-item .fld-input {
 702:     position: absolute;
 703:     left: 0;
 704:     top: 0;
 705:     padding: 0;
 706:     margin: 0;
 707:     }
 708: 
 709: .pun .checklist .checklist-item input {
 710:     margin: 0;
 711:     height: 1.15em;
 712:     width: 1.55em;
 713:     }
 714: 
668: /*****************************************************************715: /*****************************************************************
669: 7. PROFILES AND ADMIN716: 7. PROFILES AND ADMIN
670: *****************************************************************/717: *****************************************************************/
674: