differenciation des docs selon l'insa d'origine
This commit is contained in:
parent
f4596236de
commit
742177ebd4
12 changed files with 112 additions and 45 deletions
10
api.php
10
api.php
|
@ -45,9 +45,10 @@
|
|||
$query = isset($_GET["req"]) ? $_GET["req"] : "";
|
||||
$length = isset($_GET["duree"]) ? $_GET["duree"] : "";
|
||||
$themes = isset($_GET["themes"]) ? explode(",", $_GET["themes"]) : [];
|
||||
$tout_les_insa = isset($_GET["tout_les_insa"]) ? true : false;
|
||||
//print_r($_GET);
|
||||
try {
|
||||
$results = RechercheExercices($query, $length, $themes);
|
||||
$results = RechercheExercices($query, $length, $themes,$tout_les_insa);
|
||||
echo json_encode(["status" => "1", "resultats" => $results]);
|
||||
} catch (Exception $e) {
|
||||
echo json_encode(["status" => "0", "msg" => $e->getMessage()]);
|
||||
|
@ -161,10 +162,10 @@
|
|||
case "aj_doc":
|
||||
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"]." )"]) );
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
|
||||
try{
|
||||
ajouter_doc($_POST);
|
||||
|
@ -249,10 +250,11 @@
|
|||
|
||||
$username = $_POST['username'];
|
||||
$password = $_POST['password'];
|
||||
$nom_insa = $_POST['nom_insa'];
|
||||
|
||||
$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){
|
||||
echo( json_encode(["status"=> 1,"msg"=> "Utilisateur inscrit !" ]) );
|
||||
}else{
|
||||
|
|
26
bdd.php
26
bdd.php
|
@ -53,14 +53,14 @@ function ajouter_doc($request){
|
|||
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{
|
||||
$stm = $conn->prepare($sql);
|
||||
$request['commentaire_auteur'] = htmlspecialchars($request["commentaire_auteur"]);
|
||||
$request["corrige_inclu"] = boolval($request["corrige_inclu"]);
|
||||
$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();
|
||||
//$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;
|
||||
|
||||
// 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 = [];
|
||||
|
||||
|
@ -352,20 +356,22 @@ function connecter_utilisateur($username,$password){
|
|||
|
||||
$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->execute();
|
||||
$stmt->store_result();
|
||||
|
||||
if ($stmt->num_rows > 0) {
|
||||
|
||||
$stmt->bind_result($password_hash,$admin);
|
||||
$stmt->bind_result($id,$password_hash,$admin,$nom_insa);
|
||||
$ret = $stmt->fetch();
|
||||
|
||||
if (password_verify($password, $password_hash)) {
|
||||
$_SESSION["utilisateur_authentifie"] = true;
|
||||
$_SESSION["username"] = $username;
|
||||
$_SESSION["admin"] = $admin;
|
||||
$_SESSION["nom_insa"] = $nom_insa;
|
||||
$_SESSION["user_id"] = $id;
|
||||
$ret = 1;
|
||||
} else {
|
||||
$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;
|
||||
|
||||
$stmt = $conn->prepare("INSERT INTO users (username, password_hash) VALUES (?, ?)");
|
||||
$stmt->bind_param("ss", $username, $password_hash);
|
||||
$stmt = $conn->prepare("INSERT INTO users (username, password_hash,nom_insa) VALUES (?, ?,?)");
|
||||
$stmt->bind_param("sss", $username, $password_hash,$nom_insa);
|
||||
|
||||
$ret = $stmt->execute();
|
||||
|
||||
|
@ -395,6 +401,8 @@ function inscription_utilisateur($username,$password_hash){
|
|||
$_SESSION["utilisateur_authentifie"] = true;
|
||||
$_SESSION["username"] = $username;
|
||||
$_SESSION["admin"] = 0;
|
||||
$_SESSION["nom_insa"] = $nom_insa;
|
||||
$_SESSION["user_id"] = $conn->insert_id;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
|
|
|
@ -196,3 +196,13 @@
|
|||
font-size: 14px;
|
||||
color: #777;
|
||||
}
|
||||
|
||||
#recherche_input{
|
||||
height: 4vw;
|
||||
}
|
||||
|
||||
|
||||
.checkbox{
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
|
@ -118,3 +118,10 @@
|
|||
margin-right: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.label-input{
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
font-size: larger;
|
||||
margin-top: 1vw;
|
||||
}
|
15
index.php
15
index.php
|
@ -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>
|
||||
|
||||
<?php
|
||||
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>
|
||||
<?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>
|
||||
<a href="deconnection.php" class="button color-red-tr" id="btn-deconnection">Se déconnecter</a>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<br>
|
||||
<br>
|
||||
<div id="user_status">
|
||||
|
@ -42,7 +51,9 @@
|
|||
<div class="barre-recherche centre-horizontal">
|
||||
<form id="recherche_form">
|
||||
<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="number" id="duree_input" placeholder="durée en minutes">
|
||||
</form>
|
||||
|
|
20
init_db.php
20
init_db.php
|
@ -12,6 +12,15 @@ if ($conn->connect_error) {
|
|||
|
||||
// Create tables
|
||||
$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 (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL
|
||||
|
@ -23,7 +32,9 @@ $sql = "
|
|||
valide BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
corrige_inclu BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
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 (
|
||||
|
@ -60,13 +71,6 @@ $sql = "
|
|||
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) {
|
||||
|
|
|
@ -25,6 +25,21 @@ session_start();
|
|||
<div class="formulaire">
|
||||
<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>
|
||||
|
||||
<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 <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>
|
||||
</div>
|
||||
<h2>Oui c'est vide oui ~\_(^-^)_/~</h2>
|
||||
|
|
24
js/index.js
24
js/index.js
|
@ -1,4 +1,7 @@
|
|||
|
||||
async function rechercher(){
|
||||
|
||||
console.log("recherche !!");
|
||||
var req = document.getElementById("recherche_input").value;
|
||||
var themes = [];
|
||||
Array.from(document.getElementsByClassName("theme")).forEach(function (el) {
|
||||
|
@ -7,22 +10,29 @@ async function rechercher(){
|
|||
});
|
||||
var duree =document.getElementById("duree_input").value
|
||||
|
||||
|
||||
var url = "api.php/rechercher?req="+req;
|
||||
if(themes.toString() != ""){
|
||||
url = url +"&themes="+themes.toString();
|
||||
}
|
||||
|
||||
if(duree != ""){
|
||||
url = url +"duree="+duree;
|
||||
url = url +"&duree="+duree;
|
||||
|
||||
}
|
||||
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);
|
||||
|
||||
data = await resp.json();
|
||||
|
||||
console.log(data);
|
||||
|
||||
// vide d'abord les éléments présents dans la liste sur la page
|
||||
document.getElementById("liste_resultats").innerHTML = "";
|
||||
|
||||
|
@ -129,7 +139,6 @@ async function gen_chronologie(){
|
|||
resp = await fetch(url);
|
||||
|
||||
data = await resp.json();
|
||||
console.log(data);
|
||||
// vide d'abord les éléments présents dans la liste sur la page
|
||||
document.getElementById("liste_resultats").innerHTML = "";
|
||||
|
||||
|
@ -240,17 +249,21 @@ document.addEventListener("DOMContentLoaded", (event)=>{
|
|||
gen_chronologie();
|
||||
|
||||
test_auth();
|
||||
document.getElementById("recherche_input").onkeydown =function(event) {
|
||||
document.getElementById("recherche_input").addEventListener("keypress", (event)=>{
|
||||
console.log("???");
|
||||
if (event.key === "Enter"){
|
||||
event.preventDefault();
|
||||
rechercher();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById("recherche_form").onsubmit = function(event){
|
||||
event.preventDefault();
|
||||
// faire tomber le clavier sur mobile
|
||||
document.activeElement.blur();
|
||||
rechercher();
|
||||
|
||||
|
||||
}
|
||||
|
||||
document.getElementById("themes_input").onkeydown =function(event) {
|
||||
|
@ -276,5 +289,6 @@ document.addEventListener("DOMContentLoaded", (event)=>{
|
|||
window.location.pathname = "/archinsa";
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
|
|
@ -4,7 +4,8 @@ function inscription(){
|
|||
|
||||
formData.append("username",document.getElementById("username-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);
|
||||
|
||||
fetch('api.php/inscription', {
|
||||
|
|
|
@ -44,7 +44,7 @@ function televerser_fichiers() {
|
|||
|
||||
|
||||
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("corrige_inclu",document.getElementById("corrige_checkbox").value);
|
||||
|
|
10
readme.md
10
readme.md
|
@ -59,7 +59,9 @@ D'autres fonctionnalités seront ajoutées petit à petit. (si vous avez des sug
|
|||
|
||||
|
||||
## 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 :
|
||||
|
@ -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).
|
||||
|
||||
|
|
|
@ -6,16 +6,15 @@ session_start();
|
|||
|
||||
$csrf = new CSRF();
|
||||
|
||||
|
||||
include("session_verif.php");
|
||||
|
||||
|
||||
// Check if user is logged in and is an admin
|
||||
if (!isset($_SESSION["utilisateur_authentifie"]) || $_SESSION["utilisateur_authentifie"] !== true || !$_SESSION["admin"]) {
|
||||
header("Location: index.php");
|
||||
exit;
|
||||
}
|
||||
include("test_creds.php");
|
||||
|
||||
$conn = new mysqli($servername, $username, $password,$dbname);
|
||||
|
||||
admin_seulement();
|
||||
|
||||
|
||||
// Function to fetch and display documents
|
||||
function generer_chronologie() {
|
||||
|
|
Loading…
Reference in a new issue