Compare commits

...

2 commits

Author SHA1 Message Date
thaaoblues
c867505f42 voilà c'est comme ça qu'on fait là 2023-12-23 21:42:28 +01:00
thaaoblues
0cff7402b3 bon mistral écrit de la merde on va faire le sql à la main 2023-12-23 12:42:12 +01:00
7 changed files with 167 additions and 16 deletions

74
api.php
View file

@ -77,11 +77,83 @@
break;
case 'decomposer_ensemble':
// Récupération de l'ID de l'ensemble et du thème depuis l'URL ou autrement
$ensembleId = isset($_GET['ensemble_id']) ? intval($_GET['ensemble_id']) : '';
// Vérification de la validité de l'ID de l'ensemble
if (!empty($ensembleId)) {
// Préparation de la requête SQL pour obtenir les informations sur l'ensemble
$sqlEnsemble = 'SELECT * FROM ensembles WHERE id = ?';
$stmtEnsemble = $conn->prepare($sqlEnsemble);
$stmtEnsemble->bind_param('i', $ensembleId);
$stmtEnsemble->execute();
$resultEnsemble = $stmtEnsemble->get_result();
$ensemble = $resultEnsemble->fetch_assoc();
if ($ensemble && $ensemble['valide'] == true) {
// Préparation de la requête SQL pour obtenir les informations sur les exercices sélectionnés
$sqlDocu = "SELECT * FROM documents WHERE ensemble_id=?";
$stmtDocu = $conn->prepare($sqlDocu);
$stmtDocu->bind_param('i', $ensembleId);
$stmtDocu->execute();
$resultDocu = $stmtDocu->get_result();
$ensemble["documents"] = array();
while ($doc = $resultDocu->fetch_assoc()) {
switch ($doc['type']) {
case 1:
// on va maintenant prendre chaque exercice un par un
// et afficher les bonnes infos :
$sqlExos = "SELECT * FROM exercices WHERE document_id=?";
$stmtExos = $conn->prepare($sqlExos);
$stmtExos->bind_param('i', $doc["id"]);
$stmtExos->execute();
$resultExos = $stmtExos->get_result();
$doc["exercices"] = array();
while ($exo = $resultExos->fetch_assoc()) {
array_push($doc["exercices"],$exo);
}
array_push($ensemble["documents"],$doc);
break;
}
}
echo(json_encode(["status"=>"1","msg"=>$ensemble]));
}else{
echo(json_encode(['status'=> '2','msg'=> "Vous devez spécifier un indetifiant d'ensemble valide dans votre requête."]));
}
}else{
echo(json_encode(['status'=> '2','msg'=> "Vous devez spécifier un indetifiant d'ensemble dans votre requête."]));
}
break;
default:
echo(json_encode(['status'=> '2','msg'=> "Ce point d'arrivée n'existe pas dans l'api."]));
break;
}

11
bdd.php
View file

@ -66,7 +66,7 @@ function ajouter_doc($request){
function saveFilesFromPost($postData,$id_ensemble) {
global $conn;
// Check if the $_POST variable is set and contains files
//echo(print_r($_FILES,true));
@ -146,10 +146,11 @@ function saveFilesFromPost($postData,$id_ensemble) {
if($safe_type == 1){
$exercices = json_decode($postData['exercices'],true);
$document_id = mysqli_insert_id($conn);
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,intval($ex["duree"])));
$sql= 'INSERT INTO exercices (commentaire_auteur,ensemble_id,document_id,duree) VALUES(?,?,?,?)';
$conn->execute_query($sql,array($ex["commentaire_exo"],$id_ensemble,$document_id,intval($ex["duree"])));
$id_exo = mysqli_insert_id($conn);
@ -219,7 +220,7 @@ function RechercheExercices($query, $length, $tags)
if (!empty($tags)) {
$tagConditions = array_map(function ($tag) {
$tag = htmlspecialchars($tag);
return "EXISTS (SELECT * FROM exercices_themes AS et INNER JOIN themes AS t ON et.exercice_id = t.id WHERE et.theme_id = t.id AND t.name = '$tag' AND)";
return "EXISTS (SELECT * FROM exercices_themes AS et INNER JOIN themes AS t ON et.exercice_id = t.id WHERE et.theme_id = t.id AND t.name = '$tag')";
}, $tags);
$conditions[] = implode(" AND ", $tagConditions);
@ -260,4 +261,4 @@ function valider_ensemble($ensembleId) {
$conn->execute_query($updateQuery);
}
?>
?>

47
ens.php Normal file
View file

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ensemble de documents</title>
</head>
<body>
</body>
<script>
/*
pour les docs afficher un truc du même acabit que la php :
if (strtolower($extension) === 'pdf'):
echo "<embed src=\"{$doc['upload_path']}\" type=\"application/pdf\" width=\"100%\" height=\"600px\" />";
elseif (in_array(strtolower($extension), ['jpg', 'jpeg', 'png', 'gif'])):
echo "<img src=\"{$doc['upload_path']}\">";
else:
echo "<p>Oups ! Je ne sais pas afficher ce document :/ (Rales autant que tu veux je men fous) </p>".$doc['upload_path'];
endif;
*/
// fetch l'api et afficher tout ce qu'elle nous rend
function querystring(key) {
var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
var r=[], m;
while ((m=re.exec(document.location.search)) != null) r[r.length]=m[1];
return r;
}
async function gen_contenu(){
resp = await fetch("/annales/api.php/decomposer_ensemble?ensemble_id="+querystring("ensemble_id"));
data = await resp.json();
if(data["status"] == 1){
console.log(data);
}
}
</script>
</html>

View file

@ -18,9 +18,9 @@
</div>
<form>
<form id="recherche_form">
<input type="text" id="recherche_input" placeholder="Rechercher une fiche, annale ...">
<input type="text" id="themes_input" placeholder="themes séparés par une virgule">
<input type="text" id="themes_input" placeholder="themes (appuyez sur la touche entrée entre chaque thèmes)">
<input type="number" id="duree_input" placeholder="durée en minutes">
</form>
@ -39,7 +39,6 @@
data = await resp.json();
console.log("test");
if(data.status == 1){
alert(1);
document.getElementById("user_status").innerText = data["msg"];
}
}
@ -57,15 +56,33 @@
async function rechercher(){
var req = document.getElementById("recherche_input").value;
var themes = [];
Array.from(document.getElementsByClassName("theme")).forEach(function (el) {
// on encode en url pour pouvoir le passer dans la requete GET
themes.push(encodeURIComponent(el.innerText));
});
var duree =document.getElementById("duree_input").value
resp = await fetch("/annales/api.php/rechercher?req="+req);
var url = "/annales/api.php/rechercher?req="+req;
if(themes.toString() != ""){
url = url +"&themes="+themes.toString();
}
if(duree != ""){
url = url +"duree="+duree;
}
console.log(url);
resp = await fetch(url);
data = await resp.json();
if(data.status == 1){
data.resultats.forEach(doc => {
const img = document.createElement("img");
img.src = doc.upload_path;
img.setAttribute("onclick","document.location.href='ens.php?ensemble_id="+doc.ensemble_id.toString()+"'");
document.body.appendChild(img);
});
}
@ -78,9 +95,18 @@
rechercher();
}
}
document.getElementById("themes_input").onkeydown =function(event) {
if (event.key === "Enter"){
var theme = document.createElement("div");
theme.setAttribute("class","theme");
theme.innerText = document.getElementById("themes_input").value;
document.getElementById("recherche_form").appendChild(theme);
document.getElementById("themes_input").value = "";
}
}
</script>
</html>
</html>

View file

@ -20,7 +20,8 @@ $sql = "
CREATE TABLE IF NOT EXISTS ensembles (
id INT AUTO_INCREMENT PRIMARY KEY,
commentaire_auteur TEXT,
valide BOOLEAN NOT NULL DEFAULT FALSE
valide BOOLEAN NOT NULL DEFAULT FALSE,
corrige_inclu BOOLEAN NOT NULL DEFAULT FALSE
);
CREATE TABLE IF NOT EXISTS documents (
@ -39,8 +40,11 @@ $sql = "
id INT AUTO_INCREMENT PRIMARY KEY,
commentaire_auteur TEXT,
ensemble_id INT,
document_id INT,
duree INT,
FOREIGN KEY (ensemble_id) REFERENCES ensembles(id)
FOREIGN KEY (ensemble_id) REFERENCES ensembles(id),
FOREIGN KEY (document_id) REFERENCES documents(id)
);

View file

@ -26,8 +26,9 @@ D'autres fonctionnalités seront ajoutées petit à petit. (si vous avez des sug
| id | INT | AUTO_INCREMENT, PRIMARY KEY |
| commentaire_auteur | TEXT | |
| ensemble_id | INT | FOREIGN KEY (ensemble_id) REFERENCES ensembles(id) |
| document_id | INT | FOREIGN KEY (document_id) REFERENCES documents(id)
| duree | INT | |
(la durée est en secondes)
(la durée est en minutes)
### Table: ensembles

View file

@ -50,7 +50,7 @@ function uploadFiles() {
formData.append("corrige_inclu",document.getElementById("corrige_checkbox").value);
let ex = [{duree:"10",themes:["algèbre","analyse"],commentaire_exo:"cci est un commenataire"},{duree:"15",themes:["elec analogique"],commentaire_exo:""}];
let ex = [{duree:"10",themes:["algèbre","analyse"],commentaire_exo:"ceci est un commenataire"},{duree:"15",themes:["elec analogique"],commentaire_exo:""}];
formData.append("exercices",JSON.stringify(ex))