Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
                    }
                }
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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");
            }
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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)
            {
            }
        }
Beispiel #7
0
        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();
            }
        }
Beispiel #8
0
        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();
                }
            }
        }
Beispiel #9
0
        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();
            }
        }
Beispiel #10
0
 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();
             }
         }
     }
 }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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;
            }
        }
Beispiel #13
0
        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;
        }
Beispiel #14
0
        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");
        }