Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 70
0.00% covered (danger)
0.00%
0 / 48
CRAP
0.00% covered (danger)
0.00%
0 / 1
SolvEvent
0.00% covered (danger)
0.00%
0 / 70
0.00% covered (danger)
0.00%
0 / 48
2756
0.00% covered (danger)
0.00%
0 / 1
 getSolvUid
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setSolvUid
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getDate
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setDate
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getDuration
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setDuration
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getKind
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setKind
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getDayNight
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setDayNight
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getNational
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setNational
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getRegion
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setRegion
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getType
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setType
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getName
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setName
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getLink
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setLink
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getClub
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setClub
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getMap
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setMap
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getLocation
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setLocation
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getCoordX
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setCoordX
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getCoordY
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setCoordY
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getDeadline
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setDeadline
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getEntryportal
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setEntryportal
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getStartLink
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setStartLink
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getRankLink
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setRankLink
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getLastModification
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 setLastModification
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getFieldValue
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 setFieldValue
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 testOnlyGetField
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getIdFieldNameForSearch
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getIdForSearch
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getTitleForSearch
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getCriteriaForFilter
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getCriteriaForQuery
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3namespace Olz\Entity;
4
5use Doctrine\Common\Collections\Criteria;
6use Doctrine\Common\Collections\Expr\Expression;
7use Doctrine\ORM\Mapping as ORM;
8use Olz\Entity\Common\SearchableInterface;
9use Olz\Entity\Common\TestableInterface;
10use Olz\Repository\SolvEventRepository;
11use Olz\Utils\WithUtilsTrait;
12
13#[ORM\Table(name: 'solv_events')]
14#[ORM\Index(name: 'date_index', columns: ['date'])]
15#[ORM\Entity(repositoryClass: SolvEventRepository::class)]
16class SolvEvent implements SearchableInterface, TestableInterface {
17    use WithUtilsTrait;
18
19    #[ORM\Id]
20    #[ORM\Column(type: 'integer', nullable: false)]
21    private int $solv_uid;
22
23    #[ORM\Column(type: 'date', nullable: false)]
24    private \DateTime $date;
25
26    #[ORM\Column(type: 'integer', nullable: false)]
27    private int $duration;
28
29    #[ORM\Column(type: 'text', nullable: false)]
30    private string $kind;
31
32    #[ORM\Column(type: 'text', nullable: false)]
33    private string $day_night;
34
35    #[ORM\Column(type: 'integer', nullable: false)]
36    private int $national;
37
38    #[ORM\Column(type: 'text', nullable: false)]
39    private string $region;
40
41    #[ORM\Column(type: 'text', nullable: false)]
42    private string $type;
43
44    #[ORM\Column(type: 'text', nullable: false)]
45    private string $name;
46
47    #[ORM\Column(type: 'text', nullable: false)]
48    private string $link;
49
50    #[ORM\Column(type: 'text', nullable: false)]
51    private string $club;
52
53    #[ORM\Column(type: 'text', nullable: false)]
54    private string $map;
55
56    #[ORM\Column(type: 'text', nullable: false)]
57    private string $location;
58
59    #[ORM\Column(type: 'integer', nullable: false)]
60    private int $coord_x;
61
62    #[ORM\Column(type: 'integer', nullable: false)]
63    private int $coord_y;
64
65    #[ORM\Column(type: 'date', nullable: true)]
66    private ?\DateTime $deadline;
67
68    #[ORM\Column(type: 'integer', nullable: false)]
69    private int $entryportal;
70
71    #[ORM\Column(type: 'text', nullable: true)]
72    private ?string $start_link;
73
74    #[ORM\Column(type: 'text', nullable: true)]
75    private ?string $rank_link;
76
77    #[ORM\Column(type: 'datetime', nullable: false, options: ['default' => 'CURRENT_TIMESTAMP'])]
78    private \DateTime $last_modification;
79
80    /** @var array<string, true> */
81    private array $valid_field_names = [
82        'solv_uid' => true,
83        'date' => true,
84        'duration' => true,
85        'kind' => true,
86        'day_night' => true,
87        'national' => true,
88        'region' => true,
89        'type' => true,
90        'name' => true,
91        'link' => true,
92        'club' => true,
93        'map' => true,
94        'location' => true,
95        'coord_x' => true,
96        'coord_y' => true,
97        'deadline' => true,
98        'entryportal' => true,
99        'start_link' => true,
100        'rank_link' => true,
101        'last_modification' => true,
102    ];
103    // PRIMARY KEY (`solv_uid`)
104
105    public function getSolvUid(): int {
106        return $this->solv_uid;
107    }
108
109    public function setSolvUid(int $new_value): void {
110        $this->solv_uid = $new_value;
111    }
112
113    public function getDate(): \DateTime {
114        return $this->date;
115    }
116
117    public function setDate(\DateTime $new_value): void {
118        $this->date = $new_value;
119    }
120
121    public function getDuration(): int {
122        return $this->duration;
123    }
124
125    public function setDuration(int $new_value): void {
126        $this->duration = $new_value;
127    }
128
129    public function getKind(): string {
130        return $this->kind;
131    }
132
133    public function setKind(string $new_value): void {
134        $this->kind = $new_value;
135    }
136
137    public function getDayNight(): string {
138        return $this->day_night;
139    }
140
141    public function setDayNight(string $new_value): void {
142        $this->day_night = $new_value;
143    }
144
145    public function getNational(): int {
146        return $this->national;
147    }
148
149    public function setNational(int $new_value): void {
150        $this->national = $new_value;
151    }
152
153    public function getRegion(): string {
154        return $this->region;
155    }
156
157    public function setRegion(string $new_value): void {
158        $this->region = $new_value;
159    }
160
161    public function getType(): string {
162        return $this->type;
163    }
164
165    public function setType(string $new_value): void {
166        $this->type = $new_value;
167    }
168
169    public function getName(): string {
170        return $this->name;
171    }
172
173    public function setName(string $new_value): void {
174        $this->name = $new_value;
175    }
176
177    public function getLink(): string {
178        return $this->link;
179    }
180
181    public function setLink(string $new_value): void {
182        $this->link = $new_value;
183    }
184
185    public function getClub(): string {
186        return $this->club;
187    }
188
189    public function setClub(string $new_value): void {
190        $this->club = $new_value;
191    }
192
193    public function getMap(): string {
194        return $this->map;
195    }
196
197    public function setMap(string $new_value): void {
198        $this->map = $new_value;
199    }
200
201    public function getLocation(): string {
202        return $this->location;
203    }
204
205    public function setLocation(string $new_value): void {
206        $this->location = $new_value;
207    }
208
209    public function getCoordX(): int {
210        return $this->coord_x;
211    }
212
213    public function setCoordX(int $new_value): void {
214        $this->coord_x = $new_value;
215    }
216
217    public function getCoordY(): int {
218        return $this->coord_y;
219    }
220
221    public function setCoordY(int $new_value): void {
222        $this->coord_y = $new_value;
223    }
224
225    public function getDeadline(): ?\DateTime {
226        return $this->deadline;
227    }
228
229    public function setDeadline(?\DateTime $new_value): void {
230        $this->deadline = $new_value;
231    }
232
233    public function getEntryportal(): int {
234        return $this->entryportal;
235    }
236
237    public function setEntryportal(int $new_value): void {
238        $this->entryportal = $new_value;
239    }
240
241    public function getStartLink(): ?string {
242        return $this->start_link;
243    }
244
245    public function setStartLink(?string $new_value): void {
246        $this->start_link = $new_value;
247    }
248
249    public function getRankLink(): ?string {
250        return $this->rank_link;
251    }
252
253    public function setRankLink(?string $new_value): void {
254        $this->rank_link = $new_value;
255    }
256
257    public function getLastModification(): \DateTime {
258        return $this->last_modification;
259    }
260
261    public function setLastModification(\DateTime $new_value): void {
262        $this->last_modification = $new_value;
263    }
264
265    public function getFieldValue(string $field_name): mixed {
266        if (!isset($this->valid_field_names[$field_name])) {
267            throw new \Exception("getFieldValue: Invalid field name: {$field_name}", 1);
268        }
269        return $this->{$field_name};
270    }
271
272    public function setFieldValue(string $field_name, mixed $new_value): void {
273        if (!isset($this->valid_field_names[$field_name])) {
274            throw new \Exception("setFieldValue: Invalid field name: {$field_name}", 1);
275        }
276        $this->{$field_name} = $new_value;
277    }
278
279    // ---
280
281    public function testOnlyGetField(string $field_name): mixed {
282        return $this->{$field_name};
283    }
284
285    public static function getIdFieldNameForSearch(): string {
286        return 'solv_uid';
287    }
288
289    public function getIdForSearch(): int {
290        return $this->getSolvUid();
291    }
292
293    public function getTitleForSearch(): string {
294        $pretty_date = $this->getDate()->format('Y-m-d');
295        return "{$pretty_date}{$this->getName()}";
296    }
297
298    public static function getCriteriaForFilter(string $key, string $value): Expression {
299        throw new \Exception("No such SolvEvent filter: {$key}");
300    }
301
302    public static function getCriteriaForQuery(string $query): Expression {
303        if (preg_match('/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/', $query)) {
304            return Criteria::expr()->orX(
305                Criteria::expr()->eq('date', new \DateTime($query)),
306                Criteria::expr()->contains('name', $query),
307            );
308        }
309        if (intval($query) > 1900) {
310            $this_year = strval(intval($query));
311            $next_year = strval(intval($query) + 1);
312            return Criteria::expr()->orX(
313                Criteria::expr()->andX(
314                    Criteria::expr()->gte('date', new \DateTime("{$this_year}-01-01 00:00:00")),
315                    Criteria::expr()->lt('date', new \DateTime("{$next_year}-01-01 00:00:00")),
316                ),
317                Criteria::expr()->contains('name', $query),
318            );
319        }
320        return Criteria::expr()->orX(
321            Criteria::expr()->contains('name', $query),
322        );
323    }
324}