Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
85.71% covered (warning)
85.71%
30 / 35
50.00% covered (danger)
50.00%
3 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
User
85.71% covered (warning)
85.71%
30 / 35
50.00% covered (danger)
50.00%
3 / 6
22.29
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 renderPremium
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
3.33
 getHeroPowersCount
90.00% covered (success)
90.00%
9 / 10
0.00% covered (danger)
0.00%
0 / 1
6.04
 getHighestRating
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 renderLink
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
3
 renderLinkWithOptionalRank
66.67% covered (warning)
66.67%
6 / 9
0.00% covered (danger)
0.00%
0 / 1
7.33
1<?php
2
3class User extends AppModel
4{
5    public function __construct($id = false, $table = null, $ds = null)
6    {
7        $id['table'] =  'user';
8        parent::__construct($id, $table, $ds);
9    }
10
11    public $validate = [
12        'name' => [
13
14            'notempty' => [
15                'rule' => 'notBlank',
16                'required' => true,
17                'message' => 'Please Insert Name',
18            ],
19
20            'minmax' => [
21                'rule' => ['between', 3, 30],
22                'message' => 'The length of the name should have at least 3 characters',
23            ],
24
25            'checkUnique' => [
26                'rule' => ['checkUnique', 'name'],
27                'message' => 'Name already exists',
28            ],
29        ],
30
31        'email' => [
32            'notempty' => [
33                'rule' => 'notBlank',
34                'message' => 'Insert Email',
35            ],
36
37            'email' => [
38                'rule' => ['email', false],
39                'message' => 'Enter a valid email-address',
40            ],
41
42            'checkUnique' => [
43                'rule' => ['checkUnique', 'email'],
44                'message' => 'Email already exists',
45            ],
46        ],
47    ];
48
49    public static function renderPremium($user): string
50    {
51        if ($user['premium'] == 2 || $user['premium'] == 1)
52            return '<img alt="Account Type" title="Account Type" src="/img/premium' . $user['premium'] . '.png" height="16px">';
53        return '';
54    }
55
56    public static function getHeroPowersCount($user): int
57    {
58        $heroPowers = 0;
59        if($user['level'] >= HeroPowers::$SPRINT_MINIMUM_LEVEL)
60            $heroPowers++;
61        if($user['level'] >= HeroPowers::$INTUITION_MINIMUM_LEVEL)
62            $heroPowers++;
63        if($user['level'] >= HeroPowers::$REJUVENATION_MINIMUM_LEVEL)
64            $heroPowers++;
65        if($user['premium'] > 0 || $user['level'] >= HeroPowers::$REFINEMENT_MINIMUM_LEVEL)
66            $heroPowers++;
67        return $heroPowers;
68    }
69
70    public static function getHighestRating($user): float
71    {
72        $highestTsumegoAttempt = ClassRegistry::init('TsumegoAttempt')->find('first', [
73            'conditions' => ['user_id' => $user['id']],
74            'order' => 'user_rating DESC']);
75        if ($highestTsumegoAttempt)
76            return max($highestTsumegoAttempt['TsumegoAttempt']['user_rating'], $user['rating']);
77        return $user['rating'];
78    }
79
80    public static function renderLink($id, $name = null, $externalID = null, $picture = null, $rating = null)
81    {
82        if (is_array($id))
83        {
84            if (isset($id['user_id']))
85                return self::renderLink($id['user_id'], $id['user_name'], $id['user_external_id'], $id['user_picture'], $id['user_rating']);
86            return self::renderLink($id['id'], $id['name'], $id['external_id'], $id['picture'], $id['rating']);
87        }
88        return User::renderLinkWithOptionalRank($id, Rating::getReadableRankFromRating($rating), $name, $externalID, $picture);
89    }
90
91    public static function renderLinkWithOptionalRank($id, $rank = '', $name = null, $externalID = null, $picture = null)
92    {
93        if (is_array($id))
94        {
95            if (isset($id['user_id']))
96                return self::renderLinkWithOptionalRank($id['user_id'], $rank, $id['user_name'], $id['user_external_id'], $id['user_picture']);
97            return self::renderLinkWithOptionalRank($id['id'], $rank, $id['name'], $id['external_id'], $id['picture']);
98        }
99
100        $image = '';
101        if (str_starts_with($name, 'g__') && $externalID != null)
102        {
103            $image = '<img class="google-profile-image" src="/img/google/' . $picture . '">';
104            $name = substr($name, 3);
105        }
106        return '<a href="/users/view/' . $id . '">' . $image . h($name) . (empty($rank) ? '' : ' ' . $rank) . '</a>';
107    }
108}