Passed
Push — master ( e6ce91...429907 )
by MusikAnimal
04:46
created

AdminScoreRepository::fetchData()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 65
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 25
nc 1
nop 2
dl 0
loc 65
rs 9.52
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * This file contains only the AdminScoreRepository class.
4
 */
5
6
namespace Xtools;
7
8
/**
9
 * A AdminScoreRepository is responsible for retrieving information from the
10
 * databases for the AdminScore tool. It does not do any post-processing of that data.
11
 * @codeCoverageIgnore
12
 */
13
class AdminScoreRepository extends Repository
14
{
15
    /**
16
     * Fetches basic information and the counts used in calculating scores.
17
     * @param Project $project
18
     * @param User $user
19
     * @return array with keys 'account-age', 'edit-count', 'user-page', 'patrols', 'blocks', 'afd', 'recent-activity',
20
     *    aiv', 'edit-summaries', 'namespaces', 'pages-created-live', 'pages-created-deleted', and 'rpp'.
21
     */
22
    public function fetchData(Project $project, User $user)
23
    {
24
        $userTable = $project->getTableName('user');
25
        $pageTable = $project->getTableName('page');
26
        $loggingTable = $project->getTableName('logging', 'userindex');
27
        $revisionTable = $project->getTableName('revision');
28
        $archiveTable = $project->getTableName('archive');
29
30
        $sql = "SELECT 'account-age' AS source, user_registration AS value FROM $userTable
31
                    WHERE user_name = :username
32
                UNION
33
                SELECT 'edit-count' AS source, user_editcount AS value FROM $userTable
34
                    WHERE user_name = :username
35
                UNION
36
                SELECT 'user-page' AS source, page_len AS value FROM $pageTable
37
                    WHERE page_namespace = 2 AND page_title = :username
38
                UNION
39
                SELECT 'patrols' AS source, COUNT(*) AS value FROM $loggingTable
40
                    WHERE log_type = 'patrol'
41
                        AND log_action = 'patrol'
42
                        AND log_namespace = 0
43
                        AND log_deleted = 0 AND log_user_text = :username
44
                UNION
45
                SELECT 'blocks' AS source, COUNT(*) AS value FROM $loggingTable l
46
                    INNER JOIN $userTable u ON l.log_user = u.user_id
47
                    WHERE l.log_type = 'block' AND l.log_action = 'block'
48
                    AND l.log_namespace = 2 AND l.log_deleted = 0 AND u.user_name = :username
49
                UNION
50
                SELECT 'afd' AS source, COUNT(*) AS value FROM $revisionTable r
51
                  INNER JOIN $pageTable p on p.page_id = r.rev_page
52
                    WHERE p.page_title LIKE 'Articles_for_deletion/%'
53
                        AND p.page_title NOT LIKE 'Articles_for_deletion/Log/%'
54
                        AND r.rev_user_text = :username
55
                UNION
56
                SELECT 'recent-activity' AS source, COUNT(*) AS value FROM $revisionTable
57
                    WHERE rev_user_text = :username AND rev_timestamp > (now()-INTERVAL 730 day)
58
                        AND rev_timestamp < now()
59
                UNION
60
                SELECT 'aiv' AS source, COUNT(*) AS value FROM $revisionTable r
61
                  INNER JOIN $pageTable p on p.page_id = r.rev_page
62
                    WHERE p.page_title LIKE 'Administrator_intervention_against_vandalism%'
63
                        AND r.rev_user_text = :username
64
                UNION
65
                SELECT 'edit-summaries' AS source, COUNT(*) AS value
66
                FROM $revisionTable JOIN $pageTable ON rev_page = page_id
67
                    WHERE page_namespace = 0 AND rev_user_text = :username
68
                UNION
69
                SELECT 'namespaces' AS source, count(*) AS value
70
                FROM $revisionTable JOIN $pageTable ON rev_page = page_id
71
                    WHERE rev_user_text = :username AND page_namespace = 0
72
                UNION
73
                SELECT 'pages-created-live' AS source, COUNT(*) AS value FROM $revisionTable
74
                    WHERE rev_user_text = :username AND rev_parent_id = 0
75
                UNION
76
                SELECT 'pages-created-deleted' AS source, COUNT(*) AS value FROM $archiveTable
77
                    WHERE ar_user_text = :username AND ar_parent_id = 0
78
                UNION
79
                SELECT 'rpp' AS source, COUNT(*) AS value FROM $revisionTable r
80
                  INNER JOIN $pageTable p on p.page_id = r.rev_page
81
                    WHERE p.page_title LIKE 'Requests_for_page_protection%'
82
                        AND r.rev_user_text = :username;";
83
84
        return $this->executeProjectsQuery($sql, [
85
            'username' => $user->getUsername(),
86
        ])->fetchAll();
87
    }
88
}
89