public function ajouter_recette()
 {
     if (!is_connected()) {
         $this->load->model('CategorieManager');
         $categorieManager = new CategorieManager();
         $categories = $categorieManager->get_categories();
         $data = array();
         $data['categories'] = $categories;
         $data['active'] = "ajouter_recette";
         $data['menu_categories'] = $this->menu_categories;
         $this->layout->view('information_ajouter_recette', $data);
     } else {
         $this->load->helper('form');
         $this->load->library('form_validation');
         // On fixe les règles concernant l'ajout d'une recette :
         $this->form_validation->set_rules('titre', '"Titre de la recette"', 'trim|required|encode_php_tags');
         $this->form_validation->set_rules('categorie', '"Nom de la catégorie"', 'trim|required|encode_php_tags');
         $this->form_validation->set_rules('sous_categorie', '"Nom de la sous_catégorie"', 'trim|encode_php_tags');
         $compteur_ingredients = (int) $this->input->post('nb_ingredients');
         for ($i = 1; $i <= $compteur_ingredients; $i++) {
             $this->form_validation->set_rules('ingredient_' . $i, '"Nom de l\'ingrédient"', 'trim|required|encode_php_tags');
             $this->form_validation->set_rules('quantite_' . $i, '"Quantité de l\'ingrédient"', 'trim|required|encode_php_tags');
         }
         $this->form_validation->set_rules('preparation', '"Préparation de la recette"', 'trim|required|encode_php_tags');
         $this->form_validation->set_rules('nb_personnes', '"Nombre de personnes"', 'trim|required|encode_php_tags');
         $this->form_validation->set_rules('duree', '"Durée de la recette"', 'trim|required|encode_php_tags');
         $this->form_validation->set_rules('prix', '"Catégorie de prix"', 'trim|required|encode_php_tags');
         $this->form_validation->set_rules('difficulte', '"Catégorie de difficulté"', 'trim|required|encode_php_tags');
         // On contrôle l'upload de la photo :
         $config['upload_path'] = './assets/images/recettes/';
         $config['allowed_types'] = 'gif|jpg|png';
         $config['max_size'] = '2048';
         $config['max_width'] = '2000';
         $config['max_height'] = '2000';
         $this->load->library('upload', $config);
         if ($this->form_validation->run()) {
             // Le formulaire est valide
             // On teste si une photo a été envoyée
             if ($_FILES['photo']['name'] == null) {
                 // Ici le formulaire est valide mais aucune photo n'a été envoyée
                 $this->load->library('Recette');
                 $this->load->library('Utilisateur');
                 $this->load->library('Categorie');
                 $this->load->model('CategorieManager');
                 $this->load->model('RecetteManager');
                 $this->load->model('UtilisateurManager');
                 $this->load->model('IngredientManager');
                 $this->load->model('IngredientRecetteManager');
                 // On récupère l'id de l'utilisateur :
                 $utilisateurManager = new UtilisateurManager();
                 $id_utilisateur = $utilisateurManager->get_id($_SESSION['login'])->id_utilisateur;
                 // On récupère l'id de la catégorie :
                 $id_sous_categorie = null;
                 $categorieManager = new CategorieManager();
                 $id_categorie = $categorieManager->get_id($this->input->post('categorie'))->id_categorie;
                 // On récupère l'id de la sous_catégorie (s'il n'est pas null):
                 if ($this->input->post('sous_categorie') != null) {
                     $id_sous_categorie = $categorieManager->get_id($this->input->post('sous_categorie'))->id_categorie;
                 }
                 // On instancie un objet recette
                 $recette = new Recette();
                 $recette->setId_utilisateur($id_utilisateur);
                 $recette->setId_categorie($id_categorie);
                 $recette->setId_sous_categorie($id_sous_categorie);
                 $recette->setTitre($this->input->post('titre'));
                 $recette->setNombre_personnes($this->input->post('nb_personnes'));
                 $recette->setCategorie_prix($this->input->post('prix'));
                 $recette->setCategorie_difficulte($this->input->post('difficulte'));
                 $recette->setDuree($this->input->post('duree'));
                 $recette->setDescription($this->input->post('preparation'));
                 $recette->setPhoto('defaut.jpg');
                 $slug = url_title($recette->titre());
                 $recette->setSlug($slug);
                 // On ajoute la recette en bdd et on récupère son id :
                 $recetteManager = new RecetteManager();
                 $id_recette = $recetteManager->ajouter_recette($recette);
                 // Ici on s'occuppe des ingrédients !
                 $nb_ingredients = (int) $this->input->post('nb_ingredients');
                 $ingredientManager = new IngredientManager();
                 $ingredientRecetteManager = new IngredientRecetteManager();
                 for ($i = 1; $i <= $nb_ingredients; $i++) {
                     $nom_ingredient = $this->input->post('ingredient_' . $i);
                     $id_ingredient = $ingredientManager->get_id($nom_ingredient);
                     if ($id_ingredient == null) {
                         // On ajoute ici le nouvel ingrédient en bdd :
                         $id_ingredient = $ingredientManager->ajouter_ingredient($nom_ingredient);
                         $quantite = $this->input->post('quantite_' . $i);
                         $ingredientRecetteManager->ajouter($id_ingredient, $id_recette, $quantite);
                     } else {
                         $quantite = $this->input->post('quantite_' . $i);
                         $ingredientRecetteManager->ajouter($id_ingredient, $id_recette, $quantite);
                     }
                 }
                 redirect('recettes/detail/' . $id_recette);
             } else {
                 // Ici, le formulaire est valide et une photo a été envoyée, on vérifie donc qu'elle correspond aux bons critères
                 if (!$this->upload->do_upload('photo') == true) {
                     // Le formulaire est vide ou invalide
                     $this->load->model('CategorieManager');
                     //On récupère les noms des différentes catégories afin d'implémenter la liste déroulante du formulaire dynamiquement
                     $categorieManager = new CategorieManager();
                     $result = $categorieManager->get_categories();
                     $categories = array();
                     foreach ($result as $row) {
                         $categories[] = $row->nom_categorie;
                     }
                     $data = array();
                     $data['categories'] = $categories;
                     $data['menu_categories'] = $this->menu_categories;
                     $this->layout->view('formulaire_recette', $data);
                 } else {
                     // Ici l'upload est valide, on envoie les données en bdd !
                     $data_photo = array('upload_data' => $this->upload->data());
                     $this->load->library('Recette');
                     $this->load->library('Utilisateur');
                     $this->load->library('Categorie');
                     $this->load->model('CategorieManager');
                     $this->load->model('RecetteManager');
                     $this->load->model('UtilisateurManager');
                     $this->load->model('IngredientManager');
                     $this->load->model('IngredientRecetteManager');
                     // On récupère l'id de l'utilisateur :
                     $utilisateurManager = new UtilisateurManager();
                     $id_utilisateur = $utilisateurManager->get_id($_SESSION['login'])->id_utilisateur;
                     // On récupère l'id de la catégorie :
                     $id_sous_categorie = null;
                     $categorieManager = new CategorieManager();
                     $id_categorie = $categorieManager->get_id($this->input->post('categorie'))->id_categorie;
                     // On récupère l'id de la sous_catégorie (s'il n'est pas null):
                     if ($this->input->post('sous_categorie') != null) {
                         $id_sous_categorie = $categorieManager->get_id($this->input->post('sous_categorie'))->id_categorie;
                     }
                     // On instancie un objet recette
                     $recette = new Recette();
                     $recette->setId_utilisateur($id_utilisateur);
                     $recette->setId_categorie($id_categorie);
                     $recette->setId_sous_categorie($id_sous_categorie);
                     $recette->setTitre($this->input->post('titre'));
                     $recette->setNombre_personnes($this->input->post('nb_personnes'));
                     $recette->setCategorie_prix($this->input->post('prix'));
                     $recette->setCategorie_difficulte($this->input->post('difficulte'));
                     $recette->setDuree($this->input->post('duree'));
                     $recette->setDescription($this->input->post('preparation'));
                     $recette->setPhoto($data_photo['upload_data']['file_name']);
                     //On crée une miniature de l'image :
                     $config['image_library'] = 'gd2';
                     $config['source_image'] = $data_photo['upload_data']['full_path'];
                     $config['new_image'] = "miniature_" . $data_photo['upload_data']['file_name'];
                     //$config['create_thumb'] = TRUE;
                     $config['maintain_ratio'] = false;
                     $config['width'] = 500;
                     $config['height'] = 375;
                     $this->load->library('image_lib', $config);
                     $this->image_lib->resize();
                     $slug = url_title($recette->titre());
                     $recette->setSlug($slug);
                     // On ajoute la recette en bdd et on récupère son id :
                     $recetteManager = new RecetteManager();
                     $id_recette = $recetteManager->ajouter_recette($recette);
                     // Ici on s'occuppe des ingrédients !
                     $nb_ingredients = (int) $this->input->post('nb_ingredients');
                     $ingredientManager = new IngredientManager();
                     $ingredientRecetteManager = new IngredientRecetteManager();
                     for ($i = 1; $i <= $nb_ingredients; $i++) {
                         $nom_ingredient = $this->input->post('ingredient_' . $i);
                         $id_ingredient = $ingredientManager->get_id($nom_ingredient);
                         if ($id_ingredient == null) {
                             // On ajoute ici le nouvel ingrédient en bdd :
                             $id_ingredient = $ingredientManager->ajouter_ingredient($nom_ingredient);
                             $quantite = $this->input->post('quantite_' . $i);
                             $ingredientRecetteManager->ajouter($id_ingredient, $id_recette, $quantite);
                         } else {
                             $quantite = $this->input->post('quantite_' . $i);
                             $ingredientRecetteManager->ajouter($id_ingredient, $id_recette, $quantite);
                         }
                     }
                     redirect('recettes/detail/' . $id_recette);
                 }
             }
             // Si l'upload n'est pas valide, on réaffiche le formulaire
         } else {
             // Le formulaire est vide ou invalide
             $this->load->model('CategorieManager');
             //On récupère les noms des différentes catégories afin d'implémenter la liste déroulante du formulaire dynamiquement
             $categorieManager = new CategorieManager();
             $result = $categorieManager->get_categories();
             $categories = array();
             foreach ($result as $row) {
                 $categories[] = $row->nom_categorie;
             }
             $data = array();
             $data['categories'] = $categories;
             $data['active'] = "ajouter_recette";
             $data['menu_categories'] = $this->menu_categories;
             $this->layout->view('formulaire_recette', $data);
         }
     }
 }