Внимание:найдена Проблема Сейчас буду пытаться ее решить.Проблема решена, вот описание.
Приношу свои извинения за косяк.
Добавим в список участников сообщества возможность изменять роль каждого участника
Первым делом добавим пару строчек в файл gears/community/lang/ru.lng (в секцию [community]):
setrole_msg = "Участнику %s присвоена роль '%s'"
set_role = "Изменить роль"
/**
* Setting member's role
* @param string
* @param string
* @param string
* @return void
*/
function setrole ($url_name = FALSE, $username = FALSE, $role = FALSE) {
if(!$url_name||!$username||!$role)
show404(); else {
$test= false;
$test = ($community = $this->db->get_where('community',array('url_name'=>$url_name))->row());
$test = $test && ($user = $this->db->get_where('users',array('url_name'=>$username))->row());
if ($test) $test = $test && ($cuser = $this->db->get_where('community_users',array('uid'=>$user->id))->row());
if ($test) $test = $test && ($role == 'admin'||$role == 'moder'||$role == 'member');
if ($test){
if($this->community->check($community->id) != 'admin') return _403();
$this->db->update('community_users',array('role'=>$role),array('uid'=>$user->id));
msg(t('setrole_msg',$user->name,t('!community '.$role)));
redirect(l('/community/'.$url_name.'/members/'));
}else{show404();}
}
}
// ------------------------------------------------------------------------
Теперь редактируем файл gears/community/models/community.php:
в функцию show($url_name,$page = 0, $expage = 0) после строчек
if($member['role'] == 'admin') $info['undel'][] = $member['id'];
$member['role_icon'] = '/gears/community/img/icon/'.$member['role'].'.png';
} добавляем следующий код:
/* Start Setrole section */
if ($this->check($community) == 'admin'){
$header['set_role']= array(fc_t('!community set_role'),'text','5%');
}
if ($this->check($community) == 'admin' ){
foreach($members as &$member){
$member['set_role']='';
if ($member['role'] != 'admin') {
$member['set_role'] = $member['set_role'].$CI->builder->a('<img border="0">',l('/community/setrole/'.$community->url_name.'/'.$member['name'].'/admin'),'','',t('!community admin'));
}
if ($member['role'] != 'moder') {
$member['set_role'] = $member['set_role'].$CI->builder->a('<img border="0">',l('/community/setrole/'.$community->url_name.'/'.$member['name'].'/moder'),'','',t('!community moder'));
}
if ($member['role'] != 'member') {
$member['set_role'] = $member['set_role'].$CI->builder->a('<img border="0">',l('/community/setrole/'.$community->url_name.'/'.$member['name'].'/member'),'','',t('!community member'));
}
}
}
/* End Setrole section */
Один момент: В папке gears/community/img/icon отсутствует иконка помощника (moder.png).
Мне показалось, что иконка gears/favorites/img/icon/remove.png вполне подойдет для роли помощника. Если вы со мной согласны — просто скопируйте ее.


Сейчас думаю как решать. (описана вот тут)
http://cogear.ru/community/tips-n-tricks/vybor-roli-uchastnika-soobshhestva-159.html#comment-2372 Есличто
Сча буду исправлять.Я слишком плохо знаю sql.Если кто может помочь — суть косяка: сообщество выводится в списке столько раз, сколько у него админов.
Как мне кажется проблема вот в чем:
файл gears/community/models/community.php:
function _query(){ $this->db->select('community.*'); $this->db->join('community_users','community.id = community_users.cid AND community_users.role = "admin"','left'); $this->db->select('users.name as aname,users.url_name as aurl_name,users.avatar as uavatar'); $this->db->join('users','users.id = community_users.uid'); $this->db->select('(SELECT COUNT(id) FROM community_users WHERE cid = community.id && approved = true) as users_num',FALSE); $this->db->select('(SELECT COUNT(id) FROM nodes WHERE cid = community.id) as nodes_num',FALSE); return $this->db; }Решение проблемы
1. в файле gears/community/models/community.php в функции _query() комментируем строчки:function _query(){ $this->db->select('community.*'); //$this->db->join('community_users','community.id = community_users.cid AND community_users.role = "admin"','left'); //$this->db->select('users.name as aname,users.url_name as aurl_name,users.avatar as uavatar'); //$this->db->join('users','users.id = community_users.uid'); $this->db->select('(SELECT COUNT(id) FROM community_users WHERE cid = community.id && approved = true) as users_num',FALSE); $this->db->select('(SELECT COUNT(id) FROM nodes WHERE cid = community.id) as nodes_num',FALSE); return $this->db; }2. в файле gears/community/index.php в функции index($url_name = FALSE, $action = FALSE, $subaction = FALSE) после строчки
foreach($all as &$community){добавляем код:$admins = $this->db->get_where('community_users',array('cid'=>$community['id'],'role'=>'admin'))->result_array(); $community['aname']= ''; foreach($admins as &$admin){ $auser=$this->db->get_where('users',array('id'=>$admin['uid']))->row(); $community['aname'] .= $this->builder->a($auser->name,l('/user/'.$auser->url_name),'user').' '; }3. там же находим строку
'aname'=>array(fc_t('admin'),'link','10%','before'=>'<span class="user">','after'=>'</span>'),и заменяем ее на'aname'=>array(fc_t('admin'),'text','10%')