PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.2.1
GiveWP – Donation Plugin and Fundraising Platform v4.2.1
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 / Models / Event.php
give / src / EventTickets / Models Last commit date
Event.php 2 years ago EventTicket.php 1 year ago EventTicketType.php 2 years ago
Event.php
169 lines
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