Remove the unneeded configuration params for timeslots from the scheduler

Separate the 'requirement check' into a separate file and run it on both the config  page, and as a double check on the actual annealer page incase they decide to manually type in the address or bookmark or somkething.
This commit is contained in:
james 2006-01-31 22:34:04 +00:00
parent 6832bdc572
commit c5e55fad37
4 changed files with 200 additions and 159 deletions

View File

@ -24,6 +24,16 @@
<?
require("../common.inc.php");
auth_required('admin');
require("judges_schedulerconfig_check.inc.php");
send_header("Judging teams automatic scheduler");
$ok=checkPrerequisites();
if(!$ok)
{
echo error(i18n("Schduler cannot run until the above problems are resolved. Use the links below each error to resolve the problem"));
send_footer();
exit;
}
function TRACE() { }
//function TRACE($str) { print($str); }
@ -308,7 +318,10 @@ function judges_assign_anneal($divisions, $categories, $languages, $judges, &$te
$q=mysql_query("SELECT * FROM projectdivisions WHERE year='".$config['FAIRYEAR']."' ORDER BY id");
while($r=mysql_fetch_object($q))
{
$divshort[$r->id]=$r->division_shortform;
$div[$r->id]=$r->division;
}
$q=mysql_query("SELECT * FROM projectcategories WHERE year='".$config['FAIRYEAR']."' ORDER BY id");
while($r=mysql_fetch_object($q))
@ -513,7 +526,6 @@ judges_assign_anneal($div,$cat, $langr, $judges, $team, $data);
//print_r( $team);
$teamnums=array();
send_header("Judging teams automatic scheduler");
echo i18n("Judging teams successfully created. You can review the teams and modify as desired using the following links");
echo "<br />";
echo "<br />";
@ -536,7 +548,7 @@ while(list($tn, $t) = each($team)) {
if(!$teamnums[$t['division']][$t['category']]) $teamnums[$t['division']][$t['category']]=1;
else $teamnums[$t['division']][$t['category']]++;
mysql_query("INSERT INTO judges_teams (num,name,autocreate_type_id,year) VALUES ('$tn','(Divisional) {$div[$t['division']]} - {$cat[$t['category']]} #{$teamnums[$t['division']][$t['category']]} ({$t['language']})','1','{$config['FAIRYEAR']}')");
mysql_query("INSERT INTO judges_teams (num,name,autocreate_type_id,year) VALUES ('$tn','(Div) {$divshort[$t['division']]} - {$cat[$t['category']]} #{$teamnums[$t['division']][$t['category']]} ({$t['language']})','1','{$config['FAIRYEAR']}')");
$team_id=mysql_insert_id();
//use tn-1 since we incremented it at the top :p
$team[$tn-1]['team_id']=$team_id;

View File

@ -24,7 +24,8 @@
<?
require("../common.inc.php");
auth_required('admin');
include "judges.inc.php";
require("judges.inc.php");
require("judges_schedulerconfig_check.inc.php");
send_header("Administration - Judge Scheduler Configuration");
@ -78,161 +79,10 @@
echo "</table>";
echo "<input type=\"submit\" value=\"".i18n("Save Configuration")."\" />\n";
echo "</form>";
echo "<hr />";
echo i18n("Based on your configuration data above, here are some calculations");
echo "<br />";
$totalteams=0;
$catq=mysql_query("SELECT * FROM projectcategories WHERE year='{$config['FAIRYEAR']}' ORDER BY mingrade");
while($catr=mysql_fetch_object($catq))
{
echo "<h3>$catr->category</h3>";
echo "<table>";
echo "<tr><th>Division</th><th>Projects</th><th>Teams</th></tr>";
$divq=mysql_query("SELECT * FROM projectdivisions WHERE year='{$config['FAIRYEAR']}' ORDER BY id");
while($divr=mysql_fetch_object($divq))
{
$langq=mysql_query("SELECT * FROM languages WHERE active='Y'");
while($langr=mysql_fetch_object($langq))
{
$numq=mysql_query("SELECT COUNT(id) AS num FROM projects WHERE projectcategories_id='$catr->id' AND projectdivisions_id='$divr->id' AND year='{$config['FAIRYEAR']}' AND language='$langr->lang'");
$numr=mysql_fetch_object($numq);
echo "<tr><td>".i18n($divr->division)." ($langr->lang)</td>";
echo "<td align=\"center\">$numr->num</td>";
$numteams=ceil($numr->num/$schedulerconfig['max_projects_per_team']*$schedulerconfig['num_times_judged']);
if($numteams<$schedulerconfig['num_times_judged']) $numteams=$schedulerconfig['num_times_judged'];
echo "<td align=\"center\">$numteams</td>";
$totalteams+=$numteams;
echo "</tr>";
}
}
echo "</table>";
echo "<br />";
echo "<br />";
}
echo "<b>";
echo "Total judging teams required: $totalteams";
echo "<br />";
$minjudges=($totalteams*$schedulerconfig['min_judges_per_team']);
$maxjudges=($totalteams*$schedulerconfig['max_judges_per_team']);
echo "Minimum number of judges required: $minjudges";
echo "<br />";
echo "Maximum number of judges acceptable: $maxjudges";
echo "<br />";
$jq=mysql_query("SELECT COUNT(judges.id) AS num FROM judges,judges_years WHERE complete='yes' AND judges_years.year='{$config['FAIRYEAR']}' AND judges_years.judges_id=judges.id");
$jr=mysql_fetch_object($jq);
$currentjudges=$jr->num;
echo "Current number of registered judges: $currentjudges";
echo "<br />";
echo "<br />";
$ok=true;
if($currentjudges<$minjudges)
{
echo error(i18n("You do not have sufficient number of judges based on your parameters"));
$ok=false;
}
else
echo happy(i18n("You have a sufficient number of judges based on your parameters"));
//now check if we can find a divisional award for each division and category
$q=mysql_query("SELECT * FROM projectdivisions WHERE year='".$config['FAIRYEAR']."' ORDER BY id");
while($r=mysql_fetch_object($q))
$div[$r->id]=$r->division;
$q=mysql_query("SELECT * FROM projectcategories WHERE year='".$config['FAIRYEAR']."' ORDER BY id");
while($r=mysql_fetch_object($q))
$cat[$r->id]=$r->category;
$foundawards="";
$notfoundawards="";
$foundteams="";
foreach($div AS $d_id=>$d_division)
{
foreach($cat AS $c_id=>$c_category)
{
$q=mysql_query("SELECT award_awards.id FROM
award_awards,
award_awards_projectcategories,
award_awards_projectdivisions
WHERE
award_awards.year='{$config['FAIRYEAR']}'
AND award_awards_projectcategories.year='{$config['FAIRYEAR']}'
AND award_awards_projectdivisions.year='{$config['FAIRYEAR']}'
AND award_awards.id=award_awards_projectcategories.award_awards_id
AND award_awards.id=award_awards_projectdivisions.award_awards_id
AND award_awards_projectcategories.projectcategories_id='$c_id'
AND award_awards_projectdivisions.projectdivisions_id='$d_id'
AND award_awards.award_types_id='1'
");
echo mysql_error();
if(mysql_num_rows($q)!=1)
{
while($r=mysql_fetch_object($q))
print_r($r);
$notfoundawards.="$c_category - $d_division, ";
$ok=false;
}
else
{
$r=mysql_fetch_object($q);
$foundawards.="$c_category - $d_division, ";
//if we found an award thats good, but it would be bad if there's already a judges team
//that is assigned to the award, so now lets check the judges teams to see if ones assigned
//to this award.
$q=mysql_query("SELECT judges_teams.num,judges_teams.name
FROM judges_teams,
judges_teams_awards_link
WHERE
judges_teams_awards_link.award_awards_id='$r->id'
AND judges_teams.year='".$config['FAIRYEAR']."'
AND judges_teams_awards_link.judges_teams_id=judges_teams.id");
if(mysql_num_rows($q))
{
$r=mysql_fetch_object($q);
$ok=false;
$foundteams.=i18n("(%1) %2, ",array($r->num,$r->name));
}
}
}
}
$notfoundawards=substr($notfoundawards,0,-2);
$foundawards=substr($foundawards,0,-2);
$foundteams=substr($foundteams,0,-2);
if($notfoundawards)
echo error(i18n("Cannot find awards for: %1. These awards must be created first",array($notfoundawards)));
if($foundawards)
echo happy(i18n("Found awards for: %1",array($foundawards)));
if($foundteams)
{
echo error(i18n("Found judging teams that are currently assigned to divisional awards: %1. These teams must be removed first",array($foundteams)));
echo "&nbsp;&nbsp;<a href=\"judges_teams.php\">".i18n("Judging Teams Manager")."</a>";
}
else
echo happy(i18n("No judging teams are assigned to divisional awards (good!)"));
//now check if we have enough timeslots available...
$q=mysql_query("SELECT COUNT(id) AS num FROM judges_timeslots WHERE year='".$config['FAIRYEAR']."' AND allowdivisional='yes'");
$r=mysql_fetch_object($q);
$numslots=$r->num;
if($numslots<$schedulerconfig['max_projects_per_team'])
{
echo error(i18n("You do not have enough judging timeslots available for divisional judging. Please create more timeslots first. Available: %1, Required: %2",array($numslots,$schedulerconfig['max_projects_per_team'])));
echo "&nbsp;&nbsp;<a href=\"judges_timeslots.php\">".i18n("Timeslot Manager")."</a>";
$ok=false;
}
else
{
echo happy(i18n("You have sufficient timeslots available. Available: %1, Required: %2",array($numslots,$schedulerconfig['max_projects_per_team'])));
}
//asdf
$ok=checkPrerequisites();
if($ok)
{
@ -240,9 +90,6 @@ if($ok)
echo "<br />";
echo "<br />";
echo error(i18n("WARNING WARNING WARNING WARNING: The Judging Team Scheduler is NOT YET COMPLETE and SHOULD NOT YET BE RELIED UPON! IT IS STILL MISSING KEY COMPONENTS AND DOES NOT YET FULLY UPDATE THE DATABASE WITH ITS RESULTS! USE FOR TESTING ONLY AT YOUR OWN RISK!"));
echo "<br />";
echo "<a href=\"judges_sa.php\">".i18n("Create Divisional Awards Judging Teams")."</a>";

View File

@ -0,0 +1,180 @@
<?
function checkPrerequisites()
{
global $config;
$q=mysql_query("SELECT * FROM judges_schedulerconfig WHERE year='".$config['FAIRYEAR']."' ORDER BY var");
$schedulerconfig=array();
while($r=mysql_fetch_object($q))
{
$schedulerconfig[$r->var]=$r->val;
}
echo i18n("Based on your configuration data above, here are some calculations");
echo "<br />";
$totalteams=0;
$catq=mysql_query("SELECT * FROM projectcategories WHERE year='{$config['FAIRYEAR']}' ORDER BY mingrade");
while($catr=mysql_fetch_object($catq))
{
echo "<h3>$catr->category</h3>";
echo "<table>";
echo "<tr><th>Division</th><th>Projects</th><th>Teams</th></tr>";
$divq=mysql_query("SELECT * FROM projectdivisions WHERE year='{$config['FAIRYEAR']}' ORDER BY id");
while($divr=mysql_fetch_object($divq))
{
$langq=mysql_query("SELECT * FROM languages WHERE active='Y'");
while($langr=mysql_fetch_object($langq))
{
$numq=mysql_query("SELECT COUNT(id) AS num FROM projects WHERE projectcategories_id='$catr->id' AND projectdivisions_id='$divr->id' AND year='{$config['FAIRYEAR']}' AND language='$langr->lang'");
$numr=mysql_fetch_object($numq);
echo "<tr><td>".i18n($divr->division)." ($langr->lang)</td>";
echo "<td align=\"center\">$numr->num</td>";
$numteams=ceil($numr->num/$schedulerconfig['max_projects_per_team']*$schedulerconfig['num_times_judged']);
if($numteams<$schedulerconfig['num_times_judged']) $numteams=$schedulerconfig['num_times_judged'];
echo "<td align=\"center\">$numteams</td>";
$totalteams+=$numteams;
echo "</tr>";
}
}
echo "</table>";
echo "<br />";
echo "<br />";
}
echo "<b>";
echo "Total judging teams required: $totalteams";
echo "<br />";
$minjudges=($totalteams*$schedulerconfig['min_judges_per_team']);
$maxjudges=($totalteams*$schedulerconfig['max_judges_per_team']);
echo "Minimum number of judges required: $minjudges";
echo "<br />";
echo "Maximum number of judges acceptable: $maxjudges";
echo "<br />";
$jq=mysql_query("SELECT COUNT(judges.id) AS num FROM judges,judges_years WHERE complete='yes' AND judges_years.year='{$config['FAIRYEAR']}' AND judges_years.judges_id=judges.id");
$jr=mysql_fetch_object($jq);
$currentjudges=$jr->num;
echo "Current number of registered judges: $currentjudges";
echo "<br />";
echo "<br />";
$ok=true;
if($currentjudges<$minjudges)
{
echo error(i18n("You do not have sufficient number of judges based on your parameters"));
echo "&nbsp;&nbsp;";
echo "<a href=\"judges_schedulerconfig.php\">".i18n("Update Scheduler Configuration")."</a> (".i18n("or get more judges!").")";
$ok=false;
}
else
echo happy(i18n("You have a sufficient number of judges based on your parameters"));
//now check if we can find a divisional award for each division and category
$q=mysql_query("SELECT * FROM projectdivisions WHERE year='".$config['FAIRYEAR']."' ORDER BY id");
while($r=mysql_fetch_object($q))
$div[$r->id]=$r->division;
$q=mysql_query("SELECT * FROM projectcategories WHERE year='".$config['FAIRYEAR']."' ORDER BY id");
while($r=mysql_fetch_object($q))
$cat[$r->id]=$r->category;
$foundawards="";
$notfoundawards="";
$foundteams="";
foreach($div AS $d_id=>$d_division)
{
foreach($cat AS $c_id=>$c_category)
{
$q=mysql_query("SELECT award_awards.id FROM
award_awards,
award_awards_projectcategories,
award_awards_projectdivisions
WHERE
award_awards.year='{$config['FAIRYEAR']}'
AND award_awards_projectcategories.year='{$config['FAIRYEAR']}'
AND award_awards_projectdivisions.year='{$config['FAIRYEAR']}'
AND award_awards.id=award_awards_projectcategories.award_awards_id
AND award_awards.id=award_awards_projectdivisions.award_awards_id
AND award_awards_projectcategories.projectcategories_id='$c_id'
AND award_awards_projectdivisions.projectdivisions_id='$d_id'
AND award_awards.award_types_id='1'
");
echo mysql_error();
if(mysql_num_rows($q)!=1)
{
while($r=mysql_fetch_object($q))
print_r($r);
$notfoundawards.="$c_category - $d_division, ";
$ok=false;
}
else
{
$r=mysql_fetch_object($q);
$foundawards.="$c_category - $d_division, ";
//if we found an award thats good, but it would be bad if there's already a judges team
//that is assigned to the award, so now lets check the judges teams to see if ones assigned
//to this award.
$q=mysql_query("SELECT judges_teams.num,judges_teams.name
FROM judges_teams,
judges_teams_awards_link
WHERE
judges_teams_awards_link.award_awards_id='$r->id'
AND judges_teams.year='".$config['FAIRYEAR']."'
AND judges_teams_awards_link.judges_teams_id=judges_teams.id");
if(mysql_num_rows($q))
{
$r=mysql_fetch_object($q);
$ok=false;
$foundteams.=i18n("(%1) %2, ",array($r->num,$r->name));
}
}
}
}
$notfoundawards=substr($notfoundawards,0,-2);
$foundawards=substr($foundawards,0,-2);
$foundteams=substr($foundteams,0,-2);
if($notfoundawards)
{
echo error(i18n("Cannot find awards for: %1. These awards must be created first",array($notfoundawards)));
echo "&nbsp;&nbsp;";
echo "<a href=\"awards.php\">".i18n("Awards Manager")."</a>";
}
if($foundawards)
echo happy(i18n("Found awards for: %1",array($foundawards)));
if($foundteams)
{
echo error(i18n("Found judging teams that are currently assigned to divisional awards: %1. These teams must be removed first",array($foundteams)));
echo "&nbsp;&nbsp;<a href=\"judges_teams.php\">".i18n("Judging Teams Manager")."</a>";
}
else
echo happy(i18n("No judging teams are assigned to divisional awards (good!)"));
//now check if we have enough timeslots available...
$q=mysql_query("SELECT COUNT(id) AS num FROM judges_timeslots WHERE year='".$config['FAIRYEAR']."' AND allowdivisional='yes'");
$r=mysql_fetch_object($q);
$numslots=$r->num;
if($numslots<$schedulerconfig['max_projects_per_team'])
{
echo error(i18n("You do not have enough judging timeslots available for divisional judging. Please create more timeslots first. Available: %1, Required: %2",array($numslots,$schedulerconfig['max_projects_per_team'])));
echo "&nbsp;&nbsp;<a href=\"judges_timeslots.php\">".i18n("Timeslot Manager")."</a>";
$ok=false;
}
else
{
echo happy(i18n("You have sufficient timeslots available. Available: %1, Required: %2",array($numslots,$schedulerconfig['max_projects_per_team'])));
}
//asdf
return $ok;
}
?>

View File

@ -4,3 +4,5 @@ ALTER TABLE `projects` ADD `summarycountok` TINYINT( 1 ) DEFAULT '1' NOT NULL AF
ALTER TABLE `judges_timeslots` ADD `allowdivisional` ENUM( 'no', 'yes' ) DEFAULT 'no' NOT NULL AFTER `endtime` ;
ALTER TABLE `schools` ADD `board` VARCHAR( 64 ) NOT NULL AFTER `school`;
ALTER TABLE `schools` ADD `district` VARCHAR( 64 ) NOT NULL AFTER `board`;
DELETE FROM `judges_schedulerconfig` WHERE var='timeslot_length';
DELETE FROM `judges_schedulerconfig` WHERE var='timeslot_break';