예제 #1
0
        /// <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();
                }
            }
        }
예제 #2
0
 /// <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();
     }
 }
예제 #3
0
 /// <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);
     }
 }
예제 #4
0
        /// <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);

            }
        }
예제 #5
0
        /// <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);
            }
        }
예제 #6
0
 /// <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();
     }
 }
예제 #7
0
        /// <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();
                }

            }
        }
예제 #8
0
 /// <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();
             }
         }
     }
 }
예제 #9
0
 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;
     }
 }
예제 #10
0
 /// <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);
     }
 }
예제 #11
0
        /// <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);
        }