|
1
|
|
|
<?php declare(strict_types=1); |
|
2
|
|
|
|
|
3
|
|
|
use Smr\Database; |
|
4
|
|
|
use Smr\DatabaseRecord; |
|
5
|
|
|
use Smr\Epoch; |
|
6
|
|
|
use Smr\Exceptions\AllianceInvitationNotFound; |
|
7
|
|
|
|
|
8
|
|
|
/** |
|
9
|
|
|
* Object interfacing with the alliance_invites_player table. |
|
10
|
|
|
*/ |
|
11
|
|
|
class SmrInvitation { |
|
12
|
|
|
|
|
13
|
|
|
private readonly int $allianceID; |
|
14
|
|
|
private readonly int $gameID; |
|
15
|
|
|
private readonly int $receiverAccountID; |
|
16
|
|
|
private readonly int $senderAccountID; |
|
17
|
|
|
private readonly int $messageID; |
|
18
|
|
|
private readonly int $expires; |
|
19
|
|
|
|
|
20
|
|
|
public static function send(int $allianceID, int $gameID, int $receiverAccountID, int $senderAccountID, int $messageID, int $expires): void { |
|
21
|
|
|
$db = Database::getInstance(); |
|
22
|
|
|
$db->insert('alliance_invites_player', [ |
|
23
|
|
|
'game_id' => $db->escapeNumber($gameID), |
|
24
|
|
|
'account_id' => $db->escapeNumber($receiverAccountID), |
|
25
|
|
|
'alliance_id' => $db->escapeNumber($allianceID), |
|
26
|
|
|
'invited_by_id' => $db->escapeNumber($senderAccountID), |
|
27
|
|
|
'expires' => $db->escapeNumber($expires), |
|
28
|
|
|
'message_id' => $db->escapeNumber($messageID), |
|
29
|
|
|
]); |
|
30
|
|
|
} |
|
31
|
|
|
|
|
32
|
|
|
/** |
|
33
|
|
|
* Get all unexpired invitations for the given alliance |
|
34
|
|
|
* |
|
35
|
|
|
* @return array<self> |
|
36
|
|
|
*/ |
|
37
|
|
|
public static function getAll(int $allianceID, int $gameID): array { |
|
38
|
|
|
// Remove any expired invitations |
|
39
|
|
|
$db = Database::getInstance(); |
|
40
|
|
|
$db->write('DELETE FROM alliance_invites_player WHERE expires < ' . $db->escapeNumber(Epoch::time())); |
|
41
|
|
|
|
|
42
|
|
|
$dbResult = $db->read('SELECT * FROM alliance_invites_player WHERE alliance_id=' . $db->escapeNumber($allianceID) . ' AND game_id=' . $db->escapeNumber($gameID)); |
|
43
|
|
|
$invites = []; |
|
44
|
|
|
foreach ($dbResult->records() as $dbRecord) { |
|
45
|
|
|
$invites[] = new self($dbRecord); |
|
46
|
|
|
} |
|
47
|
|
|
return $invites; |
|
48
|
|
|
} |
|
49
|
|
|
|
|
50
|
|
|
/** |
|
51
|
|
|
* Get the alliance invitation for a single recipient, if not expired |
|
52
|
|
|
*/ |
|
53
|
|
|
public static function get(int $allianceID, int $gameID, int $receiverAccountID): self { |
|
54
|
|
|
// Remove any expired invitations |
|
55
|
|
|
$db = Database::getInstance(); |
|
56
|
|
|
$db->write('DELETE FROM alliance_invites_player WHERE expires < ' . $db->escapeNumber(Epoch::time())); |
|
57
|
|
|
|
|
58
|
|
|
$dbResult = $db->read('SELECT * FROM alliance_invites_player WHERE alliance_id=' . $db->escapeNumber($allianceID) . ' AND game_id=' . $db->escapeNumber($gameID) . ' AND account_id=' . $db->escapeNumber($receiverAccountID)); |
|
59
|
|
|
if ($dbResult->hasRecord()) { |
|
60
|
|
|
return new self($dbResult->record()); |
|
61
|
|
|
} |
|
62
|
|
|
throw new AllianceInvitationNotFound(); |
|
63
|
|
|
} |
|
64
|
|
|
|
|
65
|
|
|
public function __construct(DatabaseRecord $dbRecord) { |
|
66
|
|
|
$this->allianceID = $dbRecord->getInt('alliance_id'); |
|
|
|
|
|
|
67
|
|
|
$this->gameID = $dbRecord->getInt('game_id'); |
|
|
|
|
|
|
68
|
|
|
$this->receiverAccountID = $dbRecord->getInt('account_id'); |
|
|
|
|
|
|
69
|
|
|
$this->senderAccountID = $dbRecord->getInt('invited_by_id'); |
|
|
|
|
|
|
70
|
|
|
$this->messageID = $dbRecord->getInt('message_id'); |
|
|
|
|
|
|
71
|
|
|
$this->expires = $dbRecord->getInt('expires'); |
|
|
|
|
|
|
72
|
|
|
} |
|
73
|
|
|
|
|
74
|
|
|
public function delete(): void { |
|
75
|
|
|
$db = Database::getInstance(); |
|
76
|
|
|
$db->write('DELETE FROM alliance_invites_player WHERE alliance_id=' . $db->escapeNumber($this->allianceID) . ' AND game_id=' . $db->escapeNumber($this->gameID) . ' AND account_id=' . $db->escapeNumber($this->receiverAccountID)); |
|
77
|
|
|
$db->write('DELETE FROM message WHERE message_id=' . $db->escapeNumber($this->messageID)); |
|
78
|
|
|
} |
|
79
|
|
|
|
|
80
|
|
|
public function getSender(): AbstractSmrPlayer { |
|
81
|
|
|
return SmrPlayer::getPlayer($this->senderAccountID, $this->gameID); |
|
82
|
|
|
} |
|
83
|
|
|
|
|
84
|
|
|
public function getReceiver(): AbstractSmrPlayer { |
|
85
|
|
|
return SmrPlayer::getPlayer($this->receiverAccountID, $this->gameID); |
|
86
|
|
|
} |
|
87
|
|
|
|
|
88
|
|
|
public function getExpires(): int { |
|
89
|
|
|
return $this->expires; |
|
90
|
|
|
} |
|
91
|
|
|
|
|
92
|
|
|
} |
|
93
|
|
|
|