PluginProbe ʕ •ᴥ•ʔ
FAPI Member / trunk
FAPI Member vtrunk
2.2.33 2.2.32 trunk 1.9.47 2.1.18 2.2.24 2.2.25 2.2.26 2.2.28 2.2.29 2.2.30 2.2.31
fapi-member / src / Model / Membership.php
fapi-member / src / Model Last commit date
Enums 1 year ago ApiConnection.php 1 year ago MemberLevel.php 2 years ago MemberSection.php 1 year ago Membership.php 1 year ago MembershipChange.php 1 year ago Page.php 1 year ago Settings.php 2 years ago User.php 1 year ago
Membership.php
105 lines
1 <?php declare(strict_types=1);
2
3 namespace FapiMember\Model;
4
5 use DateTimeImmutable;
6 use FapiMember\Model\Enums\Format;
7 use FapiMember\Library\SmartEmailing\Types\BoolType;
8 use FapiMember\Utils\DateTimeHelper;
9 use FapiMember\Utils\DateTimesImmutable;
10 use FapiMember\Library\SmartEmailing\Types\IntType;
11
12 class Membership
13 {
14 private int $levelId;
15 private int $userId;
16 private DateTimeImmutable|null $registered;
17 private DateTimeImmutable|null $until;
18 private bool $isUnlimited;
19
20 public function __construct($data)
21 {
22 $this->levelId = IntType::extract($data, 'level_id');
23 $this->userId = IntType::extract($data, 'user_id');
24 $this->registered = DateTimesImmutable::extractOrNull($data, 'registered');
25 $this->until = DateTimesImmutable::extractOrNull($data, 'until');
26 $this->isUnlimited = BoolType::extractOrNull($data, 'is_unlimited') ?? false;
27 }
28
29 public function getLevelId(): int
30 {
31 return $this->levelId;
32 }
33
34 public function getUserId(): int
35 {
36 return $this->userId;
37 }
38
39 public function getRegistered(): DateTimeImmutable|null
40 {
41 return $this->registered;
42 }
43
44 public function getUntil(): DateTimeImmutable|null
45 {
46 return $this->until;
47 }
48
49 public function isUnlimited(): bool
50 {
51 return $this->isUnlimited;
52 }
53
54 public function setRegistered(DateTimeImmutable|null $registered): void
55 {
56 $this->registered = DateTimesImmutable::fromOrNull($registered);
57 }
58
59 public function setUntil(DateTimeImmutable|null $until): void
60 {
61 $this->until = DateTimesImmutable::fromOrNull($until);
62 }
63
64 public function setIsUnlimited(bool $isUnlimited): void
65 {
66 $this->isUnlimited = BoolType::fromOrNull($isUnlimited);
67 }
68
69 /**
70 * @return array<mixed>
71 */
72 public function jsonSerialize(): array
73 {
74 return array(
75 'level' => $this->levelId,
76 'registered' => $this->registered->format(Format::DATE_TIME) ?? null,
77 'until' => $this->until?->format(Format::DATE_TIME) ?? null,
78 'isUnlimited' => $this->isUnlimited,
79 );
80 }
81
82 public function toMembershipChange(string $type, DateTimeImmutable|null $timestamp = null): MembershipChange
83 {
84 return new MembershipChange([
85 'level_id' => $this->levelId,
86 'user_id' => $this->userId,
87 'type' => $type,
88 'registered' => $this->registered?->format(Format::DATE_TIME_BASIC),
89 'until' => $this->until?->format(Format::DATE_TIME_BASIC),
90 'timestamp' => $timestamp?->format(Format::DATE_TIME_BASIC),
91 ]);
92 }
93
94 public function toArray(): array
95 {
96 return [
97 'level' => $this->levelId,
98 'user_id' => $this->userId,
99 'registered' => $this->registered->format(Format::DATE_TIME) ?? null,
100 'until' => $this->until?->format(Format::DATE_TIME) ?? null,
101 'is_unlimited' => $this->isUnlimited,
102 ];
103 }
104 }
105