6 * @copyright (c) 2006 phpBB Group
7 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
14 if (!defined('IN_PHPBB'))
27 function __construct(&$p_master)
29 $this->p_master
= &$p_master;
32 function main($id, $mode)
34 include(PHPBB_ROOT_PATH
. 'includes/functions_user.' . PHP_EXT
);
36 phpbb
::$user->add_lang('memberlist');
38 $action = request_var('action', '');
39 $mark = request_var('mark', array(0));
40 $start = request_var('start', 0);
41 $submit = phpbb_request
::is_set_post('submit');
44 $sort_days = request_var('st', 0);
45 $sort_key = request_var('sk', 'i');
46 $sort_dir = request_var('sd', 'd');
48 $form_key = 'acp_inactive';
49 add_form_key($form_key);
51 if ($submit && sizeof($mark))
53 if ($action !== 'delete' && !check_form_key($form_key))
55 trigger_error(phpbb
::$user->lang
['FORM_INVALID'] . adm_back_link($this->u_action
), E_USER_WARNING
);
63 $sql = 'SELECT user_id, username
64 FROM ' . USERS_TABLE
. '
65 WHERE ' . phpbb
::$db->sql_in_set('user_id', $mark);
66 $result = phpbb
::$db->sql_query($sql);
68 $user_affected = array();
69 while ($row = phpbb
::$db->sql_fetchrow($result))
71 $user_affected[$row['user_id']] = $row['username'];
73 phpbb
::$db->sql_freeresult($result);
75 if ($action == 'activate')
77 if (phpbb
::$config['require_activation'] == USER_ACTIVATION_ADMIN
)
79 // Get those 'being activated'...
80 $sql = 'SELECT user_id, username, user_email, user_lang
81 FROM ' . USERS_TABLE
. '
82 WHERE ' . phpbb
::$db->sql_in_set('user_id', $mark) . '
83 AND user_type = ' . phpbb
::USER_INACTIVE
;
84 $result = phpbb
::$db->sql_query($sql);
86 $inactive_users = array();
87 while ($row = phpbb
::$db->sql_fetchrow($result))
89 $inactive_users[] = $row;
91 phpbb
::$db->sql_freeresult($result);
94 user_active_flip('activate', $mark);
96 if (phpbb
::$config['require_activation'] == USER_ACTIVATION_ADMIN
&& !empty($inactive_users))
98 include_once(PHPBB_ROOT_PATH
. 'includes/functions_messenger.' . PHP_EXT
);
100 $messenger = new messenger();
102 foreach ($inactive_users as $row)
104 $messenger->template('admin_welcome_activated', $row['user_lang']);
106 $messenger->to($row['user_email'], $row['username']);
108 $messenger->headers('X-AntiAbuse: Board servername - ' . phpbb
::$config['server_name']);
109 $messenger->headers('X-AntiAbuse: User_id - ' . phpbb
::$user->data
['user_id']);
110 $messenger->headers('X-AntiAbuse: Username - ' . phpbb
::$user->data
['username']);
111 $messenger->headers('X-AntiAbuse: User IP - ' . phpbb
::$user->ip
);
113 $messenger->assign_vars(array(
114 'USERNAME' => htmlspecialchars_decode($row['username']))
117 $messenger->send(NOTIFY_EMAIL
);
120 $messenger->save_queue();
123 else if ($action == 'delete')
125 if (confirm_box(true))
127 if (!phpbb
::$acl->acl_get('a_userdel'))
129 trigger_error(phpbb
::$user->lang
['NO_AUTH_OPERATION'] . adm_back_link($this->u_action
), E_USER_WARNING
);
132 foreach ($mark as $user_id)
134 user_delete('retain', $user_id, $user_affected[$user_id]);
137 add_log('admin', 'LOG_INACTIVE_' . strtoupper($action), implode(', ', $user_affected));
141 $s_hidden_fields = array(
148 confirm_box(false, phpbb
::$user->lang
['CONFIRM_OPERATION'], build_hidden_fields($s_hidden_fields));
155 if (empty(phpbb
::$config['email_enable']))
157 trigger_error(phpbb
::$user->lang
['EMAIL_DISABLED'] . adm_back_link($this->u_action
), E_USER_WARNING
);
160 $sql = 'SELECT user_id, username, user_email, user_lang, user_jabber, user_notify_type, user_regdate, user_actkey
161 FROM ' . USERS_TABLE
. '
162 WHERE ' . phpbb
::$db->sql_in_set('user_id', $mark) . '
163 AND user_inactive_reason';
165 $sql .= (phpbb
::$config['require_activation'] == USER_ACTIVATION_ADMIN
) ?
' = ' . INACTIVE_REMIND
: ' <> ' . INACTIVE_MANUAL
;
167 $result = phpbb
::$db->sql_query($sql);
169 if ($row = phpbb
::$db->sql_fetchrow($result))
172 include_once(PHPBB_ROOT_PATH
. 'includes/functions_messenger.' . PHP_EXT
);
174 $messenger = new messenger();
175 $usernames = array();
179 $messenger->template('user_remind_inactive', $row['user_lang']);
181 $messenger->to($row['user_email'], $row['username']);
182 $messenger->im($row['user_jabber'], $row['username']);
184 $messenger->headers('X-AntiAbuse: Board servername - ' . phpbb
::$config['server_name']);
185 $messenger->headers('X-AntiAbuse: User_id - ' . phpbb
::$user->data
['user_id']);
186 $messenger->headers('X-AntiAbuse: Username - ' . phpbb
::$user->data
['username']);
187 $messenger->headers('X-AntiAbuse: User IP - ' . phpbb
::$user->ip
);
189 $messenger->assign_vars(array(
190 'USERNAME' => htmlspecialchars_decode($row['username']),
191 'REGISTER_DATE' => phpbb
::$user->format_date($row['user_regdate'], false, true),
192 'U_ACTIVATE' => generate_board_url() . '/ucp.' . PHP_EXT
. '?mode=activate&u=' . $row['user_id'] . '&k=' . $row['user_actkey'])
195 $messenger->send($row['user_notify_type']);
197 $usernames[] = $row['username'];
199 while ($row = phpbb
::$db->sql_fetchrow($result));
201 $messenger->save_queue();
203 add_log('admin', 'LOG_INACTIVE_REMIND', implode(', ', $usernames));
206 phpbb
::$db->sql_freeresult($result);
213 $limit_days = array(0 => phpbb
::$user->lang
['ALL_ENTRIES'], 1 => phpbb
::$user->lang
['1_DAY'], 7 => phpbb
::$user->lang
['7_DAYS'], 14 => phpbb
::$user->lang
['2_WEEKS'], 30 => phpbb
::$user->lang
['1_MONTH'], 90 => phpbb
::$user->lang
['3_MONTHS'], 180 => phpbb
::$user->lang
['6_MONTHS'], 365 => phpbb
::$user->lang
['1_YEAR']);
214 $sort_by_text = array('i' => phpbb
::$user->lang
['SORT_INACTIVE'], 'j' => phpbb
::$user->lang
['SORT_REG_DATE'], 'l' => phpbb
::$user->lang
['SORT_LAST_VISIT'], 'r' => phpbb
::$user->lang
['SORT_REASON'], 'u' => phpbb
::$user->lang
['SORT_USERNAME']);
215 $sort_by_sql = array('i' => 'user_inactive_time', 'j' => 'user_regdate', 'l' => 'user_lastvisit', 'r' => 'user_inactive_reason', 'u' => 'username_clean');
217 $s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
218 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);
220 // Define where and sort sql for use in displaying logs
221 $sql_where = ($sort_days) ?
(time() - ($sort_days * 86400)) : 0;
222 $sql_sort = $sort_by_sql[$sort_key] . ' ' . (($sort_dir == 'd') ?
'DESC' : 'ASC');
227 $start = view_inactive_users($inactive, $inactive_count, phpbb
::$config['topics_per_page'], $start, $sql_where, $sql_sort);
229 foreach ($inactive as $row)
231 phpbb
::$template->assign_block_vars('inactive', array(
232 'INACTIVE_DATE' => phpbb
::$user->format_date($row['user_inactive_time']),
233 'JOINED' => phpbb
::$user->format_date($row['user_regdate']),
234 'LAST_VISIT' => (!$row['user_lastvisit']) ?
' - ' : phpbb
::$user->format_date($row['user_lastvisit']),
235 'REASON' => $row['inactive_reason'],
236 'USER_ID' => $row['user_id'],
237 'USERNAME' => $row['username'],
238 'U_USER_ADMIN' => append_sid(PHPBB_ADMIN_PATH
. 'index.' . PHP_EXT
, "i=users&mode=overview&u={$row['user_id']}"),
242 $option_ary = array('activate' => 'ACTIVATE', 'delete' => 'DELETE');
243 if (phpbb
::$config['email_enable'])
245 $option_ary +
= array('remind' => 'REMIND');
248 phpbb
::$template->assign_vars(array(
249 'S_INACTIVE_USERS' => true,
250 'S_INACTIVE_OPTIONS' => build_select($option_ary),
252 'S_LIMIT_DAYS' => $s_limit_days,
253 'S_SORT_KEY' => $s_sort_key,
254 'S_SORT_DIR' => $s_sort_dir,
255 'S_ON_PAGE' => on_page($inactive_count, phpbb
::$config['topics_per_page'], $start),
256 'PAGINATION' => generate_pagination($this->u_action
. "&$u_sort_param", $inactive_count, phpbb
::$config['topics_per_page'], $start, true),
258 'U_ACTION' => $this->u_action
. '&start=' . $start,
261 $this->tpl_name
= 'acp_inactive';
262 $this->page_title
= 'ACP_INACTIVE_USERS';