Тема навеяна пессимистическими настроениями в комментариях предыдущего сообщения "Форум: опытные, надежные пользователи" и является его продолжением. [spoiler]
Сделать несложно, упирается все в ресурсы и способ организации. Те инструменты, которые нам доступны сейчас, не позволят сделать это незаметно пользователю. Ждем новых событий в Форуме, может они облегчат задачу.
Т.е. надо на некие заслуги добавить того или иного пользователя в определённую группу (-ы). Итак, вот как у меня получилось реализовать данную задачу. Хочу сразу отметить, что это шаблон для любых Ваших будущих подобных решений.
<?
AddEventHandler("main", "OnAfterUserLogin", "OnAfterUserLoginHandler");
function OnAfterUserLoginHandler(&$fields)
{
global $USER;
if (!is_object($USER)) $USER = new CUser;
if (!CSite::InGroup(array(3))):
$diff = 24 * 60 * 60 ; // 24 hours
if(!class_exists('CUserOptions'))
include_once($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/classes/".$GLOBALS['DBType']."/favorites.php");
$save_time = CUserOptions::GetOption("custom", "memo_time");
if (!$save_time || ($save_time + $diff) <= time())
{
if (!CModule::IncludeModule("forum"))
return false;
$ar_user = CForumUser::GetByUSER_ID($USER->GetID());
if ( $ar_user["NUM_POSTS"] > 1000
|| $ar_user["NUM_POINTS"] > 200
|| MakeTimeStamp ($ar_user["DATE_REG"]) < AddToTimeStamp(array("YYYY" => "-1", time())))
CUser::SetUserGroup($USER->GetID(), array_merge($USER->GetUserGroupArray($USER->GetID()), array(3)));
CUserOptions::SetOption("custom", "memo_time", time());
}
endif;
}
?>
Теперь поясню какой код что делает, а также где Вы можете добавить свою логику.
AddEventHandler("main", "OnAfterUserLogin", "OnAfterUserLoginHandler");
function OnAfterUserLoginHandler(&$fields)
Все проверки будем делать после авторизации пользователя, это лучше чем выполнять проверки на каждом хите.
if (!CSite::InGroup(array(3))):
Убеждающемся, что пользователь ещё не получил "плюшку".
Или за 1000 сообщений на форуме, или за 200 голосов в его пользу или же если данный пользователь работает на сайте более года. Можно сделать так, что все сразу или некоторые из этих условий являются решающими. Можно перевести в группу не только за "форумные заслуги", но и за другие, всё делается довольно просто.
Далее мы переводим пользователя в группу, а также сдвигаем метку кеша:
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».