Verzeichnisstruktur phpBB-3.3.15
- Veröffentlicht
- 28.08.2024
So funktioniert es
|
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
acp_reasons.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 /**
015 * @ignore
016 */
017 if (!defined('IN_PHPBB'))
018 {
019 exit;
020 }
021
022 class acp_reasons
023 {
024 var $u_action;
025
026 function main($id, $mode)
027 {
028 global $db, $user, $template;
029 global $request, $phpbb_log;
030
031 $user->add_lang(array('mcp', 'acp/posting'));
032
033 // Set up general vars
034 $action = $request->variable('action', '');
035 $submit = (isset($_POST['submit'])) ? true : false;
036 $reason_id = $request->variable('id', 0);
037
038 $this->tpl_name = 'acp_reasons';
039 $this->page_title = 'ACP_REASONS';
040
041 $form_name = 'acp_reason';
042 add_form_key('acp_reason');
043
044 $error = array();
045
046 switch ($action)
047 {
048 case 'add':
049 case 'edit':
050
051 $reason_row = array(
052 'reason_title' => $request->variable('reason_title', '', true),
053 'reason_description' => $request->variable('reason_description', '', true),
054 );
055
056 if ($submit)
057 {
058 if (!check_form_key($form_name))
059 {
060 $error[] = $user->lang['FORM_INVALID'];
061 }
062 // Reason specified?
063 if (!$reason_row['reason_title'] || !$reason_row['reason_description'])
064 {
065 $error[] = $user->lang['NO_REASON_INFO'];
066 }
067
068 $check_double = ($action == 'add') ? true : false;
069
070 if ($action == 'edit')
071 {
072 $sql = 'SELECT reason_title
073 FROM ' . REPORTS_REASONS_TABLE . "
074 WHERE reason_id = $reason_id";
075 $result = $db->sql_query($sql);
076 $row = $db->sql_fetchrow($result);
077 $db->sql_freeresult($result);
078
079 if (strtolower($row['reason_title']) == 'other' || strtolower($reason_row['reason_title']) == 'other')
080 {
081 $reason_row['reason_title'] = 'other';
082 }
083
084 if ($row['reason_title'] != $reason_row['reason_title'])
085 {
086 $check_double = true;
087 }
088 }
089
090 // Check for same reason if adding it...
091 if ($check_double)
092 {
093 $sql = 'SELECT reason_id
094 FROM ' . REPORTS_REASONS_TABLE . "
095 WHERE reason_title = '" . $db->sql_escape($reason_row['reason_title']) . "'";
096 $result = $db->sql_query($sql);
097 $row = $db->sql_fetchrow($result);
098 $db->sql_freeresult($result);
099
100 if ($row || ($action == 'add' && strtolower($reason_row['reason_title']) == 'other'))
101 {
102 $error[] = $user->lang['REASON_ALREADY_EXIST'];
103 }
104 }
105
106 if (!count($error))
107 {
108 // New reason?
109 if ($action == 'add')
110 {
111 // Get new order...
112 $sql = 'SELECT MAX(reason_order) as max_reason_order
113 FROM ' . REPORTS_REASONS_TABLE;
114 $result = $db->sql_query($sql);
115 $max_order = (int) $db->sql_fetchfield('max_reason_order');
116 $db->sql_freeresult($result);
117
118 $sql_ary = array(
119 'reason_title' => (string) $reason_row['reason_title'],
120 'reason_description' => (string) $reason_row['reason_description'],
121 'reason_order' => $max_order + 1
122 );
123
124 $db->sql_query('INSERT INTO ' . REPORTS_REASONS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
125
126 $log = 'ADDED';
127 }
128 else if ($reason_id)
129 {
130 $sql_ary = array(
131 'reason_title' => (string) $reason_row['reason_title'],
132 'reason_description' => (string) $reason_row['reason_description'],
133 );
134
135 $db->sql_query('UPDATE ' . REPORTS_REASONS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
136 WHERE reason_id = ' . $reason_id);
137
138 $log = 'UPDATED';
139 }
140
141 $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_REASON_' . $log, false, array($reason_row['reason_title']));
142 trigger_error($user->lang['REASON_' . $log] . adm_back_link($this->u_action));
143 }
144 }
145 else if ($reason_id)
146 {
147 $sql = 'SELECT *
148 FROM ' . REPORTS_REASONS_TABLE . '
149 WHERE reason_id = ' . $reason_id;
150 $result = $db->sql_query($sql);
151 $reason_row = $db->sql_fetchrow($result);
152 $db->sql_freeresult($result);
153
154 if (!$reason_row)
155 {
156 trigger_error($user->lang['NO_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
157 }
158 }
159
160 $l_title = ($action == 'edit') ? 'EDIT' : 'ADD';
161
162 $translated = false;
163
164 // If the reason is defined within the language file, we will use the localized version, else just use the database entry...
165 if (isset($user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])]))
166 {
167 $translated = true;
168 }
169
170 $template->assign_vars(array(
171 'L_TITLE' => $user->lang['REASON_' . $l_title],
172 'U_ACTION' => $this->u_action . "&id=$reason_id&action=$action",
173 'U_BACK' => $this->u_action,
174 'ERROR_MSG' => (count($error)) ? implode('<br />', $error) : '',
175
176 'REASON_TITLE' => $reason_row['reason_title'],
177 'REASON_DESCRIPTION' => $reason_row['reason_description'],
178
179 'TRANSLATED_TITLE' => ($translated) ? $user->lang['report_reasons']['TITLE'][strtoupper($reason_row['reason_title'])] : '',
180 'TRANSLATED_DESCRIPTION'=> ($translated) ? $user->lang['report_reasons']['DESCRIPTION'][strtoupper($reason_row['reason_title'])] : '',
181
182 'S_AVAILABLE_TITLES' => implode($user->lang['COMMA_SEPARATOR'], array_map('htmlspecialchars', array_keys($user->lang['report_reasons']['TITLE']))),
183 'S_EDIT_REASON' => true,
184 'S_TRANSLATED' => $translated,
185 'S_ERROR' => (count($error)) ? true : false,
186 )
187 );
188
189 return;
190 break;
191
192 case 'delete':
193
194 $sql = 'SELECT *
195 FROM ' . REPORTS_REASONS_TABLE . '
196 WHERE reason_id = ' . $reason_id;
197 $result = $db->sql_query($sql);
198 $reason_row = $db->sql_fetchrow($result);
199 $db->sql_freeresult($result);
200
201 if (!$reason_row)
202 {
203 trigger_error($user->lang['NO_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
204 }
205
206 if (strtolower($reason_row['reason_title']) == 'other')
207 {
208 trigger_error($user->lang['NO_REMOVE_DEFAULT_REASON'] . adm_back_link($this->u_action), E_USER_WARNING);
209 }
210
211 // Let the deletion be confirmed...
212 if (confirm_box(true))
213 {
214 $sql = 'SELECT reason_id
215 FROM ' . REPORTS_REASONS_TABLE . "
216 WHERE LOWER(reason_title) = 'other'";
217 $result = $db->sql_query($sql);
218 $other_reason_id = (int) $db->sql_fetchfield('reason_id');
219 $db->sql_freeresult($result);
220
221 switch ($db->get_sql_layer())
222 {
223 // The ugly one!
224 case 'mysqli':
225 // Change the reports using this reason to 'other'
226 $sql = 'UPDATE ' . REPORTS_TABLE . '
227 SET reason_id = ' . $other_reason_id . ", report_text = CONCAT('" . $db->sql_escape($reason_row['reason_description']) . "\n\n', report_text)
228 WHERE reason_id = $reason_id";
229 break;
230
231 // Standard? What's that?
232 case 'mssql_odbc':
233 case 'mssqlnative':
234 // Change the reports using this reason to 'other'
235 $sql = "DECLARE @ptrval binary(16)
236
237 SELECT @ptrval = TEXTPTR(report_text)
238 FROM " . REPORTS_TABLE . "
239 WHERE reason_id = " . $reason_id . "
240
241 UPDATETEXT " . REPORTS_TABLE . ".report_text @ptrval 0 0 '" . $db->sql_escape($reason_row['reason_description']) . "\n\n'
242
243 UPDATE " . REPORTS_TABLE . '
244 SET reason_id = ' . $other_reason_id . "
245 WHERE reason_id = $reason_id";
246 break;
247
248 // Teh standard
249 case 'postgres':
250 case 'oracle':
251 case 'sqlite3':
252 // Change the reports using this reason to 'other'
253 $sql = 'UPDATE ' . REPORTS_TABLE . '
254 SET reason_id = ' . $other_reason_id . ", report_text = '" . $db->sql_escape($reason_row['reason_description']) . "\n\n' || report_text
255 WHERE reason_id = $reason_id";
256 break;
257 }
258 $db->sql_query($sql);
259
260 $db->sql_query('DELETE FROM ' . REPORTS_REASONS_TABLE . ' WHERE reason_id = ' . $reason_id);
261
262 $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_REASON_REMOVED', false, array($reason_row['reason_title']));
263 trigger_error($user->lang['REASON_REMOVED'] . adm_back_link($this->u_action));
264 }
265 else
266 {
267 confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
268 'i' => $id,
269 'mode' => $mode,
270 'action' => $action,
271 'id' => $reason_id))
272 );
273 }
274
275 break;
276
277 case 'move_up':
278 case 'move_down':
279
280 if (!check_link_hash($request->variable('hash', ''), 'acp_reasons'))
281 {
282 trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
283 }
284
285 $sql = 'SELECT reason_order
286 FROM ' . REPORTS_REASONS_TABLE . "
287 WHERE reason_id = $reason_id";
288 $result = $db->sql_query($sql);
289 $order = $db->sql_fetchfield('reason_order');
290 $db->sql_freeresult($result);
291
292 if ($order === false || ($order == 0 && $action == 'move_up'))
293 {
294 break;
295 }
296 $order = (int) $order;
297 $order_total = $order * 2 + (($action == 'move_up') ? -1 : 1);
298
299 $sql = 'UPDATE ' . REPORTS_REASONS_TABLE . '
300 SET reason_order = ' . $order_total . ' - reason_order
301 WHERE reason_order IN (' . $order . ', ' . (($action == 'move_up') ? $order - 1 : $order + 1) . ')';
302 $db->sql_query($sql);
303
304 if ($request->is_ajax())
305 {
306 $json_response = new \phpbb\json_response;
307 $json_response->send(array(
308 'success' => (bool) $db->sql_affectedrows(),
309 ));
310 }
311 break;
312 }
313
314 // By default, check that order is valid and fix it if necessary
315 $sql = 'SELECT reason_id, reason_order
316 FROM ' . REPORTS_REASONS_TABLE . '
317 ORDER BY reason_order';
318 $result = $db->sql_query($sql);
319
320 if ($row = $db->sql_fetchrow($result))
321 {
322 $order = 0;
323 do
324 {
325 ++$order;
326
327 if ($row['reason_order'] != $order)
328 {
329 $sql = 'UPDATE ' . REPORTS_REASONS_TABLE . "
330 SET reason_order = $order
331 WHERE reason_id = {$row['reason_id']}";
332 $db->sql_query($sql);
333 }
334 }
335 while ($row = $db->sql_fetchrow($result));
336 }
337 $db->sql_freeresult($result);
338
339 $template->assign_vars(array(
340 'U_ACTION' => $this->u_action,
341 )
342 );
343
344 // Reason count
345 $sql = 'SELECT reason_id, COUNT(reason_id) AS reason_count
346 FROM ' . REPORTS_TABLE . '
347 GROUP BY reason_id';
348 $result = $db->sql_query($sql);
349
350 $reason_count = array();
351 while ($row = $db->sql_fetchrow($result))
352 {
353 $reason_count[$row['reason_id']] = $row['reason_count'];
354 }
355 $db->sql_freeresult($result);
356
357 $sql = 'SELECT *
358 FROM ' . REPORTS_REASONS_TABLE . '
359 ORDER BY reason_order ASC';
360 $result = $db->sql_query($sql);
361
362 while ($row = $db->sql_fetchrow($result))
363 {
364 $translated = false;
365 $other_reason = ($row['reason_title'] == 'other') ? true : false;
366
367 // If the reason is defined within the language file, we will use the localized version, else just use the database entry...
368 if (isset($user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])]))
369 {
370 $row['reason_description'] = $user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])];
371 $row['reason_title'] = $user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])];
372
373 $translated = true;
374 }
375
376 $template->assign_block_vars('reasons', array(
377 'REASON_TITLE' => $row['reason_title'],
378 'REASON_DESCRIPTION' => $row['reason_description'],
379 'REASON_COUNT' => (isset($reason_count[$row['reason_id']])) ? $reason_count[$row['reason_id']] : 0,
380
381 'S_TRANSLATED' => $translated,
382 'S_OTHER_REASON' => $other_reason,
383
384 'U_EDIT' => $this->u_action . '&action=edit&id=' . $row['reason_id'],
385 'U_DELETE' => (!$other_reason) ? $this->u_action . '&action=delete&id=' . $row['reason_id'] : '',
386 'U_MOVE_UP' => $this->u_action . '&action=move_up&id=' . $row['reason_id'] . '&hash=' . generate_link_hash('acp_reasons'),
387 'U_MOVE_DOWN' => $this->u_action . '&action=move_down&id=' . $row['reason_id'] . '&hash=' . generate_link_hash('acp_reasons'))
388 );
389 }
390 $db->sql_freeresult($result);
391 }
392 }
393