[ Index ]

PHP Cross Reference of phpBB-3.2.8-deutsch

title

Body

[close]

/includes/acp/ -> acp_inactive.php (source)

   1  <?php
   2  /**
   3  *
   4  * This file is part of the phpBB Forum Software package.
   5  *
   6  * @copyright (c) phpBB Limited <https://www.phpbb.com>
   7  * @license GNU General Public License, version 2 (GPL-2.0)
   8  *
   9  * For full copyright and license information, please see
  10  * the docs/CREDITS.txt file.
  11  *
  12  */
  13  
  14  /**
  15  * @ignore
  16  */
  17  if (!defined('IN_PHPBB'))
  18  {
  19      exit;
  20  }
  21  
  22  class acp_inactive
  23  {
  24      var $u_action;
  25      var $p_master;
  26  
  27  	function __construct($p_master)
  28      {
  29          $this->p_master = $p_master;
  30      }
  31  
  32  	function main($id, $mode)
  33      {
  34          global $config, $db, $user, $auth, $template, $phpbb_container, $phpbb_log, $request;
  35          global $phpbb_root_path, $phpbb_admin_path, $phpEx;
  36  
  37          if (!function_exists('user_active_flip'))
  38          {
  39              include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
  40          }
  41  
  42          $user->add_lang('memberlist');
  43  
  44          $action = $request->variable('action', '');
  45          $mark    = (isset($_REQUEST['mark'])) ? $request->variable('mark', array(0)) : array();
  46          $start    = $request->variable('start', 0);
  47          $submit = isset($_POST['submit']);
  48  
  49          // Sort keys
  50          $sort_days    = $request->variable('st', 0);
  51          $sort_key    = $request->variable('sk', 'i');
  52          $sort_dir    = $request->variable('sd', 'd');
  53  
  54          $form_key = 'acp_inactive';
  55          add_form_key($form_key);
  56  
  57          /* @var $pagination \phpbb\pagination */
  58          $pagination = $phpbb_container->get('pagination');
  59  
  60          // We build the sort key and per page settings here, because they may be needed later
  61  
  62          // Number of entries to display
  63          $per_page = $request->variable('users_per_page', (int) $config['topics_per_page']);
  64  
  65          // Sorting
  66          $limit_days = array(0 => $user->lang['ALL_ENTRIES'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);
  67          $sort_by_text = array('i' => $user->lang['SORT_INACTIVE'], 'j' => $user->lang['SORT_REG_DATE'], 'l' => $user->lang['SORT_LAST_VISIT'], 'd' => $user->lang['SORT_LAST_REMINDER'], 'r' => $user->lang['SORT_REASON'], 'u' => $user->lang['SORT_USERNAME'], 'p' => $user->lang['SORT_POSTS'], 'e' => $user->lang['SORT_REMINDER']);
  68          $sort_by_sql = array('i' => 'user_inactive_time', 'j' => 'user_regdate', 'l' => 'user_lastvisit', 'd' => 'user_reminded_time', 'r' => 'user_inactive_reason', 'u' => 'username_clean', 'p' => 'user_posts', 'e' => 'user_reminded');
  69  
  70          $s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
  71          gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
  72  
  73          if ($submit && count($mark))
  74          {
  75              if ($action !== 'delete' && !check_form_key($form_key))
  76              {
  77                  trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);
  78              }
  79  
  80              switch ($action)
  81              {
  82                  case 'activate':
  83                  case 'delete':
  84  
  85                      $sql = 'SELECT user_id, username
  86                          FROM ' . USERS_TABLE . '
  87                          WHERE ' . $db->sql_in_set('user_id', $mark);
  88                      $result = $db->sql_query($sql);
  89  
  90                      $user_affected = array();
  91                      while ($row = $db->sql_fetchrow($result))
  92                      {
  93                          $user_affected[$row['user_id']] = $row['username'];
  94                      }
  95                      $db->sql_freeresult($result);
  96  
  97                      if ($action == 'activate')
  98                      {
  99                          // Get those 'being activated'...
 100                          $sql = 'SELECT user_id, username' . (($config['require_activation'] == USER_ACTIVATION_ADMIN) ? ', user_email, user_lang' : '') . '
 101                              FROM ' . USERS_TABLE . '
 102                              WHERE ' . $db->sql_in_set('user_id', $mark) . '
 103                                  AND user_type = ' . USER_INACTIVE;
 104                          $result = $db->sql_query($sql);
 105  
 106                          $inactive_users = array();
 107                          while ($row = $db->sql_fetchrow($result))
 108                          {
 109                              $inactive_users[] = $row;
 110                          }
 111                          $db->sql_freeresult($result);
 112  
 113                          user_active_flip('activate', $mark);
 114  
 115                          if ($config['require_activation'] == USER_ACTIVATION_ADMIN && !empty($inactive_users))
 116                          {
 117                              if (!class_exists('messenger'))
 118                              {
 119                                  include($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
 120                              }
 121  
 122                              $messenger = new messenger(false);
 123  
 124                              foreach ($inactive_users as $row)
 125                              {
 126                                  $messenger->template('admin_welcome_activated', $row['user_lang']);
 127  
 128                                  $messenger->set_addresses($row);
 129  
 130                                  $messenger->anti_abuse_headers($config, $user);
 131  
 132                                  $messenger->assign_vars(array(
 133                                      'USERNAME'    => htmlspecialchars_decode($row['username']))
 134                                  );
 135  
 136                                  $messenger->send(NOTIFY_EMAIL);
 137                              }
 138  
 139                              $messenger->save_queue();
 140                          }
 141  
 142                          if (!empty($inactive_users))
 143                          {
 144                              foreach ($inactive_users as $row)
 145                              {
 146                                  $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_USER_ACTIVE', false, array($row['username']));
 147                                  $phpbb_log->add('user', $user->data['user_id'], $user->ip, 'LOG_USER_ACTIVE_USER', false, array(
 148                                      'reportee_id' => $row['user_id']
 149                                  ));
 150                              }
 151  
 152                              trigger_error(sprintf($user->lang['LOG_INACTIVE_ACTIVATE'], implode($user->lang['COMMA_SEPARATOR'], $user_affected) . ' ' . adm_back_link($this->u_action)));
 153                          }
 154  
 155                          // For activate we really need to redirect, else a refresh can result in users being deactivated again
 156                          $u_action = $this->u_action . "&amp;$u_sort_param&amp;start=$start";
 157                          $u_action .= ($per_page != $config['topics_per_page']) ? "&amp;users_per_page=$per_page" : '';
 158  
 159                          redirect($u_action);
 160                      }
 161                      else if ($action == 'delete')
 162                      {
 163                          if (confirm_box(true))
 164                          {
 165                              if (!$auth->acl_get('a_userdel'))
 166                              {
 167                                  send_status_line(403, 'Forbidden');
 168                                  trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING);
 169                              }
 170  
 171                              user_delete('retain', $mark, true);
 172  
 173                              $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_INACTIVE_' . strtoupper($action), false, array(implode(', ', $user_affected)));
 174  
 175                              trigger_error(sprintf($user->lang['LOG_INACTIVE_DELETE'], implode($user->lang['COMMA_SEPARATOR'], $user_affected) . ' ' . adm_back_link($this->u_action)));
 176                          }
 177                          else
 178                          {
 179                              $s_hidden_fields = array(
 180                                  'mode'            => $mode,
 181                                  'action'        => $action,
 182                                  'mark'            => $mark,
 183                                  'submit'        => 1,
 184                                  'start'            => $start,
 185                              );
 186                              confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields($s_hidden_fields));
 187                          }
 188                      }
 189  
 190                  break;
 191  
 192                  case 'remind':
 193                      if (empty($config['email_enable']))
 194                      {
 195                          trigger_error($user->lang['EMAIL_DISABLED'] . adm_back_link($this->u_action), E_USER_WARNING);
 196                      }
 197  
 198                      $sql = 'SELECT user_id, username, user_email, user_lang, user_jabber, user_notify_type, user_regdate, user_actkey
 199                          FROM ' . USERS_TABLE . '
 200                          WHERE ' . $db->sql_in_set('user_id', $mark) . '
 201                              AND user_inactive_reason';
 202  
 203                      $sql .= ($config['require_activation'] == USER_ACTIVATION_ADMIN) ? ' = ' . INACTIVE_REMIND : ' <> ' . INACTIVE_MANUAL;
 204  
 205                      $result = $db->sql_query($sql);
 206  
 207                      if ($row = $db->sql_fetchrow($result))
 208                      {
 209                          // Send the messages
 210                          if (!class_exists('messenger'))
 211                          {
 212                              include($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
 213                          }
 214  
 215                          $messenger = new messenger();
 216                          $usernames = $user_ids = array();
 217  
 218                          do
 219                          {
 220                              $messenger->template('user_remind_inactive', $row['user_lang']);
 221  
 222                              $messenger->set_addresses($row);
 223  
 224                              $messenger->anti_abuse_headers($config, $user);
 225  
 226                              $messenger->assign_vars(array(
 227                                  'USERNAME'        => htmlspecialchars_decode($row['username']),
 228                                  'REGISTER_DATE'    => $user->format_date($row['user_regdate'], false, true),
 229                                  'U_ACTIVATE'    => generate_board_url() . "/ucp.$phpEx?mode=activate&u=" . $row['user_id'] . '&k=' . $row['user_actkey'])
 230                              );
 231  
 232                              $messenger->send($row['user_notify_type']);
 233  
 234                              $usernames[] = $row['username'];
 235                              $user_ids[] = (int) $row['user_id'];
 236                          }
 237                          while ($row = $db->sql_fetchrow($result));
 238  
 239                          $messenger->save_queue();
 240  
 241                          // Add the remind state to the database
 242                          $sql = 'UPDATE ' . USERS_TABLE . '
 243                              SET user_reminded = user_reminded + 1,
 244                                  user_reminded_time = ' . time() . '
 245                              WHERE ' . $db->sql_in_set('user_id', $user_ids);
 246                          $db->sql_query($sql);
 247  
 248                          $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_INACTIVE_REMIND', false, array(implode(', ', $usernames)));
 249  
 250                          trigger_error(sprintf($user->lang['LOG_INACTIVE_REMIND'], implode($user->lang['COMMA_SEPARATOR'], $usernames) . ' ' . adm_back_link($this->u_action)));
 251                      }
 252                      $db->sql_freeresult($result);
 253  
 254                      // For remind we really need to redirect, else a refresh can result in more than one reminder
 255                      $u_action = $this->u_action . "&amp;$u_sort_param&amp;start=$start";
 256                      $u_action .= ($per_page != $config['topics_per_page']) ? "&amp;users_per_page=$per_page" : '';
 257  
 258                      redirect($u_action);
 259  
 260                  break;
 261              }
 262          }
 263  
 264          // Define where and sort sql for use in displaying logs
 265          $sql_where = ($sort_days) ? (time() - ($sort_days * 86400)) : 0;
 266          $sql_sort = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ? 'DESC' : 'ASC');
 267  
 268          $inactive = array();
 269          $inactive_count = 0;
 270  
 271          $start = view_inactive_users($inactive, $inactive_count, $per_page, $start, $sql_where, $sql_sort);
 272  
 273          foreach ($inactive as $row)
 274          {
 275              $template->assign_block_vars('inactive', array(
 276                  'INACTIVE_DATE'    => $user->format_date($row['user_inactive_time']),
 277                  'REMINDED_DATE'    => $user->format_date($row['user_reminded_time']),
 278                  'JOINED'        => $user->format_date($row['user_regdate']),
 279                  'LAST_VISIT'    => (!$row['user_lastvisit']) ? ' - ' : $user->format_date($row['user_lastvisit']),
 280  
 281                  'REASON'        => $row['inactive_reason'],
 282                  'USER_ID'        => $row['user_id'],
 283                  'POSTS'            => ($row['user_posts']) ? $row['user_posts'] : 0,
 284                  'REMINDED'        => $row['user_reminded'],
 285  
 286                  'REMINDED_EXPLAIN'    => $user->lang('USER_LAST_REMINDED', (int) $row['user_reminded'], $user->format_date($row['user_reminded_time'])),
 287  
 288                  'USERNAME_FULL'        => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour'], false, append_sid("{$phpbb_admin_path}index.$phpEx", 'i=users&amp;mode=overview&amp;redirect=acp_inactive')),
 289                  'USERNAME'            => get_username_string('username', $row['user_id'], $row['username'], $row['user_colour']),
 290                  'USER_COLOR'        => get_username_string('colour', $row['user_id'], $row['username'], $row['user_colour']),
 291                  'USER_EMAIL'        => $row['user_email'],
 292  
 293                  'U_USER_ADMIN'    => append_sid("{$phpbb_admin_path}index.$phpEx", "i=users&amp;mode=overview&amp;u={$row['user_id']}"),
 294                  'U_SEARCH_USER'    => ($auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", "author_id={$row['user_id']}&amp;sr=posts") : '',
 295              ));
 296          }
 297  
 298          $option_ary = array('activate' => 'ACTIVATE', 'delete' => 'DELETE');
 299          if ($config['email_enable'])
 300          {
 301              $option_ary += array('remind' => 'REMIND');
 302          }
 303  
 304          $base_url = $this->u_action . "&amp;$u_sort_param&amp;users_per_page=$per_page";
 305          $pagination->generate_template_pagination($base_url, 'pagination', 'start', $inactive_count, $per_page, $start);
 306  
 307          $template->assign_vars(array(
 308              'S_INACTIVE_USERS'        => true,
 309              'S_INACTIVE_OPTIONS'    => build_select($option_ary),
 310  
 311              'S_LIMIT_DAYS'    => $s_limit_days,
 312              'S_SORT_KEY'    => $s_sort_key,
 313              'S_SORT_DIR'    => $s_sort_dir,
 314              'USERS_PER_PAGE'    => $per_page,
 315  
 316              'U_ACTION'        => $this->u_action . "&amp;$u_sort_param&amp;users_per_page=$per_page&amp;start=$start",
 317          ));
 318  
 319          $this->tpl_name = 'acp_inactive';
 320          $this->page_title = 'ACP_INACTIVE_USERS';
 321      }
 322  }


Generated: Sat Oct 26 11:28:42 2019 Cross-referenced by PHPXref 0.7.1