protected void login_button_Click(object sender, EventArgs e) { using (var ctx = new NeYesekAppContext()) { var user = ctx.Users.Where(x => x.Email == login_email.Text).SingleOrDefault(); if (user == null) { var message = string.Format("User with email = {0} not found", login_email.Text); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } var sha1data = General.GetHashString(login_password.Text + user.Salt); if (sha1data == user.Hash) { Session["IsLoggedIn"] = true; Session["Email"] = user.Email; Session["UserId"] = user.Id; Response.Redirect("Dashboard.aspx"); return; } var loginError = string.Format("Invalid credentials!"); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + loginError + "');</script>"); return; } }
protected void Page_Load(object sender, EventArgs e) { if (Session["IsLoggedIn"] == null || Session["IsLoggedIn"] is bool == false) { Response.Redirect("/Default.aspx"); } if (!this.IsPostBack) { restaurantId = int.Parse(Page.RouteData.Values["restaurantId"].ToString()); using (var ctx = new NeYesekAppContext()) { var restaurant = ctx.Restaurants.Where(r => r.Id == restaurantId).SingleOrDefault(); if (restaurant != null) { restaurant_name.Text = restaurant.Name; restaurant_isopen.Checked = restaurant.IsOpen; restaurant_iswalking.Checked = restaurant.IsValidForWalking; } else { var message = string.Format("There is no such restaurant!."); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); Response.Redirect("/Restaurants/Default.aspx"); return; } } } }
private static void DoVotingEndedTask() { IsVotingEnabled = false; //Burada restaurant lar eklenecek vs vs SendEmailToAllUsers("Voting has ended!", "Dear users,\nVoting has ended successfully. \nYou will be notified every day about your restaurants!\n\n Have fun!\n\nNeYesek!"); using (var ctx = new NeYesekAppContext()) { foreach (var res in ctx.Restaurants.Include("ScheduleInformation").ToList()) { res.ScheduleInformation.Possibility = res.Score; res.ScheduleInformation.Enable = true; res.ScheduleInformation.DisableDay = 0; } ctx.SaveChanges(); } DoCalculateNextRestaurantsTask(10); var OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved); HttpRuntime.Cache.Insert(VOTING_STARTED, 1, null, DateTime.Today.AddDays(99).AddHours(13), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, OnCacheRemove); }
protected void register_button_Click(object sender, EventArgs e) { using (var ctx = new NeYesekAppContext()) { if (register_password.Text != register_password_again.Text) { var message = "Passwords do not match!"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } var returnedUser = ctx.Users.Where(x => x.Email == register_email.Text).SingleOrDefault(); if (returnedUser != null) { var message = string.Format("User with email {0} already exists!", register_email.Text); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } var salt = Guid.NewGuid().ToString(); var user = new User() { Name = register_name.Text, Email = register_email.Text, Salt = salt, Hash = General.GetHashString(register_password.Text + salt) }; ctx.Users.Add(user); ctx.SaveChanges(); Response.Redirect("/Login.aspx"); } }
private static void DoVotingStartedTask() { if (HttpRuntime.Cache.Get(CALCULATE_NEW_RESTAURANTS) != null) { HttpRuntime.Cache.Remove(CALCULATE_NEW_RESTAURANTS); } SendEmailToAllUsers("Voting has started!", "Dear users,\nVoting has now started.\n\n\n Have fun!\n\nNeYesek!"); Global.IsVotingEnabled = true; using (var ctx = new NeYesekAppContext()) { ctx.UserVotes.RemoveRange(ctx.UserVotes); foreach (var res in ctx.Restaurants.ToList()) { res.Score = 0; } ctx.SaveChanges(); } var OnCacheRemove = new CacheItemRemovedCallback(Global.CacheItemRemoved); HttpRuntime.Cache.Insert(Global.VOTING_ENDED, 1, null, DateTime.Today.AddDays(1).AddHours(10), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, OnCacheRemove); }
public static void SendEmailToAllUsers(string subject, string body) { MailMessage message = new MailMessage(); using (var ctx = new NeYesekAppContext()) { foreach (var mail in ctx.Users.Select(x => x.Email)) { if (General.IsValidEmail(mail)) { message.To.Add(new MailAddress(mail)); } } } message.Subject = subject; message.IsBodyHtml = true; message.Body = body; message.Body += Environment.NewLine; message.Body += Environment.NewLine; var client = new SmtpClient(); client.EnableSsl = true; try { client.Send(message); } catch (Exception e) { } }
protected void update_button_Click(object sender, EventArgs e) { if (restaurant_name.Text == null || restaurant_name.Text == String.Empty) { var message = string.Format("Restaurant name cannot be empty!."); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } if (restaurant_picture.PostedFile != null && restaurant_picture.PostedFile.ContentLength > 0) { string[] validFileTypes = { "png", "jpg", "jpeg" }; string ext = System.IO.Path.GetExtension(restaurant_picture.PostedFile.FileName); bool isValidFile = false; for (int i = 0; i < validFileTypes.Length; i++) { if (ext == "." + validFileTypes[i]) { isValidFile = true; break; } } if (!isValidFile) { var message = string.Format("File extension should be .png, .jpg or .jpeg"); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } string fn = "" + restaurantId; string SaveLocation = Server.MapPath("~/Data"); if (!System.IO.Directory.Exists(SaveLocation)) { System.IO.Directory.CreateDirectory(SaveLocation); } System.Drawing.Image bm = System.Drawing.Image.FromStream(restaurant_picture.PostedFile.InputStream); bm = ResizeBitmap((Bitmap)bm, 290, 300); /// new width, height bm.Save(Path.Combine(SaveLocation, fn + ext)); newExt = ext; } using (var ctx = new NeYesekAppContext()) { var restaurant = ctx.Restaurants.Where(r => r.Id == restaurantId).SingleOrDefault(); restaurant.Name = restaurant_name.Text; restaurant.IsOpen = restaurant_isopen.Checked; restaurant.IsValidForWalking = restaurant_iswalking.Checked; if (newExt != string.Empty) { restaurant.PictureUrl = restaurant.Id + newExt; } ctx.SaveChanges(); } }
protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { if (Session["IsLoggedIn"] == null || Session["IsLoggedIn"] is bool == false) { Response.Redirect("/Default.aspx"); return; } using (var ctx = new NeYesekAppContext()) { rptVotes.DataSource = ctx.Restaurants.ToList(); rptVotes.DataBind(); } } }
protected void startVotingButton_Click(object sender, EventArgs e) { if (HttpRuntime.Cache.Get(Global.CALCULATE_NEW_RESTAURANTS) != null) { HttpRuntime.Cache.Remove(Global.CALCULATE_NEW_RESTAURANTS); } using (var ctx = new NeYesekAppContext()) { ctx.UserVotes.RemoveRange(ctx.UserVotes); foreach (var res in ctx.Restaurants.ToList()) { res.Score = 0; } ctx.SaveChanges(); AddVotingCache(); } }
protected void rptVotes_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { var rest = (Restaurant)e.Item.DataItem; using (var ctx = new NeYesekAppContext()) { var userId = (int)Session["UserId"]; var vote = ctx.UserVotes.Where(v => v.User.Id == userId && v.Restaurant.Id == rest.Id).SingleOrDefault(); if (vote == null) { ((TextBox)e.Item.FindControl("Vote")).Text = "0"; } else { ((TextBox)e.Item.FindControl("Vote")).Text = vote.Vote.ToString(); } } } }
private static void DoCalculateNextRestaurantsTask(int hours) { GetWeatherInformation().Wait(); CalculateNextRestaurants(); Dashboard.setDailyRestaurant(restaurant); using (var ctx = new NeYesekAppContext()) { ctx.RestaurantHistories.Add(new RestaurantHistory() { DateAdded = DateTime.Today, RestaurantName = restaurant }); ctx.SaveChanges(); } SendEmailToAllUsers("Today's Restaurant!", "Dear users,Today's restaurant is " + restaurant + "\n\n Have fun!\n\nNeYesek!"); var OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved); HttpRuntime.Cache.Insert(CALCULATE_NEW_RESTAURANTS, hours, null, DateTime.Today.AddDays(1).AddHours(hours), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, OnCacheRemove); }
protected void rptVotes_ItemCommand(object sender, RepeaterCommandEventArgs e) { switch (e.CommandName.ToString()) { case "Save": if (!Global.IsVotingEnabled) { var message = string.Format("Voting is not enabled right now!"); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } TextBox voteTextBox = e.Item.FindControl("Vote") as TextBox; Label labelId = e.Item.FindControl("RestaurantID") as Label; int restaurantId = 0; Int32.TryParse(labelId.Text, out restaurantId); double vote = 0; Double.TryParse(voteTextBox.Text, out vote); using (var ctx = new NeYesekAppContext()) { try { bool isUpdate = true; var userId = (int)Session["UserId"]; var userVote = ctx.UserVotes.Where(v => v.Restaurant.Id == restaurantId && v.User.Id == userId).SingleOrDefault(); var user = ctx.Users.Where(u => u.Id == userId).SingleOrDefault(); var restaurant = ctx.Restaurants.Include("ScheduleInformation").Where(r => r.Id == restaurantId).SingleOrDefault(); if (userVote == null) { isUpdate = false; userVote = new UserVote() { User = user, Restaurant = restaurant, Vote = vote, }; } var voteSum = user.Votes.Sum(v => v.Vote); if (isUpdate) { if (voteSum - userVote.Vote + vote > 100) { var message = string.Format("You voted too much! Vote total should be at most 100! Yours is {0}", (voteSum - userVote.Vote + vote)); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } var score = restaurant.Score; score = score * (restaurant.Votes.Count); score = score - userVote.Vote + vote; score = score / (restaurant.Votes.Count); restaurant.Score = score; userVote.Vote = vote; } else { if (voteSum + vote > 100) { var message = string.Format("You voted too much! Vote total should be at most 100! Yours is {0}", (voteSum + vote)); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } ctx.UserVotes.Add(userVote); var score = restaurant.Score; score = score * (restaurant.Votes.Count - 1); score = score + vote; score = score / (restaurant.Votes.Count); restaurant.Score = score; } ctx.SaveChanges(); rptVotes.DataSource = ctx.Restaurants.ToList(); rptVotes.DataBind(); } catch (Exception ec) { Console.WriteLine(ec.Message); } } break; default: break; } }
private static void CalculateNextRestaurants() { List <Restaurant> listRestaurantDB; using (var ctx = new NeYesekAppContext()) { listRestaurantDB = ctx.Restaurants.Include("ScheduleInformation").ToList(); } //veritabanındaki restoran formatından, algoritma için istediğimiz restoran formatına geçiş List <Place> allRestaurants = new List <Place>(); //Bu yorum bloğu içerisindeki döngü veritabanındaki restoranlara oylama eklendiğinde aktif edilecek. Bunun yerine şimdilik el ile doldurulmuş bir liste kullanılacak. for (int i = 0; i < listRestaurantDB.Count; i++) { allRestaurants.Add(new Place(listRestaurantDB[i].Id, listRestaurantDB[i].Name, Convert.ToInt32(listRestaurantDB[i].ScheduleInformation.Possibility), listRestaurantDB[i].ScheduleInformation.Enable, listRestaurantDB[i].IsValidForWalking, listRestaurantDB[i].ScheduleInformation.DisableDay)); } string result = ""; List <Place> availableRestaurants = new List <Place>(); Random random = new Random(); //Seçimin yapılması istendiği gün için uygun olan restoranlar "available" listesine aktarılacak. //Uygun restoranların toplam dilimin yüzde kaçını kapladığı hesaplanacak."totalcapacity" int totalCapacity = 0; for (int j = 0; j < allRestaurants.Count; j++) { if (todayData.icon == "rain") { if (allRestaurants[j].isEnable() && allRestaurants[j].IsValidForWalking) { availableRestaurants.Add(allRestaurants[j]); totalCapacity += allRestaurants[j].vote; } } else { if (allRestaurants[j].isEnable()) { availableRestaurants.Add(allRestaurants[j]); totalCapacity += allRestaurants[j].vote; } } } if (totalCapacity == 0) { //Eğer totalcapacity sıfır ise 100 günlük süreç tamamlanmış, gidilecek restoran kalmamış demektir. //Eğer bir ya da iki gün eksik olunursa burada kontrol edilebilir. return; } //1 ile gidilebilecek restoranların toplam oy sayısı arasında bir değer belirlenir. int rand = random.Next(1, totalCapacity + 1); int counter = 0; int interval = 0; //Bu değere bağlı kalınarak gün içinde gidilecek restoran seçilir. while (interval < rand) { interval += availableRestaurants[counter].vote; counter++; } //Gidilecek restorana belirli bir süre gidilememesi için restoranın durumu olumsuz yapılır. //Toplam gidileceği gün sayısı bir azaltılır. Place chosen = availableRestaurants[counter - 1]; for (int j = 0; j < allRestaurants.Count; j++) { if (chosen.name == allRestaurants[j].name) { allRestaurants[j].disable(availableRestaurants.Count * 7 / 25); allRestaurants[j].vote--; if (!allRestaurants[j].IsValidForWalking) { for (int k = 0; k < allRestaurants.Count; k++) { if (!allRestaurants[k].IsValidForWalking) { allRestaurants[k].disable(3); } } } } } using (var ctx = new NeYesekAppContext()) { var db = ctx.RestaurantScheduleInfos.ToList(); for (int k = 0; k < allRestaurants.Count; k++) { db[k].DisableDay = allRestaurants[k].disableDay; db[k].Enable = allRestaurants[k].enable; db[k].Possibility = allRestaurants[k].vote; } ctx.SaveChanges(); //allRestaurant listesi güncel restoran bilgilerine sahip. Bunu database'e yaz. } //Ertesi gün gidilebilecek restoran değişeceği için, "availableRestaurants" listesi sıfırlanır. availableRestaurants.Clear(); result = chosen.name; restaurant = result; }
protected void add_button_Click(object sender, EventArgs e) { if (restaurant_picture.PostedFile == null || restaurant_picture.PostedFile.ContentLength <= 0) { var message = string.Format("Please select a file to upload."); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } if (restaurant_name.Text == null || restaurant_name.Text == String.Empty) { var message = string.Format("Restaurant name cannot be empty!."); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } string[] validFileTypes = { "png", "jpg", "jpeg" }; string ext = System.IO.Path.GetExtension(restaurant_picture.PostedFile.FileName); bool isValidFile = false; for (int i = 0; i < validFileTypes.Length; i++) { if (ext == "." + validFileTypes[i]) { isValidFile = true; break; } } if (!isValidFile) { var message = string.Format("File extension should be .png, .jpg or .jpeg"); Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Error!", "<script>alert('" + message + "');</script>"); return; } using (var ctx = new NeYesekAppContext()) { var restaurant = ctx.Restaurants.Add(new Restaurant() { Name = restaurant_name.Text, IsOpen = restaurant_isopen.Checked, IsValidForWalking = restaurant_iswalking.Checked, Score = 0.0 }); ctx.SaveChanges(); var schedule = ctx.RestaurantScheduleInfos.Add(new RestaurantScheduleInfo() { Restaurant = restaurant }); ctx.SaveChanges(); string fn = "" + restaurant.Id; string SaveLocation = Server.MapPath("~/Data"); if (!System.IO.Directory.Exists(SaveLocation)) { System.IO.Directory.CreateDirectory(SaveLocation); } System.Drawing.Image bm = System.Drawing.Image.FromStream(restaurant_picture.PostedFile.InputStream); bm = ResizeBitmap((Bitmap)bm, 290, 300); /// new width, height bm.Save(Path.Combine(SaveLocation, fn + ext)); restaurant.PictureUrl = fn + ext; ctx.SaveChanges(); } Response.Redirect("/Restaurants/Default.aspx"); }