Модуль "Друзья онлайн"

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

instantcms 1.10.3

#1 4 января 2014 в 19:14
Подскажите что подправить в коде модуля, чтобы выводились все друзья, а не только те, которые онлайн.

  1. <?php
  2. /******************************************************************************/
  3. // //
  4. // InstantCMS v1.10.3 //
  5. // http://instantcms.ru/ //
  6. // //
  7. // written by InstantCMS Team, 2007-2013 //
  8. // produced by InstantSoft, (www.instantsoft.ru) //
  9. // //
  10. // LICENSED BY GNU/GPL v2 //
  11. // //
  12. /******************************************************************************/
  13.  
  14. function mod_user_friend($module_id, $cfg){
  15.  
  16. $inDB = cmsDatabase::getInstance();
  17. $inUser = cmsUser::getInstance();
  18.  
  19. if (!$inUser->id){ return false; }
  20.  
  21. if ($cfg['view_type'] == 'table') {
  22.  
  23. $sql = "SELECT
  24. CASE
  25. WHEN f.from_id = {$inUser->id}
  26. THEN f.to_id
  27. WHEN f.to_id = {$inUser->id}
  28. THEN f.from_id
  29. END AS user_id, u.login, u.nickname, u.is_deleted, p.imageurl
  30. FROM cms_user_friends f
  31. INNER JOIN cms_online o ON o.user_id = CASE WHEN f.from_id = {$inUser->id} THEN f.to_id WHEN f.to_id = {$inUser->id} THEN f.from_id END
  32. LEFT JOIN cms_users u ON u.id = o.user_id
  33. LEFT JOIN cms_user_profiles p ON p.user_id = u.id
  34. WHERE (from_id = {$inUser->id} OR to_id = {$inUser->id}) AND is_accepted =1 LIMIT ".$cfg['limit'];
  35. } else {
  36.  
  37. $sql = "SELECT
  38. CASE
  39. WHEN f.from_id = {$inUser->id}
  40. THEN f.to_id
  41. WHEN f.to_id = {$inUser->id}
  42. THEN f.from_id
  43. END AS user_id, u.login, u.nickname
  44. FROM cms_user_friends f
  45. INNER JOIN cms_online o ON o.user_id = CASE WHEN f.from_id = {$inUser->id} THEN f.to_id WHEN f.to_id = {$inUser->id} THEN f.from_id END
  46. LEFT JOIN cms_users u ON u.id = o.user_id
  47. WHERE (from_id = {$inUser->id} OR to_id = {$inUser->id}) AND is_accepted =1 LIMIT ".$cfg['limit'];
  48.  
  49. }
  50.  
  51. $result = $inDB->query($sql) ;
  52. $total = $inDB->num_rows($result);
  53.  
  54. if ($total){
  55. $friends = array();
  56. while($friend = $inDB->fetch_assoc($result)){
  57. $friend['avatar'] = ($cfg['view_type'] == 'table') ? cmsUser::getUserAvatarUrl($friend['user_id'], 'small', $friend['imageurl'], $friend['is_deleted']) : false;
  58. $friend['user_link'] = cmsUser::getProfileLink($friend['login'], $friend['nickname']);
  59. $friends[$friend['user_id']] = $friend;
  60. }
  61. }
  62.  
  63. cmsPage::initTemplate('modules', 'mod_user_friend')->
  64. assign('friends', $friends)->
  65. assign('total', $total)->
  66. assign('cfg', $cfg)->
  67. display('mod_user_friend.tpl');
  68.  
  69. return true;
  70.  
  71. }
  72. ?>
#2 4 января 2014 в 20:27
Строка INNER JOIN cms_online… лишняя.
P.S.
Может пригодиться:
cmsUser::getFriends(ид)
#3 5 января 2014 в 01:11
WAERZ, удалил строку, друзья в оффлайне не стали отображаться…
#4 5 января 2014 в 18:11
Alexander Sooslick,
  1. $sql = "SELECT
  2. CASE
  3. WHEN f.from_id = {$inUser->id}
  4. THEN f.to_id
  5. WHEN f.to_id = {$inUser->id}
  6. THEN f.from_id
  7. END AS user_id, u.nickname, u.login, u.status, u.logdate, p.imageurl
  8. FROM cms_user_friends f
  9. LEFT JOIN cms_users u ON u.id = CASE WHEN f.from_id = {$inUser->id} THEN f.to_id WHEN f.to_id = {$inUser->id} THEN f.from_id END
  10. INNER JOIN cms_user_profiles p ON p.user_id = u.id
  11. WHERE (from_id = {$inUser->id} OR to_id = {$inUser->id}) AND is_accepted =1
  12. ORDER BY u.logdate DESC
  13. LIMIT ".$cfg['limit'];
#5 5 января 2014 в 19:07
WAERZ, Спасибо
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.