Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
73.81% covered (warning)
73.81%
31 / 42
77.78% covered (warning)
77.78%
7 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 1
TsumegoUtil
73.81% covered (warning)
73.81%
31 / 42
77.78% covered (warning)
77.78%
7 / 9
28.92
0.00% covered (danger)
0.00%
0 / 1
 getMapForCurrentUser
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
20
 getSetConnectionsWithTitles
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
2
 collectTsumegosFromSet
94.12% covered (success)
94.12%
16 / 17
0.00% covered (danger)
0.00%
0 / 1
6.01
 hasStateAllowingInspection
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isRecentlySolved
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 isSolvedStatus
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
3
 getXpValue
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getProgressDeletionCount
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 currentTsumegoCount
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3class TsumegoUtil
4{
5    public static function getMapForCurrentUser($conditions = null): array
6    {
7        if (!$conditions)
8            $conditions = [];
9
10        $conditions['user_id'] = Auth::getUserID();
11        $statuses = ClassRegistry::init('TsumegoStatus')->find('all', ['conditions' => $conditions]);
12        if (!$statuses)
13            return [];
14
15        $result = [];
16        foreach ($statuses as $status)
17            $result[$status['TsumegoStatus']['tsumego_id']] = $status['TsumegoStatus']['status'];
18
19        return $result;
20    }
21
22    public static function getSetConnectionsWithTitles(int $tsumegoID): ?array
23    {
24        $setConnections = ClassRegistry::init('SetConnection')->find('all', ['conditions' => ['tsumego_id' => $tsumegoID]]);
25        foreach ($setConnections as &$setConnection)
26        {
27            $duplicateSet = ClassRegistry::init('Set')->findById($setConnection['SetConnection']['set_id']);
28            $setConnection['SetConnection']['title'] = $duplicateSet['Set']['title'] . ' ' . $setConnection['SetConnection']['num'];
29        }
30        return $setConnections;
31    }
32
33    public static function collectTsumegosFromSet(int $setID, ?array $tsumegoConditions = null)
34    {
35        $scIds = [];
36        $scMap = [];
37        $tsx = [];
38        $sc = ClassRegistry::init('SetConnection')->find('all', ['order' => 'num ASC', 'conditions' => ['set_id' => $setID]]) ?: [];
39        $scCount = count($sc);
40        for ($i = 0; $i < $scCount; $i++)
41        {
42            array_push($scIds, $sc[$i]['SetConnection']['tsumego_id']);
43            $scMap[$sc[$i]['SetConnection']['tsumego_id']] = $i;
44        }
45        $finalCondition = ['conditions' => ['id' => $scIds]];
46        if ($tsumegoConditions)
47            $finalCondition['conditions'] [] = $tsumegoConditions;
48        $ts = ClassRegistry::init('Tsumego')->find('all', $finalCondition) ?: [];
49        $tsCount = count($ts);
50        for ($i = 0; $i < $tsCount; $i++)
51        {
52            $ts[$i]['Tsumego']['set_id'] = $setID;
53            $tsx[$scMap[$ts[$i]['Tsumego']['id']]] = $ts[$i];
54        }
55
56        return $tsx;
57    }
58
59    public static function hasStateAllowingInspection($tsumego)
60    {
61        return TsumegoUtil::isRecentlySolved($tsumego['Tsumego']['status']);
62    }
63
64    public static function isRecentlySolved($status)
65    {
66        return $status == 'S' || $status == 'C';
67    }
68
69    public static function isSolvedStatus($status)
70    {
71        return $status == 'S' || $status == 'C' || $status == 'W';
72    }
73
74    public static function getXpValue(array $tsumego, float $multiplier = 1.0): int
75    {
76        return Rating::ratingToXP($tsumego['rating'], $multiplier);
77    }
78
79    public static function getProgressDeletionCount(array $tsumego): int
80    {
81        $result = ClassRegistry::init('ProgressDeletion')->query('
82SELECT COUNT(*) AS deletions_count
83FROM (
84    SELECT DISTINCT progress_deletion.id
85    FROM progress_deletion
86    JOIN set_connection ON set_connection.set_id = progress_deletion.set_id
87    WHERE set_connection.tsumego_id = ' . $tsumego['id'] . ' AND progress_deletion.user_id=' . Auth::getUserID() . ' AND progress_deletion.created >= NOW() - INTERVAL 1 MONTH
88) AS unique_deletions');
89        return $result[0][0]['deletions_count'];
90    }
91
92    public static function currentTsumegoCount()
93    {
94        return ClassRegistry::init('DayRecord')->query("SELECT
95    COUNT(DISTINCT tsumego.id) AS tsumego_count
96FROM tsumego
97JOIN set_connection ON set_connection.tsumego_id = tsumego.id
98JOIN `set` ON set_connection.set_id = `set`.id
99WHERE tsumego.deleted is null AND `set`.public = 1")[0][0]['tsumego_count'];
100    }
101}