Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

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: 09.10.2024, 12:51 - Dateigröße: 11.12 KiB


001  <?php
002  /**
003  *
004  * @package acp
005  * @version $Id$
006  * @copyright (c) 2005 phpBB Group
007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
008  *
009  */
010   
011  /**
012  * @ignore
013  */
014  if (!defined('IN_PHPBB'))
015  {
016      exit;
017  }
018   
019  /**
020  * @package acp
021  */
022  class acp_reasons
023  {
024      var $u_action;
025   
026      function main($id, $mode)
027      {
028          global $db, $user, $auth, $template, $cache;
029          global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
030   
031          $user->add_lang(array('mcp', 'acp/posting'));
032   
033          // Set up general vars
034          $action = request_var('action', '');
035          $submit = (isset($_POST['submit'])) ? true : false;
036          $reason_id = request_var('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'            => utf8_normalize_nfc(request_var('reason_title', '', true)),
053                      'reason_description'    => utf8_normalize_nfc(request_var('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 (!sizeof($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                          add_log('admin', 'LOG_REASON_' . $log, $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'        => (sizeof($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(', ', array_map('htmlspecialchars', array_keys($user->lang['report_reasons']['TITLE']))),
183                      'S_EDIT_REASON'            => true,
184                      'S_TRANSLATED'            => $translated,
185                      'S_ERROR'                => (sizeof($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->sql_layer)
222                      {
223                          // The ugly one!
224                          case 'mysqli':
225                          case 'mysql4':
226                          case 'mysql':
227                              // Change the reports using this reason to 'other'
228                              $sql = 'UPDATE ' . REPORTS_TABLE . '
229                                  SET reason_id = ' . $other_reason_id . ", report_text = CONCAT('" . $db->sql_escape($reason_row['reason_description']) . "\n\n', report_text)
230                                  WHERE reason_id = $reason_id";
231                          break;
232   
233                          // Standard? What's that?
234                          case 'mssql':
235                          case 'mssql_odbc':
236                              // Change the reports using this reason to 'other'
237                              $sql = "DECLARE @ptrval binary(16)
238   
239                                      SELECT @ptrval = TEXTPTR(report_text)
240                                          FROM " . REPORTS_TABLE . "
241                                      WHERE reason_id = " . $reason_id . "
242   
243                                      UPDATETEXT " . REPORTS_TABLE . ".report_text @ptrval 0 0 '" . $db->sql_escape($reason_row['reason_description']) . "\n\n'
244   
245                                      UPDATE " . REPORTS_TABLE . '
246                                          SET reason_id = ' . $other_reason_id . "
247                                      WHERE reason_id = $reason_id";
248                          break;
249   
250                          // Teh standard
251                          case 'postgres':
252                          case 'oracle':
253                          case 'firebird':
254                          case 'sqlite':
255                              // Change the reports using this reason to 'other'
256                              $sql = 'UPDATE ' . REPORTS_TABLE . '
257                                  SET reason_id = ' . $other_reason_id . ", report_text = '" . $db->sql_escape($reason_row['reason_description']) . "\n\n' || report_text
258                                  WHERE reason_id = $reason_id";
259                          break;
260                      }
261                      $db->sql_query($sql);
262   
263                      $db->sql_query('DELETE FROM ' . REPORTS_REASONS_TABLE . ' WHERE reason_id = ' . $reason_id);
264   
265                      add_log('admin', 'LOG_REASON_REMOVED', $reason_row['reason_title']);
266                      trigger_error($user->lang['REASON_REMOVED'] . adm_back_link($this->u_action));
267                  }
268                  else
269                  {
270                      confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
271                          'i'            => $id,
272                          'mode'        => $mode,
273                          'action'    => $action,
274                          'id'        => $reason_id))
275                      );
276                  }
277   
278              break;
279   
280              case 'move_up':
281              case 'move_down':
282   
283                  $order = request_var('order', 0);
284                  $order_total = $order * 2 + (($action == 'move_up') ? -1 : 1);
285   
286                  $sql = 'UPDATE ' . REPORTS_REASONS_TABLE . '
287                      SET reason_order = ' . $order_total . ' - reason_order
288                      WHERE reason_order IN (' . $order . ', ' . (($action == 'move_up') ? $order - 1 : $order + 1) . ')';
289                  $db->sql_query($sql);
290   
291              break;
292          }
293   
294          // By default, check that order is valid and fix it if necessary
295          $sql = 'SELECT reason_id, reason_order
296              FROM ' . REPORTS_REASONS_TABLE . '
297              ORDER BY reason_order';
298          $result = $db->sql_query($sql);
299   
300          if ($row = $db->sql_fetchrow($result))
301          {
302              $order = 0;
303              do
304              {
305                  ++$order;
306                  
307                  if ($row['reason_order'] != $order)
308                  {
309                      $sql = 'UPDATE ' . REPORTS_REASONS_TABLE . "
310                          SET reason_order = $order
311                          WHERE reason_id = {$row['reason_id']}";
312                      $db->sql_query($sql);
313                  }
314              }
315              while ($row = $db->sql_fetchrow($result));
316          }
317          $db->sql_freeresult($result);
318   
319          $template->assign_vars(array(
320              'U_ACTION'            => $this->u_action,
321              )
322          );
323   
324          // Reason count
325          $sql = 'SELECT reason_id, COUNT(reason_id) AS reason_count
326              FROM ' . REPORTS_TABLE . '
327              GROUP BY reason_id';
328          $result = $db->sql_query($sql);
329   
330          $reason_count = array();
331          while ($row = $db->sql_fetchrow($result))
332          {
333              $reason_count[$row['reason_id']] = $row['reason_count'];
334          }
335          $db->sql_freeresult($result);
336   
337          $sql = 'SELECT *
338              FROM ' . REPORTS_REASONS_TABLE . '
339              ORDER BY reason_order ASC';
340          $result = $db->sql_query($sql);
341   
342          while ($row = $db->sql_fetchrow($result))
343          {
344              $translated = false;
345              $other_reason = ($row['reason_title'] == 'other') ? true : false;
346   
347              // If the reason is defined within the language file, we will use the localized version, else just use the database entry...
348              if (isset($user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])]) && isset($user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])]))
349              {
350                  $row['reason_description'] = $user->lang['report_reasons']['DESCRIPTION'][strtoupper($row['reason_title'])];
351                  $row['reason_title'] = $user->lang['report_reasons']['TITLE'][strtoupper($row['reason_title'])];
352   
353                  $translated = true;
354              }
355   
356              $template->assign_block_vars('reasons', array(
357                  'REASON_TITLE'            => $row['reason_title'],
358                  'REASON_DESCRIPTION'    => $row['reason_description'],
359                  'REASON_COUNT'            => (isset($reason_count[$row['reason_id']])) ? $reason_count[$row['reason_id']] : 0,
360   
361                  'S_TRANSLATED'        => $translated,
362                  'S_OTHER_REASON'    => $other_reason,
363   
364                  'U_EDIT'        => $this->u_action . '&amp;action=edit&amp;id=' . $row['reason_id'],
365                  'U_DELETE'        => (!$other_reason) ? $this->u_action . '&amp;action=delete&amp;id=' . $row['reason_id'] : '',
366                  'U_MOVE_UP'        => $this->u_action . '&amp;action=move_up&amp;order=' . $row['reason_order'],
367                  'U_MOVE_DOWN'    => $this->u_action . '&amp;action=move_down&amp;order=' . $row['reason_order'])
368              );
369          }
370          $db->sql_freeresult($result);
371      }
372  }
373   
374  ?>