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_prune.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 12.57 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_prune
023  {
024      var $u_action;
025   
026      function main($id, $mode)
027      {
028          global $user, $phpEx, $phpbb_admin_path, $phpbb_root_path;
029   
030          $user->add_lang('acp/prune');
031          include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
032   
033          switch ($mode)
034          {
035              case 'forums':
036                  $this->tpl_name = 'acp_prune_forums';
037                  $this->page_title = 'ACP_PRUNE_FORUMS';
038                  $this->prune_forums($id, $mode);
039              break;
040   
041              case 'users':
042                  $this->tpl_name = 'acp_prune_users';
043                  $this->page_title = 'ACP_PRUNE_USERS';
044                  $this->prune_users($id, $mode);
045              break;
046          }
047      }
048   
049      /**
050      * Prune forums
051      */
052      function prune_forums($id, $mode)
053      {
054          global $db, $user, $auth, $template, $cache;
055          global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
056   
057          $all_forums = request_var('all_forums', 0);
058          $forum_id = request_var('f', array(0));
059          $submit = (isset($_POST['submit'])) ? true : false;
060   
061          if ($all_forums)
062          {
063              $sql = 'SELECT forum_id
064                  FROM ' . FORUMS_TABLE . '
065                  ORDER BY left_id';
066              $result = $db->sql_query($sql);
067   
068              $forum_id = array();
069              while ($row = $db->sql_fetchrow($result))
070              {
071                  $forum_id[] = $row['forum_id'];
072              }
073              $db->sql_freeresult($result);
074          }
075   
076          if ($submit)
077          {
078              if (confirm_box(true))
079              {
080                  $prune_posted = request_var('prune_days', 0);
081                  $prune_viewed = request_var('prune_vieweddays', 0);
082                  $prune_all = (!$prune_posted && !$prune_viewed) ? true : false;
083          
084                  $prune_flags = 0;
085                  $prune_flags += (request_var('prune_old_polls', 0)) ? 2 : 0;
086                  $prune_flags += (request_var('prune_announce', 0)) ? 4 : 0;
087                  $prune_flags += (request_var('prune_sticky', 0)) ? 8 : 0;
088   
089                  // Convert days to seconds for timestamp functions...
090                  $prunedate_posted = time() - ($prune_posted * 86400);
091                  $prunedate_viewed = time() - ($prune_viewed * 86400);
092   
093                  $template->assign_vars(array(
094                      'S_PRUNED'        => true)
095                  );
096   
097                  $sql_forum = (sizeof($forum_id)) ? ' AND ' . $db->sql_in_set('forum_id', $forum_id) : '';
098   
099                  // Get a list of forum's or the data for the forum that we are pruning.
100                  $sql = 'SELECT forum_id, forum_name
101                      FROM ' . FORUMS_TABLE . '
102                      WHERE forum_type = ' . FORUM_POST . "
103                          $sql_forum
104                      ORDER BY left_id ASC";
105                  $result = $db->sql_query($sql);
106   
107                  if ($row = $db->sql_fetchrow($result))
108                  {
109                      $prune_ids = array();
110                      $p_result['topics'] = 0;
111                      $p_result['posts'] = 0;
112                      $log_data = '';
113              
114                      do
115                      {
116                          if (!$auth->acl_get('f_list', $row['forum_id']))
117                          {
118                              continue;
119                          }
120   
121                          if ($prune_all)
122                          {
123                              $p_result = prune($row['forum_id'], 'posted', time(), $prune_flags, false);
124                          }
125                          else
126                          {
127                              if ($prune_posted)
128                              {
129                                  $return = prune($row['forum_id'], 'posted', $prunedate_posted, $prune_flags, false);
130                                  $p_result['topics'] += $return['topics'];
131                                  $p_result['posts'] += $return['posts'];
132                              }
133              
134                              if ($prune_viewed)
135                              {
136                                  $return = prune($row['forum_id'], 'viewed', $prunedate_viewed, $prune_flags, false);
137                                  $p_result['topics'] += $return['topics'];
138                                  $p_result['posts'] += $return['posts'];
139                              }
140                          }
141   
142                          $prune_ids[] = $row['forum_id'];
143   
144                          $template->assign_block_vars('pruned', array(
145                              'FORUM_NAME'    => $row['forum_name'],
146                              'NUM_TOPICS'    => $p_result['topics'],
147                              'NUM_POSTS'        => $p_result['posts'])
148                          );
149          
150                          $log_data .= (($log_data != '') ? ', ' : '') . $row['forum_name'];
151                      }
152                      while ($row = $db->sql_fetchrow($result));
153          
154                      // Sync all pruned forums at once
155                      sync('forum', 'forum_id', $prune_ids, true, true);
156                      add_log('admin', 'LOG_PRUNE', $log_data);
157                  }
158                  $db->sql_freeresult($result);
159   
160                  return;
161              }
162              else
163              {
164                  confirm_box(false, $user->lang['PRUNE_FORUM_CONFIRM'], build_hidden_fields(array(
165                      'i'                => $id,
166                      'mode'            => $mode,
167                      'submit'        => 1,
168                      'all_forums'    => $all_forums,
169                      'f'                => $forum_id,
170   
171                      'prune_days'        => request_var('prune_days', 0),
172                      'prune_vieweddays'    => request_var('prune_vieweddays', 0),
173                      'prune_old_polls'    => request_var('prune_old_polls', 0),
174                      'prune_announce'    => request_var('prune_announce', 0),
175                      'prune_sticky'        => request_var('prune_sticky', 0),
176                  )));
177              }
178          }
179   
180          // If they haven't selected a forum for pruning yet then
181          // display a select box to use for pruning.
182          if (!sizeof($forum_id))
183          {
184              $template->assign_vars(array(
185                  'U_ACTION'            => $this->u_action,
186                  'S_SELECT_FORUM'    => true,
187                  'S_FORUM_OPTIONS'    => make_forum_select(false, false, false))
188              );
189          }
190          else
191          {
192              $sql = 'SELECT forum_id, forum_name
193                  FROM ' . FORUMS_TABLE . '
194                  WHERE ' . $db->sql_in_set('forum_id', $forum_id);
195              $result = $db->sql_query($sql);
196              $row = $db->sql_fetchrow($result);
197   
198              if (!$row)
199              {
200                  $db->sql_freeresult($result);
201                  trigger_error($user->lang['NO_FORUM'] . adm_back_link($this->u_action), E_USER_WARNING);
202              }
203   
204              $forum_list = $s_hidden_fields = '';
205              do
206              {
207                  $forum_list .= (($forum_list != '') ? ', ' : '') . '<b>' . $row['forum_name'] . '</b>';
208                  $s_hidden_fields .= '<input type="hidden" name="f[]" value="' . $row['forum_id'] . '" />';
209              }
210              while ($row = $db->sql_fetchrow($result));
211   
212              $db->sql_freeresult($result);
213   
214              $l_selected_forums = (sizeof($forum_id) == 1) ? 'SELECTED_FORUM' : 'SELECTED_FORUMS';
215   
216              $template->assign_vars(array(
217                  'L_SELECTED_FORUMS'        => $user->lang[$l_selected_forums],
218                  'U_ACTION'                => $this->u_action,
219                  'U_BACK'                => $this->u_action,
220                  'FORUM_LIST'            => $forum_list,
221                  'S_HIDDEN_FIELDS'        => $s_hidden_fields)
222              );
223          }
224      }
225   
226      /**
227      * Prune users
228      */
229      function prune_users($id, $mode)
230      {
231          global $db, $user, $auth, $template, $cache;
232          global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
233   
234          $user->add_lang('memberlist');
235   
236          $prune = (isset($_POST['prune'])) ? true : false;
237   
238          if ($prune)
239          {
240              $action = request_var('action', 'deactivate');
241              $deleteposts = request_var('deleteposts', 0);
242   
243              if (confirm_box(true))
244              {
245                  $user_ids = $usernames = array();
246                  $this->get_prune_users($user_ids, $usernames);
247   
248                  if (sizeof($user_ids))
249                  {
250                      if ($action == 'deactivate')
251                      {
252                          user_active_flip('deactivate', $user_ids);
253                          $l_log = 'LOG_PRUNE_USER_DEAC';
254                      }
255                      else if ($action == 'delete')
256                      {
257                          if ($deleteposts)
258                          {
259                              foreach ($user_ids as $user_id)
260                              {
261                                  user_delete('remove', $user_id);
262                              }
263                              
264                              $l_log = 'LOG_PRUNE_USER_DEL_DEL';
265                          }
266                          else
267                          {
268                              foreach ($user_ids as $user_id)
269                              {
270                                  user_delete('retain', $user_id, $usernames[$user_id]);
271                              }
272   
273                              $l_log = 'LOG_PRUNE_USER_DEL_ANON';
274                          }
275                      }
276   
277                      add_log('admin', $l_log, implode(', ', $usernames));
278                      $msg = $user->lang['USER_' . strtoupper($action) . '_SUCCESS'];
279                  }
280                  else
281                  {
282                      $msg = $user->lang['USER_PRUNE_FAILURE'];
283                  }
284   
285                  trigger_error($msg . adm_back_link($this->u_action));
286              }
287              else
288              {
289                  // We list the users which will be pruned...
290                  $user_ids = $usernames = array();
291                  $this->get_prune_users($user_ids, $usernames);
292   
293                  if (!sizeof($user_ids))
294                  {
295                      trigger_error($user->lang['USER_PRUNE_FAILURE'] . adm_back_link($this->u_action), E_USER_WARNING);
296                  }
297   
298                  // Assign to template
299                  foreach ($user_ids as $user_id)
300                  {
301                      $template->assign_block_vars('users', array(
302                          'USERNAME'            => $usernames[$user_id],
303                          'U_PROFILE'            => append_sid($phpbb_root_path . 'memberlist.' . $phpEx, 'mode=viewprofile&amp;u=' . $user_id),
304                          'U_USER_ADMIN'        => ($auth->acl_get('a_user')) ? append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=overview&amp;u=' . $user_id, true, $user->session_id) : '',
305                      ));
306                  }
307   
308                  $template->assign_vars(array(
309                      'S_DEACTIVATE'        => ($action == 'deactivate') ? true : false,
310                      'S_DELETE'            => ($action == 'delete') ? true : false,
311                  ));
312   
313                  confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
314                      'i'                => $id,
315                      'mode'            => $mode,
316                      'prune'            => 1,
317   
318                      'users'            => request_var('users', '', true),
319                      'username'        => request_var('username', '', true),
320                      'email'            => request_var('email', ''),
321                      'joined_select'    => request_var('joined_select', ''),
322                      'joined'        => request_var('joined', ''),
323                      'active_select'    => request_var('active_select', ''),
324                      'active'        => request_var('active', ''),
325                      'count_select'    => request_var('count_select', ''),
326                      'count'            => request_var('count', ''),
327                      'deleteposts'    => request_var('deleteposts', 0),
328   
329                      'action'        => request_var('action', ''),
330                  )), 'confirm_body_prune.html');
331              }
332          }
333   
334          $find_count = array('lt' => $user->lang['LESS_THAN'], 'eq' => $user->lang['EQUAL_TO'], 'gt' => $user->lang['MORE_THAN']);
335          $s_find_count = '';
336   
337          foreach ($find_count as $key => $value)
338          {
339              $selected = ($key == 'eq') ? ' selected="selected"' : '';
340              $s_find_count .= '<option value="' . $key . '"' . $selected . '>' . $value . '</option>';
341          }
342   
343          $find_time = array('lt' => $user->lang['BEFORE'], 'gt' => $user->lang['AFTER']);
344          $s_find_join_time = '';
345          foreach ($find_time as $key => $value)
346          {
347              $s_find_join_time .= '<option value="' . $key . '">' . $value . '</option>';
348          }
349          
350          $s_find_active_time = '';
351          foreach ($find_time as $key => $value)
352          {
353              $s_find_active_time .= '<option value="' . $key . '">' . $value . '</option>';
354          }
355   
356          $template->assign_vars(array(
357              'U_ACTION'            => $this->u_action,
358              'S_JOINED_OPTIONS'    => $s_find_join_time,
359              'S_ACTIVE_OPTIONS'    => $s_find_active_time,
360              'S_COUNT_OPTIONS'    => $s_find_count,
361              'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=acp_prune&amp;field=users'),
362          ));
363      }
364   
365      /**
366      * Get user_ids/usernames from those being pruned
367      */
368      function get_prune_users(&$user_ids, &$usernames)
369      {
370          global $user, $db;
371   
372          $users = request_var('users', '', true);
373          
374          if ($users)
375          {
376              $users = explode("\n", $users);
377              $where_sql = ' AND ' . $db->sql_in_set('username_clean', array_map('utf8_clean_string', $users));
378          }
379          else
380          {
381              $username = request_var('username', '', true);
382              $email = request_var('email', '');
383   
384              $joined_select = request_var('joined_select', 'lt');
385              $active_select = request_var('active_select', 'lt');
386              $count_select = request_var('count_select', 'eq');
387              $joined = request_var('joined', '');
388              $active = request_var('active', '');
389   
390              $active = ($active) ? explode('-', $active) : array();
391              $joined = ($joined) ? explode('-', $joined) : array();
392   
393              if ((sizeof($active) && sizeof($active) != 3) || (sizeof($joined) && sizeof($joined) != 3))
394              {
395                  trigger_error($user->lang['WRONG_ACTIVE_JOINED_DATE'] . adm_back_link($this->u_action), E_USER_WARNING);
396              }
397   
398              $count = request_var('count', '');
399   
400              $key_match = array('lt' => '<', 'gt' => '>', 'eq' => '=');
401              $sort_by_types = array('username', 'user_email', 'user_posts', 'user_regdate', 'user_lastvisit');
402   
403              $where_sql = '';
404              $where_sql .= ($username) ? ' AND username_clean ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($username))) : '';
405              $where_sql .= ($email) ? ' AND user_email ' . $db->sql_like_expression(str_replace('*', $db->any_char, $email)) . ' ' : '';
406              $where_sql .= (sizeof($joined)) ? " AND user_regdate " . $key_match[$joined_select] . ' ' . gmmktime(0, 0, 0, (int) $joined[1], (int) $joined[2], (int) $joined[0]) : '';
407              $where_sql .= ($count !== '') ? " AND user_posts " . $key_match[$count_select] . ' ' . (int) $count . ' ' : '';
408              $where_sql .= (sizeof($active)) ? " AND user_lastvisit " . $key_match[$active_select] . " " . gmmktime(0, 0, 0, (int) $active[1], (int) $active[2], (int) $active[0]) : '';
409          }
410   
411          // Protect the admin, do not prune if no options are given...
412          if (!$where_sql)
413          {
414              return;
415          }
416   
417          // Get bot ids
418          $sql = 'SELECT user_id
419              FROM ' . BOTS_TABLE;
420          $result = $db->sql_query($sql);
421   
422          $bot_ids = array();
423          while ($row = $db->sql_fetchrow($result))
424          {
425              $bot_ids[] = $row['user_id'];
426          }
427          $db->sql_freeresult($result);
428   
429          // Do not prune founder members
430          $sql = 'SELECT user_id, username
431              FROM ' . USERS_TABLE . '
432              WHERE user_id <> ' . ANONYMOUS . '
433                  AND user_type <> ' . USER_FOUNDER . "
434              $where_sql";
435          $result = $db->sql_query($sql);
436   
437          $where_sql = '';
438          $user_ids = $usernames = array();
439   
440          while ($row = $db->sql_fetchrow($result))
441          {
442              // Do not prune bots and the user currently pruning.
443              if ($row['user_id'] != $user->data['user_id'] && !in_array($row['user_id'], $bot_ids))
444              {
445                  $user_ids[] = $row['user_id'];
446                  $usernames[$row['user_id']] = $row['username'];
447              }
448          }
449          $db->sql_freeresult($result);
450      }
451  }
452   
453  ?>