Passed
Pull Request — master (#53)
by
unknown
05:24
created

Championship::getRoundTitle()   B

Complexity

Conditions 8
Paths 16

Size

Total Lines 41
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 72

Importance

Changes 0
Metric Value
cc 8
eloc 29
nc 16
nop 1
dl 0
loc 41
ccs 0
cts 29
cp 0
crap 72
rs 8.2114
c 0
b 0
f 0
1
<?php
2
3
namespace App;
4
5
class Championship extends \Xoco70\LaravelTournaments\Models\Championship
6
{
7
    /**
8
     * A championship belongs to a Category
9
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
10
     */
11 8
    public function category()
12
    {
13 8
        return $this->belongsTo(\App\Category::class);
14
    }
15
16
    /**
17
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
18
     */
19 3
    public function teams()
20
    {
21 3
        return $this->hasMany(\App\Team::class);
22
    }
23
24
    /**
25
     * A championship belongs to a Tournament.
26
     *
27
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
28
     */
29 2
    public function tournament()
30
    {
31 2
        return $this->belongsTo(Tournament::class);
32
    }
33
34
    /**
35
     * Generate Round Titles
36
     * @param $numFighters
37
     * @return array
38
     */
39
    public function getRoundTitle($numFighters): array
40
    {
41
        $roundTitles = [];
42
        if ($this->hasPreliminary()) {
43
            $roundTitles[] = 'Preliminary';
44
            $this->noTeams = $numFighters / $this->getSettings()->preliminaryGroupSize;
0 ignored issues
show
Bug introduced by
The property noTeams does not seem to exist on App\Championship. Are you sure there is no database migration missing?

Checks if undeclared accessed properties appear in database migrations and if the creating migration is correct.

Loading history...
45
        } else if ($this->isSingleEliminationType()) {
46
            $this->noTeams = $numFighters;
47
        } else if ($this->isPlayOffType()) {
48
            $this->noTeams = $numFighters;
49
        }
50
51
        if ($this->noTeams == 2) {
52
            $roundTitles[] = 'Final';
53
        } elseif ($this->noTeams <= 4) {
54
            $roundTitles[] = 'Semi-Finals';
55
            $roundTitles[] = 'Final';
56
        } elseif ($this->noTeams <= 8) {
57
            $roundTitles[] = 'Quarter-Finals';
58
            $roundTitles[] = 'Semi-Finals';
59
            $roundTitles[] = 'Final';
60
        } else {
61
            $roundTitles[] = 'Quarter-Finals';
62
            $roundTitles[] = 'Semi-Finals';
63
            $roundTitles[] = 'Final';
64
65
            $noRounds = ceil(log($this->noTeams, 2));
66
            $noTeamsInFirstRound = pow(2, ceil(log($this->noTeams) / log(2)));
67
            $tempRounds = array();
68
69
            //The minus 3 is to ignore the final, semi final and quarter final rounds
70
71
            for ($i = 0; $i < $noRounds - 3; $i++) {
72
                $tempRounds[] = 'Last ' . $noTeamsInFirstRound;
73
                $noTeamsInFirstRound /= 2;
74
            }
75
76
            $roundTitles = array_merge($tempRounds, $roundTitles);
77
78
        }
79
        return $roundTitles;
80
    }
81
}
82