Goal
Show the checked out user info when a user tries to edit content fragments
Demo | Package Install | Github
Solution
1) Login to CRXDE Lite (http://localhost:4502/crx/de) and create folder /apps/eaem-touchui-cfm-show-checkout
2) Create node /apps/eaem-touchui-cfm-show-checkout/clientlib of type cq:ClientLibraryFolder, add a String property categories with value dam.cfm.authoring.contenteditor.v2 and dependencies with String[] value [lodash]
3) Create file (nt:file) /apps/eaem-touchui-cfm-show-checkout/clientlib/js.txt and add
show-checkout.js
4) Create file (nt:file) /apps/eaem-touchui-cfm-show-checkout/clientlib/show-checkout.js and add the following code
(function ($, $document) { var LOCK_ITEM_CSS = "eaem-cf-lock"; $document.on("foundation-contentloaded", checkForDriveLock); function checkForDriveLock(){ $.ajax(getCFJCRContentPath()).done(handler); function handler(data){ $("." + LOCK_ITEM_CSS).remove(); var driveLock = data["cq:drivelock"]; if(_.isEmpty(driveLock)){ return; } addCheckOutButton(driveLock); if(getLoggedInUserID() != driveLock){ showAlert("Locked for editing by " + driveLock + ", changes cannot be saved", "Editor"); } } } 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 addCheckOutButton(driveLock){ var message = "Locked by " + ( getLoggedInUserID() == driveLock ? "current user - " : "- ") + driveLock; var html = '<coral-actionbar-item class="coral3-ActionBar-item ' + LOCK_ITEM_CSS + '">' + '<coral-icon style="margin:16px 10px 0 0; " class="coral3-Icon coral3-Icon--sizeS coral3-Icon--lockOn" icon="lockOn" size="S"></coral-icon>' + '<span>' + message + '</span>' + '</coral-actionbar-item>'; $("coral-actionbar-primary").append(html); } function getLoggedInUserID(){ return window.sessionStorage.getItem("granite.shell.badge.user"); } function getCFJCRContentPath(){ return $(".content-fragment-editor").data("fragment") + "/_jcr_content.json"; } }(jQuery, jQuery(document)));
Is this can be extended for normal page lock on pages or assets?
ReplyDelete