public ActionResult ModerateAds() { var viewModel = new AdminModerateAdsViewModel(); viewModel.Ads = AdsDAL.GetAdsForModeration(); if (viewModel.Ads.Any()) { foreach (var ad in viewModel.Ads) { ad.Photos = PhotosDAL.GetPhotos(ad.Id); ad.Products = AdProductsDAL.GetAdProducts(ad.Id); } } ViewBag.Heading = "Модерация объявлений"; #region Хлебные крошки var breadCrumbs = new List <BreadCrumbLink>(); breadCrumbs.Add(new BreadCrumbLink() { Text = "Админка", Url = C.SiteUrl + "Admin", Title = "Перейти на главную админки" }); breadCrumbs.Add(new BreadCrumbLink() { Text = ViewBag.Heading, EndPoint = true }); ViewBag.BreadCrumbs = breadCrumbs; #endregion return(View(viewModel)); }
public static LeftMenuViewModel Get(User user, string selectedMenu) { var result = new LeftMenuViewModel() { CompanyNameWithTypeOfOwnership = user.CompanyNameWithTypeOfOwnership, Rating = user.Rating.ToString(), RatingImagesHtml = user.RatingImagesHtml, SelectedMenu = selectedMenu, CurrentUserId = user.Id }; if (user.SmallPhotoUrl != null) { result.SmallPhotoUrl = user.SmallPhotoUrl; } else { //var photos = PhotosDAL.GetCompanyLogoGroup(user.Id).OrderBy(p => p.Width).ToList(); //result.SmallPhotoUrl = photos.Any() ? photos.First().Url : PhotoHelper.NoLogoImageUrl; user.LogoGroup = PhotosDAL.GetCompanyLogoGroup(user.Id); result.SmallPhotoUrl = user.GetBestFitLogoPhoto(1).Url; } result.AdsCount = AdsDAL.GetAdsCount((int)AdStatuses.Published, user.Id); result.UnreadMessagesCount = MessagesDAL.GetUnreadMessagesCount(user.Id); return(result); }
public static bool DeletePhoto(int photoId) { var photo = PhotosDAL.GetPhoto(photoId); if (photo == null) { return(false); } return(PhotosController.DeletePhoto(photo)); }
public static List <Photo> CopyAdPhotos(List <Photo> photos, int adId) { if (!photos.Any()) { return(new List <Photo>()); } foreach (var group in photos.GroupBy(p => p.GroupId).Select(g => g.ToList()).ToList()) { var groupId = Guid.NewGuid(); foreach (var photo in group) { var oldFullPath = photo.FullPath.Replace("/", "\\"); if (!System.IO.File.Exists(oldFullPath)) { continue; } photo.AdId = adId; var directory = PhotosController.GetFileDirectoryForPhotos(photo); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } photo.GroupId = groupId; string fileName = String.Empty; #region Get unique fileName while (true) { string _fileName = Guid.NewGuid().ToString().Replace("-", "").Remove(10) + ".jpg"; if (!System.IO.File.Exists(directory + _fileName)) { fileName = _fileName; break; } } if (fileName == String.Empty) { LogsDAL.AddError("in PhotosController.SavePhoto(): filePathAndName = String.Empty"); //return false; } #endregion photo.FileNameWithExtension = fileName; System.IO.File.Copy(oldFullPath, photo.FullPath.Replace("/", "\\")); photo.Added = DateTime.Now.ToUniversalTime(); photo.Changed = photo.Added; PhotosDAL.AddPhoto(photo); } } return(photos); }
public static string GetSmallPhotoUrl(int userId) { var logos = PhotosDAL.GetCompanyLogoGroup(userId); if (logos.Any()) { int requiredDimension = 200; var smallestDimensionDifference = logos.Min(p => Math.Abs(p.HigherDimension.Value - requiredDimension)); var logo = logos.FirstOrDefault(p => Math.Abs(p.HigherDimension.Value - requiredDimension) == smallestDimensionDifference); if (logo != null) { return(logo.Url); } } return(PhotoHelper.NoLogoImageUrl); }
public static bool DeletePhoto(Photo photo) { var group = PhotosDAL.GetPhotoGroup(photo.GroupId); foreach (var photoToRemove in group) { if (System.IO.File.Exists(photoToRemove.FullPath)) { System.IO.File.Delete(photoToRemove.FullPath); } else { LogsDAL.AddError("in PhotosController.DeletePhoto(): System.IO.File.Exists(photo.FullPath) == false"); return(false); } } PhotosDAL.DeletePhotoGroup(photo.GroupId); return(true); }
public static Photo SavePhoto(System.Drawing.Image photoImage, Photo photo) { var directory = GetFileDirectoryForPhotos(photo); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } /*Photo photo = new Photo(); * photo.UserId = userId; * //photo.ImageType = "jpeg"; * //photo.ModerateResult = moderateResult; * //photo.IsMain = setMain; * //photo.Width = photo.Width; * //photo.Height = photo.Height; * //photo.NearestWidth = nearestWidth;*/ #region Get unique fileName string fileName = String.Empty; while (true) { string _fileName = Guid.NewGuid().ToString().Replace("-", "").Remove(10) + ".jpg"; if (!System.IO.File.Exists(directory + _fileName)) { fileName = _fileName; break; } } if (fileName == String.Empty) { LogsDAL.AddError("in PhotosController.SavePhoto(): filePathAndName = String.Empty"); //return false; } #endregion SaveJPGWithCompressionSetting(photoImage, directory + fileName, 70L); photo.FileNameWithExtension = fileName; photo.Width = photoImage.Width; photo.Height = photoImage.Height; photo.Id = PhotosDAL.AddPhoto(photo); return(photo); }
public static bool MakePhotoMain(int photoId) { var photo = PhotosDAL.GetPhoto(photoId); if (photo == null) { return(false); } var allPhotos = PhotosDAL.GetPhotos(photo.AdId.Value); if (!allPhotos.Any()) { return(false); } foreach (var photoNotMain in allPhotos.GroupBy(p => p.GroupId).Select(g => g.FirstOrDefault()).ToList()) { PhotosDAL.UpdateIsMainGroup(photoNotMain.GroupId, false); } PhotosDAL.UpdateIsMainGroup(photo.GroupId, true); return(true); }
/// <summary> /// Возвращает объявления с всей необходимой информацией для представлений /// </summary> /// <param name="adIds"></param> /// <returns></returns> public static List <Ad> GetAdsForView(int currentUserId, List <int> adIds = null, List <Ad> ads = null, bool needInvitedUserIds = false, bool needSender = false) { if (adIds == null && ads == null) { throw new ArgumentNullException("Нужно передать или adIds или ads"); } if (ads == null) { ads = AdsDAL.GetAds(ids: adIds); } else { adIds = ads.Select(a => a.Id).Distinct().ToList(); } ads.ForEach(f => f.City = TownsDAL.GetTown(f.CityId)); //города кэшируются внутри TownsDAL, запросов в БД нет var smallMainPhotos = PhotosDAL.GetPhotos(adIds: adIds, maxWidth: 300); var userFavoriteAds = UserFavoriteAdsDAL.GetUserFavoriteAds(adIds: adIds); var offersForAds = OffersDAL.GetOffers(adIds: adIds); var adProductsForads = AdProductsDAL.GetAdProducts(adIds: adIds); var allProductCategories = ProductCategoriesDAL.GetCategories(); foreach (var ad in ads) { var smallMainPhoto = smallMainPhotos.FirstOrDefault(p => p.AdId == ad.Id); ad.SmallPhotoUrl = smallMainPhoto != null ? smallMainPhoto.Url : PhotoHelper.NoLogoImageUrl; ad.FavoritesCount = userFavoriteAds.Count(a => a.AdId == ad.Id); ad.IsInFavorites = userFavoriteAds.Any(f => f.AdId == ad.Id && f.UserId == currentUserId); ad.Offers = offersForAds.Where(o => o.AdId == ad.Id).ToList(); ad.Products = adProductsForads.Where(ap => ap.AdId == ad.Id).ToList(); if (ad.Products.Any()) { #region Заполнение описания System.Text.StringBuilder productCategoryNames = new System.Text.StringBuilder(); var adProductCategoryIds = ad.Products.Select(p => p.ProductCategoryId).ToList(); var adProductCategories = allProductCategories .Where(c => adProductCategoryIds.Any(id => c.Id == id)) .OrderBy(c => c.Id).ToList(); ad.ProductCategoryNames = ""; if (adProductCategories.Any()) { var level1Categories = new List <ProductCategory>(); //категории 1-го уровня для всех категорий, выбранных в объявлении #region Заполним level1Categories foreach (var category in adProductCategories) { var level1CategoryIds = level1Categories.Select(c => c.Id).ToList(); if (category.Level == 1) { if (!level1CategoryIds.Contains(category.Id)) { level1Categories.Add(category); } } else //Level = 2 или Level = 3 { var parentCategory = allProductCategories.FirstOrDefault(c => c.Id == category.ParentId); if (parentCategory != null) { if (category.Level == 2) { if (!level1CategoryIds.Contains(parentCategory.Id)) { level1Categories.Add(parentCategory); } } else //Level = 3 { var parentParentCategory = allProductCategories.FirstOrDefault(c => c.Id == parentCategory.ParentId); if (parentParentCategory != null && !level1CategoryIds.Contains(parentParentCategory.Id)) { level1Categories.Add(parentParentCategory); } } } } } #endregion ad.ProductCategoriesLevel1 = new List <ProductCategory>(); foreach (var level1Category in level1Categories) { //нужно клонировать, иначе при обработке следующих объявлений в цикле эти данные затрутся var level1CategoryClone = level1Category.Clone(); //выбираем дочерние категории и дочерние категории дочерних категорий var childCategories = adProductCategories.Where(c => c.ParentId == level1CategoryClone.Id || level1CategoryClone.ChildrenId.Any(id => id == c.ParentId)).ToList(); level1CategoryClone.ChildCategories = new List <ProductCategory>(); foreach (var childCategory in childCategories) { var childCategoryClone = childCategory.Clone(); level1CategoryClone.ChildCategories.Add(childCategoryClone); } ad.ProductCategoriesLevel1.Add(level1CategoryClone); } } #endregion } if (needInvitedUserIds) { ad.InvitedUsersId = AdsDAL.GetInvitedUsers(ad.Id); } if (needSender) { ad.Sender = UsersDAL.GetUser(ad.SenderId); if (ad.Sender != null) { ad.Sender.Town = TownsDAL.GetTown(ad.Sender.CityId); } } } return(ads); }