mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Adding commands for creating layers and widgets.
Update recipe files. Remove layer/widget creation code from setup. --HG-- branch : recipe
This commit is contained in:
@@ -56,6 +56,8 @@ namespace Orchard.Recipes.RecipeHandlers {
|
||||
}
|
||||
|
||||
// Utility class for parsing lines of commands.
|
||||
// Note: This lexer handles double quotes pretty harshly by design.
|
||||
// In case you needed them in your arguments, hopefully single quotes work for you as a replacement on the receiving end.
|
||||
class CommandParser {
|
||||
public CommandParameters ParseCommandParameters(string command) {
|
||||
var args = SplitArgs(command);
|
||||
|
@@ -44,7 +44,15 @@
|
||||
|
||||
<Command>
|
||||
feature enable Orchard.Experimental.TestingLists
|
||||
layer create /Name:"Default" /LayerRule:"true"
|
||||
layer create /Name:"Authenticated" /LayerRule:"authenticated"
|
||||
layer create /Name:"Anonymous" /LayerRule:"not authenticated"
|
||||
layer create /Name:"Disabled" /LayerRule:"false"
|
||||
layer create /Name:"TheHomepage" /LayerRule:"url '~/'"
|
||||
page create /Slug:"welcome-to-orchard" /Title:"Welcome to Orchard!" /Path:"welcome-to-orchard" /Homepage:true /Publish:true /UseWelcomeText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"First Leader Aside" /Zone:"TripelFirst" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"Second Leader Aside" /Zone:"TripelSecond" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"Third Leader Aside" /Zone:"TripelThird" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
menuitem create /MenuPosition:"1" /MenuText:"Home" /Url:"" /OnMainMenu:true
|
||||
</Command>
|
||||
|
||||
|
@@ -40,7 +40,15 @@
|
||||
|
||||
<Command>
|
||||
feature enable Orchard.Experimental.TestingLists
|
||||
layer create /Name:"Default" /LayerRule:"true"
|
||||
layer create /Name:"Authenticated" /LayerRule:"authenticated"
|
||||
layer create /Name:"Anonymous" /LayerRule:"not authenticated"
|
||||
layer create /Name:"Disabled" /LayerRule:"false"
|
||||
layer create /Name:"TheHomepage" /LayerRule:"url '~/'"
|
||||
page create /Slug:"welcome-to-orchard" /Title:"Welcome to Orchard!" /Path:"welcome-to-orchard" /Homepage:true /Publish:true /UseWelcomeText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"First Leader Aside" /Zone:"TripelFirst" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"Second Leader Aside" /Zone:"TripelSecond" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"Third Leader Aside" /Zone:"TripelThird" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
menuitem create /MenuPosition:"1" /MenuText:"Home" /Url:"" /OnMainMenu:true
|
||||
</Command>
|
||||
|
||||
|
@@ -40,7 +40,15 @@
|
||||
|
||||
<Command>
|
||||
feature enable Orchard.Experimental.TestingLists
|
||||
layer create /Name:"Default" /LayerRule:"true"
|
||||
layer create /Name:"Authenticated" /LayerRule:"authenticated"
|
||||
layer create /Name:"Anonymous" /LayerRule:"not authenticated"
|
||||
layer create /Name:"Disabled" /LayerRule:"false"
|
||||
layer create /Name:"TheHomepage" /LayerRule:"url '~/'"
|
||||
page create /Slug:"welcome-to-orchard" /Title:"Welcome to Orchard!" /Path:"welcome-to-orchard" /Homepage:true /Publish:true /UseWelcomeText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"First Leader Aside" /Zone:"TripelFirst" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"Second Leader Aside" /Zone:"TripelSecond" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
widget create /Type:"HtmlWidget" /Title:"Third Leader Aside" /Zone:"TripelThird" /Position:"5" /Layer:"TheHomepage" /UseLoremIpsumText:true
|
||||
menuitem create /MenuPosition:"1" /MenuText:"Home" /Url:"" /OnMainMenu:true
|
||||
</Command>
|
||||
|
||||
|
@@ -4,9 +4,6 @@ using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Web;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.Core.Common.Models;
|
||||
using Orchard.Core.Navigation.Models;
|
||||
using Orchard.Core.Routable.Models;
|
||||
using Orchard.Core.Settings.Descriptor.Records;
|
||||
using Orchard.Core.Settings.Models;
|
||||
using Orchard.Data;
|
||||
@@ -14,7 +11,6 @@ using Orchard.Data.Migration.Interpreters;
|
||||
using Orchard.Data.Migration.Schema;
|
||||
using Orchard.Environment;
|
||||
using Orchard.Environment.Configuration;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.ShellBuilders;
|
||||
using Orchard.Environment.Descriptor;
|
||||
using Orchard.Environment.Descriptor.Models;
|
||||
@@ -29,8 +25,6 @@ using Orchard.Environment.State;
|
||||
using Orchard.Data.Migration;
|
||||
using Orchard.Themes.Services;
|
||||
using Orchard.Utility.Extensions;
|
||||
using Orchard.Widgets.Models;
|
||||
using Orchard.Widgets;
|
||||
|
||||
namespace Orchard.Setup.Services {
|
||||
public class SetupService : ISetupService {
|
||||
@@ -79,31 +73,11 @@ namespace Orchard.Setup.Services {
|
||||
string[] hardcoded = {
|
||||
// Framework
|
||||
"Orchard.Framework",
|
||||
|
||||
// Core
|
||||
"Common",
|
||||
"Containers",
|
||||
"Contents",
|
||||
"Dashboard",
|
||||
"Feeds",
|
||||
"HomePage",
|
||||
"Navigation",
|
||||
"Reports",
|
||||
"Routable",
|
||||
"Scheduling",
|
||||
"Settings",
|
||||
"Shapes",
|
||||
|
||||
"Orchard.Pages",
|
||||
"Orchard.Widgets",
|
||||
"Orchard.Themes",
|
||||
"Orchard.Users",
|
||||
"Orchard.Roles",
|
||||
"Orchard.Modules",
|
||||
"PackagingServices",
|
||||
"Orchard.Packaging",
|
||||
"Gallery",
|
||||
"Orchard.Recipes"
|
||||
"Common", "Containers", "Contents", "Dashboard", "Feeds", "HomePage", "Navigation", "Reports", "Routable", "Scheduling", "Settings", "Shapes",
|
||||
// Modules
|
||||
"Orchard.Pages", "Orchard.Widgets", "Orchard.Themes", "Orchard.Users", "Orchard.Roles", "Orchard.Modules",
|
||||
"PackagingServices", "Orchard.Packaging", "Gallery", "Orchard.Recipes"
|
||||
};
|
||||
|
||||
context.EnabledFeatures = hardcoded;
|
||||
@@ -175,7 +149,6 @@ namespace Orchard.Setup.Services {
|
||||
while ( _processingEngine.AreTasksPending() )
|
||||
_processingEngine.ExecuteNextTask();
|
||||
|
||||
|
||||
// creating a standalone environment.
|
||||
// in theory this environment can be used to resolve any normal components by interface, and those
|
||||
// components will exist entirely in isolation - no crossover between the safemode container currently in effect
|
||||
@@ -229,47 +202,6 @@ namespace Orchard.Setup.Services {
|
||||
var recipeManager = environment.Resolve<IRecipeManager>();
|
||||
executionId = recipeManager.Execute(Recipes().Where(r => r.Name == context.Recipe).FirstOrDefault());
|
||||
|
||||
var contentManager = environment.Resolve<IContentManager>();
|
||||
// If "Orchard.Widgets" is enabled, setup default layers and widgets
|
||||
var extensionManager = environment.Resolve<IExtensionManager>();
|
||||
var shellDescriptor = environment.Resolve<ShellDescriptor>();
|
||||
if (extensionManager.EnabledFeatures(shellDescriptor).Where(d => d.Id == "Orchard.Widgets").Any()) {
|
||||
// Create default layers
|
||||
var layerInitializer = environment.Resolve<IDefaultLayersInitializer>();
|
||||
layerInitializer.CreateDefaultLayers();
|
||||
|
||||
// add a layer for the homepage
|
||||
var homepageLayer = contentManager.Create("Layer", VersionOptions.Draft);
|
||||
homepageLayer.As<LayerPart>().Name = "TheHomepage";
|
||||
homepageLayer.As<LayerPart>().LayerRule = "url \"~/\"";
|
||||
contentManager.Publish(homepageLayer);
|
||||
|
||||
// and three more for the tripel...really need this elsewhere...
|
||||
var tripelFirst = contentManager.Create("HtmlWidget", VersionOptions.Draft);
|
||||
tripelFirst.As<WidgetPart>().LayerPart = homepageLayer.As<LayerPart>();
|
||||
tripelFirst.As<WidgetPart>().Title = T("First Leader Aside").Text;
|
||||
tripelFirst.As<WidgetPart>().Zone = "TripelFirst";
|
||||
tripelFirst.As<WidgetPart>().Position = "5";
|
||||
tripelFirst.As<BodyPart>().Text = "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur a nibh ut tortor dapibus vestibulum. Aliquam vel sem nibh. Suspendisse vel condimentum tellus.</p>";
|
||||
contentManager.Publish(tripelFirst);
|
||||
|
||||
var tripelSecond = contentManager.Create("HtmlWidget", VersionOptions.Draft);
|
||||
tripelSecond.As<WidgetPart>().LayerPart = homepageLayer.As<LayerPart>();
|
||||
tripelSecond.As<WidgetPart>().Title = T("Second Leader Aside").Text;
|
||||
tripelSecond.As<WidgetPart>().Zone = "TripelSecond";
|
||||
tripelSecond.As<WidgetPart>().Position = "5";
|
||||
tripelSecond.As<BodyPart>().Text = "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur a nibh ut tortor dapibus vestibulum. Aliquam vel sem nibh. Suspendisse vel condimentum tellus.</p>";
|
||||
contentManager.Publish(tripelSecond);
|
||||
|
||||
var tripelThird = contentManager.Create("HtmlWidget", VersionOptions.Draft);
|
||||
tripelThird.As<WidgetPart>().LayerPart = homepageLayer.As<LayerPart>();
|
||||
tripelThird.As<WidgetPart>().Title = T("Third Leader Aside").Text;
|
||||
tripelThird.As<WidgetPart>().Zone = "TripelThird";
|
||||
tripelThird.As<WidgetPart>().Position = "5";
|
||||
tripelThird.As<BodyPart>().Text = "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur a nibh ut tortor dapibus vestibulum. Aliquam vel sem nibh. Suspendisse vel condimentum tellus.</p>";
|
||||
contentManager.Publish(tripelThird);
|
||||
}
|
||||
|
||||
//null check: temporary fix for running setup in command line
|
||||
if (HttpContext.Current != null) {
|
||||
authenticationService.SignIn(user, true);
|
||||
|
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
using Orchard.Commands;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.Aspects;
|
||||
using Orchard.Security;
|
||||
using Orchard.Settings;
|
||||
using Orchard.Widgets.Models;
|
||||
|
||||
namespace Orchard.Widgets.Commands {
|
||||
public class LayerCommands : DefaultOrchardCommandHandler {
|
||||
private readonly IContentManager _contentManager;
|
||||
private readonly ISiteService _siteService;
|
||||
private readonly IMembershipService _membershipService;
|
||||
|
||||
public LayerCommands(IContentManager contentManager, ISiteService siteService, IMembershipService membershipService) {
|
||||
_contentManager = contentManager;
|
||||
_siteService = siteService;
|
||||
_membershipService = membershipService;
|
||||
}
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Name { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string LayerRule { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Description { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Owner { get; set; }
|
||||
|
||||
[CommandName("layer create")]
|
||||
[CommandHelp("layer create /Name:<name> /LayerRule:<rule> [/Description:<description>] [/Owner:<owner>]\r\n\t" + "Creates a new layer")]
|
||||
[OrchardSwitches("Name,LayerRule,Description,Owner")]
|
||||
public void Create() {
|
||||
IContent layer = _contentManager.Create<LayerPart>("Layer", t => {
|
||||
t.Record.Name = Name;
|
||||
t.Record.LayerRule = LayerRule;
|
||||
t.Record.Description = Description ?? String.Empty;
|
||||
});
|
||||
|
||||
_contentManager.Publish(layer.ContentItem);
|
||||
if (String.IsNullOrEmpty(Owner)) {
|
||||
Owner = _siteService.GetSiteSettings().SuperUser;
|
||||
}
|
||||
var owner = _membershipService.GetUser(Owner);
|
||||
layer.As<ICommonPart>().Owner = owner;
|
||||
|
||||
Context.Output.WriteLine(T("Layer created successfully.").Text);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Orchard.Commands;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.Aspects;
|
||||
using Orchard.Core.Common.Models;
|
||||
using Orchard.Security;
|
||||
using Orchard.Settings;
|
||||
using Orchard.Widgets.Models;
|
||||
using Orchard.Widgets.Services;
|
||||
|
||||
namespace Orchard.Widgets.Commands {
|
||||
public class WidgetCommands : DefaultOrchardCommandHandler {
|
||||
private readonly IWidgetsService _widgetsService;
|
||||
private readonly ISiteService _siteService;
|
||||
private readonly IMembershipService _membershipService;
|
||||
private const string LoremIpsum = "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur a nibh ut tortor dapibus vestibulum. Aliquam vel sem nibh. Suspendisse vel condimentum tellus.</p>";
|
||||
|
||||
public WidgetCommands(IWidgetsService widgetsService, ISiteService siteService, IMembershipService membershipService) {
|
||||
_widgetsService = widgetsService;
|
||||
_siteService = siteService;
|
||||
_membershipService = membershipService;
|
||||
}
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Type { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Title { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Zone { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Position { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Layer { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Owner { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public string Text { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public bool UseLoremIpsumText { get; set; }
|
||||
|
||||
[OrchardSwitch]
|
||||
public bool Publish { get; set; }
|
||||
|
||||
[CommandName("widget create")]
|
||||
[CommandHelp("widget create /Type:<type> /Title:<title> /Zone:<zone> /Position:<position> /Layer:<layer> [/Owner:<owner>] [/Text:<text>] [/UseLoremIpsumText:true|false]\r\n\t" + "Creates a new html widget")]
|
||||
[OrchardSwitches("Type,Title,Zone,Position,Layer,Owner,Text,UseLoremIpsumText")]
|
||||
public void Create() {
|
||||
var layer = GetLayer(Layer);
|
||||
if (layer == null) {
|
||||
throw new OrchardException(T("Creating widget failed : layer {0} was not found.", Layer));
|
||||
}
|
||||
|
||||
var widget = _widgetsService.CreateWidget(layer.ContentItem.Id, Type, T(Title).Text, Position, Zone);
|
||||
var text = String.Empty;
|
||||
if (UseLoremIpsumText) {
|
||||
text = T(LoremIpsum).Text;
|
||||
}
|
||||
else {
|
||||
if (!String.IsNullOrEmpty(Text)) {
|
||||
text = Text;
|
||||
}
|
||||
}
|
||||
widget.As<BodyPart>().Text = text;
|
||||
if (String.IsNullOrEmpty(Owner)) {
|
||||
Owner = _siteService.GetSiteSettings().SuperUser;
|
||||
}
|
||||
var owner = _membershipService.GetUser(Owner);
|
||||
widget.As<ICommonPart>().Owner = owner;
|
||||
|
||||
Context.Output.WriteLine(T("Widget created successfully.").Text);
|
||||
}
|
||||
|
||||
private LayerPart GetLayer(string layer) {
|
||||
var layers = _widgetsService.GetLayers();
|
||||
return layers.FirstOrDefault(layerPart => String.Equals(layerPart.Name, layer, StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
}
|
||||
}
|
@@ -45,6 +45,8 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AdminMenu.cs" />
|
||||
<Compile Include="Commands\LayerCommands.cs" />
|
||||
<Compile Include="Commands\WidgetCommands.cs" />
|
||||
<Compile Include="Controllers\AdminController.cs" />
|
||||
<Compile Include="Drivers\LayerPartDriver.cs" />
|
||||
<Compile Include="Drivers\WidgetPartDriver.cs" />
|
||||
|
Reference in New Issue
Block a user