× Support pour la version 2.0.0

Question Utilisateurs actuellement en ligne ?

Plus d'informations
20 Jan 2013 15:01 #13 par failrOn
J'ai commencé à faire quelque chose, il faudrait modifier la classe kunena.who.class.php qui n’existe plus dans Kunena 2.0. On avait désactivé cette partie car ça grévait les performances.

Pour accéder à cette fonction tu devras entrer l'url : http://127.0.0.1/joomla_2.5.7/index.php/forum/who/

Dans le fichier \administrator\components\com_kunena\libraries\route\legacy.php ligne 446 ajoute :
case 'who':        
				$changed = true;
				$uri->setVar('view', 'whoisonline');
				break;

Dans le fichier \administrator\components\com_kunena\libraries\route\route.php ligne 381 ajoute :
case 'whoisonline':
				$r = array();
				break;

Crée le fichier suivant \components\com_kunena\lib\kunena.who.class.php en ajoutant le code :
<?php
/**
* @version $Id$
* Kunena Component
* @package Kunena
*
* @Copyright (C) 2008 - 2011 Kunena Team. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link http://www.kunena.org
*
* Based on FireBoard Component
* @Copyright (C) 2006 - 2007 Best Of Joomla All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link http://www.bestofjoomla.com
*
* Based on Joomlaboard Component
* @copyright (C) 2000 - 2004 TSMF / Jan de Graaff / All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @author TSMF & Jan de Graaff
**/
 
// Dont allow direct linking
defined( '_JEXEC' ) or die();
 
class CKunenaWhoIsOnline {
	public $db = null;
	public $my = null;
	public $app = null;
	public $config = null;
	protected $myip = null;
	protected $name = null;
 
	protected function __construct($db, $config, $app) {
		$this->db = $db;
		$this->my = JFactory::getUser ();
		$this->config = $config;
		$this->app = $app;
		$this->name = $this->config->username ? "username" : "name";
		$this->now = JFactory::getDate();
		$this->timeout = $this->now->toUnix() - $this->app->getCfg ( 'lifetime', 15 ) * 60;
	}
 
	public function &getInstance() {
		static $instance = NULL;
		if (! $instance) {
			$kunena_db = & JFactory::getDBO ();
			$kunena_config = KunenaFactory::getConfig ();
			$kunena_app = & JFactory::getApplication ();
 
			$instance = new CKunenaWhoIsOnline ( $kunena_db, $kunena_config, $kunena_app );
		}
		return $instance;
	}
 
	/**
	* Escapes a value for output in a view script.
	*
	* If escaping mechanism is one of htmlspecialchars or htmlentities, uses
	* {@link $_encoding} setting.
	*
	* @param  mixed $var The output to escape.
	* @return mixed The escaped value.
	*/
	function escape($var)
	{
		return htmlspecialchars($var, ENT_COMPAT, 'UTF-8');
	}
 
	public function getActiveUsersList() {
		static $users = null;
		if ($users) return $users;
		// TODO: make this configurable: WHERE s.time > {$this->timeout}
		$query = "SELECT s.userid, u.{$this->name} AS username, u.id, k.moderator, k.showOnline
			FROM #__users AS u
			LEFT JOIN #__kunena_users AS k ON k.userid=u.id
			INNER JOIN #__session AS s ON s.client_id=0 AND s.userid=u.id AND s.userid>0
			GROUP BY s.userid
			ORDER BY username ASC";
 
    	$this->db->setQuery($query);
    	$users = $this->db->loadObjectList();
    	KunenaError::checkDatabaseError();
 
    	return $users;
	}
 
	public function getTotalRegistredUsers () {
		$count = KunenaUser::getOnlineCount();
		return $count['user'];
	}
 
	public function getTotalGuestUsers () {
		if ( !$this->config->regonly ) {
			$count = KunenaUser::getOnlineCount();
			return $count['guest'];
		}
		return 0;
	}
 
	public function getTitleWho ($totaluser,$totalguests) {
		$who_name = '<strong>'.$totaluser.' </strong>';
       	if($totaluser==1) {
        	$who_name .= JText::_('COM_KUNENA_WHO_ONLINE_MEMBER').'&nbsp;';
        } else {
           	$who_name .= JText::_('COM_KUNENA_WHO_ONLINE_MEMBERS').'&nbsp;';
        }
        $who_name .= JText::_('COM_KUNENA_WHO_AND');
        $who_name .= '<strong> '. $totalguests.' </strong>';
        if($totalguests==1) {
           	$who_name .= JText::_('COM_KUNENA_WHO_ONLINE_GUEST').'&nbsp;';
        } else {
           	$who_name .= JText::_('COM_KUNENA_WHO_ONLINE_GUESTS').'&nbsp;';
        }
		$who_name .= JText::_('COM_KUNENA_WHO_ONLINE_NOW');
 
		return $who_name;
	}
 
	public function getUsersList () {
		// TODO: make this configurable: WHERE s.time > {$this->timeout}
		$query = "SELECT w.*, u.id, u.{$this->name} AS username, k.showOnline
			FROM #__kunena_whoisonline AS w
			LEFT JOIN #__users AS u ON w.userid=u.id
			LEFT JOIN #__kunena_users AS k ON k.userid=u.id
			LEFT JOIN #__session AS s ON s.client_id=0 AND s.userid=u.id AND s.userid>0
			GROUP BY s.userid
			ORDER BY w.time DESC";
        $this->db->setQuery($query);
        $users = $this->db->loadObjectList();
        KunenaError::checkDatabaseError();
 
        return $users;
	}
 
	protected function _deleteUsersOnline () {
		$past = $this->now->toUnix() - max(intval(JFactory::getConfig()->getValue( 'config.lifetime' ))*60, intval(KunenaFactory::getConfig ()->fbsessiontimeout));
		$this->db->setQuery("DELETE FROM #__kunena_whoisonline WHERE time < {$this->db->Quote($past)}");
		$this->db->query();
		KunenaError::checkDatabaseError();
	}
 
	protected function _getOnlineUsers () {
		$this->db->setQuery("SELECT COUNT(*) FROM #__kunena_whoisonline WHERE userip={$this->db->Quote($this->myip)} AND userid={$this->db->Quote($this->my->id)}");
		$online = $this->db->loadResult();
		KunenaError::checkDatabaseError();
 
		return $online;
	}
 
	protected function _IsUser() {
		if ($this->my->id > 0) {
    		$isuser = 1;
    	} else {
    		$isuser = 0;
    	}
 
    	return $isuser;
	}
 
	public function insertOnlineDatas () {
		$id = JRequest::getInt('id');
		$catid = JRequest::getInt('catid');
		$func = JString::strtolower ( JRequest::getCmd ( 'func', 'listcat' ) );
		$task = JRequest::getCmd('task');
		$do = JRequest::getCmd('do');
 
		$isuser = $this->_IsUser();
		$this->myip = $_SERVER ["REMOTE_ADDR"];
 
		$online = $this->_getOnlineUsers();
 
		if ( $func == 'showcat') {
    		$this->db->setQuery("SELECT name FROM #__kunena_categories WHERE id={$this->db->Quote($catid)}");
    		$what = JText::_('COM_KUNENA_WHO_VIEW_SHOWCAT').' '.$this->db->loadResult();
    		KunenaError::checkDatabaseError();
		} else if ($func == 'listcat') {
    		$what = JText::_('COM_KUNENA_WHO_VIEW_LISCAT');
		} else if ($func == 'latest') {
    		$what = JText::_('COM_KUNENA_WHO_ALL_DISCUSSIONS');
    	} else if ($func == 'mylatest') {
    		$what = JText::_('COM_KUNENA_WHO_MY_DISCUSSIONS');
    	} else if ($func == 'view') {
    		$this->db->setQuery("SELECT subject FROM #__kunena_messages WHERE id={$this->db->Quote($id)}");
    		$what = JText::_('COM_KUNENA_WHO_VIEW_TOPIC').' '.$this->db->loadResult();
    		KunenaError::checkDatabaseError();
    	} else if ($func == 'post' && $do == 'reply') {
    		$this->db->setQuery("SELECT subject FROM #__kunena_messages WHERE id={$this->db->Quote($id)}");
    		$what = JText::_('COM_KUNENA_WHO_REPLY_TOPIC').' '.$this->db->loadResult();
    		KunenaError::checkDatabaseError();
    	} else if ($func == 'post' && $do == 'edit') {
    		$this->db->setQuery("SELECT name FROM #__kunena_messages WHERE id={$this->db->Quote($id)}");
    		$what = JText::_('COM_KUNENA_WHO_POST_EDIT').' '.$this->db->loadResult();
    		KunenaError::checkDatabaseError();
    	} else if ($func == 'who') {
    		$what = JText::_('COM_KUNENA_WHO_VIEW_WHO');
    	} else if ($func== 'search') {
  			$what = JText::_('COM_KUNENA_WHO_SEARCH');
		} else if ($func== 'profile') {
  			$what = JText::_('COM_KUNENA_WHO_PROFILE');
		} else if ($func== 'stats') {
  			$what = JText::_('COM_KUNENA_WHO_STATS');
		} else if ($func== 'userlist') {
  			$what = JText::_('COM_KUNENA_WHO_USERLIST');
		} else {
  			$what = JText::_('COM_KUNENA_WHO_MAINPAGE');
		}
 
		$link = JURI::getInstance()->toString();
 
		if ($online == 1) {
    		$sql = "UPDATE #__kunena_whoisonline SET ".
    		" time=".$this->db->quote($this->now->toUnix()).", ".
    		" what=".$this->db->quote($what).", ".
    		" do=".$this->db->quote($do).", ".
    		" task=".$this->db->quote($task).", ".
    		" link=".$this->db->quote($link).", ".
    		" func=".$this->db->quote($func).
            " WHERE userid=".$this->db->quote($this->my->id).
            " AND userip=".$this->db->quote($this->myip);
    		$this->db->setQuery($sql);
    	} else {
    		$this->_deleteUsersOnline();
    		$sql = "INSERT INTO #__kunena_whoisonline (`userid` , `time`, `what`, `task`, `do`, `func`,`link`, `userip`, `user`) "
            . " VALUES (".
            $this->db->quote($this->my->id).",".
            $this->db->quote($this->now->toUnix()).",".
            $this->db->quote($what).",".
            $this->db->quote($task).",".
            $this->db->quote($do).",".
            $this->db->quote($func).",".
            $this->db->quote($link).",".
            $this->db->quote($this->myip).",".
            $this->db->quote($isuser).")";
 
    		$this->db->setQuery($sql);
    	}
 
		$this->db->query();
		KunenaError::checkDatabaseError();
	}
}
?>

Dans \components\com_kunena\views crée un répertoire "whoisonline" et à l'intérieur de celui-ci ajoute les fichiers suivants :


Ce fichier est masqué pour les invités.
Veuillez vous connecter ou vous enregistrer pour le consulter.


Crée le fichier suivant : \components\com_kunena\controllers\whoisonline.php avec le contenu :
<?php
/**
 * Kunena Component
 * @package Kunena.Site
 * @subpackage Controllers
 *
 * @copyright (C) 2008 - 2012 Kunena Team. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link http://www.kunena.org
 **/
defined ( '_JEXEC' ) or die ();
 
/**
 * Kunena Statistics Controller
 *
 * @since		2.0
 */
class KunenaControllerWhoisonline extends KunenaController {
}

Crée le fichier suivant \components\com_kunena\models\whoisonline.php avec le contenu :
<?php
/**
 * Kunena Component
 * @package Kunena.Site
 * @subpackage Models
 *
 * @copyright (C) 2008 - 2012 Kunena Team. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link http://www.kunena.org
 **/
defined ( '_JEXEC' ) or die ();
 
/**
 * Statistics Model for Kunena
 *
 * @since		2.0
 */
class KunenaModelWhoisonline extends KunenaModel {
}

Pour soutenir le projet Kunena : soutenir via le système de sponsor de github

Ce message contient un fichier en pièce jointe.
Veuillez vous connecter ou vous enregistrer pour le consulter.

Veuillez vous connecter ou vous enregistrer pour rejoindre la conversation.

Plus d'informations
20 Jan 2013 19:11 #14 par mimi
Réponse de mimi sur le sujet Utilisateurs actuellement en ligne ?
Merci failrOn :)

J'ai tout fait ce que tu as listé mais rien n'a changé sur le forum. Toujours aucun lien sur "Utilisateurs actuellement en ligne"

Peut être n'ai-je pas tout compris... En tout cas ce qui est sûr c'est que je n'ai pas compris comment accéder à la fonction :

failrOn écrit: Pour accéder à cette fonction tu devras entrer l'url : http://127.0.0.1/joomla_2.5.7/index.php/forum/who/

Veuillez vous connecter ou vous enregistrer pour rejoindre la conversation.

Plus d'informations
20 Jan 2013 20:45 - 20 Jan 2013 20:45 #15 par failrOn
Mes changements n'ajoutent pas de liens, tu entrer l'url manuellement, je ne connais pas l'url de ton site. Par ici, ça serait : kunena.aide-joomla.com/forum/who/

Par contre le fichier \components\com_kunena\lib\kunena.who.class.php nécessite une réécriture pour fonctionner avec Kunena 2.0 et cela va être long et/ou compliqué, en faite mes changements ne fonctionnent pas encore

Pour soutenir le projet Kunena : soutenir via le système de sponsor de github
Dernière édition: 20 Jan 2013 20:45 par failrOn.

Veuillez vous connecter ou vous enregistrer pour rejoindre la conversation.

Plus d'informations
20 Jan 2013 22:45 #16 par mimi
Réponse de mimi sur le sujet Utilisateurs actuellement en ligne ?
Je comprends mieux... merci failrOn

Dois-je conserver les modifs et ajouts en attendant que la fonction soit opérationnelle ?

Ceci étant je ne comprends pas que l'upgrade ait fait disparaître une fonctionnalité assez importante pour toute équipe d'administration et de modération...

Veuillez vous connecter ou vous enregistrer pour rejoindre la conversation.

Plus d'informations
20 Jan 2013 23:30 #17 par failrOn
Cette fonctionnalité impactait négativement les performances de Kunena, c'est pour cela qu'elle a disparue dans Kunena 2.0

Pour soutenir le projet Kunena : soutenir via le système de sponsor de github

Veuillez vous connecter ou vous enregistrer pour rejoindre la conversation.

Plus d'informations
10 Fév 2013 15:47 - 10 Fév 2013 17:58 #18 par failrOn
Ne pas tenir compte de mon message ci-dessus qui ne contenait pas les changements complets : kunena.aide-joomla.com/forum/kunena-2-0/...ligne?start=12#13546

Appliquer les modifications suivantes pour remettre en place cette fonctionnalité, tester en local les changements :

Dans le fichier \administrator\components\com_kunena\libraries\route\legacy.php ligne 446 ajoute :
case 'who':        
				$changed = true;
				$uri->setVar('view', 'whoisonline');
				break;

Dans le fichier \administrator\components\com_kunena\libraries\route\route.php ligne 381 ajoute :
case 'whoisonline':
				$r = array();
				break;

Dans \components\com_kunena\views crée un répertoire "whoisonline" et à l'intérieur de celui-ci ajoute les fichiers suivants :


Ce fichier est masqué pour les invités.
Veuillez vous connecter ou vous enregistrer pour le consulter.


Ajouter le fichier suivant dans \components\com_kunena\lib\ :

Ce fichier est masqué pour les invités.
Veuillez vous connecter ou vous enregistrer pour le consulter.




Dans \components\com_kunena\template\blue_eagle\html\whoisonline\ ajoute le fichier suivant default.php :
<?php
/**
* @version $Id$
* Kunena Component
* @package Kunena
*
* @Copyright (C) 2008 - 2011 Kunena Team. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link http://www.kunena.org
*
* Based on FireBoard Component
* @Copyright (C) 2006 - 2007 Best Of Joomla All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @link http://www.bestofjoomla.com
*
* Based on Joomlaboard Component
* @copyright (C) 2000 - 2004 TSMF / Jan de Graaff / All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* @author TSMF & Jan de Graaff
**/
 
// Dont allow direct linking
defined( '_JEXEC' ) or die();
 
if ($this->config->showwhoisonline) {	
?>
<div class="kblock">
	<div class="kheader">
		<span class="ktoggler"><a class="ktoggler close" title="<?php echo JText::_('COM_KUNENA_TOGGLER_COLLAPSE') ?>" rel="kwhois_tbody"></a></span>
		<h2><span><?php echo $this->app->getCfg('sitename'); ?> - <?php echo JText::_('COM_KUNENA_WHO_WHOIS_ONLINE'); ?></span></h2>
	</div>
	<div class="kcontainer" id="kwhois_tbody">
	<table>
		<tbody>
			<tr class = "ksth">
				<th class = "th-1 ksectiontableheader"><?php echo JText::_('COM_KUNENA_WHO_ONLINE_USER'); ?></th>
				<th class = "th-2 ksectiontableheader"><?php echo JText::_('COM_KUNENA_WHO_ONLINE_TIME'); ?></th>
				<th class = "th-3 ksectiontableheader"><?php echo JText::_('COM_KUNENA_WHO_ONLINE_FUNC'); ?></th>
			</tr>
 
			<?php
			$k = 0; //for alternating rows
			$tabclass = array ("row1","row2");
 
			foreach ($this->listusers as $user) :
				$k = 1 - $k;
 
        $selected_user = KunenaUserHelper::get($user->userid);
 
				if ($user->userid == 0) {
					$user->username = JText::_('COM_KUNENA_GUEST');
				} else if ($user->showOnline < 1 && !$this->kuser->isModerator()) {
					continue;
				}
			?>
			<tr class = "k<?php echo $this->escape($tabclass[$k]);?>">
				<td class = "td-1">
					<div style = "float: right; width: 14ex;"></div>
					<span>
						<?php
						if ($this->kuser->userid == 0) :
							echo JText::_('COM_KUNENA_GUEST');
						else :
							echo $selected_user ->getLink($selected_user ->name);
						endif;
						?>
					</span>
					<?php
					if ($this->kuser->isAdmin() && $this->config->hide_ip) :
						echo '('.$this->escape($user->userip).')';
					elseif ($this->kuser->isModerator() && !$this->config->hide_ip) :
						echo '('.$this->escape($user->userip).')';
					endif;
					?>
					</td>
					<td class = "td-2" nowrap = "nowrap">
            <?php $kdate = KunenaDate::getInstance($user->time); ?>
						<span title="<?php echo $kdate->toKunena('datetime_time') ?>">
							<?php echo $kdate->toKunena('datetime_time') ?>
						</span>
					</td>
 
					<td class = "td-3">
						<strong><a href = "<?php echo $this->escape($user->link);?>" target = "_blank"><?php echo $this->escape($user->what); ?></a></strong>
					</td>
				</tr>
		<?php endforeach; ?>
	</table>
</div>
</div>
<?php } else { ?>
	<div style = "border:1px solid #FF6600; background: #FF9966; padding:20px; text-align:center;">
		<h1><?php echo JText::_('COM_KUNENA_WHO_IS_ONLINE_NOT_ACTIVE'); ?></h1>
	</div>
<?php } ?>

Dans le fichier \components\com_kunena\kunena.php ligne 66 ajoute le code suivant :
require_once(JPATH_ROOT.'\components\com_kunena\lib\kunena.who.class.php');
$whoisonline = KunenaWhoIsOnline::getInstance();
$whoisonline->insertOnlineDatas();


Crée le fichier suivant : \components\com_kunena\controllers\whoisonline.php avec le contenu :
<?php
/**
 * Kunena Component
 * @package Kunena.Site
 * @subpackage Controllers
 *
 * @copyright (C) 2008 - 2012 Kunena Team. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link http://www.kunena.org
 **/
defined ( '_JEXEC' ) or die ();
 
/**
 * Kunena Statistics Controller
 *
 * @since		2.0
 */
class KunenaControllerWhoisonline extends KunenaController {
}

Crée le fichier suivant \components\com_kunena\models\whoisonline.php avec le contenu :
<?php
/**
 * Kunena Component
 * @package Kunena.Site
 * @subpackage Models
 *
 * @copyright (C) 2008 - 2012 Kunena Team. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
 * @link http://www.kunena.org
 **/
defined ( '_JEXEC' ) or die ();
 
/**
 * Statistics Model for Kunena
 *
 * @since		2.0
 */
class KunenaModelWhoisonline extends KunenaModel {
}

Dans le fichier \components\com_kunena\template\blue_eagle\html\common\statistics.php ligne 31 ajoute, le lien devra être adapté à ton installation de Joomla! :
<li><a href="<?php echo KunenaRoute::_ ( 'index.php?option=com_kunena&view=who' ),  ?>">Who</a></li>

Vous devrez re-créer la table *_kunena_whoisonline avec la requête suivante, n'oubliez pas de personnaliser le préfixe de la table en fonction de votre installation :

Ce fichier est masqué pour les invités.
Veuillez vous connecter ou vous enregistrer pour le consulter.

Pour soutenir le projet Kunena : soutenir via le système de sponsor de github

Ce message contient des fichiers en pièce jointe.
Veuillez vous connecter ou vous enregistrer pour les consulter.

Dernière édition: 10 Fév 2013 17:58 par failrOn.

Veuillez vous connecter ou vous enregistrer pour rejoindre la conversation.

  • Vous ne pouvez pas: Créer un nouveau sujet.
  • Vous ne pouvez pas: Répondre au sujet.
  • Vous ne pouvez pas: Éditer votre message.
Modérateurs: lavstephfailrOndede17serge
Temps de génération de la page : 0.346 secondes
Propulsé par Kunena