parent
ca89e02c4e
commit
f530c5a2a1
3
ajax.php
3
ajax.php
@ -542,8 +542,7 @@ function sw_filter($is_os = false)
|
|||||||
'table_joins' => [
|
'table_joins' => [
|
||||||
"LEFT JOIN `sagacity`.`target_software` ts ON ts.`sft_id` = s.`id`" . ($tgt_id ? " AND ts.`tgt_id` = $tgt_id" : "")
|
"LEFT JOIN `sagacity`.`target_software` ts ON ts.`sft_id` = s.`id`" . ($tgt_id ? " AND ts.`tgt_id` = $tgt_id" : "")
|
||||||
],
|
],
|
||||||
'order' => 's.cpe',
|
'order' => 's.cpe'
|
||||||
'limit' => 25
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$sw = $db->help->execute();
|
$sw = $db->help->execute();
|
||||||
|
290
data/catmgmt.inc
290
data/catmgmt.inc
@ -13,29 +13,30 @@
|
|||||||
* Change Log:
|
* Change Log:
|
||||||
* - May 2, 2018 - File created, Moved catalog mgmt html content from index page to this for easier viewing and refined the code a little
|
* - May 2, 2018 - File created, Moved catalog mgmt html content from index page to this for easier viewing and refined the code a little
|
||||||
*/
|
*/
|
||||||
|
global $db;
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<script src='/script/datatables/DataTables-1.10.9/js/jquery.dataTables.min.js'></script>
|
<script
|
||||||
<link rel="stylesheet" href="/script/datatables/DataTables-1.10.9/css/jquery.dataTables.min.css" />
|
src='/script/datatables/DataTables-1.10.9/js/jquery.dataTables.min.js'></script>
|
||||||
<link rel='stylesheet' href='/script/jquery-ui/jquery-ui.min.css' />
|
<link rel="stylesheet"
|
||||||
|
href="/script/datatables/DataTables-1.10.9/css/jquery.dataTables.min.css" />
|
||||||
|
<link rel='stylesheet' href='/script/jquery-ui/jquery-ui.theme.min.css' />
|
||||||
|
|
||||||
<style type='text/css'>
|
<style type='text/css'>
|
||||||
#availableSoftware {
|
#availableSoftware {
|
||||||
height: 227px;
|
height: 227px;
|
||||||
width: 240px;
|
width: 240px;
|
||||||
overflow-x: scroll;
|
overflow-x: scroll;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.25em;
|
line-height: 1.25em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.swmouseover {
|
.swmouseover {
|
||||||
background-color: #1D57A0;
|
background-color: #1D57A0;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script src='data.min.js' type='text/javascript'></script>
|
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
$(function () {
|
$(function () {
|
||||||
$('#catalog').DataTable({
|
$('#catalog').DataTable({
|
||||||
@ -45,73 +46,226 @@
|
|||||||
close_box();
|
close_box();
|
||||||
});
|
});
|
||||||
$('#release-date').datepicker();
|
$('#release-date').datepicker();
|
||||||
$('.button,.button-delete').mouseover(function(){$(this).addClass('mouseover');});
|
|
||||||
$('.button,.button-delete').mouseout(function(){$(this).removeClass('mouseover');});
|
|
||||||
});
|
});
|
||||||
</script>
|
|
||||||
<style type="text/css">
|
function close_box() {
|
||||||
thead {
|
$('.backdrop, .box').animate({
|
||||||
background-image: linear-gradient(to bottom, #ECECEC, rgba(177,177,177,0.72));
|
'opacity': '0'
|
||||||
color: #4c4c4c;
|
}, 300, 'linear', function () {
|
||||||
|
$('.backdrop, .box').css('display', 'none');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function view_box() {
|
||||||
|
$('.backdrop').animate({
|
||||||
|
'opacity': '.5'
|
||||||
|
}, 300, 'linear');
|
||||||
|
$('.backdrop').css('display', 'block');
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_cat_data(fname) {
|
||||||
|
$('#popup').animate({
|
||||||
|
'opacity': '1.00'
|
||||||
|
}, 300, 'linear');
|
||||||
|
$('#popup').css('display', 'block');
|
||||||
|
view_box();
|
||||||
|
|
||||||
|
$.ajax('/ajax.php', {
|
||||||
|
data: {
|
||||||
|
action: 'get-cat-data',
|
||||||
|
'fname': fname
|
||||||
|
},
|
||||||
|
beforeSend: function () {
|
||||||
|
$('#id').val('');
|
||||||
|
$('#checklist-id').text('');
|
||||||
|
$('#name').val('');
|
||||||
|
$('#description').val('');
|
||||||
|
$('#version').text('');
|
||||||
|
$('#release').text('');
|
||||||
|
$('#icon').val('');
|
||||||
|
$('#type').text('');
|
||||||
|
$('#software option').remove();
|
||||||
|
$('#cpe').val('');
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
$('#id').val(data.id);
|
||||||
|
$('#checklist-id').text(data.checklist_id);
|
||||||
|
$('#name').val(data.name);
|
||||||
|
$('#description').val(data.description);
|
||||||
|
$('#version').text(data.ver);
|
||||||
|
$('#release').text(data.release);
|
||||||
|
$('#icon').val(data.icon);
|
||||||
|
$('#type').text(data.type);
|
||||||
|
|
||||||
|
var dt = new Date(data.date.date);
|
||||||
|
$('#release-date').val(dt.getMonth() + "/" + dt.getDate() + '/' + dt.getFullYear());
|
||||||
|
|
||||||
|
for (var x in data.sw) {
|
||||||
|
$('#software').append("<option id='" + data.sw[x].id + "'>" +
|
||||||
|
data.sw[x].man + " " + data.sw[x].name + " " + data.sw[x].ver +
|
||||||
|
"</option>");
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#software option').dblclick(remove_Software);
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
|
console.error(error);
|
||||||
|
},
|
||||||
|
timeout: 3000,
|
||||||
|
method: 'post',
|
||||||
|
dataType: 'json'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_Software() {
|
||||||
|
$.ajax("/ajax.php", {
|
||||||
|
data: {
|
||||||
|
action: 'checklist-remove-software',
|
||||||
|
chk_id: $('#id').val(),
|
||||||
|
sw_id: $(this).attr('id')
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
if (data.error) {
|
||||||
|
alert(data.error);
|
||||||
|
}
|
||||||
|
else if (data.success) {
|
||||||
|
alert(data.success);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
|
console.error(error);
|
||||||
|
},
|
||||||
|
dataType: 'json',
|
||||||
|
timeout: 3000,
|
||||||
|
method: 'post'
|
||||||
|
});
|
||||||
|
|
||||||
|
$(this).remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
function autocomplete_software() {
|
||||||
|
if ($('#cpe').val().length < 3) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax('/ajax.php', {
|
||||||
|
data: {
|
||||||
|
action: ($('#os').is(":checked") ? 'os_filter' : 'sw_filter'),
|
||||||
|
filter: $('#cpe').val()
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
$('#availableSoftware div').remove();
|
||||||
|
for (var x in data) {
|
||||||
|
$('#availableSoftware').append("<div sw_id='" + data[x].sw_id + "' cpe='" + data[x].cpe + "'>" + data[x].sw_string + "</div>");
|
||||||
|
}
|
||||||
|
$('#availableSoftware').show();
|
||||||
|
|
||||||
|
$('#availableSoftware div').each(function () {
|
||||||
|
$(this).on("mouseover", function () {
|
||||||
|
$(this).addClass("swmouseover");
|
||||||
|
});
|
||||||
|
$(this).on("mouseout", function () {
|
||||||
|
$(this).removeClass("swmouseover");
|
||||||
|
});
|
||||||
|
$(this).on("click", function () {
|
||||||
|
add_software($(this).attr('sw_id'));
|
||||||
|
$('#software').append("<option value='" + $(this).attr('sw_id') + "' ondblclick='remove_Software();$(this).remove();'>" + $(this).html() + "</option>");
|
||||||
|
$(this).remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
|
console.error(error);
|
||||||
|
},
|
||||||
|
dataType: 'json',
|
||||||
|
method: 'post',
|
||||||
|
timeout: 5000
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_software(sw_id) {
|
||||||
|
$.ajax('/ajax.php', {
|
||||||
|
data: {
|
||||||
|
action: 'checklist-add-software',
|
||||||
|
'sw_id': sw_id,
|
||||||
|
chk_id: $('#id').val()
|
||||||
|
},
|
||||||
|
success: function (data) {
|
||||||
|
alert(data.status);
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
|
console.error(error);
|
||||||
|
},
|
||||||
|
dataType: 'json',
|
||||||
|
method: 'post',
|
||||||
|
timeout: 3000
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style type="text/css">
|
||||||
|
thead {
|
||||||
|
background-image: linear-gradient(to bottom, #ECECEC, rgba(177, 177, 177, 0.72));
|
||||||
|
color: #4c4c4c;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<table id='catalog' class='display'>
|
<table id='catalog' class='display'>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>File Name</th>
|
<th>File Name</th>
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
<th>Start Time</th>
|
<th>Start Time</th>
|
||||||
<th>% Complete</th>
|
<th>% Complete</th>
|
||||||
<th>STIG Count</th>
|
<th>STIG Count</th>
|
||||||
</tr>
|
<th>eChecklist</th>
|
||||||
</thead>
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php
|
<?php
|
||||||
$cat_scripts = $db->get_Catalog_Script();
|
$cat_scripts = $db->get_Catalog_Script();
|
||||||
$odd = true;
|
foreach ($cat_scripts as $cat_script) {
|
||||||
foreach ($cat_scripts as $key => $cat_script) {
|
print <<<EOR
|
||||||
print <<<EOL
|
|
||||||
<tr>
|
<tr>
|
||||||
<td onclick='javascript:get_cat_data("{$cat_script->file_name}");'><a href='javascript:void(0);'>{$cat_script->file_name}</a></td>
|
<td onclick='javascript:get_cat_data("{$cat_script->file_name}");'>
|
||||||
|
<a href='javascript:void(0);'>{$cat_script->file_name}</a>
|
||||||
|
</td>
|
||||||
<td>{$cat_script->status}</td>
|
<td>{$cat_script->status}</td>
|
||||||
<td>{$cat_script->start_time->format("Y-m-d H:i:s")}</td>
|
<td>{$cat_script->start_time->format("Y-m-d H:i:s")}</td>
|
||||||
<td>{$cat_script->perc_comp}</td>
|
<td>{$cat_script->perc_comp}</td>
|
||||||
<td>{$cat_script->stig_count}</td>
|
<td>{$cat_script->stig_count}</td>
|
||||||
|
<td>
|
||||||
|
<a href='/data/gen-echecklist.php?id={$cat_script->id}' target='_blank'><img src='/img/scan_types/echecklist.png' style='width:32px'; /></a>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
EOL;
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
EOR;
|
||||||
</tbody>
|
}
|
||||||
</table>
|
?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id='popup' class='box'>
|
<div id='popup' class='box'>
|
||||||
<div style='display:inline-block;width:49%;vertical-align:top;'>
|
<div style='display: inline-block; width: 49%; vertical-align: top;'>
|
||||||
<input type='hidden' id='id' />
|
<input type='hidden' id='id' />
|
||||||
Checklist ID: <span id='checklist-id'></span><br />
|
Checklist ID: <span id='checklist-id'></span><br />
|
||||||
Name: <input type='text' id='name' /><br />
|
Name: <input type='text' id='name' /><br />
|
||||||
Description: <textarea id='description'></textarea><br />
|
Description: <input type='text' id='description' /><br />
|
||||||
Version: <span id='version'></span><br />
|
Version: <span id='version'></span><br />
|
||||||
Release: <span id='release'></span><br />
|
Release: <span id='release'></span><br />
|
||||||
Release Date: <input type='text' id='release-date' /><br />
|
Release Date: <input type='text' id='release-date' /><br />
|
||||||
Icon: <input type='text' id='icon' title='Put file in <?php print realpath(DOC_ROOT . "/img/checklist_icons") ?> and copy/paste the base filename here' /><br />
|
Icon: <input type='text' id='icon' /><br />
|
||||||
Type: <span id='type'></span><br />
|
Type: <span id='type'></span>
|
||||||
<input type='button' class="button" value='Save' onclick='save_checklist();' />
|
</div>
|
||||||
<!-- <input type='button' class='button-delete' value='Delete' onclick='' /> -->
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style='display:inline-block;width:49%;'>
|
<div style='display: inline-block; width: 49%;'>
|
||||||
<select id='software' multiple size='10' style='width:275px;' title='Double-click to remove software'></select><br />
|
<select id='software' multiple size='10'></select><br />
|
||||||
|
Add CPE: <input type='text' id='cpe' onkeyup='javascript:autocomplete_software();' />
|
||||||
Add CPE: <input type='text' id='cpe' onkeyup='javascript:autocomplete_software();' />
|
<label for='os'>OS?</label> <input type='checkbox' id='os' /><br />
|
||||||
<label for='os'>OS?</label>
|
<div id="availableSoftware"></div>
|
||||||
<input type='checkbox' id='os' /><br />
|
</div>
|
||||||
<div id="availableSoftware"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="backdrop"></div>
|
<div class="backdrop"></div>
|
||||||
|
197
data/gen-echecklist.php
Normal file
197
data/gen-echecklist.php
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
set_time_limit(0);
|
||||||
|
require_once 'config.inc';
|
||||||
|
require_once 'helper.inc';
|
||||||
|
require_once 'vendor/autoload.php';
|
||||||
|
require_once 'database.inc';
|
||||||
|
require_once 'excelConditionalStyles.inc';
|
||||||
|
|
||||||
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||||
|
use Monolog\Logger;
|
||||||
|
use Monolog\Handler\StreamHandler;
|
||||||
|
|
||||||
|
$log_level = convert_log_level();
|
||||||
|
$log = new Logger("eChecklist-export");
|
||||||
|
$log->pushHandler(new StreamHandler(LOG_PATH . "/echecklist-export.log", $log_level));
|
||||||
|
|
||||||
|
global $conditions, $validation, $borders;
|
||||||
|
|
||||||
|
$db = new db();
|
||||||
|
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
|
||||||
|
|
||||||
|
if(!$id) {
|
||||||
|
die("Failed to read checklist ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
$host_status = [
|
||||||
|
$conditions['open'],
|
||||||
|
$conditions['exception'],
|
||||||
|
$conditions['false_positive'],
|
||||||
|
$conditions['not_a_finding'],
|
||||||
|
$conditions['not_applicable'],
|
||||||
|
$conditions['no_data'],
|
||||||
|
$conditions['not_reviewed'],
|
||||||
|
$conditions['true'],
|
||||||
|
$conditions['false']
|
||||||
|
];
|
||||||
|
|
||||||
|
/** @var checklist $chk */
|
||||||
|
$chk = $db->get_Checklist($id);
|
||||||
|
if(is_array($chk) && count($chk) && isset($chk[0])) {
|
||||||
|
$chk = $chk[0];
|
||||||
|
} else {
|
||||||
|
die("Failed to find the checklist");
|
||||||
|
}
|
||||||
|
|
||||||
|
$Reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile("../ste/eChecklist-Template.xlsx");
|
||||||
|
$ss = $Reader->load("../ste/eChecklist-Template.xlsx");
|
||||||
|
|
||||||
|
$log->debug("Loaded template");
|
||||||
|
|
||||||
|
$ss->setActiveSheetIndexByName('Cover Sheet')
|
||||||
|
->setCellValue("B5", "{$chk->get_Name()} eChecklist")
|
||||||
|
->setCellValue("B9", "")
|
||||||
|
->setCellValue("B2", (substr($chk->get_File_Name(), 0, 1) == 'U' ? "UNCLASSIFIED" : "FOUO"))
|
||||||
|
->setCellValue("B12", "by:\r" . COMPANY . "\r" . COMP_ADD)
|
||||||
|
->setCellValue("B15", "Derived from: " . SCG . "\rReasons: <reasons>\rDeclassify on: " . DECLASSIFY_ON);
|
||||||
|
|
||||||
|
// set properties
|
||||||
|
$ss->getProperties()
|
||||||
|
->setCreator(CREATOR);
|
||||||
|
$ss->getProperties()
|
||||||
|
->setLastModifiedBy(LAST_MODIFIED_BY);
|
||||||
|
$ss->getProperties()
|
||||||
|
->setCompany(COMPANY);
|
||||||
|
$ss->getProperties()
|
||||||
|
->setTitle("{$chk->get_Name()} eChecklist");
|
||||||
|
$ss->getProperties()
|
||||||
|
->setSubject("{$chk->get_Name()} eChecklist");
|
||||||
|
$ss->getProperties()
|
||||||
|
->setDescription("{$chk->get_Name()} eChecklist");
|
||||||
|
|
||||||
|
// set active sheet
|
||||||
|
$ss->setActiveSheetIndex(2);
|
||||||
|
$sheet = $ss->getActiveSheet();
|
||||||
|
$sheet->setCellValue("B9", "{$chk->get_Name()} V{$chk->get_Version()}R{$chk->get_Release()} ({$chk->get_type()})");
|
||||||
|
$sheet->setTitle($chk->get_Name());
|
||||||
|
$sheet->setCellValue("A1", (substr($chk->get_File_Name(), 0, 1) == 'U' ? "UNCLASSIFIED" : "UNCLASSIFIED//FOUO"));
|
||||||
|
|
||||||
|
$db->help->select("pdi", null, [
|
||||||
|
[
|
||||||
|
'field' => 'pcl.checklist_id',
|
||||||
|
'op' => '=',
|
||||||
|
'value' => $id
|
||||||
|
]
|
||||||
|
], [
|
||||||
|
'table_joins' => [
|
||||||
|
"JOIN pdi_checklist_lookup pcl ON pcl.pdi_id = pdi.pdi_id"
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
$pdis = $db->help->execute();
|
||||||
|
|
||||||
|
$row = 11;
|
||||||
|
if(is_array($pdis) && count($pdis)) {
|
||||||
|
foreach($pdis as $p) {
|
||||||
|
$overall_str = "=IF(" .
|
||||||
|
"COUNTIF(F{$row}:F{$row},\"Open\")+" .
|
||||||
|
"COUNTIF(F{$row}:F{$row},\"Exception\")" .
|
||||||
|
">0,\"Open\",\"Not a Finding\")";
|
||||||
|
$same_str = "=IF(" .
|
||||||
|
"COUNTIF(F{$row}:F{$row},F{$row})=" .
|
||||||
|
"COLUMNS(F{$row}:F{$row}), TRUE, FALSE)";
|
||||||
|
|
||||||
|
$sheet->setCellValue("A{$row}", $p['STIG_ID'])
|
||||||
|
->setCellValue("B{$row}", $p['VMS_ID'])
|
||||||
|
->setCellValue("C{$row}", $p['CAT'])
|
||||||
|
->setCellValue("D{$row}", $p['IA_Controls'])
|
||||||
|
->setCellValue("E{$row}", $p['short_title'])
|
||||||
|
->setCellValue("F{$row}", "Not Reviewed")
|
||||||
|
->setCellValue("G{$row}", $overall_str)
|
||||||
|
->setCellValue("H{$row}", $same_str, true)
|
||||||
|
->setCellValue("I{$row}", "")
|
||||||
|
->setCellValue("J{$row}", $p['check_contents'])
|
||||||
|
->getStyle("H11:H{$sheet->getHighestDataRow()}")
|
||||||
|
->setConditionalStyles([$conditions['true'], $conditions['false']]);
|
||||||
|
$row++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sheet->setDataValidation("F11:F{$row}", clone $validation['host_status']);
|
||||||
|
$sheet->getStyle("F11:G{$row}")
|
||||||
|
->setConditionalStyles($host_status);
|
||||||
|
$sheet->getStyle("C11:C{$row}")
|
||||||
|
->setConditionalStyles(array($conditions['cat_1'], $conditions['cat_2'], $conditions['cat_3']));
|
||||||
|
|
||||||
|
$sheet->getStyle("I11:I{$row}")
|
||||||
|
->setConditionalStyles(
|
||||||
|
[
|
||||||
|
$conditions['open_conflict'],
|
||||||
|
$conditions['nf_na_conflict']
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$sheet->getStyle("A1:I{$row}")
|
||||||
|
->applyFromArray($borders);
|
||||||
|
$sheet->freezePane("A11");
|
||||||
|
$sheet->setAutoFilter("A10:I10");
|
||||||
|
|
||||||
|
$sheet->getColumnDimension("F")->setWidth(14.14);
|
||||||
|
$sheet->setCellValue("F8", "=COUNTIFS(F11:F{$row}, \"Open\", \$C\$11:\$C\${$row}, \"I\")")
|
||||||
|
->setCellValue("F9", "=COUNTIF(F11:F{$row}, \"Not Reviewed\")")
|
||||||
|
->setCellValue("F10", "Example");
|
||||||
|
$sheet->getStyle("F10")
|
||||||
|
->getFont()
|
||||||
|
->setBold(true);
|
||||||
|
$sheet->getStyle("F10")
|
||||||
|
->getFill()
|
||||||
|
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
|
||||||
|
->setStartColor($GLOBALS['yellow']);
|
||||||
|
|
||||||
|
$open_cat_1 = "=COUNTIFS(F11:F{$row}, \"Open\", \$C\$11:\$C\${$row}, \"I\")";
|
||||||
|
$open_cat_2 = "=COUNTIFS(F11:F{$row}, \"Open\", \$C\$11:\$C\${$row}, \"II\")";
|
||||||
|
$open_cat_3 = "=COUNTIFS(F11:F{$row}, \"Open\", \$C\$11:\$C\${$row}, \"III\")";
|
||||||
|
$not_a_finding = "=COUNTIF(F11:F{$row}, \"Not a Finding\")";
|
||||||
|
$not_applicable = "=COUNTIF(F11:F{$row}, \"Not Applicable\")";
|
||||||
|
$not_reviewed = "=COUNTIF(F11:F{$row}, \"Not Reviewed\")";
|
||||||
|
|
||||||
|
$sheet->getStyle("G8:H8")
|
||||||
|
->getFill()
|
||||||
|
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
|
||||||
|
->setStartColor($GLOBALS['orange']);
|
||||||
|
$sheet->getStyle("G9:H9")
|
||||||
|
->getFill()
|
||||||
|
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
|
||||||
|
->setStartColor($GLOBALS['green']);
|
||||||
|
$sheet->getStyle("G10:H10")
|
||||||
|
->getFill()
|
||||||
|
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
|
||||||
|
->setStartColor($GLOBALS['yellow']);
|
||||||
|
$sheet->getStyle("I10:J10")
|
||||||
|
->getFill()
|
||||||
|
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
|
||||||
|
->setStartColor($GLOBALS['light_gray']);
|
||||||
|
|
||||||
|
$sheet->setCellValue("G8", "=COUNTIF(G11:H{$row}, \"Open\")")
|
||||||
|
->setCellValue("G9", "=COUNTIF(G11:G{$row}, \"Not a Finding\")")
|
||||||
|
->setCellValue("H8", "=COUNTIF(H11:H{$row}, FALSE)")
|
||||||
|
->setCellValue("H9", "=COUNTIF(H11:H{$row}, TRUE)")
|
||||||
|
->setCellValue("E3", "")
|
||||||
|
->setCellValue("E4", "")
|
||||||
|
->setCellValue("G4", "")
|
||||||
|
->setCellValue('C2', $open_cat_1)
|
||||||
|
->setCellValue('C3', $open_cat_2)
|
||||||
|
->setCellValue('C4', $open_cat_3)
|
||||||
|
->setCellValue('C5', $not_a_finding)
|
||||||
|
->setCellValue('C6', $not_applicable)
|
||||||
|
->setCellValue('C7', $not_reviewed);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
print "Error";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**/
|
||||||
|
$writer = new Xlsx($ss);
|
||||||
|
$writer->setPreCalculateFormulas(false);
|
||||||
|
header("Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||||
|
header("Content-disposition: attachment; filename='{$chk->get_Name()}-eChecklist.xlsx'");
|
||||||
|
$writer->save("php://output");
|
248
data/index.php
248
data/index.php
@ -405,253 +405,7 @@ include_once 'header.inc';
|
|||||||
include_once 'settings.inc';
|
include_once 'settings.inc';
|
||||||
}
|
}
|
||||||
elseif ($page == 'CatMgmt') {
|
elseif ($page == 'CatMgmt') {
|
||||||
?>
|
include_once 'catmgmt.inc';
|
||||||
<script src='/script/datatables/DataTables-1.10.9/js/jquery.dataTables.min.js'></script>
|
|
||||||
<link rel="stylesheet" href="/script/datatables/DataTables-1.10.9/css/jquery.dataTables.min.css" />
|
|
||||||
<link rel='stylesheet' href='/script/jquery-ui-1.11.4/jquery-ui.min.css' />
|
|
||||||
|
|
||||||
<style type='text/css'>
|
|
||||||
#availableSoftware {
|
|
||||||
height: 227px;
|
|
||||||
width: 240px;
|
|
||||||
overflow-x: scroll;
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 1.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.swmouseover {
|
|
||||||
background-color: #1D57A0;
|
|
||||||
color: #fff;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<script type='text/javascript'>
|
|
||||||
$(function () {
|
|
||||||
$('#catalog').DataTable({
|
|
||||||
'stripeClasses': ['odd_row', 'even_row']
|
|
||||||
});
|
|
||||||
$('.close, .backdrop').click(function () {
|
|
||||||
close_box();
|
|
||||||
});
|
|
||||||
$('#release-date').datepicker();
|
|
||||||
});
|
|
||||||
|
|
||||||
function close_box() {
|
|
||||||
$('.backdrop, .box').animate({
|
|
||||||
'opacity': '0'
|
|
||||||
}, 300, 'linear', function () {
|
|
||||||
$('.backdrop, .box').css('display', 'none');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function view_box() {
|
|
||||||
$('.backdrop').animate({
|
|
||||||
'opacity': '.5'
|
|
||||||
}, 300, 'linear');
|
|
||||||
$('.backdrop').css('display', 'block');
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_cat_data(fname) {
|
|
||||||
$('#popup').animate({
|
|
||||||
'opacity': '1.00'
|
|
||||||
}, 300, 'linear');
|
|
||||||
$('#popup').css('display', 'block');
|
|
||||||
view_box();
|
|
||||||
|
|
||||||
$.ajax('/ajax.php', {
|
|
||||||
data: {
|
|
||||||
action: 'get-cat-data',
|
|
||||||
'fname': fname
|
|
||||||
},
|
|
||||||
beforeSend: function () {
|
|
||||||
$('#id').val('');
|
|
||||||
$('#checklist-id').text('');
|
|
||||||
$('#name').val('');
|
|
||||||
$('#description').val('');
|
|
||||||
$('#version').text('');
|
|
||||||
$('#release').text('');
|
|
||||||
$('#icon').val('');
|
|
||||||
$('#type').text('');
|
|
||||||
$('#software option').remove();
|
|
||||||
$('#cpe').val('');
|
|
||||||
},
|
|
||||||
success: function (data) {
|
|
||||||
$('#id').val(data.id);
|
|
||||||
$('#checklist-id').text(data.checklist_id);
|
|
||||||
$('#name').val(data.name);
|
|
||||||
$('#description').val(data.description);
|
|
||||||
$('#version').text(data.ver);
|
|
||||||
$('#release').text(data.release);
|
|
||||||
$('#icon').val(data.icon);
|
|
||||||
$('#type').text(data.type);
|
|
||||||
|
|
||||||
var dt = new Date(data.date.date);
|
|
||||||
$('#release-date').val(dt.getMonth() + "/" + dt.getDate() + '/' + dt.getFullYear());
|
|
||||||
|
|
||||||
for (var x in data.sw) {
|
|
||||||
$('#software').append("<option id='" + data.sw[x].id + "'>" +
|
|
||||||
data.sw[x].man + " " + data.sw[x].name + " " + data.sw[x].ver +
|
|
||||||
"</option>");
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#software option').dblclick(remove_Software);
|
|
||||||
},
|
|
||||||
error: function (xhr, status, error) {
|
|
||||||
console.error(error);
|
|
||||||
},
|
|
||||||
timeout: 3000,
|
|
||||||
method: 'post',
|
|
||||||
dataType: 'json'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function remove_Software() {
|
|
||||||
$.ajax("/ajax.php", {
|
|
||||||
data: {
|
|
||||||
action: 'checklist-remove-software',
|
|
||||||
chk_id: $('#id').val(),
|
|
||||||
sw_id: $(this).attr('id')
|
|
||||||
},
|
|
||||||
success: function (data) {
|
|
||||||
if (data.error) {
|
|
||||||
alert(data.error);
|
|
||||||
}
|
|
||||||
else if (data.success) {
|
|
||||||
alert(data.success);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function (xhr, status, error) {
|
|
||||||
console.error(error);
|
|
||||||
},
|
|
||||||
dataType: 'json',
|
|
||||||
timeout: 3000,
|
|
||||||
method: 'post'
|
|
||||||
});
|
|
||||||
|
|
||||||
$(this).remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
function autocomplete_software() {
|
|
||||||
if ($('#cpe').val().length < 3) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$.ajax('/ajax.php', {
|
|
||||||
data: {
|
|
||||||
action: ($('#os').is(":checked") ? 'os_filter' : 'sw_filter'),
|
|
||||||
filter: $('#cpe').val()
|
|
||||||
},
|
|
||||||
success: function (data) {
|
|
||||||
$('#availableSoftware div').remove();
|
|
||||||
for (var x in data) {
|
|
||||||
$('#availableSoftware').append("<div sw_id='" + data[x].sw_id + "' cpe='" + data[x].cpe + "'>" + data[x].sw_string + "</div>");
|
|
||||||
}
|
|
||||||
$('#availableSoftware').show();
|
|
||||||
|
|
||||||
$('#availableSoftware div').each(function () {
|
|
||||||
$(this).on("mouseover", function () {
|
|
||||||
$(this).addClass("swmouseover");
|
|
||||||
});
|
|
||||||
$(this).on("mouseout", function () {
|
|
||||||
$(this).removeClass("swmouseover");
|
|
||||||
});
|
|
||||||
$(this).on("click", function () {
|
|
||||||
add_software($(this).attr('sw_id'));
|
|
||||||
$('#software').append("<option value='" + $(this).attr('sw_id') + "' ondblclick='remove_Software();$(this).remove();'>" + $(this).html() + "</option>");
|
|
||||||
$(this).remove();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
error: function (xhr, status, error) {
|
|
||||||
console.error(error);
|
|
||||||
},
|
|
||||||
dataType: 'json',
|
|
||||||
method: 'post',
|
|
||||||
timeout: 5000
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function add_software(sw_id) {
|
|
||||||
$.ajax('/ajax.php', {
|
|
||||||
data: {
|
|
||||||
action: 'checklist-add-software',
|
|
||||||
'sw_id': sw_id,
|
|
||||||
chk_id: $('#id').val()
|
|
||||||
},
|
|
||||||
success: function (data) {
|
|
||||||
alert(data.status);
|
|
||||||
},
|
|
||||||
error: function (xhr, status, error) {
|
|
||||||
console.error(error);
|
|
||||||
},
|
|
||||||
dataType: 'json',
|
|
||||||
method: 'post',
|
|
||||||
timeout: 3000
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style type="text/css">
|
|
||||||
thead {
|
|
||||||
background-image: linear-gradient(to bottom, #ECECEC, rgba(177,177,177,0.72));
|
|
||||||
color: #4c4c4c;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<table id='catalog' class='display'>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>File Name</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Start Time</th>
|
|
||||||
<th>% Complete</th>
|
|
||||||
<th>STIG Count</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody>
|
|
||||||
<?php
|
|
||||||
$cat_scripts = $db->get_Catalog_Script();
|
|
||||||
$odd = true;
|
|
||||||
foreach ($cat_scripts as $key => $cat_script) {
|
|
||||||
print "<tr>" .
|
|
||||||
"<td onclick='javascript:get_cat_data(\"{$cat_script->file_name}\");'><a href='javascript:void(0);'>{$cat_script->file_name}</a></td>" .
|
|
||||||
"<td>{$cat_script->status}</td>" .
|
|
||||||
"<td>{$cat_script->start_time->format("Y-m-d H:i:s")}</td>" .
|
|
||||||
"<td>{$cat_script->perc_comp}</td>" .
|
|
||||||
"<td>{$cat_script->stig_count}</td>" .
|
|
||||||
"</td>";
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id='popup' class='box'>
|
|
||||||
<div style='display:inline-block;width:49%;vertical-align:top;'>
|
|
||||||
<input type='hidden' id='id' />
|
|
||||||
Checklist ID: <span id='checklist-id'></span><br />
|
|
||||||
Name: <input type='text' id='name' /><br />
|
|
||||||
Description: <input type='text' id='description' /><br />
|
|
||||||
Version: <span id='version'></span><br />
|
|
||||||
Release: <span id='release'></span><br />
|
|
||||||
Release Date: <input type='text' id='release-date' /><br />
|
|
||||||
Icon: <input type='text' id='icon' /><br />
|
|
||||||
Type: <span id='type'></span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style='display:inline-block;width:49%;'>
|
|
||||||
<select id='software' multiple size='10'></select><br />
|
|
||||||
|
|
||||||
Add CPE: <input type='text' id='cpe' onkeyup='javascript:autocomplete_software();' />
|
|
||||||
<label for='os'>OS?</label>
|
|
||||||
<input type='checkbox' id='os' /><br />
|
|
||||||
<div id="availableSoftware"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="backdrop"></div>
|
|
||||||
<?php
|
|
||||||
}
|
}
|
||||||
elseif ($page == 'Search') {
|
elseif ($page == 'Search') {
|
||||||
$q = filter_input(INPUT_POST, 'q', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE);
|
$q = filter_input(INPUT_POST, 'q', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE);
|
||||||
|
@ -8798,7 +8798,10 @@ EOQ;
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->help->select("sagacity.catalog_scripts", null, $where, [
|
$this->help->select("sagacity.catalog_scripts cs", ['c.id', 'cs.*'], $where, [
|
||||||
|
'table_joins' => [
|
||||||
|
"LEFT JOIN sagacity.checklist c ON c.file_name = cs.file_name"
|
||||||
|
],
|
||||||
'order' => "FIELD(`status`, 'ERROR','RUNNING','IN QUEUE','COMPLETE'),`file_name`"
|
'order' => "FIELD(`status`, 'ERROR','RUNNING','IN QUEUE','COMPLETE'),`file_name`"
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -8813,6 +8816,7 @@ EOQ;
|
|||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
$script = new catalog_script();
|
$script = new catalog_script();
|
||||||
|
|
||||||
|
$script->{'id'} = $row['id'];
|
||||||
$script->file_name = $row['file_name'];
|
$script->file_name = $row['file_name'];
|
||||||
$script->pid = $row['pid'];
|
$script->pid = $row['pid'];
|
||||||
$script->start_time = new DateTime($row['start_time']);
|
$script->start_time = new DateTime($row['start_time']);
|
||||||
|
Loading…
Reference in New Issue
Block a user