From cd748154e2c6e64df5a6c0528cc770e59931fd97 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Tue, 13 Nov 2012 15:21:30 -0800 Subject: [PATCH] Adding Orchard.Workflows module --HG-- branch : 1.x extra : rebase_source : 092fd8c96737f25c53f6c3af2a125e267b6f515a --- .../Modules/Orchard.Workflows/Migrations.cs | 23 +++ .../Models/ActivityRecord.cs | 16 ++ .../Models/ConnectionRecord.cs | 17 +++ .../Models/Descriptors/ActivityContext.cs | 12 ++ .../Models/Descriptors/ActivityDescriptor.cs | 14 ++ .../Descriptors/DescribeActivityContext.cs | 33 ++++ .../Models/Descriptors/DescribeActivityFor.cs | 25 +++ .../Models/Descriptors/TypeDescriptor.cs | 11 ++ .../Models/WorkflowDefinitionRecord.cs | 24 +++ .../Models/WorkflowRecord.cs | 17 +++ .../Modules/Orchard.Workflows/Module.txt | 10 ++ .../Orchard.Workflows.csproj | 144 ++++++++++++++++++ .../Properties/AssemblyInfo.cs | 36 +++++ .../Orchard.Workflows/Scripts/Web.config | 25 +++ .../Orchard.Workflows/Styles/Web.config | 25 +++ .../Orchard.Workflows/Views/Web.config | 41 +++++ .../Modules/Orchard.Workflows/Web.config | 41 +++++ src/Orchard.sln | 10 ++ 18 files changed, 524 insertions(+) create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Migrations.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/ActivityRecord.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/ConnectionRecord.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/ActivityContext.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/ActivityDescriptor.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/DescribeActivityContext.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/DescribeActivityFor.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/TypeDescriptor.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/WorkflowDefinitionRecord.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Models/WorkflowRecord.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Module.txt create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Orchard.Workflows.csproj create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Properties/AssemblyInfo.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Scripts/Web.config create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Styles/Web.config create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Views/Web.config create mode 100644 src/Orchard.Web/Modules/Orchard.Workflows/Web.config diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Migrations.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Migrations.cs new file mode 100644 index 000000000..79661c4d5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Migrations.cs @@ -0,0 +1,23 @@ +using Orchard.ContentManagement.MetaData; +using Orchard.Data.Migration; + +namespace Orchard.Workflows { + public class WorkflowsDataMigration : DataMigrationImpl { + public int Create() { + SchemaBuilder.CreateTable("WorkflowPartRecord", + table => table + .ContentPartRecord() + ); + + ContentDefinitionManager.AlterTypeDefinition("Workflow", + cfg => cfg + .WithPart("WorkflowPart") + .WithPart("TitlePart") + .WithPart("IdentityPart") + .WithPart("CommonPart", p => p.WithSetting("OwnerEditorSettings.ShowOwnerEditor", "false")) + ); + + return 1; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/ActivityRecord.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/ActivityRecord.cs new file mode 100644 index 000000000..3f8338eff --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/ActivityRecord.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; + +namespace Orchard.Workflows.Models { + public class ActivityRecord { + public virtual int Id { get; set; } + public virtual string Category { get; set; } + public virtual string Type { get; set; } + public virtual string Parameters { get; set; } + + // Parent property + public virtual WorkflowDefinitionRecord WorkflowDefinitionRecord { get; set; } + + // Parent property + public virtual IList RegisteredWorkflows { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/ConnectionRecord.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/ConnectionRecord.cs new file mode 100644 index 000000000..61cc81663 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/ConnectionRecord.cs @@ -0,0 +1,17 @@ +namespace Orchard.Workflows.Models { + public class ConnectionRecord { + + public virtual int Id { get; set; } + + // Source is null if it's a starting activity + public virtual ActivityRecord Source { get; set; } + public virtual string SourceEndpoint { get; set; } + + // Destination is null if it's an ending activity + public virtual ActivityRecord Destination { get; set; } + public virtual string DestinationEndpoint { get; set; } + + // Parent relationship + public virtual WorkflowDefinitionRecord WorkflowDefinition { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/ActivityContext.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/ActivityContext.cs new file mode 100644 index 000000000..6fdc6eb0a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/ActivityContext.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace Orchard.Workflows.Models.Descriptors { + public class ActivityContext { + public ActivityContext() { + Tokens = new Dictionary(); + } + + public IDictionary Tokens { get; set; } + public dynamic State { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/ActivityDescriptor.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/ActivityDescriptor.cs new file mode 100644 index 000000000..ccdd3822c --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/ActivityDescriptor.cs @@ -0,0 +1,14 @@ +using System; +using Orchard.Localization; + +namespace Orchard.Workflows.Models.Descriptors { + public class ActionDescriptor { + public string Category { get; set; } + public string Type { get; set; } + public LocalizedString Name { get; set; } + public LocalizedString Description { get; set; } + public Func Action { get; set; } + public string Form { get; set; } + public Func Display { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/DescribeActivityContext.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/DescribeActivityContext.cs new file mode 100644 index 000000000..cacca2dcd --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/DescribeActivityContext.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Linq; +using Orchard.Localization; + +namespace Orchard.Workflows.Models.Descriptors { + public class DescribeActivityContext { + private readonly Dictionary _describes = new Dictionary(); + + public IEnumerable> Describe() { + return _describes.Select(kp => new TypeDescriptor { + Category = kp.Key, + Name = kp.Value.Name, + Description = kp.Value.Description, + Descriptors = kp.Value.Types + }); + } + + public DescribeActivityFor For(string category) { + return For(category, null, null); + } + + public DescribeActivityFor For(string category, LocalizedString name, LocalizedString description) { + DescribeActivityFor describeFor; + if (!_describes.TryGetValue(category, out describeFor)) { + describeFor = new DescribeActivityFor(category, name, description); + _describes[category] = describeFor; + } + return describeFor; + } + } + + +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/DescribeActivityFor.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/DescribeActivityFor.cs new file mode 100644 index 000000000..6dafbc7f1 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/DescribeActivityFor.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using Orchard.Localization; + +namespace Orchard.Workflows.Models.Descriptors { + public class DescribeActivityFor { + private readonly string _category; + + public DescribeActivityFor(string category, LocalizedString name, LocalizedString description) { + Types = new List(); + _category = category; + Name = name; + Description = description; + } + + public LocalizedString Name { get; private set; } + public LocalizedString Description { get; private set; } + public List Types { get; private set; } + + public DescribeActivityFor Element(string type, LocalizedString name, LocalizedString description, Func action, Func display, string form = null) { + Types.Add(new ActionDescriptor { Type = type, Name = name, Description = description, Category = _category, Action = action, Display = display, Form = form }); + return this; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/TypeDescriptor.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/TypeDescriptor.cs new file mode 100644 index 000000000..b0311fe6f --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/Descriptors/TypeDescriptor.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using Orchard.Localization; + +namespace Orchard.Workflows.Models.Descriptors { + public class TypeDescriptor { + public string Category { get; set; } + public LocalizedString Name { get; set; } + public LocalizedString Description { get; set; } + public IEnumerable Descriptors { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/WorkflowDefinitionRecord.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/WorkflowDefinitionRecord.cs new file mode 100644 index 000000000..ec765e98a --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/WorkflowDefinitionRecord.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using Orchard.Data.Conventions; + +namespace Orchard.Workflows.Models { + public class WorkflowDefinitionRecord { + public WorkflowDefinitionRecord() { + Activities = new List(); + Connections = new List(); + } + + public virtual int Id { get; set; } + public virtual bool Enabled { get; set; } + + [Required, StringLength(1024)] + public virtual string Name { get; set; } + + [CascadeAllDeleteOrphan] + public virtual IList Activities { get; set; } + + [CascadeAllDeleteOrphan] + public virtual IList Connections { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Models/WorkflowRecord.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Models/WorkflowRecord.cs new file mode 100644 index 000000000..be1a8b4ab --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Models/WorkflowRecord.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using Orchard.Data.Conventions; + +namespace Orchard.Workflows.Models { + public class WorkflowRecord { + public WorkflowRecord() { + AwaitingActivities = new List(); + } + + public virtual int Id { get; set; } + + [StringLengthMax] + public virtual string State { get; set; } + + public virtual IList AwaitingActivities { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Module.txt b/src/Orchard.Web/Modules/Orchard.Workflows/Module.txt new file mode 100644 index 000000000..f2359b0b3 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Module.txt @@ -0,0 +1,10 @@ +Name: Orchard.Workflows +AntiForgery: enabled +Author: The Orchard Team +Website: http://orchardproject.net +Version: 1.0 +OrchardVersion: 1.0 +Description: Description for the module +Features: + Orchard.Workflows: + Description: Description for feature Orchard.Workflows. \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Orchard.Workflows.csproj b/src/Orchard.Web/Modules/Orchard.Workflows/Orchard.Workflows.csproj new file mode 100644 index 000000000..aa957a3ae --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Orchard.Workflows.csproj @@ -0,0 +1,144 @@ + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {7059493C-8251-4764-9C1E-2368B8B485BC} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Orchard.Workflows + Orchard.Workflows + v4.0 + false + + + 4.0 + + + false + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + + + 3.5 + + + + False + ..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll + + + + + + + + + + + + + + + + + + + {2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6} + Orchard.Framework + + + {9916839C-39FC-4CEB-A5AF-89CA7E87119F} + Orchard.Core + + + + + + + + + + + + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + $(ProjectDir)\..\Manifests + + + + + + + + + + + + False + True + 45979 + / + + + False + True + http://orchard.codeplex.com + False + + + + + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Properties/AssemblyInfo.cs b/src/Orchard.Web/Modules/Orchard.Workflows/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..65372cba6 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Security; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Orchard.Workflows")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyProduct("Orchard")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("56d5562d-2840-4257-9c4d-152c79210040")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Scripts/Web.config b/src/Orchard.Web/Modules/Orchard.Workflows/Scripts/Web.config new file mode 100644 index 000000000..770adfab5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Scripts/Web.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Styles/Web.config b/src/Orchard.Web/Modules/Orchard.Workflows/Styles/Web.config new file mode 100644 index 000000000..770adfab5 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Styles/Web.config @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Views/Web.config b/src/Orchard.Web/Modules/Orchard.Workflows/Views/Web.config new file mode 100644 index 000000000..b7d215131 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Views/Web.config @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Orchard.Web/Modules/Orchard.Workflows/Web.config b/src/Orchard.Web/Modules/Orchard.Workflows/Web.config new file mode 100644 index 000000000..88b84a792 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Workflows/Web.config @@ -0,0 +1,41 @@ + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Orchard.sln b/src/Orchard.sln index f5ebbe78c..81c5ec498 100644 --- a/src/Orchard.sln +++ b/src/Orchard.sln @@ -144,6 +144,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SysCache", "Orchard.Web\Mod EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpgradeTo16", "Orchard.Web\Modules\UpgradeTo16\UpgradeTo16.csproj", "{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Workflows", "Orchard.Web\Modules\Orchard.Workflows\Orchard.Workflows.csproj", "{7059493C-8251-4764-9C1E-2368B8B485BC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CodeCoverage|Any CPU = CodeCoverage|Any CPU @@ -808,6 +810,13 @@ Global {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.FxCop|Any CPU.Build.0 = Release|Any CPU {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Release|Any CPU.Build.0 = Release|Any CPU + {7059493C-8251-4764-9C1E-2368B8B485BC}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU + {7059493C-8251-4764-9C1E-2368B8B485BC}.Coverage|Any CPU.ActiveCfg = Release|Any CPU + {7059493C-8251-4764-9C1E-2368B8B485BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7059493C-8251-4764-9C1E-2368B8B485BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7059493C-8251-4764-9C1E-2368B8B485BC}.FxCop|Any CPU.ActiveCfg = Release|Any CPU + {7059493C-8251-4764-9C1E-2368B8B485BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7059493C-8251-4764-9C1E-2368B8B485BC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -862,6 +871,7 @@ Global {E826F796-8CE3-4B5B-8423-5AA5F81D2FC3} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {3BD22132-D538-48C6-8854-F71333C798EB} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} + {7059493C-8251-4764-9C1E-2368B8B485BC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {ABC826D4-2FA1-4F2F-87DE-E6095F653810} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {F112851D-B023-4746-B6B1-8D2E5AD8F7AA} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {6CB3EB30-F725-45C0-9742-42599BA8E8D2} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}