Убираем записи на стене и в блоги закрытых клубов с ленты активности.
|
|
+21↑ Голосов: 21 |
Тема навеяна из обсуждений на форуме.
Хак для того, чтобы записи на стене и в блоги закрытых клубов в ленте активности видели только участники клубов. В полной мере возвращается назначение закрытых клубов.
Итак, открываем файл /core/classes/actions.class.php и находим строку примерно 290 со следующим запросом
За оптимальность решения не ручаюсь. Возможно, можно было найти более простое. Например, создать поле в БД и заносить туда id участников клуба. Тогда пришлось бы заносить изменения в нескольких файлах. Предпочел более простой для конечного пользователя вариант(изменение в одном файле).
Приятного пользования!
Хак для того, чтобы записи на стене и в блоги закрытых клубов в ленте активности видели только участники клубов. В полной мере возвращается назначение закрытых клубов.
Итак, открываем файл /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 участников клуба. Тогда пришлось бы заносить изменения в нескольких файлах. Предпочел более простой для конечного пользователя вариант(изменение в одном файле).
Приятного пользования!
| # 4 сентября 2011 в 20:41 0 | ||
|
| # 4 сентября 2011 в 20:57 0 | ||
|
| # 10 декабря 2011 в 20:41 0 | ||
|