Example #1
0
        public HttpResponseMessage RenameGallery(EditGalleryViewModel model)
        {
            HttpResponseMessage response;
            var gallery = _galleryService.Find(model.Id);

            if (gallery == null)
            {
                response = Request.CreateResponse(HttpStatusCode.NotFound, "the gallery not found");
                return(response);
            }
            gallery.Name = model.GalleryName;
            _unitOfWork.SaveChanges();
            response = Request.CreateResponse(HttpStatusCode.OK, "Selected gallery renamed with successfully");
            return(response);
        }
        public async Task <IActionResult> EditGallery(Guid galleryId)
        {
            // Находим галерею по Id
            Gallery gallery = await cmsDB.Galleries.FirstAsync(g => g.Id == galleryId);

            // Создаем модель для передачи в представление
            EditGalleryViewModel model = new EditGalleryViewModel()
            {
                GalleryId           = galleryId,
                GalleryTitle        = gallery.GalleryTitle,
                GalleryDescription  = gallery.GalleryDescription,
                GalleryPreviewImage = gallery.GalleryPreviewImage
            };

            // Возвращаем модель в представление
            return(View(model));
        }
Example #3
0
        public async Task <IActionResult> EditGallery(Guid galleryId)
        {
            // Находим галерею по Id
            Gallery gallery = await _websiteDB.Galleries.FirstOrDefaultAsync(g => g.Id == galleryId);

            if (gallery != null)
            {
                // Создаем модель для передачи в представление
                EditGalleryViewModel model = new EditGalleryViewModel()
                {
                    GalleryId           = galleryId,
                    GalleryTitle        = gallery.GalleryTitle,
                    GalleryDescription  = gallery.GalleryDescription.SpecSymbolsToEdit(),
                    GalleryPreviewImage = gallery.GallerySliderImage
                };

                // Возвращаем модель в представление
                return(View(model));
            }
            else
            {
                return(Redirect("/Main/PageNotFound"));
            }
        }
Example #4
0
        public async Task <IActionResult> EditGallery(EditGalleryViewModel model, IFormFile sliderImage)
        {
            // Настройки галереи
            SettingsGallery settings = await _websiteDB.SettingsGallery.FirstAsync();

            int imageSize = 1048576 * settings.MaxImageSize;

            // Если размер превью-изображения превышает установленный лимит, генерируем ошибку модели
            if (sliderImage != null && sliderImage.Length > imageSize)
            {
                ModelState.AddModelError("GalleryPreviewImage", $"Файл \"{sliderImage.FileName}\" превышает установленный лимит {settings.MaxImageSize}MB.");
            }

            // Проверяем, чтобы такая галерея существовала в БД
            Gallery gallery = await _websiteDB.Galleries.FirstOrDefaultAsync(g => g.Id == model.GalleryId);

            if (gallery == null)
            {
                return(Redirect("/Main/PageNotFound"));
            }

            // Если ошибок не возникло, заходим в тело условия
            if (ModelState.IsValid)
            {
                if (string.IsNullOrEmpty(model.GalleryDescription))
                {
                    model.GalleryDescription = "";
                }

                // Если исходный файл не равен NULL и его размер больше 0, заходим в тело условия
                if (sliderImage != null && sliderImage.Length > 0)
                {
                    // Создаем новый объект класса FileInfo из полученного изображения для дальнейшей обработки
                    FileInfo imgFile = new FileInfo(sliderImage.FileName);
                    // Приводим расширение к нижнему регистру (если оно было в верхнем)
                    string imgExtension = imgFile.Extension.ToLower();
                    // Генерируем новое имя для файла
                    string newFileName = Guid.NewGuid() + imgExtension;
                    // Пути сохранения файла
                    string sliderDirectory = "/uploadedfiles/gallery/images/slider/";
                    // Пути сохранения файла
                    string pathSliderImage = sliderDirectory + newFileName; // уменьшенное изображение

                    // Если такой директории не существует, то создаем её
                    if (!Directory.Exists(_appEnvironment.WebRootPath + sliderDirectory))
                    {
                        Directory.CreateDirectory(_appEnvironment.WebRootPath + sliderDirectory);
                    }

                    // В операторе try/catch делаем уменьшенную копию изображения.
                    // Если входным файлом окажется не изображение, нас перекинет в блок CATCH и выведет сообщение об ошибке
                    try
                    {
                        // Создаем объект класса SixLabors.ImageSharp.Image и грузим в него полученное изображение
                        using (Image image = Image.Load(sliderImage.OpenReadStream()))
                        {
                            // Создаем уменьшенную копию и обрезаем её
                            var clone = image.Clone(x => x.Resize(new ResizeOptions
                            {
                                Mode = ResizeMode.Crop,
                                Size = new Size(1056, 220)
                            }));
                            // Сохраняем уменьшенную копию
                            await clone.SaveAsync(_appEnvironment.WebRootPath + pathSliderImage, new JpegEncoder { Quality = settings.ImageResizeQuality });
                        }
                    }
                    // Если вдруг что-то пошло не так (например, на вход подало не картинку), то выводим сообщение об ошибке
                    catch
                    {
                        // Создаем сообщение об ошибке для вывода пользователю
                        ModelState.AddModelError("GalleryPreviewImage", $"Файл {sliderImage.FileName} имеет неверный формат.");

                        // Возвращаем модель с сообщением об ошибке в представление
                        return(View(model));
                    }

                    // Удаляем предыдущее изображения для слайдера
                    if (gallery.GallerySliderImage != null)
                    {
                        FileInfo imageToDelete = new FileInfo(_appEnvironment.WebRootPath + gallery.GallerySliderImage);
                        if (imageToDelete.Exists)
                        {
                            imageToDelete.Delete();
                        }
                    }

                    // Обновляем значения на полученные с формы
                    gallery.GalleryTitle       = model.GalleryTitle;
                    gallery.GalleryDescription = model.GalleryDescription.SpecSymbolsToView();
                    gallery.GallerySliderImage = pathSliderImage;


                    // Сохраняем изменения в БД
                    _websiteDB.Galleries.Update(gallery);
                    await _websiteDB.SaveChangesAsync();

                    return(RedirectToAction("Index", "Gallery"));
                }
                // Если не была выбрана картинка для превью, заходим в блок ELSE
                else
                {
                    // Обновляем значения на полученные с формы
                    gallery.GalleryTitle       = model.GalleryTitle;
                    gallery.GalleryDescription = model.GalleryDescription.SpecSymbolsToView();

                    // Сохраняем изменения в БД
                    _websiteDB.Galleries.Update(gallery);
                    await _websiteDB.SaveChangesAsync();

                    return(RedirectToAction("Index", "Gallery"));
                }
            }

            // Возврат модели при неудачной валидации
            return(View(model));
        }
Example #5
0
        public async Task <IActionResult> EditGallery(EditGalleryViewModel model, IFormFile previewImage)
        {
            // Если размер превью-изображения превышает установленный лимит, генерируем ошибку модели
            if (previewImage != null && previewImage.Length > 2097152) // Хардкод. Потом обязательно заменить !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            {
                ModelState.AddModelError("GalleryPreviewImage", $"Файл \"{previewImage.FileName}\" превышает установленный лимит 2MB.");
            }

            // Если ошибок не возникло, заходим в тело условия
            if (ModelState.IsValid)
            {
                // Если исходный файл не равен NULL и его размер больше 0, заходим в тело условия
                if (previewImage != null && previewImage.Length > 0)
                {
                    // Создаем новый объект класса FileInfo из полученного изображения для дальнейшей обработки
                    FileInfo imgFile = new FileInfo(previewImage.FileName);
                    // Приводим расширение к нижнему регистру (если оно было в верхнем)
                    string imgExtension = imgFile.Extension.ToLower();
                    // Генерируем новое имя для файла
                    string newFileName = Guid.NewGuid() + imgExtension;
                    // Пути сохранения файла
                    string pathPreview = "/files/images/preview/" + newFileName; // уменьшенное изображение

                    // В операторе try/catch делаем уменьшенную копию изображения.
                    // Если входным файлом окажется не изображение, нас перекинет в блок CATCH и выведет сообщение об ошибке
                    try
                    {
                        // Создаем объект класса SixLabors.ImageSharp.Image и грузим в него полученное изображение
                        using (Image image = Image.Load(previewImage.OpenReadStream()))
                        {
                            // Создаем уменьшенную копию и обрезаем её
                            var clone = image.Clone(x => x.Resize(new ResizeOptions
                            {
                                Mode = ResizeMode.Crop,
                                Size = new Size(300, 200)
                            }));
                            // Сохраняем уменьшенную копию
                            await clone.SaveAsync(_appEnvironment.WebRootPath + pathPreview, new JpegEncoder { Quality = 50 });
                        }
                    }
                    // Если вдруг что-то пошло не так (например, на вход подало не картинку), то выводим сообщение об ошибке
                    catch
                    {
                        // Создаем сообщение об ошибке для вывода пользователю
                        ModelState.AddModelError("GalleryPreviewImage", $"Файл {previewImage.FileName} имеет неверный формат.");

                        // Возвращаем модель с сообщением об ошибке в представление
                        return(View(model));
                    }

                    Gallery gallery = await _websiteDB.Galleries.FirstAsync(g => g.Id == model.GalleryId);

                    // Если до этого превьюшка была не по дефолту, удаляем её с сервера
                    if (gallery.GalleryPreviewImage != "/files/images/preview/nopreview.jpg") // Хардкод. Потом обязательно заменить !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                    {
                        FileInfo imageToDelete = new FileInfo(_appEnvironment.WebRootPath + gallery.GalleryPreviewImage);
                        if (imageToDelete.Exists)
                        {
                            imageToDelete.Delete();
                        }
                    }

                    // Обновляем значения на полученные с формы
                    gallery.GalleryTitle        = model.GalleryTitle;
                    gallery.GalleryDescription  = model.GalleryDescription;
                    gallery.GalleryPreviewImage = pathPreview;


                    // Сохраняем изменения в БД
                    _websiteDB.Galleries.Update(gallery);
                    await _websiteDB.SaveChangesAsync();

                    return(RedirectToAction("Index", "Gallery"));
                }
                // Если не была выбрана картинка для превью, заходим в блок ELSE
                else
                {
                    // Выбираем галерею из БД по Id
                    Gallery gallery = await _websiteDB.Galleries.FirstAsync(g => g.Id == model.GalleryId);

                    // Обновляем значения на полученные с формы
                    gallery.GalleryTitle       = model.GalleryTitle;
                    gallery.GalleryDescription = model.GalleryDescription;

                    // Сохраняем изменения в БД
                    _websiteDB.Galleries.Update(gallery);
                    await _websiteDB.SaveChangesAsync();

                    return(RedirectToAction("Index", "Gallery"));
                }
            }

            // Возврат модели при неудачной валидации
            return(View(model));
        }