diff --git a/WEB/Config/Config.php b/WEB/Config/Config.php index 190e415e..ed27fa94 100644 --- a/WEB/Config/Config.php +++ b/WEB/Config/Config.php @@ -1,6 +1,6 @@ goToEnigmeMultiManager(); break; + case "goToEnigmeSoloManager": + $this->goToEnigmeSoloManager(); + break; + case "goToDetailEnigme": + $this->goToDetailEnigme(); + break; + case "goToModifEnigmeSolo": + $this->goToModifEnigmeSolo(); + break; + case "goToAdminSolo": + $this->goToAdminSolo(); + break; + case "goToSeeOrdre": + $this->goToSeeOrdre(); + break; + case "goToModifOrdre": + $this->goToModifOrdre(); + break; + case "editEnigme": + $this->editEnigme(); + break; + case "deleteEnigme": + $this->deleteEnigme(); + break; default: $error = "Action non valide"; require($rep . $vues['erreur']); @@ -111,6 +135,113 @@ class AdminController extends UserController require($rep . $vues['erreur']); } } + public function goToEnigmeSoloManager() + { + try { + global $rep, $vues; + $model = new AdminModel(); + $lesEnigmes = $model->getEnigmesSolo(); + require($rep . $vues['enigmeSoloManager']); + } catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } + public function goToDetailEnigme() + { + try { + global $rep, $vues; + $model = new AdminModel(); + $enigme = $model->getEnigmeById($_GET['id']); + require($rep . $vues['detailEnigme']); + } catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } + public function goToModifEnigmeSolo() + { + try { + global $rep, $vues; + $model = new AdminModel(); + $enigme = $model->getEnigmeById($_GET['id']); + require($rep . $vues['modifEnigmeSolo']); + } catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } + public function goToAdminSolo() + { + try { + global $rep, $vues; + require($rep . $vues['adminSolo']); + } catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } + public function goToSeeOrdre() + { + try { + global $rep, $vues; + $model = new AdminModel(); + $lesEnigmes = $model->getEnigmesSolo(); + require($rep . $vues['seeOrdre']); + } catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } + public function goToModifOrdre() + { + try { + global $rep, $vues; + $model = new AdminModel(); + $lesEnigmes = $model->getEnigmesSolo(); + require($rep . $vues['modifOrdre']); + } catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } + public function editEnigme() + { + try{ + global $rep, $vues; + $model = new AdminModel(); + $id = $_GET['id']; + $nom = $_POST['nom']; + $enonce = $_POST['enigme']; + $aide = $_POST['aide']; + $rappel = $_POST['rappel']; + $exemple = $_POST['exemple']; + $test = $_POST['test']; + $solution = $_POST['solution']; + $prompt = $_POST['prompt']; + $enigme = $model->editEnigme($id, $nom, $enonce, $aide, $rappel, $exemple, $test, $solution, $prompt); + echo ''; + require($rep . $vues['detailEnigme']); + } + catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } + public function deleteEnigme(){ + try{ + global $rep, $vues; + $model = new AdminModel(); + $id = $_GET['id']; + $model->deleteEnigme($id); + echo ''; + $this->goToEnigmeSoloManager(); + } + catch (Exception $e) { + $error = $e->getMessage(); + require($rep . $vues['erreur']); + } + } public function addNewEnigmeSolo() { @@ -138,7 +269,8 @@ class AdminController extends UserController $exemple = "Il n'y a pas d'exemple pour cette énigme"; } $enigme = $model->addNewEnigmeSolo($nom, $enonce, $aide, $rappel, $exemple, $test, $solution, $prompt); - require($rep . $vues['enigmePage']); + echo ''; + require($rep . $vues['adminSolo']); } catch (Exception $e) { $error = $e->getMessage(); require($rep . $vues['erreur']); diff --git a/WEB/Controller/EnigmeGateway.php b/WEB/Controller/EnigmeGateway.php index d0bf8c24..f9545f15 100644 --- a/WEB/Controller/EnigmeGateway.php +++ b/WEB/Controller/EnigmeGateway.php @@ -51,6 +51,26 @@ class EnigmeGateway )); } + // function that upadate enigme in database + public function update(Enigme $enigme) + { + $query = "UPDATE Enigme SET nom=:nom, enonce=:enonce, aide=:aide, rappel=:rappel, exemple=:exemple, solution=:solution, test=:test, ordre=:ordre, tempsDeResolution=:tempsDeResolution, points=:points, prompt=:prompt WHERE id=:id"; + $this->con->executeQuery($query, array( + ':id' => array($enigme->getIdEnigme(), SQLITE3_INTEGER), + ':nom' => array($enigme->getNom(), SQLITE3_TEXT), + ':enonce' => array($enigme->getEnonce(), SQLITE3_TEXT), + ':aide' => array($enigme->getAide(), SQLITE3_TEXT), + ':rappel' => array($enigme->getRappel(), SQLITE3_TEXT), + ':exemple' => array($enigme->getExemple(), SQLITE3_TEXT), + ':solution' => array($enigme->getSolution(), SQLITE3_TEXT), + ':test' => array($enigme->getTest(), SQLITE3_TEXT), + ':ordre' => array($enigme->getOrdre(), SQLITE3_INTEGER), + ':tempsDeResolution' => array($enigme->getTempsDeResolution(), SQLITE3_INTEGER), + ':points' => array($enigme->getPoints(), SQLITE3_INTEGER), + ':prompt' => array($enigme->getPrompt(), SQLITE3_TEXT) + )); + } + /** * It deletes a row from the table Enigme where the idEnigme is equal to the idEnigme passed as a * parameter @@ -59,7 +79,7 @@ class EnigmeGateway */ public function delete(string $idEnigme) { - $query= "DELETE FROM Enigme WHERE idEnigme=:idEnigme"; + $query= "DELETE FROM Enigme WHERE id=:idEnigme"; $this->con->executequery($query, array( ':idEnigme' => array($idEnigme,SQLITE3_INTEGER) )); diff --git a/WEB/Model/AdminModel.php b/WEB/Model/AdminModel.php index 6d10b579..3080ff07 100644 --- a/WEB/Model/AdminModel.php +++ b/WEB/Model/AdminModel.php @@ -24,7 +24,6 @@ class AdminModel } $enigme = new Enigme(1,$nom, $enonce, $aide, $rappel, $exemple, $solution, $test, $ordre, 0, 0, $prompt); $this->enigme_gateway->insert($enigme); - var_dump($enigme); $tabEnigme = $this->enigme_gateway->findLastEnigma(); $js = fopen("View/src/JS/$nom.js", "w"); if (is_resource($js)) { @@ -44,4 +43,43 @@ async function submit(){ } return $tabEnigme[0]; } + + public function deleteEnigme(int $id) : void + { + $nom = $this->enigme_gateway->findById($id)[0]->getNom(); + $this->enigme_gateway->delete($id); + unlink('View/src/JS/'.$nom.'.js'); + } + + public function getEnigmesSolo() : array + { + return $this->enigme_gateway->findSoloEnigma(); + } + public function getEnigmeById (int $id) : Enigme + { + return $this->enigme_gateway->findById($id)[0]; + } + public function editEnigme(int $id, string $nom,string $enonce,string $aide,string $rappel,string $exemple,string $test,string $solution, string $prompt) : Enigme + { + $ordre = $this->enigme_gateway->findById($id)[0]->getOrdre(); + $enigme = new Enigme($id,$nom, $enonce, $aide, $rappel, $exemple, $solution, $test, $ordre, 0, 0, $prompt); + $this->enigme_gateway->update($enigme); + $js = fopen("View/src/JS/$nom.js", "w"); + if (is_resource($js)) { + fwrite($js, "//~ Function that test the user code + +async function submit(){ + var test = editor.getValue()+`\\n\n". $solution . "\n". $test . "\n`; + exec(\"print ('True')\", \"code\"); + exec(test, \"solution\"); + result.innerHTML = \"Test en cours...\"; + await new Promise(r => setTimeout(r, 1500)); + check(); +}"); + fclose($js); + } else { + throw new Exception("Impossible d'ouvrir le fichier"); + } + return $enigme; + } } \ No newline at end of file diff --git a/WEB/View/src/JS/Chouette.js b/WEB/View/src/JS/Chouette.js index 58433f5c..6e5fc2c2 100644 --- a/WEB/View/src/JS/Chouette.js +++ b/WEB/View/src/JS/Chouette.js @@ -1,8 +1,7 @@ //~ Function that test the user code - + async function submit(){ var test = editor.getValue()+`\n -import random as r def chouetteVerif(valeur): res=list() for i in range(1, 7): @@ -11,7 +10,7 @@ def chouetteVerif(valeur): if (i+j+k) == valeur: res.append([i, j, k]) return res - + import random as r def test_chouette(n): chouette(1) listTest=[] @@ -23,11 +22,10 @@ def test_chouette(n): return True print(test_chouette(5)) - `; +`; exec("print ('True')", "code"); exec(test, "solution"); result.innerHTML = "Test en cours..."; await new Promise(r => setTimeout(r, 1500)); check(); -} - +} \ No newline at end of file diff --git a/WEB/View/src/pages/Admin/Admin.php b/WEB/View/src/pages/Admin/Admin.php index c2368c9c..ccbbc101 100644 --- a/WEB/View/src/pages/Admin/Admin.php +++ b/WEB/View/src/pages/Admin/Admin.php @@ -57,7 +57,7 @@ Gestion Enigme Solo diff --git a/WEB/View/src/pages/Admin/AdminSolo.php b/WEB/View/src/pages/Admin/AdminSolo.php new file mode 100644 index 00000000..1689afa0 --- /dev/null +++ b/WEB/View/src/pages/Admin/AdminSolo.php @@ -0,0 +1,28 @@ + + + + Admin + + + + + + + + +
+

Enigme Solo

+
+ Ajouter une enigme + Gérer les enigmes +
+
+ \ No newline at end of file diff --git a/WEB/View/src/pages/Admin/DetailEnigme.php b/WEB/View/src/pages/Admin/DetailEnigme.php new file mode 100644 index 00000000..09cfcb0b --- /dev/null +++ b/WEB/View/src/pages/Admin/DetailEnigme.php @@ -0,0 +1,85 @@ + + + + Admin + + + + + + + + +
+
+
+

Enigme

+
+
+
+
+ + + + + + + + + + ".$enigme->getOrdre().""; ?> + + + + ".$enigme->getNom().""; ?> + + + + ".$enigme->getEnonce().""; ?> + + + + ".$enigme->getAide().""; ?> + + + + ".$enigme->getRappel().""; ?> + + + + ".$enigme->getExemple().""; ?> + + + + ".$enigme->getSolution().""; ?> + + + + ".$enigme->getTest().""; ?> + + + + ".$enigme->getPrompt().""; ?> + + + + getIdEnigme()."\">Modifier"; ?> + + + + getIdEnigme()."\">Supprimer"; ?> + + +
ChampDonnée
Ordre
Nom
Enonce
Aide
Rappel
Exemple
Solution
Test
Prompt
Modifier
Supprimer
+
+
+
+ \ No newline at end of file diff --git a/WEB/View/src/pages/Admin/EnigmeSoloManager.php b/WEB/View/src/pages/Admin/EnigmeSoloManager.php new file mode 100644 index 00000000..54a333e9 --- /dev/null +++ b/WEB/View/src/pages/Admin/EnigmeSoloManager.php @@ -0,0 +1,32 @@ + + + + Admin + + + + + + + + +
+

Enigme Solo Manager

+
+ Modifier l'ordre + getIdEnigme()."\" role=\"button\">".$enigme->getNom() .""; + } + ?> +
+
+ \ No newline at end of file diff --git a/WEB/View/src/pages/Admin/ModifEnigmeSolo.php b/WEB/View/src/pages/Admin/ModifEnigmeSolo.php new file mode 100644 index 00000000..c29e42fa --- /dev/null +++ b/WEB/View/src/pages/Admin/ModifEnigmeSolo.php @@ -0,0 +1,77 @@ + + + + Admin + + + + + + + + +
+ method="POST"> +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+ + \ No newline at end of file diff --git a/WEB/View/src/pages/Admin/ModifOrdre.php b/WEB/View/src/pages/Admin/ModifOrdre.php new file mode 100644 index 00000000..debbb004 --- /dev/null +++ b/WEB/View/src/pages/Admin/ModifOrdre.php @@ -0,0 +1,55 @@ + + + + Admin + + + + + + + + +
+
+
+

Ordre des énigmes

+
+
+
+
+
+ + + + + + + + + "; + echo ""; + echo ''; + echo ""; + } + ?> + +
EnigmeOrdre
".$enigme->getNom()."
+ +
+
+
+
+ \ No newline at end of file diff --git a/WEB/View/src/pages/Admin/SeeOrdre.php b/WEB/View/src/pages/Admin/SeeOrdre.php new file mode 100644 index 00000000..65724b4d --- /dev/null +++ b/WEB/View/src/pages/Admin/SeeOrdre.php @@ -0,0 +1,54 @@ + + + + Admin + + + + + + + + +
+
+
+

Ordre des énigmes

+
+
+
+
+ + + + + + + + + "; + echo ""; + echo ""; + echo ""; + } + ?> + + + Modifier'; ?> + + +
EnigmeOrdre
".$enigme->getNom()."".$enigme->getOrdre()."
Modifier
+
+
+
+ \ No newline at end of file diff --git a/WEB/bd.sql b/WEB/bd.sql index 76389e14..eff0d232 100644 --- a/WEB/bd.sql +++ b/WEB/bd.sql @@ -26,7 +26,7 @@ rappel varchar(250), exemple varchar(250), solution varchar(250) NOT NULL, test varchar(250) NOT NULL, -ordre integer CHECK (ordre >=-1), +ordre integer UNIQUE CHECK (ordre >=-1), tempsDeResolution numeric CHECK (tempsDeResolution >=0), points numeric CHECK (points >=0), prompt varchar(250)