• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Хак Статус пользователя на сайте

Статус
В этой теме нельзя размещать новые ответы.

Hafner

Постоялец
Регистрация
9 Июл 2008
Сообщения
79
Реакции
30
  • Title: Статус пользователя на сайте
  • Authors: Fed
  • Version: v.2.0 Fixed
  • Date: 18.07.2009
  • Desc: из названия и так ясно, что делает хак, отображает статус пользователя онлайн/оффлайн в комментариях и профиле
  • Other: ввиду того что хак разработан был очень давно и не до конца исправлены баги, то пришлось адаптировать его под DLE 8.0 собственоручно, поэтому в конце версии я сделал приписку Fixed.

Инструкция по установке:
Код:
####################################################################
####  Статус пользователя на сайте v.2.0 (with admin) [Fed's]  #####
####################################################################



- открываем ./engine/inc/options.php
находим такой код (примерно 865-ая строка):
--------------- код ----------------
    showRow($lang['opt_sys_ud'], $lang['opt_sys_udd'], "<input class=edit type=text style=\"text-align: center;\"  name='save_con[max_users_day]' value=\"{$config['max_users_day']}\" size=10>");
---------------/код ----------------


НИЖЕ вставляем:
--------------- код ----------------
        showRow("Пользователь OnLine/OffLine", "Время в минутах, в течении которого пользователь будет иметь статус OnLine", "<input class=edit type=text style=\"text-align: center;\"  name='save_con[user_online]' value=\"{$config['user_online']}\" size=10>");
        showRow("Статус OnLine", "Надпись или html-код картинки для пользователя имеющего статус OnLine. Например, \"есть с нами\", или \"ОнЛайн\"", "<input class=edit type=text style=\"text-align: center;\"  name='save_con[status_user_online]' value=\"{$config['status_user_online']}\" size=40>");
        showRow("Статус OffLine", "Надпись или html-код картинки для пользователя имеющего статус OffLine. Например, \"нету с нами\", или \"ОффЛайн\"", "<input class=edit type=text style=\"text-align: center;\"  name='save_con[status_user_offline]' value=\"{$config['status_user_offline']}\" size=40>");
---------------/код ----------------




находим такой код:
--------------- код ----------------
$name != "offline_reason"
---------------/код ----------------


заменяем его на:
--------------- код ----------------
$name != "offline_reason" AND $name != "status_user_offline" AND $name != "status_user_online"
---------------/код ----------------




####################################################
####################################################

- открываем ./engine/modules/sitelogin.php
находим такой код:
--------------- код ----------------
if (($member_id['lastdate'] + (3600*4)) < $_TIME) {

$db->query("UPDATE LOW_PRIORITY " . USERPREFIX . "_users set lastdate='{$_TIME}' where user_id='$member_id[user_id]'");

}
---------------/код ----------------


заменяем его на:
--------------- код ----------------
		  if (($member_id['lastdate']+$config['user_online']-1) <= $_TIME) {

	          $db->query("UPDATE LOW_PRIORITY " . USERPREFIX . "_users set lastdate='{$_TIME}' where user_id='$member_id[user_id]'");

		  }
---------------/код ----------------


--------------- код ---------------- 
if( ! $is_logged ) { 
     
    $member_id = array (); 
    set_cookie( "dle_user_id", "", 0 ); 
    set_cookie( "dle_password", "", 0 ); 
    set_cookie( "dle_hash", "", 0 ); 
    $_SESSION['dle_user_id'] = 0; 
    $_SESSION['dle_password'] = ""; 
     
} 
?> 
---------------/код ---------------- 
НАД ним вставляем: 
--------------- код ---------------- 
if (($member_id['lastdate']+$config['user_online']-1) <= $_TIME) { 
$db->query("UPDATE LOW_PRIORITY " . USERPREFIX . "_users set lastdate='{$_TIME}' where user_id='$member_id[user_id]'"); 
} 
---------------/код ---------------- 



по желанию одного из пользователей сделал фишку:
если пользователь вышел из аккаунта - чтобы писало оффлайн (не ждать то время, указаное в админке)

после
--------------- код ----------------
if (isset($_REQUEST['action']) AND $_REQUEST['action'] == "logout") {
---------------/код ----------------


ВСТАВИТЬ:
--------------- код ----------------
$member_id = $db->super_query("SELECT * FROM " . USERPREFIX . "_users where user_id='{$_SESSION['dle_user_id']}' and password='".md5($_SESSION['dle_password'])."'");
$nnt = $_TIME - (60*$config['user_online']);
$db->query("UPDATE " . USERPREFIX . "_users SET lastdate='$nnt' where user_id='{$member_id['user_id']}'");
---------------/код ----------------


####################################################
####################################################

- открываем ./engine/modules/show.full.php

- находим такой код:
--------------- код ----------------
reg_date, signature, foto,
---------------/код ----------------


- заменяем его на:
--------------- код ----------------
lastdate, reg_date, signature, foto,
---------------/код ----------------



- находим такой код:
--------------- код ----------------
if ($row['is_register'] AND $row['icq']) $tpl->set('{icq}', stripslashes($row['icq']));
else $tpl->set('{icq}', '--');
---------------/код ----------------


- ПОД ним вставляем: 
--------------- код ----------------
	$user_status = "";
	$user_status = (time()+($config['date_adjust']*60)) <= ($row['lastdate']+($config['user_online']*60)) ? stripslashes($config['status_user_online']) : stripslashes($config['status_user_offline']);
	$tpl->set('{user_status}',$user_status);
---------------/код ----------------




- открываем ./engine/modules/lastcomments.php

- находим такой код:
--------------- код ----------------
reg_date, signature, foto,
---------------/код ----------------


- заменяем его на:
--------------- код ----------------
lastdate, reg_date, signature, foto,
---------------/код ----------------




- находим такой код:
--------------- код ----------------
if ($row['is_register'] AND $row['icq']) $tpl->set('{icq}', stripslashes($row['icq']));
else $tpl->set('{icq}', '--');
---------------/код ----------------


- ПОД ним вставляем: 
--------------- код ----------------
	$user_status = "";
	$user_status = (time()+($config['date_adjust']*60)) <= ($row['lastdate']+($config['user_online']*60)) ? stripslashes($config['status_user_online']) : stripslashes($config['status_user_offline']);
	$tpl->set('{user_status}',$user_status);
---------------/код ----------------




####################################################
####################################################

- открываем ./engine/ajax/addcomments.php

- находим такой код:
--------------- код ----------------
reg_date, signature, foto,
---------------/код ----------------


- заменяем его на:
--------------- код ----------------
lastdate, reg_date, signature, foto,
---------------/код ----------------



- находим такой код:
--------------- код ----------------
if ($row['is_register'] AND $row['icq']) $tpl->set('{icq}', stripslashes($row['icq']));
else $tpl->set('{icq}', '--');
---------------/код ----------------


- ПОД ним вставляем: 
--------------- код ----------------
$tpl->set('{user_status}',stripslashes($config['status_user_online']));
---------------/код ----------------





- открываем ./engine/modules/profile.php

- находим такой код:
--------------- код ----------------
$tpl->set('{news_num}', $row['news_num']);
---------------/код ----------------


- ПОД ним вставляем: 
--------------- код ----------------
	$user_status = (time()+($config['date_adjust']*60)) <= ($row['lastdate']+($config['user_online']*60)) ? stripslashes($config['status_user_online']) : stripslashes($config['status_user_offline']);
	$tpl->set('{user_status}',$user_status);
---------------/код ----------------



###################################################
###################################################

ЕСЛИ УСТАНОВЛЕННА ГАЛЛЕРЕЯ TWS GALLERY 4.*
- открываем ./engine/gallery/classes/comments.php

- находим такой код (2 раза он встречается):
--------------- код ----------------
reg_date, signature, foto,
---------------/код ----------------


- заменяем ВСЕ (2 раза) на:
--------------- код ----------------
lastdate, reg_date, signature, foto,
---------------/код ----------------



- находим такой код:
--------------- код ----------------
if ($row['is_register'] AND $row['icq']) $tpl->set('{icq}', stripslashes($row['icq']));
else $tpl->set('{icq}', '--');
---------------/код ----------------


- ПОД ним вставляем: 
--------------- код ----------------
	$user_status = (time()+($config['date_adjust']*60)) <= ($row['lastdate']+($config['user_online']*60)) ? stripslashes($config['status_user_online']) : stripslashes($config['status_user_offline']);
	$tpl->set('{user_status}',$user_status);
---------------/код ----------------



- открываем ./templates/{THEME_NAME}/comments.tpl, ./templates/{THEME_NAME}/userinfo.tpl, ./templates/{THEME_NAME}/gallery/comments.tpl
- в нужное место вставляем: 
{user_status}
 
  • Заблокирован
  • #2
PHP:
находим
--------------- код ----------------
    }

?>
---------------/код ----------------



НАД ним вставляем:
--------------- код ----------------
if (($member_id['lastdate']+$config['user_online']-1) <= $_TIME) {
$db->query("UPDATE LOW_PRIORITY " . USERPREFIX . "_users set lastdate='{$_TIME}' where user_id='$member_id[user_id]'");
}
---------------/код ----------------


У тебя ошибка выходит... Потому как после входа юзер будет в онлайне только время заданное в настройках а потом в оффе станет. Вот так делать надо:

PHP:
находим
--------------- код ----------------
if( ! $is_logged ) {
	
	$member_id = array ();
	set_cookie( "dle_user_id", "", 0 );
	set_cookie( "dle_password", "", 0 );
	set_cookie( "dle_hash", "", 0 );
	$_SESSION['dle_user_id'] = 0;
	$_SESSION['dle_password'] = "";
	
}
?>
---------------/код ----------------
НАД ним вставляем:
--------------- код ----------------
if (($member_id['lastdate']+$config['user_online']-1) <= $_TIME) {
$db->query("UPDATE LOW_PRIORITY " . USERPREFIX . "_users set lastdate='{$_TIME}' where user_id='$member_id[user_id]'");
}
---------------/код ----------------
 
юзер будет в онлайне только время заданное в настройках а потом в оффе станет

На самом деле всё работало бы нормально :)
Там просто дубль проверки есть, забыл код исправить:

Код:
находим
--------------- код ----------------
	if( ! $_SESSION['member_lasttime'] ) {
		
		@session_register( 'member_lasttime' );
		$_SESSION['member_lasttime'] = $member_id['lastdate'];
		
		if( ($member_id['lastdate']+($config['user_online']-1)) <= $_TIME) {
			
			$db->query( "UPDATE LOW_PRIORITY " . USERPREFIX . "_users SET lastdate='{$_TIME}' where user_id='$member_id[user_id]'" );
		
		}
	}
---------------/код ----------------



ПОД ним вставляем:
--------------- код ----------------
        elseif(date('Y-m-d H:i', time()) != date('Y-m-d H:i', $member_id['lastdate']))
        {
        $db->query("UPDATE LOW_PRIORITY " . USERPREFIX . "_users set lastdate='{$_TIME}' WHERE user_id='$member_id[user_id]'");
        }
---------------/код ----------------


Спасибо за поправку, инструкция в первом посте исправлена.
 
Кто-то может добавить вывода статуса пользователя в другую страницу? У меня есть мод который выводит ТОП юзеров, вот в него бы добавить возможность видеть онлайн юзер или нет.
 
ребят кто может переделать это под 8,5 ?
 
Тоже нуждаюсь в помощи, dle 8.5

Добавлено через 17 минут
Не получилось только для комменариев сделать статус
 
Для Dle forum 2.5 тоже сделал, а для комментариев не могу, кто может подсказать как сделать, что не хватает в коде?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху