function genSchoolCertificates($schoolID) { shell_exec("rm -rf " . CERTIGEN_EXPORTDIR . "/" . $schoolID); mkdir(CERTIGEN_EXPORTDIR . "/" . $schoolID, $code = 0777, $recursive = true); list($aGroups, $aContestants) = getGroupsAndContestants($schoolID); $nbStudents = count($aContestants); if ($nbStudents == 0) { return 0; } foreach ($aContestants as $contestant) { $contestant->Group->certificates .= getHtmlCertificate($contestant); $contestant->Group->contestants[] = $contestant; } $groupsHtml = ""; foreach ($aGroups as $groupID => $group) { $groupHtml = getGroupContestantsList($group, $schoolID); $groupHtml .= $group->certificates; $groupFullHtml = file_get_contents("school_template.html"); $groupFullHtml = str_replace("{groups}", $groupHtml, $groupFullHtml); file_put_contents("certificates_group.html", $groupFullHtml); $groupPdf = CERTIGEN_EXPORTDIR . '/' . CertiGen::getGroupOutput($groupID, $schoolID) . '.pdf'; shell_exec("bash wkhtmltopdf.sh -O landscape -T 5 -B 5 certificates_group.html " . $groupPdf); $groupsHtml .= $groupHtml; } $schoolHtml = file_get_contents("school_template.html"); $schoolHtml = str_replace("{groups}", $groupsHtml, $schoolHtml); file_put_contents("certificates_school.html", $schoolHtml); $outPdf = CERTIGEN_EXPORTDIR . '/' . CertiGen::getSchoolOutput($schoolID) . '.pdf'; shell_exec("bash wkhtmltopdf.sh -O landscape -T 5 -B 5 certificates_school.html " . $outPdf); return $nbStudents; }
if (!isset($_SESSION["userID"])) { echo "Votre session a expiré, veuillez vous reconnecter."; exit; } if (!isset($_REQUEST["action"])) { echo "Erreur d'appel de la page."; exit; } header("Content-Type: application/json; charset=utf-8"); $aSchools = getGroupsData(); if ($_REQUEST["action"] != "state") { if (!(isset($_REQUEST["schoolID"]) && in_array($_REQUEST["schoolID"], array_keys($aSchools)))) { echo "Etablissement invalide"; exit; } if ($_REQUEST["action"] == "add") { CertiGen::queueAdd($_REQUEST["schoolID"]); } if ($_REQUEST["action"] == "cancel") { CertiGen::queueCancel($_REQUEST["schoolID"]); } // When the queue is modified we want to immediately return the state // This allows us to have one less request and an immediate update of the page $_REQUEST["action"] = "state"; } // We only want to know the current state of each school if ($_REQUEST["action"] == "state") { $aSchools = getStates($aSchools); echo json_encode($aSchools); exit; }
function getStates($aSchools) { foreach ($aSchools as &$school) { $state = CertiGen::queueState($school->id); if (!$state) { continue; } // $state->state = "FINISHED"; $school->nbGroups = count($school->groups); $school->nbStudents = $state->nbStudents; $school->state = $state->state; $school->requestDate = $state->requestDate; $school->startDate = $state->startDate; $school->endDate = $state->endDate; $school->waitTime = round(intval($state->nbWaiting) * floatval($state->avgTimePerStudent) / 60); $school->nbWaiting = $state->nbWaiting; $school->avgTimePerStudent = $state->avgTimePerStudent; // The list of groups is not needed if ($school->state != CertiGen::$STATE_FINISHED) { unset($school->groups); } } return $aSchools; }
/* Copyright (c) 2012 Association France-ioi, MIT License http://opensource.org/licenses/MIT */ require_once "../shared/common.php"; require_once "certiCommon.inc.php"; // Defines some global parameters ini_set('display_errors', 1); error_reporting(E_ALL); ini_set('max_execution_time', -1); // Get next request $request = CertiGen::queueGetNext(); if (!$request) { echo "No request to process.\n"; exit(0); } // Let's process the school echo "Treating request {$request->ID} for school {$request->schoolID} ({$request->nbStudents} students).\n"; if (!CertiGen::queueStarted($request->ID)) { echo "Not starting\n"; exit(0); } $time = microtime(true); $nbStudents = genSchoolCertificates($request->schoolID); $time = microtime(true) - $time; echo "{$nbStudents} in {$time} seconds for school " . $request->schoolID . "\n"; if ($nbStudents > 0) { echo $time / $nbStudents . "s / student\n"; } if (!CertiGen::queueFinished($request->ID)) { cleanSchool($request->schoolID); echo "Not finishing\n"; exit(0); }