PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 3.12.0
GiveWP – Donation Plugin and Fundraising Platform v3.12.0
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 2.3.2 2.30.0 2.31.0 2.31.1 All 253 releases
give / src / EventTickets / Models / Event.php
Event.php
169 lines 4.6 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\Models;
4
5 use DateTime;
6 use Give\DonationForms\Models\DonationForm;
7 use Give\EventTickets\Factories\EventFactory;
8 use Give\EventTickets\Repositories\EventRepository;
9 use Give\EventTickets\Repositories\EventTicketRepository;
10 use Give\EventTickets\Repositories\EventTicketTypeRepository;
11 use Give\Framework\Exceptions\Primitives\Exception;
12 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
13 use Give\Framework\Models\Contracts\ModelCrud;
14 use Give\Framework\Models\Model;
15 use Give\Framework\Models\ModelQueryBuilder;
16 use Give\Framework\Models\ValueObjects\Relationship;
17 use Give\Framework\Support\Facades\DateTime\Temporal;
18
19 /**
20 * @since 3.6.0
21 */
22 class Event extends Model implements ModelCrud /*, ModelHasFactory */
23 {
24 /**
25 * @inheritdoc
26 */
27 protected $properties = [
28 'id' => 'int',
29 'title' => 'string',
30 'description' => 'string',
31 'startDateTime' => DateTime::class,
32 'endDateTime' => DateTime::class,
33 'ticketCloseDateTime' => DateTime::class,
34 'createdAt' => DateTime::class,
35 'updatedAt' => DateTime::class,
36 ];
37
38 /**
39 * @inheritdoc
40 */
41 protected $relationships = [
42 'tickets' => Relationship::HAS_MANY,
43 'ticketTypes' => Relationship::HAS_MANY,
44 'forms' => Relationship::BELONGS_TO_MANY,
45 ];
46
47 /**
48 * @since 3.6.0
49 *
50 * @return Event|null
51 */
52 public static function find($id)
53 {
54 return give(EventRepository::class)->getById($id);
55 }
56
57
58 /**
59 * @since 3.6.0
60 *
61 * @return $this
62 * @throws Exception|InvalidArgumentException
63 */
64 public static function create(array $attributes): Event
65 {
66 $event = new static($attributes);
67
68 give(EventRepository::class)->insert($event);
69
70 return $event;
71 }
72
73 /**
74 * @since 3.6.0
75 *
76 * @return void
77 * @throws Exception|InvalidArgumentException
78 */
79 public function save()
80 {
81 if (!$this->id) {
82 give(EventRepository::class)->insert($this);
83 } else{
84 give(EventRepository::class)->update($this);
85 }
86 }
87
88 /**
89 * @since 3.6.0
90 *
91 * @throws Exception|InvalidArgumentException
92 */
93 public function delete(): bool
94 {
95 return give(EventRepository::class)->delete($this);
96 }
97
98 /**
99 * @since 3.6.0
100 *
101 * @return ModelQueryBuilder<Event>
102 */
103 public static function query(): ModelQueryBuilder
104 {
105 return give(EventRepository::class)->prepareQuery();
106 }
107
108 /**
109 * @since 3.6.0
110 *
111 * @return ModelQueryBuilder<EventTicketType>
112 */
113 public function ticketTypes(): ModelQueryBuilder
114 {
115 return give(EventTicketTypeRepository::class)->queryByEventId($this->id);
116 }
117
118 /**
119 * @since 3.6.0
120 *
121 * @return ModelQueryBuilder<EventTicket>
122 */
123 public function eventTickets(): ModelQueryBuilder
124 {
125 return give(EventTicketRepository::class)->queryByEventId($this->id);
126 }
127
128 public function forms(): ModelQueryBuilder
129 {
130 $eventIdPattern = sprintf('"eventId":%s', $this->id);
131
132 return DonationForm::query()
133 ->whereLike('give_formmeta_attach_meta_fields.meta_value', '%"name":"givewp/event-tickets"%')
134 ->where(function($query) use ($eventIdPattern) {
135 $query->whereLike('give_formmeta_attach_meta_fields.meta_value', "%$eventIdPattern}%") // When the eventId is the only block attribute.
136 ->orWhereLike('give_formmeta_attach_meta_fields.meta_value', "%$eventIdPattern,%"); // When the eventId is the NOT only block attribute.
137 });
138 }
139
140 /**
141 * @since 3.6.0
142 *
143 * @param object $object
144 */
145 public static function fromQueryBuilderObject($object): Event
146 {
147 return new Event([
148 'id' => (int)$object->id,
149 'title' => (string)$object->title,
150 'description' => (string)$object->description,
151 'startDateTime' => $object->start_datetime ? Temporal::toDateTime($object->start_datetime) : null,
152 'endDateTime' => $object->end_datetime ? Temporal::toDateTime($object->end_datetime) : null,
153 'ticketCloseDateTime' => $object->ticket_close_datetime ? Temporal::toDateTime(
154 $object->ticket_close_datetime
155 ) : null,
156 'createdAt' => Temporal::toDateTime($object->created_at),
157 'updatedAt' => Temporal::toDateTime($object->updated_at),
158 ]);
159 }
160
161 /**
162 * @since 3.6.0
163 */
164 public static function factory(): EventFactory
165 {
166 return new EventFactory(static::class);
167 }
168 }
169