PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.18.0
GiveWP – Donation Plugin and Fundraising Platform v4.18.0
4.18.0 4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 All 257 releases
give / src / EventTickets / Repositories / EventRepository.php

EventRepository.php in GiveWP – Donation Plugin and Fundraising Platform 4.18.0, at src/EventTickets/Repositories/EventRepository.php

206 lines 5.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\EventTickets\Repositories;
4
5 use Give\EventTickets\Models\Event;
6 use Give\Framework\Database\DB;
7 use Give\Framework\Exceptions\Primitives\Exception;
8 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
9 use Give\Framework\Models\ModelQueryBuilder;
10 use Give\Framework\Support\Facades\DateTime\Temporal;
11 use Give\Helpers\Hooks;
12 use Give\Log\Log;
13
14 /**
15 * @since 3.6.0
16 */
17 class EventRepository
18 {
19
20 /**
21 * @since 3.6.0
22 *
23 * @var string[]
24 */
25 private $requiredProperties = [
26 'title',
27 'startDateTime',
28 ];
29
30 /**
31 * @since 3.6.0
32 */
33 public function getById(int $id): ?Event
34 {
35 return $this->prepareQuery()
36 ->where('id', $id)
37 ->get();
38 }
39
40 /**
41 * @since 3.6.0
42 */
43 public function queryById(int $id): ModelQueryBuilder
44 {
45 return $this->prepareQuery()
46 ->where('id', $id);
47 }
48
49 /**
50 * @since 4.18.0 Keep the original error as the previous exception when the write fails.
51 * @since 3.6.0
52 *
53 * @throws Exception|InvalidArgumentException
54 */
55 public function insert(Event $event): void
56 {
57 $this->validate($event);
58
59 Hooks::doAction('givewp_events_event_creating', $event);
60
61 $createdDateTime = Temporal::withoutMicroseconds($event->createdAt ?: Temporal::getCurrentDateTime());
62
63 DB::query('START TRANSACTION');
64
65 try {
66 DB::table('give_events')
67 ->insert([
68 'title' => $event->title,
69 'description' => $event->description,
70 'start_datetime' => $event->startDateTime->format('Y-m-d H:i:s'),
71 'end_datetime' => $event->endDateTime ? $event->endDateTime->format('Y-m-d H:i:s') : null,
72 'ticket_close_datetime' => $event->ticketCloseDateTime ? $event->ticketCloseDateTime->format(
73 'Y-m-d H:i:s'
74 ) : null,
75 'created_at' => $createdDateTime->format('Y-m-d H:i:s'),
76 'updated_at' => $createdDateTime->format('Y-m-d H:i:s'),
77 ]);
78
79 $eventId = DB::last_insert_id();
80 } catch (Exception $exception) {
81 DB::query('ROLLBACK');
82
83 Log::error('Failed creating an event', compact('event'));
84
85 throw new Exception('Failed creating an event', 0, $exception);
86 }
87
88 $event->id = $eventId;
89 $event->createdAt = $createdDateTime;
90 $event->updatedAt = $createdDateTime;
91
92 DB::query('COMMIT');
93
94 Hooks::doAction('givewp_events_event_created', $event);
95 }
96
97 /**
98 * @since 4.18.0 Keep the original error as the previous exception when the write fails.
99 * @since 3.6.0
100 *
101 * @throws Exception|InvalidArgumentException
102 */
103 public function update(Event $event): void
104 {
105 $this->validate($event);
106
107 Hooks::doAction('givewp_events_event_updating', $event);
108
109 $updatedDateTime = Temporal::withoutMicroseconds(Temporal::getCurrentDateTime());
110
111 DB::query('START TRANSACTION');
112
113 try {
114 DB::table('give_events')
115 ->where('id', $event->id)
116 ->update([
117 'title' => $event->title,
118 'description' => $event->description,
119 'start_datetime' => $event->startDateTime->format('Y-m-d H:i:s'),
120 'end_datetime' => $event->endDateTime ? $event->endDateTime->format('Y-m-d H:i:s') : null,
121 'ticket_close_datetime' => $event->ticketCloseDateTime ? $event->ticketCloseDateTime->format(
122 'Y-m-d H:i:s'
123 ) : null,
124 'updated_at' => $updatedDateTime->format('Y-m-d H:i:s'),
125 ]);
126 } catch (Exception $exception) {
127 DB::query('ROLLBACK');
128
129 Log::error('Failed updating an event', compact('event'));
130
131 throw new Exception('Failed updating an event', 0, $exception);
132 }
133
134 $event->updatedAt = $updatedDateTime;
135
136 DB::query('COMMIT');
137
138 Hooks::doAction('givewp_events_event_updated', $event);
139 }
140
141 /**
142 * @since 4.18.0 Keep the original error as the previous exception when the write fails.
143 * @since 3.6.0
144 *
145 * @throws Exception
146 */
147 public function delete(Event $event): bool
148 {
149 DB::query('START TRANSACTION');
150
151 Hooks::doAction('givewp_events_event_deleting', $event);
152
153 try {
154 DB::table('give_events')
155 ->where('id', $event->id)
156 ->delete();
157 } catch (Exception $exception) {
158 DB::query('ROLLBACK');
159
160 Log::error('Failed deleting an event', compact('event'));
161
162 throw new Exception('Failed deleting an event', 0, $exception);
163 }
164
165 DB::query('COMMIT');
166
167 Hooks::doAction('givewp_events_event_deleted', $event);
168
169 return true;
170 }
171
172 /**
173 * @since 3.6.0
174 */
175 private function validate(Event $event): void
176 {
177 foreach ($this->requiredProperties as $key) {
178 if (!isset($event->$key)) {
179 throw new InvalidArgumentException("'$key' is required.");
180 }
181 }
182 }
183
184 /**
185 * @since 3.6.0
186 *
187 * @return ModelQueryBuilder<Event>
188 */
189 public function prepareQuery(): ModelQueryBuilder
190 {
191 $builder = new ModelQueryBuilder(Event::class);
192
193 return $builder->from('give_events')
194 ->select(
195 'id',
196 'title',
197 'description',
198 'start_datetime',
199 'end_datetime',
200 'ticket_close_datetime',
201 'created_at',
202 'updated_at'
203 );
204 }
205 }
206