示例#1
0
        public virtual async Task <ActionResult> Participants(string EventId)
        {
            // Event Id must be an integer and found
            //
            Int32 eventId = 0;

            if (!Int32.TryParse(EventId, out eventId))
            {
                eventId = 0;
            }
            if (eventId == 0)
            {
                return(new HttpStatusCodeResult(400, "Invalid event Id"));
            }

            // Retrieve participants and format into appropriate view model
            //
            var attendings = await RaceDayClient.GetEventDetail(eventId);

            List <EventParticipant> participants = new List <EventParticipant>();

            foreach (var user in attendings.attendees)
            {
                participants.Add(EventParticipant.FromJson(user));
            }

            // return the rendered view with participants in it
            //
            AttendanceResult result = new AttendanceResult();

            result.Attendees = RenderPartialViewToString(MVC.Shared.Views.Partials._ParticipantList, participants);

            return(Json(result));
        }
示例#2
0
        public virtual async Task <ActionResult> Event(IndexViewModel model)
        {
            if (ModelState.IsValid)
            {
                var newEvent = await RaceDayClient.AddEvent(
                    model.EventForm.EventName.Trim(),
                    model.EventForm.EventDate,
                    (model.EventForm.EventUrl != null ? model.EventForm.EventUrl.Trim() : null),
                    (model.EventForm.EventLocation != null ? model.EventForm.EventLocation.Trim() : null),
                    (model.EventForm.EventDescription != null ? model.EventForm.EventDescription.Trim() : null),
                    RaceDayUser.CurrentUser.UserId
                    );

                if (newEvent != null)
                {
                    await RaceDayClient.AddUserToEvent(newEvent.eventinfo.EventId);

                    // redisplay new list positioning on the added event
                    //
                    return(Redirect(VirtualPathUtility.ToAppRelative("~/") + "#e" + newEvent.eventinfo.EventId.ToString()));
                }
                else
                {
                    model.PageMessage = new PageMessageModel(MessageDismissEnum.close, CssMessageClassEnum.error, "Unable to create event");
                }
            }

            return(View(MVC.Home.Views.Index, model));
        }
示例#3
0
        public virtual async Task <ActionResult> ForgotPassword(ForgotPasswordViewModel model)
        {
            if (ModelState.IsValid)
            {
                string recapatchaResponse = Request.Form["g-recaptcha-response"];
                var    result             = await RecaptchaClient.Verify(RecaptchaConfiguration.Instance.SecretKey, recapatchaResponse);

                if (result.success)
                {
                    var statusCode = await RaceDayClient.ForgotPassword(model.RegisterEmail);

                    if (statusCode == HttpStatusCode.OK)
                    {
                        model.PageMessage = new PageMessageModel(MessageDismissEnum.none, CssMessageClassEnum.success, "Check your email for your account password.<br />You may change your password after you have <a href=\"/raceday\">logged on</a>.");
                    }
                    else
                    {
                        model.PageMessage = new PageMessageModel(MessageDismissEnum.none, CssMessageClassEnum.error, "Could not identify your account.<br />Use the <a href=\"/Logon/Register\">Register Account</a> link to create an account if you have not yet registered.");
                    }
                }
                else
                {
                    model.PageMessage = new PageMessageModel(MessageDismissEnum.none, CssMessageClassEnum.error, "Invalid captcha response.");
                }
            }

            return(View(model));
        }
示例#4
0
        public virtual async Task <ActionResult> Attending(String EventId, String ClassName)
        {
            // Event Id must be an integer and found
            //
            Int32 eventId = 0;

            if (!Int32.TryParse(EventId, out eventId))
            {
                eventId = 0;
            }
            if (eventId == 0)
            {
                return(new HttpStatusCodeResult(400, "Invalid event Id"));
            }

            // ClassName must be recognized
            //
            if ((ClassName != "glyphicon-check") && (ClassName != "glyphicon-unchecked"))
            {
                return(new HttpStatusCodeResult(400, "Unrecognized class name"));
            }

            EventDetail eventDetail;

            // Switch the attendance
            //
            AttendanceResult result = new AttendanceResult();

            if (ClassName == "glyphicon-check")
            {
                await RaceDayClient.RemoveUserFromEvent(eventId);

                eventDetail = await RaceDayClient.GetEventDetail(eventId);

                result.Button = RenderPartialViewToString(MVC.Shared.Views.Partials._NotAttendingButton, EventInfo.CopyFromEventService(false, eventDetail));
            }
            else
            {
                await RaceDayClient.AddUserToEvent(eventId);

                eventDetail = await RaceDayClient.GetEventDetail(eventId);

                result.Button = RenderPartialViewToString(MVC.Shared.Views.Partials._AttendingButton, EventInfo.CopyFromEventService(true, eventDetail));
            }

            // Rebind the participant list with the change
            //
            List <EventParticipant> participants = new List <EventParticipant>();

            foreach (var user in eventDetail.attendees)
            {
                participants.Add(EventParticipant.FromJson(user));
            }

            result.Attendees = RenderPartialViewToString(MVC.Shared.Views.Partials._ParticipantList, participants);
            return(Json(result));
        }
示例#5
0
        public virtual async Task <ActionResult> Create([Bind(Include = "Name,FirstName,LastName,Email,Password")] MFUserViewModel mFUser)
        {
            if (ModelState.IsValid)
            {
                await RaceDayClient.UserCreate(mFUser.Name, mFUser.FirstName, mFUser.LastName, mFUser.Email, mFUser.Password);

                return(RedirectToAction("Index"));
            }

            return(View(mFUser));
        }
示例#6
0
        // GET: MFUsers/Details/5
        public virtual async Task <ActionResult> Details(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var user = await RaceDayClient.GetUserDetail(id);

            if (user == null)
            {
                return(HttpNotFound());
            }
            return(View(user));
        }
示例#7
0
        public virtual async Task <ActionResult> MyProfile(ProfileViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new RaceDay.Services.Models.JsonUser
                {
                    UserId    = model.UserId,
                    Name      = model.Name.Trim(),
                    FirstName = model.FirstName.Trim(),
                    LastName  = model.LastName.Trim(),
                    Email     = model.Email.Trim()
                };
                var status = await RaceDayClient.EditUser(model.UserId, user);

                if (status == HttpStatusCode.OK)
                {
                    if (model.Password != null && !string.IsNullOrEmpty(model.Password.Trim()))
                    {
                        status = await RaceDayClient.UpdatePassword(model.Email, model.Password);

                        if (status == HttpStatusCode.OK)
                        {
                            model.PageMessage = new PageMessageModel(MessageDismissEnum.close, CssMessageClassEnum.success, "Profile with password updated");
                        }
                        else
                        {
                            model.PageMessage = new PageMessageModel(MessageDismissEnum.close, CssMessageClassEnum.error, "Unable to update password");
                        }
                    }
                    else
                    {
                        model.PageMessage = new PageMessageModel(MessageDismissEnum.close, CssMessageClassEnum.success, "Profile updated");
                    }

                    RaceDayUser.CurrentUser.Name      = model.Name;
                    RaceDayUser.CurrentUser.FirstName = model.FirstName;
                    RaceDayUser.CurrentUser.LastName  = model.LastName;
                    RaceDayUser.CurrentUser.Email     = model.Email;
                }
                else
                {
                    model.PageMessage = new PageMessageModel(MessageDismissEnum.close, CssMessageClassEnum.error, "Unable to update profile");
                }
            }

            return(View(model));
        }
示例#8
0
        // GET: /Home/Index
        //
        // Main page of the application.  Displays the list of events along with participation and also initializes the
        // event form for adding events.
        //
        public virtual async Task <ActionResult> Index()
        {
            IndexViewModel model = new IndexViewModel();

            model.EventForm.GroupCode = RaceDayConfiguration.Instance.APIGroup;

            // Get all events for the current user
            //
            List <EventAttending> events = await RaceDayClient.GetAllEventsForCurrentUser();

            model.Events = EventInfo.CopyFromService(events, RaceDayUser.CurrentUser.UserId);

            // Return the view
            //
            model.PageMessage = GetTempDataPageMessage();
            return(View(model));
        }
示例#9
0
        public virtual async Task <ActionResult> Index(LogonViewModel model)
        {
            if (ModelState.IsValid)
            {
                // Attempt a login
                //
                var login = await RaceDayClient.Login(model.LoginEmail.Trim(), model.LoginPassword.Trim());

                if (login == null)
                {
                    model.PageMessage = new PageMessageModel(MessageDismissEnum.none, CssMessageClassEnum.error, "Invalid Email/Password.");
                }
                else
                {
                    RaceDayUser.LoginUser(login, model.RememberMe);
                    return(RedirectToAction(MVC.Home.Index()));
                }
            }
            return(View(model));
        }
示例#10
0
        public virtual async Task <ActionResult> Edit(string id, [Bind(Include = "UserId,Name,FirstName,LastName,Email,Password")] MFUserViewModel mFUser)
        {
            if (ModelState.IsValid)
            {
                var user = await RaceDayClient.GetUserDetail(id);

                if (user != null)
                {
                    user.Name      = mFUser.Name;
                    user.FirstName = mFUser.FirstName;
                    user.LastName  = mFUser.LastName;
                    user.Email     = mFUser.Email;
                    user.Password  = mFUser.Password;

                    await RaceDayClient.EditUser(id, user);

                    return(RedirectToAction("Index"));
                }
            }
            return(View(mFUser));
        }
示例#11
0
        public virtual async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                string recapatchaResponse = Request.Form["g-recaptcha-response"];
                var    result             = await RecaptchaClient.Verify(RecaptchaConfiguration.Instance.SecretKey, recapatchaResponse);

                if (result.success)
                {
                    var resultCode = await RaceDayClient.UserRegister(model.GroupCode, model.FirstName, model.LastName, model.RegisterEmail, model.RegisterPassword);

                    if (resultCode == HttpStatusCode.Created)
                    {
                        var login = await RaceDayClient.Login(model.RegisterEmail.Trim(), model.RegisterPassword.Trim());

                        RaceDayUser.LoginUser(login, false);

                        return(RedirectToAction(MVC.Home.Index()));
                    }
                    else if (resultCode == HttpStatusCode.BadRequest)
                    {
                        model.PageMessage = new PageMessageModel(MessageDismissEnum.none, CssMessageClassEnum.error, "Invalid registration request.");
                    }
                    else if (resultCode == HttpStatusCode.Conflict)
                    {
                        model.PageMessage = new PageMessageModel(MessageDismissEnum.none, CssMessageClassEnum.error, "Account already exists.");
                    }
                    else
                    {
                        model.PageMessage = new PageMessageModel(MessageDismissEnum.none, CssMessageClassEnum.error, "API Server error.");
                    }
                }
                else
                {
                    model.PageMessage = new PageMessageModel(MessageDismissEnum.none, CssMessageClassEnum.error, "Invalid captcha response.");
                }
            }

            return(View(model));
        }
示例#12
0
        // GET: MFUsers/Edit/5
        public virtual async Task <ActionResult> Edit(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var user = await RaceDayClient.GetUserDetail(id);

            if (user == null)
            {
                return(HttpNotFound());
            }
            return(View(new MFUserViewModel
            {
                UserId = user.UserId,
                Name = user.Name,
                FirstName = user.FirstName,
                LastName = user.LastName,
                Email = user.Email,
                Password = user.Password,
            }));
        }
示例#13
0
        // GET: MFUsers
        public virtual async Task <ActionResult> Index()
        {
            var users = await RaceDayClient.GetAllUsers();

            return(View(users));
        }
示例#14
0
        public virtual async Task <ActionResult> DeleteConfirmed(string id)
        {
            await RaceDayClient.DeleteUser(id);

            return(RedirectToAction("Index"));
        }