public static function assignAsYouGo(Expo $expo, Worker $worker)
 {
     if ($expo->scheduleAssignAsYouGo) {
         $workerList = NULL;
         $stationList = NULL;
         $assignmentList = NULL;
         try {
             // needed for all
             $workerList = WorkerSchedule::selectExpo($expo->expoid);
             $stationList = JobSchedule::selectExpo($expo->expoid);
             $assignmentList = ShiftAssignment::selectExpo($expo->expoid);
         } catch (PDOException $ex) {
             logMessage("FirstComeFirstServed", "assignAsYouGo(" . $expo->titleString() . ", " . $worker->email . ") - " . $ex->getMessage());
             return;
         }
         foreach ($workerList as $w) {
             if ($w->workerid == $worker->workerid) {
                 $worker = $w;
                 break;
             }
         }
         // $w
         $aas = new FirstComeFirstServed($expo->expoid, $stationList, $workerList, $assignmentList, TRUE);
         $stationList = NULL;
         $assignmentList = NULL;
         $workerList = NULL;
         $d1 = new DateTime();
         logMessage("FirstComeFirstServed", "**** assignSchedule(" . $expoId . ") ****", $d1->format('H:i'), "\n");
         $aas->assignWorker($worker, $expoId);
         $d2 = new DateTime();
         logMessage("FirstComeFirstServed", "****assignSchedule(" . $expoId . ") ****", $d2->format('H:i'), "  elapsed: ", $d2->getTimestamp() - $d1->getTimestamp(), "\n");
         // $aas->logJobListState("FirstComeFirstServed", "jobs after assignment");
         // $aas->logWorkerListState("FirstComeFirstServed", "workers after assignment");
         AbstractScheduler::commitSchedule($expo->expoid, TRUE, $aas->getSchedule());
     }
     return;
 }
require_once 'db/ShiftAssignment.php';
require_once 'util/log.php';
require_once 'util/session.php';
require_once 'util/ScheduleEnum.php';
require_once 'schedule/AbstractScheduler.php';
require_once 'schedule/FirstComeFirstServed.php';
require_once 'schedule/FirstComeLocationLocked.php';
require_once 'schedule/FirstComeSoftLocationLocked.php';
require_once 'schedule/AssignAndSubtract.php';
require_once 'schedule/JobSchedule.php';
require_once 'schedule/WorkerSchedule.php';
require_once 'swwat/gizmos/parse.php';
$expo = getExpoCurrent();
if (isset($_POST[PARAM_SCHEDULE_PUBLISH]) && isset($_SESSION[PARAM_SCHEDULE_PUBLISH])) {
    $keepFlag = isset($_SESSION[PARAM_SCHEDULE_KEEP]);
    AbstractScheduler::commitSchedule($expo->expoid, $keepFlag, $_SESSION[PARAM_SCHEDULE_PUBLISH]);
    unset($_SESSION[PARAM_SCHEDULE_PUBLISH]);
    unset($_SESSION[PARAM_SCHEDULE_ALGO]);
    unset($_SESSION[PARAM_PAGE_MESSAGE]);
    unset($_SESSION[PARAM_SCHEDULE_KEEP]);
    header('Location: SchedulingReportPage.php');
    include 'SchedulingReportPage.php';
    return;
}
$algorithm = $_POST[PARAM_SCHEDULE_ALGO];
try {
    $algorithm = swwat_parse_enum($algorithm, ScheduleEnum::$ENUM_ARRAY, FALSE);
} catch (ParseSWWATException $ex) {
    header('Location: WorkerLoginPage.php');
    include 'WorkerLoginPage.php';
    return;