@extends('layouts.admin') @section('title', 'Live dump import — '.config('app.name')) @section('page_title', 'Live dump & product files') @section('content')
Copies the live SQL dump and optional product file folder into this platform. Rows are upserted by the same IDs the live site uses — nothing is wiped, migrations are not reset, and the dump file is never modified. Prefer a dry run first.
@if ($errors->any())
@endif
1. SQL dump (partners, prices, AC requests, CMS, …)
@csrf
Best option for large dumps (avoids PHP upload limits). Current PHP upload cap: {{ $uploadMaxMb }} MB.
@if (count($suggestedDumps))
Detected dumps — click to fill path:
@foreach ($suggestedDumps as $dump) @endforeach
@endif
Only works if upload limit ≥ dump size. Uploads go to storage/app/migration/uploads/.

2. Product / download files (optional, same run)

Copy the live downloads/ tree onto this machine, then point here. Extra files not listed in the dump files table are registered so partners can download them.

Leave blank to import SQL only. Default disk is DOWNLOADS_PATH (sibling downloads/ folder).
@if (count($suggestedFileFolders))
Detected folders — click to fill path:
@foreach ($suggestedFileFolders as $folder) @endforeach
@endif
Domains
contains('all'))>
@foreach ($domains as $domain)
contains($domain))>
@endforeach
Marketing HTML helpers (not in the SQL dump)

Company/product marketing HTML lives in PHP files on disk, not in MySQL. Run these after you copy the old site tree.

@csrf
What this does / does not

Updates safely: partners, catalog/prices, activations, downloads metadata + files on disk, support, territories, CMS DB pages, webinars, blacklist.

Skipped from the dump: rollups, office holidays, phpBB, sessions, visit counters, WordPress, theme/design, mobile API tokens.

Does not break: no migrate:fresh, no delete of portal schema, no overwrite of app code. Re-runs refresh rows by live IDs (login, product id, reqid, …).

@if ($lastRun)
Last run
@if (!empty($lastRun['ok'])) OK @else Failed @endif
When
{{ $lastRun['finished_at'] ?? $lastRun['at'] ?? '—' }}
Mode
{{ !empty($lastRun['dry_run']) ? 'Dry run' : 'Write' }}
Domains
{{ implode(', ', $lastRun['domains'] ?? []) }}
Dump
{{ $lastRun['dump'] ?? '—' }}
Files
{{ $lastRun['files_root'] ?? '—' }}
@if (!empty($lastRun['error']))
{{ $lastRun['error'] }}
@endif @if (!empty($lastRun['summary'])) @foreach ($lastRun['summary'] as $domain => $row) @endforeach
DomainInUpdSkipErr
{{ $domain }} {{ $row['imported'] }} {{ $row['updated'] }} {{ $row['skipped'] }} {{ $row['errors'] }}
@endif @if (!empty($lastRun['disk_register']))

Disk register: scanned={{ $lastRun['disk_register']['scanned'] ?? 0 }} new={{ $lastRun['disk_register']['registered'] ?? 0 }} existing={{ $lastRun['disk_register']['skipped_existing'] ?? 0 }}

@endif @if (!empty($lastRun['files']))

File inventory: present={{ $lastRun['files']['present'] ?? 0 }} missing={{ $lastRun['files']['missing'] ?? 0 }}

@endif @if (!empty($lastRun['diffs']))
Reconcile DIFF (often expected: seed users, extra disk files, static CMS pages):
    @foreach ($lastRun['diffs'] as $table => $row)
  • {{ $table }} source={{ $row['legacy'] ?? 'n/a' }} portal={{ $row['portal'] }}
  • @endforeach
@endif
@endif @if (count($recentReports))
Recent reports
    @foreach ($recentReports as $report)
  • {{ $report['name'] }} {{ $report['mtime'] }}
  • @endforeach
Stored under storage/app/migration/
@endif
@endsection