From ca4cb37d5891be6ca4e52d29b72d7a52a4bfeb63 Mon Sep 17 00:00:00 2001 From: dilanua Date: Thu, 11 Aug 2016 11:05:25 +0530 Subject: [PATCH] Adding emm policy listing UI --- .../app/pages/mdm.page.policies/policies.hbs | 640 ++++++++++++++++++ .../app/pages/mdm.page.policies/policies.js | 59 ++ .../app/pages/mdm.page.policies/policies.json | 6 + .../public/js/policy-list.js | 361 ++++++++++ 4 files changed, 1066 insertions(+) create mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.hbs create mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.js create mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.json create mode 100644 components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/public/js/policy-list.js diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.hbs new file mode 100644 index 0000000000..c8674b2940 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.hbs @@ -0,0 +1,640 @@ +{{! + Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + + WSO2 Inc. licenses this file to you under the Apache License, + Version 2.0 (the "License"); you may not use this file except + in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +}} +{{unit "cdmf.unit.ui.title" pageTitle="Policy Management"}} +{{unit "cdmf.unit.data-tables-extended"}} + +{{#zone "topCss"}} + +{{/zone}} + +{{#zone "breadcrumbs"}} +
  • + + + +
  • +
  • + + Policies + +
  • +{{/zone}} + +{{#zone "navbarActions"}} + {{#if permissions.ADD_ADMIN_POLICY}} +
  • + + + + + + Add Policy + +
  • + {{/if}} + {{#if permissions.CHANGE_POLICY_PRIORITY}} + {{#equal noPolicy false}} +
  • + + + + + + Policy Priority + +
  • + {{/equal}} + {{/if}} +
  • + + + + + + Apply Changes To Devices + +
  • +{{/zone}} + +{{#zone "content"}} + {{#equal noPolicy true}} +
    + +
    + {{/equal}} + {{#equal noPolicy false}} +
    + + Loading policies . . . +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{#each policyListToView}} + + + + + + + + + + + + {{/each}} +
    + + + {{/equal}} +
    + + + +
    +
    +
    +
    +

    Do you really want to remove the selected policy(s)?

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Done. Selected policy was successfully removed.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    An unexpected error occurred. Please try again later.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    + You cannot remove policies that have been already applied to devices. + Please deselect active policies from your selection and try again. +

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Do you really want to publish the selected policy(s)?

    + +
    + Yes + No +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    Done. Selected policy was successfully published.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    An unexpected error occurred. Please try again later.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Do you really want to unpublish the selected policy(s)?

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Done. Selected policy was successfully unpublished.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    An unexpected error occurred. Please try again later.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Done. New Policy priorities were successfully updated.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    An unexpected error occurred. Please try again later.

    +

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Do you really want to apply changes to all policies?

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Done. Changes applied successfully.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    An unexpected error occurred. Please try again later.

    + + +
    +
    +
    +
    + +
    +
    +
    +
    +

    + + + + + Action cannot be performed ! +

    +

    + Please select a policy or a list of policies to un-publish. +

    + + +
    +
    +
    +
    +
    +
    +
    +
    +

    + + + + + Action cannot be performed ! +

    +

    + You cannot select already inactive policies to be unpublished. + Please deselect inactive policies and try again. +

    + + +
    +
    +
    +
    +
    +
    +
    +
    +

    + + + + + Action cannot be performed ! +

    +

    + You cannot select already active policies. Please deselect active policies and try again. +

    + + +
    +
    +
    +
    +
    +
    +
    +
    +

    + + + + + Action cannot be performed ! +

    +

    + Please select a policy or a list of policies to publish. +

    + + +
    +
    +
    +
    +
    +
    +
    +
    +

    + + + + + Action cannot be performed ! +

    +

    + Please select a policy or a list of policies to remove. +

    + + +
    +
    +
    +
    +{{/zone}} + +{{#zone "bottomJs"}} + {{js "js/policy-list.js"}} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.js new file mode 100644 index 0000000000..7c329ca7c3 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.js @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +function onRequest(context) { + context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) { + if (arguments.length < 3) { + throw new Error("Handlebars Helper equal needs 2 parameters"); + } + if (lvalue != rvalue) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + var page = {}; + var policyModule = require("/app/modules/business-controllers/policy.js")["policyModule"]; + var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; + var response = policyModule.getAllPolicies(); + if (response["status"] == "success") { + var policyListToView = response["content"]; + page["policyListToView"] = policyListToView; + var policyCount = policyListToView.length; + if (policyCount == 0) { + page["policyListingStatusMsg"] = "No policy is available to be displayed."; + page["noPolicy"] = true; + } else { + page["noPolicy"] = false; + page["isUpdated"] = response["updated"]; + } + } else { + // here, response["status"] == "error" + page["policyListingStatusMsg"] = "An unexpected error occurred. Please try again later."; + page["noPolicy"] = true; + } + + if (userModule.isAuthorized("/permission/admin/device-mgt/policies/remove")) { + page["removePermitted"] = true; + } + if (userModule.isAuthorized("/permission/admin/device-mgt/policies/update")) { + page["editPermitted"] = true; + } + page.permissions = userModule.getUIPermissions(); + return page; +} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.json new file mode 100644 index 0000000000..53a1aada98 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/policies.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/policies", + "extends": "cdmf.page.policies", + "layout": "cdmf.layout.default" +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/public/js/policy-list.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/public/js/policy-list.js new file mode 100644 index 0000000000..978d6f0bd7 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/mdm.page.policies/public/js/policy-list.js @@ -0,0 +1,361 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* sorting function */ +var sortUpdateBtn = "#sortUpdateBtn"; +// var sortedIDs; +// var dataTableSelection = ".DTTT_selected"; +$('#policy-grid').datatables_extended(); +// $(".icon .text").res_text(0.2); + +var saveNewPrioritiesButton = "#save-new-priorities-button"; +var saveNewPrioritiesButtonEnabled = Boolean($(saveNewPrioritiesButton).data("enabled")); +if (saveNewPrioritiesButtonEnabled) { + $(saveNewPrioritiesButton).removeClass("hide"); +} + +/** + * Following function would execute + * when a user clicks on the list item + * initial mode and with out select mode. + */ +function InitiateViewOption() { + $(location).attr('href', $(this).data("url")); +} + +//var addSortableIndexNumbers = function () { +// $(".wr-sortable .list-group-item").not(".ui-sortable-placeholder").each(function (i) { +// $(".wr-sort-index", this).html(i + 1); +// }); +//}; + +//var sortElements = function () { +// addSortableIndexNumbers(); +// var sortableElem = ".wr-sortable"; +// $(sortableElem).sortable({ +// beforeStop: function () { +// sortedIDs = $(this).sortable("toArray"); +// addSortableIndexNumbers(); +// $(sortUpdateBtn).prop("disabled", false); +// } +// }); +// $(sortableElem).disableSelection(); +//}; + +/** + * Modal related stuff are as follows. + */ + +var modalPopup = ".wr-modalpopup"; +var modalPopupContainer = modalPopup + " .modalpopup-container"; +var modalPopupContent = modalPopup + " .modalpopup-content"; +var body = "body"; + +/* + * set popup maximum height function. + */ +function setPopupMaxHeight() { + var maxHeight = "max-height"; + var marginTop = "margin-top"; + var body = "body"; + $(modalPopupContent).css(maxHeight, ($(body).height() - ($(body).height() / 100 * 30))); + $(modalPopupContainer).css(marginTop, (-($(modalPopupContainer).height() / 2))); +} + +/* + * show popup function. + */ +function showPopup() { + $(modalPopup).show(); + setPopupMaxHeight(); +} + +/* + * hide popup function. + */ +function hidePopup() { + $(modalPopupContent).html(''); + $(modalPopup).hide(); +} + +/* + * Function to get selected policies. + */ +function getSelectedPolicyStates() { + var policyList = []; + var thisTable = $(".DTTT_selected").closest('.dataTables_wrapper').find('.dataTable').dataTable(); + thisTable.api().rows().every(function () { + if ($(this.node()).hasClass('DTTT_selected')) { + policyList.push($(thisTable.api().row(this).node()).data('status')); + } + }); + + return policyList; +} + +/* + * Function to get selected policies. + */ +function getSelectedPolicies() { + var policyList = []; + var thisTable = $(".DTTT_selected").closest('.dataTables_wrapper').find('.dataTable').dataTable(); + thisTable.api().rows().every(function () { + if ($(this.node()).hasClass('DTTT_selected')) { + policyList.push($(thisTable.api().row(this).node()).data('id')); + } + }); + + return policyList; +} + +$(document).ready(function () { +// sortElements(); + +// var policyRoles = $("#policy-roles").text(); +// var policyUsers = $("#policy-users").text(); +// +// if (!policyRoles) { +// $("#policy-roles").hide(); +// } +// if (!policyUsers) { +// $("#policy-users").hide(); +// } + + /** + * ******************************************** + * Click functions related to Policy Listing + * ******************************************** + */ + + // [1] logic for running apply-changes-for-devices use-case + + var applyChangesButtonId = "#appbar-btn-apply-changes"; + + var isUpdated = $("#is-updated").val(); + if (!isUpdated) { + // if no updated policies found, hide button from app bar + $(applyChangesButtonId).addClass("hidden"); + } else { + // if updated policies found, show button from app bar + $(applyChangesButtonId).removeClass("hidden"); + } + + // click-event function for applyChangesButton + $(applyChangesButtonId).click(function () { + var serviceURL = "/api/device-mgt/v1.0/policies/apply-changes"; + $(modalPopupContent).html($('#change-policy-modal-content').html()); + showPopup(); + + $("a#change-policy-yes-link").click(function () { + invokerUtil.put( + serviceURL, + null, + // on success + function (data, textStatus, jqXHR) { + if (jqXHR.status == 200) { + $(modalPopupContent).html($('#change-policy-success-content').html()); + showPopup(); + $("a#change-policy-success-link").click(function () { + hidePopup(); + location.reload(); + }); + } + }, + // on error + function (jqXHR) { + console.log(stringify(jqXHR.data)); + $(modalPopupContent).html($("#change-policy-error-content").html()); + showPopup(); + $("a#change-policy-error-link").click(function () { + hidePopup(); + }); + } + ); + }); + + $("a#change-policy-cancel-link").click(function () { + hidePopup(); + }); + }); + + // [2] logic for un-publishing a selected set of Active, Active/Updated policies + + $(".policy-unpublish-link").click(function () { + var policyList = getSelectedPolicies(); + var statusList = getSelectedPolicyStates(); + if (($.inArray("Inactive/Updated", statusList) > -1) || ($.inArray("Inactive", statusList) > -1)) { + // if policies found in Inactive or Inactive/Updated states with in the selection, + // pop-up an error saying + // "You cannot select already inactive policies. Please deselect inactive policies and try again." + $(modalPopupContent).html($("#errorPolicyUnPublishSelection").html()); + showPopup(); + } else { + var serviceURL = "/api/device-mgt/v1.0/policies/deactivate-policy"; + if (policyList.length == 0) { + $(modalPopupContent).html($("#errorPolicyUnPublish").html()); + } else { + $(modalPopupContent).html($("#unpublish-policy-modal-content").html()); + } + showPopup(); + + // on-click function for policy un-publishing "yes" button + $("a#unpublish-policy-yes-link").click(function () { + invokerUtil.put( + serviceURL, + policyList, + // on success + function (data, textStatus, jqXHR) { + if (jqXHR.status == 200 && data) { + $(modalPopupContent).html($("#unpublish-policy-success-content").html()); + $("a#unpublish-policy-success-link").click(function () { + hidePopup(); + location.reload(); + }); + } + }, + // on error + function (jqXHR) { + console.log(stringify(jqXHR.data)); + $(modalPopupContent).html($("#unpublish-policy-error-content").html()); + $("a#unpublish-policy-error-link").click(function () { + hidePopup(); + }); + } + ); + }); + + // on-click function for policy un-publishing "cancel" button + $("a#unpublish-policy-cancel-link").click(function () { + hidePopup(); + }); + } + }); + + // [3] logic for publishing a selected set of Inactive, Inactive/Updated policies + + $(".policy-publish-link").click(function () { + var policyList = getSelectedPolicies(); + var statusList = getSelectedPolicyStates(); + if (($.inArray("Active/Updated", statusList) > -1) || ($.inArray("Active", statusList) > -1)) { + // if policies found in Active or Active/Updated states with in the selection, + // pop-up an error saying + // "You cannot select already active policies. Please deselect active policies and try again." + $(modalPopupContent).html($("#active-policy-selection-error").html()); + showPopup(); + } else { + var serviceURL = "/api/device-mgt/v1.0/policies/activate-policy"; + if (policyList.length == 0) { + $(modalPopupContent).html($("#policy-publish-error").html()); + } else { + $(modalPopupContent).html($("#publish-policy-modal-content").html()); + } + showPopup(); + + // on-click function for policy removing "yes" button + $("a#publish-policy-yes-link").click(function () { + invokerUtil.put( + serviceURL, + policyList, + // on success + function (data, textStatus, jqXHR) { + if (jqXHR.status == 200 && data) { + $(modalPopupContent).html($("#publish-policy-success-content").html()); + $("a#publish-policy-success-link").click(function () { + hidePopup(); + location.reload(); + }); + } + }, + // on error + function (jqXHR) { + console.log(stringify(jqXHR.data)); + $(modalPopupContent).html($("#publish-policy-error-content").html()); + $("a#publish-policy-error-link").click(function () { + hidePopup(); + }); + } + ); + }); + + // on-click function for policy removing "cancel" button + $("a#publish-policy-cancel-link").click(function () { + hidePopup(); + }); + } + }); + + // [4] logic for removing a selected set of policies + + $(".policy-remove-link").click(function () { + var policyList = getSelectedPolicies(); + var statusList = getSelectedPolicyStates(); + if (($.inArray("Active/Updated", statusList) > -1) || ($.inArray("Active", statusList) > -1)) { + // if policies found in Active or Active/Updated states with in the selection, + // pop-up an error saying + // "You cannot remove already active policies. Please deselect active policies and try again." + $(modalPopupContent).html($("#active-policy-selection-error").html()); + showPopup(); + } else { + var serviceURL = "/api/device-mgt/v1.0/policies/remove-policy"; + if (policyList.length == 0) { + $(modalPopupContent).html($("#policy-remove-error").html()); + } else { + $(modalPopupContent).html($("#remove-policy-modal-content").html()); + } + showPopup(); + + // on-click function for policy removing "yes" button + $("a#remove-policy-yes-link").click(function () { + invokerUtil.post( + serviceURL, + policyList, + // on success + function (data, textStatus, jqXHR) { + if (jqXHR.status == 200 && data) { + $(modalPopupContent).html($("#remove-policy-success-content").html()); + $("a#remove-policy-success-link").click(function () { + hidePopup(); + location.reload(); + }); + } + }, + // on error + function (jqXHR) { + console.log(stringify(jqXHR.data)); + $(modalPopupContent).html($("#remove-policy-error-content").html()); + $("a#remove-policy-error-link").click(function () { + hidePopup(); + }); + } + ); + }); + + // on-click function for policy removing "cancel" button + $("a#remove-policy-cancel-link").click(function () { + hidePopup(); + }); + } + }); + + $("#loading-content").remove(); + if ($("#policy-listing-status-msg").text()) { + $("#policy-listing-status").removeClass("hidden"); + } + $("#policy-grid").removeClass("hidden"); + // $(".icon .text").res_text(0.2); +});