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);
        }
示例#3
0
        public static bool DeletePhoto(int photoId)
        {
            var photo = PhotosDAL.GetPhoto(photoId);

            if (photo == null)
            {
                return(false);
            }
            return(PhotosController.DeletePhoto(photo));
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        /// <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);
        }