Goal
Show Site specific Workflows in the Start Workflow Dialog of Classic UI SiteAdmin console
Demo | Package Install
Set Site Path on Workflow - eaemSitePath
Set site root path - eaemSitePath for which the specific workflow should be available. Here Request for Activation workflow is shown for pages of Geometrixx Demo
Site /content/geometrixx only
Request for Activation available for pages of /content/geometrixx
Request for Activation NOT available for pages of /content/geometrixx-media
Solution
1) Login to CRXDE Lite, create folder (nt:folder) /apps/classicui-site-specific-workflows
2) Create clientlib (type cq:ClientLibraryFolder) /apps/classicui-site-specific-workflows/clientlib and set a property categories of String type to cq.widgets and dependencies value underscore
3) Create file ( type nt:file ) /apps/classicui-site-specific-workflows/clientlib/js.txt, add the following
site-workflows.js
4) Create file (type nt:file) /apps/classicui-site-specific-workflows/clientlib/site-workflows.js, add the following code
(function($){ if(window.location.pathname != "/siteadmin"){ return; } var SA_GRID = "cq-siteadmin-grid", WORKFLOW_BUT_TEXT = "Workflow...", START_WF_DIALOG_ID = "cq-workflowdialog", QUERY = "SELECT * FROM [cq:Page] WHERE ISDESCENDANTNODE([/etc/workflow/models]) AND " + "([jcr:content/eaemSitePath] = 'PLACEHOLDER' OR [jcr:content/eaemSitePath] IS NULL)"; var SA_INTERVAL = setInterval(function(){ var grid = CQ.Ext.getCmp(SA_GRID); if(!grid || ( grid.rendered != true)){ return; } clearInterval(SA_INTERVAL); var toolBar = grid.getTopToolbar(); try{ var wButton = toolBar.find("text", WORKFLOW_BUT_TEXT)[0]; wButton.on('click', filterWorkflows); }catch(err){ console.log("Error adding workflow button listener"); } }, 250); function filterWorkflows(){ var wMgr = CQ.Ext.WindowMgr, winId; var W_INTERVAL = setInterval(function () { wMgr.each(function (win) { winId = win.id; if (winId && (winId.indexOf(START_WF_DIALOG_ID) < 0)) { return; } var modelCombo = CQ.Ext.getCmp(winId + "-model"); if(modelCombo.eaemInit){ return; } clearInterval(W_INTERVAL); modelCombo.eaemInit = true; var contentPath = window.location.hash.split("#")[1], //you may want to replace the following query with a servlet returning results query = "/crx/de/query.jsp?type=JCR-SQL2&showResults=true&stmt=" + QUERY.replace('PLACEHOLDER', contentPath); $.ajax( { url: query, context: modelCombo } ).done(filter); }); }, 250); function filter(data){ function handler(store, recs){ var paths = _.pluck(data.results, "path"), modelId; _.each(recs, function (rec){ modelId = rec.data.wid; modelId = modelId.substring(0, modelId.indexOf("/jcr:content/model")); if(paths.indexOf(modelId) != -1){ return; } store.remove(rec); }) } this.store.on('load', handler); } } }(jQuery));
No comments:
Post a Comment