/// <summary> /// Visszaadja az összes tag.et /// </summary> /// <returns></returns> public List<Tag> GetAllTag() { using (var db = new SoAContext()) { var q = HttpContext.Current.Cache.GetFromCache("Tags", () => ( from t in db.Tags select t).ToList()); return q; } }
/// <summary> /// Az adott id-ju kérdéshez kilistázza a válaszokat /// </summary> /// <param name="id">Kérdés ID</param> /// <returns></returns> public List<Answer> GetAllAnswerToOneQuestion(int id) { using (var db = new SoAContext()) { var q = HttpContext.Current.Cache.GetFromCache("AnswersToQuestion"+id, () =>(from ans in db.Answers where ans.QuestionId == id select ans).ToList()); return q; } }
/// <summary> /// Visszaadja az adott id-hoz tartozó UserProfile-t /// </summary> /// <param name="id">User Id</param> /// <returns></returns> public UserProfile GetUserById(int id) { using (var db=new SoAContext()) { var q = (from u in db.UserProfiles where u.UserId == id select u).SingleOrDefault(); return q; } }
/// <summary> /// Lekérdezi az összes felhasználót egy listába /// </summary> /// <returns></returns> public List<UserProfile> GetAllUsers() { using (var db =new SoAContext()) { var q = from u in db.UserProfiles select u; return q.ToList(); } }
/// <summary> /// MEgadja a tag-t ID alapján /// </summary> /// <param name="id"></param> /// <returns></returns> public Tag GetTagById(int id) { using (var db=new SoAContext()) { var q = HttpContext.Current.Cache.GetFromCache("GetTag"+id, () => (from t in db.Tags where t.Id == id select t).SingleOrDefault()); return q; } }
/// <summary> /// Visszaadja az egy kérdéshez tartozó Tag-eket /// </summary> /// <param name="id">Kérdés Id</param> /// <returns></returns> public List<Tag> GetAllTagToOneQuestion(int id) { using (var db=new SoAContext()) { // var q = HttpContext.Current.Cache.GetFromCache("Tags", ()=>(from t in db.QuestionHasTags // where t.QuestionId == id // select t.Tag).ToList()); var q = db.QuestionHasTags.Where(t => t.QuestionId == id).Select(t => t.Tag).ToList(); return q; } }
/// <summary> /// Összes válasz kilistázása egy kérdéshez egy efelhasználótól /// </summary> /// <param name="questionid">Kérdés ID</param> /// <param name="userid">Felhasználó ID</param> /// <returns></returns> public List<Answer> GetAllAnswerToOneQuestionFromOneUser(int questionid, int userid) { using (var db=new SoAContext()) { var answers = HttpContext.Current.Cache.GetFromCache("AnswersToQuestion" + questionid+"User"+userid, () => (from a in db.Answers where a.QuestionId == questionid && a.UserId == userid select a).ToList()); return answers; } }
/// <summary> /// Válasz szerkesztése /// </summary> /// <param name="data">Válasz adatai</param> public void EditAnswer(Answer data) { using (var db = new SoAContext()) { 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> /// Az adott kérdésre az adott user által beírja az adott szavazatot /// </summary> /// <param name="questionid">Kérdés Id</param> /// <param name="userid">User Id</param> /// <param name="vote">Szavazat</param> public void Vote(int questionid, int userid, int vote) { using (var db=new SoAContext()) { 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> /// Válasz hozzáadása a DB-hez /// </summary> /// <param name="data">Válasz adatai</param> public void AddAnswer(Answer data, int questionID, int userid) { using (var db = new SoAContext()) { 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); } }
/// <summary> /// Visszaadja, hogy az adott válaszra szavazott-e már az adott user /// </summary> /// <param name="answerid">Válasz Id</param> /// <param name="userid">User Id</param> /// <returns></returns> public bool IsVotedForAnswer(int answerid, int userid) { using (var db = new SoAContext()) { var q = HttpContext.Current.Cache.GetFromCache("AnswerVote" + answerid, () => (from v in db.AnswerHasVotes where v.AnswerId == answerid && v.UserId == userid select v).SingleOrDefault()); if (q == null) { return false; } else { return true; } } }
/// <summary> /// Visszaadja, hogy az adott kérdésre szavazott-e már az adott user /// </summary> /// <param name="questionid">Kérdés Id</param> /// <param name="userid">User Id</param> /// <returns></returns> public bool IsVotedForQuestion(int questionid, int userid) { using (var db=new SoAContext()) { var q = HttpContext.Current.Cache.GetFromCache("QuestionVote" + questionid, () => (from v in db.QuestionHasVotes where v.QuestionId == questionid && v.UserId == userid select v).SingleOrDefault()); if (q == null) { return false; } else { return true; } } }
/// <summary> /// Visszaadja egy adott felhasználóhoz tartozó osztályzatot, jelenleg úgy számolja, /// hogy megnézi az összes a felhasználó általa adott kérdést és választ és ezeknek veszi az összegét. /// </summary> /// <param name="userid">User Id</param> /// <returns></returns> public int GetUserRating(int userid) { using (var db=new SoAContext()) { /* List<int> questionrating = (from u in db.Questions join uv in db.QuestionHasVotes on u.Id equals uv.QuestionId where u.UserId == userid select uv.Rating).ToList(); List<int> answerating = (from u in db.Answers join uv in db.AnswerHasVotes on u.Id equals uv.AnswerId where u.UserId == userid select uv.Rating).ToList(); int rating = (questionrating == null ? 0 : questionrating.Sum()) + (answerating == null ? 0 : answerating.Sum());*/ var qrating = db.QuestionHasVotes.Where(qhv => qhv.Question.UserId == userid).Select(s => s.Rating).ToList(); var arating = db.AnswerHasVotes.Where(ahv => ahv.Answer.UserId == userid).Select(s => s.Rating).ToList(); return (qrating == null ? 0 : qrating.Sum()) + (arating == null ? 0 : arating.Sum()); } }
public SimpleMembershipInitializer() { Database.SetInitializer<SoAContext>(null); try { using (var context = new SoAContext()) { if (!context.Database.Exists()) { // Create the SimpleMembership database without Entity Framework migration schema ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); } } if (!WebSecurity.Initialized) WebSecurity.InitializeDatabaseConnection("SoAContext", "UserProfile", "UserId", "UserName", autoCreateTables: true); } catch (Exception ex) { throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); } }
/// <summary> /// Kérdés szerkesztése /// </summary> /// <param name="data">Kérdés adatai</param> public void EditQuestion(Question data) { using (var db = new SoAContext()) { 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> /// Ajaxos kéréshet a címeket kikeresi /// </summary> /// <param name="key">Kulcsparaméter</param> /// <returns></returns> public List<Question> AjaxSearchTitle(string key) { using (var db = new SoAContext()) { var questions = (from q in db.Questions where q.Title.Contains(key) select q).ToList(); return questions; } }
/// <summary> /// Visszaadja a megadott x-nek megfelelő számú legfrissebb kérdést /// </summary> /// <param name="x">A lekérdezendő kérdések száma</param> /// <returns></returns> public List<Question> GetXLatestQuestion(int x) { using (var db = new SoAContext()) { var q = HttpContext.Current.Cache.GetFromCache("LatestQuestions", () => db.Questions.OrderByDescending(v => v.Date).Take(x).ToList()); return q; } }
/// <summary> /// Visszaadja egy kérdéshez a hozzá tartozó szavazatok összegét /// </summary> /// <param name="id">Kérdés Id</param> /// <returns></returns> public int GetVote(int id) { using (var db = new SoAContext()) { //Lekérdezzük az adott kérdéshez tartozó szavazatokat var vote = HttpContext.Current.Cache.GetFromCache("QuestionVote" + id, () => (from q in db.QuestionHasVotes where q.QuestionId == id select q.Rating).ToList()); //Ha nem jött rá szavazat, akkor 0-t adunk vissza if (vote.Count == 0) return 0; //Ha jött, akkor visszaadjuk a szavazatok összegét return vote.Sum(); } }
/// <summary> /// Listázza az egy kérdéshez kapcsolódó egyéb kérdéseket /// </summary> /// <param name="questionid">Kérdés ID</param> /// <returns></returns> public List<Question> GetRelatedQuestions(int questionid) { using (var db = new SoAContext()) { var tman = new TagManager(); //Lekérdezzük a kérdéshez tartozó tag-eket var tags = HttpContext.Current.Cache.GetFromCache("QuestionTags" + questionid, () => tman.GetAllTagToOneQuestion(questionid).Select(x => x.Id).ToList()); //Vesszük azon kérdéseket, amelyek ezek közül valamelyiket tartalmazzák, közüllük pedig a legfrissebb 10-et kiválasztjuk var releateds = HttpContext.Current.Cache.GetFromCache("ReleatedQuestions" + questionid, () => db.Questions.Where(q => q.QuestionHasTags.Any(qht => tags.Contains(qht.TagId)) && q.Id != questionid).OrderByDescending(d => d.Date).Take(10).ToList()); return releateds; } }
/// <summary> /// Visszaadja a felhasználóhoz illő kérdéseket /// </summary> /// <param name="userid">Felhasználó ID</param> /// <returns></returns> public List<Question> GetQuestionsFitToUser(int userid) { using (var db = new SoAContext()) { //Lekérdezzük hogy a felhasználó által megválaszolt kérdések milyen tag-eket tartalmaznak és hányszor, majd ezekből a 3 legtöbbször megválaszoltat vesszük var usertags = db.Tags.Where(d => d.QuestionHasTags.Any(q => q.Question.Answers.Any(a => a.UserId == userid))).Select(d => new { Tag = d, Num = d.QuestionHasTags.Count() }).OrderByDescending(o => o.Num).Take(3).Select(t => t.Tag); //Vesszük a mostani időpont mínusz egy hetet, hogy tudjuk számolni majd, hogy melyik kérdés jött az utóbbi héten var lastday = DateTime.Now.AddDays(-7); //Lekérdezzük azokat a kérdéseket, amelyek a legutóbbi egy hétben születtek, nincs rájuk adott válasz és van olyan tagjük, ami a felhasználó kedvencei közé tartozik, majd ebből vesszük a 10 legfrissebbet var fitquestions = db.Questions.Where(q => (q.Date > lastday && q.Answers.Count() == 0 && q.QuestionHasTags.Any(qht => usertags.Contains(qht.Tag)) )).OrderByDescending(x => x.Date).Take(10).ToList(); return fitquestions; } }
/// <summary> /// Visszaad egy kérdést az ID alapján /// </summary> /// <param name="id"> Kérdés ID</param> /// <returns></returns> public Question GetQuestion(int id) { using (var db = new SoAContext()) { var ques = HttpContext.Current.Cache.GetFromCache("GetQuestion" + id, () => (db.Questions.Where(q => q.Id == id).SingleOrDefault())); return ques; } }
/// <summary> /// Az adott válaszra az adott user által beírja az adott szavazatot /// </summary> /// <param name="answerid">Válasz Id</param> /// <param name="userid">User Id</param> /// <param name="vote">Szavazat</param> public void VoteAnswer(int answerid, int userid, int vote) { using (var db = new SoAContext()) { 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> /// Egy felhasználó megválaszolt kérdéseinek listázása oldalak szerint /// </summary> /// <param name="userid">Felhasználó ID</param> /// <param name="pageNumber">Oldal száma</param> /// <param name="pageSize">Oldal mérete</param> /// <param name="total">Összes ilyen kérdés száma</param> /// <returns></returns> public List<Question> AnsweredQuestionsToPagedList(int userid, int pageNumber, int pageSize, out int total) { using (var db = new SoAContext()) { //Kivesszük a cache-ből az adott felhasználó által megválaszolt kérdéseket var ques = HttpContext.Current.Cache.GetFromCache("AnsweredQuestions" + userid, () => (db.Questions.Where(q => q.Answers.Any(a => a.UserId == userid)).OrderByDescending(quest => quest.Date).Select(t => t).ToList())); //Ezekből vesszük az adott oldalnak megfelelőeket ques = ques.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList(); //Vesszük a felhasználó által megválaszolt kérdések számát total = db.Questions.Where(q => q.Answers.Any(a => a.UserId == userid)).Count(); return ques; } }
/// <summary> /// Egy adott nevű taghez keresi ki az összes kérdést /// </summary> /// <param name="tagId"></param> /// <returns></returns> public List<Question> AllQuestionToTag(string tagName) { using (var db = new SoAContext()) { List<Question> rl = null; var queryId = db.Tags.Where(tags => tags.Name.Equals(tagName)).SingleOrDefault(); if (queryId != null) { rl = db.Questions.Where(q => q.QuestionHasTags.Any(qht => qht.TagId == queryId.Id)).ToList(); } return rl; } }
/// <summary> /// Hozzáad egy kérdést az adatbázishoz /// </summary> /// <param name="data">Kérdés adatai</param> public void AddQuestion(Question data, int userID, List<string> tagList) { using (var db = new SoAContext()) { //Beállítjuk az aktuális dátumot data.Date = DateTime.Now; data.UserId = userID; db.Questions.Add(data); db.SaveChanges(); //Tagek kezelése //Megnézzük, h létezik-e az adott, tag, ha nem akkor beszúrunk Tag tag = null; foreach (var item in tagList) { var q = (from t in db.Tags where item.Equals(t.Name) select t).ToArray(); //Ha nem létezik, beszúrunk if (q.Length == 0) { tag = new Tag(); tag.Name = item; db.Tags.Add(tag); db.SaveChanges(); //Hozzárendeljük a tag-et a kérdéshez var qt = new QuestionHasTag(); qt.QuestionId = data.Id; qt.TagId = tag.Id; db.QuestionHasTags.Add(qt); db.SaveChanges(); } //Létezik ilyen tag, hozzárendeleés 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); } }
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 (SoAContext db = new SoAContext()) { 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); }
/// <summary> /// Visszaadja az adott taghez tartozó kérdéseket /// </summary> /// <param name="tagid"></param> /// <returns></returns> /// public List<Question> AllQuestionToOneTagToPagedList(int tagid, int pageNumber, int pageSize, out int total) { using (var db = new SoAContext()) { //Csinálunk egy listát ahova a kérdések kerülnek majd List<Question> questions; //Ha több, mint 5. oldalról kérdezünk le, akkor rögtön az adatbázisból vesszük ki, ha nem akkor a cache-ből az eredményt if (pageNumber > 5) { questions = db.Questions.Where(q => q.QuestionHasTags.Any(qht => qht.TagId == tagid)).OrderByDescending(q => q.Date).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList(); } else { questions = HttpContext.Current.Cache.GetFromCache("QuestionsByTag" + tagid + "Page" + pageNumber, () => db.Questions.Where(q => q.QuestionHasTags.Any(qht => qht.TagId == tagid)).OrderByDescending(q => q.Date).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList()); } //Lekérdezzük, hogy összesen hány kérdés szerepel az adott tag-gel total = db.Questions.Where(q => q.QuestionHasTags.Any(qht => qht.TagId == tagid)).Count(); return questions; } }
/// <summary> /// Visszaadja az időrend szerinti sorrendben állított kérdések közül a megfelelő oldalon lévőt és az összes kérdés számát /// </summary> /// <param name="pageNumber">Oldal száma</param> /// <param name="pageSize">Oldalak mérete</param> /// <param name="total">Összes kérdés száma</param> /// <returns></returns> public List<Question> AllQuestionsToPagedList(int pageNumber, int pageSize, out int total) { using (var db = new SoAContext()) { List<Question> questions; //Ha 5-nél későbbi oldalról kérjük le a kérdéseket, akkor rögtön az adatbázisból vesszük a megfelelő kérdéseket if (pageNumber > 5) { questions = db.Questions.OrderByDescending(q => q.Date).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList(); } else { //Ha 5-nél korábbi oldalról kérjük le a kérdéseket, akkor kivesszük azokat a cache-ből, ha már benne vannak questions = HttpContext.Current.Cache.GetFromCache("PageQuestions" + pageNumber, () => db.Questions.OrderByDescending(q => q.Date).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList()); } //Lekérdezzük az összes kérdés számát total = db.Questions.Count(); return questions; } }
/// <summary> /// Egy felhasználó kérdéseinek listázása oldalak szerint /// </summary> /// <param name="userid">Felhasználó ID</param> /// <param name="pageNumber">Oldal száma</param> /// <param name="pageSize">Oldal mérete</param> /// <param name="total">Összes ilyen kérdés száma</param> /// <returns></returns> public List<Question> AllQuestionToOneUserToPagedList(int userid, int pageNumber, int pageSize, out int total) { using (var db = new SoAContext()) { //Lekérdezzük a cache-ből, ha benne van, a felhasználó által írt kérdéseket var questions = HttpContext.Current.Cache.GetFromCache("QuestionsByUser" + userid, () => db.Questions.Where(q => q.UserId == userid).OrderByDescending(q => q.Date).ToList()); //Vesszük az adott oldalhoz tartozóakat questions = questions.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList(); //Lekérdezzük az ilyen kérdések számát total = db.Questions.Where(q => q.UserId == userid).Count(); return questions; } }
/// <summary> /// Visszaadja az összes kérdést időrend szerint kezdve a legújabbal /// </summary> /// <returns></returns> public List<Question> GetAllQuestion() { using (var db = new SoAContext()) { var q = HttpContext.Current.Cache.GetFromCache("AllQuestions", () => (from qs in db.Questions select qs).OrderByDescending(v => v.Date).ToList()); return q; } }