Программное средство по обмену услугами для владельцев собак
Разработка приложения по обмену услугами для владельцев собак. Создание личного кабинета с персональными данными. Редактирование: личных данных, объявления, питомца. Алгоритм редактирования и удаления объявления. Тестирование данного программного средства
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 14.10.2016 |
Размер файла | 2,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
using MyPet.WebUI.Models.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MyPet.WebUI.Controllers
{
[Authorize]
public class MessageController: Controller
{
// GET: Message
private IMyPetRepository repository;
private IRepository<Message> msgRepository;
//private int authorisedUserId = User.Identity.GetUserId<int>();
public MessageController(IMyPetRepository repo, IRepository<Message> mesrepo)
{
this.repository = repo;
this.msgRepository = mesrepo;
}
public ActionResult New(int id)
{
int authorisedUserId=User.Identity.GetUserId<int>();
var msgs=msgRepository.GetAll().Where(x => (x.AuthorId == id && x.ReceiverId == authorisedUserId) || (x.ReceiverId == id && x.AuthorId == authorisedUserId))
.OrderByDescending(x => x.DateAndTime).Take(10).OrderBy(x=>x.DateAndTime);
IEnumerable<Message> willBeViewedMsgs = msgs.Where(x => x.HasBeenViewed == false && User.Identity.GetUserId<int>() == x.ReceiverId);
foreach(var v in willBeViewedMsgs)
{
v.HasBeenViewed=true;
}
msgRepository.Save();
ViewBag.ReceiverId = id;
return View(msgs);
}
[HttpPost]
public ActionResult New(Message msg)
{
if (msg.Text != null && msg.AuthorId == User.Identity.GetUserId<int>())
{
msg.DateAndTime = DateTime.Now;
Message msgBeforeSavingInDB = msg;
msgRepository.Create(msg);
msgRepository.Save();
}
IEnumerable<Message> msgsToShow = msgRepository.Find(x => (x.AuthorId == msg.ReceiverId && x.ReceiverId == msg.AuthorId && x.HasBeenViewed == false)
|| (x.DateAndTime == msg.DateAndTime && x.AuthorId == msg.AuthorId && x.ReceiverId == msg.ReceiverId && x.Text == msg.Text));
foreach (var v in msgsToShow)
{
if (v.AuthorId != msg.AuthorId)
v.HasBeenViewed = true;
}
msgRepository.Save();
if (msgsToShow != null)
{
return PartialView("GetNextMsgs", msgsToShow);
}
else return null;
}
public ActionResult List()
{
int authorisedUserId = User.Identity.GetUserId<int>();
var receivedMsgsLists = msgRepository.Find(x => x.ReceiverId == authorisedUserId)
.GroupBy(x => x.AuthorId).ToArray();
List<MsgAndUnViewedMsgsCount> lastReceivedMsgsFromDifferentAuthors=new List<MsgAndUnViewedMsgsCount>();
foreach(var msgs in receivedMsgsLists)
{
int count=msgs.Where(x => x.ReceiverId == authorisedUserId && x.HasBeenViewed == false).Count();
Message lastCurMsg=msgs.OrderByDescending(x=>x.DateAndTime).FirstOrDefault();
lastReceivedMsgsFromDifferentAuthors.Add(new MsgAndUnViewedMsgsCount { Message = lastCurMsg, UnviewedMsgsCount = count, ReceiverProfile = repository.Profiles.Where(x => x.UserId == lastCurMsg.ReceiverId).FirstOrDefault()});
}
var sentMsgsLists = msgRepository.Find(x => x.AuthorId == authorisedUserId)
.GroupBy(x => x.ReceiverId).ToArray();
List<MsgAndUnViewedMsgsCount> lastSentMsgsFromDifferentAuthors=new List<MsgAndUnViewedMsgsCount>();
foreach(var msgs in sentMsgsLists)
{
int count = 0;
Message lastCurMsg = msgs.OrderByDescending(x => x.DateAndTime).FirstOrDefault();
lastSentMsgsFromDifferentAuthors.Add(new MsgAndUnViewedMsgsCount { Message = lastCurMsg, UnviewedMsgsCount = count, ReceiverProfile=repository.Profiles.Where(x=>x.UserId==lastCurMsg.ReceiverId).FirstOrDefault()});
}
List<MsgAndUnViewedMsgsCount> resultMsgs = new List<MsgAndUnViewedMsgsCount>();
foreach(var msg in lastReceivedMsgsFromDifferentAuthors)
{
MsgAndUnViewedMsgsCount ms = lastSentMsgsFromDifferentAuthors.Where(x =>
x.Message.AuthorId==msg.Message.ReceiverId
&& x.Message.ReceiverId==msg.Message.AuthorId).FirstOrDefault();
DateTime dt=(ms!=null?ms.Message.DateAndTime:msg.Message.DateAndTime);
if(dt > msg.Message.DateAndTime)
resultMsgs.Add(ms);
else resultMsgs.Add(msg);
}
return View(resultMsgs.OrderByDescending(x=>x.Message.DateAndTime));
}
public JsonResult GetUnviewedMsgsCountJson()
{
int authorisedUserId=User.Identity.GetUserId<int>();
var data = msgRepository.Find(x => (x.ReceiverId == authorisedUserId) && x.HasBeenViewed == false).Count();
return Json(data, JsonRequestBehavior.AllowGet);
}
public ActionResult GetNextMsgs(PresentedMsgsModelObj presMsgsObj)
{
IEnumerable<Message> newNextMsgs = msgRepository.Find(x => (x.ReceiverId == presMsgsObj.ReceiverId && x.AuthorId == presMsgsObj.AuthorId) || (x.ReceiverId == presMsgsObj.AuthorId && x.AuthorId == presMsgsObj.ReceiverId)).
OrderByDescending(x => x.DateAndTime).
Skip(presMsgsObj.PresentedMsgsCount).
Take(10).OrderBy(x=>x.DateAndTime);
IEnumerable<Message> willBeViewedMsgs = newNextMsgs.Where(x => x.HasBeenViewed == false && User.Identity.GetUserId<int>() == x.ReceiverId);
foreach(var v in willBeViewedMsgs)
{
v.HasBeenViewed=true;
}
msgRepository.Save();
if (newNextMsgs.Count() != 0)
return PartialView(newNextMsgs);
else return null;
}
// in this method property PresentedMsgsModelObj.PresentedMsgsCount is not nessecary, because the method returns new unViewede msgs
public ActionResult GetNewMsgs(PresentedMsgsModelObj presMsgsObj)
{
IEnumerable<Message> newMsgs = msgRepository.
Find(x => x.ReceiverId == presMsgsObj.AuthorId && x.AuthorId == presMsgsObj.ReceiverId && x.HasBeenViewed==false).
OrderByDescending(x => x.DateAndTime);
// in this foreach we are mark this msgs as they has been viewed
foreach (var v in newMsgs)
{
v.HasBeenViewed = true;
}
msgRepository.Save();
if (newMsgs.Count() != 0)
return PartialView("GetNextMsgs",newMsgs);
else return null;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MyPet.Domain.Entities;
using MyPet.Domain.Abstract;
using MyPet.WebUI.Models;
using MyPet.WebUI.Models.ViewModels;
using ImageResizer;
using System.IO;
using System.Text.RegularExpressions;
namespace MyRepetitor.WebUI.Controllers
{
public class PetsController: Controller
{
private IRepository<Pet> petsRepository;
private IMyPetRepository repository;
public PetsController(IRepository<Pet> petsRepo, IMyPetRepository repo)
{
this.petsRepository = petsRepo;
this.repository = repo;
}
public ActionResult MyPets(int id=0)
{
var pets = petsRepository.Find(x => x.UserId ==id);
if (pets != null)
return View(pets);
else return RedirectToAction("List");
}
public ActionResult List(int id=0)
{
if (id == 0)
return View(petsRepository.GetAll());
else
{
var pet=petsRepository.Find(x=>x.PetId==id);
if (pet != null)
return View(pet);
else
return RedirectToAction("Details", "Account", new { id = User.Identity.GetUserId<int>() });
}
}
public ActionResult Details(int id)
{
var pet = petsRepository.Get(id);
List<string[]> petPhotos = null;
string path = Server.MapPath(String.Concat("~/PetPhotos/", id).Trim());
if (pet != null)
{
DirectoryInfo dir = new DirectoryInfo(Server.MapPath(String.Concat("~/PetPhotos/", id).Trim()));
if (dir != null && dir.Exists && dir.GetFiles().Length>0)
{
IEnumerable<int> numbers = this.GetPhotoNumberCollection(path);
petPhotos = new List<string[]>();
IEnumerable<FileInfo> files = dir.GetFiles();
string[] curFiles;
foreach (var v in numbers)
{
curFiles = new string[3];
curFiles[0] = Path.GetFileNameWithoutExtension(files.FirstOrDefault(x => x.Name.Contains(String.Concat("big", v.ToString()).Trim())).Name);
curFiles[1] = Path.GetFileNameWithoutExtension(files.FirstOrDefault(x => x.Name.Contains(String.Concat("small", v.ToString()).Trim())).Name);
curFiles[2] = Path.GetFileNameWithoutExtension(files.FirstOrDefault(x => x.Name.Contains(String.Concat("tiny", v.ToString()).Trim())).Name);
petPhotos.Add(curFiles);
}
}
TempData["PetPhotos"] = petPhotos;
string petAvatarPath = String.Concat("small", this.GetMinNumberInFileNames(path).ToString()).Trim();
TempData["PetAvatarPath"] = petAvatarPath;
return View(pet);
}
else return
RedirectToAction("Details", "Account", new { id = User.Identity.GetUserId<int>() });
}
public ActionResult EditPet(int id)
{
var pet = petsRepository.Get(id);
if (pet != null)
{
ViewBag.DogBreeds = repository.DogBreeds;
return View(pet);
}
else return
RedirectToAction("Details", "Account", new { id = User.Identity.GetUserId<int>() });
}
[Authorize]
[HttpPost]
public ActionResult EditPet(Pet pet, HttpPostedFileBase[] uploads)
{
int id = User.Identity.GetUserId<int>();
if (ModelState.IsValid && pet.UserId == id)
{
foreach (var v in pet.Rewards.Where(x => x.PetOwnerId == 0))
{
v.PetOwnerId = pet.PetId;
}
if (uploads.Where(x => x != null).FirstOrDefault() != null && pet.HaveImages == false)
pet.HaveImages = true;
petsRepository.Update(pet);
petsRepository.Save();
pet = petsRepository.Get(pet.PetId);
try
{
if (uploads != null && uploads.Where(x => x != null).FirstOrDefault() != null)
{
string path = Server.MapPath(String.Concat("~/PetPhotos/", pet.PetId.ToString().Trim(), "/").Trim());
int i = this.GetMaxNumberInFileNames(path) + 1;
foreach (var upload in uploads)
{
if (upload != null)
{
if (upload.ContentLength > 0)
{
var versions = new Dictionary<string, string>();
//Define the versions to generate
versions.Add("big", "maxwidth=768&maxheight=1024&format=jpg");
versions.Add("small", "maxwidth=240&maxheight=320&format=jpg");
versions.Add("tiny", "&maxheight=108&format=jpg");//maxwidth=81
//Generate each version
foreach (var suffix in versions.Keys)
{
upload.InputStream.Seek(0, SeekOrigin.Begin);
//Let the image builder add the correct extension based on the output file type
ImageBuilder.Current.Build(
new ImageJob(upload.InputStream,
String.Concat(path, suffix, i.ToString()),
new Instructions(versions[suffix]),
false, true));
}
}
i++;
}
}
}
}
catch (NullReferenceException) { }
return RedirectToAction("Details", new { id = pet.PetId });
}
else
{
ViewBag.DogBreeds = repository.DogBreeds;
return View(pet);
}
}
public ActionResult EditPetAjax(int id)
{
var pet = petsRepository.Get(id);
if (pet != null)
{
ViewBag.DogBreeds = repository.DogBreeds;
return PartialView(pet);
}
else return
RedirectToAction("Details", "Account", new { id = User.Identity.GetUserId<int>() });
}
[HttpPost]
public ActionResult EditPetAjax(Pet pet)
{
int id = User.Identity.GetUserId<int>();
if (ModelState.IsValid && pet.UserId == id)
{
petsRepository.Update(pet);
petsRepository.Save();
pet = petsRepository.Get(pet.PetId);
return PartialView("DetailsPartial", pet);
}
return PartialView(pet);
}
public ActionResult Create()
{
ViewBag.DogBreeds = repository.DogBreeds;
return View(new Pet());
}
[HttpPost]
public ActionResult Create(Pet pet)
{
if (ModelState.IsValid)
{
pet.UserId = User.Identity.GetUserId<int>();
petsRepository.Create(pet);
petsRepository.Save();
return View("List", petsRepository.Find(x=>x.Name==pet.Name));
}
else return View(pet);
}
public ActionResult GetImg(string id)
{
FileInfo file = new FileInfo(Server.MapPath("~/Avatars/default-dog-avatar.jpg"));
if (id != null)
{
string[] strs = id.Split(new char[] { '-' });
if (strs.Length == 2 && (new FileInfo(Server.MapPath(String.Concat("~/PetPhotos/", strs[0].Trim(), "/", strs[1], ".jpg").Trim()))).Exists)
{
file = new FileInfo(Server.MapPath(String.Concat("~/PetPhotos/", strs[0].Trim(), "/", strs[1], ".jpg").Trim()));
}
else
{
file = new FileInfo(Server.MapPath("~/Avatars/default-dog-avatar.jpg"));
}
}
if (file.Exists)
return File(file.FullName, "text/plain", file.Name);
else return Content("");
}
[Authorize]
[HttpPost]
public ActionResult DeletePhoto(DeletePhotoModel delPhModel)
{
int authUserId = User.Identity.GetUserId<int>();
if (delPhModel.WhoCanDeleteId == authUserId && delPhModel.OwnerId != 0 && delPhModel.PhotoNumber != 0)
{
DirectoryInfo di = new DirectoryInfo(Server.MapPath(String.Concat("~/PetPhotos/", delPhModel.OwnerId.ToString().Trim()).Trim()));
if (di.Exists)
{
foreach (var file in di.GetFiles())
{
int fotoNumberLenght = delPhModel.PhotoNumber.ToString().Length;
int fileNameLength = Path.GetFileNameWithoutExtension(file.Name).Length;
if (file.Name.Contains(delPhModel.PhotoNumber.ToString()) &&
(Path.GetFileNameWithoutExtension(file.Name).LastIndexOf(delPhModel.PhotoNumber.ToString()) == fileNameLength - fotoNumberLenght))
{
file.Delete();
}
}
if (di.GetFiles().Length == 0)
{
di.Delete();
var pet = petsRepository.Find(x => x.PetId == delPhModel.OwnerId).FirstOrDefault();
if (pet != null)
pet.HaveImages = false;
petsRepository.Save();
}
}
}
return null;
}
[Authorize]
public ActionResult Delete(int id)
{
var pet = petsRepository.Get(id);
int userid = User.Identity.GetUserId<int>();
if (pet != null && pet.UserId == userid)
{
petsRepository.Delete(id);
petsRepository.Save();
var path = Server.MapPath(String.Concat("~/PetsPhotos/", id.ToString().Trim(), "/"));
DirectoryInfo di = new DirectoryInfo(path);
if (di != null && di.Exists)
{
foreach (var file in di.GetFiles())
{
file.Delete();
}
di.Delete();
}
return RedirectToAction("List", "Advertizements");
}
else return RedirectToAction("DetailsPartial", "Account", new { id = userid });
}
private int GetMaxNumberInFileNames(string path)
{
Directory.CreateDirectory(path);
DirectoryInfo di = new DirectoryInfo(path);
Regex r = new Regex(@"\d+");
string ddd = di.GetFiles().Select(x => x.Name).FirstOrDefault();
Match teg;
int maxNumberInFileNames = 0;
foreach (string fileName in di.GetFiles().Select(x => x.Name))
{
teg = r.Match(fileName);
if (teg.Success && int.Parse(teg.ToString()) > maxNumberInFileNames)
maxNumberInFileNames = int.Parse(teg.ToString());
}
return maxNumberInFileNames;
}
private int GetMinNumberInFileNames(string path)
{
Directory.CreateDirectory(path);
DirectoryInfo di = new DirectoryInfo(path);
Regex r = new Regex(@"\d+");
string ddd = di.GetFiles().Select(x => x.Name).FirstOrDefault();
Match teg;
int minNumberInFileNames = int.MaxValue;
foreach (string fileName in di.GetFiles().Select(x => x.Name))
{
teg = r.Match(fileName);
if (teg.Success && int.Parse(teg.ToString()) < minNumberInFileNames)
minNumberInFileNames = int.Parse(teg.ToString());
}
return minNumberInFileNames == int.MaxValue ? 0: minNumberInFileNames;
}
private IEnumerable<int> GetPhotoNumberCollection(string path)
{
Directory.CreateDirectory(path);
DirectoryInfo di = new DirectoryInfo(path);
if (di.Exists && di.GetFiles().Length > 0)
{
Regex r = new Regex(@"\d+");
Match teg;
List<int> numbers = new List<int>();
foreach (string fileName in di.GetFiles().Select(x => x.Name))
{
teg = r.Match(fileName);
if (teg.Success && !(numbers.Contains(int.Parse(teg.ToString()))))
numbers.Add(int.Parse(teg.ToString()));
}
return numbers.Count > 0 ? numbers: null;
}
else return null;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MyPet.WebUI.Models.ViewModels;
using MyPet.Domain.Abstract;
using MyPet.Domain.Concrete;
using MyPet.Domain.Entities;
using System.Security.Claims;
using Microsoft.Owin.Security;
namespace MyPet.WebUI.Controllers
{
public class RegistrationController: Controller
{
private IRepository<User> userRepository;
public RegistrationController(IRepository<User> repo)
{
this.userRepository = repo;
}
// GET: Registration
public ActionResult New()
{
return View(new UserModel());
}
[HttpPost]
public ActionResult New(UserModel usermodel)
{
if (ModelState.IsValid)
{
User user = new User() { RoleId = 1, Email = usermodel.YourEmail, Password = usermodel.YourPassword };
Profile profile = new Profile() { FirstName = usermodel.FirstName, LastName = usermodel.LastName, Sex = usermodel.Sex };
user.Profile = profile;
userRepository.Create(user);
userRepository.Save();
int userId = userRepository.Find(x => x.Email == user.Email).FirstOrDefault().UserId;
User userDB = userRepository.Find(x => x.UserId == userId).FirstOrDefault();
this.Authorise(userDB);
return RedirectToAction("Details", "Account", new { id=userId});
}
return View(usermodel);
}
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
[ValidateAntiForgeryToken]
private void Authorise(User user)
{
ClaimsIdentity claim = new ClaimsIdentity("ApplicationCookie", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
claim.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.UserId.ToString(), ClaimValueTypes.String));
claim.AddClaim(new Claim(ClaimsIdentity.DefaultNameClaimType, user.Email, ClaimValueTypes.String));
claim.AddClaim(new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider",
"OWIN Provider", ClaimValueTypes.String));
if (user.Role != null)
claim.AddClaim(new Claim(ClaimsIdentity.DefaultRoleClaimType, user.Role.Name, ClaimValueTypes.String));
AuthenticationManager.SignOut();
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, claim);
}
// method to check that email does not exist in Database
public JsonResult CheckEmail(string YourEmail)
{
if (userRepository.GetAll().Where(m => m.Email == YourEmail).Count()!=0)
{
return Json("Пользователь с таким email уже зарегистрирован", JsonRequestBehavior.AllowGet);
}
else
{
return Json(true, JsonRequestBehavior.AllowGet);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MyPet.Domain.Abstract;
using MyPet.Domain.Entities;
using MyPet.WebUI.Models;
namespace MyRepetitor.WebUI.Controllers
{
public class ReviewController: Controller
{
// GET: Review
private IMyPetRepository repository;
private IRepository<Review> revRepository;
public ReviewController(IMyPetRepository repo, IRepository<Review> revrepo)
{
this.repository = repo;
this.revRepository = revrepo;
}
public ActionResult GetReviews(int id)
{
TempData["AdvertizementId"]=id;
return PartialView(revRepository.Find(x => x.AdvertizementId == id).OrderByDescending(x => x.DateAndTime));
}
[HttpPost]
[Authorize]
public PartialViewResult AddComment(Review review)
{
if (review.Text != null && review.AuthorId == User.Identity.GetUserId<int>())
{
review.DateAndTime = DateTime.Now;
revRepository.Create(review);
revRepository.Save();
var reviews = revRepository.Find(x => x.AdvertizementId == review.AdvertizementId).OrderBy(x => x.DateAndTime);
return PartialView("Comments", reviews);
}
return null;
}
}
}
using MyPet.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MyPet.Domain.Abstract;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using MyPet.WebUI.Models;
namespace MyPet.WebUI.Models
{
public enum SortWay
{
MaxDatesFirst,
MinDatesFirst,
MinPricesFirst,
MaxPricesFirst,
SortByRating
};
public class SearchInfo
{
//[HiddenInput(DisplayValue = false)]
public PagingInfo PagingInfo { get; set; }
public SearchInfo()
{
this.Categories = new List<AdvertizementCategory>();
this.DogBreeds = new List<DogBreed>();
this.Cities = new List<string>();
}
[Display(Name = "Спрос / предложение")]
public bool? IsDemand { get; set; }
[Display(Name = "Пол")]
public bool? Sex { get; set; }
[HiddenInput(DisplayValue = false)]
public decimal? PriceMin { get; set; }
[HiddenInput(DisplayValue = false)]
public decimal? PriceMax { get; set; }
[Display(Name = "С выездом на дом")]
public bool? IsWithDeparture { get; set; }
[Display(Name = "Период")]
public string Period { get; set; }
public DateTime? FromDate
{
get
{
if (this.Period == "за сегодня")
return DateTime.Now.AddDays(-1);
else if (this.Period == "за неделю")
return DateTime.Now.AddDays(-7);
else if (this.Period == "за месяц")
return DateTime.Now.AddMonths(-1);
else return null;
}
}
[Display(Name = "Категория объявления")]
public int? CategoryId { get; set; }
[Display(Name = "Порода")]
public int? DogBreedId { get; set; }
[Display(Name = "Город")]
public string City { get; set; }
[HiddenInput(DisplayValue = false)]
public SortWay WayToSort { get; set; }
public IEnumerable<AdvertizementCategory> Categories { get; set; }
public IEnumerable<DogBreed> DogBreeds { get; set; }
public IEnumerable<string> Cities { get; set; }
public IEnumerable<Advertizement> FilterAdvsWithoutPaging(IEnumerable<Advertizement> parentAdvs)
{
IEnumerable<Advertizement> advs = parentAdvs.Where((x) =>
{
if (this.CategoryId == null || this.CategoryId == 0)
return true;
else return x.CategoryId == this.CategoryId;
}).Where((x) =>
{
if (this.PriceMin == null || this.PriceMax == null)
return true;
else return (x.Price >= this.PriceMin) && (x.Price <= PriceMax);
}).Where((x) =>
{
if (this.DogBreedId == null)
return true;
else return x.DogBreedId == this.DogBreedId;
}).Where((x) =>
{
if (this.City == null)
return true;
else return x.City == this.City;
}).Where((x) =>
{
if (this.FromDate == null)
return true;
else return x.DateAndTime >= this.FromDate;
}).Where((x) =>
{
if (this.IsDemand == null)
return true;
else return x.IsDemand == this.IsDemand;
}).Where((x) =>
{
if (this.Sex == null)
return true;
else return x.Sex == this.Sex;
}).Where((x) =>
{
if (this.IsWithDeparture == null || this.IsWithDeparture == false)
return true;
else return x.IsWithDeparture == this.IsWithDeparture;
});
return advs;
}
public IEnumerable<Advertizement> FilterAdvs(IEnumerable<Advertizement> parentAdvs)
{
IEnumerable<Advertizement> advs = this.FilterAdvsWithoutPaging(parentAdvs);
this.PagingInfo.TotalItems = advs.Count();
if (this.WayToSort == SortWay.MaxDatesFirst)
return advs.OrderByDescending(x => x.DateAndTime).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);
if (this.WayToSort == SortWay.MinDatesFirst)
return advs.OrderBy(x => x.DateAndTime).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);
else if (this.WayToSort == SortWay.MinPricesFirst)
return advs.OrderBy(x => x.Price).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);
else if (this.WayToSort == SortWay.MaxPricesFirst)
return advs.OrderByDescending(x => x.Price).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);
else if (this.WayToSort == SortWay.SortByRating)
return advs.OrderByDescending(x => x.DateAndTime).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);
else return advs.OrderByDescending(x => x.DateAndTime).Skip((this.PagingInfo.CurrentPage - 1) * this.PagingInfo.ItemsPerPage).Take(this.PagingInfo.ItemsPerPage);
}
}
}
using System;
using System.Globalization;
using System.Security.Claims;
using System.Security.Principal;
namespace MyPet.WebUI.Models
{
public static class IdentityExtensions
{
public static T GetUserId<T>(this IIdentity identity) where T: IConvertible
{
if (identity == null)
{
throw new ArgumentNullException("identity");
}
var ci = identity as ClaimsIdentity;
if (ci != null)
{
var id = ci.FindFirst(ClaimTypes.NameIdentifier);
if (id != null)
{
return (T)Convert.ChangeType(id.Value, typeof(T), CultureInfo.InvariantCulture);
}
}
return default(T);
}
public static string GetUserRole(this IIdentity identity)
{
if (identity == null)
{
throw new ArgumentNullException("identity");
}
var ci = identity as ClaimsIdentity;
string role = "";
if (ci != null)
{
var id = ci.FindFirst(ClaimsIdentity.DefaultRoleClaimType);
if (id != null)
role = id.Value;
}
return role;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
namespace MyPet.WebUI.Models.ViewModels
{
public class UserModel
{
[Required(ErrorMessage="Поле 'e-mail' является обязательным для заполнения")]
[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Некорректный адрес")]
[System.Web.Mvc.Remote("CheckEmail", "Registration")]
[Display(Name = "Email")]
public string YourEmail { get; set; }
[Required(ErrorMessage = "Поле 'пароль' является обязательным для заполнения")]
//[DataType(DataType.Password)]
[StringLength(25, MinimumLength = 6, ErrorMessage="Пароль должен быть не менее 6 символов")]
[Display(Name = "Пароль")]
[UIHint("Password")]
public string YourPassword { get; set; }
[Compare("YourPassword", ErrorMessage = "Пароли не совпадают")]
//[DataType(DataType.Password)]
[Display(Name = "Подтвердите пароль")]
[UIHint("Password")]
public string YourPasswordConfirm { get; set; }
[Display(Name="Имя")]
[Required(ErrorMessage = "Поле 'Имя' является обязательным для заполнения")]
[StringLength(25, MinimumLength = 2, ErrorMessage = "Поле 'Имя' слишком короткое")]
public string FirstName { get; set; }
[StringLength(25, MinimumLength = 2, ErrorMessage = "Поле 'Фамилия' слишком короткое")]
[Display(Name = "Фамилия")]
[Required(ErrorMessage = "Поле 'Фамилия' является обязательным для заполнения")]
public string LastName { get; set; }
[Display(Name = "Пол")]
public bool Sex { get; set; }
[Range(typeof(bool), "true", "true", ErrorMessage="Ознакомьтесь и согласитесь с условиями")]
public bool Accept { get; set; }
}
}
Приложение Б
Трассировочная таблица
Таблица Б - Трассировочная таблица
№ |
Пользовательское требование |
№ |
Функция системы |
Вариант использования |
|
1 |
Регистрация |
1.1 1.2 1.3 1.4 |
Ввод личных данных Ввод e-mail Ввод пароля Подтверждение пароля |
Ввод личных данных Ввод e-mail Ввод пароля Подтверждение пароля |
|
2 |
Авторизация |
2.1 2.2 |
Ввод электронного адреса Ввод пароля |
Ввод электронного адреса Ввод пароля |
|
3 |
Работа с персональными данными |
3.1 3.2 |
Просмотр личных данных Редактирование и сохранение данных |
Просмотр личных данных Редактирование и сохранение данных |
|
4 |
Работа с питомцами |
4.1 4.2 4.34.4 |
Просмотр данных о питомцах Редактирование и сохранение данных о питомцах Добавление питомца Удаление питомца |
Просмотр данных о питомцах Редактирование и сохранение данных о питомцах Добавление питомца Удаление питомца |
|
5 |
Работа с личными объявлениями |
5.1 5.2 5.3 5.4 5.5 |
Просмотр данных объявлений Редактирование и сохранение данных объявлений Добавление объявления Удаление объявления Просмотр отзывов |
Просмотр данных объявлений Редактирование и сохранение данных объявлений Добавление объявления Удаление объявления Просмотр отзывов |
|
6 |
Работа с сообщениями |
6.1 6.2 6.3 |
Просмотр списка диалогов Отправка сообщения Получение сообщения |
Просмотр списка диалогов Отправка сообщения Получение сообщения |
|
7 |
Поиск объявлений по фильтрам |
7.1 7.2 7.3 |
Задание фильтров Выбор способа сортировки «Сортировать по» Поиск подходящих объявлений |
Задание фильтров Выбор способа сортировки «Сортировать по» Поиск подходящих объявлений |
|
8 |
Просмотр результатов поиска |
8.1 8.2 8.3 8.4 |
Просмотр карты с метками объявлений Просмотр информации об объявлении Оставление отзыва и оценки объявлению Отправка сообщения автору объявления |
Просмотр карты с метками объявлений Просмотр информации об объявлении Оставление отзыва и оценки объявлению Отправка сообщения автору объявления |
Размещено на Allbest.ru
Подобные документы
Сравнение показателей ресурсов cenotavr.by и petonik.com. Редактирование объявлений, задание критериев отбора объявлений по фильтрам. Разработка проекта программного обеспечения для сайта услуг для животных, алгоритм редактирования и удаления питомца.
дипломная работа [2,8 M], добавлен 09.07.2017Цели и задачи фирм по обмену и продаже жилья, основные моменты работы фирмы для создания системы автоматизации учёта данных о заявках и клиентах. Функциональная модель приложения, разработка инфологической модели и создание реляционной структуры.
курсовая работа [389,8 K], добавлен 20.03.2012Программные средства, которые помогают манипулировать и управлять данными. Приемы создания и редактирования баз данных в СУБД MySQL. Способы и средства доступа и манипулирования данными. Создание, удаление, редактирование таблиц данных и их элементов.
практическая работа [1,2 M], добавлен 14.03.2013Анализ предметной области. Проектирование и разработка базы данных и интерфейса в виде набора Web-страниц для отображения, создания, удаления и редактирования записей базы данных. Аппаратное и программное обеспечение системы. Алгоритм работы программы.
курсовая работа [3,0 M], добавлен 12.01.2016Особенность формирования реляционной модели данных. Создание таблиц в программе. Характеристика разработки web-интерфейса. Анализ вывода информации о каждом сотруднике. Образование листинга программных кодов. Суть удаления и редактирования извещений.
курсовая работа [621,5 K], добавлен 14.01.2018Изучение областей использования вычислительной техники, истории систем управления данными во внешней памяти. Анализ разработки ряда стандартов в рамках языков описания и манипулирования данными. Обзор технологий по обмену данными между различными СУБД.
презентация [263,2 K], добавлен 30.05.2012Проектирование концептуальной, логической и физической модели базы данных. Формирование сущностей и связей между ними. Создание форм с функциями добавления, редактирования, удаления, поиска, печати. Разработка клиентской части БД с помощью среды Lazarus.
курсовая работа [1,3 M], добавлен 05.04.2015Разработка программного продукта - базы данных "Экскурсия" в интегрированной среде программирования C++ Builder 6. Определение порядка просмотра данных базы, их редактирования и удаления. Особенности руководства пользователя и общего интерфейса программы.
курсовая работа [2,4 M], добавлен 03.11.2013Средства организации блогов, разновидности CMS используемых для разработки и сопровождения блогов, их достоинства и недостатки. Общий алгоритм работы программного средства и алгоритмы работы с данными. Программное конструирование индивидуальных блогов.
дипломная работа [3,6 M], добавлен 10.07.2012Требования к аппаратным и операционным ресурсам. Логическая и физическая организация. Состав основных классов проекта. Технико-экономическое обоснование разработки программного средства. Задержки при обработке данных. Разработка интерфейса приложения.
дипломная работа [4,4 M], добавлен 16.06.2017