. include_once("../inc/boinc_db.inc"); include_once("../inc/util.inc"); include_once("../inc/team.inc"); include_once("../inc/team_types.inc"); include_once("../inc/xml.inc"); if (DISABLE_TEAMS) error_page("Teams are disabled"); check_get_args(array("keywords", "active", "country", "type", "submit", "xml")); // Merge list1 into list2. // list entries are of the form id => team, // where team includes a field "refcnt". // function merge_lists($list1, &$list2, $weight) { foreach($list1 as $team) { $id = $team->id; if (array_key_exists($id, $list2)) { $list2[$id]->refcnt += $weight; } else { $list2[$id] = $team; $list2[$id]->refcnt = $weight; } } } function compare($t1, $t2) { if ($t1->refcnt > $t2->refcnt) return -1; if ($t1->refcnt < $t2->refcnt) return 1; if ($t1->rnd > $t2->rnd) return -1; if ($t1->rnd < $t2->rnd) return 1; return 0; } // Sort list by decreasing refcnt // function sort_list(&$list) { foreach ($list as $a=>$b) { $b->rnd = rand(); } usort($list, 'compare'); } function get_teams($clause, $active) { $c2 = ''; if ($active) $c2 = "and expavg_credit>0.1"; $x = BoincTeam::enum("$clause $c2 order by expavg_credit desc limit 20"); foreach ($x as $t) { $t->refcnt = 0; } return $x; } function show_list($list) { start_table(); echo " ".tra("Team name")." "; if (defined("SHOW_NONVALIDATED_TEAMS")) { echo "Validated?\n"; } echo " ".tra("Description")." ".tra("Average credit")." ".tra("Type")." ".tra("Country")." "; $i = 0; foreach ($list as $team) { $type = team_type_name($team->type); $j = $i++ % 2; echo " id>$team->name "; if (defined("SHOW_NONVALIDATED_TEAMS")) { $user = BoincUser::lookup_id($team->userid); echo ""; echo $user->email_validated?"Yes":"No"; echo "\n"; } echo "

".sanitize_html($team->description)."

".format_credit($team->expavg_credit)." $type $team->country "; } echo ""; } function show_teams_html($list, $params) { page_head(tra("Team search results")); if (sizeof($list) == 0) { echo tra("No teams were found matching your criteria. Try another search.") ."

" .tra("Or you can %1create a new team%2.", "", "") ."

\n"; team_search_form($params); } else { echo tra("The following teams match one or more of your search criteria. To join a team, click its name to go to the team page, then click %1Join this team%2.", "", "") ."

"; sort_list($list); show_list($list); echo "

".tra("Change your search")."

"; team_search_form($params); } page_tail(); } function show_teams_xml($list) { xml_header(); echo "\n"; sort_list($list); foreach($list as $team) { show_team_xml($team); } echo "\n"; } function search($params) { $list = array(); $tried = false; if (strlen($params->keywords)) { $kw = BoincDb::escape_string($params->keywords); $name_lc = strtolower($kw); $list2 = get_teams("name='$name_lc'", $params->active); merge_lists($list2, $list, 20); $name_lc = escape_pattern($name_lc); $list2 = get_teams("name like '".$name_lc."%'", $params->active); merge_lists($list2, $list, 5); $list2 = get_teams("match(name) against ('$kw')", $params->active); merge_lists($list2, $list, 5); $list2 = get_teams("match(name, description) against ('$kw')", $params->active); //echo "
keyword matches: ",sizeof($list2); merge_lists($list2, $list, 3); $tried = true; } if (strlen($params->country) && $params->country!='None') { $country = BoincDb::escape_string($params->country); $list2 = get_teams("country = '$country'", $params->active); //echo "
country matches: ",sizeof($list2); merge_lists($list2, $list, 1); $tried = true; } if ($params->type and $params->type>1) { $list2 = get_teams("type=$params->type", $params->active); //echo "
type matches: ",sizeof($list2); merge_lists($list2, $list, 2); $tried = true; } if (!$tried) { $list = get_teams("id>0", $params->active); } return $list; } $user = get_logged_in_user(false); $submit = get_str("submit", true); $xml = get_str("xml", true); if ($submit || $xml) { $params = new StdClass; $params->keywords = get_str('keywords', true); $params->country = get_str("country", true); $params->type = get_int("type", true); $params->active = get_str('active', true); $list = search($params); if ($xml) { show_teams_xml($list); } else { show_teams_html($list, $params); } } else { page_head(tra("Find a team"), 'document.form.keywords.focus()'); echo tra("You can team up with other people with similar interests, or from the same country, company, or school.") ."

" .tra("Use this form to find teams that might be right for you.") ."

\n"; team_search_form(null); if (isset($_COOKIE['init'])) { echo "

".tra("%1I'm not interested%2 in joining a team right now.", "", ""); } page_tail(); } ?>