diff --git a/_partials/_footer.php b/_partials/_footer.php new file mode 100644 index 0000000..751dfe3 --- /dev/null +++ b/_partials/_footer.php @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/index.php b/index.php index aee05bf..3c75979 100644 --- a/index.php +++ b/index.php @@ -1,11 +1,10 @@ - - - - Document - + - + diff --git a/js/ens.js b/js/ens.js new file mode 100644 index 0000000..70c4569 --- /dev/null +++ b/js/ens.js @@ -0,0 +1,32 @@ + + /* + + pour les docs afficher un truc du même acabit que la php : + if (strtolower($extension) === 'pdf'): + echo ""; + elseif (in_array(strtolower($extension), ['jpg', 'jpeg', 'png', 'gif'])): + echo ""; + else: + echo "

Oups ! Je ne sais pas afficher ce document :/ (Rales autant que tu veux je men fous)

".$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); + } + +} \ No newline at end of file diff --git a/js/index.js b/js/index.js new file mode 100644 index 0000000..fdc9d48 --- /dev/null +++ b/js/index.js @@ -0,0 +1,170 @@ +async function test_auth(){ + resp = await fetch("api.php/test_auth"); + data = await resp.json(); + document.getElementById("user_status").innerText = data["msg"]; +} + +// fonction de test, innutile en prod +async function authenticate_user(){ + resp = await fetch("api.php/auth"); + data = await resp.json(); + console.log("test"); + if(data.status == 1){ + document.getElementById("user_status").innerText = data["msg"]; + } +} + + +async function unauthenticate_user(){ + resp = await fetch("api.php/unauth"); + data = await resp.json(); + if(data.status == 1){ + document.getElementById("user_status").innerText = data["msg"]; + } +} + + + +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 + + + var url = "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(); + + // vide d'abord les éléments présents dans la liste sur la page + document.getElementById("liste_resultats").innerHTML = ""; + + if(data.status == 1){ + data.resultats.forEach(doc => { + + + + // on affiche le titre du résultat parce qu'on est pas des sauvages + let titre_ensemble; + titre_ensemble = document.createElement("h2"); + titre_ensemble.innerText = doc.titre; + titre_ensemble.setAttribute("onclick","document.location.href='ens.php?ensemble_id="+doc.ensemble_id.toString()+"'"); + + document.getElementById("liste_resultats").appendChild(titre_ensemble); + + + // images ou pdf ? + let ele; + if(doc.upload_path.toString().split(".").pop() == "pdf"){ + ele = document.createElement("embed"); + + + }else{ + ele = document.createElement("img"); + } + + ele.src = doc.upload_path; + ele.setAttribute("onclick","document.location.href='ens.php?ensemble_id="+doc.ensemble_id.toString()+"'"); + document.getElementById("liste_resultats").appendChild(ele); + + + + + }); + } +} + + + +async function gen_chronologie(){ + var url = "api.php/generer_chronologie"; + + console.log(url); + + 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 = ""; + + // ensuite on ajoute un petit titre à la chronologie + let titre = document.createElement("h1"); + titre.innerText = "Documents récemment publiés"; + document.getElementById("liste_resultats").appendChild(titre); + + // et on remplis avec ce que l'api a généré + if(data.status == 1){ + data.resultats.forEach(ens => { + + ens.documents.forEach(doc=>{ + // on affiche le titre du résultat parce qu'on est pas des sauvages + let titre_ensemble; + titre_ensemble = document.createElement("h2"); + titre_ensemble.innerText = doc.titre; + titre_ensemble.setAttribute("onclick","document.location.href='ens.php?ensemble_id="+doc.ensemble_id.toString()+"'"); + document.getElementById("liste_resultats").appendChild(titre_ensemble); + + // fichiers spéciaux ? + let apercu; + let ext = doc.upload_path.toString().split(".").pop(); + switch(ext){ + case "pdf": + ele = document.createElement("embed"); + break; + case "html": + ele = document.createElement("iframe"); + ele.setAttribute("sandbox","allow-forms allow-modals allow-scripts"); + break; + default: + ele = document.createElement("img"); + break; + + + } + + ele.src = doc.upload_path; + ele.setAttribute("onclick","document.location.href='ens.php?ensemble_id="+doc.ensemble_id.toString()+"'"); + document.getElementById("liste_resultats").appendChild(ele); + + }); + + + + }); + } +} + + +gen_chronologie(); + +test_auth(); +document.getElementById("recherche_input").onkeydown =function(event) { + if (event.key === "Enter"){ + 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 = ""; + } +} diff --git a/js/televerser.js b/js/televerser.js new file mode 100644 index 0000000..ebb535a --- /dev/null +++ b/js/televerser.js @@ -0,0 +1,237 @@ +function televerser_fichiers() { + const fileInput = document.getElementById('fileInput'); + + // Create FormData object to append files + const formData = new FormData(); + + formData.append("type",document.getElementById("select_type").value); + formData.append("titre",document.getElementById("titre").value); + formData.append("commentaire_auteur",document.getElementById("commentaire_auteur").value); + + formData.append("corrige_inclu",document.getElementById("corrige_checkbox").value); + + formData.append("date_conception",document.getElementById("date_conception_input").value); + + //let ex = [{duree:"10",themes:["algèbre","analyse"],commentaire_exo:"ceci est un commenataire"},{duree:"15",themes:["elec analogique"],commentaire_exo:""}]; + + var ex = []; + // details des exos pour les annales + if(formData.get("type") == "1"){ + var details = document.getElementsByClassName("input-details-exo"); + + for(let i=0;i { + const imageDataUrl = img.src; + const blob = dataURLtoBlob(imageDataUrl); + const file = new File([blob], `camera_image_${index}.jpg`); + formData.append('fichier'+i, file); + i ++; + }); + + // Make a POST request using Fetch API + fetch('api.php/aj_doc', { + method: 'POST', + body: formData + }) + .then(response => response.text()) + .then(data => { + console.log(data); + // Handle the response from the server + }) + .catch(error => { + console.error('Error:', error); + }); +} + +function ouvrir_camera() { + // Open the camera and take pictures + // You can use the MediaDevices API to access the camera + navigator.mediaDevices.getUserMedia({ video: true }) + .then(mediaStream => { + const video = document.createElement('video'); + document.body.appendChild(video); + + // Display the camera stream in a video element + video.srcObject = mediaStream; + video.play(); + + // Capture an image from the video stream + video.addEventListener('click', () => { + const canvas = document.createElement('canvas'); + canvas.width = video.videoWidth; + canvas.height = video.videoHeight; + const context = canvas.getContext('2d'); + context.drawImage(video, 0, 0, canvas.width, canvas.height); + + // Convert the canvas content to a data URL + const imageDataUrl = canvas.toDataURL('image/jpeg'); + + // Display the captured image + const img = document.createElement('img'); + img.src = imageDataUrl; + img.style.maxWidth = '100px'; + document.getElementById('selectedImages').appendChild(img); + + }); + + // POUR FERMER LA CAMERA : + // mediaStream.getTracks().forEach(track => track.stop()); + + + }) + .catch(error => { + console.error('Error accessing camera:', error); + }); +} + + + +function dataURLtoBlob(dataURL) { + const arr = dataURL.split(','); + const mime = arr[0].match(/:(.*?);/)[1]; + const bstr = atob(arr[1]); + let n = bstr.length; + const u8arr = new Uint8Array(n); + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + return new Blob([u8arr], { type: mime }); +} + + +function ajouter_details_exo(){ + duree = document.createElement("input"); + duree.setAttribute("type","number"); + duree.setAttribute("placeholder","Entrez la durée de l'exercice en minutes.") + + // classe imortante pour itérer sur toutes les input + // dans le bon ordre et les associer aux exos dans la requête post + duree.setAttribute("class","input-details-exo"); + + document.getElementById("exercices_details_wrapper").appendChild(duree); + + + themes = document.createElement("input"); + themes.setAttribute("type","text"); + themes.setAttribute("placeholder","Entrez les themes abordés par l'exercice séparés par une virgule."); + themes.setAttribute("class","input-details-exo"); + + document.getElementById("exercices_details_wrapper").appendChild(themes); + + + comm = document.createElement("input"); + comm.setAttribute("type","text"); + comm.setAttribute("placeholder","Un ptit commentaire sur l'exo ?"); + comm.setAttribute("class","input-details-exo"); + + document.getElementById("exercices_details_wrapper").appendChild(comm); + + + // un peu de tendresse dans ce monde de brutes + br =document.createElement("br"); + document.getElementById("exercices_details_wrapper").appendChild(br); + hr =document.createElement("hr"); + document.getElementById("exercices_details_wrapper").appendChild(hr); +} + + + +function mode_html(){ + + document.getElementById("exercices_details_wrapper").setAttribute("hidden",true); + document.getElementById("corrige_checkbox_wrapper").setAttribute("hidden",true); + +} +function mode_fiche(){ + document.getElementById("exercices_details_wrapper").setAttribute("hidden",true); + document.getElementById("corrige_checkbox_wrapper").setAttribute("hidden",true); + +} + +function mode_annale(){ + document.getElementById("corrige_checkbox_wrapper").removeAttribute("hidden"); + document.getElementById("exercices_details_wrapper").removeAttribute("hidden"); +} + + +function changer_mode(){ + + + switch(document.getElementById("select_type").value){ + // annale + case "1": + mode_annale(); + break; + // fiche + case "2": + mode_fiche(); + break; + + // html personnalisé + case "3": + mode_html(); + break; + + } +} + + +function init_date(){ + var today = new Date(); + var dd = today.getDate(); + var mm = today.getMonth()+1; + var yyyy = today.getFullYear()-1; // pourquoi 2025 ????? + yyyy = parseInt(yyyy) + 1; + today = yyyy+"-"+mm+"-"+dd; + console.log(today); + document.getElementById("date_conception_input").setAttribute("value",today); +} + +document.addEventListener("DOMContentLoaded", (event) => { + init_date(); + document.getElementById("select_type").addEventListener("change", (event) => { + changer_mode(); + }); + + document.getElementById("btn-soumettre").addEventListener("click", (event) => { + televerser_fichiers(); + }); + + document.getElementById("btn-camera").addEventListener("click", (event) => { + ouvrir_camera(); + }); + + document.getElementById("btn-details-exo").addEventListener("click", (event) => { + ajouter_details_exo(); + }); + +}); + diff --git a/televerser.php b/televerser.php index 24d2d50..a4cecc8 100644 --- a/televerser.php +++ b/televerser.php @@ -1,10 +1,9 @@ - - - - File Upload - +
- @@ -40,242 +39,19 @@ $csrf = new CSRF();
- +
- +
- - - - - + + +script($context='televersement', $name='jeton_csrf', $declaration='var', $time2Live=-1, $max_hashes=5); + include "_partials/_footer.php"; +?>