From: <ral...@us...> - 2006-05-28 02:54:16
|
Author: ralfbecker Date: Sun May 28 02:55:41 2006 New Revision: 21645 URL: http://egroupware.org/viewvc?rev=3D21645&view=3Drev Log: first step to new setup command line interface (setup/setup-cli.php): - atm. all manageheader functionality is accessible - reworked manageheader.php using the new setup_header class shared with se= tup-cli.php =3D> install & update via cli is comming the next days Works in 1.2 if you drop setup-cli.php and class.setup_header.inc.php in a = 1=2E2 install. Added: trunk/setup/inc/class.setup_header.inc.php Added: trunk/setup/inc/class.setup_header.inc.php URL: http://egroupware.org/viewvc/trunk/setup/inc/class.setup_header.inc.ph= p?rev=3D21645&view=3Dauto =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- trunk/setup/inc/class.setup_header.inc.php (added) +++ trunk/setup/inc/class.setup_header.inc.php Sun May 28 02:55:41 2006 @@ -1,0 +1,290 @@ +<?php +/*************************************************************************= *\ +* eGroupWare - Setup - Manage the eGW config file header.inc.php = * +* http://www.egroupware.org = * +* ------------------------------------------------------------------------= * +* Written 2006 by RalfBecker-AT-outdoor-training.de, partially using code = * +* from manageheader.php and class.setup_html.inc.php written by = * +* Tony Puglisi (Angles) and Miles Lott <mi...@eg...> = * +* ------------------------------------------------------------------------= * +* 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.inc.php 20991 2006-04-06 11:19:56Z ralfbecker $ */ + +/** + * Functions to manage the eGW config file header.inc.php + *=20 + * Used by manageheader.php and the new setup command line interface setup= -cli.php + * + * @package setup + * @author Ralf Becker <RalfBecker-AT-outdoor-training.de> + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU Gener= al Public License + */ +class setup_header +{ + /** + * @var array with php-extension / ADOdb drive names =3D> describtiv label + */ + var $db_fullnames =3D array( + 'pgsql' =3D> 'PostgreSQL', + 'mysql' =3D> 'MySQL', + 'mysqli' =3D> 'MySQLi (php5)', + 'mssql' =3D> 'MS SQL Server', + 'odbc_mssql' =3D> 'MS SQL Server via ODBC', + 'oracle' =3D> 'Oracle', + 'odbc_oracle' =3D> 'Oracle via ODBC', + 'sapdb' =3D> 'SAP/Max DB via ODBC', + ); + + /** + * @var array with php-extension / ADOdb drive names =3D> default port us= ed by database + */ + var $default_db_ports =3D array( + 'pgsql' =3D> 5432, + 'mysql' =3D> 3306, + 'mysqli' =3D> 3306, + 'mssql' =3D> 1433, + 'odbc_mssql' =3D> '', + 'oracle' =3D> 1521, + 'odbc_oracle' =3D> '', + 'sapdb' =3D> '', + ); + + /** + * Detect settings or set defaults for the header.inc.php file (used if i= t does not yet exist) + *=20 + * Sets $GLOBALS['egw_info'], $GLOBALS['egw_domains'] and the defines EGW= _SERVER_ROOT and EGW_INCLUDE_ROOT, + * as if the header has been included + *=20 + * @param string $domain=3D'default' domain to set + */ + function defaults($domain=3D'default') + { + $egw_root =3D realpath(dirname(__FILE__).'/../..'); + $GLOBALS['egw_info']['server']['server_root'] =3D $GLOBALS['egw_info']['= server']['include_root'] =3D $egw_root; + define('EGW_SERVER_ROOT',$egw_root); // this is usally already defined b= y setup and cant be changed + define('EGW_INCLUDE_ROOT',$egw_root); + =09 + $GLOBALS['egw_info']['server']['header_admin_user'] =3D 'admin'; + $GLOBALS['egw_info']['server']['header_admin_password'] =3D ''; + $GLOBALS['egw_info']['server']['setup_acl'] =3D ''; + + if ($domain) $GLOBALS['egw_domain'][$domain] =3D $this->domain_defaults(= ); + =09 + $GLOBALS['egw_info']['server']['show_domain_selectbox'] =3D false; + $GLOBALS['egw_info']['server']['db_persistent'] =3D True; + $GLOBALS['egw_info']['server']['sessions_type'] =3D !$this->check_load_e= xtension('session') ? 'db' :'php4'; + $GLOBALS['egw_info']['login_template_set'] =3D 'idots'; + $GLOBALS['egw_info']['server']['mcrypt_enabled'] =3D False; + $GLOBALS['egw_info']['server']['versions']['mcrypt'] =3D ''; + $GLOBALS['egw_info']['server']['mcrypt_iv'] =3D $this->generate_mcyrpt_i= v(); + } +=09 + function domain_defaults($user=3D'admin',$passwd=3D'',$supported_db=3Dnul= l) + { + if (is_null($supported_db)) $supported_db =3D $this->check_db_support($n= ull); + $default_db =3D count($supported_db) ? $supported_db[0] : 'mysql'; + + return array( + 'db_host' =3D> 'localhost', + 'db_port' =3D> $this->default_db_ports[$default_db], + 'db_name' =3D> 'egroupware', + 'db_user' =3D> 'egroupware', + 'db_pass' =3D> '', + 'db_type' =3D> $default_db, + 'config_user' =3D> $user, + 'config_passwd' =3D> $passwd, + ); + } +=09 + /** + * Checks the values of the (included) header.inc.php file + *=20 + * The values are set in $GLOBALS['egw_info'], $GLOBALS['egw_domain'] and= EGW_SERVER_ROOT + * + * @return array with errors or null if no errors + */ + function validation_errors($server_root=3DEGW_SERVER_ROOT,$include_root= =3DEGW_INCLUDE_ROOT) + { + $errors =3D null; + + foreach(array( + lang('Server root') =3D> $server_root, + lang('Include root') =3D> $include_root) as $label =3D> $path) + { + if (!is_dir($path) || !is_readable($path) || !is_dir($path.'/phpgwapi')) + { + $errors[] =3D lang("%1 '%2' does NOT exist, is not readable by the web= server or contains no eGroupWare installation!",$label,$path); + } + } + if(!$GLOBALS['egw_info']['server']['header_admin_password']) + { + $errors[] =3D lang("You didn't enter a header admin password"); + } + if(!$GLOBALS['egw_info']['server']['header_admin_user']) + { + $errors[] =3D lang("You didn't enter a header admin username"); + } + if (!is_array($GLOBALS['egw_domain']) || !count($GLOBALS['egw_domain'])) + { + $errors[] =3D lang('You need to add at least one eGroupWare domain / da= tabase instance.'); + } + else + { + foreach($GLOBALS['egw_domain'] as $domain =3D> $data) + { + if (!$data['config_passwd']) + { + $errors[] =3D lang("You didn't enter a config password for domain %1"= ,$domain); + } + if(!$data['config_user']) + { + $errors[] =3D lang("You didn't enter a config username for domain %1"= ,$domain); + } + } + } + return $errors; + } +=09 + /** + * generate header.inc.php file from given values + * + * setup_header::generate(EGW_SERVER_ROOT,EGW_INCLUDE_ROOT,$GLOBALS['egw_= info'],$GLOBALS['egw_domains']) + * should write an identical header.inc.php as the one include + *=20 + * @param array $egw_info usual content (in server key) plus keys server_= root and include_root + * @param array $egw_domains info about the existing eGW domains / DB ins= tances + * @return string content of header.inc.php + */ + function generate($egw_info,$egw_domain) + { + $tpl =3D& CreateObject('setup.Template','../'); + $tpl->set_file(array('header' =3D> 'header.inc.php.template')); + $tpl->set_block('header','domain','domain'); + + foreach($egw_domain as $domain =3D> $data) + { + $var =3D array('DB_DOMAIN' =3D> $domain); + foreach($data as $name =3D> $value) + { + if ($name =3D=3D 'db_port' && !$value) $value =3D $this->default_db_po= rts[$data['db_type']]; + if ($name =3D=3D 'config_passwd') + { + $var['CONFIG_PASS'] =3D $this->is_md5($value) ? $value : md5($value); + } + else + { + $var[strtoupper($name)] =3D addslashes($value); + } + } + $tpl->set_var($var); + $tpl->parse('domains','domain',True); + } + $tpl->set_var('domain',''); + =09 + $var =3D Array(); + foreach($egw_info['server'] as $name =3D> $value) + { + if ($name =3D=3D 'header_admin_password' && !$this->is_md5($value)) $va= lue =3D md5($value); + if ($name =3D=3D 'versions') + { + $name =3D 'mcrypt_version'; + $value =3D $value['mcrypt']; + } + static $bools =3D array( + 'mcrypt_enabled' =3D> 'ENABLE_MCRYPT', + 'db_persistent' =3D> 'db_persistent', + 'show_domain_selectbox' =3D> 'DOMAIN_SELECTBOX', + ); + if (isset($bools[$name])) + { + $name =3D $bools[$name]; + $value =3D $value ? 'true' : 'false'; + } + $var[strtoupper($name)] =3D addslashes($value); + } + $tpl->set_var($var); + + return $tpl->parse('out','header'); + } +=09 + /** + * Gernerate a random mcrypt_iv vector + * + * @return string + */ + function generate_mcyrpt_iv() + { + srand((double)microtime()*1000000); + $random_char =3D 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' + ); + + $iv =3D ''; + for($i=3D0; $i<30; $i++) + { + $iv .=3D $random_char[rand(1,count($random_char))]; + } + return $iv; + } + + /** + * 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); + } +=09 + function check_db_support(&$detected) + { + $supported_db =3D $detected =3D array(); + foreach(array( + // short =3D> array(extension,func_to_check,supported_db(s)) + 'mysql' =3D> array('mysql','mysql_connect','mysql'), + 'mysqli' =3D> array('mysql','mysql_iconnect','mysqli'), + 'pgsql' =3D> array('pgsql','pg_connect','pgsql'), + 'mssql' =3D> array('mssql','mssql_connect','mssql'), + 'odbc' =3D> array('odbc',false,'sapdb','odbc_mssql','odbc_oracle'), + 'oracle' =3D> array('oci8',false,'oracle'), + ) as $db =3D> $data) + { + $ext =3D array_shift($data); + $func_to_check =3D array_shift($data); + $name =3D isset($this->db_fullnames[$db]) ? $this->db_fullnames[$db] : = strtoupper($db); + if ($this->check_load_extension($ext) || $func_to_check && function_exi= sts($func_to_check)) + { + $detected[] =3D lang('You appear to have %1 support.',$name); + $supported_db =3D array_merge($supported_db,$data); + } + else + { + $detected[] .=3D lang('No %1 support found. Disabling',$name); + } + } + return $supported_db; + } +=09 + function is_md5($str) + { + return preg_match('/^[0-9a-f]{32}$/',$str); + } +}=09 + +// some constanst for pre php4.3 +if (!defined('PHP_SHLIB_SUFFIX')) +{ + define('PHP_SHLIB_SUFFIX',strtoupper(substr(PHP_OS, 0,3)) =3D=3D 'WIN' ? = 'dll' : 'so'); +} +if (!defined('PHP_SHLIB_PREFIX')) +{ + define('PHP_SHLIB_PREFIX',PHP_SHLIB_SUFFIX =3D=3D 'dll' ? 'php_' : ''); +} |