egroupware/setup/ldapexport.php

314 lines
11 KiB
PHP
Raw Normal View History

2001-07-30 17:59:25 +02:00
<?php
/**************************************************************************\
2004-01-27 21:49:25 +01:00
* eGroupWare - Setup *
* http://www.egroupware.org *
2001-07-30 17:59:25 +02:00
* -------------------------------------------- *
* 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$ */
$GLOBALS['egw_info'] = array(
'flags' => array(
'noheader' => True,
'nonavbar' => True,
'currentapp' => 'home',
'noapi' => True
));
2001-07-30 17:59:25 +02:00
include('./inc/functions.inc.php');
// Authorize the user to use setup app and load the database
if (!$GLOBALS['egw_setup']->auth('Config'))
2001-07-30 17:59:25 +02:00
{
Header('Location: index.php');
exit;
}
// Does not return unless user is authorized
2001-07-30 17:59:25 +02:00
class phpgw
{
var $common;
var $accounts;
var $applications;
var $db;
}
$phpgw = new phpgw;
$phpgw->common = CreateObject('phpgwapi.common');
$common = $phpgw->common;
$GLOBALS['egw_setup']->loaddb();
copyobj($GLOBALS['egw_setup']->db,$phpgw->db);
2001-07-30 17:59:25 +02:00
$tpl_root = $GLOBALS['egw_setup']->html->setup_tpl_dir('setup');
$setup_tpl = CreateObject('setup.Template',$tpl_root);
2001-07-30 17:59:25 +02:00
$setup_tpl->set_file(array(
'ldap' => 'ldap.tpl',
'T_head' => 'head.tpl',
'T_footer' => 'footer.tpl',
'T_alert_msg' => 'msg_alert_msg.tpl'
));
$GLOBALS['egw_setup']->db->query("SELECT config_name,config_value FROM phpgw_config WHERE config_name LIKE 'ldap%'",__LINE__,__FILE__);
while ($GLOBALS['egw_setup']->db->next_record())
2001-07-30 17:59:25 +02:00
{
$config[$GLOBALS['egw_setup']->db->f('config_name')] = $GLOBALS['egw_setup']->db->f('config_value');
2001-07-30 17:59:25 +02:00
}
2004-02-29 23:00:12 +01:00
$phpgw_info['server']['ldap_host'] = $config['ldap_host'];
$phpgw_info['server']['ldap_context'] = $config['ldap_context'];
$phpgw_info['server']['ldap_group_context'] = $config['ldap_group_context'];
$phpgw_info['server']['ldap_root_dn'] = $config['ldap_root_dn'];
$phpgw_info['server']['ldap_root_pw'] = $config['ldap_root_pw'];
$phpgw_info['server']['ldap_account_home'] = $config['ldap_account_home'];
$phpgw_info['server']['ldap_account_shell'] = $config['ldap_account_shell'];
$phpgw_info['server']['ldap_extra_attributes'] = $config['ldap_extra_attributes'];
$phpgw_info['server']['ldap_version3'] = $config['ldap_version3'];
2001-07-30 17:59:25 +02:00
$phpgw_info['server']['account_repository'] = 'ldap';
$phpgw->accounts = CreateObject('phpgwapi.accounts');
$acct = $phpgw->accounts;
2001-07-30 17:59:25 +02:00
// First, see if we can connect to the LDAP server, if not send `em back to config.php with an
// error message.
// connect to ldap server
if(!$ldap = $common->ldapConnect())
2001-07-30 17:59:25 +02:00
{
$noldapconnection = True;
}
if($noldapconnection)
2001-07-30 17:59:25 +02:00
{
Header('Location: config.php?error=badldapconnection');
exit;
}
$sql = "SELECT * FROM phpgw_accounts WHERE account_type='u'";
$GLOBALS['egw_setup']->db->query($sql,__LINE__,__FILE__);
while($GLOBALS['egw_setup']->db->next_record())
2001-07-30 17:59:25 +02:00
{
$i = $GLOBALS['egw_setup']->db->f('account_id');
$account_info[$i]['account_id'] = $GLOBALS['egw_setup']->db->f('account_id');
$account_info[$i]['account_lid'] = $GLOBALS['egw_setup']->db->f('account_lid');
$account_info[$i]['account_firstname'] = $GLOBALS['egw_setup']->db->f('account_firstname');
$account_info[$i]['account_lastname'] = $GLOBALS['egw_setup']->db->f('account_lastname');
$account_info[$i]['account_status'] = $GLOBALS['egw_setup']->db->f('account_status');
$account_info[$i]['account_expires'] = $GLOBALS['egw_setup']->db->f('account_expires');
2001-07-30 17:59:25 +02:00
}
while(list($key,$data) = @each($account_info))
2001-07-30 17:59:25 +02:00
{
$tmp = $data['account_id'];
$newaccount[$tmp] = $data;
}
$account_info = $newaccount;
$sql = "SELECT * FROM phpgw_accounts WHERE account_type='g'";
$GLOBALS['egw_setup']->db->query($sql,__LINE__,__FILE__);
while($GLOBALS['egw_setup']->db->next_record())
2001-07-30 17:59:25 +02:00
{
$i = $GLOBALS['egw_setup']->db->f('account_id');
$group_info[$i]['account_id'] = $GLOBALS['egw_setup']->db->f('account_id');
$group_info[$i]['account_lid'] = $GLOBALS['egw_setup']->db->f('account_lid');
$group_info[$i]['account_firstname'] = $GLOBALS['egw_setup']->db->f('account_firstname');
$group_info[$i]['account_lastname'] = $GLOBALS['egw_setup']->db->f('account_lastname');
$group_info[$i]['account_status'] = $GLOBALS['egw_setup']->db->f('account_status');
$group_info[$i]['account_expires'] = $GLOBALS['egw_setup']->db->f('account_expires');
2001-07-30 17:59:25 +02:00
}
while(list($key,$data) = @each($group_info))
2001-07-30 17:59:25 +02:00
{
$tmp = $data['account_id'][0];
$newgroup[$tmp] = $data;
}
$group_info = $newgroup;
2004-01-25 20:27:48 +01:00
$cancel = get_var('cancel','POST');
$submit = get_var('submit','POST');
$users = get_var('users','POST');
$admins = get_var('admins','POST');
$s_apps = get_var('s_apps','POST');
$ldapgroups = get_var('ldapgroups','POST');
if($cancel)
2001-07-30 17:59:25 +02:00
{
Header('Location: ldap.php');
2001-07-30 17:59:25 +02:00
exit;
}
if($submit)
2001-07-30 17:59:25 +02:00
{
if($ldapgroups)
2001-07-30 17:59:25 +02:00
{
while(list($key,$groupid) = each($ldapgroups))
2001-07-30 17:59:25 +02:00
{
$id_exist = 0;
$thisacctid = $group_info[$groupid]['account_id'];
$thisacctlid = $group_info[$groupid]['account_lid'];
$thisfirstname = $group_info[$groupid]['account_firstname'];
$thislastname = $group_info[$groupid]['account_lastname'];
$thismembers = $group_info[$groupid]['members'];
// Do some checks before we try to import the data to LDAP.
if(!empty($thisacctid) && !empty($thisacctlid))
2001-07-30 17:59:25 +02:00
{
2003-12-19 13:34:45 +01:00
$groups = CreateObject('phpgwapi.accounts',(int)$thisacctid);
copyobj($GLOBALS['egw_setup']->db,$groups->db);
2001-07-30 17:59:25 +02:00
// Check if the account is already there.
// If so, we won't try to create it again.
$acct_exist = $acct->name2id($thisacctlid);
if($acct_exist)
2001-07-30 17:59:25 +02:00
{
$thisacctid = $acct_exist;
}
2003-12-19 13:34:45 +01:00
$id_exist = $groups->exists((int)$thisacctid);
2001-07-30 17:59:25 +02:00
echo '<br>accountid: ' . $thisacctid;
echo '<br>accountlid: ' . $thisacctlid;
echo '<br>exists: ' . $id_exist;
/* If not, create it now. */
if(!$id_exist)
{
$thisaccount_info = array(
'account_type' => 'g',
'account_id' => $thisacctid,
'account_lid' => $thisacctlid,
'account_passwd' => 'x',
'account_firstname' => $thisfirstname,
'account_lastname' => $thislastname,
'account_status' => 'A',
'account_expires' => -1
);
$groups->create($thisaccount_info);
}
}
}
}
if($users)
2001-07-30 17:59:25 +02:00
{
while(list($key,$accountid) = each($users))
2001-07-30 17:59:25 +02:00
{
$id_exist = 0; $acct_exist = 0;
$thisacctid = $account_info[$accountid]['account_id'];
$thisacctlid = $account_info[$accountid]['account_lid'];
$thisfirstname = $account_info[$accountid]['account_firstname'];
$thislastname = $account_info[$accountid]['account_lastname'];
// Do some checks before we try to import the data.
if(!empty($thisacctid) && !empty($thisacctlid))
2001-07-30 17:59:25 +02:00
{
2003-12-19 13:34:45 +01:00
$accounts = CreateObject('phpgwapi.accounts',(int)$thisacctid);
copyobj($GLOBALS['egw_setup']->db,$accounts->db);
2001-07-30 17:59:25 +02:00
// Check if the account is already there.
// If so, we won't try to create it again.
$acct_exist = $acct->name2id($thisacctlid);
if($acct_exist)
2001-07-30 17:59:25 +02:00
{
$thisacctid = $acct_exist;
}
2003-12-19 13:34:45 +01:00
$id_exist = $accounts->exists((int)$thisacctid);
2001-07-30 17:59:25 +02:00
// If not, create it now.
if(!$id_exist)
{
echo '<br>Adding' . $thisacctid;
$thisaccount_info = array(
'account_type' => 'u',
'account_id' => $thisacctid,
'account_lid' => $thisacctlid,
'account_passwd' => 'x',
'account_firstname' => $thisfirstname,
'account_lastname' => $thislastname,
'account_status' => 'A',
'account_expires' => -1,
'homedirectory' => $config['ldap_account_home'] . '/' . $thisacctlid,
'loginshell' => $config['ldap_account_shell']
);
$accounts->create($thisaccount_info);
}
}
}
}
$setup_complete = True;
}
$GLOBALS['egw_setup']->html->show_header(lang('LDAP Export'),False,'config',$GLOBALS['egw_setup']->ConfigDomain . '(' . $GLOBALS['egw_domain'][$GLOBALS['egw_setup']->ConfigDomain]['db_type'] . ')');
2001-07-30 17:59:25 +02:00
if($error)
2001-07-30 17:59:25 +02:00
{
//echo '<br><center><b>Error:</b> '.$error.'</center>';
$GLOBALS['egw_setup']->html->show_alert_msg('Error',$error);
2001-07-30 17:59:25 +02:00
}
if($setup_complete)
2001-07-30 17:59:25 +02:00
{
echo '<br><center>'.lang('Export has been completed! You will need to set the user passwords manually.').'</center>';
echo '<br><center>'.lang('Click <a href="index.php">here</a> to return to setup.').'</center>';
$GLOBALS['egw_setup']->html->show_footer();
2001-07-30 17:59:25 +02:00
exit;
}
$setup_tpl->set_block('ldap','header','header');
$setup_tpl->set_block('ldap','user_list','user_list');
$setup_tpl->set_block('ldap','admin_list','admin_list');
$setup_tpl->set_block('ldap','group_list','group_list');
$setup_tpl->set_block('ldap','app_list','app_list');
$setup_tpl->set_block('ldap','submit','submit');
$setup_tpl->set_block('ldap','footer','footer');
while(list($key,$account) = @each($account_info))
2001-07-30 17:59:25 +02:00
{
$user_list .= '<option value="' . $account['account_id'] . '">'
. $common->display_fullname($account['account_lid'],$account['account_firstname'],$account['account_lastname'])
. '</option>';
}
@reset($account_info);
while(list($key,$account) = @each($account_info))
2001-07-30 17:59:25 +02:00
{
$admin_list .= '<option value="' . $account['account_id'] . '">'
. $common->display_fullname($account['account_lid'],$account['account_firstname'],$account['account_lastname'])
. '</option>';
}
while(list($key,$group) = @each($group_info))
2001-07-30 17:59:25 +02:00
{
$group_list .= '<option value="' . $group['account_id'] . '">'
. $group['account_lid']
. '</option>';
}
$setup_tpl->set_var('action_url','ldapexport.php');
$setup_tpl->set_var('users',$user_list);
$setup_tpl->set_var('admins',$admin_list);
$setup_tpl->set_var('ldapgroups',$group_list);
$setup_tpl->set_var('s_apps',$app_list);
$setup_tpl->set_var('ldap_import',lang('LDAP export users'));
2003-12-19 13:34:45 +01:00
$setup_tpl->set_var('description',lang("This section will help you export users and groups from eGroupWare's account tables into your LDAP tree").'.');
2001-07-30 17:59:25 +02:00
$setup_tpl->set_var('select_users',lang('Select which user(s) will be exported'));
$setup_tpl->set_var('select_groups',lang('Select which group(s) will be exported (group membership will be maintained)'));
$setup_tpl->set_var('form_submit','export');
$setup_tpl->set_var('cancel',lang('Cancel'));
$setup_tpl->pfp('out','header');
if($account_info)
{
$setup_tpl->pfp('out','user_list');
}
if($group_info)
2001-07-30 17:59:25 +02:00
{
$setup_tpl->pfp('out','group_list');
}
$setup_tpl->pfp('out','submit');
$setup_tpl->pfp('out','footer');
$GLOBALS['egw_setup']->html->show_footer();
2001-07-30 17:59:25 +02:00
?>