0.3.14 after cleanup
This commit is contained in:
parent
2588822258
commit
aad2c4da9a
@ -68,7 +68,6 @@ if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'connectionScan':
|
case 'connectionScan':
|
||||||
require_once '../includes/path_functions.php';
|
|
||||||
$validate->returnData['success'] = array();
|
$validate->returnData['success'] = array();
|
||||||
$value = $data['value'];
|
$value = $data['value'];
|
||||||
if($value == 'clear') {
|
if($value == 'clear') {
|
||||||
@ -224,7 +223,6 @@ if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'connectionExplore':
|
case 'connectionExplore':
|
||||||
require_once '../includes/path_functions.php';
|
|
||||||
$validate->returnData['success'] = array();
|
$validate->returnData['success'] = array();
|
||||||
$value = $data['value'];
|
$value = $data['value'];
|
||||||
$clear = $value == 'clear' ? true : false;
|
$clear = $value == 'clear' ? true : false;
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
define('QUADODO_IN_SYSTEM', true);
|
define('QUADODO_IN_SYSTEM', true);
|
||||||
require_once '../includes/header.php';
|
require_once '../includes/header.php';
|
||||||
$qls->Security->check_auth_page('administrator.php');
|
$qls->Security->check_auth_page('administrator.php');
|
||||||
require_once '../includes/path_functions.php';
|
|
||||||
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
||||||
require_once '../includes/Validate.class.php';
|
require_once '../includes/Validate.class.php';
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
define('QUADODO_IN_SYSTEM', true);
|
define('QUADODO_IN_SYSTEM', true);
|
||||||
require_once '../includes/header.php';
|
require_once '../includes/header.php';
|
||||||
$qls->Security->check_auth_page('user.php');
|
$qls->Security->check_auth_page('user.php');
|
||||||
require_once '../includes/path_functions.php';
|
//require_once '../includes/path_functions.php';
|
||||||
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
||||||
require_once '../includes/Validate.class.php';
|
require_once '../includes/Validate.class.php';
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
define('QUADODO_IN_SYSTEM', true);
|
define('QUADODO_IN_SYSTEM', true);
|
||||||
require_once '../includes/header.php';
|
require_once '../includes/header.php';
|
||||||
$qls->Security->check_auth_page('administrator.php');
|
$qls->Security->check_auth_page('administrator.php');
|
||||||
require_once '../includes/path_functions.php';
|
|
||||||
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
||||||
require_once '../includes/Validate.class.php';
|
require_once '../includes/Validate.class.php';
|
||||||
|
|||||||
3
backend/retrieve_connector_data.php
Executable file → Normal file
3
backend/retrieve_connector_data.php
Executable file → Normal file
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
define('QUADODO_IN_SYSTEM', true);
|
define('QUADODO_IN_SYSTEM', true);
|
||||||
require_once '../includes/header.php';
|
require_once '../includes/header.php';
|
||||||
$qls->Security->check_auth_page('operator.php');
|
$qls->Security->check_auth_page('operator.php');
|
||||||
@ -241,4 +241,3 @@ function getCableMediaTypeInfo($cableMediaTypeTable){
|
|||||||
}
|
}
|
||||||
return $cableMediaTypeInfo;
|
return $cableMediaTypeInfo;
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
define('QUADODO_IN_SYSTEM', true);
|
define('QUADODO_IN_SYSTEM', true);
|
||||||
require_once '../includes/header.php';
|
require_once '../includes/header.php';
|
||||||
//require_once '../includes/path_functions.php';
|
|
||||||
$qls->Security->check_auth_page('user.php');
|
$qls->Security->check_auth_page('user.php');
|
||||||
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
||||||
|
|||||||
@ -1,189 +0,0 @@
|
|||||||
<?php
|
|
||||||
define('QUADODO_IN_SYSTEM', true);
|
|
||||||
require_once '../includes/header.php';
|
|
||||||
$qls->Security->check_auth_page('operator.php');
|
|
||||||
require_once '../includes/path_functions.php';
|
|
||||||
|
|
||||||
//[0] = element type
|
|
||||||
//[1] = element ID
|
|
||||||
//[2] = element face
|
|
||||||
//[3] = element depth
|
|
||||||
//[4] = port index
|
|
||||||
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
|
||||||
|
|
||||||
$return = array(
|
|
||||||
'error' => '',
|
|
||||||
'result' => array()
|
|
||||||
);
|
|
||||||
|
|
||||||
$data = $_POST;
|
|
||||||
$return['error'] = validate($data, $qls);
|
|
||||||
|
|
||||||
if (count($return['error']) == 0){
|
|
||||||
$children = array();
|
|
||||||
$selected = '';
|
|
||||||
$valueArray = explode('-', $data['value']);
|
|
||||||
$elementType = $valueArray[0];
|
|
||||||
$elementID = $valueArray[1];
|
|
||||||
$elementFace = $valueArray[2];
|
|
||||||
$elementDepth = $valueArray[3];
|
|
||||||
$elementPortIndex = $valueArray[4];
|
|
||||||
$connectorID = $data['connectorID'];
|
|
||||||
$cableEnd = $data['cableEnd'];
|
|
||||||
$connectorPathAttribute = $cableEnd == 'a' ? 'a_path' : 'b_path';
|
|
||||||
$connectorAttributePrefix = $cableEnd == 'a' ? 'a' : 'b';
|
|
||||||
$connectorIDAttribute = $cableEnd == 'a' ? 'a_id' : 'b_id';
|
|
||||||
$connectorObjectIDAttribute = $cableEnd == 'a' ? 'a_object_id' : 'b_object_id';
|
|
||||||
$connectorPortIDAttribute = $cableEnd == 'a' ? 'a_port_id' : 'b_port_id';
|
|
||||||
$connectorRootIDAttribute = $cableEnd == 'a' ? 'a_root_id' : 'b_root_id';
|
|
||||||
$connectorFaceAttribute = $cableEnd == 'a' ? 'a_object_face' : 'b_object_face';
|
|
||||||
$connectorDepthAttribute = $cableEnd == 'a' ? 'a_object_depth' : 'b_object_depth';
|
|
||||||
$action = $data['action'];
|
|
||||||
|
|
||||||
$query = $qls->SQL->select('*', 'app_inventory', array($connectorIDAttribute => array('=', $connectorID)));
|
|
||||||
$cable = $qls->SQL->fetch_assoc($query);
|
|
||||||
|
|
||||||
if($action == 'SELECT'){
|
|
||||||
// Clear path
|
|
||||||
if($elementID == 0) {
|
|
||||||
$qls->SQL->update(
|
|
||||||
'app_inventory',
|
|
||||||
array(
|
|
||||||
$connectorAttributePrefix.'_object_id' => 0,
|
|
||||||
$connectorAttributePrefix.'_port_id' => 0,
|
|
||||||
$connectorAttributePrefix.'_object_face' => 0,
|
|
||||||
$connectorAttributePrefix.'_object_depth' => 0
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
$connectorIDAttribute => array('=', $cable[$connectorIDAttribute])
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$children = buildLocation('#', $qls);
|
|
||||||
$resultData = array('selected' => 'clear', 'children' => $children);
|
|
||||||
array_push($return['result'], $resultData);
|
|
||||||
|
|
||||||
// Location selected
|
|
||||||
} else if($elementType == 0) {
|
|
||||||
$children = buildLocation($elementID, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($return['result'], $resultData);
|
|
||||||
|
|
||||||
// Cabinet selected
|
|
||||||
} else if($elementType == 1) {
|
|
||||||
$children = buildObjectsConnector($elementID, $cable, $connectorAttributePrefix, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($return['result'], $resultData);
|
|
||||||
|
|
||||||
// Object selected
|
|
||||||
} else if($elementType == 2) {
|
|
||||||
$children = buildPorts($elementID, $elementFace, $cable, $connectorAttributePrefix, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($return['result'], $resultData);
|
|
||||||
|
|
||||||
// Port selected
|
|
||||||
} else if($elementType == 4) {
|
|
||||||
$inverseConnectorAttributePrefix = $connectorAttributePrefix == 'a' ? 'b' : 'a';
|
|
||||||
// 'b', cable(17), 34, 0, 1, 0
|
|
||||||
$peerID = $cable[$inverseConnectorAttributePrefix.'_object_id'];
|
|
||||||
$peerFace = $cable[$inverseConnectorAttributePrefix.'_object_face'];
|
|
||||||
$peerDepth = $cable[$inverseConnectorAttributePrefix.'_object_depth'];
|
|
||||||
$peerPort = $cable[$inverseConnectorAttributePrefix.'_port_id'];
|
|
||||||
if($qls->App->loopDetected2($peerID, $peerFace, $peerDepth, $peerPort, $elementID, $elementFace, $elementDepth, $elementPortIndex)) {
|
|
||||||
array_push($return['error'], 'Loop detected.');
|
|
||||||
} else {
|
|
||||||
$qls->SQL->update(
|
|
||||||
'app_inventory',
|
|
||||||
array(
|
|
||||||
$connectorAttributePrefix.'_object_id' => $elementID,
|
|
||||||
$connectorAttributePrefix.'_port_id' => $elementPortIndex,
|
|
||||||
$connectorAttributePrefix.'_object_face' => $elementFace,
|
|
||||||
$connectorAttributePrefix.'_object_depth' => $elementDepth
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
$connectorAttributePrefix.'_id' => array('=', $cable[$connectorIDAttribute])
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$qls->SQL->delete(
|
|
||||||
'app_populated_port',
|
|
||||||
array(
|
|
||||||
'object_id' => array('=', $elementID),
|
|
||||||
'AND',
|
|
||||||
'object_face' => array('=', $elementFace),
|
|
||||||
'AND',
|
|
||||||
'object_depth' => array('=', $elementDepth),
|
|
||||||
'AND',
|
|
||||||
'port_id' => array('=', $elementPortIndex)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
array_push($return['result'], 'FIN');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if($action == 'GET') {
|
|
||||||
if($cable[$connectorObjectIDAttribute] == 0) {
|
|
||||||
$children = buildLocation($elementID, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($return['result'], $resultData);
|
|
||||||
} else {
|
|
||||||
$path = buildConnectorPath($cable, $connectorAttributePrefix, $qls);
|
|
||||||
|
|
||||||
$return['result'] = $path;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo json_encode($return);
|
|
||||||
}
|
|
||||||
|
|
||||||
function validate($data, &$qls){
|
|
||||||
$elementTypeArray = array('initial', 'location', 'cabinet', 'Connectable', 'Enclosure', 'Insert', 'port');
|
|
||||||
$error = [];
|
|
||||||
|
|
||||||
//Validate elementType
|
|
||||||
if (!isset($data['value'])){
|
|
||||||
array_push($error, array('alert' => 'Error: Element data is required.'));
|
|
||||||
} else {
|
|
||||||
$dataValue = explode('-', $data['value']);
|
|
||||||
if (count($dataValue) != 5){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid data value.'));
|
|
||||||
} else {
|
|
||||||
if (!preg_match('/^[0-9]+$/', $dataValue[0])){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid element type.'));
|
|
||||||
}
|
|
||||||
if (!preg_match('/^[#0-9]+$/', $dataValue[1])){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid element ID.'));
|
|
||||||
}
|
|
||||||
if (!preg_match('/^[01]$/', $dataValue[2])){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid element face.'));
|
|
||||||
}
|
|
||||||
if (!preg_match('/^[0-9]+$/', $dataValue[3])){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid partition ID.'));
|
|
||||||
}
|
|
||||||
if (!preg_match('/^[0-9]+$/', $dataValue[4])){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid port ID.'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Validate cableEnd
|
|
||||||
if (!isset($data['cableEnd'])){
|
|
||||||
array_push($error, array('alert' => 'Error: Cable end value is required.'));
|
|
||||||
} else {
|
|
||||||
if (!preg_match('/^[ab]$/', $data['cableEnd'])){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid cable end value.'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Validate cableID
|
|
||||||
if (!isset($data['connectorID'])){
|
|
||||||
array_push($error, array('alert' => 'Error: Connector ID is required.'));
|
|
||||||
} else {
|
|
||||||
if (!preg_match('/^[0-9]+$/', $data['connectorID'])){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid connector ID.'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $error;
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
@ -1,98 +0,0 @@
|
|||||||
<?php
|
|
||||||
define('QUADODO_IN_SYSTEM', true);
|
|
||||||
require_once '../includes/header.php';
|
|
||||||
$qls->Security->check_auth_page('user.php');
|
|
||||||
require_once '../includes/path_functions.php';
|
|
||||||
|
|
||||||
//[0] = element type
|
|
||||||
//[1] = element ID
|
|
||||||
//[2] = element face
|
|
||||||
//[3] = element depth
|
|
||||||
//[4] = port index
|
|
||||||
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
|
||||||
require_once '../includes/Validate.class.php';
|
|
||||||
|
|
||||||
$validate = new Validate($qls);
|
|
||||||
$validate->returnData['success'] = array();
|
|
||||||
|
|
||||||
if ($validate->returnData['active'] == 'inactive') {
|
|
||||||
echo json_encode($validate->returnData);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = json_decode($_POST['data'], true);
|
|
||||||
validate($data, $validate, $qls);
|
|
||||||
|
|
||||||
if (!count($validate->returnData['error'])){
|
|
||||||
$children = array();
|
|
||||||
$selected = '';
|
|
||||||
$valueArray = explode('-', $data['value']);
|
|
||||||
$elementType = $valueArray[0];
|
|
||||||
$elementID = $valueArray[1];
|
|
||||||
$elementFace = $valueArray[2];
|
|
||||||
$elementDepth = $valueArray[3];
|
|
||||||
$elementPortIndex = $valueArray[4];
|
|
||||||
|
|
||||||
// Clear path
|
|
||||||
if($elementID == 0) {
|
|
||||||
$children = buildLocation('#', $qls);
|
|
||||||
$resultData = array('selected' => 'clear', 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
|
|
||||||
// Location selected
|
|
||||||
} else if($elementType == 0) {
|
|
||||||
$children = buildLocation($elementID, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
|
|
||||||
// Cabinet selected
|
|
||||||
} else if($elementType == 1) {
|
|
||||||
$clickedObjID = $data['clickedObjID'];
|
|
||||||
$clickedObjFace = $data['clickedObjFace'];
|
|
||||||
$clickedObjDepth = $data['clickedObjDepth'];
|
|
||||||
$children = buildObjectsPathFinder($elementID, $clickedObjID, $clickedObjFace, $clickedObjDepth, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
|
|
||||||
// Object selected
|
|
||||||
} else if($elementType == 2) {
|
|
||||||
$clickedObjID = $data['clickedObjID'];
|
|
||||||
$clickedObjFace = $data['clickedObjFace'];
|
|
||||||
$clickedObjDepth = $data['clickedObjDepth'];
|
|
||||||
$clickedObjPortID = $data['clickedObjPortID'];
|
|
||||||
$children = buildPortsPathFinder($elementID, $elementFace, $clickedObjID, $clickedObjFace, $clickedObjDepth, $clickedObjPortID, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
|
|
||||||
// Port selected
|
|
||||||
} else if($elementType == 4) {
|
|
||||||
$selectedObjID = $elementID;
|
|
||||||
$selectedObjFace = $elementFace;
|
|
||||||
$selectedObjDepth = $elementDepth;
|
|
||||||
$selectedObjPortID = $elementPortIndex;
|
|
||||||
$validate->returnData['success'] = array('FIN', $selectedObjID, $selectedObjFace, $selectedObjDepth, $selectedObjPortID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo json_encode($validate->returnData);
|
|
||||||
}
|
|
||||||
|
|
||||||
function validate($data, &$qls){
|
|
||||||
$error = [];
|
|
||||||
|
|
||||||
//Validate elementType
|
|
||||||
if (!isset($data['value'])){
|
|
||||||
array_push($error, array('alert' => 'Error: Element data is required.'));
|
|
||||||
} else {
|
|
||||||
$dataValue = explode('-', $data['value']);
|
|
||||||
if (count($dataValue) != 5){
|
|
||||||
array_push($error, array('alert' => 'Error: Invalid data value.'));
|
|
||||||
} else {
|
|
||||||
$x=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $error;
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
@ -26,6 +26,7 @@ if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
|||||||
// Create $path
|
// Create $path
|
||||||
include_once $_SERVER['DOCUMENT_ROOT'].'/includes/content-path2.php';
|
include_once $_SERVER['DOCUMENT_ROOT'].'/includes/content-path2.php';
|
||||||
$validate->returnData['success'] = $qls->App->buildPathFull2($pathArray);
|
$validate->returnData['success'] = $qls->App->buildPathFull2($pathArray);
|
||||||
|
error_log('Debug (pathArray): '.json_encode($pathArray));
|
||||||
}
|
}
|
||||||
echo json_encode($validate->returnData);
|
echo json_encode($validate->returnData);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,159 +0,0 @@
|
|||||||
<?php
|
|
||||||
define('QUADODO_IN_SYSTEM', true);
|
|
||||||
require_once '../includes/header.php';
|
|
||||||
$qls->Security->check_auth_page('user.php');
|
|
||||||
require_once '../includes/path_functions.php';
|
|
||||||
|
|
||||||
//[0] = element type
|
|
||||||
//[1] = element ID
|
|
||||||
//[2] = element face
|
|
||||||
//[3] = element depth
|
|
||||||
//[4] = port index
|
|
||||||
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == 'POST'){
|
|
||||||
require_once('../includes/Validate.class.php');
|
|
||||||
$validate = new Validate($qls);
|
|
||||||
$validate->returnData['success'] = array();
|
|
||||||
|
|
||||||
if ($validate->returnData['active'] == 'inactive') {
|
|
||||||
echo json_encode($validate->returnData);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = json_decode($_POST['data'], true);
|
|
||||||
validate($data, $validate);
|
|
||||||
|
|
||||||
if (!count($validate->returnData['error'])){
|
|
||||||
$children = array();
|
|
||||||
$selected = '';
|
|
||||||
$valueArray = explode('-', $data['value']);
|
|
||||||
$elementType = $valueArray[0];
|
|
||||||
$elementID = $valueArray[1];
|
|
||||||
$elementFace = $valueArray[2];
|
|
||||||
$elementDepth = $valueArray[3];
|
|
||||||
$elementPortIndex = $valueArray[4];
|
|
||||||
$objectID = $data['objID'];
|
|
||||||
$objectFace = $data['objFace'];
|
|
||||||
$partitionDepth = $data['partitionDepth'];
|
|
||||||
$action = $data['action'];
|
|
||||||
|
|
||||||
$query = $qls->SQL->select('*', 'app_object', array('id' => array('=', $objectID)));
|
|
||||||
$object = $qls->SQL->fetch_assoc($query);
|
|
||||||
|
|
||||||
if($action == 'SELECT'){
|
|
||||||
// Clear path
|
|
||||||
if($elementID == 0) {
|
|
||||||
$query = $qls->SQL->select('*', 'app_object_peer', array('a_id' => array('=', $objectID), 'OR', 'b_id' => array('=', $objectID)));
|
|
||||||
$qls->SQL->delete('app_object_peer', array('a_id' => array('=', $objectID), 'OR', 'b_id' => array('=', $objectID)));
|
|
||||||
$children = buildLocation('#', $qls);
|
|
||||||
$resultData = array('selected' => 'clear', 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
|
|
||||||
// Location selected
|
|
||||||
} else if($elementType == 0) {
|
|
||||||
$children = buildLocation($elementID, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
|
|
||||||
// Cabinet selected
|
|
||||||
} else if($elementType == 1) {
|
|
||||||
$children = buildObjects($elementID, $object, $objectFace, $partitionDepth, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
|
|
||||||
// Object selected
|
|
||||||
} else if($elementType == 2) {
|
|
||||||
$children = buildPartitions($elementID, $elementFace, $object, $objectFace, $partitionDepth, $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
|
|
||||||
// Partition selected
|
|
||||||
} else if($elementType == 3) {
|
|
||||||
$query = $qls->SQL->select('partitionFunction', 'app_object_compatibility', array('template_id' => array('=', $object['template_id'])));
|
|
||||||
$partitionFunction = $qls->SQL->fetch_assoc($query);
|
|
||||||
$objectEndpoint = $partitionFunction['partitionFunction'] == 'Endpoint' ? 1 : 0;
|
|
||||||
|
|
||||||
$query = $qls->SQL->select('*', 'app_object', array('id' => array('=', $elementID)));
|
|
||||||
$element = $qls->SQL->fetch_assoc($query);
|
|
||||||
|
|
||||||
$query = $qls->SQL->select('partitionFunction', 'app_object_compatibility', array('template_id' => array('=', $element['template_id'])));
|
|
||||||
$partitionFunction = $qls->SQL->fetch_assoc($query);
|
|
||||||
$elementEndpoint = $partitionFunction['partitionFunction'] == 'Endpoint' ? 1 : 0;
|
|
||||||
|
|
||||||
$qls->SQL->delete('app_object_peer', array('a_id' => array('=', $objectID), 'AND', 'a_face' => array('=', $objectFace), 'AND', 'a_depth' => array('=', $partitionDepth)));
|
|
||||||
$qls->SQL->delete('app_object_peer', array('b_id' => array('=', $objectID), 'AND', 'b_face' => array('=', $objectFace), 'AND', 'b_depth' => array('=', $partitionDepth)));
|
|
||||||
$qls->SQL->delete('app_object_peer', array('a_id' => array('=', $elementID), 'AND', 'a_face' => array('=', $elementFace), 'AND', 'a_depth' => array('=', $elementDepth)));
|
|
||||||
$qls->SQL->delete('app_object_peer', array('b_id' => array('=', $elementID), 'AND', 'b_face' => array('=', $elementFace), 'AND', 'b_depth' => array('=', $elementDepth)));
|
|
||||||
$qls->SQL->insert(
|
|
||||||
'app_object_peer',
|
|
||||||
array(
|
|
||||||
'a_id',
|
|
||||||
'a_face',
|
|
||||||
'a_depth',
|
|
||||||
'a_endpoint',
|
|
||||||
'b_id',
|
|
||||||
'b_face',
|
|
||||||
'b_depth',
|
|
||||||
'b_endpoint'
|
|
||||||
),
|
|
||||||
array(
|
|
||||||
$objectID,
|
|
||||||
$objectFace,
|
|
||||||
$partitionDepth,
|
|
||||||
$objectEndpoint,
|
|
||||||
$elementID,
|
|
||||||
$elementFace,
|
|
||||||
$elementDepth,
|
|
||||||
$elementEndpoint
|
|
||||||
)
|
|
||||||
);
|
|
||||||
array_push($validate->returnData['success'], 'FIN');
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if($action == 'GET') {
|
|
||||||
$queryString = '(a_id = '.$objectID.' AND a_face = '.$objectFace.' AND a_depth = '.$partitionDepth.') OR (b_id = '.$objectID.' AND b_face = '.$objectFace.' AND b_depth = '.$partitionDepth.')';
|
|
||||||
//$query = $qls->SQL->select('*', 'app_object_peer', array('a_id' => array('=', $objectID), 'OR', 'b_id' => array('=', $objectID)));
|
|
||||||
$query = $qls->SQL->select('*', 'app_object_peer', $queryString);
|
|
||||||
$peerRecord = $qls->SQL->fetch_assoc($query);
|
|
||||||
if(!count($peerRecord)) {
|
|
||||||
$children = buildLocation('#', $qls);
|
|
||||||
$resultData = array('selected' => $selected, 'children' => $children);
|
|
||||||
array_push($validate->returnData['success'], $resultData);
|
|
||||||
} else {
|
|
||||||
$peerPrefix = $peerRecord['a_id'] == $objectID ? 'b' : 'a';
|
|
||||||
$objectPrefix = $peerRecord['a_id'] == $objectID ? 'a' : 'b';
|
|
||||||
|
|
||||||
$peerID = $peerRecord[$peerPrefix.'_id'];
|
|
||||||
$peerFace = $peerRecord[$peerPrefix.'_face'];
|
|
||||||
$peerDepth = $peerRecord[$peerPrefix.'_depth'];
|
|
||||||
|
|
||||||
$objectFace = $peerRecord[$objectPrefix.'_face'];
|
|
||||||
$objectDepth = $peerRecord[$objectPrefix.'_depth'];
|
|
||||||
|
|
||||||
$query = $qls->SQL->select('*', 'app_object', array('id' => array('=', $peerID)));
|
|
||||||
$peer = $qls->SQL->fetch_assoc($query);
|
|
||||||
|
|
||||||
$path = buildPath($peer, $peerFace, $peerDepth, $object, $objectFace, $objectDepth, $qls);
|
|
||||||
|
|
||||||
$validate->returnData['success'] = $path;
|
|
||||||
}
|
|
||||||
$validate->returnData['pathArray'] = buildPathArray($validate->returnData['success']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//echo json_encode($return);
|
|
||||||
echo json_encode($validate->returnData);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
function validate($data, &$validate){
|
|
||||||
if($data['action'] != 'GET') {
|
|
||||||
//Validate elementType
|
|
||||||
$validate->validateElementValue($data['value']);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Validate objectID
|
|
||||||
$validate->validateObjectID($data['objID']);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
@ -3232,7 +3232,7 @@ var $qls;
|
|||||||
return str_replace('‑', '-', $string);
|
return str_replace('‑', '-', $string);
|
||||||
}
|
}
|
||||||
|
|
||||||
function crawlPath2($objID, $objFace, $objDepth, $objPort, $detectDivergence=false, &$pathArray=array(array(array(),array())), &$visitedArray=array(), $pathArrayIndex=0, $outerDirection=0, $innerDirection=0, $initial=true){
|
function crawlPath2($objID, $objFace, $objDepth, $objPort, $detectDivergence=false, $portDiverges=false, &$pathArray=array(array(array(),array())), &$visitedArray=array(), $pathArrayIndex=0, $outerDirection=0, $innerDirection=0, $initial=true){
|
||||||
|
|
||||||
// $outerDirection - 0=up 1=down
|
// $outerDirection - 0=up 1=down
|
||||||
// $innerDirection - 0=near 1=far
|
// $innerDirection - 0=near 1=far
|
||||||
@ -3266,6 +3266,7 @@ var $qls;
|
|||||||
'objDepth' => $objDepth,
|
'objDepth' => $objDepth,
|
||||||
'objPort' => $objPort,
|
'objPort' => $objPort,
|
||||||
'selected' => $initial,
|
'selected' => $initial,
|
||||||
|
'portDiverges' => $portDiverges,
|
||||||
'length' => $length,
|
'length' => $length,
|
||||||
'mediaTypeID' => $mediaTypeID,
|
'mediaTypeID' => $mediaTypeID,
|
||||||
'connectorTypeID' => $connectorTypeID
|
'connectorTypeID' => $connectorTypeID
|
||||||
@ -3291,6 +3292,7 @@ var $qls;
|
|||||||
|
|
||||||
// Loop over each local port connection
|
// Loop over each local port connection
|
||||||
$inventoryEntry = $this->inventoryArray[$objID][$objFace][$objDepth][$objPort];
|
$inventoryEntry = $this->inventoryArray[$objID][$objFace][$objDepth][$objPort];
|
||||||
|
$organicPathObjParentID = $this->getParentObjID($inventoryEntry[0]['id']);
|
||||||
foreach($inventoryEntry as $connection) {
|
foreach($inventoryEntry as $connection) {
|
||||||
|
|
||||||
// Collect remote object data
|
// Collect remote object data
|
||||||
@ -3299,6 +3301,14 @@ var $qls;
|
|||||||
$remoteObjDepth = $connection['depth'];
|
$remoteObjDepth = $connection['depth'];
|
||||||
$remoteObjPort = $connection['port'];
|
$remoteObjPort = $connection['port'];
|
||||||
|
|
||||||
|
$newPortDiverges = $portDiverges;
|
||||||
|
if(!$newPortDiverges) {
|
||||||
|
$remoteObjParentID = $this->getParentObjID($remoteObjID);
|
||||||
|
if($remoteObjParentID != $organicPathObjParentID) {
|
||||||
|
$newPortDiverges = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Generate remote port hash
|
// Generate remote port hash
|
||||||
$remotePortAddressString = $remoteObjID.'_'.$remoteObjFace.'_'.$remoteObjDepth.'_'.$remoteObjPort;
|
$remotePortAddressString = $remoteObjID.'_'.$remoteObjFace.'_'.$remoteObjDepth.'_'.$remoteObjPort;
|
||||||
$remotePortAddressMD5 = md5($remotePortAddressString);
|
$remotePortAddressMD5 = md5($remotePortAddressString);
|
||||||
@ -3308,7 +3318,7 @@ var $qls;
|
|||||||
// Get path array index... it could change during recursion
|
// Get path array index... it could change during recursion
|
||||||
$pathArrayIndex = $this->getCurrentPathIndex($pathArray, $portAddressMD5);
|
$pathArrayIndex = $this->getCurrentPathIndex($pathArray, $portAddressMD5);
|
||||||
|
|
||||||
$this->crawlPath2($remoteObjID, $remoteObjFace, $remoteObjDepth, $remoteObjPort, $detectDivergence, $pathArray, $visitedArray, $pathArrayIndex, $outerDirection, $newInnerDirection, false);
|
$this->crawlPath2($remoteObjID, $remoteObjFace, $remoteObjDepth, $remoteObjPort, $detectDivergence, $newPortDiverges, $pathArray, $visitedArray, $pathArrayIndex, $outerDirection, $newInnerDirection, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3373,7 +3383,7 @@ var $qls;
|
|||||||
}
|
}
|
||||||
|
|
||||||
$innerDirection = 0;
|
$innerDirection = 0;
|
||||||
$this->crawlPath2($remoteObjID, $remoteObjFace, $remoteObjDepth, $remoteObjPort, $detectDivergence, $pathArray, $visitedArray, $pathArrayIndex, $outerDirection, $innerDirection, false);
|
$this->crawlPath2($remoteObjID, $remoteObjFace, $remoteObjDepth, $remoteObjPort, $detectDivergence, $portDiverges, $pathArray, $visitedArray, $pathArrayIndex, $outerDirection, $innerDirection, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3405,213 +3415,13 @@ var $qls;
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function crawlPath($objID, $objFace, $objDepth, $objPort, $detectDivergence=false){
|
function getParentObjID($objID) {
|
||||||
|
|
||||||
// pathArray contains all necessary path data
|
while($this->objectArray[$objID]['parent_id'] != 0) {
|
||||||
$pathArray = array();
|
$objID = $this->objectArray[$objID]['parent_id'];
|
||||||
|
|
||||||
// Retrieve initial connection set
|
|
||||||
$selected = true;
|
|
||||||
$connSet = $this->crawlConn($selected, $objID, $objFace, $objDepth, $objPort);
|
|
||||||
$selected = false;
|
|
||||||
if($detectDivergence) {
|
|
||||||
$this->detectDivergence($connSet[0]);
|
|
||||||
$this->detectDivergence($connSet[1]);
|
|
||||||
}
|
|
||||||
array_push($pathArray, $connSet);
|
|
||||||
|
|
||||||
for($direction=0; $direction<2; $direction++) {
|
|
||||||
|
|
||||||
do {
|
|
||||||
|
|
||||||
// Set path array pointer
|
|
||||||
// 0 for up, -1 for down
|
|
||||||
$pathArrayPointer = ($direction == 0) ? 0 : count($pathArray)-1;
|
|
||||||
|
|
||||||
// Get port trunk peer
|
|
||||||
$trunkSet = $this->crawlTrunk($pathArray[$pathArrayPointer][$direction]);
|
|
||||||
if($detectDivergence) {
|
|
||||||
$this->detectDivergence($trunkSet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$trunkSetCount = count($trunkSet);
|
return $objID;
|
||||||
$trunkFound = ($trunkSetCount) ? true : false;
|
|
||||||
|
|
||||||
// Find connections for each trunked port
|
|
||||||
$workingConnSet = array(array(),array());
|
|
||||||
foreach($trunkSet as $port) {
|
|
||||||
|
|
||||||
// Store port info
|
|
||||||
$remoteObjID = $port['objID'];
|
|
||||||
$remoteObjFace = $port['objFace'];
|
|
||||||
$remoteObjDepth = $port['objDepth'];
|
|
||||||
$remoteObjPort = $port['objPort'];
|
|
||||||
|
|
||||||
// Find connections
|
|
||||||
$connSet = $this->crawlConn($selected, $remoteObjID, $remoteObjFace, $remoteObjDepth, $remoteObjPort);
|
|
||||||
if($detectDivergence) {
|
|
||||||
$this->detectDivergence($connSet[0]);
|
|
||||||
$this->detectDivergence($connSet[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine where in workingConnSet ports should be added
|
|
||||||
$connSetIndexArray = array(0,1);
|
|
||||||
if($direction == 0) {
|
|
||||||
$workingConnSetIndexMappingArray = array(1,0);
|
|
||||||
} else {
|
|
||||||
$workingConnSetIndexMappingArray = array(0,1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add ports to workingConnSet
|
|
||||||
foreach($connSetIndexArray as $connSetIndexID => $connSetIndex) {
|
|
||||||
foreach($connSet[$connSetIndex] as $port) {
|
|
||||||
|
|
||||||
// Determine if duplicate exists
|
|
||||||
$dupFound = false;
|
|
||||||
foreach($workingConnSet[$workingConnSetIndexMappingArray[$connSetIndexID]] as $existingPort) {
|
|
||||||
if($port['objID'] == $existingPort['objID'] and $port['objFace'] == $existingPort['objFace'] and $port['objDepth'] == $existingPort['objDepth'] and $port['objPort'] == $existingPort['objPort']) {
|
|
||||||
$dupFound = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append port to workingConnSet
|
|
||||||
if(!$dupFound) {
|
|
||||||
array_push($workingConnSet[$workingConnSetIndexMappingArray[$connSetIndexID]], $port);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($connSet[0] as $localFoundPort) {
|
|
||||||
$isInitial = false;
|
|
||||||
foreach($trunkSet as $localInitialPort) {
|
|
||||||
if($localFoundPort['objID'] == $localInitialPort['objID'] and $localFoundPort['objFace'] == $localInitialPort['objFace'] and $localFoundPort['objDepth'] == $localInitialPort['objDepth'] and $localFoundPort['objPort'] == $localInitialPort['objPort']) {
|
|
||||||
$isInitial = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add connection set to appropriate end of pathArray
|
|
||||||
if($trunkFound) {
|
|
||||||
if($direction == 0) {
|
|
||||||
array_unshift($pathArray, $workingConnSet);
|
|
||||||
} else {
|
|
||||||
array_push($pathArray, $workingConnSet);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while($trunkFound);
|
|
||||||
}
|
|
||||||
return $pathArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
function crawlTrunk($portSet) {
|
|
||||||
|
|
||||||
$trunkSet = array();
|
|
||||||
|
|
||||||
// Loop over each port of $conn
|
|
||||||
foreach($portSet as $portSetID => $port) {
|
|
||||||
|
|
||||||
// Gather port data
|
|
||||||
$objID = $port['objID'];
|
|
||||||
$objFace = $port['objFace'];
|
|
||||||
$objDepth = $port['objDepth'];
|
|
||||||
$objPort = $port['objPort'];
|
|
||||||
|
|
||||||
// Gather trunk peer data
|
|
||||||
if(isset($this->peerArray[$objID][$objFace][$objDepth])) {
|
|
||||||
|
|
||||||
// Gather trunk peer object
|
|
||||||
$peer = $this->peerArray[$objID][$objFace][$objDepth];
|
|
||||||
|
|
||||||
// Gather trunk peer data
|
|
||||||
$peerObjID = $peer['peerID'];
|
|
||||||
$peerObjFace = $peer['peerFace'];
|
|
||||||
$peerObjDepth = $peer['peerDepth'];
|
|
||||||
$peerObjPort = $objPort;
|
|
||||||
|
|
||||||
// Create a working array for cleanliness
|
|
||||||
$workingArray = array(
|
|
||||||
'objID' => $peerObjID,
|
|
||||||
'objFace' => $peerObjFace,
|
|
||||||
'objDepth' => $peerObjDepth,
|
|
||||||
'objPort' => $peerObjPort
|
|
||||||
);
|
|
||||||
|
|
||||||
// Store trunk data
|
|
||||||
$trunkSet[$portSetID] = $workingArray;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $trunkSet;
|
|
||||||
}
|
|
||||||
|
|
||||||
function crawlConn($selected, $objID, $objFace, $objDepth, $objPort, &$connSet=array(array(),array()), $connSetID=0) {
|
|
||||||
|
|
||||||
// Store cable details
|
|
||||||
$managedCableID = (isset($this->inventoryArray[$objID][$objFace][$objDepth][$objPort])) ? $this->inventoryArray[$objID][$objFace][$objDepth][$objPort][0]['localEndID'] : 0;
|
|
||||||
if($managedCableID != 0) {
|
|
||||||
$managedCable = $this->inventoryByIDArray[$managedCableID];
|
|
||||||
$managedCableMediaTypeID = $managedCable['mediaType'];
|
|
||||||
$managedCableLength = $managedCable['length'];
|
|
||||||
$includeUnit = true;
|
|
||||||
$length = $this->calculateCableLength($managedCableMediaTypeID, $managedCableLength, $includeUnit);
|
|
||||||
$mediaTypeID = $managedCable['mediaType'];
|
|
||||||
$connectorTypeID = $managedCable['localConnector'];
|
|
||||||
} else {
|
|
||||||
$length = 'Unk. Length';
|
|
||||||
$mediaTypeID = false;
|
|
||||||
$connectorTypeID = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store port details
|
|
||||||
$workingArray = array(
|
|
||||||
'objID' => $objID,
|
|
||||||
'objFace' => $objFace,
|
|
||||||
'objDepth' => $objDepth,
|
|
||||||
'objPort' => $objPort,
|
|
||||||
'selected' => $selected,
|
|
||||||
'length' => $length,
|
|
||||||
'mediaTypeID' => $mediaTypeID,
|
|
||||||
'connectorTypeID' => $connectorTypeID
|
|
||||||
);
|
|
||||||
|
|
||||||
// Add port info to connection set
|
|
||||||
array_push($connSet[$connSetID], $workingArray);
|
|
||||||
|
|
||||||
// Is local port connected?
|
|
||||||
if(isset($this->inventoryArray[$objID][$objFace][$objDepth][$objPort])) {
|
|
||||||
|
|
||||||
// Flip the connection set ID
|
|
||||||
$connSetID = ($connSetID == 0) ? 1 : 0;
|
|
||||||
|
|
||||||
// Loop over each local port connection
|
|
||||||
$inventoryEntry = $this->inventoryArray[$objID][$objFace][$objDepth][$objPort];
|
|
||||||
foreach($inventoryEntry as $connection) {
|
|
||||||
|
|
||||||
// Collect remote object data
|
|
||||||
$remoteObjID = $connection['id'];
|
|
||||||
$remoteObjFace = $connection['face'];
|
|
||||||
$remoteObjDepth = $connection['depth'];
|
|
||||||
$remoteObjPort = $connection['port'];
|
|
||||||
|
|
||||||
// Verify this node has not been visited already
|
|
||||||
$alreadySeen = false;
|
|
||||||
foreach($connSet as $conn) {
|
|
||||||
foreach($conn as $port) {
|
|
||||||
if($port['objID'] == $remoteObjID and $port['objFace'] == $remoteObjFace and $port['objDepth'] == $remoteObjDepth and $port['objPort'] == $remoteObjPort) {
|
|
||||||
$alreadySeen = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$alreadySeen) {
|
|
||||||
$selected = false;
|
|
||||||
$this->crawlConn($selected, $remoteObjID, $remoteObjFace, $remoteObjDepth, $remoteObjPort, $connSet, $connSetID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $connSet;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function detectDivergence(&$dataSet) {
|
function detectDivergence(&$dataSet) {
|
||||||
@ -3652,8 +3462,8 @@ var $qls;
|
|||||||
|
|
||||||
$visitedArray = array();
|
$visitedArray = array();
|
||||||
$loopDetected = false;
|
$loopDetected = false;
|
||||||
$pathArrayA = $this->crawlPath($aID, $aFace, $aDepth, $aPort);
|
$pathArrayA = $this->crawlPath2($aID, $aFace, $aDepth, $aPort);
|
||||||
$pathArrayB = $this->crawlPath($bID, $bFace, $bDepth, $bPort);
|
$pathArrayB = $this->crawlPath2($bID, $bFace, $bDepth, $bPort);
|
||||||
$pathArray = array($pathArrayA, $pathArrayB);
|
$pathArray = array($pathArrayA, $pathArrayB);
|
||||||
|
|
||||||
foreach($pathArray as $path) {
|
foreach($pathArray as $path) {
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once './includes/shared_tables.php';
|
require_once './includes/shared_tables.php';
|
||||||
require_once './includes/path_functions.php';
|
|
||||||
|
|
||||||
$pillYes = '<span class="label label-pill label-success">Yes</span>';
|
$pillYes = '<span class="label label-pill label-success">Yes</span>';
|
||||||
$pillNo = '<span class="label label-pill label-danger">No</span>';
|
$pillNo = '<span class="label label-pill label-danger">No</span>';
|
||||||
@ -28,8 +27,8 @@
|
|||||||
$query = $qls->SQL->select('*', 'app_inventory', array('active' => array('=', 1)));
|
$query = $qls->SQL->select('*', 'app_inventory', array('active' => array('=', 1)));
|
||||||
while($row = $qls->SQL->fetch_assoc($query)) {
|
while($row = $qls->SQL->fetch_assoc($query)) {
|
||||||
$mediaTypeID = $row['mediaType'];
|
$mediaTypeID = $row['mediaType'];
|
||||||
$categoryTypeID = $mediaTypeTable[$mediaTypeID]['category_type_id'];
|
$lengthValue = $row['length'];
|
||||||
$length = calculateCableLength($mediaTypeTable, $mediaCategoryTypeTable, $row);
|
$length = $qls->App->calculateCableLength($mediaTypeID, $lengthValue);
|
||||||
|
|
||||||
echo '<tr>';
|
echo '<tr>';
|
||||||
echo '<td data-connectorID="'.$row['a_code39'].'"><a class="linkScan" href="#">'.$row['a_code39'].'</a><button class="displayBarcode pull-right btn btn-sm waves-effect waves-light btn-primary"><i class="fa fa-barcode"></i></button></td>';
|
echo '<td data-connectorID="'.$row['a_code39'].'"><a class="linkScan" href="#">'.$row['a_code39'].'</a><button class="displayBarcode pull-right btn btn-sm waves-effect waves-light btn-primary"><i class="fa fa-barcode"></i></button></td>';
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user