diff --git a/root/install_portal/index.html b/root/install_portal/index.html
new file mode 100644
index 00000000..e69de29b
diff --git a/root/install_portal/install.php b/root/install_portal/install.php
new file mode 100644
index 00000000..7a149d04
--- /dev/null
+++ b/root/install_portal/install.php
@@ -0,0 +1,911 @@
+session_begin();
+$auth->acl($user->data);
+$user->setup('mods/portal_install');
+
+$version_array = array('0.1.0', 'p3p1.2.2', 'p3p1.2.1', 'p3p1.2.0', 'p3p1.1.0b');
+
+$old_version = 0;
+$phpbb3portal = false;
+$installed = $updated = $uninstalled =false;
+
+$sql = 'SELECT config_value as version
+ FROM ' . PORTAL_CONFIG_TABLE . "
+ WHERE config_name = 'portal_version'";
+$result = @$db->sql_query_limit( $sql, 1 );
+if( $db->sql_affectedrows($result) > 0 )
+{
+ $version = $db->sql_fetchrow( $result );
+ $old_version = $version['version'];
+}
+else
+{
+ $db->sql_freeresult( $result );
+ $sql = 'SELECT config_value as version
+ FROM ' . CONFIG_TABLE . "
+ WHERE config_name = 'portal_version'";
+ $result = @$db->sql_query_limit( $sql, 1 );
+ if( $db->sql_affectedrows($result) > 0 )
+ {
+ $version = $db->sql_fetchrow( $result );
+ $phpbb3portal = true;
+ $old_version = ( strtolower($version['version']) == '1.1.0.b' ) ? '1.1.0b' : $version['version'] ;
+ }
+}
+$db->sql_freeresult( $result );
+
+$check_mode = 'none';
+
+if( $old_version == 0 )
+{
+ $check_mode = 'install';
+}
+elseif( $phpbb3portal === TRUE || version_compare( $old_version, $current_version, "<" ) === TRUE )
+{
+ $check_mode = 'update';
+}
+
+$page_title = 'Board3portal v' . $current_version;
+
+$mode = request_var('mode', '');
+$confirm = request_var('confirm', 0);
+
+$error_array = array();
+
+function split_sql_file($sql, $delimiter)
+{
+ $sql = str_replace("\r" , '', $sql);
+ $data = preg_split('/' . preg_quote($delimiter, '/') . '$/m', $sql);
+
+ $data = array_map('trim', $data);
+
+ // The empty case
+ $end_data = end($data);
+
+ if (empty($end_data))
+ {
+ unset($data[key($data)]);
+ }
+
+ return $data;
+}
+
+function db_error( $error, $sql, $line, $file, $skip = false )
+{
+ global $error, $lang, $db;
+
+ if( $skip )
+ {
+ $error_array[] = '' . $user->lang['GENERAL_ERROR'] . ': ' . basename($file) . ' [ ' . $line . ' ]
+ ' . $error . '
» SQL:' . $sql;
+ return;
+ } else {
+ include $phpbb_root_path . 'install_portal/style/layout_header.php';
+ echo '
+
'. $user->lang['GENERAL_ERROR'] .'
+
' . $error . '
» SQL:' . $sql . '
+ ' . basename($file) . ' [ ' . $line . ' ]
+
';
+ include $phpbb_root_path . 'install_portal/style/layout_footer.php';
+ exit;
+ }
+}
+
+function remove_comments(&$output)
+{
+ $lines = explode("\n", $output);
+ $output = '';
+
+ // try to keep mem. use down
+ $linecount = sizeof($lines);
+
+ $in_comment = false;
+ for ($i = 0; $i < $linecount; $i++)
+ {
+ if (trim($lines[$i]) == '/*')
+ {
+ $in_comment = true;
+ }
+
+ if (!$in_comment)
+ {
+ $output .= $lines[$i] . "\n";
+ }
+
+ if (trim($lines[$i]) == '*/')
+ {
+ $in_comment = false;
+ }
+ }
+
+ unset($lines);
+ return $output;
+}
+
+function remove_remarks(&$sql)
+{
+ $sql = preg_replace('/\n{2,}/', "\n", preg_replace('/^#.*$/m', "\n", $sql));
+}
+
+// What sql_layer should we use?
+switch ($db->sql_layer)
+{
+ case 'mysql':
+ $db_schema = 'mysql_40';
+ $delimiter = ';';
+ $comments = 'remove_remarks';
+ break;
+
+ case 'mysql4':
+ if (version_compare($db->mysql_version, '4.1.3', '>='))
+ {
+ $db_schema = 'mysql_41';
+ }
+ else
+ {
+ $db_schema = 'mysql_40';
+ }
+ $delimiter = ';';
+ $comments = 'remove_remarks';
+ break;
+
+ case 'mysqli':
+ $db_schema = 'mysql_41';
+ $delimiter = ';';
+ $comments = 'remove_remarks';
+ break;
+
+ case 'mssql':
+ $db_schema = 'mssql';
+ $delimiter = 'GO';
+ $comments = 'remove_comments';
+ break;
+
+ case 'postgres':
+ $db_schema = 'postgres';
+ $delimiter = ';';
+ $comments = 'remove_comments';
+ break;
+
+ case 'sqlite':
+ $db_schema = 'sqlite';
+ $delimiter = ';';
+ $comments = 'remove_remarks';
+ break;
+
+ case 'firebird':
+ $db_schema = 'firebird';
+ $delimiter = ';;';
+ $comments = 'remove_remarks';
+ break;
+
+ case 'oracle':
+ $db_schema = 'oracle';
+ $delimiter = '/';
+ $comments = 'remove_comments';
+ break;
+
+ default:
+ trigger_error('Sorry, unsupported DBMS found.');
+ break;
+}
+
+// Get old version if it is installed.
+
+switch ($mode)
+{
+// Installing from scratch
+case 'install':
+ if( $check_mode == 'install' )
+ {
+ if( $confirm == 1)
+ {
+ // Drop thes tables if existing
+ switch( $db->sql_layer )
+ {
+ case 'mysql4':
+ case 'mysqli':
+ case 'oracle':
+ case 'firebird':
+ case 'sqlite':
+ case 'mysql':
+ $sql = 'DROP TABLE IF EXISTS ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ break;
+ case '':
+ $sql = 'SELECT version() as version';
+ $result = $db->sql_query($sql);
+ $data = $db->sql_fetchrow($result);
+ if( version_compare($data['version'], '8.1.11', '>') === TRUE )
+ {
+ $sql = 'DROP TABLE IF EXISTS ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ } else {
+ $sql = 'DROP TABLE ' . $table_prefix . 'portal_config';
+ $result = @$db->sql_query($sql);
+ $db->sql_freeresult($result);
+ }
+ break;
+ case 'mssql':
+ $sql = 'if exists (select * from sysobjects where name = ' . $table_prefix . 'portal_config)
+ drop table ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ break;
+ }
+
+ // locate the schema files
+ $dbms_schema = 'schemas/_' . $db_schema . '_schema.sql';
+ $sql_query = @file_get_contents($dbms_schema);
+ $sql_query = preg_replace('#phpbb_#i', $table_prefix, $sql_query);
+ $comments($sql_query);
+ $sql_query = split_sql_file($sql_query, $delimiter);
+
+ // Make tables
+ foreach ($sql_query as $sql)
+ {
+ if (!$db->sql_query($sql))
+ {
+ $error = $db->sql_error();
+ db_error($error['message'], $sql, __LINE__, __FILE__);
+ }
+ }
+ unset($sql_query);
+
+ // Now for the data
+
+ $sql_query = @file_get_contents('schemas/_schema_data.sql');
+ switch ($db->sql_layer)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $sql_query = preg_replace('#\# MSSQL IDENTITY (phpbb_[a-z_]+) (ON|OFF) \##s', 'SET IDENTITY_INSERT \1 \2;', $sql_query);
+ break;
+ case 'postgres':
+ $sql_query = preg_replace('#\# POSTGRES (BEGIN|COMMIT) \##s', '\1; ', $sql_query);
+ break;
+ }
+
+ $sql_query = preg_replace('#phpbb_#i', $table_prefix, $sql_query);
+ $sql_query = preg_replace('/\n{2,}/', "\n", preg_replace('/^#.*$/m', "\n", $sql_query));
+ $sql_query = split_sql_file($sql_query, ';');
+
+ $sql_query[] = "INSERT INTO {$table_prefix}portal_config (config_name, config_value) VALUES ('portal_version', '{$current_version}')";
+
+ foreach ($sql_query as $sql)
+ {
+ if (!$db->sql_query($sql))
+ {
+ $error = $db->sql_error();
+ db_error($error['message'], $sql, __LINE__, __FILE__);
+ }
+ }
+ unset($sql_query);
+
+ // create the acp modules - Nickvergessen's code
+ $modules = new acp_modules();
+ $portal = array(
+ 'module_basename' => '',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => 31,
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_INFO',
+ 'module_mode' => '',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($portal);
+ $general = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_GENERAL_INFO',
+ 'module_mode' => 'general',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($general);
+ $news = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_NEWS_INFO',
+ 'module_mode' => 'news',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($news);
+ $announcements = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_ANNOUNCE_INFO',
+ 'module_mode' => 'announcements',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($announcements);
+ $welcome = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_WELCOME_INFO',
+ 'module_mode' => 'welcome',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($welcome);
+ $recent = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_RECENT_INFO',
+ 'module_mode' => 'recent',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($recent);
+ $wordgraph = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_WORDGRAPH_INFO',
+ 'module_mode' => 'wordgraph',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($wordgraph);
+ $paypal = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_PAYPAL_INFO',
+ 'module_mode' => 'paypal',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($paypal);
+ $attachments = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_ATTACHMENTS_NUMBER_INFO',
+ 'module_mode' => 'attachments',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($attachments);
+ $members = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_MEMBERS_INFO',
+ 'module_mode' => 'members',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($members);
+ $polls = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_POLLS_INFO',
+ 'module_mode' => 'polls',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($polls);
+ $bots = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_BOTS_INFO',
+ 'module_mode' => 'bots',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($bots);
+ $poster = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_MOST_POSTER_INFO',
+ 'module_mode' => 'poster',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($poster);
+ $minicalendar = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_MINICALENDAR_INFO',
+ 'module_mode' => 'minicalendar',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($minicalendar);
+ // clear cache and log what we did
+ $cache->purge();
+ add_log('admin', $page_title . ' installed');
+ $installed = true;
+ }
+ include($phpbb_root_path . 'install_portal/style/layout_install.'.$phpEx);
+ }
+ else
+ {
+ include($phpbb_root_path . 'install_portal/style/layout_menu.'.$phpEx);
+ }
+break;
+// Updating
+case 'update':
+ if( $check_mode == 'update' )
+ {
+ $confirm = request_var('confirm', '');
+ if( $confirm == 1 )
+ {
+ if( $phpbb3portal === TRUE )
+ {
+ // Drop thes tables if existing
+ switch( $db->sql_layer )
+ {
+ case 'mysql4':
+ case 'mysqli':
+ case 'oracle':
+ case 'firebird':
+ case 'sqlite':
+ case 'mysql':
+ $sql = 'DROP TABLE IF EXISTS ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ break;
+ case '':
+ $sql = 'SELECT version() as version';
+ $result = $db->sql_query($sql);
+ $data = $db->sql_fetchrow($result);
+ if( version_compare($data['version'], '8.1.11', '>') === TRUE )
+ {
+ $sql = 'DROP TABLE IF EXISTS ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ } else {
+ $sql = 'DROP TABLE ' . $table_prefix . 'portal_config';
+ $result = @$db->sql_query($sql);
+ $db->sql_freeresult($result);
+ }
+ break;
+ case 'mssql':
+ $sql = 'if exists (select * from sysobjects where name = ' . $table_prefix . 'portal_config)
+ drop table ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ break;
+ }
+
+ // locate the schema files
+ $dbms_schema = 'schemas/_' . $db_schema . '_schema.sql';
+ $sql_query = @file_get_contents($dbms_schema);
+ $sql_query = preg_replace('#phpbb_#i', $table_prefix, $sql_query);
+ $comments($sql_query);
+ $sql_query = split_sql_file($sql_query, $delimiter);
+
+ // Make tables
+ foreach ($sql_query as $sql)
+ {
+ if (!$db->sql_query($sql))
+ {
+ $error = $db->sql_error();
+ db_error($error['message'], $sql, __LINE__, __FILE__);
+ }
+ }
+ unset($sql_query);
+
+ // Start by inserting default data
+
+ $sql_query = @file_get_contents('schemas/_schema_data.sql');
+ switch ($db->sql_layer)
+ {
+ case 'mssql':
+ case 'mssql_odbc':
+ $sql_query = preg_replace('#\# MSSQL IDENTITY (phpbb_[a-z_]+) (ON|OFF) \##s', 'SET IDENTITY_INSERT \1 \2;', $sql_query);
+ break;
+ case 'postgres':
+ $sql_query = preg_replace('#\# POSTGRES (BEGIN|COMMIT) \##s', '\1; ', $sql_query);
+ break;
+ }
+
+ $sql_query = preg_replace('#phpbb_#i', $table_prefix, $sql_query);
+ $sql_query = preg_replace('/\n{2,}/', "\n", preg_replace('/^#.*$/m', "\n", $sql_query));
+ $sql_query = split_sql_file($sql_query, ';');
+
+ $sql_query[] = "INSERT INTO {$table_prefix}portal_config (config_name, config_value) VALUES ('portal_version', '{$current_version}')";
+ foreach ($sql_query as $sql)
+ {
+ if (!$db->sql_query($sql))
+ {
+ $error = $db->sql_error();
+ db_error($error['message'], $sql, __LINE__, __FILE__);
+ }
+ }
+ unset($sql_query);
+
+ // Set old settings.
+ $sql = 'SELECT * FROM ' . PORTAL_CONFIG_TABLE;
+ $result = $db->sql_query($sql);
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if (isset($config[$row['config_name']]))
+ {
+ $sql2 = 'UPDATE ' . PORTAL_CONFIG_TABLE . " SET config_value = '" . $config[$row['config_name']] . "' WHERE config_name = '" . $row['config_name'] . "' LIMIT 1";
+ $db->sql_query($sql2);
+ $sql3 = 'DELETE FROM ' . CONFIG_TABLE . " WHERE config_name = '" . $row['config_name'] . "' LIMIT 1";
+ $db->sql_query($sql3);
+ }
+ }
+ $db->sql_freeresult($result);
+ $sql = 'UPDATE ' . PORTAL_CONFIG_TABLE . " SET config_value = '{$current_version}' where config_name = 'portal_version'";
+ $db->sql_query($sql);
+
+ // Delete old portal stuff
+ $sql = "ALTER TABLE {$table_prefix}config CHANGE config_value config_value varchar(255) NOT NULL";
+ $db->sql_query($sql);
+
+ $sql = 'SELECT right_id, module_id FROM ' . MODULES_TABLE . "
+ WHERE module_langname = 'ACP_PORTAL_GENERAL_INFO'
+ OR module_langname = 'ACP_PORTAL_NEWS_INFO'
+ OR module_langname = 'ACP_PORTAL_ANNOUNCE_INFO'
+ OR module_langname = 'ACP_PORTAL_WELCOME_INFO'
+ OR module_langname = 'ACP_PORTAL_RECENT_INFO'
+ OR module_langname = 'ACP_PORTAL_WORDGRAPH_INFO'
+ OR module_langname = 'ACP_PORTAL_PAYPAL_INFO'
+ OR module_langname = 'ACP_PORTAL_ADS_INFO'
+ OR module_langname = 'ACP_PORTAL_ATTACHMENTS_NUMBER_INFO'
+ OR module_langname = 'ACP_PORTAL_MEMBERS_INFO'
+ OR module_langname = 'ACP_PORTAL_POLLS_INFO'
+ OR module_langname = 'ACP_PORTAL_BOTS_INFO'
+ OR module_langname = 'ACP_PORTAL_MOST_POSTER_INFO'
+ OR module_langname = 'ACP_PORTAL_MINICALENDAR_INFO'";
+ $result = $db->sql_query($sql);
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $sql = 'DELETE FROM ' . MODULES_TABLE . " WHERE module_id = '{$row['module_id']}'";
+ $db->sql_query($sql);
+ $sql = 'UPDATE ' . MODULES_TABLE . "
+ SET left_id = left_id - 2
+ WHERE module_class = 'acp'
+ AND left_id > {$row['right_id']}";
+ $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . MODULES_TABLE . "
+ SET right_id = right_id - 2
+ WHERE module_class = 'acp'
+ AND right_id > {$row['right_id']}";
+ $db->sql_query($sql);
+ }
+ $db->sql_freeresult($result);
+
+ $sql = 'SELECT right_id, module_id FROM ' . MODULES_TABLE . "
+ WHERE module_langname = 'ACP_PORTAL_INFO'";
+ $result = $db->sql_query($sql);
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $sql = 'DELETE FROM ' . MODULES_TABLE . " WHERE module_id = '{$row['module_id']}'";
+ $db->sql_query($sql);
+ $sql = 'UPDATE ' . MODULES_TABLE . "
+ SET left_id = left_id - 2
+ WHERE module_class = 'acp'
+ AND left_id > {$row['right_id']}";
+ $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . MODULES_TABLE . "
+ SET right_id = right_id - 2
+ WHERE module_class = 'acp'
+ AND right_id > {$row['right_id']}";
+ $db->sql_query($sql);
+ }
+ $db->sql_freeresult($result);
+
+ // create the acp modules
+ $modules = new acp_modules();
+ $portal = array(
+ 'module_basename' => '',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => 31,
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_INFO',
+ 'module_mode' => '',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($portal);
+ $general = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_GENERAL_INFO',
+ 'module_mode' => 'general',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($general);
+ $news = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_NEWS_INFO',
+ 'module_mode' => 'news',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($news);
+ $announcements = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_ANNOUNCE_INFO',
+ 'module_mode' => 'announcements',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($announcements);
+ $welcome = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_WELCOME_INFO',
+ 'module_mode' => 'welcome',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($welcome);
+ $recent = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_RECENT_INFO',
+ 'module_mode' => 'recent',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($recent);
+ $wordgraph = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_WORDGRAPH_INFO',
+ 'module_mode' => 'wordgraph',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($wordgraph);
+ $paypal = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_PAYPAL_INFO',
+ 'module_mode' => 'paypal',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($paypal);
+ $attachments = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_ATTACHMENTS_NUMBER_INFO',
+ 'module_mode' => 'attachments',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($attachments);
+ $members = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_MEMBERS_INFO',
+ 'module_mode' => 'members',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($members);
+ $polls = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_POLLS_INFO',
+ 'module_mode' => 'polls',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($polls);
+ $bots = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_BOTS_INFO',
+ 'module_mode' => 'bots',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($bots);
+ $poster = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_MOST_POSTER_INFO',
+ 'module_mode' => 'poster',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($poster);
+ $minicalendar = array(
+ 'module_basename' => 'portal',
+ 'module_enabled' => 1,
+ 'module_display' => 1,
+ 'parent_id' => $portal['module_id'],
+ 'module_class' => 'acp',
+ 'module_langname' => 'ACP_PORTAL_MINICALENDAR_INFO',
+ 'module_mode' => 'minicalendar',
+ 'module_auth' => ''
+ );
+ $modules->update_module_data($minicalendar);
+
+ // clear cache and log what we did
+ $cache->purge();
+ add_log('admin', $page_title . ' updated');
+ $updated = true;
+ }
+ else
+ {
+ $portal_update_array = array();
+
+ include 'schemas/update_schema.php';
+
+ foreach( $sql_update as $sql_ver => $sql_data )
+ {
+ if( version_compare($old_version, $sql_ver, ">=") === TRUE )
+ {
+ continue;
+ } else {
+ $portal_update_array = array_merge($portal_update_array, $sql_data);
+ }
+ }
+
+ $portal_update_array[] = 'UPDATE ' . PORTAL_CONFIG_TABLE . " SET config_value='{$current_version}' WHERE config_name = 'portal_version'";
+
+ foreach($portal_update_array as $sql)
+ {
+ $sql = preg_replace('#phpbb_#i', $table_prefix, $sql);
+ if (!$db->sql_query($sql))
+ {
+ $error = $db->sql_error();
+ db_error($error['message'], $sql, __LINE__, __FILE__);
+ }
+ }
+ unset($portal_update_array, $sql_update);
+ $updated = true;
+ }
+ }
+ include($phpbb_root_path . 'install_portal/style/layout_update.'.$phpEx);
+ }
+ else
+ {
+ include($phpbb_root_path . 'install_portal/style/layout_menu.'.$phpEx);
+ }
+
+break;
+// Uninstalling
+case 'uninstall':
+ if( $old_version != 0 )
+ {
+ if( $confirm == 1)
+ {
+ if( $phpbb3portal === FALSE )
+ {
+ // Drop thes tables if existing
+ switch( $db->sql_layer )
+ {
+ case 'mysql4':
+ case 'mysqli':
+ case 'oracle':
+ case 'firebird':
+ case 'sqlite':
+ case 'mysql':
+ $sql = 'DROP TABLE IF EXISTS ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ break;
+ case '':
+ $sql = 'SELECT version() as version';
+ $result = $db->sql_query($sql);
+ $data = $db->sql_fetchrow($result);
+ if( version_compare($data['version'], '8.1.11', '>') === TRUE )
+ {
+ $sql = 'DROP TABLE IF EXISTS ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ } else {
+ $sql = 'DROP TABLE ' . $table_prefix . 'portal_config';
+ $result = @$db->sql_query($sql);
+ $db->sql_freeresult($result);
+ }
+ break;
+ case 'mssql':
+ $sql = 'if exists (select * from sysobjects where name = ' . $table_prefix . 'portal_config)
+ drop table ' . $table_prefix . 'portal_config';
+ $result = $db->sql_query($sql);
+ $db->sql_freeresult($result);
+ break;
+ }
+ $installed = true;
+ }
+ else
+ {
+ include($phpbb_root_path . 'install_portal/style/layout_header.'.$phpEx);
+ echo '' . $user->lang['INSTALLER_ERROR'] . '
';
+ echo '' . $user->lang['INSTALLER_UNINSTALL_OLDVERSION'] . '
';
+ include($phpbb_root_path . 'install_portal/style/layout_footer.'.$phpEx);
+ }
+ }
+ include($phpbb_root_path . 'install_portal/style/layout_uninstall.'.$phpEx);
+ } else {
+ include($phpbb_root_path . 'install_portal/style/layout_menu.'.$phpEx);
+ }
+
+break;
+// Welcome page!
+default:
+
+ include($phpbb_root_path . 'install_portal/style/layout_menu.'.$phpEx);
+
+break;
+}
+
+?>
\ No newline at end of file
diff --git a/root/install_portal/schemas/_firebird_schema.sql b/root/install_portal/schemas/_firebird_schema.sql
new file mode 100644
index 00000000..f713711c
--- /dev/null
+++ b/root/install_portal/schemas/_firebird_schema.sql
@@ -0,0 +1,14 @@
+#
+# $Id: $
+#
+
+
+# Table: 'phpbb_portal_config'
+CREATE TABLE phpbb_portal_config (
+ config_name VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL,
+ config_value VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL
+);;
+
+ALTER TABLE phpbb_portal_config ADD PRIMARY KEY (config_name);;
+
+
diff --git a/root/install_portal/schemas/_mssql_schema.sql b/root/install_portal/schemas/_mssql_schema.sql
new file mode 100644
index 00000000..b046e576
--- /dev/null
+++ b/root/install_portal/schemas/_mssql_schema.sql
@@ -0,0 +1,30 @@
+/*
+
+ $Id: $
+
+*/
+
+BEGIN TRANSACTION
+GO
+
+/*
+ Table: 'phpbb_portal_config'
+*/
+CREATE TABLE [phpbb_portal_config] (
+ [config_name] [varchar] (255) DEFAULT ('') NOT NULL ,
+ [config_value] [varchar] (255) DEFAULT ('') NOT NULL
+) ON [PRIMARY]
+GO
+
+ALTER TABLE [phpbb_portal_config] WITH NOCHECK ADD
+ CONSTRAINT [PK_phpbb_portal_config] PRIMARY KEY CLUSTERED
+ (
+ [config_name]
+ ) ON [PRIMARY]
+GO
+
+
+
+COMMIT
+GO
+
diff --git a/root/install_portal/schemas/_mysql_40_schema.sql b/root/install_portal/schemas/_mysql_40_schema.sql
new file mode 100644
index 00000000..ef7b2b18
--- /dev/null
+++ b/root/install_portal/schemas/_mysql_40_schema.sql
@@ -0,0 +1,12 @@
+#
+# $Id: $
+#
+
+# Table: 'phpbb_portal_config'
+CREATE TABLE phpbb_portal_config (
+ config_name varbinary(255) DEFAULT '' NOT NULL,
+ config_value varbinary(255) DEFAULT '' NOT NULL,
+ PRIMARY KEY (config_name)
+);
+
+
diff --git a/root/install_portal/schemas/_mysql_41_schema.sql b/root/install_portal/schemas/_mysql_41_schema.sql
new file mode 100644
index 00000000..ad7b4408
--- /dev/null
+++ b/root/install_portal/schemas/_mysql_41_schema.sql
@@ -0,0 +1,12 @@
+#
+# $Id: $
+#
+
+# Table: 'phpbb_portal_config'
+CREATE TABLE phpbb_portal_config (
+ config_name varchar(255) DEFAULT '' NOT NULL,
+ config_value varchar(255) DEFAULT '' NOT NULL,
+ PRIMARY KEY (config_name)
+) CHARACTER SET `utf8` COLLATE `utf8_bin`;
+
+
diff --git a/root/install_portal/schemas/_oracle_schema.sql b/root/install_portal/schemas/_oracle_schema.sql
new file mode 100644
index 00000000..155a45ff
--- /dev/null
+++ b/root/install_portal/schemas/_oracle_schema.sql
@@ -0,0 +1,54 @@
+/*
+
+ $Id: $
+
+*/
+
+/*
+ This first section is optional, however its probably the best method
+ of running phpBB on Oracle. If you already have a tablespace and user created
+ for phpBB you can leave this section commented out!
+
+ The first set of statements create a phpBB tablespace and a phpBB user,
+ make sure you change the password of the phpBB user before you run this script!!
+*/
+
+/*
+CREATE TABLESPACE "PHPBB"
+ LOGGING
+ DATAFILE 'E:\ORACLE\ORADATA\LOCAL\PHPBB.ora'
+ SIZE 10M
+ AUTOEXTEND ON NEXT 10M
+ MAXSIZE 100M;
+
+CREATE USER "PHPBB"
+ PROFILE "DEFAULT"
+ IDENTIFIED BY "phpbb_password"
+ DEFAULT TABLESPACE "PHPBB"
+ QUOTA UNLIMITED ON "PHPBB"
+ ACCOUNT UNLOCK;
+
+GRANT ANALYZE ANY TO "PHPBB";
+GRANT CREATE SEQUENCE TO "PHPBB";
+GRANT CREATE SESSION TO "PHPBB";
+GRANT CREATE TABLE TO "PHPBB";
+GRANT CREATE TRIGGER TO "PHPBB";
+GRANT CREATE VIEW TO "PHPBB";
+GRANT "CONNECT" TO "PHPBB";
+
+COMMIT;
+DISCONNECT;
+
+CONNECT phpbb/phpbb_password;
+*/
+/*
+ Table: 'phpbb_portal_config'
+*/
+CREATE TABLE phpbb_portal_config (
+ config_name varchar2(255) DEFAULT '' ,
+ config_value varchar2(255) DEFAULT '' ,
+ CONSTRAINT pk_phpbb_portal_config PRIMARY KEY (config_name)
+)
+/
+
+