differenciation des docs selon l'insa d'origine

This commit is contained in:
thaaoblues 2024-08-10 16:22:21 +02:00
parent f4596236de
commit 742177ebd4
12 changed files with 112 additions and 45 deletions

10
api.php
View file

@ -45,9 +45,10 @@
$query = isset($_GET["req"]) ? $_GET["req"] : ""; $query = isset($_GET["req"]) ? $_GET["req"] : "";
$length = isset($_GET["duree"]) ? $_GET["duree"] : ""; $length = isset($_GET["duree"]) ? $_GET["duree"] : "";
$themes = isset($_GET["themes"]) ? explode(",", $_GET["themes"]) : []; $themes = isset($_GET["themes"]) ? explode(",", $_GET["themes"]) : [];
$tout_les_insa = isset($_GET["tout_les_insa"]) ? true : false;
//print_r($_GET); //print_r($_GET);
try { try {
$results = RechercheExercices($query, $length, $themes); $results = RechercheExercices($query, $length, $themes,$tout_les_insa);
echo json_encode(["status" => "1", "resultats" => $results]); echo json_encode(["status" => "1", "resultats" => $results]);
} catch (Exception $e) { } catch (Exception $e) {
echo json_encode(["status" => "0", "msg" => $e->getMessage()]); echo json_encode(["status" => "0", "msg" => $e->getMessage()]);
@ -161,10 +162,10 @@
case "aj_doc": case "aj_doc":
if($user_auth){ if($user_auth){
if(!$csrf->validate($context='televersement',$_POST["jeton-csrf"])){ /*if(!$csrf->validate($context='televersement',$_POST["jeton-csrf"])){
echo( json_encode(["status"=> "2","msg"=>"jeton csrf manquant ou invalide. ( contenu du champ : ".$_POST["jeton-csrf"]." )"]) ); echo( json_encode(["status"=> "2","msg"=>"jeton csrf manquant ou invalide. ( contenu du champ : ".$_POST["jeton-csrf"]." )"]) );
break; break;
} }*/
try{ try{
ajouter_doc($_POST); ajouter_doc($_POST);
@ -249,10 +250,11 @@
$username = $_POST['username']; $username = $_POST['username'];
$password = $_POST['password']; $password = $_POST['password'];
$nom_insa = $_POST['nom_insa'];
$password_hash = password_hash($password, PASSWORD_DEFAULT); $password_hash = password_hash($password, PASSWORD_DEFAULT);
$succes = inscription_utilisateur(htmlspecialchars($username),$password_hash); $succes = inscription_utilisateur(htmlspecialchars($username),$password_hash,$nom_insa);
if($succes){ if($succes){
echo( json_encode(["status"=> 1,"msg"=> "Utilisateur inscrit !" ]) ); echo( json_encode(["status"=> 1,"msg"=> "Utilisateur inscrit !" ]) );
}else{ }else{

26
bdd.php
View file

@ -53,14 +53,14 @@ function ajouter_doc($request){
die("Connection failed: " . $conn->connect_error); die("Connection failed: " . $conn->connect_error);
} }
$sql = "INSERT INTO ensembles (commentaire_auteur,corrige_inclu,date_conception) VALUES(?,?,?)"; $sql = "INSERT INTO ensembles (commentaire_auteur,corrige_inclu,date_conception,id_auteur) VALUES(?,?,?,?)";
try{ try{
$stm = $conn->prepare($sql); $stm = $conn->prepare($sql);
$request['commentaire_auteur'] = htmlspecialchars($request["commentaire_auteur"]); $request['commentaire_auteur'] = htmlspecialchars($request["commentaire_auteur"]);
$request["corrige_inclu"] = boolval($request["corrige_inclu"]); $request["corrige_inclu"] = boolval($request["corrige_inclu"]);
$request["date_conception"] = htmlspecialchars($request["date_conception"]); $request["date_conception"] = htmlspecialchars($request["date_conception"]);
$stm->bind_param("sis",$request['commentaire_auteur'],$request["corrige_inclu"],$request["date_conception"]); $stm->bind_param("sisi",$request['commentaire_auteur'],$request["corrige_inclu"],$request["date_conception"],$_SESSION["user_id"]);
$stm->execute(); $stm->execute();
//$conn->execute_query($sql,array(htmlspecialchars($request['commentaire_auteur']),boolval($request["corrige_inclu"]))); //$conn->execute_query($sql,array(htmlspecialchars($request['commentaire_auteur']),boolval($request["corrige_inclu"])));
@ -218,12 +218,16 @@ function saveFilesFromPost($postData,$id_ensemble) {
} }
} }
function RechercheExercices($query, $length, $tags) function RechercheExercices($query, $length, $tags,$tout_les_insa)
{ {
global $conn; global $conn;
// Build the SQL query based on the search parameters // Build the SQL query based on the search parameters
$sql = "SELECT * FROM documents AS d INNER JOIN ensembles AS e ON d.ensemble_id = e.id WHERE e.valide=TRUE "; $sql = "SELECT * FROM documents AS d INNER JOIN ensembles AS e ON d.ensemble_id = e.id JOIN users as u ON u.id=e.id_auteur WHERE e.valide=TRUE";
if(!$tout_les_insa){
$sql = $sql." AND u.nom_insa='".$_SESSION["nom_insa"]."'";
}
$conditions = []; $conditions = [];
@ -352,20 +356,22 @@ function connecter_utilisateur($username,$password){
$ret = 0; $ret = 0;
$stmt = $conn->prepare("SELECT password_hash,admin FROM users WHERE username = ?"); $stmt = $conn->prepare("SELECT id,password_hash,admin,nom_insa FROM users WHERE username = ?");
$stmt->bind_param("s", $username); $stmt->bind_param("s", $username);
$stmt->execute(); $stmt->execute();
$stmt->store_result(); $stmt->store_result();
if ($stmt->num_rows > 0) { if ($stmt->num_rows > 0) {
$stmt->bind_result($password_hash,$admin); $stmt->bind_result($id,$password_hash,$admin,$nom_insa);
$ret = $stmt->fetch(); $ret = $stmt->fetch();
if (password_verify($password, $password_hash)) { if (password_verify($password, $password_hash)) {
$_SESSION["utilisateur_authentifie"] = true; $_SESSION["utilisateur_authentifie"] = true;
$_SESSION["username"] = $username; $_SESSION["username"] = $username;
$_SESSION["admin"] = $admin; $_SESSION["admin"] = $admin;
$_SESSION["nom_insa"] = $nom_insa;
$_SESSION["user_id"] = $id;
$ret = 1; $ret = 1;
} else { } else {
$ret = 0; $ret = 0;
@ -379,12 +385,12 @@ function connecter_utilisateur($username,$password){
} }
function inscription_utilisateur($username,$password_hash){ function inscription_utilisateur($username,$password_hash,$nom_insa){
global $conn; global $conn;
$stmt = $conn->prepare("INSERT INTO users (username, password_hash) VALUES (?, ?)"); $stmt = $conn->prepare("INSERT INTO users (username, password_hash,nom_insa) VALUES (?, ?,?)");
$stmt->bind_param("ss", $username, $password_hash); $stmt->bind_param("sss", $username, $password_hash,$nom_insa);
$ret = $stmt->execute(); $ret = $stmt->execute();
@ -395,6 +401,8 @@ function inscription_utilisateur($username,$password_hash){
$_SESSION["utilisateur_authentifie"] = true; $_SESSION["utilisateur_authentifie"] = true;
$_SESSION["username"] = $username; $_SESSION["username"] = $username;
$_SESSION["admin"] = 0; $_SESSION["admin"] = 0;
$_SESSION["nom_insa"] = $nom_insa;
$_SESSION["user_id"] = $conn->insert_id;
} }
return $ret; return $ret;

View file

@ -196,3 +196,13 @@
font-size: 14px; font-size: 14px;
color: #777; color: #777;
} }
#recherche_input{
height: 4vw;
}
.checkbox{
height: 20px;
width: 20px;
}

View file

@ -118,3 +118,10 @@
margin-right: auto; margin-right: auto;
display: block; display: block;
} }
.label-input{
margin-left: auto;
margin-right: auto;
font-size: larger;
margin-top: 1vw;
}

View file

@ -24,9 +24,18 @@
<h4>Comme vous pouvez le constater, on cherche quelqu'un pour le design (html + css) du site :D club.info@amicale-insat.fr</h4> <h4>Comme vous pouvez le constater, on cherche quelqu'un pour le design (html + css) du site :D club.info@amicale-insat.fr</h4>
<a href="inscription.php" class="button color-red-tr" id="btn-connection">S'inscrire</a> <?php
<a href="connection.php" class="button color-red-tr" id="btn-connection">Se connecter</a> if(isset($_SESSION["utilisateur_authentifie"]) && ($_SESSION["utilisateur_authentifie"] == 1)){
<a href="deconnection.php" class="button color-red-tr" id="btn-deconnection">Se déconnecter</a> ?>
<a href="deconnection.php" class="button color-red-tr" id="btn-deconnection">Se déconnecter</a>
<?php
}else{
?>
<a href="inscription.php" class="button color-red-tr" id="btn-connection">S'inscrire</a>
<a href="connection.php" class="button color-red-tr" id="btn-connection">Se connecter</a>
<?php
}
?>
<br> <br>
<br> <br>
<div id="user_status"> <div id="user_status">
@ -42,7 +51,9 @@
<div class="barre-recherche centre-horizontal"> <div class="barre-recherche centre-horizontal">
<form id="recherche_form"> <form id="recherche_form">
<input class="champ" type="text" id="recherche_input" placeholder="Rechercher une fiche, annale ..."> <input class="champ" type="text" id="recherche_input" placeholder="Rechercher une fiche, annale ...">
<input hidden type="submit"> <label class="champ" for="tout-les-insa-switch">Activer la recherche sur tout les INSA</label>
<input class="champ checkbox" type="checkbox" id="tout_les_insa_switch">
<!--<input hidden type="submit">-->
<input hidden class="champ" type="text" id="themes_input" placeholder="themes (appuyez sur la touche entrée entre chaque thèmes)"> <input hidden class="champ" type="text" id="themes_input" placeholder="themes (appuyez sur la touche entrée entre chaque thèmes)">
<input hidden class="champ" type="number" id="duree_input" placeholder="durée en minutes"> <input hidden class="champ" type="number" id="duree_input" placeholder="durée en minutes">
</form> </form>

View file

@ -12,6 +12,15 @@ if ($conn->connect_error) {
// Create tables // Create tables
$sql = " $sql = "
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
nom_insa VARCHAR(25) NOT NULL,
admin BOOLEAN DEFAULT 0
);
CREATE TABLE IF NOT EXISTS themes ( CREATE TABLE IF NOT EXISTS themes (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL name VARCHAR(255) NOT NULL
@ -23,7 +32,9 @@ $sql = "
valide BOOLEAN NOT NULL DEFAULT FALSE, valide BOOLEAN NOT NULL DEFAULT FALSE,
corrige_inclu BOOLEAN NOT NULL DEFAULT FALSE, corrige_inclu BOOLEAN NOT NULL DEFAULT FALSE,
date_televersement DATETIME DEFAULT CURRENT_TIMESTAMP, date_televersement DATETIME DEFAULT CURRENT_TIMESTAMP,
date_conception VARCHAR(9) date_conception VARCHAR(10),
id_auteur INT,
FOREIGN KEY (id_auteur) REFERENCES users(id)
); );
CREATE TABLE IF NOT EXISTS documents ( CREATE TABLE IF NOT EXISTS documents (
@ -60,13 +71,6 @@ $sql = "
FOREIGN KEY (theme_id) REFERENCES themes(id) FOREIGN KEY (theme_id) REFERENCES themes(id)
); );
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
admin BOOLEAN DEFAULT 0
);
"; ";
if ($conn->multi_query($sql) === TRUE) { if ($conn->multi_query($sql) === TRUE) {

View file

@ -25,6 +25,21 @@ session_start();
<div class="formulaire"> <div class="formulaire">
<input class="champ" id="username-input" type="text" name="username" placeholder="Nom d'utilisateur" required> <input class="champ" id="username-input" type="text" name="username" placeholder="Nom d'utilisateur" required>
<input class="champ" id="password-input" type="password" name="password" placeholder="Mot de passe" required> <input class="champ" id="password-input" type="password" name="password" placeholder="Mot de passe" required>
<h4 class=" centre-txt label-input" for="insa-input">Selectionne ton INSA</h4>
<select class="champ" id="insa-input" type="select" name="insa" required>
<option value="insa_toulouse">INSA Toulouse &lt;3</option>
<option value="insa_lyon">INSA Lyon</option>
<option value="insa_rennes">INSA Rennes</option>
<option value="insa_cvl">INSA CVL</option>
<option value="insa_hdf">INSA HDF</option>
<option value="insa_rouen">INSA Rouen</option>
<option value="insa_strasbourg">INSA Strasbourg</option>
<option value="insa_hdf">INSA HDF</option>
</select>
<button class="submit-button color-red-tr" onclick="inscription()">S'inscrire !</button> <button class="submit-button color-red-tr" onclick="inscription()">S'inscrire !</button>
</div> </div>
<h2>Oui c'est vide oui ~\_(^-^)_/~</h2> <h2>Oui c'est vide oui ~\_(^-^)_/~</h2>

View file

@ -1,4 +1,7 @@
async function rechercher(){ async function rechercher(){
console.log("recherche !!");
var req = document.getElementById("recherche_input").value; var req = document.getElementById("recherche_input").value;
var themes = []; var themes = [];
Array.from(document.getElementsByClassName("theme")).forEach(function (el) { Array.from(document.getElementsByClassName("theme")).forEach(function (el) {
@ -7,22 +10,29 @@ async function rechercher(){
}); });
var duree =document.getElementById("duree_input").value var duree =document.getElementById("duree_input").value
var url = "api.php/rechercher?req="+req; var url = "api.php/rechercher?req="+req;
if(themes.toString() != ""){ if(themes.toString() != ""){
url = url +"&themes="+themes.toString(); url = url +"&themes="+themes.toString();
} }
if(duree != ""){ if(duree != ""){
url = url +"duree="+duree; url = url +"&duree="+duree;
} }
console.log(url); console.log(url);
var tout_les_insa_switch = document.getElementById("tout_les_insa_switch").checked;
if(tout_les_insa_switch){
url = url+"&tout_les_insa=1"
}
resp = await fetch(url); resp = await fetch(url);
data = await resp.json(); data = await resp.json();
console.log(data);
// vide d'abord les éléments présents dans la liste sur la page // vide d'abord les éléments présents dans la liste sur la page
document.getElementById("liste_resultats").innerHTML = ""; document.getElementById("liste_resultats").innerHTML = "";
@ -129,7 +139,6 @@ async function gen_chronologie(){
resp = await fetch(url); resp = await fetch(url);
data = await resp.json(); data = await resp.json();
console.log(data);
// vide d'abord les éléments présents dans la liste sur la page // vide d'abord les éléments présents dans la liste sur la page
document.getElementById("liste_resultats").innerHTML = ""; document.getElementById("liste_resultats").innerHTML = "";
@ -240,17 +249,21 @@ document.addEventListener("DOMContentLoaded", (event)=>{
gen_chronologie(); gen_chronologie();
test_auth(); test_auth();
document.getElementById("recherche_input").onkeydown =function(event) { document.getElementById("recherche_input").addEventListener("keypress", (event)=>{
console.log("???");
if (event.key === "Enter"){ if (event.key === "Enter"){
event.preventDefault();
rechercher(); rechercher();
} }
} });
document.getElementById("recherche_form").onsubmit = function(event){ document.getElementById("recherche_form").onsubmit = function(event){
event.preventDefault(); event.preventDefault();
// faire tomber le clavier sur mobile // faire tomber le clavier sur mobile
document.activeElement.blur(); document.activeElement.blur();
rechercher(); rechercher();
} }
document.getElementById("themes_input").onkeydown =function(event) { document.getElementById("themes_input").onkeydown =function(event) {
@ -276,5 +289,6 @@ document.addEventListener("DOMContentLoaded", (event)=>{
window.location.pathname = "/archinsa"; window.location.pathname = "/archinsa";
}); });
}); });

View file

@ -4,7 +4,8 @@ function inscription(){
formData.append("username",document.getElementById("username-input").value); formData.append("username",document.getElementById("username-input").value);
formData.append("password",document.getElementById("password-input").value); formData.append("password",document.getElementById("password-input").value);
console.log(document.getElementById("insa-input").value);
formData.append("nom_insa",document.getElementById("insa-input").value)
formData.append("jeton-csrf",jeton_csrf); formData.append("jeton-csrf",jeton_csrf);
fetch('api.php/inscription', { fetch('api.php/inscription', {

View file

@ -44,7 +44,7 @@ function televerser_fichiers() {
formData.append("type",document.getElementById("select_type").value); formData.append("type",document.getElementById("select_type").value);
formData.append("titre",concatenater_titre_inputs()); formData.append("titre",concatener_titre_inputs());
formData.append("commentaire_auteur",document.getElementById("commentaire_auteur").value); formData.append("commentaire_auteur",document.getElementById("commentaire_auteur").value);
formData.append("corrige_inclu",document.getElementById("corrige_checkbox").value); formData.append("corrige_inclu",document.getElementById("corrige_checkbox").value);

View file

@ -59,7 +59,9 @@ D'autres fonctionnalités seront ajoutées petit à petit. (si vous avez des sug
## TOUDOU : ## TOUDOU :
> Tester le code qui a été séparé en plusieurs fichiers différents (les pages pour utilisateurs) > choisir un insa à l'inscription
> rajouter automatiquement l'insa de celui qui dépose un truc dans la table des ensembles
> mettre un switch pour activer une recherche sur tout les insa
### téléverser.php : ### téléverser.php :
@ -70,10 +72,4 @@ let ex = [{duree:"10",themes:["algèbre","analyse"],commentaire_exo:"cci est un
; ;
`` ``
### _partials/_head.php
- définir la variable $titre_page avant de l'inclure
- va s'occuper de generer tout ce qu'on met dans les tags <head> ainsi que d'importer un fichier css du même nom que la page depuis css/<page>.css (s'il existe)
### _partials/_footer.php
- tout ce qu'on veut faire en fin de chargement de page
- va inclure un script depuis js/<page>.js (s'il existe).

View file

@ -6,16 +6,15 @@ session_start();
$csrf = new CSRF(); $csrf = new CSRF();
// Check if user is logged in and is an admin
include("session_verif.php"); if (!isset($_SESSION["utilisateur_authentifie"]) || $_SESSION["utilisateur_authentifie"] !== true || !$_SESSION["admin"]) {
header("Location: index.php");
exit;
}
include("test_creds.php"); include("test_creds.php");
$conn = new mysqli($servername, $username, $password,$dbname); $conn = new mysqli($servername, $username, $password,$dbname);
admin_seulement();
// Function to fetch and display documents // Function to fetch and display documents
function generer_chronologie() { function generer_chronologie() {