-
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathUserMigrator.php
127 lines (104 loc) · 2.95 KB
/
UserMigrator.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
namespace Statamic\Migrator;
use Illuminate\Support\Facades\Validator;
use Statamic\Migrator\Exceptions\InvalidEmailException;
class UserMigrator extends Migrator
{
use Concerns\GetsSettings,
Concerns\MigratesContent,
Concerns\MigratesFile,
Concerns\MigratesRoles,
Concerns\MigratesFieldsetsToBlueprints,
Concerns\ThrowsFinalWarnings;
protected $user;
protected $fieldset;
/**
* Perform migration.
*/
public function migrate()
{
$this
->parseUser()
->validateEmail()
->setNewPathWithEmailAsHandle()
->validateUnique()
->migrateUserSchema()
->saveMigratedYaml($this->user)
->migrateFieldset()
->throwFinalWarnings();
}
/**
* Parse user.
*
* @return $this
*/
protected function parseUser()
{
$this->user = $this->getSourceYaml("users/{$this->handle}.yaml");
if ($this->getSetting('users.login_type') === 'email') {
$this->user['email'] = $this->handle;
}
$this->fieldset = $this->files->exists($this->sitePath('settings/fieldsets/user.yaml'));
return $this;
}
/**
* Validate email is present on user to be used as new handle.
*
* @return $this
*
* @throws EmailRequiredException
*/
protected function validateEmail()
{
if (Validator::make($this->user, ['email' => 'required|email'])->fails()) {
throw new InvalidEmailException("A valid email is required to migrate user [{$this->handle}].");
}
return $this;
}
/**
* Set new path to be used with new email handle.
*
* @return $this
*/
protected function setNewPathWithEmailAsHandle()
{
$email = $this->user['email'];
$this->newPath = base_path("users/{$email}.yaml");
return $this;
}
/**
* Migrate default v2 user schema to new schema.
*
* @return $this
*/
protected function migrateUserSchema()
{
$user = collect($this->user);
if ($user->has('first_name') || $user->has('last_name')) {
$user['name'] = $user->only('first_name', 'last_name')->filter()->implode(' ');
}
if ($user->has('roles')) {
$user['roles'] = $this->migrateRoles($user['roles']);
}
if ($user->has('groups')) {
$user['groups'] = $this->migrateGroups($user['groups']);
}
$user = $user->except('first_name', 'last_name', 'email')->all();
$this->user = $this->fieldset
? $this->migrateContent($user, 'user', false)
: $user;
return $this;
}
/**
* Migrate fieldset.
*
* @return $this
*/
protected function migrateFieldset()
{
if ($this->fieldset) {
$this->migrateFieldsetToBlueprint(null, 'user');
}
return $this;
}
}