public ActionResult deleteImage(int listing, int image)
        {
            if (listing <= 0 && image <= 0)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            string user         = User.Identity.GetUserId();
            var    listingImage = from c in db.ListingImages
                                  where c.Listing.OwnerId == user && c.ListingId == listing && c.ListingImageId == image
                                  select c;
            ListingImage lm = listingImage.FirstOrDefault();

            if (lm == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            db.ListingImages.Remove(lm);
            db.SaveChanges();
            string[] bases = { "~/Images/Listings/Big/", "~/Images/Listings/Med/", "~/Images/Listings/Small/" };
            string   file  = "";

            foreach (string imagesPath in bases)
            {
                if (System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(imagesPath + lm.Name)))
                {
                    System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(imagesPath + lm.Name));
                }
                file = imagesPath + lm.Name;
            }

            var json = new { listingId = lm.ListingId, imageId = lm.ListingImageId, file = file };

            return(Json(json));
        }
        public async Task <ListingImage> AddImage(Guid listingId, byte[] imageContent, string imageMediaType)
        {
            if (imageContent == null)
            {
                throw new ArgumentNullException(nameof(imageContent));
            }
            if (string.IsNullOrWhiteSpace(imageMediaType))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(imageMediaType));
            }

            var listing = await _findListingCoordinator.Find(listingId);

            if (listing == null)
            {
                return(null);
            }

            var imageFileName = $"{Guid.NewGuid()}";
            var url           = await _imageStore.PersistArticleEntryMedia(imageFileName, imageContent, imageMediaType);

            var image = new ListingImage()
            {
                Listing   = listing,
                ListingId = listingId,
                Url       = url
            };

            await _dbContext.Add(image);

            await _dbContext.SaveChanges();

            return(image);
        }
        private static void BulkLoadData(AgentPortalDBContext dbContext, ListingImage listingImage1)
        {
            for (int i = 0; i < 5; i++)
            {
                var listing = new Listing
                {
                    Description    = $"Test Listing {i}",
                    Address        = $"{i} Downing Street, London",
                    AskingPrice    = i * 10000m,
                    NumberBedrooms = i,
                    PostCode       = "SW1X 7EE"
                };

                dbContext.Listings.Add(listing);
                dbContext.SaveChanges();

                for (int j = 0; j < 10; j++)
                {
                    var listingImage = new ListingImage
                    {
                        ListingId = listing.Id,
                        Listing   = listing,
                        Url       = j % 2 == 0
                            ? "https://zooplapirantassessment.blob.core.windows.net/stock-images/3.jpg"
                            : "https://zooplapirantassessment.blob.core.windows.net/stock-images/3.jpg"
                    };

                    dbContext.Images.Add(listingImage);
                    dbContext.SaveChanges();
                }
            }
        }
        public async Task <ActionResult <Listing> > CreateListing([FromForm] ListingCreateVM vm)
        {
            long size = vm.Images.Sum(f => f.Length);
            var  city = await _context.Cities.SingleOrDefaultAsync(x => x.Name == vm.CityName);

            var user = await _context.Users.SingleOrDefaultAsync(x => x.Id == vm.UserId);

            var category = await _context.Categories.SingleOrDefaultAsync(x => x.CategoryName == vm.CategoryName);

            var listing = new Listing(vm, city, user, category);
            await _context.AddAsync(listing);

            foreach (var image in vm.Images)
            {
                if (image.Length > 0)
                {
                    using (var memoryStream = new MemoryStream())
                    {
                        await image.CopyToAsync(memoryStream);

                        var arrImg = memoryStream.ToArray();
                        var img    = new ListingImage(arrImg, listing);
                        //listing.ListingImages.Add(img);
                        await _context.AddAsync(img);
                    }
                }
            }

            await _context.SaveChangesAsync();

            return(Ok(new { count = vm.Images.Count, size }));
        }
        public ActionResult Edit(int id, [Bind("Id, Description, Address, PostCode, PricePerMonth, NoOfBedrooms, NoOfBaths, OffStreetParking, LaundryAvailable, Files")] ApartmentListing apartmentListing)
        {
            if (id != apartmentListing.Id)
            {
                return(NotFound());
            }

            // Check if the model is Valid
            if (ModelState.IsValid)
            {
                // Add More Images to the listing
                // Check if Files were selected for the Listing
                if (apartmentListing.Files != null)
                {
                    // Check if files are all images i.e. jpeg, jpg, png, bmp
                    if (_listingService.AllFilesAreImages(apartmentListing.Files))
                    {
                        foreach (var formFile in apartmentListing.Files)
                        {
                            // Create a random file name for the Profile Image
                            string randomFileName = Guid.NewGuid().ToString();
                            // Get the extension of the filename
                            string imageExtension = _listingService.GetImageExtension($"{formFile.FileName}");
                            // Create the URL to the image
                            string imageUrl = $"/images/listings/{randomFileName}{imageExtension}";
                            // Create an Image listing object
                            var image = new ListingImage
                            {
                                ApartmentListing = apartmentListing,
                                ImageUrl         = imageUrl
                            };
                            // Add the Image to the Listing's Images
                            apartmentListing.Images.Append(image);
                            // Copy the Image into the wwwroot/images/listings folder
                            _listingService.UploadListingImage(randomFileName, imageExtension, formFile);
                        }

                        // Update and Save the listing
                        _listingService.UpdateListing(apartmentListing);
                        _listingService.SaveChanges();
                        // Alert that Listing has been Updated
                        TempData["Success"] = "Listing Updated Successfully";
                        return(RedirectToAction("Edit", new { Id = id }));
                    }
                    // Alert Upload Images
                    TempData["Message"] = "Accepted Extensions are .jpeg .jpg .png .bmp";
                    return(View(apartmentListing));
                }

                if (apartmentListing.Files == null)
                {
                    _listingService.UpdateListing(apartmentListing);
                }
            }

            return(View(apartmentListing));
        }
Beispiel #6
0
        public ListingImage Build()
        {
            var img = new ListingImage
            {
                Id        = Id,
                ListingId = ListingId,
                Listing   = Listing,
                Url       = Url,
            };

            return(img);
        }
Beispiel #7
0
        public ActionResult Get(Guid listingId)
        {
            ListingImage img = _ctx.ListingImages.FirstOrDefault(li => li.listingId == listingId);

            if (null == img)
            {
                return(NotFound());
            }
            else
            {
                return(File(img.image, img.contentType, img.fileName));
            }
        }
        public ActionResult imageX(int ListingId)
        {
            string desired_path = "~/Images/listings/";
            string user         = User.Identity.GetUserId();
            var    listQ        = from c in db.Listings.Include("images")
                                  where c.ListingId == ListingId && c.OwnerId == user
                                  select c;
            Listing listing = listQ.FirstOrDefault();

            if (listing == null)
            {
                return(Json(new { error = "Error uploading" }));
            }
            listing.Updated         = DateTime.Now;
            db.Entry(listing).State = EntityState.Modified;
            db.SaveChanges();
            if (listing.images.Count() >= maxImages)
            {
                // you need to delete images first
                return(Json(new { error = "Error uploading. Limit reached.", status = 403 }));
            }
            int x = 1;

            foreach (string fileName in Request.Files)
            {
                HttpPostedFileBase posted_file = Request.Files[fileName];
                if (posted_file != null && posted_file.ContentLength > 0)
                {
                    //create random file name from guid and upload/save
                    string desired_file_name = ListingId + "_" + System.Guid.NewGuid().ToString("N") + Path.GetExtension(posted_file.FileName);

                    bool file_uploaded = TMLib.TMImage.renameUploadFile(posted_file, desired_path + "/Big", desired_file_name, 900);
                    bool med_iplod     = TMLib.TMImage.renameUploadFile(posted_file, desired_path + "/Med", desired_file_name, 600);
                    bool thumb_upload  = TMLib.TMImage.renameUploadFile(posted_file, desired_path + "/Small", desired_file_name, 200);
                    if (file_uploaded)
                    {
                        ListingImage li = new ListingImage();
                        li.ListingId    = ListingId;
                        li.Listing      = listing;
                        li.Name         = desired_file_name;
                        li.DisplayOrder = x++;
                        li.Created      = DateTime.Now;
                        db.ListingImages.Add(li);
                        db.SaveChanges();
                    }
                }
                //else there's no valid file uploaded. handle situation here
            }
            //return Json(new { error = "Error uploading. Limit reached.", status = 403 });
            return(Json(new { Message = "Uploaded" }));
        }
        public async Task <ActionResult <string> > EditListing([FromRoute] Guid id, [FromForm] string title, [FromForm] string description, [FromForm]  decimal?price, [FromForm] ListingImageCreateVM[] photos, [FromForm]  bool status, [FromForm]  string userId)
        {
            var listing = await _context.Listings.SingleOrDefaultAsync(x => x.Id == id);

            if (listing == null)
            {
                return(BadRequest("Id not found"));
            }
            else if (listing.UserId != userId)
            {
                return(BadRequest("User id does not match listing"));
            }


            if (title != null)
            {
                listing.Title = title;
            }
            if (description != null)
            {
                listing.Description = description;
            }
            if (price != null)
            {
                listing.Price = (decimal)price;
            }
            if (photos != null)
            {
                var all_listings_matching = await _context.ListingImages.Where(x => x.ListingId == listing.Id).ToListAsync();

                _context.RemoveRange(all_listings_matching); //expect patch with all the images the user wants, so remove the old ones
                foreach (var photo in photos)
                {
                    var img = new ListingImage(photo, listing);
                    try
                    {
                        await _context.ListingImages.AddAsync(img);

                        listing.ListingImages.Add(img);
                    }
                    catch (System.InvalidOperationException e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }

            var result = await _context.SaveChangesAsync();

            return(Ok(result));
        }
Beispiel #10
0
        public ActionResult Delete(Guid listingId)
        {
            ListingImage img = _ctx.ListingImages.FirstOrDefault(li => li.listingId == listingId);

            if (null == img)
            {
                return(NotFound());
            }
            else
            {
                _ctx.ListingImages.Remove(img);
                _ctx.SaveChanges();
                return(NoContent());
            }
        }
Beispiel #11
0
        public static ListingImage GetListingImageFile(HttpPostedFileBase upload)
        {
            var listingImage = new ListingImage
            {
                FileName    = Path.GetFileName(upload.FileName),
                ContentType = upload.ContentType,
                Content     = GetFileBytes(upload)
            };
            var contentArray = listingImage.Content;

            listingImage.ThumbnailContent =
                GetThumbnailFileBytes(contentArray);

            return(listingImage);
        }
        private ListingImageResponse MapListingImageResponse(ListingImage image, Guid listingId)
        {
            Link[] links =
            {
                new Link
                {
                    Relation = LinkRelValueObject.SELF,
                    Href     = Url.Action(nameof(GetImages), new { listingId = listingId })
                },
                new Link
                {
                    Relation = LinkRelValueObject.LISTING,
                    Href     = Url.Action("GetListing", "Listings", new { listingId = listingId })
                }
            };

            return(new ListingImageResponse()
            {
                Id = image.Id,
                Url = image.Url,
                ListingId = listingId,
                Links = links
            });
        }
        public ListingDTO updateListing(Guid key, ListingCreateOrUpdate update)
        {
            Listing original    = _ctx.Listings.AsNoTracking().FirstOrDefault(p => p.id == key);
            User    currentUser = _currentUserService.GetCurrentUser();

            if (null != update.tags)
            {
                foreach (ListingTag doomedTag in _ctx.ListingTags.Where(t => t.listingId == key))
                {
                    _ctx.ListingTags.Remove(doomedTag);
                }

                foreach (string tag in update.tags)
                {
                    _ctx.ListingTags.Add(new ListingTag()
                    {
                        name      = tag,
                        listingId = key
                    });
                }
            }

            if (null != update.image && FileHelper.IsImage(update.image))
            {
                ListingImage existing = _ctx.ListingImages.FirstOrDefault(li => li.listingId == key);
                if (null != existing)
                {
                    _ctx.ListingImages.Remove(existing);
                }

                byte[] fileContents = null;
                using (var fs1 = update.image.OpenReadStream())
                    using (var ms1 = new MemoryStream())
                    {
                        fs1.CopyTo(ms1);
                        fileContents = ms1.ToArray();
                    }

                _ctx.ListingImages.Add(new ListingImage()
                {
                    listingId   = key,
                    contentType = update.image.ContentType,
                    image       = fileContents,
                    fileName    = Path.GetFileName(update.image.FileName)
                });
            }

            original.name              = update.name;
            original.description       = update.description;
            original.modified          = DateTime.UtcNow;
            original.price             = update.price;
            _ctx.Entry(original).State = EntityState.Modified;
            _ctx.SaveChanges();

            Listing result = _ctx.Listings
                             .Include(l => l.user)
                             .Include(l => l.tags)
                             .Where(l => l.id == key)
                             .FirstOrDefault();

            return(_mapper.Map <ListingDTO>(result));
        }
Beispiel #14
0
        public ActionResult ShowOtherImages(ListingImage image, string stateCode)
        {
            var listingImage = serviceUtils.PopulateOtherImagesForListing(image, stateCode);

            return(PartialView("OtherImages", listingImage));
        }
        public async Task <ActionResult> Create([Bind("Id, Description, Address, PostCode, PricePerMonth, NoOfBedrooms, NoOfBaths, OffStreetParking, LaundryAvailable, Files")] ApartmentListing apartmentListing)
        {
            // Check if the model is Valid
            if (ModelState.IsValid)
            {
                // Check if Files were selected for the Listing
                if (apartmentListing.Files != null)
                {
                    // Check if files are all images i.e. jpeg, jpg, png, bmp
                    if (_listingService.AllFilesAreImages(apartmentListing.Files))
                    {
                        // Create an empty IEnumerable of Listing Images
                        IEnumerable <ListingImage> Images = Enumerable.Empty <ListingImage>();

                        foreach (var formFile in apartmentListing.Files)
                        {
                            // Create a random file name for the Profile Image
                            string randomFileName = Guid.NewGuid().ToString();
                            // Get the extension of the filename
                            string imageExtension = _listingService.GetImageExtension($"{formFile.FileName}");
                            // Create the URL to the image
                            string imageUrl = $"/images/listings/{randomFileName}{imageExtension}";
                            // Create an Image listing object
                            var image = new ListingImage
                            {
                                ApartmentListing = apartmentListing,
                                ImageUrl         = imageUrl
                            };
                            // Add the Image to IEnumerator of Listing Images
                            Images.Append(image);
                            // Copy the Image into the wwwroot/images/listings folder
                            _listingService.UploadListingImage(randomFileName, imageExtension, formFile);
                        }

                        // Assign Images
                        apartmentListing.Images = Images;
                        // Get and Assign User
                        var currentUser = await _userManager.GetUserAsync(User);

                        apartmentListing.User = currentUser;
                        // Get and Assign Current time
                        var currentTime = DateTime.Now;
                        apartmentListing.DateCreated = currentTime;
                        // Get the Category

                        // Add and Save the listing
                        _listingService.AddListing(apartmentListing);
                        _listingService.SaveChanges();

                        // Alert that Appartment Listing has been created

                        // Redirect to the index of Listing Controller
                        return(RedirectToAction(nameof(Index)));
                    }
                    // Alert Upload Images
                    TempData["Message"] = "Accepted Extensions are .jpeg .jpg .png .bmp";
                    return(View(apartmentListing));
                }
                // Alert Upload Images
                TempData["Message"] = "Select Photo(s) for your Listing ";
                return(View(apartmentListing));
            }
            return(View(apartmentListing));
        }
        private void SeedTestData(AgentPortalDBContext dbContext)
        {
            var listing1 = new Listing
            {
                Description    = "One Hyde Park, 100",
                Address        = "100 Knightsbridge, London",
                AskingPrice    = 200000000m,
                NumberBedrooms = 10,
                PostCode       = "SW1X 7LJ",
            };

            var listing2 = new Listing
            {
                Description    = "72 Vincent Square",
                Address        = "Westminster, London",
                AskingPrice    = 100000000m,
                NumberBedrooms = 8,
                PostCode       = "SW1P 2PA",
            };

            var listing3 = new Listing
            {
                Description    = "Belgravia Gate",
                Address        = "Belgravia, London",
                AskingPrice    = 100000000m,
                NumberBedrooms = 5,
                PostCode       = "SW1X 7EE"
            };

            var listing4 = new Listing
            {
                Description    = "Ashurst Road",
                Address        = "Ashurst Road, London",
                AskingPrice    = 100000000m,
                NumberBedrooms = 5,
                PostCode       = "N12 9AH"
            };

            dbContext.Listings.Add(listing1);
            dbContext.Listings.Add(listing2);
            dbContext.Listings.Add(listing3);
            dbContext.Listings.Add(listing4);

            dbContext.SaveChanges();

            var listingImage1 = new ListingImage
            {
                ListingId = listing1.Id,
                Listing   = listing1,
                Url       = "https://zooplapirantassessment.blob.core.windows.net/stock-images/1.jpg"
            };

            var listingImage2 = new ListingImage
            {
                ListingId = listing2.Id,
                Listing   = listing2,
                Url       = "https://zooplapirantassessment.blob.core.windows.net/stock-images/2.jpg"
            };

            var listingImage3 = new ListingImage
            {
                ListingId = listing3.Id,
                Listing   = listing3,
                Url       = "https://zooplapirantassessment.blob.core.windows.net/stock-images/3.jpg"
            };

            dbContext.Images.Add(listingImage1);
            dbContext.Images.Add(listingImage2);
            dbContext.Images.Add(listingImage3);
            dbContext.SaveChanges();

            //BulkLoadData(dbContext, listingImage1);
        }