#drupal #drupal-6 #drupal-modules
#drupal #drupal-6 #drupal-модули
Вопрос:
Существует ли функция API Drupal, которая принимает идентификатор пользователя и возвращает, зарегистрирован ли этот пользователь в данный момент?
т.е. есть ли такая функция, как user_is_logged_in($some_uid)
?
Ответ №1:
Вот функция, которую я позаимствовал / изменил из модуля advanced forum, чтобы проверить, подключен ли конкретный пользователь к сети. Он проверяет таблицу сеансов для пользователей в течение определенного интервала времени. Добавьте его в пользовательский модуль и вызывайте по мере необходимости:
function MODULENAME_check_user_online($uid) {
$interval = REQUEST_TIME - variable_get('user_block_seconds_online', 900);
$query = db_select("users", "u")->distinct()->fields("u", array("uid", "name"));
$s_alias = $query->join("sessions", "s", "u.uid = s.uid");
$query->addExpression("MAX({$s_alias}.timestamp)", "maxtime");
$query
->condition("{$s_alias}.timestamp", $interval, ">=")
->condition("{$s_alias}.uid", $uid, "=")
->groupBy("u.uid, u.name")
->orderBy("maxtime", "DESC");
$check_user_logged_in = $query->execute();
if ($account = $check_user_logged_in->fetchObject()) {
return TRUE;
}
return FALSE;
}
Ответ №2:
Нет, если вы хотите, вам придется написать его самостоятельно. Взгляните на таблицу сеансов в базе данных.
Ответ №3:
Проверьте API пользовательского модуля здесь:
http://api.drupal.org/api/drupal/modules—user—user.module/6
более конкретно
http://api.drupal.org/api/drupal/modules—user—user.module/function/user_is_logged_in/6
Комментарии:
1.
user_is_logged_in()
проверяет только глобального (текущего) пользователя. Я хотел бы проверить с помощьюuid
параметра as.