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;
}
예제 #2
0
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);
}