
#   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éer sa propre classe controller
Il est possible de redefinir, ou d'étendre les classes systèmes dans votre répertoire `application/core`. Par exemple, pour étendre la classe 
controller de codeigniter, vous pouvez écrire votre propre classe `MY_Controller.php` 
```php
class  MY_Controller extends CI_Controller {
}
```

Utilisez ce moyen pour définir une nouvelle méthode render, qui permet d'utiliser un layout quelconque pour afficher une vue.
## 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
	/**
	 * We just want to hash our password using the current DEFAULT algorithm.
	 * This is presently BCRYPT, and will produce a 60 character result.
	 *
	 * Beware that DEFAULT may change over time, so you would want to prepare
	 * By allowing your storage to expand past 60 characters (255 would be good)
	 */
	echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT);
   ?>
   ```
   ```php
	<?php
	// Voir l'exemple fourni sur la page de la fonction password_hash()
	// pour savoir d'où cela provient.
	$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

	if (password_verify('rasmuslerdorf', $hash)) {
		echo 'Le mot de passe est valide !';
	} else {
		echo 'Le mot de passe est invalide.';
	}
	?>
	```

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.
