public ActionResult NggCreate([DataSourceRequest] DataSourceRequest request, PiFGame pifgame)
        {
            Debug.WriteLine("Create Method Fired");

            // Perform model binding (fill the game properties and validate it).
            if (pifgame != null)
            {
                // if (pifgame.Count < 1)
                // {
                // pifgame.Count = 1;
                // }
                Game game = new PiFDbDataContext().Games.Single(g => g.id == pifgame.ID);

                if (game == null)
                {
                    ModelState.AddModelError("Name", "Invalid game name.");
                }
                else if (SessionNewGamesRepository.One(p => p.ID == game.id) != null)
                {
                    ModelState.AddModelError("Name", "Duplicate game, please edit existing row.");
                }
                else
                {
                    pifgame.PointWorth = game.PointWorth;
                    pifgame.SteamID = game.SteamID;
                    pifgame.Name = game.Name;
                    pifgame.ID = game.id;
                    SessionNewGamesRepository.Insert(pifgame);
                }
            }

            // Rebind the grid
            return Json(new[] { pifgame }.ToDataSourceResult(request, ModelState));
        }
Beispiel #2
0
        public ActionResult Complete(string thingID)
        {
            if (AccountHelper.CurrentUser.Threads.All(t => t.ThingID != thingID))
            {
                return RedirectToAction("Me", "Account");
            }

            var cpm = new CompletePiFModel
                          {
                              ThingID =
                                  AccountHelper.CurrentUser.Threads.Single(t => t.ThingID == thingID)
                                               .ThingID
                          };

            ViewData["ThreadUsers"] = cpm.ThreadUserList(cpm.ThingID);

            var db = new PiFDbDataContext();
            SessionCompleteGamesRepository.Clear();
            foreach (var tg in AccountHelper.CurrentUser.Threads.Single(t => t.ThingID == thingID).ThreadGames)
            {
                User user = db.Users.SingleOrDefault(u => u.id == tg.WinnerID);
                SessionCompleteGamesRepository.Insert(
                    new CompletePiFModel(tg, user != null ? user.Username : string.Empty));
            }

            return View(cpm);
        }
Beispiel #3
0
        public ActionResult Complete(CompletePiFModel model)
        {
            Thread thread = AccountHelper.CurrentUser.Threads.SingleOrDefault(t => t.ThingID == model.ThingID);

            if (thread == null)
            {
                return RedirectToAction("Me", "Account");
            }

            if (ModelState.IsValid)
            {
                var db = new PiFDbDataContext();
                thread = db.Threads.Single(t => t.ThingID == model.ThingID);
                db.ThreadGames.DeleteAllOnSubmit(thread.ThreadGames);
                var newUsers = new List<User>();
                foreach (var pifgame in SessionCompleteGamesRepository.All())
                {
                    for (int i = 1; i <= pifgame.Count; i++)
                    {
                        if (pifgame.WinnerUserName == string.Empty)
                        {
                            ModelState.AddModelError("Winner", "All entries must have a winner selected");
                            break;
                        }

                        User user = db.Users.SingleOrDefault(u => u.Username == pifgame.WinnerUserName);
                        if (user == null && newUsers.Exists(u => u.Username == pifgame.WinnerUserName))
                        {
                            user = newUsers.Single(u => u.Username == pifgame.WinnerUserName);
                        }

                        if (user == null)
                        {
                            user = new User { Username = pifgame.WinnerUserName, RecordCreatedDate = DateTime.UtcNow };
                            db.Users.InsertOnSubmit(user);
                            newUsers.Add(user);
                        }

                        var tg = new ThreadGame { ThreadID = thread.id, GameID = pifgame.ID, User = user };
                        db.ThreadGames.InsertOnSubmit(tg);
                    }

                    if (!ModelState.IsValid)
                    {
                        break;
                    }
                }

                if (ModelState.IsValid)
                {
                    db.SubmitChanges();
                    return RedirectToAction("View", "PiF", new { thread.ThingID });
                }
            }

            return View(model);
        }
        public User GetUserByName(string username)
        {
            var user = new PiFDbDataContext().Users.SingleOrDefault(x => x.Username == username);
            if (user != null)
            {
                user.SteamAvatar = user.SteamID > 0
                                       ? AccountHelper.GetSteamPlayerSummary(user.SteamID)["avatarmedium"].Value<string>()
                                       : "http://media.steampowered.com/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_medium.jpg";
            }
            else
            {
                user = new User
                {
                    SteamAvatar =
                        "http://media.steampowered.com/steamcommunity/public/images/avatars/fe/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_medium.jpg"
                };
            }

            return user;
        }
        public ActionResult Index(int page = 1)
        {
            const int pageSize = 15;
            var context = new PiFDbDataContext();
            if (openThreads == null)
            {
                openThreads =
                    CompiledQuery.Compile<PiFDbDataContext, IQueryable<Thread>>(
                        ctx => ctx.Threads.Where(c => c.EndDate.CompareTo(SqlDateTime.MinValue.Value) != 0));
            }

            int threadCount = openThreads.Invoke(context).Count();

            double totalPages = (double)threadCount / pageSize;
            List<Thread> pifs = openThreads.Invoke(context).Skip((page - 1) * pageSize).Take(pageSize).ToList();

            ViewBag.TotalPages = (int)Math.Ceiling(totalPages);
            ViewBag.ThreadCount = threadCount;
            ViewBag.CurrentPage = page;
            ViewBag.PageSize = pageSize;

            return View(Utilities.GetThreads(pifs));
        }
        public ActionResult EggCreate([DataSourceRequest] DataSourceRequest request, PiFGame pifgame)
        {
            // Perform model binding (fill the game properties and validate it).
            if (pifgame != null && ModelState.IsValid)
            {
                Game game = new PiFDbDataContext().Games.FirstOrDefault(g => g.Name == pifgame.Name);
                if (game == null)
                {
                    ModelState.AddModelError("Name", "Invalid game name.");
                }
                else if (SessionEditGamesRepository.One(p => p.ID == game.id) != null)
                {
                    ModelState.AddModelError("Name", "Duplicate game, please edit existing row.");
                }
                else
                {
                    pifgame = new PiFGame(pifgame.Count, game);
                    SessionEditGamesRepository.Insert(pifgame);
                }
            }

            // Rebind the grid
            return Json(new[] { pifgame }.ToDataSourceResult(request, ModelState));
        }
Beispiel #7
0
        public ActionResult New(NewPiFModel model)
        {
            if (!SessionNewGamesRepository.All().Any())
            {
                ModelState.AddModelError("NewGameGrid", "At least 1 game is required to PiF");
                return View(model);
            }

            string thingID = string.Empty;
            bool debug;
            #if DEBUG

            // We don't want to send an actual Self.PlayItForward thread to reddit if we are debugging, we will generate a random string instead
            debug = true;
            #endif
            if (debug == false)
            {
                dynamic response;
                try
                {
                    response = PostPiF(
                        model.ThreadTitle,
                        model.SelfText,
                        Session["ModHash"].ToString(),
                        model.Captcha,
                        Session["CaptchaID"].ToString());
                }
                catch (WebException)
                {
                    ModelState.AddModelError("Submit", "Reddit is currently down.");
                    return View(model);
                }

                if (response["errors"].Length > 0)
                {
                    Session["CaptchaID"] = response["captcha"];
                    model.CaptchaRequired = !string.IsNullOrWhiteSpace(Session["CaptchaID"].ToString());
                    ModelState.AddModelError("Submit", Utilities.RedditError(response["errors"][0][0]));
                    return View(model);
                }

                Session["CaptchaID"] = null;
                thingID = response["data"]["id"];
            }

            if (ModelState.IsValid)
            {
                var db = new PiFDbDataContext();

                var r = new Random();
                var thread = new Thread
                                 {
                                     EndDate = SqlDateTime.MinValue.Value,
                                     CreatedDate = DateTime.UtcNow,
                                     Title = model.ThreadTitle,
                                     ThingID =
                                         debug == false
                                             ? thingID
                                             : string.Format(
                                                 "{0}{1}{2}{3}{4}",
                                                 (char)r.Next(97, 123),
                                                 (char)r.Next(97, 123),
                                                 (char)r.Next(97, 123),
                                                 (char)r.Next(97, 123),
                                                 (char)r.Next(97, 123)),
                                     UserID = AccountHelper.CurrentUser.id
                                 };
                foreach (var pifgame in SessionNewGamesRepository.All())
                {
                    for (int i = 1; i <= pifgame.Count; i++)
                    {
                        thread.ThreadGames.Add(new ThreadGame { Thread = thread, GameID = pifgame.ID });
                    }
                }

                // Get a typed table to run queries and insert the data into the table.
                db.Threads.InsertOnSubmit(thread);
                db.SubmitChanges();
                SessionNewGamesRepository.Clear();

                // TODO: Handle errors.
                return RedirectToAction("Edit", "PiF", new { thread.ThingID });
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
Beispiel #8
0
        public ActionResult Edit(EditPiFModel model)
        {
            Thread thread = AccountHelper.CurrentUser.Threads.SingleOrDefault(t => t.ThingID == model.ThingID);

            if (thread == null)
            {
                return RedirectToAction("Profile", "Account");
            }

            var db = new PiFDbDataContext();
            thread = db.Threads.Single(t => t.ThingID == model.ThingID);
            db.ThreadGames.DeleteAllOnSubmit(thread.ThreadGames);
            foreach (var pifgame in SessionEditGamesRepository.All())
            {
                for (int i = 1; i <= pifgame.Count; i++)
                {
                    var tg = new ThreadGame { Thread = thread, GameID = pifgame.ID };
                    db.ThreadGames.InsertOnSubmit(tg);
                }
            }

            db.SubmitChanges();

            return View(model);
        }
 public JsonResult GetGames([DataSourceRequest] DataSourceRequest request)
 {
     IEnumerable games =
         new PiFDbDataContext().Games.ToDataSourceResult(request, o => new { o.Name, ID = o.id }).Data;
     return Json(games, JsonRequestBehavior.AllowGet);
 }
Beispiel #10
0
 /// <summary>
 /// Adds a user to the database and returns the user object.
 /// </summary>
 /// <param name="username">The username for the user to add.</param>
 /// <returns>The added user object.</returns>
 private static User AddUser(string username)
 {
     var ip = new UserIP { CreatedDate = DateTime.UtcNow, HashedIP = Utilities.GetHash(HttpContext.Current.Request.UserHostAddress) };
     var user = new User { Username = username, RecordCreatedDate = DateTime.UtcNow };
     user.UserIPs.Add(ip);
     var db = new PiFDbDataContext();
     db.Users.InsertOnSubmit(user);
     db.SubmitChanges();
     return user;
 }