public async Task <ActionResult> EditUserLink(LinkVM linkVM) { using (ChekitDB chekitDB = new ChekitDB()) { LinkDTO linkDTO = await chekitDB.Links.FirstOrDefaultAsync(x => x.LinkID == linkVM.LinkID); linkDTO.LinkName = linkVM.LinkName; if (linkVM.PublicStatus == false) { linkDTO.PublicStatus = false; } else { linkDTO.PublicStatus = linkVM.PublicStatus; } linkDTO.LinkDescription = linkVM.LinkDescription; await chekitDB.SaveChangesAsync(); TempData["OK"] = "Закладка отредактирована"; return(RedirectToAction("LinkInfo", new { id = linkVM.LinkID })); } }
public async Task <ActionResult> EditPassword(ProfileVM profileVM, string oldPass) { using (var profile = new ChekitDB()) { var modelDTO = new ProfileDTO() { UsersProfileDTO = await profile.Users.FirstOrDefaultAsync(x => x.UserId == profileVM.UserInfo.UserId) }; if (oldPass != modelDTO.UsersProfileDTO.Password) { ModelState.AddModelError("oldPassError", "Старый пароль указан не верно"); return(View(profileVM)); } modelDTO.UsersProfileDTO.Password = profileVM.UserInfo.Password; await profile.SaveChangesAsync(); TempData["OK"] = "Пароль успешно изменен"; return(RedirectToAction("Index")); } }
//добавление ключевого слова public async Task <ActionResult> AddBlackListSite(string banWord) { ProfileVM profileVM = new ProfileVM(); using (var profile = new ChekitDB()) { BannedSiteDTO bannedSiteDTO = new BannedSiteDTO() { SiteLink = banWord }; profile.BannedSiteDTO.Add(bannedSiteDTO); await profile.SaveChangesAsync(); var modelDTO = new ProfileDTO() { BannedSiteListDTO = await profile.BannedSiteDTO.ToListAsync() }; TempData["OK"] = "Имя ресурса добавлено"; profileVM.BannedSiteVM = modelDTO.BannedSiteListDTO.OrderBy(x => x.SiteId).Select(x => new BannedSiteVM(x)).ToList(); return(RedirectToAction("SiteBlackList")); } }
//переименовываем выбранную категорию public async Task <ActionResult> RenameCategory(ProfileVM profileVM, int catId, string catName) { using (var profile = new ChekitDB()) { var modelDTO = new ProfileDTO() { UserCategoryDTO = await profile.Categories.FirstOrDefaultAsync(x => x.CategoryId == catId), LinkListUserProfileDTO = await profile.Links.ToListAsync() }; //и вместе с ней переименовываем закладки в этой категории foreach (var item in modelDTO.LinkListUserProfileDTO.Where(x => x.LinkCategoryId == catId).ToList()) { item.LinkCategory = catName; } modelDTO.UserCategoryDTO.CategoryName = catName; await profile.SaveChangesAsync(); } TempData["OK"] = "Имя категории успешно изменено"; return(RedirectToAction("EditUserCategory", new { id = profileVM.UserInfo.UserId })); }
//админ может удалить любую закладку public async Task <ActionResult> DeleteLink(int id) { using (ChekitDB chekitDB = new ChekitDB()) { LinkDTO linkDTO = await chekitDB.Links.FindAsync(id); chekitDB.Links.Remove(linkDTO); await chekitDB.SaveChangesAsync(); } TempData["OK"] = "Закладка удалена"; return(RedirectToAction("Index")); }
//удаление категории public async Task <ActionResult> DeleteCategory(ProfileVM profileVM, int deleteCatId) { using (var profile = new ChekitDB()) { var modelDTO = new ProfileDTO() { UsersProfileDTO = await profile.Users.FirstOrDefaultAsync(x => x.UserId == profileVM.UserInfo.UserId), UserCategoryDTO = await profile.Categories.FirstOrDefaultAsync(x => x.CategoryId == deleteCatId), LinkListUserProfileDTO = await profile.Links.ToListAsync() }; if (modelDTO.LinkListUserProfileDTO.Where(x => x.LinkCategoryId == deleteCatId).Any()) { foreach (var item in modelDTO.LinkListUserProfileDTO.Where(x => x.LinkCategoryId == deleteCatId).ToList()) { profile.Links.Remove(item); //уменьшаем кол-во ссылок юзера modelDTO.UsersProfileDTO.LinksCount -= 1; string linkAvatar = Request.MapPath("~/Screenshots/Uploads/LinkAvatars/" + $"{item.LinkID.ToString()}/" + item.LinkPicture); string linkDirectory = Request.MapPath("~/Screenshots/Uploads/LinkAvatars/" + item.LinkID.ToString()); if (System.IO.File.Exists(linkAvatar)) { System.IO.File.Delete(linkAvatar); //удаляем скриншот Directory.Delete(linkDirectory); //удаляем папку } else//если скриншота нет, то удаляем только директорию { Directory.Delete(linkDirectory); } } } profile.Categories.Remove(modelDTO.UserCategoryDTO); await profile.SaveChangesAsync(); } TempData["OK"] = "Категория и её ссылки удалены"; return(RedirectToAction("EditUserCategory", new { id = profileVM.UserInfo.UserId })); }
public async Task <ActionResult> EditUser(UserProfileVM userVM, HttpPostedFileBase file) { int userId = userVM.UserId; if (!ModelState.IsValid) { return(View("Error")); } using (ChekitDB chekitDB = new ChekitDB()) { if (await chekitDB.Users.Where(x => x.UserId != userVM.UserId).AnyAsync(x => x.Login == userVM.Login)) { ModelState.AddModelError("loginmatch", $"Логин {userVM.Login} занят"); return(View(userVM)); } else if (await chekitDB.Users.Where(x => x.UserId != userVM.UserId).AnyAsync(x => x.Email == userVM.Email)) { ModelState.AddModelError("emailmatch", $"Email {userVM.Email} занят"); return(View(userVM)); } } using (ChekitDB chekitDB = new ChekitDB()) { UsersDTO usersDTO = await chekitDB.Users.FindAsync(userId); usersDTO.Login = userVM.Login; usersDTO.Email = userVM.Email; usersDTO.Password = usersDTO.Password; usersDTO.AvatarName = userVM.AvatarName; await chekitDB.SaveChangesAsync(); } TempData["OK"] = "Профиль отредактирован"; #region Image Upload if (file != null && file.ContentLength > 0) { string extension = file.ContentType.ToLower(); string[] extensions = { "image/jpg", "image/jpeg", "image/gif", "image/png" }; int counter = 0; //Проверяем расширение файла foreach (var item in extensions) { if (extension != item) { counter++; if (counter == extensions.Length) { using (ChekitDB chekitDB = new ChekitDB()) { ModelState.AddModelError("", "Изображение не было загружено - неправильный формат изображения"); return(View(userVM)); } } } } var originalDirectory = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Avatars\\Uploads")); var pathString1 = Path.Combine(originalDirectory.ToString(), "UserAvatars\\" + userId.ToString()); var pathString2 = Path.Combine(originalDirectory.ToString(), "UserAvatars\\" + userId.ToString() + "\\Thumbs"); DirectoryInfo directoryInfo1 = new DirectoryInfo(pathString1); DirectoryInfo directoryInfo2 = new DirectoryInfo(pathString2); foreach (var item in directoryInfo1.GetFiles()) { item.Delete(); } foreach (var item in directoryInfo2.GetFiles()) { item.Delete(); } string avatarName = file.FileName; using (ChekitDB chekitDB = new ChekitDB()) { UsersDTO usersDTO = await chekitDB.Users.FindAsync(userId); usersDTO.AvatarName = avatarName; await chekitDB.SaveChangesAsync(); } var pathOriginalAvatar = string.Format($"{pathString1}\\{avatarName}"); var pathLittleAvatar = string.Format($"{pathString2}\\{avatarName}"); file.SaveAs(pathOriginalAvatar); WebImage littleAvatar = new WebImage(file.InputStream); littleAvatar.Resize(150, 150); littleAvatar.Save(pathLittleAvatar); } #endregion return(RedirectToAction("Index")); }
public async Task <ActionResult> CreateAdminUser(UserVM userVM, HttpPostedFileBase file) { if (!ModelState.IsValid) { return(View(userVM)); } int idForAvatar = 0; using (ChekitDB chekitDB = new ChekitDB()) { if (await chekitDB.Users.AnyAsync(x => x.Login == userVM.Login)) { ModelState.AddModelError("loginmatch", $"Логин {userVM.Login} занят"); return(View(userVM)); } else if (await chekitDB.Users.AnyAsync(x => x.Email == userVM.Email)) { ModelState.AddModelError("emailmatch", $"Email {userVM.Email} занят"); return(View(userVM)); } UsersDTO usersDTO = new UsersDTO(); usersDTO.Login = userVM.Login; usersDTO.Email = userVM.Email; usersDTO.Password = userVM.Password; usersDTO.BanStatus = false; usersDTO.LinksCount = 0; usersDTO.Role = "Админ"; chekitDB.Users.Add(usersDTO); await chekitDB.SaveChangesAsync(); int id = usersDTO.UserId; int roleId = 1; UserRoleDTO userRole = new UserRoleDTO() { UserId = id, RoleId = roleId }; chekitDB.UserRoles.Add(userRole); await chekitDB.SaveChangesAsync(); idForAvatar = usersDTO.UserId; } TempData["OK"] = "Админ создан"; #region UploadAvatar var originalDirectory = new DirectoryInfo(string.Format($"{Server.MapPath(@"\")}Avatars\\Uploads")); var pathString1 = Path.Combine(originalDirectory.ToString(), "UserAvatars"); var pathString2 = Path.Combine(originalDirectory.ToString(), "UserAvatars\\" + idForAvatar.ToString()); var pathString3 = Path.Combine(originalDirectory.ToString(), "UserAvatars\\" + idForAvatar.ToString() + "\\Thumbs"); var pathString4 = Path.Combine(originalDirectory.ToString(), "UserAvatars\\" + idForAvatar.ToString() + "\\Gallery"); var pathString5 = Path.Combine(originalDirectory.ToString(), "UserAvatars\\" + idForAvatar.ToString() + "\\Gallery\\Thumbs"); if (!Directory.Exists(pathString1)) { Directory.CreateDirectory(pathString1); } if (!Directory.Exists(pathString2)) { Directory.CreateDirectory(pathString2); } if (!Directory.Exists(pathString3)) { Directory.CreateDirectory(pathString3); } if (!Directory.Exists(pathString4)) { Directory.CreateDirectory(pathString4); } if (!Directory.Exists(pathString5)) { Directory.CreateDirectory(pathString5); } string[] extensions = { "image/jpg", "image/jpeg", "image/gif", "image/png" }; if (file != null && file.ContentLength > 0) { string extension = file.ContentType.ToLower(); int counter = 0; foreach (var item in extensions) { if (extension != item) { counter++; if (counter == extensions.Length) { ModelState.AddModelError("errorFormat", "Неправильный формат файла"); return(View(userVM)); } } } string avatarName = file.FileName; using (ChekitDB chekitDB = new ChekitDB()) { UsersDTO usersDTO = await chekitDB.Users.FindAsync(idForAvatar); usersDTO.AvatarName = avatarName; await chekitDB.SaveChangesAsync(); } var pathOriginalAvatar = string.Format($"{pathString2}\\{avatarName}"); var pathLittleAvatar = string.Format($"{pathString3}\\{avatarName}"); file.SaveAs(pathOriginalAvatar); WebImage littleAvatar = new WebImage(file.InputStream); littleAvatar.Resize(150, 150); littleAvatar.Save(pathLittleAvatar); } #endregion return(RedirectToAction("Index")); }
//удаление юзера public async Task <ActionResult> DeleteUser(int id) { using (ChekitDB chekitDB = new ChekitDB()) { //находим юзера UsersDTO usersDTO = await chekitDB.Users.FirstOrDefaultAsync(x => x.UserId == id); //готовим список закладок List <LinkDTO> linkDTO = await chekitDB.Links.ToListAsync(); //кнопка удалить у админа имеет статус disabled. Если вручную в браузере убрать этот статус, то программа удалит админа //а это дополнительная защита, так сказать, от дурака if (usersDTO.Role == "Админ") { TempData["Error"] = "Администратора нельзя удалить"; return(RedirectToAction("Index")); } //удаляю папку и аватар юзера string avatarUserDirectory = Request.MapPath("~/Avatars/Uploads/UserAvatars/" + $"{ id.ToString()}"); string avatarUserImg = Request.MapPath("~/Avatars/Uploads/UserAvatars/" + $"{id.ToString()}/" + usersDTO.AvatarName); if (System.IO.File.Exists(avatarUserImg)) { System.IO.File.Delete(avatarUserImg); Directory.Delete(avatarUserDirectory); } else//если аватар не был загружен, удаляем директорию { Directory.Delete(avatarUserDirectory); } //подготавливаем список закладок юзера для удаления List <LinkVM> userLinks = linkDTO.Where(x => x.UserAuthorId == usersDTO.UserId).Select(x => new LinkVM(x)).ToList(); foreach (var item in userLinks) { //находим директорию скриншота закладки string directoryImg = Request.MapPath("~/Screenshots/Uploads/LinkAvatars/" + $"{item.LinkPicture.Substring(0, item.LinkPicture.IndexOf('.'))}"); //аналогично с самим скриншотом string pathImg = Request.MapPath("~/Screenshots/Uploads/LinkAvatars/" + $"{item.LinkPicture.Substring(0, item.LinkPicture.IndexOf('.'))}/" + item.LinkPicture); if (System.IO.File.Exists(pathImg)) //проверяем есть ли скриншот { System.IO.File.Delete(pathImg); //удаляем скриншот Directory.Delete(directoryImg); //удаляем папку } //удаляем закладки chekitDB.Links.Remove(linkDTO.FirstOrDefault(x => x.LinkID == item.LinkID)); } //удаляем юзера chekitDB.Users.Remove(usersDTO); //сохраняем изменения await chekitDB.SaveChangesAsync(); } TempData["OK"] = "Пользователь удален"; return(RedirectToAction("Index")); }