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

Автор: Марат
Опубликовано: 263 дня назад (3 сентября 2011)
Блог: Мой блог
Рубрика: Без рубрики
+21
Голосов: 21
Тема навеяна из обсуждений на форуме.
Хак для того, чтобы записи на стене и в блоги закрытых клубов в ленте активности видели только участники клубов. В полной мере возвращается назначение закрытых клубов.

Итак, открываем файл /core/classes/actions.class.php и находим строку примерно  290 со следующим запросом
Код PHP:
$sql = "SELECT log.id as id,
                       log.object as object,
                       log.object_url as object_url,
                       log.target as target,
                       log.target_url as target_url,
                       log.pubdate as pubdate,
                       log.description as description,
                       a.message as message,
                       a.name as name,
                       u.nickname as user_nickname,
                       u.login as user_login

                
Прямо перед запросом вставляем следующий код
Код PHP:
//начало хака для скрытия комментариев приватных клубов в ленте
        //выбираем все закрытые клубы
        $pr_sql = "SELECT  cc.id,
                           cc.admin_id,
                           cuc.club_id,
                           cuc.user_id
                   FROM  cms_clubs cc
                   LEFT JOIN cms_user_clubs cuc ON  cuc.club_id = cc.id
                   WHERE cc.clubtype = 'private'
                   ";

        $pr_result = $inDB->query($pr_sql);
        
        if($inDB->num_rows($pr_result)){
              //если пользователь, опрделеяем закрытые клубы в которых не состоит
              if($inUser->id){

                   while($club = $inDB->fetch_assoc($pr_result)){

                      if(($club['admin_id'] != $inUser->id) && ($club['user_id'] != $inUser->id)){

                          $clubs[] = $club['id'];

                      }

                   }

                  if($clubs){
                     //отбрасываем повторяющиеся клубы
                     $uniq_clubs =  array_unique($clubs);
                  
                     //готовим условие (action_id=24(25)- добавление комментов и постов в клуб)
                     foreach($uniq_clubs as $key=>$value){
                       $url_clubs[] = "'/clubs/".$value."'";
                     }
                     $cond_list = '('.implode(',', $url_clubs).')';
                     $condition = "((log.action_id = 24 AND log.object_url NOT IN{$cond_list})
                      OR log.action_id != 24)";
                     $condition .= " AND ((log.action_id = 25 AND log.target_url NOT IN{$cond_list})
                      OR log.action_id != 25)";
                   
                      $this->where($condition);
                  }
              }else{

                     while($club = $inDB->fetch_assoc($pr_result)){

                         $clubs[] =  $club['id'];

                    }

                    //отбрасываем повторяющиеся клубы
                    $uniq_clubs =  array_unique($clubs);

                    //готовим условие (action_id=24(25)- добавление комментов и постов в клуб)
                      foreach($uniq_clubs as $key=>$value){
                        $url_clubs[] = "'/clubs/".$value."'";
                      }
                     $cond_list = '('.implode(',', $url_clubs).')';
                     $condition = "((log.action_id = 24 AND log.object_url NOT IN{$cond_list})
                     OR log.action_id != 24)";
                     $condition .= " AND ((log.action_id = 25 AND log.target_url NOT IN{$cond_list})
                     OR log.action_id != 25)";

                     $this->where($condition);
              }
        }
        //конец кода хака для скрытия комментариев приватных клубов в ленте
И всё. Обсуждаем всякие тайны в закрытых клубах и наслаждаемся тем, что другие не видят )
За оптимальность решения не ручаюсь. Возможно, можно было найти более простое. Например, создать поле в БД и заносить туда id участников клуба. Тогда пришлось бы заносить изменения в нескольких файлах. Предпочел более простой для конечного пользователя вариант(изменение в одном файле).

Приятного пользования!
Напоминание пользователям о существовании сайта | Модуль "Друзья друзей"
qwest # 4 сентября 2011 в 20:41 0
А поисковики тоже не видят?
Марат # 4 сентября 2011 в 20:57 0
Ну, если поисковик не состоит в закрытом клубе, не увидит )))
А если всерьез, там еще много модулей, где комментарии и посты с приватных клубов выводятся публично. Так что, скорее всего увидят.
WALTERZ # 10 декабря 2011 в 20:41 0
Это в 1.9 исправлено??