From 96c879d0f9c8b2e885372d45bcf902e350dd8900 Mon Sep 17 00:00:00 2001
From: teissier <vi.teissier@gmail.com>
Date: Wed, 29 May 2024 12:29:53 +0200
Subject: [PATCH] connexion presque finie

---
 application/config/autoload.php      |  2 +-
 application/config/config.php        |  2 +-
 application/controllers/Connect.php  | 83 ++++++++++++++++++++++++++++
 application/models/User_model.php    | 21 +++++++
 application/views/create.php         | 32 +++++++++++
 application/views/layout/header.php  | 28 ++++++----
 application/views/layout/header.php~ |  5 +-
 application/views/login.php          | 21 +++++++
 application/views/logout.php         | 29 ++++++++++
 9 files changed, 208 insertions(+), 15 deletions(-)
 create mode 100644 application/controllers/Connect.php
 create mode 100644 application/models/User_model.php
 create mode 100644 application/views/create.php
 create mode 100644 application/views/login.php
 create mode 100644 application/views/logout.php

diff --git a/application/config/autoload.php b/application/config/autoload.php
index 06d8675..10b76f3 100644
--- a/application/config/autoload.php
+++ b/application/config/autoload.php
@@ -58,7 +58,7 @@ $autoload['packages'] = array();
 |
 |	$autoload['libraries'] = array('user_agent' => 'ua');
 */
-$autoload['libraries'] = array();
+$autoload['libraries'] = array('session');
 
 /*
 | -------------------------------------------------------------------
diff --git a/application/config/config.php b/application/config/config.php
index bfb06f0..ad034a1 100644
--- a/application/config/config.php
+++ b/application/config/config.php
@@ -387,7 +387,7 @@ $config['sess_driver'] = 'files';
 $config['sess_cookie_name'] = 'ci_session';
 $config['sess_samesite'] = 'Lax';
 $config['sess_expiration'] = 7200;
-$config['sess_save_path'] = NULL;
+$config['sess_save_path'] = '/tmp';
 $config['sess_match_ip'] = FALSE;
 $config['sess_time_to_update'] = 300;
 $config['sess_regenerate_destroy'] = FALSE;
diff --git a/application/controllers/Connect.php b/application/controllers/Connect.php
new file mode 100644
index 0000000..2858a7b
--- /dev/null
+++ b/application/controllers/Connect.php
@@ -0,0 +1,83 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+
+class Connect extends CI_Controller {
+
+    public function __construct()
+    {
+        parent::__construct();
+        $this->load->model('User_model');
+        $this->load->library('session');
+    }
+
+    public function create()
+    {
+        $this->load->library('form_validation');
+        $this->form_validation->set_rules('nom', 'Nom', 'required');
+        $this->form_validation->set_rules('prenom', 'Prénom', 'required');
+        $this->form_validation->set_rules('email', 'Adresse mail', 'valid_email|required');
+        $this->form_validation->set_rules('password', 'Password', 'min_length[5]|required');
+        $this->form_validation->set_rules('cpassword', 'Confirmation Password', 'required|matches[password]');
+
+        if ($this->form_validation->run() === FALSE) {
+            $this->load->view('layout/header');
+            $this->load->view('create');
+            $this->load->view('layout/footer');
+        } else {
+            $data = array(
+                'nom' => $this->input->post('nom'),
+                'prenom' => $this->input->post('prenom'),
+                'email' => $this->input->post('email'),
+                'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT)
+            );
+
+            if ($this->User_model->create_user($data)) {
+                // Redirect to a success page or login page
+                redirect('connect/login');
+            } else {
+                // Handle error
+                $this->load->view('layout/header');
+                $this->load->view('create');
+                $this->load->view('layout/footer');
+            }
+        }
+    }
+
+    public function login()
+    {
+        $this->load->library('form_validation');
+        $this->form_validation->set_rules('email', 'Email', 'required|valid_email');
+        $this->form_validation->set_rules('password', 'Password', 'required');
+    
+        if ($this->form_validation->run() === FALSE) {
+            $this->load->view('layout/header');
+            $this->load->view('login');
+            $this->load->view('layout/footer');
+        } else {
+            $email = $this->input->post('email');
+            $password = $this->input->post('password');
+    
+            $user = $this->User_model->get_user_by_email($email);
+    
+            if ($user && password_verify($password, $user['password'])) {
+                // Set session data and redirect to a protected page
+                $this->session->set_userdata('user_id', $user['id']);
+                redirect('albums');
+            } else {
+                // Handle login error
+                $data['error'] = 'Adresse email ou mot de passe incorrect';
+                $this->load->view('layout/header');
+                $this->load->view('login', $data); // Passer le message d'erreur à la vue
+                $this->load->view('layout/footer');
+            }
+        }
+    }
+
+    public function logout()
+    {
+        $this->session->unset_userdata('user_id');
+        redirect('connect/login');
+    }
+
+    
+}
diff --git a/application/models/User_model.php b/application/models/User_model.php
new file mode 100644
index 0000000..4858301
--- /dev/null
+++ b/application/models/User_model.php
@@ -0,0 +1,21 @@
+<?php
+class User_model extends CI_Model {
+
+    public function __construct()
+    {
+        $this->load->database();
+    }
+
+    public function create_user($data)
+    {
+        return $this->db->insert('user', $data);
+    }
+
+    public function get_user_by_email($email)
+    {
+        $this->db->where('email', $email);
+        $query = $this->db->get('user');
+        return $query->row_array();
+    }
+}
+?>
diff --git a/application/views/create.php b/application/views/create.php
new file mode 100644
index 0000000..53d875f
--- /dev/null
+++ b/application/views/create.php
@@ -0,0 +1,32 @@
+<?=validation_errors(); ?>
+<?=form_open('connect/create')?>
+  <!-- Grid -->
+  <div class="grid">
+
+    <label for="prenom">
+      Prénom
+      <input type="text" id="prenom" name="prenom" placeholder="Prénom" value="<?=set_value('prenom')?>" required>
+    </label>
+
+    <label for="nom">
+      Nom
+      <input type="text" id="nom" name="nom" placeholder="Nom" value="<?=set_value('nom')?>" required>
+    </label>
+  </div>
+
+  <label for="email">Adresse mail</label>
+  <input type="email" id="email" name="email" placeholder="Email" value="<?=set_value('email')?>" required>
+
+  <div class="grid">
+    <label for="password">Password
+      <input type="password" id="password" name="password" placeholder="Password" value="<?=set_value('password')?>" required>
+    </label>
+
+    <label for="cpassword">Confirmation password
+      <input type="password" id="cpassword" name="cpassword" placeholder="Confirmation Password" value="<?=set_value('cpassword')?>" required>
+    </label>
+  </div>
+
+  <!-- Button -->
+  <button type="submit">Submit</button>
+</form>
diff --git a/application/views/layout/header.php b/application/views/layout/header.php
index cb0119d..90c4efd 100644
--- a/application/views/layout/header.php
+++ b/application/views/layout/header.php
@@ -2,7 +2,7 @@
 <html lang="en" class="has-navbar-fixed-top">
 	<head>
 		<meta charset="UTF-8" />
-		<title>MUSIC APP</title>
+		<title>Dix heures</title>
 <link
   rel="stylesheet"
   href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"
@@ -13,13 +13,19 @@
 	</head>
 	<body>
 		<main class='container'>
-			<nav>
-  <ul>
-    <li><strong>Music APP</strong></li>
-  </ul>
-  <ul>
-  <li><?=anchor('albums','Albums');?></li>
-  <li><?=anchor('artistes','Artistes');?></li>
-  <li><?=anchor('playlist','Playlist');?></li>
-  </ul>
-</nav>
+    <nav>
+      <ul>
+        <li><strong>Dix heures</strong></li>
+      </ul>
+      <ul>
+        <li><?=anchor('albums','Albums');?></li>
+        <li><?=anchor('artistes','Artistes');?></li>
+        <li><?=anchor('playlist','Playlist');?></li>
+        <?php if ($this->session->userdata('user_id')): ?>
+          <li><?=anchor('connect/logout','Déconnexion');?></li>
+        <?php else: ?>
+          <li><?=anchor('connect/login','Connexion');?></li>
+        <?php endif; ?>
+      </ul>
+  </nav>
+
diff --git a/application/views/layout/header.php~ b/application/views/layout/header.php~
index cb0119d..e58a568 100644
--- a/application/views/layout/header.php~
+++ b/application/views/layout/header.php~
@@ -2,7 +2,7 @@
 <html lang="en" class="has-navbar-fixed-top">
 	<head>
 		<meta charset="UTF-8" />
-		<title>MUSIC APP</title>
+		<title>Dix heures</title>
 <link
   rel="stylesheet"
   href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"
@@ -15,11 +15,12 @@
 		<main class='container'>
 			<nav>
   <ul>
-    <li><strong>Music APP</strong></li>
+    <li><strong>Dix heures</strong></li>
   </ul>
   <ul>
   <li><?=anchor('albums','Albums');?></li>
   <li><?=anchor('artistes','Artistes');?></li>
   <li><?=anchor('playlist','Playlist');?></li>
+  <li><?=anchor('connect','Connexion');?></li>
   </ul>
 </nav>
diff --git a/application/views/login.php b/application/views/login.php
new file mode 100644
index 0000000..a46748a
--- /dev/null
+++ b/application/views/login.php
@@ -0,0 +1,21 @@
+<?=validation_errors(); ?>
+
+<?php if (isset($error)): ?>
+  <p style="color: red;"><?= $error ?></p>
+<?php endif; ?>
+
+<?=form_open('connect/login')?>
+  <!-- Grid -->
+  <div class="grid">
+    <label for="email">Adresse mail</label>
+    <input type="email" id="email" name="email" placeholder="Email" value="<?=set_value('email')?>" required>
+
+    <label for="password">Password</label>
+    <input type="password" id="password" name="password" placeholder="Password" value="<?=set_value('password')?>" required>
+  </div>
+  <!-- Button -->
+  <button type="submit">Submit</button>
+  
+  <?=anchor('connect/create', "Pas de compte ? Créez-en un !");?>
+
+</form>
diff --git a/application/views/logout.php b/application/views/logout.php
new file mode 100644
index 0000000..7ac14d6
--- /dev/null
+++ b/application/views/logout.php
@@ -0,0 +1,29 @@
+<?php
+defined('BASEPATH') OR exit('No direct script access allowed');
+?>
+<!doctype html>
+<html lang="en" class="has-navbar-fixed-top">
+<head>
+  <meta charset="UTF-8" />
+  <title>Dix heures</title>
+  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css"/>
+  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
+  <?=link_tag('assets/style.css')?>
+</head>
+<body>
+  <main class='container'>
+    <nav>
+      <ul>
+        <li><strong>Dix heures</strong></li>
+      </ul>
+      <ul>
+        <li><?=anchor('albums','Albums');?></li>
+        <li><?=anchor('artistes','Artistes');?></li>
+        <li><?=anchor('playlist','Playlist');?></li>
+        <li><?=anchor('connect/login','Connexion');?></li>
+      </ul>
+    </nav>
+    <p>Vous êtes déconnecté.</p>
+  </main>
+</body>
+</html>