User   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 141
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 16
eloc 37
c 2
b 0
f 0
dl 0
loc 141
rs 10

13 Methods

Rating   Name   Duplication   Size   Complexity  
A setIsAdministrator() 0 4 1
A setPassword() 0 3 2
A getPassword() 0 4 1
A __construct() 0 8 2
A isAdministrator() 0 3 1
A getName() 0 3 1
A setName() 0 3 1
A getEmail() 0 3 1
A setEmail() 0 3 1
A getPostsWithIds() 0 4 1
A setManager() 0 3 1
A getPosts() 0 10 2
A getManager() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace GraphQLTests\Doctrine\Blog\Model;
6
7
use Doctrine\Common\Collections\ArrayCollection;
8
use Doctrine\Common\Collections\Collection;
9
use Doctrine\ORM\Mapping as ORM;
10
use GraphQL\Doctrine\Attribute as API;
11
use GraphQLTests\Doctrine\Blog\Repository\UserRepository;
12
13
/**
14
 * A blog author or visitor.
15
 */
16
#[ORM\Entity(repositoryClass: UserRepository::class)]
17
final class User extends AbstractModel
18
{
19
    #[ORM\Column(name: 'custom_column_name', type: 'string', length: 50, options: ['default' => ''])]
20
    private string $name = '';
21
22
    #[ORM\Column(type: 'string', length: 50, nullable: true)]
23
    private ?string $email = null;
24
25
    #[ORM\Column(name: 'password', type: 'string', length: 255)]
26
    #[API\Exclude]
27
    private string $password;
28
29
    #[ORM\Column(type: 'boolean', options: ['default' => false])]
30
    private bool $isAdministrator = false;
31
32
    /**
33
     * @var Collection<int, Post>
34
     */
35
    #[ORM\OneToMany(targetEntity: Post::class, mappedBy: 'user')]
36
    private Collection $posts;
37
38
    /**
39
     * @var Collection<int, Post>
40
     */
41
    #[ORM\ManyToMany(targetEntity: Post::class)]
42
    private Collection $favoritePosts;
0 ignored issues
show
introduced by
The private property $favoritePosts is not used, and could be removed.
Loading history...
43
44
    #[ORM\ManyToOne(targetEntity: self::class)]
45
    private ?User $manager = null;
46
47
    /**
48
     * Constructor.
49
     */
50
    public function __construct(?int $id = null)
51
    {
52
        // This is a bad idea in real world, but we are just testing stuff here
53
        if ($id) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $id of type integer|null is loosely compared to true; this is ambiguous if the integer can be 0. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
54
            $this->id = $id;
55
        }
56
57
        $this->posts = new ArrayCollection();
58
    }
59
60
    /**
61
     * Set name.
62
     */
63
    public function setName(string $name): void
64
    {
65
        $this->name = $name;
66
    }
67
68
    /**
69
     * Get the user real name.
70
     */
71
    public function getName(): string
72
    {
73
        return $this->name;
74
    }
75
76
    /**
77
     * Set a valid email or null.
78
     */
79
    public function setEmail(?string $email): void
80
    {
81
        $this->email = $email;
82
    }
83
84
    /**
85
     * Get the validated email or null.
86
     */
87
    public function getEmail(): ?string
88
    {
89
        return $this->email;
90
    }
91
92
    /**
93
     * Encrypt and change the user password.
94
     */
95
    public function setPassword(string $password): void
96
    {
97
        $this->password = password_hash($password, PASSWORD_DEFAULT) ?: '';
98
    }
99
100
    /**
101
     * Returns the hashed password.
102
     */
103
    #[API\Exclude]
104
    public function getPassword(): string
105
    {
106
        return $this->password;
107
    }
108
109
    /**
110
     * Set whether the user is an administrator.
111
     */
112
    #[API\Exclude]
113
    public function setIsAdministrator(bool $isAdministrator): void
114
    {
115
        $this->isAdministrator = $isAdministrator;
116
    }
117
118
    /**
119
     * Get whether the user is an administrator.
120
     */
121
    public function isAdministrator(): bool
122
    {
123
        return $this->isAdministrator;
124
    }
125
126
    /**
127
     * Returns all posts of the specified status.
128
     *
129
     * @param null|string $status the status of posts as defined in \GraphQLTests\Doctrine\Blog\Model\Post
130
     */
131
    public function getPosts(
132
        #[API\Argument(type: '?GraphQLTests\Doctrine\Blog\Types\PostStatusType')]
133
        ?string $status = Post::STATUS_PUBLIC
134
    ): Collection {
135
        // Return unfiltered collection
136
        if ($status === null) {
137
            return $this->posts;
138
        }
139
140
        return $this->posts->filter(fn (Post $post) => $post->getStatus() === $status);
141
    }
142
143
    #[API\Field(type: 'GraphQLTests\Doctrine\Blog\Model\Post[]')]
144
    public function getPostsWithIds(#[API\Argument(type: 'id[]')] array $ids): Collection
145
    {
146
        return $this->posts->filter(fn (Post $post) => in_array($post->getId(), $ids, true));
147
    }
148
149
    public function setManager(?self $manager): void
150
    {
151
        $this->manager = $manager;
152
    }
153
154
    public function getManager(): ?self
155
    {
156
        return $this->manager;
157
    }
158
}
159