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  ?>