Files
Dev f41dbd333e
Some checks failed
Release SharePoint Toolbox v2 / release (push) Failing after 14s
chore: archive v2.2 Report Branding & User Directory milestone
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>
2026-04-09 10:27:33 +02:00

4.2 KiB

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