public ActionResult BeforeLogin(RouteData routeData) { if (!ModelState.IsValid) return new JsonResult { Data = new { Completed = false, Reason = "Please provide a route name." } }; Trace.TraceInformation("Saving route before login process - id {0}, name {1}, notes {2}, is public? {3}, points: {4}", routeData.Id, routeData.Name, routeData.Notes, routeData.Public, routeData.Points); Session["rp_RouteInfoPreLogin"] = routeData; return new JsonResult { Data = new { Completed = true } }; }
public ActionResult Save(RouteData routeData) { if (!ModelState.IsValid) return new JsonResult { Data = new { Completed = false, Reason = "Please provide a route name." } }; if (!ControllerContext.HasValidUserAccount()) return new JsonResult { Data = new { Completed = false, Reason = "Please create an account." } }; var userUnits = ControllerContext.UserDistanceUnits(); Distance distance = new Distance(routeData.Distance, userUnits); Trace.TraceInformation("Saving route {0} name {1}, notes {2}, is public? {3}, points: {4}", routeData.Id, routeData.Name, routeData.Notes, routeData.Public, routeData.Points); string lastRun; string lastRunBy; if (routeData.Id == 0) { var newRoute = MassiveDB.Current.CreateRoute(ControllerContext.UserAccount(), routeData.Name, routeData.Notes ?? "", distance, (routeData.Public ?? false) ? Route.PublicRoute : Route.PrivateRoute, routeData.Points); routeData.Id = Convert.ToInt64(newRoute.Id); lastRun = ""; lastRunBy = ""; } else { var currentRoute = MassiveDB.Current.FindRoute(routeData.Id); var currentUser = ControllerContext.UserAccount(); var isRouteOwnedByAnotherUser = currentUser.Id != currentRoute.Creator; if (isRouteOwnedByAnotherUser && currentRoute.RouteType != Route.PublicRoute.ToString()) return new JsonResult { Data = new { Completed = false, Reason = "Cannot save the route - you can only save routes you have created." } }; if (isRouteOwnedByAnotherUser || currentRoute.MapPoints != routeData.Points) { if (!isRouteOwnedByAnotherUser) { // delete old currentRoute.RouteType = Route.DeletedRoute; MassiveDB.Current.UpdateRoute(currentRoute); } // add new currentRoute = MassiveDB.Current.CreateRoute(currentUser, routeData.Name, routeData.Notes ?? "", distance, (routeData.Public ?? false) ? Route.PublicRoute : Route.PrivateRoute, routeData.Points, currentRoute.Id); routeData.Id = Convert.ToInt64(currentRoute.Id); lastRun = ""; lastRunBy = ""; } else { currentRoute.Name = routeData.Name; currentRoute.Notes = routeData.Notes ?? ""; currentRoute.RouteType = (routeData.Public ?? false) ? Route.PublicRoute : Route.PrivateRoute; MassiveDB.Current.UpdateRoute(currentRoute); // get last run info var runInfo = MassiveDB.Current.FindLatestRunLogForRoutes(new[] { routeData.Id }).FirstOrDefault(); if (runInfo == null) { lastRunBy = ""; lastRun = ""; } else { lastRunBy = runInfo.DisplayName; lastRun = runInfo.Date == null ? "" : runInfo.Date.ToString("ddd, dd/MMM/yyyy"); } } } return new JsonResult { Data = new { Completed = true, Route = new { Id = routeData.Id, Name = routeData.Name, Notes = routeData.Notes ?? "", Public = routeData.Public ?? false, Points = routeData.Points, Distance = distance.BaseDistance, LastRun = lastRun, PublicOther = false, Deleted = false } } }; }