Rasika Perera 8 years ago
commit 625dd1a887

@ -19,15 +19,15 @@
{{unit "cdmf.unit.lib.qrcode"}} {{unit "cdmf.unit.lib.qrcode"}}
{{unit "mdm.unit.device.qr-modal"}} {{unit "mdm.unit.device.qr-modal"}}
{{#zone "content"}} {{#zone "content"}}
{{#if permissions.LIST_DEVICES}} {{#if permissions.LIST_DEVICES}}
<div class="row "> <div class="row ">
<div class="col-md-3 wr-stats-board"> <div class="col-md-3 wr-stats-board">
<div class="wr-stats-board-tile"> <div class="wr-stats-board-tile">
<div class="tile-name">Devices</div> <div class="tile-name">Devices</div>
<div> <div>
<div class="tile-icon"><i class="fw fw-mobile"></i></div> <div class="tile-icon"><i class="fw fw-mobile"></i></div>
<div class="tile-stats"> <div class="tile-stats">
<span id="device-count" data-device-count="true">Loading...</span> <span id="device-count" data-device-count="true">Loading...</span>
<span class="tile-stats-free"> <span class="tile-stats-free">
<!--suppress HtmlUnknownTarget --> <!--suppress HtmlUnknownTarget -->
<a id="device-count-view-btn" href="{{@app.context}}/devices"> <a id="device-count-view-btn" href="{{@app.context}}/devices">
@ -37,27 +37,29 @@
</span> </span>
View View
</a> </a>
<a href="javascript:toggleEnrollment()"> {{#if permissions.ENROLL_DEVICE)}}
<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-stack-2x"></i>
<i class="fw fw-add fw-stack-1x"></i> <i class="fw fw-add fw-stack-1x"></i>
</span> </span>
Add Add
</a> </a>
{{/if}}
</span> </span>
</div>
</div> </div>
</div> </div>
</div> </div>
{{/if}} </div>
{{# if permissions.LIST_POLICIES}} {{/if}}
<div class="col-md-3 wr-stats-board"> {{# if permissions.LIST_POLICIES}}
<div class="wr-stats-board-tile"> <div class="col-md-3 wr-stats-board">
<div class="tile-name">Policies</div> <div class="wr-stats-board-tile">
<div> <div class="tile-name">Policies</div>
<div class="tile-icon"><i class="fw fw-policy"></i></div> <div>
<div class="tile-stats"> <div class="tile-icon"><i class="fw fw-policy"></i></div>
<span id="policy-count" data-policy-count="true">Loading...</span> <div class="tile-stats">
<span id="policy-count" data-policy-count="true">Loading...</span>
<span class="tile-stats-free"> <span class="tile-stats-free">
<!--suppress HtmlUnknownTarget --> <!--suppress HtmlUnknownTarget -->
<a id="policy-count-view-btn" href="{{@app.context}}/policies/"> <a id="policy-count-view-btn" href="{{@app.context}}/policies/">
@ -78,19 +80,19 @@
</a> </a>
{{/if}} {{/if}}
</span> </span>
</div>
</div> </div>
</div> </div>
</div> </div>
{{/if}} </div>
{{# if permissions.LIST_USERS}} {{/if}}
<div class="col-md-3 wr-stats-board"> {{# if permissions.LIST_USERS}}
<div class="wr-stats-board-tile"> <div class="col-md-3 wr-stats-board">
<div class="tile-name">Users</div> <div class="wr-stats-board-tile">
<div> <div class="tile-name">Users</div>
<div class="tile-icon"><i class="fw fw-user"></i></div> <div>
<div class="tile-stats"> <div class="tile-icon"><i class="fw fw-user"></i></div>
<span id="user-count" data-user-count="true">Loading...</span> <div class="tile-stats">
<span id="user-count" data-user-count="true">Loading...</span>
<span class="tile-stats-free"> <span class="tile-stats-free">
<!--suppress HtmlUnknownTarget --> <!--suppress HtmlUnknownTarget -->
<a id="user-count-view-btn" href="{{@app.context}}/users/"> <a id="user-count-view-btn" href="{{@app.context}}/users/">
@ -111,19 +113,19 @@
</a> </a>
{{/if}} {{/if}}
</span> </span>
</div>
</div> </div>
</div> </div>
</div> </div>
{{/if}} </div>
{{# if permissions.LIST_ROLES}} {{/if}}
<div class="col-md-3 wr-stats-board"> {{# if permissions.LIST_ROLES}}
<div class="wr-stats-board-tile"> <div class="col-md-3 wr-stats-board">
<div class="tile-name">Roles</div> <div class="wr-stats-board-tile">
<div> <div class="tile-name">Roles</div>
<div class="tile-icon"><i class="fw fw-bookmark"></i></div> <div>
<div class="tile-stats"> <div class="tile-icon"><i class="fw fw-bookmark"></i></div>
<span id="role-count" data-role-count="true">Loading...</span> <div class="tile-stats">
<span id="role-count" data-role-count="true">Loading...</span>
<span class="tile-stats-free"> <span class="tile-stats-free">
<!--suppress HtmlUnknownTarget --> <!--suppress HtmlUnknownTarget -->
<a id="device-count-view-btn" href="{{@app.context}}/roles"> <a id="device-count-view-btn" href="{{@app.context}}/roles">
@ -144,12 +146,12 @@
</a> </a>
{{/if}} {{/if}}
</span> </span>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{{/if}} </div>
{{/if}}
{{/zone}} {{/zone}}
{{#zone "bottomJs"}} {{#zone "bottomJs"}}
{{js "js/dashboard.js"}} {{js "js/dashboard.js"}}

@ -29,6 +29,9 @@ function onRequest(context) {
permissions.ADD_POLICY = userModule.isAuthorized("/permission/admin/device-mgt/policies/manage"); permissions.ADD_POLICY = userModule.isAuthorized("/permission/admin/device-mgt/policies/manage");
permissions.ADD_ROLE = userModule.isAuthorized("/permission/admin/device-mgt/roles/manage"); permissions.ADD_ROLE = userModule.isAuthorized("/permission/admin/device-mgt/roles/manage");
permissions.ADD_USER = userModule.isAuthorized("/permission/admin/device-mgt/users/manage"); permissions.ADD_USER = userModule.isAuthorized("/permission/admin/device-mgt/users/manage");
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/enroll/ios") | userModule.isAuthorized("/permission/admin/devices/enroll/android") | userModule.isAuthorized("/permission/admin/device-mgt/devices/enroll/windows") ){
permissions.ENROLL_DEVICE = true;
}
viewModel.permissions = permissions; viewModel.permissions = permissions;
//TODO: Move enrollment URL into app-conf.json //TODO: Move enrollment URL into app-conf.json
viewModel.enrollmentURL = mdmProps.generalConfig.host + mdmProps.enrollmentDir; viewModel.enrollmentURL = mdmProps.generalConfig.host + mdmProps.enrollmentDir;

@ -15,6 +15,7 @@
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
}} }}
{{#zone "content"}} {{#zone "content"}}
<div id = "operations-mod" data-permissions="{{permissions}}"> <div id = "operations-mod" data-permissions="{{permissions}}">
{{unit "mdm.unit.device.operation-mod"}} {{unit "mdm.unit.device.operation-mod"}}

@ -17,55 +17,53 @@
*/ */
function onRequest(context) { function onRequest(context) {
var log = new Log("mdm.unit.device.operation-bar"); // var log = new Log("mdm.unit.device.operation-bar");
var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
var deviceType = context.uriParams.deviceType;
var viewModel = {}; var viewModel = {};
var permissions = []; var permissions = {};
// permission checks // adding android operations related permission checks
if (deviceType == "android") { permissions["android"] = [];
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/ring")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/ring")) {
permissions.push("DEVICE_RING"); permissions["android"].push("DEVICE_RING");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/lock-devices")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/lock-devices")) {
permissions.push("DEVICE_LOCK"); permissions["android"].push("DEVICE_LOCK");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/unlock-devices")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/unlock-devices")) {
permissions.push("DEVICE_UNLOCK"); permissions["android"].push("DEVICE_UNLOCK");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/location")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/location")) {
permissions.push("DEVICE_LOCATION"); permissions["android"].push("DEVICE_LOCATION");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/clear-password")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/clear-password")) {
permissions.push("CLEAR_PASSWORD"); permissions["android"].push("CLEAR_PASSWORD");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/reboot")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/reboot")) {
permissions.push("DEVICE_REBOOT"); permissions["android"].push("DEVICE_REBOOT");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/upgrade-firmware")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/upgrade-firmware")) {
permissions.push("UPGRADE_FIRMWARE"); permissions["android"].push("UPGRADE_FIRMWARE");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/mute")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/mute")) {
permissions.push("DEVICE_MUTE"); permissions["android"].push("DEVICE_MUTE");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/send-notification")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/send-notification")) {
permissions.push("NOTIFICATION"); permissions["android"].push("NOTIFICATION");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/change-lock-code")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/change-lock-code")) {
permissions.push("CHANGE_LOCK_CODE"); permissions["android"].push("CHANGE_LOCK_CODE");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/enterprise-wipe")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/enterprise-wipe")) {
permissions.push("ENTERPRISE_WIPE"); permissions["android"].push("ENTERPRISE_WIPE");
} }
if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/wipe")) { if (userModule.isAuthorized("/permission/admin/device-mgt/devices/owning/operations/android/wipe")) {
permissions.push("WIPE_DATA"); permissions["android"].push("WIPE_DATA");
} }
} else if (deviceType == "ios") {
} else if (deviceType == "windows") { // adding ios operations related permission checks
} // adding windows operations related permission checks
viewModel["permissions"] = stringify(permissions); viewModel["permissions"] = stringify(permissions);

@ -108,21 +108,21 @@ function loadOperationBar(deviceType) {
//var serviceURL = "/mdm-admin/features/" + platformType; //var serviceURL = "/mdm-admin/features/" + platformType;
var serviceURL = "/api/device-mgt/v1.0/devices/" + platformType + "/*/features"; var serviceURL = "/api/device-mgt/v1.0/devices/" + platformType + "/*/features";
var successCallback = function (data) { var successCallback = function (data) {
var permittedOpps = []; var permittedOperations = [];
var i; var i;
var permissionList = $("#operations-mod").data("permissions"); var permissionList = $("#operations-mod").data("permissions");
var totalFeatures = JSON.parse(data); var totalFeatures = JSON.parse(data);
for (i = 0; i < permissionList.length; i++) { for (i = 0; i < permissionList[deviceType].length; i++) {
var j; var j;
for (j = 0; j < totalFeatures.length; j++) { for (j = 0; j < totalFeatures.length; j++) {
if (permissionList[i] == totalFeatures[j]["code"]) { if (permissionList[deviceType][i] == totalFeatures[j]["code"]) {
permittedOpps.push(totalFeatures[j]); permittedOperations.push(totalFeatures[j]);
} }
} }
} }
var viewModel = {}; var viewModel = {};
permittedOpps = permittedOpps.filter(function (current) { permittedOperations = permittedOperations.filter(function (current) {
var iconName; var iconName;
switch (deviceType) { switch (deviceType) {
case platformTypeConstants.ANDROID: case platformTypeConstants.ANDROID:
@ -143,7 +143,7 @@ function loadOperationBar(deviceType) {
} }
}); });
viewModel.features = permittedOpps; viewModel.features = permittedOperations;
var content = template(viewModel); var content = template(viewModel);
$(".wr-operations").html(content); $(".wr-operations").html(content);
}; };

@ -108,14 +108,11 @@
<h4> <h4>
{{#equal code "WIPE_DATA"}} {{#equal code "WIPE_DATA"}}
{{#equal type "android"}} {{#equal type "android"}}
Enter PIN code (Optional - This is required only if the device type Enter PIN code (Optional - This is required only if the device type is BYOD).
is BYOD).
<br><br> <br><br>
<div> <div>
<input type="password" <input type="password" class="form-control modal-input operationDataKeys" id="pin"
class="form-control modal-input operationDataKeys" data-key="pin">
id="pin" data-key="pin"></textarea>
</div> </div>
<br> <br>
{{/equal}} {{/equal}}
@ -123,25 +120,114 @@
{{#equal code "NOTIFICATION"}} {{#equal code "NOTIFICATION"}}
Type your message below. Type your message below.
<br><br> <br><br>
<div id="notification-error-msg" class="alert alert-danger hidden" role="alert">
<div id="notification-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>
<div> <div class="form-group">
<textarea class="form-control modal-input operationDataKeys" <input class="form-control modal-input operationDataKeys"
id="message" data-key="message"></textarea> id="messageTitle" data-key="messageTitle" placeholder="Title here..." />
</div>
<div class="form-group">
<textarea class="form-control modal-input operationDataKeys"
id="messageText" data-key="messageText" placeholder="Message here..."></textarea>
</div> </div>
<br> <br>
{{/equal}} {{/equal}}
{{#equal code "CHANGE_LOCK_CODE"}} {{#equal code "CHANGE_LOCK_CODE"}}
Type new lock-code below. Type new lock-code below.
<br><br> <br><br>
<input type="password" <input type="password" class="form-control modal-input operationDataKeys" id="lockcode"
class="form-control modal-input operationDataKeys" id="lockcode"
data-key="lockCode" placeholder="Enter Lockcode"/> data-key="lockCode" placeholder="Enter Lockcode"/>
<br> <br>
{{/equal}} {{/equal}}
{{#equal code "DEVICE_LOCK"}}
{{#equal type "android"}}
Type your message to be shown in the lock screen (Optional).
<br><br>
<div>
<textarea class="form-control modal-input operationDataKeys" id="lock-message"
data-key="lock-message"></textarea>
</div>
<br>
<label class="wr-input-control checkbox">
<input id="hard-lock" type="checkbox" class="form-control operationDataKeys"
data-key="hard-lock"/>
<span class="helper" title="Once it enables, device will be blocked permanently.">
&nbsp;&nbsp;&nbsp;Enable Permanent Lock
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
{{/equal}}
{{/equal}}
{{#equal code "UPGRADE_FIRMWARE"}}
{{#equal type "android"}}
Enter firmware upgrade scheduling information.
<br><br>
<label class="wr-input-control checkbox">
<input id="instant-upgrade" type="checkbox" class="form-control operationDataKeys"
data-key="instant-upgrade"/>
<span class="helper"
title="Once enabled, device firmware upgrade process will start instantly.">
&nbsp;&nbsp;&nbsp;Instant Upgrade
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
</span>
</label>
<br><br>
<div class='input-group date' id='dateTimePicker'>
Enter the date and time to schedule firmware upgrade.
<br><br>
<div id="firmware-error-msg" class="alert alert-danger hidden" role="alert">
<i class="icon fw fw-error"></i><span></span>
</div>
<input type='text' class="form-control modal-input operationDataKeys"
style="z-index : 900;" name="daterange" id="schedule" data-key="schedule"/>
</div>
<br><br>
<div class='wr-input-control' id='firmwareServerInfo'>
Enter firmware upgrade server URL (ie. http://abc.com or http://abc.com/ota)
(Optional).
<br><br>
<input type='text' class="form-control modal-input operationDataKeys" id="server"
data-key="server"/>
</div>
<script type="text/javascript">
$(function () {
$('.modalpopup-bg').css('z-index', '1000');
$('.modalpopup-container').css('z-index', '1200');
$('input[name="daterange"]').daterangepicker({
singleDatePicker: true,
timePicker: true,
showDropdowns: true,
timePickerIncrement: 1,
locale: {
format: 'MM-DD-YYYY hh:mm a'
}
});
});
$('#instant-upgrade').change(function () {
if ($(this).is(":checked")) {
$('#dateTimePicker').addClass("hidden");
$("#schedule").val('');
} else {
$('#dateTimePicker').removeClass("hidden");
$('input[name="daterange"]').daterangepicker({
singleDatePicker: true,
timePicker: true,
showDropdowns: true,
timePickerIncrement: 1,
locale: {
format: 'MM-DD-YYYY hh:mm a'
}
});
}
});
</script>
<br>
{{/equal}}
{{/equal}}
<br><br>
Do you want to perform this operation on selected device(s) ? Do you want to perform this operation on selected device(s) ?
<br> <br>
</h4> </h4>

@ -2,373 +2,358 @@
{{unit "cdmf.unit.lib.qrcode"}} {{unit "cdmf.unit.lib.qrcode"}}
{{unit "mdm.unit.device.qr-modal"}} {{unit "mdm.unit.device.qr-modal"}}
{{#zone "contentTitle"}}
{{#if isAuthorized}}
<div class="row wr-device-board">
<div class="col-lg-12 wr-secondary-bar">
<label class="device-id device-select" data-deviceid="{{device.deviceIdentifier}}"
data-type="{{device.type}}">
Device {{device.name}}
{{#if device.viewModel.model}}
<span class="lbl-device">
( {{device.viewModel.vendor}} {{device.viewModel.model}} )
</span>
{{/if}}
</label>
</div>
</div>
{{/if}}
{{/zone}}
{{#zone "content"}} {{#zone "content"}}
{{#if isAuthorized}} {{#if isAuthorized}}
<div class="row no-gutter add-padding-5x add-margin-top-5x" style="border: 1px solid #e4e4e4;"> <h1 class="page-sub-title device-id device-select" data-deviceid="{{device.deviceIdentifier}}" data-type="{{device.type}}">
<div class="media"> Device {{device.name}}
<div class="media-left media-middle asset-image col-xs-2 col-sm-2 col-md-2 col-lg-2"> {{#if device.viewModel.model}}
<div class="thumbnail icon"><i class="square-element text fw fw-mobile"></i></div> <span class="lbl-device">
</div> ( {{device.viewModel.vendor}} {{device.viewModel.model}} )
<div class="media-body asset-desc add-padding-left-5x"> </span>
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Device Overview</div> {{/if}}
{{#defineZone "device-detail-properties"}} </h1>
<table class="table table-responsive table-striped" id="members"> <div class="row no-gutter add-padding-5x add-margin-top-5x" style="border: 1px solid #e4e4e4;">
<tbody> <div class="media">
<tr role="row" class="even"> <div class="media-left media-middle asset-image col-xs-2 col-sm-2 col-md-2 col-lg-2">
<td class="sorting_1" style="padding:10px 15px; width: 1%;">Device</td> <div class="thumbnail icon"><i class="square-element text fw fw-mobile"></i></div>
<td style="padding:10px 15px;">{{device.viewModel.vendor}} {{device.properties.model}}</td> </div>
</tr> <div class="media-body asset-desc add-padding-left-5x">
{{#if device.viewModel.model}} <div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Device Overview</div>
<tr role="row" class="odd"> {{#defineZone "device-detail-properties"}}
<td class="sorting_1" style="padding:10px 15px;">Model</td> <table class="table table-responsive table-striped" id="members">
<td style="padding:10px 15px;">{{device.viewModel.model}}</td> <tbody>
</tr>
{{/if}}
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">IMEI</td>
<td style="padding:10px 15px;">{{device.viewModel.imei}}</td>
</tr>
{{#if device.viewModel.udid}}
<tr role="row" class="even"> <tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">UDID</td> <td class="sorting_1" style="padding:10px 15px; width: 1%;">Device</td>
<td style="padding:10px 15px;">{{device.viewModel.udid}}</td> <td style="padding:10px 15px;">{{device.viewModel.vendor}} {{device.properties.model}}</td>
</tr> </tr>
{{/if}} {{#if device.viewModel.model}}
{{#if device.viewModel.os_build_date}} <tr role="row" class="odd">
<td class="sorting_1" style="padding:10px 15px;">Model</td>
<td style="padding:10px 15px;">{{device.viewModel.model}}</td>
</tr>
{{/if}}
<tr role="row" class="even"> <tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Firmware Build Date</td> <td class="sorting_1" style="padding:10px 15px;">IMEI</td>
<td style="padding:10px 15px;">{{device.viewModel.os_build_date}}</td> <td style="padding:10px 15px;">{{device.viewModel.imei}}</td>
</tr> </tr>
{{/if}} {{#if device.viewModel.udid}}
{{#if device.viewModel.phoneNumber}} <tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">UDID</td>
<td style="padding:10px 15px;">{{device.viewModel.udid}}</td>
</tr>
{{/if}}
{{#if device.viewModel.os_build_date}}
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Firmware Build Date</td>
<td style="padding:10px 15px;">{{device.viewModel.os_build_date}}</td>
</tr>
{{/if}}
{{#if device.viewModel.phoneNumber}}
<tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Phone Number</td>
<td style="padding:10px 15px;">{{device.viewModel.phoneNumber}}</td>
</tr>
{{/if}}
<tr role="row" class="even"> <tr role="row" class="even">
<td class="sorting_1" style="padding:10px 15px;">Phone Number</td> <td class="sorting_1" style="padding:10px 15px;">Status</td>
<td style="padding:10px 15px;">{{device.viewModel.phoneNumber}}</td> <td style="padding:10px 15px;">
{{#equal device.status "ACTIVE"}}<span><i class="fw fw-ok icon-success"></i>&nbsp;&nbsp;Active</span>{{/equal}}
{{#equal device.status "INACTIVE"}}<span><i class="fw fw-warning icon-warning"></i>&nbsp;&nbsp;Inactive</span>{{/equal}}
{{#equal device.status "BLOCKED"}}<span><i class="fw fw-remove icon-danger"></i>&nbsp;&nbsp;Blocked</span>{{/equal}}
{{#equal device.status "REMOVED"}}<span><i class="fw fw-delete icon-danger"></i>&nbsp;&nbsp;Removed</span>{{/equal}}
</td>
</tr> </tr>
{{/if}} </tbody>
<tr role="row" class="even"> </table>
<td class="sorting_1" style="padding:10px 15px;">Status</td> {{/defineZone}}
<td style="padding:10px 15px;"> <div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Operations</div>
{{#equal device.status "ACTIVE"}}<span><i class="fw fw-ok icon-success"></i>&nbsp;&nbsp;Active</span>{{/equal}} <div class="add-margin-top-4x">
{{#equal device.status "INACTIVE"}}<span><i class="fw fw-warning icon-warning"></i>&nbsp;&nbsp;Inactive</span>{{/equal}} {{unit "mdm.unit.device.operation-bar" deviceType=device.type}}
{{#equal device.status "BLOCKED"}}<span><i class="fw fw-remove icon-danger"></i>&nbsp;&nbsp;Blocked</span>{{/equal}} </div>
{{#equal device.status "REMOVED"}}<span><i class="fw fw-delete icon-danger"></i>&nbsp;&nbsp;Removed</span>{{/equal}}
</td>
</tr>
</tbody>
</table>
{{/defineZone}}
<div style="background: #11375B; color: #fff; padding: 10px; margin-bottom: 5px">Operations</div>
<div class="add-margin-top-4x">
{{unit "mdm.unit.device.operation-bar" deviceType=device.type}}
</div> </div>
</div> </div>
</div> <div class="media tab-responsive">
<div class="media tab-responsive"> <div class="media-left col-xs-1 col-sm-1 col-md-2 col-lg-2 hidden-xs">
<div class="media-left col-xs-1 col-sm-1 col-md-2 col-lg-2 hidden-xs"> <ul class="list-group nav nav-pills nav-stacked" role="tablist">
<ul class="list-group nav nav-pills nav-stacked" role="tablist"> <li role="presentation" class="list-group-item active">
<li class="list-group-item active"> <a href="#device_details_tab" role="tab" data-toggle="tab" aria-controls="device_details_tab">
<a href="#device_details" role="tab" data-toggle="tab" aria-controls="device_details"> <i class="icon fw fw-mobile"></i><span class="hidden-sm">Device Details</span>
<i class="icon fw fw-mobile"></i>Device Details </a>
</a> </li>
</li> <li role="presentation" class="list-group-item">
<li class="list-group-item"> <a href="#policy_compliance_tab" role="tab" data-toggle="tab" aria-controls="policy_compliance_tab">
<a href="#policy_compliance" role="tab" data-toggle="tab" aria-controls="policy_compliance"> <i class="icon fw fw-policy"></i><span class="hidden-sm">Policy Compliance</span>
<i class="icon fw fw-policy"></i>Policy Compliance </a>
</a> </li>
</li> <li role="presentation" class="list-group-item">
<li class="list-group-item"> <a href="#device_location_tab" role="tab" data-toggle="tab"
<a href="#device_location" role="tab" data-toggle="tab" data-lat="{{device.viewModel.location.latitude}}"
data-lat="{{device.viewModel.location.latitude}}" data-long="{{device.viewModel.location.longitude}}"
data-long="{{device.viewModel.location.longitude}}" aria-controls="device_location_tab">
aria-controls="device_location"> <i class="icon fw fw-map-location"></i><span class="hidden-sm">Device Location</span>
<i class="icon fw fw-map-location"></i> Device Location </a>
</a> </li>
</li> <li role="presentation" class="list-group-item">
<li class="list-group-item"> <a href="#installed_applications_tab" role="tab" data-toggle="tab" aria-controls="installed_applications_tab">
<a href="#installed_applications" role="tab" data-toggle="tab" aria-controls="installed_applications"> <i class="icon fw fw-application"></i><span class="hidden-sm">Installed Applications</span>
<i class="icon fw fw-application"></i> Installed Applications </a>
</a> </li>
</li> <li role="presentation" class="list-group-item">
<li class="list-group-item"> <a href="#event_log_tab" role="tab" data-toggle="tab" aria-controls="event_log_tab">
<a href="#event_log" role="tab" data-toggle="tab" aria-controls="event_log"> <i class="icon fw fw-text"></i><span class="hidden-sm">Operations Log</span>
<i class="icon fw fw-text"></i> Operations Log </a>
</a> </li>
</li> </ul>
</ul> </div>
</div> {{#defineZone "device-detail-properties"}}
<div class="media-body remove-padding-xs"> <div class="media-body add-padding-left-5x remove-padding-xs">
{{#defineZone "device-detail-properties"}} <div class="panel-group tab-content remove-padding" id="tabs" role="tablist" aria-multiselectable="true">
<div class="media-body add-padding-left-5x remove-padding-xs"> <div class="arrow-left hidden-xs"></div>
<div class="panel-group tab-content" id="tabs">
<div class="arrow-left hidden-xs"></div>
<div class="panel panel-default tab-pane fade in active fade-in-xs visible-block" <div class="panel panel-default" role="tabpanel" id="device_details_tab">
id="device_details" role="tabpanel" <div class="panel-heading visible-xs collapsed" id="device_details">
aria-labelledby="device_details"> <h4 class="panel-title">
<div class="panel-heading dropup visible-xs" role="tab" id="tab1" data-toggle="collapse" <a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
data-target="#tabContent1" aria-expanded="false" data-parent="#tabs"> <i class="fw fw-mobile fw-2x"></i>
<h4 class="panel-title"> Device Details
<i class="fw fw-map-location fw-2x"></i> <i class="caret-updown fw fw-down"></i>
Device Details </a>
<i class="caret-updown fw fw-sort-up"></i> </h4>
</h4> </div>
</div> <div class="panel-heading display-none-xs">Device Details</div>
<div class="panel-heading display-none-xs">Device Details</div> <div id="loading-content" class="col-centered">
<div id="loading-content" class="col-centered"> <i class="fw fw-settings fw-spin fw-2x"></i> Loading Device Details...
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<i class="fw fw-settings fw-spin fw-2x"></i>&nbsp;&nbsp;&nbsp;Loading Device Details . . .<br> </div>
</div> <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="device_details">
<div class="panel-body collapse display-block-sm display-block-md display-block-lg in" <div class="panel-body ">
id="tabContent1"> <div class="device-detail-body">
<div class="device-detail-body hidden"> <!-- device summary -->
<!-- device summary --> {{#equal device.type "windows"}}
{{#equal device.type "windows"}} <div class="message message-info">
<div class="panel-body"> <h4 class="remove-margin"><i class="icon fw fw-info"></i>Not available yet</h4>
Not available yet </div>
</div> {{/equal}}
<br class="c-both"/> {{#if device.viewModel.BatteryLevel}}
{{/equal}} <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
{{#if device.viewModel.BatteryLevel}} <div class="col-md-12">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"> <div class="wr-stats-board-tile">
<div class="col-md-12"> <div class="tile-name">BATTERY</div>
<div class="wr-stats-board-tile"> <div>
<div class="tile-name">BATTERY</div> <div class="tile-icon"><i class="fw fw-battery"></i></div>
<div> <div class="tile-stats">
<div class="tile-icon"><i class="fw fw-battery"></i></div> {{device.viewModel.BatteryLevel}} %
<div class="tile-stats"> </div>
{{device.viewModel.BatteryLevel}} %
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> {{/if}}
{{/if}} {{#if device.viewModel.DeviceCapacity}}
{{#if device.viewModel.DeviceCapacity}} <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"> <div class="col-md-12">
<div class="col-md-12"> <div class="wr-stats-board-tile">
<div class="wr-stats-board-tile"> <div class="tile-name">STORAGE</div>
<div class="tile-name">STORAGE</div> <div>
<div> <div class="tile-icon"><i class="fw fw-hdd"></i></div>
<div class="tile-icon"><i class="fw fw-hdd"></i></div> <div class="tile-stats">
<div class="tile-stats"> {{device.viewModel.DeviceCapacityPercentage}} %
{{device.viewModel.DeviceCapacityPercentage}} % <span class="tile-stats-free">
<span class="tile-stats-free"> {{device.viewModel.AvailableDeviceCapacity}} GB Free
{{device.viewModel.AvailableDeviceCapacity}} GB Free </span>
</span> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> {{/if}}
{{/if}} {{#if device.viewModel.internal_memory.FreeCapacity}}
{{#if device.viewModel.internal_memory.FreeCapacity}} <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"> <div class="col-md-12">
<div class="col-md-12"> <div class="wr-stats-board-tile">
<div class="wr-stats-board-tile"> <div class="tile-name">LOCAL STORAGE</div>
<div class="tile-name">LOCAL STORAGE</div> <div>
<div> <div class="tile-icon"><i class="fw fw-hdd"></i></div>
<div class="tile-icon"><i class="fw fw-hdd"></i></div> <div class="tile-stats">
<div class="tile-stats"> {{device.viewModel.internal_memory.DeviceCapacityPercentage}} %
{{device.viewModel.internal_memory.DeviceCapacityPercentage}} % <span class="tile-stats-free">
<span class="tile-stats-free"> {{device.viewModel.internal_memory.FreeCapacity}} GB Free
{{device.viewModel.internal_memory.FreeCapacity}} GB Free </span>
</span> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> {{/if}}
{{/if}} {{#if device.viewModel.external_memory.FreeCapacity}}
{{#if device.viewModel.external_memory.FreeCapacity}} <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"> <div class="col-md-12">
<div class="col-md-12"> <div class="wr-stats-board-tile">
<div class="wr-stats-board-tile"> <div class="tile-name">EXTERNAL STORAGE</div>
<div class="tile-name">EXTERNAL STORAGE</div> <div>
<div> <div class="tile-icon"><i class="fw fw-usb-drive"></i></div>
<div class="tile-icon"><i class="fw fw-usb-drive"></i></div> <div class="tile-stats">
<div class="tile-stats"> {{device.viewModel.external_memory.DeviceCapacityPercentage}} %
{{device.viewModel.external_memory.DeviceCapacityPercentage}} % <span class="tile-stats-free">
<span class="tile-stats-free"> {{device.viewModel.external_memory.FreeCapacity}} GB Free
{{device.viewModel.external_memory.FreeCapacity}} GB Free </span>
</span> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> {{/if}}
{{/if}} </div>
</div>
</div> </div>
</div> </div>
</div> <div class="panel panel-default visible-xs-block" role="tabpanel" id="policy_compliance_tab">
<div class="panel panel-default tab-pane fade fade-in-xs visible-block" <div class="panel-heading visible-xs collapsed" id="policy_compliance">
id="policy_compliance"> <h4 class="panel-title">
<div class="panel-heading dropdown visible-xs collapsed" role="tab" id="tab2" <a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseTwo" aria-expanded="true" aria-controls="collapseTwo">
data-toggle="collapse" data-target="#tabContent2" aria-expanded="false" <i class="fw fw-policy fw-2x"></i>
data-parent="#tabs"> Policy Compliance
<h4 class="panel-title"><i class="fw fw-text fw-2x"></i> <i class="caret-updown fw fw-down"></i>
</a>
</h4>
</div>
<div class="panel-heading display-none-xs">
Policy Compliance Policy Compliance
<i class="caret-updown fw fw-sort-down"></i> <span>
</h4> <a href="#" id="refresh-policy">
</div> <i class="fw fw-refresh"></i>
<div class="panel-heading display-none-xs"> </a>
Policy Compliance </span>
&nbsp;&nbsp; </div>
<span> <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="policy_compliance">
<a href="#" id="refresh-policy"> <div class="panel-body ">
<i class="fw fw-refresh"></i> <span class="visible-xs add-padding-2x text-right">
</a> <a href="#" id="refresh-policy">
</span> <i class="fw fw-refresh"></i>
</div> </a>
<div id="policy-spinner" class="wr-advance-operations-init hidden"> </span>
<br><br> <div id="policy-spinner" class="wr-advance-operations-init hidden">
&nbsp;&nbsp;&nbsp;&nbsp; <i class="fw fw-settings fw-spin fw-2x"></i> Loading Policy Compliance...
<i class="fw fw-settings fw-spin fw-2x"></i> </div>
&nbsp;&nbsp;&nbsp; <div id="policy-list-container">
Loading Policy Compliance . . . <div class="message message-info">
<br> <h4 class="remove-margin"><i class="icon fw fw-info"></i>There is no active policy for this device.</h4>
<br> </div>
</div> </div>
<div class="panel-body collapse display-block-sm display-block-md display-block-lg" id="tabContent2">
<div id="policy-list-container">
<div class="panel-body">
There is no active policy for this device.
</div> </div>
<br class="c-both"/>
</div> </div>
</div> </div>
</div> <div class="panel panel-default visible-xs-block" role="tabpanel" id="device_location_tab">
<div class="panel panel-default tab-pane fade fade-in-xs visible-block" <div class="panel-heading visible-xs collapsed" id="device_location">
id="device_location"> <h4 class="panel-title">
<div class="panel-heading dropdown visible-xs collapsed" role="tab" id="tab3" <a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseThree" aria-expanded="true" aria-controls="collapseThree">
data-toggle="collapse" data-target="#tabContent3" aria-expanded="false" <i class="fw fw-map-location fw-2x"></i>
data-parent="#tabs"> Device Location
<h4 class="panel-title"> <i class="caret-updown fw fw-down"></i>
<i class="fw fw-text fw-2x"></i> </a>
Device Location </h4>
<i class="caret-updown fw fw-sort-down"></i>
</h4>
</div>
<div class="panel-heading display-none-xs">Device Location</div>
<div class="panel-body collapse display-block-sm display-block-md display-block-lg"
id="tabContent3">
<div id="device-location"
data-lat="{{device.viewModel.location.latitude}}"
data-long="{{device.viewModel.location.longitude}}"
class="panel-body">
</div> </div>
<div id="map-error" class="panel-body" style="margin: auto;"> <div class="panel-heading display-none-xs">Device Location</div>
Device location cannot be retrieved. <div id="collapseThree" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="device_location">
<div class="panel-body">
<div id="map-error" class="message message-danger">
<h4 class="remove-margin"><i class="icon fw fw-error"></i>Device location cannot be retrieved.</h4>
</div>
<div id="device-location"
data-lat="{{device.viewModel.location.latitude}}"
data-long="{{device.viewModel.location.longitude}}">
</div>
</div>
</div> </div>
<br class="c-both"/>
</div> </div>
</div> <div class="panel panel-default visible-xs-block" role="tabpanel" id="installed_applications_tab">
<div class="panel panel-default tab-pane fade fade-in-xs visible-block" <div class="panel-heading visible-xs collapsed" id="installed_applications">
id="installed_applications"> <h4 class="panel-title">
<div class="panel-heading dropdown visible-xs collapsed" role="tab" id="tab4" <a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseFour" aria-expanded="true" aria-controls="collapseFour">
data-toggle="collapse" data-target="#tabContent4" aria-expanded="false" <i class="fw fw-application fw-2x"></i>
data-parent="#tabs"> Installed Applications
<h4 class="panel-title"> <i class="caret-updown fw fw-down"></i>
<i class="fw fw-text fw-2x"></i> </a>
</h4>
</div>
<div class="panel-heading display-none-xs">
Installed Applications Installed Applications
<i class="caret-updown fw fw-sort-down"></i></h4> <span>
</div> <a href="#" id="refresh-apps">
<div class="panel-heading display-none-xs"> <i class="fw fw-refresh"></i>
Installed Applications </a>
&nbsp;&nbsp; </span>
<span>
<a href="#" id="refresh-apps">
<i class="fw fw-refresh"></i>
</a>
</span>
</div>
<div class="panel-body collapse display-block-sm display-block-md display-block-lg"
id="tabContent4">
<div id="apps-spinner" class="wr-advance-operations-init hidden">
<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;<i class="fw fw-settings fw-spin fw-2x"></i>
&nbsp;&nbsp;&nbsp;Loading Applications List . . .<br><br>
</div> </div>
<div id="applications-list-container"> <div id="collapseFour" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="installed_applications">
<div class="panel-body"> <div class="panel-body ">
<br> <span class="visible-xs add-padding-2x text-right">
<p class="fw-warning"> <a href="#" id="refresh-apps">
No applications found. please try refreshing the list in a while. <i class="fw fw-refresh"></i>
<p> </a>
</span>
<div id="apps-spinner" class="wr-advance-operations-init hidden">
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Applications List...
</div>
<div id="applications-list-container">
<div class="message message-info">
<h4><i class="icon fw fw-info"></i>No applications found.</h4>
<p>Please try refreshing the list in a while.</p>
</div>
</div>
</div> </div>
<br class="c-both"/>
</div> </div>
</div> </div>
</div> <div class="panel panel-default visible-xs-block" role="tabpanel" id="event_log_tab">
<div class="panel panel-default tab-pane fade fade-in-xs visible-block" id="event_log"> <div class="panel-heading visible-xs collapsed" id="event_log">
<div class="panel-heading dropdown visible-xs collapsed" role="tab" id="tab5" <h4 class="panel-title">
data-toggle="collapse" data-target="#tabContent5" aria-expanded="false" <a role="button" data-toggle="collapse" data-parent="#tabs" href="#collapseFive" aria-expanded="true" aria-controls="collapseFive">
data-parent="#tabs"> <i class="fw fw-text fw-2x"></i>
<h4 class="panel-title"> Operations Logs
<i class="fw fw-text fw-2x"></i> <i class="caret-updown fw fw-down"></i>
Operations Logs </a>
<i class="caret-updown fw fw-sort-down"></i> </h4>
</h4> </div>
</div> <div class="panel-heading display-none-xs">
<div class="panel-heading display-none-xs"> Operations Logs
Operations Logs <span>
&nbsp;&nbsp; <a href="#" id="refresh-operations">
<span> <i class="fw fw-refresh"></i>
<a href="#" id="refresh-operations"> </a>
<i class="fw fw-refresh"></i> </span>
</a>
</span>
</div>
<div class="panel-body collapse display-block-sm display-block-md display-block-lg"
id="tabContent5">
<div id="operations-spinner" class="wr-advance-operations-init hidden">
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<i class="fw fw-settings fw-spin fw-2x"></i>&nbsp;&nbsp;&nbsp;
Loading Operations Log . . .
<br><br>
</div> </div>
<div id="operations-log-container"> <div id="collapseFive" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="event_log">
<div class="panel-body"> <div class="panel-body">
There are no operations, performed yet on this device. <span class="visible-xs add-padding-2x text-right">
<a href="#" id="refresh-operations">
<i class="fw fw-refresh"></i>
</a>
</span>
<div id="operations-spinner" class="wr-advance-operations-init hidden">
<i class="fw fw-settings fw-spin fw-2x"></i> Loading Operations Log...
</div>
<div id="operations-log-container">
<div class="message message-info">
<h4 class="remove-margin"><i class="icon fw fw-info"></i>There are no operations, performed yet on this device.</h4>
</div>
</div>
<table class="table table-striped table-hover table-bordered display data-table" id="operations-log-table">
<thead>
<tr class="sort-row">
<th>Operation Code</th>
<th>Status</th>
<th>Request created at</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div> </div>
<br class="c-both"/>
</div> </div>
<table class="table table-striped table-hover table-bordered display data-table"
id="operations-log-table">
<thead>
<tr class="sort-row">
<th>Operation Code</th>
<th>Status</th>
<th>Request created at</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div> </div>
</div> </div>
</div> </div>
</div> {{/defineZone}}
</div> </div>
{{/defineZone}} </div>
</div>
</div>
{{else}} {{else}}
<h1 class="page-sub-title"> <h1 class="page-sub-title">
Permission Denied Permission Denied

@ -182,7 +182,7 @@
<br class="c-both"/> <br class="c-both"/>
</div> </div>
</div> </div>
{{/if}}} {{/if}}
<br> <br>
<label class="wr-input-label" title=""> <label class="wr-input-label" title="">
Set an action upon non-compliance Set an action upon non-compliance

@ -130,7 +130,7 @@ function loadNewNotifications() {
viewModel["notifications"] = responsePayload["notifications"]; viewModel["notifications"] = responsePayload["notifications"];
$(messageSideBar).html(template(viewModel)); $(messageSideBar).html(template(viewModel));
} else { } else {
$(messageSideBar).html('<div class="message message-info message-no-new"><h4><i class="icon fw fw-info"></i>No new notifications found...</h4></div>'); $(messageSideBar).html('<div class="alert alert-info" role="alert"><i class="icon fw fw-info"></i>No new notifications found...</div>');
} }
} else { } else {
$(messageSideBar).html("<h4 class ='message-danger'>Unexpected error " + $(messageSideBar).html("<h4 class ='message-danger'>Unexpected error " +

Loading…
Cancel
Save