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 +``` + + + +## 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 @@ + +=validation_errors(); ?> +=form_open('user/create')?> + +