Index: trunk/core/units/groups/groups_event_handler.php =================================================================== diff -u -N -r6625 -r7635 --- trunk/core/units/groups/groups_event_handler.php (.../groups_event_handler.php) (revision 6625) +++ trunk/core/units/groups/groups_event_handler.php (.../groups_event_handler.php) (revision 7635) @@ -9,9 +9,28 @@ */ function SetCustomQuery(&$event) { - if ($event->Special == 'total') { $object =& $event->getObject(); + /* @var $object kDBList */ + + switch ($event->Special) { + case 'total': $object->AddGroupByField('%1$s.GroupId'); + break; + + case 'user': + $user_id = $this->Application->GetVar('u_id'); + if ($user_id !== false) { + // show only groups, that user doesn't belong to + $table_name = $this->Application->GetTempName(TABLE_PREFIX.'UserGroup', 'prefix:u'); + $sql = 'SELECT GroupId + FROM '.$table_name.' + WHERE PortalUserId = '.$user_id; + $group_ids = $this->Conn->GetCol($sql); + array_push($group_ids, 14, 15); // Guest & Everyone groups are set dynamically + + $object->addFilter('already_member_filter', '%1$s.GroupId NOT IN ('.implode(',', $group_ids).')'); + } + break; } } }