Compare commits

...

16 Commits
master ... php

Author SHA1 Message Date
Antoine JOURDAIN 1958b44b75 Mise à jour de 'README.md'
1 year ago
Antoine JOURDAIN 31966091b3 MAJ MCD/MLD
1 year ago
Anthony RICHARD 1199df9d04 fix erreur en haut de la page home
1 year ago
Anthony RICHARD dede582ca3 fix demo pour les student + visuel boutons des actions student
1 year ago
Antoine JOURDAIN a3b6b9262d Fix gateway + alert quiz + page accueil
1 year ago
Antoine JOURDAIN a7332fc69f Modification DB
1 year ago
Anthony RICHARD f7003a1309 code smells
1 year ago
Patrick BRUGIERE 684ad0d038 Merge branch 'php' of https://codefirst.iut.uca.fr/git/antoine.jourdain/SAE_2A_Anglais into php
1 year ago
Patrick BRUGIERE e224c6109f modification de l'affichage des resultats (et du code php derriere)
1 year ago
Anthony RICHARD 083cdb1f43 fix appel gateway dans les controllers
1 year ago
Anthony RICHARD 638b7e9aca fix student qui a accès à toutes les listes
1 year ago
Anthony RICHARD 8fe07e0328 Merge branch 'php' of https://codefirst.iut.uca.fr/git/antoine.jourdain/SAE_2A_Anglais into php
1 year ago
Anthony RICHARD 8d45af3abb fix fonctions inutiles + code en commentaire
1 year ago
Patrick BRUGIERE 4013db8489 Merge branch 'php' of https://codefirst.iut.uca.fr/git/antoine.jourdain/SAE_2A_Anglais into php
1 year ago
Patrick BRUGIERE 08b72fea9d ajout de la valeur de retour pour chaque fonction
1 year ago
Anthony RICHARD 647090ace5 fix titres pages
1 year ago

@ -63,25 +63,26 @@ CREATE TABLE Language(
); );
CREATE TABLE Vocabulary( CREATE TABLE Vocabulary(
word varchar(255) PRIMARY KEY id int(10) PRIMARY KEY AUTO_INCREMENT,
word varchar(255)
); );
CREATE TABLE Translate( CREATE TABLE Translate(
id int(10) PRIMARY KEY AUTO_INCREMENT, id int(10) PRIMARY KEY AUTO_INCREMENT,
firstWord varchar(255), firstWordID int(10),
secondWord varchar(255), secondWordID int(10),
listVoc int(10), listVoc int(10),
FOREIGN KEY (firstWord) REFERENCES Vocabulary(word), FOREIGN KEY (firstWordID) REFERENCES Vocabulary(id),
FOREIGN KEY (secondWord) REFERENCES Vocabulary(word), FOREIGN KEY (secondWordID) REFERENCES Vocabulary(id),
FOREIGN KEY (listVoc) REFERENCES VocabularyList(id) FOREIGN KEY (listVoc) REFERENCES VocabularyList(id)
); );
CREATE TABLE Register( CREATE TABLE Register(
language varchar(30), language varchar(30),
word varchar(255), idWord int(10),
FOREIGN KEY (language) REFERENCES Language(name), FOREIGN KEY (language) REFERENCES Language(name),
FOREIGN KEY (word) REFERENCES Vocabulary(word), FOREIGN KEY (idWord) REFERENCES Vocabulary(id),
PRIMARY KEY (language, word) PRIMARY KEY (language, idWord)
); );
INSERT INTO Role_ VALUES (1, 'admin'); INSERT INTO Role_ VALUES (1, 'admin');

@ -9,85 +9,84 @@ DELETE FROM User_;
DELETE FROM Group_; DELETE FROM Group_;
-- Group -- Group
INSERT INTO Group_ VALUES (1, 1, 2022, "Computer Science"); INSERT INTO `group_` (`id`, `num`, `year`, `sector`) VALUES
INSERT INTO Group_ VALUES (2, 2, 2023, "Network Administration"); (1, '1', '2022', 'Computer Science'),
INSERT INTO Group_ VALUES (3, 1, 2023, "Computer Science"); (2, '2', '2023', 'Network Administration'),
(3, '1', '2023', 'Computer Science');
-- User : student
INSERT INTO User_ VALUES (1, "Password*123", "francois.dupont@etu.uca.fr", "François", "Dupont", "dupfranc", "", false, 1); -- Users
INSERT INTO User_ VALUES (2, "Password*123", "sylvain.volvic@etu.uca.fr", "Sylvain", "Volvic", "sylvaincpt", "", true, 1); INSERT INTO `user_` (`id`, `password`, `email`, `name`, `surname`, `nickname`, `image`, `extraTime`, `groupID`) VALUES
INSERT INTO User_ VALUES (3, "Password*123", "jean.bombeur@etu.uca.fr", "Jean", "Bombeur", "jambombeurre", "", false, 2); (1, '$2y$10$ZwmRqiLwb2.2QOyoXtgcYOhLX8ZF/f8eroxrsRJqMyF4uI/44VhR6', 'francois.dupont@etu.uca.fr', 'François', 'Dupont', 'dupfranc', '', 0, 1),
INSERT INTO User_ VALUES (6, "Password*123", "tony.tonic@etu.uca.fr", "Tony", "Tonic", "tonytonic", "", false, 3); (3, '$2y$10$ZwmRqiLwb2.2QOyoXtgcYOhLX8ZF/f8eroxrsRJqMyF4uI/44VhR6', 'jean.bombeur@etu.uca.fr', 'Jean', 'Bombeur', 'jambombeurre', '', 0, 2),
INSERT INTO User_ VALUES (10, "$2y$10$RHgtbmnMWixD/ztTz55L9elDisjiyDy.NobsWa8L8pzYDgQYJGL.y", "student@uca.fr", "Student", "UCA", "student", "", NULL, NULL); (6, '$2y$10$ZwmRqiLwb2.2QOyoXtgcYOhLX8ZF/f8eroxrsRJqMyF4uI/44VhR6', 'tony.tonic@etu.uca.fr', 'Tony', 'Tonic', 'tonytonic', '', 0, 3),
(10, '$2y$10$RHgtbmnMWixD/ztTz55L9elDisjiyDy.NobsWa8L8pzYDgQYJGL.y', 'student@uca.fr', 'Student', 'UCA', 'student', '', NULL, 2),
-- User : teacher (5, '$2y$10$ZwmRqiLwb2.2QOyoXtgcYOhLX8ZF/f8eroxrsRJqMyF4uI/44VhR6', 'michel.singinou@ext.uca.fr', 'Michel', 'Singinou', 'mich', '', NULL, NULL),
INSERT INTO User_ VALUES (5, "Password*123", "michel.singinou@ext.uca.fr", "Michel", "Singinou", "mich", "", NULL, NULL); (20, '$2y$10$vvY7Dny2Qt0LdRgIxcZ.5uZ3LygRd1hMhqtjjj/v5tF57yos0JEmG', 'teacher@uca.fr', 'Teacher', 'UCA', 'teacher', '', NULL, NULL),
INSERT INTO User_ VALUES (20, "$2y$10$vvY7Dny2Qt0LdRgIxcZ.5uZ3LygRd1hMhqtjjj/v5tF57yos0JEmG", "teacher@uca.fr", "Teacher", "UCA", "teacher", "", NULL, NULL); (30, '$2y$10$STTT3uR83dcwduiqqyKRde3b02LQi9iavkzn47NbA.xUrt92PalgW', 'admin@uca.fr', 'Admin', 'UCA', 'admin', '', NULL, NULL);
-- User : admin
INSERT INTO User_ VALUES (30, "$2y$10$STTT3uR83dcwduiqqyKRde3b02LQi9iavkzn47NbA.xUrt92PalgW", "admin@uca.fr", "Admin", "UCA", "admin", "", NULL, NULL);
-- Role attribution -- Role attribution
INSERT INTO Be VALUES (1, 3); INSERT INTO `be` (`userID`, `roleID`) VALUES
INSERT INTO Be VALUES (2, 3); (1, 3),
INSERT INTO Be VALUES (3, 3); (3, 3),
INSERT INTO Be VALUES (6, 3); (5, 2),
INSERT INTO Be VALUES (10, 3); (6, 3),
(10, 3),
INSERT INTO Be VALUES (20, 2); (20, 2),
(30, 1);
INSERT INTO Be VALUES (5, 2);
INSERT INTO Be VALUES (30, 1);
-- Vocabulary list -- Vocabulary list
INSERT INTO VocabularyList VALUES (1, "Animaux", "", 5); INSERT INTO `vocabularylist` (`id`, `name`, `image`, `userID`) VALUES
INSERT INTO VocabularyList VALUES (2, "Informatique", "", 5); (1, 'Animaux', '', 5),
INSERT INTO VocabularyList VALUES (3, "Moyens de transport", "", 20); (2, 'Informatique', '', 5),
(3, 'Moyens de transport', '', 20),
(4, 'Entreprise', '', 20);
-- Vocabulary
INSERT INTO Vocabulary VALUES (1, "Chat");
INSERT INTO Vocabulary VALUES (2, "Chien");
INSERT INTO Vocabulary VALUES (3, "Lapin");
INSERT INTO Vocabulary VALUES (4, "Souris");
INSERT INTO Vocabulary VALUES (5, "Poisson");
INSERT INTO Vocabulary VALUES (6, "Ordinateur");
INSERT INTO Vocabulary VALUES (7, "Moto");
-- Vocabulary creation : FR
INSERT INTO Vocabulary VALUES ("Chat");
INSERT INTO Vocabulary VALUES ("Chien");
INSERT INTO Vocabulary VALUES ("Lapin");
INSERT INTO Vocabulary VALUES ("Souris");
INSERT INTO Vocabulary VALUES ("Poisson");
INSERT INTO Vocabulary VALUES ("Ordinateur");
INSERT INTO Vocabulary VALUES ("Moto");
-- Register : FR -- Register : FR
INSERT INTO Register VALUES ("French", "Chat"); INSERT INTO Register VALUES ('French', 1);
INSERT INTO Register VALUES ("French", "Chien"); INSERT INTO Register VALUES ('French', 2);
INSERT INTO Register VALUES ("French", "Ordinateur"); INSERT INTO Register VALUES ('French', 3);
INSERT INTO Register VALUES ("French", "Moto"); INSERT INTO Register VALUES ('French', 4);
INSERT INTO Register VALUES ("French", "Lapin"); INSERT INTO Register VALUES ('French', 5);
INSERT INTO Register VALUES ("French", "Souris"); INSERT INTO Register VALUES ('French', 6);
INSERT INTO Register VALUES ("French", "Poisson"); INSERT INTO Register VALUES ('French', 7);
-- Vocabulary creation : EN -- Vocabulary creation : EN
INSERT INTO Vocabulary VALUES ("Cat"); INSERT INTO Vocabulary VALUES (8, "Cat");
INSERT INTO Vocabulary VALUES ("Dog"); INSERT INTO Vocabulary VALUES (9, "Dog");
INSERT INTO Vocabulary VALUES ("Rabbit"); INSERT INTO Vocabulary VALUES (10, "Rabbit");
INSERT INTO Vocabulary VALUES ("Mouse"); INSERT INTO Vocabulary VALUES (11, "Mouse");
INSERT INTO Vocabulary VALUES ("Fish"); INSERT INTO Vocabulary VALUES (12, "Fish");
INSERT INTO Vocabulary VALUES ("Computer"); INSERT INTO Vocabulary VALUES (13, "Computer");
INSERT INTO Vocabulary VALUES ("Motorbike"); INSERT INTO Vocabulary VALUES (14, "Motorbike");
-- Register : EN -- Register : EN
INSERT INTO Register VALUES ("English", "Cat"); INSERT INTO Register VALUES ('English', 8);
INSERT INTO Register VALUES ("English", "Dog"); INSERT INTO Register VALUES ('English', 9);
INSERT INTO Register VALUES ("English", "Rabbit"); INSERT INTO Register VALUES ('English', 10);
INSERT INTO Register VALUES ("English", "Mouse"); INSERT INTO Register VALUES ('English', 11);
INSERT INTO Register VALUES ("English", "Fish"); INSERT INTO Register VALUES ('English', 12);
INSERT INTO Register VALUES ("English", "Computer"); INSERT INTO Register VALUES ('English', 13);
INSERT INTO Register VALUES ("English", "Motorbike"); INSERT INTO Register VALUES ('English', 14);
-- Translate -- Translate
INSERT INTO Translate VALUES (null, "Chat", "Cat", 1); INSERT INTO Translate VALUES (null, 1, 8, 1);
INSERT INTO Translate VALUES (null, "Chien", "Dog", 1); INSERT INTO Translate VALUES (null, 2, 9, 1);
INSERT INTO Translate VALUES (null, "Lapin", "Rabbit", 1); INSERT INTO Translate VALUES (null, 3, 10, 1);
INSERT INTO Translate VALUES (null, "Souris", "Mouse", 1); INSERT INTO Translate VALUES (null, 4, 11, 1);
INSERT INTO Translate VALUES (null, "Poisson", "Fish", 1); INSERT INTO Translate VALUES (null, 5, 12, 1);
INSERT INTO Translate VALUES (null, "Ordinateur", "Computer", 2); INSERT INTO Translate VALUES (null, 6, 13, 2);
INSERT INTO Translate VALUES (null, "Moto", "Motorbike", 3); INSERT INTO Translate VALUES (null, 7, 14, 3);
-- Practice -- Practice
INSERT INTO Practice VALUES (1, 1); INSERT INTO Practice VALUES (1, 1);
@ -97,115 +96,112 @@ INSERT INTO Practice VALUES (2, 1);
INSERT INTO Practice VALUES (3, 3); INSERT INTO Practice VALUES (3, 3);
-- FROM THE MAIL -- Vocabulary
INSERT INTO VocabularyList VALUES(4, "Entreprise", "", 5); INSERT INTO Vocabulary VALUES (21, "Corporate Headquarters / Head Office");
INSERT INTO Vocabulary VALUES (22, "Corporate Brochure");
-- Vocabulary creation : EN INSERT INTO Vocabulary VALUES (23, "The Board of Directors");
INSERT INTO Vocabulary VALUES ("Corporate Headquarters / Head Office"); INSERT INTO Vocabulary VALUES (24, "Boardroom");
INSERT INTO Vocabulary VALUES ("Corporate Brochure"); INSERT INTO Vocabulary VALUES (25, "C.E.O (Chief Executive Officer)");
INSERT INTO Vocabulary VALUES ("The Board of Directors"); INSERT INTO Vocabulary VALUES (26, "The Facilities (a facility = a building)");
INSERT INTO Vocabulary VALUES ("Boardroom"); INSERT INTO Vocabulary VALUES (27, "Plant / Factory");
INSERT INTO Vocabulary VALUES ("C.E.O (Chief Executive Officer)"); INSERT INTO Vocabulary VALUES (28, "Workshop");
INSERT INTO Vocabulary VALUES ("The Facilities (a facility = a building)"); INSERT INTO Vocabulary VALUES (29, "Warehouse");
INSERT INTO Vocabulary VALUES ("Plant / Factory"); INSERT INTO Vocabulary VALUES (30, "Fence");
INSERT INTO Vocabulary VALUES ("Workshop"); INSERT INTO Vocabulary VALUES (31, "Lobby/Entrance Hall");
INSERT INTO Vocabulary VALUES ("Warehouse"); INSERT INTO Vocabulary VALUES (32, "Branch");
INSERT INTO Vocabulary VALUES ("Fence"); INSERT INTO Vocabulary VALUES (33, "Nationwide");
INSERT INTO Vocabulary VALUES ("Lobby/Entrance Hall"); INSERT INTO Vocabulary VALUES (34, "Overseas / Abroad");
INSERT INTO Vocabulary VALUES ("Branch"); INSERT INTO Vocabulary VALUES (35, "Executives");
INSERT INTO Vocabulary VALUES ("Nationwide"); INSERT INTO Vocabulary VALUES (36, "Corporations Firms / Companies");
INSERT INTO Vocabulary VALUES ("Overseas / Abroad"); INSERT INTO Vocabulary VALUES (37, "The Chairman");
INSERT INTO Vocabulary VALUES ("Executives"); INSERT INTO Vocabulary VALUES (38, "Management");
INSERT INTO Vocabulary VALUES ("Corporations Firms / Companies"); INSERT INTO Vocabulary VALUES (39, "A Supplier");
INSERT INTO Vocabulary VALUES ("The Chairman"); INSERT INTO Vocabulary VALUES (40, "Retailer");
INSERT INTO Vocabulary VALUES ("Management");
INSERT INTO Vocabulary VALUES ("A Supplier");
INSERT INTO Vocabulary VALUES ("Retailer");
-- Register : EN -- Register : EN
INSERT INTO Register VALUES ("English", "Corporate Headquarters / Head Office"); INSERT INTO Register VALUES ('English', 21);
INSERT INTO Register VALUES ("English", "Corporate Brochure"); INSERT INTO Register VALUES ('English', 22);
INSERT INTO Register VALUES ("English", "The Board of Directors"); INSERT INTO Register VALUES ('English', 23);
INSERT INTO Register VALUES ("English", "Boardroom"); INSERT INTO Register VALUES ('English', 24);
INSERT INTO Register VALUES ("English", "C.E.O (Chief Executive Officer)"); INSERT INTO Register VALUES ('English', 25);
INSERT INTO Register VALUES ("English", "The Facilities (a facility = a building)"); INSERT INTO Register VALUES ('English', 26);
INSERT INTO Register VALUES ("English", "Plant / Factory"); INSERT INTO Register VALUES ('English', 27);
INSERT INTO Register VALUES ("English", "Workshop"); INSERT INTO Register VALUES ('English', 28);
INSERT INTO Register VALUES ("English", "Warehouse"); INSERT INTO Register VALUES ('English', 29);
INSERT INTO Register VALUES ("English", "Fence"); INSERT INTO Register VALUES ('English', 30);
INSERT INTO Register VALUES ("English", "Lobby/Entrance Hall"); INSERT INTO Register VALUES ('English', 31);
INSERT INTO Register VALUES ("English", "Branch"); INSERT INTO Register VALUES ('English', 32);
INSERT INTO Register VALUES ("English", "Nationwide"); INSERT INTO Register VALUES ('English', 33);
INSERT INTO Register VALUES ("English", "Overseas / Abroad"); INSERT INTO Register VALUES ('English', 34);
INSERT INTO Register VALUES ("English", "Executives"); INSERT INTO Register VALUES ('English', 35);
INSERT INTO Register VALUES ("English", "Corporations Firms / Companies"); INSERT INTO Register VALUES ('English', 36);
INSERT INTO Register VALUES ("English", "The Chairman"); INSERT INTO Register VALUES ('English', 37);
INSERT INTO Register VALUES ("English", "Management"); INSERT INTO Register VALUES ('English', 38);
INSERT INTO Register VALUES ("English", "A Supplier"); INSERT INTO Register VALUES ('English', 39);
INSERT INTO Register VALUES ("English", "Retailer"); INSERT INTO Register VALUES ('English', 40);
-- Vocabulary creation : FR -- Vocabulary creation : FR
INSERT INTO Vocabulary VALUES ("le siège de la société"); INSERT INTO Vocabulary VALUES (41, "le siège de la société");
INSERT INTO Vocabulary VALUES ("plaquette de la société"); INSERT INTO Vocabulary VALUES (42, "plaquette de la société");
INSERT INTO Vocabulary VALUES ("le conseil dadministration"); INSERT INTO Vocabulary VALUES (43, "le conseil dadministration");
INSERT INTO Vocabulary VALUES ("salle du conseil"); INSERT INTO Vocabulary VALUES (44, "salle du conseil");
INSERT INTO Vocabulary VALUES ("le PDG"); INSERT INTO Vocabulary VALUES (45, "le PDG");
INSERT INTO Vocabulary VALUES ("les installations"); INSERT INTO Vocabulary VALUES (46, "les installations");
INSERT INTO Vocabulary VALUES ("usine"); INSERT INTO Vocabulary VALUES (47, "usine");
INSERT INTO Vocabulary VALUES ("atelier"); INSERT INTO Vocabulary VALUES (48, "atelier");
INSERT INTO Vocabulary VALUES ("entrepôt, dépôt"); INSERT INTO Vocabulary VALUES (49, "entrepôt, dépôt");
INSERT INTO Vocabulary VALUES ("clôture"); INSERT INTO Vocabulary VALUES (50, "clôture");
INSERT INTO Vocabulary VALUES ("lentrée"); INSERT INTO Vocabulary VALUES (51, "lentrée");
INSERT INTO Vocabulary VALUES ("agence"); INSERT INTO Vocabulary VALUES (52, "agence");
INSERT INTO Vocabulary VALUES ("à léchelle nationale"); INSERT INTO Vocabulary VALUES (53, "à léchelle nationale");
INSERT INTO Vocabulary VALUES ("à létranger"); INSERT INTO Vocabulary VALUES (54, "à létranger");
INSERT INTO Vocabulary VALUES ("les dirigeants"); INSERT INTO Vocabulary VALUES (55, "les dirigeants");
INSERT INTO Vocabulary VALUES ("entreprises"); INSERT INTO Vocabulary VALUES (56, "entreprises");
INSERT INTO Vocabulary VALUES ("président"); INSERT INTO Vocabulary VALUES (57, "président");
INSERT INTO Vocabulary VALUES ("la gestion, ou les cadres de lentreprise"); INSERT INTO Vocabulary VALUES (58, "la gestion, ou les cadres de lentreprise");
INSERT INTO Vocabulary VALUES ("fournisseur"); INSERT INTO Vocabulary VALUES (59, "fournisseur");
INSERT INTO Vocabulary VALUES ("détaillant"); INSERT INTO Vocabulary VALUES (60, "détaillant");
-- Register : FR -- Register : FR
INSERT INTO Register VALUES ("French", "le siège de la société"); INSERT INTO Register VALUES ('French', 41);
INSERT INTO Register VALUES ("French", "plaquette de la société"); INSERT INTO Register VALUES ('French', 42);
INSERT INTO Register VALUES ("French", "le conseil dadministration"); INSERT INTO Register VALUES ('French', 43);
INSERT INTO Register VALUES ("French", "salle du conseil"); INSERT INTO Register VALUES ('French', 44);
INSERT INTO Register VALUES ("French", "le PDG"); INSERT INTO Register VALUES ('French', 45);
INSERT INTO Register VALUES ("French", "les installations"); INSERT INTO Register VALUES ('French', 46);
INSERT INTO Register VALUES ("French", "usine"); INSERT INTO Register VALUES ('French', 47);
INSERT INTO Register VALUES ("French", "atelier"); INSERT INTO Register VALUES ('French', 48);
INSERT INTO Register VALUES ("French", "entrepôt, dépôt"); INSERT INTO Register VALUES ('French', 49);
INSERT INTO Register VALUES ("French", "clôture"); INSERT INTO Register VALUES ('French', 50);
INSERT INTO Register VALUES ("French", "lentrée"); INSERT INTO Register VALUES ('French', 51);
INSERT INTO Register VALUES ("French", "agence"); INSERT INTO Register VALUES ('French', 52);
INSERT INTO Register VALUES ("French", "à léchelle nationale"); INSERT INTO Register VALUES ('French', 53);
INSERT INTO Register VALUES ("French", "à létranger"); INSERT INTO Register VALUES ('French', 54);
INSERT INTO Register VALUES ("French", "les dirigeants"); INSERT INTO Register VALUES ('French', 55);
INSERT INTO Register VALUES ("French", "entreprises"); INSERT INTO Register VALUES ('French', 56);
INSERT INTO Register VALUES ("French", "président"); INSERT INTO Register VALUES ('French', 57);
INSERT INTO Register VALUES ("French", "la gestion, ou les cadres de lentreprise"); INSERT INTO Register VALUES ('French', 58);
INSERT INTO Register VALUES ("French", "fournisseur"); INSERT INTO Register VALUES ('French', 59);
INSERT INTO Register VALUES ("French", "détaillant"); INSERT INTO Register VALUES ('French', 60);
-- Translate -- Translate
INSERT INTO Translate VALUES (null, "le siège de la société", "Corporate Headquarters / Head Office", 4); INSERT INTO Translate VALUES (null, 41, 21, 4);
INSERT INTO Translate VALUES (null, "plaquette de la société", "Corporate Brochure", 4); INSERT INTO Translate VALUES (null, 42, 22, 4);
INSERT INTO Translate VALUES (null, "le conseil dadministration", "The Board of Directors", 4); INSERT INTO Translate VALUES (null, 43, 23, 4);
INSERT INTO Translate VALUES (null, "salle du conseil", "Boardroom", 4); INSERT INTO Translate VALUES (null, 44, 24, 4);
INSERT INTO Translate VALUES (null, "le PDG", "C.E.O (Chief Executive Officer)", 4); INSERT INTO Translate VALUES (null, 45, 25, 4);
INSERT INTO Translate VALUES (null, "les installations", "The Facilities (a facility = a building)", 4); INSERT INTO Translate VALUES (null, 46, 26, 4);
INSERT INTO Translate VALUES (null, "usine", "Plant / Factory", 4); INSERT INTO Translate VALUES (null, 47, 27, 4);
INSERT INTO Translate VALUES (null, "atelier", "Workshop", 4); INSERT INTO Translate VALUES (null, 48, 28, 4);
INSERT INTO Translate VALUES (null, "entrepôt, dépôt", "Warehouse", 4); INSERT INTO Translate VALUES (null, 49, 29, 4);
INSERT INTO Translate VALUES (null, "clôture", "Fence", 4); INSERT INTO Translate VALUES (null, 50, 30, 4);
INSERT INTO Translate VALUES (null, "lentrée", "Lobby/Entrance Hall", 4); INSERT INTO Translate VALUES (null, 51, 31, 4);
INSERT INTO Translate VALUES (null, "agence", "Branch", 4); INSERT INTO Translate VALUES (null, 52, 32, 4);
INSERT INTO Translate VALUES (null, "à léchelle nationale", "Nationwide", 4); INSERT INTO Translate VALUES (null, 53, 33, 4);
INSERT INTO Translate VALUES (null, "à létranger", "Overseas / Abroad", 4); INSERT INTO Translate VALUES (null, 54, 34, 4);
INSERT INTO Translate VALUES (null, "les dirigeants", "Executives", 4); INSERT INTO Translate VALUES (null, 55, 35, 4);
INSERT INTO Translate VALUES (null, "entreprises", "Corporations Firms / Companies", 4); INSERT INTO Translate VALUES (null, 56, 36, 4);
INSERT INTO Translate VALUES (null, "président", "The Chairman", 4); INSERT INTO Translate VALUES (null, 57, 37, 4);
INSERT INTO Translate VALUES (null, "la gestion, ou les cadres de lentreprise", "Management", 4); INSERT INTO Translate VALUES (null, 58, 38, 4);
INSERT INTO Translate VALUES (null, "fournisseur", "A Supplier", 4); INSERT INTO Translate VALUES (null, 59, 39, 4);
INSERT INTO Translate VALUES (null, "détaillant", "Retailer", 4); INSERT INTO Translate VALUES (null, 60, 40, 4);

@ -34,7 +34,8 @@ card VocabularyList [
card Vocabulary [ card Vocabulary [
Vocabulary Vocabulary
-- --
<u>word <u>id
word
] ]
card Language [ card Language [

@ -45,15 +45,16 @@ card Translate [
Translate Translate
-- --
<u>id <u>id
~#firstWord ~#firstWordID
~#secondWord ~#secondWordID
~#listVoc ~#listVoc
] ]
card Vocabulary [ card Vocabulary [
Vocabulary Vocabulary
-- --
<u>word <u>id
word
] ]
card Language [ card Language [
@ -66,7 +67,7 @@ card Register [
Register Register
-- --
<u>#language <u>#language
<u>#word <u>#idWord
] ]
card Role [ card Role [

@ -7,7 +7,8 @@ class Validation
{ {
private static $passwordMinLen = 12; private static $passwordMinLen = 12;
public static function val_action($action): string { public static function val_action($action): ?string {
if ($action == null) return null;
$safeAction = htmlspecialchars($action, ENT_QUOTES); $safeAction = htmlspecialchars($action, ENT_QUOTES);
if ($safeAction != $action) if ($safeAction != $action)
throw new Exception("tentative d'injection sql détectée"); throw new Exception("tentative d'injection sql détectée");

@ -8,60 +8,80 @@ use Exception;
class AdminController extends UserController class AdminController extends UserController
{ {
public function showAllUsers(): void { private string $invgpID = "invalid group ID";
public function showAllUsers(): void
{
global $twig; global $twig;
global $user; global $user;
$model = new MdlAdmin(); $model = new MdlAdmin();
$users = $model->getAllUsers(); $users = $model->getAllUsers();
echo $twig->render('usersView.html', ['users' => $users, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('usersView.html', ['users' => $users,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} }
public function showAllAdmins(): void { public function showAllAdmins(): void
{
global $twig; global $twig;
global $user; global $user;
$model = new MdlAdmin(); $model = new MdlAdmin();
$users = $model->getAllAdmins(); $users = $model->getAllAdmins();
echo $twig->render('usersView.html', ['users' => $users, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('usersView.html', ['users' => $users,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} }
public function showAllTeachers(): void { public function showAllTeachers(): void
{
global $twig; global $twig;
global $user; global $user;
$model = new MdlAdmin(); $model = new MdlAdmin();
$users = $model->getAllTeachers(); $users = $model->getAllTeachers();
echo $twig->render('usersView.html', ['users' => $users, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('usersView.html', ['users' => $users,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} }
public function showAllStudents(): void { public function showAllStudents(): void
{
global $twig; global $twig;
global $user; global $user;
$model = new MdlAdmin(); $model = new MdlAdmin();
$users = $model->getAllStudents(); $users = $model->getAllStudents();
echo $twig->render('usersView.html', ['users' => $users, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('usersView.html', ['users' => $users,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} }
public function removeUser(): void { public function removeUser(): void
{
try { try {
$userToRemove = Validation::filter_int($_GET['userToRemove'] ?? null); $userToRemove = Validation::filter_int($_GET['userToRemove'] ?? null);
$model = new MdlAdmin(); $model = new MdlAdmin();
$model->removeUser($userToRemove); $model->removeUser($userToRemove);
$this->showAllUsers(); $this->showAllUsers();
} } catch (Exception $e) {
catch (Exception $e) {
throw new Exception("invalid user ID"); throw new Exception("invalid user ID");
} }
} }
public function showAllGroups(): void { public function showAllGroups(): void
{
global $twig; global $twig;
global $user; global $user;
$model = new MdlAdmin(); $model = new MdlAdmin();
$groups = $model->getAllGroups(); $groups = $model->getAllGroups();
$unassignedUsers = $model->getUnassignedUsers(); $unassignedUsers = $model->getUnassignedUsers();
echo $twig->render('manageGroupView.html', ['groups' => $groups, 'unassignedUsers' => $unassignedUsers, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]);
echo $twig->render('manageGroupView.html', ['groups' => $groups,
'unassignedUsers' => $unassignedUsers,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} }
public function showGroupDetails(): void { public function showGroupDetails(): void
{
try { try {
global $twig; global $twig;
global $user; global $user;
@ -71,14 +91,20 @@ class AdminController extends UserController
$users = $model->getUsersOfGroup($selectedGroup); $users = $model->getUsersOfGroup($selectedGroup);
$unassignedUsers = $model->getUnassignedUsers(); $unassignedUsers = $model->getUnassignedUsers();
echo $twig->render('manageGroupView.html', ['groups' => $groups, 'selectedGroup' => $selectedGroup, 'users' => $users, 'unassignedUsers' => $unassignedUsers, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('manageGroupView.html', ['groups' => $groups,
} 'selectedGroup' => $selectedGroup,
catch (Exception $e) { 'users' => $users,
throw new Exception("invalid group ID"); 'unassignedUsers' => $unassignedUsers,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} catch (Exception $e) {
throw new Exception($this->invgpID);
} }
} }
public function removeUserFromGroup(): void { public function removeUserFromGroup(): void
{
try { try {
$userToRemove = Validation::filter_int($_GET['userToRemove'] ?? null); $userToRemove = Validation::filter_int($_GET['userToRemove'] ?? null);
$groupID = Validation::filter_int($_GET['selectedGroup'] ?? null); $groupID = Validation::filter_int($_GET['selectedGroup'] ?? null);
@ -86,25 +112,25 @@ class AdminController extends UserController
$model->removeUserFromGroup($userToRemove); $model->removeUserFromGroup($userToRemove);
$_GET['selectedGroup'] = $groupID; $_GET['selectedGroup'] = $groupID;
$this->showGroupDetails(); $this->showGroupDetails();
} } catch (Exception $e) {
catch (Exception $e) { throw new Exception($this->invgpID);
throw new Exception("invalid group ID");
} }
} }
public function removeGroup(): void { public function removeGroup(): void
{
try { try {
$selectedGroup = Validation::filter_int($_GET['selectedGroup'] ?? null); $selectedGroup = Validation::filter_int($_GET['selectedGroup'] ?? null);
$model = new MdlAdmin(); $model = new MdlAdmin();
$model->removeGroup($selectedGroup); $model->removeGroup($selectedGroup);
$this->showAllGroups(); $this->showAllGroups();
} } catch (Exception $e) {
catch (Exception $e) { throw new Exception($this->invgpID);
throw new Exception("invalid group ID");
} }
} }
public function addGroup(): void { public function addGroup(): void
{
try { try {
$num = Validation::filter_int($_POST['num'] ?? null); $num = Validation::filter_int($_POST['num'] ?? null);
$year = Validation::filter_int($_POST['year'] ?? null); $year = Validation::filter_int($_POST['year'] ?? null);
@ -114,13 +140,13 @@ class AdminController extends UserController
$groupID = $model->addGroup($num, $year, $sector); $groupID = $model->addGroup($num, $year, $sector);
$_GET['selectedGroup'] = $groupID; $_GET['selectedGroup'] = $groupID;
$this->showGroupDetails(); $this->showGroupDetails();
} } catch (Exception $e) {
catch (Exception $e) {
throw new Exception("invalid form"); throw new Exception("invalid form");
} }
} }
public function addUserToGroup(): void { public function addUserToGroup(): void
{
try { try {
$userToAdd = Validation::filter_int($_GET['userToAdd'] ?? null); $userToAdd = Validation::filter_int($_GET['userToAdd'] ?? null);
$group = Validation::filter_int($_GET['groupID'] ?? null); $group = Validation::filter_int($_GET['groupID'] ?? null);
@ -128,8 +154,7 @@ class AdminController extends UserController
$model->addUserToGroup($userToAdd, $group); $model->addUserToGroup($userToAdd, $group);
$_GET['selectedGroup'] = $group; $_GET['selectedGroup'] = $group;
$this->showGroupDetails(); $this->showGroupDetails();
} } catch (Exception $e) {
catch (Exception $e) {
throw new Exception("invalid IDs"); throw new Exception("invalid IDs");
} }
} }

@ -19,11 +19,13 @@ class FrontController
$router = new \AltoRouter(); $router = new \AltoRouter();
$router->setBasePath($altorouterPath); $router->setBasePath($altorouterPath);
$getpost = 'GET|POST';
$router->map('GET', '/', 'User'); $router->map('GET', '/', 'User');
$router->map('GET|POST', '/admin/[i:id]/[a:action]?', 'Admin'); $router->map($getpost, '/admin/[i:id]/[a:action]?', 'Admin');
$router->map('GET|POST', '/teacher/[i:id]/[a:action]?', 'Teacher'); $router->map($getpost, '/teacher/[i:id]/[a:action]?', 'Teacher');
$router->map('GET|POST', '/student/[i:id]/[a:action]?', 'Student'); $router->map($getpost, '/student/[i:id]/[a:action]?', 'Student');
$router->map('GET|POST', '/visitor/[a:action]', 'Visitor'); $router->map($getpost, '/visitor/[a:action]', 'Visitor');
$twig->addGlobal('base', $altorouterPath); $twig->addGlobal('base', $altorouterPath);
@ -31,49 +33,62 @@ class FrontController
if (!$match) { if (!$match) {
throw new Exception("Erreur 404 page not found"); throw new Exception("Erreur 404 page not found");
} } else {
if ($match) {
$target = $match['target'] ?? null; $target = $match['target'] ?? null;
$action = Validation::val_action($match['params']['action'] ?? null); $action = Validation::val_action($match['params']['action'] ?? null);
$id = $match['params']['id'] ?? null; $id = $match['params']['id'] ?? null;
if ($target == 'Visitor') { if ($target == 'Visitor') {
$userCtrl = new VisitorController(); $userCtrl = new VisitorController();
if (is_callable(array($userCtrl, $action)))
if (is_callable(array($userCtrl, $action))) {
call_user_func_array(array($userCtrl, $action), array($match['params'])); call_user_func_array(array($userCtrl, $action), array($match['params']));
} }
else { } else {
if ($target == null) throw new Exception("pas de target"); if ($target == null) {
throw new Exception("pas de target");
}
if (isset($_SESSION['login']) && isset($_SESSION['roles'])) { if (isset($_SESSION['login']) && isset($_SESSION['roles'])) {
$_SESSION['login'] = strip_tags($_SESSION['login']); $_SESSION['login'] = strip_tags($_SESSION['login']);
for ($i=0 ; $i<count($_SESSION['roles']) ; $i++) $_SESSION['roles'][$i] = strip_tags($_SESSION['roles'][$i]);
for ($i=0 ; $i<count($_SESSION['roles']) ; $i++) {
$_SESSION['roles'][$i] = strip_tags($_SESSION['roles'][$i]);
}
$mdl = '\\model\\Mdl' . $target; $mdl = '\\model\\Mdl' . $target;
$mdl = new $mdl; $mdl = new $mdl;
if (is_callable(array($mdl, 'is'))) { if (is_callable(array($mdl, 'is'))) {
global $user; global $user;
$user = call_user_func_array(array($mdl, 'is'), array($_SESSION['login'], $_SESSION['roles'])); $user = call_user_func_array(
array($mdl, 'is'),
if ($target == 'User' && $action == null) UserController::home(); array($_SESSION['login'],
else if (!$user || $user->getId() != $id) throw new Exception("erreur 403 permission denied"); $_SESSION['roles'])
);
if ($target == 'User' && $action == null) {
UserController::home();
} elseif (!$user || $user->getId() != $id) {
throw new Exception("erreur 403 permission denied");
}
$controller = '\\controller\\' . $target . 'Controller'; $controller = '\\controller\\' . $target . 'Controller';
$controller = new $controller; $controller = new $controller;
if (is_callable(array($controller, $action))) if (is_callable(array($controller, $action))) {
call_user_func_array(array($controller, $action), array($match['params'])); call_user_func_array(array($controller, $action), array($match['params']));
} }
} }
else if ($target == 'User' && $action == null) UserController::home(); } elseif ($target == 'User' && $action == null) {
else (new UserController())->login(); UserController::home();
} else {
(new UserController())->login();
} }
} }
} }
catch } catch (Exception $e) {
(Exception $e) {
$dVueEreur[] = $e->getMessage(); $dVueEreur[] = $e->getMessage();
echo $twig->render('erreur.html', ['dVueEreur' => $dVueEreur]); echo $twig->render('erreur.html', ['dVueEreur' => $dVueEreur]);
} }

@ -1,6 +1,7 @@
<?php <?php
namespace controller; namespace controller;
use config\Validation; use config\Validation;
use model\MdlStudent; use model\MdlStudent;
use gateway\TranslationGateway; use gateway\TranslationGateway;
@ -8,25 +9,6 @@ use Exception;
class StudentController extends UserController class StudentController extends UserController
{ {
public function affAllVocab(): void
{
global $twig;
$mdl = new MdlStudent();
$voc = $mdl->getAll();
echo $twig->render('manageVocabListView.html', ['vocabularies' => $voc]);
}
public function affAllStudent(): void
{
global $twig;
$mdl = new MdlStudent();
$student = $mdl->getAll();
echo $twig->render('usersView.html', ['users' => $student]);
}
public function getByName(): void public function getByName(): void
{ {
global $twig; global $twig;
@ -36,20 +18,23 @@ class StudentController extends UserController
echo $twig->render('manageVocabView.html', ['vocabularies' => $vocab]); echo $twig->render('manageVocabView.html', ['vocabularies' => $vocab]);
} }
public function ListVocChoice(): void { public function listVocChoice(): void
{
global $twig; global $twig;
global $user; global $user;
$jeu = $_POST['jeu']; $jeu = Validation::filter_str_nospecialchar($_GET['jeu'] ?? null);
$model = new MdlStudent(); $model = new MdlStudent();
$voc = $model->getAll(); $voc = $model->getVocByGroup($user->getGroup());
echo $twig->render('vocabList.html', ['jeu' => $jeu, 'vocabularies' => $voc, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('vocabList.html', ['jeu' => $jeu,
'vocabularies' => $voc,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} }
public function gameChoice(): void { public function gameChoice(): void
{
global $twig; global $twig;
global $user; global $user;
$model = new MdlStudent();
$voc = $model->getAll();
echo $twig->render('gamesList.html', [ 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('gamesList.html', [ 'userID' => $user->getId(), 'userRole' => $user->getRoles()]);
} }
} }

@ -1,6 +1,7 @@
<?php <?php
namespace controller; namespace controller;
use config\Validation; use config\Validation;
use model\MdlTeacher; use model\MdlTeacher;
use gateway\VocabularyListGateway; use gateway\VocabularyListGateway;
@ -16,17 +17,23 @@ class TeacherController extends UserController
$mdl = new MdlTeacher(); $mdl = new MdlTeacher();
$vocabularies = $mdl->findByUser($user->getId()); $vocabularies = $mdl->findByUser($user->getId());
$groups = $mdl->getAllGroups(); $groups = $mdl->getAllGroups();
echo $twig->render('manageVocabListView.html', ['vocabularies' => $vocabularies, 'groups' => $groups, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('manageVocabListView.html', ['vocabularies' => $vocabularies,
'groups' => $groups,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} }
public function DelById():void{ public function delById():void
{
global $user; global $user;
$mdl = new MdlTeacher(); $mdl = new MdlTeacher();
$id = Validation::filter_int($_GET['vocabID'] ?? null); $id = Validation::filter_int($_GET['vocabID'] ?? null);
$mdl->removeVocById($id); $mdl->removeVocById($id);
$this->affAllVocab(); $this->affAllVocab();
} }
public function getContent(){
public function getContent():void
{
global $twig; global $twig;
global $user; global $user;
$mdl = new MdlTeacher(); $mdl = new MdlTeacher();
@ -35,10 +42,17 @@ class TeacherController extends UserController
$groupsVocab = $mdl->findGroupVocab($name); $groupsVocab = $mdl->findGroupVocab($name);
$groupsNoVocab = $mdl->findGroupNoVocab($name); $groupsNoVocab = $mdl->findGroupNoVocab($name);
$content= $mdl->findByIdVoc($name); $content= $mdl->findByIdVoc($name);
echo $twig->render('manageVocabListView.html', ['vocabularies' => $vocabularies, 'groupsVocab' => $groupsVocab, 'groupsNoVocab' => $groupsNoVocab, 'userID' => $user->getId(), 'userRole' => $user->getRoles(), 'content' => $content, 'vocabID' => $name]); echo $twig->render('manageVocabListView.html', ['vocabularies' => $vocabularies,
'groupsVocab' => $groupsVocab,
'groupsNoVocab' => $groupsNoVocab,
'userID' => $user->getId(),
'userRole' => $user->getRoles(),
'content' => $content,
'vocabID' => $name]);
} }
public function addVocabToGroup():void { public function addVocabToGroup():void
{
global $twig; global $twig;
global $user; global $user;
$vocabID = Validation::filter_int($_GET['vocabID'] ?? null); $vocabID = Validation::filter_int($_GET['vocabID'] ?? null);
@ -49,7 +63,8 @@ class TeacherController extends UserController
$this->getContent(); $this->getContent();
} }
public function removeVocabFromGroup():void { public function removeVocabFromGroup():void
{
global $twig; global $twig;
global $user; global $user;
$vocabID = Validation::filter_int($_GET['vocabID'] ?? null); $vocabID = Validation::filter_int($_GET['vocabID'] ?? null);
@ -61,31 +76,35 @@ class TeacherController extends UserController
} }
public function showVocabListForm(): void { public function showVocabListForm(): void
{
global $twig; global $twig;
global $user; global $user;
echo $twig->render('addVocabList.html', ['userID' => $user->getId(), 'userRole' => $user->getRoles() ]); echo $twig->render('addVocabList.html', ['userID' => $user->getId(), 'userRole' => $user->getRoles() ]);
} }
public function addVocabList():void { public function addVocabList():void
{
global $user; global $user;
$mdl = new MdlTeacher(); $mdl = new MdlTeacher();
$name = Validation::filter_str_simple($_POST['listName'] ?? null); $name = Validation::filter_str_simple($_POST['listName'] ?? null);
$words = array(); $words = array();
for ($i = 0; $i <= 20; $i++) { for ($i = 0; $i <= 20; $i++) {
if (empty($_POST['frenchWord' . $i]) || empty($_POST['englishWord' . $i])) break; if (empty($_POST['frenchWord' . $i]) || empty($_POST['englishWord' . $i])) {
break;
}
$frenchWord = Validation::filter_str_simple($_POST['frenchWord' . $i] ?? null); $frenchWord = Validation::filter_str_simple($_POST['frenchWord' . $i] ?? null);
$englishWord = Validation::filter_str_simple($_POST['englishWord' . $i] ?? null); $englishWord = Validation::filter_str_simple($_POST['englishWord' . $i] ?? null);
$words[] = array($frenchWord, $englishWord); $words[] = array($frenchWord, $englishWord);
} }
if (count($words) % 2 == 1) throw new Exception("il manque un mot"); if (count($words) % 2 == 1) {
else { throw new Exception("il manque un mot");
} else {
$mdl->addVocabList($user->getId(), $name, "", $words); $mdl->addVocabList($user->getId(), $name, "", $words);
$this->affAllVocab(); $this->affAllVocab();
} }
} }
} }

@ -13,34 +13,38 @@ use model\Translation;
class UserController extends VisitorController class UserController extends VisitorController
{ {
public function showAccountInfos(): void
public function showAccountInfos(): void { {
global $twig; global $twig;
global $user; global $user;
echo $twig->render('myAccountView.html', ['user' => $user, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('myAccountView.html', ['user' => $user,
'userID' => $user->getId(),
'userRole' => $user->getRoles()]);
} }
public function modifyPassword(): void { public function modifyPassword(): void
{
try { try {
global $user; global $user;
$currentPassword = Validation::val_password($_POST['currentPassword'] ?? null); $currentPassword = Validation::val_password($_POST['currentPassword'] ?? null);
$newPassword = Validation::val_password($_POST['newPassword'] ?? null); $newPassword = Validation::val_password($_POST['newPassword'] ?? null);
$confirmNewPassword = Validation::val_password($_POST['confirmNewPassword'] ?? null); $confirmNewPassword = Validation::val_password($_POST['confirmNewPassword'] ?? null);
if (!password_verify($currentPassword, $user->getPassword()) || $newPassword != $confirmNewPassword) if (!password_verify($currentPassword, $user->getPassword()) || $newPassword != $confirmNewPassword) {
throw new Exception(""); throw new Exception("");
}
$mdl = new MdlUser(); $mdl = new MdlUser();
$mdl->ModifyPassword($user->getId(), password_hash($newPassword, null)); $mdl->modifyPassword($user->getId(), password_hash($newPassword, null));
$user = $mdl->getUserById($user->getId()); $user = $mdl->getUserById($user->getId());
$this->showAccountInfos(); $this->showAccountInfos();
} } catch (Exception $e) {
catch (Exception $e){
throw new Exception("invalid entries".$e->getLine()); throw new Exception("invalid entries".$e->getLine());
} }
} }
public function modifyNickname(): void { public function modifyNickname(): void
{
try { try {
global $user; global $user;
$newNickname = Validation::filter_str_nospecialchar($_POST['newNickname'] ?? null); $newNickname = Validation::filter_str_nospecialchar($_POST['newNickname'] ?? null);
@ -48,20 +52,20 @@ class UserController extends VisitorController
$mdl->modifyNickname($user->getId(), $newNickname); $mdl->modifyNickname($user->getId(), $newNickname);
$user = $mdl->getUserById($user->getId()); $user = $mdl->getUserById($user->getId());
$this->showAccountInfos(); $this->showAccountInfos();
} } catch (Exception $e) {
catch (Exception $e){
throw new Exception("invalid entries". $e->getMessage()); throw new Exception("invalid entries". $e->getMessage());
} }
} }
public static function home(): void { public static function home(): void
{
global $twig; global $twig;
global $user; global $user;
if (isset($user)) { if (isset($user)) {
echo $twig->render('home.html', ['userID' => $user->getId(), 'userRole' => $user->getRoles()]); echo $twig->render('home.html', ['userID' => $user->getId(), 'userRole' => $user->getRoles()]);
} } else {
else{ echo $twig->render('home.html');
echo $twig->render('home.html', );
} }
} }
} }

@ -5,23 +5,24 @@ namespace controller;
use config\Validation; use config\Validation;
use gateway\TranslationGateway; use gateway\TranslationGateway;
use gateway\VocabularyListGateway; use gateway\VocabularyListGateway;
use http\Message; use model\MdlStudent;
use model\MdlTeacher;
use model\MdlUser; use model\MdlUser;
use Exception; use Exception;
class VisitorController class VisitorController
{ {
public function memory($match): void{ public function memory(): void
{
global $twig; global $twig;
global $user; global $user;
try { try {
$idVoc = Validation::filter_int($_POST['idVoc'] ?? 4); $idVoc = Validation::filter_int($_GET['idVoc'] ?? 4);
$wordList = (new \gateway\TranslationGateway())->findByIdVoc($idVoc); $wordList = (new MdlTeacher())->findByIdVoc($idVoc);
$name = ((new \gateway\VocabularyListGateway())->findById($idVoc))->getName(); $name = ((new MdlStudent())->getVocabById($idVoc))->getName();
$wordShuffle = array(); $wordShuffle = array();
shuffle($wordList); shuffle($wordList);
$pairs = []; $pairs = [];
$maxWords = 28; $maxWords = 28;
@ -44,8 +45,7 @@ class VisitorController
'userID' => $user->getID(), 'userID' => $user->getID(),
'userRole' => $user->getRoles() 'userRole' => $user->getRoles()
]); ]);
} } else {
else{
echo $twig->render('memory.html', [ echo $twig->render('memory.html', [
'wordShuffle' => $wordShuffle, 'wordShuffle' => $wordShuffle,
'pairs' => json_encode($pairs), 'pairs' => json_encode($pairs),
@ -53,19 +53,23 @@ class VisitorController
]); ]);
} }
} } catch (Exception $e) {
catch (Exception $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function quiz($match): void public function quiz(): void
{ {
global $twig; global $twig;
global $user; global $user;
try { try {
$vocabId = Validation::filter_int($_POST['idVoc'] ?? 4); $vocabId = Validation::filter_int($_GET['idVoc'] ?? 4);
$vocabList = (new VocabularyListGateway())->findById($vocabId) ?? null; $vocabList = (new VocabularyListGateway())->findById($vocabId) ?? null;
if ($vocabList == null) throw new Exception("liste inconnue");
if ($vocabList == null) {
throw new Exception("liste inconnue");
}
$mdl = new TranslationGateway(); $mdl = new TranslationGateway();
$allTranslation = $mdl->findByIdVoc($vocabId); $allTranslation = $mdl->findByIdVoc($vocabId);
$shuffle = $allTranslation; $shuffle = $allTranslation;
@ -86,9 +90,11 @@ class VisitorController
for ($i = 0; $i < count($questions); $i++) { for ($i = 0; $i < count($questions); $i++) {
$correctAnswer = $allTranslation[$i]->getWord2(); $correctAnswer = $allTranslation[$i]->getWord2();
array_splice($allEnglishWords, array_search($correctAnswer, $allEnglishWords), 1); array_splice($allEnglishWords, array_search($correctAnswer, $allEnglishWords), 1);
if (count($allEnglishWords) < 3) { if (count($allEnglishWords) < 3) {
throw new Exception("pas assez de vocabulaire"); throw new Exception("pas assez de vocabulaire");
} }
$tab = array_rand(array_flip($allEnglishWords), 3); $tab = array_rand(array_flip($allEnglishWords), 3);
array_push($allEnglishWords, $correctAnswer); array_push($allEnglishWords, $correctAnswer);
@ -113,47 +119,84 @@ class VisitorController
'goodAnswers' => $goodAnswers, 'goodAnswers' => $goodAnswers,
'listName' => $vocabList->getName()]); 'listName' => $vocabList->getName()]);
} }
} } catch (Exception $e) {
catch (Exception $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function login(): void { public function login(): void
{
global $twig; global $twig;
echo $twig->render('login.html'); echo $twig->render('login.html');
} }
public function confirmLogin(): void { public function confirmLogin(): void
{
global $user; global $user;
$model = new MdlUser(); $model = new MdlUser();
if ($_POST['logemail']!=null && $_POST['logpass']!=null) { if ($_POST['logemail']!=null && $_POST['logpass']!=null) {
$login = strip_tags($_POST['logemail']); $login = strip_tags($_POST['logemail']);
$password = strip_tags($_POST['logpass']); $password = strip_tags($_POST['logpass']);
} else {
throw new Exception("logmail ou logpass null");
}
if (!$this->checkLoginExist($login)) {
throw new Exception(("login invalide"));
} }
else throw new Exception("logmail ou logpass null");
if (!$this->checkLoginExist($login)) throw new Exception(("login invalide"));
$user = $model->connection($login, $password); $user = $model->connection($login, $password);
if ($user == null) throw new Exception("mot de passe invalide");
if ($user == null) {
throw new Exception("mot de passe invalide");
}
UserController::home(); UserController::home();
} }
public function checkLoginExist(string $login): bool { public function checkLoginExist(string $login): bool
{
$mdl = new MdlUser(); $mdl = new MdlUser();
return $mdl->checkLoginExist($login); return $mdl->checkLoginExist($login);
} }
public function disconnect(): void { public function disconnect(): void
{
$mdl = new MdlUser(); $mdl = new MdlUser();
$mdl->deconnection(); $mdl->deconnection();
UserController::home(); UserController::home();
} }
public function resultatsJeux($match): void{ public function resultatsQuiz(): void
{
global $twig;
global $user;
$score = Validation::filter_int(intval($_POST['score'] ?? null));
$len = Validation::filter_int(intval($_POST['total']??null));
$res = $score . '/'. $len;
if (isset($user)) {
echo $twig->render('resultatsJeux.html', ['userID' => $user->getId(),
'res' => $res,
'userRole' => $user->getRoles()]);
} else {
echo $twig->render('resultatsJeux.html', ['res' => $res]);
}
}
public function resultatsMemory(): void
{
global $twig; global $twig;
global $user; global $user;
$score = $_POST['score']; $score = Validation::filter_int(intval($_POST['score'] ?? null));
if(isset($user)) echo $twig->render('resultatsJeux.html', ['userID' => $user->getId(), 'userRole' => $user->getRoles(), 'points' => $score]);
else echo $twig->render('resultatsJeux.html', ['points'=>$score]); if (isset($user)) {
echo $twig->render('resultatsJeux.html', ['userID' => $user->getId(),
'res' => $score,
'userRole' => $user->getRoles()]);
} else {
echo $twig->render('resultatsJeux.html', ['res' => $score]);
}
} }
} }

@ -2846,7 +2846,7 @@ textarea.form-control-lg {
--bs-btn-bg: #a840a3; --bs-btn-bg: #a840a3;
--bs-btn-border-color: #a840a3; --bs-btn-border-color: #a840a3;
--bs-btn-hover-color: #fff; --bs-btn-hover-color: #fff;
--bs-btn-hover-bg: #cf51c9; --bs-btn-hover-bg: #6e176a;
--bs-btn-hover-border-color: #cf51c9; --bs-btn-hover-border-color: #cf51c9;
--bs-btn-focus-shadow-rgb: 123, 175, 172; --bs-btn-focus-shadow-rgb: 123, 175, 172;
--bs-btn-active-color: #fff; --bs-btn-active-color: #fff;
@ -8177,6 +8177,12 @@ textarea.form-control-lg {
.text-capitalize { .text-capitalize {
text-transform: capitalize !important; text-transform: capitalize !important;
} }
.text-capitalize-first-letter::first-letter {
text-transform: uppercase;
}
.text-capitalize-first-letter {
text-transform: lowercase;
}
.text-wrap { .text-wrap {
white-space: normal !important; white-space: normal !important;
@ -11147,9 +11153,9 @@ body {
padding: 1.25rem 2rem; padding: 1.25rem 2rem;
font-family: "Varela Round", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: "Varela Round", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 80%; font-size: 80%;
text-transform: uppercase; letter-spacing: 0.1rem;
letter-spacing: 0.15rem;
border: 0; border: 0;
text-align: center;
} }
.masthead { .masthead {

@ -10,15 +10,16 @@ abstract class AbsGateway
{ {
protected Connection $con; protected Connection $con;
public function __construct() { public function __construct()
{
global $dsn; global $dsn;
global $login; global $login;
global $password; global $password;
$this->con = new Connection($dsn, $login, $password); $this->con = new Connection($dsn, $login, $password);
} }
public abstract function add(array $parameters): int; abstract public function add(array $parameters): int;
public abstract function remove(int $id): void; abstract public function remove(int $id): void;
public abstract function findAll(): array; abstract public function findAll(): array;
public abstract function findById(int $id); abstract public function findById(int $id);
} }

@ -10,11 +10,7 @@ use model\Group;
class GroupGateway extends AbsGateway class GroupGateway extends AbsGateway
{ {
public function __construct(){ public function add(array $parameters): int
parent::__construct();
}
public function add(array $parameters): int //require 4 elements
{ {
try { try {
$query = "INSERT INTO Group_ values(null, :num,:year,:sec)"; $query = "INSERT INTO Group_ values(null, :num,:year,:sec)";
@ -23,8 +19,7 @@ class GroupGateway extends AbsGateway
':sec'=>array($parameters[2] ,PDO::PARAM_STR)); ':sec'=>array($parameters[2] ,PDO::PARAM_STR));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
return $this->con->lastInsertId(); return $this->con->lastInsertId();
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -41,8 +36,7 @@ class GroupGateway extends AbsGateway
$query = "DELETE FROM Group_ WHERE id=:id "; $query = "DELETE FROM Group_ WHERE id=:id ";
$args = array(':id' => array($id, PDO::PARAM_INT)); $args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -54,18 +48,19 @@ class GroupGateway extends AbsGateway
$this->con->ExecuteQuery($query); $this->con->ExecuteQuery($query);
$res = $this->con->getResults(); $res = $this->con->getResults();
$tab_group=[]; $tabGroup=[];
foreach ($res as $r) { foreach ($res as $r) {
$tab_group[]=new Group($r['id'],$r['num'],$r['year'],$r['sector']); $tabGroup[]=new Group($r['id'], $r['num'], $r['year'], $r['sector']);
}
Return $tab_group;
} }
catch(PDOException $e ){
return $tabGroup;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findById(int $id) public function findById(int $id):array
{ {
try { try {
$query = "SELECT * FROM Group_ WHERE id = :id"; $query = "SELECT * FROM Group_ WHERE id = :id";
@ -73,13 +68,13 @@ class GroupGateway extends AbsGateway
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
return $this->con->getResults(); return $this->con->getResults();
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findByNum(String $num): array{ public function findByNum(String $num): array
{
try { try {
$query = "SELECT * FROM Group_ g WHERE g.num = :num"; $query = "SELECT * FROM Group_ g WHERE g.num = :num";
@ -87,19 +82,20 @@ class GroupGateway extends AbsGateway
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
$res = $this->con->getResults(); $res = $this->con->getResults();
$tab_group=[]; $tabGroup=[];
foreach ($res as $r) { foreach ($res as $r) {
$tab_group[]=new Group($r['id'],$r['num'],$r['year'],$r['sector']); $tabGroup[]=new Group($r['id'], $r['num'], $r['year'], $r['sector']);
}
Return $tab_group;
} }
catch(PDOException $e ){ return $tabGroup;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function modifGroupById(int $id, int $num, int $year ,String $sector):void{ public function modifGroupById(int $id, int $num, int $year ,String $sector):void
{
try { try {
$query = "UPDATE Group_ SET num=:num, year=:year, sector=:sector WHERE id=:id"; $query = "UPDATE Group_ SET num=:num, year=:year, sector=:sector WHERE id=:id";
$args = array(':id'=>array($id ,PDO::PARAM_INT), $args = array(':id'=>array($id ,PDO::PARAM_INT),
@ -107,57 +103,70 @@ class GroupGateway extends AbsGateway
':year'=>array($year ,PDO::PARAM_INT), ':year'=>array($year ,PDO::PARAM_INT),
':sector'=>array($sector ,PDO::PARAM_STR)); ':sector'=>array($sector ,PDO::PARAM_STR));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function addVocabToGroup(int $vocab, int $group): void { public function addVocabToGroup(int $vocab, int $group): void
{
try { try {
$query = "INSERT INTO Practice VALUES (:vocabID, :groupID)"; $query = "INSERT INTO Practice VALUES (:vocabID, :groupID)";
$args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT), $args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT),
':groupID'=>array($group ,PDO::PARAM_INT)); ':groupID'=>array($group ,PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function removeVocabFromGroup(int $vocab, int $group): void { public function removeVocabFromGroup(int $vocab, int $group): void
{
try { try {
$query = "DELETE FROM Practice WHERE vocabID=:vocabID and groupID=:groupID"; $query = "DELETE FROM Practice WHERE vocabID=:vocabID and groupID=:groupID";
$args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT), $args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT),
':groupID'=>array($group ,PDO::PARAM_INT)); ':groupID'=>array($group ,PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findGroupVocab(int $vocab) : array{ public function findGroupVocab(int $vocab) : array
{
try {
$query = "SELECT g.* FROM Practice p, Group_ g WHERE g.id=p.groupID AND p.vocabID=:vocabID;"; $query = "SELECT g.* FROM Practice p, Group_ g WHERE g.id=p.groupID AND p.vocabID=:vocabID;";
$args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT)); $args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row) $tab[] = new Group($row['id'],$row['num'],$row['year'],$row['sector']); foreach ($results as $row) {
$tab[] = new Group($row['id'], $row['num'], $row['year'], $row['sector']);
}
return $tab; return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
} }
public function findGroupNoVocab(int $vocab) : array { public function findGroupNoVocab(int $vocab) : array
{
try {
$query = "SELECT * FROM Group_ WHERE id NOT IN (SELECT groupID FROM Practice Where vocabID=:vocabID);"; $query = "SELECT * FROM Group_ WHERE id NOT IN (SELECT groupID FROM Practice Where vocabID=:vocabID);";
$args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT)); $args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row) $tab[] = new Group($row['id'],$row['num'],$row['year'],$row['sector']); foreach ($results as $row) {
$tab[] = new Group($row['id'], $row['num'], $row['year'], $row['sector']);
}
return $tab; return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
} }
} }

@ -9,41 +9,41 @@ use PDOException;
class TranslationGateway extends AbsGateway class TranslationGateway extends AbsGateway
{ {
private function addWord(string $word): void { private function addWord(string $word): void
{
try { try {
$query = "INSERT INTO Vocabulary VALUES (:word) ON DUPLICATE KEY UPDATE word=:word"; $query = "INSERT INTO Vocabulary (word) VALUES (:word) ON DUPLICATE KEY UPDATE word=:word";
$args = array(':word' => array($word, PDO::PARAM_STR)); $args = array(':word' => array($word, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
} } catch (PDOException $e) {
catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function add(array $parameters): int // require 4 elements public function add(array $parameters): int
{ {
try { try {
$this->addWord($parameters[0]); $this->addWord($parameters[0]);
$this->addWord($parameters[1]); $this->addWord($parameters[1]);
$lastInsert = $this->con->lastInsertId("Vocabulary");
$query = "INSERT INTO Translate VALUES(null, :word1, :word2, :idVoc)"; $query = "INSERT INTO Translate VALUES(null, :word1, :word2, :idVoc)";
$args = array(':word1' => array($parameters[0], PDO::PARAM_STR), $args = array(':word1' => array($lastInsert-1, PDO::PARAM_INT),
':word2' => array($parameters[1], PDO::PARAM_STR), ':word2' => array($lastInsert, PDO::PARAM_INT),
':idVoc' => array($parameters[2], PDO::PARAM_INT)); ':idVoc' => array($parameters[2], PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
return $this->con->lastInsertId(); return $this->con->lastInsertId();
} } catch (PDOException $e) {
catch (PDOException $e) {
throw new Exception($e->getMessage().+$e->getLine()); throw new Exception($e->getMessage().+$e->getLine());
} }
} }
public function remove(int $id): void { public function remove(int $id): void
{
try { try {
$query = "DELETE FROM Translate WHERE id=:id"; $query = "DELETE FROM Translate WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT)); $args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
} } catch (PDOException $e) {
catch (PDOException $e) {
throw new Exception($e->getMessage().+$e->getLine()); throw new Exception($e->getMessage().+$e->getLine());
} }
} }
@ -55,24 +55,24 @@ class TranslationGateway extends AbsGateway
$this->con->executeQuery($query); $this->con->executeQuery($query);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row) $tab[] = new Translation($row['id'], $row['firstWord'], $row['secondWord'], $row['listVoc']);
return $tab; foreach ($results as $row) {
$tab[] = new Translation($row['id'], $row['firstWord'], $row['secondWord'], $row['listVoc']);
} }
catch (PDOException $e) { return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findById(int $id) public function findById(int $id): array
{ {
try { try {
$query = "SELECT * FROM Translate WHERE id=:id"; $query = "SELECT * FROM Translate WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT)); $args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
return $this->con->getResults(); return $this->con->getResults();
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -85,12 +85,27 @@ class TranslationGateway extends AbsGateway
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row) $tab[] = new Translation($row['id'], $row['firstWord'], $row['secondWord'], $row['listVoc']);
return $tab; foreach ($results as $row) {
$firstWord = $this->findWordById($row['firstWordID']);
$secondWord = $this->findWordById($row['secondWordID']);
$tab[] = new Translation($row['id'], $firstWord, $secondWord, $row['listVoc']);
} }
catch (PDOException $e) { return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
private function findWordById(int $id): String
{
try{
$query = "SELECT word FROM Vocabulary WHERE id=:id";
$args = array('id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
return $this->con->getResults()[0]['word'];
} catch (PDOException $e){
throw new Exception(($e->getMessage()));
}
}
} }

@ -9,15 +9,12 @@ use Exception;
class UserGateway extends AbsGateway class UserGateway extends AbsGateway
{ {
public function __construct()
{
parent::__construct();
}
public function add(array $parameters): int //require 9 elements public function add(array $parameters): int //require 9 elements
{ {
try { try {
$query = "INSERT INTO User_ VALUES (NULL, :password, :email, :name, :surname, :nickname, :image, :extraTime, :group)"; $query = "INSERT INTO User_
VALUES (NULL, :password, :email, :name, :surname, :nickname, :image, :extraTime, :group)";
$args = array(':password' => array($parameters[0], PDO::PARAM_STR), $args = array(':password' => array($parameters[0], PDO::PARAM_STR),
':email' => array($parameters[1], PDO::PARAM_STR), ':email' => array($parameters[1], PDO::PARAM_STR),
':name' => array($parameters[2], PDO::PARAM_STR), ':name' => array($parameters[2], PDO::PARAM_STR),
@ -26,6 +23,7 @@ class UserGateway extends AbsGateway
':image' => array($parameters[5], PDO::PARAM_STR), ':image' => array($parameters[5], PDO::PARAM_STR),
':extraTime' => array($parameters[6], PDO::PARAM_BOOL), ':extraTime' => array($parameters[6], PDO::PARAM_BOOL),
':group' => array($parameters[7], PDO::PARAM_INT)); ':group' => array($parameters[7], PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$userID = $this->con->lastInsertId(); $userID = $this->con->lastInsertId();
@ -37,8 +35,7 @@ class UserGateway extends AbsGateway
} }
return $userID; return $userID;
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -55,8 +52,7 @@ class UserGateway extends AbsGateway
$query="DELETE FROM User_ WHERE id=:id"; $query="DELETE FROM User_ WHERE id=:id";
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
} } catch (PDOException $e) {
catch(PDOException $e ){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -67,39 +63,77 @@ class UserGateway extends AbsGateway
$this->con->executeQuery("SELECT * FROM User_"); $this->con->executeQuery("SELECT * FROM User_");
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findAllAdmins(): array { public function findAllAdmins(): array
{
try { try {
$this->con->executeQuery("SELECT u.* FROM User_ u, Be b WHERE u.id=b.userID AND b.roleID=1 "); $this->con->executeQuery("SELECT u.* FROM User_ u, Be b WHERE u.id=b.userID AND b.roleID=1 ");
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findAllTeachers(): array { public function findAllTeachers(): array
{
try { try {
$this->con->executeQuery("SELECT u.* FROM User_ u, Be b WHERE u.id=b.userID AND b.roleID=2"); $this->con->executeQuery("SELECT u.* FROM User_ u, Be b WHERE u.id=b.userID AND b.roleID=2");
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -109,115 +143,199 @@ class UserGateway extends AbsGateway
$this->con->executeQuery("SELECT u.* FROM User_ u, Be b WHERE u.id=b.userID AND b.roleID=3"); $this->con->executeQuery("SELECT u.* FROM User_ u, Be b WHERE u.id=b.userID AND b.roleID=3");
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findById(int $id) public function findById(int $id): ?User
{ {
try { try {
$query = "SELECT * FROM User_ WHERE id=:id"; $query = "SELECT * FROM User_ WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT)); $args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
if (empty($results)) return null;
return new User($results[0]['id'], $results[0]['password'], $results[0]['email'], $results[0]['name'], $results[0]['surname'], $results[0]['nickname'], $results[0]['image'], $results[0]['extraTime'], $results[0]['groupID'], $this->getRoles($results[0]['id'])); if (empty($results)) {
return null;
} }
catch(PDOException $e ){
return new User(
$results[0]['id'],
$results[0]['password'],
$results[0]['email'],
$results[0]['name'],
$results[0]['surname'],
$results[0]['nickname'],
$results[0]['image'],
$results[0]['extraTime'],
$results[0]['groupID'],
$this->getRoles($results[0]['id']));
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
private function getRoles(int $id): array { private function getRoles(int $id): array
{
try { try {
$query = "SELECT r.name FROM Be b, Role_ r WHERE b.userID=:id AND b.roleID=r.id"; $query = "SELECT r.name FROM Be b, Role_ r WHERE b.userID=:id AND b.roleID=r.id";
$args = array(':id' => array($id, PDO::PARAM_INT)); $args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row) $tab[] = $row['name'];
return $tab; foreach ($results as $row) {
$tab[] = $row['name'];
} }
catch (PDOException $e) {
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function login(string $login) : string{ public function login(string $login) : string
{
try { try {
$query = "SELECT password FROM User_ WHERE email=:email"; $query = "SELECT password FROM User_ WHERE email=:email";
$args = array(':email' => array($login, PDO::PARAM_STR)); $args = array(':email' => array($login, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
return $this->con->getResults()[0]['password']; return $this->con->getResults()[0]['password'];
} } catch (PDOException $e) {
catch(PDOException $e ){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findUserByEmail(string $email): User{ public function findUserByEmail(string $email): ?User
{
try { try {
$query = "SELECT * FROM User_ WHERE email=:email"; $query = "SELECT * FROM User_ WHERE email=:email";
$args = array(':email' => array($email, PDO::PARAM_STR)); $args = array(':email' => array($email, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
if (empty($results)) return null;
return new User($results[0]['id'], $results[0]['password'], $results[0]['email'], $results[0]['name'], $results[0]['surname'], $results[0]['nickname'], $results[0]['image'], $results[0]['extraTime'], $results[0]['groupID'], $this->getRoles($results[0]['id'])); if (empty($results)) {
return null;
} }
catch(PDOException $e ){
return new User(
$results[0]['id'],
$results[0]['password'],
$results[0]['email'],
$results[0]['name'],
$results[0]['surname'],
$results[0]['nickname'],
$results[0]['image'],
$results[0]['extraTime'],
$results[0]['groupID'],
$this->getRoles($results[0]['id']));
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findUserByName(string $name) : array{ public function findUserByName(string $name) : array
{
try { try {
$query = "SELECT * FROM User_ WHERE name=:name"; $query = "SELECT * FROM User_ WHERE name=:name";
$args = array(':name' => array($name, PDO::PARAM_STR)); $args = array(':name' => array($name, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findUserBySurname(string $surname) : array{ public function findUserBySurname(string $surname) : array
{
try { try {
$query = "SELECT * FROM User_ WHERE surname=:surname"; $query = "SELECT * FROM User_ WHERE surname=:surname";
$args = array(':surname' => array($surname, PDO::PARAM_STR)); $args = array(':surname' => array($surname, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findUserByNickname(string $nickname) : array{ public function findUserByNickname(string $nickname) : array
{
try { try {
$query = "SELECT * FROM User_ WHERE nickname=:nickname"; $query = "SELECT * FROM User_ WHERE nickname=:nickname";
$args = array(':nickname' => array($nickname, PDO::PARAM_STR)); $args = array(':nickname' => array($nickname, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -228,8 +346,7 @@ class UserGateway extends AbsGateway
$query="UPDATE User_ SET password=:password WHERE id=:id"; $query="UPDATE User_ SET password=:password WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT), ':password' => array($newPassword, PDO::PARAM_STR)); $args = array(':id' => array($id, PDO::PARAM_INT), ':password' => array($newPassword, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
} } catch (PDOException $e) {
catch(PDOException $e ){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -240,8 +357,7 @@ class UserGateway extends AbsGateway
$query="UPDATE User_ SET nickname=:nickname WHERE id=:id"; $query="UPDATE User_ SET nickname=:nickname WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT), ':nickname' => array($newNickname, PDO::PARAM_STR)); $args = array(':id' => array($id, PDO::PARAM_INT), ':nickname' => array($newNickname, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
} } catch (PDOException $e) {
catch(PDOException $e ){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -252,8 +368,7 @@ class UserGateway extends AbsGateway
$query="UPDATE User_ SET image=:image WHERE id=:id"; $query="UPDATE User_ SET image=:image WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT), ':image' => array($newImage, PDO::PARAM_STR)); $args = array(':id' => array($id, PDO::PARAM_INT), ':image' => array($newImage, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
} } catch (PDOException $e) {
catch(PDOException $e ){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -264,24 +379,36 @@ class UserGateway extends AbsGateway
$query="UPDATE User_ SET groupID=:group WHERE id=:id"; $query="UPDATE User_ SET groupID=:group WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT), ':group' => array($newGroup, PDO::PARAM_STR)); $args = array(':id' => array($id, PDO::PARAM_INT), ':group' => array($newGroup, PDO::PARAM_STR));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
} } catch (PDOException $e) {
catch(PDOException $e ){
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findUsersByGroup(int $id): array { public function findUsersByGroup(int $id): array
{
try { try {
$query = "SELECT * FROM User_ WHERE groupID=:group"; $query = "SELECT * FROM User_ WHERE groupID=:group";
$args = array(':group' => array($id, PDO::PARAM_INT)); $args = array(':group' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
@ -293,11 +420,23 @@ class UserGateway extends AbsGateway
$this->con->executeQuery($query); $this->con->executeQuery($query);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row)
$tab[] = new User($row['id'], $row['password'], $row['email'], $row['name'], $row['surname'], $row['nickname'], $row['image'], $row['extraTime'], $row['groupID'], $this->getRoles($row['id'])); foreach ($results as $row) {
return $tab; $tab[] = new User(
$row['id'],
$row['password'],
$row['email'],
$row['name'],
$row['surname'],
$row['nickname'],
$row['image'],
$row['extraTime'],
$row['groupID'],
$this->getRoles($row['id']));
} }
catch(PDOException $e ){
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }

@ -8,11 +8,7 @@ use model\VocabularyList;
class VocabularyListGateway extends AbsGateway class VocabularyListGateway extends AbsGateway
{ {
public function __construct(){ public function add(array $parameters): int
parent::__construct();
}
public function add(array $parameters): int // require 3 elements
{ {
try { try {
$query = "INSERT INTO VocabularyList VALUES(NULL, :name,:img,:aut)"; $query = "INSERT INTO VocabularyList VALUES(NULL, :name,:img,:aut)";
@ -21,8 +17,7 @@ class VocabularyListGateway extends AbsGateway
':aut'=>array($parameters[2], PDO::PARAM_INT)); ':aut'=>array($parameters[2], PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
return $this->con->lastInsertId(); return $this->con->lastInsertId();
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception('problème pour ajouter une liste de vocabulaire'); throw new Exception('problème pour ajouter une liste de vocabulaire');
} }
} }
@ -42,8 +37,7 @@ class VocabularyListGateway extends AbsGateway
$query = "DELETE FROM VocabularyList WHERE id=:id "; $query = "DELETE FROM VocabularyList WHERE id=:id ";
$args = array(':id'=>array($id, PDO::PARAM_INT)); $args = array(':id'=>array($id, PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception('problème pour supprimer les vocabulaires avec leur Id'. $e->getMessage()); throw new Exception('problème pour supprimer les vocabulaires avec leur Id'. $e->getMessage());
} }
} }
@ -51,38 +45,46 @@ class VocabularyListGateway extends AbsGateway
public function findAll(): array public function findAll(): array
{ {
try { try {
$query = "SELECT * FROM VocabularyList"; $query = "SELECT * FROM VocabularyList";
$this->con->ExecuteQuery($query); $this->con->ExecuteQuery($query);
$res = $this->con->getResults(); $res = $this->con->getResults();
$tab_vocab=[]; $tabVocab=[];
foreach ($res as $r) { foreach ($res as $r) {
$tab_vocab[]=new VocabularyList($r['id'],$r['name'],$r['image'],$r['userID']); $tabVocab[]=new VocabularyList($r['id'], $r['name'], $r['image'], $r['userID']);
}
Return $tab_vocab;
} }
catch(PDOException $e ){
return $tabVocab;
} catch (PDOException $e) {
throw new Exception('problème pour affichage de tous les vocabulaires'); throw new Exception('problème pour affichage de tous les vocabulaires');
} }
} }
public function findById(int $id) public function findById(int $id) : ?VocabularyList
{ {
try{ try{
$query = "SELECT * FROM VocabularyList WHERE id = :id"; $query = "SELECT * FROM VocabularyList WHERE id = :id";
$args = array(':id' => array($id, PDO::PARAM_INT)); $args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
if (empty($results)) return null;
return new VocabularyList($results[0]['id'],$results[0]['name'],$results[0]['image'],$results[0]['userID']); if (empty($results)) {
return null;
}
return new VocabularyList($results[0]['id'],
$results[0]['name'],
$results[0]['image'],
$results[0]['userID']);
} }
catch (PDOException $e) { catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findByName(String $name): array { public function findByName(String $name): array
{
try { try {
$query = "SELECT * FROM VocabularyList v WHERE v.name = :name"; $query = "SELECT * FROM VocabularyList v WHERE v.name = :name";
@ -90,20 +92,21 @@ class VocabularyListGateway extends AbsGateway
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
$res = $this->con->getResults(); $res = $this->con->getResults();
$tab_vocab=[]; $tabVocab=[];
foreach ($res as $r) { foreach ($res as $r) {
$tab_vocab[]=new VocabularyList($r['id'],$r['name'],$r['image'],$r['userID']); $tabVocab[]=new VocabularyList($r['id'], $r['name'], $r['image'], $r['userID']);
}
Return $tab_vocab;
} }
catch(PDOException $e ){ return $tabVocab;
} catch (PDOException $e) {
throw new Exception('problème pour affichage d\'vocabulaire en fonction de son nom'); throw new Exception('problème pour affichage d\'vocabulaire en fonction de son nom');
} }
} }
public function ModifVocabListById(int $id, String $name,String $img,String $aut):void{ public function modifVocabListById(int $id, String $name,String $img,String $aut):void
{
try { try {
$query = "UPDATE VocabularyList SET name=:name, image=:img, userID=:aut WHERE id=:id"; $query = "UPDATE VocabularyList SET name=:name, image=:img, userID=:aut WHERE id=:id";
$args = array(':id'=>array($id, PDO::PARAM_INT), $args = array(':id'=>array($id, PDO::PARAM_INT),
@ -111,38 +114,45 @@ class VocabularyListGateway extends AbsGateway
':img'=>array($img, PDO::PARAM_STR), ':img'=>array($img, PDO::PARAM_STR),
':aut'=>array($aut, PDO::PARAM_INT)); ':aut'=>array($aut, PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args); $this->con->ExecuteQuery($query, $args);
} } catch (PDOException $e) {
catch (PDOException $e){
throw new Exception('problème pour modifier les vocabulaires'); throw new Exception('problème pour modifier les vocabulaires');
} }
} }
public function findByGroup(int $id): array { public function findByGroup(int $id): array
{
try { try {
$query = "SELECT v.* FROM VocabularyList v, Practice p WHERE v.id=p.vocabID AND p.groupID=:id"; $query = "SELECT v.* FROM VocabularyList v, Practice p WHERE v.id=p.vocabID AND p.groupID=:id";
$args = array(':id' => array($id, PDO::PARAM_INT)); $args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row) $tab[] = new VocabularyList($row['id'], $row['name'], $row['image'], $row['userID']);
return $tab; foreach ($results as $row) {
$tab[] = new VocabularyList($row['id'], $row['name'], $row['image'], $row['userID']);
} }
catch (PDOException $e) {
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }
public function findByUser(int $id): array { public function findByUser(int $id): array
{
try { try {
$query = "SELECT * FROM VocabularyList WHERE userID=:id"; $query = "SELECT * FROM VocabularyList WHERE userID=:id";
$args = array(':id' => array($id, PDO::PARAM_INT)); $args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args); $this->con->executeQuery($query, $args);
$results = $this->con->getResults(); $results = $this->con->getResults();
$tab = array(); $tab = array();
foreach ($results as $row) $tab[] = new VocabularyList($row['id'], $row['name'], $row['image'], $row['userID']);
return $tab; foreach ($results as $row) {
$tab[] = new VocabularyList($row['id'], $row['name'], $row['image'], $row['userID']);
} }
catch (PDOException $e) {
return $tab;
} catch (PDOException $e) {
throw new Exception($e->getMessage()); throw new Exception($e->getMessage());
} }
} }

@ -80,7 +80,7 @@ document.addEventListener('DOMContentLoaded', function () {
window.location.href = 'resultatsJeux'; window.location.href = 'resultatsJeux';
var form = document.createElement('form'); var form = document.createElement('form');
form.method = 'post'; form.method = 'post';
form.action = 'resultatsJeux'; form.action = 'resultatsMemory';
var input = document.createElement('input'); var input = document.createElement('input');
input.type = 'hidden'; input.type = 'hidden';

@ -1,8 +1,8 @@
var currentQuestion = 0; var currentQuestion = 0;
var score = 0; var currentScore = 0;
function validateAndNext(correct) { function validateAndNext(correct) {
if (correct) score++; if (correct) currentScore++;
nextQuestion(); nextQuestion();
} }
@ -18,17 +18,24 @@ function nextQuestion() {
nextQuestionDiv.style.display = "block"; nextQuestionDiv.style.display = "block";
} }
else{ else{
window.location.href = 'resultatsJeux'; let form = document.createElement('form');
var form = document.createElement('form');
form.method = 'post'; form.method = 'post';
form.action = 'resultatsJeux'; form.action = 'resultatsQuiz';
var input = document.createElement('input'); let score = document.createElement('input');
input.type = 'hidden'; score.type = 'hidden';
input.name = 'score'; score.name = 'score';
input.value = score + '/20'; score.value = currentScore;
form.appendChild(input); let total = document.createElement('input');
total.type = 'hidden';
total.name = 'total';
total.value = len;
form.appendChild(score);
form.appendChild(total);
document.body.appendChild(form); document.body.appendChild(form);
form.submit(); form.submit();

@ -6,7 +6,8 @@ use gateway\UserGateway;
abstract class AbsModel abstract class AbsModel
{ {
public function connection(string $login, string $password){ public function connection(string $login, string $password):?User
{
$gtw = new UserGateway(); $gtw = new UserGateway();
$hash = $gtw->login($login) ?? null; $hash = $gtw->login($login) ?? null;
@ -15,7 +16,11 @@ abstract class AbsModel
$_SESSION['login'] = $login; $_SESSION['login'] = $login;
$roles = array(); $roles = array();
foreach ($user->getRoles() as $role) $roles[] = $role;
foreach ($user->getRoles() as $role) {
$roles[] = $role;
}
$_SESSION['roles'] = $roles; $_SESSION['roles'] = $roles;
return $user; return $user;
@ -24,16 +29,18 @@ abstract class AbsModel
return null; return null;
} }
public function deconnection(){ public function deconnection():void
{
session_unset(); session_unset();
session_destroy(); session_destroy();
$_SESSION = array(); $_SESSION = array();
} }
public function checkLoginExist(string $login): bool { public function checkLoginExist(string $login): bool
{
$gtw = new UserGateway(); $gtw = new UserGateway();
return $gtw->findUserByEmail($login) != null; return $gtw->findUserByEmail($login) != null;
} }
public abstract function is(string $login, array $roles): User; abstract public function is(string $login, array $roles): ?User;
} }

@ -7,72 +7,82 @@ use gateway\UserGateway;
class MdlAdmin extends MdlUser class MdlAdmin extends MdlUser
{ {
public function getAllUsers(): array { public function getAllUsers(): array
{
$gtw = new UserGateway(); $gtw = new UserGateway();
return $gtw->findAll(); return $gtw->findAll();
} }
public function getAllAdmins(): array { public function getAllAdmins(): array
{
$gtw = new UserGateway(); $gtw = new UserGateway();
return $gtw->findAllAdmins(); return $gtw->findAllAdmins();
} }
public function getAllTeachers(): array { public function getAllTeachers(): array
{
$gtw = new UserGateway(); $gtw = new UserGateway();
return $gtw->findAllTeachers(); return $gtw->findAllTeachers();
} }
public function getAllStudents(): array { public function getAllStudents(): array
{
$gtw = new UserGateway(); $gtw = new UserGateway();
return $gtw->findAllStudents(); return $gtw->findAllStudents();
} }
public function removeUser(int $id): void { public function removeUser(int $id): void
{
$gtw = new UserGateway(); $gtw = new UserGateway();
$gtw->remove($id); $gtw->remove($id);
} }
public function getAllGroups(): array { public function getAllGroups(): array
{
$gtw = new GroupGateway(); $gtw = new GroupGateway();
return $gtw->findAll(); return $gtw->findAll();
} }
public function getUsersOfGroup(int $id): array { public function getUsersOfGroup(int $id): array
{
$gtw = new UserGateway(); $gtw = new UserGateway();
return $gtw->findUsersByGroup($id); return $gtw->findUsersByGroup($id);
} }
public function removeUserFromGroup(int $id): void { public function removeUserFromGroup(int $id): void
{
$gtw = new UserGateway(); $gtw = new UserGateway();
$gtw->modifyGroup($id); $gtw->modifyGroup($id);
} }
public function removeGroup(int $id): void { public function removeGroup(int $id): void
{
$gtw = new GroupGateway(); $gtw = new GroupGateway();
$gtw->remove($id); $gtw->remove($id);
} }
public function addGroup(int $num, int $year, string $sector): int { public function addGroup(int $num, int $year, string $sector): int
{
$gtw = new GroupGateway(); $gtw = new GroupGateway();
return $gtw->add(array($num, $year, $sector)); return $gtw->add(array($num, $year, $sector));
} }
public function addUserToGroup(int $user, int $group): void { public function addUserToGroup(int $user, int $group): void
{
$gtw = new UserGateway(); $gtw = new UserGateway();
$gtw->modifyGroup($user, $group); $gtw->modifyGroup($user, $group);
} }
public function getUnassignedUsers(): array { public function getUnassignedUsers(): array
{
$gtw = new UserGateway(); $gtw = new UserGateway();
return $gtw->findUnassignedUsers(); return $gtw->findUnassignedUsers();
} }
public function is(string $login, array $roles): User public function is(string $login, array $roles): ?User
{ {
$gtw = new UserGateway(); $gtw = new UserGateway();
$user = $gtw->findUserByEmail($login); $user = $gtw->findUserByEmail($login);
return $user->getRoles() == $roles && in_array('admin', $user->getRoles()) ? $user : null;
if ($user->getRoles() == $roles && in_array('admin', $user->getRoles())) return $user;
else return null;
} }
} }

@ -8,30 +8,34 @@ use gateway\VocabularyListGateway;
class MdlStudent extends MdlUser class MdlStudent extends MdlUser
{ {
public function getAll():array{ public function getAll():array
{
$gtw = new VocabularyListGateway(); $gtw = new VocabularyListGateway();
return $gtw->findAll(); return $gtw->findAll();
/*
foreach ($data as $row){
$AllStudent[] = User($row['id'],$row['password'],$row['email'],$row['name'],$row['surname'],$row['nickname'],$row['image'],$row['extraTime'],$row['group'],$row['roles']);
} }
return $AllStudent;
*/ public function getVocabByName(string $name):array
{
$gtw = new VocabularyListGateway();
return $gtw->findByName($name);
} }
public function getVocabByName(string $name):array{ public function getVocByGroup(int $group): array
{
$gtw = new VocabularyListGateway(); $gtw = new VocabularyListGateway();
$res = $gtw->findByName($name); return $gtw->findByGroup($group);
return $res;
} }
public function is(string $login, array $roles): User public function getVocabById(int $id): VocabularyList
{
$gtw = new VocabularyListGateway();
return $gtw->findById($id);
}
public function is(string $login, array $roles): ?User
{ {
$gtw = new UserGateway(); $gtw = new UserGateway();
$user = $gtw->findUserByEmail($login); $user = $gtw->findUserByEmail($login);
return $user->getRoles() == $roles && in_array('student', $user->getRoles()) ? $user : null;
if ($user->getRoles() == $roles && in_array('student', $user->getRoles())) return $user;
else return null;
} }
} }

@ -10,64 +10,62 @@ use gateway\VocabularyListGateway;
class MdlTeacher extends MdlUser class MdlTeacher extends MdlUser
{ {
public function getAll():array{ public function getAll():array
{
$gtw = new VocabularyListGateway(); $gtw = new VocabularyListGateway();
return $gtw->findAll(); return $gtw->findAll();
} }
public function getAllGroups(): array { public function getAllGroups(): array
{
$gtw = new GroupGateway(); $gtw = new GroupGateway();
return $gtw->findAll(); return $gtw->findAll();
} }
public function getAllStudent():array {
$gtw = new UserGateway();
return $gtw->findAll();
}
public function findByUser($id):array public function findByUser($id):array
{ {
$gtw = new VocabularyListGateway(); $gtw = new VocabularyListGateway();
return $gtw->findByUser($id); return $gtw->findByUser($id);
} }
public function findByIdVoc($id):array
public function getVocabByName(string $name):array{ {
$gtw = new VocabularyListGateway();
$res = $gtw->findByName($name);
return $res;
}
public function findByIdVoc($id):array {
$gtw = new TranslationGateway(); $gtw = new TranslationGateway();
return $gtw->findByIdVoc($id); return $gtw->findByIdVoc($id);
} }
public function removeVocabFromGroup(int $vocabID, int $groupID): void{ public function removeVocabFromGroup(int $vocabID, int $groupID): void
{
$mdl = new GroupGateway(); $mdl = new GroupGateway();
$mdl->removeVocabFromGroup($vocabID, $groupID); $mdl->removeVocabFromGroup($vocabID, $groupID);
} }
public function addVocabToGroup(int $vocabID, int $groupID): void{ public function addVocabToGroup(int $vocabID, int $groupID): void
{
$mdl = new GroupGateway(); $mdl = new GroupGateway();
$mdl->addVocabToGroup($vocabID, $groupID); $mdl->addVocabToGroup($vocabID, $groupID);
} }
public function findGroupVocab(int $vocab): array { public function findGroupVocab(int $vocab): array
{
$mdl = new GroupGateway(); $mdl = new GroupGateway();
return $mdl->findGroupVocab($vocab); return $mdl->findGroupVocab($vocab);
} }
public function findGroupNoVocab(int $vocab): array { public function findGroupNoVocab(int $vocab): array
{
$mdl = new GroupGateway(); $mdl = new GroupGateway();
return $mdl->findGroupNoVocab($vocab); return $mdl->findGroupNoVocab($vocab);
} }
public function RemoveVocById(int $id):void{ public function removeVocById(int $id):void
{
$gtw = new VocabularyListGateway(); $gtw = new VocabularyListGateway();
$res = $gtw->remove($id); $gtw->remove($id);
} }
public function addVocabList(int $userID, string $name, string $image, array $words): void { public function addVocabList(int $userID, string $name, string $image, array $words): void
{
$vocabGtw = new VocabularyListGateway(); $vocabGtw = new VocabularyListGateway();
$vocabID = $vocabGtw->add(array($name, $image, $userID)); $vocabID = $vocabGtw->add(array($name, $image, $userID));
$transGtw = new TranslationGateway(); $transGtw = new TranslationGateway();
@ -76,12 +74,10 @@ class MdlTeacher extends MdlUser
} }
} }
public function is(string $login, array $roles): User public function is(string $login, array $roles): ?User
{ {
$gtw = new UserGateway(); $gtw = new UserGateway();
$user = $gtw->findUserByEmail($login); $user = $gtw->findUserByEmail($login);
return $user->getRoles() == $roles && in_array('teacher', $user->getRoles()) ? $user : null;
if ($user->getRoles() == $roles && in_array('teacher', $user->getRoles())) return $user;
else return null;
} }
} }

@ -4,25 +4,26 @@ namespace model;
use gateway\UserGateway; use gateway\UserGateway;
class MdlUser extends AbsModel { class MdlUser extends AbsModel
{
public function modifyNickname(int $id, string $newNickname): void{ public function modifyNickname(int $id, string $newNickname): void
{
$gtw = new UserGateway(); $gtw = new UserGateway();
$gtw->modifyNickname($id, $newNickname); $gtw->modifyNickname($id, $newNickname);
} }
public function ModifyPassword(int $id, string $newPassword): void { public function modifyPassword(int $id, string $newPassword): void
{
$gtw = new UserGateway(); $gtw = new UserGateway();
$gtw->modifyPassword($id, $newPassword); $gtw->modifyPassword($id, $newPassword);
} }
public function is(string $login, array $roles): User public function is(string $login, array $roles): ?User
{ {
$gtw = new UserGateway(); $gtw = new UserGateway();
$user = $gtw->findUserByEmail($login); $user = $gtw->findUserByEmail($login);
return !empty($user->getRoles()) ? $user : null;
if (!empty($user->getRoles())) return $user;
else return null;
} }
public function getUserById($id): User public function getUserById($id): User

@ -27,8 +27,18 @@ class User
* @param int|null $group * @param int|null $group
* @param array $roles * @param array $roles
*/ */
public function __construct(int $id, string $password, string $email, string $name, string $surname, string $nickname, string $image, ?bool $extraTime, ?int $group, array $roles) public function __construct(
{ int $id,
string $password,
string $email,
string $name,
string $surname,
string $nickname,
string $image,
?bool $extraTime,
?int $group,
array $roles
) {
$this->id = $id; $this->id = $id;
$this->password = $password; $this->password = $password;
$this->email = $email; $this->email = $email;
@ -90,7 +100,5 @@ class User
{ {
return $this->roles; return $this->roles;
} }
} }

@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>My account</title> <title>Add a vocabulary list</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" /> <meta name="description" content="" />
<meta name="author" content="" /> <meta name="author" content="" />

@ -2,51 +2,20 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Users</title> <title>Games list</title>
<link href="{{base}}/css/styles.css" rel="stylesheet" /> <link href="{{base}}/css/styles.css" rel="stylesheet" />
<link rel="icon" type="image/x-icon" href="{{base}}/assets/favicon.ico"/> <link rel="icon" type="image/x-icon" href="{{base}}/assets/favicon.ico"/>
<style>
body {
margin-top: 5vh;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.content {
text-align: center;
}
table {
margin-top: 20px;
}
</style>
</head> </head>
<body> <body class="min-vh-100 d-flex justify-content-center align-items-center">
{% include 'navBar.twig' %} {% include 'navBar.twig' %}
<div class="content"> <div class="w-50 d-flex flex-column gap-3">
<section> <a href="{{base}}/student/{{userID}}/listVocChoice?jeu=quiz">
<table> <input class="w-100 btn btn-primary rounded-4 fs-1" style="height: 17vh" type="button" value="Quiz"/>
<tr> </a>
<td> <a href="{{base}}/student/{{userID}}/listVocChoice?jeu=memory">
<form action="{{base}}/student/{{userID}}/listVocChoice" method="post"> <input class="w-100 btn btn-primary rounded-4 fs-1" style="height: 17vh" type="button" value="Memory"/>
<input type="hidden" name="jeu" value="quiz"> </a>
<input class="btn-list" type="submit" value="Quiz" />
</form>
</td>
</tr>
<tr>
<td>
<form action="{{base}}/student/{{userID}}/listVocChoice" method="post">
<input type="hidden" name="jeu" value="memory">
<input class="btn-list" type="submit" value="Memory" />
</form>
</td>
</tr>
</table>
</section>
</div> </div>
</body> </body>
</html> </html>

@ -54,7 +54,12 @@
<section class="projects-section"> <section class="projects-section">
<div class="container px-4 px-lg-5" id="game"> <div class="container px-4 px-lg-5" id="game">
<!-- Game One Row--> <!-- Game One Row-->
<a class="click-game" href="{{base}}/visitor/quiz"> <a class="click-game"
{% if userRole is defined and 'student' in userRole %}
href="{{base}}/student/{{userID}}/listVocChoice?jeu=quiz">
{% else %}
href="{{base}}/visitor/quiz">
{% endif %}>
<div class="row gx-0 mb-5 mb-lg-0 justify-content-center"> <div class="row gx-0 mb-5 mb-lg-0 justify-content-center">
<div class="col-lg-6"><img class="img-fluid" src="{{base}}/assets/img/quizz.jpeg" alt="..." /></div> <div class="col-lg-6"><img class="img-fluid" src="{{base}}/assets/img/quizz.jpeg" alt="..." /></div>
<div class="col-lg-6"> <div class="col-lg-6">
@ -70,7 +75,12 @@
</div> </div>
</a> </a>
<!-- Game Two Row--> <!-- Game Two Row-->
<a class="click-game" href="{{base}}/visitor/memory"> <a class="click-game"
{% if userRole is defined and 'student' in userRole %}
href="{{base}}/student/{{userID}}/listVocChoice?jeu=memory">
{% else %}
href="{{base}}/visitor/memory">
{% endif %}
<div class="row gx-0 justify-content-center"> <div class="row gx-0 justify-content-center">
<div class="col-lg-6"><img class="img-fluid" src="{{base}}/assets/img/memory.jpeg" alt="..." /></div> <div class="col-lg-6"><img class="img-fluid" src="{{base}}/assets/img/memory.jpeg" alt="..." /></div>
<div class="col-lg-6 order-lg-first"> <div class="col-lg-6 order-lg-first">
@ -113,9 +123,6 @@
</div> </div>
</section> </section>
<section class="contact-section bg-black"> <section class="contact-section bg-black">
<!-- <div class="separateur">
<img src="assets/img/separator.png" alt="Separator" style="width: 100%;" />
</div> -->
<div class="container px-4 px-lg-5"> <div class="container px-4 px-lg-5">
<div class="row gx-4 gx-lg-5"> <div class="row gx-4 gx-lg-5">
<div class="col-md-4 mb-3 mb-md-0"> <div class="col-md-4 mb-3 mb-md-0">
@ -149,11 +156,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="social d-flex justify-content-center">
<a class="mx-2" href="#!"><i class="fab fa-twitter"></i></a>
<a class="mx-2" href="#!"><i class="fab fa-facebook-f"></i></a>
<a class="mx-2" href="#!"><i class="fab fa-github"></i></a>
</div>
</div> </div>
</section> </section>
<!-- Footer--> <!-- Footer-->

@ -45,13 +45,15 @@
</head> </head>
<body> <body>
{% include 'navBar.twig' %} {% include 'navBar.twig' %}
{% if res is defined %}
<div class="content"> <div class="content">
<div class="container"> <div class="container">
<div class="message"> <div class="message">
Votre score est de {{ points }}! Votre score est de {{ res }} !
</div> </div>
<img class="celebration-image" src="{{ base }}/assets/img/celeb.png" alt="Célébration"> <img class="celebration-image" src="{{ base }}/assets/img/celeb.png" alt="Célébration">
</div> </div>
</div> </div>
{% endif %}
</body> </body>
</html> </html>

@ -5,6 +5,7 @@
<title>Users</title> <title>Users</title>
<link href="{{base}}/css/styles.css" rel="stylesheet" /> <link href="{{base}}/css/styles.css" rel="stylesheet" />
<link rel="icon" type="image/x-icon" href="{{base}}/assets/favicon.ico"/> <link rel="icon" type="image/x-icon" href="{{base}}/assets/favicon.ico"/>
<title>Manage users</title>
</head> </head>
<body> <body>

@ -5,43 +5,18 @@
<title>Users</title> <title>Users</title>
<link href="{{base}}/css/styles.css" rel="stylesheet" /> <link href="{{base}}/css/styles.css" rel="stylesheet" />
<link rel="icon" type="image/x-icon" href="{{base}}/assets/favicon.ico"/> <link rel="icon" type="image/x-icon" href="{{base}}/assets/favicon.ico"/>
<title>Manage lists</title>
</head> </head>
<style>
body {
margin-top: 5vh;
display: flex;
align-items: center;
justify-content: center;
height: auto;
}
.content { <body class="min-vh-100 d-flex justify-content-center align-items-center">
text-align: center;
}
table {
margin-top: 20px;
}
</style>
<body>
{% include 'navBar.twig' %} {% include 'navBar.twig' %}
{% if vocabularies is defined %} {% if vocabularies is defined %}
<div class="content"> <div class="w-50 d-flex flex-column gap-3">
<div class="border my-2 py-2 border-5 border-secondary rounded-3 text-center">
<table class="table table-bordered">
{% for row in vocabularies %} {% for row in vocabularies %}
<tr> <a href="{{base}}/student/{{userID}}/{{jeu}}?idVoc={{row.id}}">
<td> <input class="w-100 btn btn-primary rounded-4 fs-1" style="height: 17vh" type="button" value="{{row.name}}"/>
<form action="{{base}}/student/{{userID}}/{{jeu}}" method="post"> </a>
<input type="hidden" name="idVoc" value="{{ row.id }}">
<input class="btn-list" type="submit" value="{{ row.name }}" />
</form>
</td>
</tr>
{% endfor %} {% endfor %}
</table>
</div>
</div> </div>
{% endif %} {% endif %}
</body> </body>

@ -1,2 +1,66 @@
# SAE_2A_Anglais
# SAE 2A Anglais
Ce projet vise à faciliter l'apprentissage de l'anglais dans le cadre d'études supérieures grâce à un site internet et une application mobile.
## Exécuter localement
Clonez le projet
```bash
git clone https://codefirst.iut.uca.fr/git/antoine.jourdain/SAE_2A_Anglais.git
```
Allez dans le répertoire
```bash
cd SAE_2A_Anglais
```
Suivez les différentes instructions suivant la partie que vous souhaitez lancer.
### PHP
Changez de branche
```bash
git switch php
```
Allez dans le répertoire php
```bash
cd Project/php
```
Créez les fichiers composer
```bash
php composer.phar install
php composer.phar dump-autoload
```
Lancez votre serveur apache et n'oubliez pas d'exécuter ```createdb.sql``` et ```defaultinsert.sql``` sur votre serveur SQL local avant d'utiliser le site.
### Blazor
Changez de branche
```bash
git switch blazor
```
Choississez Project/adminBlazor.sln dans Visual Studio ou Rider.\
Modifiez la configuration et créez un "multi-launch" avec adminBlazor et adminBlazor.Api.\
Lancez le "multi-launch" et appréciez le site administratif.
## Documentation
### Diagramme de navigation de l'application Admin Blazor
![App Screenshot](https://cdn.discordapp.com/attachments/1150763562046861332/1198696860773265428/navigation.jpeg?ex=65bfd872&is=65ad6372&hm=44dcbc9e42872be5f68f30b452e9b43f1f5e28ec8af71e4fa8715380e5074290&)
## Auteurs
- [Patrick Brugière](https://codefirst.iut.uca.fr/git/patrick.brugiere)
- [Lucie Goigoux](https://codefirst.iut.uca.fr/git/lucie.goigoux2)
- [Antoine Jourdain](https://codefirst.iut.uca.fr/git/antoine.jourdain)
- [Anthony Richard](https://codefirst.iut.uca.fr/git/anthony.richard) (Au Canada depuis Décembre 2023)
Loading…
Cancel
Save