diff --git a/setup/manageheader.php b/setup/manageheader.php
new file mode 100644
index 0000000000..b10ad78400
--- /dev/null
+++ b/setup/manageheader.php
@@ -0,0 +1,672 @@
+ array(
+ 'nocachecontrol' => True,
+ 'noheader' => True,
+ 'nonavbar' => True,
+ 'currentapp' => 'home',
+ 'noapi' => True
+ ));
+ include('./inc/functions.inc.php');
+
+ // some constanst for pre php4.3
+ if (!defined('PHP_SHLIB_SUFFIX'))
+ {
+ define('PHP_SHLIB_SUFFIX',strtoupper(substr(PHP_OS, 0,3)) == 'WIN' ? 'dll' : 'so');
+ }
+ if (!defined('PHP_SHLIB_PREFIX'))
+ {
+ define('PHP_SHLIB_PREFIX',PHP_SHLIB_SUFFIX == 'dll' ? 'php_' : '');
+ }
+ /**
+ * checks if a named extension is loaded or loadable
+ */
+ function check_load_extension($extension)
+ {
+ return extension_loaded($extension) ||
+ function_exists('dl') && @dl(PHP_SHLIB_PREFIX.$extension.'.'.PHP_SHLIB_SUFFIX);
+ }
+
+ $GLOBALS['egw_info']['server']['versions']['current_header'] = $setup_info['phpgwapi']['versions']['current_header'];
+ $GLOBALS['egw_info']['server']['versions']['phpgwapi'] = $setup_info['phpgwapi']['version'];
+ unset($setup_info);
+
+ /* Fetch the current real path.
+ * If this is in the server document root, then it is probably ok.
+ * Otherwise, don't guess, just show the usual instructive default.
+ */
+ $realpath = realpath('..');
+ if(!ereg('^' . $_SERVER['DOCUMENT_ROOT'],$realpath))
+ {
+ if(strtoupper(substr(PHP_OS, 0,3)) == 'WIN')
+ {
+ $realpath = 'Drive:/Path/to/egroupware';
+ }
+ else
+ {
+ $realpath = '/path/to/egroupware';
+ }
+ }
+
+ $adddomain = get_var('adddomain',Array('POST'));
+
+ $db_fullnames = array(
+ 'pgsql' => 'PostgreSQL',
+ 'mysql' => 'MySQL',
+ 'mysqli' => 'MySQLi (php5)',
+ 'mssql' => 'MS SQL Server',
+ 'odbc_mssql' => 'MS SQL Server via ODBC',
+ 'oracle' => 'Oracle',
+ 'odbc_oracle' => 'Oracle via ODBC',
+ 'sapdb' => 'SAP/Max DB via ODBC',
+ );
+
+ $default_db_ports = array(
+ 'pgsql' => 5432,
+ 'mysql' => 3306,
+ 'mysqli' => 3306,
+ 'mssql' => 1433,
+ 'odbc_mssql' => '',
+ 'oracle' => 1521,
+ 'odbc_oracle' => '',
+ 'sapdb' => '',
+ );
+
+ function check_form_values()
+ {
+ // PHP will automatically replace any dots in incoming
+ // variable names with underscores.
+
+ $errors = '';
+ $domains = get_var('domains',Array('POST'));
+ @reset($domains);
+ while(list($k,$v) = @each($domains))
+ {
+ $variableName = str_replace('.','_',$k);
+ $deletedomain = get_var('deletedomain',Array('POST'));
+ if(isset($deletedomain[$variableName]))
+ {
+ continue;
+ }
+ $dom = get_var('setting_'.$variableName,Array('POST'));
+ if(!$dom['config_pass'] && !$dom['config_password'])
+ {
+ $errors .= ' ' . lang("You didn't enter a config password for domain %1",$v);
+ }
+ if(!$dom['config_user'])
+ {
+ $errors .= ' ' . lang("You didn't enter a config username for domain %1",$v);
+ }
+ }
+
+ $setting = get_var('setting',Array('POST'));
+ if(!$setting['HEADER_ADMIN_PASSWORD'] && !$setting['HEADER_ADMIN_PASS'])
+ {
+ $errors .= ' ' . lang("You didn't enter a header admin password");
+ }
+ if(!$setting['HEADER_ADMIN_USER'])
+ {
+ $errors .= ' ' . lang("You didn't enter a header admin username");
+ }
+
+ if($errors)
+ {
+ $GLOBALS['egw_setup']->html->show_header('Error',True);
+ echo $errors;
+ echo '
'. "\n";
+
+ $supported_db = array();
+ foreach(array(
+ // short => array(extension,func_to_check,supported_db(s))
+ 'mysql' => array('mysql','mysql_connect','mysql'),
+ 'mysqli' => array('mysql','mysqli_connect','mysqli'),
+ 'pgsql' => array('pgsql','pg_connect','pgsql'),
+ 'mssql' => array('mssql','mssql_connect','mssql'),
+ 'odbc' => array('odbc',false,'sapdb','odbc_mssql','odbc_oracle'),
+ 'oracle' => array('oci8',false,'oracle'),
+ ) as $db => $data)
+ {
+ $ext = array_shift($data);
+ $func_to_check = array_shift($data);
+ $name = isset($db_fullnames[$db]) ? $db_fullnames[$db] : strtoupper($db);
+ if (check_load_extension($ext) || $func_to_check && function_exists($func_to_check))
+ {
+ $detected .= lang('You appear to have %1 support.',$name) . " \n";
+ $supported_db = array_merge($supported_db,$data);
+ }
+ else
+ {
+ $detected .= lang('No %1 support found. Disabling',$name) . " \n";
+ }
+ }
+ if(!count($supported_db))
+ {
+ $detected .= ''
+ . lang('Did not find any valid DB support!')
+ . " \n"
+ . lang('Try to configure your php to support one of the above mentioned DBMS, or install eGroupWare by hand.')
+ . '
';
+ echo $detected;
+ $GLOBALS['egw_setup']->html->show_footer();
+ exit;
+ }
+
+ if(!function_exists('version_compare'))
+ {
+ $detected .= ''
+ . lang('You appear to be using PHP earlier than 4.1.0. eGroupWare now requires 4.1.0 or later'). "\n"
+ . '
';
+ echo $detected;
+ $GLOBALS['egw_setup']->html->show_footer();
+ exit;
+ }
+ if (check_load_extension('session'))
+ {
+ $detected .= lang('You appear to have PHP session support. Enabling PHP sessions.') . ' ' . "\n";
+ $supported_sessions_type['php4'] = 'PHP'; // makeing php sessions the default
+ $supported_sessions_type['php4-restore'] = lang('PHP plus restore'); // php-sessions with restore of egw_info array and egw object from the session
+ }
+ $supported_sessions_type['db'] = lang('Datebase');
+
+ @reset($default_db_ports);
+ $js_default_db_ports = 'var default_db_ports = new Array();'."\n";
+ while(list($k,$v) = @each($default_db_ports))
+ {
+ $js_default_db_ports .= ' default_db_ports["'.$k.'"]="'.$v.'";'."\n";
+ }
+ $setup_tpl->set_var('js_default_db_ports',$js_default_db_ports);
+
+ /*
+ if(check_load_extension('xml') || function_exists('xml_parser_create'))
+ {
+ $detected .= lang('You appear to have XML support enabled') . ' ' . "\n";
+ $xml_enabled = 'True';
+ }
+ else
+ {
+ $detected .= lang('No XML support found. Disabling') . ' ' . "\n";
+ }
+ */
+
+ $no_guess = False;
+ if(file_exists('../header.inc.php') && is_file('../header.inc.php') && is_readable('../header.inc.php'))
+ {
+ $detected .= lang('Found existing configuration file. Loading settings from the file...') . ' ' . "\n";
+ $GLOBALS['egw_info']['flags']['noapi'] = True;
+ $no_guess = true;
+ /* This code makes sure the newer multi-domain supporting header.inc.php is being used */
+ if(!isset($GLOBALS['egw_domain']))
+ {
+ $detected .= lang('You need to add some domains to your header.inc.php.') . ' ' . "\n";
+ $GLOBALS['egw_domain']['default'] = array();
+ $setup_tpl->set_var('lang_domain',lang('Database instance (eGW domain)'));
+ $setup_tpl->set_var('lang_delete',lang('Delete'));
+ $setup_tpl->set_var('db_domain','default');
+ $setup_tpl->set_var('db_host','localhost');
+ $setup_tpl->set_var('db_name','egroupware');
+ $setup_tpl->set_var('db_user','egroupware');
+ $setup_tpl->set_var('db_pass','');
+ $setup_tpl->set_var('config_user','changeme');
+ $setup_tpl->set_var('config_pass','');
+ while(list($k,$v) = @each($supported_db))
+ {
+ $dbtype_options .= '' . $db_fullnames[$v] . " \n";
+ if (!isset($default_port))
+ $default_port = $default_db_ports[$v];
+ }
+ $setup_tpl->set_var('dbtype_options',$dbtype_options);
+ $setup_tpl->set_var('db_port',$default_port);
+ $setup_tpl->parse('domains','domain',True);
+ }
+ else
+ {
+ if(@$GLOBALS['egw_info']['server']['header_version'] != @$GLOBALS['egw_info']['server']['current_header_version'])
+ {
+ $detected .= lang("You're using an old header.inc.php version...") . ' ' . "\n";
+ $detected .= lang('Importing old settings into the new format....') . ' ' . "\n";
+ }
+ reset($GLOBALS['egw_domain']);
+ list($default_domain) = each($GLOBALS['egw_domain']);
+ $GLOBALS['egw_info']['server']['default_domain'] = $default_domain;
+ unset($default_domain); // we kill this for security reasons
+ $GLOBALS['egw_info']['server']['config_passwd'] = $GLOBALS['egw_domain'][$GLOBALS['egw_info']['server']['default_domain']]['config_passwd'];
+ $GLOBALS['egw_info']['server']['config_user'] = $GLOBALS['egw_domain'][$GLOBALS['egw_info']['server']['default_domain']]['config_user'];
+
+ if(@$adddomain)
+ {
+ $GLOBALS['egw_domain'][lang('new')] = array();
+ }
+
+ foreach($GLOBALS['egw_domain'] as $key => $val)
+ {
+ $setup_tpl->set_var('lang_domain',lang('Database instance (eGW domain)'));
+ $setup_tpl->set_var('lang_delete',lang('Delete'));
+ $setup_tpl->set_var('db_domain',$key);
+ $setup_tpl->set_var('db_host',$GLOBALS['egw_domain'][$key]['db_host']);
+ /* Set default here if the admin didn't set a port yet */
+ $setup_tpl->set_var('db_port',$GLOBALS['egw_domain'][$key]['db_port']
+ ? $GLOBALS['egw_domain'][$key]['db_port']
+ : @$default_db_ports[$GLOBALS['egw_domain'][$key]['db_type']]
+ );
+ $setup_tpl->set_var('db_name',$GLOBALS['egw_domain'][$key]['db_name']);
+ $setup_tpl->set_var('db_user',$GLOBALS['egw_domain'][$key]['db_user']);
+ $setup_tpl->set_var('db_pass',$GLOBALS['egw_domain'][$key]['db_pass']);
+ $setup_tpl->set_var('db_type',$GLOBALS['egw_domain'][$key]['db_type']);
+ if(!@isset($GLOBALS['egw_domain'][$key]['config_user']))
+ {
+ $setup_tpl->set_var('config_user','admin');
+ }
+ else
+ {
+ $setup_tpl->set_var('config_user',$GLOBALS['egw_domain'][$key]['config_user']);
+ }
+ $setup_tpl->set_var('config_pass','');
+ $setup_tpl->set_var('config_password',$GLOBALS['egw_domain'][$key]['config_passwd']);
+
+ $selected = '';
+ $dbtype_options = '';
+ $found_dbtype = False;
+ @reset($supported_db);
+ while(list($k,$v) = @each($supported_db))
+ {
+ if($v == $GLOBALS['egw_domain'][$key]['db_type'])
+ {
+ $selected = ' selected="selected" ';
+ $found_dbtype = true;
+ }
+ else
+ {
+ $selected = '';
+ }
+ $dbtype_options .= '' . $db_fullnames[$v] . " \n";
+ }
+ $setup_tpl->set_var('dbtype_options',$dbtype_options);
+
+ $setup_tpl->parse('domains','domain',True);
+ }
+ $setup_tpl->set_var('domain','');
+ }
+ if(defined('PHPGW_SERVER_ROOT'))
+ {
+ $GLOBALS['egw_info']['server']['server_root'] = (PHPGW_SERVER_ROOT == '..') ? $realpath : PHPGW_SERVER_ROOT;
+ $GLOBALS['egw_info']['server']['include_root'] = (PHPGW_INCLUDE_ROOT == '..') ? $realpath : PHPGW_SERVER_ROOT;
+ }
+ elseif(!@isset($GLOBALS['egw_info']['server']['include_root']) && @$GLOBALS['egw_info']['server']['header_version'] <= 1.6)
+ {
+ $GLOBALS['egw_info']['server']['include_root'] = @$GLOBALS['egw_info']['server']['server_root'];
+ }
+ elseif(!@isset($GLOBALS['egw_info']['server']['header_version']) && @$GLOBALS['egw_info']['server']['header_version'] <= 1.6)
+ {
+ $GLOBALS['egw_info']['server']['include_root'] = @$GLOBALS['egw_info']['server']['server_root'];
+ }
+ }
+ else
+ {
+ $detected .= lang('Sample configuration not found. using built in defaults') . ' ' . "\n";
+ $GLOBALS['egw_info']['server']['server_root'] = $realpath;
+ $GLOBALS['egw_info']['server']['include_root'] = $realpath;
+ /* This is the basic include needed on each page for eGroupWare application compliance */
+ $GLOBALS['egw_info']['flags']['htmlcompliant'] = True;
+
+ /* These are the settings for the database system */
+ $setup_tpl->set_var('lang_domain',lang('Domain'));
+ $setup_tpl->set_var('lang_delete',lang('Delete'));
+ $setup_tpl->set_var('db_domain','default');
+ $setup_tpl->set_var('db_host','localhost');
+ $setup_tpl->set_var('db_name','egroupware');
+ $setup_tpl->set_var('db_user','egroupware');
+ $setup_tpl->set_var('db_pass','');
+ $setup_tpl->set_var('config_user','changeme');
+ $setup_tpl->set_var('config_pass','');
+
+ while(list($k,$v) = each($supported_db))
+ {
+ $dbtype_options .= '' . $db_fullnames[$v] . " \n";
+ if (!isset($default_port))
+ $default_port = $default_db_ports[$v];
+ }
+ $setup_tpl->set_var('db_port',$default_port);
+ $setup_tpl->set_var('dbtype_options',$dbtype_options);
+
+ $setup_tpl->parse('domains','domain',True);
+ $setup_tpl->set_var('domain','');
+
+ $setup_tpl->set_var('comment_l','');
+
+ /* These are a few of the advanced settings */
+ $GLOBALS['egw_info']['server']['db_persistent'] = True;
+ $GLOBALS['egw_info']['server']['mcrypt_enabled'] = false; // default off, as there are too many problems with buggy mcrypt implementations (was check_load_extension('mcrypt');)
+ $GLOBALS['egw_info']['server']['versions']['mcrypt'] = '';
+
+ srand((double)microtime()*1000000);
+ $random_char = array(
+ '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f',
+ 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
+ 'w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L',
+ 'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
+ );
+
+ for($i=0; $i<30; $i++)
+ {
+ $GLOBALS['egw_info']['server']['mcrypt_iv'] .= $random_char[rand(1,count($random_char))];
+ }
+ }
+
+ // now guessing better settings then the default ones
+ if(!$no_guess)
+ {
+ $detected .= lang('Now guessing better values for defaults...') . ' ' . "\n";
+ $this_dir = dirname($_SERVER['SCRIPT_FILENAME']);
+ $updir = str_replace('/setup','',$this_dir);
+ $GLOBALS['egw_info']['server']['server_root'] = $updir;
+ $GLOBALS['egw_info']['server']['include_root'] = $updir;
+ }
+
+ $detected .= " \n";
+ $setup_tpl->set_var('detected',$detected);
+ /* End of detected settings, now display the form with the detected or prior values */
+
+ $setup_tpl->set_var('server_root',@$GLOBALS['egw_info']['server']['server_root']);
+ $setup_tpl->set_var('include_root',@$GLOBALS['egw_info']['server']['include_root']);
+ if(!@isset($GLOBALS['egw_info']['server']['header_admin_user']))
+ {
+ $setup_tpl->set_var('header_admin_user','admin');
+ }
+ else
+ {
+ $setup_tpl->set_var('header_admin_user',@$GLOBALS['egw_info']['server']['header_admin_user']);
+ }
+ $setup_tpl->set_var('header_admin_pass',@$GLOBALS['egw_info']['server']['header_admin_password']);
+ $setup_tpl->set_var('header_admin_password','');
+
+
+ if(@$GLOBALS['egw_info']['server']['db_persistent'])
+ {
+ $setup_tpl->set_var('db_persistent_yes',' selected="selected"');
+ }
+ else
+ {
+ $setup_tpl->set_var('db_persistent_no',' selected="selected"');
+ }
+
+ $selected = '';
+ $session_options = '';
+ foreach($supported_sessions_type as $k => $v)
+ {
+ if($k == @$GLOBALS['egw_info']['server']['sessions_type'])
+ {
+ $selected = ' selected="selected" ';
+ }
+ else
+ {
+ $selected = '';
+ }
+ $session_options .= '