Avoid creating separate admin panel sections for each extension.
All custom settings go under the existing "התאמה אישית" section.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ListBackups API now returns snapshots alongside backups
- DeleteBackup API accepts snapshot- prefixed names
- New "Database Snapshots" panel in admin UI with delete buttons
- i18n: English + Hebrew translations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Read column metadata (type, nullable, default) from SHOW COLUMNS and
coerce values accordingly: empty string/false → 0 for NOT NULL numeric
columns, null for nullable ones. Fixes is_internal import error.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
MySQL strict mode rejects empty string '' for integer columns like
is_internal. Convert '' and false to null before SQL insert.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When importing entities with autoincrement (Case, Charge, Invoice),
validate each column exists in the target table before inserting.
Columns from modules not installed on the target are silently skipped
and reported in the import log summary.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add --ssl=false and --no-tablespaces flags to handle Docker MySQL
connections with self-signed certificates.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix: replace QueryComposer::toDb() (protected) with camelCaseToUnderscore
for table name resolution — was causing 500 on real import
- Feat: optional database snapshot (mysqldump) before import with UI checkbox
(checked by default). Snapshot saved to data/backups/snapshot-{timestamp}/
- Feat: skip entity types whose module is not installed (import resilience)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Allows importing only database records without restoring attachment
files. Useful when migrating data between instances.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prevents 500 error when importing a backup that contains entities
(e.g. SignatureRequest) from modules not installed on the target instance.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move Data Migration from system section to unified "Custom Development"
section shared by all custom extensions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Without __APPEND__, the itemList replaced all existing system admin
panel entries instead of adding to them.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Admin panel page at #Admin/dataMigration with two-column layout
- Export: filter by case status, skip attachments option, progress + log
- Import: select backup, preserve IDs / skip duplicates, dry run support
- List/delete existing backups with full manifest details
- 5 API endpoints (status, export, import, listBackups, deleteBackup)
- BufferedIO adapter to capture CLI output for API responses
- Admin-only access on all endpoints
- i18n: English + Hebrew (fa_IR) translations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Full case data migration tool with 3 console commands:
- data-migration-export: exports all case-related entities (27 types) + files
- data-migration-import: restores backup to target DB with dry-run support
- data-migration-status: shows entity counts from live DB or backup
Supports preserve-ids, skip-duplicates, batch processing, and attachment
file copying. Imports with hooks disabled to prevent side effects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>