Убираем записи на стене и в блоги закрытых клубов с ленты активности.

+29
1.82K
Тема навеяна из обсуждений на форуме.
Хак для того, чтобы записи на стене и в блоги закрытых клубов в ленте активности видели только участники клубов. В полной мере возвращается назначение закрытых клубов.

Итак, открываем файл /core/classes/actions.class.php и находим строку примерно 290 со следующим запросом
  1. $sql = "SELECT log.id as id,
  2. log.object as object,
  3. log.object_url as object_url,
  4. log.target as target,
  5. log.target_url as target_url,
  6. log.pubdate as pubdate,
  7. log.description as description,
  8. a.message as message,
  9. a.name as name,
  10. u.nickname as user_nickname,
  11. u.login as user_login
  12.  
  13.  
Прямо перед запросом вставляем следующий код
  1. //начало хака для скрытия комментариев приватных клубов в ленте
  2. //выбираем все закрытые клубы
  3. $pr_sql = "SELECT cc.id,
  4. cc.admin_id,
  5. cuc.club_id,
  6. cuc.user_id
  7. FROM cms_clubs cc
  8. LEFT JOIN cms_user_clubs cuc ON cuc.club_id = cc.id
  9. WHERE cc.clubtype = 'private'
  10. ";
  11.  
  12. $pr_result = $inDB->query($pr_sql);
  13.  
  14. if($inDB->num_rows($pr_result)){
  15. //если пользователь, опрделеяем закрытые клубы в которых не состоит
  16. if($inUser->id){
  17.  
  18. while($club = $inDB->fetch_assoc($pr_result)){
  19.  
  20. if(($club['admin_id'] != $inUser->id) && ($club['user_id'] != $inUser->id)){
  21.  
  22. $clubs[] = $club['id'];
  23.  
  24. }
  25.  
  26. }
  27.  
  28. if($clubs){
  29. //отбрасываем повторяющиеся клубы
  30. $uniq_clubs = array_unique($clubs);
  31.  
  32. //готовим условие (action_id=24(25)- добавление комментов и постов в клуб)
  33. foreach($uniq_clubs as $key=>$value){
  34. $url_clubs[] = "'/clubs/".$value."'";
  35. }
  36. $cond_list = '('.implode(',', $url_clubs).')';
  37. $condition = "((log.action_id = 24 AND log.object_url NOT IN{$cond_list})
  38. OR log.action_id != 24)";
  39. $condition .= " AND ((log.action_id = 25 AND log.target_url NOT IN{$cond_list})
  40. OR log.action_id != 25)";
  41.  
  42. $this->where($condition);
  43. }
  44. }else{
  45.  
  46. while($club = $inDB->fetch_assoc($pr_result)){
  47.  
  48. $clubs[] = $club['id'];
  49.  
  50. }
  51.  
  52. //отбрасываем повторяющиеся клубы
  53. $uniq_clubs = array_unique($clubs);
  54.  
  55. //готовим условие (action_id=24(25)- добавление комментов и постов в клуб)
  56. foreach($uniq_clubs as $key=>$value){
  57. $url_clubs[] = "'/clubs/".$value."'";
  58. }
  59. $cond_list = '('.implode(',', $url_clubs).')';
  60. $condition = "((log.action_id = 24 AND log.object_url NOT IN{$cond_list})
  61. OR log.action_id != 24)";
  62. $condition .= " AND ((log.action_id = 25 AND log.target_url NOT IN{$cond_list})
  63. OR log.action_id != 25)";
  64.  
  65. $this->where($condition);
  66. }
  67. }
  68. //конец кода хака для скрытия комментариев приватных клубов в ленте
И всё. Обсуждаем всякие тайны в закрытых клубах и наслаждаемся тем, что другие не видят )
За оптимальность решения не ручаюсь. Возможно, можно было найти более простое. Например, создать поле в БД и заносить туда id участников клуба. Тогда пришлось бы заносить изменения в нескольких файлах. Предпочел более простой для конечного пользователя вариант(изменение в одном файле).

Приятного пользования!
0
qwest qwest 13 лет назад #
А поисковики тоже не видят?
0
Марат Марат 13 лет назад #
Ну, если поисковик не состоит в закрытом клубе, не увидит )))
А если всерьез, там еще много модулей, где комментарии и посты с приватных клубов выводятся публично. Так что, скорее всего увидят.
0
WALTERZ WALTERZ 12 лет назад #
Это в 1.9 исправлено??
0
СергейП СергейП 12 лет назад #
Похоже что нет...

Еще от автора

Фильтр "Вставка модуля" v 1.0.0
Приветик! Давненько что-то я ничего не писал ) Не знаю было это или не было, вчера увидел темку, решил сделать немного по-другому. Вещь то нужная.
PHP классы для работы с VK API и с API Яндекс Метрики
Доброго времени суток, коллеги! Выкладываю два класса: -для работы с API Вконтакте; -для работы с API Яндекс Метрики.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.