################################################################################ ## ## Hack Title: phpBB 2.0.21 - 2.0.22 Code Changes ## Hack Version: 1.0.0 ## Hack Author: Complied by Thoul, code by phpBB Group ## Hack Description: All changes in phpBB made between 2.0.21 and 2.0.22. ## ## Compatibility: 2.0.21 ## Installation Level: Moderate ## Installation Time: 20 minutes ## ## Files To Edit: 15 ## admin/admin_board.php ## groupcp.php ## includes/functions.php ## includes/usercp_email.php ## includes/usercp_register.php ## language/lang_english/lang_main.php ## login.php ## memberlist.php ## modcp.php ## posting.php ## privmsg.php ## search.php ## viewforum.php ## viewtopic.php ## templates/subSilver/posting_body.tpl ## ## Support: http://www.phpbbhacks.com/forums ## ################################################################################ ## ## You downloaded this hack from phpBBHacks.com, ## the #1 source for phpBB related downloads. ## ## Please visit http://www.phpbbhacks.com/forums for support. ## ################################################################################ ## ## This hack is released under the GPL License. ## ################################################################################ ## ## BEFORE ADDING THIS HACK TO YOUR FORUM, please be sure to backup ALL ## affected files. ## ################################################################################ ## ##----------[ PLEASE NOTE ]------------------------------ ## ## Once you have completed the code changes, create an install/ directory in ## your forum's root directory, and upload the update_to_latest.php file that ## comes in any phpBB 2.0.22 download to the install/ directory. Run ## update_to_latest.php by opening it via your web browser, just as you would a ## normal forum page. Afterward, delete the file and the install/ directory so ## that your forum is accessible again. ## You can find a download of phpBB 2.0.22 that includes update_to_latest.php ## at http://www.phpbbhacks.com/phpbbinfo.php ## ## ##----------[ OPEN ]------------------------------------- ## admin/admin_board.php ## ##----------[ FIND ]------------------------------------- ## $new['server_name'] = str_replace('http://', '', $new['server_name']); } ## ##----------[ AFTER, ADD ]------------------------------- ## // Attempt to prevent a mistake with this value. if ($config_name == 'avatar_path') { $new['avatar_path'] = trim($new['avatar_path']); if (strstr($new['avatar_path'], "\0") || !is_dir($phpbb_root_path . $new['avatar_path']) || !is_writable($phpbb_root_path . $new['avatar_path'])) { $new['avatar_path'] = $default_config['avatar_path']; } } ## ##----------[ OPEN ]------------------------------------- ## groupcp.php ## ##----------[ FIND ]------------------------------------- ## $start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0; ## ##----------[ AFTER, ADD ]------------------------------- ## $start = ($start < 0) ? 0 : $start; ## ##----------[ FIND ]------------------------------------- ## FROM " . AUTH_ACCESS_TABLE . " aa WHERE aa.group_id = g.group_id ) )"; ## ##----------[ REPLACE WITH ]----------------------------- ## FROM " . AUTH_ACCESS_TABLE . " aa WHERE aa.group_id = g.group_id ) ) ORDER BY aa.auth_mod DESC"; ## ##----------[ FIND ]------------------------------------- ## $sql = "SELECT g.group_moderator, g.group_type, aa.auth_mod FROM " . GROUPS_TABLE . " g, " . AUTH_ACCESS_TABLE . " aa WHERE g.group_id = $group_id AND aa.group_id (+) = g.group_id"; ## ##----------[ REPLACE WITH ]----------------------------- ## $sql = "SELECT g.group_moderator, g.group_type, aa.auth_mod FROM " . GROUPS_TABLE . " g, " . AUTH_ACCESS_TABLE . " aa WHERE g.group_id = $group_id AND aa.group_id (+) = g.group_id ORDER BY aa.auth_mod DESC"; ## ##----------[ FIND ]------------------------------------- ## $sql = "SELECT g.group_moderator, g.group_type, aa.auth_mod FROM ( " . GROUPS_TABLE . " g LEFT JOIN " . AUTH_ACCESS_TABLE . " aa ON aa.group_id = g.group_id ) WHERE g.group_id = $group_id"; ## ##----------[ REPLACE WITH ]----------------------------- ## $sql = "SELECT g.group_moderator, g.group_type, aa.auth_mod FROM ( " . GROUPS_TABLE . " g LEFT JOIN " . AUTH_ACCESS_TABLE . " aa ON aa.group_id = g.group_id ) WHERE g.group_id = $group_id ORDER BY aa.auth_mod DESC"; ## ##----------[ OPEN ]------------------------------------- ## includes/functions.php ## ##----------[ FIND ]------------------------------------- ## if (strstr(urldecode($url), "\n") || strstr(urldecode($url), "\r")) ## ##----------[ REPLACE WITH ]----------------------------- ## if (strstr(urldecode($url), "\n") || strstr(urldecode($url), "\r") || strstr(urldecode($url), ';url')) ## ##----------[ OPEN ]------------------------------------- ## includes/usercp_email.php ## ##----------[ FIND ]------------------------------------- ## $row = $db->sql_fetchrow($result); ## ##----------[ REPLACE WITH ]----------------------------- ## if ( $row = $db->sql_fetchrow($result) ) { ## ##----------[ FIND ]------------------------------------- ## ## This change alters only the amount of spacing before each line. ## It has no effect on the function of your forum, so you could skip ## this if you so desire. Doing so may effect the install process of ## modifications later, however. ## $username = $row['username']; $user_email = $row['user_email']; $user_lang = $row['user_lang']; if ( $row['user_viewemail'] || $userdata['user_level'] == ADMIN ) { if ( time() - $userdata['user_emailtime'] < $board_config['flood_interval'] ) { message_die(GENERAL_MESSAGE, $lang['Flood_email_limit']); } if ( isset($HTTP_POST_VARS['submit']) ) { $error = FALSE; if ( !empty($HTTP_POST_VARS['subject']) ) { $subject = trim(stripslashes($HTTP_POST_VARS['subject'])); } else { $error = TRUE; $error_msg = ( !empty($error_msg) ) ? $error_msg . '
' . $lang['Empty_subject_email'] : $lang['Empty_subject_email']; } if ( !empty($HTTP_POST_VARS['message']) ) { $message = trim(stripslashes($HTTP_POST_VARS['message'])); } else { $error = TRUE; $error_msg = ( !empty($error_msg) ) ? $error_msg . '
' . $lang['Empty_message_email'] : $lang['Empty_message_email']; } if ( !$error ) { $sql = "UPDATE " . USERS_TABLE . " SET user_emailtime = " . time() . " WHERE user_id = " . $userdata['user_id']; if ( $result = $db->sql_query($sql) ) { include($phpbb_root_path . 'includes/emailer.'.$phpEx); $emailer = new emailer($board_config['smtp_delivery']); $emailer->from($userdata['user_email']); $emailer->replyto($userdata['user_email']); $email_headers = 'X-AntiAbuse: Board servername - ' . $server_name . "\n"; $email_headers .= 'X-AntiAbuse: User_id - ' . $userdata['user_id'] . "\n"; $email_headers .= 'X-AntiAbuse: Username - ' . $userdata['username'] . "\n"; $email_headers .= 'X-AntiAbuse: User IP - ' . decode_ip($user_ip) . "\n"; $emailer->use_template('profile_send_email', $user_lang); $emailer->email_address($user_email); $emailer->set_subject($subject); $emailer->extra_headers($email_headers); $emailer->assign_vars(array( 'SITENAME' => $board_config['sitename'], 'BOARD_EMAIL' => $board_config['board_email'], 'FROM_USERNAME' => $userdata['username'], 'TO_USERNAME' => $username, 'MESSAGE' => $message) ); $emailer->send(); $emailer->reset(); if ( !empty($HTTP_POST_VARS['cc_email']) ) { $emailer->from($userdata['user_email']); $emailer->replyto($userdata['user_email']); $emailer->use_template('profile_send_email'); $emailer->email_address($userdata['user_email']); $emailer->set_subject($subject); $emailer->assign_vars(array( 'SITENAME' => $board_config['sitename'], 'BOARD_EMAIL' => $board_config['board_email'], 'FROM_USERNAME' => $userdata['username'], 'TO_USERNAME' => $username, 'MESSAGE' => $message) ); $emailer->send(); $emailer->reset(); } $template->assign_vars(array( 'META' => '') ); $message = $lang['Email_sent'] . '

' . sprintf($lang['Click_return_index'], '', ''); message_die(GENERAL_MESSAGE, $message); } else { message_die(GENERAL_ERROR, 'Could not update last email time', '', __LINE__, __FILE__, $sql); } } } include($phpbb_root_path . 'includes/page_header.'.$phpEx); $template->set_filenames(array( 'body' => 'profile_send_email.tpl') ); make_jumpbox('viewforum.'.$phpEx); if ( $error ) { $template->set_filenames(array( 'reg_header' => 'error_body.tpl') ); $template->assign_vars(array( 'ERROR_MESSAGE' => $error_msg) ); $template->assign_var_from_handle('ERROR_BOX', 'reg_header'); } $template->assign_vars(array( 'USERNAME' => $username, 'S_HIDDEN_FIELDS' => '', 'S_POST_ACTION' => append_sid("profile.$phpEx?mode=email&" . POST_USERS_URL . "=$user_id"), 'L_SEND_EMAIL_MSG' => $lang['Send_email_msg'], 'L_RECIPIENT' => $lang['Recipient'], 'L_SUBJECT' => $lang['Subject'], 'L_MESSAGE_BODY' => $lang['Message_body'], 'L_MESSAGE_BODY_DESC' => $lang['Email_message_desc'], 'L_EMPTY_SUBJECT_EMAIL' => $lang['Empty_subject_email'], 'L_EMPTY_MESSAGE_EMAIL' => $lang['Empty_message_email'], 'L_OPTIONS' => $lang['Options'], 'L_CC_EMAIL' => $lang['CC_email'], 'L_SPELLCHECK' => $lang['Spellcheck'], 'L_SEND_EMAIL' => $lang['Send_email']) ); $template->pparse('body'); include($phpbb_root_path . 'includes/page_tail.'.$phpEx); } else { message_die(GENERAL_MESSAGE, $lang['User_prevent_email']); } } else { message_die(GENERAL_MESSAGE, $lang['User_not_exist']); } ## ##----------[ REPLACE WITH ]----------------------------- ## $username = $row['username']; $user_email = $row['user_email']; $user_lang = $row['user_lang']; if ( $row['user_viewemail'] || $userdata['user_level'] == ADMIN ) { if ( time() - $userdata['user_emailtime'] < $board_config['flood_interval'] ) { message_die(GENERAL_MESSAGE, $lang['Flood_email_limit']); } if ( isset($HTTP_POST_VARS['submit']) ) { $error = FALSE; if ( !empty($HTTP_POST_VARS['subject']) ) { $subject = trim(stripslashes($HTTP_POST_VARS['subject'])); } else { $error = TRUE; $error_msg = ( !empty($error_msg) ) ? $error_msg . '
' . $lang['Empty_subject_email'] : $lang['Empty_subject_email']; } if ( !empty($HTTP_POST_VARS['message']) ) { $message = trim(stripslashes($HTTP_POST_VARS['message'])); } else { $error = TRUE; $error_msg = ( !empty($error_msg) ) ? $error_msg . '
' . $lang['Empty_message_email'] : $lang['Empty_message_email']; } if ( !$error ) { $sql = "UPDATE " . USERS_TABLE . " SET user_emailtime = " . time() . " WHERE user_id = " . $userdata['user_id']; if ( $result = $db->sql_query($sql) ) { include($phpbb_root_path . 'includes/emailer.'.$phpEx); $emailer = new emailer($board_config['smtp_delivery']); $emailer->from($userdata['user_email']); $emailer->replyto($userdata['user_email']); $email_headers = 'X-AntiAbuse: Board servername - ' . $server_name . "\n"; $email_headers .= 'X-AntiAbuse: User_id - ' . $userdata['user_id'] . "\n"; $email_headers .= 'X-AntiAbuse: Username - ' . $userdata['username'] . "\n"; $email_headers .= 'X-AntiAbuse: User IP - ' . decode_ip($user_ip) . "\n"; $emailer->use_template('profile_send_email', $user_lang); $emailer->email_address($user_email); $emailer->set_subject($subject); $emailer->extra_headers($email_headers); $emailer->assign_vars(array( 'SITENAME' => $board_config['sitename'], 'BOARD_EMAIL' => $board_config['board_email'], 'FROM_USERNAME' => $userdata['username'], 'TO_USERNAME' => $username, 'MESSAGE' => $message) ); $emailer->send(); $emailer->reset(); if ( !empty($HTTP_POST_VARS['cc_email']) ) { $emailer->from($userdata['user_email']); $emailer->replyto($userdata['user_email']); $emailer->use_template('profile_send_email'); $emailer->email_address($userdata['user_email']); $emailer->set_subject($subject); $emailer->assign_vars(array( 'SITENAME' => $board_config['sitename'], 'BOARD_EMAIL' => $board_config['board_email'], 'FROM_USERNAME' => $userdata['username'], 'TO_USERNAME' => $username, 'MESSAGE' => $message) ); $emailer->send(); $emailer->reset(); } $template->assign_vars(array( 'META' => '') ); $message = $lang['Email_sent'] . '

' . sprintf($lang['Click_return_index'], '', ''); message_die(GENERAL_MESSAGE, $message); } else { message_die(GENERAL_ERROR, 'Could not update last email time', '', __LINE__, __FILE__, $sql); } } } include($phpbb_root_path . 'includes/page_header.'.$phpEx); $template->set_filenames(array( 'body' => 'profile_send_email.tpl') ); make_jumpbox('viewforum.'.$phpEx); if ( $error ) { $template->set_filenames(array( 'reg_header' => 'error_body.tpl') ); $template->assign_vars(array( 'ERROR_MESSAGE' => $error_msg) ); $template->assign_var_from_handle('ERROR_BOX', 'reg_header'); } $template->assign_vars(array( 'USERNAME' => $username, 'S_HIDDEN_FIELDS' => '', 'S_POST_ACTION' => append_sid("profile.$phpEx?mode=email&" . POST_USERS_URL . "=$user_id"), 'L_SEND_EMAIL_MSG' => $lang['Send_email_msg'], 'L_RECIPIENT' => $lang['Recipient'], 'L_SUBJECT' => $lang['Subject'], 'L_MESSAGE_BODY' => $lang['Message_body'], 'L_MESSAGE_BODY_DESC' => $lang['Email_message_desc'], 'L_EMPTY_SUBJECT_EMAIL' => $lang['Empty_subject_email'], 'L_EMPTY_MESSAGE_EMAIL' => $lang['Empty_message_email'], 'L_OPTIONS' => $lang['Options'], 'L_CC_EMAIL' => $lang['CC_email'], 'L_SPELLCHECK' => $lang['Spellcheck'], 'L_SEND_EMAIL' => $lang['Send_email']) ); $template->pparse('body'); include($phpbb_root_path . 'includes/page_tail.'.$phpEx); } else { message_die(GENERAL_MESSAGE, $lang['User_prevent_email']); } } else { message_die(GENERAL_MESSAGE, $lang['User_not_exist']); } ## ##----------[ FIND ]------------------------------------- ## ## This is the last line of the file. Delete any space after it. ## ?> ## ##----------[ BEFORE, ADD ]------------------------------ ## } else { message_die(GENERAL_ERROR, 'Could not select user data', '', __LINE__, __FILE__, $sql); } ## ##----------[ OPEN ]------------------------------------- ## includes/usercp_register.php ## ##----------[ FIND ]------------------------------------- ## $popup_pm = ( isset($HTTP_POST_VARS['popup_pm']) ) ? ( ($HTTP_POST_VARS['popup_pm']) ? TRUE : 0 ) : TRUE; ## ##----------[ AFTER, ADD ]------------------------------- ## $sid = (isset($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : 0; ## ##----------[ FIND ]------------------------------------- ## include($phpbb_root_path . 'includes/usercp_avatar.'.$phpEx); ## ##----------[ AFTER, ADD ]------------------------------- ## // session id check if ($sid == '' || $sid != $userdata['session_id']) { $error = true; $error_msg .= ( ( isset($error_msg) ) ? '
' : '' ) . $lang['Session_invalid']; } ## ##----------[ FIND ]------------------------------------- ## message_die(GENERAL_ERROR, 'Could not obtain confirmation code', __LINE__, __FILE__, $sql); ## ##----------[ REPLACE WITH ]----------------------------- ## message_die(GENERAL_ERROR, 'Could not obtain confirmation code', '', __LINE__, __FILE__, $sql); ## ##----------[ FIND ]------------------------------------- ## message_die(GENERAL_ERROR, 'Could not delete confirmation code', __LINE__, __FILE__, $sql); ## ##----------[ REPLACE WITH ]----------------------------- ## message_die(GENERAL_ERROR, 'Could not delete confirmation code', '', __LINE__, __FILE__, $sql); ## ##----------[ FIND ]------------------------------------- ## $s_hidden_fields = ''; ## ##----------[ AFTER, ADD ]------------------------------- ## $s_hidden_fields .= ''; ## ##----------[ OPEN ]------------------------------------- ## language/lang_english/lang_main.php ## ##----------[ FIND ]------------------------------------- ## // // That's all, Folks! // ------------------------------------------------- ## ##----------[ BEFORE, ADD ]------------------------------ ## $lang['Session_invalid'] = 'Invalid Session. Please resubmit the form.'; ## ##----------[ OPEN ]------------------------------------- ## login.php ## ##----------[ FIND ]------------------------------------- ## if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r")) ## ##----------[ REPLACE WITH ]----------------------------- ## if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r") || strstr(urldecode($redirect), ';url')) ## ##----------[ FIND ]------------------------------------- ## if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r")) ## ##----------[ REPLACE WITH ]----------------------------- ## if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r") || strstr(urldecode($redirect), ';url')) ## ##----------[ OPEN ]------------------------------------- ## memberlist.php ## ##----------[ FIND ]------------------------------------- ## $start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0; ## ##----------[ AFTER, ADD ]------------------------------- ## $start = ($start < 0) ? 0 : $start; ## ##----------[ OPEN ]------------------------------------- ## modcp.php ## ##----------[ FIND ]------------------------------------- ## $start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0; ## ##----------[ AFTER, ADD ]------------------------------- ## $start = ($start < 0) ? 0 : $start; ## ##----------[ OPEN ]------------------------------------- ## posting.php ## ##----------[ FIND ]------------------------------------- ## $confirm = isset($HTTP_POST_VARS['confirm']) ? true : false; ## ##----------[ AFTER, ADD ]------------------------------- ## $sid = (isset($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : 0; ## ##----------[ FIND ]------------------------------------- ## message_die(GENERAL_MESSAGE, $lang['No_valid_mode']); } if ( $result = $db->sql_query($sql) ) { $post_info = $db->sql_fetchrow($result); $db->sql_freeresult($result); ## ##----------[ REPLACE WITH ]----------------------------- ## message_die(GENERAL_MESSAGE, $lang['No_valid_mode']); } if ( ($result = $db->sql_query($sql)) && ($post_info = $db->sql_fetchrow($result)) ) { $db->sql_freeresult($result); ## ##----------[ FIND ]------------------------------------- ## $s_hidden_fields .= ( $delete || $mode == "delete" ) ? '' : ''; ## ##----------[ AFTER, ADD ]------------------------------- ## $s_hidden_fields .= ''; ## ##----------[ FIND ]------------------------------------- ## $return_message = ''; $return_meta = ''; ## ##----------[ AFTER, ADD ]------------------------------- ## // session id check if ($sid == '' || $sid != $userdata['session_id']) { $error_msg .= (!empty($error_msg)) ? '
' . $lang['Session_invalid'] : $lang['Session_invalid']; } ## ##----------[ FIND ]------------------------------------- ## case 'delete': case 'poll_delete': ## ##----------[ AFTER, ADD ]------------------------------- ## if ($error_msg != '') { message_die(GENERAL_MESSAGE, $error_msg); } ## ##----------[ FIND ]------------------------------------- ## $hidden_form_fields = ''; ## ##----------[ AFTER, ADD ]------------------------------- ## $hidden_form_fields .= ''; ## ##----------[ OPEN ]------------------------------------- ## privmsg.php ## ##----------[ FIND ]------------------------------------- ## $save = ( isset($HTTP_POST_VARS['save']) ) ? TRUE : 0; ## ##----------[ AFTER, ADD ]------------------------------- ## $sid = (isset($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : 0; ## ##----------[ FIND ]------------------------------------- ## $start = ( !empty($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0; ## ##----------[ AFTER, ADD ]------------------------------- ## $start = ($start < 0) ? 0 : $start; ## ##----------[ FIND ]------------------------------------- ## if ( !empty($HTTP_POST_VARS['username']) ) ## ##----------[ BEFORE, ADD ]------------------------------- ## // session id check if ($sid == '' || $sid != $userdata['session_id']) { $error = true; $error_msg .= ( ( !empty($error_msg) ) ? '
' : '' ) . $lang['Session_invalid']; } ## ##----------[ FIND ]------------------------------------- ## $privmsg_message = preg_replace('##si', '</textarea>', $privmsg_message); ## ##----------[ REPLACE WITH ]----------------------------- ## // $privmsg_message = preg_replace('##si', '</textarea>', $privmsg_message); ## ##----------[ FIND ]------------------------------------- ## $privmsg_message = preg_replace('##si', '</textarea>', $privmsg_message); ## ##----------[ REPLACE WITH ]----------------------------- ## // $privmsg_message = preg_replace('##si', '</textarea>', $privmsg_message); ## ##----------[ FIND ]------------------------------------- ## $template->set_filenames(array( 'reg_header' => 'error_body.tpl') ); ## ##----------[ BEFORE, ADD ]------------------------------ ## $privmsg_message = htmlspecialchars($privmsg_message); ## ##----------[ FIND ]------------------------------------- ## $s_hidden_fields .= ''; ## ##----------[ AFTER, ADD ]------------------------------- ## $s_hidden_fields .= ''; ## ##----------[ OPEN ]------------------------------------- ## search.php ## ##----------[ FIND ]------------------------------------- ## $start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0; ## ##----------[ AFTER, ADD ]------------------------------- ## $start = ($start < 0) ? 0 : $start; ## ##----------[ OPEN ]------------------------------------- ## viewforum.php ## ##----------[ FIND ]------------------------------------- ## $start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0; ## ##----------[ AFTER, ADD ]------------------------------- ## $start = ($start < 0) ? 0 : $start; ## ##----------[ OPEN ]------------------------------------- ## viewtopic.php ## ##----------[ FIND ]------------------------------------- ## $start = ( isset($HTTP_GET_VARS['start']) ) ? intval($HTTP_GET_VARS['start']) : 0; ## ##----------[ AFTER, ADD ]------------------------------- ## $start = ($start < 0) ? 0 : $start; ## ##----------[ OPEN ]------------------------------------- ## ## The changes for this file may not be possible in templates not based on ## subSilver. If you can't find this line in your file, just skip the change. ## It is not a vital step. ## templates/subSilver/posting_body.tpl ## ##----------[ FIND ]------------------------------------- ##  {L_FONT_SIZE}:  {L_FONT_SIZE}: