request['mode']) { $this->ajax_die('invalid mode (empty)'); } $html = ''; switch ($mode) { case 'birthday_week': $datastore->enqueue([ 'stats' ]); $stats = $datastore->get('stats'); $users = []; if ($stats['birthday_week_list']) { foreach ($stats['birthday_week_list'] as $week) { $users[] = profile_url($week) . ' (' . birthday_age(date('Y-m-d', strtotime('-1 year', strtotime($week['user_birthday'])))) . ')'; } $html = sprintf($lang['BIRTHDAY_WEEK'], $bb_cfg['birthday_check_day'], implode(', ', $users)); } else { $html = sprintf($lang['NOBIRTHDAY_WEEK'], $bb_cfg['birthday_check_day']); } break; case 'birthday_today': $datastore->enqueue([ 'stats' ]); $stats = $datastore->get('stats'); $users = []; if ($stats['birthday_today_list']) { foreach ($stats['birthday_today_list'] as $today) { $users[] = profile_url($today) . ' (' . birthday_age($today['user_birthday']) . ')'; } $html = $lang['BIRTHDAY_TODAY'] . implode(', ', $users); } else { $html = $lang['NOBIRTHDAY_TODAY']; } break; case 'get_forum_mods': $forum_id = (int)$this->request['forum_id']; $datastore->enqueue([ 'moderators' ]); $moderators = []; $mod = $datastore->get('moderators'); if (isset($mod['mod_users'][$forum_id])) { foreach ($mod['mod_users'][$forum_id] as $user_id) { $moderators[] = '' . $mod['name_users'][$user_id] . ''; } } if (isset($mod['mod_groups'][$forum_id])) { foreach ($mod['mod_groups'][$forum_id] as $group_id) { $moderators[] = '' . $mod['name_groups'][$group_id] . ''; } } $html = ': '; $html .= ($moderators) ? implode(', ', $moderators) : $lang['NONE']; unset($moderators, $mod); $datastore->rm('moderators'); break; case 'null_ratio': if (!$bb_cfg['ratio_null_enabled'] || !RATIO_ENABLED) { $this->ajax_die($lang['MODULE_OFF']); } if (empty($this->request['confirmed'])) { $this->prompt_for_confirm($lang['BT_NULL_RATIO_ALERT']); } $user_id = (int)$this->request['user_id']; if (!IS_ADMIN && $user_id != $userdata['user_id']) { $this->ajax_die($lang['NOT_AUTHORISED']); } $btu = get_bt_userdata($user_id); $ratio_nulled = (bool)$btu['ratio_nulled']; $user_ratio = get_bt_ratio($btu); if (($user_ratio === null) && !IS_ADMIN) { $this->ajax_die($lang['BT_NULL_RATIO_NONE']); } if ($ratio_nulled && !IS_ADMIN) { $this->ajax_die($lang['BT_NULL_RATIO_AGAIN']); } if (($user_ratio >= $bb_cfg['ratio_to_null']) && !IS_ADMIN) { $this->ajax_die(sprintf($lang['BT_NULL_RATIO_NOT_NEEDED'], $bb_cfg['ratio_to_null'])); } $ratio_nulled_sql = !IS_ADMIN ? ', ratio_nulled = 1' : ''; DB()->query("UPDATE " . BB_BT_USERS . " SET u_up_total = 0, u_down_total = 0, u_up_release = 0, u_up_bonus = 0 $ratio_nulled_sql WHERE user_id = " . $user_id); CACHE('bb_cache')->rm('btu_' . $user_id); $this->ajax_die($lang['BT_NULL_RATIO_SUCCESS']); break; case 'releaser_stats': if (IS_GUEST) { $this->ajax_die($lang['NEED_TO_LOGIN_FIRST']); } $user_id = (int)$this->request['user_id']; $sql = " SELECT COUNT(tor.poster_id) as total_releases, SUM(tor.size) as total_size, SUM(tor.complete_count) as total_complete, SUM(ad.download_count) as total_dl_count FROM " . BB_BT_TORRENTS . " tor LEFT JOIN " . BB_USERS . " u ON(u.user_id = tor.poster_id) LEFT JOIN " . BB_ATTACHMENTS_DESC . " ad ON(ad.attach_id = tor.attach_id) LEFT JOIN " . BB_BT_USERS . " ut ON(ut.user_id = tor.poster_id) WHERE u.user_id = $user_id GROUP BY tor.poster_id LIMIT 1 "; $total_releases_size = $total_releases = $total_releases_completed = $total_releases_downloaded = 0; if ($row = DB()->fetch_row($sql)) { $total_releases = $row['total_releases']; $total_releases_size = $row['total_size']; $total_releases_downloaded = $row['total_dl_count']; $total_releases_completed = $row['total_complete']; } $html = '[ ' . $lang['RELEASES'] . ': ' . $total_releases . ' | ' . $lang['RELEASER_STAT_SIZE'] . ' ' . humn_size($total_releases_size) . ' | ' . $lang['DOWNLOADED'] . ': ' . declension((int)$total_releases_downloaded, 'times') . ' ]'; break; case 'get_traf_stats': if (!RATIO_ENABLED) { $this->ajax_die($lang['MODULE_OFF']); } if (IS_GUEST) { $this->ajax_die($lang['NEED_TO_LOGIN_FIRST']); } $user_id = (int)$this->request['user_id']; $btu = get_bt_userdata($user_id); $profiledata = get_userdata($user_id); $speed_up = ($btu['speed_up']) ? humn_size($btu['speed_up']) . '/s' : '0 KB/s'; $speed_down = ($btu['speed_down']) ? humn_size($btu['speed_down']) . '/s' : '0 KB/s'; $user_ratio = ($btu['u_down_total'] > MIN_DL_FOR_RATIO) ? '' . get_bt_ratio($btu) . '' : $lang['IT_WILL_BE_DOWN'] . ' ' . humn_size(MIN_DL_FOR_RATIO) . ''; $html = ' ' . $lang['DOWNLOADED'] . ' ' . $lang['UPLOADED'] . ' ' . $lang['RELEASED'] . ' ' . $lang['BONUS'] . ''; $html .= $bb_cfg['seed_bonus_enabled'] ? '' . $lang['SEED_BONUS'] . '' : ''; $html .= ' ' . $lang['TOTAL_TRAF'] . ' ' . humn_size($btu['u_down_total']) . ' ' . humn_size($btu['u_up_total']) . ' ' . humn_size($btu['u_up_release']) . ' ' . humn_size($btu['u_up_bonus']) . ''; $html .= $bb_cfg['seed_bonus_enabled'] ? '' . $profiledata['user_points'] . '' : ''; $html .= ' ' . $lang['MAX_SPEED'] . ' ' . $lang['DL_DL_SPEED'] . ': ' . $speed_down . ' ' . $lang['DL_UL_SPEED'] . ': ' . $speed_up . ''; $html .= $bb_cfg['seed_bonus_enabled'] ? '' : ''; $html .= ''; $this->response['user_ratio'] = ' ' . $lang['USER_RATIO'] . ': ' . $user_ratio . ' '; break; default: $this->ajax_die('Invalid mode: ' . $mode); } $this->response['html'] = $html; $this->response['mode'] = $mode;