chore: archive v2.2 Report Branding & User Directory milestone
Some checks failed
Release SharePoint Toolbox v2 / release (push) Failing after 14s
Some checks failed
Release SharePoint Toolbox v2 / release (push) Failing after 14s
5 phases (10-14), 14 plans, 11/11 requirements complete. Key features: HTML report branding with MSP/client logos, user directory browse mode with paginated load and member/guest filtering. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
59
.planning/milestones/v2.2-REQUIREMENTS.md
Normal file
59
.planning/milestones/v2.2-REQUIREMENTS.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Requirements Archive: SharePoint Toolbox v2.2 Report Branding & User Directory
|
||||
|
||||
**Defined:** 2026-04-08
|
||||
**Completed:** 2026-04-09
|
||||
**Coverage:** 11/11 requirements complete
|
||||
|
||||
## Requirements
|
||||
|
||||
### Report Branding
|
||||
|
||||
- [x] **BRAND-01**: User can import an MSP logo in application settings (global, persisted across sessions)
|
||||
- [x] **BRAND-02**: User can preview the imported MSP logo in settings UI
|
||||
- [x] **BRAND-03**: User can import a client logo per tenant profile
|
||||
- [x] **BRAND-04**: User can auto-pull client logo from tenant's Entra branding API
|
||||
- [x] **BRAND-05**: All five HTML report types display MSP and client logos in a consistent header
|
||||
- [x] **BRAND-06**: Logo import validates format (PNG/JPG) and enforces 512 KB size limit
|
||||
|
||||
### User Directory
|
||||
|
||||
- [x] **UDIR-01**: User can toggle between search mode and directory browse mode in user access audit tab
|
||||
- [x] **UDIR-02**: User can browse full tenant user directory with pagination (handles 999+ users)
|
||||
- [x] **UDIR-03**: User can filter directory by user type (member vs guest)
|
||||
- [x] **UDIR-04**: User can see department and job title columns in directory list
|
||||
- [x] **UDIR-05**: User can select one or more users from directory to run the access audit
|
||||
|
||||
## Traceability
|
||||
|
||||
| Requirement | Phase | Status | Notes |
|
||||
|-------------|-------|--------|-------|
|
||||
| BRAND-01 | Phase 10 | Complete | Base64 JSON persistence via BrandingRepository |
|
||||
| BRAND-02 | Phase 12 | Complete | Base64ToImageSourceConverter + live preview |
|
||||
| BRAND-03 | Phase 10 | Complete | Per-tenant logo on TenantProfile |
|
||||
| BRAND-04 | Phase 11 | Complete | Entra bannerLogo stream endpoint |
|
||||
| BRAND-05 | Phase 11 | Complete | BrandingHtmlHelper + optional param on all 5 services |
|
||||
| BRAND-06 | Phase 10 | Complete | Magic-byte validation, 512 KB limit, auto-compression |
|
||||
| UDIR-01 | Phase 13 | Complete | IsDirectoryBrowseMode toggle property |
|
||||
| UDIR-02 | Phase 13 | Complete | PageIterator pagination via GraphUserDirectoryService |
|
||||
| UDIR-03 | Phase 13 | Complete | In-memory ICollectionView filter |
|
||||
| UDIR-04 | Phase 13 | Complete | Sortable Department/JobTitle columns |
|
||||
| UDIR-05 | Phase 14 | Complete | SelectDirectoryUserCommand + double-click handler |
|
||||
|
||||
## Deferred to Future Milestones
|
||||
|
||||
- **BRAND-F01**: PDF export with embedded logos
|
||||
- **BRAND-F02**: Custom report title/footer text per tenant
|
||||
- **UDIR-F01**: Session-scoped directory cache (avoid re-fetching on tab switch)
|
||||
- **UDIR-F02**: Export user directory list to CSV
|
||||
|
||||
## Out of Scope
|
||||
|
||||
| Feature | Reason |
|
||||
|---------|--------|
|
||||
| CSV report branding | CSV is data-only format; logos don't apply |
|
||||
| Logo in application title bar | Not a report branding concern; separate UX decision |
|
||||
| User directory as standalone tab | Directory browse is a mode within existing user access audit tab |
|
||||
| Real-time directory sync | One-time load with manual refresh is sufficient for audit workflows |
|
||||
|
||||
---
|
||||
*Archived: 2026-04-09*
|
||||
73
.planning/milestones/v2.2-ROADMAP.md
Normal file
73
.planning/milestones/v2.2-ROADMAP.md
Normal file
@@ -0,0 +1,73 @@
|
||||
# v2.2 Report Branding & User Directory — Milestone Archive
|
||||
|
||||
**Goal:** Add customizable logos to HTML reports and a full user directory browse mode in the user access audit tab
|
||||
**Status:** Shipped 2026-04-09
|
||||
**Timeline:** 2026-04-08 to 2026-04-09
|
||||
|
||||
## Stats
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Phases | 5 (Phases 10-14) |
|
||||
| Plans | 14 |
|
||||
| Commits | 47 |
|
||||
| C# LOC (total) | 16,916 |
|
||||
| Tests | 285 pass / 26 skip |
|
||||
| Requirements | 11/11 complete |
|
||||
|
||||
## Key Accomplishments
|
||||
|
||||
1. **Branding Data Foundation (Phase 10)** — Logo models with base64 JSON persistence, BrandingRepository, BrandingService with magic-byte validation (PNG/JPG) and auto-compression via WPF PresentationCore, GraphUserDirectoryService with PageIterator pagination for full tenant user enumeration.
|
||||
|
||||
2. **HTML Export Branding (Phase 11)** — BrandingHtmlHelper static class for consistent header generation, optional `ReportBranding` parameter added to all 5 HTML export services (Permissions, Storage, Search, Duplicates, User Access), ViewModel injection via IBrandingService, logo management commands (browse/clear) on Settings and Profile ViewModels, Entra branding API auto-pull for client logos.
|
||||
|
||||
3. **Branding UI Views (Phase 12)** — Base64ToImageSourceConverter for live logo preview, MSP logo section in SettingsView (import/preview/clear), client logo section in ProfileManagementDialog (import/preview/clear/Entra pull), Grid overlay with DataTrigger for placeholder visibility toggle.
|
||||
|
||||
4. **User Directory ViewModel (Phase 13)** — Browse mode toggle on UserAccessAuditViewModel, paginated directory load with cancellation via separate CancellationTokenSource, in-memory member/guest filter (fetches all users once, filters via ICollectionView), sortable columns for DisplayName, UPN, Department, JobTitle.
|
||||
|
||||
5. **User Directory View (Phase 14)** — Search/Browse RadioButton mode toggle, directory DataGrid with loading counter and cancel button, SelectDirectoryUserCommand bridging directory selection to existing audit pipeline, double-click code-behind handler, 14 localization keys (EN + FR).
|
||||
|
||||
## Phases
|
||||
|
||||
### Phase 10: Branding Data Foundation (3 plans)
|
||||
- Logo models, BrandingRepository, BrandingService with validation/compression
|
||||
- GraphUserDirectoryService with PageIterator pagination
|
||||
- DI registration in App.xaml.cs and full test suite gate
|
||||
|
||||
### Phase 11: HTML Export Branding + ViewModel Integration (4 plans)
|
||||
- ReportBranding model + BrandingHtmlHelper static class with unit tests
|
||||
- Add optional branding param to all 5 HTML export services
|
||||
- Wire IBrandingService into all 5 export ViewModels
|
||||
- Logo management commands (Settings + Profile) and Entra auto-pull
|
||||
|
||||
### Phase 12: Branding UI Views (3 plans)
|
||||
- Base64ToImageSourceConverter, localization keys, App.xaml registration, ClientLogoPreview property
|
||||
- SettingsView MSP logo section (preview, import, clear)
|
||||
- ProfileManagementDialog client logo section (preview, import, clear, Entra pull)
|
||||
|
||||
### Phase 13: User Directory ViewModel (2 plans)
|
||||
- Extend GraphDirectoryUser with UserType + service includeGuests parameter
|
||||
- UserAccessAuditViewModel directory browse mode (toggle, load, filter, sort, tests)
|
||||
|
||||
### Phase 14: User Directory View (2 plans)
|
||||
- Localization keys (EN+FR), SelectDirectoryUserCommand, code-behind double-click handler
|
||||
- XAML: mode toggle (Search/Browse RadioButtons), directory DataGrid, loading UX, shared SelectedUsers panel
|
||||
|
||||
## Requirements Covered
|
||||
|
||||
| Requirement | Description | Status |
|
||||
|-------------|-------------|--------|
|
||||
| BRAND-01 | Import MSP logo in application settings | Complete |
|
||||
| BRAND-02 | Preview imported MSP logo in settings UI | Complete |
|
||||
| BRAND-03 | Import client logo per tenant profile | Complete |
|
||||
| BRAND-04 | Auto-pull client logo from Entra branding API | Complete |
|
||||
| BRAND-05 | All 5 HTML reports display logos in consistent header | Complete |
|
||||
| BRAND-06 | Logo validation (PNG/JPG, 512 KB limit) | Complete |
|
||||
| UDIR-01 | Toggle between search and directory browse mode | Complete |
|
||||
| UDIR-02 | Browse full tenant user directory with pagination | Complete |
|
||||
| UDIR-03 | Filter directory by user type (member vs guest) | Complete |
|
||||
| UDIR-04 | Department and job title columns in directory list | Complete |
|
||||
| UDIR-05 | Select users from directory to run access audit | Complete |
|
||||
|
||||
---
|
||||
*Archived: 2026-04-09*
|
||||
Reference in New Issue
Block a user