1 | <?php |
||||
2 | |||||
3 | namespace App; |
||||
4 | |||||
5 | |||||
6 | use Cocur\Slugify\Slugify; |
||||
7 | //use Cviebrock\EloquentSluggable\Engines\IdeographicEngine; |
||||
8 | //use Cviebrock\EloquentSluggable\Engines\KoreanEngine; |
||||
9 | use Cviebrock\EloquentSluggable\Sluggable; |
||||
10 | use Cviebrock\EloquentSluggable\SluggableScopeHelpers; |
||||
11 | use Illuminate\Database\Eloquent\SoftDeletes; |
||||
12 | use OwenIt\Auditing\Contracts\Auditable; |
||||
13 | use Xoco70\LaravelTournaments\Models\ChampionshipSettings; |
||||
14 | |||||
15 | |||||
16 | /** |
||||
17 | * @property mixed type |
||||
18 | * @property float latitude |
||||
19 | * @property float longitude |
||||
20 | * @property mixed created_at |
||||
21 | * @property mixed updated_at |
||||
22 | * @property mixed deleted_at |
||||
23 | */ |
||||
24 | class Tournament extends \Xoco70\LaravelTournaments\Models\Tournament implements Auditable |
||||
25 | { |
||||
26 | use SoftDeletes, \OwenIt\Auditing\Auditable; |
||||
0 ignored issues
–
show
introduced
by
![]() |
|||||
27 | use Sluggable; |
||||
28 | use SluggableScopeHelpers; |
||||
0 ignored issues
–
show
|
|||||
29 | |||||
30 | public $timestamps = true; |
||||
31 | protected $table = 'tournament'; |
||||
32 | protected $fillable = [ |
||||
33 | 'name', |
||||
34 | 'dateIni', |
||||
35 | 'dateFin', |
||||
36 | 'registerDateLimit', |
||||
37 | 'sport', |
||||
38 | 'promoter', |
||||
39 | 'host_organization', |
||||
40 | 'technical_assistance', |
||||
41 | 'category', |
||||
42 | 'rule_id', |
||||
43 | 'type', |
||||
44 | 'venue_id', |
||||
45 | 'level_id' |
||||
46 | ]; |
||||
47 | protected $dates = ['dateIni', 'dateFin', 'registerDateLimit', 'created_at', 'updated_at', 'deleted_at']; |
||||
48 | |||||
49 | 34 | protected static function boot() |
|||
50 | { |
||||
51 | 34 | parent::boot(); |
|||
52 | 34 | static::deleting(function ($tournament) { |
|||
53 | 2 | $tournament->championships->each->delete(); |
|||
54 | 2 | $tournament->invites->each->delete(); |
|||
55 | |||||
56 | 34 | }); |
|||
57 | 34 | static::restoring(function ($tournament) { |
|||
58 | 1 | $tournament->championships()->withTrashed()->get()->each->restore(); |
|||
59 | 34 | }); |
|||
60 | |||||
61 | 34 | } |
|||
62 | |||||
63 | /** |
||||
64 | * Return the sluggable configuration array for this model. |
||||
65 | * |
||||
66 | * @return array |
||||
67 | */ |
||||
68 | 20 | public function sluggable() |
|||
69 | { |
||||
70 | return [ |
||||
71 | 20 | 'slug' => [ |
|||
72 | 'source' => 'name' |
||||
73 | ] |
||||
74 | ]; |
||||
75 | } |
||||
76 | |||||
77 | // public function customizeSlugEngine(Slugify $engine, $attribute) |
||||
78 | // { |
||||
79 | // if (isJapanese($this->name)) { // Or Korean, or any unsupported language |
||||
80 | // return new IdeographicEngine(); |
||||
81 | // } |
||||
82 | // if (isKorean($this->name)) { // Or Korean, or any unsupported language |
||||
83 | // return new KoreanEngine(); |
||||
84 | // } |
||||
85 | // return $engine; |
||||
86 | // } |
||||
87 | |||||
88 | /** |
||||
89 | * A tournament is owned by a user |
||||
90 | * |
||||
91 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo |
||||
92 | */ |
||||
93 | 13 | public function owner() |
|||
94 | { |
||||
95 | 13 | return $this->belongsTo(User::class, 'user_id', 'id'); |
|||
96 | } |
||||
97 | |||||
98 | /** |
||||
99 | * Get All Tournaments levels |
||||
100 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo |
||||
101 | */ |
||||
102 | 1 | public function level() |
|||
103 | { |
||||
104 | 1 | return $this->belongsTo(TournamentLevel::class, 'level_id', 'id'); |
|||
105 | } |
||||
106 | |||||
107 | /** |
||||
108 | * Get Full venue object |
||||
109 | * @return \Illuminate\Database\Eloquent\Relations\BelongsTo |
||||
110 | */ |
||||
111 | 8 | public function venue() |
|||
112 | { |
||||
113 | 8 | return $this->belongsTo(Venue::class); |
|||
114 | } |
||||
115 | |||||
116 | /** |
||||
117 | * Get All categoriesTournament that belongs to a tournament |
||||
118 | * @return \Illuminate\Database\Eloquent\Relations\HasMany |
||||
119 | */ |
||||
120 | 15 | public function championships() |
|||
121 | { |
||||
122 | 15 | return $this->hasMany(Championship::class); |
|||
123 | } |
||||
124 | |||||
125 | /** |
||||
126 | * Get All categoriesSettings that belongs to a tournament |
||||
127 | * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough |
||||
128 | */ |
||||
129 | 8 | public function championshipSettings() |
|||
130 | { |
||||
131 | 8 | return $this->hasManyThrough(ChampionshipSettings::class, Championship::class); |
|||
132 | } |
||||
133 | |||||
134 | /** |
||||
135 | * çGet All teams that belongs to a tournament |
||||
136 | * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough |
||||
137 | */ |
||||
138 | 6 | public function teams() |
|||
139 | { |
||||
140 | 6 | return $this->hasManyThrough(Team::class, Championship::class); |
|||
141 | } |
||||
142 | |||||
143 | /** |
||||
144 | * Get All competitors that belongs to a tournament |
||||
145 | * @param null $championshipId |
||||
0 ignored issues
–
show
|
|||||
146 | * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough |
||||
147 | */ |
||||
148 | 11 | public function competitors($championshipId = null) |
|||
0 ignored issues
–
show
The parameter
$championshipId is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. ![]() |
|||||
149 | { |
||||
150 | 11 | return $this->hasManyThrough(Competitor::class, Championship::class); |
|||
151 | } |
||||
152 | |||||
153 | /** |
||||
154 | * Get All trees that belongs to a tournament |
||||
155 | * @return \Illuminate\Database\Eloquent\Relations\HasManyThrough |
||||
156 | */ |
||||
157 | 5 | public function trees() |
|||
158 | { |
||||
159 | 5 | return $this->hasManyThrough(FightersGroup::class, Championship::class); |
|||
160 | } |
||||
161 | |||||
162 | /** |
||||
163 | * Get all Invitations that belongs to a tournament |
||||
164 | * @return \Illuminate\Database\Eloquent\Relations\MorphMany |
||||
165 | */ |
||||
166 | 2 | public function invites() |
|||
167 | { |
||||
168 | 2 | return $this->morphMany(Invite::class, 'object'); |
|||
169 | } |
||||
170 | |||||
171 | /** |
||||
172 | * Get Category List with <Select> Format |
||||
173 | * @return mixed |
||||
174 | */ |
||||
175 | 6 | public function getCategoryIdArray() |
|||
176 | { |
||||
177 | 6 | return $this->categories->pluck('id')->all(); |
|||
178 | } |
||||
179 | |||||
180 | public function getDateAttribute($date) |
||||
181 | { |
||||
182 | return $date; |
||||
183 | } |
||||
184 | |||||
185 | 6 | public function getRegisterDateLimitAttribute($date) |
|||
186 | { |
||||
187 | 6 | return $date; |
|||
188 | } |
||||
189 | |||||
190 | 8 | public function getDateIniAttribute($date) |
|||
191 | { |
||||
192 | 8 | return $date; |
|||
193 | } |
||||
194 | |||||
195 | 6 | public function getDateFinAttribute($date) |
|||
196 | { |
||||
197 | 6 | return $date; |
|||
198 | } |
||||
199 | |||||
200 | /** |
||||
201 | * Check if the tournament is Open |
||||
202 | * @return bool |
||||
203 | */ |
||||
204 | 1 | public function isOpen() |
|||
205 | { |
||||
206 | 1 | return $this->type == 1; |
|||
207 | } |
||||
208 | |||||
209 | /** |
||||
210 | * * Check if the tournament needs Invitation |
||||
211 | * @return bool |
||||
212 | */ |
||||
213 | public function needsInvitation() |
||||
214 | { |
||||
215 | return $this->type == 0; |
||||
216 | } |
||||
217 | |||||
218 | /** |
||||
219 | * @return bool |
||||
220 | */ |
||||
221 | public function isInternational() |
||||
222 | { |
||||
223 | return $this->level_id == 8; |
||||
224 | } |
||||
225 | |||||
226 | /** |
||||
227 | * @return bool |
||||
228 | */ |
||||
229 | public function isNational() |
||||
230 | { |
||||
231 | return $this->level_id == 7; |
||||
232 | } |
||||
233 | |||||
234 | /** |
||||
235 | * @return bool |
||||
236 | */ |
||||
237 | public function isRegional() |
||||
238 | { |
||||
239 | return $this->level_id == 6; |
||||
240 | } |
||||
241 | |||||
242 | /** |
||||
243 | * @return bool |
||||
244 | */ |
||||
245 | public function isEstate() |
||||
246 | { |
||||
247 | return $this->level_id == 5; |
||||
248 | } |
||||
249 | |||||
250 | /** |
||||
251 | * @return bool |
||||
252 | */ |
||||
253 | public function isMunicipal() |
||||
254 | { |
||||
255 | return $this->level_id == 4; |
||||
256 | } |
||||
257 | |||||
258 | /** |
||||
259 | * @return bool |
||||
260 | */ |
||||
261 | public function isDistrictal() |
||||
262 | { |
||||
263 | return $this->level_id == 3; |
||||
264 | } |
||||
265 | |||||
266 | /** |
||||
267 | * @return bool |
||||
268 | */ |
||||
269 | public function isLocal() |
||||
270 | { |
||||
271 | return $this->level_id == 2; |
||||
272 | } |
||||
273 | |||||
274 | /** |
||||
275 | * @return bool |
||||
276 | */ |
||||
277 | public function hasNoLevel() |
||||
278 | { |
||||
279 | return $this->level_id == 1; |
||||
280 | } |
||||
281 | |||||
282 | 15 | public function getRouteKeyName() |
|||
283 | { |
||||
284 | 15 | return 'slug'; |
|||
285 | } |
||||
286 | |||||
287 | /** |
||||
288 | * @return bool |
||||
289 | */ |
||||
290 | 2 | public function isDeleted() |
|||
291 | { |
||||
292 | 2 | return $this->deleted_at != null; |
|||
293 | } |
||||
294 | |||||
295 | /** |
||||
296 | * Create and Configure Championships depending the rule ( IKF, EKF, LAKF, etc ) |
||||
297 | * @param $ruleId |
||||
298 | */ |
||||
299 | 1 | public function setAndConfigureCategories($ruleId) |
|||
300 | { |
||||
301 | 1 | if ($ruleId == 0) return; // No Rules Selected |
|||
302 | |||||
303 | 1 | $options = $this->loadRulesOptions($ruleId); |
|||
304 | |||||
305 | // Create Tournament Categories |
||||
306 | 1 | $arrCategories = array_keys($options); |
|||
0 ignored issues
–
show
It seems like
$options can also be of type null ; however, parameter $input of array_keys() does only seem to accept array , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||
307 | 1 | $this->categories()->sync($arrCategories); |
|||
308 | |||||
309 | // Configure each category creating categorySetting Object |
||||
310 | |||||
311 | 1 | foreach ($this->championships as $championship) { |
|||
312 | 1 | $rules = $options[$championship->category->id]; |
|||
313 | 1 | $rules['championship_id'] = $championship->id; |
|||
314 | 1 | ChampionshipSettings::create($rules); |
|||
315 | } |
||||
316 | 1 | } |
|||
317 | |||||
318 | /** |
||||
319 | * return correct presets rues |
||||
320 | * @param $ruleId |
||||
321 | * @return mixed|null |
||||
322 | */ |
||||
323 | 1 | private function loadRulesOptions($ruleId) |
|||
324 | { |
||||
325 | switch ($ruleId) { |
||||
326 | 1 | case 0: // No preset selected |
|||
327 | return null; |
||||
328 | 1 | case 1: |
|||
329 | 1 | return $options = config('options.ikf_settings'); |
|||
0 ignored issues
–
show
|
|||||
330 | break; |
||||
0 ignored issues
–
show
break is not strictly necessary here and could be removed.
The switch ($x) {
case 1:
return 'foo';
break; // This break is not necessary and can be left off.
}
If you would like to keep this construct to be consistent with other ![]() |
|||||
331 | case 2: |
||||
332 | return $options = config('options.ekf_settings'); |
||||
333 | break; |
||||
334 | case 3: |
||||
335 | return $options = config('options.lakc_settings'); |
||||
336 | break; |
||||
337 | default: |
||||
338 | return null; |
||||
339 | } |
||||
340 | } |
||||
341 | |||||
342 | /** |
||||
343 | * We can use $tournament->categories()->attach(id); |
||||
344 | * Or $tournament->categories()->sync([1, 2, 3]); |
||||
345 | * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany |
||||
346 | */ |
||||
347 | 9 | public function categories() |
|||
348 | { |
||||
349 | 9 | return $this->belongsToMany(Category::class, 'championship') |
|||
350 | 9 | ->withPivot('id') |
|||
351 | 9 | ->withTimestamps(); |
|||
352 | } |
||||
353 | |||||
354 | /** |
||||
355 | * create a category List with Category name associated to championshipId |
||||
356 | * |
||||
357 | * @return array |
||||
358 | */ |
||||
359 | public function buildCategoryList() |
||||
360 | { |
||||
361 | $championships = Championship::with('category', 'settings') |
||||
362 | ->whereHas('category', function ($query) { |
||||
363 | return $query->where('isTeam', 1); |
||||
364 | }) |
||||
365 | ->where('tournament_id', $this->id) |
||||
366 | ->get(); |
||||
367 | |||||
368 | $array = []; |
||||
369 | foreach ($championships as $championship) { |
||||
370 | $array[$championship->id] = $championship->settings->alias != '' |
||||
371 | ? $championship->settings->alias |
||||
372 | : trim($championship->buildName()); |
||||
373 | } |
||||
374 | return $array; |
||||
375 | } |
||||
376 | |||||
377 | } |