From e3a9dc646f613ee76d90960eba0a017cf868c37e Mon Sep 17 00:00:00 2001 From: Ralf Becker Date: Thu, 13 Dec 2007 02:41:55 +0000 Subject: [PATCH] - installs can now be switched before the install happens to ldap, so all default records get created (eg. sitemgr is working) - new setup command to create an admin user, used eg. from setup-cli.php --- setup/account_migration.php | 22 ++--- setup/admin_account.php | 2 - setup/inc/class.setup.inc.php | 46 +++++++---- setup/inc/class.setup_cmd.inc.php | 6 +- setup/inc/class.setup_cmd_admin.inc.php | 95 ++++++++++++++++++++++ setup/inc/class.setup_cmd_config.inc.php | 4 +- setup/inc/class.setup_cmd_database.inc.php | 6 +- setup/inc/class.setup_cmd_install.inc.php | 12 +-- setup/inc/class.setup_cmd_ldap.inc.php | 4 +- setup/inc/class.setup_process.inc.php | 48 +++++++---- setup/setup-cli.php | 20 +---- 11 files changed, 186 insertions(+), 79 deletions(-) create mode 100644 setup/inc/class.setup_cmd_admin.inc.php diff --git a/setup/account_migration.php b/setup/account_migration.php index 2b7d96e609..5d72c9434d 100644 --- a/setup/account_migration.php +++ b/setup/account_migration.php @@ -101,7 +101,7 @@ if (!$_POST['migrate']) $GLOBALS['egw_setup']->setup_account_object(); // fetch all users and groups - $accounts = $GLOBALS['egw']->accounts->search(array( + $accounts = $GLOBALS['egw_setup']->accounts->search(array( 'type' => 'both', )); // fetch the complete data (search reads not everything), plus the members(hips) @@ -112,15 +112,15 @@ if (!$_POST['migrate']) unset($accounts[$account_id]); $account_id = $account['account_id']; } - $accounts[$account_id] = $GLOBALS['egw']->accounts->read($account_id); + $accounts[$account_id] = $GLOBALS['egw_setup']->accounts->read($account_id); if ($account['account_type'] == 'g') { - $accounts[$account_id]['members'] = $GLOBALS['egw']->accounts->members($account_id,true); + $accounts[$account_id]['members'] = $GLOBALS['egw_setup']->accounts->members($account_id,true); } else { - $accounts[$account_id]['memberships'] = $GLOBALS['egw']->accounts->memberships($account_id,true); + $accounts[$account_id]['memberships'] = $GLOBALS['egw_setup']->accounts->memberships($account_id,true); } } //_debug_array($accounts); @@ -186,7 +186,7 @@ else // do the migration if (!isset($accounts[$account_id])) continue; // check if user already exists - if ($GLOBALS['egw']->accounts->exists($account_id)) + if ($GLOBALS['egw_setup']->accounts->exists($account_id)) { echo '

'.lang('%1 already exists in %2.',lang('User')." $account_id ({$accounts[$account_id]['account_lid']})",$target)."

\n"; continue; @@ -213,12 +213,12 @@ else // do the migration } unset($accounts[$account_id]['person_id']); - if (!$GLOBALS['egw']->accounts->save($accounts[$account_id])) + if (!$GLOBALS['egw_setup']->accounts->save($accounts[$account_id])) { echo '

'.lang('Creation of %1 in %2 failed !!!',lang('User')." $account_id ({$accounts[$account_id]['account_lid']})",$target)."

\n"; continue; } - $GLOBALS['egw']->accounts->set_memberships($accounts[$account_id]['memberships'],$account_id); + $GLOBALS['egw_setup']->accounts->set_memberships($accounts[$account_id]['memberships'],$account_id); echo '

'.lang('%1 created in %2.',lang('User')." $account_id ({$accounts[$account_id]['account_lid']})",$target)."

\n"; } } @@ -229,9 +229,9 @@ else // do the migration if (!isset($accounts[$account_id])) continue; // check if group already exists - if (!$GLOBALS['egw']->accounts->exists($account_id)) + if (!$GLOBALS['egw_setup']->accounts->exists($account_id)) { - if (!$GLOBALS['egw']->accounts->save($accounts[$account_id])) + if (!$GLOBALS['egw_setup']->accounts->save($accounts[$account_id])) { echo '

'.lang('Creation of %1 in %2 failed !!!',lang('Group')." $account_id ({$accounts[$account_id]['account_lid']})",$target)."

\n"; continue; @@ -242,13 +242,13 @@ else // do the migration { echo '

'.lang('%1 already exists in %2.',lang('Group')." $account_id ({$accounts[$account_id]['account_lid']})",$target)."

\n"; - if ($GLOBALS['egw']->accounts->id2name($account_id) != $accounts[$account_id]['account_lid']) + if ($GLOBALS['egw_setup']->accounts->id2name($account_id) != $accounts[$account_id]['account_lid']) { continue; // different group under that gidnumber! } } // now saving / updating the memberships - $GLOBALS['egw']->accounts->set_members($accounts[$account_id]['members'],$account_id); + $GLOBALS['egw_setup']->accounts->set_members($accounts[$account_id]['members'],$account_id); } } echo '

'.lang('Export has been completed!')."

\n"; diff --git a/setup/admin_account.php b/setup/admin_account.php index fdf9a60f92..5bbed1342d 100644 --- a/setup/admin_account.php +++ b/setup/admin_account.php @@ -108,11 +108,9 @@ $GLOBALS['egw_setup']->db->delete($table,'1=1',__LINE__,__FILE__); } } -echo "About to create Default group\n"; /* Create the demo groups */ $defaultgroupid = (int)$GLOBALS['egw_setup']->add_account('Default','Default','Group',False,False); $admingroupid = (int)$GLOBALS['egw_setup']->add_account('Admins','Admin','Group',False,False); -echo "Groups created\n"; if (!$defaultgroupid || !$admingroupid) { diff --git a/setup/inc/class.setup.inc.php b/setup/inc/class.setup.inc.php index f47ed61003..faf573b30d 100644 --- a/setup/inc/class.setup.inc.php +++ b/setup/inc/class.setup.inc.php @@ -866,22 +866,30 @@ } } - function setup_account_object() + /** + * Own instance of the accounts class + * + * @var accounts + */ + var $accounts; + + function setup_account_object(array $config=array()) { - if (!is_object($GLOBALS['egw']->accounts)) + if (!is_object($this->accounts) || $config) { if (!is_object($this->db)) { $this->loaddb(); } - /* Load up some configured values */ - $this->db->select($this->config_table,'config_name,config_value', - "config_name LIKE 'ldap%' OR config_name LIKE 'account_%' OR config_name LIKE '%encryption%' OR config_name='auth_type'",__LINE__,__FILE__); - while(($row = $this->db->row(true))) + if (!$config) { - if (!isset($GLOBALS['egw_info']['server'][$row['config_name']])) // dont overwrite + // load the configuration from the database + $this->db->select($this->config_table,'config_name,config_value', + "config_name LIKE 'ldap%' OR config_name LIKE 'account_%' OR config_name LIKE '%encryption%' OR config_name='auth_type'",__LINE__,__FILE__); + + while(($row = $this->db->row(true))) { - $GLOBALS['egw_info']['server'][$row['config_name']] = $row['config_value']; + $config[$row['config_name']] = $row['config_value']; } } if (!is_object($GLOBALS['egw'])) @@ -891,10 +899,12 @@ } $GLOBALS['egw']->db = clone($this->db); $GLOBALS['egw']->common =& CreateObject('phpgwapi.common'); - $GLOBALS['egw']->accounts =& CreateObject('phpgwapi.accounts'); + + $this->accounts = new accounts($config); + $this->accounts->cache_invalidate(); // the cache is shared for all instances of the class if(($GLOBALS['egw_info']['server']['account_repository'] == 'ldap') && - !$GLOBALS['egw']->accounts->ds) + !$this->accounts->ds) { printf("Error: Error connecting to LDAP server %s!
",$GLOBALS['egw_info']['server']['ldap_host']); return false; @@ -921,9 +931,9 @@ { $this->setup_account_object(); - $primary_group_id = $primary_group ? $GLOBALS['egw']->accounts->name2id($primary_group) : False; + $primary_group_id = $primary_group ? $this->accounts->name2id($primary_group) : False; - if(!($accountid = $GLOBALS['egw']->accounts->name2id($username))) + if(!($accountid = $this->accounts->name2id($username))) { $account = array( 'account_type' => $primary_group ? 'u' : 'g', @@ -937,7 +947,7 @@ 'account_email' => $email, 'account_members' => '' ); - if (!($accountid = $GLOBALS['egw']->accounts->save($account))) + if (!($accountid = $this->accounts->save($account))) { error_log("setup::add_account('$username','$first','$last',\$passwd,'$primary_group',$changepw,'$email') failed! accountid=$accountid"); return false; @@ -945,13 +955,13 @@ } if ($primary_group) // only for users, NOT groups { - $memberships = $GLOBALS['egw']->accounts->memberships($accountid,true); + $memberships = $this->accounts->memberships($accountid,true); if($primary_group_id && !in_array($primary_group_id,$memberships)) { $memberships[] = $primary_group_id; - $GLOBALS['egw']->accounts->set_memberships($memberships,$accountid); + $this->accounts->set_memberships($memberships,$accountid); } if (!$changepw) $this->add_acl('preferences','nopasswordchange',$accountid); } @@ -969,7 +979,7 @@ { $this->setup_account_object(); - return $GLOBALS['egw']->accounts->set_memberships($groups,$user); + return $this->accounts->set_memberships($groups,$user); } /** @@ -983,7 +993,7 @@ { if (!$this->setup_account_object()) return false; - $accounts = $GLOBALS['egw']->accounts->search(array( + $accounts = $this->accounts->search(array( 'type' => 'accounts', 'start' => 0, 'offset' => 2 // we only need to check 2 accounts, if we just check for not anonymous @@ -1020,7 +1030,7 @@ if (!is_numeric($account)) { $this->setup_account_object(); - $account = $GLOBALS['egw']->accounts->name2id($account); + $account = $this->accounts->name2id($account); } if(!is_object($this->db)) { diff --git a/setup/inc/class.setup_cmd.inc.php b/setup/inc/class.setup_cmd.inc.php index 2e501008df..987a2a58f0 100644 --- a/setup/inc/class.setup_cmd.inc.php +++ b/setup/inc/class.setup_cmd.inc.php @@ -94,7 +94,7 @@ abstract class setup_cmd extends admin_cmd * @var setup */ static protected $egw_setup; - + /** * Create the setup enviroment (for running within setup or eGW) */ @@ -113,6 +113,8 @@ abstract class setup_cmd extends admin_cmd $cmd = new setup_cmd_showheader(null); // null = only header, no db stuff, no hashes $header = $cmd->run(); $GLOBALS['egw_domain'] = $header['egw_domain']; + + if ($this->config) self::$egw_setup->setup_account_object($this->config); } if (is_object($GLOBALS['egw']->db) && $domain) { @@ -346,7 +348,7 @@ abstract class setup_cmd extends admin_cmd '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', '@','!','$','%','&','/','(',')','=','?',';',':','#','_','-','<', - '>','|','{','[',']','}', // dont add ,'" as we have problems dealing with them + '>','|','{','[',']','}', // dont add \,'" as we have problems dealing with them ); $str = ''; diff --git a/setup/inc/class.setup_cmd_admin.inc.php b/setup/inc/class.setup_cmd_admin.inc.php new file mode 100644 index 0000000000..0e49aa054d --- /dev/null +++ b/setup/inc/class.setup_cmd_admin.inc.php @@ -0,0 +1,95 @@ + + * @package setup + * @copyright (c) 2007 by Ralf Becker + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @version $Id$ + */ + +/** + * setup command: create a first eGroupWare user / admin and our two standard groups: Default & Admins + * + * @ToDo: get rid of the ugly setup_admin.php include + */ +class setup_cmd_admin extends setup_cmd +{ + /** + * Constructor + * + * @param string|array $domain domain-name or array with all parameters + * @param string $config_user=null user to config the domain (or header_admin_user) + * @param string $config_passwd=null pw of above user + * @param string $admin_user=null + * @param string $admin_password=null + * @param string $admin_firstname=null + * @param string $admin_lastname=null + * @param string $admin_email=null + * @param array $config=array() extra config for the account object: account_repository, ldap_* + */ + function __construct($domain,$config_user=null,$config_passwd=null,$admin_user=null,$admin_password=null, + $admin_firstname=null,$admin_lastname=null,$admin_email=null,array $config=array()) + { + if (!is_array($domain)) + { + $domain = array( + 'domain' => $domain, + 'config_user' => $config_user, + 'config_passwd' => $config_passwd, + 'admin_user' => $admin_user, + 'admin_password' => $admin_password, + 'admin_firstname' => $admin_firstname, + 'admin_lastname' => $admin_lastname, + 'admin_email' => $admin_email, + 'config' => $config, + ); + } + //echo __CLASS__.'::__construct()'; _debug_array($domain); + admin_cmd::__construct($domain); + } + + /** + * run the command: create eGW admin and standard groups + * + * @param boolean $check_only=false only run the checks (and throw the exceptions), but not the command itself + * @return string success message + * @throws Exception(lang('Wrong credentials to access the header.inc.php file!'),2); + * @throws Exception('header.inc.php not found!'); + */ + protected function exec($check_only=false) + { + if ($check_only && $this->remote_id) + { + return true; // can only check locally + } + $this->check_installed($this->domain,15); + + if (!$this->admin_firstname) $this->set_defaults['admin_firstname'] = $this->admin_firstname = lang('Admin'); + if (!$this->admin_lastname) $this->set_defaults['admin_lastname'] = $this->admin_lastname = lang('User'); + + $_POST['username'] = $this->admin_user; + $_POST['passwd2'] = $_POST['passwd'] = $this->admin_password; + $_POST['fname'] = $this->admin_firstname; + $_POST['lname'] = $this->admin_lastname; + $_POST['email'] = $this->admin_email; + + $_POST['submit'] = true; + $error = include(dirname(__FILE__).'/../admin_account.php'); + + $this->restore_db(); + + switch ($error) + { + case 41: + throw new egw_exception_wrong_userinput(lang('Error in admin-creation !!!'),41); + case 42: + throw new egw_exception_wrong_userinput(lang('Error in group-creation !!!'),42); + } + $this->restore_db(); + + return lang('Admin account successful created.'); + } +} diff --git a/setup/inc/class.setup_cmd_config.inc.php b/setup/inc/class.setup_cmd_config.inc.php index c9c423e70c..25c8bf36e5 100644 --- a/setup/inc/class.setup_cmd_config.inc.php +++ b/setup/inc/class.setup_cmd_config.inc.php @@ -41,10 +41,10 @@ class setup_cmd_config extends setup_cmd } /** - * test or create database + * run the command: write the configuration to the database * * @param boolean $check_only=false only run the checks (and throw the exceptions), but not the command itself - * @return string serialized $GLOBALS defined in the header.inc.php + * @return string success message * @throws Exception(lang('Wrong credentials to access the header.inc.php file!'),2); * @throws Exception('header.inc.php not found!'); */ diff --git a/setup/inc/class.setup_cmd_database.inc.php b/setup/inc/class.setup_cmd_database.inc.php index 7f1b3be865..07c6a6ef15 100644 --- a/setup/inc/class.setup_cmd_database.inc.php +++ b/setup/inc/class.setup_cmd_database.inc.php @@ -23,7 +23,7 @@ class setup_cmd_database extends setup_cmd private $test_db; /** - * Enter description here... + * Constructor * * @param string/array $domain domain-name to customize the defaults or array with all parameters * @param string $db_type db-type (mysql, pgsql, ...) @@ -59,10 +59,10 @@ class setup_cmd_database extends setup_cmd } /** - * test or create database + * run the command: test or create database * * @param boolean $check_only=false only run the checks (and throw the exceptions), but not the command itself - * @return string serialized $GLOBALS defined in the header.inc.php + * @return string success message * @throws Exception(lang('Wrong credentials to access the header.inc.php file!'),2); * @throws Exception('header.inc.php not found!'); */ diff --git a/setup/inc/class.setup_cmd_install.inc.php b/setup/inc/class.setup_cmd_install.inc.php index 4d22f97949..5fde590000 100644 --- a/setup/inc/class.setup_cmd_install.inc.php +++ b/setup/inc/class.setup_cmd_install.inc.php @@ -1,6 +1,6 @@ @@ -11,7 +11,7 @@ */ /** - * setup command: install a new instance + * setup command: install the tables */ class setup_cmd_install extends setup_cmd { @@ -24,8 +24,9 @@ class setup_cmd_install extends setup_cmd * @param string $backup=null filename of backup to use instead of new install, default new install * @param string $charset='utf-8' charset for the install, default utf-8 now * @param boolean $verbose=false if true, echos out some status information during the run + * @param array $config=array() configuration to preset the defaults during the install, eg. set the account_repository */ - function __construct($domain,$config_user=null,$config_passwd=null,$backup=null,$charset='utf-8',$verbose=false) + function __construct($domain,$config_user=null,$config_passwd=null,$backup=null,$charset='utf-8',$verbose=false,$config=array()) { if (!is_array($domain)) { @@ -36,6 +37,7 @@ class setup_cmd_install extends setup_cmd 'backup' => $backup, 'charset' => $charset, 'verbose' => $verbose, + 'config' => $config, ); } elseif(!$domain['charset']) @@ -47,7 +49,7 @@ class setup_cmd_install extends setup_cmd } /** - * test or create database + * run the command: install the tables * * @param boolean $check_only=false only run the checks (and throw the exceptions), but not the command itself * @return string serialized $GLOBALS defined in the header.inc.php @@ -90,7 +92,7 @@ class setup_cmd_install extends setup_cmd self::$egw_setup->db->Link_ID->SetCharSet($this->charset); if ($this->verbose) echo lang('Installation started, this might take a few minutes ...')."\n"; - $setup_info = self::$egw_setup->process->pass($setup_info,'new',false,True); + $setup_info = self::$egw_setup->process->pass($setup_info,'new',false,True,$this->config); return lang('Installation finished'); } diff --git a/setup/inc/class.setup_cmd_ldap.inc.php b/setup/inc/class.setup_cmd_ldap.inc.php index 85eba64bb7..f61d3dfe6a 100644 --- a/setup/inc/class.setup_cmd_ldap.inc.php +++ b/setup/inc/class.setup_cmd_ldap.inc.php @@ -65,10 +65,10 @@ class setup_cmd_ldap extends setup_cmd } /** - * test or create database + * run the command: test or create the ldap connection and hierarchy * * @param boolean $check_only=false only run the checks (and throw the exceptions), but not the command itself - * @return string serialized $GLOBALS defined in the header.inc.php + * @return string success message * @throws Exception(lang('Wrong credentials to access the header.inc.php file!'),2); * @throws Exception('header.inc.php not found!'); */ diff --git a/setup/inc/class.setup_process.inc.php b/setup/inc/class.setup_process.inc.php index 0d5aea705e..7e7cf3d719 100755 --- a/setup/inc/class.setup_process.inc.php +++ b/setup/inc/class.setup_process.inc.php @@ -56,8 +56,9 @@ * @param boolean $DEBUG=false print debugging info * @param boolean $force_en=false install english language files * @param string $system_charset=null charset to use + * @param array $preset_config=array() */ - function pass($setup_info,$method='new',$DEBUG=False,$force_en=False) + function pass($setup_info,$method='new',$DEBUG=False,$force_en=False,$preset_config=array()) { if(!$method) { @@ -118,7 +119,7 @@ case 'new': /* Create tables and insert new records for each app in this list */ $passing = $this->current($pass,$DEBUG); - $this->save_minimal_config(); + $this->save_minimal_config($preset_config); $passing = $this->default_records($passing,$DEBUG); $do_langs = true; // just do it once at the end of all passes break; @@ -190,51 +191,59 @@ /** * saves a minimal default config, so you get a running install without entering and saveing Step #2 config * + * @param array $preset_config=array() */ - function save_minimal_config() + function save_minimal_config(array $preset_config=array()) { $is_windows = strtoupper(substr(PHP_OS,0,3)) == 'WIN'; - $GLOBALS['current_config']['site_title'] = 'eGroupWare'; - $GLOBALS['current_config']['hostname'] = $_SERVER['HTTP_HOST'] ? $_SERVER['HTTP_HOST'] : 'localhost'; + $current_config['site_title'] = 'eGroupWare'; + $current_config['hostname'] = $_SERVER['HTTP_HOST'] ? $_SERVER['HTTP_HOST'] : 'localhost'; // guessing the eGW url $parts = explode('/',$_SERVER['PHP_SELF']); array_pop($parts); // remove config.php array_pop($parts); // remove setup - $GLOBALS['current_config']['webserver_url'] = implode('/',$parts); + $current_config['webserver_url'] = implode('/',$parts); $egroupwareDirName = end($parts); if(!$is_windows) { if(@is_dir('/tmp')) { - $GLOBALS['current_config']['temp_dir'] = '/tmp'; + $current_config['temp_dir'] = '/tmp'; } else { - $GLOBALS['current_config']['temp_dir'] = '/path/to/temp/dir'; + $current_config['temp_dir'] = '/path/to/temp/dir'; } - $GLOBALS['current_config']['files_dir'] = '/var/lib/'.$egroupwareDirName.'/'.$GLOBALS['egw_setup']->ConfigDomain.'/files'; - $GLOBALS['current_config']['backup_dir'] = '/var/lib/'.$egroupwareDirName.'/'.$GLOBALS['egw_setup']->ConfigDomain.'/backup'; + $current_config['files_dir'] = '/var/lib/'.$egroupwareDirName.'/'.$GLOBALS['egw_setup']->ConfigDomain.'/files'; + $current_config['backup_dir'] = '/var/lib/'.$egroupwareDirName.'/'.$GLOBALS['egw_setup']->ConfigDomain.'/backup'; } else { if(@is_dir('c:\\windows\\temp')) { - $GLOBALS['current_config']['temp_dir'] = 'c:\\windows\\temp'; + $current_config['temp_dir'] = 'c:\\windows\\temp'; } else { - $GLOBALS['current_config']['temp_dir'] = 'c:\\path\\to\\temp\\dir'; + $current_config['temp_dir'] = 'c:\\path\\to\\temp\\dir'; } - $GLOBALS['current_config']['files_dir'] = 'c:\\Program files\\'.$egroupwareDirName.'\\'.$GLOBALS['egw_setup']->ConfigDomain.'\\files'; - $GLOBALS['current_config']['backup_dir'] = 'c:\\Program files\\'.$egroupwareDirName.'\\'.$GLOBALS['egw_setup']->ConfigDomain.'\\backup'; + $current_config['files_dir'] = 'c:\\Program files\\'.$egroupwareDirName.'\\'.$GLOBALS['egw_setup']->ConfigDomain.'\\files'; + $current_config['backup_dir'] = 'c:\\Program files\\'.$egroupwareDirName.'\\'.$GLOBALS['egw_setup']->ConfigDomain.'\\backup'; } $datetime =& CreateObject('phpgwapi.datetime'); - $GLOBALS['current_config']['tz_offset'] = $datetime->getbestguess(); + $current_config['tz_offset'] = $datetime->getbestguess(); unset($datetime); // RalfBecker: php.net recommend this for security reasons, it should be our default too - $GLOBALS['current_config']['usecookies'] = 'True'; + $current_config['usecookies'] = 'True'; if ($GLOBALS['egw_setup']->system_charset) { - $GLOBALS['current_config']['system_charset'] = $GLOBALS['egw_setup']->system_charset; + $current_config['system_charset'] = $GLOBALS['egw_setup']->system_charset; + } + + $current_config['install_id'] = md5($_SERVER['HTTP_HOST'].microtime(true).$GLOBALS['egw_setup']->ConfigDomain); + + if ($preset_config) + { + $current_config = array_merge($current_config,$preset_config); } - foreach($GLOBALS['current_config'] as $name => $value) + foreach($current_config as $name => $value) { $GLOBALS['egw_setup']->db->insert($GLOBALS['egw_setup']->config_table,array( 'config_value' => $value, @@ -243,6 +252,9 @@ 'config_name' => $name, ),__FILE__,__LINE__); } + + // so the default_records use the current data + $GLOBALS['egw_setup']->setup_account_object($current_config); } /** diff --git a/setup/setup-cli.php b/setup/setup-cli.php index d3f67ec549..9f7577dda4 100755 --- a/setup/setup-cli.php +++ b/setup/setup-cli.php @@ -172,23 +172,11 @@ function do_emailadmin() */ function do_admin($arg) { - list($_POST['username'],$_POST['passwd'],$_POST['fname'],$_POST['lname'],$_POST['email']) = _check_auth_config($arg,15); - $_POST['passwd2'] = $_POST['passwd']; + list($domain,$user,$password,$admin,$pw,$first,$last,$email) = explode(',',$arg); + _fetch_user_password($user,$password); - if (!$_POST['fname']) $_POST['fname'] = 'Admin'; - if (!$_POST['lname']) $_POST['lname'] = 'User'; - - $_POST['submit'] = true; - $error = include('admin_account.php'); - - switch ($error) - { - case 41: - fail(41,lang('Error in admin-creation !!!')); - case 42: - fail(42,lang('Error in group-creation !!!')); - } - echo lang('Admin account successful created.')."\n"; + $cmd = new setup_cmd_admin($domain,$user,$password,$admin,$pw,$first,$last,$email); + echo $cmd->run()."\n"; } /**