phpBB Edits

phpBB edits

Created by: Anonymous, Last modification: 21 Apr 2006 (12:10 UTC) by SV1
phpBB 2.0.x Edits

This is the current phpBB 2.0.11 edits required for user integration to bitweaver. Remeber to make a backup of everything before you start editing!

These edits should work for all phpBB 2.0.x boards.



Files: That need to be created and/or edited.
  • ./common.php
  • ./bit_setup_inc.php #Needs to be created!
  • ./viewtopic.php
  • ./db/mysql.php
  • ./install/install.php
  • ./admin/index.php
  • ./admin/schema_inc.php #Needs to be created!
  • ./includes/page_tail.php
  • ./includes/sessions.php
  • ./templates/menu_phpbb.tpl #Needs to be created!
  • ./templates/menu_phpbb_admin.tpl #Needs to be created!
  • ./templates/phpbb_mini_search.tpl #Needs to be created!
  • ./templates/bit_phpbb.tpl #Needs to be created!




In ./common.php:

Find:

<?php
$board_config 
= array();
$userdata = array();
$theme = array();
$images = array();
$lang = array();
$gen_simple_header FALSE;
?>


Add After:

<?php
// {{{ BIT_MOD
if( file_exists$phpbb_root_path 'config.'.$phpEx ) ) {
    include(
$phpbb_root_path 'config.'.$phpEx);
}
if( !
defined("PHPBB_INSTALLED") )
{
    
header("Location: install/install.$phpEx");
    exit;
}

require_once( 
$phpbb_root_path.'/../bit_setup_inc.php' );
//phpBB is not as clean as bitweaver. errors only
error_reporting E_ALL & ~E_NOTICE );
// }}} BIT_MOD
?>


Save and upload the file.



In ./db/mysql.php:

Find:

<?php
function sql_query($query ""$transaction FALSE)
    {
?>


"Add After:


<?php
        
// {{{ BIT_MOD
        // This is necessary for the module queries to run if bitweaver and phpBB are running in different DB's
        
$dbselect mysql_select_db($this->dbname);
        
// }}} BIT_MOD
?>


"Find:"

<?php
            $this
->query_result = @mysql_query($query$this->db_connect_id);
?>


"Add After:


<?php
        
// {{{ BIT_MOD
        
if( $this->dbname != $gBitDbName ) {
            
// This is necessary for the module queries to run if bitweaver and phpBB are running in different DB's
            
$dbselect mysql_select_db($this->dbname);
        }
        
// }}} BIT_MOD
?>




In ./install/install.php:

Find:

<?php
// ---------
// FUNCTIONS
?>


Add Before:

<?php
// {{{ BIT_MOD
// Make sure only bitweaver admins can run the installer
require_once( '../../bit_setup_inc.php' );
global 
$gBitSystem;
$gBitSystem->verifyPermission'bit_p_admin' );
// }}} BIT_MOD
?>




Create a new file called bit_setup_inc.php in your phpBB root folder.

Add this into the file:

<?php
global $gBitSystem;

$gBitSystem->registerPackage'phpBB'dirname__FILE__ ).'/' );
if( 
$gBitSystem->isPackageActive'phpbb' ) ) {
    
$gBitSystem->registerAppMenu'phpbb''Forums'PHPBB_PKG_URL.'index.php''bitpackage:phpbb/menu_phpbb.tpl' );
    if( 
file_existsPHPBB_PKG_PATH.'config.php' ) ) {
        require_once( 
PHPBB_PKG_PATH.'config.php' );
    }
}
?>


Save and upload the file.



In ./admin/index.php:

Find:

<?php
    $db
->sql_close();
    exit;

}

?>
?>


Add ABOVE:

<?php
// {{{ BIT_MOD
$template->flush_buffer();
// }}} BIT_MOD
?>


Save and upload the file.



Create a new file called schema_inc.php in your ./admin/ folder.

Add this into the file:

<?php
global $gBitInstaller;
$gBitInstaller->registerPackageInfoPHPBB_PKG_DIR, array(
    
'description' => "phpBB is a high powered, fully scalable, and highly customizable Open Source bulletin board package. phpBB has a user-friendly interface, simple and straightforward administration panel, and helpful FAQ.",
    
'license' => '<a href="http://www.gnu.org/licenses/licenses.html#LGPL">LGPL</a>',
    
'version' => '2.0.6',
    
'state' => 'external package',
    
'dependencies' => '',
    
'install' => array(
        
'package' => 'phpbb',
        
'file' => 'install/install.php'
    
)
) );
?>


Save and upload the file.



In ./includes/page_tail.php:
"Find:" (~lines 45-48 )

<?php
//
//
// Close our DB connection.
//
$db->sql_close();
?>


and delete

Find: (~lines 52-70 )

<?php
//
// Compress buffered output if required and send to browser
//
if ( $do_gzip_compress )
{
    
//
    // Borrowed from php.net!
    //
    
$gzip_contents ob_get_contents();
    
ob_end_clean();

    
$gzip_size strlen($gzip_contents);
    
$gzip_crc crc32($gzip_contents);

    
$gzip_contents gzcompress($gzip_contents9);
    
$gzip_contents substr($gzip_contents0strlen($gzip_contents) - 4);

    echo 
"\x1f\x8b\x08\x00\x00\x00\x00\x00";
    echo 
$gzip_contents;
    echo 
pack('V'$gzip_crc);
    echo 
pack('V'$gzip_size);
}
?>


Add After:

<?php
// {{{ BIT_MOD
global $gBitPhpBBSubFrame$gBitSmarty$gBitSystem$gBitDbName;
// hack around php database driver issues when tiki is a different db from bitweaver
// This will only work on some databases anyway !!!!
$gBitSystem->mDb->mDb->SelectDB$gBitDbName );
if( !empty( 
$gBitPhpBBSubFrame ) ) {
    
$gBitSmarty->display'bitpackage:phpbb/bit_phpbb.tpl' );
} else {
    
$gBitSystem->display'bitpackage:phpbb/bit_phpbb.tpl'$page_title );
}

//
// Close our DB connection.
//
$db->sql_close();

// }}} BIT_MOD
?>




In ./includes/sessions.php:

Find:

<?php
    
if ( isset($HTTP_COOKIE_VARS[$cookiename '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename '_data']) )
    {
        
$session_id = isset($HTTP_COOKIE_VARS[$cookiename '_sid']) ? $HTTP_COOKIE_VARS[$cookiename '_sid'] : '';
        
$sessiondata = isset($HTTP_COOKIE_VARS[$cookiename '_data']) ? unserialize(stripslashes($HTTP_COOKIE_VARS[$cookiename '_data'])) : array();
        
$sessionmethod SESSION_METHOD_COOKIE;
    }
    else
    {
        
$sessiondata = array();
        
$session_id = ( isset($HTTP_GET_VARS['sid']) ) ? $HTTP_GET_VARS['sid'] : '';
        
$sessionmethod SESSION_METHOD_GET;
    }
?>


Add After:

<?php
// {{{ BIT_MOD
// we always force auto login
$sessiondata['autologinid'] = TRUE;
// }}} BIT_MOD
?>


Find:

<?php
        
//
        // Did the session exist in the DB?
        //
        
if ( isset($userdata['user_id']) )
        {
?>


Add After:

<?php
            
// {{{ BEGIN BIT_MOD
            
$sessiondata['session_page'] = $thispage_id;
            
check_bit_user$userdata );
            
// }}} END BIT_MOD
?>


Find:

<?php
                    setcookie
($cookiename '_data'serialize($sessiondata), $current_time 31536000$cookiepath$cookiedomain$cookiesecure);
                    
setcookie($cookiename '_sid'$session_id0$cookiepath$cookiedomain$cookiesecure);
                }

                return 
$userdata;
            }
        }
    }
?>


Add After:

<?php
        
// {{{ BEGIN BIT_MOD
    // make sure we keep copy a few variables over if we automatically start a new bit_session
    
$sessiondata['session_page'] = $thispage_id;
    
$sessiondata['session_ip'] = $user_ip;
    
check_bit_user$sessiondata );
    
// {{{ END BIT_MOD
?>


Find:

<?php
    
//
    // If we reach here then no (valid) session exists. So we'll create a new one,
    // using the cookie user_id if available to pull basic user prefs.
    //
    
$user_id = ( isset($sessiondata['userid']) ) ? intval($sessiondata['userid']) : ANONYMOUS;

    if ( !(
$userdata session_begin($user_id$user_ip$thispage_idTRUE)) )
    {
        
message_die(CRITICAL_ERROR'Error creating user session'''__LINE____FILE__$sql);
    }

    return 
$userdata;


}
?>


Add After: (i'm afraid we can't use php syntax highlighting as it causes the code plugin to crash)

// {{{ BEGIN TIKI MOD
function check_bit_user( &$p_user_data ) {
    // We have a valid tiki user, however we do not have a phpBB user
    global $db, $gBitSystem, $gBitUser, $userlib, $HTTP_GET_VARS;

    $anon = $p_user_data['user_id'] == ANONYMOUS;
    if( empty($p_user_data['user_id']) || $anon
        || ( $gBitUser->isRegistered() && $gBitUser->mUserId != $p_user_data['user_id'] )
    ) {
        if( $gBitUser->isRegistered() ) {
            //
            // Try and pull the last time stored in a cookie, if it exists
            //
            $sql = "SELECT *
                FROM " . USERS_TABLE . "
                WHERE user_id = '".$gBitUser->mUserId."'";
            if ( !($result = $db->sql_query($sql)) )
            {
                message_die(CRITICAL_ERROR, 'Could not obtain bitweaver user from phpBB user table', '', __LINE__, __FILE__, $sql);
            }
            $user_row = $db->sql_fetchrow($result);
//vd( $user_row );
            $md5 = ( $gBitSystem->mPrefs['feature_clear_passwords'] == 'y' );
            $phpbb_password = ( $md5 ? $gBitUser->mInfo['password'] : md5( $gBitUser->mInfo['password'] ) );
            // nuke their existing session cause it stores anonymous_id (-1) initially
            $sql = "DELETE FROM " . SESSIONS_TABLE . "
                    WHERE session_id = '".$p_user_data['session_id']."'";
            if ( !$db->sql_query($sql) )
            {
                message_die(CRITICAL_ERROR, 'Error clearing sessions table', '', __LINE__, __FILE__, $sql);
            }
            if( empty( $user_row['user_id'] ) ) {
                $sql = "INSERT INTO ". USERS_TABLE ." (user_id, username, user_regdate, user_password, user_email, user_icq, user_website, user_occ, user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar, user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_level, user_allow_pm, user_active, user_actkey)
                        VALUES ( ".$gBitUser->mInfo['user_id'].", ".$gBitSystem->mDb->qstr( $gBitUser->mInfo['login'], get_magic_quotes_gpc() ).", ".strtotime('now').", ".$gBitSystem->mDb->qstr( $phpbb_password, get_magic_quotes_gpc() ).", '".$gBitUser->mInfo['email']."',
                    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 0, 1, 0, 1, 0, 0, 1, 1, 0, 'd M Y h:i a', 'english', 1, ".(int)$gBitUser->isAdmin().", 0, 1, NULL)";

                if ( !($result = $db->sql_query($sql)) )
                {
                    message_die(CRITICAL_ERROR, 'Could not create bitweaver user for phpBB', '', __LINE__, __FILE__, $sql);
                }
            } else {
                // Has user data changed?
                if( ($user_row['user_email'] != $gBitUser->mInfo['email'])
                    || ($user_row['user_password'] != $phpbb_password)
                    || ($user_row['username'] != $gBitUser->mInfo['login'])
                )
                {
                    $sql = "UPDATE ". USERS_TABLE ." SET username=".$gBitSystem->mDb->qstr( $gBitUser->mInfo['login'], get_magic_quotes_gpc() ).", user_email = ".$gBitSystem->mDb->qstr( $gBitUser->mInfo['email'], get_magic_quotes_gpc() ).", user_password=".$gBitSystem->mDb->qstr( $phpbb_password, get_magic_quotes_gpc() )."
                            WHERE  user_id = ".$user_row['user_id'];
                    if ( !($result = $db->sql_query($sql)) )
                    {
                        message_die(CRITICAL_ERROR, 'Could not create bitweaver user for phpBB', '', __LINE__, __FILE__, $sql);
                        die;
                    }
                }
            }
            // Restart the session because somehow we lost it.
            $p_user_data = session_begin( $gBitUser->mUserId, $p_user_data['session_ip'], $p_user_data['session_page'], TRUE, TRUE );
        } else {
            // We have an anonymous session
            $user_id = ( isset($p_user_data['user_id']) ) ? intval($p_user_data['user_id']) : ANONYMOUS;

            if ( !($p_user_data = session_begin( $user_id, $p_user_data['user_ip'], $p_user_data['session_page'], TRUE, TRUE, , (int)$gBitUser->isAdmin() )) )
            {
                message_die(CRITICAL_ERROR, 'Error creating user session', '', __LINE__, __FILE__, $sql);
            }
        }
    } elseif( $gBitUser->isRegistered() ) {
        if( empty( $p_user_data['session_id'] ) ) {
            // we need a session
            $p_user_data = session_begin( $gBitUser->mUserId, $p_user_data['session_ip'], $p_user_data['session_page'], TRUE, TRUE, (int)$gBitUser->isAdmin() );
        }
    } else {
        if( $p_user_data['session_logged_in'] ) {
            //our bitweaver session has ended before our phpBB session
            session_end( $p_user_data['session_id'], $p_user_data['user_id'] );
            $p_user_data = session_begin( ANONYMOUS, $p_user_data['session_ip'], $p_user_data['session_page'] );
        }
    }
}


Save and upload the file.



In ./db/postgres7.php:

Bug fix for phpBB in postgres schemas.

Find:

<?php
            
if( preg_match("/^INSERT[\t\n ]+INTO[\t\n ]+([a-z0-9\_\-]+)/is"$this->last_query_text[$query_id], $tablename) )
?>


replace with

<?php
if( preg_match("/^INSERT[\t\n ]+INTO[\t\n ]+([-a-z0-9\_\.]+)/is"$this->last_query_text[$query_id], $tablename) )
?>




In ./viewtopic.php

Bug fix for mystery function "phpbb_rtrim" which doesn't appear to be defined anywhere.

Find:

<?php
       $highlight_match 
phpbb_rtrim($highlight_match"\\");
?>


replace with

<?php
       $highlight_match 
rtrim($highlight_match"\\");
?>




Create a new file called menu_phpbb.tpl in your ./templates/ folder.

Add this into the file:

<?php
<class="menuoption" href="{$smarty.const.PHPBB_PKG_URL}">{tr}Browse Forums{/tr}</a>
{if 
$user}
<
class="menuoption" href="{$smarty.const.PHPBB_PKG_URL}search.php?search_id=newposts">{tr}Posts since last visit{/tr}</a>
<
class="menuoption" href="{$smarty.const.PHPBB_PKG_URL}search.php?search_id=egosearch">{tr}Your posts{/tr}</a>
<
class="menuoption" href="{$smarty.const.PHPBB_PKG_URL}search.php?search_id=unanswered">{tr}Unanswered posts{/tr}</a>
{/if}
?>


Save and upload the file.



Create a new file called menu_phpbb_admin.tpl in your ./templates/ folder.

Add this into the file:

<?php
<class="menuoption" href="{$smarty.const.PHPBB_PKG_URL}admin/index.php">{tr}Administer phpBB{/tr}</a>
?>


Save and upload the file.



Create a new file called phpbb_mini_search.tpl in your ./templates/ folder.

Add this into the file:

<?php
<form action="{$smarty.const.PHPBB_PKG_URL}search.php" method="POST">
<
input type="hidden" name="search_fields" value="all" />

<
input type="text" style="width: 75px" class="post" name="search_keywords" size="30" />        <input class="liteoption" type="submit" value="{tr}Search{/tr}" />



Match: <input type="radio" name="search_terms" value="any" checked="checked" /> {tr}Any{/tr}
<
input type="radio" name="search_terms" value="all" />{tr}All{/tr}</span>



</
form>
<
a href="{$smarty.const.PHPBB_PKG_URL}search.php" style="font-size:smaller">{tr}More options{/tr}</a>
?>


Save and upload the file.



Create a new file called bit_phpbb.tpl in your ./templates/ folder.

Add this into the file:

<?php
{* BIT_MOD this is a new file*}
<
div class="phpbb">
{
php}
global 
$template;
$template->flush_buffer();
{/
php}
</
div>
{* 
BIT_MOD *}
?>


Save and upload the file.




Fin.