public AulaTextoOrganizer(AulaDAO a, ReiDAO r, UtilizadorAulaDAO ua, string fonte, int idAula)
        {
            aulaDAO = a;
            kingDAO = r;
            uaDAO = ua;

            fonteExtra = fonte;
            estaAula = aulaDAO.Aula.Find(idAula);

            aulaTexto = new AulaTexto(estaAula.Conteudo); // Parse do ficheiro que contém a aula
            paragrafos = aulaTexto.paragrafo;
            falasTutor = aulaTexto.falasTutor;
            curiosidades = aulaTexto.curiosidades;

            paragrafoAtual = 0;
            saveParagrafoAtual = -1;
            indiceDaFalaAtual = new Dictionary<int, int>();

            int i = 0;
            foreach (String s in paragrafos.Values)
            {
                indiceDaFalaAtual.Add(i, 0);
                i++;
            }
        }
        public ExerciciosViewModel(List<Exercicio> exs, ReiDAO r, AulaDAO a)
        {
            exercicios = new List<ExercicioView>();
            aDAO = a;
            kingDAO = r;

            foreach (Exercicio e in exs)
            {
                String tipo = getNomeTipoExercicio(e);
                exercicios.Add(new ExercicioView(e.Id, e.Dificuldade, tipo, getNomeRei(e.Rei), getTituloAula(e.Aula)));
            }
        }
        public HistoricoViewModel(ExercicioDAO exDAO, AulaDAO aDAO, UtilizadorAulaDAO uaDAO, UtilizadorExercicioDAO ueDAO, ReiDAO reiDAO, int userId)
        {
            this.exDAO = exDAO;
            this.uaDAO = uaDAO;
            this.ueDAO = ueDAO;
            this.reiDAO = reiDAO;
            this.userId = userId;
            this.aulaDAO = aDAO;

            EventosOrdenadosPorData = new List<String>();

            Dictionary<DateTime, String> aux = new Dictionary<DateTime, string>();

            // Construír tabela de eventos relativos a exercícios para imprimir na página do histórico
            foreach (UtilizadorExercicio ue in ueDAO.UtilizadorExercicio)
            {
                if (ue.Utilizador == userId)
                {
                    DateTime dateaux = (DateTime)ue.Data;
                    StringBuilder descricaoEvento = new StringBuilder();

                    String nomeRei = (String)reiDAO.Rei.Find(exDAO.Exercicio.Find(ue.Exercicio).Rei).Nome; // Nome do rei a que diz respeito o exercício
                    int percentagem = (((int)ue.AlineasCorretas * 100) / (int)exDAO.Exercicio.Find(ue.Exercicio).NumeroAlineas); // Pontos no exercício

                    DateTime daux = (DateTime)ue.Data;
                    String data = (daux.Day + " de " + getNomeDoMes(daux.Month) + " de " + daux.Year + ", " + daux.Hour + ":" + daux.Minute + ":" + daux.Second);

                    descricaoEvento.Append(data).Append(" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ");
                    descricaoEvento.Append("Fizeste um exercício sobre <b>").Append(nomeRei).Append("</b> ");
                    descricaoEvento.Append(", o teu resultado foi de ").Append(percentagem).Append("%");

                    aux.Add((DateTime)ue.Data, descricaoEvento.ToString());
                }
            }

            // Construír tabela de eventos relativos a aulas para imprimir na página do histórico
            foreach (UtilizadorAula ua in uaDAO.UtilizadorAula)
            {
                if (ua.Utilizador == userId)
                {
                    DateTime dateaux = (DateTime)ua.Data;
                    StringBuilder descricaoEvento = new StringBuilder();

                    var aulavar = aulaDAO.Aula.Where(aula => aula.Id == ua.Aula).ToList();

                    // Se conseguirmos extrair a respetiva aula da base de dados
                    if (aulavar.Count() > 0)
                    {
                        Aula aulaux = aulavar.ElementAt(0);

                        String nomeRei = (String)reiDAO.Rei.Find(aulaux.Rei).Nome; // Nome do rei a que diz respeito o exercício
                        String nomeAula = aulaux.Titulo;

                        DateTime daux = (DateTime)ua.Data;
                        String data = (daux.Day + " de " + getNomeDoMes(daux.Month) + " de " + daux.Year + ", " + daux.Hour + ":" + daux.Minute + ":" + daux.Second);

                        descricaoEvento.Append(data).Append(" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ");
                        descricaoEvento.Append("Assististe à aula <b>").Append("\"").Append(nomeAula).Append("\"</b> ")
                            .Append(" sobre <b>").Append(nomeRei).Append("</b> ");

                        aux.Add((DateTime)ua.Data, descricaoEvento.ToString());
                    }
                }
            }

            if (aux.Count > 0)
            {
                var listevents = aux.Values.OrderByDescending(data => data).ToList();

                foreach (String desc in listevents)
                {
                    EventosOrdenadosPorData.Add(desc);
                }
            }
        }