browser: only pull out fields we need
[elgg.git] / mod / browser / lib.php
blob990d644d60a03ff480c811f08179c881d24b8d8d
1 <?php
3 function browser_pagesetup() {
4 // register links --
5 global $profile_id;
6 global $PAGE;
7 global $CFG;
9 $page_owner = $profile_id;
12 if (defined("context") && context == "network") {
13 $PAGE->menu_sub[] = array( 'name' => 'friend',
14 'html' => a_href("{$CFG->wwwroot}mod/browser/index.php" ,
15 __gettext("Browse users and communities")));
21 // Advanced search function
22 function browser_advanced_search($type, $display, $filter) {
24 global $CFG, $db;
25 $sql = "";
27 $filter = preg_replace("/([A-Za-z_0-9]*)\:\:/i", "", $filter);
29 $sort = optional_param('sort', '');
30 $sortcriteria = optional_param('sortcriteria', '');
31 $recent = optional_param('recent','');
33 switch($display) {
35 case "users":
36 $where = " u.user_type = 'person' ";
37 break;
38 case "communities":
39 $where = " u.user_type = 'community' ";
40 break;
41 default:
42 $where = " 1 ";
43 break;
47 $having = '';
48 if ($sort == "yes") {
50 switch($sortcriteria) {
51 case "1-10":
52 $having = " HAVING members > 0 AND members < 11";
53 break;
54 case "11-100":
55 $having = " HAVING members > 10 AND members < 101";
56 break;
57 case "101-1000":
58 $having = " HAVING members > 100 AND members < 1001";
59 break;
60 case "1000":
61 $having = " HAVING members > 1000";
62 break;
67 $formatted_filter = $db->qstr($filter);
68 $formatted_filter_wild = $db->qstr("%" . $filter . "%");
70 $sql = "SELECT u.ident, u.username, u.name, u.icon, u.user_type, COUNT(m.ident) AS members "; // assumes GROUP BY u.ident
71 switch($type) {
73 //wildcards
74 case "name": $sql .= "FROM ".$CFG->prefix."users u JOIN ".$CFG->prefix."friends m ON m.friend = u.ident WHERE $where AND u.name LIKE " . $formatted_filter_wild . " GROUP BY u.ident $having ORDER BY members DESC, name DESC";
75 break;
76 case "schools": $sql .= "FROM ".$CFG->prefix."users u JOIN ".$CFG->prefix."profile_data p ON u.ident = p.owner JOIN ".$CFG->prefix."friends m ON m.friend = u.ident WHERE $where AND p.value LIKE " . $formatted_filter_wild . " AND p.name IN ('highschool', 'university') GROUP BY u.ident $having ORDER BY members DESC, name DESC";
77 break;
79 // equals
80 case "email": $sql .= "FROM ".$CFG->prefix."users u JOIN ".$CFG->prefix."tags t ON u.ident = t.owner JOIN ".$CFG->prefix."friends m ON m.friend = u.ident WHERE $where AND t.tag = " . $formatted_filter . " AND t.tagtype = 'emailaddress' GROUP BY u.ident $having ORDER BY members DESC, name DESC";
81 break;
82 case "interests": $sql .= "FROM ".$CFG->prefix."users u JOIN ".$CFG->prefix."tags t ON u.ident = t.owner JOIN ".$CFG->prefix."friends m ON m.friend = u.ident WHERE $where AND t.tag = " . $formatted_filter . " AND t.tagtype = 'interests' GROUP BY u.ident $having ORDER BY members DESC, name DESC";
83 break;
84 case "expertise": $sql .= "FROM ".$CFG->prefix."users u JOIN ".$CFG->prefix."tags t ON u.ident = t.owner JOIN ".$CFG->prefix."friends m ON m.friend = u.ident WHERE $where AND t.tag = " . $formatted_filter . " AND t.tagtype = 'skills' GROUP BY u.ident $having ORDER BY members DESC, name DESC";
85 break;
86 case "language": $sql .= "FROM ".$CFG->prefix."users u JOIN ".$CFG->prefix."tags t ON u.ident = t.owner JOIN ".$CFG->prefix."friends m ON m.friend = u.ident WHERE $where AND t.tag = " . $formatted_filter . " AND t.tagtype = 'languages' GROUP BY u.ident $having ORDER BY members DESC, name DESC";
87 break;
91 return $sql;