From fefd9c8e3519b47702515ee9fba0d35170412da1 Mon Sep 17 00:00:00 2001 From: james Date: Thu, 26 Jan 2006 15:04:25 +0000 Subject: [PATCH] BUGFIX From Just Reardon: If specialawardnomination is set to "none" (fair doesnt use special award self-nominations) then the pick winners page will instead show all projects that are eligible for the award to choose a winner, instead of those that are nominated for it (which is none). Thanks Justin! --- admin/judges_sa.php | 62 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/admin/judges_sa.php b/admin/judges_sa.php index 87b2978c..3c4baafd 100644 --- a/admin/judges_sa.php +++ b/admin/judges_sa.php @@ -25,9 +25,7 @@ require("../common.inc.php"); auth_required('admin'); -function TRACE() -{ -} +function TRACE() { } //function TRACE($str) { print($str); } function TRACE_R() { @@ -68,25 +66,30 @@ function pick_random_move(&$team) } /* The cost function is: - + 200 * each judge below the min for each team - + 100 * each judge above the max for each team - + -20 * each level of preference away from the + + 20 * each judge below the min for each team + + 10 * each judge above the max for each team + + 2 * each level of preference away from the max level for each judge + + 50 if the team doesn't have a chair. + + 25 for each memember on the team that can't speak the language + of the judging team ( ex: if a judge has selected LS->2, PS->0, CS->-1 then matching that judge with a: - LS = -40, + LS = -4, PS = 0, - CS = -20, + CS = -2, else = 0 ) */ /* Compute the cost of adding a judge to a team */ + function compute_team_cost(&$teams, &$judges, $team_id) { $cost = 0; - + $have_chair = 0; + $t =& $teams[$team_id]; /* Compute the over max / under min costs */ @@ -101,7 +104,7 @@ function compute_team_cost(&$teams, &$judges, $team_id) /* For each judge on the team, score their preferences */ reset($t['judges']); while( list($key, $judge_id) = each($t['judges']) ) { - $j = $judges[$judge_id]; + $j =& $judges[$judge_id]; /* Get the division, and see where it fits with this * judges preferences */ @@ -112,6 +115,20 @@ function compute_team_cost(&$teams, &$judges, $team_id) $cost += 2 * (-$dpref + 2); $cost += 2 * (-$cpref + 2); + + /* See if the judge is willing to chair a team */ + if($j['willing_chair'] == 'yes') { + $have_chair = 1; + } + + /* Check the language preferences */ + if(!in_array($t['language'], $j['languages'])) { + $cost += 25; + } + } + /* Huge penalty for a team without a willing chair */ + if(!$have_chair) { + $cost += 50; } TRACE("Team $team_id, cost is $cost\n"); @@ -382,7 +399,7 @@ foreach($div AS $d_id=>$d_val) $p = $jdivisions[$d_id][$c_id][$l_id][$x]; TRACE(" project=$p \n\n"); - TRACE("This projects has ".(count($data['projects'][$p]['timetable']))." judging teams\n"); + TRACE("This project has ".(count($data['projects'][$p]['timetable']))." judging teams\n"); /* See if this project needs more judges */ if(count($data['projects'][$p]['timetable']) == $data['num_times_judged']) { @@ -426,7 +443,9 @@ foreach($div AS $d_id=>$d_val) if($j==$numteams) $j=0; } $x++; - if(count($teams_at_this_ts) == $numteams) { + /* If we've used all the judging temas, of we've assigned judges equal + * to the number of projects, it's time for the next timeslot */ + if(count($teams_at_this_ts) == $numteams || count($teams_at_this_ts) == $num) { $ts++; $teams_at_this_ts = array(); if($ts > $max_ts) $max_ts = $ts; @@ -452,6 +471,7 @@ while($r=mysql_fetch_object($q)) { unset($divprefs); unset($catprefs); + unset($langprefs); //get category preferences $q2=mysql_query("SELECT * FROM judges_catpref WHERE judges_id='$r->id' AND year='".$config['FAIRYEAR']."' ORDER BY projectcategories_id"); @@ -466,6 +486,12 @@ while($r=mysql_fetch_object($q)) while($r2=mysql_fetch_object($q2)) $divprefs[$r2->projectdivisions_id]=$r2->val-3; + $langperfs = array(); + $q3=mysql_query("SELECT * from judges_languages WHERE judges_id='$r->id'"); + while($r3=mysql_fetch_object($q3)) + $langprefs[]=$r3->languages_lang; + + $judges[]=array( "judges_id"=>"$r->id", "name"=>"$r->firstname $r->lastname", @@ -474,7 +500,8 @@ while($r=mysql_fetch_object($q)) "years_national"=>$r->years_national, "willing_chair"=>$r->willing_chair, "divprefs"=>$divprefs, - "catprefs"=>$catprefs + "catprefs"=>$catprefs, + "languages"=>$langprefs ); } @@ -525,6 +552,7 @@ while(list($tn, $t) = each($team)) { $tn++; print("Team $tn: ({$div[$t['division']]}({$t['division']}),{$cat[$t['category']]}({$t['category']})) ". + "(lang:{$t['language']} ". "(cost:{$t['cost']} )
\n"); $totalcost+=$t['cost']; @@ -536,7 +564,13 @@ while(list($tn, $t) = each($team)) { while(list($key, $j) = each($t['judges']) ) { $judge = $judges[$j]; - print("   {$judge['name']}
\n"); + print("   {$judge['name']}"); + if($judge['willing_chair']=='yes') print("(chair)"); + while(list($k, $l) = each($judge['languages']) ) { + print(" $l "); + } + print("
\n"); + mysql_query("INSERT INTO judges_teams_link (judges_id,judges_teams_id,captain,year) VALUES ('{$judge['judges_id']}','$team_id','{$judge['willing_chair']}','{$config['FAIRYEAR']}')"); }