public async Task <string> Create(string stock) { using (db = new testEntities()) { if (StockRealTimeTicker.CheckExistStock(stock)) { ApplicationUser currentUser = await UserManager.FindByIdAsync(User.Identity.GetUserId()); var followrStockByUser = await db.FollowStocks.FirstOrDefaultAsync(f => f.UserId == currentUser.UserExtentLogin.Id && f.StockFollowed == stock); if (followrStockByUser == null) { var stockfollow = new FollowStock { UserId = currentUser.UserExtentLogin.Id, StockFollowed = stock, CreatedDate = DateTime.Now }; db.FollowStocks.Add(stockfollow); await db.SaveChangesAsync(); return("A"); } else { db.FollowStocks.Remove(followrStockByUser); await db.SaveChangesAsync(); return("R"); } } else { return("E"); } } }
public async Task <string> CreateUserFollow(int userid) { using (db = new testEntities()) { ApplicationUser userLogin = await UserManager.FindByIdAsync(User.Identity.GetUserId()); var checkUser = await db.FollowUsers.FirstOrDefaultAsync(f => f.UserId == userLogin.UserExtentLogin.Id && f.UserIdFollowed == userid); if (checkUser == null) { var followUser = new FollowUser { UserId = userLogin.UserExtentLogin.Id, UserIdFollowed = userid, CreatedDate = DateTime.Now }; db.FollowUsers.Add(followUser); await db.SaveChangesAsync(); return("A"); } else { db.FollowUsers.Remove(checkUser); await db.SaveChangesAsync(); return("R"); } } }
public async Task <ActionResult> Edit([Bind(Include = "ID,UserId,StockFollowed,CreatedDate")] FollowStock followstock) { if (ModelState.IsValid) { db.Entry(followstock).State = EntityState.Modified; await db.SaveChangesAsync(); return(RedirectToAction("Index")); } ViewBag.UserId = new SelectList(db.UserLogins, "Id", "KeyLogin", followstock.UserId); return(View(followstock)); }
///////////////////////////////////////////////////// profile //reply ///////////////////////////////////////////////////// public async Task AddReply(PostComment postcomment, string stockCurrent, int currentUserId, string userName, string avataImageUrl, long postid) { #region format message string messagedefault = ""; messagedefault = postcomment.Message; List <string> listMessege = postcomment.Message.Split(' ').ToList(); string messageFromatHTML = ""; foreach (var item in listMessege) { if (item.Contains("$") || item.Contains("@")) { messageFromatHTML += "<b>" + item + "</b>" + " "; } else if (item.Contains("http") || item.Contains("www.")) { messageFromatHTML += "<a target='_blank' href='" + item + "'>[LINK]</a>" + " "; } else { messageFromatHTML += item + " "; } } postcomment.Message = messageFromatHTML; postcomment.PostedDate = DateTime.Now; postcomment.PostedBy = postid; postcomment.CommentBy = currentUserId; #endregion var listStock = new List <string>(); listStock.Add(stockCurrent.ToUpper()); #region explan this passing messege to stockcode and username list //List<string> listMessegeSplit = messagedefault.Split(' ').ToList().FindAll(p => p.Contains("$") || p.Contains("@")); #endregion using (testEntities db = new testEntities()) { db.PostComments.Add(postcomment); await db.SaveChangesAsync(); var ret = new { ReplyMessage = postcomment.Message, //PostedBy = post.PostedBy, ReplyByName = userName, ReplyByAvatar = "/" + avataImageUrl.Replace("amp;", ""), ReplyDate = postcomment.PostedDate, ReplyId = postcomment.PostCommentsId }; await Clients.Client(Context.ConnectionId).addReply(ret); await Clients.OthersInGroups(listStock).newReplyNoti(1, postid); } }
public async Task <ActionResult> Create([Bind(Include = "PostId,Message,ChartImageURL,NhanDinh,Vir")] Post post) { if (ModelState.IsValid) { if (!User.Identity.IsAuthenticated) { return(RedirectToAction("Login", "Account")); } var currentUser = await UserManager.FindByIdAsync(User.Identity.GetUserId()); post.PostedBy = currentUser.UserExtentLogin.Id; post.PostedDate = DateTime.Now; db.Posts.Add(post); await db.SaveChangesAsync(); return(RedirectToAction("Index")); } return(View(post)); }
public async Task ChangeStatusMessege(string userid) { var listUpdate = await db.NotificationMesseges.Where(nm => nm.UserLogin1.UserNameCopy == User.Identity.Name && nm.XemYN == true).ToListAsync(); if (listUpdate.Count > 0) { foreach (var item in listUpdate) { item.NumNoti = 0; item.XemYN = false; db.Entry(item).State = EntityState.Modified; } await db.SaveChangesAsync(); } }
public async Task <ActionResult> confirm_password_reset(ResetPassConfirm model) { if (ModelState.IsValid) { using (db = new testEntities()) { var userReset = await db.UserLogExtents.FirstOrDefaultAsync(ul => ul.TokenResetPass == model.Token && ul.TimeResetExpire > DateTime.Now && ul.IsReset == false); if (userReset != null) { // reset password ApplicationDbContext context = new ApplicationDbContext(); UserStore <ApplicationUser> store = new UserStore <ApplicationUser>(context); String hashedNewPassword = UserManager.PasswordHasher.HashPassword(model.NewPassword); ApplicationUser cUser = await store.FindByIdAsync(userReset.UserId); // update token userReset.TimeResetExpire = DateTime.Now; userReset.IsReset = true; userReset.TokenResetPass = ""; try { // reset success await store.SetPasswordHashAsync(cUser, hashedNewPassword); await store.UpdateAsync(cUser); db.Entry(userReset).State = EntityState.Modified; await db.SaveChangesAsync(); return(RedirectToAction("password_reset_result", new { Message = ManageMessageId.SetPasswordSuccess })); } catch (Exception) { // error log return(RedirectToAction("password_reset_result", new { Message = ManageMessageId.Error })); } } else { // thong bao, token expire return(RedirectToAction("password_reset_result", new { Message = ManageMessageId.Error })); } } } return(View()); }
public async Task AddNewLike(long postid) { using (db = new testEntities()) { var postFind = await db.Posts.FirstOrDefaultAsync(p => p.PostId == postid); if (postFind != null) { postFind.SumLike = postFind.SumLike + 1; try { db.Entry(postFind).State = EntityState.Modified; await db.SaveChangesAsync(); } catch (Exception) { //throw; } await Clients.All.addNewLike(postid); } } }
/* * public void GetPosts(string stockCurrent) * { * //var fjdsf = WebSecurity.CurrentUserId; * using (testEntities db = new testEntities()) * { * var ret = (from stockRelate in db.StockRelates.ToList() * where stockRelate.StockCodeRelate == stockCurrent * orderby stockRelate.Post.PostedDate descending * select new * { * Message = stockRelate.Post.Message, * //PostedBy = stockRelate.Post.PostedDate, * PostedByName = stockRelate.Post.UserLogin.UserNameCopy, * PostedByAvatar = string.IsNullOrEmpty(stockRelate.Post.UserLogin.AvataImage) ? ImageURLAvataDefault : ImageURLAvata + stockRelate.Post.UserLogin.AvataImage + "?width=46&height=46&mode=crop", * PostedDate = stockRelate.Post.PostedDate, * PostId = stockRelate.PostId, * StockPrimary = stockRelate.Post.StockPrimary * }).Take(10).ToArray(); * //var listStock = new List<string>(); * * Clients.Client(Context.ConnectionId).loadPosts(ret); * * } * }*/ public async Task AddPost(Post post, string stockCurrent, int currentUserId, string userName, string avataImageUrl, int nhanDinh) { #region format message string messagedefault = ""; messagedefault = post.Message; List <string> listMessege = post.Message.Split(' ').ToList(); string messageFromatHTML = ""; foreach (var item in listMessege) { if (item.Contains("$") || item.Contains("@")) { messageFromatHTML += "<b>" + item + "</b>" + " "; } else if (item.Contains("http") || item.Contains("www.")) { messageFromatHTML += "<a target='_blank' href='" + item + "'>[LINK]</a>" + " "; } else { messageFromatHTML += item + " "; } } if (nhanDinh == -1) { messageFromatHTML += " <span class='sentiment bullishs'>Giảm</span>"; } else if (nhanDinh == 0) { messageFromatHTML += " <span class='sentiment Normals'>Đứng</span>"; } else { messageFromatHTML += " <span class='sentiment bearishs'>Tăng</span>"; } #endregion //messageFromatHTML += "</a>"; post.Message = messageFromatHTML; post.PostedBy = currentUserId; post.PostedDate = DateTime.Now; post.StockPrimary = stockCurrent; var listStock = new List <string>(); #region explan this passing messege to stockcode and username list List <string> listMessegeSplit = messagedefault.Split(' ').ToList().FindAll(p => p.Contains("$") || p.Contains("@")); #endregion using (testEntities db = new testEntities()) { db.Posts.Add(post); /* co phieu dau tien la chinh no */ if (stockCurrent != "KEYMYPROFILE") { StockRelate stockRelateFirst = new StockRelate(); stockRelateFirst.PostId = post.PostId; stockRelateFirst.StockCodeRelate = stockCurrent; db.StockRelates.Add(stockRelateFirst); // add to database listStock.Add(stockCurrent.ToUpper()); // group of hub for client } /* END */ //db.Posts.Add(post); /* add post with stockrelate list */ foreach (var item in listMessegeSplit) { if (item.Contains("$") && !item.Contains(stockCurrent)) // find the stock with $ { string stockcode = item.Replace("$", "").ToUpper(); StockRelate stockRelateLasts = new StockRelate(); stockRelateLasts.PostId = post.PostId; stockRelateLasts.StockCodeRelate = stockcode; db.StockRelates.Add(stockRelateLasts); // add to database listStock.Add(stockcode); // group of hub for client } else //find the user with @ { // code later } } /* add stockrelate */ await db.SaveChangesAsync(); var ret = new { Message = post.Message, //PostedBy = post.PostedBy, PostedByName = userName, PostedByAvatar = "/" + avataImageUrl.Replace("amp;", ""), PostedDate = post.PostedDate, PostId = post.PostId, StockPrimary = post.StockPrimary }; await Clients.Groups(listStock).addPost(ret); } }
public async Task <string> AddPost(Post post, byte nhanDinh, string chartImage, long?userpageid) { using (db = new testEntities()) { #region user login string resultString = string.Empty; // get info login (Lấy thông tin đăng nhập) var userlogin = await(from ul in db.UserLogins where ul.UserNameCopy == Context.User.Identity.Name select new { ul.Id, ul.BrokerVIP, ul.UserNameCopy, ul.AvataImage, ul.DisableUser }).FirstOrDefaultAsync(); if (userlogin == null || userlogin.DisableUser == true) // user khong tim thay hoac bi disable { return(resultString = "L"); // user is disable } #endregion #region format message string messagedefault = ""; string stockTag = ""; // dinh dang stock|stock|stock de tim co phieu lien quan messagedefault = post.Message; string[] listMessege = post.Message.Replace("\n", " <br> ").Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); string messageFromatHTML = ""; foreach (var item in listMessege) { if (item.Length > 0 && item.Length < 2000) { if (item.IndexOf("$", 0, 1) != -1) // tag ma co phieu { string ticker = item.RemoveSpecialString().ToUpper(); //item.Replace("$", "").Replace(",", "").Replace(".", "").Replace("!", "").Replace("?", "").Trim().ToUpper(); messageFromatHTML += "<b><a onclick=selectMe(event,\"#\") target='_blank' href='/ticker/" + ticker + "'>" + item + "</a></b>" + " "; } else if (item.IndexOf("@", 0, 1) != -1) // tag nguoi dung { string user = item.RemoveSpecialString().ToLower(); messageFromatHTML += "<a onclick=selectMe(event,\"#\") target='_blank' href='/" + user + "'>" + item + "</a>" + " "; } else if ((item.Contains("http") || item.Contains("www.")) && item.Length >= 4) { if (item.IndexOf("http", 0, 4) != -1 || item.IndexOf("www.", 0, 4) != -1) { URLTiny tu = new URLTiny(); tu.URLName = item; tu.PostedDate = DateTime.Now; dbtinyURL.URLTinies.Add(tu); try { await dbtinyURL.SaveChangesAsync(); } catch (Exception) { // log } messageFromatHTML += "Nguồn tại <a onclick=selectMe(event,\"#\") target='_blank' href='" + hostURL + "/" + tu.Id + "'>" + AppHelper.GetDomain(item) + "...</a>" + " "; } else { messageFromatHTML += item + " "; } } else { messageFromatHTML += item + " "; } } } #endregion #region explan this passing messege to stockcode and username list //messageFromatHTML += "</a>"; var listStock = new List <string>(); var listUsersendMessege = new List <string>(); string replyRelated = string.Empty; string replyRelatedUser = string.Empty; List <string> listMessegeSplit = messagedefault.Replace("\n", " ").Split(' ').ToList().FindAll(p => p.Contains("$") || p.Contains("@")); #endregion #region gui message co phieu và user lien quan string[] userReplyRelated = new string[2]; userReplyRelated[0] = string.Empty; userReplyRelated[1] = string.Empty; foreach (var item in listMessegeSplit) { if (item.Length > 0) { string stockcode = item.RemoveSpecialString().ToUpper(); if (item.IndexOf("$", 0, 1) != -1 && !listStock.Contains(stockcode) && StockRealTimeTicker.CheckExistStock(stockcode)) // find the stock with $ { stockTag += stockcode + "|"; listStock.Add(stockcode); // group of hub for client } else if (item.IndexOf("@", 0, 1) != -1) //find the user with @ { string user = item.RemoveSpecialString().ToLower(); var finduser = await db.UserLogins.FirstOrDefaultAsync(ul => ul.UserNameCopy == user); if (finduser != null) { NotificationMessege nM = new NotificationMessege { UserPost = userlogin.Id, UserReciver = finduser.Id, PostId = post.PostId, NumNoti = 1, TypeNoti = "U", CreateDate = DateTime.Now, XemYN = true }; db.NotificationMesseges.Add(nM); listUsersendMessege.Add(user); // add user to send notification userReplyRelated = AppHelper.StringUserSlipt(userReplyRelated, user, finduser.Id.ToString()); } } } } #endregion #region luu vao db /* add stockrelate */ post.Message = AppHelper.FilteringWord(messageFromatHTML); // Filteringword lọc từ khóa bậy post.PostedBy = userlogin.Id; post.PostedDate = DateTime.Now; post.NhanDinh = nhanDinh; post.SumLike = 0; post.ReplyRelated = AppHelper.StringUserSlipt(userReplyRelated, userlogin.UserNameCopy, userlogin.Id.ToString())[0]; // thong bao cho toan user voi tag user|user|user post.ReplyRelatedUser = AppHelper.StringUserSlipt(userReplyRelated, userlogin.UserNameCopy, userlogin.Id.ToString())[1];; // thong bao cho toan user voi tag id|id|id if (!string.IsNullOrWhiteSpace(chartImage)) { post.ChartYN = true; post.ChartImageURL = chartImage.Replace("?width=50&height=50&mode=crop", ""); } post.StockPrimary = stockTag; // lấy các stock #tag cuối GAS!PAS try { db.Posts.Add(post); await db.SaveChangesAsync(); } catch (Exception) { // log } var ret = new { Message = post.Message, Chart = post.ChartImageURL, PostedByName = userlogin.UserNameCopy, PostedByAvatar = string.IsNullOrEmpty(userlogin.AvataImage) == true ? AppHelper.ImageURLAvataDefault : AppHelper.ImageURLAvata + userlogin.AvataImage, PostedDate = post.PostedDate, PostId = post.PostId, StockPrimary = post.StockPrimary, Stm = post.NhanDinh, ChartYN = post.ChartYN, PostBy = post.PostedBy, SumLike = 0, SumReply = 0, BrkVip = userlogin.BrokerVIP }; #endregion #region gui message if (listStock.Count > 0) { await Clients.All.addPostGlobal(ret); // add message vào profile va home resultString = "S"; // post thanh cong len trang home va profile } else { resultString = "O"; // chi post o trang ca nhan } if (userpageid > 0) // gửi cho cùng 1 nhóm đag mở cùng 1 user page { listStock.Add(userpageid.ToString()); } await Clients.Groups(listStock).addPost(ret); // ad group co phieu lien quan if (listUsersendMessege.Count > 0) { await Clients.Users(listUsersendMessege).MessegeOfUserPost(1); // gui tin bao cho user nao có @ } return(resultString); #endregion } }
public async Task <string> AddReply(PostComment reply) { using (db = new testEntities()) { #region user login //string resultString = string.Empty; //var userlogin = db.UserLogins.FirstOrDefault(ul => ul.UserNameCopy == Context.User.Identity.Name); var userlogin = await(from ul in db.UserLogins where ul.UserNameCopy == Context.User.Identity.Name select new { ul.Id, ul.BrokerVIP, ul.UserNameCopy, ul.AvataImage, ul.DisableUser }).FirstOrDefaultAsync(); if (userlogin == null || userlogin.DisableUser == true) { return("L"); // user is disable } reply.CommentBy = userlogin.Id; reply.PostedDate = DateTime.Now; #endregion #region format message string messagedefault = ""; messagedefault = reply.Message; string[] listMessege = reply.Message.Split(new char[] { ' ', '\n' }, StringSplitOptions.RemoveEmptyEntries); string messageFromatHTML = ""; foreach (var item in listMessege) { if (item.Length > 0 && item.Length < 2000) { if (item.IndexOf("$", 0, 1) != -1) { string ticker = item.RemoveSpecialString().ToUpper(); messageFromatHTML += "<b><a target='_blank' href='/ticker/" + ticker + "'>" + item + "</a></b>" + " "; } else if (item.IndexOf("@", 0, 1) != -1) { // đề cập đến user string user = item.RemoveSpecialString().ToLower(); messageFromatHTML += "<a target='_blank' href='/" + user + "'>" + item + "</a>" + " "; } else if ((item.Contains("http") || item.Contains("www.")) && item.Length >= 4) { if (item.IndexOf("http", 0, 4) != -1 || item.IndexOf("www.", 0, 4) != -1) { URLTiny tu = new URLTiny(); tu.URLName = item; tu.PostedDate = DateTime.Now; dbtinyURL.URLTinies.Add(tu); try { await dbtinyURL.SaveChangesAsync(); } catch (Exception) { // log } messageFromatHTML += "Nguồn tại <a onclick=selectMe(event,\"#\") target='_blank' href='" + hostURL + "/" + tu.Id + "'>" + AppHelper.GetDomain(item) + "...</a>" + " "; } else { messageFromatHTML += item + " "; } } else { messageFromatHTML += item + " "; } } } reply.Message = AppHelper.FilteringWord(messageFromatHTML); // lọc từ khóa #endregion #region reply có đề cập đến user nào không ?? var getPost = await db.Posts.FindAsync(reply.PostedBy); // get post (Lấy bài post) // cap nhat tong so luong reply getPost.SumReply += 1; // Tao Array for split user (Tạo mảng để xử lý User) string[] userReplyRelated = new string[2]; userReplyRelated[0] = getPost.ReplyRelated; userReplyRelated[1] = getPost.ReplyRelatedUser; List <string> listUsersendMessege = new List <string>(); List <string> listMessegeSplit = messagedefault.Split(' ').ToList().FindAll(p => p.Contains("@")); foreach (var item in listMessegeSplit) { if (item.IndexOf("@", 0, 1) != -1) //find the user with @ { string user = item.RemoveSpecialString().ToLower(); // remove special character (Loại những ký tự đặc biệt) var finduser = await db.UserLogins.FirstOrDefaultAsync(ul => ul.UserNameCopy == user); // check user exist if (finduser != null) { userReplyRelated = AppHelper.StringUserSlipt(userReplyRelated, user, finduser.Id.ToString()); } } } #endregion #region gui tin cho những người đã đề cập trong bài post // replace chính người post để không tạo thêm notification string[] replyRelated = userReplyRelated[0].Replace(userlogin.UserNameCopy + "|", "").Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); string[] replyRelatedIdUser = userReplyRelated[1].Replace(userlogin.Id + "|", "").Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < replyRelatedIdUser.Length; i++) { try { int replyRelatedIdUserItem = int.Parse(replyRelatedIdUser[i]); var nMRecive = await db.NotificationMesseges.FirstOrDefaultAsync(nm => nm.UserReciver == replyRelatedIdUserItem && nm.PostId == reply.PostedBy); if (nMRecive == null) { NotificationMessegeModels.Create(userlogin.Id, int.Parse(replyRelatedIdUser[i]), reply.PostedBy); listUsersendMessege.Add(replyRelated[i]); // add usser to send (1) notify } else { if (nMRecive.NumNoti <= 0 || nMRecive.NumNoti == null) { NotificationMessegeModels.Update(nMRecive); listUsersendMessege.Add(replyRelated[i]); // add usser to send (1) notify } } } catch (Exception) { //throw log; } } /////////////////////////////////////////// #endregion #region luu du lieu vao db db.PostComments.Add(reply); try { getPost.ReplyRelated = AppHelper.StringUserSlipt(userReplyRelated, userlogin.UserNameCopy, userlogin.Id.ToString())[0]; getPost.ReplyRelatedUser = AppHelper.StringUserSlipt(userReplyRelated, userlogin.UserNameCopy, userlogin.Id.ToString())[1]; db.Entry(getPost).State = EntityState.Modified; await db.SaveChangesAsync(); } catch (Exception) { // error thi van chay tiep } var ret = new { ReplyMessage = reply.Message, //PostedBy = post.PostedBy, ReplyByName = userlogin.UserNameCopy, ReplyByAvatar = string.IsNullOrEmpty(userlogin.AvataImage) == true ? AppHelper.ImageURLAvataDefault : AppHelper.ImageURLAvata + userlogin.AvataImage, ReplyDate = reply.PostedDate, ReplyId = reply.PostCommentsId, PostCommentsId = reply.PostCommentsId, BrkVip = userlogin.BrokerVIP }; #endregion #region push message await Clients.Caller.addReply(ret); // gửi cho chính người đã reply (tạo trả lời bên dưới) if (listUsersendMessege.Count > 0) { await Clients.Users(listUsersendMessege).MessegeOfUserPost(1); // gửi thông báo (1) liên quan những người trong list post đã có người comment } await Clients.All.newReplyNoti(reply.PostedBy); // +1 cho ai đang mở bài post đó return("S"); #endregion } }
public async Task <ActionResult> request_password_reset(ResetPasswordModel model) { if (ModelState.IsValid) { using (db = new testEntities()) { var user = await db.UserLogins.FirstOrDefaultAsync(ul => ul.Email == model.Email); if (user != null) { ViewBag.Info = 1; ViewBag.Status = "Email được gửi thành công, vui lòng đăng nhập Inbox hoặc Spam mail để nhận được link đổi mật khẩu"; var checkReset = await db.UserLogExtents.FirstOrDefaultAsync(ule => ule.Username == user.UserNameCopy); if (checkReset != null) { // udpate checkReset.TokenResetPass = Guid.NewGuid().ToString(); checkReset.TimeResetExpire = DateTime.Now.AddHours(3); checkReset.IsReset = false; db.Entry(checkReset).State = EntityState.Modified; // send email try { await db.SaveChangesAsync(); // send link email reset pass String contentEmail = AppHelper.GetContentTemplate(AppHelper.ResetPasswordEmailTemplatePath, checkReset.TokenResetPass, checkReset.Username); AppHelper.sendEmail("Link thay đổi mật khẩu | Phochungkhoan.com", checkReset.EmailReset, contentEmail); } catch (Exception) { // bug } } else { // insert var userExtent = new UserLogExtent { Username = user.UserNameCopy, TokenResetPass = Guid.NewGuid().ToString(), TimeResetExpire = DateTime.Now.AddHours(3), EmailReset = user.Email, UserId = user.KeyLogin }; db.UserLogExtents.Add(userExtent); //send email try { await db.SaveChangesAsync(); // send link email reset pass String contentEmail = AppHelper.GetContentTemplate(AppHelper.ResetPasswordEmailTemplatePath, userExtent.TokenResetPass, userExtent.Username); AppHelper.sendEmail("Link thay đổi mật khẩu | Phochungkhoan.com", userExtent.EmailReset, contentEmail); } catch (Exception) { // bug } } } else { //ViewBag.Info = 1; //ViewBag.Status = "Không tồn tại email trong hệ thống"; return(RedirectToAction("password_reset_result", new { Message = ManageMessageId.NotExist })); } } } //return View("request_password_reset", new ResetPasswordModel { Email = model.Email }); return(View()); }