Goal
Disable the Step Back action in Inbox and on Editor Status Bar for configured workflow models. In this post the Step Back action is disabled for Request for Activation - /var/workflow/models/request_for_activation, workflow items
Step Back action can be disabled by just overriding the function CQ.Inbox.UI.commons.stepBackWorkitem, additional code explores the Editor Status Bar api on page authoring
Demo | Package Install | Github
Inbox
Inbox Workitem Detail
Editor
Solution
1) Login to CRXDE Lite, create folder (nt:folder) /apps/eaem-touchui-disable-wf-step-back
2) Create clientlib (type cq:ClientLibraryFolder) /apps/eaem-touchui-disable-wf-step-back/clientlib and set property categories of String[] type to [cq.inbox.gui.commons, cq.authoring.dialog.all] and dependencies String[] to lodash
3) Create file ( type nt:file ) /apps/eaem-touchui-disable-wf-step-back/clientlib/js.txt, add the following
disable-step-back.js
4) Create file (type nt:file) /apps/eaem-touchui-disable-wf-step-back/clientlib/disable-step-back.js, add the following code
(function ($, $document, gAuthor) { "use strict"; var _ = window._, EDITOR_URL = "/editor.html", REQ_FOR_ACT_MODEL = "/var/workflow/models/request_for_activation", DISABLE_MESSAGE = "Step back not allowed for 'Request for Activation' workflow", WF_ACTION_STEP_BACK = "workflow-stepback", WF_STATUS_TYPE = "workflow"; if(isAuthoring()){ $document.one("cq-editor-statusbar-loaded", disableStepBackOnPage); }else{ $document.one('foundation-contentloaded', disableStepBackOnInBox); } function disableStepBackOnInBox(){ overrideStepBack(); } function disableStepBackOnPage(){ if(!gAuthor){ return; } var wfStatus = getWFStatus(); if(!wfStatus){ return; } var stepBackId = wfStatus.actionIds.findIndex(function(ele){ return (ele == WF_ACTION_STEP_BACK); }); if(stepBackId < 0){ return; } var $status = $(gAuthor.ui.statusBarManager.getStatusBar().status), $stepBack = $status.find("[data-status-action-id='" + WF_ACTION_STEP_BACK + "']"); $stepBack.css("color", "#777777"); overrideStepBack(); } function overrideStepBack(){ var origFn = window.CQ.Inbox.UI.commons.stepBackWorkitem; window.CQ.Inbox.UI.commons.stepBackWorkitem = eaemStepBackWorkitem; function eaemStepBackWorkitem(workitemId, successURL){ $.ajax(getWorkflowId(workitemId) + ".json").done(function(data){ if(data.model != REQ_FOR_ACT_MODEL){ return origFn(workitemId, successURL); } showAlert(DISABLE_MESSAGE, "Disabled"); }); } } function showAlert(message, title, callback){ var fui = $(window).adaptTo("foundation-ui"), options = [{ id: "ok", text: "OK", primary: true }]; message = message || "Unknown Error"; title = title || "Error"; fui.prompt(title, message, "warning", options, callback); } function getWFStatus(){ var statusBar = gAuthor.ui.statusBarManager.getStatusBar(), wfStatus; _.each(statusBar.statuses, function(status){ if(status.statusType == WF_STATUS_TYPE){ wfStatus = status; } }); return wfStatus; } function getWorkflowId(workitemId){ return workitemId.substring(0, workitemId.indexOf("/workItems")); } function isAuthoring() { return (window.location.pathname.indexOf(EDITOR_URL) === 0); } }(jQuery, jQuery(document), Granite.author));
No comments:
Post a Comment