forked from science-ation/science-ation
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:
parent
6832bdc572
commit
c5e55fad37
@ -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;
|
||||
|
@ -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 " <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 " <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>";
|
||||
|
||||
|
||||
|
180
admin/judges_schedulerconfig_check.inc.php
Normal file
180
admin/judges_schedulerconfig_check.inc.php
Normal 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 " ";
|
||||
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 " ";
|
||||
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 " <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 " <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;
|
||||
}
|
||||
|
||||
?>
|
@ -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';
|
||||
|
Loading…
x
Reference in New Issue
Block a user