protected void Button_Creer_UV_Click(object sender, EventArgs e)
        {
            List <Panel> panes = new List <Panel>();

            //On va parcourir chaque panel de question
            foreach (Control ctrl in panel_Questions_Container.Controls)
            {
                if (ctrl.ID != null)
                {
                    if (ctrl.ID.Contains("Panel_Question_")) // on a à faire a un panel contenant questions + Réponses
                    {
                        Panel pane = (Panel)ctrl;
                        if (!panes.Contains(pane))
                        {
                            panes.Add(pane);
                        }
                    }
                }
            }


            // on a récupéré les panels des questions/réponses
            // on va les parcourir, pour créer en même temps question ET réponse
            int  id     = -1;
            bool hasOne = false;

            UVDb uvs        = new UVDb();
            int  selectedUv = uvs.UVs.First(u =>
                                            u.Denomination == this.RadioButtonList_ChoixUV.SelectedItem.Value).IdUv;

            Quizz q = new Quizz(QuizzName.Text.Trim(), selectedUv);

            List <Question> questions = new List <Question>();

            foreach (Panel p in panes)
            {
                string questionID = p.ID.Substring(15);
                int.TryParse(questionID, out id); // On a récupéré l'id de la question

                //la textbox de la question
                TextBox tbQuestion = p.FindControl("TextBox_Question" + id) as TextBox;


                // On va créer des questions et des réponses
                Question question = new Question(q, tbQuestion.Text, AnswereType.QCM);

                // les textbox / checkbox des réponses :
                // C est ce panel qui contient les questions
                Panel pReps = p.FindControl("Reponses_Question_" + id) as Panel;

                List <TextBox>  answers  = new List <TextBox>();
                List <CheckBox> isAnswer = new List <CheckBox>();
                // On va le parcourir, et trouver les textbox réponses contenues qui ne sont pas "hidden"
                // Ainsi que les checkBox "bonne rép"
                foreach (Control ctrl in pReps.Controls)
                {
                    if (ctrl.ID != null)
                    {
                        // On récupère par l'ID
                        //  tRep.ID = "TextBox_Question_Reponse_" + questionId + "_" + answerId;
                        if (ctrl.ID.Contains("TextBox_Question_Reponse_" + id))
                        {
                            // C est une des réponses
                            TextBox tRep = (TextBox)ctrl;
                            if (tRep.Visible)
                            {
                                if (!answers.Contains(tRep))
                                {
                                    answers.Add(tRep);
                                }
                            }
                        }
                        else if (ctrl.ID.Contains("chb_isGood_" + id))
                        {
                            // C est une checkbox
                            CheckBox cbRep = (CheckBox)ctrl;
                            if (cbRep.Visible)
                            {
                                if (!isAnswer.Contains(cbRep))
                                {
                                    isAnswer.Add(cbRep);
                                }
                            }
                        }
                    }
                }

                // On a maintenant toutes les réponses pour la question en cours
                // il faut vérifier qu'on a au moins une "bonne réponse" pour la dite question en cours
                hasOne = false;
                foreach (CheckBox cb in isAnswer)
                {
                    if (cb.Checked)
                    {
                        hasOne = true;
                        break;
                    }
                }

                // On a au moins une bonne rép
                if (hasOne)
                {
                    foreach (TextBox rep in answers)
                    {
                        // on récupére l'id de la réponse
                        // tRep.ID = "TextBox_Question_Reponse_" + questionId + "_" + answerId;
                        int    offset    = 25 + id.ToString().Length + 1;
                        int    reponseId = -1;
                        string answerId  = rep.ID.Substring(offset);
                        int.TryParse(answerId, out reponseId);

                        // Ensuite on regarde si c est une bonne réponse ou non
                        bool isGoodAnswer = isAnswer.First(cb =>
                                                           cb.ID.Equals("chb_isGood_" + id + "_" + answerId)).Checked;
                        // Ce code est censé faire :
                        // Parmi les checkbox je récupère le premier dont l'id vaut : cb.ID.Equals("chb_isGood_" + id + "_" + answerId
                        // Et j'attribue sa valeur "Checked" à "isGoodAnswer"

                        // On peut maintenant créer la réponse
                        Answer answere = new Answer(rep.Text, isGoodAnswer);
                        question.OtherAnsweres.Add(answere);
                    }
                }
                else
                {
                    Label_manqueRep.Visible = true;
                    break;
                }

                questions.Add(question);
            } // end for each

            if (hasOne)
            {
                Label_manqueRep.Visible = false;
                q.Questions             = questions;
                QuizzDb qdb = new QuizzDb();
                qdb.Quizzes.Add(q);

                try
                {
                    Console.WriteLine("-------------------- HEEEEEREEEEEEEEEE ------------------------");
                    qdb.Database.Log = Console.WriteLine;
                    qdb.SaveChanges();
                    successDiv.Visible = true;
                    clearUi();
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateException ex)
                {
                    Response.Write(ex.ToString());
                }
            }
        }
        protected void UploadButton_Click(object sender, EventArgs e)
        {
            if (FileUploadControl.HasFile)
            {
                UVDb uvs        = new UVDb();
                int  selectedUv = uvs.GetByDenomination(RadioButtonList_ChoixUV.SelectedItem.Value).IdUv;
                System.Diagnostics.Debug.WriteLine(RadioButtonList_ChoixUV.SelectedItem.Value);

                var    manager       = Context.GetOwinContext().GetUserManager <ApplicationUserManager>();
                var    signInManager = Context.GetOwinContext().Get <ApplicationSignInManager>();
                string prenom        = "";
                string nom           = "";
                //string email;
                //string pwd;
                System.IO.StreamReader file;
                try
                {
                    string filename = Path.GetFileName(FileUploadControl.FileName);
                    FileUploadControl.SaveAs(Server.MapPath("~/") + filename);
                    StatusLabel.Text = "Upload status: File uploaded!";
                    string line;
                    file =
                        new System.IO.StreamReader(Server.MapPath("~/") + filename);
                    IdentityDb id = new IdentityDb();
                    //Regex rxc = new Regex(@"^([^.]+)(?=[.])");
                    //Match mc = rxc.Match(filename);
                    //UVDb u = new UVDb();
                    //UV uv = u.GetByDenomination(mc.Value);
                    while ((line = file.ReadLine()) != null)
                    {
                        //continue;
                        Regex           regex = new Regex(@"(?<=;)(\w*)(?=;)");
                        MatchCollection match = regex.Matches(line);
                        if (match.Count != 2)
                        {
                            continue;
                        }
                        int i = 0;
                        foreach (Match m in match)
                        {
                            if (i == 0)
                            {
                                prenom = m.Value;
                            }
                            if (i == 1)
                            {
                                nom = m.Value;
                            }
                            i++;
                        }
                        Regex rx      = new Regex(@"(?:.(?<!;))+$");
                        Match mpwd    = rx.Match(line);
                        Regex rxemail = new Regex(@"^([^;]+)(?=;)");
                        Match memail  = rxemail.Match(line);



                        var user = new ApplicationUser(nom, prenom)
                        {
                            UserName = prenom + " " + nom, Email = memail.Value
                        };
                        user.Role = "Etud";
                        if (id.Users.FirstOrDefault(usr => usr.UserName == user.UserName) == null)
                        {
                            IdentityResult result = manager.Create(user, mpwd.Value);

                            if (result.Succeeded)
                            {
                                id.AddSharedUV(user.Id, selectedUv);
                            }
                            else
                            {
                                ErrorMessage.Text = result.Errors.FirstOrDefault();
                            }
                        }
                        else
                        {
                            ApplicationUser us = id.GetByEmailEager(user.Email);
                            if (!us.HasAccessToUV(selectedUv))
                            {
                                id.AddSharedUV(us.Id, selectedUv);
                            }
                        }
                    }
                    file.Close();
                }
                catch (Exception ex)
                {
                    StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
                }
            }
        }