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; + } + }