5633969d98
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>
83 lines
3.1 KiB
PHP
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);
|
|
}
|