.
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();
}
?>