forked from mougnibas/archinsa
enregistrement des exercices
This commit is contained in:
parent
53e45aeb0d
commit
213ee01342
4 changed files with 104 additions and 14 deletions
73
bdd.php
73
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;
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
|
||||
|
||||
|
|
34
readme.md
34
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"
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue