chore: archive v2.2 Report Branding & User Directory milestone
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:
Dev
2026-04-09 10:27:33 +02:00
parent b9511bd2b0
commit f41dbd333e
5 changed files with 154 additions and 203 deletions

View 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*

View 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*