Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
73.81% |
31 / 42 |
|
77.78% |
7 / 9 |
CRAP | |
0.00% |
0 / 1 |
| TsumegoUtil | |
73.81% |
31 / 42 |
|
77.78% |
7 / 9 |
28.92 | |
0.00% |
0 / 1 |
| getMapForCurrentUser | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
20 | |||
| getSetConnectionsWithTitles | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
2 | |||
| collectTsumegosFromSet | |
94.12% |
16 / 17 |
|
0.00% |
0 / 1 |
6.01 | |||
| hasStateAllowingInspection | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| isRecentlySolved | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
2 | |||
| isSolvedStatus | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
3 | |||
| getXpValue | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| getProgressDeletionCount | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
1 | |||
| currentTsumegoCount | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
| 1 | <?php |
| 2 | |
| 3 | class 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(' |
| 82 | SELECT COUNT(*) AS deletions_count |
| 83 | FROM ( |
| 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 |
| 96 | FROM tsumego |
| 97 | JOIN set_connection ON set_connection.tsumego_id = tsumego.id |
| 98 | JOIN `set` ON set_connection.set_id = `set`.id |
| 99 | WHERE tsumego.deleted is null AND `set`.public = 1")[0][0]['tsumego_count']; |
| 100 | } |
| 101 | } |