1 | <?php |
||||||
2 | /****************************************************************************** |
||||||
3 | * Wikipedia Account Creation Assistance tool * |
||||||
4 | * ACC Development Team. Please see team.json for a list of contributors. * |
||||||
5 | * * |
||||||
6 | * This is free and unencumbered software released into the public domain. * |
||||||
7 | * Please see LICENSE.md for the full licencing statement. * |
||||||
8 | ******************************************************************************/ |
||||||
9 | |||||||
10 | namespace Waca\Pages; |
||||||
11 | |||||||
12 | use Waca\DataObjects\RequestQueue; |
||||||
13 | use Waca\DataObjects\User; |
||||||
14 | use Waca\Helpers\Logger; |
||||||
15 | use Waca\Helpers\RequestQueueHelper; |
||||||
16 | use Waca\SessionAlert; |
||||||
17 | use Waca\Tasks\InternalPageBase; |
||||||
18 | use Waca\WebRequest; |
||||||
19 | |||||||
20 | class PageQueueManagement extends InternalPageBase |
||||||
21 | { |
||||||
22 | /** @var RequestQueueHelper */ |
||||||
23 | private $helper; |
||||||
24 | |||||||
25 | public function __construct() |
||||||
26 | { |
||||||
27 | $this->helper = new RequestQueueHelper(); |
||||||
28 | } |
||||||
29 | |||||||
30 | protected function main() |
||||||
31 | { |
||||||
32 | $this->setHtmlTitle('Request Queue Management'); |
||||||
33 | |||||||
34 | $database = $this->getDatabase(); |
||||||
35 | $queues = RequestQueue::getAllQueues($database); |
||||||
36 | |||||||
37 | $this->assign('queues', $queues); |
||||||
38 | |||||||
39 | $user = User::getCurrent($database); |
||||||
40 | $this->assign('canCreate', $this->barrierTest('create', $user)); |
||||||
41 | $this->assign('canEdit', $this->barrierTest('edit', $user)); |
||||||
42 | |||||||
43 | $this->setTemplate('queue-management/main.tpl'); |
||||||
44 | } |
||||||
45 | |||||||
46 | protected function create() |
||||||
47 | { |
||||||
48 | if (WebRequest::wasPosted()) { |
||||||
49 | $this->validateCSRFToken(); |
||||||
50 | $database = $this->getDatabase(); |
||||||
51 | |||||||
52 | $queue = new RequestQueue(); |
||||||
53 | |||||||
54 | $queue->setDatabase($database); |
||||||
55 | $queue->setDomain(1); // FIXME: domain |
||||||
56 | |||||||
57 | $queue->setHeader(WebRequest::postString('header')); |
||||||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||||
58 | $queue->setDisplayName(WebRequest::postString('displayName')); |
||||||
0 ignored issues
–
show
It seems like
Waca\WebRequest::postString('displayName') can also be of type null ; however, parameter $displayName of Waca\DataObjects\RequestQueue::setDisplayName() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
59 | $queue->setApiName(WebRequest::postString('apiName')); |
||||||
0 ignored issues
–
show
It seems like
Waca\WebRequest::postString('apiName') can also be of type null ; however, parameter $apiName of Waca\DataObjects\RequestQueue::setApiName() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
60 | $queue->setEnabled(WebRequest::postBoolean('enabled')); |
||||||
61 | $queue->setDefault(WebRequest::postBoolean('default') && WebRequest::postBoolean('enabled')); |
||||||
62 | $queue->setDefaultAntispoof(WebRequest::postBoolean('antispoof') && WebRequest::postBoolean('enabled')); |
||||||
63 | $queue->setDefaultTitleBlacklist(WebRequest::postBoolean('titleblacklist') && WebRequest::postBoolean('enabled')); |
||||||
64 | $queue->setHelp(WebRequest::postString('help')); |
||||||
65 | $queue->setLogName(WebRequest::postString('logName')); |
||||||
0 ignored issues
–
show
It seems like
Waca\WebRequest::postString('logName') can also be of type null ; however, parameter $logName of Waca\DataObjects\RequestQueue::setLogName() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() The function
Waca\DataObjects\RequestQueue::setLogName() has been deprecated.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
66 | |||||||
67 | $proceed = true; |
||||||
68 | |||||||
69 | if (RequestQueue::getByApiName($database, $queue->getApiName(), 1) !== false) { |
||||||
70 | // FIXME: domain |
||||||
71 | SessionAlert::error("The chosen API name is already in use. Please choose another."); |
||||||
72 | $proceed = false; |
||||||
73 | } |
||||||
74 | |||||||
75 | if (preg_match('/^[A-Za-z][a-zA-Z0-9_-]*$/', $queue->getApiName()) !== 1) { |
||||||
76 | SessionAlert::error("The chosen API name contains invalid characters"); |
||||||
77 | $proceed = false; |
||||||
78 | } |
||||||
79 | |||||||
80 | if (RequestQueue::getByDisplayName($database, $queue->getDisplayName(), 1) !== false) { |
||||||
81 | // FIXME: domain |
||||||
82 | SessionAlert::error("The chosen target display name is already in use. Please choose another."); |
||||||
83 | $proceed = false; |
||||||
84 | } |
||||||
85 | |||||||
86 | if (RequestQueue::getByHeader($database, $queue->getHeader(), 1) !== false) { |
||||||
87 | // FIXME: domain |
||||||
88 | SessionAlert::error("The chosen header is already in use. Please choose another."); |
||||||
89 | $proceed = false; |
||||||
90 | } |
||||||
91 | |||||||
92 | if ($proceed) { |
||||||
93 | $queue->save(); |
||||||
94 | Logger::requestQueueCreated($database, $queue); |
||||||
95 | $this->redirect('queueManagement'); |
||||||
96 | } |
||||||
97 | else { |
||||||
98 | $this->populateFromObject($queue); |
||||||
99 | |||||||
100 | $this->assign('createMode', true); |
||||||
101 | $this->setTemplate('queue-management/edit.tpl'); |
||||||
102 | } |
||||||
103 | } |
||||||
104 | else { |
||||||
105 | $this->assign('header', null); |
||||||
106 | $this->assign('displayName', null); |
||||||
107 | $this->assign('apiName', null); |
||||||
108 | $this->assign('enabled', false); |
||||||
109 | $this->assign('antispoof', false); |
||||||
110 | $this->assign('isTarget', false); |
||||||
111 | $this->assign('titleblacklist', false); |
||||||
112 | $this->assign('default', false); |
||||||
113 | $this->assign('help', null); |
||||||
114 | $this->assign('logName', null); |
||||||
115 | |||||||
116 | $this->assignCSRFToken(); |
||||||
117 | $this->assign('createMode', true); |
||||||
118 | $this->setTemplate('queue-management/edit.tpl'); |
||||||
119 | } |
||||||
120 | } |
||||||
121 | |||||||
122 | protected function edit() |
||||||
123 | { |
||||||
124 | $database = $this->getDatabase(); |
||||||
125 | |||||||
126 | $id = WebRequest::getInt('queue'); |
||||||
127 | if ($id === null) { |
||||||
128 | $this->redirect('queueManagement'); |
||||||
129 | |||||||
130 | return; |
||||||
131 | } |
||||||
132 | |||||||
133 | /** @var RequestQueue $queue */ |
||||||
134 | $queue = RequestQueue::getById($id, $database); |
||||||
135 | |||||||
136 | if (WebRequest::wasPosted()) { |
||||||
137 | $this->validateCSRFToken(); |
||||||
138 | |||||||
139 | $this->helper->configureDefaults( |
||||||
140 | $queue, |
||||||
141 | WebRequest::postBoolean('enabled'), |
||||||
142 | WebRequest::postBoolean('default'), |
||||||
143 | WebRequest::postBoolean('antispoof'), |
||||||
144 | WebRequest::postBoolean('titleblacklist'), |
||||||
145 | $this->helper->isEmailTemplateTarget($queue, $this->getDatabase()) || $this->helper->isRequestFormTarget($queue, $this->getDatabase())); |
||||||
146 | |||||||
147 | $queue->setHeader(WebRequest::postString('header')); |
||||||
0 ignored issues
–
show
It seems like
Waca\WebRequest::postString('header') can also be of type null ; however, parameter $header of Waca\DataObjects\RequestQueue::setHeader() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
148 | $queue->setDisplayName(WebRequest::postString('displayName')); |
||||||
0 ignored issues
–
show
It seems like
Waca\WebRequest::postString('displayName') can also be of type null ; however, parameter $displayName of Waca\DataObjects\RequestQueue::setDisplayName() does only seem to accept string , maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
149 | $queue->setHelp(WebRequest::postString('help')); |
||||||
150 | |||||||
151 | $proceed = true; |
||||||
152 | |||||||
153 | $foundRequestQueue = RequestQueue::getByDisplayName($database, $queue->getDisplayName(), 1); |
||||||
154 | if ($foundRequestQueue !== false && $foundRequestQueue->getId() !== $queue->getId()) { |
||||||
155 | // FIXME: domain |
||||||
156 | SessionAlert::error("The chosen target display name is already in use. Please choose another."); |
||||||
157 | $proceed = false; |
||||||
158 | } |
||||||
159 | |||||||
160 | $foundRequestQueue = RequestQueue::getByHeader($database, $queue->getHeader(), 1); |
||||||
161 | if ($foundRequestQueue !== false && $foundRequestQueue->getId() !== $queue->getId()) { |
||||||
162 | // FIXME: domain |
||||||
163 | SessionAlert::error("The chosen header is already in use. Please choose another."); |
||||||
164 | $proceed = false; |
||||||
165 | } |
||||||
166 | |||||||
167 | if ($proceed) { |
||||||
168 | Logger::requestQueueEdited($database, $queue); |
||||||
169 | $queue->save(); |
||||||
170 | $this->redirect('queueManagement'); |
||||||
171 | } |
||||||
172 | else { |
||||||
173 | $this->populateFromObject($queue); |
||||||
174 | |||||||
175 | $this->assign('createMode', false); |
||||||
176 | $this->setTemplate('queue-management/edit.tpl'); |
||||||
177 | } |
||||||
178 | } |
||||||
179 | else { |
||||||
180 | $this->populateFromObject($queue); |
||||||
181 | |||||||
182 | $this->assign('createMode', false); |
||||||
183 | $this->setTemplate('queue-management/edit.tpl'); |
||||||
184 | } |
||||||
185 | } |
||||||
186 | |||||||
187 | /** |
||||||
188 | * @param RequestQueue $queue |
||||||
189 | */ |
||||||
190 | protected function populateFromObject(RequestQueue $queue): void |
||||||
191 | { |
||||||
192 | $this->assignCSRFToken(); |
||||||
193 | |||||||
194 | $this->assign('header', $queue->getHeader()); |
||||||
195 | $this->assign('displayName', $queue->getDisplayName()); |
||||||
196 | $this->assign('apiName', $queue->getApiName()); |
||||||
197 | $this->assign('enabled', $queue->isEnabled()); |
||||||
198 | $this->assign('default', $queue->isDefault()); |
||||||
199 | $this->assign('antispoof', $queue->isDefaultAntispoof()); |
||||||
200 | $this->assign('titleblacklist', $queue->isDefaultTitleBlacklist()); |
||||||
201 | $this->assign('help', $queue->getHelp()); |
||||||
202 | $this->assign('logName', $queue->getLogName()); |
||||||
0 ignored issues
–
show
The function
Waca\DataObjects\RequestQueue::getLogName() has been deprecated.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
![]() |
|||||||
203 | |||||||
204 | $isQueueTarget = $this->helper->isEmailTemplateTarget($queue, $this->getDatabase()); |
||||||
205 | $isFormTarget = $this->helper->isRequestFormTarget($queue, $this->getDatabase()); |
||||||
206 | $this->assign('isTarget', $isQueueTarget); |
||||||
207 | $this->assign('isFormTarget', $isFormTarget); |
||||||
208 | } |
||||||
209 | } |