Esempio n. 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();
                }
            }
        }
Esempio n. 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();
     }
 }
Esempio n. 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);
     }
 }
Esempio n. 4
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);
     }
 }
Esempio n. 5
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);
     }
 }
Esempio n. 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();
     }
 }
Esempio n. 7
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);
     }
 }
Esempio n. 8
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);
            }
        }
Esempio n. 9
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();
         }
     }
 }
Esempio n. 10
0
        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));
        }
Esempio n. 11
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();
             }
         }
     }
 }
Esempio n. 12
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();
                }
            }
        }