PlayerGameRankingProvider   A
last analyzed

Complexity

Total Complexity 14

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 57
dl 0
loc 89
rs 10
c 0
b 0
f 0
wmc 14

2 Methods

Rating   Name   Duplication   Size   Complexity  
B getRankingMedals() 0 37 7
B getRankingPoints() 0 36 7
1
<?php
2
3
declare(strict_types=1);
4
5
namespace VideoGamesRecords\CoreBundle\DataProvider\Ranking\Player;
6
7
use Doctrine\ORM\Exception\ORMException;
8
use VideoGamesRecords\CoreBundle\DataProvider\Ranking\AbstractRankingProvider;
9
10
class PlayerGameRankingProvider extends AbstractRankingProvider
11
{
12
    /**
13
     * @param int|null $id
14
     * @param array $options
15
     * @return array
16
     * @throws ORMException
17
     */
18
    public function getRankingPoints(?int $id = null, array $options = []): array
19
    {
20
        $game = $this->em->getRepository('VideoGamesRecords\CoreBundle\Entity\Game')->find($id);
21
        if (null === $game) {
22
            return [];
23
        }
24
25
        $maxRank = $options['maxRank'] ?? null;
26
        $player = $this->getPlayer($options['user'] ?? null);
27
        $team = !empty($options['idTeam']) ? $this->em->getReference('VideoGamesRecords\CoreBundle\Entity\Team', $options['idTeam']) : null;
28
29
        $query = $this->em->createQueryBuilder()
30
            ->select('pg')
31
            ->from('VideoGamesRecords\CoreBundle\Entity\PlayerGame', 'pg')
32
            ->join('pg.player', 'p')
33
            ->addSelect('p')
34
            ->orderBy('pg.rankPointChart');
35
36
        $query->where('pg.game = :game')
37
            ->setParameter('game', $game);
38
39
        if ($team != null) {
40
            $query->andWhere('(p.team = :team)')
41
                ->setParameter('team', $team);
42
        } elseif (($maxRank !== null) && ($player !== null)) {
43
            $query->andWhere('(pg.rankPointChart <= :maxRank OR pg.player = :player OR p.id IN (:friends))')
44
                ->setParameter('maxRank', $maxRank)
45
                ->setParameter('player', $player)
46
                ->setParameter('friends', $player->getFriends());
47
        } elseif ($maxRank !== null) {
48
            $query->andWhere('pg.rankPointChart <= :maxRank')
49
                ->setParameter('maxRank', $maxRank);
50
        } else {
51
            $query->setMaxResults(100);
52
        }
53
        return $query->getQuery()->getResult();
54
    }
55
56
    /**
57
     * @param int|null $id
58
     * @param array $options
59
     * @return array
60
     * @throws ORMException
61
     */
62
    public function getRankingMedals(?int $id = null, array $options = []): array
63
    {
64
        $game = $this->em->getRepository('VideoGamesRecords\CoreBundle\Entity\Game')->find($id);
65
        if (null === $game) {
66
            return [];
67
        }
68
69
        $maxRank = $options['maxRank'] ?? null;
70
        $player = $this->getPlayer($options['user'] ?? null);
71
        $team = !empty($options['idTeam']) ? $this->em->getReference('VideoGamesRecords\CoreBundle\Entity\Team', $options['idTeam']) : null;
72
73
        $query = $this->em->createQueryBuilder()
74
            ->select('pg')
75
            ->from('VideoGamesRecords\CoreBundle\Entity\PlayerGame', 'pg')
76
            ->join('pg.player', 'p')
77
            ->addSelect('p')
78
            ->orderBy('pg.rankMedal');
79
80
        $query->where('pg.game = :game')
81
            ->setParameter('game', $game);
82
83
        if ($team != null) {
84
            $query->andWhere('(p.team = :team)')
85
                ->setParameter('team', $team);
86
        } elseif (($maxRank !== null) && ($player !== null)) {
87
            $query->andWhere('(pg.rankMedal <= :maxRank OR pg.player = :player OR p.id IN (:friends))')
88
                ->setParameter('maxRank', $maxRank)
89
                ->setParameter('player', $player)
90
                ->setParameter('friends', $player->getFriends());
91
        } elseif ($maxRank !== null) {
92
            $query->andWhere('pg.rankMedal <= :maxRank')
93
                ->setParameter('maxRank', $maxRank);
94
        } else {
95
            $query->setMaxResults(100);
96
        }
97
98
        return $query->getQuery()->getResult();
99
    }
100
}
101