|
using System; |
|
using Telerik.Sitefinity.Configuration; |
|
using Telerik.Sitefinity.News.Model; |
|
using Telerik.Sitefinity.Pages.Model; |
|
using Telerik.Sitefinity.Security; |
|
using Telerik.Sitefinity.Security.Configuration; |
|
using Telerik.Sitefinity.Services; |
|
using Telerik.Sitefinity.Workflow; |
|
using Telerik.Sitefinity.Workflow.Model; |
|
|
|
namespace SitefinityWebApp.CustomWorkflow |
|
{ |
|
public class WorkflowDefinitionSamples |
|
{ |
|
private IWorkflowExecutionDefinition CreateSimpleApprovalWorkflowDefinition(Guid definitionId) |
|
{ |
|
var workflowManager = WorkflowManager.GetManager(); |
|
var backendUsersRole = Config.Get<SecurityConfig>().ApplicationRoles[SecurityConstants.AppRoles.BackendUsers]; |
|
|
|
// "Approve" is the only level in 1-step approval process. |
|
var workflowDefinition = workflowManager.CreateWorkflowDefinition(definitionId); |
|
workflowDefinition.Title = "1-step workflow for Bloggers"; |
|
workflowDefinition.WorkflowType = WorkflowType.StandardOneStep; |
|
workflowDefinition.AllowAdministratorsToSkipWorkflow = false; |
|
workflowDefinition.AllowPublishersToSkipWorkflow = false; |
|
workflowDefinition.AllowNotes = true; |
|
workflowDefinition.IsActive = true; |
|
|
|
// Levels section |
|
var approvePermission = workflowManager.CreateWorkflowPermission(); |
|
approvePermission.ActionName = "Approve"; |
|
approvePermission.PrincipalType = WorkflowPrincipalType.Role; |
|
approvePermission.PrincipalId = backendUsersRole.Id.ToString(); |
|
approvePermission.PrincipalName = backendUsersRole.Name; |
|
|
|
var level1 = workflowManager.CreateWorkflowLevel(); |
|
level1.ActionName = "Approve"; |
|
level1.Ordinal = 1; |
|
level1.NotifyAdministrators = true; |
|
level1.NotifyApprovers = true; |
|
level1.Permissions.Add(approvePermission); |
|
|
|
workflowDefinition.Levels.Add(level1); |
|
|
|
// Scopes section - determines whether the workflow is valid for a specific site or language |
|
var workflowScope1 = workflowManager.CreateWorkflowScope(); |
|
// You can specify whether the workflow is valid for a specified site only |
|
// If you omit this line the workflow is valid for all sites by default |
|
workflowManager.Provider.AddItemLink(SystemManager.CurrentContext.CurrentSite.Id, workflowScope1); |
|
// You can specify whether the workflow is valid for a specified language only |
|
// If you omit this line the workflow is valid for all languages by default |
|
workflowScope1.Language = "en"; |
|
|
|
//TypeScope section - determines whether the workflow is valid for a specific item type or specific page(s) if the item type is PageNode |
|
var typeScope1 = workflowManager.CreateWorkflowTypeScope(); |
|
//Specify this workflow to be valid for Newsitems |
|
typeScope1.ContentType = typeof(NewsItem).FullName; |
|
|
|
|
|
var typeScope2 = workflowManager.CreateWorkflowTypeScope(); |
|
//specify this workflow to be valid for Pages |
|
typeScope2.ContentType = typeof(PageNode).FullName; |
|
// If you want to specify only selected pages, pass a comma separated list of PageNode Ids to the ContentFilter |
|
typeScope2.ContentFilter = ""; |
|
//Ste the IncludeChildren property to true/false to determine whether to include child pages of the selected page(s) |
|
typeScope2.IncludeChildren = true; |
|
|
|
workflowScope1.TypeScopes.Add(typeScope1); |
|
workflowScope1.TypeScopes.Add(typeScope2); |
|
|
|
workflowDefinition.Scopes.Add(workflowScope1); |
|
|
|
workflowManager.SaveChanges(); |
|
|
|
return new WorkflowDefinitionProxy(workflowDefinition); |
|
} |
|
|
|
private IWorkflowExecutionDefinition CreateTwoStepApprovalWorkflowDefinition(Guid definitionId) |
|
{ |
|
var workflowManager = WorkflowManager.GetManager(); |
|
var backendUsersRole = Config.Get<SecurityConfig>().ApplicationRoles[SecurityConstants.AppRoles.BackendUsers]; |
|
|
|
// In 2-level approval the steps are "Approve" and "Publish". |
|
// In 3-level approval the steps are "Review", "Approve" and "Publish". |
|
var workflowDefinition = workflowManager.CreateWorkflowDefinition(definitionId); |
|
workflowDefinition.Title = "2-step workflow for Restricted Users"; |
|
workflowDefinition.WorkflowType = WorkflowType.StandardTwoStep; |
|
workflowDefinition.AllowAdministratorsToSkipWorkflow = false; |
|
workflowDefinition.AllowPublishersToSkipWorkflow = false; |
|
workflowDefinition.AllowNotes = true; |
|
workflowDefinition.IsActive = true; |
|
|
|
// Levels section |
|
// Level 1 - Approve |
|
// Allow everyone in the role "Designers" to approve content. |
|
var approver1 = Config.Get<SecurityConfig>().ApplicationRoles[SecurityConstants.AppRoles.Designers]; |
|
|
|
var approvePermission = workflowManager.CreateWorkflowPermission(); |
|
approvePermission.ActionName = "Approve"; |
|
approvePermission.PrincipalType = WorkflowPrincipalType.Role; |
|
approvePermission.PrincipalId = approver1.Id.ToString(); |
|
approvePermission.PrincipalName = approver1.Name; |
|
|
|
var level1 = workflowManager.CreateWorkflowLevel(); |
|
level1.ActionName = "Approve"; |
|
level1.Ordinal = 1; |
|
level1.NotifyAdministrators = true; |
|
level1.NotifyApprovers = true; |
|
level1.Permissions.Add(approvePermission); |
|
|
|
workflowDefinition.Levels.Add(level1); |
|
|
|
//Level 2 - Publish |
|
var level2 = workflowManager.CreateWorkflowLevel(); |
|
level2.ActionName = "Publish"; |
|
level2.Ordinal = 2; |
|
level2.NotifyAdministrators = true; |
|
level2.NotifyApprovers = true; |
|
|
|
// Allow everyone in the role "Editors" to publish content. |
|
var publisher1 = Config.Get<SecurityConfig>().ApplicationRoles[SecurityConstants.AppRoles.Editors]; |
|
|
|
var publishPermission1 = workflowManager.CreateWorkflowPermission(); |
|
publishPermission1.ActionName = "Publish"; |
|
publishPermission1.PrincipalType = WorkflowPrincipalType.Role; |
|
publishPermission1.PrincipalId = publisher1.Id.ToString(); |
|
publishPermission1.PrincipalName = publisher1.Name; |
|
level2.Permissions.Add(publishPermission1); |
|
|
|
// Allow user "johnsmith" (if exists) to publish content. |
|
var publisher2 = UserManager.FindUser("johnsmith"); |
|
|
|
// In 2-level approval the second step is "Publish" |
|
if (publisher2 != null) |
|
{ |
|
var publishPermission2 = workflowManager.CreateWorkflowPermission(); |
|
publishPermission2.ActionName = "Publish"; |
|
publishPermission2.PrincipalType = WorkflowPrincipalType.User; |
|
publishPermission2.PrincipalId = publisher2.Id.ToString(); |
|
publishPermission2.PrincipalName = publisher2.UserName.ToString(); |
|
level2.Permissions.Add(publishPermission2); |
|
} |
|
|
|
workflowDefinition.Levels.Add(level1); |
|
|
|
// Scopes section |
|
var workflowScope1 = workflowManager.CreateWorkflowScope(); |
|
workflowDefinition.Scopes.Add(workflowScope1); |
|
|
|
workflowManager.SaveChanges(); |
|
|
|
return new WorkflowDefinitionProxy(workflowDefinition); |
|
} |
|
} |
|
} |