コード例 #1
0
ファイル: GalleryPageController.cs プロジェクト: Ajuz/magical
        public ActionResult EditGallery(
            int pageId,
            EditGalleryViewModel galleryViewModel)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    // TODO ждет рефакторинга: вместо вызова AddGalleryItems, UpdateGalleryItems, RemoveGalleryItems
                    // вызывать  один метод сервиса, например GalleryWebPageManagementService.SetGalleryItems,
                    // который будет или сохранять все изменения по элементам галереи, или, в случае ошибки, ничего не изменять
                    var noErrors = true;

                    lock (updateLocker)
                    {
                        // добавление новых элементов в галерею
                        var galleryItemsForAdding =
                            galleryViewModel.GalleryItems
                                .Where(gi => gi.Id == 0 && gi.Choosen)
                                .ToList();

                        noErrors = AddGalleryItems(
                            pageId,
                            galleryItemsForAdding) && noErrors;

                        // изменение существующих элементов галереи
                        var galleryItemsForUpdating =
                            galleryViewModel.GalleryItems
                                .Where(gi => gi.Id != 0 && gi.Choosen)
                                .ToList();

                        noErrors = UpdateGalleryItems(
                            pageId,
                            galleryItemsForUpdating) && noErrors;

                        // удаление элементов галереи
                        var galleryItemsForRemoving =
                            galleryViewModel.GalleryItems
                                .Where(gi => gi.Id != 0 && !gi.Choosen)
                                .ToList();

                        noErrors = RemoveGalleryItems(
                            pageId,
                            galleryItemsForRemoving) && noErrors;
                    }

                    if (noErrors)
                    {
                        return RedirectToAction("Index", "Page");
                    }
                    else
                    {
                        ModelState.AddModelError(string.Empty, _someChangesMayBeLostError);
                    }
                }
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, _generalError);
                _logger.Error(
                    ex,
                    "Не удалось обновить состав элементов галереи" +
                        " страницы pageId='{0}', viewModel='{1}'",
                    pageId,
                    galleryViewModel);
            }

            galleryViewModel.ImageFiles = GetImageList();
            return View(galleryViewModel);
        }
コード例 #2
0
ファイル: GalleryPageController.cs プロジェクト: Ajuz/magical
        /// <summary>
        /// Изменить элементы галереи (добавить, убрать, редактировать) - подготовка
        /// </summary>
        /// <param name="pageId">Идентификатор страницы-галереи</param>
        /// <returns>Представление для редактирования элементов галереи</returns>
        public ActionResult EditGallery(int pageId)
        {
            var galleryPageDto =
                _displayingService.GetWebPageById(pageId) as GalleryWebPageDisplayingDto;

            if (galleryPageDto != null)
            {
                var imageDtoList = _fileDisplayingService
                    .GetFileList(UploadedFileTypes.Image);

                var galleryItemDtoList = galleryPageDto.GalleryItems
                    .Where(gi => gi.ImageFile != null)
                    .ToList();

                // склеиваем перечень картинок и перечень элементов галереи
                // в одну модель представления через left join
                var galleryItemViewModelList =
                    from im in imageDtoList
                    join gi in galleryItemDtoList on im.Id equals gi.ImageFile.Id into gij
                    from g in gij.DefaultIfEmpty()
                    orderby (g != null ? g.SortOrder : int.MaxValue)
                    select
                        new EditGalleryItemViewModel()
                        {
                            ImageFileId = im.Id,
                            Id = (g != null ? g.Id : 0),
                            Choosen = (g != null),
                            SortOrder = (g != null ? g.SortOrder : 0),
                            TimeStamp = (g != null ? g.TimeStamp : null)
                        };

                var editGalleryViewModel =
                    new EditGalleryViewModel()
                    {
                        Title = galleryPageDto.Title,
                        GalleryItems = galleryItemViewModelList,
                        ImageFiles = GetImageList()
                    };

                return View(editGalleryViewModel);
            }

            return HttpNotFound();
        }