Merge pull request #641 from wso2/cloud-3.1.0

Cloud related fixes
revert-70aa11f8
Kamidu Sachith Punchihewa 8 years ago committed by GitHub
commit 14d517e89d

@ -70,7 +70,7 @@ $(document).ready(function () {
deviceListing = $("#device-listing"); deviceListing = $("#device-listing");
currentUser = deviceListing.data("current-user"); currentUser = deviceListing.data("current-user");
groupId = getParameterByName("groupId"); groupId = getParameterByName("groupId");
/* Adding selected class for selected devices */ /* Adding selected class for selected devices */
@ -80,11 +80,11 @@ $(document).ready(function () {
/* for device list sorting drop down */ /* for device list sorting drop down */
$(".ctrl-filter-type-switcher").popover({ $(".ctrl-filter-type-switcher").popover({
html: true, html: true,
content: function () { content: function () {
return $("#content-filter-types").html(); return $("#content-filter-types").html();
} }
}); });
}); });
/* /*
@ -247,7 +247,7 @@ function loadDevices(searchType, searchParam) {
class: 'remove-padding icon-only content-fill viewEnabledIcon', class: 'remove-padding icon-only content-fill viewEnabledIcon',
render: function (data, type, row, meta) { render: function (data, type, row, meta) {
return '<div class="thumbnail icon"><img class="square-element text fw " src="' return '<div class="thumbnail icon"><img class="square-element text fw " src="'
+ getDeviceTypeThumb(row.deviceType) + '"/></div>'; + getDeviceTypeThumb(row.deviceType) + '"/></div>';
} }
}, },
{ {
@ -325,47 +325,47 @@ function loadDevices(searchType, searchParam) {
if (analyticsEnabled(row.deviceType)) { if (analyticsEnabled(row.deviceType)) {
html += '<a href="' + context + '/device/' + deviceType + '/analytics?deviceId=' + html += '<a href="' + context + '/device/' + deviceType + '/analytics?deviceId=' +
deviceIdentifier + '&deviceName=' + row.name + '" ' + 'data-click-event="remove-form"' + deviceIdentifier + '&deviceName=' + row.name + '" ' + 'data-click-event="remove-form"' +
' class="btn padding-reduce-on-grid-view" data-placement="top" data-toggle="tooltip" data-original-title="Analytics"><span class="fw-stack">' + ' class="btn padding-reduce-on-grid-view" data-placement="top" data-toggle="tooltip" data-original-title="Analytics"><span class="fw-stack">' +
'<i class="fw fw-circle-outline fw-stack-2x"></i><i class="fw fw-statistics fw-stack-1x"></i></span>' + '<i class="fw fw-circle-outline fw-stack-2x"></i><i class="fw fw-statistics fw-stack-1x"></i></span>' +
'<span class="hidden-xs hidden-on-grid-view">Analytics</span>'; '<span class="hidden-xs hidden-on-grid-view">Analytics</span>';
} }
if (!groupId && groupingEnabled(row.deviceType)) { if (!groupId && groupingEnabled(row.deviceType)) {
html += html +=
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view group-device-link" ' '<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view group-device-link" '
+ +
'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
+ '" data-devicename="' + + '" data-devicename="' +
row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Group"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Group"><span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' +
'<i class="fw fw-group fw-stack-1x"></i></span>' + '<i class="fw fw-group fw-stack-1x"></i></span>' +
'<span class="hidden-xs hidden-on-grid-view">Group</span></a>'; '<span class="hidden-xs hidden-on-grid-view">Group</span></a>';
} }
// html += html +=
// '<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view edit-device-link" ' '<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view edit-device-link" '
// + 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType + 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
// + '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Edit">' + '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Edit">'
// + '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' + '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>'
// + '<i class="fw fw-edit fw-stack-1x"></i></span>' + '<i class="fw fw-edit fw-stack-1x"></i></span>'
// + '<span class="hidden-xs hidden-on-grid-view">Edit</span></a>'; + '<span class="hidden-xs hidden-on-grid-view">Edit</span></a>';
var groupOwner = $('#group_owner').text(); var groupOwner = $('#group_owner').text();
if (groupId && groupOwner != "wso2.system.user") { if (groupId && groupOwner != "wso2.system.user") {
html += html +=
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view remove-device-link" ' '<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view remove-device-link" '
+ 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType + 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
+ '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Remove from group">' + '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Remove from group">'
+ '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' + '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>'
+ '<i class="fw fw-delete fw-stack-1x"></i></span>' + '<i class="fw fw-delete fw-stack-1x"></i></span>'
+ '<span class="hidden-xs hidden-on-grid-view">Remove from group</span>'; + '<span class="hidden-xs hidden-on-grid-view">Remove from group</span>';
} else { } else {
html += html +=
'<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view remove-device-link" ' '<a href="#" data-click-event="remove-form" class="btn padding-reduce-on-grid-view remove-device-link" '
+ 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType + 'data-deviceid="' + deviceIdentifier + '" data-devicetype="' + deviceType
+ '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Delete">' + '" data-devicename="' + row.name + '" data-placement="top" data-toggle="tooltip" data-original-title="Delete">'
+ '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>' + '<span class="fw-stack"><i class="fw fw-circle-outline fw-stack-2x"></i>'
+ '<i class="fw fw-delete fw-stack-1x"></i></span>' + '<i class="fw fw-delete fw-stack-1x"></i></span>'
+ '<span class="hidden-xs hidden-on-grid-view">Delete</span>'; + '<span class="hidden-xs hidden-on-grid-view">Delete</span>';
} }
} }
return html; return html;
@ -417,7 +417,7 @@ function loadDevices(searchType, searchParam) {
}); });
}; };
function htmlspecialchars(text){ function htmlspecialchars(text) {
return jQuery('<div/>').text(text).html(); return jQuery('<div/>').text(text).html();
} }
@ -427,16 +427,16 @@ function loadDevices(searchType, searchParam) {
$(data.devices).each(function (index) { $(data.devices).each(function (index) {
objects.push( objects.push(
{ {
model: getPropertyValue(data.devices[index].properties, "DEVICE_MODEL"), model: getPropertyValue(data.devices[index].properties, "DEVICE_MODEL"),
vendor: getPropertyValue(data.devices[index].properties, "VENDOR"), vendor: getPropertyValue(data.devices[index].properties, "VENDOR"),
user: data.devices[index].enrolmentInfo.owner, user: data.devices[index].enrolmentInfo.owner,
status: data.devices[index].enrolmentInfo.status, status: data.devices[index].enrolmentInfo.status,
ownership: data.devices[index].enrolmentInfo.ownership, ownership: data.devices[index].enrolmentInfo.ownership,
deviceType: data.devices[index].type, deviceType: data.devices[index].type,
deviceIdentifier: data.devices[index].deviceIdentifier, deviceIdentifier: data.devices[index].deviceIdentifier,
name: data.devices[index].name name: data.devices[index].name
} }
); );
}); });
@ -449,28 +449,28 @@ function loadDevices(searchType, searchParam) {
}; };
$('#device-grid').datatables_extended_serverside_paging( $('#device-grid').datatables_extended_serverside_paging(
null, null,
serviceURL, serviceURL,
dataFilter, dataFilter,
columns, columns,
fnCreatedRow, fnCreatedRow,
function () { function () {
$(".icon .text").res_text(0.2); $(".icon .text").res_text(0.2);
$('#device-grid').removeClass('hidden'); $('#device-grid').removeClass('hidden');
$("#loading-content").remove(); $("#loading-content").remove();
attachDeviceEvents(); attachDeviceEvents();
if($('.advance-search').length < 1){ if ($('.advance-search').length < 1) {
$(this).closest('.dataTables_wrapper').find('div[id$=_filter] input') $(this).closest('.dataTables_wrapper').find('div[id$=_filter] input')
.after('<a href="'+context+'/devices/search"' + .after('<a href="' + context + '/devices/search"' +
' class="advance-search add-padding-3x">Advance Search</a>'); ' class="advance-search add-padding-3x">Advance Search</a>');
}
}, {
"placeholder": "Search By Device Name",
"searchKey": "name"
} }
}, {
"placeholder": "Search By Device Name",
"searchKey": "name"
}
); );
$(deviceCheckbox).click(function () { $(deviceCheckbox).click(function () {
@ -507,11 +507,11 @@ $(document).ready(function () {
/* for device list sorting drop down */ /* for device list sorting drop down */
$(".ctrl-filter-type-switcher").popover({ $(".ctrl-filter-type-switcher").popover({
html: true, html: true,
content: function () { content: function () {
return $("#content-filter-types").html(); return $("#content-filter-types").html();
} }
}); });
/* for data tables*/ /* for data tables*/
$('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="tooltip"]').tooltip();
@ -519,17 +519,17 @@ $(document).ready(function () {
$("[data-toggle=popover]").popover(); $("[data-toggle=popover]").popover();
$(".ctrl-filter-type-switcher").popover({ $(".ctrl-filter-type-switcher").popover({
html: true, html: true,
content: function () { content: function () {
return $('#content-filter-types').html(); return $('#content-filter-types').html();
} }
}); });
$('#nav').affix({ $('#nav').affix({
offset: { offset: {
top: $('header').height() top: $('header').height()
} }
}); });
}); });
@ -583,9 +583,9 @@ function markAlreadyAssignedGroups(deviceId, deviceType) {
}; };
invokerUtil.get("/api/device-mgt/v1.0/groups/device?deviceId=" + deviceId + "&deviceType=" + deviceType, invokerUtil.get("/api/device-mgt/v1.0/groups/device?deviceId=" + deviceId + "&deviceType=" + deviceType,
successCallback, function (message) { successCallback, function (message) {
displayErrors(message); displayErrors(message);
}); });
} }
/** /**
@ -604,7 +604,7 @@ function attachDeviceEvents() {
var deviceType = $(this).data("devicetype"); var deviceType = $(this).data("devicetype");
$(modalPopupContent).html($('#group-device-modal-content').html()); $(modalPopupContent).html($('#group-device-modal-content').html());
$('#user-groups').html( $('#user-groups').html(
'<div style="height:100px" data-state="loading" data-loading-text="Loading..." data-loading-style="icon-only" data-loading-inverse="true"></div>'); '<div style="height:100px" data-state="loading" data-loading-text="Loading..." data-loading-style="icon-only" data-loading-inverse="true"></div>');
$("a#group-device-update-link").hide(); $("a#group-device-update-link").hide();
showPopup(); showPopup();
@ -629,9 +629,9 @@ function attachDeviceEvents() {
} }
if (hasGroups) { if (hasGroups) {
html = '<br/><h4>Please select device group(s)</h4><br/>' + html = '<br/><h4>Please select device group(s)</h4><br/>' +
'<div class="wr-input-control">' + '<div class="wr-input-control">' +
'<select id="groups" class="form-control select2" multiple="multiple">' + '<select id="groups" class="form-control select2" multiple="multiple">' +
html + '</select></div>'; html + '</select></div>';
markAlreadyAssignedGroups(deviceId, deviceType); markAlreadyAssignedGroups(deviceId, deviceType);
$("a#group-device-update-link").show(); $("a#group-device-update-link").show();
$("a#group-add-link").hide(); $("a#group-add-link").hide();
@ -642,8 +642,8 @@ function attachDeviceEvents() {
} }
$('#user-groups').html(html); $('#user-groups').html(html);
$("select.select2[multiple=multiple]").select2({ $("select.select2[multiple=multiple]").select2({
tags: false tags: false
}); });
$("a#group-device-update-link").click(function () { $("a#group-device-update-link").click(function () {
var deviceIdentifier = {"id": deviceId, "type": deviceType}; var deviceIdentifier = {"id": deviceId, "type": deviceType};
var deviceGroupIds = $("#groups").val(); var deviceGroupIds = $("#groups").val();
@ -787,7 +787,7 @@ function attachDeviceEvents() {
$(modalPopupContent).html($('#group-device-modal-content').html()); $(modalPopupContent).html($('#group-device-modal-content').html());
$('#user-groups').html( $('#user-groups').html(
'<div style="height:100px" data-state="loading" data-loading-text="Loading..." data-loading-style="icon-only" data-loading-inverse="true"></div>'); '<div style="height:100px" data-state="loading" data-loading-text="Loading..." data-loading-style="icon-only" data-loading-inverse="true"></div>');
$("a#group-device-add-link").hide(); $("a#group-device-add-link").hide();
showPopup(); showPopup();
@ -806,13 +806,13 @@ function attachDeviceEvents() {
for (var i = 0; i < groups.deviceGroups.length; i++) { for (var i = 0; i < groups.deviceGroups.length; i++) {
if (groups.deviceGroups[i].owner != "wso2.system.user") { if (groups.deviceGroups[i].owner != "wso2.system.user") {
html += '<option value="' + groups.deviceGroups[i].id + '">' + html += '<option value="' + groups.deviceGroups[i].id + '">' +
groups.deviceGroups[i].name + '</option>'; groups.deviceGroups[i].name + '</option>';
hasGroups = true; hasGroups = true;
} }
} }
if (hasGroups) { if (hasGroups) {
html = '<br /><select id="assign-group-selector" style="color:#3f3f3f;padding:5px;width:250px;">' + html = '<br /><select id="assign-group-selector" style="color:#3f3f3f;padding:5px;width:250px;">' +
html + '</select>'; html + '</select>';
$("a#group-add-link").hide(); $("a#group-add-link").hide();
$("a#group-device-add-link").show(); $("a#group-device-add-link").show();
} else { } else {
@ -898,7 +898,7 @@ function displayDeviceErrors(jqXHR) {
function getParameterByName(name) { function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search); results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
} }
@ -911,10 +911,10 @@ function getSelectedDevices() {
thisTable.api().rows().every(function () { thisTable.api().rows().every(function () {
if ($(this.node()).hasClass('DTTT_selected')) { if ($(this.node()).hasClass('DTTT_selected')) {
deviceList.push( deviceList.push(
{ {
"id": $(thisTable.api().row(this).node()).data('deviceid'), "id": $(thisTable.api().row(this).node()).data('deviceid'),
"type": $(thisTable.api().row(this).node()).data('devicetype') "type": $(thisTable.api().row(this).node()).data('devicetype')
} }
); );
} }
}); });

@ -39,14 +39,15 @@
{{#zone "content"}} {{#zone "content"}}
{{#if canManage}} {{#if canManage}}
<!-- content/body --> <!-- content/body -->
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<!-- content --> <!-- content -->
<div id="role-create-form" class="container col-centered wr-content"> <div id="role-create-form" data-cloud={{isCloud}} class="container col-centered wr-content
">
<div class="wr-form"> <div class="wr-form">
<p class="page-sub-title">Add Role</p> <p class="page-sub-title">Add Role</p>
<hr /> <hr/>
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<div class="wr-steps"> <div class="wr-steps">
@ -62,10 +63,10 @@
<div class="wiz-lbl hidden-xs"><span>Assign permissions</span></div> <div class="wiz-lbl hidden-xs"><span>Assign permissions</span></div>
</div> </div>
</div> </div>
<br class="c-both" /> <br class="c-both"/>
</div> </div>
<br /><br /> <br/><br/>
<hr /> <hr/>
<div id="role-create-error-msg" class="alert alert-danger hidden" role="alert"> <div id="role-create-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span> <i class="icon fw fw-error"></i><span></span>
</div> </div>
@ -87,57 +88,65 @@
<label class="wr-input-label"> <label class="wr-input-label">
( {{roleNameHelpText}} ) ( {{roleNameHelpText}} )
</label> </label>
{{#if isCloud}}
<div id="roleNameField" class="form-group wr-input-control input-group">
<!--suppress HtmlFormInputWithoutLabel -->
<span class="input-group-addon" id="basic-addon1">devicemgt</span>
<input aria-describedby="basic-addon1" type="text" id="roleName"
data-regex="{{roleNameJSRegEx}}"
data-error-msg="{{roleNameRegExViolationErrorMsg}}" class="form-control"/>
{{else}}
<div id="roleNameField" class="form-group wr-input-control"> <div id="roleNameField" class="form-group wr-input-control">
<!--suppress HtmlFormInputWithoutLabel --> <!--suppress HtmlFormInputWithoutLabel -->
<input type="text" id="roleName" data-regex="{{roleNameJSRegEx}}" <input type="text" id="roleName" data-regex="{{roleNameJSRegEx}}"
data-error-msg="{{roleNameRegExViolationErrorMsg}}" class="form-control" /> data-error-msg="{{roleNameRegExViolationErrorMsg}}" class="form-control"/>
<span class="roleNameError hidden glyphicon glyphicon-remove form-control-feedback"></span> {{/if}}
<label class="error roleNameEmpty hidden" for="summary"> <span class="roleNameError hidden glyphicon glyphicon-remove form-control-feedback"></span>
Role name is required, should be in minimum 3 characters long and not include any <label class="error roleNameEmpty hidden" for="summary">
whitespaces or "@" character or "/" character. Role name is required, should be in minimum 3 characters long and not include any
</label> whitespaces or "@" character or "/" character.
</div>
{{#if canViewUsers}}
<label class="wr-input-label">
User list
</label> </label>
</div>
{{#if canViewUsers}}
<label class="wr-input-label">
User list
</label>
<div class="wr-input-control"> <div class="wr-input-control">
<!--suppress HtmlFormInputWithoutLabel --> <!--suppress HtmlFormInputWithoutLabel -->
<select id="users" class="form-control select2" multiple="multiple"></select> <select id="users" class="form-control select2" multiple="multiple"></select>
</div> </div>
{{/if}} {{/if}}
</div> </div>
</div>
<br>
<button id="add-role-btn" class="wr-btn">Add Role</button>
</div> </div>
<br>
<button id="add-role-btn" class="wr-btn">Add Role</button>
</div> </div>
</div> <div id="role-created-msg" class="container col-centered wr-content hidden">
<div id="role-created-msg" class="container col-centered wr-content hidden"> <div class="wr-form">
<div class="wr-form"> <p class="page-sub-title">Role was added successfully.</p>
<p class="page-sub-title">Role was added successfully.</p> <br>Please click <b>"Add Another Role"</b>, if you wish to add another role or click
<br>Please click <b>"Add Another Role"</b>, if you wish to add another role or click <b>"View Role List"</b> to complete the process and go back to the role list.
<b>"View Role List"</b> to complete the process and go back to the role list. <hr/>
<hr /> <button class="wr-btn" onclick="window.location.href='{{@app.context}}/roles'">
<button class="wr-btn" onclick="window.location.href='{{@app.context}}/roles'"> View Role List
View Role List </button>
</button> <!--suppress HtmlUnknownTarget -->
<!--suppress HtmlUnknownTarget --> <a href="{{@app.context}}/role/add" class="cu-btn-inner">
<a href="{{@app.context}}/role/add" class="cu-btn-inner">
<span class="fw-stack"> <span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i> <i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i> <i class="fw fw-add fw-stack-1x"></i>
</span> </span>
Add Another Role Add Another Role
</a> </a>
</div>
</div> </div>
<!-- /content -->
<div id="app-context" data-app-context="{{@app.context}}" class="hidden"></div>
</div> </div>
<!-- /content -->
<div id="app-context" data-app-context="{{@app.context}}" class="hidden"></div>
</div> </div>
</div> <!-- /content/body -->
<!-- /content/body -->
{{else}} {{else}}
<h1 class="page-sub-title"> <h1 class="page-sub-title">
Permission Denied Permission Denied

@ -18,7 +18,7 @@
/** /**
* Returns the dynamic state to be populated by add-user page. * Returns the dynamic state to be populated by add-user page.
* *
* @param context Object that gets updated with the dynamic state of this page to be presented * @param context Object that gets updated with the dynamic state of this page to be presented
* @returns {*} A displayData object that returns the dynamic state of this page to be presented * @returns {*} A displayData object that returns the dynamic state of this page to be presented
*/ */
@ -38,6 +38,7 @@ function onRequest(context) {
if (userModule.isAuthorized("/permission/admin/device-mgt/users/view")) { if (userModule.isAuthorized("/permission/admin/device-mgt/users/view")) {
displayData.canViewUsers = true; displayData.canViewUsers = true;
} }
displayData.isCloud = deviceMgtProps.isCloud;
return displayData; return displayData;
} }

@ -33,6 +33,8 @@ var clearInline = {};
var apiBasePath = "/api/device-mgt/v1.0"; var apiBasePath = "/api/device-mgt/v1.0";
var domain = $("#domain").val(); var domain = $("#domain").val();
var isCloud = $("#role-create-form").data("cloud");
var enableInlineError = function (inputField, errorMsg, errorSign) { var enableInlineError = function (inputField, errorMsg, errorSign) {
var fieldIdentifier = "#" + inputField; var fieldIdentifier = "#" + inputField;
@ -84,18 +86,18 @@ clearInline["role-name"] = function () {
validateInline["role-name"] = function () { validateInline["role-name"] = function () {
var roleNameInput = $("input#roleName"); var roleNameInput = $("input#roleName");
var roleName = roleNameInput.val(); var roleName = roleNameInput.val();
if (inputIsValid( roleNameInput.data("regex"), roleName) && roleName.indexOf("@") < 0 && roleName.indexOf("/") < 0) { if (inputIsValid(roleNameInput.data("regex"), roleName) && roleName.indexOf("@") < 0 && roleName.indexOf("/") < 0) {
disableInlineError("roleNameField", "roleNameEmpty", "roleNameError"); disableInlineError("roleNameField", "roleNameEmpty", "roleNameError");
} else { } else {
enableInlineError("roleNameField", "roleNameEmpty", "roleNameError"); enableInlineError("roleNameField", "roleNameEmpty", "roleNameError");
} }
}; };
function formatRepo (user) { function formatRepo(user) {
if (user.loading) { if (user.loading) {
return user.text return user.text
} }
if (!user.username){ if (!user.username) {
return; return;
} }
var markup = '<div class="clearfix">' + var markup = '<div class="clearfix">' +
@ -103,20 +105,22 @@ function formatRepo (user) {
'<div class="clearfix">' + '<div class="clearfix">' +
'<div class="col-sm-4">' + user.username + '</div>'; '<div class="col-sm-4">' + user.username + '</div>';
if (user.name || user.name != undefined) { if (user.name || user.name != undefined) {
markup += '<div class="col-sm-8"> ( ' + user.name + ' )</div>'; markup += '<div class="col-sm-8"> ( ' + user.name + ' )</div>';
} }
markup += '</div></div></div>'; markup += '</div></div></div>';
return markup; return markup;
} }
function formatRepoSelection (user) { function formatRepoSelection(user) {
return user.username || user.text; return user.username || user.text;
} }
$(document).ready(function () { $(document).ready(function () {
isCloud = $("#role-create-form").data("cloud");
var appContext = $("#app-context").data("app-context"); var appContext = $("#app-context").data("app-context");
$("#users").select2({ $("#users").select2({
multiple:true, multiple: true,
tags: false, tags: false,
ajax: { ajax: {
url: appContext + "/api/invoker/execute/", url: appContext + "/api/invoker/execute/",
@ -140,7 +144,7 @@ $(document).ready(function () {
var user = {}; var user = {};
user.id = value.username; user.id = value.username;
user.username = value.username; user.username = value.username;
if(value.firstname && value.lastname) { if (value.firstname && value.lastname) {
user.name = value.firstname + " " + value.lastname; user.name = value.firstname + " " + value.lastname;
} }
newData.push(user); newData.push(user);
@ -151,7 +155,9 @@ $(document).ready(function () {
}, },
cache: true cache: true
}, },
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work escapeMarkup: function (markup) {
return markup;
}, // let our custom formatter work
minimumInputLength: 1, minimumInputLength: 1,
templateResult: formatRepo, // omitted for brevity, see the source of this page templateResult: formatRepo, // omitted for brevity, see the source of this page
templateSelection: formatRepoSelection // omitted for brevity, see the source of this page templateSelection: formatRepoSelection // omitted for brevity, see the source of this page
@ -163,6 +169,7 @@ $(document).ready(function () {
* on Add Role page in WSO2 MDM Console. * on Add Role page in WSO2 MDM Console.
*/ */
$("button#add-role-btn").click(function () { $("button#add-role-btn").click(function () {
var domain = $("#domain").val(); var domain = $("#domain").val();
var roleNameInput = $("input#roleName"); var roleNameInput = $("input#roleName");
var roleName = roleNameInput.val(); var roleName = roleNameInput.val();
@ -185,8 +192,12 @@ $(document).ready(function () {
$(errorMsgWrapper).removeClass("hidden"); $(errorMsgWrapper).removeClass("hidden");
} else { } else {
var addRoleFormData = {}; var addRoleFormData = {};
addRoleFormData.roleName = roleName; if (isCloud) {
if (domain != "PRIMARY"){ addRoleFormData.roleName = "devicemgt" + roleName;
} else {
addRoleFormData.roleName = roleName;
}
if (domain != "PRIMARY") {
addRoleFormData.roleName = domain + "/" + roleName; addRoleFormData.roleName = domain + "/" + roleName;
} }
if (users == null) { if (users == null) {
@ -220,16 +231,16 @@ $(document).ready(function () {
}); });
var roleNameInputElement = "#roleName"; var roleNameInputElement = "#roleName";
$(roleNameInputElement).focus(function() { $(roleNameInputElement).focus(function () {
clearInline["role-name"](); clearInline["role-name"]();
}); });
$(roleNameInputElement).blur(function() { $(roleNameInputElement).blur(function () {
validateInline["role-name"](); validateInline["role-name"]();
}); });
/* When the user store domain value is changed, the users who are assigned to that role should be removed, as /* When the user store domain value is changed, the users who are assigned to that role should be removed, as
user and role can be mapped only if both are in same user store user and role can be mapped only if both are in same user store
*/ */
$("#domain").change(function () { $("#domain").change(function () {
$("#users").select2("val", ""); $("#users").select2("val", "");

@ -37,6 +37,7 @@ var modalPopupContainer = modalPopup + " .modal-content";
var modalPopupContent = modalPopup + " .modal-content"; var modalPopupContent = modalPopup + " .modal-content";
var body = "body"; var body = "body";
var isInit = true; var isInit = true;
var isCloud = false;
/** /**
@ -72,7 +73,7 @@ function showPopup() {
function hidePopup() { function hidePopup() {
$(modalPopupContent).html(''); $(modalPopupContent).html('');
$(modalPopup).modal('hide'); $(modalPopup).modal('hide');
$('body').removeClass('modal-open').css('padding-right','0px'); $('body').removeClass('modal-open').css('padding-right', '0px');
$('.modal-backdrop').remove(); $('.modal-backdrop').remove();
} }
@ -86,11 +87,12 @@ function InitiateViewOption() {
// $(location).attr('href', $(this).data("url")); // $(location).attr('href', $(this).data("url"));
} }
function htmlspecialchars(text){ function htmlspecialchars(text) {
return jQuery('<div/>').text(text).html(); return jQuery('<div/>').text(text).html();
} }
function loadRoles() { function loadRoles() {
isCloud = $("#role-table").data("cloud");
var loadingContent = $("#loading-content"); var loadingContent = $("#loading-content");
loadingContent.show(); loadingContent.show();
@ -98,21 +100,40 @@ function loadRoles() {
data = JSON.parse(data); data = JSON.parse(data);
var objects = []; var objects = [];
var count = 0;
$(data.roles).each(function (index) { $(data.roles).each(function (index) {
objects.push( if (isCloud && data.roles[index].startsWith("devicemgt")) {
{ count++;
name: htmlspecialchars(data.roles[index]), objects.push(
DT_RowId: "role-" + htmlspecialchars(data.roles[index]) {
} name: htmlspecialchars(data.roles[index]),
) DT_RowId: "role-" + htmlspecialchars(data.roles[index])
}
)
} else if (!isCloud) {
objects.push(
{
name: htmlspecialchars(data.roles[index]),
DT_RowId: "role-" + htmlspecialchars(data.roles[index])
}
)
}
}); });
var json = { var json = {};
"recordsTotal": data.count, if (isCloud) {
"recordsFiltered": data.count, json = {
"data": objects "recordsTotal": count,
}; "recordsFiltered": count,
"data": objects
};
} else {
json = {
"recordsTotal": data.count,
"recordsFiltered": data.count,
"data": objects
};
}
return JSON.stringify(json); return JSON.stringify(json);
}; };
@ -143,13 +164,13 @@ function loadRoles() {
data: null, data: null,
render: function (data, type, row, meta) { render: function (data, type, row, meta) {
var isCloud = false; var isCloud = false;
if ($('#is-cloud').length > 0){ if ($('#is-cloud').length > 0) {
isCloud = true; isCloud = true;
} }
var innerhtml = ''; var innerhtml = '';
var editLink = '<a onclick="javascript:loadRoleBasedActionURL(\'edit\', \'' + data.name + '\')" ' + var editLink = '<a onclick="javascript:loadRoleBasedActionURL(\'edit\', \'' + data.name + '\')" ' +
'data-role="' + data.name + '" ' + 'data-role="' + data.name + '" ' +
'data-click-event="edit-form" ' + 'data-click-event="edit-form" ' +
'class="btn padding-reduce-on-grid-view edit-role-link">' + 'class="btn padding-reduce-on-grid-view edit-role-link">' +
@ -179,7 +200,7 @@ function loadRoles() {
'<span class="hidden-xs hidden-on-grid-view">Edit Permission</span>' + '<span class="hidden-xs hidden-on-grid-view">Edit Permission</span>' +
'</a>'; '</a>';
var removeLink = '<a data-role="' + data.name + '" ' + var removeLink = '<a data-role="' + data.name + '" ' +
'data-click-event="remove-form" ' + 'data-click-event="remove-form" ' +
'class="btn padding-reduce-on-grid-view remove-role-link">' + 'class="btn padding-reduce-on-grid-view remove-role-link">' +
'<span class="fw-stack">' + '<span class="fw-stack">' +

@ -36,39 +36,40 @@
{{#zone "navbarActions"}} {{#zone "navbarActions"}}
{{#unless isCloud}} {{#unless isCloud}}
<li> <li>
<!--suppress HtmlUnknownTarget --> <!--suppress HtmlUnknownTarget -->
<a href="{{@app.context}}/role/add" class="cu-btn"> <a href="{{@app.context}}/role/add" class="cu-btn">
<span class="icon fw-stack"> <span class="icon fw-stack">
<i class="fw fw-add fw-stack-1x"></i> <i class="fw fw-add fw-stack-1x"></i>
<i class="fw fw-circle-outline fw-stack-2x"></i> <i class="fw fw-circle-outline fw-stack-2x"></i>
</span> </span>
Add Role Add Role
</a> </a>
</li> </li>
{{/unless}} {{/unless}}
{{/zone}} {{/zone}}
{{#zone "content"}} {{#zone "content"}}
<div id="loading-content" class="col-centered"> <div id="loading-content" class="col-centered">
{{#unless isCloud}} {{#unless isCloud}}
{{#if removePermitted}} {{#if removePermitted}}
<input type="hidden" id="can-remove" value="true" /> <input type="hidden" id="can-remove" value="true"/>
{{/if}} {{/if}}
{{#if editPermitted}} {{#if editPermitted}}
<input type="hidden" id="can-edit" value="true" /> <input type="hidden" id="can-edit" value="true"/>
{{/if}} {{/if}}
{{/unless}} {{/unless}}
{{#if isCloud}} {{#if isCloud}}
<input type="hidden" id="is-cloud" value="true" /> <input type="hidden" id="is-cloud" value="true"/>
{{/if}} {{/if}}
<i class="fw fw-settings fw-spin fw-2x"></i> <i class="fw fw-settings fw-spin fw-2x"></i>
Loading roles . . . Loading roles . . .
<br> <br>
</div> </div>
<div id="role-table" data-role={{adminRole}}> <div id="role-table" data-cloud={{isCloud}} data-role={{adminRole}}>
<table class="table table-striped table-hover list-table display responsive nowrap data-table grid-view" id="role-grid"> <table class="table table-striped table-hover list-table display responsive nowrap data-table grid-view"
id="role-grid">
<thead> <thead>
<tr class="sort-row"> <tr class="sort-row">
<th>By Role Name</th> <th>By Role Name</th>

@ -19,11 +19,11 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<!-- content --> <!-- content -->
<div id="role-create-form" class="container col-centered wr-content"> <div id="role-create-form" data-cloud={{isCloud}} class="container col-centered wr-content">
<div class="wr-form"> <div class="wr-form">
<p class="page-sub-title">Edit Role</p> <p class="page-sub-title">Edit Role</p>
<p>Please note that * sign represents required fields of data.</p> <p>Please note that * sign represents required fields of data.</p>
<hr /> <hr/>
<div class="row"> <div class="row">
<div class="col-lg-8"> <div class="col-lg-8">
<div id="role-create-error-msg" class="alert alert-danger hidden" role="alert"> <div id="role-create-error-msg" class="alert alert-danger hidden" role="alert">
@ -42,46 +42,58 @@
<label class="wr-input-label" id="roleNameValidationText"> <label class="wr-input-label" id="roleNameValidationText">
( {{roleNameHelpText}} ) ( {{roleNameHelpText}} )
</label> </label>
{{#if isCloud}}
<div id="roleNameField" class="form-group wr-input-control input-group">
<!--suppress HtmlFormInputWithoutLabel -->
<span class="input-group-addon" id="basic-addon1">devicemgt</span>
<input aria-describedby="basic-addon1" type="text" id="rolename"
data-regex="{{roleNameJSRegEx}}"
data-errormsg="{{roleNameRegExViolationErrorMsg}}" class="form-control"
data-currentrole="{{role.roleName}}"
value="{{role.roleName}}"/>
{{else}}
<div id="roleNameField" class="form-group wr-input-control"> <div id="roleNameField" class="form-group wr-input-control">
<input type="text" id="rolename" data-regex="{{roleNameJSRegEx}}" <input type="text" id="rolename" data-regex="{{roleNameJSRegEx}}"
data-errormsg="{{roleNameRegExViolationErrorMsg}}" class="form-control" data-errormsg="{{roleNameRegExViolationErrorMsg}}" class="form-control"
data-currentrole="{{role.roleName}}" data-currentrole="{{role.roleName}}"
value="{{role.roleName}}" /> value="{{role.roleName}}"/>
{{/if}}
<span class=" rolenameError hidden glyphicon glyphicon-remove form-control-feedback"></span> <span class=" rolenameError hidden glyphicon glyphicon-remove form-control-feedback"></span>
<label class="error rolenameEmpty hidden" for="summary">Role name is required & Should be in <label class="error rolenameEmpty hidden" for="summary">Role name is required & Should be in
minimum 3 characters long and do not minimum 3 characters long and do not
include any whitespaces. </label> include any whitespaces. </label>
</div> </div>
</div> </div>
</div>
<br>
<button id="add-role-btn" class="wr-btn">Update Role</button>
</div> </div>
<br>
<button id="add-role-btn" class="wr-btn">Update Role</button>
</div> </div>
</div> <div id="role-created-msg" class="container col-centered wr-content hidden">
<div id="role-created-msg" class="container col-centered wr-content hidden"> <div class="wr-form">
<div class="wr-form"> <p class="page-sub-title">Role was updated successfully.</p>
<p class="page-sub-title">Role was updated successfully.</p> <br>Please click <b>"View Updated Role"</b>, if you wish to view the updated role or click
<br>Please click <b>"View Updated Role"</b>, if you wish to view the updated role or click <b>"View Role List"</b> to complete the process and go back to the role list.
<b>"View Role List"</b> to complete the process and go back to the role list. <hr/>
<hr /> <button class="wr-btn" onclick="window.location.href='{{@app.context}}/roles'">
<button class="wr-btn" onclick="window.location.href='{{@app.context}}/roles'"> View Role List
View Role List </button>
</button> <a href="{{@app.context}}/roles/edit-role/{{role.roleName}}"
<a href="{{@app.context}}/roles/edit-role/{{role.roleName}}" class="cu-btn-inner">
class="cu-btn-inner">
<span class="fw-stack"> <span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i> <i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i> <i class="fw fw-add fw-stack-1x"></i>
</span> </span>
View Updated Role View Updated Role
</a> </a>
</div>
</div> </div>
<!-- /content -->
<div id="app-context" data-app-context="{{@app.context}}" class="hidden"></div>
</div> </div>
<!-- /content -->
<div id="app-context" data-app-context="{{@app.context}}" class="hidden"></div>
</div> </div>
</div> <!-- /content/body -->
<!-- /content/body --> {{#zone "bottomJs"}}
{{#zone "bottomJs"}} {{js "js/bottomJs.js"}}
{{js "js/bottomJs.js"}} {{/zone}}
{{/zone}}

@ -29,6 +29,7 @@ function onRequest(context) {
var roleName = request.getParameter("rolename"); var roleName = request.getParameter("rolename");
var response; var response;
var userStore; var userStore;
context.isCloud = deviceMgtProps.isCloud;
if (roleName) { if (roleName) {
if (roleName.indexOf("/") > -1) { if (roleName.indexOf("/") > -1) {

@ -83,18 +83,18 @@ clearInline["role-name"] = function () {
*/ */
validateInline["role-name"] = function () { validateInline["role-name"] = function () {
var rolenameinput = $("input#rolename"); var rolenameinput = $("input#rolename");
if (inputIsValid( rolenameinput.data("regex"), rolenameinput.val())) { if (inputIsValid(rolenameinput.data("regex"), rolenameinput.val())) {
disableInlineError("roleNameField", "rolenameEmpty", "rolenameError"); disableInlineError("roleNameField", "rolenameEmpty", "rolenameError");
} else { } else {
enableInlineError("roleNameField", "rolenameEmpty", "rolenameError"); enableInlineError("roleNameField", "rolenameEmpty", "rolenameError");
} }
}; };
function formatRepo (user) { function formatRepo(user) {
if (user.loading) { if (user.loading) {
return user.text return user.text
} }
if (!user.username){ if (!user.username) {
return; return;
} }
var markup = '<div class="clearfix">' + var markup = '<div class="clearfix">' +
@ -102,7 +102,7 @@ function formatRepo (user) {
'<div class="clearfix">' + '<div class="clearfix">' +
'<div class="col-sm-3">' + user.username + '</div>'; '<div class="col-sm-3">' + user.username + '</div>';
if (user.firstname) { if (user.firstname) {
markup += '<div class="col-sm-3"><i class="fa fa-code-fork"></i> ' + user.firstname + '</div>'; markup += '<div class="col-sm-3"><i class="fa fa-code-fork"></i> ' + user.firstname + '</div>';
} }
if (user.emailAddress) { if (user.emailAddress) {
markup += '<div class="col-sm-2"><i class="fa fa-star"></i> ' + user.emailAddress + '</div></div>'; markup += '<div class="col-sm-2"><i class="fa fa-star"></i> ' + user.emailAddress + '</div></div>';
@ -111,14 +111,14 @@ function formatRepo (user) {
return markup; return markup;
} }
function formatRepoSelection (user) { function formatRepoSelection(user) {
return user.username || user.text; return user.username || user.text;
} }
$(document).ready(function () { $(document).ready(function () {
var appContext = $("#app-context").data("app-context"); var appContext = $("#app-context").data("app-context");
$("#users").select2({ $("#users").select2({
multiple:true, multiple: true,
tags: false, tags: false,
ajax: { ajax: {
url: appContext + "/api/invoker/execute/", url: appContext + "/api/invoker/execute/",
@ -148,23 +148,29 @@ $(document).ready(function () {
}, },
cache: true cache: true
}, },
escapeMarkup: function (markup) { return markup; }, // let our custom formatter work escapeMarkup: function (markup) {
return markup;
}, // let our custom formatter work
minimumInputLength: 1, minimumInputLength: 1,
templateResult: formatRepo, // omitted for brevity, see the source of this page templateResult: formatRepo, // omitted for brevity, see the source of this page
templateSelection: formatRepoSelection // omitted for brevity, see the source of this page templateSelection: formatRepoSelection // omitted for brevity, see the source of this page
}); });
/** /**
* Following click function would execute * Following click function would execute
* when a user clicks on "Add Role" button * when a user clicks on "Add Role" button
* on Add Role page in WSO2 MDM Console. * on Add Role page in WSO2 MDM Console.
*/ */
$("button#add-role-btn").click(function() { $("button#add-role-btn").click(function () {
var isCloud = $("#role-create-form").data("cloud");
var rolenameInput = $("input#rolename"); var rolenameInput = $("input#rolename");
var roleName = rolenameInput.val(); var roleName = rolenameInput.val();
var currentRoleName = $("input#rolename").data("currentrole"); var currentRoleName = $("input#rolename").data("currentrole");
if (isCloud) {
currentRoleName = "devicemgt" + currentRoleName;
}
var domain = $("#domain").val(); var domain = $("#domain").val();
var errorMsgWrapper = "#role-create-error-msg"; var errorMsgWrapper = "#role-create-error-msg";
var errorMsg = "#role-create-error-msg span"; var errorMsg = "#role-create-error-msg span";
@ -182,12 +188,17 @@ $(document).ready(function () {
$(errorMsgWrapper).removeClass("hidden"); $(errorMsgWrapper).removeClass("hidden");
} else { } else {
var addRoleFormData = {}; var addRoleFormData = {};
addRoleFormData.roleName = roleName; if (isCloud) {
addRoleFormData.roleName = "devicemgt" + roleName;
} else {
addRoleFormData.roleName = roleName;
}
var addRoleAPI = apiBasePath + "/roles/" + encodeURIComponent(currentRoleName); var addRoleAPI = apiBasePath + "/roles/" + encodeURIComponent(currentRoleName);
if (domain != "PRIMARY"){ if (domain != "PRIMARY") {
addRoleFormData.roleName = domain + "/" + roleName; addRoleFormData.roleName = domain + "/" + roleName;
addRoleAPI = addRoleAPI + "?user-store=" + encodeURIComponent(domain); addRoleAPI = addRoleAPI + "?user-store=" + encodeURIComponent(domain);
} }
invokerUtil.put( invokerUtil.put(
addRoleAPI, addRoleAPI,
addRoleFormData, addRoleFormData,
@ -201,6 +212,7 @@ $(document).ready(function () {
$("#role-created-msg").removeClass("hidden"); $("#role-created-msg").removeClass("hidden");
} }
}, function (data) { }, function (data) {
var payload = JSON.parse(data.responseText); var payload = JSON.parse(data.responseText);
$(errorMsg).text(payload.message); $(errorMsg).text(payload.message);
$(errorMsgWrapper).removeClass("hidden"); $(errorMsgWrapper).removeClass("hidden");
@ -209,11 +221,11 @@ $(document).ready(function () {
} }
}); });
$("#rolename").focus(function() { $("#rolename").focus(function () {
clearInline["role-name"](); clearInline["role-name"]();
}); });
$("#rolename").blur(function() { $("#rolename").blur(function () {
validateInline["role-name"](); validateInline["role-name"]();
}); });

@ -18,11 +18,11 @@
$(document).ready(function () { $(document).ready(function () {
$('#cloud-menu-popover i.fw-tiles').popover({ $('#cloud-menu-popover i.fw-tiles').popover({
html: true, html: true,
trigger:'click', trigger: 'click',
title: function() { title: function () {
return $("#popover-head").html(); return $("#popover-head").html();
}, },
content: function() { content: function () {
return $("#popover-content").html(); return $("#popover-content").html();
} }
}); });

@ -22,7 +22,7 @@
{{#if this.dropDownVisible}} {{#if this.dropDownVisible}}
class="dropdown" data-toggle="dropdown" class="dropdown" data-toggle="dropdown"
{{/if}} {{/if}}
title = " title="
{{#if this.isDomain }} {{#if this.isDomain }}
{{@user.domain}} {{@user.domain}}
{{else}} {{else}}

Loading…
Cancel
Save