protected override DriverResult Editor(SiteSettingsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var site  = _siteService.GetSiteSettings().As <SiteSettingsPart>();
            var model = new SiteSettingsPartViewModel {
                Site         = site,
                SiteCultures = _cultureManager.ListCultures(),
                TimeZones    = TimeZoneInfo.GetSystemTimeZones()
            };

            var previousBaseUrl = model.Site.BaseUrl;

            updater.TryUpdateModel(model, Prefix, null, null);

            // ensures the super user is fully empty
            if (String.IsNullOrEmpty(model.SuperUser))
            {
                model.SuperUser = String.Empty;
            }
            // otherwise the super user must be a valid user, to prevent an external account to impersonate as this name
            //the user management module ensures the super user can't be deleted, but it can be disabled
            else
            {
                if (_membershipService.GetUser(model.SuperUser) == null)
                {
                    updater.AddModelError("SuperUser", T("The user {0} was not found", model.SuperUser));
                }
            }


            // ensure the base url is absolute if provided
            if (!String.IsNullOrWhiteSpace(model.Site.BaseUrl))
            {
                if (!Uri.IsWellFormedUriString(model.Site.BaseUrl, UriKind.Absolute))
                {
                    updater.AddModelError("BaseUrl", T("The base url must be absolute."));
                }
                // if the base url has been modified, try to ping it
                else if (!String.Equals(previousBaseUrl, model.Site.BaseUrl, StringComparison.OrdinalIgnoreCase))
                {
                    try {
                        var request = WebRequest.Create(model.Site.BaseUrl) as HttpWebRequest;
                        if (request != null)
                        {
                            using (request.GetResponse() as HttpWebResponse) {}
                        }
                    }
                    catch (Exception e) {
                        _notifier.Warning(T("The base url you entered could not be requested from current location."));
                        Logger.Warning(e, "Could not query base url: {0}", model.Site.BaseUrl);
                    }
                }
            }

            return(ContentShape("Parts_Settings_SiteSettingsPart",
                                () => shapeHelper.EditorTemplate(TemplateName: "Parts.Settings.SiteSettingsPart", Model: model, Prefix: Prefix)));
        }
        protected override DriverResult Editor(SiteSettingsPart part, dynamic shapeHelper)
        {
            var site = _siteService.GetSiteSettings().As <SiteSettingsPart>();

            var model = new SiteSettingsPartViewModel {
                Site         = site,
                SiteCultures = _cultureManager.ListCultures(),
                TimeZones    = TimeZoneInfo.GetSystemTimeZones()
            };

            return(ContentShape("Parts_Settings_SiteSettingsPart",
                                () => shapeHelper.EditorTemplate(TemplateName: "Parts.Settings.SiteSettingsPart", Model: model, Prefix: Prefix)));
        }
        protected override DriverResult Editor(SiteSettingsPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            var site  = _siteService.GetSiteSettings().As <SiteSettingsPart>();
            var model = new SiteSettingsPartViewModel {
                Site          = site,
                SiteCultures  = _cultureManager.ListCultures(),
                SiteCalendars = _calendarProvider.ListCalendars(),
                TimeZones     = TimeZoneInfo.GetSystemTimeZones()
            };

            var previousBaseUrl = model.Site.BaseUrl;

            // Update all properties but not SuperUser, MaxPageSize and BaseUrl.
            updater.TryUpdateModel(model, Prefix, null, new [] { "Site.SuperUser", "Site.MaxPageSize", "Site.BaseUrl", "Site.MaxPagedCount" });

            // only a user with SiteOwner permission can change the site owner
            if (_authorizer.Authorize(StandardPermissions.SiteOwner))
            {
                updater.TryUpdateModel(model, Prefix, new[] { "Site.SuperUser", "Site.MaxPageSize", "Site.BaseUrl", "Site.MaxPagedCount" }, null);

                // ensures the super user is fully empty
                if (String.IsNullOrEmpty(model.SuperUser))
                {
                    model.SuperUser = String.Empty;
                }
                // otherwise the super user must be a valid user, to prevent an external account to impersonate as this name
                //the user management module ensures the super user can't be deleted, but it can be disabled
                else
                {
                    if (_membershipService.GetUser(model.SuperUser) == null)
                    {
                        updater.AddModelError("SuperUser", T("用户 {0} 不存在", model.SuperUser));
                    }
                }

                // ensure the base url is absolute if provided
                if (!String.IsNullOrWhiteSpace(model.Site.BaseUrl))
                {
                    if (!Uri.IsWellFormedUriString(model.Site.BaseUrl, UriKind.Absolute))
                    {
                        updater.AddModelError("BaseUrl", T("网站地址必须是绝对路径."));
                    }
                    // if the base url has been modified, try to ping it
                    else if (!String.Equals(previousBaseUrl, model.Site.BaseUrl, StringComparison.OrdinalIgnoreCase))
                    {
                        try {
                            var request = WebRequest.Create(model.Site.BaseUrl) as HttpWebRequest;
                            if (request != null)
                            {
                                using (request.GetResponse() as HttpWebResponse) { }
                            }
                        }
                        catch (Exception ex) {
                            if (ex.IsFatal())
                            {
                                throw;
                            }
                            _notifier.Warning(T("网站URL不能应用于当前地址."));
                            Logger.Warning(ex, "Could not query base url: {0}", model.Site.BaseUrl);
                        }
                    }
                }
            }

            return(ContentShape("Parts_Settings_SiteSettingsPart",
                                () => shapeHelper.EditorTemplate(TemplateName: "Parts.Settings.SiteSettingsPart", Model: model, Prefix: Prefix)));
        }