Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
ed16ff3
Tes #1
PibouleauJB Mar 9, 2026
f2b7a2f
fr: feat: implémentation du pipeline de clustering avec Doc2Vec, KMea…
PibouleauJB Mar 9, 2026
eb3be36
Fix #1
PibouleauJB Mar 9, 2026
43740f8
Fix #2
PibouleauJB Mar 9, 2026
91a3838
Fix #3
PibouleauJB Mar 9, 2026
73fe369
Fix #4
PibouleauJB Mar 9, 2026
c25c646
Fix #4b
PibouleauJB Mar 9, 2026
5f75e04
Fix #4c
PibouleauJB Mar 9, 2026
b861c9a
Fix #4d
PibouleauJB Mar 9, 2026
939f4f3
Fix #4e
PibouleauJB Mar 9, 2026
161561d
Fix #5
PibouleauJB Mar 9, 2026
9a1d976
Fix #5b
PibouleauJB Mar 9, 2026
135f25b
Fix #5c
PibouleauJB Mar 9, 2026
c66aa53
Fix #6
PibouleauJB Mar 9, 2026
2f90d4b
fr: Ajout des modes d'analyse macro et micro au pipeline de clustering
PibouleauJB Mar 9, 2026
ddab364
Fix #1
PibouleauJB Mar 10, 2026
d36fa28
Fix #1b
PibouleauJB Mar 10, 2026
2964705
Fix #1c
PibouleauJB Mar 10, 2026
e127d25
fr: Amélioration de la normalisation et des paramètres t-SNE dans le …
PibouleauJB Mar 10, 2026
4021746
fr: Remplacement de n_iter par max_iter dans le pipeline de clustering
PibouleauJB Mar 10, 2026
4675474
On passe à la partie interface et API ! Voici votre message de commit…
PibouleauJB Mar 11, 2026
bf62f46
fr: Ajout de la vérification des données AES pour la ressource dans l…
PibouleauJB Mar 11, 2026
188fe5f
Revert "fr: Ajout de la vérification des données AES pour la ressourc…
PibouleauJB Mar 11, 2026
d554131
Revert "On passe à la partie interface et API ! Voici votre message d…
PibouleauJB Mar 11, 2026
be54ce9
fr: feat : Fusion IA, ajout de l'IA avec routes, contrôleur et pipeli…
PibouleauJB Mar 11, 2026
98ccfc5
C'est reçu, je réintègre les codes binaires et morse à la liste pour …
PibouleauJB Mar 11, 2026
d6fbe9d
fr: refactor : suppression du pipeline de clustering obsolète et des …
PibouleauJB Mar 11, 2026
8e584cd
fr: feat: amélioration de la visualisation des clusters avec une pale…
PibouleauJB Mar 11, 2026
23720b1
feat: ajout de la structure de la base de données et amélioration de …
PibouleauJB Mar 11, 2026
f86c137
fix: remove unnecessary whitespace and improve code formatting across…
EnzoBagnis Mar 11, 2026
b1ca139
Merge branch 'dev' into Merge-IA-sur-graphes
EnzoBagnis Mar 11, 2026
ee1e077
Merge pull request #238 from EnzoBagnis/Merge-IA-sur-graphes
EnzoBagnis Mar 11, 2026
a09ee7f
Merge pull request #239 from EnzoBagnis/dev
EnzoBagnis Mar 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
457 changes: 457 additions & 0 deletions App/Controller/IaController.php

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions App/View/resources/details.php
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@
<nav class="nav-menu">
<a href="<?= BASE_URL ?>/resources" class="active">Ressources</a>
<a href="<?= BASE_URL ?>/exercises">Exercices</a>
<a href="<?= BASE_URL ?>/ia">IA</a>
</nav>
Comment on lines 149 to 153

Copilot AI Mar 11, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Le lien « IA » est ajouté dans la nav desktop, mais il n’est pas présent dans le menu burger (mobile). Pour éviter une navigation incohérente selon la taille d’écran, ajouter aussi l’entrée « IA » dans la liste du menu burger.

Copilot uses AI. Check for mistakes.
<div class="header-right">
<button onclick="openImportModal(<?= (int)$resource->getResourceId() ?>)" class="btn-import-trigger">
Expand Down
2 changes: 2 additions & 0 deletions App/View/resources/list.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
<span></span><span></span><span></span>
</button>
<nav class="nav-menu">
<a href="<?= BASE_URL ?>/resources" class="active">Ressources</a>
</nav>
<div class="header-right">
<div class="user-profile">
Expand Down Expand Up @@ -72,6 +73,7 @@
<span><?= htmlspecialchars($user_firstname) ?> <?= htmlspecialchars($user_lastname) ?></span>
</div>
<ul class="burger-menu-list">
<li><a href="<?= BASE_URL ?>/resources" class="burger-link active">Ressources</a></li>
<li><a href="#" onclick="confirmLogout()" class="burger-link burger-logout">Déconnexion</a></li>
</ul>
</div>
Expand Down
2 changes: 2 additions & 0 deletions App/View/user/dashboard.php
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,8 @@
<span></span><span></span><span></span>
</button>
<nav class="nav-menu">
<a href="<?= BASE_URL ?>/resources" class="active">Ressources</a>
<a href="<?= BASE_URL ?>/ia">IA</a>
</nav>
<div class="header-right">
<button onclick="openImportModal(<?= $current_resource_id ?>)" class="btn-import-trigger">
Expand Down
567 changes: 567 additions & 0 deletions App/View/user/ia.php

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions App/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,17 @@
// Dashboard routes (protected)
$router->get('/dashboard', App\Controller\DashboardController::class, 'index');

// IA route
$router->get('/ia', App\Controller\IaController::class, 'index');

// IA API routes (vue Macro / Micro)
$router->post('/api/ia/macro', App\Controller\IaController::class, 'macro');
$router->post('/api/ia/micro', App\Controller\IaController::class, 'micro');

// IA API : vérifier si des données AES existent pour une ressource
$router->get('/api/ia/status', App\Controller\IaController::class, 'status');


// Exercise routes
$router->get('/exercises', App\Controller\ExercisesController::class, 'index');
$router->get('/exercises/{id}', App\Controller\ExercisesController::class, 'show');
Expand Down
39 changes: 39 additions & 0 deletions index.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@

if (!headers_sent()) {
http_response_code(500);
$uri = $_SERVER['REQUEST_URI'] ?? '';
if (strpos($uri, '/api/') !== false) {
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['success' => false, 'message' => 'Erreur fatale du serveur'], JSON_UNESCAPED_UNICODE);
return;
}
}

$uri = $_SERVER['REQUEST_URI'] ?? '';
Expand Down Expand Up @@ -98,6 +104,33 @@
echo '<h1>Erreur interne du serveur</h1><p>Une erreur est survenue. Veuillez réessayer.</p>';
}
}
$uri = $_SERVER['REQUEST_URI'] ?? '';
if (strpos($uri, '/api/') !== false) {
if (!headers_sent()) {
http_response_code(500);
header('Content-Type: application/json; charset=utf-8');
}
$env = defined('APP_ENV') ? APP_ENV : (\Core\Config\EnvLoader::get('APP_ENV', 'production'));
$payload = ['success' => false, 'message' => 'Erreur interne du serveur'];
if ($env === 'development') {
$payload['message'] = get_class($e) . ': ' . $msg;
$payload['file'] = $file . ':' . $line;
$payload['trace'] = $e->getTraceAsString();
}
echo json_encode($payload, JSON_UNESCAPED_UNICODE);
return;
}

if (!headers_sent()) {
http_response_code(500);
header('Content-Type: text/html; charset=utf-8');
}

// TOUJOURS afficher les détails pour le debug
echo '<h1>Erreur 500 – Exception non gérée</h1>';
echo '<p><b>' . htmlspecialchars(get_class($e)) . ':</b> ' . htmlspecialchars($msg) . '</p>';
echo '<p>dans <b>' . htmlspecialchars($file) . '</b> ligne <b>' . $line . '</b></p>';
echo '<pre>' . htmlspecialchars($e->getTraceAsString()) . '</pre>';
Comment on lines +124 to +133

Copilot AI Mar 11, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Le handler d’exception contient une logique API en double et finit par afficher une page HTML de debug « TOUJOURS afficher les détails » même après le bloc if ($env === 'development') { ... } else { ... }. Cela contourne la protection prod et peut dupliquer la réponse. Il faut garder un seul chemin (API JSON vs HTML) et n’afficher stack trace/classe/fichier qu’en environnement development.

Suggested change
if (!headers_sent()) {
http_response_code(500);
header('Content-Type: text/html; charset=utf-8');
}
// TOUJOURS afficher les détails pour le debug
echo '<h1>Erreur 500 – Exception non gérée</h1>';
echo '<p><b>' . htmlspecialchars(get_class($e)) . ':</b> ' . htmlspecialchars($msg) . '</p>';
echo '<p>dans <b>' . htmlspecialchars($file) . '</b> ligne <b>' . $line . '</b></p>';
echo '<pre>' . htmlspecialchars($e->getTraceAsString()) . '</pre>';
if (!isset($env)) {
$env = defined('APP_ENV') ? APP_ENV : (\Core\Config\EnvLoader::get('APP_ENV', 'production'));
}
if (!headers_sent()) {
http_response_code(500);
header('Content-Type: text/html; charset=utf-8');
}
if ($env === 'development') {
// Afficher les détails uniquement en environnement de développement
echo '<h1>Erreur 500 – Exception non gérée</h1>';
echo '<p><b>' . htmlspecialchars(get_class($e)) . ':</b> ' . htmlspecialchars($msg) . '</p>';
echo '<p>dans <b>' . htmlspecialchars($file) . '</b> ligne <b>' . $line . '</b></p>';
echo '<pre>' . htmlspecialchars($e->getTraceAsString()) . '</pre>';
} else {
// En production, ne pas divulguer de détails techniques supplémentaires ici
if (!headers_sent()) {
echo '<h1>Erreur interne du serveur</h1><p>Une erreur est survenue. Veuillez réessayer.</p>';
}
}

Copilot uses AI. Check for mistakes.
});

// Initialize router
Expand Down Expand Up @@ -130,6 +163,12 @@ function () {
// Set 404 handler
$router->setNotFoundHandler(function () {
http_response_code(404);
$uri = $_SERVER['REQUEST_URI'] ?? '';
if (strpos($uri, '/api/') !== false) {
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['success' => false, 'message' => 'Route API non trouvée'], JSON_UNESCAPED_UNICODE);
return;
}
if (file_exists(__DIR__ . '/App/View/errors/404.php')) {
require __DIR__ . '/App/View/errors/404.php';
} else {
Expand Down
2 changes: 1 addition & 1 deletion phpcs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
<property name="absoluteLineLimit" value="150"/>
</properties>
</rule>

<!-- Sécurité -->
<rule ref="Generic.PHP.ForbiddenFunctions">
<properties>
Expand Down
Loading
Loading