public virtual ActionResult UserWidgetHover(int userid) { User user = _aService.GetUser(userid, "Profile"); UserHoverViewModel model = new UserHoverViewModel(); model = Mapper.Map <User, UserHoverViewModel>(user); model.FollowStatus = user.Followers.Count(t => t.Id == User.Identity.GetUserId <int>()) > 0; UserFriendship friendship1 = user.PassiveRelationship.Where(r => r.UserId == User.Identity.GetUserId <int>()).FirstOrDefault(); UserFriendship friendship2 = user.ActiveRelationships.Where(r => r.TargetUserId == User.Identity.GetUserId <int>()).FirstOrDefault(); if (friendship1 != default(UserFriendship)) { switch (friendship1.Status) { case RelationshipEnum.Requesting: model.RequestStatus = FriendStatusEnum.ActiveRequesting; break; case RelationshipEnum.Friend: model.RequestStatus = FriendStatusEnum.Friend; break; case RelationshipEnum.Blocked: model.RequestStatus = FriendStatusEnum.Blocked; break; default: model.RequestStatus = FriendStatusEnum.Stranger; break; } } else if (friendship2 != default(UserFriendship)) { switch (friendship2.Status) { case RelationshipEnum.Requesting: model.RequestStatus = FriendStatusEnum.PasssiveRequesting; break; case RelationshipEnum.Friend: model.RequestStatus = FriendStatusEnum.Friend; break; case RelationshipEnum.Blocked: model.RequestStatus = FriendStatusEnum.Blocked; break; default: model.RequestStatus = FriendStatusEnum.Stranger; break; } } else { model.RequestStatus = FriendStatusEnum.Stranger; } return(PartialView("Widgets/_UserHoverWidget", model)); }
public async Task <JsonResult> Hover(int userId, string username, string userAppId) { if (!Request.ContentType.Contains("json")) { Response.StatusCode = (int)HttpStatusCode.BadRequest; return(Json(new { success = false, message = "Bad request type." })); } using (var db = new ZapContext()) { int hoverUserId = userId; // take from parameter passed var callingUserAppId = User.Identity.GetUserId(); var usernameClean = username.Trim(); // If a username was provided - use it in search, otherwise don't use. This is built as a separate query // here to reduce the sql query payload. IQueryable <User> uiq; if (hoverUserId > 0) { uiq = db.Users .Where(u => u.Id == hoverUserId); } else if (userAppId != null) { uiq = db.Users .Where(u => u.AppId == userAppId); } else if (!String.IsNullOrEmpty(username)) { uiq = db.Users .Where(u => u.Name == usernameClean); } else { Response.StatusCode = (int)HttpStatusCode.BadRequest; return(Json(new { success = false, message = "Invalid parameters" })); } var userInfo = await uiq .Select(u => new { u.Id, u.AppId, u.Name, u.Reputation, u.ProfileImage.Version, u.IsOnline, IsFollowed = callingUserAppId == null ? false : u.Followers.Select(f => f.AppId).Contains(callingUserAppId), }) .FirstOrDefaultAsync().ConfigureAwait(true); if (userInfo == null) { Response.StatusCode = (int)HttpStatusCode.NotFound; return(Json(new { success = false, message = "User not found." })); } UserHoverViewModel vm = new UserHoverViewModel() { UserId = userInfo.Id, AppId = userInfo.AppId, Name = userInfo.Name, Reputation = userInfo.Reputation, ProfileImageVersion = userInfo.Version, IsFollowing = userInfo.IsFollowed, IsIgnored = false, // TODO? IsOnline = userInfo.IsOnline, IsSelf = userInfo.AppId == callingUserAppId, }; string HTMLString = RenderPartialViewToString("_PartialUserHover", model: vm); return(Json(new { success = true, HTMLString })); } }