Completed
Branch master (7f6804)
by Simon
01:23
created

CreateMemberMutationCreator::args()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 10
Ratio 100 %

Importance

Changes 0
Metric Value
dl 10
loc 10
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 0
1
<?php
2
3
namespace MySite\GraphQL;
4
5
use Firesphere\GraphQLJWT\JWTAuthenticator;
6
use GraphQL\Type\Definition\ResolveInfo;
7
use GraphQL\Type\Definition\Type;
8
use SilverStripe\Core\Injector\Injector;
9
use SilverStripe\GraphQL\MutationCreator;
10
use SilverStripe\GraphQL\OperationResolver;
11
use SilverStripe\Security\Member;
12
13
class CreateMemberMutationCreator extends MutationCreator implements OperationResolver
14
{
15
    public function attributes()
16
    {
17
        return [
18
            'name'        => 'createMember',
19
            'description' => 'Creates a member without permissions or group assignments'
20
        ];
21
    }
22
23
    public function type()
24
    {
25
        return $this->manager->getType('member');
26
    }
27
28
    public function args()
29
    {
30
        return [
31
            'FirstName' => ['type' => Type::string()],
32
            'Surname'   => ['type' => Type::string()],
33
            'Email'     => ['type' => Type::nonNull(Type::string())],
34
            'Password'  => ['type' => Type::nonNull(Type::string())],
35
            'Token'     => ['type' => Type::string()]
36
        ];
37
    }
38
39
    public function resolve($object, array $args, $context, ResolveInfo $info)
40
    {
41
        if (!Member::get()->filter(['Email' => $args['Email']])->count()) {
42
            /** @var Member $member */
43
            $member = Member::create($args);
44
            $id = $member->write();
45
            $member->ID = $id;
46
            $token = Injector::inst()->get(JWTAuthenticator::class)->generateToken($member);
47
            $member->Token = $token;
48
            $member->addToGroupByCode('administrators');
49
        } else {
50
            // Return an empty member. This makes it easier to capture an error
51
            $member = Member::create();
52
        }
53
54
        return $member;
55
    }
56
}
57