> kernel >> packages || uses this file as well if( !isset( $step ) ) { $step = NULL; } // set the maximum execution time to very high ini_set( "max_execution_time", "86400" ); // assign next step in installation process $gBitSmarty->assign( 'next_step', $step ); // pass all package data to template $schema = $gBitInstaller->mPackages; ksort( $schema ); $gBitSmarty->assign_by_ref( 'schema', $schema ); // confirm that we have all the admin data in the session before proceeding if( !empty( $_REQUEST['PACKAGE'] ) && in_array( 'users', $_REQUEST['PACKAGE'] ) && ( empty( $_SESSION['login'] ) || empty( $_SESSION['password'] ) || empty( $_SESSION['email'] ) ) ) { // we have lost our session password and we are not installed header( 'Location: install.php?step=1' ); die; } if( isset( $_REQUEST['fSubmitDbCreate'] ) ) { if( $gBitDbType == 'sybase' ) { // avoid database change messages ini_set('sybct.min_server_severity', '11'); } $gBitInstallDb = &ADONewConnection($gBitDbType); if( !empty( $gDebug ) || !empty( $_REQUEST['debug'] ) ) { $gBitInstaller->debug(); $gBitInstallDb->debug = 99; } if( $gBitInstallDb->Connect($gBitDbHost, $gBitDbUser, $gBitDbPassword, $gBitDbName) ) { $tablePrefix = $gBitInstaller->getTablePrefix(); $dict = NewDataDictionary( $gBitInstallDb, $gBitDbType ); // SHOULD HANDLE INNODB so foreign keys are cool - XOXO spiderr // $tableOptions = array('mysql' => 'TYPE=INNODB', 'REPLACE'); $sqlArray = array(); if (isset($_REQUEST['PACKAGE'])) { error_reporting( E_ALL ); // packages are sorted alphabetically. but we really need a /etc/rc.d/rc.3 style loading precidence! // We perform several loops through mPackages due to foreign keys, and some packages may insert // value into other packages tables - typically users_permissions, bit_preferences, etc... sort( $_REQUEST['PACKAGE'] ); // 1. let's generate all the tables's if ( $_SESSION['first_install'] ) { $build = array( 'NEW' ); } else { $build = array( 'REPLACE' ); } foreach( array_keys( $gBitInstaller->mPackages ) as $package ) { if( in_array( $package, $_REQUEST['PACKAGE'] ) || ( empty( $gBitInstaller->mPackages[$package]['installed'] ) && !empty( $gBitInstaller->mPackages[$package]['required'] ) ) ) { // Install tables if( !empty( $gBitInstaller->mPackages[$package]['tables'] ) && is_array( $gBitInstaller->mPackages[$package]['tables'] ) ) { foreach( array_keys( $gBitInstaller->mPackages[$package]['tables'] ) as $tableName ) { $completeTableName = $tablePrefix.$tableName; /* if( ($sql = $dict->DropTableSQL( $completeTableName )) && @$dict->ExecuteSQLArray( $sql ) ) { } else { print '
Failed to create '.$completeTableName.''; } */ $sql = $dict->CreateTableSQL( $completeTableName, $gBitInstaller->mPackages[$package]['tables'][$tableName], $build ); // Uncomment this line to see the create sql //vd( $sql ); if( $sql && ($dict->ExecuteSQLArray( $sql ) > 0 ) ) { } else { print 'Failed to create '.$completeTableName.''; array_push( $failedcommands, $sql ); } } } } } // 2. let's generate all the indexes, and sequences foreach( array_keys( $gBitInstaller->mPackages ) as $package ) { $schemaQuote = strrpos( BIT_DB_PREFIX, '`' ); $sequencePrefix = ( $schemaQuote ? substr( BIT_DB_PREFIX, $schemaQuote + 1 ) : BIT_DB_PREFIX ); if( in_array( $package, $_REQUEST['PACKAGE'] ) || ( empty( $gBitInstaller->mPackages[$package]['installed'] ) && !empty( $gBitInstaller->mPackages[$package]['required'] ) ) ) { // Install Indexes if( isset( $gBitInstaller->mPackages[$package]['indexes'] ) && is_array( $gBitInstaller->mPackages[$package]['indexes'] ) ) { foreach( array_keys( $gBitInstaller->mPackages[$package]['indexes'] ) as $tableIdx ) { $completeTableName = $sequencePrefix.$gBitInstaller->mPackages[$package]['indexes'][$tableIdx]['table']; $sql = $dict->CreateIndexSQL( $tableIdx, $completeTableName, $gBitInstaller->mPackages[$package]['indexes'][$tableIdx]['cols'], $gBitInstaller->mPackages[$package]['indexes'][$tableIdx]['opts'] ); if( $sql && ($dict->ExecuteSQLArray( $sql ) > 0 ) ) { } else { print 'Failed to create '.$completeTableName.''; array_push( $failedcommands, $sql ); } } } if( isset( $gBitInstaller->mPackages[$package]['sequences'] ) && is_array( $gBitInstaller->mPackages[$package]['sequences'] ) ) { foreach( array_keys( $gBitInstaller->mPackages[$package]['sequences'] ) as $sequenceIdx ) { $sql = $gBitInstallDb->CreateSequence( $sequencePrefix.$sequenceIdx, $gBitInstaller->mPackages[$package]['sequences'][$sequenceIdx]['start'] ); } } } } // Force a reload of all our preferences $gBitInstaller->mPrefs = ''; $gBitInstaller->loadPreferences(); // 3. activate all selected & required packages foreach( array_keys( $gBitInstaller->mPackages ) as $package ) { if( in_array( $package, $_REQUEST['PACKAGE'] ) || !empty( $gBitInstaller->mPackages[$package]['required'] ) ) { $gBitInstaller->storePreference( 'package_'.strtolower( $package ), 'y', $package ); // we'll default wiki to the home page if( $package == 'wiki' ) { $gBitSystem->storePreference( "bitIndex", WIKI_PKG_NAME ); } } } // and let's turn on phpBB so people can find it easily. if( defined( 'PHPBB_PKG_NAME' ) ) { $gBitInstaller->storePreference( 'package_phpbb', 'y' ); } // 4. run the defaults through afterwards so we can be sure all tables needed have been created foreach( array_keys( $gBitInstaller->mPackages ) as $package ) { if( in_array( $package, $_REQUEST['PACKAGE'] ) || ( empty( $gBitInstaller->mPackages[$package]['installed'] ) && !empty( $gBitInstaller->mPackages[$package]['required'] ) ) ) { // this list of installed packages is used to show newly installed packages $package_list[] = $package; if( !empty( $gBitInstaller->mPackages[$package]['defaults'] ) ) { foreach( $gBitInstaller->mPackages[$package]['defaults'] as $def ) { $gBitInstaller->mDb->query( $def ); } } } } // only install modules during the first install if( isset( $_SESSION['first_install'] ) && $_SESSION['first_install'] == TRUE ) { /** * Some packages have some special things to take care of here. */ require_once( KERNEL_PKG_PATH.'mod_lib.php' ); foreach( $gBitInstaller->mInstallModules as $mod ) { $mod['user_id'] = ROOT_USER_ID; if( !isset( $mod['layout'] ) ) { $mod['layout'] = DEFAULT_PACKAGE; } $modlib->storeModule( $mod ); $modlib->storeLayout( $mod ); } } // Installing users has some special things to take care of here and needs a separate check. if( in_array( 'users', $_REQUEST['PACKAGE'] ) || empty( $gBitInstaller->mPackages['users']['installed'] ) ) { // now let's set up some default data. Group_id's are hardcoded in users/schema_inc defaults $gBitUser->assign_level_permissions( ANONYMOUS_GROUP_ID, 'basic' ); $gBitUser->assign_level_permissions( 3, 'registered' ); $gBitUser->assign_level_permissions( 2, 'editors' ); $gBitUser->assign_level_permissions( 1, 'admin' ); // Create 'Anonymous' user has id= -1 just like phpBB $anonUser = new BitPermUser(); $storeHash = array( 'real_name' => 'Guest', 'login' => 'guest', 'password' => $_SESSION['password'], 'email' =>'guest@localhost', 'pass_due' => FALSE, 'user_id' => ANONYMOUS_USER_ID ); if( $anonUser->store( $storeHash ) ) { // Remove anonymous from registered group $regGroupId = $anonUser->groupExists( 'Registered', ROOT_USER_ID ); $anonUser->removeUserFromGroup( ANONYMOUS_USER_ID, $regGroupId ); $anonUser->addUserToGroup( ANONYMOUS_USER_ID, ANONYMOUS_GROUP_ID); } // Creating 'root' user has id=1. phpBB starts with user_id=2, so this is a hack to keep things in sync $rootUser = new BitPermUser(); $storeHash = array( 'real_name' => 'root', 'login' => 'root', 'password' => $_SESSION['password'], 'email' => 'root@localhost', 'pass_due' => FALSE, 'user_id' => ROOT_USER_ID ); if( $rootUser->store( $storeHash ) ) { $rootUser->addUserToGroup( ROOT_USER_ID, 1 ); } $adminUser = new BitPermUser(); $storeHash = array( 'real_name' => $_SESSION['real_name'], 'login' => $_SESSION['login'], 'password' => $_SESSION['password'], 'email' =>$_SESSION['email'], 'pass_due' => FALSE ); if( $adminUser->store( $storeHash ) ) { $adminUser->addUserToGroup($adminUser->mUserId, 1 ); } // kill admin info in $_SESSION unset( $_SESSION['real_name'] ); unset( $_SESSION['login'] ); unset( $_SESSION['password'] ); unset( $_SESSION['email'] ); } } $gBitSmarty->assign( 'next_step', $step + 1 ); $gBitSmarty->assign( 'package_list', $package_list ); $gBitSmarty->assign( 'failedcommands', !empty( $failedcommands ) ? $failedcommands : NULL ); // display the confirmation page $app = '_done'; } else { // if we can't connect to the db, move back 2 steps header( "Location: ".$_SERVER['PHP_SELF']."?step=".$step - 2 ); } } ?>