diff --git a/inc/ui/collection-edit.php b/inc/ui/collection-edit.php
index 00f6f334..b6ac0d40 100644
--- a/inc/ui/collection-edit.php
+++ b/inc/ui/collection-edit.php
@@ -441,7 +441,7 @@ EOTEMPLATE;
$browser = new Browser(translate('Collection Grants'));
$browser->AddColumn( 'to_principal', translate('To ID'), 'right', '##principal_link##' );
- $rowurl = $c->base_url . '/admin.php?action=edit&t=collection&id=';
+ $rowurl = $c->base_url . '/admin.php?action=edit&t=principal&id=';
$browser->AddHidden( 'principal_link', "'' || to_principal || ''" );
$browser->AddHidden( 'grant_privileges', 'privileges' );
$browser->AddColumn( 'displayname', translate('Display Name') );
@@ -479,5 +479,56 @@ EOTEMPLATE;
$browser->AddRow($extra_row);
}
}
+
+
+ $browser = new Browser(translate('Access Tickets'));
+ $browser->AddHidden( 'dav_owner_id' );
+ $browser->AddColumn( 'ticket_id', translate('Ticket ID'), '', '' );
+ $browser->AddColumn( 'target', translate('Target'), '', '
%s | ', "'".$c->base_url.'/caldav.php'."' ||COALESCE(d.dav_name,c.dav_name)" );
+ $browser->AddColumn( 'expiry', translate('Expires'), '', '', 'TO_CHAR(expires,\'YYYYMMDD"T"HH:MI:SS\')');
+ $browser->AddColumn( 'privs', translate('Privileges'), '', '', "privileges_list(privileges)" );
+ $delurl = $c->base_url . '/admin.php?action=edit&t=principal&id=##dav_owner_id##&ticket_id=##URL:ticket_id##&subaction=delete_ticket';
+ $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" );
+
+ $browser->SetOrdering( 'target', 'A' );
+
+ $browser->SetJoins( 'access_ticket t LEFT JOIN collection c ON (target_collection_id=collection_id) LEFT JOIN caldav_data d ON (target_resource_id=dav_id)' );
+ $browser->SetWhere( 'target_collection_id = '.intval($editor->Value('collection_id')) );
+
+ $browser->RowFormat( '', '
', '#even' );
+
+ $browser->DoQuery();
+ $page_elements[] = $browser;
+
+
+/**
+ bind_id | bigint | not null default nextval('dav_id_seq'::regclass)
+ bound_source_id | bigint |
+ access_ticket_id | text |
+ dav_owner_id | bigint | not null
+ parent_container | text | not null
+ dav_name | text | not null
+ dav_displayname | text |
+ */
+
+ $browser = new Browser(translate('Bindings to this Collection'));
+ $browser->AddColumn( 'bind_id', translate('ID'), '', '' );
+ $browser->AddHidden( 'b.dav_owner_id' );
+ $browser->AddColumn( 'bound_as', translate('Bound As'), '', '%s | ', "'".$c->base_url.'/caldav.php'."' ||b.dav_name" );
+ $browser->AddColumn( 'access_ticket_id', translate('Ticket ID'), '', '' );
+ $browser->AddColumn( 'privs', translate('Privileges'), '', '', "privileges_list(privileges)" );
+ $delurl = $c->base_url . '/admin.php?action=edit&t=principal&id=##dav_owner_id##&bind_id=##URL:bind_id##&subaction=delete_binding';
+ $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" );
+
+ $browser->SetOrdering( 'target', 'A' );
+
+ $browser->SetJoins( 'dav_binding b LEFT JOIN collection c ON (bound_source_id=collection_id) LEFT JOIN access_ticket t ON (ticket_id=access_ticket_id)' );
+ $browser->SetWhere( 'bound_source_id = '.intval($editor->Value('collection_id')) );
+
+ $browser->RowFormat( '', '
', '#even' );
+
+ $browser->DoQuery();
+ $page_elements[] = $browser;
+
}
diff --git a/inc/ui/principal-edit.php b/inc/ui/principal-edit.php
index d471da2d..59707d21 100644
--- a/inc/ui/principal-edit.php
+++ b/inc/ui/principal-edit.php
@@ -26,7 +26,8 @@ function handle_subaction( $subaction ) {
global $delete_collection_confirmation_required;
global $delete_principal_confirmation_required;
global $delete_ticket_confirmation_required;
-
+ global $delete_binding_confirmation_required;
+
dbg_error_log('admin-principal-edit',':handle_action: Action %s', $subaction );
switch( $subaction ) {
@@ -101,7 +102,31 @@ function handle_subaction( $subaction ) {
}
break;
- default:
+ case 'delete_binding':
+ dbg_error_log('admin-principal-edit',':handle_action: Deleting binding "%s" for principal %d', $_GET['bind_id'], $id );
+ if ( $session->AllowedTo('Admin')
+ || ($id > 0 && $session->principal_id == $id) ) {
+ if ( $session->CheckConfirmationHash('GET', 'confirm') ) {
+ dbg_error_log('admin-principal-edit',':handle_action: Allowed to delete ticket "%s" for principal %d', $_GET['bind_id'], $id );
+ $qry = new AwlQuery('DELETE FROM dav_binding WHERE bind_id=?;', $_GET['bind_id'] );
+ if ( $qry->Exec() ) {
+ $c->messages[] = i18n('Binding deleted');
+ return true;
+ }
+ else {
+ $c->messages[] = i18n('There was an error writing to the database.');
+ return false;
+ }
+ }
+ else {
+ $c->messages[] = i18n('Please confirm deletion of binding - see below');
+ $delete_binding_confirmation_required = $session->BuildConfirmationHash('GET', 'confirm');
+ return false;
+ }
+ }
+ break;
+
+ default:
return false;
}
return false;
@@ -643,9 +668,9 @@ EOTEMPLATE;
$browser = new Browser(translate('Access Tickets'));
- $browser->AddColumn( 'ticket_id', translate('ID'), '', '' );
- $browser->AddColumn( 'target', translate('Target'), '', '', 'COALESCE(d.dav_name,c.dav_name)' );
- $browser->AddColumn( 'expires', translate('Expires'), '', '');
+ $browser->AddColumn( 'ticket_id', translate('Ticket ID'), '', '' );
+ $browser->AddColumn( 'target', translate('Target'), '', '%s | ', "'".$c->base_url.'/caldav.php'."' ||COALESCE(d.dav_name,c.dav_name)" );
+ $browser->AddColumn( 'expiry', translate('Expires'), '', '', 'TO_CHAR(expires,\'YYYY-MM-DD HH:MI:SS\')');
$browser->AddColumn( 'privs', translate('Privileges'), '', '', "privileges_list(privileges)" );
$delurl = $c->base_url . '/admin.php?action=edit&t=principal&id='.$id.'&ticket_id=##URL:ticket_id##&subaction=delete_ticket';
$browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" );
@@ -713,5 +738,35 @@ EOTEMPLATE;
$page_elements[] = $html;
}
+ $browser = new Browser(translate('Bindings to this Principal\'s Collections'));
+ $browser->AddColumn( 'bind_id', translate('ID'), '', '' );
+ $browser->AddHidden( 'b.dav_owner_id' );
+ $browser->AddHidden( 'p.principal_id' );
+ $browser->AddColumn( 'bound_as', translate('Bound As'), '', '%s | ', "'".$c->base_url.'/caldav.php'."' ||b.dav_name" );
+ $browser->AddColumn( 'access_ticket_id', translate('Ticket ID'), '', '' );
+ $browser->AddColumn( 'privs', translate('Privileges'), '', '', "privileges_list(privileges)" );
+ $delurl = $c->base_url . '/admin.php?action=edit&t=principal&id=##principal_id##&bind_id=##bind_id##&subaction=delete_binding';
+ $browser->AddColumn( 'delete', translate('Action'), 'center', '', "'".translate('Delete')."'" );
+ $browser->SetOrdering( 'target', 'A' );
+
+ $browser->SetJoins( 'dav_binding b LEFT JOIN collection c ON (bound_source_id=collection_id) LEFT JOIN access_ticket t ON (ticket_id=access_ticket_id) LEFT JOIN principal p USING(user_no)' );
+ $browser->SetWhere( 'p.principal_id = '.intval($editor->Value('principal_id')) );
+
+ $browser->RowFormat( '', '
', '#even' );
+
+ $browser->DoQuery();
+ $page_elements[] = $browser;
+
+ if ( isset($delete_binding_confirmation_required) ) {
+ $html = '| ';
+ $html .= sprintf('%s "%s" %s %s',
+ translate('Deleting Binding:'), $_GET['bind_id'], $_SERVER['REQUEST_URI'],
+ $delete_binding_confirmation_required,
+ translate('Confirm Deletion of the Binding'),
+ translate('The binding will be deleted.') );
+ $html .= " |
\n";
+ $page_elements[] = $html;
+ }
+
}