Файл: InstantSocial/uploud/modules/mod_friends_of_friends/module.php
Строк: 123
<?php
/*******************************************************************************/
// InstantCMS v1.8 //
// http://www.instantcms.ru/ //
// module "Friends of friends" //
// written by Marat Fatikhov //
// (nickname Марат on a site) //
// E-mail: f-marat@mail.ru //
// //
// LICENSED BY GNU/GPL v2 //
// //
/********************************************************************************/
function mod_friends_of_friends($module_id){
$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
$inUser = cmsUser::getInstance();
$cfg = $inCore->loadModuleConfig($module_id);
$my_id = $inUser->id;
if (!$my_id){ return false; }//только для пользователя
//список друзей пользователя
$sql = "SELECT
CASE
WHEN to_id = $my_id
THEN from_id
WHEN from_id = $my_id
THEN to_id
END AS user_id
FROM cms_user_friends
WHERE (from_id = $my_id OR to_id = $my_id) AND is_accepted =1";
$result = $inDB->query($sql);
if (!$inDB->num_rows($result)){ return false; }// если друзей нет, выходим
$friends = array();
while($friend = $inDB->fetch_assoc($result)){
$friend_id = $friend['user_id'];
$friends[] = $friend_id;
}
//для второго запроса
$friends_str = implode(',', $friends);
//берем список друзей у друзей без условий
$offriends =array();
//если не подключен, подключаем файл
$inCore->includeFile('components/users/includes/usercore.php');
$second_sql = "SELECT
CASE
WHEN f.to_id IN ({$friends_str})
THEN f.from_id
WHEN f.from_id IN ({$friends_str})
THEN f.to_id
END AS user_id, u.login AS login, u.nickname AS nickname, p.imageurl AS imageurl
FROM cms_user_friends f
LEFT JOIN cms_users u ON u.id = CASE WHEN f.from_id IN ({$friends_str}) THEN f.to_id WHEN f.to_id IN ({$friends_str}) THEN f.from_id END
LEFT JOIN cms_user_profiles p ON p.user_id = u.id
WHERE (f.from_id IN ({$friends_str}) OR f.to_id IN ({$friends_str})) AND f.is_accepted =1 AND f.from_id != $my_id AND f.to_id != $my_id";
$second_result = $inDB->query($second_sql);
//если нет друзей у друзей, выходим
if(!$inDB->num_rows($second_result)){return false;}
while($offriend = $inDB->fetch_assoc($second_result)){
//если нет в списке друзей, то добавляем в список друзей у друзей
if(!in_array($offriend['user_id'], $friends)){
$chek[] = $offriend['user_id'];//будет использоваться при выборе уникальных значений
$offriend['avatar'] = usrImageNOdb($offriend['user_id'], 'small', $offriend['imageurl'], 0);
$offriends[] = $offriend;
}
}
//если все друзья друзей в друзьях пользователя, выходим
if(!$offriends){return false;};
//считаем количество общих друзей
foreach($offriends as $key=>&$value){
$value['general'] = count(array_keys($offriends, $value));
}
//оставляем только уникальные значения
$chek = array_unique($chek);
$offriends = array_intersect_key($offriends, $chek);
//для показа всех общих друзей
$offriends_str = implode(',', $chek);
//выбираем случайные значения в количестве, определенном в настройках модуля
$total = count($offriends);
if($total > $cfg['newscount']){
$more = true;
$rand_keys = array_rand($offriends, $cfg['newscount']);
foreach($rand_keys as $key=>$rand_key){
$offriends_total[] = $offriends["{$rand_key}"];
}
}else{ $offriends_total =$offriends; }
//передаем в шаблон
$smarty = $inCore->initSmarty('modules', 'mod_friends_of_friends.tpl');
$smarty->assign('offriends', $offriends_total);
$smarty->assign('cfg', $cfg);
$smarty->assign('offriends_str', $offriends_str);
$smarty->assign('more', $more);
$smarty->display('mod_friends_of_friends.tpl');
return true;
}
?>