enregistrement des exercices

This commit is contained in:
thaaoblues 2023-11-05 16:49:48 +01:00
parent 53e45aeb0d
commit 213ee01342
4 changed files with 104 additions and 14 deletions

73
bdd.php
View file

@ -54,7 +54,6 @@ function ajouter_doc($request){
$sql = "INSERT INTO ensemble (commentaire_auteur) VALUES(\"".htmlspecialchars($request['commentaire_auteur'])."\")"; $sql = "INSERT INTO ensemble (commentaire_auteur) VALUES(\"".htmlspecialchars($request['commentaire_auteur'])."\")";
try{ try{
$conn->execute_query($sql); $conn->execute_query($sql);
saveFilesFromPost($request,mysqli_insert_id($conn)); saveFilesFromPost($request,mysqli_insert_id($conn));
@ -71,15 +70,21 @@ function saveFilesFromPost($postData,$id_ensemble) {
// Check if the $_POST variable is set and contains files // Check if the $_POST variable is set and contains files
echo(print_r($_FILES,true)); echo(print_r($_FILES,true));
if (isset($_FILES) && is_array($_FILES)) { if (isset($_FILES) && is_array($_FILES)) {
// Iterate through each file in the $_FILES array // Iterate through each file in the $_FILES array
$safe_type = intval($postData['type']);
$i = 0;
foreach ($_FILES as $file) { foreach ($_FILES as $file) {
// Extract file information // Extract file information
if (isset($file['name'])){ if (isset($file['name'])){
$fileName = $file['name']; $fileName = htmlspecialchars($file['name']);
if(!check_ext($fileName)){ if(!check_ext($fileName)){
echo(json_encode(["status"=>"0","msg"=>"Error saving file '$uniqueFileName'"])); echo(json_encode(["status"=>"0","msg"=>"Error saving file '$uniqueFileName'"]));
exit; exit;
@ -91,7 +96,7 @@ function saveFilesFromPost($postData,$id_ensemble) {
} }
// Create a unique filename to avoid overwriting existing files // Create a unique filename to avoid overwriting existing files
$uniqueFileName = uniqid() . '_' . htmlspecialchars($fileName); $uniqueFileName = uniqid() . '_' . $fileName;
// Define the path to save the file // Define the path to save the file
$filePath = $GLOBALS['uploadDir'] . $uniqueFileName; $filePath = $GLOBALS['uploadDir'] . $uniqueFileName;
@ -113,7 +118,6 @@ function saveFilesFromPost($postData,$id_ensemble) {
try{ try{
//update the database //update the database
$safe_titre = htmlspecialchars($postData['titre']); $safe_titre = htmlspecialchars($postData['titre']);
$safe_type = intval($postData['type']);
global $max_val_type; global $max_val_type;
@ -124,16 +128,73 @@ function saveFilesFromPost($postData,$id_ensemble) {
// pour tester, pas implémenté les commentaires globaux ni les themes // pour tester, pas implémenté les commentaires globaux ni les themes
$sql="INSERT INTO documents (titre,type,upload_path,commentaire_auteur,ensemble_id) VALUES(?,?,?,?,?)"; $sql="INSERT INTO documents (titre,type,upload_path,commentaire_auteur,ensemble_id) VALUES(?,?,?,?,?)";
$conn->execute_query($sql,array($safe_titre,$safe_type,$filePath,"",$id_ensemble)); $conn->execute_query($sql,array($safe_titre,$safe_type,$filePath,$postData['commentaire_doc_'.$i],$id_ensemble));
}catch(Exception $e){ }catch(Exception $e){
echo(json_encode(['status'=> '0','msg'=>$e->getMessage()])); echo(json_encode(['status'=> '0','msg'=>$e->getMessage()]));
//exit; //exit;
} }
$i ++;
} }
// enregistrement des exercices dans le cas d'une annale
if($safe_type == 1){
$exercices = $postData['exercices'];
foreach ($exercices as $key => $ex) {
// premièrement, on enregistre l'exercice
$sql= 'INSERT INTO exercices (commentaire_auteur,ensemble_id,duree) VALUES(?,?,?)';
$conn->execute_query($sql,array($ex["commentaire_exo"],$id_ensemble,$ex["duree"]));
$id_exo = mysqli_insert_id($conn);
// on recherche pour chaque thème s'il n'existe pas déjà,
// si non, on en créer un nouveau
foreach($ex["themes"] as $theme){
// pour l'instant un match complet mais on va essayer d'ameliorer ça avec
// des regex
$sql= "SELECT id FROM themes WHERE name=\"".htmlspecialchars($theme)."\"";
$result = $conn->execute_query($sql);
if ($result){
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
$id_theme = $row["id"];
}else{
$sql = "INSERT INTO themes (name) VALUES(?)";
$conn->execute_query($sql,array($theme));
$id_theme = mysqli_insert_id($conn);
}
// ensuite, on enregistre les qui lui sont associés
$sql= 'INSERT INTO exercices_themes (exercice_id,theme_id) VALUES(?,?)';
$result = $conn->execute_query($sql,array($id_exo,$id_theme));
}
}
}
}
} else { } else {
echo(json_encode(["status"=>"2","msg"=>"No files in the POST data."])); echo(json_encode(["status"=>"2","msg"=>"No files in the POST data."]));
exit; exit;

View file

@ -17,7 +17,7 @@ $sql = "
name VARCHAR(255) NOT NULL name VARCHAR(255) NOT NULL
); );
CREATE TABLE IF NOT EXISTS ensemble ( CREATE TABLE IF NOT EXISTS ensembles (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
commentaire_auteur TEXT, commentaire_auteur TEXT,
valide BOOLEAN NOT NULL DEFAULT FALSE valide BOOLEAN NOT NULL DEFAULT FALSE
@ -37,10 +37,9 @@ $sql = "
CREATE TABLE IF NOT EXISTS exercices ( CREATE TABLE IF NOT EXISTS exercices (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
titre VARCHAR(255) NOT NULL,
commentaire_auteur TEXT, commentaire_auteur TEXT,
document_id INT, ensemble_id INT,
FOREIGN KEY (document_id) REFERENCES documents(id) FOREIGN KEY (ensemble_id) REFERENCES ensembles(id)
); );

View file

@ -17,26 +17,29 @@ D'autres fonctionnalités seront ajoutées petit à petit. (si vous avez des sug
|--------------|--------|-------------------------------------------| |--------------|--------|-------------------------------------------|
| exercice_id | INT | FOREIGN KEY (exercice_id) REFERENCES exercises(id) | | exercice_id | INT | FOREIGN KEY (exercice_id) REFERENCES exercises(id) |
| theme_id | INT | FOREIGN KEY (theme_id) REFERENCES themes(id) | | theme_id | INT | FOREIGN KEY (theme_id) REFERENCES themes(id) |
| PRIMARY KEY | | (exercice_id, theme_id) | | id | INT | AUTO_INCREMENT, PRIMARY KEY |
### Table: exercices ### Table: exercices
| Column | Type | Constraints | | Column | Type | Constraints |
|--------------------|---------------|------------------------------------------| |--------------------|---------------|------------------------------------------|
| id | INT | AUTO_INCREMENT, PRIMARY KEY | | id | INT | AUTO_INCREMENT, PRIMARY KEY |
| titre | VARCHAR(255) | NOT NULL |
| commentaire_auteur | TEXT | | | commentaire_auteur | TEXT | |
| document_id | INT | FOREIGN KEY (document_id) REFERENCES documents(id) | | ensemble_id | INT | FOREIGN KEY (ensemble_id) REFERENCES ensembles(id) |
| duree | INT | | | duree | INT | |
(la durée est en secondes) (la durée est en secondes)
### Table: ensemble ### Table: ensembles
| Column | Type | Constraints | | Column | Type | Constraints |
|--------------------|---------------|------------------------------------------| |--------------------|---------------|------------------------------------------|
| id | INT | AUTO_INCREMENT | | id | INT | AUTO_INCREMENT |
| commentaire_auteur | TEXT | | | commentaire_auteur | TEXT | |
| valide | BOOLEAN | NOT NULL | | valide | BOOLEAN | NOT NULL |
| corrige_inclu | BOOLEAN | |
> le champ "corrige_inclu" ne sera utilisé que pour des annales
### Table: documents ### Table: documents
| Column | Type | Constraints | | Column | Type | Constraints |
@ -48,3 +51,26 @@ D'autres fonctionnalités seront ajoutées petit à petit. (si vous avez des sug
| commentaire_auteur | TEXT | | | commentaire_auteur | TEXT | |
| ensemble_id | INT | FOREIGN KEY (ensemble_id) REFERENCES ensemble(id) | | ensemble_id | INT | FOREIGN KEY (ensemble_id) REFERENCES ensemble(id) |
| theme_id | INT | FOREIGN KEY (theme_id) REFERENCES themes(id) | | theme_id | INT | FOREIGN KEY (theme_id) REFERENCES themes(id) |
## TOUDOU :
### téléverser.php :
- ajouter un element "commentaire_doc_< i >" pour chaque document
- ssi le type est "annale" ajouter un element "commentaire_exo_< i >" pour chaque exercice déclaré dans chaque document
- Ajouter de même un champ "themes" qui porterons sur les thèmes abordés par l'exercice, possibilité d'en inscrire autant que l'on veut
- ajouter un champ "duree" pour chaque exercice
- tout pack dans un json à l'envoi :
``
let ex = {ex1:{duree:"10",themes:["algèbre","analyse"],commentaire_exo:"cci est un commenataire"},ex2:{duree:"15",themes:["elec analogique"],commentaire_exo:""}};
``
- ssi le type est "annale" Ajouter une checkbox pour spécifier si l'ensemble de documents comprend un corrigé ou non identifiant : "corrige_inclu"
- dans le cas d'une fiche de révisions, on ajouter seulement un champ "themes"

View file

@ -41,6 +41,10 @@ function uploadFiles() {
formData.append("titre",document.getElementById("titre").value); formData.append("titre",document.getElementById("titre").value);
formData.append("commentaire_auteur",document.getElementById("commentaire_auteur").value); formData.append("commentaire_auteur",document.getElementById("commentaire_auteur").value);
let ex = {ex1:{duree:"10",themes:["algèbre","analyse"],commentaire_exo:"cci est un commenataire"},ex2:{duree:"15",themes:["elec analogique"],commentaire_exo:""}};
formData.append("exercices",JSON.stringify(ex))
// Append each selected file to the FormData // Append each selected file to the FormData
let i = 0; let i = 0;
for (const file of fileInput.files) { for (const file of fileInput.files) {