diff --git a/bdd.php b/bdd.php index 33467b3..0993080 100644 --- a/bdd.php +++ b/bdd.php @@ -54,7 +54,6 @@ function ajouter_doc($request){ $sql = "INSERT INTO ensemble (commentaire_auteur) VALUES(\"".htmlspecialchars($request['commentaire_auteur'])."\")"; - try{ $conn->execute_query($sql); 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 echo(print_r($_FILES,true)); + if (isset($_FILES) && is_array($_FILES)) { // Iterate through each file in the $_FILES array + + $safe_type = intval($postData['type']); + + + $i = 0; foreach ($_FILES as $file) { // Extract file information if (isset($file['name'])){ - $fileName = $file['name']; + $fileName = htmlspecialchars($file['name']); if(!check_ext($fileName)){ echo(json_encode(["status"=>"0","msg"=>"Error saving file '$uniqueFileName'"])); exit; @@ -91,7 +96,7 @@ function saveFilesFromPost($postData,$id_ensemble) { } // Create a unique filename to avoid overwriting existing files - $uniqueFileName = uniqid() . '_' . htmlspecialchars($fileName); + $uniqueFileName = uniqid() . '_' . $fileName; // Define the path to save the file $filePath = $GLOBALS['uploadDir'] . $uniqueFileName; @@ -113,7 +118,6 @@ function saveFilesFromPost($postData,$id_ensemble) { try{ //update the database $safe_titre = htmlspecialchars($postData['titre']); - $safe_type = intval($postData['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 $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){ echo(json_encode(['status'=> '0','msg'=>$e->getMessage()])); //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 { echo(json_encode(["status"=>"2","msg"=>"No files in the POST data."])); exit; diff --git a/init_db.php b/init_db.php index 74c1239..18e1931 100644 --- a/init_db.php +++ b/init_db.php @@ -17,7 +17,7 @@ $sql = " name VARCHAR(255) NOT NULL ); - CREATE TABLE IF NOT EXISTS ensemble ( + CREATE TABLE IF NOT EXISTS ensembles ( id INT AUTO_INCREMENT PRIMARY KEY, commentaire_auteur TEXT, valide BOOLEAN NOT NULL DEFAULT FALSE @@ -37,10 +37,9 @@ $sql = " CREATE TABLE IF NOT EXISTS exercices ( id INT AUTO_INCREMENT PRIMARY KEY, - titre VARCHAR(255) NOT NULL, commentaire_auteur TEXT, - document_id INT, - FOREIGN KEY (document_id) REFERENCES documents(id) + ensemble_id INT, + FOREIGN KEY (ensemble_id) REFERENCES ensembles(id) ); diff --git a/readme.md b/readme.md index 7d40de5..9d596d8 100644 --- a/readme.md +++ b/readme.md @@ -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) | | theme_id | INT | FOREIGN KEY (theme_id) REFERENCES themes(id) | -| PRIMARY KEY | | (exercice_id, theme_id) | +| id | INT | AUTO_INCREMENT, PRIMARY KEY | ### Table: exercices | Column | Type | Constraints | |--------------------|---------------|------------------------------------------| | id | INT | AUTO_INCREMENT, PRIMARY KEY | -| titre | VARCHAR(255) | NOT NULL | | 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 | | (la durée est en secondes) -### Table: ensemble +### Table: ensembles | Column | Type | Constraints | |--------------------|---------------|------------------------------------------| | id | INT | AUTO_INCREMENT | | commentaire_auteur | TEXT | | | valide | BOOLEAN | NOT NULL | +| corrige_inclu | BOOLEAN | | + +> le champ "corrige_inclu" ne sera utilisé que pour des annales + ### Table: documents | Column | Type | Constraints | @@ -48,3 +51,26 @@ D'autres fonctionnalités seront ajoutées petit à petit. (si vous avez des sug | commentaire_auteur | TEXT | | | ensemble_id | INT | FOREIGN KEY (ensemble_id) REFERENCES ensemble(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" + + + + diff --git a/televerser.php b/televerser.php index 01fb478..ef5412f 100644 --- a/televerser.php +++ b/televerser.php @@ -41,6 +41,10 @@ function uploadFiles() { formData.append("titre",document.getElementById("titre").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 let i = 0; for (const file of fileInput.files) {