$groupids[] = $group->id; } $groups['data'] = get_records_sql_assoc("SELECT g1.id, g1.name, g1.description, g1.jointype, g1.membershiptype, g1.membercount, COUNT(gmr.member) AS requests\n FROM (\n SELECT g.id, g.name, g.description, g.jointype, t.membershiptype, COUNT(gm.member) AS membercount\n FROM {group} g\n LEFT JOIN {group_member} gm ON (gm.group = g.id)\n LEFT JOIN (\n SELECT g.id, 'admin' AS membershiptype\n FROM {group} g\n INNER JOIN {group_member} gm ON (gm.group = g.id AND gm.member = ? AND gm.role = 'admin')\n UNION\n SELECT g.id, 'member' AS membershiptype\n FROM {group} g\n INNER JOIN {group_member} gm ON (g.id = gm.group AND gm.member = ? AND gm.role != 'admin')\n UNION\n SELECT g.id, 'invite' AS membershiptype\n FROM {group} g\n INNER JOIN {group_member_invite} gmi ON (gmi.group = g.id AND gmi.member = ?)\n UNION\n SELECT g.id, 'request' AS membershiptype\n FROM {group} g\n INNER JOIN {group_member_request} gmr ON (gmr.group = g.id AND gmr.member = ?)\n ) t ON t.id = g.id\n WHERE g.id IN (" . implode($groupids, ',') . ') GROUP BY g.id, g.name, g.description, g.jointype, t.membershiptype ORDER BY g.name ) g1 LEFT JOIN {group_member_request} gmr ON (gmr.group = g1.id) GROUP BY g1.id, g1.name, g1.description, g1.jointype, g1.membershiptype, g1.membercount', array($USER->get('id'), $USER->get('id'), $USER->get('id'), $USER->get('id'))); if ($groups['data']) { // Get 3 members from each group in a separate query -- mysql doesn't like including them as subqueries with limit 1 in the above query $members = get_records_sql_array("\n SELECT m1.group, m1.member, u.* FROM {group_member} m1\n INNER JOIN {usr} u ON (m1.member = u.id AND u.deleted = 0)\n WHERE 3 > (\n SELECT COUNT(m2.member)\n FROM {group_member} m2\n WHERE m1.group = m2.group AND m2.member < m1.member\n )\n AND m1.group IN (" . implode($groupids, ',') . ')', array()); if ($members) { foreach ($members as $m) { $groups['data'][$m->group]->members[] = (object) array('id' => $m->id, 'name' => display_name($m)); } } } $groups['data'] = array_values($groups['data']); } group_prepare_usergroups_for_display($groups['data'], 'find'); $pagination = build_pagination(array('url' => get_config('wwwroot') . 'group/find.php?filter=' . $filter . '&query=' . $query, 'count' => $groups['count'], 'limit' => $groupsperpage, 'offset' => $offset, 'resultcounttextsingular' => get_string('group', 'group'), 'resultcounttextplural' => get_string('groups', 'group'))); function search_submit(Pieform $form, $values) { redirect('/group/find.php?filter=' . $values['filter'] . (isset($values['query']) ? '&query=' . urlencode($values['query']) : '')); } $smarty = smarty(); $smarty->assign('heading', TITLE); $smarty->assign('form', $searchform); $smarty->assign('groups', $groups['data']); $smarty->assign('pagination', $pagination['html']); $smarty->display('group/find.tpl');
$filter = param_alpha('filter', 'all'); $offset = param_integer('offset', 'all'); $groupcategory = param_variable('groupcategory', 0); $groupsperpage = 20; $offset = (int) ($offset / $groupsperpage) * $groupsperpage; $results = group_get_associated_groups($USER->get('id'), $filter, $groupsperpage, $offset, $groupcategory); $elements = array(); $elements['options'] = array('type' => 'select', 'options' => array('all' => get_string('allmygroups', 'group'), 'admin' => get_string('groupsiown', 'group'), 'member' => get_string('groupsimin', 'group'), 'invite' => get_string('groupsiminvitedto', 'group'), 'request' => get_string('groupsiwanttojoin', 'group')), 'defaultvalue' => $filter); if (get_config('allowgroupcategories') && ($groupcategories = get_records_menu('group_category', '', '', 'displayorder', 'id,title'))) { $options[0] = get_string('allcategories', 'group'); $options[-1] = get_string('categoryunassigned', 'group'); $options += $groupcategories; $elements['groupcategory'] = array('type' => 'select', 'options' => $options, 'defaultvalue' => $groupcategory, 'help' => true); } $elements['submit'] = array('type' => 'submit', 'value' => get_string('filter')); $form = pieform(array('name' => 'filter', 'method' => 'post', 'renderer' => 'oneline', 'elements' => $elements)); $pagination = build_pagination(array('url' => get_config('wwwroot') . 'group/mygroups.php?filter=' . $filter, 'count' => $results['count'], 'limit' => $groupsperpage, 'offset' => $offset, 'resultcounttextsingular' => get_string('group', 'group'), 'resultcounttextplural' => get_string('groups', 'group'))); group_prepare_usergroups_for_display($results['groups'], 'mygroups'); $smarty = smarty(); $smarty->assign('groups', $results['groups']); $smarty->assign('cancreate', group_can_create_groups()); $smarty->assign('form', $form); $smarty->assign('filter', $filter); $smarty->assign('pagination', $pagination['html']); $smarty->assign('searchingforgroups', array('<a href="' . get_config('wwwroot') . 'group/find.php">', '</a>')); $smarty->assign('PAGEHEADING', TITLE); $smarty->display('group/mygroups.tpl'); function filter_submit(Pieform $form, $values) { redirect('/group/mygroups.php?filter=' . $values['options'] . (!empty($values['groupcategory']) ? '&groupcategory=' . intval($values['groupcategory']) : '')); }