Пример #1
0
        public async Task <IActionResult> Edit(PageViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (model.Id == Guid.Empty && model.SettingsId != Guid.Empty)
                {
                    model.PageTypes = _pagesContext.PageTypes.ToList();
                    model.Layouts   = _pagesContext.Pages.Include(x => x.Settings).Where(x => x.IsLayout);
                    ModelState.AddModelError(string.Empty, "Invalid page");
                    return(View(model));
                }

                if (!model.Path.StartsWith("/"))
                {
                    ModelState.AddModelError(string.Empty, "Invalid format for path of page.Example: /PageName ");
                    model.Layouts   = _pagesContext.Pages.Include(x => x.Settings).Where(x => x.IsLayout);
                    model.PageTypes = _pagesContext.PageTypes.ToList();
                    return(View(model));
                }

                var settings = _pagesContext.PageSettings.FirstOrDefault(x => x.Id.Equals(model.SettingsId));
                var page     = _pagesContext.Pages.FirstOrDefault(x => x.Id.Equals(model.Id));
                if (page == null)
                {
                    model.PageTypes = _pagesContext.PageTypes.ToList();
                    model.Layouts   = _pagesContext.Pages.Include(x => x.Settings).Where(x => x.IsLayout);
                    ModelState.AddModelError(string.Empty, "Invalid page");
                    return(View(model));
                }

                page.Changed  = DateTime.Now;
                page.Path     = model.Path;
                page.LayoutId = model.LayoutId;

                if (settings == null)
                {
                    model.PageTypes = _pagesContext.PageTypes.ToList();
                    model.Layouts   = _pagesContext.Pages.Include(x => x.Settings).Where(x => x.IsLayout);
                    ModelState.AddModelError(string.Empty, "Fail to get page settings");
                    return(View(model));
                }
                settings.Description       = model.Description;
                settings.Name              = model.Name;
                settings.Changed           = DateTime.Now;
                settings.Title             = model.Title;
                settings.TitleTranslateKey = model.TitleTranslateKey;

                var dbResult = await _pagesContext.PushAsync();

                if (dbResult.IsSuccess)
                {
                    _pagesContext.PageSettings.Update(settings);
                    _pagesContext.Pages.Update(page);
                    await _pagesContext.SaveChangesAsync();

                    RemovePageFromCache(page.Id);
                    DynamicUiEvents.Pages.PageUpdated(new PageCreatedEventArgs
                    {
                        PageId   = page.Id,
                        PageName = page.Settings?.Name
                    });

                    return(RedirectToAction(page.IsLayout ? "Layouts" : "Index"));
                }
                model.PageTypes = _pagesContext.PageTypes.ToList();
                model.Layouts   = _pagesContext.Pages.Include(x => x.Settings).Where(x => x.IsLayout);
                ModelState.AppendResultModelErrors(dbResult.Errors);
                return(View(model));
            }

            ModelState.AddModelError(string.Empty, "Invalid data input");

            model.PageTypes = _pagesContext.PageTypes.ToList();
            return(View(model));
        }