Enabled Feature: Mass Delete

This commit is contained in:
Deon George
2009-07-06 15:19:42 +10:00
parent 08199e67e0
commit d501393d49
4 changed files with 213 additions and 108 deletions

View File

@@ -2,109 +2,142 @@
// $Header$
/**
* Enables user to mass delete multiple entries using checkboxes.
*
* Variables that come in as GET vars:
* - mass_delete - an array of DNs to delete in this form:
* Array (
* [o=myorg,dc=example,dc=com] => on
* [cn=bob,dc=example,dc=com] => on
* )
* etc.
* Displays a last chance confirmation form to delete a DN.
*
* @package phpLDAPadmin
* @subpackage Page
*/
/**
*/
require './common.php';
if ($ldapserver->isReadOnly())
error(_('You cannot perform updates while server is in read-only mode'),'error','index.php');
# The DN we are working with
$request = array();
$request['dn'] = get_request('dn','REQUEST');
if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_delete','mass_delete'))
error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('delete mass entries')),'error','index.php');
if (! is_array($request['dn']))
$request['dn'] = array($request['dn']);
$confirmed = isset($_POST['confirmed']) ? true : false;
isset($_POST['mass_delete']) or
error(_('Error calling mass_delete.php. Missing mass_delete in POST vars.'),'error','index.php');
$request['children'] = array();
$request['parent'] = array();
foreach ($request['dn'] as $dn) {
# Check if the entry exists.
if (! $dn || ! $app['server']->dnExists($dn))
system_message(array(
'title'=>_('Entry does not exist'),
'body'=>sprintf('%s (%s/%s)',_('The entry does not exist and will be ignored'),$dn),
'type'=>'error'));
$mass_delete = $_POST['mass_delete'];
is_array($mass_delete) or
error(_('mass_delete POST var is not an array.'),'error','index.php');
$ldapserver->isMassDeleteEnabled() or
error(_('Mass deletion is not enabled. Please enable it in config.php before proceeding.'),'error','index.php');
printf('<h3 class="title">%s</h3>',_('Mass Deleting'));
if ($confirmed == true) {
printf('<h3 class="subtitle">'._('Deletion progress on server "%s"').'</h3>',$ldapserver->name);
echo '<blockquote>';
echo '<small>';
$successfully_delete_dns = array();
$failed_dns = array();
if (! is_array($mass_delete))
error(_('Malformed mass_delete array.'),'error','index.php');
if (count($mass_delete) == 0) {
echo '<br />';
printf('<center>%s</center>',_('You did not select any entries to delete.'));
return;
# We search all children, not only the visible children in the tree
if (! in_array_ignore_case($dn,$request['children'])) {
$request['children'] = array_merge($request['children'],$app['server']->getContainerContents($dn,null,0,'(objectClass=*)',LDAP_DEREF_NEVER));
array_push($request['parent'],$dn);
}
// @todo: Should sort these entries, so that they are deleted in order, if a user selects children.
foreach ($mass_delete as $dn => $junk) {
printf(_('Deleting %s'),htmlspecialchars($dn));
if(run_hook('pre_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn))) {
$success = $ldapserver->delete($dn);
if ($success) {
run_hook('post_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn));
printf(' <span style="color:green">%s</span>.<br />',_('Success'));
$successfully_delete_dns[] = $dn;
} else {
printf(' <span style="color:red">%s</span>.<br /> (%s)<br />',_('Failed'),$ldapserver->error());
$failed_dns[] = $dn;
}
}
}
echo '<blockquote>';
echo '</small>';
$failed_count = count($failed_dns);
$total_count = count($mass_delete);
if ($failed_count > 0)
printf('<span style="color: red; font-weight: bold;">'._('%s of %s entries failed to be deleted.').'</span>',$failed_count,$total_count);
else
printf('<span style="color: green; font-weight: bold;">%s</span>',_('All entries deleted successfully.'));
} else {
$n = count($mass_delete);
printf('<h3 class="subtitle">'._('Confirm mass delete of %s entries on server %s').'</h3>',$n,$ldapserver->name);
echo'<center>';
printf(_('Do you really want to delete %s %s %s'),
($n == 1? _('this') : _('these')),$n,($n == 1 ? _('entry') : _('entries')));
echo '<form action="cmd.php?cmd=mass_delete" method="post">';
echo '<input type="hidden" name="confirmed" value="true" />';
printf('<input type="hidden" name="server_id" value="%s" />',$ldapserver->server_id);
echo '<table><tr><td><ol>';
foreach ($mass_delete as $dn => $junk)
printf('<input type="hidden" name="mass_delete[%s]" value="on" /><li>%s</li>',htmlspecialchars($dn),htmlspecialchars($dn));
echo '</ol></td></tr></table>';
printf('<input type="submit" value="%s" /></center>',_('Yes, delete!'));
echo '</form>';
}
printf('<h3 class="title">%s</h3>',_('Mass Delete'));
printf('<h3 class="subtitle">%s: <b>%s</b></h3>',_('Server'),$app['server']->getName());
echo "\n";
echo '<center>';
echo '<table class="forminput" border=0>';
if (count($request['parent']) == 1)
printf('<tr><td colspan=4><b>%s</b></td></tr>',_('Are you sure you want to permanently delete this object?'));
else
printf('<tr><td colspan=4><b>%s</b></td></tr>',_('Are you sure you want to permanently delete these objects?'));
echo '<tr><td colspan=4>&nbsp;</td></tr>';
printf('<tr><td width=10%%>%s:</td><td colspan=3 width=75%%><b>%s</b></td></tr>',_('Server'),$app['server']->getName());
foreach ($request['parent'] as $dn)
printf('<tr><td width=10%%><acronym title="%s">%s</acronym></td><td colspan=3 width=75%%><b>%s</b></td></tr>',
_('Distinguished Name'),_('DN'),$dn);
echo '<tr><td colspan=4>&nbsp;</td></tr>';
$request['delete'] = $request['parent'];
if (count($request['children'])) {
printf('<tr><td colspan=4><b>%s</b></td></tr>',_('Permanently delete all children also?'));
echo '<tr><td colspan=4>&nbsp;</td></tr>';
# We need to see if the children have children
$query = array();
$query['scope'] = 'sub';
$query['attrs'] = array('dn');
$query['size_limit'] = 0;
$query['deref'] = LDAP_DEREF_NEVER;
$request['search'] = array();
foreach ($request['children'] as $dn) {
$query['base'] = $dn;
$request['search'] = array_merge($request['search'],$app['server']->query($query,null));
}
foreach ($request['search'] as $value)
array_push($request['delete'],$value['dn']);
echo '<tr>';
echo '<td colspan=4>';
printf(_('This request also includes %s children entries.'),count($request['children']));
echo '</td></tr>';
printf('<tr><td colspan=4>%s</td></tr>',
sprintf(_('phpLDAPadmin can also recursively delete all %s of the child entries. See below for a list of all the entries that this action will delete. Do you want to do this?'),count($request['children'])));
echo '<tr><td colspan=4>&nbsp;</td></tr>';
printf('<tr><td colspan=4><small>%s</small></td></tr>',
_('Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems.'));
echo "\n";
echo '<tr><td colspan=4>&nbsp;</td></tr>';
echo "\n";
printf('<tr><td colspan=4><center><b>%s</b></center></td></tr>',_('List of entries to be deleted:'));
echo '<tr><td colspan=4>&nbsp;</td></tr>';
$i = 0;
echo '<tr><td colspan=4><center>';
printf('<select size="%s" multiple disabled style="background:white; color:black;width:500px" >',min(10,count($request['delete'])));
foreach ($request['delete'] as $key => $value)
printf('<option>%s. %s</option>',++$i,htmlspecialchars(dn_unescape($value)));
echo '</select>';
echo '</center></td></tr>';
echo "\n";
echo '<tr><td colspan=4>&nbsp;</td></tr>';
}
echo '<tr>';
echo '<td width=50% colspan=2><center>';
echo '<form action="cmd.php" method="post">';
echo '<input type="hidden" name="cmd" value="rdelete" />';
printf('<input type="hidden" name="server_id" value="%s" />',$app['server']->getIndex());
foreach ($request['parent'] as $dn)
printf('<input type="hidden" name="dn[]" value="%s" />',htmlspecialchars($dn));
printf('<input type="submit" value="%s" />',sprintf(_('Delete all %s objects'),count($request['delete'])));
echo '</form>';
echo '</center></td>';
echo '<td colspan=2 width=50%><center>';
echo '<form action="cmd.php" method="get">';
echo '<input type="hidden" name="cmd" value="template_engine" />';
printf('<input type="hidden" name="server_id" value="%s" />',$app['server']->getIndex());
printf('<input type="submit" name="submit" value="%s" />',_('Cancel'));
echo '</form>';
echo '</center></td>';
echo '</tr>';
echo "\n";
echo '</table>';
echo '</center>';
echo '<br />';
?>