Files
Orchard/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs

504 lines
22 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web.Mvc;
using System.Web.Routing;
using Orchard.ContentManagement;
using Orchard.Core.Settings.Models;
using Orchard.DisplayManagement;
using Orchard.Localization;
using Orchard.Mvc;
using Orchard.Mvc.Extensions;
using Orchard.Security;
using Orchard.Settings;
using Orchard.UI.Navigation;
using Orchard.UI.Notify;
using Orchard.Users.Events;
using Orchard.Users.Models;
using Orchard.Users.Services;
using Orchard.Users.ViewModels;
using Orchard.Utility.Extensions;
using Orchard.Mvc.Html;
using Orchard.Users.Constants;
namespace Orchard.Users.Controllers {
[ValidateInput(false)]
public class AdminController : Controller, IUpdateModel {
private readonly IMembershipService _membershipService;
private readonly IUserService _userService;
private readonly IUserEventHandler _userEventHandlers;
private readonly ISiteService _siteService;
private readonly IEnumerable<IUserManagementActionsProvider> _userManagementActionsProviders;
private readonly UrlHelper _urlHelper;
public AdminController(
IOrchardServices services,
IMembershipService membershipService,
IUserService userService,
IShapeFactory shapeFactory,
IUserEventHandler userEventHandlers,
ISiteService siteService,
IEnumerable<IUserManagementActionsProvider> userManagementActionsProviders,
UrlHelper urlHelper) {
Services = services;
_membershipService = membershipService;
_userService = userService;
_userEventHandlers = userEventHandlers;
_siteService = siteService;
_userManagementActionsProviders = userManagementActionsProviders;
_urlHelper = urlHelper;
T = NullLocalizer.Instance;
Shape = shapeFactory;
}
dynamic Shape { get; set; }
public IOrchardServices Services { get; set; }
public Localizer T { get; set; }
public ActionResult Index(UserIndexOptions options, PagerParameters pagerParameters) {
if (!Services.Authorizer.Authorize(Permissions.ViewUsers, T("Not authorized to list users")))
return new HttpUnauthorizedResult();
var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
// default options
if (options == null)
options = new UserIndexOptions();
var users = Services.ContentManager
.Query<UserPart, UserPartRecord>();
switch (options.Filter) {
case UsersFilter.Approved:
users = users.Where(u => u.RegistrationStatus == UserStatus.Approved);
break;
case UsersFilter.Pending:
users = users.Where(u => u.RegistrationStatus == UserStatus.Pending);
break;
case UsersFilter.EmailPending:
users = users.Where(u => u.EmailStatus == UserStatus.Pending);
break;
}
if(!string.IsNullOrWhiteSpace(options.Search)) {
users = users.Where(u => u.UserName.Contains(options.Search) || u.Email.Contains(options.Search));
}
var pagerShape = Shape.Pager(pager).TotalItemCount(users.Count());
switch (options.Order) {
case UsersOrder.Name:
users = users.OrderBy(u => u.UserName);
break;
case UsersOrder.Email:
users = users.OrderBy(u => u.Email);
break;
Merge branch 'refs/heads/1.9.x' into dev Conflicts: ClickToBuild.cmd Orchard.proj lib/msbuild/MSBuild.Community.Tasks.Targets lib/newtonsoft.json/Newtonsoft.Json.xml lib/windowsazure/Microsoft.WindowsAzure.Diagnostics.xml src/Orchard.Azure.Tests/Orchard.Azure.Tests.csproj src/Orchard.Azure/Orchard.Azure.Web/Config/Host.config src/Orchard.Azure/Orchard.Azure.Web/Config/HostComponents.config src/Orchard.Azure/Orchard.Azure.Web/Orchard.Azure.Web.csproj src/Orchard.Azure/Orchard.Azure.Web/Web.config src/Orchard.Azure/Orchard.Azure.sln src/Orchard.Core.Tests/Body/BodyPartTests.cs src/Orchard.Core.Tests/Common/Providers/CommonPartProviderTests.cs src/Orchard.Core.Tests/Orchard.Core.Tests.csproj src/Orchard.Profile/profiling-setup-commands.txt src/Orchard.Specs/Bindings/OrchardSiteFactory.cs src/Orchard.Specs/Blogs.feature src/Orchard.Specs/Blogs.feature.cs src/Orchard.Specs/Comments.feature src/Orchard.Specs/Comments.feature.cs src/Orchard.Specs/Hosting/Orchard.Web/Config/Host.config src/Orchard.Specs/Hosting/Orchard.Web/Web.config src/Orchard.Specs/Hosting/Simple.Web/Web.config src/Orchard.Specs/Lists.feature src/Orchard.Specs/Lists.feature.cs src/Orchard.Specs/Media.feature src/Orchard.Specs/Media.feature.cs src/Orchard.Specs/MultiTenancy.feature src/Orchard.Specs/MultiTenancy.feature.cs src/Orchard.Specs/Orchard.Specs.csproj src/Orchard.Specs/Pages.feature src/Orchard.Specs/Pages.feature.cs src/Orchard.Specs/PermissionModel.feature src/Orchard.Specs/PermissionModel.feature.cs src/Orchard.Specs/Setup.feature src/Orchard.Specs/Setup.feature.cs src/Orchard.Specs/Tags.feature src/Orchard.Specs/Tags.feature.cs src/Orchard.Specs/Users.feature src/Orchard.Specs/Users.feature.cs src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs src/Orchard.Tests.Modules/Conditions/Providers/UrlRuleConditionTest.cs src/Orchard.Tests.Modules/DatabaseEnabledTestsBase.cs src/Orchard.Tests.Modules/ImportExport/Services/ImportExportServiceTests.cs src/Orchard.Tests.Modules/Media/Services/MediaServiceTests.cs src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj src/Orchard.Tests.Modules/Recipes/RecipeHandlers/ModuleStepTest.cs src/Orchard.Tests.Modules/Recipes/RecipeHandlers/ThemeStepTest.cs src/Orchard.Tests.Modules/Recipes/Services/RecipeManagerTests.cs src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs src/Orchard.Tests.Modules/Users/Services/MembershipServiceTests.cs src/Orchard.Tests.Modules/Widgets/WidgetsTests.cs src/Orchard.Tests/App.config src/Orchard.Tests/ContainerTestBase.cs src/Orchard.Tests/ContentManagement/ContentQueryTests.cs src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs src/Orchard.Tests/ContentManagement/DynamicContentQueryTests.cs src/Orchard.Tests/ContentManagement/HqlExpressionTests.cs src/Orchard.Tests/DataMigration/SchemaBuilderTests.cs src/Orchard.Tests/DataMigration/Utilities/NullInterpreter.cs src/Orchard.Tests/DatabaseEnabledTestsBase.cs src/Orchard.Tests/DisplayManagement/DefaultDisplayManagerTests.cs src/Orchard.Tests/DisplayManagement/Descriptors/ShapeAttributeBindingStrategyTests.cs src/Orchard.Tests/Environment/DefaultOrchardHostTests.cs src/Orchard.Tests/Environment/Extensions/ExtensionLoaderCoordinatorTests.cs src/Orchard.Tests/Environment/Extensions/ExtensionManagerTests.cs src/Orchard.Tests/Environment/Loaders/DynamicExtensionLoaderTests.cs src/Orchard.Tests/Orchard.Framework.Tests.csproj src/Orchard.Tests/Stubs/StubReportsCoordinator.cs src/Orchard.Tests/Stubs/StubWorkContextAccessor.cs src/Orchard.Tests/Time/TimeZoneSelectorTests.cs src/Orchard.Web.Tests/Orchard.Web.Tests.csproj src/Orchard.Web/Config/Host.config src/Orchard.Web/Config/HostComponents.config src/Orchard.Web/Config/log4net.config src/Orchard.Web/Core/Common/DateEditor/DateEditorHandler.cs src/Orchard.Web/Core/Common/Drivers/BodyPartDriver.cs src/Orchard.Web/Core/Common/Drivers/IdentityPartDriver.cs src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs src/Orchard.Web/Core/Common/Handlers/BodyPartHandler.cs src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs src/Orchard.Web/Core/Common/Handlers/IdentityPartHandler.cs src/Orchard.Web/Core/Common/Migrations.cs src/Orchard.Web/Core/Common/Models/CommonPart.cs src/Orchard.Web/Core/Common/Models/CommonPartVersionRecord.cs src/Orchard.Web/Core/Common/Services/IdentifierResolverSelector.cs src/Orchard.Web/Core/Common/Utilities/LazyField.cs src/Orchard.Web/Core/Common/Views/CommonMetadataOwner.cshtml src/Orchard.Web/Core/Common/Views/Parts.Common.Metadata.SummaryAdmin.cshtml src/Orchard.Web/Core/Containers/Models/ContainerPart.cs src/Orchard.Web/Core/Containers/ViewModels/ContainerViewModel.cs src/Orchard.Web/Core/Containers/Views/EditorTemplates/ContainerWidget.cshtml src/Orchard.Web/Core/Contents/Controllers/ItemController.cs src/Orchard.Web/Core/Contents/Security/AuthorizationEventHandler.cs src/Orchard.Web/Core/Contents/Views/Admin/List.cshtml src/Orchard.Web/Core/Contents/Views/Content.Edit.cshtml src/Orchard.Web/Core/Dashboard/Views/Admin/Index.cshtml src/Orchard.Web/Core/Feeds/Rss/RssFeedBuilder.cs src/Orchard.Web/Core/Feeds/Services/FeedFilter.cs src/Orchard.Web/Core/Feeds/Services/FeedManager.cs src/Orchard.Web/Core/Feeds/StandardBuilders/CorePartsFeedItemBuilder.cs src/Orchard.Web/Core/Feeds/StandardQueries/ContainerFeedQuery.cs src/Orchard.Web/Core/Navigation/Controllers/AdminController.cs src/Orchard.Web/Core/Navigation/Drivers/AdminMenuPartDriver.cs src/Orchard.Web/Core/Navigation/Drivers/MenuItemPartDriver.cs src/Orchard.Web/Core/Navigation/Drivers/MenuPartDriver.cs src/Orchard.Web/Core/Navigation/Handlers/AdminMenuPartHandler.cs src/Orchard.Web/Core/Navigation/Handlers/MenuHandler.cs src/Orchard.Web/Core/Navigation/Handlers/MenuPartHandler.cs src/Orchard.Web/Core/Navigation/Scripts/navigation-admin.js src/Orchard.Web/Core/Navigation/Services/AdminMenuNavigationProvider.cs src/Orchard.Web/Core/Navigation/Services/MainMenuService.cs src/Orchard.Web/Core/Navigation/Services/NavigationManager.cs src/Orchard.Web/Core/Navigation/Styles/navigation-admin.css src/Orchard.Web/Core/Navigation/Views/Admin/Index.cshtml src/Orchard.Web/Core/Navigation/Views/MenuItem.Edit.cshtml src/Orchard.Web/Core/Orchard.Core.csproj src/Orchard.Web/Core/Scheduling/Services/ScheduledTaskExecutor.cs src/Orchard.Web/Core/Scheduling/Services/ScheduledTaskManager.cs src/Orchard.Web/Core/Settings/Drivers/SiteSettingsPartDriver.cs src/Orchard.Web/Core/Settings/Handlers/SiteSettingsPartHandler.cs src/Orchard.Web/Core/Settings/Migrations.cs src/Orchard.Web/Core/Settings/Services/SiteService.cs src/Orchard.Web/Core/Settings/State/ShellStateManager.cs src/Orchard.Web/Core/Shapes/CoreShapes.cs src/Orchard.Web/Core/Shapes/DateTimeShapes.cs src/Orchard.Web/Core/Shapes/ResourceManifest.cs src/Orchard.Web/Core/Shapes/Scripts/base.js src/Orchard.Web/Modules/Lucene/Lucene.csproj src/Orchard.Web/Modules/Markdown/Markdown.csproj src/Orchard.Web/Modules/Orchard.Alias/AdminMenu.cs src/Orchard.Web/Modules/Orchard.Alias/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.Alias/IAliasService.cs src/Orchard.Web/Modules/Orchard.Alias/Implementation/AliasRoute.cs src/Orchard.Web/Modules/Orchard.Alias/Implementation/DefaultAliasService.cs src/Orchard.Web/Modules/Orchard.Alias/Implementation/Holder/AliasInfo.cs src/Orchard.Web/Modules/Orchard.Alias/Implementation/Holder/IAliasHolder.cs src/Orchard.Web/Modules/Orchard.Alias/Implementation/Map/AliasMap.cs src/Orchard.Web/Modules/Orchard.Alias/Implementation/Storage/AliasStorage.cs src/Orchard.Web/Modules/Orchard.Alias/Implementation/Utils.cs src/Orchard.Web/Modules/Orchard.Alias/Migrations.cs src/Orchard.Web/Modules/Orchard.Alias/Orchard.Alias.csproj src/Orchard.Web/Modules/Orchard.Alias/Records/AliasRecord.cs src/Orchard.Web/Modules/Orchard.Alias/Routes.cs src/Orchard.Web/Modules/Orchard.Alias/ViewModels/AdminIndexViewModel.cs src/Orchard.Web/Modules/Orchard.Alias/Views/Admin/Add.cshtml src/Orchard.Web/Modules/Orchard.Alias/Views/Admin/Delete.cshtml src/Orchard.Web/Modules/Orchard.Alias/Views/Admin/Edit.cshtml src/Orchard.Web/Modules/Orchard.Alias/Views/Admin/Index.cshtml src/Orchard.Web/Modules/Orchard.Alias/Web.config src/Orchard.Web/Modules/Orchard.AntiSpam/Drivers/ReCaptchaPartDriver.cs src/Orchard.Web/Modules/Orchard.AntiSpam/Handlers/AkismetSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.AntiSpam/Handlers/ReCaptchaSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.AntiSpam/Handlers/TypePadSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.AntiSpam/Module.txt src/Orchard.Web/Modules/Orchard.AntiSpam/Orchard.AntiSpam.csproj src/Orchard.Web/Modules/Orchard.AntiSpam/ViewModels/ReCaptchaPartEditViewModel.cs src/Orchard.Web/Modules/Orchard.AntiSpam/Views/EditorTemplates/Parts.ReCaptcha.Fields.cshtml src/Orchard.Web/Modules/Orchard.AntiSpam/Web.config src/Orchard.Web/Modules/Orchard.ArchiveLater/Handlers/ArchiveLaterPartHandler.cs src/Orchard.Web/Modules/Orchard.ArchiveLater/Handlers/UnpublishingTaskHandler.cs src/Orchard.Web/Modules/Orchard.ArchiveLater/Orchard.ArchiveLater.csproj src/Orchard.Web/Modules/Orchard.Autoroute/Drivers/AutoroutePartDriver.cs src/Orchard.Web/Modules/Orchard.Autoroute/Handlers/AutoroutePartHandler.cs src/Orchard.Web/Modules/Orchard.Autoroute/Migrations.cs src/Orchard.Web/Modules/Orchard.Autoroute/Models/AutoroutePart.cs src/Orchard.Web/Modules/Orchard.Autoroute/Models/AutoroutePartRecord.cs src/Orchard.Web/Modules/Orchard.Autoroute/Orchard.Autoroute.csproj src/Orchard.Web/Modules/Orchard.Autoroute/Providers/SlugTokens.cs src/Orchard.Web/Modules/Orchard.Autoroute/ResourceManifest.cs src/Orchard.Web/Modules/Orchard.Autoroute/Services/AliasResolverSelector.cs src/Orchard.Web/Modules/Orchard.Autoroute/Services/AutorouteService.cs src/Orchard.Web/Modules/Orchard.Autoroute/Services/DefaultSlugService.cs src/Orchard.Web/Modules/Orchard.Autoroute/Services/IAutorouteService.cs src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettings.cs src/Orchard.Web/Modules/Orchard.Autoroute/Settings/AutorouteSettingsEvents.cs src/Orchard.Web/Modules/Orchard.Autoroute/Settings/RoutePattern.cs src/Orchard.Web/Modules/Orchard.Autoroute/Styles/orchard-autoroute-settings.css src/Orchard.Web/Modules/Orchard.Autoroute/ViewModels/AutoroutePartEditViewModel.cs src/Orchard.Web/Modules/Orchard.Autoroute/Views/DefinitionTemplates/AutorouteSettings.cshtml src/Orchard.Web/Modules/Orchard.Autoroute/Views/EditorTemplates/Parts.Autoroute.Edit.cshtml src/Orchard.Web/Modules/Orchard.Autoroute/Web.config src/Orchard.Web/Modules/Orchard.Azure/Constants.cs src/Orchard.Web/Modules/Orchard.Azure/Orchard.Azure.csproj src/Orchard.Web/Modules/Orchard.Azure/Services/Environment/Configuration/AzureBlobShellSettingsManager.cs src/Orchard.Web/Modules/Orchard.Azure/Services/FileSystems/Media/AzureBlobStorageProvider.cs src/Orchard.Web/Modules/Orchard.Azure/Web.config src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogPartDriver.cs src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogPostPartDriver.cs src/Orchard.Web/Modules/Orchard.Blogs/Drivers/RemoteBlogPublishingDriver.cs src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogArchivesPartHandler.cs src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPartArchiveHandler.cs src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPartHandler.cs src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostPartHandler.cs src/Orchard.Web/Modules/Orchard.Blogs/Handlers/RecentBlogPostsPartHandler.cs src/Orchard.Web/Modules/Orchard.Blogs/Migrations.cs src/Orchard.Web/Modules/Orchard.Blogs/Module.txt src/Orchard.Web/Modules/Orchard.Blogs/Orchard.Blogs.csproj src/Orchard.Web/Modules/Orchard.Blogs/Routing/ArchiveConstraint.CS src/Orchard.Web/Modules/Orchard.Blogs/Routing/RsdConstraint.CS src/Orchard.Web/Modules/Orchard.Blogs/Security/BlogAuthorizationEventHandler.cs src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogPostService.cs src/Orchard.Web/Modules/Orchard.Blogs/Services/BlogService.cs src/Orchard.Web/Modules/Orchard.Blogs/Services/XmlRpcHandler.cs src/Orchard.Web/Modules/Orchard.Blogs/Views/BlogAdmin/List.cshtml src/Orchard.Web/Modules/Orchard.Blogs/Views/Parts.Blogs.BlogPost.ListAdmin.cshtml src/Orchard.Web/Modules/Orchard.CodeGeneration/CodeGenerationTemplates/ModuleRootWebConfig.txt src/Orchard.Web/Modules/Orchard.CodeGeneration/Commands/CodeGenerationCommands.cs src/Orchard.Web/Modules/Orchard.CodeGeneration/Orchard.CodeGeneration.csproj src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentPartDriver.cs src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentsContainerPartDriver.cs src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentsPartDriver.cs src/Orchard.Web/Modules/Orchard.Comments/Feeds/CommentFeedItemBuilder.cs src/Orchard.Web/Modules/Orchard.Comments/Feeds/CommentedOnContainerFeedQuery.cs src/Orchard.Web/Modules/Orchard.Comments/Feeds/CommentedOnFeedQuery.cs src/Orchard.Web/Modules/Orchard.Comments/Handlers/CommentPartHandler.cs src/Orchard.Web/Modules/Orchard.Comments/Handlers/CommentSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.Comments/Handlers/CommentsPartHandler.cs src/Orchard.Web/Modules/Orchard.Comments/Orchard.Comments.csproj src/Orchard.Web/Modules/Orchard.Comments/Services/CommentService.cs src/Orchard.Web/Modules/Orchard.Comments/Views/Parts.Comment.cshtml src/Orchard.Web/Modules/Orchard.Conditions/Providers/UrlCondition.cs src/Orchard.Web/Modules/Orchard.ContentPermissions/Drivers/ContentPermissionsPartDriver.cs src/Orchard.Web/Modules/Orchard.ContentPermissions/Orchard.ContentPermissions.csproj src/Orchard.Web/Modules/Orchard.ContentPermissions/Web.config src/Orchard.Web/Modules/Orchard.ContentPicker/Drivers/ContentMenuItemPartDriver.cs src/Orchard.Web/Modules/Orchard.ContentPicker/Handlers/ContentMenuItemPartHandler.cs src/Orchard.Web/Modules/Orchard.ContentPicker/Handlers/ContentPickerFieldHandler.cs src/Orchard.Web/Modules/Orchard.ContentPicker/Handlers/NavigationPartHandler.cs src/Orchard.Web/Modules/Orchard.ContentPicker/Orchard.ContentPicker.csproj src/Orchard.Web/Modules/Orchard.ContentPicker/Web.config src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.csproj src/Orchard.Web/Modules/Orchard.ContentTypes/Orchard.ContentTypes.sln src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs src/Orchard.Web/Modules/Orchard.CustomForms/Module.txt src/Orchard.Web/Modules/Orchard.CustomForms/Orchard.CustomForms.csproj src/Orchard.Web/Modules/Orchard.CustomForms/Security/AuthorizationEventHandler.cs src/Orchard.Web/Modules/Orchard.CustomForms/Web.config src/Orchard.Web/Modules/Orchard.DesignerTools/Module.txt src/Orchard.Web/Modules/Orchard.DesignerTools/Orchard.DesignerTools.csproj src/Orchard.Web/Modules/Orchard.DesignerTools/Services/UrlAlternatesFactory.cs src/Orchard.Web/Modules/Orchard.DesignerTools/Web.config src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.Email/Models/SmtpSettingsPart.cs src/Orchard.Web/Modules/Orchard.Email/Orchard.Email.csproj src/Orchard.Web/Modules/Orchard.Email/Views/EditorTemplates/Parts/SmtpSettings.cshtml src/Orchard.Web/Modules/Orchard.Fields/Drivers/BooleanFieldDriver.cs src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs src/Orchard.Web/Modules/Orchard.Fields/Module.txt src/Orchard.Web/Modules/Orchard.Fields/Orchard.Fields.csproj src/Orchard.Web/Modules/Orchard.Fields/Web.config src/Orchard.Web/Modules/Orchard.Forms/Orchard.Forms.csproj src/Orchard.Web/Modules/Orchard.Forms/Web.config src/Orchard.Web/Modules/Orchard.ImageEditor/Orchard.ImageEditor.csproj src/Orchard.Web/Modules/Orchard.ImageEditor/Web.config src/Orchard.Web/Modules/Orchard.ImportExport/Commands/ImportExportCommands.cs src/Orchard.Web/Modules/Orchard.ImportExport/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.ImportExport/Models/ExportOptions.cs src/Orchard.Web/Modules/Orchard.ImportExport/Module.txt src/Orchard.Web/Modules/Orchard.ImportExport/Orchard.ImportExport.csproj src/Orchard.Web/Modules/Orchard.ImportExport/Services/ICustomExportStep.cs src/Orchard.Web/Modules/Orchard.ImportExport/Services/IExportEventHandler.cs src/Orchard.Web/Modules/Orchard.ImportExport/Services/IImportExportService.cs src/Orchard.Web/Modules/Orchard.ImportExport/Services/ImportExportService.cs src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ExportViewModel.cs src/Orchard.Web/Modules/Orchard.ImportExport/ViewModels/ImportViewModel.cs src/Orchard.Web/Modules/Orchard.ImportExport/Views/Admin/Export.cshtml src/Orchard.Web/Modules/Orchard.ImportExport/Views/Admin/Import.cshtml src/Orchard.Web/Modules/Orchard.ImportExport/Views/Admin/ImportResult.cshtml src/Orchard.Web/Modules/Orchard.Indexing/Commands/IndexingCommands.cs src/Orchard.Web/Modules/Orchard.Indexing/Migrations.cs src/Orchard.Web/Modules/Orchard.Indexing/Module.txt src/Orchard.Web/Modules/Orchard.Indexing/Orchard.Indexing.csproj src/Orchard.Web/Modules/Orchard.Indexing/Services/IndexingBackgroundTask.cs src/Orchard.Web/Modules/Orchard.Indexing/Services/IndexingTaskExecutor.cs src/Orchard.Web/Modules/Orchard.Indexing/Services/IndexingTaskManager.cs src/Orchard.Web/Modules/Orchard.Indexing/Settings/EditorEvents.cs src/Orchard.Web/Modules/Orchard.Indexing/Views/Admin/Create.cshtml src/Orchard.Web/Modules/Orchard.Layouts/Orchard.Layouts.csproj src/Orchard.Web/Modules/Orchard.Lists/Migrations.cs src/Orchard.Web/Modules/Orchard.Lists/Orchard.Lists.csproj src/Orchard.Web/Modules/Orchard.Lists/Web.config src/Orchard.Web/Modules/Orchard.Localization/Drivers/LocalizationPartDriver.cs src/Orchard.Web/Modules/Orchard.Localization/Handlers/LocalizationPartHandler.cs src/Orchard.Web/Modules/Orchard.Localization/Orchard.Localization.csproj src/Orchard.Web/Modules/Orchard.Media/Handlers/MediaSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.Media/Module.txt src/Orchard.Web/Modules/Orchard.Media/Orchard.Media.csproj src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs src/Orchard.Web/Modules/Orchard.Media/Services/XmlRpcHandler.cs src/Orchard.Web/Modules/Orchard.MediaLibrary/Controllers/ClientStorageController.cs src/Orchard.Web/Modules/Orchard.MediaLibrary/Factories/ImageFactory.cs src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/MediaPartHandler.cs src/Orchard.Web/Modules/Orchard.MediaLibrary/Handlers/WebSearchSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.MediaLibrary/Module.txt src/Orchard.Web/Modules/Orchard.MediaLibrary/ResourceManifest.cs src/Orchard.Web/Modules/Orchard.MediaLibrary/Services/MediaLibraryService.cs src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Admin/Import.cshtml src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Admin/Index.cshtml src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/ClientStorage/Index.cshtml src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/EditorTemplates/Parts/WebSearch.WebSearchSettings.cshtml src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Fields/MediaLibraryPicker.SummaryAdmin.cshtml src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/Fields/MediaLibraryPicker.cshtml src/Orchard.Web/Modules/Orchard.MediaLibrary/Views/WebSearch/Index.cshtml src/Orchard.Web/Modules/Orchard.MediaLibrary/Web.config src/Orchard.Web/Modules/Orchard.MediaPicker/Handlers/MediaGalleryFieldHandler.cs src/Orchard.Web/Modules/Orchard.MediaPicker/Module.txt src/Orchard.Web/Modules/Orchard.MediaPicker/Orchard.MediaPicker.csproj src/Orchard.Web/Modules/Orchard.MediaProcessing/Handlers/ImageProfilePartHandler.cs src/Orchard.Web/Modules/Orchard.MediaProcessing/Orchard.MediaProcessing.csproj src/Orchard.Web/Modules/Orchard.MediaProcessing/Services/IImageProfileManager.cs src/Orchard.Web/Modules/Orchard.MediaProcessing/Services/ImageProfileManager.cs src/Orchard.Web/Modules/Orchard.MediaProcessing/Services/ImageProfileService.cs src/Orchard.Web/Modules/Orchard.MediaProcessing/Web.config src/Orchard.Web/Modules/Orchard.Migrations/Orchard.Migrations.csproj src/Orchard.Web/Modules/Orchard.Modules/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.Modules/Module.txt src/Orchard.Web/Modules/Orchard.Modules/Orchard.Modules.csproj src/Orchard.Web/Modules/Orchard.Modules/Recipes/Executors/FeatureStep.cs src/Orchard.Web/Modules/Orchard.Modules/Views/Admin/Features.cshtml src/Orchard.Web/Modules/Orchard.Modules/styles/orchard-modules-admin.css src/Orchard.Web/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs src/Orchard.Web/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.MultiTenancy/Extensions/UrlHelperExtensions.cs src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt src/Orchard.Web/Modules/Orchard.MultiTenancy/Orchard.MultiTenancy.csproj src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/ITenantService.cs src/Orchard.Web/Modules/Orchard.MultiTenancy/Services/TenantService.cs src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/Add.cshtml src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForDisabled.cshtml src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForRunning.cshtml src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/Edit.cshtml src/Orchard.Web/Modules/Orchard.MultiTenancy/Views/Admin/Index.cshtml src/Orchard.Web/Modules/Orchard.OutputCache/Filters/OutputCacheFilter.cs src/Orchard.Web/Modules/Orchard.OutputCache/Handlers/CacheSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.OutputCache/Orchard.OutputCache.csproj src/Orchard.Web/Modules/Orchard.OutputCache/Services/DefaultCacheStorageProvider.cs src/Orchard.Web/Modules/Orchard.OutputCache/Web.config src/Orchard.Web/Modules/Orchard.Packaging/Controllers/GalleryUpdatesController.cs src/Orchard.Web/Modules/Orchard.Packaging/Controllers/PackagingServicesController.cs src/Orchard.Web/Modules/Orchard.Packaging/Orchard.Packaging.csproj src/Orchard.Web/Modules/Orchard.Pages/Commands/PageCommands.cs src/Orchard.Web/Modules/Orchard.Pages/Migrations.cs src/Orchard.Web/Modules/Orchard.Pages/Module.txt src/Orchard.Web/Modules/Orchard.Pages/Orchard.Pages.csproj src/Orchard.Web/Modules/Orchard.Projections/Controllers/LayoutController.cs src/Orchard.Web/Modules/Orchard.Projections/Drivers/ProjectionPartDriver.cs src/Orchard.Web/Modules/Orchard.Projections/Drivers/QueryPartDriver.cs src/Orchard.Web/Modules/Orchard.Projections/Migrations.cs src/Orchard.Web/Modules/Orchard.Projections/Orchard.Projections.csproj src/Orchard.Web/Modules/Orchard.Projections/Providers/Layouts/GridLayout.cs src/Orchard.Web/Modules/Orchard.Projections/Providers/Layouts/ListLayout.cs src/Orchard.Web/Modules/Orchard.Projections/Providers/Layouts/RawLayout.cs src/Orchard.Web/Modules/Orchard.Projections/Tests/Orchard.Projections.Tests.csproj src/Orchard.Web/Modules/Orchard.Projections/Views/Admin/Index.cshtml src/Orchard.Web/Modules/Orchard.Projections/Web.config src/Orchard.Web/Modules/Orchard.PublishLater/Drivers/PublishLaterPartDriver.cs src/Orchard.Web/Modules/Orchard.PublishLater/Handlers/PublishLaterPartHandler.cs src/Orchard.Web/Modules/Orchard.PublishLater/Handlers/PublishingTaskHandler.cs src/Orchard.Web/Modules/Orchard.PublishLater/Orchard.PublishLater.csproj src/Orchard.Web/Modules/Orchard.PublishLater/Services/PublishingTaskManager.cs src/Orchard.Web/Modules/Orchard.Recipes/Commands/RecipesCommands.cs src/Orchard.Web/Modules/Orchard.Recipes/Orchard.Recipes.csproj src/Orchard.Web/Modules/Orchard.Recipes/Providers/Executors/CommandStep.cs src/Orchard.Web/Modules/Orchard.Recipes/Providers/Executors/ModuleStep.cs src/Orchard.Web/Modules/Orchard.Recipes/Providers/Executors/SettingsStep.cs src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/DataRecipeHandler.cs src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MetaDataRecipeHandler.cs src/Orchard.Web/Modules/Orchard.Recipes/RecipeHandlers/MigrationRecipeHandler.cs src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeHarvester.cs src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeJournalManager.cs src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeScheduler.cs src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeStepExecutor.cs src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeStepQueue.cs src/Orchard.Web/Modules/Orchard.Roles/DefaultRoleUpdater.cs src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs src/Orchard.Web/Modules/Orchard.Roles/Handlers/UserRolesPartHandler.cs src/Orchard.Web/Modules/Orchard.Roles/Module.txt src/Orchard.Web/Modules/Orchard.Roles/Orchard.Roles.csproj src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs src/Orchard.Web/Modules/Orchard.Roles/Services/RolesBasedAuthorizationService.cs src/Orchard.Web/Modules/Orchard.Rules/Handlers/ScheduledActionTaskHandler.cs src/Orchard.Web/Modules/Orchard.Rules/Handlers/ScheduledActionTaskPartHandler.cs src/Orchard.Web/Modules/Orchard.Rules/ImportExport/RulesCustomExportStep.cs src/Orchard.Web/Modules/Orchard.Rules/ImportExport/RulesRecipeHandler.cs src/Orchard.Web/Modules/Orchard.Rules/Module.txt src/Orchard.Web/Modules/Orchard.Rules/Orchard.Rules.csproj src/Orchard.Web/Modules/Orchard.Rules/Recipes/Builders/RulesStep.cs src/Orchard.Web/Modules/Orchard.Rules/Web.config src/Orchard.Web/Modules/Orchard.Scripting.CSharp/Orchard.Scripting.CSharp.csproj src/Orchard.Web/Modules/Orchard.Scripting.CSharp/Web.config src/Orchard.Web/Modules/Orchard.Search/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.Search/Controllers/ContentPickerController.cs src/Orchard.Web/Modules/Orchard.Search/Controllers/SearchController.cs src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchFormPartDriver.cs src/Orchard.Web/Modules/Orchard.Search/Drivers/SearchSettingsPartDriver.cs src/Orchard.Web/Modules/Orchard.Search/Handlers/SearchSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.Search/Models/SearchFormPart.cs src/Orchard.Web/Modules/Orchard.Search/Orchard.Search.csproj src/Orchard.Web/Modules/Orchard.Search/Placement.info src/Orchard.Web/Modules/Orchard.Search/ResourceManifest.cs src/Orchard.Web/Modules/Orchard.Search/Routes.cs src/Orchard.Web/Modules/Orchard.Search/Styles/orchard-search-admin.css src/Orchard.Web/Modules/Orchard.Search/Styles/orchard-search-search.css src/Orchard.Web/Modules/Orchard.Search/ViewModels/SearchSettingsIndexViewModel.cs src/Orchard.Web/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.cshtml src/Orchard.Web/Modules/Orchard.Search/Views/Parts/Search.SearchForm.cshtml src/Orchard.Web/Modules/Orchard.Setup/Commands/SetupCommand.cs src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupController.cs src/Orchard.Web/Modules/Orchard.Setup/Controllers/SetupDatabaseType.cs src/Orchard.Web/Modules/Orchard.Setup/Module.txt src/Orchard.Web/Modules/Orchard.Setup/Orchard.Setup.csproj src/Orchard.Web/Modules/Orchard.Setup/Recipes/blog.recipe.xml src/Orchard.Web/Modules/Orchard.Setup/Recipes/core.recipe.xml src/Orchard.Web/Modules/Orchard.Setup/Recipes/default.recipe.xml src/Orchard.Web/Modules/Orchard.Setup/Routes.cs src/Orchard.Web/Modules/Orchard.Setup/Scripts/setup.js src/Orchard.Web/Modules/Orchard.Setup/Services/SetupContext.cs src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs src/Orchard.Web/Modules/Orchard.Setup/SetupMode.cs src/Orchard.Web/Modules/Orchard.Setup/Views/Setup/Index.cshtml src/Orchard.Web/Modules/Orchard.Tags/Drivers/TagsPartDriver.cs src/Orchard.Web/Modules/Orchard.Tags/Module.txt src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj src/Orchard.Web/Modules/Orchard.Tags/ResourceManifest.cs src/Orchard.Web/Modules/Orchard.Tags/Services/TagService.cs src/Orchard.Web/Modules/Orchard.TaskLease/Migrations.cs src/Orchard.Web/Modules/Orchard.TaskLease/Models/TaskLeaseRecord.cs src/Orchard.Web/Modules/Orchard.TaskLease/Module.txt src/Orchard.Web/Modules/Orchard.TaskLease/Orchard.TaskLease.csproj src/Orchard.Web/Modules/Orchard.TaskLease/Services/ITaskLeaseService.cs src/Orchard.Web/Modules/Orchard.TaskLease/Services/TaskLeaseService.cs src/Orchard.Web/Modules/Orchard.TaskLease/Tests/Orchard.TaskLease.Tests/Orchard.TaskLease.Tests.csproj src/Orchard.Web/Modules/Orchard.TaskLease/Web.config src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Controllers/TermAdminController.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyFieldDriver.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyPartDriver.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TaxonomyPartHandler.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TermsPartHandler.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Helpers/PathExtensions.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Migrations.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Models/TermContentItem.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Models/TermPart.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Models/TermsPart.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Navigation/TaxonomyNavigationProvider.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilter.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Projections/TermsFilterForms.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Scripts/admin-taxonomy-tags.js src/Orchard.Web/Modules/Orchard.Taxonomies/Services/ITaxonomyService.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Services/TaxonomyService.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Shapes.cs src/Orchard.Web/Modules/Orchard.Taxonomies/StandardQueries/TermFeedQuery.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Styles/admin-taxonomy-tags.css src/Orchard.Web/Modules/Orchard.Taxonomies/ViewModels/TaxonomyAdminIndexViewModel.cs src/Orchard.Web/Modules/Orchard.Taxonomies/ViewModels/TaxonomyFieldViewModel.cs src/Orchard.Web/Modules/Orchard.Taxonomies/ViewModels/TermAdminIndexViewModel.cs src/Orchard.Web/Modules/Orchard.Taxonomies/Views/Admin/Import.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/Admin/Index.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/DefinitionTemplates/TaxonomyFieldSettings.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/EditorTemplates/Fields/TaxonomyField.Autocomplete.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/EditorTemplates/Fields/TaxonomyField.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/EditorTemplates/Parts/Navigation.Taxonomy.Edit.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/Fields/TaxonomyField.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/Taxonomy.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/TaxonomyItem.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/TermAdmin/Index.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/TermAdmin/Merge.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/TermAdmin/MoveTerm.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/TermAdmin/RenderTermSelect.cshtml src/Orchard.Web/Modules/Orchard.Taxonomies/Views/TermAdmin/SelectTerm.cshtml src/Orchard.Web/Modules/Orchard.Themes/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.Themes/Handlers/ThemeSiteSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.Themes/Module.txt src/Orchard.Web/Modules/Orchard.Themes/Orchard.Themes.csproj src/Orchard.Web/Modules/Orchard.Themes/Recipes/Executors/ThemeStep.cs src/Orchard.Web/Modules/Orchard.Themes/Services/IThemeService.cs src/Orchard.Web/Modules/Orchard.Themes/Services/SafeModeThemeSelector.cs src/Orchard.Web/Modules/Orchard.Themes/Services/SiteThemeSelector.cs src/Orchard.Web/Modules/Orchard.Themes/Services/ThemeService.cs src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj src/Orchard.Web/Modules/Orchard.Tokens/Styles/orchard-tokens-admin.css src/Orchard.Web/Modules/Orchard.Tokens/Tests/Orchard.Tokens.Tests.csproj src/Orchard.Web/Modules/Orchard.Tokens/Tests/StubWorkContextAccessor.cs src/Orchard.Web/Modules/Orchard.Tokens/Tests/TestTokenProvider.cs src/Orchard.Web/Modules/Orchard.Tokens/Views/TokenHint.cshtml src/Orchard.Web/Modules/Orchard.Tokens/Web.config src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.Users/Handlers/RegistrationSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.Users/Handlers/UserPartHandler.cs src/Orchard.Web/Modules/Orchard.Users/Migrations.cs src/Orchard.Web/Modules/Orchard.Users/Models/UserPart.cs src/Orchard.Web/Modules/Orchard.Users/Models/UserPartRecord.cs src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs src/Orchard.Web/Modules/Orchard.Users/ViewModels/UsersIndexViewModel.cs src/Orchard.Web/Modules/Orchard.Users/Views/Account/ChallengeEmailSent.cshtml src/Orchard.Web/Modules/Orchard.Users/Views/Account/RegistrationPending.cshtml src/Orchard.Web/Modules/Orchard.Users/Views/Admin/Index.cshtml src/Orchard.Web/Modules/Orchard.Warmup/Handlers/WarmupSettingsPartHandler.cs src/Orchard.Web/Modules/Orchard.Warmup/Orchard.Warmup.csproj src/Orchard.Web/Modules/Orchard.Warmup/Web.config src/Orchard.Web/Modules/Orchard.Widgets/Drivers/LayerPartDriver.cs src/Orchard.Web/Modules/Orchard.Widgets/Drivers/WidgetPartDriver.cs src/Orchard.Web/Modules/Orchard.Widgets/Filters/WidgetFilter.cs src/Orchard.Web/Modules/Orchard.Widgets/Handlers/LayerPartHandler.cs src/Orchard.Web/Modules/Orchard.Widgets/Handlers/WidgetPartHandler.cs src/Orchard.Web/Modules/Orchard.Widgets/Models/WidgetPart.cs src/Orchard.Web/Modules/Orchard.Widgets/Module.txt src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/AuthenticatedRuleProvider.cs src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/BuiltinRuleProvider.cs src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/ContentDisplayedRuleProvider.cs src/Orchard.Web/Modules/Orchard.Widgets/Services/IRuleManager.cs src/Orchard.Web/Modules/Orchard.Widgets/Services/IRuleProvider.cs src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs src/Orchard.Web/Modules/Orchard.Widgets/Services/RuleContext.cs src/Orchard.Web/Modules/Orchard.Widgets/Services/RuleManager.cs src/Orchard.Web/Modules/Orchard.Widgets/Services/WidgetsService.cs src/Orchard.Web/Modules/Orchard.Widgets/Shapes.cs src/Orchard.Web/Modules/Orchard.Widgets/Views/EditorTemplates/Parts.Widgets.WidgetPart.cshtml src/Orchard.Web/Modules/Orchard.Widgets/Views/WidgetPlacement.Orphans.cshtml src/Orchard.Web/Modules/Orchard.Workflows/Controllers/AdminController.cs src/Orchard.Web/Modules/Orchard.Workflows/ImportExport/WorkflowsCustomExportStep.cs src/Orchard.Web/Modules/Orchard.Workflows/ImportExport/WorkflowsRecipeHandler.cs src/Orchard.Web/Modules/Orchard.Workflows/Module.txt src/Orchard.Web/Modules/Orchard.Workflows/Recipes/Builders/WorkflowsStep.cs src/Orchard.Web/Modules/Orchard.Workflows/Scripts/orchard-workflows-serialize.js src/Orchard.Web/Modules/Orchard.Workflows/Scripts/orchard-workflows.js src/Orchard.Web/Modules/Orchard.Workflows/Styles/orchard-workflows-admin.css src/Orchard.Web/Modules/Orchard.Workflows/Views/ActivityToolbox.cshtml src/Orchard.Web/Modules/Orchard.Workflows/Views/Admin/Index.cshtml src/Orchard.Web/Modules/Orchard.Workflows/Web.config src/Orchard.Web/Modules/Orchard.jQuery/Module.txt src/Orchard.Web/Modules/Orchard.jQuery/Orchard.jQuery.csproj src/Orchard.Web/Modules/SysCache/SysCache.csproj src/Orchard.Web/Modules/SysCache/Web.config src/Orchard.Web/Modules/TinyMce/Module.txt src/Orchard.Web/Modules/TinyMce/TinyMce.csproj src/Orchard.Web/Modules/Upgrade/Controllers/RouteController.cs src/Orchard.Web/Modules/Upgrade/Upgrade.csproj src/Orchard.Web/Modules/Upgrade/Web.config src/Orchard.Web/Orchard.Web.csproj src/Orchard.Web/Themes/TheAdmin/Scripts/admin.js src/Orchard.Web/Themes/TheAdmin/Styles/site.css src/Orchard.Web/Themes/TheAdmin/Views/User.cshtml src/Orchard.Web/Themes/Themes.csproj src/Orchard.Web/Themes/Web.config src/Orchard.Web/Web.config src/Orchard.sln src/Orchard/Commands/Builtin/HelpCommand.cs src/Orchard/Commands/CommandBackgroundService.cs.rej src/Orchard/Commands/CommandHostAgent.cs src/Orchard/ContentManagement/Aspects/ICommonPart.cs src/Orchard/ContentManagement/DataMigrations/FrameworkDataMigration.cs src/Orchard/ContentManagement/DefaultContentManager.cs src/Orchard/ContentManagement/Drivers/ContentFieldDriver.cs src/Orchard/ContentManagement/Drivers/ContentPartDriver.cs src/Orchard/ContentManagement/Drivers/ContentShapeResult.cs src/Orchard/ContentManagement/Drivers/Coordinators/ContentFieldDriverCoordinator.cs src/Orchard/ContentManagement/Drivers/Coordinators/ContentPartDriverCoordinator.cs src/Orchard/ContentManagement/Drivers/IContentFieldDriver.cs src/Orchard/ContentManagement/Drivers/IContentPartDriver.cs src/Orchard/ContentManagement/Handlers/ContentHandler.cs src/Orchard/ContentManagement/Handlers/ContentHandlerBase.cs src/Orchard/ContentManagement/Handlers/IContentHandler.cs src/Orchard/ContentManagement/Handlers/IContentStorageFilter.cs src/Orchard/ContentManagement/Handlers/StorageFilter.cs src/Orchard/ContentManagement/Handlers/StorageFilterBase.cs src/Orchard/ContentManagement/Handlers/StorageVersionFilter.cs src/Orchard/ContentManagement/IContentManager.cs src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionWriter.cs src/Orchard/ContentManagement/Utilities/LazyField.cs src/Orchard/Data/Migration/AutomaticDataMigrations.cs src/Orchard/Data/Migration/Interpreters/DefaultDataMigrationInterpreter.cs src/Orchard/Data/Migration/Interpreters/IDataMigrationInterpreter.cs src/Orchard/Data/Migration/Interpreters/MySqlCommandInterpreter.cs src/Orchard/Data/Migration/Schema/AlterTableCommand.cs src/Orchard/Data/Migration/Schema/SchemaBuilder.cs src/Orchard/Data/Migration/Schema/SchemaCommand.cs src/Orchard/DisplayManagement/Descriptors/ResourceBindingStrategy/StylesheetBindingStrategy.cs src/Orchard/DisplayManagement/Shapes/ShapeMetadata.cs src/Orchard/Environment/Configuration/ShellSettingsManager.cs src/Orchard/Environment/Configuration/TenantState.cs src/Orchard/Environment/DefaultOrchardHost.cs src/Orchard/Environment/DefaultOrchardShell.cs src/Orchard/Environment/Descriptor/IShellDescriptorManager.cs src/Orchard/Environment/Extensions/ExtensionMonitoringCoordinator.cs src/Orchard/Environment/Extensions/Folders/ExtensionHarvester.cs src/Orchard/Environment/Extensions/IExtensionManager.cs src/Orchard/Environment/Extensions/Loaders/DynamicExtensionLoader.cs src/Orchard/Environment/Extensions/Loaders/RawThemeExtensionLoader.cs src/Orchard/Environment/Extensions/Models/ExtensionDescriptor.cs src/Orchard/Environment/Features/FeatureManager.cs src/Orchard/Environment/Features/IFeatureManager.cs src/Orchard/Environment/IOrchardHost.cs src/Orchard/Environment/OrchardServices.cs src/Orchard/Environment/OrchardStarter.cs src/Orchard/Environment/ShellBuilders/CompositionStrategy.cs src/Orchard/Environment/ShellBuilders/ShellContainerFactory.cs src/Orchard/Environment/ShellBuilders/ShellContextFactory.cs src/Orchard/Environment/State/DefaultProcessingEngine.cs src/Orchard/Environment/ViewsBackgroundCompilation.cs src/Orchard/Environment/WorkContextAccessor.cs src/Orchard/Environment/WorkContextImplementation.cs src/Orchard/Events/DelegateHelper.cs src/Orchard/FileSystems/Dependencies/DynamicModuleVirtualPathProvider.cs src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs src/Orchard/Localization/Services/DefaultLocalizedStringManager.cs src/Orchard/Localization/Text.cs src/Orchard/Logging/OrchardLog4netLogger.cs src/Orchard/Mvc/AntiForgery/AntiForgeryAuthorizationFilter.cs src/Orchard/Mvc/Html/ContentItemExtensions.cs
2015-12-13 23:46:19 +01:00
case UsersOrder.CreatedUtc:
users = users.OrderBy(u => u.CreatedUtc);
break;
case UsersOrder.LastLoginUtc:
users = users.OrderBy(u => u.LastLoginUtc);
break;
}
var results = users
.Slice(pager.GetStartIndex(), pager.PageSize)
.ToList();
var model = new UsersIndexViewModel {
Users = results
.Select(x => new UserEntry {
UserPart = x,
User = x.Record,
AdditionalActionLinks = _userManagementActionsProviders
.SelectMany(p => p.UserActionLinks(x)).ToList()
})
.ToList(),
Options = options,
Pager = pagerShape
};
// maintain previous route data when generating page links
var routeData = new RouteData();
routeData.Values.Add("Options.Filter", options.Filter);
routeData.Values.Add("Options.Search", options.Search);
routeData.Values.Add("Options.Order", options.Order);
pagerShape.RouteData(routeData);
return View(model);
}
[HttpPost]
[FormValueRequired("submit.BulkEdit")]
public ActionResult Index(FormCollection input) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var viewModel = new UsersIndexViewModel {Users = new List<UserEntry>(), Options = new UserIndexOptions()};
UpdateModel(viewModel);
var checkedEntries = viewModel.Users.Where(c => c.IsChecked);
switch (viewModel.Options.BulkAction) {
case UsersBulkAction.None:
break;
case UsersBulkAction.Approve:
foreach (var entry in checkedEntries) {
Approve(entry.User.Id);
}
break;
case UsersBulkAction.Disable:
foreach (var entry in checkedEntries) {
Moderate(entry.User.Id);
}
break;
case UsersBulkAction.ChallengeEmail:
foreach (var entry in checkedEntries) {
SendChallengeEmail(entry.User.Id);
}
break;
case UsersBulkAction.Delete:
foreach (var entry in checkedEntries) {
Delete(entry.User.Id);
}
break;
}
return RedirectToAction("Index", ControllerContext.RouteData.Values);
}
public ActionResult Create() {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.New<IUser>("User");
var editor = Shape.EditorTemplate(TemplateName: "Parts/User.Create", Model: new UserCreateViewModel(), Prefix: null);
editor.Metadata.Position = "2";
var model = Services.ContentManager.BuildEditor(user);
model.Content.Add(editor);
return View(model);
}
[HttpPost, ActionName("Create")]
public ActionResult CreatePOST(UserCreateViewModel createModel) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
IDictionary<string, LocalizedString> validationErrors;
List<UsernameValidationError> usernameValidationErrors = new List<UsernameValidationError>();
bool usernameMeetsPolicies = true;
var settings = _siteService.GetSiteSettings().As<RegistrationSettingsPart>();
if (!string.IsNullOrEmpty(createModel.UserName)) {
usernameMeetsPolicies = _userService.UsernameMeetsPolicies(createModel.UserName, createModel.Email, out usernameValidationErrors);
if (!usernameMeetsPolicies) {
// If this setting is enabled we'd like to show the warning message but we can't right now
// because we didn't create the user yet (and maybe we won't if some other validation fails)
// and we can't generate the link to the edit page properly so here we only handle the
// situation where we have to show warnings as errors.
if (!settings.BypassPoliciesFromBackoffice) {
ShowWarningAsErrors(usernameValidationErrors);
}
// Show fatal errors anyway
ShowFatalErrors(usernameValidationErrors);
}
if (!_userService.VerifyUserUnicity(createModel.UserName, createModel.Email)) {
AddModelError("NotUniqueUserName", T("User with that username and/or email already exists."));
}
}
else {
AddModelError(UsernameValidationResults.UsernameIsTooShort, T("The username must not be empty."));
}
if (!Regex.IsMatch(createModel.Email ?? "", UserPart.EmailPattern, RegexOptions.IgnoreCase)) {
// http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx
ModelState.AddModelError("Email", T("You must specify a valid email address."));
}
if (createModel.Password != createModel.ConfirmPassword) {
AddModelError("ConfirmPassword", T("Password confirmation must match"));
}
extend users and roles capabilities (#8523) * Adds the capability to set a user to forcely change its own password at next LogOn * Force user to not reuse last n passwords * Moves IPasswordService implementation to Orchard Users Creates Extensions to share management of Password operations across Services * Some refactoring * Password History Policy: - New User Evente (ChangingPassword) - Settings to enable the policy - Security service interfaces to abstract history management - User service implementations to concretely manage history * PasswordHistoryPolicy: - keep in count the password stored within the UserPart as a not reusable password * WIP automated suspension of inactive users * Disable users that have been inactive for longer than a specified number of days, except when they are SiteOwner, or they have a specific flag set to prevent their suspension. * Provider to prevent suspension of users based on assigned roles * cleanup. Refactor of migrations. * Added action to ask for the challenge email to be resent. Challenge email is sent again if a user tries to register anew with an email address they had used to create an account earlier if the email address isn't validated yet. * During registration, if a user inserts the information of an existing account and that account should still validate its email address, the user is presented a link to request a new challenge email to be sent. * Added a link to the action to request a new challenge email in the case when the nonce fails to validate. * Renamed part and corresponding record. Added ability to "protect" specific users from having to change password when it is expired / too old. Co-authored-by: HermesSbicego-Laser <hermes.sbicego@laser-group.com>
2022-01-14 10:32:07 +01:00
if (!_userService.PasswordMeetsPolicies(createModel.Password, null, out validationErrors)) {
ModelState.AddModelErrors(validationErrors);
}
var user = Services.ContentManager.New<IUser>("User");
if (ModelState.IsValid) {
user = _membershipService.CreateUser(new CreateUserParams(
createModel.UserName,
createModel.Password,
createModel.Email,
extend users and roles capabilities (#8523) * Adds the capability to set a user to forcely change its own password at next LogOn * Force user to not reuse last n passwords * Moves IPasswordService implementation to Orchard Users Creates Extensions to share management of Password operations across Services * Some refactoring * Password History Policy: - New User Evente (ChangingPassword) - Settings to enable the policy - Security service interfaces to abstract history management - User service implementations to concretely manage history * PasswordHistoryPolicy: - keep in count the password stored within the UserPart as a not reusable password * WIP automated suspension of inactive users * Disable users that have been inactive for longer than a specified number of days, except when they are SiteOwner, or they have a specific flag set to prevent their suspension. * Provider to prevent suspension of users based on assigned roles * cleanup. Refactor of migrations. * Added action to ask for the challenge email to be resent. Challenge email is sent again if a user tries to register anew with an email address they had used to create an account earlier if the email address isn't validated yet. * During registration, if a user inserts the information of an existing account and that account should still validate its email address, the user is presented a link to request a new challenge email to be sent. * Added a link to the action to request a new challenge email in the case when the nonce fails to validate. * Renamed part and corresponding record. Added ability to "protect" specific users from having to change password when it is expired / too old. Co-authored-by: HermesSbicego-Laser <hermes.sbicego@laser-group.com>
2022-01-14 10:32:07 +01:00
null, null, true,
createModel.ForcePasswordChange));
}
// Now that the user has been created we check if we have to show the warning since now we can generate the link
// to the user edit page
if (!usernameMeetsPolicies && settings.BypassPoliciesFromBackoffice && usernameValidationErrors.Any(uve => uve.Severity == Severity.Warning)) {
Services.Notifier.Warning(T("The username <a href=\"{0}\">{1}</a> doesn't meet the custom requirements.", _urlHelper.ItemEditUrl(user), createModel.UserName));
}
var model = Services.ContentManager.UpdateEditor(user, this);
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
var editor = Shape.EditorTemplate(TemplateName: "Parts/User.Create", Model: createModel, Prefix: null);
editor.Metadata.Position = "2";
model.Content.Add(editor);
return View(model);
}
Services.Notifier.Success(T("User created"));
return RedirectToAction("Index");
}
public ActionResult Edit(int id) {
// check manage permission on any user
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.Get<UserPart>(id);
if (user == null)
return HttpNotFound();
// check manage permission on specific user
if (!Services.Authorizer.Authorize(Permissions.ManageUsers,
user, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var editor = Shape.EditorTemplate(TemplateName: "Parts/User.Edit", Model: new UserEditViewModel {User = user}, Prefix: null);
editor.Metadata.Position = "2";
var model = Services.ContentManager.BuildEditor(user);
model.Content.Add(editor);
return View(model);
}
private void ShowWarningAsErrors(List<UsernameValidationError> validationErrors) {
if (validationErrors.Any(uve => uve.Severity == Severity.Warning)) {
foreach (var uve in validationErrors.Where(uve => uve.Severity == Severity.Warning)) {
AddModelError(uve.Key, uve.ErrorMessage);
}
}
}
private void ShowFatalErrors(List<UsernameValidationError> validationErrors) {
if (validationErrors.Any(uve => uve.Severity == Severity.Fatal)) {
foreach (var uve in validationErrors.Where(uve => uve.Severity == Severity.Fatal)) {
AddModelError(uve.Key, uve.ErrorMessage);
}
}
}
[HttpPost, ActionName("Edit")]
public ActionResult EditPOST(int id) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.Get<UserPart>(id, VersionOptions.DraftRequired);
if (user == null)
return HttpNotFound();
// check manage permission on specific user
if (!Services.Authorizer.Authorize(Permissions.ManageUsers,
user, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
string previousName = user.UserName;
var model = Services.ContentManager.UpdateEditor(user, this);
var editModel = new UserEditViewModel { User = user };
if (TryUpdateModel(editModel)) {
List<UsernameValidationError> validationErrors;
bool usernameMeetsPolicies = _userService.UsernameMeetsPolicies(editModel.UserName, editModel.Email, out validationErrors);
var settings = _siteService.GetSiteSettings().As<RegistrationSettingsPart>();
// Username has been modified
if (!previousName.Equals(editModel.UserName)) {
if (!usernameMeetsPolicies && settings.BypassPoliciesFromBackoffice) {
// If warnings have to be bypassed and there's at least one warning we show a generic warning message
if (validationErrors.Any(uve => uve.Severity == Severity.Warning)) {
Services.Notifier.Warning(T("The username <a href=\"{0}\">{1}</a> doesn't meet the custom requirements.", _urlHelper.ItemEditUrl(user), editModel.UserName));
}
}
else if (!usernameMeetsPolicies) {
// If warnings don't have to be bypassed we show everyone of them as errors
ShowWarningAsErrors(validationErrors);
}
}
else {
if (!usernameMeetsPolicies && settings.BypassPoliciesFromBackoffice) {
// If warnings have to be bypassed and there's at least one warning we show a generic warning message
if (validationErrors.Any(uve => uve.Severity == Severity.Warning)) {
Services.Notifier.Warning(T("The username <a href=\"{0}\">{1}</a> doesn't meet the custom requirements.", _urlHelper.ItemEditUrl(user), editModel.UserName));
}
}
}
// Show every Fatal validation error
ShowFatalErrors(validationErrors);
if (!Regex.IsMatch(editModel.Email ?? "", UserPart.EmailPattern, RegexOptions.IgnoreCase)) {
// http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx
ModelState.AddModelError("Email", T("You must specify a valid email address."));
}
else {
// also update the Super user if this is the renamed account
if (string.Equals(Services.WorkContext.CurrentSite.SuperUser, previousName, StringComparison.Ordinal)) {
_siteService.GetSiteSettings().As<SiteSettingsPart>().SuperUser = editModel.UserName;
}
user.NormalizedUserName = editModel.UserName.ToLowerInvariant();
}
if (!_userService.VerifyUserUnicity(id, editModel.UserName, editModel.Email)) {
AddModelError("NotUniqueUserName", T("User with that username and/or email already exists."));
}
}
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
var editor = Shape.EditorTemplate(TemplateName: "Parts/User.Edit", Model: editModel, Prefix: null);
editor.Metadata.Position = "2";
model.Content.Add(editor);
return View(model);
}
Services.ContentManager.Publish(user.ContentItem);
Services.Notifier.Success(T("User information updated"));
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult Delete(int id) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.Get<IUser>(id);
if (user == null)
return HttpNotFound();
// check manage permission on specific user
if (!Services.Authorizer.Authorize(Permissions.ManageUsers,
user, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
if (string.Equals(Services.WorkContext.CurrentSite.SuperUser, user.UserName, StringComparison.Ordinal)) {
Services.Notifier.Error(T("The Super user can't be removed. Please disable this account or specify another Super user account."));
}
else if (string.Equals(Services.WorkContext.CurrentUser.UserName, user.UserName, StringComparison.Ordinal)) {
Services.Notifier.Error(T("You can't remove your own account. Please log in with another account."));
}
else {
Services.ContentManager.Remove(user.ContentItem);
Services.Notifier.Success(T("User {0} deleted", user.UserName));
}
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult SendChallengeEmail(int id) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.Get<IUser>(id);
if (user == null)
return HttpNotFound();
// check manage permission on specific user
if (!Services.Authorizer.Authorize(Permissions.ManageUsers,
user, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var siteUrl = Services.WorkContext.CurrentSite.BaseUrl;
if (string.IsNullOrWhiteSpace(siteUrl)) {
siteUrl = HttpContext.Request.ToRootUrlString();
}
_userService.SendChallengeEmail(user.As<UserPart>(), nonce => Url.MakeAbsolute(Url.Action("ChallengeEmail", "Account", new { Area = "Orchard.Users", nonce = nonce }), siteUrl));
Services.Notifier.Success(T("Challenge email sent to {0}", user.UserName));
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult Approve(int id) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.Get<IUser>(id);
if (user == null)
return HttpNotFound();
// check manage permission on specific user
if (!Services.Authorizer.Authorize(Permissions.ManageUsers,
user, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
user.As<UserPart>().RegistrationStatus = UserStatus.Approved;
Services.Notifier.Success(T("User {0} approved", user.UserName));
_userEventHandlers.Approved(user);
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult Moderate(int id) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.Get<IUser>(id);
if (user == null)
return HttpNotFound();
// check manage permission on specific user
if (!Services.Authorizer.Authorize(Permissions.ManageUsers,
user, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
if (string.Equals(Services.WorkContext.CurrentUser.UserName, user.UserName, StringComparison.Ordinal)) {
Services.Notifier.Error(T("You can't disable your own account. Please log in with another account"));
}
else {
user.As<UserPart>().RegistrationStatus = UserStatus.Pending;
Services.Notifier.Success(T("User {0} disabled", user.UserName));
_userEventHandlers.Moderate(user);
}
return RedirectToAction("Index");
}
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
}
public void AddModelError(string key, LocalizedString errorMessage) {
ModelState.AddModelError(key, errorMessage.ToString());
}
}
}