diff --git a/setup/inc/class.setup_html.inc.php b/setup/inc/class.setup_html.inc.php
new file mode 100644
index 0000000000..00d50a9c51
--- /dev/null
+++ b/setup/inc/class.setup_html.inc.php
@@ -0,0 +1,322 @@
+ *
+ * and Miles Lott *
+ * -------------------------------------------- *
+ * This program is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU General Public License as published by the *
+ * Free Software Foundation; either version 2 of the License, or (at your *
+ * option) any later version. *
+ \**************************************************************************/
+
+ /* $Id$ */
+
+ class setup_html
+ {
+ /**
+ * generate header.inc.php file output - NOT a generic html header function
+ *
+ */
+ function generate_header()
+ {
+ // PHP will automatically replace any dots in incoming
+ // variable names with underscores.
+
+ $GLOBALS['header_template']->set_file(array('header' => 'header.inc.php.template'));
+ $GLOBALS['header_template']->set_block('header','domain','domain');
+ $var = Array();
+
+ $deletedomain = get_var('deletedomain',Array('POST'));
+ $domains = get_var('domains',Array('POST'));
+
+ foreach($domains as $k => $v)
+ {
+ if(is_array($deletedomain) && isset($deletedomain[$k]))
+ {
+ continue;
+ }
+ $variableName = str_replace('.','_',$k);
+ $dom = get_var('setting_'.$variableName,Array('POST'));
+ $GLOBALS['header_template']->set_var('DB_DOMAIN',$v);
+ foreach($dom as $x => $y)
+ {
+ if(strtoupper($x) == 'CONFIG_PASS')
+ {
+ $GLOBALS['header_template']->set_var(strtoupper($x),md5($y));
+ }
+ else
+ {
+ $GLOBALS['header_template']->set_var(strtoupper($x),$y);
+ }
+ }
+ /* Admin did not type a new password, so use the old one from the hidden field,
+ * which is already md5 encoded.
+ */
+ if($dom['config_password'] && !$dom['config_pass'])
+ {
+ /* Real == hidden */
+ $GLOBALS['header_template']->set_var('CONFIG_PASS',$dom['config_password']);
+ }
+ /* If the admin didn't select a db_port, set to the default */
+ if(!$dom['db_port'])
+ {
+ $GLOBALS['header_template']->set_var('DB_PORT',$GLOBALS['default_db_ports'][$dom['db_type']]);
+ }
+ $GLOBALS['header_template']->parse('domains','domain',True);
+ }
+
+ $GLOBALS['header_template']->set_var('domain','');
+
+ $setting = get_var('setting',Array('POST'));
+ while($setting && list($k,$v) = @each($setting))
+ {
+ if(strtoupper($k) == 'HEADER_ADMIN_PASSWORD')
+ {
+ $var[strtoupper($k)] = md5($v);
+ }
+ else
+ {
+ $var[strtoupper($k)] = $v;
+ }
+ }
+ /* Admin did not type a new header password, so use the old one from the hidden field,
+ * which is already md5 encoded.
+ */
+ if($var['HEADER_ADMIN_PASS'] && empty($setting['HEADER_ADMIN_PASSWORD']))
+ {
+ /* Real == hidden */
+ $var['HEADER_ADMIN_PASSWORD'] = $var['HEADER_ADMIN_PASS'];
+ }
+ $GLOBALS['header_template']->set_var($var);
+ return $GLOBALS['header_template']->parse('out','header');
+ }
+
+ function setup_tpl_dir($app_name='setup')
+ {
+ /* hack to get tpl dir */
+ if (is_dir(EGW_SERVER_ROOT))
+ {
+ $srv_root = EGW_SERVER_ROOT . SEP . "$app_name" . SEP;
+ }
+ else
+ {
+ $srv_root = '';
+ }
+
+ $tpl_typical = 'templates' . SEP . 'default';
+ $tpl_root = "$srv_root" ."$tpl_typical";
+ return $tpl_root;
+ }
+
+ function show_header($title='',$nologoutbutton=False, $logoutfrom='config', $configdomain='')
+ {
+ // add a content-type header to overwrite an existing default charset in apache (AddDefaultCharset directiv)
+ header('Content-type: text/html; charset='.$GLOBALS['egw_setup']->system_charset);
+
+ $GLOBALS['setup_tpl']->set_var('charset',$GLOBALS['egw_setup']->system_charset);
+ $style = array(
+ 'th_bg' => '#486591',
+ 'th_text' => '#FFFFFF',
+ 'row_on' => '#DDDDDD',
+ 'row_off' => '#EEEEEE',
+ 'banner_bg' => '#4865F1',
+ 'msg' => '#FF0000',
+ );
+ $GLOBALS['setup_tpl']->set_var($style);
+ if ($nologoutbutton)
+ {
+ $GLOBALS['setup_tpl']->set_block('T_head','loged_in');
+ $GLOBALS['setup_tpl']->set_var('loged_in','');
+ }
+ else
+ {
+ $btn_logout = '' . lang('Logout').'';
+ $check_install = ''.lang('Check installation').'';
+ }
+
+ $GLOBALS['setup_tpl']->set_var('lang_setup', lang('setup'));
+ $GLOBALS['setup_tpl']->set_var('page_title',$title);
+ if ($configdomain == '')
+ {
+ $GLOBALS['setup_tpl']->set_var('configdomain','');
+ }
+ else
+ {
+ $GLOBALS['setup_tpl']->set_var('configdomain',' - ' . lang('Domain') . ': ' . $configdomain);
+ }
+
+ if(basename($_SERVER['SCRIPT_FILENAME']) != 'index.php')
+ {
+ $index_btn = '' . lang('Setup Main Menu') . '';
+ $index_img = '';
+ }
+
+ $GLOBALS['setup_tpl']->set_var('lang_version',lang('version'));
+ $GLOBALS['setup_tpl']->set_var('pgw_ver',@$GLOBALS['egw_info']['server']['versions']['phpgwapi']);
+ $GLOBALS['setup_tpl']->set_var(array(
+ 'logoutbutton' => $btn_logout,
+ 'indexbutton' => $index_btn,
+ 'indeximg' => $index_img,
+ 'check_install' => $check_install,
+ 'main_menu' => lang('Setup Main Menu'),
+ 'user_login' => lang('Back to user login')
+ ));
+
+ // manual / help link to the install manual on egroupware.org
+ $manual_remote_egw_url = 'http://manual.egroupware.org/egroupware';
+ $url_parts = explode('/',$_SERVER['PHP_SELF']);
+ $script = array_pop($url_parts);
+ $lang = get_var('ConfigLang',Array('POST','COOKIE'));
+ $url = $manual_remote_egw_url.'/manual/index.php?referer='.urlencode($manual_remote_egw_url.'/setup/'.$script).
+ ($lang ? '&lang='.urlencode($lang) : '');
+ $GLOBALS['setup_tpl']->set_var('manual',''.
+ htmlspecialchars(lang('Manual / help')).'');
+
+ $GLOBALS['setup_tpl']->pparse('out','T_head');
+ /* $setup_tpl->set_var('T_head',''); */
+ }
+
+ function show_footer()
+ {
+ $GLOBALS['setup_tpl']->pparse('out','T_footer');
+ unset($GLOBALS['setup_tpl']);
+ }
+
+ function show_alert_msg($alert_word='Setup alert',$alert_msg='setup alert (generic)')
+ {
+ $GLOBALS['setup_tpl']->set_var('V_alert_word',$alert_word);
+ $GLOBALS['setup_tpl']->set_var('V_alert_msg',$alert_msg);
+ $GLOBALS['setup_tpl']->pparse('out','T_alert_msg');
+ }
+
+ function make_frm_btn_simple($pre_frm_blurb='',$frm_method='post',$frm_action='',$input_type='submit',$input_value='',$post_frm_blurb='')
+ {
+ /* a simple form has simple components */
+ $simple_form = $pre_frm_blurb ."\n"
+ . '' . "\n"
+ . $post_frm_blurb . "\n";
+ return $simple_form;
+ }
+
+ function make_href_link_simple($pre_link_blurb='',$href_link='',$href_text='default text',$post_link_blurb='')
+ {
+ /* a simple href link has simple components */
+ $simple_link = $pre_link_blurb
+ . '' . $href_text . ' '
+ . $post_link_blurb . "\n";
+ return $simple_link;
+ }
+
+ function login_form()
+ {
+ /* begin use TEMPLATE login_main.tpl */
+ $GLOBALS['setup_tpl']->set_var('ConfigLoginMSG',@$GLOBALS['egw_info']['setup']['ConfigLoginMSG']);
+ $GLOBALS['setup_tpl']->set_var('HeaderLoginMSG',@$GLOBALS['egw_info']['setup']['HeaderLoginMSG']);
+ $GLOBALS['setup_tpl']->set_var('lang_header_username',lang('Header Username'));
+ $GLOBALS['setup_tpl']->set_var('lang_header_password',lang('Header Password'));
+ $GLOBALS['setup_tpl']->set_var('lang_header_login',lang('Header Admin Login'));
+ $GLOBALS['setup_tpl']->set_var('lang_config_login',lang('Setup/Config Admin Login'));
+ $GLOBALS['setup_tpl']->set_var('lang_config_username',lang('Config Username'));
+ $GLOBALS['setup_tpl']->set_var('lang_config_password',lang('Config Password'));
+ $GLOBALS['setup_tpl']->set_var('lang_domain',lang('Domain'));
+
+ $GLOBALS['setup_tpl']->set_var('lang_select',lang_select());
+
+ if ($GLOBALS['egw_info']['setup']['stage']['header'] == '10')
+ {
+ /*
+ Begin use SUB-TEMPLATE login_stage_header,
+ fills V_login_stage_header used inside of login_main.tpl
+ */
+ if (count($GLOBALS['egw_domain']) > 1)
+ {
+ foreach($GLOBALS['egw_domain'] as $domain => $data)
+ {
+ $domains .= "\n";
+ }
+ $GLOBALS['setup_tpl']->set_var('domains',$domains);
+
+ // use BLOCK B_multi_domain inside of login_stage_header
+ $GLOBALS['setup_tpl']->parse('V_multi_domain','B_multi_domain');
+ // in this case, the single domain block needs to be nothing
+ $GLOBALS['setup_tpl']->set_var('V_single_domain','');
+ }
+ else
+ {
+ reset($GLOBALS['egw_domain']);
+ $default_domain = each($GLOBALS['egw_domain']);
+ $GLOBALS['setup_tpl']->set_var('default_domain_zero',$default_domain[0]);
+
+ /* Use BLOCK B_single_domain inside of login_stage_header */
+ $GLOBALS['setup_tpl']->parse('V_single_domain','B_single_domain');
+ /* in this case, the multi domain block needs to be nothing */
+ $GLOBALS['setup_tpl']->set_var('V_multi_domain','');
+ }
+ /*
+ End use SUB-TEMPLATE login_stage_header
+ put all this into V_login_stage_header for use inside login_main
+ */
+ $GLOBALS['setup_tpl']->parse('V_login_stage_header','T_login_stage_header');
+ }
+ else
+ {
+ /* begin SKIP SUB-TEMPLATE login_stage_header */
+ $GLOBALS['setup_tpl']->set_var('V_multi_domain','');
+ $GLOBALS['setup_tpl']->set_var('V_single_domain','');
+ $GLOBALS['setup_tpl']->set_var('V_login_stage_header','');
+ }
+ /*
+ end use TEMPLATE login_main.tpl
+ now out the login_main template
+ */
+ $GLOBALS['setup_tpl']->pparse('out','T_login_main');
+ }
+
+ function get_template_list()
+ {
+ $d = dir(EGW_SERVER_ROOT . '/phpgwapi/templates');
+
+ while($entry = $d->read())
+ {
+ if ($entry != 'CVS' && $entry != '.' && $entry != '..')
+ {
+ $list[$entry]['name'] = $entry;
+ $f = EGW_SERVER_ROOT . '/phpgwapi/templates/' . $entry . '/details.inc.php';
+ if (file_exists ($f))
+ {
+ include($f);
+ $list[$entry]['title'] = 'Use ' . $GLOBALS['egw_info']['template'][$entry]['title'] . 'interface';
+ }
+ else
+ {
+ $list[$entry]['title'] = $entry;
+ }
+ }
+ }
+ $d->close();
+ reset ($list);
+ return $list;
+ }
+
+ function list_themes()
+ {
+ $dh = dir(EGW_SERVER_ROOT . '/phpgwapi/themes');
+ while ($file = $dh->read())
+ {
+ if (eregi("\.theme$", $file))
+ {
+ $list[] = substr($file,0,strpos($file,'.'));
+ }
+ }
+ $dh->close();
+ reset ($list);
+ return $list;
+ }
+ }
+?>