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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

acp_reasons.php

Zuletzt modifiziert: 02.04.2025, 15:02 - Dateigröße: 11.97 KiB


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 . "&amp;id=$reason_id&amp;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 . '&amp;action=edit&amp;id=' . $row['reason_id'],
385                  'U_DELETE'        => (!$other_reason) ? $this->u_action . '&amp;action=delete&amp;id=' . $row['reason_id'] : '',
386                  'U_MOVE_UP'        => $this->u_action . '&amp;action=move_up&amp;id=' . $row['reason_id'] . '&amp;hash=' . generate_link_hash('acp_reasons'),
387                  'U_MOVE_DOWN'    => $this->u_action . '&amp;action=move_down&amp;id=' . $row['reason_id'] . '&amp;hash=' . generate_link_hash('acp_reasons'))
388              );
389          }
390          $db->sql_freeresult($result);
391      }
392  }
393