diff --git a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs index c1626fe5a..641069691 100644 --- a/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Recipes/Services/RecipeManager.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using Orchard.Localization; using Orchard.Logging; using Orchard.Recipes.Models; @@ -21,21 +22,25 @@ namespace Orchard.Recipes.Services { if (recipe == null) return; + var executionId = Guid.NewGuid().ToString("n"); var recipeContext = new RecipeContext { Recipe = recipe }; // TODO: Run each step inside a transaction boundary. - // TODO: Output should go into a report. - // TODO: Eventually return a guid.tostring("n") execution id + // TODO: Enqueue steps for the step executor. foreach (var recipeStep in recipe.RecipeSteps) { recipeContext.RecipeStep = recipeStep; recipeContext.Executed = false; - foreach (var handler in _recipeHandlers) { - handler.ExecuteRecipeStep(recipeContext); + foreach (var recipeHandler in _recipeHandlers) { + recipeHandler.ExecuteRecipeStep(recipeContext); } if (!recipeContext.Executed) { Logger.Error("Could not execute recipe step '{0}' because the recipe handler was not found.", recipeContext.RecipeStep.Name); } } + + // TODO: figure out shell settings and shell descriptor for processing engine to run under + // _processingEngine.AddTask(null, null, "IRecipeStepEvents_DoWork", null); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index 3d194bbf3..d9a3eddd4 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -216,11 +216,6 @@ namespace Orchard.Setup.Services { } private void CreateTenantData(SetupContext context, IWorkContextScope environment) { - var recipeManager = environment.Resolve(); - if (context.Recipe != null) { - recipeManager.Execute(Recipes().Where(r => r.Name == context.Recipe).FirstOrDefault()); - } - // create superuser var membershipService = environment.Resolve(); var user = @@ -349,6 +344,11 @@ Modules are created by other users of Orchard just like you so if you feel up to menuItem.As().OnMainMenu = true; menuItem.As().Url = ""; + var recipeManager = environment.Resolve(); + if (context.Recipe != null) { + recipeManager.Execute(Recipes().Where(r => r.Name == context.Recipe).FirstOrDefault()); + } + //null check: temporary fix for running setup in command line if (HttpContext.Current != null) { authenticationService.SignIn(user, true); diff --git a/src/Orchard.Web/Themes/SafeMode/Styles/site.css b/src/Orchard.Web/Themes/SafeMode/Styles/site.css index ba152b7d8..de43f6a99 100644 --- a/src/Orchard.Web/Themes/SafeMode/Styles/site.css +++ b/src/Orchard.Web/Themes/SafeMode/Styles/site.css @@ -128,8 +128,10 @@ input[type="password"] { width:98%; } -select { - width:100%; +select { + padding:3px; + border:1px solid #bdbcbc; + width:100%; } button.primaryAction, .button.primaryAction, .button.primaryAction:link, .button.primaryAction:visited { diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index ca2f998a6..92b3b083f 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -193,11 +193,15 @@ + + + + diff --git a/src/Orchard/Recipes/Models/RecipeJournal.cs b/src/Orchard/Recipes/Models/RecipeJournal.cs new file mode 100644 index 000000000..0ac162e2b --- /dev/null +++ b/src/Orchard/Recipes/Models/RecipeJournal.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; + +namespace Orchard.Recipes.Models { + public class RecipeJournal { + public string ExecutionId { get; set; } + public RecipeJournalStatus Status { get; set; } + public IEnumerable Messages { get; set; } + } + + public class JournalMessage { + public string Message { get; set; } + } + + public enum RecipeJournalStatus { + Running, + Complete, + Failed + } +} diff --git a/src/Orchard/Recipes/Services/IRecipeJournal.cs b/src/Orchard/Recipes/Services/IRecipeJournal.cs new file mode 100644 index 000000000..6c850b87d --- /dev/null +++ b/src/Orchard/Recipes/Services/IRecipeJournal.cs @@ -0,0 +1,11 @@ +using Orchard.Recipes.Models; + +namespace Orchard.Recipes.Services { + public interface IRecipeJournal { + void StartExecution(string executionId); + void ExecutionComplete(string executionId); + void ExecutionFailed(string executionId); + void WriteJournalEntry(string executionId, string message); + RecipeJournal GetRecipeJournal(string executionId); + } +} diff --git a/src/Orchard/Recipes/Services/IRecipeStepExecutor.cs b/src/Orchard/Recipes/Services/IRecipeStepExecutor.cs new file mode 100644 index 000000000..f4777781a --- /dev/null +++ b/src/Orchard/Recipes/Services/IRecipeStepExecutor.cs @@ -0,0 +1,5 @@ +namespace Orchard.Recipes.Services { + public interface IRecipeStepExecutor : IDependency { + bool ExecuteNextStep(); + } +} diff --git a/src/Orchard/Recipes/Services/IRecipeStepQueue.cs b/src/Orchard/Recipes/Services/IRecipeStepQueue.cs new file mode 100644 index 000000000..be6b5f8b7 --- /dev/null +++ b/src/Orchard/Recipes/Services/IRecipeStepQueue.cs @@ -0,0 +1,9 @@ +using System; +using Orchard.Recipes.Models; + +namespace Orchard.Recipes.Services { + public interface IRecipeStepQueue : IDependency { + void Enqueue(RecipeStep step, string executionId); + Tuple Dequeue(); + } +}