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