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(
word varchar(255) PRIMARY KEY
id int(10) PRIMARY KEY AUTO_INCREMENT,
word varchar(255)
);
CREATE TABLE Translate(
id int(10) PRIMARY KEY AUTO_INCREMENT,
firstWord varchar(255),
secondWord varchar(255),
firstWordID int(10),
secondWordID int(10),
listVoc int(10),
FOREIGN KEY (firstWord) REFERENCES Vocabulary(word),
FOREIGN KEY (secondWord) REFERENCES Vocabulary(word),
FOREIGN KEY (firstWordID) REFERENCES Vocabulary(id),
FOREIGN KEY (secondWordID) REFERENCES Vocabulary(id),
FOREIGN KEY (listVoc) REFERENCES VocabularyList(id)
);
CREATE TABLE Register(
language varchar(30),
word varchar(255),
idWord int(10),
FOREIGN KEY (language) REFERENCES Language(name),
FOREIGN KEY (word) REFERENCES Vocabulary(word),
PRIMARY KEY (language, word)
FOREIGN KEY (idWord) REFERENCES Vocabulary(id),
PRIMARY KEY (language, idWord)
);
INSERT INTO Role_ VALUES (1, 'admin');

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

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

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

@ -7,7 +7,8 @@ class Validation
{
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);
if ($safeAction != $action)
throw new Exception("tentative d'injection sql détectée");

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

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

@ -1,6 +1,7 @@
<?php
namespace controller;
use config\Validation;
use model\MdlStudent;
use gateway\TranslationGateway;
@ -8,25 +9,6 @@ use Exception;
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
{
global $twig;
@ -36,20 +18,23 @@ class StudentController extends UserController
echo $twig->render('manageVocabView.html', ['vocabularies' => $vocab]);
}
public function ListVocChoice(): void {
public function listVocChoice(): void
{
global $twig;
global $user;
$jeu = $_POST['jeu'];
$jeu = Validation::filter_str_nospecialchar($_GET['jeu'] ?? null);
$model = new MdlStudent();
$voc = $model->getAll();
echo $twig->render('vocabList.html', ['jeu' => $jeu, 'vocabularies' => $voc, 'userID' => $user->getId(), 'userRole' => $user->getRoles()]);
$voc = $model->getVocByGroup($user->getGroup());
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 $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
namespace controller;
use config\Validation;
use model\MdlTeacher;
use gateway\VocabularyListGateway;
@ -16,17 +17,23 @@ class TeacherController extends UserController
$mdl = new MdlTeacher();
$vocabularies = $mdl->findByUser($user->getId());
$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;
$mdl = new MdlTeacher();
$id = Validation::filter_int($_GET['vocabID'] ?? null);
$mdl->removeVocById($id);
$this->affAllVocab();
}
public function getContent(){
public function getContent():void
{
global $twig;
global $user;
$mdl = new MdlTeacher();
@ -35,10 +42,17 @@ class TeacherController extends UserController
$groupsVocab = $mdl->findGroupVocab($name);
$groupsNoVocab = $mdl->findGroupNoVocab($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 $user;
$vocabID = Validation::filter_int($_GET['vocabID'] ?? null);
@ -49,7 +63,8 @@ class TeacherController extends UserController
$this->getContent();
}
public function removeVocabFromGroup():void {
public function removeVocabFromGroup():void
{
global $twig;
global $user;
$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 $user;
echo $twig->render('addVocabList.html', ['userID' => $user->getId(), 'userRole' => $user->getRoles() ]);
}
public function addVocabList():void {
public function addVocabList():void
{
global $user;
$mdl = new MdlTeacher();
$name = Validation::filter_str_simple($_POST['listName'] ?? null);
$words = array();
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);
$englishWord = Validation::filter_str_simple($_POST['englishWord' . $i] ?? null);
$words[] = array($frenchWord, $englishWord);
}
if (count($words) % 2 == 1) throw new Exception("il manque un mot");
else {
if (count($words) % 2 == 1) {
throw new Exception("il manque un mot");
} else {
$mdl->addVocabList($user->getId(), $name, "", $words);
$this->affAllVocab();
}
}
}

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

@ -5,23 +5,24 @@ namespace controller;
use config\Validation;
use gateway\TranslationGateway;
use gateway\VocabularyListGateway;
use http\Message;
use model\MdlStudent;
use model\MdlTeacher;
use model\MdlUser;
use Exception;
class VisitorController
{
public function memory($match): void{
public function memory(): void
{
global $twig;
global $user;
try{
$idVoc = Validation::filter_int($_POST['idVoc'] ?? 4);
$wordList = (new \gateway\TranslationGateway())->findByIdVoc($idVoc);
$name = ((new \gateway\VocabularyListGateway())->findById($idVoc))->getName();
try {
$idVoc = Validation::filter_int($_GET['idVoc'] ?? 4);
$wordList = (new MdlTeacher())->findByIdVoc($idVoc);
$name = ((new MdlStudent())->getVocabById($idVoc))->getName();
$wordShuffle = array();
shuffle($wordList);
$pairs = [];
$maxWords = 28;
@ -36,7 +37,7 @@ class VisitorController
shuffle($wordShuffle);
if(isset($user)) {
if (isset($user)) {
echo $twig->render('memory.html', [
'wordShuffle' => $wordShuffle,
'pairs' => json_encode($pairs),
@ -44,8 +45,7 @@ class VisitorController
'userID' => $user->getID(),
'userRole' => $user->getRoles()
]);
}
else{
} else {
echo $twig->render('memory.html', [
'wordShuffle' => $wordShuffle,
'pairs' => json_encode($pairs),
@ -53,19 +53,23 @@ class VisitorController
]);
}
}
catch (Exception $e){
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
public function quiz($match): void
public function quiz(): void
{
global $twig;
global $user;
try {
$vocabId = Validation::filter_int($_POST['idVoc'] ?? 4);
$vocabId = Validation::filter_int($_GET['idVoc'] ?? 4);
$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();
$allTranslation = $mdl->findByIdVoc($vocabId);
$shuffle = $allTranslation;
@ -86,9 +90,11 @@ class VisitorController
for ($i = 0; $i < count($questions); $i++) {
$correctAnswer = $allTranslation[$i]->getWord2();
array_splice($allEnglishWords, array_search($correctAnswer, $allEnglishWords), 1);
if(count($allEnglishWords) < 3) {
if (count($allEnglishWords) < 3) {
throw new Exception("pas assez de vocabulaire");
}
$tab = array_rand(array_flip($allEnglishWords), 3);
array_push($allEnglishWords, $correctAnswer);
@ -113,47 +119,84 @@ class VisitorController
'goodAnswers' => $goodAnswers,
'listName' => $vocabList->getName()]);
}
}
catch (Exception $e){
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
public function login(): void {
public function login(): void
{
global $twig;
echo $twig->render('login.html');
}
public function confirmLogin(): void {
public function confirmLogin(): void
{
global $user;
$model = new MdlUser();
if($_POST['logemail']!=null && $_POST['logpass']!=null) {
if ($_POST['logemail']!=null && $_POST['logpass']!=null) {
$login = strip_tags($_POST['logemail']);
$password = strip_tags($_POST['logpass']);
} else {
throw new Exception("logmail ou logpass null");
}
else throw new Exception("logmail ou logpass null");
if (!$this->checkLoginExist($login)) throw new Exception(("login invalide"));
if (!$this->checkLoginExist($login)) {
throw new Exception(("login invalide"));
}
$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();
}
public function checkLoginExist(string $login): bool {
public function checkLoginExist(string $login): bool
{
$mdl = new MdlUser();
return $mdl->checkLoginExist($login);
}
public function disconnect(): void {
public function disconnect(): void
{
$mdl = new MdlUser();
$mdl->deconnection();
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 $user;
$score = $_POST['score'];
if(isset($user)) echo $twig->render('resultatsJeux.html', ['userID' => $user->getId(), 'userRole' => $user->getRoles(), 'points' => $score]);
else echo $twig->render('resultatsJeux.html', ['points'=>$score]);
$score = Validation::filter_int(intval($_POST['score'] ?? null));
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-border-color: #a840a3;
--bs-btn-hover-color: #fff;
--bs-btn-hover-bg: #cf51c9;
--bs-btn-hover-bg: #6e176a;
--bs-btn-hover-border-color: #cf51c9;
--bs-btn-focus-shadow-rgb: 123, 175, 172;
--bs-btn-active-color: #fff;
@ -8177,6 +8177,12 @@ textarea.form-control-lg {
.text-capitalize {
text-transform: capitalize !important;
}
.text-capitalize-first-letter::first-letter {
text-transform: uppercase;
}
.text-capitalize-first-letter {
text-transform: lowercase;
}
.text-wrap {
white-space: normal !important;
@ -11147,9 +11153,9 @@ body {
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-size: 80%;
text-transform: uppercase;
letter-spacing: 0.15rem;
letter-spacing: 0.1rem;
border: 0;
text-align: center;
}
.masthead {

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

@ -10,28 +10,23 @@ use model\Group;
class GroupGateway extends AbsGateway
{
public function __construct(){
parent::__construct();
}
public function add(array $parameters): int //require 4 elements
public function add(array $parameters): int
{
try{
try {
$query = "INSERT INTO Group_ values(null, :num,:year,:sec)";
$args = array(':num'=>array($parameters[0],PDO::PARAM_INT),
':year'=>array($parameters[1],PDO::PARAM_INT),
':sec'=>array($parameters[2],PDO::PARAM_STR));
$this->con->ExecuteQuery($query,$args);
$args = array(':num'=>array($parameters[0] ,PDO::PARAM_INT),
':year'=>array($parameters[1] ,PDO::PARAM_INT),
':sec'=>array($parameters[2] ,PDO::PARAM_STR));
$this->con->ExecuteQuery($query, $args);
return $this->con->lastInsertId();
}
catch (PDOException $e){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function remove(int $id): void
{
try{
try {
$query="UPDATE User_ SET groupID=NULL WHERE groupID=:id";
$args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
@ -41,123 +36,137 @@ class GroupGateway extends AbsGateway
$query = "DELETE FROM Group_ WHERE id=:id ";
$args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
}
catch (PDOException $e){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findAll(): array
{
try{
try {
$query = "SELECT * FROM Group_";
$this->con->ExecuteQuery($query);
$res = $this->con->getResults();
$tab_group=[];
foreach($res as $r){
$tab_group[]=new Group($r['id'],$r['num'],$r['year'],$r['sector']);
$tabGroup=[];
foreach ($res as $r) {
$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());
}
}
public function findById(int $id)
public function findById(int $id):array
{
try{
try {
$query = "SELECT * FROM Group_ WHERE id = :id";
$args = array(':id'=>array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
return $this->con->getResults();
}
catch (PDOException $e){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findByNum(String $num): array{
try{
public function findByNum(String $num): array
{
try {
$query = "SELECT * FROM Group_ g WHERE g.num = :num";
$args = array(':num'=>array($num,PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
$args = array(':num'=>array($num ,PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
$res = $this->con->getResults();
$tab_group=[];
foreach($res as $r){
$tab_group[]=new Group($r['id'],$r['num'],$r['year'],$r['sector']);
$tabGroup=[];
foreach ($res as $r) {
$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());
}
}
public function modifGroupById(int $id, int $num, int $year ,String $sector):void{
try{
public function modifGroupById(int $id, int $num, int $year ,String $sector):void
{
try {
$query = "UPDATE Group_ SET num=:num, year=:year, sector=:sector WHERE id=:id";
$args = array(':id'=>array($id,PDO::PARAM_INT),
':num'=>array($num,PDO::PARAM_INT),
':year'=>array($year,PDO::PARAM_INT),
':sector'=>array($sector,PDO::PARAM_STR));
$this->con->ExecuteQuery($query,$args);
}
catch (PDOException $e){
$args = array(':id'=>array($id ,PDO::PARAM_INT),
':num'=>array($num ,PDO::PARAM_INT),
':year'=>array($year ,PDO::PARAM_INT),
':sector'=>array($sector ,PDO::PARAM_STR));
$this->con->ExecuteQuery($query, $args);
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function addVocabToGroup(int $vocab, int $group): void {
public function addVocabToGroup(int $vocab, int $group): void
{
try {
$query = "INSERT INTO Practice VALUES (:vocabID, :groupID)";
$args = array(':vocabID'=>array($vocab,PDO::PARAM_INT),
':groupID'=>array($group,PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
}
catch (PDOException $e){
$args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT),
':groupID'=>array($group ,PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function removeVocabFromGroup(int $vocab, int $group): void {
public function removeVocabFromGroup(int $vocab, int $group): void
{
try {
$query = "DELETE FROM Practice WHERE vocabID=:vocabID and groupID=:groupID";
$args = array(':vocabID'=>array($vocab,PDO::PARAM_INT),
':groupID'=>array($group,PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
}
catch (PDOException $e){
$args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT),
':groupID'=>array($group ,PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findGroupVocab(int $vocab) : array{
$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));
$this->con->ExecuteQuery($query,$args);
$results = $this->con->getResults();
$tab = array();
foreach ($results as $row) $tab[] = new Group($row['id'],$row['num'],$row['year'],$row['sector']);
public function findGroupVocab(int $vocab) : array
{
try {
$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));
$this->con->ExecuteQuery($query, $args);
$results = $this->con->getResults();
$tab = array();
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 {
$query = "SELECT * FROM Group_ WHERE id NOT IN (SELECT groupID FROM Practice Where vocabID=:vocabID);";
$args = array(':vocabID'=>array($vocab,PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
$results = $this->con->getResults();
$tab = array();
foreach ($results as $row) $tab[] = new Group($row['id'],$row['num'],$row['year'],$row['sector']);
public function findGroupNoVocab(int $vocab) : array
{
try {
$query = "SELECT * FROM Group_ WHERE id NOT IN (SELECT groupID FROM Practice Where vocabID=:vocabID);";
$args = array(':vocabID'=>array($vocab ,PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
$results = $this->con->getResults();
$tab = array();
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
{
private function addWord(string $word): void {
private function addWord(string $word): void
{
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));
$this->con->executeQuery($query, $args);
}
catch (PDOException $e) {
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function add(array $parameters): int // require 4 elements
public function add(array $parameters): int
{
try {
$this->addWord($parameters[0]);
$this->addWord($parameters[1]);
$lastInsert = $this->con->lastInsertId("Vocabulary");
$query = "INSERT INTO Translate VALUES(null, :word1, :word2, :idVoc)";
$args = array(':word1' => array($parameters[0], PDO::PARAM_STR),
':word2' => array($parameters[1], PDO::PARAM_STR),
$args = array(':word1' => array($lastInsert-1, PDO::PARAM_INT),
':word2' => array($lastInsert, PDO::PARAM_INT),
':idVoc' => array($parameters[2], PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
return $this->con->lastInsertId();
}
catch (PDOException $e) {
} catch (PDOException $e) {
throw new Exception($e->getMessage().+$e->getLine());
}
}
public function remove(int $id): void {
public function remove(int $id): void
{
try {
$query = "DELETE FROM Translate WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
}
catch (PDOException $e) {
} catch (PDOException $e) {
throw new Exception($e->getMessage().+$e->getLine());
}
}
@ -55,24 +55,24 @@ class TranslationGateway extends AbsGateway
$this->con->executeQuery($query);
$results = $this->con->getResults();
$tab = array();
foreach ($results as $row) $tab[] = new Translation($row['id'], $row['firstWord'], $row['secondWord'], $row['listVoc']);
foreach ($results as $row) {
$tab[] = new Translation($row['id'], $row['firstWord'], $row['secondWord'], $row['listVoc']);
}
return $tab;
}
catch (PDOException $e) {
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findById(int $id)
public function findById(int $id): array
{
try {
$query = "SELECT * FROM Translate WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
return $this->con->getResults();
}
catch (PDOException $e){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
@ -85,12 +85,27 @@ class TranslationGateway extends AbsGateway
$this->con->executeQuery($query, $args);
$results = $this->con->getResults();
$tab = array();
foreach ($results as $row) $tab[] = new Translation($row['id'], $row['firstWord'], $row['secondWord'], $row['listVoc']);
foreach ($results as $row) {
$firstWord = $this->findWordById($row['firstWordID']);
$secondWord = $this->findWordById($row['secondWordID']);
$tab[] = new Translation($row['id'], $firstWord, $secondWord, $row['listVoc']);
}
return $tab;
}
catch (PDOException $e) {
} catch (PDOException $e) {
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
{
public function __construct()
{
parent::__construct();
}
public function add(array $parameters): int //require 9 elements
{
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),
':email' => array($parameters[1], 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),
':extraTime' => array($parameters[6], PDO::PARAM_BOOL),
':group' => array($parameters[7], PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
$userID = $this->con->lastInsertId();
@ -37,8 +35,7 @@ class UserGateway extends AbsGateway
}
return $userID;
}
catch (PDOException $e){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
@ -55,8 +52,7 @@ class UserGateway extends AbsGateway
$query="DELETE FROM User_ WHERE id=:id";
$this->con->executeQuery($query, $args);
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
@ -67,39 +63,77 @@ class UserGateway extends AbsGateway
$this->con->executeQuery("SELECT * FROM User_");
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findAllAdmins(): array {
public function findAllAdmins(): array
{
try {
$this->con->executeQuery("SELECT u.* FROM User_ u, Be b WHERE u.id=b.userID AND b.roleID=1 ");
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findAllTeachers(): array {
public function findAllTeachers(): array
{
try {
$this->con->executeQuery("SELECT u.* FROM User_ u, Be b WHERE u.id=b.userID AND b.roleID=2");
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
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");
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findById(int $id)
public function findById(int $id): ?User
{
try {
$query = "SELECT * FROM User_ WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
$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']));
}
catch(PDOException $e ){
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']));
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
private function getRoles(int $id): array {
private function getRoles(int $id): array
{
try {
$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));
$this->con->executeQuery($query, $args);
$results = $this->con->getResults();
$tab = array();
foreach ($results as $row) $tab[] = $row['name'];
foreach ($results as $row) {
$tab[] = $row['name'];
}
return $tab;
}
catch (PDOException $e) {
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function login(string $login) : string{
public function login(string $login) : string
{
try {
$query = "SELECT password FROM User_ WHERE email=:email";
$args = array(':email' => array($login, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
return $this->con->getResults()[0]['password'];
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findUserByEmail(string $email): User{
public function findUserByEmail(string $email): ?User
{
try {
$query = "SELECT * FROM User_ WHERE email=:email";
$args = array(':email' => array($email, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
$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']));
}
catch(PDOException $e ){
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']));
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findUserByName(string $name) : array{
public function findUserByName(string $name) : array
{
try {
$query = "SELECT * FROM User_ WHERE name=:name";
$args = array(':name' => array($name, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findUserBySurname(string $surname) : array{
public function findUserBySurname(string $surname) : array
{
try {
$query = "SELECT * FROM User_ WHERE surname=:surname";
$args = array(':surname' => array($surname, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findUserByNickname(string $nickname) : array{
public function findUserByNickname(string $nickname) : array
{
try {
$query = "SELECT * FROM User_ WHERE nickname=:nickname";
$args = array(':nickname' => array($nickname, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
@ -228,8 +346,7 @@ class UserGateway extends AbsGateway
$query="UPDATE User_ SET password=:password WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT), ':password' => array($newPassword, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
@ -240,8 +357,7 @@ class UserGateway extends AbsGateway
$query="UPDATE User_ SET nickname=:nickname WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT), ':nickname' => array($newNickname, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
@ -252,8 +368,7 @@ class UserGateway extends AbsGateway
$query="UPDATE User_ SET image=:image WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT), ':image' => array($newImage, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
@ -264,24 +379,36 @@ class UserGateway extends AbsGateway
$query="UPDATE User_ SET groupID=:group WHERE id=:id";
$args = array(':id' => array($id, PDO::PARAM_INT), ':group' => array($newGroup, PDO::PARAM_STR));
$this->con->executeQuery($query, $args);
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findUsersByGroup(int $id): array {
public function findUsersByGroup(int $id): array
{
try {
$query = "SELECT * FROM User_ WHERE groupID=:group";
$args = array(':group' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
@ -293,11 +420,23 @@ class UserGateway extends AbsGateway
$this->con->executeQuery($query);
$results = $this->con->getResults();
$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) {
$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']));
}
return $tab;
}
catch(PDOException $e ){
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}

@ -8,141 +8,151 @@ use model\VocabularyList;
class VocabularyListGateway extends AbsGateway
{
public function __construct(){
parent::__construct();
}
public function add(array $parameters): int // require 3 elements
public function add(array $parameters): int
{
try{
try {
$query = "INSERT INTO VocabularyList VALUES(NULL, :name,:img,:aut)";
$args = array(':name'=>array($parameters[0],PDO::PARAM_STR),
':img'=>array($parameters[1],PDO::PARAM_STR),
':aut'=>array($parameters[2],PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
$args = array(':name'=>array($parameters[0], PDO::PARAM_STR),
':img'=>array($parameters[1], PDO::PARAM_STR),
':aut'=>array($parameters[2], PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
return $this->con->lastInsertId();
}
catch (PDOException $e){
} catch (PDOException $e) {
throw new Exception('problème pour ajouter une liste de vocabulaire');
}
}
public function remove(int $id): void
{
try{
try {
$query = "DELETE FROM Translate WHERE listVoc=:id";
$args = array(':id'=>array($id,PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
$args = array(':id'=>array($id, PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
$query = "DELETE FROM Practice WHERE vocabID=:id";
$args = array(':id'=>array($id,PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
$args = array(':id'=>array($id, PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
$query = "DELETE FROM VocabularyList WHERE id=:id ";
$args = array(':id'=>array($id,PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
}
catch (PDOException $e){
$args = array(':id'=>array($id, PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
} catch (PDOException $e) {
throw new Exception('problème pour supprimer les vocabulaires avec leur Id'. $e->getMessage());
}
}
public function findAll(): array
{
try{
try {
$query = "SELECT * FROM VocabularyList";
$this->con->ExecuteQuery($query);
$res = $this->con->getResults();
$tab_vocab=[];
foreach($res as $r){
$tab_vocab[]=new VocabularyList($r['id'],$r['name'],$r['image'],$r['userID']);
$tabVocab=[];
foreach ($res as $r) {
$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');
}
}
public function findById(int $id)
public function findById(int $id) : ?VocabularyList
{
try{
$query = "SELECT * FROM VocabularyList WHERE id = :id";
$args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
$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());
}
}
public function findByName(String $name): array {
try{
public function findByName(String $name): array
{
try {
$query = "SELECT * FROM VocabularyList v WHERE v.name = :name";
$args = array(':name'=>array($name,PDO::PARAM_STR));
$this->con->ExecuteQuery($query,$args);
$args = array(':name'=>array($name, PDO::PARAM_STR));
$this->con->ExecuteQuery($query, $args);
$res = $this->con->getResults();
$tab_vocab=[];
foreach($res as $r){
$tab_vocab[]=new VocabularyList($r['id'],$r['name'],$r['image'],$r['userID']);
$tabVocab=[];
foreach ($res as $r) {
$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');
}
}
public function ModifVocabListById(int $id, String $name,String $img,String $aut):void{
try{
public function modifVocabListById(int $id, String $name,String $img,String $aut):void
{
try {
$query = "UPDATE VocabularyList SET name=:name, image=:img, userID=:aut WHERE id=:id";
$args = array(':id'=>array($id,PDO::PARAM_INT),
':name'=>array($name,PDO::PARAM_STR),
':img'=>array($img,PDO::PARAM_STR),
':aut'=>array($aut,PDO::PARAM_INT));
$this->con->ExecuteQuery($query,$args);
}
catch (PDOException $e){
$args = array(':id'=>array($id, PDO::PARAM_INT),
':name'=>array($name, PDO::PARAM_STR),
':img'=>array($img, PDO::PARAM_STR),
':aut'=>array($aut, PDO::PARAM_INT));
$this->con->ExecuteQuery($query, $args);
} catch (PDOException $e) {
throw new Exception('problème pour modifier les vocabulaires');
}
}
public function findByGroup(int $id): array {
public function findByGroup(int $id): array
{
try {
$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));
$this->con->executeQuery($query, $args);
$results = $this->con->getResults();
$tab = array();
foreach ($results as $row) $tab[] = new VocabularyList($row['id'], $row['name'], $row['image'], $row['userID']);
foreach ($results as $row) {
$tab[] = new VocabularyList($row['id'], $row['name'], $row['image'], $row['userID']);
}
return $tab;
}
catch (PDOException $e) {
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}
public function findByUser(int $id): array {
public function findByUser(int $id): array
{
try {
$query = "SELECT * FROM VocabularyList WHERE userID=:id";
$args = array(':id' => array($id, PDO::PARAM_INT));
$this->con->executeQuery($query, $args);
$results = $this->con->getResults();
$tab = array();
foreach ($results as $row) $tab[] = new VocabularyList($row['id'], $row['name'], $row['image'], $row['userID']);
foreach ($results as $row) {
$tab[] = new VocabularyList($row['id'], $row['name'], $row['image'], $row['userID']);
}
return $tab;
}
catch (PDOException $e) {
} catch (PDOException $e) {
throw new Exception($e->getMessage());
}
}

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

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

@ -6,7 +6,8 @@ use gateway\UserGateway;
abstract class AbsModel
{
public function connection(string $login, string $password){
public function connection(string $login, string $password):?User
{
$gtw = new UserGateway();
$hash = $gtw->login($login) ?? null;
@ -15,7 +16,11 @@ abstract class AbsModel
$_SESSION['login'] = $login;
$roles = array();
foreach ($user->getRoles() as $role) $roles[] = $role;
foreach ($user->getRoles() as $role) {
$roles[] = $role;
}
$_SESSION['roles'] = $roles;
return $user;
@ -24,16 +29,18 @@ abstract class AbsModel
return null;
}
public function deconnection(){
public function deconnection():void
{
session_unset();
session_destroy();
$_SESSION = array();
}
public function checkLoginExist(string $login): bool {
public function checkLoginExist(string $login): bool
{
$gtw = new UserGateway();
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
{
public function getAllUsers(): array {
public function getAllUsers(): array
{
$gtw = new UserGateway();
return $gtw->findAll();
}
public function getAllAdmins(): array {
public function getAllAdmins(): array
{
$gtw = new UserGateway();
return $gtw->findAllAdmins();
}
public function getAllTeachers(): array {
public function getAllTeachers(): array
{
$gtw = new UserGateway();
return $gtw->findAllTeachers();
}
public function getAllStudents(): array {
public function getAllStudents(): array
{
$gtw = new UserGateway();
return $gtw->findAllStudents();
}
public function removeUser(int $id): void {
public function removeUser(int $id): void
{
$gtw = new UserGateway();
$gtw->remove($id);
}
public function getAllGroups(): array {
public function getAllGroups(): array
{
$gtw = new GroupGateway();
return $gtw->findAll();
}
public function getUsersOfGroup(int $id): array {
public function getUsersOfGroup(int $id): array
{
$gtw = new UserGateway();
return $gtw->findUsersByGroup($id);
}
public function removeUserFromGroup(int $id): void {
public function removeUserFromGroup(int $id): void
{
$gtw = new UserGateway();
$gtw->modifyGroup($id);
}
public function removeGroup(int $id): void {
public function removeGroup(int $id): void
{
$gtw = new GroupGateway();
$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();
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->modifyGroup($user, $group);
}
public function getUnassignedUsers(): array {
public function getUnassignedUsers(): array
{
$gtw = new UserGateway();
return $gtw->findUnassignedUsers();
}
public function is(string $login, array $roles): User
public function is(string $login, array $roles): ?User
{
$gtw = new UserGateway();
$user = $gtw->findUserByEmail($login);
if ($user->getRoles() == $roles && in_array('admin', $user->getRoles())) return $user;
else return null;
return $user->getRoles() == $roles && in_array('admin', $user->getRoles()) ? $user : null;
}
}

@ -8,30 +8,34 @@ use gateway\VocabularyListGateway;
class MdlStudent extends MdlUser
{
public function getAll():array{
public function getAll():array
{
$gtw = new VocabularyListGateway();
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;
*/
return $gtw->findAll();
}
public function getVocabByName(string $name):array{
public function getVocabByName(string $name):array
{
$gtw = new VocabularyListGateway();
return $gtw->findByName($name);
}
public function getVocByGroup(int $group): array
{
$gtw = new VocabularyListGateway();
return $gtw->findByGroup($group);
}
public function getVocabById(int $id): VocabularyList
{
$gtw = new VocabularyListGateway();
$res = $gtw->findByName($name);
return $res;
return $gtw->findById($id);
}
public function is(string $login, array $roles): User
public function is(string $login, array $roles): ?User
{
$gtw = new UserGateway();
$user = $gtw->findUserByEmail($login);
if ($user->getRoles() == $roles && in_array('student', $user->getRoles())) return $user;
else return null;
return $user->getRoles() == $roles && in_array('student', $user->getRoles()) ? $user : null;
}
}

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

@ -4,25 +4,26 @@ namespace model;
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->modifyNickname($id, $newNickname);
}
public function ModifyPassword(int $id, string $newPassword): void {
public function modifyPassword(int $id, string $newPassword): void
{
$gtw = new UserGateway();
$gtw->modifyPassword($id, $newPassword);
}
public function is(string $login, array $roles): User
public function is(string $login, array $roles): ?User
{
$gtw = new UserGateway();
$user = $gtw->findUserByEmail($login);
if (!empty($user->getRoles())) return $user;
else return null;
return !empty($user->getRoles()) ? $user : null;
}
public function getUserById($id): User

@ -27,8 +27,18 @@ class User
* @param int|null $group
* @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->password = $password;
$this->email = $email;
@ -90,7 +100,5 @@ class User
{
return $this->roles;
}
}

@ -2,7 +2,7 @@
<html lang="en">
<head>
<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="description" content="" />
<meta name="author" content="" />

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

@ -54,7 +54,12 @@
<section class="projects-section">
<div class="container px-4 px-lg-5" id="game">
<!-- 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="col-lg-6"><img class="img-fluid" src="{{base}}/assets/img/quizz.jpeg" alt="..." /></div>
<div class="col-lg-6">
@ -70,7 +75,12 @@
</div>
</a>
<!-- 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="col-lg-6"><img class="img-fluid" src="{{base}}/assets/img/memory.jpeg" alt="..." /></div>
<div class="col-lg-6 order-lg-first">
@ -113,9 +123,6 @@
</div>
</section>
<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="row gx-4 gx-lg-5">
<div class="col-md-4 mb-3 mb-md-0">
@ -149,11 +156,6 @@
</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>
</section>
<!-- Footer-->

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

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

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