Skip to content

Commit 52df13a

Browse files
authored
Fix issues with importing and exporting forms (#390)
* Ensure shouldimport doesnt run multiple times * Fix import issues * Fix exports too
1 parent d5874bb commit 52df13a

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

src/Commands/ExportForms.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@
99
use Statamic\Contracts\Forms\Form as FormContract;
1010
use Statamic\Contracts\Forms\FormRepository as FormRepositoryContract;
1111
use Statamic\Contracts\Forms\Submission as SubmissionContract;
12+
use Statamic\Contracts\Forms\SubmissionRepository as SubmissionRepositoryContract;
1213
use Statamic\Eloquent\Forms\Form;
1314
use Statamic\Eloquent\Forms\FormRepository;
1415
use Statamic\Eloquent\Forms\Submission;
16+
use Statamic\Eloquent\Forms\SubmissionRepository;
1517
use Statamic\Forms\Form as StacheForm;
1618
use Statamic\Forms\FormRepository as StacheFormRepository;
1719
use Statamic\Forms\Submission as StacheSubmission;
20+
use Statamic\Stache\Repositories\SubmissionRepository as StacheSubmissionRepository;
1821
use Statamic\Statamic;
1922

2023
class ExportForms extends Command
@@ -55,10 +58,15 @@ public function handle()
5558
private function usingDefaultRepositories(Closure $callback)
5659
{
5760
Facade::clearResolvedInstance(FormContract::class);
61+
Facade::clearResolvedInstance(FormRepositoryContract::class);
5862
Facade::clearResolvedInstance(SubmissionContract::class);
63+
Facade::clearResolvedInstance(SubmissionRepositoryContract::class);
5964

6065
app()->bind(FormContract::class, Form::class);
66+
app()->bind(FormRepositoryContract::class, FormRepository::class);
6167
app()->bind(SubmissionContract::class, Submission::class);
68+
app()->bind(SubmissionRepositoryContract::class, SubmissionRepository::class);
69+
app()->bind(\Statamic\Contracts\Forms\SubmissionQueryBuilder::class, \Statamic\Eloquent\Forms\SubmissionQueryBuilder::class);
6270

6371
$callback();
6472
}
@@ -78,10 +86,12 @@ private function exportForms()
7886
->honeypot($form->honeypot());
7987

8088
Statamic::repository(FormRepositoryContract::class, StacheFormRepository::class);
89+
Facade::clearResolvedInstance(SubmissionRepositoryContract::class);
8190

8291
$newForm->save();
8392

8493
Statamic::repository(FormRepositoryContract::class, FormRepository::class);
94+
Facade::clearResolvedInstance(SubmissionRepositoryContract::class);
8595

8696
$form->submissions()->each(function ($submission) use ($newForm) {
8797
$id = $submission->date()->getPreciseTimestamp(4);
@@ -92,7 +102,13 @@ private function exportForms()
92102
->form($newForm)
93103
->data($submission->data());
94104

105+
Statamic::repository(SubmissionRepositoryContract::class, StacheSubmissionRepository::class);
106+
Facade::clearResolvedInstance(SubmissionRepositoryContract::class);
107+
95108
$newSubmission->save();
109+
110+
Statamic::repository(SubmissionRepositoryContract::class, SubmissionRepository::class);
111+
Facade::clearResolvedInstance(SubmissionRepositoryContract::class);
96112
});
97113
});
98114

src/Commands/ImportForms.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
use Illuminate\Support\Facades\Facade;
88
use Statamic\Console\RunsInPlease;
99
use Statamic\Contracts\Forms\Form as FormContract;
10+
use Statamic\Contracts\Forms\FormRepository as FormRepositoryContract;
1011
use Statamic\Contracts\Forms\Submission as SubmissionContract;
12+
use Statamic\Contracts\Forms\SubmissionRepository as SubmissionRepositoryContract;
1113
use Statamic\Eloquent\Forms\Form;
1214
use Statamic\Facades\File;
1315
use Statamic\Forms\Form as StacheForm;
1416
use Statamic\Forms\FormRepository;
1517
use Statamic\Forms\Submission as StacheSubmission;
18+
use Statamic\Stache\Repositories\SubmissionRepository;
1619

1720
class ImportForms extends Command
1821
{
@@ -50,26 +53,33 @@ public function handle(): int
5053
private function useDefaultRepositories(): void
5154
{
5255
Facade::clearResolvedInstance(FormContract::class);
56+
Facade::clearResolvedInstance(FormRepositoryContract::class);
5357
Facade::clearResolvedInstance(SubmissionContract::class);
58+
Facade::clearResolvedInstance(SubmissionRepositoryContract::class);
5459

5560
app()->bind(FormContract::class, StacheForm::class);
61+
app()->bind(FormRepositoryContract::class, FormRepository::class);
5662
app()->bind(SubmissionContract::class, StacheSubmission::class);
57-
app()->bind(\Statamic\Eloquent\Forms\SubmissionQueryBuilder::class, \Statamic\Stache\Query\SubmissionQueryBuilder::class);
63+
app()->bind(SubmissionRepositoryContract::class, SubmissionRepository::class);
64+
app()->bind(\Statamic\Contracts\Forms\SubmissionQueryBuilder::class, \Statamic\Stache\Query\SubmissionQueryBuilder::class);
5865
}
5966

6067
private function importForms(): void
6168
{
62-
$this->withProgressBar((new FormRepository)->all(), function ($form) {
63-
if ($this->shouldImportForms()) {
69+
$shouldImportForms = $this->shouldImportForms();
70+
$shouldImportSubmissions = $this->shouldImportFormSubmissions();
71+
72+
$this->withProgressBar((new FormRepository)->all(), function ($form) use ($shouldImportForms, $shouldImportSubmissions) {
73+
if ($shouldImportForms) {
6474
$lastModified = Carbon::createFromTimestamp(File::lastModified($form->path()));
6575

6676
Form::makeModelFromContract($form)
6777
->fill(['created_at' => $lastModified, 'updated_at' => $lastModified])
6878
->save();
6979
}
7080

71-
if ($this->shouldImportFormSubmissions()) {
72-
$form->submissions()->each(function ($submission) use ($form) {
81+
if ($shouldImportSubmissions) {
82+
$form->querySubmissions()->lazy()->each(function ($submission) use ($form) {
7383
$timestamp = app('statamic.eloquent.form_submissions.model')::make()->fromDateTime($submission->date());
7484

7585
app('statamic.eloquent.form_submissions.model')::firstOrNew(['created_at' => $timestamp])

0 commit comments

Comments
 (0)