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

Тема в разделе "DLE", создана пользователем Hafner, 20 июл 2009.

Информация :
Актуальная версия DataLife Engine 11.1
( Final Release v.11.1 | Скачать DataLife Engine | Скачать 11.1 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 10.0 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Статус темы:
Закрыта.
Модераторы: killoff
  1. Hafner

    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}
     
    Izrael и gruppastimul нравится это.
  2. Budrin

    Budrin Читатель

    Заблокирован
    Регистр.:
    1 фев 2008
    Сообщения:
    299
    Симпатии:
    45
    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""");
        
    set_cookie"dle_password""");
        
    set_cookie"dle_hash""");
        
    $_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]'");
    }
    ---------------/код ----------------
     
    Hafner нравится это.
  3. Hafner

    Hafner Постоялец

    Регистр.:
    9 июл 2008
    Сообщения:
    79
    Симпатии:
    30
    На самом деле всё работало бы нормально :)
    Там просто дубль проверки есть, забыл код исправить:

    Код:
    находим
    --------------- код ----------------
    	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]'");
            }
    ---------------/код ----------------

    Спасибо за поправку, инструкция в первом посте исправлена.
     
    acelotuse нравится это.
  4. GSMtricks

    GSMtricks Постоялец

    Регистр.:
    7 дек 2006
    Сообщения:
    56
    Симпатии:
    3
    Кто-то может добавить вывода статуса пользователя в другую страницу? У меня есть мод который выводит ТОП юзеров, вот в него бы добавить возможность видеть онлайн юзер или нет.
     
  5. Izrael

    Izrael

    Регистр.:
    12 фев 2008
    Сообщения:
    448
    Симпатии:
    56
    ребят кто может переделать это под 8,5 ?
     
  6. diabl

    diabl Боцман

    Регистр.:
    24 мар 2009
    Сообщения:
    439
    Симпатии:
    156
    Тоже нуждаюсь в помощи, dle 8.5

    Добавлено через 17 минут
    Не получилось только для комменариев сделать статус
     
  7. diabl

    diabl Боцман

    Регистр.:
    24 мар 2009
    Сообщения:
    439
    Симпатии:
    156
    Для Dle forum 2.5 тоже сделал, а для комментариев не могу, кто может подсказать как сделать, что не хватает в коде?
     
Статус темы:
Закрыта.