public static void Update(Pitanja question, List<string> tags) { Connection.dm.fsp_Pitanja_Update(question.PitanjeID, question.Naslov, question.Tekst, question.TemaID, question.KorisnikID, question.DatumIzmjene); Connection.dm.SaveChanges(); Connection.dm.fsp_Pitanja_DeleteTags(question.PitanjeID); Connection.dm.SaveChanges(); foreach (string t in tags) { try { Connection.dm.fsp_PitanjaTagovi_Insert(question.PitanjeID, t); Connection.dm.SaveChanges(); } catch { } } }
public static void UpdateQuestionLikeStatus(Pitanja pitanje, int userId, bool status) { if (Connection.dm.PitanjaGlasovi.First(p => p.PitanjeID == pitanje.PitanjeID && p.KorisnikID == userId).Pozitivni != status) { Connection.dm.PitanjaGlasovi.First(p => p.PitanjeID == pitanje.PitanjeID && p.KorisnikID == userId).Pozitivni = status; Connection.dm.SaveChanges(); if (status) { pitanje.Pozitivni++; pitanje.Negativni--; Connection.dm.SaveChanges(); } else { pitanje.Pozitivni--; pitanje.Negativni++; Connection.dm.SaveChanges(); } } }
public static void UpdatePitanjeLike(Pitanja pitanje, int korisnikID) { pitanje.Pozitivni++; Connection.dm.SaveChanges(); PitanjaGlasovi pitanjaG = new PitanjaGlasovi(); pitanjaG.KorisnikID = korisnikID; pitanjaG.Pozitivni = true; pitanjaG.Datum = DateTime.Now; pitanjaG.PitanjeID = pitanje.PitanjeID; Connection.dm.PitanjaGlasovi.Add(pitanjaG); Connection.dm.SaveChanges(); }
//set broj pregleda ++ public static void SetBrojPregleda(Pitanja pitanje) { pitanje.BrojPregleda++; Connection.dm.SaveChanges(); }
// unos novog pitanja public static void savePitanje(Pitanja pitanje, List<string> tagovi) { Connection.dm.Pitanja.Add(pitanje); Connection.dm.SaveChanges(); foreach (var t in tagovi) { try { Connection.dm.fsp_PitanjaTagovi_Insert(pitanje.PitanjeID, t); } catch { } } }
public List<Pitanja> ColaborativeFiltering(int ID) { //sva pitanja za korisnika List<PitanjaOcjene> OcijenjenaPitanja = Connection.dm.PitanjaOcjene.Where(x => x.KorisnikID == ID).OrderBy(x => x.PitanjeID).ToList(); //sva pitanja koja su ocijenjena List<int> SvaPitanja = Connection.dm.PitanjaOcjene.OrderBy(x => x.PitanjeID).Select(x => x.PitanjeID).Distinct().ToList(); //sva pitanja koja korisnik nije ocijenio List<int> SvaPitanjaKojaKorisnikNijeOcijenio = new List<int>(); List<Pitanja> ListaPreporucenihPitanja = new List<Pitanja>(); foreach (var i in SvaPitanja) // uzimam sva pitanja koje korisnik nije ocijenio { int brojac = 0; foreach (var j in OcijenjenaPitanja) { if (i == j.PitanjeID) brojac++; } if (brojac == 0) { SvaPitanjaKojaKorisnikNijeOcijenio.Add(i); // lista tih neocijenjenih pitanja } } List<int> SviKorisniciKojiSuOcijenili = new List<int>(); // lista korisnika koji su ocijenili pitanja koja logovani korisnik nije foreach (var i in SvaPitanjaKojaKorisnikNijeOcijenio) { SviKorisniciKojiSuOcijenili.AddRange(Connection.dm.PitanjaOcjene.Where(x => x.PitanjeID == i).Select(x => x.KorisnikID).ToList()); } foreach (var i in SviKorisniciKojiSuOcijenili) // kroz sve korisnike radi se provjera { List<PitanjaOcjene> ListaSamoIstihPitanja = new List<PitanjaOcjene>(); foreach (var item in OcijenjenaPitanja) // ubacujem u listu samo ona pitanja koja logovani korisnik ima radi preporuke { PitanjaOcjene p = Connection.dm.PitanjaOcjene.Where(x => x.PitanjeID == item.PitanjeID && x.KorisnikID == i).SingleOrDefault(); if (p != null) { ListaSamoIstihPitanja.Add(p); } } if (ListaSamoIstihPitanja.Count == OcijenjenaPitanja.Count) // poredim samo ista pitanja od korisnika { int sumaOcjenaLogovanog = 0; int sumaOcjenaDrugogKorisnika = 0; foreach (var LS in OcijenjenaPitanja) //LS logovani kor, samo da se izračuna suma ocjena { int a = LS.PitanjeID; sumaOcjenaLogovanog += LS.Ocjena; } foreach (var LD in ListaSamoIstihPitanja) //lista drugi korisnik { int a = LD.PitanjeID; sumaOcjenaDrugogKorisnika += LD.Ocjena; } double Ra = (double)sumaOcjenaLogovanog / (double)OcijenjenaPitanja.Count; // prosjek ocjena za logovanog double Rb = (double)sumaOcjenaDrugogKorisnika / (double)ListaSamoIstihPitanja.Count; // prosjek ocjena za logovanog double Brojnik = 0; double Nazivnik = 0; for (int e = 0; e < OcijenjenaPitanja.Count; e++) //// prolazim kroz sve zajednicke elemente i racunam Pearson Correlation { double A = (OcijenjenaPitanja[e].Ocjena - Ra); double B = (ListaSamoIstihPitanja[e].Ocjena - Rb); Brojnik += A * B; double C = Math.Pow(A, 2); double D = Math.Pow(B, 2); Nazivnik += Math.Sqrt(C + D); } double similar = Brojnik / Nazivnik; // ovo je slicnost if (similar > 0.2) /// threshold { //preporucuje korisnika koji je slican List<PitanjaOcjene> SvaPitanjaKorisnikaPoSlicnosti = Connection.dm.PitanjaOcjene.Where(x => x.KorisnikID == i).ToList(); foreach (var item in SvaPitanjaKorisnikaPoSlicnosti) // uzimam sva pitanja koje korisnik nije ocijenio { int brojac = 0; foreach (var j in OcijenjenaPitanja) { if (item.PitanjeID == j.PitanjeID) brojac++; } if (brojac == 0) { Pitanja p = new Pitanja(); p = Connection.dm.Pitanja.Where(x => x.PitanjeID == item.PitanjeID).SingleOrDefault(); ListaPreporucenihPitanja.Add(p); } } } } } return ListaPreporucenihPitanja; }
protected void Save_Click(object sender, EventArgs e) { try { question = new Pitanja(); question.PitanjeID = Convert.ToInt32(Request["id"]); question.Naslov = txtNaslovPitanja.Text; question.Tekst = wysiwyg.Text; question.KorisnikID = Convert.ToInt32(User.Identity.Name); question.DatumIzmjene = DateTime.Now; if (ddTema.SelectedIndex != 0) question.TemaID = Convert.ToInt32(ddTema.SelectedValue); else { error_label.Visible = true; errorLabel.Text = "Obavezno odabrati temu!"; return; } List<string> tags = new List<string>(); foreach (string tag in tagsInput.Text.Split(',')) { if (tag.Trim() != "") tags.Add(tag.Trim()); } DAPitanja.Update(question, tags); ClearFields(); successLabel.Text = "Uspješno ste sačuvali izmjene."; error_label.Visible = false; success_label.Visible = true; } catch (Exception ex) { errorLabel.Text = ex.Message; if (ex.InnerException != null) errorLabel.Text += "\n" + ex.InnerException; error_label.Visible = true; } }
private void BindQuestion() { if (Request["id"] != null) { questionId = Convert.ToInt32(Request["id"]); question = QAService.getPitanjeByID(questionId); List<Tagovi> tags = DAPitanja.SelectTags(questionId); foreach (Tagovi tag in tags) tagsInput.Text += tag.Naziv + ", "; ddTema.SelectedValue = question.TemaID.ToString(); Teme tema = new Teme(); if(question.TemaID != null) tema = DATeme.SelectTemaByID((int)question.TemaID); if (tema.OblastID != null) ddOblast.SelectedValue = tema.OblastID.ToString(); txtNaslovPitanja.Text = question.Naslov; wysiwyg.Text = question.Tekst; } }
protected void Save_Click(object sender, EventArgs e) { try { Pitanja pitanje = new Pitanja(); pitanje.Naslov = txtNaslovPitanja.Text; pitanje.Tekst = wysiwyg.Text; pitanje.KorisnikID = Convert.ToInt32(User.Identity.Name); if (ddTema.SelectedValue == "Odaberite temu") { error_label.Visible = true; errorLabel.Text = "Obavezno odabrati temu!"; return; } else pitanje.TemaID = int.Parse(ddTema.SelectedValue); pitanje.Pozitivni = 0; pitanje.Negativni = 0; pitanje.BrojPregleda = 0; pitanje.Status = true; pitanje.DatumIzmjene = DateTime.Now; pitanje.DatumKreiranja = DateTime.Now; List<string> tags = new List<string>(); foreach (string tag in tagsInput.Text.Split(',')) { if (tag != "") tags.Add(tag.Trim()); } QAService.savePitanje(pitanje, tags); ClearFields(); success_label.Visible = true; successLabel.Text = "Uspješno ste dodali pitanje."; } catch { error_label.Visible = true; errorLabel.Text = "Greška prilikom pohrane podataka!"; return; } }