mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Adding workflow debugging view
--HG-- branch : 1.x
This commit is contained in:
@@ -10,6 +10,7 @@ using Orchard.DisplayManagement;
|
||||
using Orchard.Forms.Services;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Mvc;
|
||||
using Orchard.Mvc.Extensions;
|
||||
using Orchard.Security;
|
||||
using Orchard.Themes;
|
||||
using System;
|
||||
@@ -126,6 +127,7 @@ namespace Orchard.Workflows.Controllers {
|
||||
ContentItem: contentItem,
|
||||
Workflows: workflows
|
||||
);
|
||||
|
||||
return View(viewModel);
|
||||
}
|
||||
|
||||
@@ -150,19 +152,21 @@ namespace Orchard.Workflows.Controllers {
|
||||
return RedirectToAction("Edit", new { workflowDefinitionRecord.Id });
|
||||
}
|
||||
|
||||
public ActionResult Edit(int id, string localId) {
|
||||
public ActionResult Edit(int id, string localId, int? workflowId) {
|
||||
if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to edit workflows")))
|
||||
return new HttpUnauthorizedResult();
|
||||
|
||||
// convert the workflow definition into its view model
|
||||
var workflowDefinitionRecord = _workflowDefinitionRecords.Get(id);
|
||||
var workflowDefinitionViewModel = CreateWorkflowDefinitionViewModel(workflowDefinitionRecord);
|
||||
|
||||
var workflow = workflowId.HasValue ? _workflowRecords.Get(workflowId.Value) : null;
|
||||
|
||||
var viewModel = new AdminEditViewModel {
|
||||
LocalId = String.IsNullOrEmpty(localId) ? Guid.NewGuid().ToString() : localId,
|
||||
IsLocal = !String.IsNullOrEmpty(localId),
|
||||
WorkflowDefinition = workflowDefinitionViewModel,
|
||||
AllActivities = _activitiesManager.GetActivities()
|
||||
AllActivities = _activitiesManager.GetActivities(),
|
||||
Workflow = workflow
|
||||
};
|
||||
|
||||
return View(viewModel);
|
||||
@@ -183,6 +187,21 @@ namespace Orchard.Workflows.Controllers {
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult DeleteWorkflow(int id, string returnUrl) {
|
||||
if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to manage rules")))
|
||||
return new HttpUnauthorizedResult();
|
||||
|
||||
var workflow = _workflowRecords.Get(id);
|
||||
|
||||
if (workflow != null) {
|
||||
_workflowRecords.Delete(workflow);
|
||||
Services.Notifier.Information(T("Workflow deleted"));
|
||||
}
|
||||
|
||||
return this.RedirectLocal(returnUrl, () => RedirectToAction("Index"));
|
||||
}
|
||||
|
||||
private WorkflowDefinitionViewModel CreateWorkflowDefinitionViewModel(WorkflowDefinitionRecord workflowDefinitionRecord) {
|
||||
if (workflowDefinitionRecord == null) {
|
||||
throw new ArgumentNullException("workflowDefinitionRecord");
|
||||
@@ -196,6 +215,7 @@ namespace Orchard.Workflows.Controllers {
|
||||
workflow.Activities = new JArray(workflowDefinitionRecord.ActivityRecords.Select(x => {
|
||||
dynamic activity = new JObject();
|
||||
activity.Name = x.Name;
|
||||
activity.Id = x.Id;
|
||||
activity.ClientId = x.Name + "_" + x.Id;
|
||||
activity.Left = x.X;
|
||||
activity.Top = x.Y;
|
||||
|
@@ -27,7 +27,7 @@ namespace Orchard.Workflows.Drivers {
|
||||
|
||||
protected override DriverResult Display(CommonPart part, string displayType, dynamic shapeHelper) {
|
||||
return ContentShape("Parts_Workflow_SummaryAdmin", () => {
|
||||
var workflows = _workflowRepository.Table.Where(x => x.ContentItemRecord == part.ContentItem.Record).Distinct().ToList();
|
||||
var workflows = _workflowRepository.Table.Where(x => x.ContentItemRecord == part.ContentItem.Record).ToList();
|
||||
return shapeHelper.Parts_Workflow_SummaryAdmin().Workflows(workflows);
|
||||
});
|
||||
}
|
||||
|
@@ -64,7 +64,7 @@ var loadActivities = function (localId) {
|
||||
// activities
|
||||
for (var i = 0; i < workflow.Activities.length; i++) {
|
||||
var activity = workflow.Activities[i];
|
||||
renderActivity(activity.ClientId, activity.Name, activity.State, activity.Start, activity.Top, activity.Left);
|
||||
renderActivity(activity.ClientId, activity.Id, activity.Name, activity.State, activity.Start, activity.Top, activity.Left);
|
||||
}
|
||||
|
||||
// connections
|
||||
|
@@ -77,7 +77,7 @@
|
||||
}
|
||||
});
|
||||
|
||||
var renderActivity = function (clientId, name, state, start, top, left) {
|
||||
var renderActivity = function (clientId, id, name, state, start, top, left) {
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
@@ -93,6 +93,10 @@
|
||||
|
||||
dom.addClass('activity');
|
||||
|
||||
if ($.inArray(id, awaitingRecords) != -1) {
|
||||
dom.addClass('awaiting');
|
||||
}
|
||||
|
||||
if (start) {
|
||||
dom.addClass('start');
|
||||
}
|
||||
|
@@ -29,6 +29,12 @@
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.awaiting {
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAYAAADUryzEAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAADpJREFUOE9j+P//P0UYqyApGKsgKRhM/P79m+F/TTuEC8P+sf+/fv2KV27UgFEDhpsBlGCsgsTj/wwAFS7Z3zr+A08AAAAASUVORK5CYII=');
|
||||
background-position: top left;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.activity-toolbox-item.event {
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAATCAYAAACk9eypAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAANNJREFUOE+VkbENhDAMRcOtRElDRRsxB5MwAxNQ0yAGYAJqWiagASFfbMmRHXzcXfGk+Nvf+UocAPzDyxIfMcUnZJF94WYg0ziOkOc50TQNHMehZlQRyLqui4a+74Ok+jrSeZ5TXdc0XJYl7Psu+4Qssm3boKoqMrRtGyRwqHnvo1kZZH4JmxFpcDI/UxQFrOsa2okh5HecH19nGAY6y+1IPKTgbel2RA0xfNsv/0Dwa83zHErdUwWzLIu5HbkJCOa3tiM34bouMljbEVN8whQ/A+4NnH6HdIESjBQAAAAASUVORK5CYII=');
|
||||
background-position: top left;
|
||||
|
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Web.Mvc;
|
||||
using Orchard.Workflows.Models;
|
||||
using Orchard.Workflows.Services;
|
||||
|
||||
namespace Orchard.Workflows.ViewModels {
|
||||
@@ -8,6 +9,7 @@ namespace Orchard.Workflows.ViewModels {
|
||||
public bool IsLocal { get; set; }
|
||||
public IEnumerable<IActivity> AllActivities { get; set; }
|
||||
public WorkflowDefinitionViewModel WorkflowDefinition { get; set; }
|
||||
public WorkflowRecord Workflow { get; set; }
|
||||
}
|
||||
|
||||
public class UpdatedActivityModel {
|
||||
|
@@ -35,7 +35,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="activity-toolbox">
|
||||
<div id="activity-toolbox" @if(Model.Workflow != null) { <text>style="visibility:hidden"</text>}>
|
||||
@Display.ActivityToolbox(Model)
|
||||
</div>
|
||||
<div id="workflow-footer"></div>
|
||||
@@ -49,21 +49,22 @@
|
||||
var localId = '@HttpUtility.JavaScriptStringEncode(Model.LocalId)';
|
||||
var updatedActivityClientId = null;
|
||||
var updatedActivityState = null;
|
||||
var awaitingRecords = [];
|
||||
|
||||
@if (TempData.ContainsKey("UpdatedViewModel")) {
|
||||
var model = TempData["UpdatedViewModel"] as UpdatedActivityModel;
|
||||
if (model != null) {
|
||||
<text>
|
||||
updatedActivityClientId = '@(model.ClientId)';
|
||||
updatedActivityState = '@Html.Raw(HttpUtility.JavaScriptStringEncode(FormParametersHelper.ToJsonString(model.Data)))';
|
||||
</text>
|
||||
@: updatedActivityClientId = '@(model.ClientId)';
|
||||
@: updatedActivityState = '@Html.Raw(HttpUtility.JavaScriptStringEncode(FormParametersHelper.ToJsonString(model.Data)))';
|
||||
}
|
||||
}
|
||||
else if (!Model.IsLocal) {
|
||||
<text>
|
||||
var state = @Html.Raw(Model.WorkflowDefinition.JsonData);
|
||||
sessionStorage.setItem(localId, JSON.stringify(state));
|
||||
</text>
|
||||
@: var state = @Html.Raw(Model.WorkflowDefinition.JsonData);
|
||||
@: sessionStorage.setItem(localId, JSON.stringify(state));
|
||||
}
|
||||
|
||||
@if (Model.Workflow != null) {
|
||||
@: awaitingRecords = [@String.Join(",", Model.Workflow.AwaitingActivities.Select(x => x.ActivityRecord.Id.ToString()).ToArray())];
|
||||
}
|
||||
|
||||
//]]>
|
||||
@@ -89,8 +90,12 @@
|
||||
</script>
|
||||
}
|
||||
|
||||
<fieldset>
|
||||
<button class="primaryAction" type="submit" name="submit.Save" value="@T("Save")">@T("Save")</button>
|
||||
@Html.ActionLink(T("Cancel").Text, "Index", "Admin", new { area = "Orchard.Workflows" }, new { @class = "primaryAction button" })
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
@* Can only save if not debugging a workflow *@
|
||||
@if (Model.Workflow == null) {
|
||||
<button class="primaryAction" type="submit" name="submit.Save" value="@T("Save")">@T("Save")</button>
|
||||
}
|
||||
|
||||
@Html.ActionLink(T("Close").Text, "Index", "Admin", new { area = "Orchard.Workflows" }, new { @class = "primaryAction button" })
|
||||
</fieldset>
|
||||
}
|
||||
|
@@ -12,6 +12,10 @@
|
||||
<th scope="col" class="actions"> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
@if (Model.Workflows.Count == 0) {
|
||||
@T("No workflows associated with this content item.")
|
||||
}
|
||||
|
||||
@foreach (WorkflowRecord workflow in Model.Workflows) {
|
||||
<tr>
|
||||
<td>
|
||||
@@ -28,8 +32,8 @@
|
||||
|
||||
</td>
|
||||
<td>
|
||||
@*@Html.ActionLink(T("Edit").ToString(), "EditWorkflow", new { id = workflow.Id })*@ |
|
||||
@*@Html.ActionLink(T("Delete").ToString(), "DeleteWorkflow", new { id = workflow.Id }, new { itemprop = "RemoveUrl UnsafeUrl" })*@
|
||||
@Html.ActionLink(T("Status").ToString(), "Edit", new { id = workflow.WorkflowDefinitionRecord.Id, workflowId = workflow.Id, ReturnUrl = Html.ViewContext.HttpContext.Request.RawUrl }) |
|
||||
@Html.ActionLink(T("Delete").ToString(), "DeleteWorkflow", new { id = workflow.Id }, new { itemprop = "RemoveUrl UnsafeUrl", ReturnUrl = Html.ViewContext.HttpContext.Request.RawUrl })
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
|
@@ -6,8 +6,8 @@
|
||||
@if (count > 0) {
|
||||
<ul class="pageStatus">
|
||||
<li title="@T("Running workflows")" >
|
||||
<img class="icon" src="@Href("~/Modules/Orchard.Workflows/Styles/Images/cog.png")" alt="@T("Running ({0})", count)" />
|
||||
@T("Running ({0})", count)
|
||||
<img class="icon" src="@Href("~/Modules/Orchard.Workflows/Styles/Images/cog.png")" alt="@T("Running ({0})", count)" />
|
||||
<a href="@Url.Action("List", "Admin", new { area = "Orchard.Workflows", id = (int)Model.ContentPart.Id })">@T("{0} Workflow(s)", count).Text</a>
|
||||
|
|
||||
</li>
|
||||
</ul>
|
||||
|
Reference in New Issue
Block a user