Files
ecoles/api/effectifs.php
T
Arnaud 5633969d98 Version initiale — carte des établissements scolaires
Carte Leaflet (annuaire Éducation nationale) + API PHP/MySQL :
fiche établissement (effectifs, IPS, population INSEE, DPE ADEME),
GED documents/photos, commentaires par groupe, gestion utilisateurs
et politique de mots de passe. Imports opendata (effectifs, IPS,
population, DPE, IRIS).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 21:35:41 +02:00

83 lines
3.1 KiB
PHP

<?php
/**
* Historique des effectifs et nombres de classes d'une école (1er degré).
* GET ?uai=UAI → [ { annee, eleves, classes }, ... ] trié par année croissante
* GET ?action=commune&uai=UAI → [ { annee, eleves }, ... ] effectifs cumulés de la commune
* de l'établissement (somme de toutes ses écoles par année)
* GET ?action=latest (POST) → { uai: eleves } dernier effectif (batch)
*
* Source : dataset « fr-en-ecoles-effectifs-nb_classes » (cf. import_effectifs.php).
*/
declare(strict_types=1);
require __DIR__ . '/db.php';
try {
// Effectifs cumulés de la commune : somme des élèves des écoles PUBLIQUES
// de la même commune (com + depc), par année.
if (($_GET['action'] ?? '') === 'commune') {
$uai = trim((string) ($_GET['uai'] ?? ''));
if ($uai === '') {
json_error('Paramètre uai requis.');
}
$e = db()->prepare('SELECT com, depc FROM etablissements WHERE id = ?');
$e->execute([$uai]);
$loc = $e->fetch();
if (!$loc || $loc['com'] === null || $loc['depc'] === null) {
json_out([]);
}
$st = db()->prepare(
"SELECT ef.annee, SUM(ef.eleves) AS eleves
FROM effectifs ef
JOIN etablissements e ON e.id = ef.uai
WHERE e.com = ? AND e.depc = ? AND e.stat = 'Public'
GROUP BY ef.annee
ORDER BY ef.annee"
);
$st->execute([$loc['com'], $loc['depc']]);
$out = [];
foreach ($st as $r) {
$out[] = ['annee' => (int) $r['annee'], 'eleves' => (int) $r['eleves']];
}
json_out($out);
}
// Batch : dernier effectif connu pour une liste d'UAI → { uai: eleves }.
if (($_GET['action'] ?? '') === 'latest') {
$uais = body_json()['uais'] ?? [];
if (!is_array($uais) || !$uais) {
json_out([]);
}
$uais = array_slice(array_values(array_unique(array_map('strval', $uais))), 0, 5000);
$ph = implode(',', array_fill(0, count($uais), '?'));
$sql = "SELECT ef.uai, ef.eleves
FROM effectifs ef
JOIN (SELECT uai, MAX(annee) AS y FROM effectifs WHERE uai IN ($ph) GROUP BY uai) m
ON m.uai = ef.uai AND m.y = ef.annee";
$st = db()->prepare($sql);
$st->execute($uais);
$out = [];
foreach ($st as $r) {
$out[$r['uai']] = (int) $r['eleves'];
}
json_out($out);
}
$uai = trim((string) ($_GET['uai'] ?? ''));
if ($uai === '') {
json_error('Paramètre uai requis.');
}
$st = db()->prepare('SELECT annee, eleves, classes FROM effectifs WHERE uai = ? ORDER BY annee');
$st->execute([$uai]);
$out = [];
foreach ($st as $r) {
$out[] = [
'annee' => (int) $r['annee'],
'eleves' => (int) $r['eleves'],
'classes' => (int) $r['classes'],
];
}
json_out($out);
} catch (Throwable $e) {
json_error('Erreur : ' . $e->getMessage(), 500);
}