public ActionResult Cadastrar()
        {
            ObjetoViewModel viewModel;

            try
            {
                MontarViewBags();
                viewModel = new ObjetoViewModel();

                var usuarioId = User.Identity.GetUserId();
                var modelUsuario = _gerenciadorDeIdentity.BuscaUsuario(usuarioId);
                viewModel.Usuario = Mapper.Map<UsuarioIdentity, UsuarioViewModel>(modelUsuario);
                viewModel.UsuarioId = modelUsuario.Id;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return View(viewModel);
        }
        public ActionResult _ListaCursos(ObjetoViewModel viewModel)
        {
            try
            {
                var todosOsCursos = _cursoApp.ObterTodosAtivos();
                foreach (var curso in todosOsCursos)
                {
                    var selectCursoViewModel = new SelectCursoViewModel(curso);

                    //verifica se o curso não está vinculado
                    if (viewModel.ListaCursos.Find(c => c.Id == selectCursoViewModel.Id) == null)
                    {
                        viewModel.ListaCursos.Add(selectCursoViewModel);
                    }
                }

                if (viewModel.Id > 0)
                {
                    var model = _objetoApp.ObterPorId(viewModel.Id);
                    var objeto = Mapper.Map<Objeto, ObjetoViewModel>(model);

                    if (objeto.ListaCursos.Any())
                    {
                        foreach (var curso in objeto.ListaCursos)
                        {
                            var cursoAux = _cursoApp.ObterPorId(curso.Id);

                            var disciplinaCursoVinculado =
                                viewModel.ListaCursos.Find(c => c.Nome == cursoAux.Nome);

                            if (disciplinaCursoVinculado != null)
                                disciplinaCursoVinculado.Selected = true;
                        }
                    }
                }

                return View(viewModel);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private ObjetoViewModel EditarCamposDoObjeto(ObjetoViewModel viewModel)
        {
            //Tipo
            if (viewModel.ObjetoTipoId > 0)
            {
                var model = _objetoTipoApp.ObterPorId(viewModel.ObjetoTipoId);
                var viewModelAux = Mapper.Map<ObjetoTipo, ObjetoTipoViewModel>(model);

                viewModel.ObjetoTipo = viewModelAux;
            }

            //Categoria
            if (viewModel.ObjetoCategoriaId > 0)
            {
                var model = _objetocategoriaApp.ObterPorId(viewModel.ObjetoCategoriaId);
                var viewModelAux = Mapper.Map<ObjetoCategoria, ObjetoCategoriaViewModel>(model);

                viewModel.ObjetoCategoria = viewModelAux;
            }

            //Tags
            if (viewModel.Tags != null)
            {
                char[] delimitador = {','};
                foreach (var tag in viewModel.Tags.Split(delimitador))
                {
                    var modelTag = _tagApp.ObterOuIncluir(tag);
                    //var viewModelTag = Mapper.Map<ObjetoTag, ObjetoTagViewModel>(modelTag);
                    viewModel.ListaTags.Add(modelTag);
                }
            }

            //Cursos
            for (var i = 0; i <= viewModel.ListaCursos.Count - 1; i++)
            {
                if (!viewModel.ListaCursos[i].Selected)
                {
                    viewModel.ListaCursos.Remove(viewModel.ListaCursos[i]);
                    i--; //importante, pois quando remova o Count altera
                }
            }

            //Áreas de Conhecimento
            for (var i = 0; i <= viewModel.ListaAreasDeConhecimento.Count - 1; i++)
            {
                var teste = viewModel.ListaAreasDeConhecimento[i];

                if (!viewModel.ListaAreasDeConhecimento[i].Selected)
                {
                    viewModel.ListaAreasDeConhecimento.Remove(viewModel.ListaAreasDeConhecimento[i]);
                    i--; //importante, pois quando remova o Count altera
                }
            }

            //Disciplinas
            for (var i = 0; i <= viewModel.ListaDisciplinas.Count - 1; i++)
            {
                if (!viewModel.ListaDisciplinas[i].Selected)
                {
                    viewModel.ListaDisciplinas.Remove(viewModel.ListaDisciplinas[i]);
                    i--; //importante, pois quando remova o Count altera
                }
            }

            return viewModel;
        }
        public ActionResult _ListaAreasDeConhecimento(ObjetoViewModel viewModel)
        {
            try
            {
                var todasAsAreas = _areaApp.ObterTodosAtivos();
                foreach (var area in todasAsAreas)
                {
                    var selectAreaViewModel = new SelectAreaDeConhecimentoViewModel(area);

                    //verifica se a área não está vinculada
                    if (viewModel.ListaAreasDeConhecimento.Find(a => a.Id == selectAreaViewModel.Id) == null)
                    {
                        viewModel.ListaAreasDeConhecimento.Add(selectAreaViewModel);
                    }
                }

                if (viewModel.Id > 0)
                {
                    var model = _objetoApp.ObterPorId(viewModel.Id);
                    var objeto = Mapper.Map<Objeto, ObjetoViewModel>(model);

                    if (objeto.ListaAreasDeConhecimento.Any())
                    {
                        foreach (var area in objeto.ListaAreasDeConhecimento)
                        {
                            var areaAux = _areaApp.ObterPorId(area.Id);

                            var objetoAreaVinculado =
                                viewModel.ListaAreasDeConhecimento.Find(a => a.Nome == areaAux.Nome);

                            if (objetoAreaVinculado != null)
                                objetoAreaVinculado.Selected = true;
                        }
                    }
                }

                return View(viewModel);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public ActionResult _FormRecursos(ObjetoViewModel objetoViewModel)
        {
            var objetoAuxViewModel = new ObjetoAuxViewModel
            {
                Tipo = objetoViewModel.RecursoTipo,
                Link = objetoViewModel.RecursoLink,
                ObjetoId = objetoViewModel.Id
            };

            return View(objetoAuxViewModel);
        }
        public ActionResult _FormCapa(ObjetoViewModel viewModel)
        {
            var objetoImagemCapa = new ObjetoImagemCapaViewModel
            {
                ObjetoViewModel = viewModel,
                ObjetoViewModelId = viewModel.Id.ToString()
            };

            return View(objetoImagemCapa);
        }
        public ActionResult Editar(ObjetoViewModel viewModel)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (_objetoApp.ObterPorId(viewModel.Id) != null)
                    {
                        viewModel = EditarCamposDoObjeto(viewModel);

                        var model = Mapper.Map<ObjetoViewModel, Objeto>(viewModel);

                        _objetoApp.Editar(model);

                        //Cria pasta do objeto (caso necessário)
                        CriarPastaDoObjetoCasoNaoExista(model.Id.ToString());

                        Information("Atualização efetuada com sucesso");
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return RedirectToAction("Editar", "Objeto", new {@id = viewModel.Id});
        }
        public ActionResult Cadastrar(ObjetoViewModel viewModel)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    UsuarioIdentity usuarioLogado =
                        _autenticacao.ObterUsuarioLogado(User.Identity.GetUserId());

                    //Inclui a disciplina
                    var modelCad = Mapper.Map<ObjetoViewModel, Objeto>(viewModel);
                    modelCad.Usuario = usuarioLogado;
                    modelCad.ListaTags.Clear();
                    modelCad.ListaCursos.Clear();
                    modelCad.ListaDisciplinas.Clear();
                    modelCad.ListaAreasDeConhecimento.Clear();

                    _objetoApp.Incluir(modelCad);

                    //Cria pasta do objeto
                    CriarPastaDoObjetoCasoNaoExista(modelCad.Id.ToString());

                    //Atribui valores ao ViewModel
                    viewModel.Id = modelCad.Id;
                    viewModel.DtInsert = modelCad.DtInsert;

                    viewModel = EditarCamposDoObjeto(viewModel);

                    var modelEdit = Mapper.Map<ObjetoViewModel, Objeto>(viewModel);

                    _objetoApp.Editar(modelEdit);

                    Success("Cadastro efetuado com sucesso.");

                    return RedirectToAction("Editar", "Objeto", new {@id = modelEdit.Id});
                }

                return RedirectToAction("Cadastrar", "Objeto");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }