diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt index e45f659b3..e3f4a84f6 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt @@ -1,4 +1,4 @@ -Name: MultiTenancy +Name: Multi Tenancy AntiForgery: enabled Author: The Orchard Team Website: http://orchardproject.net diff --git a/src/Orchard.Web/Modules/Upgrade/Controllers/MediaController.cs b/src/Orchard.Web/Modules/Upgrade/Controllers/MediaController.cs index 9bcd256da..dadf0e029 100644 --- a/src/Orchard.Web/Modules/Upgrade/Controllers/MediaController.cs +++ b/src/Orchard.Web/Modules/Upgrade/Controllers/MediaController.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Web.Mvc; using Orchard; using Orchard.Environment.Features; +using Orchard.FileSystems.Media; using Orchard.Localization; using Orchard.Logging; using Orchard.MediaLibrary.Models; @@ -18,15 +20,19 @@ namespace Upgrade.Controllers { private readonly IOrchardServices _orchardServices; private readonly IFeatureManager _featureManager; private readonly IEnumerable _mediaLibraryServices; - private IMediaLibraryService _mediaLibraryService { get { return _mediaLibraryServices.FirstOrDefault(); }} + private readonly IMimeTypeProvider _mimeTypeProvider; + private IMediaLibraryService _mediaLibraryService { get { return _mediaLibraryServices.FirstOrDefault(); }} + private int BATCH = 100; public MediaController( IOrchardServices orchardServices, IFeatureManager featureManager, - IEnumerable mediaLibraryServices) { + IEnumerable mediaLibraryServices, + IMimeTypeProvider mimeTypeProvider) { _orchardServices = orchardServices; _featureManager = featureManager; _mediaLibraryServices = mediaLibraryServices; + _mimeTypeProvider = mimeTypeProvider; Logger = NullLogger.Instance; } @@ -41,6 +47,26 @@ namespace Upgrade.Controllers { } else { ViewBag.CanMigrate = true; + + var extensions = new HashSet(); + + // crawl media file for all file extensions + _mediaLibraryService.GetMediaFolders(null).ToList() + .ForEach(mediaFolder => ImportMediaFolder(mediaFolder, x => { + if (!String.IsNullOrWhiteSpace(x.MediaPath)) { + var extension = Path.GetExtension(x.MediaPath); + if (!String.IsNullOrWhiteSpace(extension)) { + extensions.Add(extension); + } + } + })); + + foreach (var extension in extensions) { + if (_mimeTypeProvider.GetMimeType("." + extension) == "application/unknown") { + _orchardServices.Notifier.Warning(T("Unknown MIME type: {0}", extension)); + ViewBag.CanMigrate = false; + } + } } return View(); @@ -51,46 +77,68 @@ namespace Upgrade.Controllers { if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not allowed to convert media files."))) return new HttpUnauthorizedResult(); + var count = 0; + var hasMore = false; + // crawl media file, ignore recipes and profiles IEnumerable mediaFolders = _mediaLibraryService.GetMediaFolders(null); foreach (var mediaFolder in mediaFolders) { - ImportMediaFolder(mediaFolder); + ImportMediaFolder(mediaFolder, x => { + if (count < BATCH) { + if (ImportMediaFile(x) != null) { + count++; + } + } + else { + hasMore = true; + } + }); + } + + if (count > 0) { + _orchardServices.Notifier.Information(T("{0} media files were imported.", count)); + } + + if (hasMore && count <= BATCH) { + _orchardServices.Notifier.Information(T("More than {0} media files were found, please import again.", BATCH)); + } + else { + _orchardServices.Notifier.Information(T("All media files were imported.")); } - _orchardServices.Notifier.Information(T("Media files were migrated successfully.")); - return RedirectToAction("Index"); } - private void ImportMediaFolder(MediaFolder mediaFolder) { + private void ImportMediaFolder(MediaFolder mediaFolder, Action action) { foreach (var mediaFile in _mediaLibraryService.GetMediaFiles(mediaFolder.MediaPath)) { - ImportMediaFile(mediaFile); + action(mediaFile); } // recursive call on sub-folders foreach (var subMediaFolder in _mediaLibraryService.GetMediaFolders(mediaFolder.MediaPath)) { - ImportMediaFolder(subMediaFolder); + ImportMediaFolder(subMediaFolder, action); } } - private void ImportMediaFile(MediaFile mediaFile) { + private MediaPart ImportMediaFile(MediaFile mediaFile) { // foreach media file, if there is no media with the same url, import it var contentManager = _orchardServices.ContentManager; var media = contentManager.Query().ForPart().Where(x => x.FolderPath == mediaFile.FolderName && x.FileName == mediaFile.Name).Slice(0, 1).FirstOrDefault(); if (media != null) { - _orchardServices.Notifier.Warning(T("Media {0} has already been imported.", mediaFile.MediaPath)); - return; + // _orchardServices.Notifier.Warning(T("Media {0} has already been imported.", mediaFile.MediaPath)); + return null; } try { - _orchardServices.Notifier.Information(T("Importing {0}.", mediaFile.MediaPath)); - _mediaLibraryService.ImportMedia(mediaFile.FolderName, mediaFile.Name); + //_orchardServices.Notifier.Information(T("Importing {0}.", mediaFile.MediaPath)); + return _mediaLibraryService.ImportMedia(mediaFile.FolderName, mediaFile.Name); } catch(Exception e) { _orchardServices.Notifier.Error(T("Error while importing {0}. Please check the logs", mediaFile.MediaPath)); Logger.Error(e, "Error while importing {0}", mediaFile.MediaPath); + return null; } } } diff --git a/src/Orchard.Web/Modules/Upgrade/Views/Media/Index.cshtml b/src/Orchard.Web/Modules/Upgrade/Views/Media/Index.cshtml index 94d630cba..2ccdfc02b 100644 --- a/src/Orchard.Web/Modules/Upgrade/Views/Media/Index.cshtml +++ b/src/Orchard.Web/Modules/Upgrade/Views/Media/Index.cshtml @@ -7,6 +7,9 @@
@T("Migrating Media Files:") @T("This migration step will create and organize new Media Content Items based on the media files in your ~/Media folder.") + @if (ViewBag.CanMigrate) { + @T("Before importing, please ensure the server has the expected mime types already registered as explained here: http://www.iis.net/configreference/system.webserver/staticcontent/mimemap") + }
@if (ViewBag.CanMigrate) {