Dev
b8c09655ac
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
v2.4.5
2026-04-24 10:50:19 +02:00
Dev
12dd1de9f2
chore: release v2.4
...
- Add theme system (Dark/Light palettes, ModernTheme, ThemeManager)
- Add InputDialog, Spinner common view
- Add DuplicatesCsvExportService
- Refresh views, dialogs, and view models across tabs
- Update localization strings (en/fr)
- Tweak services (transfer, permissions, search, user access, ownership elevation, bulk operations)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-24 10:50:03 +02:00
Dev
f4cc81bb71
chore: release v2.4
...
- Add theme system (Dark/Light palettes, ModernTheme, ThemeManager)
- Add InputDialog, Spinner common view
- Add DuplicatesCsvExportService
- Refresh views, dialogs, and view models across tabs
- Update localization strings (en/fr)
- Tweak services (transfer, permissions, search, user access, ownership elevation, bulk operations)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
v2.4.0
v2.4
v2.4.2
v2.4.1
v2.4.3
2026-04-20 11:23:11 +02:00
Dev
8f30a60d2a
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
2026-04-15 14:27:36 +02:00
kawa
6e05d26114
Update README.md
2026-04-15 14:27:31 +02:00
kawa
a257fbba0a
Update README.md
v2.3.1
2026-04-15 11:17:51 +02:00
Dev
b33c0769d4
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
2026-04-15 11:16:24 +02:00
Dev
fec5ae26e1
chore: clean repo for v2.0 publish
...
- Remove .planning/ (251 GSD planning files)
- Remove old PowerShell-era files (TODO.md, lang/, examples/)
- Remove accidentally tracked zip
- Rewrite README for .NET WPF app
- Update .gitignore
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-15 11:16:09 +02:00
kawa
bbfb9097ce
Mise a jour du readme
2026-04-15 11:15:20 +02:00
kawa
3abc39dbd5
Update README.md
2026-04-09 17:12:55 +02:00
Dev
d885431c90
chore: clean repo for v2.0 publish
...
- Remove .planning/ (251 GSD planning files)
- Remove old PowerShell-era files (TODO.md, lang/, examples/)
- Remove accidentally tracked zip
- Rewrite README for .NET WPF app
- Update .gitignore
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 17:08:49 +02:00
Dev
d656788a9b
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
2026-04-09 17:05:32 +02:00
Dev
cab8588569
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
...
Modified Gitignore
2026-04-09 17:05:07 +02:00
kawa
422b56ebbe
Delete release.ps1
2026-04-09 17:05:03 +02:00
kawa
d88b51fbff
Delete Sharepoint_ToolBox.ps1
2026-04-09 17:04:56 +02:00
Dev
53ae3681bf
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
2026-04-09 17:03:56 +02:00
Dev
06a3b5d512
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
...
Cleaned the repo
2026-04-09 17:03:45 +02:00
Dev
5ed2f801af
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
2.3
2026-04-09 16:48:32 +02:00
Dev
d8d25b967d
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
2026-04-09 16:48:28 +02:00
kawa
d41ff78e21
Delete Sharepoint_Settings.json
2026-04-09 16:47:44 +02:00
Dev
7af9bf2d5e
Merge branch 'main' of https://git.azuze.fr/kawa/Sharepoint-Toolbox
2026-04-09 16:46:44 +02:00
Dev
baa3c7562d
chore: prepare for v2.0 release
...
- Remove bin/obj/publish from git tracking
- Update .gitignore for .NET project (source only)
- Add release.ps1 local publish script (replaces Gitea workflow)
- Remove .gitea/workflows/release.yml
- Fix duplicate group names to show library names
- Fix HTML export to show Name column in duplicates report
- Fix consolidated permissions HTML to show folder/library names
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 16:46:37 +02:00
Dev
f41172c398
chore: prepare for v2.0 release
...
- Remove bin/obj/publish from git tracking
- Update .gitignore for .NET project (source only)
- Add release.ps1 local publish script (replaces Gitea workflow)
- Remove .gitea/workflows/release.yml
- Fix duplicate group names to show library names
- Fix HTML export to show Name column in duplicates report
- Fix consolidated permissions HTML to show folder/library names
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 16:42:12 +02:00
Dev
10e5ae9125
docs(phase-19): complete phase execution and verification
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 15:23:58 +02:00
Dev
5d0b5cf85e
docs(19-02): complete register/remove app UI plan
...
- 19-02-SUMMARY.md created
- STATE.md: progress 100%, decisions, session updated
- ROADMAP.md: phase 19 marked complete
- REQUIREMENTS.md: APPREG-01, APPREG-04, APPREG-05 marked complete
2026-04-09 15:20:55 +02:00
Dev
809ac8613b
feat(19-02): add app registration UI to profile dialog and 7 ViewModel tests
...
- ProfileManagementDialog.xaml: height 750, new Row 4 with Register/Remove buttons
- BooleanToVisibilityConverter added to Window.Resources
- Fallback instructions panel bound to ShowFallbackInstructions
- RegistrationStatus text block with StringToVisibilityConverter
- Buttons row shifted to Row 5
- ProfileManagementViewModelRegistrationTests: 7 unit tests, all passing
- ProfileManagementViewModelLogoTests: updated to 5-param constructor
2026-04-09 15:19:37 +02:00
Dev
42b5eda460
feat(19-02): add RegisterApp/RemoveApp commands, DI wiring, EN/FR localization
...
- ProfileManagementViewModel: IAppRegistrationService injected, RegisterAppCommand/RemoveAppCommand added
- IsRegistering, ShowFallbackInstructions, RegistrationStatus observable properties
- HasRegisteredApp computed property, CanRegisterApp/CanRemoveApp guards
- RegisterAppAsync: admin check, fallback panel, AppId persistence
- RemoveAppAsync: removal + MSAL clear + AppId null + persistence
- App.xaml.cs: IAppRegistrationService singleton registered
- Strings.resx/fr.resx: 16 new localization keys for register/remove/fallback flow
2026-04-09 15:17:53 +02:00
Dev
69c9d77be3
docs(19-01): complete AppRegistrationService plan execution
...
- 19-01-SUMMARY.md: service layer implementation with rollback pattern
- STATE.md: progress 98%, decisions added, session updated
- ROADMAP.md: phase 19 in-progress (1/2 plans)
- REQUIREMENTS.md: APPREG-02, APPREG-03, APPREG-06 marked complete
2026-04-09 15:15:16 +02:00
Dev
8083cdf7f5
test(19-01): add unit tests for AppRegistrationService and models
...
- AppRegistrationResult factory methods (Success/Failure/FallbackRequired)
- TenantProfile.AppId null default and JSON round-trip
- AppRegistrationService implements IAppRegistrationService
- BuildRequiredResourceAccess structure (2 resources, 4+1 scopes, all Scope type)
2026-04-09 15:14:02 +02:00
Dev
93dbb8c5b0
feat(19-01): add AppRegistrationService with rollback, model, and interface
...
- AppRegistrationResult discriminated result (Success/Failure/FallbackRequired)
- TenantProfile.AppId nullable string for storing registered app ID
- IAppRegistrationService interface (IsGlobalAdminAsync, RegisterAsync, RemoveAsync, ClearMsalSessionAsync)
- AppRegistrationService: sequential registration with rollback, transitiveMemberOf admin check, MSAL eviction
2026-04-09 15:12:51 +02:00
Dev
7d200ecf3f
docs(19): create phase plan for app registration and removal
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 14:48:49 +02:00
Dev
0d087ae4cd
docs(phase-19): add research and validation strategy
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 14:44:07 +02:00
Dev
bb3ba7b177
docs(phase-19): research app registration & removal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 14:43:00 +02:00
Dev
9549314f22
docs(phase-18): complete phase execution and verification
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 14:37:18 +02:00
Dev
04a5b267b7
docs(18-02): complete scan-loop elevation plan
...
- 18-02-SUMMARY.md: elevation logic, DataGrid visual, 8 new tests
- STATE.md: position advanced, decisions recorded, session updated
- ROADMAP.md: phase 18 marked complete (2/2 summaries)
- REQUIREMENTS.md: OWN-02 marked complete
2026-04-09 14:34:34 +02:00
Dev
2302cad531
feat(18-02): DataGrid visual differentiation + localization for elevated rows
...
- Add WasAutoElevated DataTrigger to DataGrid.RowStyle: amber background + tooltip
- Add warning icon (U+26A0) indicator column (width 24) before Object Type column
- Icon shown via DataTrigger on WasAutoElevated, hidden by default
- Add permissions.elevated.tooltip EN key to Strings.resx
- Add permissions.elevated.tooltip FR key to Strings.fr.resx
2026-04-09 14:33:00 +02:00
Dev
6270fe4605
feat(18-02): scan-loop elevation logic + PermissionsViewModel wiring + tests
...
- Add _settingsService and _ownershipService fields to PermissionsViewModel
- Add SettingsService? and IOwnershipElevationService? to both constructors
- Add DeriveAdminUrl internal static helper for admin URL derivation
- Add IsAccessDenied helper catching ServerUnauthorizedAccessException + WebException 403
- Add IsAutoTakeOwnershipEnabled async helper reading toggle from SettingsService
- Refactor RunOperationAsync with try/catch elevation pattern (read toggle before loop)
- Tag elevated entries with WasAutoElevated=true via record with expression
- Add PermissionsViewModelOwnershipTests (8 tests): toggle OFF propagates, toggle ON elevates+retries, no elevation on success, WasAutoElevated tagging, elevation throw propagates, DeriveAdminUrl theory
2026-04-09 14:31:58 +02:00
Dev
11e835f586
docs(18-01): complete auto-take-ownership settings foundation plan
...
- 18-01-SUMMARY.md: plan execution summary
- STATE.md: progress updated to 98%, decisions recorded, stopped-at updated
- ROADMAP.md: phase 18 marked in-progress (1/2 summaries)
- REQUIREMENTS.md: OWN-01 marked complete
2026-04-09 14:25:47 +02:00
Dev
20948e4bac
feat(18-01): SettingsView ownership checkbox + EN/FR localization keys
...
- SettingsView.xaml: Auto-Take Ownership section with CheckBox bound to AutoTakeOwnership
- Strings.resx: settings.ownership.title/auto/description keys (EN)
- Strings.fr.resx: matching French translations
2026-04-09 14:24:31 +02:00
Dev
36fb312b5a
feat(18-01): models, SettingsService, OwnershipElevationService + tests
...
- AppSettings.AutoTakeOwnership bool property defaulting to false
- PermissionEntry.WasAutoElevated optional param (default false, last position)
- SettingsService.SetAutoTakeOwnershipAsync persists toggle
- IOwnershipElevationService interface + OwnershipElevationService wrapping Tenant.SetSiteAdmin
- SettingsViewModel.AutoTakeOwnership property loads and persists via SetAutoTakeOwnershipAsync
- DI registration in App.xaml.cs (Phase 18 section)
- 8 new tests: models, persistence, service, viewmodel
2026-04-09 14:23:08 +02:00
Dev
3479fff4c3
docs(18): complete phase research, validation, and plans
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 14:17:00 +02:00
Dev
dbb59d119b
docs(18): create phase plan for auto-take-ownership
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 14:15:15 +02:00
Dev
997086cf07
docs(phase-17): complete phase execution and verification
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-09 13:13:46 +02:00
Dev
23ed46e614
docs(17-02): complete group expansion HTML reports plan
...
- 17-02-SUMMARY.md created
- STATE.md updated: session, decisions, progress
- ROADMAP.md: phase 17 marked complete (2/2 plans)
- REQUIREMENTS.md: RPT-01 marked complete
2026-04-09 13:11:21 +02:00
Dev
aab3aee3df
feat(17-02): wire ISharePointGroupResolver into PermissionsViewModel export flow
...
- Add _groupResolver field (ISharePointGroupResolver?) with constructor injection
- ISharePointGroupResolver added as optional last parameter in main constructor
- ExportHtmlAsync resolves SharePoint group names before calling WriteAsync
- Gracefully handles resolution failure with LogWarning, exports without expansion
- Both WriteAsync call sites pass groupMembers dict (standard and simplified paths)
2026-04-09 13:10:31 +02:00
Dev
07ed6e2515
feat(17-02): extend HtmlExportService with expandable group pills and toggleGroup JS
...
- Add optional groupMembers parameter to both BuildHtml overloads and WriteAsync methods
- SharePoint group pills render as expandable with onclick toggleGroup when groupMembers provided
- Hidden member sub-rows injected after parent row with resolved member names
- Empty member list renders 'members unavailable' fallback label
- toggleGroup JS function added to inline script block in both overloads
- filterTable updated to skip data-group sub-rows
- CSS for .group-expandable added to both overloads
- Backward compatibility: null groupMembers produces identical output to pre-Phase 17
2026-04-09 13:09:38 +02:00
Dev
c35ee76987
test(17-02): add failing tests for group pill expansion and backward compatibility
...
- BuildHtml_NoGroupMembers_IdenticalToDefault
- BuildHtml_WithGroupMembers_RendersExpandablePill
- BuildHtml_WithGroupMembers_RendersHiddenMemberSubRow
- BuildHtml_WithEmptyMemberList_RendersMembersUnavailable
- BuildHtml_ContainsToggleGroupJs
- BuildHtml_Simplified_WithGroupMembers_RendersExpandablePill
2026-04-09 13:07:46 +02:00
Dev
7bebbbcc02
docs(17-01): complete SharePointGroupResolver service plan - SUMMARY, STATE, ROADMAP updated
2026-04-09 13:06:16 +02:00
Dev
1aa0d15e9a
feat(17-01): register ISharePointGroupResolver in DI container (App.xaml.cs)
2026-04-09 13:05:09 +02:00
Dev
543b863283
feat(17-01): ResolvedMember model, ISharePointGroupResolver interface, SharePointGroupResolver CSOM+Graph implementation
...
- ResolvedMember record in Core/Models with DisplayName and Login
- ISharePointGroupResolver interface with ResolveGroupsAsync contract
- SharePointGroupResolver: CSOM group user loading + Graph transitive AAD resolution
- Internal static helpers IsAadGroup, ExtractAadGroupId, StripClaims (all green unit tests)
- Graceful error handling: exceptions return empty list per group, never throw
- OrdinalIgnoreCase result dict; lazy Graph client creation on first AAD group
2026-04-09 13:04:56 +02:00