—————————————————
Название: Парковка аккаунта + запрет скачивания
Автор: Craken
Адаптировал под TPII: Gemini_13 <gemini_13@torba.su>
Описание: Мод добавляет возможность припарковать аккаунт на сайте в случае длительного отъезда. Если аккаунт припаркован, то во время чистки он не будет удален, но справедливости ради на аккаунт наложен запрет скачивания.
Сложность установки: Легкая
Время установки: ~ 5 минут
Адаптирован под версию TPII: R550
Файлы к редактированию:
— tracker.php
— viewforum.php
— attach_mod/displaying_torrent.php
— includes/cron/jobs/prune_inactive_users.php
— includes/ucp/usercp_register.php
— includes/ucp/usercp_viewprofile.php
— language/lang_russian/lang_main.php
— templates/default/usercp_register.tpl
— templates/default/usercp_viewprofile.tpl
Addon:
— Отключение возможности писать у припаркованных аккаунтов
— Отключение модуля ЛС у припаркованных аккаунтов
—————————————————
Копирование и выкладывание модификаций на сторонних ресурсах без указания ссылки запрещено.
# ---- [ SQL ] -------------------
ALTER TABLE `bb_users` ADD `user_park_profile` TINYINT(1) NOT NULL DEFAULT '0';
# ---- [ Открыть ] -------------------
tracker.php
# ---- [ Найти ] -------------------
'TOR_FROZEN' => (!IS_AM) ? isset($bb_cfg['tor_frozen'][$tor['tor_status']]) : '',
# ---- [ Заменить на ] -------------------
'TOR_FROZEN' => (!IS_AM) ? (isset($bb_cfg['tor_frozen'][$tor['tor_status']]) || $userdata['user_park_profile']) : '',
# ---- [ Открыть ] -------------------
viewforum.php
# ---- [ Найти ] -------------------
'TOR_FROZEN' => isset($topic['tor_status']) ? ((!IS_AM) ? isset($bb_cfg['tor_frozen'][$topic['tor_status']]) : '') : '',
# ---- [ Заменить на ] -------------------
'TOR_FROZEN' => isset($topic['tor_status']) ? ((!IS_AM) ? (isset($bb_cfg['tor_frozen'][$topic['tor_status']]) || $userdata['user_park_profile']) : '') : '',
# ---- [ Открыть ] -------------------
attach_mod/displaying_torrent.php
# ---- [ Найти ] -------------------
'TOR_FROZEN' => (!IS_AM) ? (isset($bb_cfg['tor_frozen'][$tor_info['tor_status']]) && !(isset($bb_cfg['tor_frozen_author_download'][$tor_info['tor_status']]) && $userdata['user_id'] == $tor_info['poster_id'])) ? true : '' : '',
# ---- [ Заменить на ] -------------------
'TOR_FROZEN' => (!IS_AM) ? (isset($bb_cfg['tor_frozen'][$tor_info['tor_status']]) && !(isset($bb_cfg['tor_frozen_author_download'][$tor_info['tor_status']]) && $userdata['user_id'] == $tor_info['poster_id']) || $userdata['user_park_profile']) ? true : '' : '',
# ---- [ Открыть ] -------------------
includes/cron/jobs/prune_inactive_users.php
# ---- [ Найти ] -------------------
if ($not_activated_days = intval($bb_cfg['user_not_activated_days_keep']))
{
$sql = "
SELECT user_id
FROM ". BB_USERS ."
WHERE user_active = 0
AND user_lastvisit = 0
AND user_regdate < ". (TIMENOW - 86400*$not_activated_days) ."
AND user_id NOT IN($excluded_users)
LIMIT $users_per_cycle
";
foreach (DB()->fetch_rowset($sql) as $row)
{
$not_activated_users[] = $row['user_id'];
}
}
if ($not_active_days = intval($bb_cfg['user_not_active_days_keep']))
{
$sql = "
SELECT user_id
FROM ". BB_USERS ."
WHERE user_active = 1
AND user_posts = 0
AND user_lastvisit < ". (TIMENOW - 86400*$not_active_days) ."
AND user_id NOT IN($excluded_users)
LIMIT $users_per_cycle
";
foreach (DB()->fetch_rowset($sql) as $row)
{
$not_active_users[] = $row['user_id'];
}
}
# ---- [ Заменить на ] -------------------
if ($not_activated_days = intval($bb_cfg['user_not_activated_days_keep']))
{
$sql = "
SELECT user_id
FROM ". BB_USERS ."
WHERE user_active = 0
AND user_park_profile = 0
AND user_lastvisit = 0
AND user_regdate < ". (TIMENOW - 86400*$not_activated_days) ."
AND user_id NOT IN($excluded_users)
LIMIT $users_per_cycle
";
foreach (DB()->fetch_rowset($sql) as $row)
{
$not_activated_users[] = $row['user_id'];
}
}
if ($not_active_days = intval($bb_cfg['user_not_active_days_keep']))
{
$sql = "
SELECT user_id
FROM ". BB_USERS ."
WHERE user_active = 1
AND user_park_profile = 0
AND user_posts = 0
AND user_lastvisit < ". (TIMENOW - 86400*$not_active_days) ."
AND user_id NOT IN($excluded_users)
LIMIT $users_per_cycle
";
foreach (DB()->fetch_rowset($sql) as $row)
{
$not_active_users[] = $row['user_id'];
}
}
# ---- [ Открыть ] -------------------
includes/ucp/usercp_register.php
# ---- [ Найти ] -------------------
$pr_data = array(
'user_id' => GUEST_UID,
'username' => '',
'user_password' => '',
'user_email' => '',
# ---- [ Вставить после ] -------------------
'user_park_profile'=> 0,
# ---- [ Найти ] -------------------
// field => can_edit
$profile_fields = array(
'user_active' => IS_ADMIN,
'username' => (IS_ADMIN || $bb_cfg['allow_namechange']),
'user_password' => true,
'user_email' => true, // должен быть после user_password
'user_lang' => true,
# ---- [ Вставить после ] -------------------
'user_park_profile'=> true,
# ---- [ Найти ] -------------------
/**
* Язык (edit, reg)
*/
case 'user_lang':
$user_lang = isset($_POST['user_lang']) ? (string) $_POST['user_lang'] : $pr_data['user_lang'];
if ($submit && ($user_lang != $pr_data['user_lang'] || $mode == 'register'))
{
$pr_data['user_lang'] = $user_lang;
$db_data['user_lang'] = $user_lang;
}
break;
# ---- [ Вставить после ] -------------------
/**
* Парковка аккаунта (edit)
*/
case 'user_park_profile':
$user_park_profile = isset($_POST['user_park_profile']) ? (int) $_POST['user_park_profile'] : $pr_data['user_park_profile'];
if ($submit && ($user_park_profile != $pr_data['user_park_profile'] || $mode == 'register'))
{
$pr_data['user_park_profile'] = $user_park_profile;
$db_data['user_park_profile'] = $user_park_profile;
}
break;
# ---- [ Найти ] -------------------
'USER_TIMEZONE' => $pr_data['user_timezone'],
# ---- [ Вставить после ] -------------------
'PARK_PROFILE' => $pr_data['user_park_profile'],
# ---- [ Открыть ] -------------------
includes/ucp/usercp_viewprofile.php
# ---- [ Найти ] -------------------
if ($user_rank = $profiledata['user_rank'] AND isset($ranks[$user_rank]))
{
$rank_image = ($ranks[$user_rank]['rank_image']) ? '<img src="'. $ranks[$user_rank]['rank_image'] .'" alt="" title="" border="0" />' : '';
$poster_rank = $ranks[$user_rank]['rank_title'];
}
# ---- [ Вставить после ] -------------------
$park_status = $profiledata['user_park_profile'] ? $lang['YES'] : $lang['NO'];
$template->assign_vars(array(
'STATUS_PARK' => $park_status,
));
# ---- [ Открыть ] -------------------
language/lang_russian/lang_main.php
# ---- [ Вставить в конец ] -------------------
// Парковка аккаунта
$lang['PARK_CONTROL'] ='Парковка аккаунта';
$lang['PARK_WARNING'] ='Припарковав аккаунт Вы не сможете скачивать!';
$lang['PARK_PROFILE_STATUS'] ='Аккаунт припаркован';
$lang['PARK_PROFILE_STATUS_WHOTE'] ='<h5>Что такое "Парковка Аккаунта"?</h5>';
# ---- [ Открыть ] -------------------
templates/default/usercp_register.tpl
# ---- [ Найти ] -------------------
<!-- IF not ADM_EDIT -->
<tr>
<td>{L_AUTOLOGIN}:</td>
<td><a href="{U_RESET_AUTOLOGIN}">{L_RESET_AUTOLOGIN}</a><h6>{L_RESET_AUTOLOGIN_EXPL}</h6></td>
</tr>
<!-- ENDIF -->
# ---- [ Вставить после ] -------------------
<tr>
<td>{L_PARK_CONTROL}:
<h6><a target="blank" href="viewtopic.php?t=123">{L_PARK_PROFILE_STATUS_WHOTE}</a></h6></td>
<td>
<label><input type="radio" name="user_park_profile" value="1" <!-- IF PARK_PROFILE -->checked="checked"<!-- ENDIF --> />{L_YES}</label>
<label><input type="radio" name="user_park_profile" value="0" <!-- IF not PARK_PROFILE -->checked="checked"<!-- ENDIF --> />{L_NO}</label>
<h6>{L_PARK_WARNING}</h6>
</td>
</tr>
# ---- [ Открыть ] -------------------
templates/default/usercp_viewprofile.tpl
# ---- [ Найти ] -------------------
<p class="small mrg_4">
<!-- IF IS_ADMIN -->
{RANK_SELECT}
<script type="text/javascript">
$('#rank-sel').bind('change', function(){ ajax.change_user_rank( {PROFILE_USER_ID}, $(this).val() ); });
</script>
<div id="rank-msg" class="mrg_6"></div>
<!-- ELSE IF POSTER_RANK -->
{POSTER_RANK}
<!-- ENDIF -->
</p>
# ---- [ Вставить до ] -------------------
<h4 class="cat border bw_TB">{L_PARK_PROFILE_STATUS}: {STATUS_PARK}</h4>
# ---- [ Конец ] -------------------


