示例#1
0
        /// <summary>
        /// View content includes
        /// </summary>
        /// <param name="contentId">Content to display</param>
        /// <param name="detailId">Boilerplate id</param>
        /// <returns></returns>
        public ActionResult Includes(int? contentId, int? detailId)
        {
            var content = _entities.Contents.Include("Boilerplates").Include("BoilerplatesUsed").FirstOrDefault(c => c.Id == contentId);

            if (content == null)
            {
                return RedirectToRoute("ContentIndex");
            }

            if (detailId != null)
            {
                // Delete the requested id
                var boilerplate =
                    _entities.ContentBoilerplates.Include("Content")
                        .Include("Boilerplate")
                        .FirstOrDefault(c => c.Id == detailId);

                if (boilerplate == null || boilerplate.ContentId != content.Id)
                {
                    return RedirectToRoute("ContentDetail", new { contentId = content.Id, action = "includes" });
                }

                _entities.ContentBoilerplates.Remove(boilerplate);
                content.Parse();
                _entities.SaveChanges();

                return RedirectToRoute("ContentDetail", new { contentId = content.Id, action = "includes" });
            }

            var model = new ContentIncludesViewModel
            {
                Content = content,
                ContentId = content.Id,
                AvailableBoilerplates = _entities.Contents
                    .Where(c => c.Id != content.Id)
                    .Where(c => c.Type == ContentType.Boilerplate)
                    .Where(c => _entities.ContentBoilerplates.All(b => b.BoilerplateId != c.Id || b.ContentId != content.Id))
                    .AsEnumerable()
                    .Select(c => new SelectListItem
                        {
                            Text = string.Format("{0}: {1}", c.Id, c.Title),
                            Value = c.Id.ToString()
                        })
            };
            return View("~/Areas/mitarbeit/Views/Content/Includes.cshtml", model);
        }
示例#2
0
        public ActionResult Includes(ContentIncludesViewModel model)
        {
            // grab the content object and load the boilerplate navigation properties
            var content = _entities.Contents
                .Include(c => c.Boilerplates.Select(b => b.Boilerplate))
                .Include(c => c.BoilerplatesUsed.Select(b => b.Boilerplate))
                .FirstOrDefault(c => c.Id == model.ContentId);

            if (content == null)
            {
                return RedirectToRoute("ContentIndex");
            }

            if (ModelState.IsValid)
            {
                var boilerplateDuplicates = _entities.ContentBoilerplates
                    .Where(c => c.Content.Id == model.ContentId)
                    .Where(c => c.BoilerplateId == model.BoilerplateId);

                var boilerplateContent = _entities.Contents
                    .Where(c => c.Id == model.BoilerplateId)
                    .Where(c => c.Type == ContentType.Boilerplate);

                if (!boilerplateContent.Any())
                {
                    ViewBag.Error = "Der Textbaustein existiert nicht.";
                    model.Saved = false;
                }
                else if (boilerplateDuplicates.Any())
                {
                    ViewBag.Error = "Du kannst den Textbaustein nicht mehrfach einbinden.";
                    model.Saved = false;
                }
                else
                {
                    var boilerplate = new ContentBoilerplate
                    {
                        ContentId = content.Id,
                        BoilerplateId = model.BoilerplateId,
                        ContentBoilerplateName = model.BoilerplateName
                    };
                    _entities.ContentBoilerplates.Add(boilerplate);

                    // We have to manually load these navigation properties for whatever reason
                    foreach (var bp in content.Boilerplates)
                    {
                        _entities.Entry(bp).Reference(b => b.Boilerplate).Load();
                    }
                    foreach (var bp in content.BoilerplatesUsed)
                    {
                        _entities.Entry(bp).Reference(b => b.Boilerplate).Load();
                        _entities.Entry(bp).Reference(b => b.Content).Load();
                    }

                    // re-parse the content
                    content.Parse();

                    _entities.SaveChanges();

                    model.Saved = true;
                }
            }

            // Update content object
            content = _entities.Contents
                            .Include(c => c.Boilerplates.Select(b => b.Boilerplate))
                            .Include(c => c.BoilerplatesUsed.Select(b => b.Boilerplate))
                            .FirstOrDefault(c => c.Id == model.ContentId);

            model.Content = content;
            model.AvailableBoilerplates = _entities.Contents
                .Where(c => c.Id != content.Id)
                .Where(c => c.Type == ContentType.Boilerplate)
                .Where(c => _entities.ContentBoilerplates.All(b => b.BoilerplateId != c.Id || b.ContentId != content.Id))
                .AsEnumerable()
                .Select(c => new SelectListItem
                {
                    Text = string.Format("{0}: {1}", c.Id, c.Title),
                    Value = c.Id.ToString()
                });

            return View("~/Areas/mitarbeit/Views/Content/Includes.cshtml", model);
        }