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); } } }