Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
71.43% covered (warning)
71.43%
10 / 14
75.00% covered (warning)
75.00%
3 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
TsumegoStatus
71.43% covered (warning)
71.43%
10 / 14
75.00% covered (warning)
75.00%
3 / 4
16.94
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
 less
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 value
55.56% covered (warning)
55.56%
5 / 9
0.00% covered (danger)
0.00%
0 / 1
18.78
 getProblemsSolvedInSet
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3class TsumegoStatus extends AppModel
4{
5    public function __construct($id = false, $table = null, $ds = null)
6    {
7        $id['table'] =  'tsumego_status';
8        parent::__construct($id, $table, $ds);
9    }
10
11    // when two statuses are to be merged, we need to decide which one is more valuable to keep for the user
12    public static function less($status1, $status2)
13    {
14        return self::value($status1) < self::value($status2);
15    }
16
17    private static function value($status): int
18    {
19        switch ($status)
20        {
21            case 'F' : return 0; // failed
22            case 'N' : return 1; // nothing
23            case 'V' : return 2; // visited
24            case 'X' : return 3; // once solve but then failed
25            case 'S' : return 4; // once solved
26            case 'W' : return 5; // half XP after once solved
27            case 'C' : return 6; // double solved
28            case 'G' : return 7; // golden tsumego
29            default: throw new Exception("Unknown status: $status");
30        }
31    }
32
33    public static function getProblemsSolvedInSet($setID)
34    {
35        return Util::query("
36SELECT
37    COUNT(DISTINCT tsumego_status.id) AS total
38FROM
39    tsumego_status
40    JOIN set_connection ON tsumego_status.tsumego_id = set_connection.tsumego_id AND set_connection.set_id = ?
41WHERE
42    tsumego_status.user_id = ? AND
43    tsumego_status.status IN ('S', 'C', 'W')", [$setID, Auth::getUserID()])[0]["total"];
44    }
45}