PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.15.0
GiveWP – Donation Plugin and Fundraising Platform v3.15.0
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 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / EventTickets / Repositories / EventRepository.php
give / src / EventTickets / Repositories Last commit date
EventRepository.php 2 years ago EventTicketRepository.php 2 years ago EventTicketTypeRepository.php 2 years ago
EventRepository.php
203 lines
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 3.6.0
51 *
52 * @throws Exception|InvalidArgumentException
53 */
54 public function insert(Event $event): void
55 {
56 $this->validate($event);
57
58 Hooks::doAction('givewp_events_event_creating', $event);
59
60 $createdDateTime = Temporal::withoutMicroseconds($event->createdAt ?: Temporal::getCurrentDateTime());
61
62 DB::query('START TRANSACTION');
63
64 try {
65 DB::table('give_events')
66 ->insert([
67 'title' => $event->title,
68 'description' => $event->description,
69 'start_datetime' => $event->startDateTime->format('Y-m-d H:i:s'),
70 'end_datetime' => $event->endDateTime ? $event->endDateTime->format('Y-m-d H:i:s') : null,
71 'ticket_close_datetime' => $event->ticketCloseDateTime ? $event->ticketCloseDateTime->format(
72 'Y-m-d H:i:s'
73 ) : null,
74 'created_at' => $createdDateTime->format('Y-m-d H:i:s'),
75 'updated_at' => $createdDateTime->format('Y-m-d H:i:s'),
76 ]);
77
78 $eventId = DB::last_insert_id();
79 } catch (Exception $exception) {
80 DB::query('ROLLBACK');
81
82 Log::error('Failed creating an event', compact('event'));
83
84 throw new $exception('Failed creating an event');
85 }
86
87 $event->id = $eventId;
88 $event->createdAt = $createdDateTime;
89 $event->updatedAt = $createdDateTime;
90
91 DB::query('COMMIT');
92
93 Hooks::doAction('givewp_events_event_created', $event);
94 }
95
96 /**
97 * @since 3.6.0
98 *
99 * @throws Exception|InvalidArgumentException
100 */
101 public function update(Event $event): void
102 {
103 $this->validate($event);
104
105 Hooks::doAction('givewp_events_event_updating', $event);
106
107 $updatedDateTime = Temporal::withoutMicroseconds(Temporal::getCurrentDateTime());
108
109 DB::query('START TRANSACTION');
110
111 try {
112 DB::table('give_events')
113 ->where('id', $event->id)
114 ->update([
115 'title' => $event->title,
116 'description' => $event->description,
117 'start_datetime' => $event->startDateTime->format('Y-m-d H:i:s'),
118 'end_datetime' => $event->endDateTime ? $event->endDateTime->format('Y-m-d H:i:s') : null,
119 'ticket_close_datetime' => $event->ticketCloseDateTime ? $event->ticketCloseDateTime->format(
120 'Y-m-d H:i:s'
121 ) : null,
122 'updated_at' => $updatedDateTime->format('Y-m-d H:i:s'),
123 ]);
124 } catch (Exception $exception) {
125 DB::query('ROLLBACK');
126
127 Log::error('Failed updating an event', compact('event'));
128
129 throw new $exception('Failed updating an event');
130 }
131
132 $event->updatedAt = $updatedDateTime;
133
134 DB::query('COMMIT');
135
136 Hooks::doAction('givewp_events_event_updated', $event);
137 }
138
139 /**
140 * @since 3.6.0
141 *
142 * @throws Exception
143 */
144 public function delete(Event $event): bool
145 {
146 DB::query('START TRANSACTION');
147
148 Hooks::doAction('givewp_events_event_deleting', $event);
149
150 try {
151 DB::table('give_events')
152 ->where('id', $event->id)
153 ->delete();
154 } catch (Exception $exception) {
155 DB::query('ROLLBACK');
156
157 Log::error('Failed deleting an event', compact('event'));
158
159 throw new $exception('Failed deleting an event');
160 }
161
162 DB::query('COMMIT');
163
164 Hooks::doAction('givewp_events_event_deleted', $event);
165
166 return true;
167 }
168
169 /**
170 * @since 3.6.0
171 */
172 private function validate(Event $event): void
173 {
174 foreach ($this->requiredProperties as $key) {
175 if (!isset($event->$key)) {
176 throw new InvalidArgumentException("'$key' is required.");
177 }
178 }
179 }
180
181 /**
182 * @since 3.6.0
183 *
184 * @return ModelQueryBuilder<Event>
185 */
186 public function prepareQuery(): ModelQueryBuilder
187 {
188 $builder = new ModelQueryBuilder(Event::class);
189
190 return $builder->from('give_events')
191 ->select(
192 'id',
193 'title',
194 'description',
195 'start_datetime',
196 'end_datetime',
197 'ticket_close_datetime',
198 'created_at',
199 'updated_at'
200 );
201 }
202 }
203