diff --git a/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/ImportActions/UploadRecipeAction.cs b/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/ImportActions/UploadRecipeAction.cs index 386f80af2..5d37c7721 100644 --- a/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/ImportActions/UploadRecipeAction.cs +++ b/src/Orchard.Web/Modules/Orchard.ImportExport/Providers/ImportActions/UploadRecipeAction.cs @@ -12,6 +12,7 @@ using Orchard.ImportExport.Services; using Orchard.ImportExport.ViewModels; using Orchard.Mvc; using Orchard.Recipes.Services; +using Orchard.UI.Notify; namespace Orchard.ImportExport.Providers.ImportActions { public class UploadRecipeAction : ImportAction { @@ -136,6 +137,12 @@ namespace Orchard.ImportExport.Providers.ImportActions { _orchardServices.WorkContext.HttpContext.Server.ScriptTimeout = 600; var executionId = ResetSite ? Setup() : ExecuteRecipe(); + + if(executionId == null) { + _orchardServices.Notifier.Warning(T("The recipe contained no steps. No work was scheduled.")); + return; + } + context.ActionResult = new RedirectToRouteResult(new RouteValueDictionary(new { action = "ImportResult", controller = "Admin", area = "Orchard.ImportExport", executionId = executionId })); } diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs index fde7944a6..2006364a4 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs @@ -1,12 +1,12 @@ using System; +using System.Linq; using Orchard.Data; -using Orchard.Localization; using Orchard.Logging; using Orchard.Recipes.Events; using Orchard.Recipes.Models; namespace Orchard.Recipes.Services { - public class RecipeManager : IRecipeManager { + public class RecipeManager : Component, IRecipeManager { private readonly IRecipeStepQueue _recipeStepQueue; private readonly IRecipeScheduler _recipeScheduler; private readonly IRecipeExecuteEventHandler _recipeExecuteEventHandler; @@ -22,17 +22,18 @@ namespace Orchard.Recipes.Services { _recipeScheduler = recipeScheduler; _recipeExecuteEventHandler = recipeExecuteEventHandler; _recipeStepResultRecordRepository = recipeStepResultRecordRepository; - - Logger = NullLogger.Instance; - T = NullLocalizer.Instance; } - public Localizer T { get; set; } - public ILogger Logger { get; set; } - public string Execute(Recipe recipe) { - if (recipe == null) + if (recipe == null) { + Logger.Information("Cannot execute a null recipe. No work has been scheduled."); return null; + } + + if (!recipe.RecipeSteps.Any()) { + Logger.Information("Recipe '{0}' contains no steps. No work has been scheduled."); + return null; + } var executionId = Guid.NewGuid().ToString("n"); Logger.Information("Executing recipe '{0}' using ExecutionId {1}.", recipe.Name, executionId); diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs index 150db2c57..52b45f495 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeParser.cs @@ -7,7 +7,10 @@ using Orchard.Recipes.Models; namespace Orchard.Recipes.Services { public class RecipeParser : Component, IRecipeParser { - + public Recipe ParseRecipe(XDocument recipeDocument) { + return ParseRecipe(recipeDocument.ToString(SaveOptions.DisableFormatting)); + } + public Recipe ParseRecipe(string recipeText) { var recipe = new Recipe(); diff --git a/src/Orchard/Recipes/Services/RecipeExecutor.cs b/src/Orchard/Recipes/Services/RecipeExecutor.cs index 6a7afc6d0..4edb0bdde 100644 --- a/src/Orchard/Recipes/Services/RecipeExecutor.cs +++ b/src/Orchard/Recipes/Services/RecipeExecutor.cs @@ -30,7 +30,11 @@ namespace Orchard.Recipes.Services { public string Execute(Recipe recipe) { var executionId = _recipeManager.Execute(recipe); - UpdateShell(); + + // Only need to update the shell if work was actually done. + if(executionId != null) + UpdateShell(); + return executionId; }