forked from community/device-mgt-plugins
Merge with upstream master branch See merge request entgra/carbon-device-mgt-plugins!49revert-dabc3590
commit
35f0fd0ceb
Binary file not shown.
@ -0,0 +1,184 @@
|
||||
{{!
|
||||
Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
|
||||
|
||||
Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
|
||||
Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
}}
|
||||
{{#if controlOperations}}
|
||||
<div class="wr-operations" style="height: 87px; display: block;"
|
||||
xmlns="http://www.w3.org/1999/html">
|
||||
<style>
|
||||
::-webkit-input-placeholder {
|
||||
color: #B8B8B8;
|
||||
}
|
||||
|
||||
::-moz-placeholder {
|
||||
color: #B8B8B8;
|
||||
}
|
||||
|
||||
:-ms-input-placeholder {
|
||||
color: #B8B8B8;
|
||||
}
|
||||
|
||||
input:-moz-placeholder {
|
||||
color: #B8B8B8;
|
||||
}
|
||||
</style>
|
||||
{{#each controlOperations}}
|
||||
<a {{#unless isDisabled}} href="javascript:operationSelect('{{operation}}')" {{else}} href="javascript:void(0)" class="op-disabled" title="{{disabledText}}" data-toggle="tooltip" {{/unless}}>
|
||||
{{#if iconFont}}
|
||||
<i class="fw {{iconFont}}"></i>
|
||||
{{else}}
|
||||
{{#if icon}}
|
||||
<img src="{{@app.context}}/{{icon}}" style="width: 48px;"/>
|
||||
{{else}}
|
||||
<i class="fw fw-service"></i>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
<span>{{name}}</span>
|
||||
</a>
|
||||
|
||||
<div class="operation" data-operation-code="{{operation}}">
|
||||
<div class="content">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw {{iconFont}} fw-stack-1x"></i>
|
||||
</span>
|
||||
{{name}}
|
||||
<br>
|
||||
</h3>
|
||||
<h4>
|
||||
{{description}}
|
||||
<br>
|
||||
</h4>
|
||||
|
||||
<div id="operation-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
|
||||
<div id="operation-warn-msg" class="info alert-info hidden" role="alert">
|
||||
<i class="icon fw fw-info"></i><span></span>
|
||||
</div>
|
||||
|
||||
<div id="operation-form">
|
||||
<form id="form-{{operation}}" action="{{params.0.uri}}" method="{{params.0.method}}"
|
||||
style="padding-bottom: 20px;"
|
||||
data-payload="{{payload}}"
|
||||
data-device-id="{{../devices}}"
|
||||
data-content-type="{{params.0.contentType}}"
|
||||
data-operation-code="{{operation}}">
|
||||
{{#each params.0.pathParams}}
|
||||
<input type="{{type}}" id="{{name}}" placeholder="{{name}}" class="form-control"
|
||||
data-param-type="path" value="{{value}}"/>
|
||||
<br/>
|
||||
{{/each}}
|
||||
{{#each params.0.formParams}}
|
||||
<input type="{{type}}" id="{{name}}" name="{{name}}" placeholder="{{name}}"
|
||||
class="form-control" data-param-type="form" value="{{value}}"/>
|
||||
<br/>
|
||||
{{/each}}
|
||||
{{#each params.0.queryParams}}
|
||||
<input type="{{type}}" id="{{name}}" placeholder="{{name}}" class="form-control"
|
||||
data-param-type="query" value="{{value}}"/>
|
||||
<br/>
|
||||
{{/each}}
|
||||
{{#each uiParams}}
|
||||
{{#equal this.type "select"}}
|
||||
<div class="form-group">
|
||||
<select class="form-control" id="{{this.id}}">
|
||||
{{#each this.value}}
|
||||
<option>{{this}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
{{/equal}}
|
||||
{{#equal this.type "radio"}}
|
||||
<input type="radio" id="{{this.id}}"
|
||||
name="{{this.name}}"
|
||||
value="{{this.value}}"
|
||||
class="radio"
|
||||
checked="checked"
|
||||
data-param-type="form"/>
|
||||
{{this.value}}
|
||||
{{/equal}}
|
||||
{{#equal this.type "checkbox"}}
|
||||
<input type="{{this.type}}" id="{{this.id}}"
|
||||
class="checkbox"
|
||||
placeholder="{{this.label}}"
|
||||
data-param-type="form"/>
|
||||
{{this.label}}
|
||||
<br/>
|
||||
{{/equal}}
|
||||
{{#equal this.type "password"}}
|
||||
<input type="{{this.type}}" id="{{this.id}}"
|
||||
placeholder="{{this.label}}" class="form-control"
|
||||
data-param-type="form" value=""/>
|
||||
<br/>
|
||||
{{/equal}}
|
||||
{{#equal this.type "text"}}
|
||||
<input type="{{this.type}}" id="{{this.id}}"
|
||||
placeholder="{{this.label}}" class="form-control"
|
||||
data-param-type="form" value=""/>
|
||||
<br/>
|
||||
{{/equal}}
|
||||
{{#equal this.type "info"}}
|
||||
<div class="form-group" id="{{this.id}}">
|
||||
<span class="help-block">
|
||||
{{this.value}}
|
||||
</span>
|
||||
</div>
|
||||
{{/equal}}
|
||||
{{/each}}
|
||||
<button type="button" onclick="submitForm('form-{{operation}}')"
|
||||
class="btn btn-default btnSend">Send
|
||||
to Device</button>
|
||||
<label class="wr-input-label hidden"><i
|
||||
class="fw fw-lifecycle fw-spin fw-2x lblSending"></i> Sending..</label>
|
||||
<label class="wr-input-label hidden"><i
|
||||
class="fw fw-check fw-2x lblSent"></i> Sent</label>
|
||||
<i class="fw fw-wso2-logo fw-pulse fw-2x hidden lbl-execution"> Executing Operation </i>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div id="operation-response-template" style="display: none">
|
||||
<div class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack center-block">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i id="status-icon" class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
<br>
|
||||
</h3>
|
||||
<h4>
|
||||
<span id="title"></span>
|
||||
<br>
|
||||
</h4>
|
||||
<span id="description"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Binary file not shown.
@ -1,336 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* you may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.mobile.android.impl.dao.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileDeviceManagementDAOException;
|
||||
import org.wso2.carbon.device.mgt.mobile.android.impl.dao.MobileFeatureDAO;
|
||||
import org.wso2.carbon.device.mgt.mobile.android.impl.dao.util.MobileDeviceManagementDAOUtil;
|
||||
import org.wso2.carbon.device.mgt.mobile.android.impl.dto.MobileFeature;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Implementation of MobileFeatureDAO.
|
||||
*/
|
||||
public class MobileFeatureDAOImpl implements MobileFeatureDAO {
|
||||
|
||||
private DataSource dataSource;
|
||||
private static final Log log = LogFactory.getLog(MobileFeatureDAOImpl.class);
|
||||
|
||||
public MobileFeatureDAOImpl(DataSource dataSource) {
|
||||
this.dataSource = dataSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addFeature(MobileFeature mobileFeature)
|
||||
throws MobileDeviceManagementDAOException {
|
||||
boolean status = false;
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String createDBQuery =
|
||||
"INSERT INTO AD_FEATURE(CODE, NAME, DESCRIPTION, DEVICE_TYPE) VALUES (?, ?, ?, ?)";
|
||||
|
||||
stmt = conn.prepareStatement(createDBQuery);
|
||||
stmt.setString(1, mobileFeature.getCode());
|
||||
stmt.setString(2, mobileFeature.getName());
|
||||
stmt.setString(3, mobileFeature.getDescription());
|
||||
stmt.setString(4, mobileFeature.getDeviceType());
|
||||
int rows = stmt.executeUpdate();
|
||||
if (rows > 0) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Added a new MobileFeature " + mobileFeature.getCode() + " to the MDM database.");
|
||||
}
|
||||
status = true;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while adding feature code - '" +
|
||||
mobileFeature.getCode() + "' to feature table";
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
MobileDeviceManagementDAOUtil.cleanupResources(conn, stmt, null);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addFeatures(List<MobileFeature> mobileFeatures) throws MobileDeviceManagementDAOException {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateFeature(MobileFeature mobileFeature)
|
||||
throws MobileDeviceManagementDAOException {
|
||||
boolean status = false;
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String updateDBQuery =
|
||||
"UPDATE AD_FEATURE SET CODE = ?, NAME = ?, DESCRIPTION = ?, DEVICE_TYPE = ?" +
|
||||
" WHERE ID = ?";
|
||||
stmt = conn.prepareStatement(updateDBQuery);
|
||||
stmt.setString(1, mobileFeature.getCode());
|
||||
stmt.setString(2, mobileFeature.getName());
|
||||
stmt.setString(3, mobileFeature.getDescription());
|
||||
stmt.setString(4, mobileFeature.getDeviceType());
|
||||
stmt.setInt(5, mobileFeature.getId());
|
||||
int rows = stmt.executeUpdate();
|
||||
if (rows > 0) {
|
||||
status = true;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Updated MobileFeature " + mobileFeature.getCode());
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while updating the feature with feature code - '" +
|
||||
mobileFeature.getId() + "'";
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
MobileDeviceManagementDAOUtil.cleanupResources(conn, stmt, null);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteFeatureByCode(String mblFeatureCode)
|
||||
throws MobileDeviceManagementDAOException {
|
||||
boolean status = false;
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String deleteDBQuery =
|
||||
"DELETE FROM AD_FEATURE WHERE CODE = ?";
|
||||
stmt = conn.prepareStatement(deleteDBQuery);
|
||||
stmt.setString(1, mblFeatureCode);
|
||||
int rows = stmt.executeUpdate();
|
||||
if (rows > 0) {
|
||||
status = true;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Deleted MobileFeature code " + mblFeatureCode + " from the MDM database.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while deleting feature with code - " + mblFeatureCode;
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
MobileDeviceManagementDAOUtil.cleanupResources(conn, stmt, null);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteFeatureById(int mblFeatureId)
|
||||
throws MobileDeviceManagementDAOException {
|
||||
boolean status = false;
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String deleteDBQuery =
|
||||
"DELETE FROM AD_FEATURE WHERE ID = ?";
|
||||
stmt = conn.prepareStatement(deleteDBQuery);
|
||||
stmt.setInt(1, mblFeatureId);
|
||||
int rows = stmt.executeUpdate();
|
||||
if (rows > 0) {
|
||||
status = true;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Deleted MobileFeature id " + mblFeatureId + " from the MDM database.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while deleting feature with id - " + mblFeatureId;
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
MobileDeviceManagementDAOUtil.cleanupResources(conn, stmt, null);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MobileFeature getFeatureByCode(String mblFeatureCode)
|
||||
throws MobileDeviceManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
MobileFeature mobileFeature = null;
|
||||
ResultSet resultSet = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String selectDBQuery =
|
||||
"SELECT ID, CODE, NAME, DESCRIPTION, DEVICE_TYPE FROM AD_FEATURE " +
|
||||
"WHERE CODE = ?";
|
||||
stmt = conn.prepareStatement(selectDBQuery);
|
||||
stmt.setString(1, mblFeatureCode);
|
||||
resultSet = stmt.executeQuery();
|
||||
if (resultSet.next()) {
|
||||
mobileFeature = new MobileFeature();
|
||||
mobileFeature.setId(resultSet.getInt(1));
|
||||
mobileFeature.setCode(resultSet.getString(2));
|
||||
mobileFeature.setName(resultSet.getString(3));
|
||||
mobileFeature.setDescription(resultSet.getString(4));
|
||||
mobileFeature.setDeviceType(resultSet.getString(5));
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Fetched MobileFeature " + mblFeatureCode + " from the MDM database.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while fetching feature code - '" + mblFeatureCode + "'";
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
MobileDeviceManagementDAOUtil.cleanupResources(conn, stmt, resultSet);
|
||||
}
|
||||
return mobileFeature;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MobileFeature getFeatureById(int mblFeatureId)
|
||||
throws MobileDeviceManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
MobileFeature mobileFeature = null;
|
||||
ResultSet resultSet = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String selectDBQuery =
|
||||
"SELECT ID, CODE, NAME, DESCRIPTION, DEVICE_TYPE FROM AD_FEATURE" +
|
||||
" WHERE ID = ?";
|
||||
stmt = conn.prepareStatement(selectDBQuery);
|
||||
stmt.setInt(1, mblFeatureId);
|
||||
resultSet = stmt.executeQuery();
|
||||
if (resultSet.next()) {
|
||||
mobileFeature = new MobileFeature();
|
||||
mobileFeature.setId(resultSet.getInt(1));
|
||||
mobileFeature.setCode(resultSet.getString(2));
|
||||
mobileFeature.setName(resultSet.getString(3));
|
||||
mobileFeature.setDescription(resultSet.getString(4));
|
||||
mobileFeature.setDeviceType(resultSet.getString(5));
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Fetched MobileFeatureId" + mblFeatureId + " from the MDM database.");
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while fetching feature id - '" + mblFeatureId + "'";
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
MobileDeviceManagementDAOUtil.cleanupResources(conn, stmt, resultSet);
|
||||
}
|
||||
return mobileFeature;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MobileFeature> getAllFeatures() throws MobileDeviceManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
MobileFeature mobileFeature;
|
||||
List<MobileFeature> mobileFeatures = new ArrayList<MobileFeature>();
|
||||
ResultSet resultSet = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String selectDBQuery =
|
||||
"SELECT ID, CODE, NAME, DESCRIPTION, DEVICE_TYPE FROM AD_FEATURE";
|
||||
stmt = conn.prepareStatement(selectDBQuery);
|
||||
resultSet = stmt.executeQuery();
|
||||
while (resultSet.next()) {
|
||||
mobileFeature = new MobileFeature();
|
||||
mobileFeature.setId(resultSet.getInt(1));
|
||||
mobileFeature.setCode(resultSet.getString(2));
|
||||
mobileFeature.setName(resultSet.getString(3));
|
||||
mobileFeature.setDescription(resultSet.getString(4));
|
||||
mobileFeature.setDeviceType(resultSet.getString(5));
|
||||
mobileFeatures.add(mobileFeature);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Fetched all MobileFeatures from the MDM database.");
|
||||
}
|
||||
return mobileFeatures;
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while fetching all features.'";
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
MobileDeviceManagementDAOUtil.cleanupResources(conn, stmt, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MobileFeature> getFeatureByDeviceType(String deviceType) throws MobileDeviceManagementDAOException {
|
||||
Connection conn = null;
|
||||
PreparedStatement stmt = null;
|
||||
MobileFeature mobileFeature;
|
||||
List<MobileFeature> mobileFeatures = new ArrayList<>();
|
||||
ResultSet resultSet = null;
|
||||
try {
|
||||
conn = this.getConnection();
|
||||
String selectDBQuery =
|
||||
"SELECT ID, CODE, NAME, DESCRIPTION, DEVICE_TYPE FROM AD_FEATURE" +
|
||||
" WHERE DEVICE_TYPE = ?";
|
||||
stmt = conn.prepareStatement(selectDBQuery);
|
||||
stmt.setString(1, deviceType);
|
||||
resultSet = stmt.executeQuery();
|
||||
while (resultSet.next()) {
|
||||
mobileFeature = new MobileFeature();
|
||||
mobileFeature.setId(resultSet.getInt(1));
|
||||
mobileFeature.setCode(resultSet.getString(2));
|
||||
mobileFeature.setName(resultSet.getString(3));
|
||||
mobileFeature.setDescription(resultSet.getString(4));
|
||||
mobileFeature.setDeviceType(resultSet.getString(5));
|
||||
mobileFeatures.add(mobileFeature);
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Fetched all MobileFeatures of type " + deviceType + " from the MDM" +
|
||||
" database.");
|
||||
}
|
||||
return mobileFeatures;
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while fetching all features.'";
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
} finally {
|
||||
MobileDeviceManagementDAOUtil.cleanupResources(conn, stmt, resultSet);
|
||||
}
|
||||
}
|
||||
|
||||
private Connection getConnection() throws MobileDeviceManagementDAOException {
|
||||
try {
|
||||
return dataSource.getConnection();
|
||||
} catch (SQLException e) {
|
||||
String msg = "Error occurred while obtaining a connection from the mobile specific " +
|
||||
"datasource.";
|
||||
log.error(msg, e);
|
||||
throw new MobileDeviceManagementDAOException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
function onRequest(context) {
|
||||
var log = new Log("operation.js");
|
||||
var operationModule = require("/app/modules/business-controllers/operation.js")["operationModule"];
|
||||
var device = context.unit.params.device;
|
||||
var autoCompleteParams = context.unit.params.autoCompleteParams;
|
||||
var encodedFeaturePayloads=context.unit.params.encodedFeaturePayloads;
|
||||
var controlOperations = operationModule.getControlOperations(device);
|
||||
var queryParams = [];
|
||||
var formParams = [];
|
||||
var pathParams = [];
|
||||
for (var i = 0; i < controlOperations.length; i++) {
|
||||
var currentParamList = controlOperations[i]["params"];
|
||||
var uiParamList = controlOperations[i]["uiParams"];
|
||||
for (var j = 0; j < currentParamList.length; j++) {
|
||||
var currentParam = currentParamList[j];
|
||||
currentParamList[j]["formParams"] = processParams(currentParam["formParams"], autoCompleteParams);
|
||||
currentParamList[j]["queryParams"] = processParams(currentParam["queryParams"], autoCompleteParams);
|
||||
currentParamList[j]["pathParams"] = processParams(currentParam["pathParams"], autoCompleteParams);
|
||||
}
|
||||
controlOperations[i]["uiParams"] = uiParamList;
|
||||
if (encodedFeaturePayloads) {
|
||||
controlOperations[i]["payload"] = getPayload(encodedFeaturePayloads, controlOperations[i]["operation"]);
|
||||
}
|
||||
}
|
||||
return {"control_operations": controlOperations, "device": device};
|
||||
}
|
||||
|
||||
function processParams(paramsList, autoCompleteParams) {
|
||||
for (var i = 0; i < paramsList.length; i++) {
|
||||
var paramName = paramsList[i];
|
||||
var paramValue = "";
|
||||
var paramType = "text";
|
||||
for (var k = 0; k < autoCompleteParams.length; k++) {
|
||||
if (paramName == autoCompleteParams[k].name) {
|
||||
paramValue = autoCompleteParams[k].value;
|
||||
paramType = "hidden";
|
||||
}
|
||||
}
|
||||
paramsList[i] = {"name": paramName, "value": paramValue, "type": paramType};
|
||||
}
|
||||
return paramsList;
|
||||
}
|
||||
|
||||
function getPayload(featuresPayload, featureCode){
|
||||
var featuresJSONPayloads = JSON.parse(featuresPayload);
|
||||
return featuresJSONPayloads[featureCode];
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"version": "1.0.0"
|
||||
}
|
@ -1,227 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* On operation click function.
|
||||
* @param selection: Selected operation
|
||||
*/
|
||||
function operationSelect(selection) {
|
||||
$(modalPopupContent).addClass("operation-data");
|
||||
$(modalPopupContent).html($(" .operation[data-operation-code=" + selection + "]").html());
|
||||
$(modalPopupContent).data("operation-code", selection);
|
||||
showPopup();
|
||||
}
|
||||
|
||||
function submitForm(formId) {
|
||||
var form = $("#" + formId);
|
||||
var uri = form.attr("action");
|
||||
var deviceId = form.data("device-id");
|
||||
var contentType = form.data("content-type");
|
||||
var operationCode = form.data("operation-code");
|
||||
var uriencodedQueryStr = "";
|
||||
var uriencodedFormStr = "";
|
||||
var payload = {};
|
||||
form.find("input").each(function () {
|
||||
var input = $(this);
|
||||
if (input.data("param-type") == "path") {
|
||||
uri = uri.replace("{" + input.attr("id") + "}", input.val());
|
||||
} else if (input.data("param-type") == "query") {
|
||||
var prefix = (uriencodedQueryStr == "") ? "?" : "&";
|
||||
uriencodedQueryStr += prefix + input.attr("id") + "=" + input.val();
|
||||
} else if (input.data("param-type") == "form") {
|
||||
var prefix = (uriencodedFormStr == "") ? "" : "&";
|
||||
uriencodedFormStr += prefix + input.attr("id") + "=" + input.val();
|
||||
if(input.attr("type") == "text"){
|
||||
payload[input.attr("id")] = input.val();
|
||||
} else if(input.attr("type") == "checkbox"){
|
||||
payload[input.attr("id")] = input.is(":checked");
|
||||
}
|
||||
}
|
||||
});
|
||||
uri += uriencodedQueryStr;
|
||||
var httpMethod = form.attr("method").toUpperCase();
|
||||
//var contentType = form.attr("enctype");
|
||||
|
||||
if (contentType == undefined || contentType == "") {
|
||||
contentType = "application/x-www-form-urlencoded";
|
||||
payload = uriencodedFormStr;
|
||||
}
|
||||
|
||||
//setting responses callbacks
|
||||
var defaultStatusClasses = "fw fw-stack-1x";
|
||||
var content = $("#operation-response-template").find(".content");
|
||||
var title = content.find("#title");
|
||||
var statusIcon = content.find("#status-icon");
|
||||
var description = content.find("#description");
|
||||
description.html("");
|
||||
var successCallBack = function (response) {
|
||||
var res = response;
|
||||
try {
|
||||
res = JSON.parse(response).messageFromServer;
|
||||
} catch (err) {
|
||||
//do nothing
|
||||
}
|
||||
title.html("Operation Triggered!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-check");
|
||||
description.html(res);
|
||||
console.log("success!");
|
||||
$(modalPopupContent).html(content.html());
|
||||
};
|
||||
var errorCallBack = function (response) {
|
||||
console.log(response);
|
||||
title.html("An Error Occurred!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-error");
|
||||
var reason = (response.responseText == "null")?response.statusText:response.responseText;
|
||||
try {
|
||||
reason = JSON.parse(reason).message;
|
||||
} catch (err) {
|
||||
//do nothing
|
||||
}
|
||||
description.html(reason);
|
||||
console.log("Error!");
|
||||
$(modalPopupContent).html(content.html());
|
||||
};
|
||||
//executing http request
|
||||
if (httpMethod == "GET") {
|
||||
invokerUtil.get(uri, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "POST") {
|
||||
var deviceList = [deviceId];
|
||||
payload = generatePayload(operationCode, payload, deviceList);
|
||||
invokerUtil.post(uri, payload, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "PUT") {
|
||||
invokerUtil.put(uri, payload, successCallBack, errorCallBack, contentType);
|
||||
} else if (httpMethod == "DELETE") {
|
||||
invokerUtil.delete(uri, successCallBack, errorCallBack, contentType);
|
||||
} else {
|
||||
title.html("An Error Occurred!");
|
||||
statusIcon.attr("class", defaultStatusClasses + " fw-error");
|
||||
description.html("This operation requires http method: " + httpMethod + " which is not supported yet!");
|
||||
$(modalPopupContent).html(content.html());
|
||||
}
|
||||
}
|
||||
|
||||
$(document).on('submit', 'form', function (e) {
|
||||
cosole.log("darn!!");
|
||||
e.preventDefault();
|
||||
var postOperationRequest = $.ajax({
|
||||
url: $(this).attr("action") + '&' + $(this).serialize(),
|
||||
method: "post"
|
||||
});
|
||||
|
||||
var btnSubmit = $('#btnSend', this);
|
||||
btnSubmit.addClass('hidden');
|
||||
|
||||
var lblSending = $('#lblSending', this);
|
||||
lblSending.removeClass('hidden');
|
||||
|
||||
var lblSent = $('#lblSent', this);
|
||||
postOperationRequest.done(function (data) {
|
||||
lblSending.addClass('hidden');
|
||||
lblSent.removeClass('hidden');
|
||||
setTimeout(function () {
|
||||
hidePopup();
|
||||
}, 3000);
|
||||
});
|
||||
|
||||
postOperationRequest.fail(function (jqXHR, textStatus) {
|
||||
lblSending.addClass('hidden');
|
||||
lblSent.addClass('hidden');
|
||||
});
|
||||
});
|
||||
|
||||
// Constants to define operation types available
|
||||
var operationTypeConstants = {
|
||||
"PROFILE": "profile",
|
||||
"CONFIG": "config",
|
||||
"COMMAND": "command"
|
||||
};
|
||||
|
||||
|
||||
var generatePayload = function (operationCode, operationData, deviceList) {
|
||||
var payload;
|
||||
var operationType;
|
||||
switch (operationCode) {
|
||||
case windowsOperationConstants["CAMERA_OPERATION_CODE"]:
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"enabled": operationData["cameraEnabled"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
case windowsOperationConstants["CHANGE_LOCK_CODE_OPERATION_CODE"]:
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"lockCode": operationData["lockCode"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
case windowsOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]:
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"encrypted": operationData["encryptStorageEnabled"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
case windowsOperationConstants["NOTIFICATION_OPERATION_CODE"]:
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"message": operationData["message"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
case windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]:
|
||||
operationType = operationTypeConstants["PROFILE"];
|
||||
payload = {
|
||||
"operation": {
|
||||
"allowSimple": operationData["passcodePolicyAllowSimple"],
|
||||
"requireAlphanumeric": operationData["passcodePolicyRequireAlphanumeric"],
|
||||
"minLength": operationData["passcodePolicyMinLength"],
|
||||
"minComplexChars": operationData["passcodePolicyMinComplexChars"],
|
||||
"maxPINAgeInDays": operationData["passcodePolicyMaxPasscodeAgeInDays"],
|
||||
"pinHistory": operationData["passcodePolicyPasscodeHistory"],
|
||||
"maxFailedAttempts": operationData["passcodePolicyMaxFailedAttempts"]
|
||||
}
|
||||
};
|
||||
break;
|
||||
default:
|
||||
// If the operation is neither of above, it is a command operation
|
||||
operationType = operationTypeConstants["COMMAND"];
|
||||
// Operation payload of a command operation is simply an array of device IDs
|
||||
payload = deviceList;
|
||||
}
|
||||
|
||||
if (operationType == operationTypeConstants["PROFILE"] && deviceList) {
|
||||
payload["deviceIDs"] = deviceList;
|
||||
}
|
||||
|
||||
return payload;
|
||||
};
|
||||
|
||||
|
||||
// Constants to define Windows Operation Constants
|
||||
var windowsOperationConstants = {
|
||||
"PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY",
|
||||
"CAMERA_OPERATION_CODE": "CAMERA",
|
||||
"ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE",
|
||||
"NOTIFICATION_OPERATION_CODE": "NOTIFICATION",
|
||||
"CHANGE_LOCK_CODE_OPERATION_CODE": "CHANGE_LOCK_CODE"
|
||||
};
|
@ -1,286 +0,0 @@
|
||||
<div class="row no-gutter">
|
||||
<div class="wr-hidden-operations-nav col-lg-4">
|
||||
<a href="javascript:void(0)" onclick="showAdvanceOperation('security', this)" class="selected">
|
||||
<span class="wr-hidden-operations-icon fw-stack">
|
||||
<i class="fw fw-padlock fw-stack-2x"></i>
|
||||
</span>
|
||||
Security
|
||||
</a>
|
||||
<a href="javascript:void(0)" onclick="showAdvanceOperation('restriction', this)">
|
||||
<span class="wr-hidden-operations-icon fw-stack">
|
||||
<i class="fw fw-settings fw-stack-2x"></i>
|
||||
</span>
|
||||
Restrictions
|
||||
</a>
|
||||
<a href="javascript:void(0)" onclick="showAdvanceOperation('application', this)">
|
||||
<span class="wr-hidden-operations-icon fw-stack">
|
||||
<i class="fw fw-padlock fw-stack-2x"></i>
|
||||
</span>
|
||||
Applications
|
||||
</a>
|
||||
<a href="javascript:void(0)" onclick="showAdvanceOperation('wifi', this)">
|
||||
<span class="wr-hidden-operations-icon fw-stack">
|
||||
<i class="fw fw-wifi fw-stack-2x"></i>
|
||||
</span>
|
||||
Wi-fi
|
||||
</a>
|
||||
</div>
|
||||
<div class="wr-hidden-operations-content col-lg-8">
|
||||
|
||||
<!-- security -->
|
||||
<div class="wr-hidden-operation" data-operation="security" style="display: block">
|
||||
<div class="panel panel-default operation-data" data-operation="{{features.ENCRYPT_STORAGE.code}}">
|
||||
<div class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#enableEncryptionTab"
|
||||
aria-expanded="true" aria-controls="enableEncryptionTab">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Encryption Enable/Disable
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="enableEncryptionTab" class="panel-collapse panel-body collapse in" role="tabpanel"
|
||||
aria-labelledby="enableEncryptionTab">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<input type="checkbox" class="operationDataKeys" id="enableEncryption"
|
||||
data-key="enableEncryption"/>
|
||||
<span class="helper" title="Enable Encryption">Enable Encryption<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></span>
|
||||
</label>
|
||||
</div>
|
||||
<a href="javascript:runOperation('{{features.ENCRYPT_STORAGE.code}}')" class="btn-operations">Configure</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default operation-data" data-operation="{{features.PASSCODE_POLICY.code}}">
|
||||
<div class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#passCodePolicy" aria-expanded="false"
|
||||
aria-controls="passCodePolicy" class="collapsed">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Passcode Policy
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="passCodePolicy" class="panel-collapse panel-body collapse" role="tabpanel"
|
||||
aria-labelledby="passCodePolicy">
|
||||
|
||||
<label class="wr-input-label col-sm-4" for="maxFailedAttempts">Maximum Failed Attempts</label>
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="maxFailedAttempts"
|
||||
data-key="maxFailedAttempts" placeholder="Enter maximum Failed Attempts">
|
||||
</div>
|
||||
|
||||
<label class="wr-input-label col-sm-4" for="minLength">Minimum Length</label>
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="minLength" data-key="minLength"
|
||||
placeholder="Enter minimum Length">
|
||||
</div>
|
||||
|
||||
<label class="wr-input-label col-sm-4" for="pinHistory">PIN History</label>
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="pinHistory" data-key="pinHistory"
|
||||
placeholder="Enter PIN History">
|
||||
</div>
|
||||
|
||||
<label class="wr-input-label col-sm-4" for="minComplexChars">Minimum complex characters</label>
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="minComplexChars"
|
||||
data-key="minComplexChars" placeholder="Enter minimum complex characters">
|
||||
</div>
|
||||
|
||||
<label class="wr-input-label col-sm-4" for="lockcode">Minimum PIN Age in days</label>
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="maxPINAgeInDays"
|
||||
data-key="maxPINAgeInDays" placeholder="Enter minimum PIN age in days">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<input type="checkbox" class="operationDataKeys" id="requireAlphanumeric"
|
||||
data-key="requireAlphanumeric"/>
|
||||
<span class="helper" title="Require Alphanumeric">Require Alphanumeric<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<input type="checkbox" class="operationDataKeys" id="allowSimple" data-key="allowSimple"/>
|
||||
<span class="helper" title="Allow simple PIN">Allow simple PIN<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<a href="javascript:runOperation('{{features.PASSCODE_POLICY.code}}')" class="btn-operations">Configure</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /security -->
|
||||
|
||||
<!-- wi-fi -->
|
||||
<div class="wr-hidden-operation panel-body" data-operation="wifi">
|
||||
<div class="operation-data" data-operation="{{features.WIFI.code}}">
|
||||
<label class="wr-input-label" title="Identification of the wireless network to connect to">Service Set
|
||||
Identifier<span class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>
|
||||
<!--span>Identification of the wireless network to connect to</span-->
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="ssid" data-key="ssid"
|
||||
placeholder="Enter SSID"/>
|
||||
</div>
|
||||
|
||||
<label class="wr-input-label" title="Password for the wireless network">Password<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>
|
||||
<!--span>Password for the wireless network</span-->
|
||||
<div class="wr-input-control">
|
||||
<input type="password" class="form-control operationDataKeys" id="password" data-key="password"
|
||||
placeholder="Password"/>
|
||||
</div>
|
||||
<a href="javascript:runOperation('{{features.WIFI.code}}')" class="btn-operations">Configure</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /wi-fi -->
|
||||
<!-- application -->
|
||||
<div class="wr-hidden-operation" data-operation="application">
|
||||
<div class="panel panel-default operation-data" data-operation="{{features.INSTALL_APPLICATION.code}}">
|
||||
<div class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#installApp" aria-expanded="true"
|
||||
aria-controls="installApp">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Install App
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="installApp" class="panel-collapse panel-body collapse in" role="tabpanel"
|
||||
aria-labelledby="installApp">
|
||||
<label class="wr-input-label" title="Application Identifier">App Identifier<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="package-name"
|
||||
data-key="packageName" placeholder="Enter App Identifer"/>
|
||||
</div>
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control dropdown">
|
||||
<span class="helper" title="App Type">App Type<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></span>
|
||||
<select class="form-control col-sm-8 operationDataKeys appTypesInput" id="type"
|
||||
data-key="type">
|
||||
<option>Public</option>
|
||||
<option>Enterprise</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<label class="wr-input-label" title="URL">URL<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="url" data-key="url"
|
||||
placeholder="Enter URL"/>
|
||||
</div>
|
||||
<a href="javascript:runOperation('{{features.INSTALL_APPLICATION.code}}')" class="btn-operations">Install</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default operation-data" data-operation="{{features.WEBCLIP.code}}">
|
||||
<div class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#installWebClip" aria-expanded="true"
|
||||
aria-controls="installWebClip" class="collapsed">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Install Web Clip
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="installWebClip" class="panel-collapse panel-body collapse" role="tabpanel"
|
||||
aria-labelledby="installWebClip">
|
||||
<label class="wr-input-label" title="Title of the web clip">Title<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="title" data-key="title"
|
||||
placeholder="Enter Title"/>
|
||||
</div>
|
||||
<label class="wr-input-label" title="URL">URL<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="url" data-key="url"
|
||||
placeholder="Enter URL"/>
|
||||
</div>
|
||||
<a href="javascript:runOperation('{{features.WEBCLIP.code}}')" class="btn-operations">Install</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default operation-data" data-operation="{{features.UNINSTALL_APPLICATION.code}}">
|
||||
<div class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#uninstallApp" aria-expanded="true"
|
||||
aria-controls="uninstallApp" class="collapsed">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Uninstall App
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="uninstallApp" class="panel-collapse panel-body collapse" role="tabpanel"
|
||||
aria-labelledby="uninstallApp">
|
||||
<label class="wr-input-label" title="Application Identifier">App Identifier<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></label>
|
||||
<!--span>Identification of the wireless network to connect to</span-->
|
||||
<div class="wr-input-control">
|
||||
<input type="text" class="form-control operationDataKeys" id="package-name"
|
||||
data-key="packageName" placeholder="Enter App Identifer"/>
|
||||
</div>
|
||||
<a href="javascript:runOperation('{{features.UNINSTALL_APPLICATION.code}}')" class="btn-operations">Uninstall</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /application -->
|
||||
|
||||
<!-- Restriction -->
|
||||
<div class="wr-hidden-operation" data-operation="restriction">
|
||||
<div class="panel panel-default operation-data" data-operation="{{features.CAMERA.code}}">
|
||||
<div class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#cameraDisable" aria-expanded="true"
|
||||
aria-controls="cameraDisable">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Camera Enable/Disable
|
||||
</a>
|
||||
</h2>
|
||||
</div>
|
||||
<div id="cameraDisable" class="panel-collapse panel-body collapse in" role="tabpanel"
|
||||
aria-labelledby="cameraDisable">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-control checkbox">
|
||||
<input type="checkbox" class="operationDataKeys" id="enableCamera" data-key="enableCamera"
|
||||
checked/>
|
||||
<span class="helper" title="Remove App upon dis-enrollment">Enable Camera<span
|
||||
class="wr-help-tip glyphicon glyphicon-question-sign"></span></span>
|
||||
</label>
|
||||
</div>
|
||||
<a href="javascript:runOperation('{{features.CAMERA.code}}')" class="btn-operations">Configure</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /Restriction -->
|
||||
</div>
|
||||
</div>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue