diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Implementation/DefaultMediaUsername.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Implementation/DefaultMediaUsername.cs new file mode 100644 index 000000000..a068dc318 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Implementation/DefaultMediaUsername.cs @@ -0,0 +1,20 @@ +using System; +using Orchard.ContentManagement; +using Orchard.MediaLibrary.Providers; +using Orchard.Security; + +namespace Orchard.MediaLibrary.Implementation { + public class DefaultMediaUsername : IMediaFolderProvider { + public virtual string GetFolderName(IUser content) { + string folder = ""; + foreach (char c in content.UserName) { + if (char.IsLetterOrDigit(c)) { + folder += c; + } + else + folder += "_" + String.Format("{0:X}", Convert.ToInt32(c)); + } + return folder; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj index 0a42a0917..d07548bfa 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Orchard.MediaLibrary.csproj @@ -128,6 +128,7 @@ + @@ -200,6 +201,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Providers/IMediaFolderProvider.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Providers/IMediaFolderProvider.cs new file mode 100644 index 000000000..07a69b4e8 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Providers/IMediaFolderProvider.cs @@ -0,0 +1,7 @@ +using Orchard.Security; + +namespace Orchard.MediaLibrary.Providers { + public interface IMediaFolderProvider : IDependency { + string GetFolderName(IUser content); + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Services/MediaLibraryService.cs b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Services/MediaLibraryService.cs index 01aec9503..af39b97fd 100644 --- a/src/Orchard.Web/Modules/Orchard.MediaLibrary/Services/MediaLibraryService.cs +++ b/src/Orchard.Web/Modules/Orchard.MediaLibrary/Services/MediaLibraryService.cs @@ -12,6 +12,7 @@ using Orchard.MediaLibrary.Factories; using Orchard.MediaLibrary.Models; using Orchard.Core.Title.Models; using Orchard.Validation; +using Orchard.MediaLibrary.Providers; namespace Orchard.MediaLibrary.Services { public class MediaLibraryService : IMediaLibraryService { @@ -19,18 +20,20 @@ namespace Orchard.MediaLibrary.Services { private readonly IMimeTypeProvider _mimeTypeProvider; private readonly IStorageProvider _storageProvider; private readonly IEnumerable _mediaFactorySelectors; - + private readonly IMediaFolderProvider _mediaFolderProvider; private static char[] HttpUnallowed = new char[] { '<', '>', '*', '%', '&', ':', '\\', '?', '#' }; public MediaLibraryService( IOrchardServices orchardServices, IMimeTypeProvider mimeTypeProvider, IStorageProvider storageProvider, - IEnumerable mediaFactorySelectors) { + IEnumerable mediaFactorySelectors, + IMediaFolderProvider mediaFolderProvider) { _orchardServices = orchardServices; _mimeTypeProvider = mimeTypeProvider; _storageProvider = storageProvider; _mediaFactorySelectors = mediaFactorySelectors; + _mediaFolderProvider = mediaFolderProvider; T = NullLocalizer.Instance; } @@ -229,8 +232,7 @@ namespace Orchard.MediaLibrary.Services { if (_orchardServices.Authorizer.Authorize(Permissions.ManageOwnMedia)) { var currentUser = _orchardServices.WorkContext.CurrentUser; - var userPath = _storageProvider.Combine("Users", currentUser.UserName); - + var userPath = _storageProvider.Combine("Users", _mediaFolderProvider.GetFolderName(currentUser)); return new MediaFolder() { Name = currentUser.UserName, MediaPath = userPath