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>
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
<?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);
|
||||
}
|
||||
Reference in New Issue
Block a user