diff --git a/R3.01/tp/tp5/README.md b/R3.01/tp/tp5/README.md new file mode 100644 index 0000000..35b4e91 --- /dev/null +++ b/R3.01/tp/tp5/README.md @@ -0,0 +1,69 @@ + +# TP5 : prise en main de codeigniter + +## Installation +Téléchargez les sources de [codeigniter v3](https://github.com/pocketarc/codeigniter) (il s'agit d'un fork qui évite certains +porblèmes de compatibilité avec des versions récentes de php), et placez les dans votre +`public_html`. + +1. Importez dans votre base de données la table [todo.sql](src/sql/todo.sql) +2. Copiez le repertoire [assets](src/assets) à la racine de votre application. +3. Copiez les [contrôleurs](src/ci), [modèles](src/ci) et [vues](src/ci) dans votre application. +4. Configurez les paramètres nécessaires à codeigniter : + - `config/config.php` + - `config/database.php` + +```php +$config['base_url']='/~login/chemin/vers/codeigniter'; +``` +Vous devriez obtenir une application `todolist` fonctionnelle à l'url : +``` +https://dwarves.iut-fbleau.fr/~login/chemin/vers/codeigniter/index.php/todo +``` + +![todo](img/todo.png) + +## Suppression des tâches +Modifiez le code pour la suppression des tâches. + +## Edition des tâches +Modifiez le code (contrôleur et modèle) pour l'édition des tâches. + +## Tri de la todolist +Ajoutez la possibilité de trier la todolist par ordre (croissant/décroissant) alphabètique + +## Création de compte + +1. Ajoutez dans votre de base de données une table `user`, qui permettra de stocker des utilisateurs. + attributs : nom, prenom, email (clé primaire), password. +2. Complétez le contrôleur de création de compte. On rappelle que la base de données doit contenir un hash du mot de passe (cf tp4). + ```php + + ``` + ```php + + ``` + +3. Ajoutez un formulaire d'authentification. +4. Utilisez une session pour proteger l'accès à la todolist par authentification. +5. Ajouter à la table todo un lien vers la table user, et modifez l'ensemble de l'application pour que + chaque utilisateur possède sa propre todolist. diff --git a/R3.01/tp/tp5/img/todo.png b/R3.01/tp/tp5/img/todo.png new file mode 100644 index 0000000..4de1f3a Binary files /dev/null and b/R3.01/tp/tp5/img/todo.png differ diff --git a/R3.01/tp/tp5/src/assets/style.css b/R3.01/tp/tp5/src/assets/style.css new file mode 100644 index 0000000..d131c8d --- /dev/null +++ b/R3.01/tp/tp5/src/assets/style.css @@ -0,0 +1,13 @@ +.action{ +text-align : right; +} +.action a { + margin-right : 1rem; +} +table { + +font-size : 1.5rem; +} +body { +padding : 2rem; +} diff --git a/R3.01/tp/tp5/src/ci/controllers/Todo.php b/R3.01/tp/tp5/src/ci/controllers/Todo.php new file mode 100644 index 0000000..9ab1b6a --- /dev/null +++ b/R3.01/tp/tp5/src/ci/controllers/Todo.php @@ -0,0 +1,64 @@ +load->helper('html'); + $this->load->helper('url'); + $this->load->helper('form'); + + $this->load->model('model_todo'); + + $this->filter = $this->input->get('filter') ?? 'all'; + } + + public function index() + { + $todos = $this->model_todo->getTodos($this->filter); + $this->load->view('layout/header'); + $this->load->view('todos',['todos'=>$todos,'filter'=>$this->filter]); + $this->load->view('layout/footer'); + } + + public function delete($id) + { + // TODO + } + + public function toggle($id) + { + $this->model_todo->toggleTodo($id); + redirect('/todo'); + } + + public function add() + { + $todo = ['text'=>$this->input->post('todo'),'done'=>0]; + $this->model_todo->addTodo($todo); + $todos = $this->model_todo->getTodos(); + $this->index(); + } + public function edit($id) + { + + $this->load->library('form_validation'); + $this->load->model('model_todo'); + + $todo = $this->model_todo->getTodo($id); + $this->form_validation->set_rules('todo', 'Todo', 'required'); + if ($this->form_validation->run() === FALSE){ + $this->load->view('layout/header'); + $this->load->view('edit',['todo'=>$todo]); + $this->load->view('layout/footer'); + + + }else{ + // TODO + } + } +} diff --git a/R3.01/tp/tp5/src/ci/controllers/User.php b/R3.01/tp/tp5/src/ci/controllers/User.php new file mode 100644 index 0000000..415532b --- /dev/null +++ b/R3.01/tp/tp5/src/ci/controllers/User.php @@ -0,0 +1,35 @@ +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'); + $this->form_validation->set_rules('password', 'current password', 'min_length[5]|required'); + $this->form_validation->set_rules('cpassword', 'confirm password', 'required|matches[password]'); + + + if ($this->form_validation->run() === FALSE){ + $this->load->view('layout/header'); + $this->load->view('create_user_form'); + $this->load->view('layout/footer'); + }else{ + // + // TODO + // + } + } + + public function auth() + { + // + // TODO + // + + } +} diff --git a/R3.01/tp/tp5/src/ci/models/Model_todo.php b/R3.01/tp/tp5/src/ci/models/Model_todo.php new file mode 100644 index 0000000..c8305a3 --- /dev/null +++ b/R3.01/tp/tp5/src/ci/models/Model_todo.php @@ -0,0 +1,57 @@ +load->database(); + } + public function deleteTodo($id) + { + $this->db->delete('todo',['id'=>$id]); + } + + public function getTodos($filter='all') + { + $where_filter = ["done" => 1, "active" => 0, "all" => "%"]; + return $this + ->db + ->query("SELECT * FROM todo WHERE done LIKE ?",[$where_filter[$filter]]) + ->result(); + } + + public function toggleTodo($id){ + + /* en utilisant Query Builder class + * $this + ->db + ->set('done','1-done',false) + ->where('id',$id) + ->update('todo'); + */ + + $sql = "UPDATE todo SET done = 1 - done WHERE id = ?"; + $this + ->db + ->query($sql,[$id]); + } + + public function editTodo($id,$text) + { + // TODO + } + + public function getTodo($id){ + $sql = "SELECT * FROM todo where id = ?"; + return $this + ->db + ->query($sql,[$id])->row(); + } + + public function addTodo($todo) + { + $this->db->insert('todo', $todo); + return $this + ->db + ->insert_id(); + } +} diff --git a/R3.01/tp/tp5/src/ci/views/create_user_form.php b/R3.01/tp/tp5/src/ci/views/create_user_form.php new file mode 100644 index 0000000..28ba201 --- /dev/null +++ b/R3.01/tp/tp5/src/ci/views/create_user_form.php @@ -0,0 +1,33 @@ + + + + +
+ + + + + +
+ + + +
+ + + +
+ + + + diff --git a/R3.01/tp/tp5/src/ci/views/edit.php b/R3.01/tp/tp5/src/ci/views/edit.php new file mode 100644 index 0000000..92f3f09 --- /dev/null +++ b/R3.01/tp/tp5/src/ci/views/edit.php @@ -0,0 +1,13 @@ + +
+id}");?> +
+ + + + + +
+
diff --git a/R3.01/tp/tp5/src/ci/views/layout/footer.php b/R3.01/tp/tp5/src/ci/views/layout/footer.php new file mode 100644 index 0000000..a78654e --- /dev/null +++ b/R3.01/tp/tp5/src/ci/views/layout/footer.php @@ -0,0 +1,3 @@ + + + diff --git a/R3.01/tp/tp5/src/ci/views/layout/header.php b/R3.01/tp/tp5/src/ci/views/layout/header.php new file mode 100644 index 0000000..c7b9317 --- /dev/null +++ b/R3.01/tp/tp5/src/ci/views/layout/header.php @@ -0,0 +1,15 @@ + + + + + TODO APP + + + + + + +
diff --git a/R3.01/tp/tp5/src/ci/views/todos.php b/R3.01/tp/tp5/src/ci/views/todos.php new file mode 100644 index 0000000..dd2f39d --- /dev/null +++ b/R3.01/tp/tp5/src/ci/views/todos.php @@ -0,0 +1,39 @@ +
+
+ +
+ + + + + + + done): ?> + + + + + +
text?> + id}", '')?> + id}", '')?> + id}", '')?> + + + +
text?> + id}", '')?> + id}", '')?> + id}", '')?> + +
+
diff --git a/R3.01/tp/tp5/src/sql/todo.sql b/R3.01/tp/tp5/src/sql/todo.sql new file mode 100644 index 0000000..89cc19a --- /dev/null +++ b/R3.01/tp/tp5/src/sql/todo.sql @@ -0,0 +1,65 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.1 +-- https://www.phpmyadmin.net/ +-- +-- Hôte : localhost +-- Généré le : mar. 23 mai 2023 à 07:22 +-- Version du serveur : 10.11.2-MariaDB +-- Version de PHP : 8.2.4 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + + +-- -------------------------------------------------------- + +-- +-- Structure de la table `todo` +-- + +CREATE TABLE `todo` ( + `id` int(11) NOT NULL, + `text` varchar(256) NOT NULL, + `done` tinyint(1) NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + +-- +-- Déchargement des données de la table `todo` +-- + +INSERT INTO `todo` (`id`, `text`, `done`) VALUES +(1, 'Avoid excessive caffeine !', 0), +(2, 'Be less provocative !', 1), +(3, 'Be nice to people', 1); + +-- +-- Index pour les tables déchargées +-- + +-- +-- Index pour la table `todo` +-- +ALTER TABLE `todo` + ADD PRIMARY KEY (`id`); + +-- +-- AUTO_INCREMENT pour les tables déchargées +-- + +-- +-- AUTO_INCREMENT pour la table `todo` +-- +ALTER TABLE `todo` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=58; +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;