%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
| Server IP : 14.207.165.8 / Your IP : 216.73.216.26 Web Server : Apache/2.4.18 (Ubuntu) System : Linux 246 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : root ( 0) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/thread-self/root/var/www/html/old/libraries/kunena/user/ |
Upload File : |
<?php
/**
* Kunena Component
* @package Kunena.Framework
* @subpackage User
*
* @copyright (C) 2008 - 2014 Kunena Team. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link http://www.kunena.org
**/
defined ( '_JEXEC' ) or die ();
KunenaUserHelper::initialize();
/**
* Class KunenaUserHelper
*/
abstract class KunenaUserHelper {
/**
* @var array|KunenaUser[]
*/
protected static $_instances = array ();
/**
* @var array|KunenaUser[]
*/
protected static $_instances_name = array ();
protected static $_online = null;
protected static $_lastid = null;
protected static $_total = null;
protected static $_topposters = null;
protected static $_me = null;
public static function initialize() {
$id = JFactory::getUser()->id;
self::$_me = self::$_instances [$id] = new KunenaUser ( $id );
}
/**
* Returns the global KunenaUser object, only creating it if it doesn't already exist.
*
* @param mixed $identifier The user to load - Can be an integer or string - If string, it is converted to ID automatically.
* @param bool $reload Reload user from database.
*
* @return KunenaUser
*/
public static function get($identifier = null, $reload = false) {
KUNENA_PROFILER ? KunenaProfiler::instance()->start('function '.__CLASS__.'::'.__FUNCTION__.'()') : null;
if ($identifier === null || $identifier === false) {
KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function '.__CLASS__.'::'.__FUNCTION__.'()') : null;
return self::$_me;
}
if ($identifier instanceof KunenaUser) {
KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function '.__CLASS__.'::'.__FUNCTION__.'()') : null;
return $identifier;
}
// Find the user id
if ($identifier instanceof JUser) {
$id = intval ( $identifier->id );
} else if (is_numeric ( $identifier )) {
$id = intval ( $identifier );
} else {
jimport ( 'joomla.user.helper' );
$id = intval ( JUserHelper::getUserId ( ( string ) $identifier ) );
}
// Always return fresh user if id is anonymous/not found
if ($id === 0) {
KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function '.__CLASS__.'::'.__FUNCTION__.'()') : null;
return new KunenaUser ( $id );
}
else if ($reload || empty ( self::$_instances [$id] )) {
self::$_instances [$id] = new KunenaUser ( $id );
}
KUNENA_PROFILER ? KunenaProfiler::instance()->stop('function '.__CLASS__.'::'.__FUNCTION__.'()') : null;
return self::$_instances [$id];
}
/**
* @param int $id
* @param string $name
*
* @return KunenaUser
*/
public static function getAuthor($id, $name) {
$id = (int) $id;
if ($id && !empty ( self::$_instances [$id] )) {
return self::$_instances [$id];
}
if (!empty ( self::$_instances_name [$name] )) {
return self::$_instances_name [$name];
}
$user = self::get($id);
if (!$user->exists()) {
$user->username = $user->name = $name;
}
self::$_instances_name [$name] = $user;
return $user;
}
/**
* @return KunenaUser
*/
public static function getMyself() {
return self::$_me;
}
/**
* @param array $userids
*
* @return array
*/
public static function loadUsers(array $userids = array()) {
// Make sure that userids are unique and that indexes are correct
$e_userids = array();
foreach($userids as $userid){
if (intval($userid) && empty ( self::$_instances [$userid] )) {
$e_userids[$userid] = $userid;
}
}
if (!empty($e_userids)) {
$userlist = implode ( ',', $e_userids );
$db = JFactory::getDBO ();
$query = "SELECT u.name, u.username, u.email, u.block as blocked, u.registerDate, u.lastvisitDate, ku.*, u.id AS userid
FROM #__users AS u
LEFT JOIN #__kunena_users AS ku ON u.id = ku.userid
WHERE u.id IN ({$userlist})";
$db->setQuery ( $query );
$results = $db->loadAssocList ();
KunenaError::checkDatabaseError ();
foreach ($results as $user) {
$instance = new KunenaUser(false);
$instance->setProperties($user);
$instance->exists(isset($user['posts']));
self::$_instances[$instance->userid] = $instance;
}
// Preload avatars if configured
$avatars = KunenaFactory::getAvatarIntegration();
$avatars->load($e_userids);
}
$list = array ();
foreach ($userids as $userid) {
if (isset(self::$_instances [$userid])) $list [$userid] = self::$_instances [$userid];
}
return $list;
}
/**
* @return int
*/
public static function getLastId() {
if (self::$_lastid === null) {
self::getTotalCount();
}
return (int) self::$_lastid;
}
/**
* @return int
*/
public static function getTotalCount() {
if (self::$_total === null) {
$db = JFactory::getDBO ();
$config = KunenaFactory::getConfig();
if ($config->userlist_count_users == '1' ) $where = '(block=0 OR activation="")';
elseif ($config->userlist_count_users == '2' ) $where = '(block=0 AND activation="")';
elseif ($config->userlist_count_users == '3' ) $where = 'block=0';
else $where = '1';
$db->setQuery ( "SELECT COUNT(*), MAX(id) FROM #__users WHERE {$where}" );
list (self::$_total, self::$_lastid) = $db->loadRow ();
KunenaError::checkDatabaseError();
}
return (int) self::$_total;
}
/**
* @param int $limit
*
* @return array
*/
public static function getTopPosters($limit=0) {
$limit = $limit ? $limit : KunenaFactory::getConfig()->popusercount;
if (count(self::$_topposters) < $limit) {
$db = JFactory::getDBO ();
$query = "SELECT u.id, ku.posts AS count
FROM #__kunena_users AS ku
INNER JOIN #__users AS u ON u.id=ku.userid
WHERE ku.posts>0
ORDER BY ku.posts DESC";
$db->setQuery ( $query, 0, $limit );
self::$_topposters = (array) $db->loadObjectList ();
KunenaError::checkDatabaseError();
}
return self::$_topposters;
}
/**
* @return array
*/
public static function getOnlineUsers()
{
if (self::$_online === null)
{
$app = JFactory::getApplication();
$config = KunenaFactory::getConfig();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('userid, MAX(time) AS time')
->from('#__session')
->where('client_id=0 AND userid>0')
->group('userid')
->order('time DESC');
if ($config->show_session_type == 2 && $config->show_session_starttime != 0)
{
// Calculate x minutes by using Kunena setting.
$time = JFactory::getDate()->toUnix() - $config->show_session_starttime;
$query->where('time > ' . $time);
}
elseif ($config->show_session_type > 0)
{
// Calculate Joomla session expiration point.
$time = JFactory::getDate()->toUnix() - ($app->getCfg('lifetime', 15) * 60);
$query->where('time > ' . $time);
}
$db->setQuery($query);
self::$_online = (array) $db->loadObjectList('userid');
KunenaError::checkDatabaseError();
}
return self::$_online;
}
/**
* @return array
*/
public static function getOnlineCount()
{
static $counts = null;
if ($counts === null)
{
$app = JFactory::getApplication();
$config = KunenaFactory::getConfig();
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('COUNT(*)')
->from('#__session')
->where('client_id=0 AND userid=0');
if ($config->show_session_type == 2 && $config->show_session_starttime != 0)
{
// Calculate x minutes by using Kunena setting.
$time = JFactory::getDate()->toUnix() - $config->show_session_starttime;
$query->where('time > ' . $time);
}
elseif ($config->show_session_type > 0)
{
// Calculate Joomla session expiration point.
$time = JFactory::getDate()->toUnix() - ($app->getCfg('lifetime', 15) * 60);
$query->where('time > ' . $time);
}
$db->setQuery($query);
$count = $db->loadResult();
KunenaError::checkDatabaseError();
$counts = array();
$counts['user'] = count(self::getOnlineUsers());
$counts['guest'] = $count;
}
return $counts;
}
/**
* @param mixed $user
* @param bool|string $yes
* @param string $no
*
* @return bool|string
*/
public static function isOnline($user, $yes = false, $no = 'offline') {
$user = self::get($user);
if (!$user->showOnline && !self::getMyself()->isModerator()) return $yes ? $no : false;
$online = false;
if (intval($user->userid) > 0) {
if (self::$_online === null) {
self::getOnlineUsers();
}
$online = isset(self::$_online [$user->userid]) ? (self::$_online [$user->userid]->time > time() - JFactory::getApplication()->getCfg ( 'lifetime', 15 ) * 60) : false;
}
if ($yes) return $online ? $yes : $no;
return $online;
}
public static function recount() {
$db = JFactory::getDBO ();
// If user has no user_topics, set posts into 0
$query ="UPDATE #__kunena_users AS u
LEFT JOIN #__kunena_user_topics AS ut ON ut.user_id=u.userid
SET u.posts = 0
WHERE ut.user_id IS NULL";
$db->setQuery($query);
$db->query ();
if (KunenaError::checkDatabaseError ())
return false;
$rows = $db->getAffectedRows ();
// Update user post count
$query = "INSERT INTO #__kunena_users (userid, posts)
SELECT user_id AS userid, SUM(posts) AS posts
FROM #__kunena_user_topics
GROUP BY user_id
ON DUPLICATE KEY UPDATE posts=VALUES(posts)";
$db->setQuery ($query);
$db->query ();
if (KunenaError::checkDatabaseError ())
return false;
$rows += $db->getAffectedRows ();
// Update banned state
// TODO: move out of here, it's slow
$query = "UPDATE #__kunena_users AS u
LEFT JOIN (
SELECT userid, MAX(expiration) AS banned FROM #__kunena_users_banned GROUP BY userid
) AS b ON u.userid=b.userid
SET u.banned=b.banned";
$db->setQuery ($query);
$db->query ();
if (KunenaError::checkDatabaseError ())
return false;
$rows += $db->getAffectedRows ();
return $rows;
}
}