CMXX - Initial ML training
This commit is contained in:
@@ -2239,24 +2239,36 @@ $messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|||||||
// ML data preparations
|
// ML data preparations
|
||||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
function traintotalMeasurement($messages){
|
function traintotalMeasurement(){
|
||||||
|
|
||||||
//total measurement internal array
|
include dirname(__FILE__,2).'/settings/settings.php';
|
||||||
$total_measurement = [];
|
|
||||||
|
|
||||||
foreach ($messages as $message){
|
//total measurement internal array
|
||||||
|
$total_measurement = [];
|
||||||
|
|
||||||
|
//Connect to DB
|
||||||
|
$pdo = dbConnect($dbname);
|
||||||
|
|
||||||
|
//GET DATA
|
||||||
|
$sql = 'SELECT h.rowID, h.description,h.equipmentid,p.productcode,e.hw_version FROM history h JOIN equipment e ON h.equipmentid = e.rowID JOIN products p ON e.productrowid = p.rowID where type="Maintenance_Test" and description like "%doubletestvalues%"';
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$stmt->execute();
|
||||||
|
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
foreach ($messages as $message){
|
||||||
//Cleanup input array
|
//Cleanup input array
|
||||||
$dataset = json_decode($message['description'],true);
|
$dataset = json_decode($message['description'],true);
|
||||||
$dataset = $dataset["doubletestvalues"];
|
$dataset = $dataset["doubletestvalues"];
|
||||||
foreach ($dataset as $measure){
|
foreach ($dataset as $measure){
|
||||||
//Filter out correct measurements
|
//Filter out correct measurements
|
||||||
if ($measure['pass'] === true){
|
if ($measure['pass'] === true){
|
||||||
$measurementid = $message['equipmentid'].'-'.$message['rowID'];
|
$hw_version = (!empty($message['hw_version']))? $message['hw_version'] : 'blank';
|
||||||
$total_measurement[$measure['name']][$measurementid] = $measure['measure'];
|
$measurementid = $message['rowID'];
|
||||||
|
$total_measurement[$message['productcode']][$hw_version][$measure['name']][$measurementid] = $measure['measure'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $total_measurement;
|
return $total_measurement;
|
||||||
}
|
}
|
||||||
|
|
||||||
function statisticalAnalyses($total_measurement){
|
function statisticalAnalyses($total_measurement){
|
||||||
@@ -2265,20 +2277,24 @@ function statisticalAnalyses($total_measurement){
|
|||||||
$total_results = [];
|
$total_results = [];
|
||||||
|
|
||||||
//STATISTICAL ANALYSES INTERNAL ARRAY
|
//STATISTICAL ANALYSES INTERNAL ARRAY
|
||||||
foreach ($total_measurement as $key => $value){
|
foreach ($total_measurement as $productcode => $versions){
|
||||||
$average = $total_results[$key]['average'] = average($value);
|
foreach ($versions as $version => $ver){
|
||||||
$median = $total_results[$key]['median'] = calculateMedian($value);
|
|
||||||
$stdev = $total_results[$key]['stdev'] = standDeviation($value);
|
|
||||||
$total_results[$key]['n'] = count($value);
|
|
||||||
|
|
||||||
//GET STDEV -/+
|
foreach ($ver as $measurement => $value){
|
||||||
$total_results[$key]['stdev-1'] = $average - $stdev;
|
$average = $total_results[$productcode][$version][$measurement]['average'] = average($value);
|
||||||
$total_results[$key]['stdev+1'] = $average + $stdev;
|
$median = $total_results[$productcode][$version][$measurement]['median'] = calculateMedian($value);
|
||||||
$total_results[$key]['stdev-2'] = $average - (2*$stdev);
|
$stdev = $total_results[$productcode][$version][$measurement]['stdev'] = standDeviation($value);
|
||||||
$total_results[$key]['stdev+2'] = $average + (2*$stdev);
|
$total_results[$productcode][$version][$measurement]['n'] = count($value);
|
||||||
$total_results[$key]['stdev-3'] = $average - (3*$stdev);
|
//GET STDEV -/+
|
||||||
$total_results[$key]['stdev+3'] = $average + (3*$stdev);
|
$total_results[$productcode][$version][$measurement]['stdev-1'] = $average - $stdev;
|
||||||
}
|
$total_results[$productcode][$version][$measurement]['stdev+1'] = $average + $stdev;
|
||||||
|
$total_results[$productcode][$version][$measurement]['stdev-2'] = $average - (2*$stdev);
|
||||||
|
$total_results[$productcode][$version][$measurement]['stdev+2'] = $average + (2*$stdev);
|
||||||
|
$total_results[$productcode][$version][$measurement]['stdev-3'] = $average - (3*$stdev);
|
||||||
|
$total_results[$productcode][$version][$measurement]['stdev+3'] = $average + (3*$stdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $total_results;
|
return $total_results;
|
||||||
}
|
}
|
||||||
@@ -2429,4 +2445,178 @@ foreach ($messages as $message){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
// store measurement data into product_version ++++++++++
|
||||||
|
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
function storeMeasurementProduct($total_results, $token){
|
||||||
|
|
||||||
|
include dirname(__FILE__,2).'/settings/settings.php';
|
||||||
|
|
||||||
|
$pdo = dbConnect($dbname);
|
||||||
|
|
||||||
|
//Check if product version exists (else create) => store related measurement
|
||||||
|
foreach ($total_results as $products => $product){
|
||||||
|
|
||||||
|
//Product level
|
||||||
|
foreach ($product as $versions => $version){
|
||||||
|
|
||||||
|
//Version level
|
||||||
|
//Check version exist
|
||||||
|
$sql = 'SELECT p.*, pv.rowID as versionID, pv.productrowid as productID FROM products p JOIN products_versions pv ON p.rowID = pv.productrowid WHERE p.productcode = ? and version = ?;';
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$versions = ($versions != 'blank')? $versions : '';
|
||||||
|
$stmt->execute([$products,$versions]);
|
||||||
|
$output = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
//Prep data for api call
|
||||||
|
$api_url = '/v2/products_versions/';
|
||||||
|
$measurement = json_encode($version,JSON_UNESCAPED_UNICODE);
|
||||||
|
|
||||||
|
if (!empty($output)){
|
||||||
|
//Update version with latest measurement
|
||||||
|
$data = json_encode(array("rowID" => $output[0]['versionID'], "productrowid" => $output[0]['productID'], "status" => 1, "version" => $versions, "measurement" => $measurement), JSON_UNESCAPED_UNICODE);
|
||||||
|
ioApi($api_url,$data,$token);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//Insert new version
|
||||||
|
|
||||||
|
//GET PRODUCT ID
|
||||||
|
$sql = 'SELECT * FROM products WHERE productcode = ?';
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$stmt->execute([$products]);
|
||||||
|
$output = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
//CALL API
|
||||||
|
$data = json_encode(array("productrowid" => $output[0]['rowID'], "status" => 1, "version" => $versions , "measurement" => $measurement), JSON_UNESCAPED_UNICODE);
|
||||||
|
ioApi($api_url,$data,$token);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
// store measurement data into equipment data ++++++++++
|
||||||
|
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
function storeMeasurementEquipment($serialnumber){
|
||||||
|
|
||||||
|
include dirname(__FILE__,2).'/settings/settings.php';
|
||||||
|
|
||||||
|
//Connect to DB
|
||||||
|
$pdo = dbConnect($dbname);
|
||||||
|
|
||||||
|
//CHECK FOR SERIALNUMBER PROVIDED
|
||||||
|
$clause = (!empty($serialnumber) || $serialnumber !='')? 'e.serialnumber = "'.$serialnumber.'" AND': '';
|
||||||
|
|
||||||
|
//GET DATA
|
||||||
|
$sql = 'SELECT h.rowID, h.description,h.equipmentid,p.productcode,e.hw_version FROM history h JOIN equipment e ON h.equipmentid = e.rowID JOIN products p ON e.productrowid = p.rowID where '.$clause.' type="Maintenance_Test" and description like "%doubletestvalues%"';
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$stmt->execute();
|
||||||
|
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
$tests[] ='';
|
||||||
|
foreach ($messages as $message){
|
||||||
|
$dataset = json_decode($message['description'],true);
|
||||||
|
$dataset = $dataset["doubletestvalues"];
|
||||||
|
foreach ($dataset as $measure){
|
||||||
|
|
||||||
|
//Filter out correct measurements
|
||||||
|
if ($measure['pass'] === true){
|
||||||
|
$measurementid = $message['productcode'].'||'.$message['hw_version'].'||'.$message['equipmentid'].'||'.$message['rowID'];
|
||||||
|
$tests[$measurementid] [$measure['name']]= $measure['measure'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//COMPARISON -- CHECK DEVIATIONS FROM STANDARD
|
||||||
|
//LOOP over all test results
|
||||||
|
foreach ($tests as $test => $test_values){
|
||||||
|
|
||||||
|
//GET the productcode and version from Test result
|
||||||
|
if (str_contains($test,'||')){
|
||||||
|
|
||||||
|
$identification = explode('||',$test);
|
||||||
|
|
||||||
|
//GET RELATED PRODUCT DATA
|
||||||
|
$sql = 'SELECT pv.measurement FROM products_versions pv JOIN products p ON pv.productrowid = p.rowID WHERE p.productcode = ? AND pv.version = ?';
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$stmt->execute([$identification[0],$identification[1]]);
|
||||||
|
$product_measurements = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
$product_measurements = $product_measurements[0]['measurement'];
|
||||||
|
|
||||||
|
if (!empty($product_measurements)){
|
||||||
|
//Only run when there is a product version found
|
||||||
|
$product_measurements = json_decode($product_measurements,true);
|
||||||
|
|
||||||
|
$equipment_watchlist[] = '';
|
||||||
|
|
||||||
|
//Filter out non array or non objects
|
||||||
|
if (is_object($test_values) || is_array($test_values)){
|
||||||
|
//get individual test_mesurements
|
||||||
|
foreach($test_values as $test_measurement => $measured_value){
|
||||||
|
//Loop over the related product measurements
|
||||||
|
foreach($product_measurements as $product_measurement => $product_measured_values){
|
||||||
|
//Compare measured test with product measured test
|
||||||
|
if ($test_measurement == $product_measurement){
|
||||||
|
//Get the measured value from test
|
||||||
|
|
||||||
|
if (($measured_value <= $product_measured_values['stdev-3']) && ($measured_value >= $product_measured_values['stdev+3'])){
|
||||||
|
$equipment_watchlist[$test][] = array(
|
||||||
|
"measurement" => $test_measurement,
|
||||||
|
"value" => $measured_value,
|
||||||
|
"deviation" => 3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
elseif ((($measured_value <= $product_measured_values['stdev-2']) && ($measured_value >= $product_measured_values['stdev-3'])) || (($measured_value >= $product_measured_values['stdev+2']) && ($measured_value <= $product_measured_values['stdev+3']))){
|
||||||
|
$equipment_watchlist[$test][] = array(
|
||||||
|
"measurement" => $test_measurement,
|
||||||
|
"value" => $measured_value,
|
||||||
|
"deviation" => 2
|
||||||
|
);
|
||||||
|
}
|
||||||
|
elseif ((($measured_value <= $product_measured_values['stdev-1']) && ($measured_value >= $product_measured_values['stdev-2'])) || (($measured_value >= $product_measured_values['stdev+1']) && ($measured_value <= $product_measured_values['stdev+2']))){
|
||||||
|
$equipment_watchlist[$test][] = array(
|
||||||
|
"measurement" => $test_measurement,
|
||||||
|
"value" => $measured_value,
|
||||||
|
"deviation" => 1
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//STORE RESULTS IN EQUIPMENT DATA
|
||||||
|
foreach ($equipment_watchlist as $equipment => $data){
|
||||||
|
//GET the equipmentid and historyid from watchlist
|
||||||
|
if (str_contains($equipment,'||')){
|
||||||
|
$identification = explode('||',$equipment);
|
||||||
|
//json_encode array
|
||||||
|
$data = json_encode($data,JSON_UNESCAPED_UNICODE);
|
||||||
|
|
||||||
|
//Check if record exists
|
||||||
|
$sql = 'SELECT * FROM equipment_data WHERE equipmentid = ? and historyid =?';
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$stmt->execute([$identification[2],$identification[3]]);
|
||||||
|
$equipment_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
if (!empty($equipment_data)){
|
||||||
|
//EXIST UPDATE
|
||||||
|
$sql = 'UPDATE equipment_data SET measurement = ? WHERE equipmentid = ? and historyid =?';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//EXIST INSERT
|
||||||
|
$sql = 'INSERT INTO equipment_data (measurement, equipmentid, historyid) VALUES (?,?,?)';
|
||||||
|
}
|
||||||
|
|
||||||
|
//EXECUTE QUERY
|
||||||
|
$stmt = $pdo->prepare($sql);
|
||||||
|
$stmt->execute([$data, $identification[2],$identification[3]]);
|
||||||
|
$equipment_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -24,6 +24,7 @@ $update_allowed = isAllowed($page ,$_SESSION['profile'],$_SESSION['permission'],
|
|||||||
$update_allowed_edit = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'U');
|
$update_allowed_edit = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'U');
|
||||||
$delete_allowed = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'D');
|
$delete_allowed = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'D');
|
||||||
$create_allowed = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'C');
|
$create_allowed = isAllowed($page_manage ,$_SESSION['profile'],$_SESSION['permission'],'C');
|
||||||
|
$view_product = isAllowed('product' ,$_SESSION['profile'],$_SESSION['permission'],'R');
|
||||||
|
|
||||||
//GET Details from URL
|
//GET Details from URL
|
||||||
$GET_VALUES = urlGETdetails($_GET) ?? '';
|
$GET_VALUES = urlGETdetails($_GET) ?? '';
|
||||||
@@ -142,11 +143,11 @@ $view .= ' <div class="content-block order-details">
|
|||||||
</div>
|
</div>
|
||||||
<div class="order-detail">
|
<div class="order-detail">
|
||||||
<h3>'.$product_code.'</h3>
|
<h3>'.$product_code.'</h3>
|
||||||
<p>'.$responses->productcode.'</p>
|
<p>'.(($view_product == 1)? '<a href="index.php?page=product&rowID='.$responses->productrowid.'" class="btn2">'.$responses->productcode.'</a>':$responses->productcode).'</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="order-detail">
|
<div class="order-detail">
|
||||||
<h3>'.$product_name.'</h3>
|
<h3>'.$product_name.'</h3>
|
||||||
<p>'.$responses->productname.'</p>
|
<p>'.(($view_product == 1)? '<a href="index.php?page=product&rowID='.$responses->productrowid.'" class="btn2">'.$responses->productname.'</a>':$responses->productname).'</p>
|
||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
$picture = glob("./assets/images/products/".$responses->productcode.".{jpg,jpeg,png,gif}", GLOB_BRACE);
|
$picture = glob("./assets/images/products/".$responses->productcode.".{jpg,jpeg,png,gif}", GLOB_BRACE);
|
||||||
|
|||||||
@@ -26,6 +26,16 @@ if ($update_allowed === 1){
|
|||||||
//GEOLOCATION UPDATE
|
//GEOLOCATION UPDATE
|
||||||
convertCartest();
|
convertCartest();
|
||||||
}
|
}
|
||||||
|
if (isset($_POST['updateproductmeusurements'])){
|
||||||
|
$total_measurement = traintotalMeasurement();
|
||||||
|
$total_results = statisticalAnalyses($total_measurement);
|
||||||
|
storeMeasurementProduct($total_results, $_SESSION['userkey']);
|
||||||
|
}
|
||||||
|
if (isset($_POST['updateequipmentmeusurements'])){
|
||||||
|
storeMeasurementEquipment('');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle success messages
|
// Handle success messages
|
||||||
@@ -56,21 +66,39 @@ $view .='
|
|||||||
|
|
||||||
$view .= '<div class="tabs">
|
$view .= '<div class="tabs">
|
||||||
<a href="#" class="active">'.$general_actions .'</a>
|
<a href="#" class="active">'.$general_actions .'</a>
|
||||||
|
<a href="#" class="">Learning</a>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
|
|
||||||
if ($update_allowed === 1){
|
if ($update_allowed === 1){
|
||||||
$view .= '<div class="content-block tab-content active">
|
$view .= '<div class="content-block tab-content active">
|
||||||
<div class="form responsive-width-100">
|
<div class="form responsive-width-100">
|
||||||
<label for="service">Expired contract closure</label>
|
<label for="service">Expired contract closure</label>
|
||||||
<input type="submit" name="closeContract" style="width: 15%;" value="closeContract" class="btn">
|
<input type="submit" name="closeContract" style="width: 15%;" value="closeContract" class="btn">
|
||||||
<label for="service">CarTestUpdate</label>
|
</div>
|
||||||
<input type="submit" name="updatecartest" style="width: 15%;" value="CarTestUpdate" class="btn">
|
<div class="form responsive-width-100">
|
||||||
<label for="service">GeoUpdate</label>
|
<label for="service">CarTestUpdate</label>
|
||||||
<input type="submit" name="geoupdate" style="width: 15%;" value="GeoUpdate" class="btn">
|
<input type="submit" name="updatecartest" style="width: 15%;" value="CarTestUpdate" class="btn">
|
||||||
|
</div>
|
||||||
|
<div class="form responsive-width-100">
|
||||||
|
<label for="service">GeoUpdate</label>
|
||||||
|
<input type="submit" name="geoupdate" style="width: 15%;" value="GeoUpdate" class="btn">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>';
|
</div>';
|
||||||
}
|
}
|
||||||
|
if ($update_allowed === 1){
|
||||||
|
$view .= '<div class="content-block tab-content">
|
||||||
|
<div class="form responsive-width-100">
|
||||||
|
<label for="service">Train Products</label>
|
||||||
|
<input type="submit" name="updateproductmeusurements" style="width: 15%;" value="Train Products" class="btn">
|
||||||
|
</div>
|
||||||
|
<div class="form responsive-width-100">
|
||||||
|
<label for="service">Train Assets</label>
|
||||||
|
<input type="submit" name="updateequipmentmeusurements" style="width: 15%;" value="Train Assets" class="btn">
|
||||||
|
</div>
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
$view .= '</form>';
|
$view .= '</form>';
|
||||||
|
|
||||||
//Output
|
//Output
|
||||||
|
|||||||
@@ -164,6 +164,7 @@ $view .= '<div class="content-block">
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>'.$product_version_number.'</th>
|
<th>'.$product_version_number.'</th>
|
||||||
|
<th>'.$product_status.'</th>
|
||||||
<th>'.$product_version_version.'</th>
|
<th>'.$product_version_version.'</th>
|
||||||
<th>'.$product_version_software .'</th>
|
<th>'.$product_version_software .'</th>
|
||||||
<th>'.$general_actions.'</th>
|
<th>'.$general_actions.'</th>
|
||||||
@@ -171,8 +172,10 @@ $view .= '<div class="content-block">
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>';
|
<tbody>';
|
||||||
foreach ($product_versions as $version){
|
foreach ($product_versions as $version){
|
||||||
|
|
||||||
$view .= '<tr>
|
$view .= '<tr>
|
||||||
<td>'.$version->rowID.'</td>
|
<td>'.$version->rowID.'</td>
|
||||||
|
<td>'.(($version->status == 1)? '<span class="status enabled">'.$prod_status_1:'<span class="status">'.$prod_status_0).'</td>
|
||||||
<td>'.$version->version.'</td>
|
<td>'.$version->version.'</td>
|
||||||
<td>'.$version->software.'</td>
|
<td>'.$version->software.'</td>
|
||||||
<td><a href="index.php?page=products_versions&productrowid='.$_GET['rowID'].'&rowID='.$version->rowID.'" class="btn_link">'.$general_view.'</a></td>
|
<td><a href="index.php?page=products_versions&productrowid='.$_GET['rowID'].'&rowID='.$version->rowID.'" class="btn_link">'.$general_view.'</a></td>
|
||||||
|
|||||||
@@ -132,11 +132,41 @@ $view .= '<div class="content-block tab-content active">
|
|||||||
<input id="name" type="text" name="software" placeholder="'.$product_version_software.'" value="'.$products_versions['software'].'" required>
|
<input id="name" type="text" name="software" placeholder="'.$product_version_software.'" value="'.$products_versions['software'].'" required>
|
||||||
';
|
';
|
||||||
|
|
||||||
if (isset($_GET['rowID']) && $_GET['rowID'] !=''){
|
if (isset($_GET['rowID']) && $_GET['rowID'] !='' && !empty($products_versions['measurement'])){
|
||||||
|
$measurements = json_decode($products_versions['measurement'],true);
|
||||||
|
|
||||||
$view .= '
|
$view .= '
|
||||||
<label for="">'.$product_version_measurement.'</label>
|
<label for="">'.$product_version_measurement.'</label>
|
||||||
<textarea><pre>'.$products_versions['measurement'].'</pre></textarea>
|
<div class="table">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>Test</td>
|
||||||
|
<td>N</td>
|
||||||
|
<td>Average</td>
|
||||||
|
<td>Median</td>
|
||||||
|
<td>STdev</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
';
|
';
|
||||||
|
foreach ($measurements as $name => $measurement){
|
||||||
|
$view .='
|
||||||
|
<tr>
|
||||||
|
<td>'.$name.'</td>
|
||||||
|
<td>'.$measurement['n'].'</td>
|
||||||
|
<td>'.$measurement['average'].'</td>
|
||||||
|
<td>'.$measurement['median'].'</td>
|
||||||
|
<td>'.$measurement['stdev'].'</td>
|
||||||
|
</tr>
|
||||||
|
';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$view .= '</tbody>
|
||||||
|
</table>
|
||||||
|
</div>';
|
||||||
|
|
||||||
}
|
}
|
||||||
$view .= '
|
$view .= '
|
||||||
<input type="hidden" name="rowID" value="'.$products_versions['rowID'].'">
|
<input type="hidden" name="rowID" value="'.$products_versions['rowID'].'">
|
||||||
|
|||||||
Reference in New Issue
Block a user