resolving conflicts

revert-dabc3590
thusithakalugamage 8 years ago
commit 0cbf647854

@ -21,7 +21,6 @@ package org.wso2.carbon.mdm.services.android.services;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.wso2.carbon.apimgt.annotations.api.API; import org.wso2.carbon.apimgt.annotations.api.API;
import org.wso2.carbon.apimgt.annotations.api.Permission; import org.wso2.carbon.apimgt.annotations.api.Permission;
import org.wso2.carbon.apimgt.annotations.api.Scope;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.mdm.services.android.bean.wrapper.AndroidApplication; import org.wso2.carbon.mdm.services.android.bean.wrapper.AndroidApplication;
import org.wso2.carbon.mdm.services.android.bean.wrapper.AndroidDevice; import org.wso2.carbon.mdm.services.android.bean.wrapper.AndroidDevice;
@ -330,7 +329,7 @@ public interface DeviceManagementService {
message = "Internal Server Error. \n " + message = "Internal Server Error. \n " +
"Server error occurred while dis-enrolling the device.") "Server error occurred while dis-enrolling the device.")
}) })
@Permission(name = "Enroll Device", permission = "/device-mgt/devices/enroll/android") @Permission(name = "Disenroll Device", permission = "/device-mgt/devices/disenroll/android")
Response disEnrollDevice( Response disEnrollDevice(
@ApiParam( @ApiParam(
name = "id", name = "id",

@ -179,8 +179,8 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
notification.setOperationId(operation.getId()); notification.setOperationId(operation.getId());
notification.setStatus(org.wso2.carbon.device.mgt.common.notification.mgt.Notification. notification.setStatus(org.wso2.carbon.device.mgt.common.notification.mgt.Notification.
Status.NEW.toString()); Status.NEW.toString());
notification.setDescription("Operation " + operation.getCode() + " failed to execute on device " + notification.setDescription(operation.getCode() + " operation did fail to execute on device " +
deviceName + " with identifier : " + deviceId); deviceName + " with identifier " + deviceId);
AndroidAPIUtils.getNotificationManagementService().addNotification(id, notification); AndroidAPIUtils.getNotificationManagementService().addNotification(id, notification);
} }
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {

@ -124,6 +124,15 @@
<method>POST</method> <method>POST</method>
</Permission> </Permission>
<Permission>
<name>GET Events</name>
<path>/device-mgt/admin/events/get</path>
<url>/events</url>
<method>GET</method>
</Permission>
<!-- End of event related permissions --> <!-- End of event related permissions -->
<!-- Operations related permissions --> <!-- Operations related permissions -->
@ -156,6 +165,13 @@
<method>POST</method> <method>POST</method>
</Permission> </Permission>
<Permission>
<name>Logcat</name>
<path>/device-mgt/admin/device/android/operation/logcat</path>
<url>/admin/devices/logcat</url>
<method>POST</method>
</Permission>
<Permission> <Permission>
<name>Configure VPN</name> <name>Configure VPN</name>
<path>/device-mgt/admin/device/android/operation/configure-vpn</path> <path>/device-mgt/admin/device/android/operation/configure-vpn</path>

@ -15,6 +15,7 @@
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
}} }}
{{unit "cdmf.unit.ui.title" pageTitle="Device Management"}} {{unit "cdmf.unit.ui.title" pageTitle="Device Management"}}
{{unit "cdmf.unit.data-tables-extended"}} {{unit "cdmf.unit.data-tables-extended"}}
@ -37,33 +38,23 @@
{{#zone "navbarActions"}} {{#zone "navbarActions"}}
{{#if permissions.ENROLL_DEVICE}} {{#if permissions.ENROLL_DEVICE}}
<li id = "enroll-btn"> <li id="enroll-btn" class="hidden">
<a href="javascript:toggleEnrollment()"> <a href="javascript:toggleEnrollment()">
<span class="fw-stack"> <span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i> <i class="fw fw-ring fw-stroke fw-stack-2x"></i>
<i class="fw fw-mobile fw-stack-1x"></i>
<span class="fw-stack fw-move-right fw-move-top">
<i class="fw fw-circle fw-stack-2x fw-stroke fw-inverse"></i>
<i class="fw fw-circle fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i> <i class="fw fw-add fw-stack-1x"></i>
</span> </span>
</span> &nbsp;&nbsp;Add New Device
&nbsp;&nbsp;Enroll Device
</a> </a>
</li> </li>
{{/if}} {{/if}}
{{#if permissions.ADVANCED_SEARCH}} {{#if permissions.ADVANCED_SEARCH}}
<li id = "advanced-search-btn"> <li id="advanced-search-btn" class="hidden">
<a href="{{appContext}}devices/search"> <a href="{{appContext}}devices/search">
<span class="fw-stack"> <span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i> <i class="fw fw-ring fw-stroke fw-stack-2x"></i>
<i class="fw fw-mobile fw-stack-1x"></i>
<span class="fw-stack fw-move-right fw-move-top">
<i class="fw fw-circle fw-stack-2x fw-stroke fw-inverse"></i>
<i class="fw fw-circle fw-stack-2x"></i>
<i class="fw fw-search fw-stack-1x"></i> <i class="fw fw-search fw-stack-1x"></i>
</span> </span>
</span>
&nbsp;&nbsp;Advanced Search &nbsp;&nbsp;Advanced Search
</a> </a>
</li> </li>
@ -72,9 +63,26 @@
{{#zone "content"}} {{#zone "content"}}
{{#if permissions.VIEW_DEVICES}} {{#if permissions.VIEW_DEVICES}}
<div id="no-device-view" class="ast-container list-view hidden">
<div class="ctrl-info-panel col-centered text-center wr-login">
<h3 class="text-muted">
<i class="fw fw-mobile fw-3x"></i>
</h3>
<h3 class="text-muted">You do not have any enrolled device at the moment</h3>
<h3>
<a href="javascript:toggleEnrollment()" class="btn-operations btn-default">
<span class="fw-stack">
<i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i>
</span>
&nbsp;&nbsp;Add New Device
</a>
</h3>
</div>
</div>
<div id="device-table" class="hidden"> <div id="device-table" class="hidden">
<table class="table table-striped table-hover list-table display responsive nowrap data-table grid-view" <table id="device-grid"
id="device-grid"> class="table table-striped table-hover list-table display responsive nowrap data-table grid-view">
<thead> <thead>
<tr class="sort-row"> <tr class="sort-row">
<th class="no-sort"></th> <th class="no-sort"></th>
@ -120,16 +128,6 @@
<a href="#">By Ownership</a> <a href="#">By Ownership</a>
</div> </div>
</div> </div>
<div id="no-device-view" class="ast-container list-view hidden">
<div class="ctrl-info-panel col-centered text-center wr-login">
<h3 class="text-muted">You do not have any enrolled device at the moment</h3>
<h3 class="text-center">
<a href="javascript:toggleEnrollment()" class="btn btn-primary">
Add New Device
</a>
</h3>
</div>
</div>
{{else}} {{else}}
<h1 class="page-sub-title"> <h1 class="page-sub-title">
Permission Denied Permission Denied

@ -76,17 +76,72 @@ function loadDevices() {
return {}; return {};
} }
var fnCreatedRow = function (nRow, aData, dataIndex) { var dataFilter = function (data) {
$(nRow).attr('data-type', 'selectable'); var noDeviceView = "#no-device-view";
$(nRow).attr('data-deviceid', aData.deviceIdentifier);
$(nRow).attr('data-devicetype', aData.deviceType); data = JSON.parse(data);
var json;
if (data["count"] == 0) {
if ($(noDeviceView).length) {
$(noDeviceView).removeClass('hidden');
}
$(".bulk-action-row").addClass('hidden');
json = {
"recordsTotal": 0,
"recordsFiltered": 0,
"data": []
}; };
return JSON.stringify(json);
} else if (data["count"] > 0) {
$(noDeviceView).remove();
$("#enroll-btn").removeClass('hidden');
$("#advanced-search-btn").removeClass('hidden');
$(".bulk-action-row").removeClass('hidden');
$("#device-table").removeClass('hidden');
var objects = [];
$(data.devices).each(function (index) {
objects.push(
{
model: getPropertyValue(data.devices[index].properties, "DEVICE_MODEL"),
vendor: getPropertyValue(data.devices[index].properties, "VENDOR"),
user: data.devices[index].enrolmentInfo.owner,
status: data.devices[index].enrolmentInfo.status,
ownership: data.devices[index].enrolmentInfo.ownership,
deviceType: data.devices[index].type,
deviceIdentifier: data.devices[index].deviceIdentifier,
name : data.devices[index].name
}
);
});
json = {
"recordsTotal": data["count"],
"recordsFiltered": data["count"],
"data": objects
};
return JSON.stringify(json);
}
};
// possible params - nRow, aData, dataIndex
var fnCreatedRow = function (nRow, aData) {
$(nRow).attr('data-type', 'selectable');
$(nRow).attr('data-devicetype', aData["deviceType"]);
$(nRow).attr('data-deviceid', aData["deviceIdentifier"]);
};
var columns = [ var columns = [
{ {
class : 'remove-padding icon-only content-fill viewEnabledIcon', class : 'remove-padding icon-only content-fill viewEnabledIcon',
data : 'icon', data : null,
render: function (data, type, row) { render: function (data, type, row) {
var deviceType = row.deviceType; var deviceType = row.deviceType;
var deviceIdentifier = row.deviceIdentifier; var deviceIdentifier = row.deviceIdentifier;
@ -156,35 +211,6 @@ function loadDevices() {
} }
]; ];
var dataFilter = function (data) {
data = JSON.parse(data);
var objects = [];
$(data.devices).each(function (index) {
objects.push(
{
model: getPropertyValue(data.devices[index].properties, "DEVICE_MODEL"),
vendor: getPropertyValue(data.devices[index].properties, "VENDOR"),
user: data.devices[index].enrolmentInfo.owner,
status: data.devices[index].enrolmentInfo.status,
ownership: data.devices[index].enrolmentInfo.ownership,
deviceType: data.devices[index].type,
deviceIdentifier: data.devices[index].deviceIdentifier,
name : data.devices[index].name
}
);
});
var json = {
"recordsTotal": data.count,
"recordsFiltered": data.count,
"data": objects
};
return JSON.stringify(json);
};
$('#device-grid').datatables_extended_serverside_paging( $('#device-grid').datatables_extended_serverside_paging(
null, null,
"/api/device-mgt/v1.0/devices", "/api/device-mgt/v1.0/devices",
@ -220,29 +246,30 @@ function loadDevices() {
//} //}
function initPage() { function initPage() {
var currentUser = $("#device-listing").data("currentUser"); // var currentUser = $("#device-listing").data("currentUser");
var serviceURL = "/api/device-mgt/v1.0/devices"; // var serviceURL = "/api/device-mgt/v1.0/devices";
//
invokerUtil.get( // invokerUtil.get(
serviceURL, // serviceURL,
function (data) { // function (data) {
if (data) { // if (data) {
data = JSON.parse(data); // data = JSON.parse(data);
if (data["count"] > 0) { // if (data["count"] > 0) {
$(".bulk-action-row").removeClass('hidden'); // $(".bulk-action-row").removeClass('hidden');
$("#device-table").removeClass('hidden'); // $("#device-table").removeClass('hidden');
// loadDevices();
// } else {
// $("#enroll-btn").addClass('hidden');
// $("#advanced-search-btn").addClass('hidden');
// $("#device-table").addClass('hidden');
// $("#no-device-view").removeClass('hidden');
// }
// }
// }, function () {
// initPage();
// }
// );
loadDevices(); loadDevices();
} else {
$("#enroll-btn").addClass('hidden');
$("#advanced-search-btn").addClass('hidden');
$("#device-table").addClass('hidden');
$("#no-device-view").removeClass('hidden');
}
}
}, function () {
initPage();
}
);
} }
/* /*

@ -49,7 +49,9 @@ var androidOperationConstants = {
"VPN_OPERATION": "vpn", "VPN_OPERATION": "vpn",
"VPN_OPERATION_CODE": "VPN", "VPN_OPERATION_CODE": "VPN",
"APPLICATION_OPERATION":"app-restriction", "APPLICATION_OPERATION":"app-restriction",
"APPLICATION_OPERATION_CODE":"APP-RESTRICTION" "APPLICATION_OPERATION_CODE":"APP-RESTRICTION",
"KIOSK_APPS_CODE":"KIOSK_APPS",
"KIOSK_APPS":"cosu-whitelisted-applications"
}; };
// Constants to define iOS Operation Constants // Constants to define iOS Operation Constants
@ -520,6 +522,93 @@ validateStep["policy-profile"] = function () {
validationStatusArray.push(validationStatus); validationStatusArray.push(validationStatus);
} }
if ($.inArray(androidOperationConstants["KIOSK_APPS_CODE"], configuredOperations) != -1) {
//If COSU whitelisting applications configured
operation = androidOperationConstants["KIOSK_APPS"];
// Initializing continueToCheckNextInputs to true
continueToCheckNextInputs = true;
var whitelistedApplicationsGridChildInputs = "div#cosu-whitelisted-applications .child-input";
if (continueToCheckNextInputs) {
if ($(whitelistedApplicationsGridChildInputs).length == 0) {
validationStatus = {
"error": true,
"subErrorMsg": "Applications are not provided in application whitelist list.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
}
else {
childInputCount = 0;
childInputArray = [];
emptyChildInputCount = 0;
duplicatesExist = false;
// Looping through each child input
$(whitelistedApplicationsGridChildInputs).each(function () {
childInputCount++;
if (childInputCount % 2 == 0) {
// If child input is of second column
childInput = $(this).val();
childInputArray.push(childInput);
// Updating emptyChildInputCount
if (!childInput) {
// If child input field is empty
emptyChildInputCount++;
}
}
});
// Checking for duplicates
initialChildInputArrayLength = childInputArray.length;
if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) {
for (m = 0; m < (initialChildInputArrayLength - 1); m++) {
poppedChildInput = childInputArray.pop();
for (n = 0; n < childInputArray.length; n++) {
if (poppedChildInput == childInputArray[n]) {
duplicatesExist = true;
break;
}
}
if (duplicatesExist) {
break;
}
}
}
// Updating validationStatus
if (emptyChildInputCount > 0) {
// If empty child inputs are present
validationStatus = {
"error": true,
"subErrorMsg": "One or more package names of " +
"applications are empty.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
} else if (duplicatesExist) {
// If duplicate input is present
validationStatus = {
"error": true,
"subErrorMsg": "Duplicate values exist with " +
"for package names.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
}
}
}
if (continueToCheckNextInputs) {
validationStatus = {
"error": false,
"okFeature": operation
};
}
// Updating validationStatusArray with validationStatus
validationStatusArray.push(validationStatus);
}
} }
}if (policy["platform"] == platformTypeConstants["WINDOWS"]) { }if (policy["platform"] == platformTypeConstants["WINDOWS"]) {
if (configuredOperations.length == 0) { if (configuredOperations.length == 0) {

@ -77,14 +77,14 @@
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span> <span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span> <span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a> </a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelist-applications', this)"> <a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)">
<span class="wr-hidden-operations-icon fw-stack"> <span class="wr-hidden-operations-icon fw-stack">
<i class="fw fw-register fw-stack-2x"></i> <i class="fw fw-register fw-stack-2x"></i>
</span> </span>
Whitelist Apps (COSU) Whitelist Apps (COSU)
<span id="cosu-whitelist-applications-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span> <span id="cosu-whitelisted-applications-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-whitelist-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span> <span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-whitelist-applications-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span> <span id="cosu-whitelisted-applications-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a> </a>
</div> </div>
@ -1329,14 +1329,14 @@
</div> </div>
<!-- cosu-whitelist-applications --> <!-- cosu-whitelist-applications -->
<div class="wr-hidden-operation" data-operation="cosu-whitelist-applications"> <div class="wr-hidden-operation" data-operation="cosu-whitelisted-applications">
<div class="panel panel-default operation-data" data-operation="cosu-whitelist-applications" <div class="panel panel-default operation-data" data-operation="cosu-whitelisted-applications"
data-operation-code="KIOSK_APPS"> data-operation-code="KIOSK_APPS">
<div id="cosu-whitelist-applications-heading" class="panel-heading" role="tab"> <div id="cosu-whitelisted-applications-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title"> <h2 class="sub-title panel-title">
Whitelist Applications (COSU) Whitelist Applications (COSU)
<label id="cosu-whitelist-applications-lbl" class="wr-input-control switch" data-toggle="collapse" <label id="cosu-whitelisted-applications-lbl" class="wr-input-control switch" data-toggle="collapse"
data-target="#cosu-whitelist-applications-body"> data-target="#cosu-whitelisted-applications-body">
<input type="checkbox"/> <input type="checkbox"/>
<span class="helper"></span> <span class="helper"></span>
<span class="text"></span> <span class="text"></span>
@ -1350,10 +1350,10 @@
</div> </div>
</div> </div>
<div id="cosu-whitelist-applications-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="cosu-whitelisted-applications-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="cosu-whitelist-applications-body"> aria-labelledby="cosu-whitelisted-applications-body">
<hr/> <hr/>
<div id="cosu-whitelist-applications-feature-error-msg" class="alert alert-danger hidden" role="alert"> <div id="cosu-whitelisted-applications-feature-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>

@ -114,7 +114,9 @@ var androidOperationConstants = {
"WIFI_OPERATION": "wifi", "WIFI_OPERATION": "wifi",
"WIFI_OPERATION_CODE": "WIFI", "WIFI_OPERATION_CODE": "WIFI",
"APPLICATION_OPERATION":"app-restriction", "APPLICATION_OPERATION":"app-restriction",
"APPLICATION_OPERATION_CODE":"APP-RESTRICTION" "APPLICATION_OPERATION_CODE":"APP-RESTRICTION",
"KIOSK_APPS_CODE":"KIOSK_APPS",
"KIOSK_APPS":"cosu-whitelisted-applications"
}; };
// Constants to define Android Operation Constants // Constants to define Android Operation Constants
@ -491,6 +493,93 @@ validateStep["policy-profile"] = function () {
validationStatusArray.push(validationStatus); validationStatusArray.push(validationStatus);
}
if ($.inArray(androidOperationConstants["KIOSK_APPS_CODE"], configuredOperations) != -1) {
//If COSU whitelisting applications configured
operation = androidOperationConstants["KIOSK_APPS"];
// Initializing continueToCheckNextInputs to true
continueToCheckNextInputs = true;
var whitelistedApplicationsGridChildInputs = "div#cosu-whitelisted-applications .child-input";
if (continueToCheckNextInputs) {
if ($(whitelistedApplicationsGridChildInputs).length == 0) {
validationStatus = {
"error": true,
"subErrorMsg": "Applications are not provided in application whitelist list.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
}
else {
childInputCount = 0;
childInputArray = [];
emptyChildInputCount = 0;
duplicatesExist = false;
// Looping through each child input
$(whitelistedApplicationsGridChildInputs).each(function () {
childInputCount++;
if (childInputCount % 2 == 0) {
// If child input is of second column
childInput = $(this).val();
childInputArray.push(childInput);
// Updating emptyChildInputCount
if (!childInput) {
// If child input field is empty
emptyChildInputCount++;
}
}
});
// Checking for duplicates
initialChildInputArrayLength = childInputArray.length;
if (emptyChildInputCount == 0 && initialChildInputArrayLength > 1) {
for (m = 0; m < (initialChildInputArrayLength - 1); m++) {
poppedChildInput = childInputArray.pop();
for (n = 0; n < childInputArray.length; n++) {
if (poppedChildInput == childInputArray[n]) {
duplicatesExist = true;
break;
}
}
if (duplicatesExist) {
break;
}
}
}
// Updating validationStatus
if (emptyChildInputCount > 0) {
// If empty child inputs are present
validationStatus = {
"error": true,
"subErrorMsg": "One or more package names of " +
"applications are empty.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
} else if (duplicatesExist) {
// If duplicate input is present
validationStatus = {
"error": true,
"subErrorMsg": "Duplicate values exist with " +
"for package names.",
"erroneousFeature": operation
};
continueToCheckNextInputs = false;
}
}
}
if (continueToCheckNextInputs) {
validationStatus = {
"error": false,
"okFeature": operation
};
}
// Updating validationStatusArray with validationStatus
validationStatusArray.push(validationStatus);
} }
} }
} if (policy["platform"] == platformTypeConstants["WINDOWS"]) { } if (policy["platform"] == platformTypeConstants["WINDOWS"]) {

@ -57,17 +57,6 @@
<span id="work-profile-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span> <span id="work-profile-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="work-profile-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span> <span id="work-profile-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a> </a>
<!--COSU-->
<a href="javascript:void(0)" onclick="showAdvanceOperation('android-for-work-cosu', this)">
<span class="wr-hidden-operation-icon fw-stack">
<i class="fw fw-service fw-stack-2x"></i>
</span>
&nbsp;&nbsp;COSU Configuration
<span id="android-for-work-cosu-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="android-for-work-cosu-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="android-for-work-cosu-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<!--/COSU-->
<a href="javascript:void(0)" onclick="showAdvanceOperation('app-restriction', this)"> <a href="javascript:void(0)" onclick="showAdvanceOperation('app-restriction', this)">
<span class="fw-stack fw-lg"> <span class="fw-stack fw-lg">
<i class="fw fw-application fw-stack-1x"></i> <i class="fw fw-application fw-stack-1x"></i>
@ -106,14 +95,14 @@
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span> <span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span> <span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a> </a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelist-applications', this)"> <a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)">
<span class="wr-hidden-operations-icon fw-stack"> <span class="wr-hidden-operations-icon fw-stack">
<i class="fw fw-register fw-stack-2x"></i> <i class="fw fw-register fw-stack-2x"></i>
</span> </span>
Whitelist Apps (COSU) Whitelist Apps (COSU)
<span id="cosu-whitelist-applications-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span> <span id="cosu-whitelisted-applications-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-whitelist-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span> <span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-whitelist-applications-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span> <span id="cosu-whitelisted-applications-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a> </a>
</div> </div>
@ -1469,14 +1458,14 @@
</div> </div>
<!-- cosu-whitelist-applications --> <!-- cosu-whitelist-applications -->
<div class="wr-hidden-operation" data-operation="cosu-whitelist-applications"> <div class="wr-hidden-operation" data-operation="cosu-whitelisted-applications">
<div class="panel panel-default operation-data" data-operation="cosu-whitelist-applications" <div class="panel panel-default operation-data" data-operation="cosu-whitelisted-applications"
data-operation-code="KIOSK_APPS"> data-operation-code="KIOSK_APPS">
<div id="cosu-whitelist-applications-heading" class="panel-heading" role="tab"> <div id="cosu-whitelisted-applications-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title"> <h2 class="sub-title panel-title">
Whitelist Applications (COSU) Whitelist Applications (COSU)
<label id="cosu-whitelist-applications-lbl" class="wr-input-control switch" data-toggle="collapse" <label id="cosu-whitelisted-applications-lbl" class="wr-input-control switch" data-toggle="collapse"
data-target="#cosu-whitelist-applications-body"> data-target="#cosu-whitelisted-applications-body">
<input type="checkbox"/> <input type="checkbox"/>
<span class="helper"></span> <span class="helper"></span>
<span class="text"></span> <span class="text"></span>
@ -1491,10 +1480,10 @@
</h2> </h2>
</div> </div>
<div id="cosu-whitelist-applications-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="cosu-whitelisted-applications-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="cosu-whitelist-applications-body"> aria-labelledby="cosu-whitelisted-applications-body">
<div id="cosu-whitelist-applications-feature-error-msg" class="alert alert-danger hidden" role="alert"> <div id="cosu-whitelisted-applications-feature-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>

@ -1951,6 +1951,24 @@ var slideDownPaneAgainstValueSet = function (selectElement, paneID, valueSet) {
); );
} }
}; };
var slideDownPaneAgainstValueSetForRadioButtons = function (selectElement, paneID, valueSet) {
var selectedValueOnChange = selectElement.value;
var i, slideDownVotes = 0;
for (i = 0; i < valueSet.length; i++) {
if (selectedValueOnChange == valueSet[i]) {
slideDownVotes++;
}
}
var paneSelector = "#" + paneID;
if(slideDownVotes > 0) {
$(paneSelector).removeClass("hidden");
} else {
$(paneSelector).addClass("hidden");
}
};
// End of HTML embedded invoke methods // End of HTML embedded invoke methods

@ -5,8 +5,7 @@
<i class="fw fw-key fw-stack-2x"></i> <i class="fw fw-key fw-stack-2x"></i>
</span> </span>
Passcode Policy Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i <span id="passcode-policy-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span> <span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span> <span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a> </a>
@ -24,11 +23,9 @@
<i class="fw fw-security fw-stack-2x"></i> <i class="fw fw-security fw-stack-2x"></i>
</span> </span>
Encryption Settings Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i <span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span> <span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i <span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i class="fw fw-error"></i></span>
class="fw fw-error"></i></span>
</a> </a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('wifi', this)"> <a href="javascript:void(0)" onclick="showAdvanceOperation('wifi', this)">
<span class="wr-hidden-operations-icon fw-stack"> <span class="wr-hidden-operations-icon fw-stack">
@ -63,8 +60,7 @@
<i class="fw fw-block fw-stack-2x"></i> <i class="fw fw-block fw-stack-2x"></i>
</span> </span>
Applications Restrictions Applications Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i <span id="app-restriction-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span> <span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span> <span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a> </a>
@ -73,10 +69,8 @@
<i class="fw fw-import fw-stack-2x"></i> <i class="fw fw-import fw-stack-2x"></i>
</span> </span>
&nbsp;&nbsp;System Update Policy (COSU) &nbsp;&nbsp;System Update Policy (COSU)
<span id="cosu-system-update-policy-configured" class="has-configured status-icon hidden"><i <span id="cosu-system-update-policy-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-ok"></i></span> <span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span> <span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a> </a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelist-applications', this)"> <a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelist-applications', this)">
@ -84,25 +78,20 @@
<i class="fw fw-register fw-stack-2x"></i> <i class="fw fw-register fw-stack-2x"></i>
</span> </span>
Whitelist Apps (COSU) Whitelist Apps (COSU)
<span id="cosu-whitelist-applications-configured" class="has-configured status-icon hidden"><i <span id="cosu-whitelist-applications-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-ok"></i></span> <span id="cosu-whitelist-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="cosu-whitelist-applications-ok" class="has-success status-icon hidden"><i <span id="cosu-whitelist-applications-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
class="fw fw-ok"></i></span>
<span id="cosu-whitelist-applications-error" class="has-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a> </a>
</div> </div>
<div class="wr-hidden-operations-content col-lg-8"> <div class="wr-hidden-operations-content col-lg-8">
<!-- passcode-policy --> <!-- passcode-policy -->
<div class="wr-hidden-operation" data-operation="passcode-policy" style="display: block"> <div class="wr-hidden-operation" data-operation="passcode-policy" style="display: block">
<div class="panel panel-default operation-data" data-operation="passcode-policy" <div class="panel panel-default operation-data" data-operation="passcode-policy" data-operation-code="PASSCODE_POLICY">
data-operation-code="PASSCODE_POLICY">
<div id="passcode-policy-heading" class="panel-heading" role="tab"> <div id="passcode-policy-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title"> <h2 class="sub-title panel-title">
Passcode Policy Passcode Policy
<label id="passcode-policy-lbl" class="wr-input-control switch hidden" data-toggle="collapse" <label id="passcode-policy-lbl" class="wr-input-control switch hidden" data-toggle="collapse" data-target="#passcode-policy-body">
data-target="#passcode-policy-body">
<input type="checkbox" /> <input type="checkbox" />
<span class="helper"></span> <span class="helper"></span>
<span class="text"></span> <span class="text"></span>
@ -110,13 +99,11 @@
</h2> </h2>
<div class="panel-title-description"> <div class="panel-title-description">
This configuration can be used to set a passcode policy to an Android Device. This configuration can be used to set a passcode policy to an Android Device.
Once this configuration profile is installed on a device, corresponding users will not be Once this configuration profile is installed on a device, corresponding users will not be able
able
to modify these settings on their devices. to modify these settings on their devices.
</div> </div>
</div> </div>
<div id="passcode-policy-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="passcode-policy-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="passcode-policy-body">
aria-labelledby="passcode-policy-body">
<hr/> <hr/>
<div id="passcode-policy-feature-error-msg" class="alert alert-danger hidden" role="alert"> <div id="passcode-policy-feature-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>
@ -124,11 +111,8 @@
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-control checkbox"> <label class="wr-input-control checkbox">
<input id="passcode-policy-allow-simple" type="checkbox" <input id="passcode-policy-allow-simple" type="checkbox" class="form-control operationDataKeys" data-key="passcodePolicyAllowSimple" checked="checked" disabled/>
class="form-control operationDataKeys" data-key="passcodePolicyAllowSimple" <span class="helper" title="Permit the use of repeating, ascending and descending character sequences">
checked="checked" disabled/>
<span class="helper"
title="Permit the use of repeating, ascending and descending character sequences">
&nbsp;&nbsp;&nbsp;Allow simple value &nbsp;&nbsp;&nbsp;Allow simple value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
@ -137,9 +121,7 @@
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-control checkbox"> <label class="wr-input-control checkbox">
<input id="passcode-policy-require-alphanumeric" type="checkbox" <input id="passcode-policy-require-alphanumeric" type="checkbox" class="form-control operationDataKeys" data-key="passcodePolicyRequireAlphanumeric" checked="checked" disabled/>
class="form-control operationDataKeys" data-key="passcodePolicyRequireAlphanumeric"
checked="checked" disabled/>
<span class="helper" title="Require passcode to contain both letters and numbers"> <span class="helper" title="Require passcode to contain both letters and numbers">
&nbsp;&nbsp;&nbsp;Require alphanumeric value &nbsp;&nbsp;&nbsp;Require alphanumeric value
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
@ -154,8 +136,7 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
</label> </label>
<select id="passcode-policy-min-length" class="form-control operationDataKeys" <select id="passcode-policy-min-length" class="form-control operationDataKeys" data-key="passcodePolicyMinLength" data-default="0" disabled>
data-key="passcodePolicyMinLength" data-default="0" disabled>
<option value="" selected="selected"> <option value="" selected="selected">
None None
</option> </option>
@ -177,13 +158,11 @@
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="passcode-policy-min-complex-chars"> <label class="wr-input-label" for="passcode-policy-min-complex-chars">
Minimum number of complex characters Minimum number of complex characters
<span class="helper" <span class="helper" title="Minimum number of complex or non-alphanumeric characters allowed in a passcode">
title="Minimum number of complex or non-alphanumeric characters allowed in a passcode">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
</label> </label>
<select id="passcode-policy-min-complex-chars" class="form-control operationDataKeys" <select id="passcode-policy-min-complex-chars" class="form-control operationDataKeys" data-key="passcodePolicyMinComplexChars" data-default="0" disabled>
data-key="passcodePolicyMinComplexChars" data-default="0" disabled>
<option value="" selected="selected"> <option value="" selected="selected">
None None
</option> </option>
@ -204,9 +183,7 @@
<br> <br>
( Should be in between 1-to-730 days or none ) ( Should be in between 1-to-730 days or none )
</label> </label>
<input id="passcode-policy-max-passcode-age-in-days" type="text" <input id="passcode-policy-max-passcode-age-in-days" type="text" class="form-control operationDataKeys" data-key="passcodePolicyMaxPasscodeAgeInDays" maxlength="3" placeholder="[ Requires Number Input ]" disabled>
class="form-control operationDataKeys" data-key="passcodePolicyMaxPasscodeAgeInDays"
maxlength="3" placeholder="[ Requires Number Input ]" disabled>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
@ -218,21 +195,17 @@
<br> <br>
( Should be in between 1-to-50 passcodes or none ) ( Should be in between 1-to-50 passcodes or none )
</label> </label>
<input id="passcode-policy-passcode-history" type="text" class="form-control operationDataKeys" <input id="passcode-policy-passcode-history" type="text" class="form-control operationDataKeys" data-key="passcodePolicyPasscodeHistory" maxlength="2" placeholder="[ Requires Number Input ]" disabled>
data-key="passcodePolicyPasscodeHistory" maxlength="2"
placeholder="[ Requires Number Input ]" disabled>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="passcodePolicyMaxFailedAttempts"> <label class="wr-input-label" for="passcodePolicyMaxFailedAttempts">
Maximum number of failed attempts Maximum number of failed attempts
<span class="helper" <span class="helper" title="Maximum number of passcode entry attempts allowed before all data on a device will be erased">
title="Maximum number of passcode entry attempts allowed before all data on a device will be erased">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
</label> </label>
<select id="passcode-policy-max-failed-attempts" class="form-control operationDataKeys" <select id="passcode-policy-max-failed-attempts" class="form-control operationDataKeys" data-key="passcodePolicyMaxFailedAttempts" data-default="0" disabled>
data-key="passcodePolicyMaxFailedAttempts" data-default="0" disabled>
<option value="" selected="selected"> <option value="" selected="selected">
None None
</option> </option>
@ -265,13 +238,11 @@
</h2> </h2>
<div class="panel-title-description"> <div class="panel-title-description">
This configurations can be used to restrict certain settings on an Android device. This configurations can be used to restrict certain settings on an Android device.
Once this configuration profile is installed on a device, corresponding users will not be Once this configuration profile is installed on a device, corresponding users will not be able
able
to modify these settings on their devices. to modify these settings on their devices.
</div> </div>
</div> </div>
<div id="camera-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="camera-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="camera-body">
aria-labelledby="camera-body">
<hr/> <hr/>
<div id="camera-feature-error-msg" class="alert alert-danger hidden" role="alert"> <div id="camera-feature-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>
@ -281,8 +252,7 @@
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-control checkbox"> <label class="wr-input-control checkbox">
<input id="camera-enabled" type="checkbox" class="operationDataKeys" <input id="camera-enabled" type="checkbox" class="operationDataKeys" data-key="cameraEnabled"
data-key="cameraEnabled"
checked="checked"/> checked="checked"/>
<span class="helper" <span class="helper"
title="Having this checked would enable Usage of phone camera in the device."> title="Having this checked would enable Usage of phone camera in the device.">
@ -710,28 +680,23 @@
<!-- encrypt-storage --> <!-- encrypt-storage -->
<div class="wr-hidden-operation" data-operation="encrypt-storage"> <div class="wr-hidden-operation" data-operation="encrypt-storage">
<div class="panel panel-default operation-data" data-operation="encrypt-storage" <div class="panel panel-default operation-data" data-operation="encrypt-storage" data-operation-code="ENCRYPT_STORAGE">
data-operation-code="ENCRYPT_STORAGE">
<div id="encrypt-storage-heading" class="panel-heading" role="tab"> <div id="encrypt-storage-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title"> <h2 class="sub-title panel-title">
Encryption Settings Encryption Settings
<label class="wr-input-control switch hidden" data-toggle="collapse" <label class="wr-input-control switch hidden" data-toggle="collapse" data-target="#encrypt-storage-body">
data-target="#encrypt-storage-body">
<input type="checkbox" /> <input type="checkbox" />
<span class="helper"></span> <span class="helper"></span>
<span class="text"></span> <span class="text"></span>
</label> </label>
</h2> </h2>
<div class="panel-title-description"> <div class="panel-title-description">
This configuration can be used to encrypt data on an Android device, when the device is This configuration can be used to encrypt data on an Android device, when the device is locked and
locked and make it readable when the passcode is entered. Once this configuration profile is installed on a device,
make it readable when the passcode is entered. Once this configuration profile is installed
on a device,
corresponding users will not be able to modify these settings on their devices. corresponding users will not be able to modify these settings on their devices.
</div> </div>
</div> </div>
<div id="encrypt-storage-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="encrypt-storage-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="encrypt-storage-body">
aria-labelledby="encrypt-storage-body">
<hr/> <hr/>
<div id="encrypt-storage-feature-error-msg" class="alert alert-danger hidden" role="alert"> <div id="encrypt-storage-feature-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>
@ -741,10 +706,8 @@
<br> <br>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-control checkbox"> <label class="wr-input-control checkbox">
<input id="encrypt-storage-enabled" type="checkbox" class="operationDataKeys" <input id="encrypt-storage-enabled" type="checkbox" class="operationDataKeys" data-key="encryptStorageEnabled" checked="checked" disabled/>
data-key="encryptStorageEnabled" checked="checked" disabled/> <span class="helper" title="Having this checked would enable Storage-encryption in the device">
<span class="helper"
title="Having this checked would enable Storage-encryption in the device">
&nbsp;&nbsp;&nbsp;Enable storage-encryption &nbsp;&nbsp;&nbsp;Enable storage-encryption
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
@ -770,13 +733,11 @@
</h2> </h2>
<div class="panel-title-description"> <div class="panel-title-description">
This configurations can be used to configure Wi-Fi access on an Android device. This configurations can be used to configure Wi-Fi access on an Android device.
Once this configuration profile is installed on a device, corresponding users will not be Once this configuration profile is installed on a device, corresponding users will not be able
able
to modify these settings on their devices. to modify these settings on their devices.
</div> </div>
</div> </div>
<div id="wifi-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="wifi-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="wifi-body">
aria-labelledby="wifi-body">
<hr/> <hr/>
<!--<div class="cloneable">--> <!--<div class="cloneable">-->
<!--<a href="#" class="multi-view add enabled">--> <!--<a href="#" class="multi-view add enabled">-->
@ -809,8 +770,7 @@
<br> <br>
( should be 1-to-30 characters long ) ( should be 1-to-30 characters long )
</label> </label>
<input id="wifi-ssid" type="text" class="form-control operationDataKeys" data-key="wifiSSID" <input id="wifi-ssid" type="text" class="form-control operationDataKeys" data-key="wifiSSID" maxlength="100" placeholder="[ Required field ]" disabled/>
maxlength="100" placeholder="[ Required field ]" disabled/>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="wifi-type"> <label class="wr-input-label" for="wifi-type">
@ -837,8 +797,7 @@
</span> </span>
</label> </label>
<select class="form-control operationDataKeys" id="wifi-eap" <select class="form-control operationDataKeys" id="wifi-eap"
onchange="changeAndroidWifiPolicyEAP(this, document.getElementById('wifi-type'))" onchange="changeAndroidWifiPolicyEAP(this, document.getElementById('wifi-type'))" data-key="wifiEAP" disabled>
data-key="wifiEAP" disabled>
<option value="peap">PEAP</option> <option value="peap">PEAP</option>
<option value="tls">TLS</option> <option value="tls">TLS</option>
<option value="ttls">TTLS</option> <option value="ttls">TTLS</option>
@ -870,8 +829,7 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
</label> </label>
<select class="form-control operationDataKeys" id="wifi-provisioning" <select class="form-control operationDataKeys" id="wifi-provisioning" data-key="wifiProvisioning" disabled>
data-key="wifiProvisioning" disabled>
<option value="0">0</option> <option value="0">0</option>
<option value="1">1</option> <option value="1">1</option>
<option value="2">2</option> <option value="2">2</option>
@ -923,13 +881,11 @@
<!-- /wi-fi --> <!-- /wi-fi -->
<!--app-restriction--> <!--app-restriction-->
<div class="wr-hidden-operation" data-operation="app-restriction"> <div class="wr-hidden-operation" data-operation="app-restriction">
<div class="panel panel-default operation-data" data-operation="app-restriction" <div class="panel panel-default operation-data" data-operation="app-restriction" data-operation-code="APP-RESTRICTION">
data-operation-code="APP-RESTRICTION">
<div id="app-restriction-heading" class="panel-heading" role="tab"> <div id="app-restriction-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title"> <h2 class="sub-title panel-title">
Application Restriction Settings Application Restriction Settings
<label class="wr-input-control switch hidden" data-toggle="collapse" <label class="wr-input-control switch hidden" data-toggle="collapse" data-target="#app-restriction-body">
data-target="#app-restriction-body">
<input type="checkbox" /> <input type="checkbox" />
<span class="helper"></span> <span class="helper"></span>
<span class="text"></span> <span class="text"></span>
@ -939,15 +895,13 @@
This configuration can be used to create a black list or white list of applications. This configuration can be used to create a black list or white list of applications.
</div> </div>
</div> </div>
<div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="app-restriction-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="app-restriction-body">
aria-labelledby="app-restriction-body">
<hr/> <hr/>
<div id="app-restriction-feature-error-msg" class="alert alert-danger hidden" role="alert"> <div id="app-restriction-feature-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>
<select id="app-restriction-type" class="form-control operationDataKeys" data-key="restrictionType" <select id="app-restriction-type" class="form-control operationDataKeys" data-key="restrictionType" disabled>
disabled>
<option value="" selected="selected"> <option value="" selected="selected">
None None
</option> </option>
@ -963,8 +917,7 @@
</span> </span>
<br> <br>
<br> <br>
<a href="#restricted-applications-grid" class="grid-input-add hidden" <a href="#restricted-applications-grid" class="grid-input-add hidden" data-click-event="add-form">
data-click-event="add-form">
<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-ring fw-stack-2x"></i> <i class="fw fw-ring fw-stack-2x"></i>
@ -973,9 +926,7 @@
Add Application Add Application
</a> </a>
</label> </label>
<div id="restricted-applications" <div id="restricted-applications" class="operationDataKeys grouped-array-input multi-column-key-value-pair-array" data-key="restrictedApplications" data-column-count="2">
class="operationDataKeys grouped-array-input multi-column-key-value-pair-array"
data-key="restrictedApplications" data-column-count="2">
<table class="table table-responsive table-striped"> <table class="table table-responsive table-striped">
<thead> <thead>
<tr> <tr>
@ -1000,18 +951,14 @@
<span class="index"></span> <span class="index"></span>
</td> </td>
<td data-title="App Name"> <td data-title="App Name">
<input type="text" class="form-control grid-input-text" data-child-key="appName" <input type="text" class="form-control grid-input-text" data-child-key="appName" maxlength="100" data-default="" placeholder="[ Gmail ]" disabled/>
maxlength="100" data-default="" placeholder="[ Gmail ]" disabled/>
</td> </td>
<td data-title="Package Name"> <td data-title="Package Name">
<input type="text" class="form-control grid-input-text" <input type="text" class="form-control grid-input-text" data-child-key="packageName" maxlength="100" data-default="" placeholder="[ com.google.android.gm ]" disabled/>
data-child-key="packageName" maxlength="100" data-default=""
placeholder="[ com.google.android.gm ]" disabled/>
</td> </td>
<td> <td>
<span class="list-group-item-actions hidden"> <span class="list-group-item-actions hidden">
<a href="#restricted-applications-grid" class="grid-input-remove" <a href="#restricted-applications-grid" class="grid-input-remove" data-click-event="remove-form">
data-click-event="remove-form">
<span class="fw-stack helper" title="Remove Entry"> <span class="fw-stack helper" title="Remove Entry">
<i class="fw fw-ring fw-stack-2x"></i> <i class="fw fw-ring fw-stack-2x"></i>
<i class="fw fw-delete fw-stack-1x"></i> <i class="fw fw-delete fw-stack-1x"></i>
@ -1043,13 +990,11 @@
</h2> </h2>
<div class="panel-title-description"> <div class="panel-title-description">
This configurations can be used to configure VPN settings on an Android device. This configurations can be used to configure VPN settings on an Android device.
Once this configuration profile is installed on a device, corresponding users will not be Once this configuration profile is installed on a device, corresponding users will not be able
able
to modify these settings on their devices. to modify these settings on their devices.
</div> </div>
</div> </div>
<div id="vpn-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="vpn-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="vpn-body">
aria-labelledby="vpn-body">
<hr/> <hr/>
Please note that * sign represents required fields of data. Please note that * sign represents required fields of data.
<br> <br>
@ -1064,9 +1009,7 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
</label> </label>
<input id="vpn-server-address" type="text" class="form-control operationDataKeys" <input id="vpn-server-address" type="text" class="form-control operationDataKeys" data-key="serverAddress" maxlength="200" placeholder="[ Should be a valid hostname ]" disabled/>
data-key="serverAddress" maxlength="200" placeholder="[ Should be a valid hostname ]"
disabled/>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="vpn-server-port"> <label class="wr-input-label" for="vpn-server-port">
@ -1075,8 +1018,7 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
</label> </label>
<input id="vpn-server-port" type="text" class="form-control operationDataKeys" <input id="vpn-server-port" type="text" class="form-control operationDataKeys" data-key="serverPort" maxlength="100" placeholder="[ Optional field ]" disabled/>
data-key="serverPort" maxlength="100" placeholder="[ Optional field ]" disabled/>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="vpn-shared-secret"> <label class="wr-input-label" for="vpn-shared-secret">
@ -1085,8 +1027,7 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
</label> </label>
<input id="vpn-shared-secret" type="password" class="form-control operationDataKeys" <input id="vpn-shared-secret" type="password" class="form-control operationDataKeys" data-key="sharedSecret" maxlength="100" placeholder="[ Optional field ]" disabled/>
data-key="sharedSecret" maxlength="100" placeholder="[ Optional field ]" disabled/>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="vpn-dns"> <label class="wr-input-label" for="vpn-dns">
@ -1095,8 +1036,7 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
</label> </label>
<input id="vpn-dns" type="text" class="form-control operationDataKeys" data-key="dnsServer" <input id="vpn-dns" type="text" class="form-control operationDataKeys" data-key="dnsServer" maxlength="100" placeholder="[ Optional field ]" disabled/>
maxlength="100" placeholder="[ Optional field ]" disabled/>
</div> </div>
</div> </div>
</div> </div>
@ -1212,25 +1152,21 @@
<!--Work-profile--> <!--Work-profile-->
<div class="wr-hidden-operation" data-operation="work-profile"> <div class="wr-hidden-operation" data-operation="work-profile">
<div class="panel panel-default operation-data" data-operation="work-profile" <div class="panel panel-default operation-data" data-operation="work-profile" data-operation-code="WORK_PROFILE">
data-operation-code="WORK_PROFILE">
<div id="work-profile-policy-heading" class="panel-heading" role="tab"> <div id="work-profile-policy-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title"> <h2 class="sub-title panel-title">
Work-Profile Configurations Work-Profile Configurations
<label id="work-profile-policy-lbl" class="wr-input-control switch" data-toggle="collapse" <label id="work-profile-policy-lbl" class="wr-input-control switch" data-toggle="collapse" data-target="#work-profile-policy-body">
data-target="#work-profile-policy-body">
<input type="checkbox"/> <input type="checkbox"/>
<span class="helper"></span> <span class="helper"></span>
<span class="text"></span> <span class="text"></span>
</label> </label>
</h2> </h2>
<div class="panel-title-description"> <div class="panel-title-description">
The configurations below can be applied to the devices where the agent is running in Android The configurations below can be applied to the devices where the agent is running in Android Work-Profile.
Work-Profile.
</div> </div>
</div> </div>
<div id="work-profile-policy-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="work-profile-policy-body" class="panel-collapse panel-body collapse" role="tabpanel" aria-labelledby="work-profile-policy-body">
aria-labelledby="work-profile-policy-body">
<hr/> <hr/>
<div id="work-profile-policy-feature-error-msg" class="alert alert-danger hidden" role="alert"> <div id="work-profile-policy-feature-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>
@ -1253,8 +1189,7 @@
</span> </span>
<br> <br>
</label> </label>
<input id="work-profile-policy-profile-name" type="text" class="form-control operationDataKeys" <input id="work-profile-policy-profile-name" type="text" class="form-control operationDataKeys" data-key="workProfilePolicyProfileName" maxlength="20">
data-key="workProfilePolicyProfileName" maxlength="20">
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="work-profile-policy-enable-system-apps"> <label class="wr-input-label" for="work-profile-policy-enable-system-apps">
@ -1263,12 +1198,9 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
<br> <br>
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, ( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
com.google.android.calculator )
</label> </label>
<textarea id="workProfilePolicyEnableSystemApps" type="text" <textarea id="workProfilePolicyEnableSystemApps" type ="text" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyEnableSystemApps"></textarea>
class="form-control operationDataKeys" rows="4"
data-key="workProfilePolicyEnableSystemApps"></textarea>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="work-profile-policy-hide-system-apps"> <label class="wr-input-label" for="work-profile-policy-hide-system-apps">
@ -1277,11 +1209,9 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
<br> <br>
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, ( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
com.google.android.calculator )
</label> </label>
<textarea id="work-profile-policy-hide-system-apps" class="form-control operationDataKeys" <textarea id="work-profile-policy-hide-system-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyHideSystemApps" placeholder=""></textarea>
rows="4" data-key="workProfilePolicyHideSystemApps" placeholder=""></textarea>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="work-profile-policy-unhide-system-apps"> <label class="wr-input-label" for="work-profile-policy-unhide-system-apps">
@ -1290,25 +1220,20 @@
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
<br> <br>
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, ( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
com.google.android.calculator )
</label> </label>
<textarea id="work-profile-policy-unhide-system-apps" class="form-control operationDataKeys" <textarea id="work-profile-policy-unhide-system-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyUnhideSystemApps" placeholder=""></textarea>
rows="4" data-key="workProfilePolicyUnhideSystemApps" placeholder=""></textarea>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="passcode-policy-max-passcode-age-in-days"> <label class="wr-input-label" for="passcode-policy-max-passcode-age-in-days">
Enable Google Play Store Apps Enable Google Play Store Apps
<span class="helper" <span class="helper" title="The set of apps needed to be installed from Google Playstore to work-profile">
title="The set of apps needed to be installed from Google Playstore to work-profile">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
<br> <br>
( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, ( Should be exact package names seperated by commas. Ex: com.google.android.apps.maps, com.google.android.calculator )
com.google.android.calculator )
</label> </label>
<textarea id="work-profile-policy-install-playstore-apps" class="form-control operationDataKeys" <textarea id="work-profile-policy-install-playstore-apps" class="form-control operationDataKeys" rows="4" data-key="workProfilePolicyEnablePlaystoreApps" placeholder=""></textarea>
rows="4" data-key="workProfilePolicyEnablePlaystoreApps" placeholder=""></textarea>
</div> </div>
</div> </div>
</div> </div>
@ -1321,8 +1246,7 @@
<div id="cosu-system-update-policy-heading" class="panel-heading" role="tab"> <div id="cosu-system-update-policy-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title"> <h2 class="sub-title panel-title">
System Update Policy (COSU) System Update Policy (COSU)
<label id="cosu-system-update-policy-lbl" class="wr-input-control switch hidden" <label id="cosu-system-update-policy-lbl" class="wr-input-control switch hidden" data-toggle="collapse"
data-toggle="collapse"
data-target="#cosu-system-update-policy-body"> data-target="#cosu-system-update-policy-body">
<input type="checkbox"/> <input type="checkbox"/>
<span class="helper"></span> <span class="helper"></span>
@ -1341,8 +1265,7 @@
<div id="cosu-system-update-policy-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="cosu-system-update-policy-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="cosu-system-update-policy-body"> aria-labelledby="cosu-system-update-policy-body">
<div id="cosu-system-update-policy-feature-error-msg" class="alert alert-danger hidden" <div id="cosu-system-update-policy-feature-error-msg" class="alert alert-danger hidden" role="alert">
role="alert">
<i class="icon fw fw-error"></i><span></span> <i class="icon fw fw-error"></i><span></span>
</div> </div>
@ -1357,33 +1280,24 @@
<label class="wr-input-control radio light"> <label class="wr-input-control radio light">
<input id="automatic-system-update-radio-btn" type="radio" name="cosu-system-update-type" <input id="automatic-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType" class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="automatic" value="automatic" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" checked disabled/>
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" <span class="helper" title="Installs system update automatically as soon as one is available">
checked disabled/>
<span class="helper"
title="Installs system update automatically as soon as one is available">
&nbsp;Automatic &nbsp;Automatic
</span> </span>
</label> </label>
<label class="wr-input-control radio light"> <label class="wr-input-control radio light">
<input id="postpone-system-update-radio-btn" type="radio" name="cosu-system-update-type" <input id="postpone-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType" class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="postpone" value="postpone" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" disabled/>
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" <span class="helper" title="Incoming system update will be blocked for a maximum of 30 days">
disabled/>
<span class="helper"
title="Incoming system update will be blocked for a maximum of 30 days">
&nbsp;Postpone &nbsp;Postpone
</span> </span>
</label> </label>
<label class="wr-input-control radio light"> <label class="wr-input-control radio light">
<input id="window-system-update-radio-btn" type="radio" name="cosu-system-update-type" <input id="window-system-update-radio-btn" type="radio" name="cosu-system-update-type"
class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType" class="form-control operationDataKeys" data-key="cosuSystemUpdatePolicyType"
value="window" value="window" onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" disabled/>
onclick="slideDownPaneAgainstValueSetForRadioButtons(this, 'cosu-system-update-policy-window-select', ['window'])" <span class="helper" title="Install system update automatically within a daily maintenance window, for a maximum of 30 days">
disabled/>
<span class="helper"
title="Install system update automatically within a daily maintenance window, for a maximum of 30 days">
&nbsp;Window &nbsp;Window
</span> </span>
</label> </label>
@ -1484,8 +1398,7 @@
<div id="cosu-whitelist-applications-heading" class="panel-heading" role="tab"> <div id="cosu-whitelist-applications-heading" class="panel-heading" role="tab">
<h2 class="sub-title panel-title"> <h2 class="sub-title panel-title">
Whitelist Applications (COSU) Whitelist Applications (COSU)
<label id="cosu-whitelist-applications-lbl" class="wr-input-control switch hidden" <label id="cosu-whitelist-applications-lbl" class="wr-input-control switch hidden" data-toggle="collapse"
data-toggle="collapse"
data-target="#cosu-whitelist-applications-body"> data-target="#cosu-whitelist-applications-body">
<input type="checkbox"/> <input type="checkbox"/>
<span class="helper"></span> <span class="helper"></span>
@ -1504,21 +1417,18 @@
<div id="cosu-whitelist-applications-body" class="panel-collapse panel-body collapse" role="tabpanel" <div id="cosu-whitelist-applications-body" class="panel-collapse panel-body collapse" role="tabpanel"
aria-labelledby="cosu-whitelist-applications-body"> aria-labelledby="cosu-whitelist-applications-body">
<div id="cosu-whitelist-applications-feature-error-msg" class="alert alert-danger hidden" <div id="cosu-whitelist-applications-feature-error-msg" class="alert alert-danger hidden" role="alert">
role="alert">
<i class="icon fw fw-error"></i><span></span> <i class="icon fw fw-error"></i><span></span>
</div> </div>
<div class="wr-input-control"> <div class="wr-input-control">
<label class="wr-input-label" for="cosu-whitelisted-applications"> <label class="wr-input-label" for="cosu-whitelisted-applications">
Whitelisted Applications to enter Lock Task Mode Whitelisted Applications to enter Lock Task Mode
<span class="helper" <span class="helper" title="Configuration information specific to a given third-party VPN solution. This has to be input as key/value pairs.">
title="Configuration information specific to a given third-party VPN solution. This has to be input as key/value pairs.">
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span> <span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span> </span>
<br> <br>
<a href="#cosu-whitelisted-applications-grid" class="grid-input-add" <a href="#cosu-whitelisted-applications-grid" class="grid-input-add" data-click-event="add-form">
data-click-event="add-form">
<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-ring fw-stack-2x"></i> <i class="fw fw-ring fw-stack-2x"></i>
@ -1555,12 +1465,10 @@
</td> </td>
<td data-title="Application Name / Description"> <td data-title="Application Name / Description">
<input type="text" class="form-control grid-input-text" data-child-key="appName" <input type="text" class="form-control grid-input-text" data-child-key="appName"
maxlength="100" data-default="" maxlength="100" data-default="" placeholder="[ Application Name / Description ]" disabled/>
placeholder="[ Application Name / Description ]" disabled/>
</td> </td>
<td data-title="Package Name"> <td data-title="Package Name">
<input type="text" class="form-control grid-input-text" <input type="text" class="form-control grid-input-text" data-child-key="packageName"
data-child-key="packageName"
maxlength="100" data-default="" placeholder="[ Package Name ]" disabled/> maxlength="100" data-default="" placeholder="[ Package Name ]" disabled/>
</td> </td>
<td> <td>

@ -82,11 +82,12 @@
<!--<a href="{{appContext}}notification-listing" title="Failures of operations on the device side will be listed here">--> <!--<a href="{{appContext}}notification-listing" title="Failures of operations on the device side will be listed here">-->
<a data-toggle="sidebar" data-target="#right-sidebar" data-container=".page-content" <a data-toggle="sidebar" data-target="#right-sidebar" data-container=".page-content"
aria-expanded="false" rel="notifications-sidebar"> aria-expanded="false" rel="notifications-sidebar">
<span class="icon fw-stack"> <span id="notification-bubble" class="badge notifications hidden"></span>
<span id="notifications-icon" class="icon fw-stack hidden">
<i class="fw fw-notification fw-stack-1x"></i> <i class="fw fw-notification fw-stack-1x"></i>
</span> </span>
<span class="hidden-xs">Notifications&nbsp;&nbsp;</span> <span id="notifications-spacer" class="hidden">&nbsp;</span>
<span class="badge notifications" id="notification-bubble"></span> <span class="text-capitalize">Notifications</span>
</a> </a>
</li> </li>
</ul> </ul>
@ -94,10 +95,19 @@
{{#zone "sidePanes"}} {{#zone "sidePanes"}}
<!--suppress HtmlUnknownAttribute --> <!--suppress HtmlUnknownAttribute -->
<div class="sidebar-wrapper" id="right-sidebar" is-authorized="{{permissions.LIST_NOTIFICATIONS}}" <div class="sidebar-wrapper" id="right-sidebar" is-authorized="{{permissions.LIST_NOTIFICATIONS}}"
data-side="right" data-width="320" data-sidebar-fixed="true" data-fixed-offset="60" data-spy="affix" data-side="right" data-width="300" data-sidebar-fixed="true" data-fixed-offset="60" data-spy="affix"
data-offset-top="80"> data-offset-top="80">
<ul class="sidebar-messages"></ul> <ul class="sidebar-messages"></ul>
<div class="text-center"><a href="{{appContext}}notification-listing" class="btn btn-primary">Show All Notifications</a></div> <br>
<div class="text-center">
<a href="{{appContext}}notification-listing" class="btn-operations btn-default">
<span class="fw-stack">
<i class="fw fw-ring fw-stroke fw-stack-2x"></i>
<i class="fw fw-notification fw-stack-1x"></i>
</span>
&nbsp;&nbsp;View All Notifications
</a>
</div>
</div> </div>
{{/zone}} {{/zone}}
{{#zone "bottomJs"}} {{#zone "bottomJs"}}

@ -0,0 +1,47 @@
//---------------------------------------------------------------------
// QRCode for JavaScript
//
// Copyright (c) 2009 Kazuhiko Arase
//
// URL: http://www.d-project.com/
//
// Licensed under the MIT license:
// http://www.opensource.org/licenses/mit-license.php
//
// The word "QR Code" is registered trademark of
// DENSO WAVE INCORPORATED
// http://www.denso-wave.com/qrcode/faqpatent-e.html
//
//---------------------------------------------------------------------
//---------------------------------------------------------------------
// QR8bitByte
//---------------------------------------------------------------------
(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
2)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery);

@ -80,17 +80,23 @@ function toggleEnrollment() {
var updateNotificationCountOnSuccess = function (data, textStatus, jqXHR) { var updateNotificationCountOnSuccess = function (data, textStatus, jqXHR) {
var notificationBubble = "#notification-bubble"; var notificationBubble = "#notification-bubble";
var notificationIcon = "#notifications-icon";
var notificationSpacer = "#notifications-spacer";
if (jqXHR.status == 200 && data) { if (jqXHR.status == 200 && data) {
var responsePayload = JSON.parse(data); var responsePayload = JSON.parse(data);
var newNotificationsCount = responsePayload["count"]; var newNotificationsCount = responsePayload["count"];
if (newNotificationsCount > 5) { if (newNotificationsCount > 5) {
$(notificationBubble).html("5 <sup>+</sup> &nbsp;NEW"); $(notificationBubble).html("5 <sup>+</sup> &nbsp;NEW");
$(notificationBubble).show(); $(notificationBubble).removeClass("hidden");
$(notificationSpacer).removeClass("hidden");
} else if (newNotificationsCount <= 5 && newNotificationsCount > 0) { } else if (newNotificationsCount <= 5 && newNotificationsCount > 0) {
$(notificationBubble).html(newNotificationsCount + " NEW"); $(notificationBubble).html(newNotificationsCount + " NEW");
$(notificationBubble).show(); $(notificationBubble).removeClass("hidden");
$(notificationSpacer).removeClass("hidden");
} else { } else {
$(notificationBubble).hide(); $(notificationBubble).addClass("hidden");
$(notificationSpacer).addClass("hidden");
$(notificationIcon).removeClass("hidden");
} }
} }
}; };

@ -8,8 +8,8 @@
<a href="../device/{{deviceType}}?id={{deviceIdentifier}}" <a href="../device/{{deviceType}}?id={{deviceIdentifier}}"
data-id="{{operationId}}" data-id="{{operationId}}"
data-url="../device/{{deviceType}}?id={{deviceIdentifier}}" data-url="../device/{{deviceType}}?id={{deviceIdentifier}}"
class="new-notification" data-click-event="remove-form"> class="new-notification text-capitalize" data-click-event="remove-form">
Notification on {{deviceType}} {{deviceName}} Failure on {{deviceType}} {{deviceName}}
</a> </a>
</h4> </h4>
<p>{{description}}</p> <p>{{description}}</p>

Loading…
Cancel
Save