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'])."\")";
|
$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;
|
||||||
|
|
|
@ -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)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
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) |
|
| 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"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue