<?php
// $Header: /cvsroot/phpldapadmin/phpldapadmin/delete.php,v 1.16 2004/03/19 20:13:08 i18phpldapadmin Exp $
 

/*
 * delete.php
 * Deletes a DN and presents a "job's done" message.
 *
 * Variables that come in as POST vars:
 *  - dn (rawurlencoded)
 *  - server_id
 */

require realpath( 'common.php' );

$dn = $_POST['dn'];
$encoded_dn = rawurlencode( $dn );
$server_id = $_POST['server_id'];

if( $dn === null )
	pla_error( $lang['you_must_specify_a_dn'] );

if( is_server_read_only( $server_id ) )
	pla_error( $lang['no_updates_in_read_only_mode'] );

check_server_id( $server_id ) or pla_error( $lang['bad_server_id'] );
have_auth_info( $server_id ) or pla_error( $lang['not_enough_login_info'] );
dn_exists( $server_id, $dn ) or pla_error( sprintf( $lang['no_such_entry'], '<b>' . pretty_print_dn( $dn ) . '</b>' ) );

$ds = pla_ldap_connect( $server_id ) or pla_error( $lang['could_not_connect'] );

// Check the user-defined custom callback first.
if( true === preEntryDelete( $server_id, $dn ) ) {
	$del_result = @ldap_delete( $ds, $dn );
} else {
	exit;
}

if( $del_result )
{
	// Custom callback
	postEntryDelete( $server_id, $dn );

	// kill the DN from the tree browser session variable and
	// refresh the tree viewer frame (left_frame)
	if( array_key_exists( 'tree', $_SESSION ) )
	{
		$tree = $_SESSION['tree'];
		if( isset( $tree[$server_id] ) && is_array( $tree[$server_id] ) ) {

			// does it have children? (it shouldn't, but hey, you never know)	
			if( isset( $tree[$server_id][$dn] ) )
				unset( $tree[$server_id][$dn] );
			
			// search and destroy
			foreach( $tree[$server_id] as $tree_dn => $subtree )
				foreach( $subtree as $key => $sub_tree_dn )
					if( 0 == strcasecmp( $sub_tree_dn, $dn ) ) 
						unset( $tree[$server_id][$tree_dn][$key] );
			$_SESSION['tree'] = $tree;
		}
		session_write_close();
	}

	include 'header.php';

	?>

	<script language="javascript">
		parent.left_frame.location.reload();
	</script>

	<br />
	<br />
	<center><?php echo sprintf( $lang['entry_deleted_successfully'], '<b>' .pretty_print_dn($dn) . '</b>' ); ?></center>

	<?php 


} else {
    pla_error( sprintf( $lang['could_not_delete_entry'], '<b>' . pretty_print_dn( $dn ) . '</b>' ),
               ldap_error( $ds ), 
               ldap_errno( $ds ) );
}