/// <summary> /// Add the answer to Database /// </summary> /// <param name="data">Answer</param> public static void AddAnswer(Answer data, int questionID, int userid) { using (var db = new QaAContext()) { data.Date = DateTime.Now; data.UserId = userid; data.QuestionId = questionID; db.Answers.Add(data); db.SaveChanges(); HttpContext.Current.Cache.UpdateCache("AnsweredQuestions" + userid, data); HttpContext.Current.Cache.UpdateCache("AnswersToQuestion"+questionID, data); HttpContext.Current.Cache.UpdateCache("AnswersToQuestion" + questionID+"User"+userid, data); //Send mails to the subscripted users var question = db.Questions.Where(q => q.Id == questionID).SingleOrDefault(); IUserMailer usermailer = new UserMailer(); var tagsOfQuestion = question.QuestionHasTags.Select(s => s.TagId).ToList(); var tos = db.UserProfiles.Where(up => (up.Subscriptions.Any(u => tagsOfQuestion.Any(x => x == u.TagId)) && up.Email!= null && up.IsVerified==true)).ToList(); foreach (var user in tos) { usermailer.NewAnswer(question, user, data).SendAsync(); } } }
/// <summary> /// Add email to the user /// </summary> /// <param name="up">UserProfile</param> public static void AddEmail(UserProfile up) { using (var db=new QaAContext()) { var user = db.UserProfiles.Where(u => u.UserId == up.UserId).SingleOrDefault(); user.Email = up.Email; user.IsVerified = false; db.SaveChanges(); } }
/// <summary> /// Answer edit /// </summary> /// <param name="data">Answer's data</param> public static void EditAnswer(Answer data) { using (var db = new QaAContext()) { var q = from a in db.Answers where a.Id == data.Id select a; var ans = q.SingleOrDefault(); ans.Content = data.Content; db.SaveChanges(); HttpContext.Current.Cache.UpdateCache("AnswersToQuestion" + data.QuestionId, data); HttpContext.Current.Cache.UpdateCache("AnswersToQuestion" + data.QuestionId + "User" + data.UserId, data); } }
/// <summary> /// Write the user's vote to the question /// </summary> /// <param name="questionid">question Id</param> /// <param name="userid">User Id</param> /// <param name="vote">Vote value</param> public static void Vote(int questionid, int userid, int vote) { using (var db=new QaAContext()) { QuestionHasVote add = new QuestionHasVote(); add.QuestionId=questionid; add.UserId=userid; add.Rating=vote; db.QuestionHasVotes.Add(add); db.SaveChanges(); HttpContext.Current.Cache.UpdateCache("QuestionVote" + questionid, add); } }
/// <summary> /// Write the user's vote to the answer /// </summary> /// <param name="answerid">answer Id</param> /// <param name="userid">User Id</param> /// <param name="vote">Vote</param> public static void VoteAnswer(int answerid, int userid, int vote) { using (var db = new QaAContext()) { AnswerHasVote add = new AnswerHasVote(); add.AnswerId = answerid; add.UserId = userid; add.Rating = vote; db.AnswerHasVotes.Add(add); db.SaveChanges(); HttpContext.Current.Cache.UpdateCache("AnswerVote" + answerid, add); } }
/// <summary> /// Verify the email of the user /// </summary> /// <param name="id">UserID</param> public static void VerifyEmail(int id) { using (var db=new QaAContext()) { var user = db.UserProfiles.Where(u => u.UserId == id).SingleOrDefault(); if (user == null) return; user.IsVerified = true; db.SaveChanges(); } }
/// <summary> /// User subcribe to tag /// </summary> /// <param name="tag"></param> /// <param name="user"></param> public static void SubcribeToTag(int tag, int user) { using (var db = new QaAContext()) { //Check the subcribe var q = (from t in db.UserHasSubscribes where (t.TagId == tag && t.UserId == user) select t).FirstOrDefault(); //if it does not exist yet if (q == null) { var subc = new UserHasSubscribe { TagId = tag, UserId = user }; db.UserHasSubscribes.Add(subc); db.SaveChanges(); } } }
/// <summary> /// User subcribes to more tags /// </summary> /// <param name="tags"></param> /// <param name="user"></param> public static void SubcribeToMoreTags(List<Tag> tags, int user) { using (var db = new QaAContext()) { foreach (var item in tags) { //Check the subcribe var q = (from t in db.UserHasSubscribes where (t.TagId == item.Id && t.UserId == user) select t).FirstOrDefault(); //if it does not exist yet if (q == null) { var subc = new UserHasSubscribe { TagId = item.Id, UserId = user }; db.UserHasSubscribes.Add(subc); db.SaveChanges(); } } } }
public static string SentEmailHash(int userid, int questionid) { using (var db=new QaAContext()) { var hash=MyHelpers.MD5Encode("u" + userid.ToString() + "q" + questionid.ToString()); db.EmailIdentifiers.Add(new EmailIdentifier { UserId = userid, QuestionId = questionid, Hash = hash }); db.SaveChanges(); return hash; } }
/// <summary> /// Question edit /// </summary> /// <param name="data">Question's data</param> public static void EditQuestion(Question data) { using (var db = new QaAContext()) { var q = from question in db.Questions where (question.Id == data.Id) select question; var editableData = q.SingleOrDefault(); editableData.Title = data.Title; editableData.Content = data.Content; db.SaveChanges(); HttpContext.Current.Cache.UpdateCache("GetQuestion" + data.Id, data); } }
/// <summary> /// Add Question to the Database /// </summary> /// <param name="data">Question's data</param> public static void AddQuestion(Question data, int userID, List<string> tagList) { using (var db = new QaAContext()) { //Set the actual datetime data.Date = DateTime.Now; data.UserId = userID; db.Questions.Add(data); db.SaveChanges(); //Tag handling //Check the tag's existence, if tag does not exist, then we insert the tag Tag tag = null; foreach (var item in tagList) { var q = (from t in db.Tags where item.Equals(t.Name) select t).ToArray(); //Insert if (q.Length == 0) { tag = new Tag(); tag.Name = item; db.Tags.Add(tag); db.SaveChanges(); //Add tag to the question var qt = new QuestionHasTag(); qt.QuestionId = data.Id; qt.TagId = tag.Id; db.QuestionHasTags.Add(qt); db.SaveChanges(); } //In the case, the tag exist else { var query = from t in db.Tags where item.Equals(t.Name) select t; tag = query.Single(); var qt = new QuestionHasTag(); qt.QuestionId = data.Id; qt.TagId = tag.Id; db.QuestionHasTags.Add(qt); db.SaveChanges(); } HttpContext.Current.Cache.UpdateCache("Tags", item); } db.SaveChanges(); int pageCache = 5; HttpContext.Current.Cache.UpdateCache("AllQuestions", data); HttpContext.Current.Cache.UpdateCache("LatestQuestions", data); HttpContext.Current.Cache.UpdateCache("QuestionsByUser" + data.UserId, data); for (int i = 1; i < pageCache; i++) { HttpContext.Current.Cache.UpdateCache("PageQuestions" + i, data); } foreach (var qht in data.QuestionHasTags) { for (int i = 1; i < pageCache; i++) { HttpContext.Current.Cache.UpdateCache("QuestionsByTag" + qht.TagId + "Page" + i, data); } } HttpContext.Current.Cache.UpdateCache("QuestionsByUser" + data.UserId, data); //Send mails to the subscripted users IUserMailer usermailer = new UserMailer(); var tagsOfQuestion = data.QuestionHasTags.Select(s=>s.TagId).ToList(); var tos = db.UserProfiles.Where(up => (up.Subscriptions.Any(u => tagsOfQuestion.Any(x => x == u.TagId)) && up.Email!=null && up.IsVerified==true)).ToList(); foreach (var user in tos) { usermailer.NewQuestion(data, user).SendAsync(); } } }
public ActionResult ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl) { string provider = null; string providerUserId = null; if (User.Identity.IsAuthenticated || !OAuthWebSecurity.TryDeserializeProviderUserId(model.ExternalLoginData, out provider, out providerUserId)) { return RedirectToAction("Manage"); } if (ModelState.IsValid) { // Insert a new user into the database using (QaAContext db = new QaAContext()) { UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == model.UserName.ToLower()); // Check if user already exists if (user == null) { // Insert name into the profile table db.UserProfiles.Add(new UserProfile { UserName = model.UserName }); db.SaveChanges(); OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName); OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false); return RedirectToLocal(returnUrl); } else { ModelState.AddModelError("UserName", Resources.Global.UsernameIsReserved); } } } ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(provider).DisplayName; ViewBag.ReturnUrl = returnUrl; return View(model); }