Passed
Push — newinternal-releasecandidate ( e5ef47...40acd0 )
by Simon
08:47
created

RequestListData   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
eloc 37
c 1
b 0
f 0
dl 0
loc 68
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A prepareRequestData() 0 52 2
1
<?php
2
/******************************************************************************
3
 * Wikipedia Account Creation Assistance tool                                 *
4
 *                                                                            *
5
 * All code in this file is released into the public domain by the ACC        *
6
 * Development Team. Please see team.json for a list of contributors.         *
7
 ******************************************************************************/
8
9
namespace Waca\Fragments;
10
11
use Waca\DataObjects\Request;
12
use Waca\DataObjects\User;
13
use Waca\Helpers\SearchHelpers\RequestSearchHelper;
14
use Waca\Helpers\SearchHelpers\UserSearchHelper;
15
use Waca\Pages\PageBan;
16
use Waca\Pages\RequestAction\PageBreakReservation;
17
use Waca\RequestList;
18
19
trait RequestListData
20
{
21
    // function imports from InternalPageBase etc.
22
    protected abstract function getDatabase();
23
24
    protected abstract function getXffTrustProvider();
25
26
    protected abstract function getSiteConfiguration();
27
28
    protected abstract function barrierTest($action, User $user, $pageName = null);
29
30
    /**
31
     * @param Request[] $requests
32
     *
33
     * @return RequestList
34
     */
35
    protected function prepareRequestData(array $requests) : RequestList
36
    {
37
        $requestList = new RequestList();
38
        $requestList->requests = $requests;
39
40
        $userIds = array_map(
41
            function(Request $entry) {
42
                return $entry->getReserved();
43
            },
44
            $requests
45
        );
46
47
        $requestList->userList = UserSearchHelper::get($this->getDatabase())->inIds($userIds)->fetchMap('username');
48
49
        $requestList->requestTrustedIp = [];
50
        $requestList->relatedIpRequests = [];
51
        $requestList->relatedEmailRequests = [];
52
53
        foreach ($requests as $request) {
54
            $trustedIp = $this->getXffTrustProvider()->getTrustedClientIp(
55
                $request->getIp(),
56
                $request->getForwardedIp()
57
            );
58
59
            RequestSearchHelper::get($this->getDatabase())
60
                ->byIp($trustedIp)
61
                ->withConfirmedEmail()
62
                ->excludingPurgedData($this->getSiteConfiguration())
63
                ->excludingRequest($request->getId())
64
                ->getRecordCount($ipCount);
65
66
            RequestSearchHelper::get($this->getDatabase())
67
                ->byEmailAddress($request->getEmail())
68
                ->withConfirmedEmail()
69
                ->excludingPurgedData($this->getSiteConfiguration())
70
                ->excludingRequest($request->getId())
71
                ->getRecordCount($emailCount);
72
73
            $requestList->requestTrustedIp[$request->getId()] = $trustedIp;
74
            $requestList->relatedEmailRequests[$request->getId()] = $emailCount;
75
            $requestList->relatedIpRequests[$request->getId()] = $ipCount;
76
        }
77
78
        $currentUser = User::getCurrent($this->getDatabase());
79
80
        $requestList->canBan = $this->barrierTest('set', $currentUser, PageBan::class);
81
        $requestList->canBreakReservation = $this->barrierTest('force', $currentUser, PageBreakReservation::class);
82
        $requestList->showPrivateData = $this->barrierTest('alwaysSeePrivateData', $currentUser, 'RequestData');
83
        $requestList->dataClearEmail = $this->getSiteConfiguration()->getDataClearEmail();
84
        $requestList->dataClearIp = $this->getSiteConfiguration()->getDataClearIp();
85
86
        return $requestList;
87
    }
88
}
89