コード例 #1
0
        protected ActionResult SaveTree(ImportTreesModel model, Trip trip, int treeId, bool saveUnlessOptionalErrors)
        {
            var tree      = trip.FindTreeById(treeId);
            var treeModel = model.FindTreeById(tree.Id);

            Mapper.Map(treeModel, tree);

            var siteModel = model.FindSiteContainingTreeWithId(tree.Id);

            string modelPrefix = $"Sites[{model.Sites.IndexOf(siteModel)}].Trees[{siteModel.Trees.IndexOf(treeModel)}].";

            this.ValidateMappedModel <TreeBase, ImportTreeModel>(tree, modelPrefix, ValidationTag.Required);
            if (!ModelState.IsValid)
            {
                return(Request.IsAjaxRequest() ?
                       PartialView("TreePartial", model).AddViewData("treeId", tree.Id) : View(model));
            }

            this.ValidateMappedModel <TreeBase, ImportTreeModel>(tree, modelPrefix, ValidationTag.Optional);
            if (!ModelState.IsValid && saveUnlessOptionalErrors)
            {
                treeModel.HasOptionalErrors = true;
                model.HasOptionalErrors     = true;
                return(Request.IsAjaxRequest() ?
                       PartialView("TreePartial", model).AddViewData("treeId", tree.Id) : View(model));
            }

            tree.SetTripDefaults();
            Repositories.Imports.Save(trip);
            Uow.Persist();

            treeModel.IsEditing = false;
            return(Request.IsAjaxRequest() ? PartialView("TreePartial", model).AddViewData("treeId", tree.Id) : View(model));
        }
コード例 #2
0
        protected ActionResult SaveSite(ImportSitesModel model, Trip trip, int siteId, bool saveUnlessOptionalErrors)
        {
            var siteModel = model.FindSiteById(siteId);
            var site      = trip.FindSiteById(siteId);

            Mapper.Map(siteModel, site);

            string modelPrefix = $"Sites[{model.Sites.IndexOf(siteModel)}].";

            this.ValidateMappedModel <Site, ImportSiteModel>(site, modelPrefix, ValidationTag.Required);
            if (!ModelState.IsValid)
            {
                return(Request.IsAjaxRequest() ?
                       PartialView("SitePartial", model).AddViewData("siteId", site.Id) : View(model));
            }

            this.ValidateMappedModel <Site, ImportSiteModel>(site, modelPrefix, ValidationTag.Optional);
            if (!ModelState.IsValid && saveUnlessOptionalErrors)
            {
                siteModel.HasOptionalError = true;
                model.HasOptionalErrors    = true;
                return(Request.IsAjaxRequest() ?
                       PartialView("SitePartial", model).AddViewData("siteId", site.Id) : View(model));
            }

            site.SetTripDefaults();
            Repositories.Imports.Save(trip);
            Uow.Persist();

            siteModel.IsEditing = false;
            return(Request.IsAjaxRequest() ?
                   PartialView("SitePartial", model).AddViewData("siteId", site.Id) : View(model));
        }
コード例 #3
0
        public virtual ActionResult Remove(int id)
        {
            var reference = Repositories.Photos.FindReferenceById(id);

            if (!reference.IsAuthorizedToRemove(User))
            {
                return(new UnauthorizedResult());
            }
            Repositories.Photos.Remove(reference);
            Uow.Persist();
            return(PhotoRemoval(reference));
        }
コード例 #4
0
 public virtual ActionResult CompleteRegistration(string token)
 {
     if (!string.IsNullOrEmpty(token))
     {
         var user = Repositories.Users.FindByEmailVerificationToken(token);
         if (user != null && !user.IsEmailVerified)
         {
             user.VerifyEmail(token);
             Repositories.Users.Save(user);
             Uow.Persist();
             return(View(true));
         }
     }
     return(View(false));
 }
コード例 #5
0
        public virtual ActionResult Trees(int id)
        {
            var trip = Repositories.Imports.FindById(id);

            if (!User.IsAuthorizedToEdit(trip))
            {
                return(new UnauthorizedResult());
            }

            trip.InitializeTrees();
            Uow.Persist();

            var model = Mapper.Map(trip, new ImportTreesModel());

            return(View(model));
        }
コード例 #6
0
        protected ActionResult RemoveSite(ImportSitesModel model, Trip trip, int siteId)
        {
            var site = trip.FindSiteById(siteId);

            trip.RemoveSite(site);
            Repositories.Imports.Save(trip);
            Uow.Persist();

            var siteModel = model.FindSiteById(site.Id);

            model.RemoveSite(siteModel);
            model.Initialize();

            return(Request.IsAjaxRequest() ?
                   PartialView("SitesPartial", model) : (ActionResult)View(model));
        }
コード例 #7
0
        protected ActionResult AddSite(ImportSitesModel model, Trip trip)
        {
            var site = trip.AddSite();

            trip.InitializeSites();
            Repositories.Imports.Save(trip);
            Uow.Persist();

            Mapper.Map(site, model.AddSite());
            model.Initialize();

            return(Request.IsAjaxRequest() ?
                   (model.Sites.Count > 2 ? PartialView("SitePartial", model).AddViewData("siteId", site.Id)
                : PartialView("SitesPartial", model))
                : View(model));
        }
コード例 #8
0
        public virtual ActionResult Edit(AccountEditModel model)
        {
            if (model.EditingPassword)
            {
                if (!ModelState.IsValid)
                {
                    return(View(Mapper.Map <User, AccountEditModel>(User)));
                }

                if (!User.VerifyPassword(model.Password.ExistingPassword))
                {
                    ModelState.AddModelError("Password.ExistingPassword", "Invalid password.");
                    return(View(Mapper.Map <User, AccountEditModel>(User)));
                }

                User.ChangePasswordUsingExistingPassword(model.Password.ExistingPassword, model.Password.NewPassword);
                this.ValidateMappedModel <User, AccountEditModel>(User, ValidationTag.Required);
                if (!ModelState.IsValid)
                {
                    return(View(Mapper.Map <User, AccountEditModel>(User)));
                }

                Uow.Persist();
                TempData.SetAccountMessage("Your password has been changed");
                return(Redirect(HttpContext.GetDefaultReturnUrl()));
            }

            if (model.EditingDetails)
            {
                if (!ModelState.IsValid)
                {
                    return(View(model));
                }

                Mapper.Map(model.Details, User);
                this.ValidateMappedModel <User, AccountEditModel>(User, ValidationTag.Required);
                if (!ModelState.IsValid)
                {
                    return(View(model));
                }

                Uow.Persist();
                TempData.SetAccountMessage("Your account has been saved");
                return(Redirect(HttpContext.GetDefaultReturnUrl()));
            }
            throw new NotImplementedException();
        }
コード例 #9
0
        public virtual ActionResult History([ModelBinder(typeof(ImportInnerActionModel))] ImportInnerActionModel innerAction)
        {
            if (innerAction.Equals(ImportModelLevel.Trip, ImportModelAction.Remove))
            {
                var trip = Repositories.Imports.FindById(innerAction.Id);
                if (!User.IsAuthorizedToEdit(trip))
                {
                    return(new UnauthorizedResult());
                }
                Repositories.Imports.Remove(trip);
                Uow.Persist();
                return(View(Mapper.Map <IList <Trip>, IList <ImportTripSummaryModel> >(
                                Repositories.Imports.ListCreatedByUser(User.Id))));
            }

            throw new NotImplementedException();
        }
コード例 #10
0
        protected ActionResult RemoveTree(ImportTreesModel model, Trip trip, int treeId)
        {
            var tree = trip.FindTreeById(treeId);
            var site = tree.Site;

            tree.Site.RemoveTree(tree);
            Repositories.Imports.Save(trip);
            Uow.Persist();

            var treeModel = model.FindTreeById(tree.Id);
            var siteModel = model.FindSiteById(site.Id);

            siteModel.RemoveTree(treeModel);
            model.Initialize();

            return(Request.IsAjaxRequest() ?
                   PartialView("SiteTreesPartial", model).AddViewData("siteId", site.Id) : View(model));
        }
コード例 #11
0
        protected ActionResult AddTree(ImportTreesModel model, Trip trip, int siteId)
        {
            var site = trip.FindSiteById(siteId);
            var tree = site.AddSingleTrunkTree();

            Repositories.Imports.Save(trip);
            Uow.Persist();

            var siteModel = model.FindSiteById(site.Id);
            var treeModel = siteModel.AddTree();

            Mapper.Map(tree, treeModel);
            model.Initialize();

            return(Request.IsAjaxRequest() ? (site.Trees.Count > 2 ?
                                              PartialView("TreePartial", model).AddViewData("treeId", tree.Id)
                : PartialView("SiteTreesPartial", model).AddViewData("siteId", site.Id))
                : View(model));
        }
コード例 #12
0
        public virtual ActionResult Finish(int id)
        {
            var trip = Repositories.Imports.FindById(id);

            if (!User.IsAuthorizedToEdit(trip))
            {
                return(new UnauthorizedResult());
            }
            if (trip.IsImported)
            {
                Repositories.Imports.Reimport(trip);
            }
            else
            {
                Repositories.Imports.Import(trip);
            }
            Uow.Persist();
            return(RedirectToAction(MVC.Import.History()));
        }
コード例 #13
0
        public virtual ActionResult Trip(ImportTripModel model)
        {
            Trip trip = model.Id == 0 ? Model.Imports.Trip.Create()
                : Repositories.Imports.FindById(model.Id);

            if (!User.IsAuthorizedToEdit(trip))
            {
                return(new UnauthorizedResult());
            }

            Mapper.Map(model, trip);
            trip.InitializeSites();
            this.ValidateMappedModel <Trip, ImportTripModel>(trip, ValidationTag.Required);
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            Repositories.Imports.Save(trip);
            Uow.Persist();
            return(RedirectToAction(MVC.Import.Sites(trip.Id)));
        }
コード例 #14
0
        public virtual ActionResult PasswordAssistance(AccountPasswordAssistanceModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var user = Repositories.Users.FindByEmail(model.Email);

            if (user != null)
            {
                user.GenerateForgottenPasswordAssistanceToken();
                Repositories.Users.Save(user);
                Uow.Persist();
                using (SmtpClient mailClient = new SmtpClient())
                    using (MailMessage mail = PasswordAssistanceEmail.Create(user,
                                                                             Url.Action("CompletePasswordAssistance", new { token = user.ForgottenPasswordAssistanceToken.UrlEncodedValue })))
                    {
                        mailClient.Send(mail);
                    }
            }
            model.AssistanceComplete = true;
            return(View(model));
        }
コード例 #15
0
        protected ActionResult SaveTrees(ImportTreesModel model, Trip trip, bool saveUnlessOptionalErrors)
        {
            Mapper.Map(model, trip);

            trip.VisitTrees((p, t) => this.ValidateMappedModel <TreeBase, ImportTreeModel>(t, $"{p}.", ValidationTag.Required));
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            trip.VisitTrees((p, t) => this.ValidateMappedModel <TreeBase, ImportTreeModel>(t, $"{p}.", ValidationTag.Optional));
            if (!ModelState.IsValid && saveUnlessOptionalErrors)
            {
                model.HasOptionalErrors = true;
                return(View(model));
            }

            trip.Sites.SelectMany(s => s.Trees).Last().SetTripDefaults();
            Repositories.Imports.Save(trip);
            Uow.Persist();

            return(RedirectToAction(MVC.Import.Review(trip.Id)));
        }
コード例 #16
0
 public virtual ActionResult CompletePasswordAssistance(CompleteAccountPasswordAssistanceModel model, string token)
 {
     if (!string.IsNullOrEmpty(token))
     {
         var user = Repositories.Users.FindByForgottenPasswordAssistanceToken(token);
         if (user != null && user.IsForgottenPasswordAssistanceTokenValid)
         {
             model.CanCompletePasswordAssistance = true;
             if (!ModelState.IsValid)
             {
                 return(View(model));
             }
             user.ChangePasswordUsingPasswordAssistanceToken(token, model.Password);
             this.ValidateMappedModel <User, AccountRegistrationModel>(user, ValidationTag.Required);
             if (!ModelState.IsValid)
             {
                 return(View(model));
             }
             Uow.Persist();
             model.AssistanceComplete = true;
         }
     }
     return(View(model));
 }
コード例 #17
0
        public virtual ActionResult Register(AccountRegistrationModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var user = User.Create(model.Email, model.Password);

            this.ValidateMappedModel <User, AccountRegistrationModel>(user, ValidationTag.Required);
            if (!ModelState.IsValid)
            {
                return(View(model));
            }
            var existingUser = Repositories.Users.FindByEmail(model.Email);

            if (existingUser != null)
            {
                if (existingUser.IsEmailVerified)
                {
                    ModelState.AddModelError("Email", "You must choose a different email.");
                    return(View(model));
                }
                user = existingUser;
                user.ChangePasswordIfNonEmailVerified(model.Password);
            }
            Repositories.Users.Save(user);
            Uow.Persist();
            using (SmtpClient mailClient = new SmtpClient())
                using (MailMessage mail = EmailVerificationEmail.Create(user,
                                                                        Url.Action("CompleteRegistration", new { token = user.EmailVerificationToken.UrlEncodedValue })))
                {
                    mailClient.Send(mail);
                }
            model.RegistrationComplete = true;
            return(View(model));
        }