-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathJob.php
112 lines (93 loc) · 2.54 KB
/
Job.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
namespace SilverStripe\Snapshots\Migration;
use SilverStripe\Core\Environment;
use Symbiote\QueuedJobs\Services\AbstractQueuedJob;
use Symbiote\QueuedJobs\Services\QueuedJob;
if (!class_exists(AbstractQueuedJob::class)) {
return;
}
class Job extends AbstractQueuedJob
{
/**
* @var MigrationService
*/
private $migrator;
/**
* @var array
*/
private $classesToProcess = [];
/**
* @return void
*/
public function setup(): void
{
parent::setup();
Environment::increaseTimeLimitTo();
$this->addMessage('Prepping database...');
$this->getMigrator()->setup();
$this->classesToProcess = $this->migrator->getClassesToMigrate();
$this->currentStep = 0;
$this->totalSteps = sizeof($this->classesToProcess);
}
/**
* @return string
*/
public function getSignature(): string
{
return md5(static::class);
}
/**
* @return void
*/
public function process(): void
{
$remainingChildren = $this->classesToProcess;
$this->addMessage(sizeof($remainingChildren) . ' classes remaining');
if (count($remainingChildren) === 0) {
$this->isComplete = true;
return;
}
$baseClass = array_shift($remainingChildren);
$this->addMessage('Migrating ' . $baseClass);
$rows = $this->getMigrator()->migrate($baseClass);
$this->addMessage('Base ID ' . $this->getMigrator()->getBaseID());
$this->addMessage(sprintf('Migrated %d records', $rows));
$this->classesToProcess = $remainingChildren;
$this->currentStep += 1;
}
public function afterComplete(): void
{
parent::afterComplete();
$this->addMessage('Seeding relation tracking...');
$this->getMigrator()->seedRelationTracking();
$this->addMessage('Tearing down...');
$this->getMigrator()->tearDown();
}
/**
* @return string
*/
public function getTitle(): string
{
return _t(self::class . '.MIGRATE', 'Migrate versions tables to snapshots');
}
public function getJobType(): int
{
return QueuedJob::QUEUED;
}
/**
* @param MigrationService $migrator
* @return $this
*/
public function setMigrator(MigrationService $migrator): self
{
$this->migrator = $migrator;
return $this;
}
/**
* @return MigrationService
*/
public function getMigrator(): MigrationService
{
return $this->migrator;
}
}