got setup command line interface fully working:

- create, edit & update the header
- install & update eGW
- config eGW
- create admin account
- install & update languages
- create & restore (install) backups
---> update, languages & backup can work for all domains at once
---> for use in 1.2 you have to update/switch the whole setup app to HEAD/trunk
This commit is contained in:
Ralf Becker 2006-05-29 02:56:16 +00:00
parent 6ccca34f85
commit 55b9797a59
11 changed files with 802 additions and 402 deletions

View File

@ -1,36 +1,35 @@
<?php
/**************************************************************************\
* eGroupWare *
* http://www.egroupware.org *
* -------------------------------------------- *
* 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. *
\**************************************************************************/
/**
* Setup - create admin account
*
* @link http://www.egroupware.org
* @package setup
* @author Miles Lott <milos@groupwhere.org>
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
/* $Id$ */
// Little file to setup a demo install
$GLOBALS['egw_info'] = array(
'flags' => array(
'noheader' => True,
'nonavbar' => True,
'currentapp' => 'home',
'noapi' => True
));
include('./inc/functions.inc.php');
// Authorize the user to use setup app and load the database
// Does not return unless user is authorized
if(!$GLOBALS['egw_setup']->auth('Config') || get_var('cancel',Array('POST')))
if (!strstr($_SERVER['PHP_SELF'],'setup-cli.php'))
{
Header('Location: index.php');
exit;
$GLOBALS['egw_info'] = array(
'flags' => array(
'noheader' => True,
'nonavbar' => True,
'currentapp' => 'home',
'noapi' => True
));
include('./inc/functions.inc.php');
// Authorize the user to use setup app and load the database
// Does not return unless user is authorized
if(!$GLOBALS['egw_setup']->auth('Config') || get_var('cancel',Array('POST')))
{
Header('Location: index.php');
exit;
}
$GLOBALS['egw_setup']->loaddb(true);
}
$GLOBALS['egw_setup']->loaddb(true);
$error = '';
if ($_POST['submit'])
{
@ -40,6 +39,7 @@
$username = get_var('username',Array('POST'));
$fname = get_var('fname',Array('POST'));
$lname = get_var('lname',Array('POST'));
$email = get_var('email',Array('POST'));
if($passwd != $passwd2 || !$username)
{
@ -81,7 +81,8 @@
$setup_tpl->set_var('adminusername',lang('Admin username'));
$setup_tpl->set_var('adminfirstname',lang('Admin first name'));
$setup_tpl->set_var('adminlastname',lang('Admin last name'));
$setup_tpl->set_var('adminpassword',lang('Admin password'));
$setup_tpl->set_var('adminemail',lang('Admin email address'));
$setup_tpl->set_var('adminpassword',lang('Admin password'));
$setup_tpl->set_var('adminpassword2',lang('Re-enter password'));
$setup_tpl->set_var('create_demo_accounts',lang('Create demo accounts'));
@ -183,7 +184,7 @@
}
/* Create records for administrator account, with Admins as primary and Default as additional group */
$accountid = $GLOBALS['egw_setup']->add_account($username,$fname,$lname,$passwd,'Admins',True);
$accountid = $GLOBALS['egw_setup']->add_account($username,$fname,$lname,$passwd,'Admins',True,$email);
if (!$accountid)
{
echo '<p><b>'.lang('Error in admin-creation !!!')."</b></p>\n";
@ -196,7 +197,8 @@
$GLOBALS['egw_setup']->db->transaction_commit();
Header('Location: index.php');
exit;
if (!strstr($_SERVER['PHP_SELF'],'setup-cli.php'))
{
Header('Location: index.php');
}
}
?>

View File

@ -1,20 +1,17 @@
<?php
/**************************************************************************\
* eGroupWare - Setup *
* http://www.egroupware.org *
* -------------------------------------------- *
* This file written by Joseph Engo<jengo@phpgroupware.org> *
* and Dan Kuykendall<seek3r@phpgroupware.org> *
* and Mark Peters<skeeter@phpgroupware.org> *
* and Miles Lott<milosch@groupwhere.org> *
* -------------------------------------------- *
* 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$ */
/**
* Setup
*
* @link http://www.egroupware.org
* @package setup
* @author Joseph Engo <jengo@phpgroupware.org>
* @author Dan Kuykendall <seek3r@phpgroupware.org>
* @author Mark Peters <skeeter@phpgroupware.org>
* @author Miles Lott <milos@groupwhere.org>
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
class egw_dummy {
var $db;
@ -49,6 +46,12 @@
var $tbl_apps;
var $tbl_config;
var $tbl_hooks;
/**
* @var float $required_php_version php version required by eGroupWare
*/
var $required_php_version = 4.3;
var $recommended_php_version = '5+';
function setup($html=False, $translation=False)
{
@ -885,14 +888,16 @@
*
* if the $username already exists, only the id is returned, no new user / group gets created
*
* @param username string alphanumerical username or groupname (account_lid)
* @param first, last string first / last name
* @param string $username alphanumerical username or groupname (account_lid)
* @param string $first first name
* @param string $last last name
* @param $passwd string cleartext pw
* @param $group string/boolean Groupname for users primary group or False for a group, default 'Default'
* @param $changepw boolean user has right to change pw, default False
* @return the numerical user-id
* @param string/boolean $group Groupname for users primary group or False for a group, default 'Default'
* @param boolean $changepw user has right to change pw, default False
* @param string $email
* @return int the numerical user-id
*/
function add_account($username,$first,$last,$passwd,$group='default',$changepw=False)
function add_account($username,$first,$last,$passwd,$group='default',$changepw=False,$email='')
{
$this->setup_account_object();
@ -908,7 +913,8 @@
'account_lastname' => $last,
'account_status' => 'A',
'account_primary_group' => $groupid,
'account_expires' => -1
'account_expires' => -1,
'account_email' => $email,
));
}
$accountid = (int)$accountid;

View File

@ -1,18 +1,14 @@
<?php
/**************************************************************************\
* eGroupWare - Setup *
* http://www.egroupware.org *
* -------------------------------------------- *
* This file written by Dan Kuykendall<seek3r@phpgroupware.org> *
* and Miles Lott<milos@groupwhere.org> *
* -------------------------------------------- *
* 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$ */
/**
* Setup
*
* @link http://www.egroupware.org
* @package setup
* @author Dan Kuykendall <seek3r@phpgroupware.org>
* @author Miles Lott <milos@groupwhere.org>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
class setup_detection
{
@ -306,6 +302,11 @@
}
}
/**
* Check if eGW configuration exists
*
* @return int 1 = Needs config, ..., 10 = Config Ok
*/
function check_config()
{
$GLOBALS['egw_setup']->db->Halt_On_Error = 'no';
@ -314,18 +315,58 @@
return '';
}
$GLOBALS['egw_setup']->db->select($GLOBALS['egw_setup']->config_table,'config_value',array('config_name'=>'freshinstall'),__LINE__,__FILE__);
$configured = $GLOBALS['egw_setup']->db->next_record() ? $GLOBALS['egw_setup']->db->f('config_value') : False;
if($configed)
$GLOBALS['egw_setup']->db->select($GLOBALS['egw_setup']->config_table,'config_name,config_value',array('config_app' => 'phpgwapi'),__LINE__,__FILE__);
while($GLOBALS['egw_setup']->db->next_record())
{
$config[$GLOBALS['egw_setup']->db->f(0)] = $GLOBALS['egw_setup']->db->f(1);
}
$GLOBALS['egw_info']['setup']['header_msg'] = 'Stage 2 (Needs Configuration)';
if(!count($config))
{
$GLOBALS['egw_info']['setup']['header_msg'] = 'Stage 2 (Needs Configuration)';
return 1;
}
else
$config_errors =& $GLOBALS['egw_info']['setup']['config_errors'];
$config_errors = array();
if (!check_dir($config['temp_dir'],$error_msg))
{
$GLOBALS['egw_info']['setup']['header_msg'] = 'Stage 2 (Configuration OK)';
return 10;
$config_errors[] = lang("Your temporary directory '%1' %2",$config['temp_dir'],$error_msg);
}
if ((!isset($config['file_repository']) || $config['file_repository'] == 'sql') &&
(!isset($config['file_store_contents']) || $config['file_store_contents'] == 'filesystem') &&
!check_dir($config['files_dir'],$error_msg,true))
{
$config_errors[] = lang("Your files directory '%1' %2",$config['files_dir'],$error_msg);
}
// set and create the default backup_dir
if (@is_writeable($config['files_dir']) && !$config['backup_dir'] && $config['file_store_contents'] == 'filesystem')
{
$config['backup_dir'] = $config['files_dir'].'/db_backup';
if (!is_dir($config['backup_dir']) && mkdir($config['backup_dir']))
{
$GLOBALS['egw_setup']->db->insert($GLOBALS['egw_setup']->config_table,array(
'config_value' => $config['backup_dir'],
),array(
'config_app' => 'phpgwapi',
'config_name' => 'backup_dir',
),__LINE__,__FILE__);
}
}
if (!check_dir($config['backup_dir'],$error_msg,true))
{
$config_errors[] = lang("Your backup directory '%1' %2",$config['backup_dir'],$error_msg);
}
if (!$config['mail_server'] || !$config['mail_server_type'] || !$config['smtp_server'])
{
$config_errors[] = lang('Missing or uncomplete mailserver configuration');
}
if ($config_errors)
{
return 2;
}
$GLOBALS['egw_info']['setup']['header_msg'] = 'Stage 2 (Configuration OK)';
return 10;
}
function check_lang($check = True)

View File

@ -1,19 +1,15 @@
<?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 <milosch@egroupware.org> *
* ------------------------------------------------------------------------ *
* 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 $ */
/**
* Setup - Manage the eGW config file header.inc.php
*
* @link http://www.egroupware.org
* @package setup
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @author Miles Lott <milos@groupwhere.org>
* @author Tony Puglisi (Angles)
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
/**
* Functions to manage the eGW config file header.inc.php

View File

@ -196,9 +196,9 @@
$is_windows = strtoupper(substr(PHP_OS,0,3)) == 'WIN';
$GLOBALS['current_config']['site_title'] = 'eGroupWare';
$GLOBALS['current_config']['hostname'] = $_SERVER['HTTP_HOST'];
$GLOBALS['current_config']['hostname'] = $_SERVER['HTTP_HOST'] ? $_SERVER['HTTP_HOST'] : 'localhost';
// guessing the phpGW url
// guessing the eGW url
$parts = explode('/',$_SERVER['PHP_SELF']);
array_pop($parts); // remove config.php
array_pop($parts); // remove setup

View File

@ -1,27 +1,15 @@
<?php
/**************************************************************************\
* eGroupWare API - Translation class for phpgw lang files *
* This file written by Miles Lott <milosch@groupwhere.org> *
* and Dan Kuykendall <seek3r@phpgroupware.org> *
* Handles multi-language support using flat files *
* -------------------------------------------------------------------------*
* This library is part of the eGroupWare API *
* http://www.egroupware.org/api *
* ------------------------------------------------------------------------ *
* This library is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation; either version 2.1 of the License, *
* or any later version. *
* This library is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Lesser General Public License for more details. *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library; if not, write to the Free Software Foundation, *
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
\**************************************************************************/
/* $Id$ */
/**
* Setup
*
* @link http://www.egroupware.org
* @package setup
* @author Dan Kuykendall <seek3r@phpgroupware.org>
* @author Miles Lott <milos@groupwhere.org>
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
if (!defined('MAX_MESSAGE_ID_LENGTH'))
{
@ -31,6 +19,8 @@
class setup_translation
{
var $langarray = array();
var $no_translation_marker = '*';
/**
* constructor for the class, loads all phrases into langarray
@ -81,7 +71,7 @@
*/
function translate($key, $vars=False)
{
$ret = $key.'*';
$ret = $key . $this->no_translation_marker;
$key = strtolower(trim($key));
if (isset($this->langarray[$key]))
{
@ -99,7 +89,7 @@
{
foreach($vars as $n => $var)
{
$ret = preg_replace( '/%'.($n+1).'/', $var, $ret );
$ret = str_replace( '%'.($n+1), $var, $ret );
}
}
return $ret;

View File

@ -1,20 +1,17 @@
<?php
/**************************************************************************\
* eGroupWare - Setup *
* http://www.egroupware.org *
* -------------------------------------------- *
* This file written by Joseph Engo<jengo@phpgroupware.org> *
* and Dan Kuykendall<seek3r@phpgroupware.org> *
* and Mark Peters<skeeter@phpgroupware.org> *
* and Miles Lott<milosch@groupwhere.org> *
* -------------------------------------------- *
* 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$ */
/**
* Setup
*
* @link http://www.egroupware.org
* @package setup
* @author Joseph Engo <jengo@phpgroupware.org>
* @author Dan Kuykendall <seek3r@phpgroupware.org>
* @author Mark Peters <skeeter@phpgroupware.org>
* @author Miles Lott <milos@groupwhere.org>
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
error_reporting(error_reporting() & ~E_NOTICE);
@ -63,7 +60,7 @@
$msg = lang('does not exist');
return false;
}
if (!@is_writeable($dir))
if (!@is_writeable($dir) && $_SERVER['HTTP_HOST']) // only do the check if we run by the webserver
{
$msg = lang('is not writeable by the webserver');
return false;

View File

@ -1,14 +1,14 @@
<?php
/**************************************************************************\
* eGroupWare *
* http://www.egroupware.org *
* -------------------------------------------- *
* 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$ */
/**
* Setup
*
* @link http://www.egroupware.org
* @package setup
* @author Miles Lott <milos@groupwhere.org>
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
$GLOBALS['DEBUG'] = False;
$GLOBALS['egw_info'] = array(
@ -157,11 +157,12 @@
$setup_tpl->set_var('subaction',@$subaction);
// Old PHP
if (!function_exists('version_compare'))//version_compare() is only available in PHP4.1+
if ((float) PHP_VERSION < $GLOBALS['egw_setup']->required_php_version)
{
$GLOBALS['egw_setup']->html->show_header($GLOBALS['egw_info']['setup']['header_msg'],True);
$GLOBALS['egw_setup']->html->show_alert_msg('Error',
lang('You appear to be running an old version of PHP <br />It its recommend that you upgrade to a new version. <br />Older version of PHP might not run eGroupWare correctly, if at all. <br /><br />Please upgrade to at least version %1','4.1'));
lang('You are using PHP version %1. eGroupWare now requires %2 or later, recommended is PHP %3.',
PHP_VERSION,$GLOBALS['egw_setup']->required_php_version,$GLOBALS['egw_setup']->recommended_php_version));
$GLOBALS['egw_setup']->html->show_footer();
exit;
}
@ -178,8 +179,8 @@
$setup_tpl->set_var('db_step_text',lang('Step %1 - Simple Application Management',1));
$setup_tpl->set_var('lang_system_charset',lang('<b>charset to use</b> (use utf-8 if you plan to use languages with different charsets):'));
$setup_tpl->set_var('system_charset',str_replace('&amp;','&',$GLOBALS['egw_setup']->translation->get_charsets('system_charset',
$GLOBALS['egw_setup']->system_charset)));
$setup_tpl->set_var('system_charset',str_replace('&amp;','&',
$GLOBALS['egw_setup']->translation->get_charsets('system_charset',$GLOBALS['egw_setup']->system_charset)));
switch($GLOBALS['egw_info']['setup']['stage']['db'])
{
@ -307,7 +308,7 @@
// use uploaded backup, instead installing from scratch
if ($_POST['upload'])
{
$db_backup = CreateObject('phpgwapi.db_backup');
$db_backup =& CreateObject('phpgwapi.db_backup');
if (is_array($_FILES['uploaded']) && !$_FILES['uploaded']['error'] &&
is_uploaded_file($_FILES['uploaded']['tmp_name']))
{
@ -410,7 +411,7 @@
$setup_tpl->set_var('config_status_alt',lang('not completed'));
switch($GLOBALS['egw_info']['setup']['stage']['config'])
{
case 1:
case 1: // AFAIK this dont happen any more, as we have setup_process::save_minimal_config() now -- RalfBecker
$btn_config_now = $GLOBALS['egw_setup']->html->make_frm_btn_simple(
lang('Please configure eGroupWare for your environment'),
'post','config.php',
@ -420,48 +421,13 @@
$setup_tpl->set_var('ldap_table_data','&nbsp;');
break;
case 10:
$GLOBALS['egw_setup']->db->select($GLOBALS['egw_setup']->config_table,'config_name,config_value',array('config_app' => 'phpgwapi'),__LINE__,__FILE__);
while($GLOBALS['egw_setup']->db->next_record())
$setup_tpl->set_var('config_status_img',$completed);
$setup_tpl->set_var('config_status_alt',lang('completed'));
$config_msg = lang('Configuration completed');
case 2:
if ($GLOBALS['egw_info']['setup']['config_errors'])
{
$config[$GLOBALS['egw_setup']->db->f(0)] = $GLOBALS['egw_setup']->db->f(1);
}
$config_msg = '';
if (!check_dir($config['temp_dir'],$error_msg))
{
$config_msg = lang("Your temporary directory '%1' %2",$config['temp_dir'],$error_msg);
}
if ($config['file_repository'] == 'sql' && $config['file_store_contents'] == 'filesystem' && !check_dir($config['files_dir'],$error_msg,true))
{
$config_msg .= ($config_msg?"<br />\n":'').lang("Your files directory '%1' %2",$config['files_dir'],$error_msg);
}
// set and create the default backup_dir
if (@is_writeable($config['files_dir']) && !$config['backup_dir'] && $config['file_store_contents'] == 'filesystem')
{
$config['backup_dir'] = $config['files_dir'].'/db_backup';
if (!is_dir($config['backup_dir']) && mkdir($config['backup_dir']))
{
$GLOBALS['egw_setup']->db->insert($GLOBALS['egw_setup']->config_table,array(
'config_value' => $config['backup_dir'],
),array(
'config_app' => 'phpgwapi',
'config_name' => 'backup_dir',
),__LINE__,__FILE__);
}
}
if (!check_dir($config['backup_dir'],$error_msg,true))
{
$no_backup_dir = lang("Your backup directory '%1' %2",$config['backup_dir'],$error_msg);
$config_msg .= ($config_msg?"<br />\n":'').$no_backup_dir;
}
if (!$config['mail_server'] || !$config['mail_server_type'] || !$config['smtp_server'])
{
$config_msg .= ($config_msg?"<br />\n":'').lang('Missing or uncomplete mailserver configuration');
}
if (!$config_msg)
{
$setup_tpl->set_var('config_status_img',$completed);
$setup_tpl->set_var('config_status_alt',lang('completed'));
$config_msg = lang('Configuration completed');
$config_msg = implode('<br />',$GLOBALS['egw_info']['setup']['config_errors']);
}
$btn_edit_config = $GLOBALS['egw_setup']->html->make_frm_btn_simple(
$config_msg,

View File

@ -1,18 +1,14 @@
<?php
/**************************************************************************\
* eGroupWare *
* http://www.egroupware.org *
* ------------------------------------------------------------------------ *
* Redesigned 2006 by RalfBecker-AT-outdoor-training.de, to use the new *
* setup_header class shared with the setup command line interface. *
* ------------------------------------------------------------------------ *
* 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$ */
/**
* Setup - Manage the eGW config file header.inc.php
*
* @link http://www.egroupware.org
* @package setup
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @author Miles Lott <milos@groupwhere.org>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
$GLOBALS['egw_info'] = array(
'flags' => array(
@ -27,12 +23,6 @@ include('./inc/functions.inc.php');
require_once('./inc/class.setup_header.inc.php');
$GLOBALS['egw_setup']->header =& new setup_header();
/* necessary ?
$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);
*/
$setup_tpl = CreateObject('setup.Template','./templates/default');
$setup_tpl->set_file(array(
'T_head' => 'head.tpl',
@ -233,12 +223,22 @@ function show_header_form($validation_errors)
$setup_tpl->set_var('pagemsg',$GLOBALS['egw_info']['setup']['PageMSG']);
// checking required PHP version 4.3+
if((float) PHP_VERSION < '4.3')
// checking required PHP version
if ((float) PHP_VERSION < $GLOBALS['egw_setup']->required_php_version)
{
echo '<p align="center" class="msg"><b>'
. lang('You are using PHP version %1. eGroupWare now requires %2 or later, recommended is PHP %3.',PHP_VERSION,'4.3','5'). "\n"
. '</b></p>';
$GLOBALS['egw_setup']->html->show_header($GLOBALS['egw_info']['setup']['header_msg'],True);
$GLOBALS['egw_setup']->html->show_alert_msg('Error',
lang('You are using PHP version %1. eGroupWare now requires %2 or later, recommended is PHP %3.',
PHP_VERSION,$GLOBALS['egw_setup']->required_php_version,$GLOBALS['egw_setup']->recommended_php_version));
$GLOBALS['egw_setup']->html->show_footer();
exit;
}
if((float) PHP_VERSION < $GLOBALS['egw_setup']->required_php_version)
{
echo '<p align="center" class="msg"><b>' .
lang('You are using PHP version %1. eGroupWare now requires %2 or later, recommended is PHP %3.',
PHP_VERSION,$GLOBALS['egw_setup']->required_php_version,$GLOBALS['egw_setup']->recommended_php_version) .
"</b></p>\n";
$GLOBALS['egw_setup']->html->show_footer();
exit;
}

View File

@ -1,28 +1,17 @@
#!/usr/bin/php
<?php
/**************************************************************************\
* eGroupWare - Setup - Command line interface *
* http://www.egroupware.org *
* Written and (c) 2006 by Ralf Becker <RalfBecker-AT-outdoor-training.de> *
* ------------------------------------------------------------------------ *
* 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.socontacts_sql.inc.php 21634 2006-05-24 02:28:57Z ralfbecker $ */
/**
* Command line interface for setup
* Setup - Command line interface
*
* @package addressbook
* @link http://www.egroupware.org
* @package setup
* @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @copyright (c) 2006 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @version $Id$
*/
chdir(dirname(__FILE__)); // to enable our relative pathes to work, if we are called with a path
chdir(dirname(__FILE__)); // to enable our relative pathes to work
if ($_SERVER['argc'] > 1)
{
@ -35,178 +24,491 @@ else
$action = '--version';
}
if ((float) PHP_VERSION < '4.3')
// setting the language from the enviroment
$_POST['ConfigLang'] = get_lang();
create_http_enviroment(); // guessing the docroot etc.
// setting up the $GLOBALS['egw_setup'] object AND including the header.inc.php if it exists
$GLOBALS['egw_info'] = array(
'flags' => array(
'currentapp' => 'home',
'noapi' => true,
));
include('inc/functions.inc.php');
$GLOBALS['egw_setup']->translation->no_translation_marker = '';
if ((float) PHP_VERSION < $GLOBALS['egw_setup']->required_php_version)
{
fail(98,lang2('You are using PHP version %1. eGroupWare now requires %2 or later, recommended is PHP %3.',PHP_VERSION,'4.3','5+'));
fail(98,lang('You are using PHP version %1. eGroupWare now requires %2 or later, recommended is PHP %3.',PHP_VERSION,$GLOBALS['egw_setup']->required_php_version,$GLOBALS['egw_setup']->recommended_php_version));
}
switch($action)
{
case '--show-languages':
case '--show-lang':
echo html_entity_decode(file_get_contents('lang/languages'),ENT_COMPAT,'utf-8');
break;
case '--version':
case '--check':
do_check();
do_check($arguments[0]);
break;
case '--create-header':
case '--edit-header':
case '--update-header':
case '--upgrade-header':
do_header($action == '--create-header',$arguments);
break;
case '--install':
do_install($arguments[0]);
break;
case '--config':
do_config($arguments);
break;
case '--admin':
do_admin($arguments[0]);
break;
case '--language':
do_lang($arguments[0]);
break;
case '--update':
do_update($arguments[0]);
break;
case '--backup':
do_backup($arguments[0]);
break;
case '--languages':
echo html_entity_decode(file_get_contents('lang/languages'),ENT_COMPAT,'utf-8');
break;
case '--charsets':
echo html_entity_decode(implode("\n",$GLOBALS['egw_setup']->translation->get_charsets(false)),ENT_COMPAT,'utf-8')."\n";
break;
case '--exit-codes':
list_exit_codes();
break;
default:
fail(20,lang2("Unknows option '%1' !!!",$action));
case '--help':
case '--usage':
do_usage();
break;
default:
fail(90,lang("Unknows option '%1' !!!",$action));
}
exit(0);
/**
* Dummy translation function, if we ever want to translate the command line interface
* Configure eGroupWare
*
* @param string $message the message with %# replacements
* @param string $arg variable number of arguments
* @return string
* @param array $args domain(default),[config user(admin)],password,[,name=value,...] --files-dir --backup-dir --mailserver
*/
function lang2($message,$arg=null)
function do_config($args)
{
$args = func_get_args();
array_shift($args);
$options = _check_auth_config(array_shift($args),15);
return str_replace(array('%1','%2','%3','%4','%5'),$args,$message);
}
/**
* Echos usage message
*/
function do_usage()
{
echo lang2('Usage: %1 {--version|--create-header|--edit-header|--install|--update} [additional options]',basename($_SERVER['argv'][0]))."\n\n";
echo '--install '.lang2('[comma-separated languages(en)],[charset(default depending on languages default)],[backup to install]')."\n";
echo '--show-languages '.lang2('get a list of availible languages')."\n";
echo '--update '.lang2('run a database schema update (if necessary)')."\n";
echo '--check '.lang2('checks eGroupWare\'s installed, it\'s versions and necessary upgrads (exits 0: eGW is up to date, 1: no header.inc.php exists, 2: header update necessary, 3: database schema update necessary)')."\n";
echo '--exit-codes '.lang2('list all exist codes of the command line interface, 0 means Ok')."\n";
echo "\n".lang2('Create or edit the eGroupWare configuration file: header.inc.php:')."\n";
echo '--create-header '.lang2('header-password[,header-user(admin)]')."\n";
echo '--edit-header '.lang2('[header-password],[header-user],[new-password],[new-user]')."\n";
echo "\n".lang2('Additional options and there defaults (int brackets)')."\n";
echo '--server-root '.lang2('path of eGroupWare install directory (default auto-detected)')."\n";
echo '--session-type '.lang2('{db|php(default)|php-restore}')."\n";
echo '--limit-access '.lang2('comma separated ip-addresses or host-names, default access to setup from everywhere')."\n";
echo '--mcrypt '.lang2('use mcrypt to crypt session-data: {off(default)|on},[mcrypt-init-vector(default randomly generated)],[mcrypt-version(default empty = recent)]')."\n";
echo '--db-persistent '.lang2('use persistent db connections: {on(default)|off}')."\n";
echo '--domain-selectbox '.lang2('{off(default)|on}')."\n";
echo "\n".lang2('Adding, editing or deleting an eGroupWare domain / database instance:')."\n";
echo '--domain '.lang2('add or edit a domain: [domain-name(default)],[db-name(egroupware)],[db-user(egroupware)],db-password,[db-type(mysql)],[db-host(localhost)],[db-port(db specific)],[config-user(as header)],[config-passwd(as header)]')."\n";
echo '--delete-domain '.lang2('domain-name')."\n";
}
/**
* detect eGW versions
*
* @return array array with versions (keys phpgwapi, current_header and header)
*/
function detect_versions()
{
$versions = null;
$GLOBALS['egw_info']['flags']['noapi'] = true;
if (!@include('../header.inc.php'))
$values = array();
foreach($options as $option)
{
if (!@include('../phpgwapi/setup/setup.inc.php'))
{
fail(99,lang2("eGroupWare sources in '%1' are not complete, file '%2' missing !!!",realpath('..'),'phpgwapi/setup/setup.inc.php')); // should not happen ;-)
}
return array(
'phpgwapi' => $setup_info['phpgwapi']['version'],
'current_header' => $setup_info['phpgwapi']['versions']['current_header'],
);
list($name,$value) = explode('=',$option,2);
$values[$name] = $value;
}
return $GLOBALS['egw_info']['server']['versions'];
static $config = array(
'--files-dir' => 'files_dir',
'--backup-dir' => 'backup_dir',
'--temp-dir' => 'temp_dir',
'--webserver-url' => 'webserver_url',
'--mailserver' => array( //server,{IMAP|IMAPS|POP|POPS},[domain],[{standard(default)|vmailmgr = add domain for mailserver login}]
'mail_server',
array('name' => 'mail_server_type','allowed' => array('imap','imaps','pop3','pop3s')),
'mail_suffix',
array('name' => 'mail_login_type','allowed' => array('standard','vmailmgr')),
),
'--smtpserver' => array( //smtp server,[smtp port],[smtp user],[smtp password]
'smtp_server','smtp_port','smtp_auth_user','smtp_auth_passwd'),
);
while (($arg = array_shift($args)))
{
if (!isset($config[$arg])) fail(90,lang("Unknow option '%1' !!!",$arg));
foreach(explode(',',array_shift($args)) as $n => $value)
{
if ($value === '') continue;
$name = $config[$arg][$n];
if (is_array($name))
{
if (!in_array($value,$name['allowed'])) fail(91,"'%1' is not allowed as %2. arguments of option %3 !!!",$value,1+$n,$arg);
$name = $name['name'];
}
$values[$name] = $value;
}
}
foreach($values as $name => $value)
{
$GLOBALS['egw_setup']->db->insert($GLOBALS['egw_setup']->config_table,array(
'config_value' => $value,
),array(
'config_app' => 'phpgwapi',
'config_name' => $name,
),__LINE__,__FILE__);
}
}
/**
* Create an admin account
*
* @param string $arg domain(default),[config user(admin)],password,username,password,[first name],[last name],[email]
*/
function do_admin($arg)
{
list($_POST['username'],$_POST['passwd'],$_POST['fname'],$_POST['lname'],$_POST['email']) = _check_auth_config($arg,15);
$_POST['passwd2'] = $_POST['passwd'];
if (!$_POST['fname']) $_POST['fname'] = 'Admin';
if (!$_POST['lname']) $_POST['lname'] = 'User';
$_POST['submit'] = true;
ob_start();
include('admin_account.php');
$error = ob_get_contents();
ob_end_clean();
if ($error)
{
fail(41,lang('Error in admin-creation !!!'));
}
echo lang('Admin account successful created.')."\n";
}
/**
* Backup one or all domains
*
* @param string $arg domain(all),[config user(admin)],password,[backup-file, 'no' for no backup or empty for default name]
* @param boolean $quite_check quiten the call to _check_auth_config
*/
function do_backup($arg,$quite_check=false)
{
list($domain,,,$backup) = $options = explode(',',$arg);
$domains = $GLOBALS['egw_domain'];
if ($domain && $domain != 'all')
{
$domains = array($domain => $GLOBALS['egw_domain'][$domain]);
}
foreach($domains as $domain => $data)
{
$options[0] = $domain;
if ($quite_check) ob_start();
_check_auth_config(implode(',',$options),14);
if ($quite_check) ob_end_clean();
if ($backup == 'no')
{
echo lang('Backup skipped!')."\n";
}
else
{
$db_backup =& CreateObject('phpgwapi.db_backup');
if (is_resource($f = $db_backup->fopen_backup($backup)))
{
echo lang('backup started, this might take a view minutes ...')."\n";
$db_backup->backup($f);
fclose($f);
echo lang('backup finished')."\n";
}
else // backup failed ==> dont start the upgrade
{
fail(50,lang('Backup failed').': '.$f);
}
}
}
}
/**
* Update one or all domains
*
* @param string $arg domain(all),[config user(admin)],password,[backup-file, 'no' for no backup or empty for default name]
*/
function do_update($arg)
{
global $setup_info;
list($domain,,,$no_backup) = $options = explode(',',$arg);
$domains = $GLOBALS['egw_domain'];
if ($domain && $domain != 'all')
{
$domains = array($domain => $GLOBALS['egw_domain'][$domain]);
}
foreach($domains as $domain => $data)
{
$options[0] = $domain;
$arg = implode(',',$options);
_check_auth_config($arg,14);
if ($GLOBALS['egw_info']['setup']['stage']['db'] != 4)
{
echo lang('No update necessary, domain %1(%2) is up to date.',$domain,$data['db_type'])."\n";
}
else
{
echo lang('Starting update ...')."\n";
do_backup($arg,true);
ob_start();
$GLOBALS['egw_setup']->process->pass($setup_info,'upgrade',false);
$messages = ob_get_contents();
ob_end_clean();
if ($messages) strip_tags($messages)."\n";
echo lang('Update finished.')."\n";
}
}
}
/**
* Install / update languages
*
* @param string $arg domain(all),[config user(admin)],password,[+][lang1][,lang2,...]
*/
function do_lang($arg)
{
global $setup_info;
list($domain,,,$no_backup) = $options = explode(',',$arg);
$domains = $GLOBALS['egw_domain'];
if ($domain && $domain != 'all')
{
$domains = array($domain => $GLOBALS['egw_domain'][$domain]);
}
foreach($domains as $domain => $data)
{
$options[0] = $domain;
$arg = implode(',',$options);
$langs = _check_auth_config($arg,15);
$GLOBALS['egw_setup']->translation->setup_translation_sql();
if ($langs[0]{0} === '+' || !count($langs)) // update / add to existing languages
{
if ($langs[0]{0} === '+')
{
if ($langs[0] === '+')
{
array_shift($langs);
}
else
{
$langs[0] = substr($langs[0],1);
}
}
$installed_langs = $GLOBALS['egw_setup']->translation->sql->get_installed_langs(true);
if (is_array($installed_langs))
{
$langs = array_merge($langs,array_keys($installed_langs));
}
}
$langs = array_unique($langs);
echo lang('Start updating languages %1 ...',implode(',',$langs))."\n";
$GLOBALS['egw_setup']->translation->sql->install_langs($langs);
echo lang('languages updated.')."\n";
}
}
/**
* Check if eGW is installed according to $stop and we have the necessary authorization for config
*
* We allow the config user/pw of the domain or the header admin user/pw!
*
* @param string $arg [domain(default)],[user(admin)],password
* @param int $stop see do_check()
* @return array with unprocessed arguments from $arg
*/
function _check_auth_config($arg,$stop=15)
{
$options = explode(',',$arg);
if (!($domain = array_shift($options))) $domain = 'default';
if (!($user = array_shift($options))) $user = 'admin';
$password = array_shift($options);
do_check($domain,$stop); // check if eGW is installed
//echo "check_auth('$user','$password','{$GLOBALS['egw_domain'][$domain]['config_user']}','{$GLOBALS['egw_domain'][$domain]['config_passwd']}')\n";
if (!$GLOBALS['egw_setup']->check_auth($user,$password,$GLOBALS['egw_domain'][$domain]['config_user'],
$GLOBALS['egw_domain'][$domain]['config_passwd']))
{
fail(40,lang("Access denied: wrong username or password to configure the domain '%1(%2)' !!!",$domain,$GLOBALS['egw_domain'][$domain]['db_type']));
}
return $options;
}
/**
* Install eGroupWare
*
* @param string $args domain,[backup-file],[charset]
*/
function do_install($args)
{
global $setup_info;
list($domain,$backup,$charset) = explode(',',$args);
if (!$domain) $domain = 'default';
if (!do_check($domain,13)) // check and fail if we have no working db
{
fail(30,lang('eGroupWare is already installed!'));
}
// use uploaded backup, instead installing from scratch
if ($backup)
{
$db_backup =& CreateObject('phpgwapi.db_backup');
if (!is_resource($f = $db_backup->fopen_backup($backup,true)))
{
fail(31,lang('Restore failed'));
}
echo lang('Restore started, this might take a view minutes ...')."\n";
$db_backup->restore($f,$charset);
fclose($f);
echo lang('Restore finished')."\n";
}
else
{
if (!$charset) $charset = $GLOBALS['egw_setup']->translation->langarray['charset'];
$setup_info = $GLOBALS['egw_setup']->detection->upgrade_exclude($setup_info);
// Set the DB's client charset if a system-charset is set
$GLOBALS['egw_setup']->system_charset = strtolower($charset);
$GLOBALS['egw_setup']->db->Link_ID->SetCharSet($charset);
echo lang('Installation started, this might take a view minutes ...')."\n";
$setup_info = $GLOBALS['egw_setup']->process->pass($setup_info,'new',false,True);
echo lang('Installation finished')."\n";
}
}
/**
* Check if eGW is installed, which versions and if an update is needed
*
* @param string $domain='' domain to check, default '' = all
* @param int $stop=0 stop checks before given exit-code, defaul 0 = all checks
*/
function do_check()
function do_check($domain='',$stop=0)
{
$versions = detect_versions();
echo lang2('eGroupWare API version %1 found.',$versions['phpgwapi'])."\n";
global $setup_info;
static $header_checks=true; // output the header checks only once
if (isset($versions['header'])) // header.inc.php exists
$versions =& $GLOBALS['egw_info']['server']['versions'];
if (!$versions['phpgwapi'])
{
echo lang2("eGroupWare configuration file (header.inc.php) version %1 exists%2",$versions['header'],
($versions['header'] == $versions['current_header'] ? ' '.lang2('and is up to date') : '')).".\n";
if ($versions['header'] != $versions['current_header'])
if (!include('../phpgwapi/setup/setup.inc.php'))
{
// exit-code 2: header.inc.php needs upgrading
fail(2,lang2('You need to upgrade your header to the new version %1 (using --edit-header)!',$versions['current_header']));
fail(99,lang("eGroupWare sources in '%1' are not complete, file '%2' missing !!!",realpath('..'),'phpgwapi/setup/setup.inc.php')); // should not happen ;-)
}
$versions['phpgwapi'] = $setup_info['phpgwapi']['version'];
unset($setup_info);
}
if ($header_checks)
{
echo lang('eGroupWare API version %1 found.',$versions['phpgwapi'])."\n";
}
$header_stage = $GLOBALS['egw_setup']->detection->check_header();
if ($stop && $header_stage == $stop) return true;
switch ($header_stage)
{
case 1: fail(1,lang('eGroupWare configuration file (header.inc.php) does NOT exist.')."\n".lang('Use --create-header to create the configuration file (--usage gives more options).'));
case 2: fail(2,lang('eGroupWare configuration file (header.inc.php) version %1 exists%2',$versions['header'],'.')."\n".lang('No header admin password set! Use --edit-header <password>[,<user>] to set one (--usage gives more options).'));
case 3: fail(3,lang('eGroupWare configuration file (header.inc.php) version %1 exists%2',$versions['header'],'.')."\n".lang('No eGroupWare domains / database instances exist! Use --edit-header --domain to add one (--usage gives more options).'));
case 4: fail(4,lang('eGroupWare configuration file (header.inc.php) version %1 exists%2',$versions['header'],'.')."\n".lang('It needs upgrading to version %1! Use --update-header <password>[,<user>] to do so (--usage gives more options).',$versions['current_header']));
}
if ($header_checks)
{
echo lang('eGroupWare configuration file (header.inc.php) version %1 exists%2',
$versions['header'],' '.lang('and is up to date')).".\n";
}
$header_checks = false; // no further output of the header checks
$domains = $GLOBALS['egw_domain'];
if ($domain) // domain to check given
{
if (!isset($GLOBALS['egw_domain'][$domain])) fail(92,lang("Domain '%1' does NOT exist !!!",$domain));
$domains = array($domain => $GLOBALS['egw_domain'][$domain]);
}
foreach($domains as $domain => $data)
{
$GLOBALS['egw_setup']->ConfigDomain = $domain; // set the domain the setup class operates on
if (count($GLOBALS['egw_domain']) > 1) echo "\n".lang('eGroupWare domain/instance %1(%2):',$domain,$data['db_type'])."\n";
$setup_info = $GLOBALS['egw_setup']->detection->get_versions();
// check if there's already a db-connection and close if, otherwise the db-connection of the previous domain will be used
if (is_object($GLOBALS['egw_setup']->db))
{
$GLOBALS['egw_setup']->db->disconnect();
}
$GLOBALS['egw_setup']->loaddb();
$db = $data['db_type'].'://'.$data['db_user'].'@'.$data['db_host'].'/'.$data['db_name'];
$db_stage =& $GLOBALS['egw_info']['setup']['stage']['db'];
if (($db_stage = $GLOBALS['egw_setup']->detection->check_db($setup_info)) != 1)
{
$setup_info = $GLOBALS['egw_setup']->detection->get_db_versions($setup_info);
$db_stage = $GLOBALS['egw_setup']->detection->check_db($setup_info);
}
if ($stop && 10+$db_stage == $stop) return true;
switch($db_stage)
{
case 1: fail(11,lang('Your Database is not working!')." $db: ".$GLOBALS['egw_setup']->db->Error);
case 3: fail(13,lang('Your database is working, ibut you dont have any applications installed')." ($db). ".lang("Use --install to install eGroupWare."));
case 4: fail(14,lang('eGroupWare API needs a database (schema) update from version %1 to %2!',$setup_info['phpgwapi']['currentver'],$versions['phpgwapi']).' '.lang('Use --update to do so.'));
case 10: // also check apps of updates
$apps_to_upgrade = array();
foreach($setup_info as $app => $data)
{
if ($data['currentver'] && $data['version'] && $data['version'] != $data['currentver'])
{
$apps_to_upgrade[] = $app;
}
}
if ($apps_to_upgrade)
{
$db_stage = 4;
if ($stop && 10+$db_stage == $stop) return true;
fail(14,lang('The following applications need to be upgraded:').' '.implode(', ',$apps_to_upgrade).'! '.lang('Use --update to do so.'));
}
break;
}
echo lang("database is version %1 and up to date.",$setup_info['phpgwapi']['currentver'])."\n";
$GLOBALS['egw_setup']->detection->check_config();
if ($GLOBALS['egw_info']['setup']['config_errors'] && $stop != 15)
{
fail(15,lang('You need to configure eGroupWare:')."\n- ".@implode("\n- ",$GLOBALS['egw_info']['setup']['config_errors']));
}
}
else
{
// exit-code 1: no header.inc.php
$this->check_fail_header_exists();
}
// ToDo: check if eGW needs a schema upgrade and exit(3) if so
return false;
}
function fail($exit_code,$message)
{
echo $message."\n";
exit($exit_code);
}
/**
* List all exit codes used by the command line interface
*
*/
function list_exit_codes()
{
error_reporting(error_reporting() & ~E_NOTICE);
$codes = array();
foreach(file(__FILE__) as $line)
{
if (preg_match('/fail\(([0-9]+),(.*)\);/',$line,$matches))
{
eval('$codes['.$matches[1].'] = '.$matches[2].';');
}
}
ksort($codes,SORT_NUMERIC);
foreach($codes as $num => $msg)
{
echo $num."\t".str_replace("\n","\n\t",$msg)."\n";
}
}
/**
* Check if we have a header.inc.php and fail with exit(10) if not
*
*/
function check_fail_header_exists()
{
if (!file_exists('../header.inc.php'))
{
fail(1,lang2('eGroupWare configuration file (header.inc.php) does NOT exist.')."\n".lang2('Use --create-header to create the configuration file (--usage gives more options).'));
}
}
/**
* Create, edit or update the header.inc.php
*
@ -216,38 +518,32 @@ function check_fail_header_exists()
*/
function do_header($create,&$arguments)
{
// setting up the $GLOBALS['egw_setup'] object AND including the header.inc.php if it exists
$GLOBALS['egw_info'] = array(
'flags' => array(
'currentapp' => 'home',
'noapi' => true,
));
include('inc/functions.inc.php');
require_once('inc/class.setup_header.inc.php');
$GLOBALS['egw_setup']->header =& new setup_header();
if (!file_exists('../header.inc.php'))
{
if (!$create) $this->check_fail_header_exists();
if (!$create) fail(1,lang('eGroupWare configuration file (header.inc.php) does NOT exist.')."\n".lang('Use --create-header to create the configuration file (--usage gives more options).'));
$GLOBALS['egw_setup']->header->defaults(false);
}
else
{
if ($create) fail(11,lang2('eGroupWare configuration file header.inc.php already exists, you need to use --edit-header or delete it first!'));
if ($create) fail(20,lang('eGroupWare configuration file header.inc.php already exists, you need to use --edit-header or delete it first!'));
// header.inc.php is already include by include('inc/functions.inc.php')!
unset($GLOBALS['egw_info']['flags']);
// check header-admin-user and -password
@list($password,$user) = explode(',',@$arguments[0]);
if (!$user) $user = 'admin';
require_once('inc/class.setup.inc.php');
if (!setup::check_auth($user,$password,$GLOBALS['egw_info']['server']['header_admin_user'],
$GLOBALS['egw_info']['server']['header_admin_password']))
// check header-admin-user and -password (only if a password is set!)
if ($GLOBALS['egw_info']['server']['header_admin_password'])
{
fail(12,lang2('Access denied: wrong username or password for manage-header !!!'));
@list($password,$user) = explode(',',@$arguments[0]);
if (!$user) $user = 'admin';
if (!$GLOBALS['egw_setup']->check_auth($user,$password,$GLOBALS['egw_info']['server']['header_admin_user'],
$GLOBALS['egw_info']['server']['header_admin_password']))
{
fail(21,lang('Access denied: wrong username or password for manage-header !!!'));
}
}
$GLOBALS['egw_info']['server']['server_root'] = EGW_SERVER_ROOT;
$GLOBALS['egw_info']['server']['include_root'] = EGW_INCLUDE_ROOT;
@ -314,12 +610,12 @@ function do_header($create,&$arguments)
if ($arg == '--delete-domain')
{
if (!isset($GLOBALS['egw_domain'][$values])) fail(22,lang2("Domain '%1' does NOT exist !!!",$values));
if (!isset($GLOBALS['egw_domain'][$values])) fail(92,lang("Domain '%1' does NOT exist !!!",$values));
unset($GLOBALS['egw_domain'][$values]);
continue;
}
if (!isset($options[$arg])) fail(20,lang2("Unknow option '%1' !!!",$arg));
if (!isset($options[$arg])) fail(90,lang("Unknow option '%1' !!!",$arg));
$option = $options[$arg];
$values = !is_array($option) ? array($values) : explode(',',$values);
@ -337,7 +633,7 @@ function do_header($create,&$arguments)
{
if (!isset($data['allowed'][$value]))
{
fail(21,lang2("'%1' is not allowed as %2. arguments of option %3 !!!",$value,1+$n,$arg));
fail(91,lang("'%1' is not allowed as %2. arguments of option %3 !!!",$value,1+$n,$arg));
}
$value = $data['allowed'][$value];
}
@ -351,10 +647,10 @@ function do_header($create,&$arguments)
}
elseif ($value !== '')
{
set_value($GLOBALS,str_replace('@',$remember,$type),$name,$value);
_set_value($GLOBALS,str_replace('@',$remember,$type),$name,$value);
if ($name == 'egw_info/server/server_root')
{
set_value($GLOBALS,'egw_info/server/include_root',$name,$value);
_set_value($GLOBALS,'egw_info/server/include_root',$name,$value);
}
}
++$n;
@ -364,8 +660,8 @@ function do_header($create,&$arguments)
{
echo '$GLOBALS[egw_info] = '; print_r($GLOBALS['egw_info']);
echo '$GLOBALS[egw_domain] = '; print_r($GLOBALS['egw_domain']);
echo "\n".lang2('Configuration errors:')."\n- ".implode("\n- ",$errors)."\n";
fail(23,lang2("You need to fix the above errors, before the configuration file header.inc.php can be written!"));
echo "\n".lang('Configuration errors:')."\n- ".implode("\n- ",$errors)."\n";
fail(23,lang("You need to fix the above errors, before the configuration file header.inc.php can be written!"));
}
$header = $GLOBALS['egw_setup']->header->generate($GLOBALS['egw_info'],$GLOBALS['egw_domain'],
$GLOBALS['egw_info']['server']['server_root'],$GLOBALS['egw_info']['server']['include_root']);
@ -378,14 +674,22 @@ function do_header($create,&$arguments)
if (($f = fopen('../header.inc.php','wb')) && fwrite($f,$header))
{
fclose($f);
echo "\n".lang2('header.inc.php successful written.')."\n\n";
echo "\n".lang('header.inc.php successful written.')."\n\n";
exit(0);
}
}
fail(24,lang2("Failed writing configuration file header.inc.php, check the permissions !!!"));
fail(24,lang("Failed writing configuration file header.inc.php, check the permissions !!!"));
}
function set_value($arr,$index,$name,$value)
/**
* Set a value in the given array $arr with (multidimensional) key $index[/$name]
*
* @param array &$arr
* @param string $index multidimensional index written with / as separator, eg. egw_info/server/
* @param string $name additional index to use if $index end with a slash
* @param mixed $value value to set
*/
function _set_value(&$arr,$index,$name,$value)
{
if (substr($index,-1) == '/') $index .= $name;
@ -397,23 +701,117 @@ function set_value($arr,$index,$name,$value)
$var = strstr($name,'passw') ? md5($value) : $value;
}
if (!function_exists('generate_mcyrpt_iv'))
/**
* Reads the users language from the enviroment
*
* @return string 2 or 5 digit language code used in eGW
*/
function get_lang()
{
function generate_mcyrpt_iv()
list($lang,$nation,$charset) = split("[_.]",$_SERVER['LANG']);
$nation = strtolower($nation);
foreach(file('lang/languages') as $line)
{
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'
);
list($code,$language) = explode("\t",$line);
$languages[$code] = $language;
}
if (isset($languages[$lang.'-'.$nation])) return $lang.'-'.$nation;
$iv = '';
for($i=0; $i<30; $i++)
if (isset($languages[$lang])) return $lang;
return 'en';
}
/**
* Try guessing the document root of the webserver, should work for RH, SuSE, debian and plesk
*/
function create_http_enviroment()
{
$_SERVER['SCRIPT_FILENAME'] = __FILE__;
foreach(array('httpsdocs','httpdocs','htdocs','html','www') as $docroottop)
{
$parts = explode($docroottop,__FILE__);
if (count($parts) == 2)
{
$iv .= $random_char[rand(1,count($random_char))];
$_SERVER['DOCUMENT_ROOT'] = $parts[0].$docroottop;
$_SERVER['PHP_SELF'] = str_replace('\\','/',$parts[1]);
break;
}
return $iv;
}
//print_r($_SERVER); exit;
}
/**
* Echos usage message
*/
function do_usage()
{
echo lang('Usage: %1 {--check|--create-header|--edit-header|--install|--config|--admin|--language|--backup|--update} [additional options]',basename($_SERVER['argv'][0]))."\n\n";
echo '--check '.lang('checks eGroupWare\'s installed, it\'s versions and necessary upgrads (return values see --exit-codes)')."\n";
echo '--install '.lang('domain(default),[backup to install],[charset(default depends on language)]')."\n";
echo '--config '.lang('domain(default),[config user(admin)],password,[,name=value,...] sets config values beside:')."\n";
echo ' --files-dir, --backup-dir, --temp-dir '.lang('path to various directories: have to exist and be writeable by the webserver')."\n";
echo ' --webserver-url '.lang('eg. /egroupware or http://domain.com/egroupware, default: %1',str_replace('/setup/setup-cli.php','',$_SERVER['PHP_SELF']))."\n";
echo ' --mailserver '.lang('host,{imap|pop3|imaps|pop3s},[domain],[{standard(default)|vmailmgr = add domain for mailserver login}]')."\n";
echo ' --smtpserver '.lang('host,[smtp port],[smtp user],[smtp password]')."\n";
echo '--admin '.lang('creates an admin user: domain(default),[config user(admin)],password,username,password,[first name],[last name],[email]')."\n";
echo '--language '.lang('install or update translations: domain(all),[config user(admin)],password,[[+]lang1[,lang2,...]] + adds, no langs update existing ones')."\n";
echo '--backup '.lang('domain(all),[config user(admin)],password,[file-name(default: backup-dir/db_backup-YYYYMMDDHHii)]')."\n";
echo '--update '.lang('run a database schema update (if necessary): domain(all),[config user(admin)],password')."\n";
echo "\n".lang('Create or edit the eGroupWare configuration file: header.inc.php:')."\n";
echo '--create-header '.lang('header-password[,header-user(admin)]')."\n";
echo '--edit-header '.lang('[header-password],[header-user],[new-password],[new-user]')."\n";
echo "\n".lang('Additional options and there defaults (int brackets)')."\n";
echo '--server-root '.lang('path of eGroupWare install directory (default auto-detected)')."\n";
echo '--session-type '.lang('{db|php(default)|php-restore}')."\n";
echo '--limit-access '.lang('comma separated ip-addresses or host-names, default access to setup from everywhere')."\n";
echo '--mcrypt '.lang('use mcrypt to crypt session-data: {off(default)|on},[mcrypt-init-vector(default randomly generated)],[mcrypt-version]')."\n";
echo '--db-persistent '.lang('use persistent db connections: {on(default)|off}')."\n";
echo '--domain-selectbox '.lang('{off(default)|on}')."\n";
echo "\n".lang('Adding, editing or deleting an eGroupWare domain / database instance:')."\n";
echo '--domain '.lang('add or edit a domain: [domain-name(default)],[db-name(egroupware)],[db-user(egroupware)],db-password,[db-type(mysql)],[db-host(localhost)],[db-port(db specific)],[config-user(as header)],[config-passwd(as header)]')."\n";
echo '--delete-domain '.lang('domain-name')."\n";
echo "\n".lang('List availible values:')."\n";
echo '--languages '.lang('list of availible translations')."\n";
echo '--charsets '.lang('charsets used by the different languages')."\n";
echo '--exit-codes '.lang('all exit codes of the command line interface')."\n";
}
function fail($exit_code,$message)
{
echo $message."\n";
exit($exit_code);
}
/**
* List all exit codes used by the command line interface
*
* The list is generated by "greping" this file for calls to the fail() function.
* Calls to fail() have to be in one line, to be recogniced!
*/
function list_exit_codes()
{
error_reporting(error_reporting() & ~E_NOTICE);
$codes = array('Ok');
foreach(file(__FILE__) as $n => $line)
{
if (preg_match('/fail\(([0-9]+),(.*)\);/',$line,$matches))
{
//echo "Line $n: $matches[1]: $matches[2]\n";
eval('$codes['.$matches[1].'] = '.$matches[2].';');
}
}
ksort($codes,SORT_NUMERIC);
foreach($codes as $num => $msg)
{
echo $num."\t".str_replace("\n","\n\t",$msg)."\n";
}
}

View File

@ -28,6 +28,10 @@
<td>{adminlastname}</td>
<td><input type="text" name="lname" value="{lname}" /></td>
</tr>
<tr>
<td>{adminemail}</td>
<td><input type="text" name="email" value="{email}" /></td>
</tr>
<tr>
<td>{adminpassword}</td>
<td><input type="password" name="passwd" /></td>