Completed
Pull Request — newinternal-bugfixing (#286)
by Simon
17:18 queued 07:20
created
includes/Pages/PageExpandedRequestList.php 1 patch
Indentation   +54 added lines, -54 removed lines patch added patch discarded remove patch
@@ -18,77 +18,77 @@
 block discarded – undo
18 18
 
19 19
 class PageExpandedRequestList extends InternalPageBase
20 20
 {
21
-    /**
22
-     * Main function for this page, when no specific actions are called.
23
-     * @return void
24
-     * @todo This is very similar to the PageMain code, we could probably generalise this somehow
25
-     */
26
-    protected function main()
27
-    {
28
-        $config = $this->getSiteConfiguration();
21
+	/**
22
+	 * Main function for this page, when no specific actions are called.
23
+	 * @return void
24
+	 * @todo This is very similar to the PageMain code, we could probably generalise this somehow
25
+	 */
26
+	protected function main()
27
+	{
28
+		$config = $this->getSiteConfiguration();
29 29
 
30
-        $requestedStatus = WebRequest::getString('status');
31
-        $requestStates = $config->getRequestStates();
30
+		$requestedStatus = WebRequest::getString('status');
31
+		$requestStates = $config->getRequestStates();
32 32
 
33
-        if ($requestedStatus !== null && isset($requestStates[$requestedStatus])) {
33
+		if ($requestedStatus !== null && isset($requestStates[$requestedStatus])) {
34 34
 
35
-            $this->assignCSRFToken();
35
+			$this->assignCSRFToken();
36 36
 
37
-            $database = $this->getDatabase();
37
+			$database = $this->getDatabase();
38 38
 
39
-            if ($config->getEmailConfirmationEnabled()) {
40
-                $query = "SELECT * FROM request WHERE status = :type AND emailconfirm = 'Confirmed';";
41
-                $totalQuery = "SELECT COUNT(id) FROM request WHERE status = :type AND emailconfirm = 'Confirmed';";
42
-            }
43
-            else {
44
-                $query = "SELECT * FROM request WHERE status = :type;";
45
-                $totalQuery = "SELECT COUNT(id) FROM request WHERE status = :type;";
46
-            }
39
+			if ($config->getEmailConfirmationEnabled()) {
40
+				$query = "SELECT * FROM request WHERE status = :type AND emailconfirm = 'Confirmed';";
41
+				$totalQuery = "SELECT COUNT(id) FROM request WHERE status = :type AND emailconfirm = 'Confirmed';";
42
+			}
43
+			else {
44
+				$query = "SELECT * FROM request WHERE status = :type;";
45
+				$totalQuery = "SELECT COUNT(id) FROM request WHERE status = :type;";
46
+			}
47 47
 
48
-            $statement = $database->prepare($query);
48
+			$statement = $database->prepare($query);
49 49
 
50
-            $totalRequestsStatement = $database->prepare($totalQuery);
50
+			$totalRequestsStatement = $database->prepare($totalQuery);
51 51
 
52
-            $this->assign('defaultRequestState', $config->getDefaultRequestStateKey());
52
+			$this->assign('defaultRequestState', $config->getDefaultRequestStateKey());
53 53
 
54
-            $type = $requestedStatus;
54
+			$type = $requestedStatus;
55 55
 
56
-            $statement->bindValue(":type", $type);
57
-            $statement->execute();
56
+			$statement->bindValue(":type", $type);
57
+			$statement->execute();
58 58
 
59
-            $requests = $statement->fetchAll(PDO::FETCH_CLASS, Request::class);
59
+			$requests = $statement->fetchAll(PDO::FETCH_CLASS, Request::class);
60 60
 
61
-            /** @var Request $req */
62
-            foreach ($requests as $req) {
63
-                $req->setDatabase($database);
64
-            }
61
+			/** @var Request $req */
62
+			foreach ($requests as $req) {
63
+				$req->setDatabase($database);
64
+			}
65 65
 
66
-            $this->assign('requests', $requests);
67
-            $this->assign('header', $type);
66
+			$this->assign('requests', $requests);
67
+			$this->assign('header', $type);
68 68
 
69
-            $totalRequestsStatement->bindValue(':type', $type);
70
-            $totalRequestsStatement->execute();
71
-            $totalRequests = $totalRequestsStatement->fetchColumn();
72
-            $totalRequestsStatement->closeCursor();
73
-            $this->assign('totalRequests', $totalRequests);
69
+			$totalRequestsStatement->bindValue(':type', $type);
70
+			$totalRequestsStatement->execute();
71
+			$totalRequests = $totalRequestsStatement->fetchColumn();
72
+			$totalRequestsStatement->closeCursor();
73
+			$this->assign('totalRequests', $totalRequests);
74 74
 
75
-            $userIds = array_map(
76
-                function(Request $entry) {
77
-                    return $entry->getReserved();
78
-                },
79
-                $requests
80
-            );
75
+			$userIds = array_map(
76
+				function(Request $entry) {
77
+					return $entry->getReserved();
78
+				},
79
+				$requests
80
+			);
81 81
 
82
-            $userList = UserSearchHelper::get($this->getDatabase())->inIds($userIds)->fetchMap('username');
83
-            $this->assign('userlist', $userList);
82
+			$userList = UserSearchHelper::get($this->getDatabase())->inIds($userIds)->fetchMap('username');
83
+			$this->assign('userlist', $userList);
84 84
 
85
-            $this->assign('requestLimitShowOnly', $config->getMiserModeLimit());
85
+			$this->assign('requestLimitShowOnly', $config->getMiserModeLimit());
86 86
 
87
-            $currentUser = User::getCurrent($database);
88
-            $this->assign('canBan', $this->barrierTest('set', $currentUser, PageBan::class));
89
-            $this->assign('canBreakReservation', $this->barrierTest('force', $currentUser, PageBreakReservation::class));
87
+			$currentUser = User::getCurrent($database);
88
+			$this->assign('canBan', $this->barrierTest('set', $currentUser, PageBan::class));
89
+			$this->assign('canBreakReservation', $this->barrierTest('force', $currentUser, PageBreakReservation::class));
90 90
 
91
-            $this->setTemplate('mainpage/expandedrequestlist.tpl');
92
-        }
93
-    }
91
+			$this->setTemplate('mainpage/expandedrequestlist.tpl');
92
+		}
93
+	}
94 94
 }
Please login to merge, or discard this patch.
includes/Pages/PageViewRequest.php 1 patch
Indentation   +209 added lines, -209 removed lines patch added patch discarded remove patch
@@ -24,213 +24,213 @@
 block discarded – undo
24 24
 
25 25
 class PageViewRequest extends InternalPageBase
26 26
 {
27
-    use RequestData;
28
-    const STATUS_SYMBOL_OPEN = '&#x2610';
29
-    const STATUS_SYMBOL_ACCEPTED = '&#x2611';
30
-    const STATUS_SYMBOL_REJECTED = '&#x2612';
31
-
32
-    /**
33
-     * Main function for this page, when no specific actions are called.
34
-     * @throws ApplicationLogicException
35
-     */
36
-    protected function main()
37
-    {
38
-        // set up csrf protection
39
-        $this->assignCSRFToken();
40
-
41
-        // get some useful objects
42
-        $database = $this->getDatabase();
43
-        $request = $this->getRequest($database, WebRequest::getInt('id'));
44
-        $config = $this->getSiteConfiguration();
45
-        $currentUser = User::getCurrent($database);
46
-
47
-        // Test we should be able to look at this request
48
-        if ($config->getEmailConfirmationEnabled()) {
49
-            if ($request->getEmailConfirm() !== 'Confirmed') {
50
-                // Not allowed to look at this yet.
51
-                throw new ApplicationLogicException('The email address has not yet been confirmed for this request.');
52
-            }
53
-        }
54
-
55
-        $this->setupBasicData($request, $config);
56
-
57
-        $this->setupUsernameData($request);
58
-
59
-        $this->setupTitle($request);
60
-
61
-        $this->setupReservationDetails($request->getReserved(), $database, $currentUser);
62
-        $this->setupGeneralData($database);
63
-
64
-        $this->assign('requestDataCleared', false);
65
-        if ($request->getEmail() === $this->getSiteConfiguration()->getDataClearEmail()) {
66
-            $this->assign('requestDataCleared', true);
67
-        }
68
-
69
-        $allowedPrivateData = $this->isAllowedPrivateData($request, $currentUser);
70
-
71
-        $this->setupLogData($request, $database);
72
-
73
-        if ($allowedPrivateData) {
74
-            $this->setTemplate('view-request/main-with-data.tpl');
75
-            $this->setupPrivateData($request, $currentUser, $this->getSiteConfiguration(), $database);
76
-
77
-            $this->assign('canSetBan', $this->barrierTest('set', $currentUser, PageBan::class));
78
-            $this->assign('canSeeCheckuserData', $this->barrierTest('seeUserAgentData', $currentUser, 'RequestData'));
79
-
80
-            if ($this->barrierTest('seeUserAgentData', $currentUser, 'RequestData')) {
81
-                $this->setTemplate('view-request/main-with-checkuser-data.tpl');
82
-                $this->setupCheckUserData($request);
83
-            }
84
-        }
85
-        else {
86
-            $this->setTemplate('view-request/main.tpl');
87
-        }
88
-    }
89
-
90
-    /**
91
-     * @param Request $request
92
-     */
93
-    protected function setupTitle(Request $request)
94
-    {
95
-        $statusSymbol = self::STATUS_SYMBOL_OPEN;
96
-        if ($request->getStatus() === 'Closed') {
97
-            if ($request->getWasCreated()) {
98
-                $statusSymbol = self::STATUS_SYMBOL_ACCEPTED;
99
-            }
100
-            else {
101
-                $statusSymbol = self::STATUS_SYMBOL_REJECTED;
102
-            }
103
-        }
104
-
105
-        $this->setHtmlTitle($statusSymbol . ' #' . $request->getId());
106
-    }
107
-
108
-    /**
109
-     * Sets up data unrelated to the request, such as the email template information
110
-     *
111
-     * @param PdoDatabase $database
112
-     */
113
-    protected function setupGeneralData(PdoDatabase $database)
114
-    {
115
-        $config = $this->getSiteConfiguration();
116
-
117
-        $this->assign('createAccountReason', 'Requested account at [[WP:ACC]], request #');
118
-
119
-        $this->assign('defaultRequestState', $config->getDefaultRequestStateKey());
120
-
121
-        $this->assign('requestStates', $config->getRequestStates());
122
-
123
-        /** @var EmailTemplate $createdTemplate */
124
-        $createdTemplate = EmailTemplate::getById($config->getDefaultCreatedTemplateId(), $database);
125
-
126
-        $this->assign('createdHasJsQuestion', $createdTemplate->getJsquestion() != '');
127
-        $this->assign('createdJsQuestion', $createdTemplate->getJsquestion());
128
-        $this->assign('createdId', $createdTemplate->getId());
129
-        $this->assign('createdName', $createdTemplate->getName());
130
-
131
-        $createReasons = EmailTemplate::getActiveTemplates(EmailTemplate::CREATED, $database);
132
-        $this->assign("createReasons", $createReasons);
133
-        $declineReasons = EmailTemplate::getActiveTemplates(EmailTemplate::NOT_CREATED, $database);
134
-        $this->assign("declineReasons", $declineReasons);
135
-
136
-        $allCreateReasons = EmailTemplate::getAllActiveTemplates(EmailTemplate::CREATED, $database);
137
-        $this->assign("allCreateReasons", $allCreateReasons);
138
-        $allDeclineReasons = EmailTemplate::getAllActiveTemplates(EmailTemplate::NOT_CREATED, $database);
139
-        $this->assign("allDeclineReasons", $allDeclineReasons);
140
-        $allOtherReasons = EmailTemplate::getAllActiveTemplates(false, $database);
141
-        $this->assign("allOtherReasons", $allOtherReasons);
142
-
143
-        $this->getTypeAheadHelper()->defineTypeAheadSource('username-typeahead', function() use ($database) {
144
-            return UserSearchHelper::get($database)->byStatus('Active')->fetchColumn('username');
145
-        });
146
-    }
147
-
148
-    private function setupLogData(Request $request, PdoDatabase $database)
149
-    {
150
-        $currentUser = User::getCurrent($database);
151
-
152
-        $logs = LogHelper::getRequestLogsWithComments($request->getId(), $database, $this->getSecurityManager());
153
-        $requestLogs = array();
154
-
155
-        if (trim($request->getComment()) !== "") {
156
-            $requestLogs[] = array(
157
-                'type'     => 'comment',
158
-                'security' => 'user',
159
-                'userid'   => null,
160
-                'user'     => $request->getName(),
161
-                'entry'    => null,
162
-                'time'     => $request->getDate(),
163
-                'canedit'  => false,
164
-                'id'       => $request->getId(),
165
-                'comment'  => $request->getComment(),
166
-            );
167
-        }
168
-
169
-        /** @var User[] $nameCache */
170
-        $nameCache = array();
171
-
172
-        $editableComments = $this->barrierTest('editOthers', $currentUser, PageEditComment::class);
173
-
174
-        /** @var Log|Comment $entry */
175
-        foreach ($logs as $entry) {
176
-            // both log and comment have a 'user' field
177
-            if (!array_key_exists($entry->getUser(), $nameCache)) {
178
-                $entryUser = User::getById($entry->getUser(), $database);
179
-                $nameCache[$entry->getUser()] = $entryUser;
180
-            }
181
-
182
-            if ($entry instanceof Comment) {
183
-                $requestLogs[] = array(
184
-                    'type'     => 'comment',
185
-                    'security' => $entry->getVisibility(),
186
-                    'user'     => $nameCache[$entry->getUser()]->getUsername(),
187
-                    'userid'   => $entry->getUser() == -1 ? null : $entry->getUser(),
188
-                    'entry'    => null,
189
-                    'time'     => $entry->getTime(),
190
-                    'canedit'  => ($editableComments || $entry->getUser() == $currentUser->getId()),
191
-                    'id'       => $entry->getId(),
192
-                    'comment'  => $entry->getComment(),
193
-                );
194
-            }
195
-
196
-            if ($entry instanceof Log) {
197
-                $invalidUserId = $entry->getUser() === -1 || $entry->getUser() === 0;
198
-                $entryUser = $invalidUserId ? User::getCommunity() : $nameCache[$entry->getUser()];
199
-
200
-                $requestLogs[] = array(
201
-                    'type'     => 'log',
202
-                    'security' => 'user',
203
-                    'userid'   => $entry->getUser() == -1 ? null : $entry->getUser(),
204
-                    'user'     => $entryUser->getUsername(),
205
-                    'entry'    => LogHelper::getLogDescription($entry),
206
-                    'time'     => $entry->getTimestamp(),
207
-                    'canedit'  => false,
208
-                    'id'       => $entry->getId(),
209
-                    'comment'  => $entry->getComment(),
210
-                );
211
-            }
212
-        }
213
-
214
-        $this->assign("requestLogs", $requestLogs);
215
-    }
216
-
217
-    /**
218
-     * @param Request $request
219
-     */
220
-    protected function setupUsernameData(Request $request)
221
-    {
222
-        $blacklistData = $this->getBlacklistHelper()->isBlacklisted($request->getName());
223
-
224
-        $this->assign('requestIsBlacklisted', $blacklistData !== false);
225
-        $this->assign('requestBlacklist', $blacklistData);
226
-
227
-        try {
228
-            $spoofs = $this->getAntiSpoofProvider()->getSpoofs($request->getName());
229
-        }
230
-        catch (Exception $ex) {
231
-            $spoofs = $ex->getMessage();
232
-        }
233
-
234
-        $this->assign("spoofs", $spoofs);
235
-    }
27
+	use RequestData;
28
+	const STATUS_SYMBOL_OPEN = '&#x2610';
29
+	const STATUS_SYMBOL_ACCEPTED = '&#x2611';
30
+	const STATUS_SYMBOL_REJECTED = '&#x2612';
31
+
32
+	/**
33
+	 * Main function for this page, when no specific actions are called.
34
+	 * @throws ApplicationLogicException
35
+	 */
36
+	protected function main()
37
+	{
38
+		// set up csrf protection
39
+		$this->assignCSRFToken();
40
+
41
+		// get some useful objects
42
+		$database = $this->getDatabase();
43
+		$request = $this->getRequest($database, WebRequest::getInt('id'));
44
+		$config = $this->getSiteConfiguration();
45
+		$currentUser = User::getCurrent($database);
46
+
47
+		// Test we should be able to look at this request
48
+		if ($config->getEmailConfirmationEnabled()) {
49
+			if ($request->getEmailConfirm() !== 'Confirmed') {
50
+				// Not allowed to look at this yet.
51
+				throw new ApplicationLogicException('The email address has not yet been confirmed for this request.');
52
+			}
53
+		}
54
+
55
+		$this->setupBasicData($request, $config);
56
+
57
+		$this->setupUsernameData($request);
58
+
59
+		$this->setupTitle($request);
60
+
61
+		$this->setupReservationDetails($request->getReserved(), $database, $currentUser);
62
+		$this->setupGeneralData($database);
63
+
64
+		$this->assign('requestDataCleared', false);
65
+		if ($request->getEmail() === $this->getSiteConfiguration()->getDataClearEmail()) {
66
+			$this->assign('requestDataCleared', true);
67
+		}
68
+
69
+		$allowedPrivateData = $this->isAllowedPrivateData($request, $currentUser);
70
+
71
+		$this->setupLogData($request, $database);
72
+
73
+		if ($allowedPrivateData) {
74
+			$this->setTemplate('view-request/main-with-data.tpl');
75
+			$this->setupPrivateData($request, $currentUser, $this->getSiteConfiguration(), $database);
76
+
77
+			$this->assign('canSetBan', $this->barrierTest('set', $currentUser, PageBan::class));
78
+			$this->assign('canSeeCheckuserData', $this->barrierTest('seeUserAgentData', $currentUser, 'RequestData'));
79
+
80
+			if ($this->barrierTest('seeUserAgentData', $currentUser, 'RequestData')) {
81
+				$this->setTemplate('view-request/main-with-checkuser-data.tpl');
82
+				$this->setupCheckUserData($request);
83
+			}
84
+		}
85
+		else {
86
+			$this->setTemplate('view-request/main.tpl');
87
+		}
88
+	}
89
+
90
+	/**
91
+	 * @param Request $request
92
+	 */
93
+	protected function setupTitle(Request $request)
94
+	{
95
+		$statusSymbol = self::STATUS_SYMBOL_OPEN;
96
+		if ($request->getStatus() === 'Closed') {
97
+			if ($request->getWasCreated()) {
98
+				$statusSymbol = self::STATUS_SYMBOL_ACCEPTED;
99
+			}
100
+			else {
101
+				$statusSymbol = self::STATUS_SYMBOL_REJECTED;
102
+			}
103
+		}
104
+
105
+		$this->setHtmlTitle($statusSymbol . ' #' . $request->getId());
106
+	}
107
+
108
+	/**
109
+	 * Sets up data unrelated to the request, such as the email template information
110
+	 *
111
+	 * @param PdoDatabase $database
112
+	 */
113
+	protected function setupGeneralData(PdoDatabase $database)
114
+	{
115
+		$config = $this->getSiteConfiguration();
116
+
117
+		$this->assign('createAccountReason', 'Requested account at [[WP:ACC]], request #');
118
+
119
+		$this->assign('defaultRequestState', $config->getDefaultRequestStateKey());
120
+
121
+		$this->assign('requestStates', $config->getRequestStates());
122
+
123
+		/** @var EmailTemplate $createdTemplate */
124
+		$createdTemplate = EmailTemplate::getById($config->getDefaultCreatedTemplateId(), $database);
125
+
126
+		$this->assign('createdHasJsQuestion', $createdTemplate->getJsquestion() != '');
127
+		$this->assign('createdJsQuestion', $createdTemplate->getJsquestion());
128
+		$this->assign('createdId', $createdTemplate->getId());
129
+		$this->assign('createdName', $createdTemplate->getName());
130
+
131
+		$createReasons = EmailTemplate::getActiveTemplates(EmailTemplate::CREATED, $database);
132
+		$this->assign("createReasons", $createReasons);
133
+		$declineReasons = EmailTemplate::getActiveTemplates(EmailTemplate::NOT_CREATED, $database);
134
+		$this->assign("declineReasons", $declineReasons);
135
+
136
+		$allCreateReasons = EmailTemplate::getAllActiveTemplates(EmailTemplate::CREATED, $database);
137
+		$this->assign("allCreateReasons", $allCreateReasons);
138
+		$allDeclineReasons = EmailTemplate::getAllActiveTemplates(EmailTemplate::NOT_CREATED, $database);
139
+		$this->assign("allDeclineReasons", $allDeclineReasons);
140
+		$allOtherReasons = EmailTemplate::getAllActiveTemplates(false, $database);
141
+		$this->assign("allOtherReasons", $allOtherReasons);
142
+
143
+		$this->getTypeAheadHelper()->defineTypeAheadSource('username-typeahead', function() use ($database) {
144
+			return UserSearchHelper::get($database)->byStatus('Active')->fetchColumn('username');
145
+		});
146
+	}
147
+
148
+	private function setupLogData(Request $request, PdoDatabase $database)
149
+	{
150
+		$currentUser = User::getCurrent($database);
151
+
152
+		$logs = LogHelper::getRequestLogsWithComments($request->getId(), $database, $this->getSecurityManager());
153
+		$requestLogs = array();
154
+
155
+		if (trim($request->getComment()) !== "") {
156
+			$requestLogs[] = array(
157
+				'type'     => 'comment',
158
+				'security' => 'user',
159
+				'userid'   => null,
160
+				'user'     => $request->getName(),
161
+				'entry'    => null,
162
+				'time'     => $request->getDate(),
163
+				'canedit'  => false,
164
+				'id'       => $request->getId(),
165
+				'comment'  => $request->getComment(),
166
+			);
167
+		}
168
+
169
+		/** @var User[] $nameCache */
170
+		$nameCache = array();
171
+
172
+		$editableComments = $this->barrierTest('editOthers', $currentUser, PageEditComment::class);
173
+
174
+		/** @var Log|Comment $entry */
175
+		foreach ($logs as $entry) {
176
+			// both log and comment have a 'user' field
177
+			if (!array_key_exists($entry->getUser(), $nameCache)) {
178
+				$entryUser = User::getById($entry->getUser(), $database);
179
+				$nameCache[$entry->getUser()] = $entryUser;
180
+			}
181
+
182
+			if ($entry instanceof Comment) {
183
+				$requestLogs[] = array(
184
+					'type'     => 'comment',
185
+					'security' => $entry->getVisibility(),
186
+					'user'     => $nameCache[$entry->getUser()]->getUsername(),
187
+					'userid'   => $entry->getUser() == -1 ? null : $entry->getUser(),
188
+					'entry'    => null,
189
+					'time'     => $entry->getTime(),
190
+					'canedit'  => ($editableComments || $entry->getUser() == $currentUser->getId()),
191
+					'id'       => $entry->getId(),
192
+					'comment'  => $entry->getComment(),
193
+				);
194
+			}
195
+
196
+			if ($entry instanceof Log) {
197
+				$invalidUserId = $entry->getUser() === -1 || $entry->getUser() === 0;
198
+				$entryUser = $invalidUserId ? User::getCommunity() : $nameCache[$entry->getUser()];
199
+
200
+				$requestLogs[] = array(
201
+					'type'     => 'log',
202
+					'security' => 'user',
203
+					'userid'   => $entry->getUser() == -1 ? null : $entry->getUser(),
204
+					'user'     => $entryUser->getUsername(),
205
+					'entry'    => LogHelper::getLogDescription($entry),
206
+					'time'     => $entry->getTimestamp(),
207
+					'canedit'  => false,
208
+					'id'       => $entry->getId(),
209
+					'comment'  => $entry->getComment(),
210
+				);
211
+			}
212
+		}
213
+
214
+		$this->assign("requestLogs", $requestLogs);
215
+	}
216
+
217
+	/**
218
+	 * @param Request $request
219
+	 */
220
+	protected function setupUsernameData(Request $request)
221
+	{
222
+		$blacklistData = $this->getBlacklistHelper()->isBlacklisted($request->getName());
223
+
224
+		$this->assign('requestIsBlacklisted', $blacklistData !== false);
225
+		$this->assign('requestBlacklist', $blacklistData);
226
+
227
+		try {
228
+			$spoofs = $this->getAntiSpoofProvider()->getSpoofs($request->getName());
229
+		}
230
+		catch (Exception $ex) {
231
+			$spoofs = $ex->getMessage();
232
+		}
233
+
234
+		$this->assign("spoofs", $spoofs);
235
+	}
236 236
 }
Please login to merge, or discard this patch.
includes/Helpers/SearchHelpers/SearchHelperBase.php 3 patches
Indentation   +196 added lines, -196 removed lines patch added patch discarded remove patch
@@ -15,200 +15,200 @@
 block discarded – undo
15 15
 
16 16
 abstract class SearchHelperBase
17 17
 {
18
-    /** @var PdoDatabase */
19
-    protected $database;
20
-    /** @var array */
21
-    protected $parameterList = array();
22
-    /** @var null|int */
23
-    private $limit = null;
24
-    /** @var null|int */
25
-    private $offset = null;
26
-    private $orderBy = null;
27
-    /**
28
-     * @var string The where clause.
29
-     *
30
-     * (the 1=1 condition will be optimised out of the query by the query planner, and simplifies our code here). Note
31
-     * that we use positional parameters instead of named parameters because we don't know many times different options
32
-     * will be called (looking at excluding() here, but there's the option for others).
33
-     */
34
-    protected $whereClause = ' WHERE 1 = 1';
35
-    /** @var string */
36
-    protected $table;
37
-    protected $joinClause = '';
38
-    private $targetClass;
39
-
40
-    /**
41
-     * SearchHelperBase constructor.
42
-     *
43
-     * @param PdoDatabase $database
44
-     * @param string      $table
45
-     * @param             $targetClass
46
-     * @param null|string $order Order by clause, excluding ORDER BY.
47
-     */
48
-    protected function __construct(PdoDatabase $database, $table, $targetClass, $order = null)
49
-    {
50
-        $this->database = $database;
51
-        $this->table = $table;
52
-        $this->orderBy = $order;
53
-        $this->targetClass = $targetClass;
54
-    }
55
-
56
-    /**
57
-     * Finalises the database query, and executes it, returning a set of objects.
58
-     *
59
-     * @return DataObject[]
60
-     */
61
-    public function fetch()
62
-    {
63
-        $statement = $this->getData();
64
-
65
-        /** @var DataObject[] $returnedObjects */
66
-        $returnedObjects = $statement->fetchAll(PDO::FETCH_CLASS, $this->targetClass);
67
-        foreach ($returnedObjects as $req) {
68
-            $req->setDatabase($this->database);
69
-        }
70
-
71
-        return $returnedObjects;
72
-    }
73
-
74
-    /**
75
-     * Finalises the database query, and executes it, returning only the requested column.
76
-     *
77
-     * @param string $column The required column
78
-     * @return array
79
-     */
80
-    public function fetchColumn($column){
81
-        $statement = $this->getData(array($column));
82
-
83
-        return $statement->fetchAll(PDO::FETCH_COLUMN);
84
-    }
85
-
86
-    public function fetchMap($column){
87
-        $statement = $this->getData(array('id', $column));
88
-
89
-        $data = $statement->fetchAll(PDO::FETCH_ASSOC);
90
-        $map = array();
91
-
92
-        foreach ($data as $row) {
93
-            $map[$row['id']] = $row[$column];
94
-        }
95
-
96
-        return $map;
97
-    }
98
-
99
-    /**
100
-     * @param int $count Returns the record count of the result set
101
-     *
102
-     * @return $this
103
-     */
104
-    public function getRecordCount(&$count)
105
-    {
106
-        $query = 'SELECT /* SearchHelper */ COUNT(*) FROM ' . $this->table . ' origin ';
107
-        $query .= $this->joinClause . $this->whereClause;
108
-
109
-        $statement = $this->database->prepare($query);
110
-        $statement->execute($this->parameterList);
111
-
112
-        $count = $statement->fetchColumn(0);
113
-        $statement->closeCursor();
114
-
115
-        return $this;
116
-    }
117
-
118
-    /**
119
-     * Limits the results
120
-     *
121
-     * @param integer      $limit
122
-     * @param integer|null $offset
123
-     *
124
-     * @return $this
125
-     *
126
-     */
127
-    public function limit($limit, $offset = null)
128
-    {
129
-        $this->limit = $limit;
130
-        $this->offset = $offset;
131
-
132
-        return $this;
133
-    }
134
-
135
-    private function applyLimit()
136
-    {
137
-        $clause = '';
138
-        if ($this->limit !== null) {
139
-            $clause = ' LIMIT ?';
140
-            $this->parameterList[] = $this->limit;
141
-
142
-            if ($this->offset !== null) {
143
-                $clause .= ' OFFSET ?';
144
-                $this->parameterList[] = $this->offset;
145
-            }
146
-        }
147
-
148
-        return $clause;
149
-    }
150
-
151
-    private function applyOrder()
152
-    {
153
-        if ($this->orderBy !== null) {
154
-            return ' ORDER BY ' . $this->orderBy;
155
-        }
156
-
157
-        return '';
158
-    }
159
-
160
-    /**
161
-     * @param array $columns
162
-     *
163
-     * @return PDOStatement
164
-     */
165
-    private function getData($columns = array('*'))
166
-    {
167
-        $query = $this->buildQuery($columns);
168
-        $query .= $this->applyOrder();
169
-        $query .= $this->applyLimit();
170
-
171
-        $statement = $this->database->prepare($query);
172
-        $statement->execute($this->parameterList);
173
-
174
-        return $statement;
175
-    }
176
-
177
-    /**
178
-     * @param array $columns
179
-     *
180
-     * @return string
181
-     */
182
-    protected function buildQuery($columns)
183
-    {
184
-        $colData = array();
185
-        foreach ($columns as $c) {
186
-            $colData[] = 'origin.' . $c;
187
-        }
188
-
189
-        $query = 'SELECT /* SearchHelper */ ' . implode(', ', $colData) . ' FROM ' . $this->table . ' origin ';
190
-        $query .= $this->joinClause . $this->whereClause;
191
-
192
-        return $query;
193
-    }
194
-
195
-    public function inIds($idList) {
196
-        $this->inClause('id', $idList);
197
-        return $this;
198
-    }
199
-
200
-    protected function inClause($column, $values) {
201
-        if (count($values) === 0) {
202
-            return;
203
-        }
204
-
205
-        // Urgh. OK. You can't use IN() with parameters directly, so let's munge something together.
206
-        $valueCount = count($values);
207
-
208
-        // Firstly, let's create a string of question marks, which will do as positional parameters.
209
-        $inSection = str_repeat('?,', $valueCount - 1) . '?';
210
-
211
-        $this->whereClause .= " AND {$column} IN ({$inSection})";
212
-        $this->parameterList = array_merge($this->parameterList, $values);
213
-    }
18
+	/** @var PdoDatabase */
19
+	protected $database;
20
+	/** @var array */
21
+	protected $parameterList = array();
22
+	/** @var null|int */
23
+	private $limit = null;
24
+	/** @var null|int */
25
+	private $offset = null;
26
+	private $orderBy = null;
27
+	/**
28
+	 * @var string The where clause.
29
+	 *
30
+	 * (the 1=1 condition will be optimised out of the query by the query planner, and simplifies our code here). Note
31
+	 * that we use positional parameters instead of named parameters because we don't know many times different options
32
+	 * will be called (looking at excluding() here, but there's the option for others).
33
+	 */
34
+	protected $whereClause = ' WHERE 1 = 1';
35
+	/** @var string */
36
+	protected $table;
37
+	protected $joinClause = '';
38
+	private $targetClass;
39
+
40
+	/**
41
+	 * SearchHelperBase constructor.
42
+	 *
43
+	 * @param PdoDatabase $database
44
+	 * @param string      $table
45
+	 * @param             $targetClass
46
+	 * @param null|string $order Order by clause, excluding ORDER BY.
47
+	 */
48
+	protected function __construct(PdoDatabase $database, $table, $targetClass, $order = null)
49
+	{
50
+		$this->database = $database;
51
+		$this->table = $table;
52
+		$this->orderBy = $order;
53
+		$this->targetClass = $targetClass;
54
+	}
55
+
56
+	/**
57
+	 * Finalises the database query, and executes it, returning a set of objects.
58
+	 *
59
+	 * @return DataObject[]
60
+	 */
61
+	public function fetch()
62
+	{
63
+		$statement = $this->getData();
64
+
65
+		/** @var DataObject[] $returnedObjects */
66
+		$returnedObjects = $statement->fetchAll(PDO::FETCH_CLASS, $this->targetClass);
67
+		foreach ($returnedObjects as $req) {
68
+			$req->setDatabase($this->database);
69
+		}
70
+
71
+		return $returnedObjects;
72
+	}
73
+
74
+	/**
75
+	 * Finalises the database query, and executes it, returning only the requested column.
76
+	 *
77
+	 * @param string $column The required column
78
+	 * @return array
79
+	 */
80
+	public function fetchColumn($column){
81
+		$statement = $this->getData(array($column));
82
+
83
+		return $statement->fetchAll(PDO::FETCH_COLUMN);
84
+	}
85
+
86
+	public function fetchMap($column){
87
+		$statement = $this->getData(array('id', $column));
88
+
89
+		$data = $statement->fetchAll(PDO::FETCH_ASSOC);
90
+		$map = array();
91
+
92
+		foreach ($data as $row) {
93
+			$map[$row['id']] = $row[$column];
94
+		}
95
+
96
+		return $map;
97
+	}
98
+
99
+	/**
100
+	 * @param int $count Returns the record count of the result set
101
+	 *
102
+	 * @return $this
103
+	 */
104
+	public function getRecordCount(&$count)
105
+	{
106
+		$query = 'SELECT /* SearchHelper */ COUNT(*) FROM ' . $this->table . ' origin ';
107
+		$query .= $this->joinClause . $this->whereClause;
108
+
109
+		$statement = $this->database->prepare($query);
110
+		$statement->execute($this->parameterList);
111
+
112
+		$count = $statement->fetchColumn(0);
113
+		$statement->closeCursor();
114
+
115
+		return $this;
116
+	}
117
+
118
+	/**
119
+	 * Limits the results
120
+	 *
121
+	 * @param integer      $limit
122
+	 * @param integer|null $offset
123
+	 *
124
+	 * @return $this
125
+	 *
126
+	 */
127
+	public function limit($limit, $offset = null)
128
+	{
129
+		$this->limit = $limit;
130
+		$this->offset = $offset;
131
+
132
+		return $this;
133
+	}
134
+
135
+	private function applyLimit()
136
+	{
137
+		$clause = '';
138
+		if ($this->limit !== null) {
139
+			$clause = ' LIMIT ?';
140
+			$this->parameterList[] = $this->limit;
141
+
142
+			if ($this->offset !== null) {
143
+				$clause .= ' OFFSET ?';
144
+				$this->parameterList[] = $this->offset;
145
+			}
146
+		}
147
+
148
+		return $clause;
149
+	}
150
+
151
+	private function applyOrder()
152
+	{
153
+		if ($this->orderBy !== null) {
154
+			return ' ORDER BY ' . $this->orderBy;
155
+		}
156
+
157
+		return '';
158
+	}
159
+
160
+	/**
161
+	 * @param array $columns
162
+	 *
163
+	 * @return PDOStatement
164
+	 */
165
+	private function getData($columns = array('*'))
166
+	{
167
+		$query = $this->buildQuery($columns);
168
+		$query .= $this->applyOrder();
169
+		$query .= $this->applyLimit();
170
+
171
+		$statement = $this->database->prepare($query);
172
+		$statement->execute($this->parameterList);
173
+
174
+		return $statement;
175
+	}
176
+
177
+	/**
178
+	 * @param array $columns
179
+	 *
180
+	 * @return string
181
+	 */
182
+	protected function buildQuery($columns)
183
+	{
184
+		$colData = array();
185
+		foreach ($columns as $c) {
186
+			$colData[] = 'origin.' . $c;
187
+		}
188
+
189
+		$query = 'SELECT /* SearchHelper */ ' . implode(', ', $colData) . ' FROM ' . $this->table . ' origin ';
190
+		$query .= $this->joinClause . $this->whereClause;
191
+
192
+		return $query;
193
+	}
194
+
195
+	public function inIds($idList) {
196
+		$this->inClause('id', $idList);
197
+		return $this;
198
+	}
199
+
200
+	protected function inClause($column, $values) {
201
+		if (count($values) === 0) {
202
+			return;
203
+		}
204
+
205
+		// Urgh. OK. You can't use IN() with parameters directly, so let's munge something together.
206
+		$valueCount = count($values);
207
+
208
+		// Firstly, let's create a string of question marks, which will do as positional parameters.
209
+		$inSection = str_repeat('?,', $valueCount - 1) . '?';
210
+
211
+		$this->whereClause .= " AND {$column} IN ({$inSection})";
212
+		$this->parameterList = array_merge($this->parameterList, $values);
213
+	}
214 214
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -77,13 +77,13 @@  discard block
 block discarded – undo
77 77
      * @param string $column The required column
78 78
      * @return array
79 79
      */
80
-    public function fetchColumn($column){
80
+    public function fetchColumn($column) {
81 81
         $statement = $this->getData(array($column));
82 82
 
83 83
         return $statement->fetchAll(PDO::FETCH_COLUMN);
84 84
     }
85 85
 
86
-    public function fetchMap($column){
86
+    public function fetchMap($column) {
87 87
         $statement = $this->getData(array('id', $column));
88 88
 
89 89
         $data = $statement->fetchAll(PDO::FETCH_ASSOC);
@@ -103,8 +103,8 @@  discard block
 block discarded – undo
103 103
      */
104 104
     public function getRecordCount(&$count)
105 105
     {
106
-        $query = 'SELECT /* SearchHelper */ COUNT(*) FROM ' . $this->table . ' origin ';
107
-        $query .= $this->joinClause . $this->whereClause;
106
+        $query = 'SELECT /* SearchHelper */ COUNT(*) FROM '.$this->table.' origin ';
107
+        $query .= $this->joinClause.$this->whereClause;
108 108
 
109 109
         $statement = $this->database->prepare($query);
110 110
         $statement->execute($this->parameterList);
@@ -151,7 +151,7 @@  discard block
 block discarded – undo
151 151
     private function applyOrder()
152 152
     {
153 153
         if ($this->orderBy !== null) {
154
-            return ' ORDER BY ' . $this->orderBy;
154
+            return ' ORDER BY '.$this->orderBy;
155 155
         }
156 156
 
157 157
         return '';
@@ -183,11 +183,11 @@  discard block
 block discarded – undo
183 183
     {
184 184
         $colData = array();
185 185
         foreach ($columns as $c) {
186
-            $colData[] = 'origin.' . $c;
186
+            $colData[] = 'origin.'.$c;
187 187
         }
188 188
 
189
-        $query = 'SELECT /* SearchHelper */ ' . implode(', ', $colData) . ' FROM ' . $this->table . ' origin ';
190
-        $query .= $this->joinClause . $this->whereClause;
189
+        $query = 'SELECT /* SearchHelper */ '.implode(', ', $colData).' FROM '.$this->table.' origin ';
190
+        $query .= $this->joinClause.$this->whereClause;
191 191
 
192 192
         return $query;
193 193
     }
@@ -206,7 +206,7 @@  discard block
 block discarded – undo
206 206
         $valueCount = count($values);
207 207
 
208 208
         // Firstly, let's create a string of question marks, which will do as positional parameters.
209
-        $inSection = str_repeat('?,', $valueCount - 1) . '?';
209
+        $inSection = str_repeat('?,', $valueCount - 1).'?';
210 210
 
211 211
         $this->whereClause .= " AND {$column} IN ({$inSection})";
212 212
         $this->parameterList = array_merge($this->parameterList, $values);
Please login to merge, or discard this patch.
Braces   +8 added lines, -4 removed lines patch added patch discarded remove patch
@@ -77,13 +77,15 @@  discard block
 block discarded – undo
77 77
      * @param string $column The required column
78 78
      * @return array
79 79
      */
80
-    public function fetchColumn($column){
80
+    public function fetchColumn($column)
81
+    {
81 82
         $statement = $this->getData(array($column));
82 83
 
83 84
         return $statement->fetchAll(PDO::FETCH_COLUMN);
84 85
     }
85 86
 
86
-    public function fetchMap($column){
87
+    public function fetchMap($column)
88
+    {
87 89
         $statement = $this->getData(array('id', $column));
88 90
 
89 91
         $data = $statement->fetchAll(PDO::FETCH_ASSOC);
@@ -192,12 +194,14 @@  discard block
 block discarded – undo
192 194
         return $query;
193 195
     }
194 196
 
195
-    public function inIds($idList) {
197
+    public function inIds($idList)
198
+    {
196 199
         $this->inClause('id', $idList);
197 200
         return $this;
198 201
     }
199 202
 
200
-    protected function inClause($column, $values) {
203
+    protected function inClause($column, $values)
204
+    {
201 205
         if (count($values) === 0) {
202 206
             return;
203 207
         }
Please login to merge, or discard this patch.
includes/Pages/PageLog.php 1 patch
Indentation   +145 added lines, -145 removed lines patch added patch discarded remove patch
@@ -18,149 +18,149 @@
 block discarded – undo
18 18
 
19 19
 class PageLog extends InternalPageBase
20 20
 {
21
-    /**
22
-     * Main function for this page, when no specific actions are called.
23
-     */
24
-    protected function main()
25
-    {
26
-        $this->setHtmlTitle('Logs');
27
-
28
-        $filterUser = WebRequest::getString('filterUser');
29
-        $filterAction = WebRequest::getString('filterAction');
30
-        $filterObjectType = WebRequest::getString('filterObjectType');
31
-        $filterObjectId = WebRequest::getInt('filterObjectId');
32
-
33
-        $database = $this->getDatabase();
34
-
35
-        if (!array_key_exists($filterObjectType, LogHelper::getObjectTypes())) {
36
-            $filterObjectType = null;
37
-        }
38
-
39
-        $this->getTypeAheadHelper()->defineTypeAheadSource('username-typeahead', function() use ($database) {
40
-            return UserSearchHelper::get($database)->fetchColumn('username');
41
-        });
42
-
43
-        $limit = WebRequest::getInt('limit');
44
-        if ($limit === null) {
45
-            $limit = 100;
46
-        }
47
-
48
-        $page = WebRequest::getInt('page');
49
-        if ($page === null) {
50
-            $page = 1;
51
-        }
52
-
53
-        $offset = ($page - 1) * $limit;
54
-
55
-        $logSearch = LogSearchHelper::get($database)->limit($limit, $offset);
56
-        $this->setupSearchHelper($logSearch, $database, $filterUser, $filterAction, $filterObjectType, $filterObjectId);
57
-
58
-        /** @var Log[] $logs */
59
-        $logs = $logSearch->getRecordCount($count)->fetch();
60
-
61
-        if ($count === 0) {
62
-            $this->assign('logs', array());
63
-            $this->setTemplate('logs/main.tpl');
64
-
65
-            return;
66
-        }
67
-
68
-        list($users, $logData) = LogHelper::prepareLogsForTemplate($logs, $database, $this->getSiteConfiguration());
69
-
70
-        $this->setupPageData($page, $limit, $count);
71
-
72
-        $this->assign("logs", $logData);
73
-        $this->assign("users", $users);
74
-
75
-        $this->assign("filterUser", $filterUser);
76
-        $this->assign("filterAction", $filterAction);
77
-        $this->assign("filterObjectType", $filterObjectType);
78
-        $this->assign("filterObjectId", $filterObjectId);
79
-
80
-        $this->assign('allLogActions', LogHelper::getLogActions($this->getDatabase()));
81
-        $this->assign('allObjectTypes', LogHelper::getObjectTypes());
82
-
83
-        $this->setTemplate("logs/main.tpl");
84
-    }
85
-
86
-    /**
87
-     * @param int $page
88
-     * @param int $limit
89
-     * @param int $count
90
-     */
91
-    protected function setupPageData($page, $limit, $count)
92
-    {
93
-        // The number of pages on the pager to show. Must be odd
94
-        $pageLimit = 9;
95
-
96
-        $pageData = array(
97
-            // Can the user go to the previous page?
98
-            'canprev'   => $page != 1,
99
-            // Can the user go to the next page?
100
-            'cannext'   => ($page * $limit) < $count,
101
-            // Maximum page number
102
-            'maxpage'   => ceil($count / $limit),
103
-            // Limit to the number of pages to display
104
-            'pagelimit' => $pageLimit,
105
-        );
106
-
107
-        // number of pages either side of the current to show
108
-        $pageMargin = (($pageLimit - 1) / 2);
109
-
110
-        // Calculate the number of pages either side to show - this is for situations like:
111
-        //  [1]  [2] [[3]] [4]  [5]  [6]  [7]  [8]  [9] - where you can't just use the page margin calculated
112
-        $pageData['lowpage'] = max(1, $page - $pageMargin);
113
-        $pageData['hipage'] = min($pageData['maxpage'], $page + $pageMargin);
114
-        $pageCount = ($pageData['hipage'] - $pageData['lowpage']) + 1;
115
-
116
-        if ($pageCount < $pageLimit) {
117
-            if ($pageData['lowpage'] == 1 && $pageData['hipage'] < $pageData['maxpage']) {
118
-                $pageData['hipage'] = min($pageLimit, $pageData['maxpage']);
119
-            }
120
-            elseif ($pageData['lowpage'] > 1 && $pageData['hipage'] == $pageData['maxpage']) {
121
-                $pageData['lowpage'] = max(1, $pageData['maxpage'] - $pageLimit + 1);
122
-            }
123
-        }
124
-
125
-        // Put the range of pages into the page data
126
-        $pageData['pages'] = range($pageData['lowpage'], $pageData['hipage']);
127
-
128
-        $this->assign("pagedata", $pageData);
129
-
130
-        $this->assign("limit", $limit);
131
-        $this->assign("page", $page);
132
-    }
133
-
134
-    /**
135
-     * @param $logSearch
136
-     * @param $database
137
-     * @param $filterUser
138
-     * @param $filterAction
139
-     * @param $filterObjectType
140
-     * @param $filterObjectId
141
-     */
142
-    private function setupSearchHelper(
143
-        $logSearch,
144
-        $database,
145
-        $filterUser,
146
-        $filterAction,
147
-        $filterObjectType,
148
-        $filterObjectId
149
-    ) {
150
-        if ($filterUser !== null) {
151
-            $logSearch->byUser(User::getByUsername($filterUser, $database)->getId());
152
-        }
153
-
154
-        if ($filterAction !== null) {
155
-            $logSearch->byAction($filterAction);
156
-        }
157
-
158
-        if ($filterObjectType !== null) {
159
-            $logSearch->byObjectType($filterObjectType);
160
-        }
161
-
162
-        if ($filterObjectId !== null) {
163
-            $logSearch->byObjectId($filterObjectId);
164
-        }
165
-    }
21
+	/**
22
+	 * Main function for this page, when no specific actions are called.
23
+	 */
24
+	protected function main()
25
+	{
26
+		$this->setHtmlTitle('Logs');
27
+
28
+		$filterUser = WebRequest::getString('filterUser');
29
+		$filterAction = WebRequest::getString('filterAction');
30
+		$filterObjectType = WebRequest::getString('filterObjectType');
31
+		$filterObjectId = WebRequest::getInt('filterObjectId');
32
+
33
+		$database = $this->getDatabase();
34
+
35
+		if (!array_key_exists($filterObjectType, LogHelper::getObjectTypes())) {
36
+			$filterObjectType = null;
37
+		}
38
+
39
+		$this->getTypeAheadHelper()->defineTypeAheadSource('username-typeahead', function() use ($database) {
40
+			return UserSearchHelper::get($database)->fetchColumn('username');
41
+		});
42
+
43
+		$limit = WebRequest::getInt('limit');
44
+		if ($limit === null) {
45
+			$limit = 100;
46
+		}
47
+
48
+		$page = WebRequest::getInt('page');
49
+		if ($page === null) {
50
+			$page = 1;
51
+		}
52
+
53
+		$offset = ($page - 1) * $limit;
54
+
55
+		$logSearch = LogSearchHelper::get($database)->limit($limit, $offset);
56
+		$this->setupSearchHelper($logSearch, $database, $filterUser, $filterAction, $filterObjectType, $filterObjectId);
57
+
58
+		/** @var Log[] $logs */
59
+		$logs = $logSearch->getRecordCount($count)->fetch();
60
+
61
+		if ($count === 0) {
62
+			$this->assign('logs', array());
63
+			$this->setTemplate('logs/main.tpl');
64
+
65
+			return;
66
+		}
67
+
68
+		list($users, $logData) = LogHelper::prepareLogsForTemplate($logs, $database, $this->getSiteConfiguration());
69
+
70
+		$this->setupPageData($page, $limit, $count);
71
+
72
+		$this->assign("logs", $logData);
73
+		$this->assign("users", $users);
74
+
75
+		$this->assign("filterUser", $filterUser);
76
+		$this->assign("filterAction", $filterAction);
77
+		$this->assign("filterObjectType", $filterObjectType);
78
+		$this->assign("filterObjectId", $filterObjectId);
79
+
80
+		$this->assign('allLogActions', LogHelper::getLogActions($this->getDatabase()));
81
+		$this->assign('allObjectTypes', LogHelper::getObjectTypes());
82
+
83
+		$this->setTemplate("logs/main.tpl");
84
+	}
85
+
86
+	/**
87
+	 * @param int $page
88
+	 * @param int $limit
89
+	 * @param int $count
90
+	 */
91
+	protected function setupPageData($page, $limit, $count)
92
+	{
93
+		// The number of pages on the pager to show. Must be odd
94
+		$pageLimit = 9;
95
+
96
+		$pageData = array(
97
+			// Can the user go to the previous page?
98
+			'canprev'   => $page != 1,
99
+			// Can the user go to the next page?
100
+			'cannext'   => ($page * $limit) < $count,
101
+			// Maximum page number
102
+			'maxpage'   => ceil($count / $limit),
103
+			// Limit to the number of pages to display
104
+			'pagelimit' => $pageLimit,
105
+		);
106
+
107
+		// number of pages either side of the current to show
108
+		$pageMargin = (($pageLimit - 1) / 2);
109
+
110
+		// Calculate the number of pages either side to show - this is for situations like:
111
+		//  [1]  [2] [[3]] [4]  [5]  [6]  [7]  [8]  [9] - where you can't just use the page margin calculated
112
+		$pageData['lowpage'] = max(1, $page - $pageMargin);
113
+		$pageData['hipage'] = min($pageData['maxpage'], $page + $pageMargin);
114
+		$pageCount = ($pageData['hipage'] - $pageData['lowpage']) + 1;
115
+
116
+		if ($pageCount < $pageLimit) {
117
+			if ($pageData['lowpage'] == 1 && $pageData['hipage'] < $pageData['maxpage']) {
118
+				$pageData['hipage'] = min($pageLimit, $pageData['maxpage']);
119
+			}
120
+			elseif ($pageData['lowpage'] > 1 && $pageData['hipage'] == $pageData['maxpage']) {
121
+				$pageData['lowpage'] = max(1, $pageData['maxpage'] - $pageLimit + 1);
122
+			}
123
+		}
124
+
125
+		// Put the range of pages into the page data
126
+		$pageData['pages'] = range($pageData['lowpage'], $pageData['hipage']);
127
+
128
+		$this->assign("pagedata", $pageData);
129
+
130
+		$this->assign("limit", $limit);
131
+		$this->assign("page", $page);
132
+	}
133
+
134
+	/**
135
+	 * @param $logSearch
136
+	 * @param $database
137
+	 * @param $filterUser
138
+	 * @param $filterAction
139
+	 * @param $filterObjectType
140
+	 * @param $filterObjectId
141
+	 */
142
+	private function setupSearchHelper(
143
+		$logSearch,
144
+		$database,
145
+		$filterUser,
146
+		$filterAction,
147
+		$filterObjectType,
148
+		$filterObjectId
149
+	) {
150
+		if ($filterUser !== null) {
151
+			$logSearch->byUser(User::getByUsername($filterUser, $database)->getId());
152
+		}
153
+
154
+		if ($filterAction !== null) {
155
+			$logSearch->byAction($filterAction);
156
+		}
157
+
158
+		if ($filterObjectType !== null) {
159
+			$logSearch->byObjectType($filterObjectType);
160
+		}
161
+
162
+		if ($filterObjectId !== null) {
163
+			$logSearch->byObjectId($filterObjectId);
164
+		}
165
+	}
166 166
 }
Please login to merge, or discard this patch.
includes/Helpers/LogHelper.php 2 patches
Indentation   +355 added lines, -355 removed lines patch added patch discarded remove patch
@@ -26,366 +26,366 @@
 block discarded – undo
26 26
 
27 27
 class LogHelper
28 28
 {
29
-    /**
30
-     * Summary of getRequestLogsWithComments
31
-     *
32
-     * @param int             $requestId
33
-     * @param PdoDatabase     $db
34
-     * @param SecurityManager $securityManager
35
-     *
36
-     * @return \Waca\DataObject[]
37
-     */
38
-    public static function getRequestLogsWithComments($requestId, PdoDatabase $db, SecurityManager $securityManager)
39
-    {
40
-        $logs = LogSearchHelper::get($db)->byObjectType('Request')->byObjectId($requestId)->fetch();
41
-
42
-        $currentUser = User::getCurrent($db);
43
-        $securityResult = $securityManager->allows('RequestData', 'seeRestrictedComments', $currentUser);
44
-        $showAllComments = $securityResult === SecurityManager::ALLOWED;
45
-
46
-        $comments = Comment::getForRequest($requestId, $db, $showAllComments, $currentUser->getId());
47
-
48
-        $items = array_merge($logs, $comments);
49
-
50
-        /**
51
-         * @param DataObject $item
52
-         *
53
-         * @return int
54
-         */
55
-        $sortKey = function(DataObject $item) {
56
-            if ($item instanceof Log) {
57
-                return $item->getTimestamp()->getTimestamp();
58
-            }
59
-
60
-            if ($item instanceof Comment) {
61
-                return $item->getTime()->getTimestamp();
62
-            }
63
-
64
-            return 0;
65
-        };
66
-
67
-        do {
68
-            $flag = false;
69
-
70
-            $loopLimit = (count($items) - 1);
71
-            for ($i = 0; $i < $loopLimit; $i++) {
72
-                // are these two items out of order?
73
-                if ($sortKey($items[$i]) > $sortKey($items[$i + 1])) {
74
-                    // swap them
75
-                    $swap = $items[$i];
76
-                    $items[$i] = $items[$i + 1];
77
-                    $items[$i + 1] = $swap;
78
-
79
-                    // set a flag to say we've modified the array this time around
80
-                    $flag = true;
81
-                }
82
-            }
83
-        }
84
-        while ($flag);
85
-
86
-        return $items;
87
-    }
88
-
89
-    /**
90
-     * Summary of getLogDescription
91
-     *
92
-     * @param Log $entry
93
-     *
94
-     * @return string
95
-     */
96
-    public static function getLogDescription(Log $entry)
97
-    {
98
-        $text = "Deferred to ";
99
-        if (substr($entry->getAction(), 0, strlen($text)) == $text) {
100
-            // Deferred to a different queue
101
-            // This is exactly what we want to display.
102
-            return $entry->getAction();
103
-        }
104
-
105
-        $text = "Closed custom-n";
106
-        if ($entry->getAction() == $text) {
107
-            // Custom-closed
108
-            return "closed (custom reason - account not created)";
109
-        }
110
-
111
-        $text = "Closed custom-y";
112
-        if ($entry->getAction() == $text) {
113
-            // Custom-closed
114
-            return "closed (custom reason - account created)";
115
-        }
116
-
117
-        $text = "Closed 0";
118
-        if ($entry->getAction() == $text) {
119
-            // Dropped the request - short-circuit the lookup
120
-            return "dropped request";
121
-        }
122
-
123
-        $text = "Closed ";
124
-        if (substr($entry->getAction(), 0, strlen($text)) == $text) {
125
-            // Closed with a reason - do a lookup here.
126
-            $id = substr($entry->getAction(), strlen($text));
127
-            /** @var EmailTemplate $template */
128
-            $template = EmailTemplate::getById((int)$id, $entry->getDatabase());
129
-
130
-            if ($template != false) {
131
-                return "closed (" . $template->getName() . ")";
132
-            }
133
-        }
134
-
135
-        // Fall back to the basic stuff
136
-        $lookup = array(
137
-            'Reserved'        => 'reserved',
138
-            'Email Confirmed' => 'email-confirmed',
139
-            'Unreserved'      => 'unreserved',
140
-            'Approved'        => 'approved',
141
-            'Suspended'       => 'suspended',
142
-            'RoleChange'      => 'changed roles',
143
-            'Banned'          => 'banned',
144
-            'Edited'          => 'edited interface message',
145
-            'Declined'        => 'declined',
146
-            'EditComment-c'   => 'edited a comment',
147
-            'EditComment-r'   => 'edited a comment',
148
-            'Unbanned'        => 'unbanned',
149
-            'Promoted'        => 'promoted to tool admin',
150
-            'BreakReserve'    => 'forcibly broke the reservation',
151
-            'Prefchange'      => 'changed user preferences',
152
-            'Renamed'         => 'renamed',
153
-            'Demoted'         => 'demoted from tool admin',
154
-            'ReceiveReserved' => 'received the reservation',
155
-            'SendReserved'    => 'sent the reservation',
156
-            'EditedEmail'     => 'edited email',
157
-            'DeletedTemplate' => 'deleted template',
158
-            'EditedTemplate'  => 'edited template',
159
-            'CreatedEmail'    => 'created email',
160
-            'CreatedTemplate' => 'created template',
161
-            'SentMail'        => 'sent an email to the requestor',
162
-            'Registered'      => 'registered a tool account',
163
-        );
164
-
165
-        if (array_key_exists($entry->getAction(), $lookup)) {
166
-            return $lookup[$entry->getAction()];
167
-        }
168
-
169
-        // OK, I don't know what this is. Fall back to something sane.
170
-        return "performed an unknown action ({$entry->getAction()})";
171
-    }
172
-
173
-    /**
174
-     * @param PdoDatabase $database
175
-     *
176
-     * @return array
177
-     */
178
-    public static function getLogActions(PdoDatabase $database)
179
-    {
180
-        $lookup = array(
181
-            'Reserved'        => 'reserved',
182
-            'Email Confirmed' => 'email-confirmed',
183
-            'Unreserved'      => 'unreserved',
184
-            'Approved'        => 'approved',
185
-            'Suspended'       => 'suspended',
186
-            'RoleChange'      => 'changed roles',
187
-            'Banned'          => 'banned',
188
-            'Edited'          => 'edited interface message',
189
-            'Declined'        => 'declined',
190
-            'EditComment-c'   => 'edited a comment (by comment ID)',
191
-            'EditComment-r'   => 'edited a comment (by request)',
192
-            'Unbanned'        => 'unbanned',
193
-            'Promoted'        => 'promoted to tool admin',
194
-            'BreakReserve'    => 'forcibly broke the reservation',
195
-            'Prefchange'      => 'changed user preferences',
196
-            'Renamed'         => 'renamed',
197
-            'Demoted'         => 'demoted from tool admin',
198
-            'ReceiveReserved' => 'received the reservation',
199
-            'SendReserved'    => 'sent the reservation',
200
-            'EditedEmail'     => 'edited email',
201
-            'DeletedTemplate' => 'deleted template',
202
-            'EditedTemplate'  => 'edited template',
203
-            'CreatedEmail'    => 'created email',
204
-            'CreatedTemplate' => 'created template',
205
-            'SentMail'        => 'sent an email to the requestor',
206
-            'Registered'      => 'registered a tool account',
207
-            'Closed 0'        => 'dropped request',
208
-        );
209
-
210
-        $statement = $database->query(<<<SQL
29
+	/**
30
+	 * Summary of getRequestLogsWithComments
31
+	 *
32
+	 * @param int             $requestId
33
+	 * @param PdoDatabase     $db
34
+	 * @param SecurityManager $securityManager
35
+	 *
36
+	 * @return \Waca\DataObject[]
37
+	 */
38
+	public static function getRequestLogsWithComments($requestId, PdoDatabase $db, SecurityManager $securityManager)
39
+	{
40
+		$logs = LogSearchHelper::get($db)->byObjectType('Request')->byObjectId($requestId)->fetch();
41
+
42
+		$currentUser = User::getCurrent($db);
43
+		$securityResult = $securityManager->allows('RequestData', 'seeRestrictedComments', $currentUser);
44
+		$showAllComments = $securityResult === SecurityManager::ALLOWED;
45
+
46
+		$comments = Comment::getForRequest($requestId, $db, $showAllComments, $currentUser->getId());
47
+
48
+		$items = array_merge($logs, $comments);
49
+
50
+		/**
51
+		 * @param DataObject $item
52
+		 *
53
+		 * @return int
54
+		 */
55
+		$sortKey = function(DataObject $item) {
56
+			if ($item instanceof Log) {
57
+				return $item->getTimestamp()->getTimestamp();
58
+			}
59
+
60
+			if ($item instanceof Comment) {
61
+				return $item->getTime()->getTimestamp();
62
+			}
63
+
64
+			return 0;
65
+		};
66
+
67
+		do {
68
+			$flag = false;
69
+
70
+			$loopLimit = (count($items) - 1);
71
+			for ($i = 0; $i < $loopLimit; $i++) {
72
+				// are these two items out of order?
73
+				if ($sortKey($items[$i]) > $sortKey($items[$i + 1])) {
74
+					// swap them
75
+					$swap = $items[$i];
76
+					$items[$i] = $items[$i + 1];
77
+					$items[$i + 1] = $swap;
78
+
79
+					// set a flag to say we've modified the array this time around
80
+					$flag = true;
81
+				}
82
+			}
83
+		}
84
+		while ($flag);
85
+
86
+		return $items;
87
+	}
88
+
89
+	/**
90
+	 * Summary of getLogDescription
91
+	 *
92
+	 * @param Log $entry
93
+	 *
94
+	 * @return string
95
+	 */
96
+	public static function getLogDescription(Log $entry)
97
+	{
98
+		$text = "Deferred to ";
99
+		if (substr($entry->getAction(), 0, strlen($text)) == $text) {
100
+			// Deferred to a different queue
101
+			// This is exactly what we want to display.
102
+			return $entry->getAction();
103
+		}
104
+
105
+		$text = "Closed custom-n";
106
+		if ($entry->getAction() == $text) {
107
+			// Custom-closed
108
+			return "closed (custom reason - account not created)";
109
+		}
110
+
111
+		$text = "Closed custom-y";
112
+		if ($entry->getAction() == $text) {
113
+			// Custom-closed
114
+			return "closed (custom reason - account created)";
115
+		}
116
+
117
+		$text = "Closed 0";
118
+		if ($entry->getAction() == $text) {
119
+			// Dropped the request - short-circuit the lookup
120
+			return "dropped request";
121
+		}
122
+
123
+		$text = "Closed ";
124
+		if (substr($entry->getAction(), 0, strlen($text)) == $text) {
125
+			// Closed with a reason - do a lookup here.
126
+			$id = substr($entry->getAction(), strlen($text));
127
+			/** @var EmailTemplate $template */
128
+			$template = EmailTemplate::getById((int)$id, $entry->getDatabase());
129
+
130
+			if ($template != false) {
131
+				return "closed (" . $template->getName() . ")";
132
+			}
133
+		}
134
+
135
+		// Fall back to the basic stuff
136
+		$lookup = array(
137
+			'Reserved'        => 'reserved',
138
+			'Email Confirmed' => 'email-confirmed',
139
+			'Unreserved'      => 'unreserved',
140
+			'Approved'        => 'approved',
141
+			'Suspended'       => 'suspended',
142
+			'RoleChange'      => 'changed roles',
143
+			'Banned'          => 'banned',
144
+			'Edited'          => 'edited interface message',
145
+			'Declined'        => 'declined',
146
+			'EditComment-c'   => 'edited a comment',
147
+			'EditComment-r'   => 'edited a comment',
148
+			'Unbanned'        => 'unbanned',
149
+			'Promoted'        => 'promoted to tool admin',
150
+			'BreakReserve'    => 'forcibly broke the reservation',
151
+			'Prefchange'      => 'changed user preferences',
152
+			'Renamed'         => 'renamed',
153
+			'Demoted'         => 'demoted from tool admin',
154
+			'ReceiveReserved' => 'received the reservation',
155
+			'SendReserved'    => 'sent the reservation',
156
+			'EditedEmail'     => 'edited email',
157
+			'DeletedTemplate' => 'deleted template',
158
+			'EditedTemplate'  => 'edited template',
159
+			'CreatedEmail'    => 'created email',
160
+			'CreatedTemplate' => 'created template',
161
+			'SentMail'        => 'sent an email to the requestor',
162
+			'Registered'      => 'registered a tool account',
163
+		);
164
+
165
+		if (array_key_exists($entry->getAction(), $lookup)) {
166
+			return $lookup[$entry->getAction()];
167
+		}
168
+
169
+		// OK, I don't know what this is. Fall back to something sane.
170
+		return "performed an unknown action ({$entry->getAction()})";
171
+	}
172
+
173
+	/**
174
+	 * @param PdoDatabase $database
175
+	 *
176
+	 * @return array
177
+	 */
178
+	public static function getLogActions(PdoDatabase $database)
179
+	{
180
+		$lookup = array(
181
+			'Reserved'        => 'reserved',
182
+			'Email Confirmed' => 'email-confirmed',
183
+			'Unreserved'      => 'unreserved',
184
+			'Approved'        => 'approved',
185
+			'Suspended'       => 'suspended',
186
+			'RoleChange'      => 'changed roles',
187
+			'Banned'          => 'banned',
188
+			'Edited'          => 'edited interface message',
189
+			'Declined'        => 'declined',
190
+			'EditComment-c'   => 'edited a comment (by comment ID)',
191
+			'EditComment-r'   => 'edited a comment (by request)',
192
+			'Unbanned'        => 'unbanned',
193
+			'Promoted'        => 'promoted to tool admin',
194
+			'BreakReserve'    => 'forcibly broke the reservation',
195
+			'Prefchange'      => 'changed user preferences',
196
+			'Renamed'         => 'renamed',
197
+			'Demoted'         => 'demoted from tool admin',
198
+			'ReceiveReserved' => 'received the reservation',
199
+			'SendReserved'    => 'sent the reservation',
200
+			'EditedEmail'     => 'edited email',
201
+			'DeletedTemplate' => 'deleted template',
202
+			'EditedTemplate'  => 'edited template',
203
+			'CreatedEmail'    => 'created email',
204
+			'CreatedTemplate' => 'created template',
205
+			'SentMail'        => 'sent an email to the requestor',
206
+			'Registered'      => 'registered a tool account',
207
+			'Closed 0'        => 'dropped request',
208
+		);
209
+
210
+		$statement = $database->query(<<<SQL
211 211
 SELECT CONCAT('Closed ', id) AS k, CONCAT('closed (',name,')') AS v
212 212
 FROM emailtemplate;
213 213
 SQL
214
-        );
215
-        foreach ($statement->fetchAll(PDO::FETCH_ASSOC) as $row) {
216
-            $lookup[$row['k']] = $row['v'];
217
-        }
218
-
219
-        return $lookup;
220
-    }
221
-
222
-    public static function getObjectTypes()
223
-    {
224
-        return array(
225
-            'Ban'             => 'Ban',
226
-            'Comment'         => 'Comment',
227
-            'EmailTemplate'   => 'Email template',
228
-            'Request'         => 'Request',
229
-            'SiteNotice'      => 'Site notice',
230
-            'User'            => 'User',
231
-            'WelcomeTemplate' => 'Welcome template',
232
-        );
233
-    }
234
-
235
-    /**
236
-     * This returns a HTML
237
-     *
238
-     * @param string            $objectId
239
-     * @param string            $objectType
240
-     * @param PdoDatabase       $database
241
-     * @param SiteConfiguration $configuration
242
-     *
243
-     * @return null|string
244
-     * @category Security-Critical
245
-     */
246
-    private static function getObjectDescription(
247
-        $objectId,
248
-        $objectType,
249
-        PdoDatabase $database,
250
-        SiteConfiguration $configuration
251
-    ) {
252
-        if ($objectType == '') {
253
-            return null;
254
-        }
255
-
256
-        $baseurl = $configuration->getBaseUrl();
257
-
258
-        switch ($objectType) {
259
-            case 'Ban':
260
-                /** @var Ban $ban */
261
-                $ban = Ban::getById($objectId, $database);
262
-
263
-                if ($ban === false) {
264
-                    return 'Ban #' . $objectId . "</a>";
265
-                }
266
-
267
-                return 'Ban #' . $objectId . " (" . htmlentities($ban->getTarget()) . ")</a>";
268
-            case 'EmailTemplate':
269
-                /** @var EmailTemplate $emailTemplate */
270
-                $emailTemplate = EmailTemplate::getById($objectId, $database);
271
-                $name = htmlentities($emailTemplate->getName(), ENT_COMPAT, 'UTF-8');
272
-
273
-                return <<<HTML
214
+		);
215
+		foreach ($statement->fetchAll(PDO::FETCH_ASSOC) as $row) {
216
+			$lookup[$row['k']] = $row['v'];
217
+		}
218
+
219
+		return $lookup;
220
+	}
221
+
222
+	public static function getObjectTypes()
223
+	{
224
+		return array(
225
+			'Ban'             => 'Ban',
226
+			'Comment'         => 'Comment',
227
+			'EmailTemplate'   => 'Email template',
228
+			'Request'         => 'Request',
229
+			'SiteNotice'      => 'Site notice',
230
+			'User'            => 'User',
231
+			'WelcomeTemplate' => 'Welcome template',
232
+		);
233
+	}
234
+
235
+	/**
236
+	 * This returns a HTML
237
+	 *
238
+	 * @param string            $objectId
239
+	 * @param string            $objectType
240
+	 * @param PdoDatabase       $database
241
+	 * @param SiteConfiguration $configuration
242
+	 *
243
+	 * @return null|string
244
+	 * @category Security-Critical
245
+	 */
246
+	private static function getObjectDescription(
247
+		$objectId,
248
+		$objectType,
249
+		PdoDatabase $database,
250
+		SiteConfiguration $configuration
251
+	) {
252
+		if ($objectType == '') {
253
+			return null;
254
+		}
255
+
256
+		$baseurl = $configuration->getBaseUrl();
257
+
258
+		switch ($objectType) {
259
+			case 'Ban':
260
+				/** @var Ban $ban */
261
+				$ban = Ban::getById($objectId, $database);
262
+
263
+				if ($ban === false) {
264
+					return 'Ban #' . $objectId . "</a>";
265
+				}
266
+
267
+				return 'Ban #' . $objectId . " (" . htmlentities($ban->getTarget()) . ")</a>";
268
+			case 'EmailTemplate':
269
+				/** @var EmailTemplate $emailTemplate */
270
+				$emailTemplate = EmailTemplate::getById($objectId, $database);
271
+				$name = htmlentities($emailTemplate->getName(), ENT_COMPAT, 'UTF-8');
272
+
273
+				return <<<HTML
274 274
 <a href="{$baseurl}/internal.php/emailManagement/view?id={$objectId}">Email Template #{$objectId} ({$name})</a>
275 275
 HTML;
276
-            case 'SiteNotice':
277
-                return "<a href=\"{$baseurl}/internal.php/siteNotice\">the site notice</a>";
278
-            case 'Request':
279
-                /** @var Request $request */
280
-                $request = Request::getById($objectId, $database);
281
-                $name = htmlentities($request->getName(), ENT_COMPAT, 'UTF-8');
282
-
283
-                return <<<HTML
276
+			case 'SiteNotice':
277
+				return "<a href=\"{$baseurl}/internal.php/siteNotice\">the site notice</a>";
278
+			case 'Request':
279
+				/** @var Request $request */
280
+				$request = Request::getById($objectId, $database);
281
+				$name = htmlentities($request->getName(), ENT_COMPAT, 'UTF-8');
282
+
283
+				return <<<HTML
284 284
 <a href="{$baseurl}/internal.php/viewRequest?id={$objectId}">Request #{$objectId} ({$name})</a>
285 285
 HTML;
286
-            case 'User':
287
-                /** @var User $user */
288
-                $user = User::getById($objectId, $database);
289
-                $username = htmlentities($user->getUsername(), ENT_COMPAT, 'UTF-8');
290
-
291
-                return "<a href=\"{$baseurl}/internal.php/statistics/users/detail?user={$objectId}\">{$username}</a>";
292
-            case 'WelcomeTemplate':
293
-                /** @var WelcomeTemplate $welcomeTemplate */
294
-                $welcomeTemplate = WelcomeTemplate::getById($objectId, $database);
295
-
296
-                // some old templates have been completely deleted and lost to the depths of time.
297
-                if ($welcomeTemplate === false) {
298
-                    return "Welcome template #{$objectId}";
299
-                }
300
-                else {
301
-                    $userCode = htmlentities($welcomeTemplate->getUserCode(), ENT_COMPAT, 'UTF-8');
302
-
303
-                    return "<a href=\"{$baseurl}/internal.php/welcomeTemplates/view?template={$objectId}\">{$userCode}</a>";
304
-                }
305
-            default:
306
-                return '[' . $objectType . " " . $objectId . ']';
307
-        }
308
-    }
309
-
310
-    /**
311
-     * @param    Log[]          $logs
312
-     * @param     PdoDatabase   $database
313
-     * @param SiteConfiguration $configuration
314
-     *
315
-     * @return array
316
-     * @throws Exception
317
-     */
318
-    public static function prepareLogsForTemplate($logs, PdoDatabase $database, SiteConfiguration $configuration)
319
-    {
320
-        $userIds = array();
321
-
322
-        /** @var Log $logEntry */
323
-        foreach ($logs as $logEntry) {
324
-            if (!$logEntry instanceof Log) {
325
-                // if this happens, we've done something wrong with passing back the log data.
326
-                throw new Exception('Log entry is not an instance of a Log, this should never happen.');
327
-            }
328
-
329
-            $user = $logEntry->getUser();
330
-            if ($user === -1) {
331
-                continue;
332
-            }
333
-
334
-            if (!array_search($user, $userIds)) {
335
-                $userIds[] = $user;
336
-            }
337
-        }
338
-
339
-        $users = UserSearchHelper::get($database)->inIds($userIds)->fetchMap('username');
340
-        $users[-1] = User::getCommunity()->getUsername();
341
-
342
-        $logData = array();
343
-
344
-        /** @var Log $logEntry */
345
-        foreach ($logs as $logEntry) {
346
-            $objectDescription = self::getObjectDescription($logEntry->getObjectId(), $logEntry->getObjectType(),
347
-                $database, $configuration);
348
-
349
-            switch ($logEntry->getAction()) {
350
-                case 'Renamed':
351
-                    $renameData = unserialize($logEntry->getComment());
352
-                    $oldName = htmlentities($renameData['old'], ENT_COMPAT, 'UTF-8');
353
-                    $newName = htmlentities($renameData['new'], ENT_COMPAT, 'UTF-8');
354
-                    $comment = 'Renamed \'' . $oldName . '\' to \'' . $newName . '\'.';
355
-                    break;
356
-                case 'RoleChange':
357
-                    $roleChangeData = unserialize($logEntry->getComment());
358
-
359
-                    $removed = array();
360
-                    foreach ($roleChangeData['removed'] as $r) {
361
-                        $removed[] = htmlentities($r, ENT_COMPAT, 'UTF-8');
362
-                    }
363
-
364
-                    $added = array();
365
-                    foreach ($roleChangeData['added'] as $r) {
366
-                        $added[] = htmlentities($r, ENT_COMPAT, 'UTF-8');
367
-                    }
368
-
369
-                    $reason = htmlentities($roleChangeData['reason'], ENT_COMPAT, 'UTF-8');
370
-
371
-                    $roleDelta = 'Removed [' . implode(', ', $removed) . '], Added [' . implode(', ', $added) . ']';
372
-                    $comment = $roleDelta . ' with comment: ' . $reason;
373
-                    break;
374
-                default:
375
-                    $comment = $logEntry->getComment();
376
-                    break;
377
-            }
378
-
379
-            $logData[] = array(
380
-                'timestamp'         => $logEntry->getTimestamp(),
381
-                'userid'            => $logEntry->getUser(),
382
-                'username'          => $users[$logEntry->getUser()],
383
-                'description'       => self::getLogDescription($logEntry),
384
-                'objectdescription' => $objectDescription,
385
-                'comment'           => $comment,
386
-            );
387
-        }
388
-
389
-        return array($users, $logData);
390
-    }
286
+			case 'User':
287
+				/** @var User $user */
288
+				$user = User::getById($objectId, $database);
289
+				$username = htmlentities($user->getUsername(), ENT_COMPAT, 'UTF-8');
290
+
291
+				return "<a href=\"{$baseurl}/internal.php/statistics/users/detail?user={$objectId}\">{$username}</a>";
292
+			case 'WelcomeTemplate':
293
+				/** @var WelcomeTemplate $welcomeTemplate */
294
+				$welcomeTemplate = WelcomeTemplate::getById($objectId, $database);
295
+
296
+				// some old templates have been completely deleted and lost to the depths of time.
297
+				if ($welcomeTemplate === false) {
298
+					return "Welcome template #{$objectId}";
299
+				}
300
+				else {
301
+					$userCode = htmlentities($welcomeTemplate->getUserCode(), ENT_COMPAT, 'UTF-8');
302
+
303
+					return "<a href=\"{$baseurl}/internal.php/welcomeTemplates/view?template={$objectId}\">{$userCode}</a>";
304
+				}
305
+			default:
306
+				return '[' . $objectType . " " . $objectId . ']';
307
+		}
308
+	}
309
+
310
+	/**
311
+	 * @param    Log[]          $logs
312
+	 * @param     PdoDatabase   $database
313
+	 * @param SiteConfiguration $configuration
314
+	 *
315
+	 * @return array
316
+	 * @throws Exception
317
+	 */
318
+	public static function prepareLogsForTemplate($logs, PdoDatabase $database, SiteConfiguration $configuration)
319
+	{
320
+		$userIds = array();
321
+
322
+		/** @var Log $logEntry */
323
+		foreach ($logs as $logEntry) {
324
+			if (!$logEntry instanceof Log) {
325
+				// if this happens, we've done something wrong with passing back the log data.
326
+				throw new Exception('Log entry is not an instance of a Log, this should never happen.');
327
+			}
328
+
329
+			$user = $logEntry->getUser();
330
+			if ($user === -1) {
331
+				continue;
332
+			}
333
+
334
+			if (!array_search($user, $userIds)) {
335
+				$userIds[] = $user;
336
+			}
337
+		}
338
+
339
+		$users = UserSearchHelper::get($database)->inIds($userIds)->fetchMap('username');
340
+		$users[-1] = User::getCommunity()->getUsername();
341
+
342
+		$logData = array();
343
+
344
+		/** @var Log $logEntry */
345
+		foreach ($logs as $logEntry) {
346
+			$objectDescription = self::getObjectDescription($logEntry->getObjectId(), $logEntry->getObjectType(),
347
+				$database, $configuration);
348
+
349
+			switch ($logEntry->getAction()) {
350
+				case 'Renamed':
351
+					$renameData = unserialize($logEntry->getComment());
352
+					$oldName = htmlentities($renameData['old'], ENT_COMPAT, 'UTF-8');
353
+					$newName = htmlentities($renameData['new'], ENT_COMPAT, 'UTF-8');
354
+					$comment = 'Renamed \'' . $oldName . '\' to \'' . $newName . '\'.';
355
+					break;
356
+				case 'RoleChange':
357
+					$roleChangeData = unserialize($logEntry->getComment());
358
+
359
+					$removed = array();
360
+					foreach ($roleChangeData['removed'] as $r) {
361
+						$removed[] = htmlentities($r, ENT_COMPAT, 'UTF-8');
362
+					}
363
+
364
+					$added = array();
365
+					foreach ($roleChangeData['added'] as $r) {
366
+						$added[] = htmlentities($r, ENT_COMPAT, 'UTF-8');
367
+					}
368
+
369
+					$reason = htmlentities($roleChangeData['reason'], ENT_COMPAT, 'UTF-8');
370
+
371
+					$roleDelta = 'Removed [' . implode(', ', $removed) . '], Added [' . implode(', ', $added) . ']';
372
+					$comment = $roleDelta . ' with comment: ' . $reason;
373
+					break;
374
+				default:
375
+					$comment = $logEntry->getComment();
376
+					break;
377
+			}
378
+
379
+			$logData[] = array(
380
+				'timestamp'         => $logEntry->getTimestamp(),
381
+				'userid'            => $logEntry->getUser(),
382
+				'username'          => $users[$logEntry->getUser()],
383
+				'description'       => self::getLogDescription($logEntry),
384
+				'objectdescription' => $objectDescription,
385
+				'comment'           => $comment,
386
+			);
387
+		}
388
+
389
+		return array($users, $logData);
390
+	}
391 391
 }
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -128,7 +128,7 @@  discard block
 block discarded – undo
128 128
             $template = EmailTemplate::getById((int)$id, $entry->getDatabase());
129 129
 
130 130
             if ($template != false) {
131
-                return "closed (" . $template->getName() . ")";
131
+                return "closed (".$template->getName().")";
132 132
             }
133 133
         }
134 134
 
@@ -261,10 +261,10 @@  discard block
 block discarded – undo
261 261
                 $ban = Ban::getById($objectId, $database);
262 262
 
263 263
                 if ($ban === false) {
264
-                    return 'Ban #' . $objectId . "</a>";
264
+                    return 'Ban #'.$objectId."</a>";
265 265
                 }
266 266
 
267
-                return 'Ban #' . $objectId . " (" . htmlentities($ban->getTarget()) . ")</a>";
267
+                return 'Ban #'.$objectId." (".htmlentities($ban->getTarget()).")</a>";
268 268
             case 'EmailTemplate':
269 269
                 /** @var EmailTemplate $emailTemplate */
270 270
                 $emailTemplate = EmailTemplate::getById($objectId, $database);
@@ -303,7 +303,7 @@  discard block
 block discarded – undo
303 303
                     return "<a href=\"{$baseurl}/internal.php/welcomeTemplates/view?template={$objectId}\">{$userCode}</a>";
304 304
                 }
305 305
             default:
306
-                return '[' . $objectType . " " . $objectId . ']';
306
+                return '['.$objectType." ".$objectId.']';
307 307
         }
308 308
     }
309 309
 
@@ -351,7 +351,7 @@  discard block
 block discarded – undo
351 351
                     $renameData = unserialize($logEntry->getComment());
352 352
                     $oldName = htmlentities($renameData['old'], ENT_COMPAT, 'UTF-8');
353 353
                     $newName = htmlentities($renameData['new'], ENT_COMPAT, 'UTF-8');
354
-                    $comment = 'Renamed \'' . $oldName . '\' to \'' . $newName . '\'.';
354
+                    $comment = 'Renamed \''.$oldName.'\' to \''.$newName.'\'.';
355 355
                     break;
356 356
                 case 'RoleChange':
357 357
                     $roleChangeData = unserialize($logEntry->getComment());
@@ -368,8 +368,8 @@  discard block
 block discarded – undo
368 368
 
369 369
                     $reason = htmlentities($roleChangeData['reason'], ENT_COMPAT, 'UTF-8');
370 370
 
371
-                    $roleDelta = 'Removed [' . implode(', ', $removed) . '], Added [' . implode(', ', $added) . ']';
372
-                    $comment = $roleDelta . ' with comment: ' . $reason;
371
+                    $roleDelta = 'Removed ['.implode(', ', $removed).'], Added ['.implode(', ', $added).']';
372
+                    $comment = $roleDelta.' with comment: '.$reason;
373 373
                     break;
374 374
                 default:
375 375
                     $comment = $logEntry->getComment();
Please login to merge, or discard this patch.
includes/Pages/RequestAction/PageCloseRequest.php 1 patch
Indentation   +238 added lines, -238 removed lines patch added patch discarded remove patch
@@ -20,242 +20,242 @@
 block discarded – undo
20 20
 
21 21
 class PageCloseRequest extends RequestActionBase
22 22
 {
23
-    protected function main()
24
-    {
25
-        $this->processClose();
26
-    }
27
-
28
-    /**
29
-     * Main function for this page, when no specific actions are called.
30
-     * @throws ApplicationLogicException
31
-     */
32
-    final protected function processClose()
33
-    {
34
-        $this->checkPosted();
35
-        $database = $this->getDatabase();
36
-
37
-        $currentUser = User::getCurrent($database);
38
-        $template = $this->getTemplate($database);
39
-        $request = $this->getRequest($database);
40
-        $request->setUpdateVersion(WebRequest::postInt('updateversion'));
41
-
42
-        if ($request->getStatus() === 'Closed') {
43
-            throw new ApplicationLogicException('Request is already closed');
44
-        }
45
-
46
-        if ($this->confirmEmailAlreadySent($request, $template)) {
47
-            return;
48
-        }
49
-
50
-        if ($this->confirmReserveOverride($request, $template, $currentUser, $database)) {
51
-            return;
52
-        }
53
-
54
-        if ($this->confirmAccountCreated($request, $template)) {
55
-            return;
56
-        }
57
-
58
-        // I think we're good here...
59
-        $request->setStatus('Closed');
60
-        $request->setReserved(null);
61
-
62
-        Logger::closeRequest($database, $request, $template->getId(), null);
63
-
64
-        $request->save();
65
-
66
-        // Perform the notifications and stuff *after* we've successfully saved, since the save can throw an OLE and
67
-        // be rolled back.
68
-
69
-        $this->getNotificationHelper()->requestClosed($request, $template->getName());
70
-        SessionAlert::success("Request {$request->getId()} has been closed");
71
-
72
-        $this->sendMail($request, $template->getText(), $currentUser, false);
73
-
74
-        $this->redirect();
75
-    }
76
-
77
-    /**
78
-     * @param PdoDatabase $database
79
-     *
80
-     * @return EmailTemplate
81
-     * @throws ApplicationLogicException
82
-     */
83
-    protected function getTemplate(PdoDatabase $database)
84
-    {
85
-        $templateId = WebRequest::postInt('template');
86
-        if ($templateId === null) {
87
-            throw new ApplicationLogicException('No template specified');
88
-        }
89
-
90
-        /** @var EmailTemplate $template */
91
-        $template = EmailTemplate::getById($templateId, $database);
92
-        if ($template === false || !$template->getActive()) {
93
-            throw new ApplicationLogicException('Invalid or inactive template specified');
94
-        }
95
-
96
-        return $template;
97
-    }
98
-
99
-    /**
100
-     * @param Request       $request
101
-     * @param EmailTemplate $template
102
-     *
103
-     * @return bool
104
-     */
105
-    protected function confirmEmailAlreadySent(Request $request, EmailTemplate $template)
106
-    {
107
-        if ($this->checkEmailAlreadySent($request)) {
108
-            $this->showConfirmation($request, $template, 'close-confirmations/email-sent.tpl');
109
-
110
-            return true;
111
-        }
112
-
113
-        return false;
114
-    }
115
-
116
-    protected function checkEmailAlreadySent(Request $request)
117
-    {
118
-        if ($request->getEmailSent() && !WebRequest::postBoolean('emailSentOverride')) {
119
-            return true;
120
-        }
121
-
122
-        return false;
123
-    }
124
-
125
-    protected function checkReserveOverride(Request $request, User $currentUser)
126
-    {
127
-        $reservationId = $request->getReserved();
128
-
129
-        if ($reservationId !== 0 && $reservationId !== null) {
130
-            if (!WebRequest::postBoolean('reserveOverride')) {
131
-                if ($currentUser->getId() !== $reservationId) {
132
-                    return true;
133
-                }
134
-            }
135
-        }
136
-
137
-        return false;
138
-    }
139
-
140
-    /**
141
-     * @param Request       $request
142
-     * @param EmailTemplate $template
143
-     * @param User          $currentUser
144
-     * @param PdoDatabase   $database
145
-     *
146
-     * @return bool
147
-     */
148
-    protected function confirmReserveOverride(
149
-        Request $request,
150
-        EmailTemplate $template,
151
-        User $currentUser,
152
-        PdoDatabase $database
153
-    ) {
154
-        if ($this->checkReserveOverride($request, $currentUser)) {
155
-            $this->assign('reserveUser', User::getById($request->getReserved(), $database)->getUsername());
156
-            $this->showConfirmation($request, $template, 'close-confirmations/reserve-override.tpl');
157
-
158
-            return true;
159
-        }
160
-
161
-        return false;
162
-    }
163
-
164
-    /**
165
-     * @param Request       $request
166
-     * @param EmailTemplate $template
167
-     *
168
-     * @return bool
169
-     * @throws \Waca\Exceptions\CurlException
170
-     */
171
-    protected function confirmAccountCreated(Request $request, EmailTemplate $template)
172
-    {
173
-        if ($this->checkAccountCreated($request, $template)) {
174
-            $this->showConfirmation($request, $template, 'close-confirmations/account-created.tpl');
175
-
176
-            return true;
177
-        }
178
-
179
-        return false;
180
-    }
181
-
182
-    protected function checkAccountCreated(Request $request, EmailTemplate $template)
183
-    {
184
-        if ($template->getDefaultAction() === EmailTemplate::CREATED && !WebRequest::postBoolean('createOverride')) {
185
-            $parameters = array(
186
-                'action'  => 'query',
187
-                'list'    => 'users',
188
-                'format'  => 'php',
189
-                'ususers' => $request->getName(),
190
-            );
191
-
192
-            $content = $this->getHttpHelper()->get($this->getSiteConfiguration()->getMediawikiWebServiceEndpoint(),
193
-                $parameters);
194
-
195
-            $apiResult = unserialize($content);
196
-            $exists = !isset($apiResult['query']['users']['0']['missing']);
197
-
198
-            if (!$exists) {
199
-                return true;
200
-            }
201
-        }
202
-
203
-        return false;
204
-    }
205
-
206
-    /**
207
-     * @param Request $request
208
-     * @param string  $mailText
209
-     * @param User    $currentUser
210
-     * @param boolean $ccMailingList
211
-     */
212
-    protected function sendMail(Request $request, $mailText, User $currentUser, $ccMailingList)
213
-    {
214
-        $headers = array(
215
-            'X-ACC-Request' => $request->getId(),
216
-            'X-ACC-UserID'  => $currentUser->getId(),
217
-        );
218
-
219
-        if ($ccMailingList) {
220
-            $headers['Cc'] = '[email protected]';
221
-        }
222
-
223
-        $helper = $this->getEmailHelper();
224
-
225
-        $emailSig = $currentUser->getEmailSig();
226
-        if ($emailSig !== '' || $emailSig !== null) {
227
-            $emailSig = "\n\n" . $emailSig;
228
-        }
229
-
230
-        $subject = "RE: [ACC #{$request->getId()}] English Wikipedia Account Request";
231
-        $content = $mailText . $emailSig;
232
-
233
-        $helper->sendMail($request->getEmail(), $subject, $content, $headers);
234
-
235
-        $request->setEmailSent(true);
236
-    }
237
-
238
-    /**
239
-     * @param Request       $request
240
-     * @param EmailTemplate $template
241
-     * @param string        $templateName
242
-     *
243
-     * @throws Exception
244
-     * @return void
245
-     */
246
-    protected function showConfirmation(Request $request, EmailTemplate $template, $templateName)
247
-    {
248
-        $this->assignCSRFToken();
249
-
250
-        $this->assign('request', $request->getId());
251
-        $this->assign('template', $template->getId());
252
-
253
-        $this->assign('updateversion', $request->getUpdateVersion());
254
-
255
-        $this->assign('emailSentOverride', WebRequest::postBoolean('emailSentOverride') ? 'true' : 'false');
256
-        $this->assign('reserveOverride', WebRequest::postBoolean('reserveOverride') ? 'true' : 'false');
257
-        $this->assign('createOverride', WebRequest::postBoolean('createOverride') ? 'true' : 'false');
258
-
259
-        $this->setTemplate($templateName);
260
-    }
23
+	protected function main()
24
+	{
25
+		$this->processClose();
26
+	}
27
+
28
+	/**
29
+	 * Main function for this page, when no specific actions are called.
30
+	 * @throws ApplicationLogicException
31
+	 */
32
+	final protected function processClose()
33
+	{
34
+		$this->checkPosted();
35
+		$database = $this->getDatabase();
36
+
37
+		$currentUser = User::getCurrent($database);
38
+		$template = $this->getTemplate($database);
39
+		$request = $this->getRequest($database);
40
+		$request->setUpdateVersion(WebRequest::postInt('updateversion'));
41
+
42
+		if ($request->getStatus() === 'Closed') {
43
+			throw new ApplicationLogicException('Request is already closed');
44
+		}
45
+
46
+		if ($this->confirmEmailAlreadySent($request, $template)) {
47
+			return;
48
+		}
49
+
50
+		if ($this->confirmReserveOverride($request, $template, $currentUser, $database)) {
51
+			return;
52
+		}
53
+
54
+		if ($this->confirmAccountCreated($request, $template)) {
55
+			return;
56
+		}
57
+
58
+		// I think we're good here...
59
+		$request->setStatus('Closed');
60
+		$request->setReserved(null);
61
+
62
+		Logger::closeRequest($database, $request, $template->getId(), null);
63
+
64
+		$request->save();
65
+
66
+		// Perform the notifications and stuff *after* we've successfully saved, since the save can throw an OLE and
67
+		// be rolled back.
68
+
69
+		$this->getNotificationHelper()->requestClosed($request, $template->getName());
70
+		SessionAlert::success("Request {$request->getId()} has been closed");
71
+
72
+		$this->sendMail($request, $template->getText(), $currentUser, false);
73
+
74
+		$this->redirect();
75
+	}
76
+
77
+	/**
78
+	 * @param PdoDatabase $database
79
+	 *
80
+	 * @return EmailTemplate
81
+	 * @throws ApplicationLogicException
82
+	 */
83
+	protected function getTemplate(PdoDatabase $database)
84
+	{
85
+		$templateId = WebRequest::postInt('template');
86
+		if ($templateId === null) {
87
+			throw new ApplicationLogicException('No template specified');
88
+		}
89
+
90
+		/** @var EmailTemplate $template */
91
+		$template = EmailTemplate::getById($templateId, $database);
92
+		if ($template === false || !$template->getActive()) {
93
+			throw new ApplicationLogicException('Invalid or inactive template specified');
94
+		}
95
+
96
+		return $template;
97
+	}
98
+
99
+	/**
100
+	 * @param Request       $request
101
+	 * @param EmailTemplate $template
102
+	 *
103
+	 * @return bool
104
+	 */
105
+	protected function confirmEmailAlreadySent(Request $request, EmailTemplate $template)
106
+	{
107
+		if ($this->checkEmailAlreadySent($request)) {
108
+			$this->showConfirmation($request, $template, 'close-confirmations/email-sent.tpl');
109
+
110
+			return true;
111
+		}
112
+
113
+		return false;
114
+	}
115
+
116
+	protected function checkEmailAlreadySent(Request $request)
117
+	{
118
+		if ($request->getEmailSent() && !WebRequest::postBoolean('emailSentOverride')) {
119
+			return true;
120
+		}
121
+
122
+		return false;
123
+	}
124
+
125
+	protected function checkReserveOverride(Request $request, User $currentUser)
126
+	{
127
+		$reservationId = $request->getReserved();
128
+
129
+		if ($reservationId !== 0 && $reservationId !== null) {
130
+			if (!WebRequest::postBoolean('reserveOverride')) {
131
+				if ($currentUser->getId() !== $reservationId) {
132
+					return true;
133
+				}
134
+			}
135
+		}
136
+
137
+		return false;
138
+	}
139
+
140
+	/**
141
+	 * @param Request       $request
142
+	 * @param EmailTemplate $template
143
+	 * @param User          $currentUser
144
+	 * @param PdoDatabase   $database
145
+	 *
146
+	 * @return bool
147
+	 */
148
+	protected function confirmReserveOverride(
149
+		Request $request,
150
+		EmailTemplate $template,
151
+		User $currentUser,
152
+		PdoDatabase $database
153
+	) {
154
+		if ($this->checkReserveOverride($request, $currentUser)) {
155
+			$this->assign('reserveUser', User::getById($request->getReserved(), $database)->getUsername());
156
+			$this->showConfirmation($request, $template, 'close-confirmations/reserve-override.tpl');
157
+
158
+			return true;
159
+		}
160
+
161
+		return false;
162
+	}
163
+
164
+	/**
165
+	 * @param Request       $request
166
+	 * @param EmailTemplate $template
167
+	 *
168
+	 * @return bool
169
+	 * @throws \Waca\Exceptions\CurlException
170
+	 */
171
+	protected function confirmAccountCreated(Request $request, EmailTemplate $template)
172
+	{
173
+		if ($this->checkAccountCreated($request, $template)) {
174
+			$this->showConfirmation($request, $template, 'close-confirmations/account-created.tpl');
175
+
176
+			return true;
177
+		}
178
+
179
+		return false;
180
+	}
181
+
182
+	protected function checkAccountCreated(Request $request, EmailTemplate $template)
183
+	{
184
+		if ($template->getDefaultAction() === EmailTemplate::CREATED && !WebRequest::postBoolean('createOverride')) {
185
+			$parameters = array(
186
+				'action'  => 'query',
187
+				'list'    => 'users',
188
+				'format'  => 'php',
189
+				'ususers' => $request->getName(),
190
+			);
191
+
192
+			$content = $this->getHttpHelper()->get($this->getSiteConfiguration()->getMediawikiWebServiceEndpoint(),
193
+				$parameters);
194
+
195
+			$apiResult = unserialize($content);
196
+			$exists = !isset($apiResult['query']['users']['0']['missing']);
197
+
198
+			if (!$exists) {
199
+				return true;
200
+			}
201
+		}
202
+
203
+		return false;
204
+	}
205
+
206
+	/**
207
+	 * @param Request $request
208
+	 * @param string  $mailText
209
+	 * @param User    $currentUser
210
+	 * @param boolean $ccMailingList
211
+	 */
212
+	protected function sendMail(Request $request, $mailText, User $currentUser, $ccMailingList)
213
+	{
214
+		$headers = array(
215
+			'X-ACC-Request' => $request->getId(),
216
+			'X-ACC-UserID'  => $currentUser->getId(),
217
+		);
218
+
219
+		if ($ccMailingList) {
220
+			$headers['Cc'] = '[email protected]';
221
+		}
222
+
223
+		$helper = $this->getEmailHelper();
224
+
225
+		$emailSig = $currentUser->getEmailSig();
226
+		if ($emailSig !== '' || $emailSig !== null) {
227
+			$emailSig = "\n\n" . $emailSig;
228
+		}
229
+
230
+		$subject = "RE: [ACC #{$request->getId()}] English Wikipedia Account Request";
231
+		$content = $mailText . $emailSig;
232
+
233
+		$helper->sendMail($request->getEmail(), $subject, $content, $headers);
234
+
235
+		$request->setEmailSent(true);
236
+	}
237
+
238
+	/**
239
+	 * @param Request       $request
240
+	 * @param EmailTemplate $template
241
+	 * @param string        $templateName
242
+	 *
243
+	 * @throws Exception
244
+	 * @return void
245
+	 */
246
+	protected function showConfirmation(Request $request, EmailTemplate $template, $templateName)
247
+	{
248
+		$this->assignCSRFToken();
249
+
250
+		$this->assign('request', $request->getId());
251
+		$this->assign('template', $template->getId());
252
+
253
+		$this->assign('updateversion', $request->getUpdateVersion());
254
+
255
+		$this->assign('emailSentOverride', WebRequest::postBoolean('emailSentOverride') ? 'true' : 'false');
256
+		$this->assign('reserveOverride', WebRequest::postBoolean('reserveOverride') ? 'true' : 'false');
257
+		$this->assign('createOverride', WebRequest::postBoolean('createOverride') ? 'true' : 'false');
258
+
259
+		$this->setTemplate($templateName);
260
+	}
261 261
 }
Please login to merge, or discard this patch.
includes/WebStart.php 1 patch
Indentation   +220 added lines, -220 removed lines patch added patch discarded remove patch
@@ -30,224 +30,224 @@
 block discarded – undo
30 30
  */
31 31
 class WebStart extends ApplicationBase
32 32
 {
33
-    /**
34
-     * @var IRequestRouter $requestRouter The request router to use. Note that different entry points have different
35
-     *                                    routers and hence different URL mappings
36
-     */
37
-    private $requestRouter;
38
-    /**
39
-     * @var bool $isPublic Determines whether to use public interface objects or internal interface objects
40
-     */
41
-    private $isPublic = false;
42
-
43
-    /**
44
-     * WebStart constructor.
45
-     *
46
-     * @param SiteConfiguration $configuration The site configuration
47
-     * @param IRequestRouter    $router        The request router to use
48
-     */
49
-    public function __construct(SiteConfiguration $configuration, IRequestRouter $router)
50
-    {
51
-        parent::__construct($configuration);
52
-
53
-        $this->requestRouter = $router;
54
-    }
55
-
56
-    /**
57
-     * @param ITask             $page
58
-     * @param SiteConfiguration $siteConfiguration
59
-     * @param PdoDatabase       $database
60
-     * @param PdoDatabase       $notificationsDatabase
61
-     *
62
-     * @return void
63
-     */
64
-    protected function setupHelpers(
65
-        ITask $page,
66
-        SiteConfiguration $siteConfiguration,
67
-        PdoDatabase $database,
68
-        PdoDatabase $notificationsDatabase = null
69
-    ) {
70
-        parent::setupHelpers($page, $siteConfiguration, $database, $notificationsDatabase);
71
-
72
-        if ($page instanceof PageBase) {
73
-            $page->setTokenManager(new TokenManager());
74
-
75
-            if ($page instanceof InternalPageBase) {
76
-                $page->setTypeAheadHelper(new TypeAheadHelper());
77
-
78
-                $identificationVerifier = new IdentificationVerifier($page->getHttpHelper(), $siteConfiguration,
79
-                    $database);
80
-                $page->setIdentificationVerifier($identificationVerifier);
81
-
82
-                $page->setSecurityManager(new SecurityManager($identificationVerifier, new RoleConfiguration()));
83
-
84
-                if ($siteConfiguration->getTitleBlacklistEnabled()) {
85
-                    $page->setBlacklistHelper(new FakeBlacklistHelper());
86
-                }
87
-                else {
88
-                    $page->setBlacklistHelper(new BlacklistHelper($page->getHttpHelper(),
89
-                        $siteConfiguration->getMediawikiWebServiceEndpoint()));
90
-                }
91
-            }
92
-        }
93
-    }
94
-
95
-    /**
96
-     * Application entry point.
97
-     *
98
-     * Sets up the environment and runs the application, performing any global cleanup operations when done.
99
-     */
100
-    public function run()
101
-    {
102
-        try {
103
-            if ($this->setupEnvironment()) {
104
-                $this->main();
105
-            }
106
-        }
107
-        catch (EnvironmentException $ex) {
108
-            ob_end_clean();
109
-            print Offline::getOfflineMessage($this->isPublic(), $ex->getMessage());
110
-        }
111
-        catch (ReadableException $ex) {
112
-            ob_end_clean();
113
-            print $ex->getReadableError();
114
-        }
115
-        finally {
116
-            $this->cleanupEnvironment();
117
-        }
118
-    }
119
-
120
-    /**
121
-     * Environment setup
122
-     *
123
-     * This method initialises the tool environment. If the tool cannot be initialised correctly, it will return false
124
-     * and shut down prematurely.
125
-     *
126
-     * @return bool
127
-     * @throws EnvironmentException
128
-     */
129
-    protected function setupEnvironment()
130
-    {
131
-        // initialise global exception handler
132
-        set_exception_handler(array(ExceptionHandler::class, 'exceptionHandler'));
133
-        set_error_handler(array(ExceptionHandler::class, 'errorHandler'), E_RECOVERABLE_ERROR);
134
-
135
-        // start output buffering if necessary
136
-        if (ob_get_level() === 0) {
137
-            ob_start();
138
-        }
139
-
140
-        // initialise super-global providers
141
-        WebRequest::setGlobalStateProvider(new GlobalStateProvider());
142
-
143
-        if (Offline::isOffline()) {
144
-            print Offline::getOfflineMessage($this->isPublic());
145
-            ob_end_flush();
146
-
147
-            return false;
148
-        }
149
-
150
-        // Call parent setup
151
-        if (!parent::setupEnvironment()) {
152
-            return false;
153
-        }
154
-
155
-        // Start up sessions
156
-        Session::start();
157
-
158
-        // Check the user is allowed to be logged in still. This must be before we call any user-loading functions and
159
-        // get the current user cached.
160
-        // I'm not sure if this function call being here is particularly a good thing, but it's part of starting up a
161
-        // session I suppose.
162
-        $this->checkForceLogout();
163
-
164
-        // environment initialised!
165
-        return true;
166
-    }
167
-
168
-    /**
169
-     * Main application logic
170
-     */
171
-    protected function main()
172
-    {
173
-        // Get the right route for the request
174
-        $page = $this->requestRouter->route();
175
-
176
-        $siteConfiguration = $this->getConfiguration();
177
-        $database = PdoDatabase::getDatabaseConnection('acc');
178
-
179
-        if ($siteConfiguration->getIrcNotificationsEnabled()) {
180
-            $notificationsDatabase = PdoDatabase::getDatabaseConnection('notifications');
181
-        }
182
-        else {
183
-            // @todo federated table here?
184
-            $notificationsDatabase = $database;
185
-        }
186
-
187
-        $this->setupHelpers($page, $siteConfiguration, $database, $notificationsDatabase);
188
-
189
-        /* @todo Remove this global statement! It's here for User.php, which does far more than it should. */
190
-        global $oauthHelper;
191
-        $oauthHelper = $page->getOAuthHelper();
192
-
193
-        /* @todo Remove this global statement! It's here for Request.php, which does far more than it should. */
194
-        global $globalXffTrustProvider;
195
-        $globalXffTrustProvider = $page->getXffTrustProvider();
196
-
197
-        // run the route code for the request.
198
-        $page->execute();
199
-    }
200
-
201
-    /**
202
-     * Any cleanup tasks should go here
203
-     *
204
-     * Note that we need to be very careful here, as exceptions may have been thrown and handled.
205
-     * This should *only* be for cleaning up, no logic should go here.
206
-     */
207
-    protected function cleanupEnvironment()
208
-    {
209
-        // Clean up anything we splurged after sending the page.
210
-        if (ob_get_level() > 0) {
211
-            for ($i = ob_get_level(); $i > 0; $i--) {
212
-                ob_end_clean();
213
-            }
214
-        }
215
-    }
216
-
217
-    private function checkForceLogout()
218
-    {
219
-        $database = PdoDatabase::getDatabaseConnection('acc');
220
-
221
-        $sessionUserId = WebRequest::getSessionUserId();
222
-        iF ($sessionUserId === null) {
223
-            return;
224
-        }
225
-
226
-        // Note, User::getCurrent() caches it's result, which we *really* don't want to trigger.
227
-        $currentUser = User::getById($sessionUserId, $database);
228
-
229
-        if ($currentUser === false) {
230
-            // Umm... this user has a session cookie with a userId set, but no user exists...
231
-            Session::restart();
232
-
233
-            $currentUser = User::getCurrent($database);
234
-        }
235
-
236
-        if ($currentUser->getForceLogout()) {
237
-            Session::restart();
238
-
239
-            $currentUser->setForceLogout(false);
240
-            $currentUser->save();
241
-        }
242
-    }
243
-
244
-    public function isPublic()
245
-    {
246
-        return $this->isPublic;
247
-    }
248
-
249
-    public function setPublic($isPublic)
250
-    {
251
-        $this->isPublic = $isPublic;
252
-    }
33
+	/**
34
+	 * @var IRequestRouter $requestRouter The request router to use. Note that different entry points have different
35
+	 *                                    routers and hence different URL mappings
36
+	 */
37
+	private $requestRouter;
38
+	/**
39
+	 * @var bool $isPublic Determines whether to use public interface objects or internal interface objects
40
+	 */
41
+	private $isPublic = false;
42
+
43
+	/**
44
+	 * WebStart constructor.
45
+	 *
46
+	 * @param SiteConfiguration $configuration The site configuration
47
+	 * @param IRequestRouter    $router        The request router to use
48
+	 */
49
+	public function __construct(SiteConfiguration $configuration, IRequestRouter $router)
50
+	{
51
+		parent::__construct($configuration);
52
+
53
+		$this->requestRouter = $router;
54
+	}
55
+
56
+	/**
57
+	 * @param ITask             $page
58
+	 * @param SiteConfiguration $siteConfiguration
59
+	 * @param PdoDatabase       $database
60
+	 * @param PdoDatabase       $notificationsDatabase
61
+	 *
62
+	 * @return void
63
+	 */
64
+	protected function setupHelpers(
65
+		ITask $page,
66
+		SiteConfiguration $siteConfiguration,
67
+		PdoDatabase $database,
68
+		PdoDatabase $notificationsDatabase = null
69
+	) {
70
+		parent::setupHelpers($page, $siteConfiguration, $database, $notificationsDatabase);
71
+
72
+		if ($page instanceof PageBase) {
73
+			$page->setTokenManager(new TokenManager());
74
+
75
+			if ($page instanceof InternalPageBase) {
76
+				$page->setTypeAheadHelper(new TypeAheadHelper());
77
+
78
+				$identificationVerifier = new IdentificationVerifier($page->getHttpHelper(), $siteConfiguration,
79
+					$database);
80
+				$page->setIdentificationVerifier($identificationVerifier);
81
+
82
+				$page->setSecurityManager(new SecurityManager($identificationVerifier, new RoleConfiguration()));
83
+
84
+				if ($siteConfiguration->getTitleBlacklistEnabled()) {
85
+					$page->setBlacklistHelper(new FakeBlacklistHelper());
86
+				}
87
+				else {
88
+					$page->setBlacklistHelper(new BlacklistHelper($page->getHttpHelper(),
89
+						$siteConfiguration->getMediawikiWebServiceEndpoint()));
90
+				}
91
+			}
92
+		}
93
+	}
94
+
95
+	/**
96
+	 * Application entry point.
97
+	 *
98
+	 * Sets up the environment and runs the application, performing any global cleanup operations when done.
99
+	 */
100
+	public function run()
101
+	{
102
+		try {
103
+			if ($this->setupEnvironment()) {
104
+				$this->main();
105
+			}
106
+		}
107
+		catch (EnvironmentException $ex) {
108
+			ob_end_clean();
109
+			print Offline::getOfflineMessage($this->isPublic(), $ex->getMessage());
110
+		}
111
+		catch (ReadableException $ex) {
112
+			ob_end_clean();
113
+			print $ex->getReadableError();
114
+		}
115
+		finally {
116
+			$this->cleanupEnvironment();
117
+		}
118
+	}
119
+
120
+	/**
121
+	 * Environment setup
122
+	 *
123
+	 * This method initialises the tool environment. If the tool cannot be initialised correctly, it will return false
124
+	 * and shut down prematurely.
125
+	 *
126
+	 * @return bool
127
+	 * @throws EnvironmentException
128
+	 */
129
+	protected function setupEnvironment()
130
+	{
131
+		// initialise global exception handler
132
+		set_exception_handler(array(ExceptionHandler::class, 'exceptionHandler'));
133
+		set_error_handler(array(ExceptionHandler::class, 'errorHandler'), E_RECOVERABLE_ERROR);
134
+
135
+		// start output buffering if necessary
136
+		if (ob_get_level() === 0) {
137
+			ob_start();
138
+		}
139
+
140
+		// initialise super-global providers
141
+		WebRequest::setGlobalStateProvider(new GlobalStateProvider());
142
+
143
+		if (Offline::isOffline()) {
144
+			print Offline::getOfflineMessage($this->isPublic());
145
+			ob_end_flush();
146
+
147
+			return false;
148
+		}
149
+
150
+		// Call parent setup
151
+		if (!parent::setupEnvironment()) {
152
+			return false;
153
+		}
154
+
155
+		// Start up sessions
156
+		Session::start();
157
+
158
+		// Check the user is allowed to be logged in still. This must be before we call any user-loading functions and
159
+		// get the current user cached.
160
+		// I'm not sure if this function call being here is particularly a good thing, but it's part of starting up a
161
+		// session I suppose.
162
+		$this->checkForceLogout();
163
+
164
+		// environment initialised!
165
+		return true;
166
+	}
167
+
168
+	/**
169
+	 * Main application logic
170
+	 */
171
+	protected function main()
172
+	{
173
+		// Get the right route for the request
174
+		$page = $this->requestRouter->route();
175
+
176
+		$siteConfiguration = $this->getConfiguration();
177
+		$database = PdoDatabase::getDatabaseConnection('acc');
178
+
179
+		if ($siteConfiguration->getIrcNotificationsEnabled()) {
180
+			$notificationsDatabase = PdoDatabase::getDatabaseConnection('notifications');
181
+		}
182
+		else {
183
+			// @todo federated table here?
184
+			$notificationsDatabase = $database;
185
+		}
186
+
187
+		$this->setupHelpers($page, $siteConfiguration, $database, $notificationsDatabase);
188
+
189
+		/* @todo Remove this global statement! It's here for User.php, which does far more than it should. */
190
+		global $oauthHelper;
191
+		$oauthHelper = $page->getOAuthHelper();
192
+
193
+		/* @todo Remove this global statement! It's here for Request.php, which does far more than it should. */
194
+		global $globalXffTrustProvider;
195
+		$globalXffTrustProvider = $page->getXffTrustProvider();
196
+
197
+		// run the route code for the request.
198
+		$page->execute();
199
+	}
200
+
201
+	/**
202
+	 * Any cleanup tasks should go here
203
+	 *
204
+	 * Note that we need to be very careful here, as exceptions may have been thrown and handled.
205
+	 * This should *only* be for cleaning up, no logic should go here.
206
+	 */
207
+	protected function cleanupEnvironment()
208
+	{
209
+		// Clean up anything we splurged after sending the page.
210
+		if (ob_get_level() > 0) {
211
+			for ($i = ob_get_level(); $i > 0; $i--) {
212
+				ob_end_clean();
213
+			}
214
+		}
215
+	}
216
+
217
+	private function checkForceLogout()
218
+	{
219
+		$database = PdoDatabase::getDatabaseConnection('acc');
220
+
221
+		$sessionUserId = WebRequest::getSessionUserId();
222
+		iF ($sessionUserId === null) {
223
+			return;
224
+		}
225
+
226
+		// Note, User::getCurrent() caches it's result, which we *really* don't want to trigger.
227
+		$currentUser = User::getById($sessionUserId, $database);
228
+
229
+		if ($currentUser === false) {
230
+			// Umm... this user has a session cookie with a userId set, but no user exists...
231
+			Session::restart();
232
+
233
+			$currentUser = User::getCurrent($database);
234
+		}
235
+
236
+		if ($currentUser->getForceLogout()) {
237
+			Session::restart();
238
+
239
+			$currentUser->setForceLogout(false);
240
+			$currentUser->save();
241
+		}
242
+	}
243
+
244
+	public function isPublic()
245
+	{
246
+		return $this->isPublic;
247
+	}
248
+
249
+	public function setPublic($isPublic)
250
+	{
251
+		$this->isPublic = $isPublic;
252
+	}
253 253
 }
Please login to merge, or discard this patch.