diff --git a/.env b/.env index fb160023..40725214 100644 --- a/.env +++ b/.env @@ -50,7 +50,7 @@ CI_ENVIRONMENT = development #-------------------------------------------------------------------- database.default.hostname = localhost -database.default.database = test6 +database.default.database = login database.default.username = root database.default.password = database.default.DBDriver = MySQLi diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..253dffe1 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/../../../../../:\xampp\htdocs\codeigniter4login\.idea/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/vendor/sebastian/type/.idea/type.iml b/.idea/codeigniter4login.iml similarity index 78% rename from vendor/sebastian/type/.idea/type.iml rename to .idea/codeigniter4login.iml index 24c4e404..646e0a9d 100644 --- a/vendor/sebastian/type/.idea/type.iml +++ b/.idea/codeigniter4login.iml @@ -2,37 +2,45 @@ - + - - - - + + + + + - - + + + - - + - - - + + + + + + + + + + + + + + - - - - - - - + + + diff --git a/vendor/sebastian/type/.idea/modules.xml b/.idea/modules.xml similarity index 54% rename from vendor/sebastian/type/.idea/modules.xml rename to .idea/modules.xml index cfc6039c..c6562bb3 100644 --- a/vendor/sebastian/type/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/vendor/sebastian/type/.idea/php.xml b/.idea/php.xml similarity index 75% rename from vendor/sebastian/type/.idea/php.xml rename to .idea/php.xml index b4dab665..afa58c64 100644 --- a/vendor/sebastian/type/.idea/php.xml +++ b/.idea/php.xml @@ -2,41 +2,50 @@ - - - - - - - - - + + + + + + + + - - - - - + - - - - - - - + + + + + + + + + + + + + + + + + + + - + + - + \ No newline at end of file diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml new file mode 100644 index 00000000..4f8104cf --- /dev/null +++ b/.idea/phpunit.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/vendor/sebastian/type/.idea/vcs.xml b/.idea/vcs.xml similarity index 100% rename from vendor/sebastian/type/.idea/vcs.xml rename to .idea/vcs.xml diff --git a/README.md b/README.md index babd3338..e22fa9e4 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,3 @@ -# CodeIgniter 4 Login & Register -CodeIgniter 4 Login & Register System based on YouTube tutorial +Tuto pour le login : > https://www.youtube.com/watch?v=uYX9FLi1BYg&list=PLYogo31AXFBONHR0WjlnhxN4ulRrF98aA -## 1. Setup -Change .env settings to apply to your environment -## 2. Run migration -Open terminal and navigate to your project folder, then run: -> php spark migrate - -This will create the table 'users' in your database that you secified in your .env file - -### 3. Now you can Register your first user diff --git a/app/Config/Filters.php b/app/Config/Filters.php index 26804a36..d8f90506 100644 --- a/app/Config/Filters.php +++ b/app/Config/Filters.php @@ -10,6 +10,7 @@ class Filters extends BaseConfig 'csrf' => \CodeIgniter\Filters\CSRF::class, 'toolbar' => \CodeIgniter\Filters\DebugToolbar::class, 'honeypot' => \CodeIgniter\Filters\Honeypot::class, + 'authadmin' => \App\Filters\AuthAdm::class, 'auth' => \App\Filters\Auth::class, 'noauth' => \App\Filters\Noauth::class, 'userscheck' => \App\Filters\UsersCheck::class, diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 37c81403..9dc60173 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -34,7 +34,15 @@ $routes->get('logout', 'Users::logout'); $routes->match(['get','post'],'register', 'Users::register', ['filter' => 'noauth']); $routes->match(['get','post'],'profile', 'Users::profile',['filter' => 'auth']); +$routes->match(['get','post'],'publication', 'PublicationController::publication',['filter' => 'auth']); +$routes->match(['get','post'],'displayPublication', 'PublicationController::displayVerifiedPublication',['filter' => 'auth']); $routes->get('dashboard', 'Dashboard::index',['filter' => 'auth']); +$routes->match(['get','post'],'userpublication', 'PublicationController::userPublish',['filter' => 'auth']); +$routes->match(['get','post'],'unverifiedpublication', 'PublicationController::displayUnVerifiedPublication',['filter' => 'authadmin']); +$routes->match(['get','post'],'publicationGestion', 'PublicationController::publicationGestion',['filter' => 'authadmin']); +$routes->match(['get','post'],'aprouvePublish', 'PublicationController::aprouvePublish',['filter' => 'authadmin']); +$routes->match(['get','post'],'deletePublish', 'PublicationController::deletePublish',['filter' => 'authadmin']); + /** * -------------------------------------------------------------------- diff --git a/app/Controllers/BaseController.php b/app/Controllers/BaseController.php index 252692f0..fb584c32 100644 --- a/app/Controllers/BaseController.php +++ b/app/Controllers/BaseController.php @@ -13,7 +13,7 @@ * * @package CodeIgniter */ - +/* Controlleur de base de CI*/ use CodeIgniter\Controller; class BaseController extends Controller diff --git a/app/Controllers/Dashboard.php b/app/Controllers/Dashboard.php index b83e8f45..86704d43 100644 --- a/app/Controllers/Dashboard.php +++ b/app/Controllers/Dashboard.php @@ -1,5 +1,5 @@ request->getMethod() == 'post') { /* méthode post pour masqué les infos */ + $rules = [ + 'hashtag' => 'required|min_length[1]|max_length[255]', /* règle de longueur des info */ + 'description' => 'required|min_length[1]|max_length[255]', + 'auteur' => 'required|min_length[1]|max_length[255]' + + ]; + + if (! $this->validate($rules)) { /* est_ce que regle NOK ?*/ + $data['validation'] = $this->validator; /*NOK*/ + }else{ + $model = new PublicationModel(); /* Création d'un nouvel objet PublicationModel afin d'appeler notre model*/ + + $newData = [ + 'users_id' => session()->get('id'), /*Récuperation de l'id de l'user connecté que l'on affectera à la publication afin de lié user et publi */ + 'hashtag' => $this->request->getVar('hashtag'), /* Récupération des var de POST*/ + 'description' => $this->request->getVar('description'), + 'auteur' => $this->request->getVar('auteur') + + + ]; + $model->save($newData); /* save est une méthode de CI pour sauvegarder des data en db équivaut à INSERT INTO etc.....*/ + $session = session(); + $session->setFlashdata('success', 'Successful Publish'); /*Validation*/ + return redirect()->to('/'); /*Rédirection vers dashboard*/ + + } + } + + + echo view('templates/header', $data); /* Appel des vues*/ + echo view('publication'); + echo view('templates/footer'); + } + + public function displayVerifiedPublication(){ /*AFFICHAGE des publi verifiée*/ + + $model = new PublicationModel(); + $dataTable['table'] = $model->selectVerifiedPublish(); + + + + echo view('templates/header'); + echo view('displayPublication', $dataTable); + echo view('templates/footer'); + } + + public function displayUnVerifiedPublication(){ /*AFFICHAGE des publi non vérifiée*/ + + $model = new PublicationModel(); + $dataTable['table'] = $model->selectUnVerifiedPublish(); + + + + echo view('templates/header'); + echo view('aprouvepublish', $dataTable); + echo view('templates/footer'); + } + + public function userPublish(){ /*Afficher les publication de l'user courant */ + $idUser = session()->get('id'); + $model = new PublicationModel(); + $dataTable['table'] = $model->selectUserPublish($idUser); /*Envoi en parametre l'id de l'user courant au model */ + + echo view('templates/header'); + echo view('displayPublication', $dataTable); + echo view('templates/footer'); + } + + + + public function aprouvePublish() + { /*Permet d'approuvé les publications*/ + + helper(['form']); + + if ($this->request->getMethod() == 'post') { + // + + + $newData = [ // On change l'état du champs isverified à 1 + 'isverified' => 1, + + + ]; + $model = new PublicationModel(); + $model->update($this->request->getVar('approuve'), $newData); + $session = session(); + $session->setFlashdata('success', 'Publication approuvée !'); + return redirect()->to('/'); + + + } + + + } + + + public function deletePublish(){ //Pour supprimer une publication + $data = []; + helper(['form']); + + if ($this->request->getMethod() == 'post') { + + $model = new PublicationModel(); + $model->delete(['id' => $this->request->getVar('delete')]); // supprimer une ligne dans la table Publication en fct de son id + $session = session(); + $session->setFlashdata('success', 'Successful deleted'); + return redirect()->to('/'); + + + } + + + + } + public function publicationGestion(){ //gère l'aprobation ou la suppression des publication en fonction du bouton cliqué + if(isset($_POST['approuve'])) { + $this->aprouvePublish(); + } + if(isset($_POST['delete'])){ + $this->deletePublish(); + + } + + $this->displayUnVerifiedPublication(); + + } + + +} \ No newline at end of file diff --git a/app/Controllers/Users.php b/app/Controllers/Users.php index 1b77a582..bd3fa41c 100644 --- a/app/Controllers/Users.php +++ b/app/Controllers/Users.php @@ -3,7 +3,7 @@ use App\Models\UserModel; -class Users extends BaseController +class Users extends BaseController /*Déclaration de classe qui hérite du controlleur de base de CI*/ { public function index() { @@ -12,7 +12,7 @@ public function index() if ($this->request->getMethod() == 'post') { - //let's do the validation here + $rules = [ 'email' => 'required|min_length[6]|max_length[50]|valid_email', 'password' => 'required|min_length[8]|max_length[255]|validateUser[email,password]', @@ -20,7 +20,7 @@ public function index() $errors = [ 'password' => [ - 'validateUser' => 'Email or Password don\'t match' + 'validateUser' => 'Informations erronées ' ] ]; @@ -44,12 +44,13 @@ public function index() echo view('templates/footer'); } - private function setUserSession($user){ + private function setUserSession($user){ // u recupère les infos de l'user à la connexion $data = [ 'id' => $user['id'], 'firstname' => $user['firstname'], 'lastname' => $user['lastname'], 'email' => $user['email'], + 'droits' => $user['droits'], 'isLoggedIn' => true, ]; @@ -57,13 +58,13 @@ private function setUserSession($user){ return true; } - public function register(){ + public function register(){ //inscription $data = []; helper(['form']); if ($this->request->getMethod() == 'post') { - //let's do the validation here - $rules = [ + + $rules = [ //règles 'firstname' => 'required|min_length[3]|max_length[20]', 'lastname' => 'required|min_length[3]|max_length[20]', 'email' => 'required|min_length[6]|max_length[50]|valid_email|is_unique[users.email]', @@ -82,9 +83,9 @@ public function register(){ 'email' => $this->request->getVar('email'), 'password' => $this->request->getVar('password'), ]; - $model->save($newData); + $model->save($newData); // INSERT $session = session(); - $session->setFlashdata('success', 'Successful Registration'); + $session->setFlashdata('success', 'Inscription validée'); return redirect()->to('/'); } @@ -96,6 +97,8 @@ public function register(){ echo view('templates/footer'); } + + public function profile(){ $data = []; @@ -103,7 +106,7 @@ public function profile(){ $model = new UserModel(); if ($this->request->getMethod() == 'post') { - //let's do the validation here + $rules = [ 'firstname' => 'required|min_length[3]|max_length[20]', 'lastname' => 'required|min_length[3]|max_length[20]', @@ -129,7 +132,7 @@ public function profile(){ } $model->save($newData); - session()->setFlashdata('success', 'Successfuly Updated'); + session()->setFlashdata('success', 'Mise à jour réuissie '); return redirect()->to('/profile'); } @@ -142,8 +145,8 @@ public function profile(){ } public function logout(){ - session()->destroy(); - return redirect()->to('/'); + session()->destroy(); // met fin à la session + return redirect()->to('/'); //redirection vers la racine } //-------------------------------------------------------------------- diff --git a/app/Filters/Auth.php b/app/Filters/Auth.php index 51a4ffd3..ec3736b3 100644 --- a/app/Filters/Auth.php +++ b/app/Filters/Auth.php @@ -4,12 +4,12 @@ use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\Filters\FilterInterface; -class Auth implements FilterInterface +class Auth implements FilterInterface // filtre qui permet de rediriger un utilisateur qui n'est pas logger { public function before(RequestInterface $request) { // Do something here - if(! session()->get('isLoggedIn')){ + if(!session()->get('isLoggedIn')){ return redirect()->to('/'); } diff --git a/app/Filters/AuthAdm.php b/app/Filters/AuthAdm.php new file mode 100644 index 00000000..73f808f6 --- /dev/null +++ b/app/Filters/AuthAdm.php @@ -0,0 +1,24 @@ +get('droits') < 2 ){ + return redirect()->to('/'); + } + + } + + //-------------------------------------------------------------------- + + public function after(RequestInterface $request, ResponseInterface $response) + { + // Do something here + } +} diff --git a/app/Filters/Noauth.php b/app/Filters/Noauth.php index 41ec060e..b0fa71cd 100644 --- a/app/Filters/Noauth.php +++ b/app/Filters/Noauth.php @@ -4,7 +4,7 @@ use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\Filters\FilterInterface; -class Noauth implements FilterInterface +class Noauth implements FilterInterface // filtre qui permet de rediriger un utilisateur qui est logger { public function before(RequestInterface $request) { diff --git a/app/Filters/UsersCheck.php b/app/Filters/UsersCheck.php index b460313b..c32304aa 100644 --- a/app/Filters/UsersCheck.php +++ b/app/Filters/UsersCheck.php @@ -4,7 +4,7 @@ use CodeIgniter\HTTP\ResponseInterface; use CodeIgniter\Filters\FilterInterface; -class UsersCheck implements FilterInterface +class UsersCheck implements FilterInterface // ?????????????????????????? { public function before(RequestInterface $request) { diff --git a/app/Models/PublicationModel.php b/app/Models/PublicationModel.php new file mode 100644 index 00000000..7725f114 --- /dev/null +++ b/app/Models/PublicationModel.php @@ -0,0 +1,41 @@ +db->table('publication'); + $builder = $builder->where('users_id', $idUser); + $data = $builder->get()->getResultArray(); + + return $data; + + } + + function selectVerifiedPublish(){ + $builder = $this->db->table('publication'); + $builder = $builder->where('isverified', 1); + $data = $builder->get()->getResultArray(); + + return $data; + + } + + function selectUnVerifiedPublish(){ + $builder = $this->db->table('publication'); + $builder = $builder->where('isverified', 0); + $data = $builder->get()->getResultArray(); + + return $data; + + } + +} diff --git a/app/Models/UserModel.php b/app/Models/UserModel.php index 6923eb1f..f419fc78 100644 --- a/app/Models/UserModel.php +++ b/app/Models/UserModel.php @@ -26,7 +26,7 @@ protected function beforeUpdate(array $data){ protected function passwordHash(array $data){ if(isset($data['data']['password'])) - $data['data']['password'] = password_hash($data['data']['password'], PASSWORD_DEFAULT); + $data['data']['password'] = password_hash($data['data']['password'], PASSWORD_DEFAULT); // Cryptage Bcrypt du mdp return $data; } diff --git a/app/Views/aprouvepublish.php b/app/Views/aprouvepublish.php new file mode 100644 index 00000000..fd835581 --- /dev/null +++ b/app/Views/aprouvepublish.php @@ -0,0 +1,37 @@ + + + + + + +
+

Ressources

+ + + + + + + + + + + + + + + + + + + + + + + + + +
hashtagauteurdescription
+
+ + \ No newline at end of file diff --git a/app/Views/dashboard.php b/app/Views/dashboard.php index c69ab73f..c2a35465 100644 --- a/app/Views/dashboard.php +++ b/app/Views/dashboard.php @@ -1,7 +1,7 @@
-

Hello, get('firstname') ?>

+

Bonjour, get('firstname') ?>

diff --git a/app/Views/displayPublication.php b/app/Views/displayPublication.php new file mode 100644 index 00000000..49040f0e --- /dev/null +++ b/app/Views/displayPublication.php @@ -0,0 +1,33 @@ + + + + + + +
+

Ressources

+ + + + + + + + + + + + + + + + + + + + + +
hashtagauteurdescription
+
+ + \ No newline at end of file diff --git a/app/Views/login.php b/app/Views/login.php index 050fad73..ae898d17 100644 --- a/app/Views/login.php +++ b/app/Views/login.php @@ -2,7 +2,7 @@
-

Login

+

Connexion


get('success')): ?>