94 lines
2.3 KiB
PHP
94 lines
2.3 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* File: parse_emass_control_map.php
|
||
|
* Author: Matt Shuter
|
||
|
* Purpose: Parse the Excel mapping of eMASS controls (.xlsx or .xls) into the database
|
||
|
* Created: Jul 6, 2017
|
||
|
*
|
||
|
* Portions Copyright 2016-2017: Cyber Perspectives, LLC, All rights reserved
|
||
|
* Released under the Apache v2.0 License
|
||
|
*
|
||
|
* Portions Copyright (c) 2012-2015, Salient Federal Solutions
|
||
|
* Portions Copyright (c) 2008-2011, Science Applications International Corporation (SAIC)
|
||
|
* Released under Modified BSD License
|
||
|
*
|
||
|
* See license.txt for details
|
||
|
*
|
||
|
* Change Log:
|
||
|
* - Jul 6, 2017 - File created
|
||
|
*/
|
||
|
$cmd = getopt("f:", ['debug::', 'help::']);
|
||
|
set_time_limit(0);
|
||
|
|
||
|
//use \PhpOffice\PhpSpreadsheet\Cell;
|
||
|
|
||
|
if (!isset($cmd['f']) || isset($cmd['help'])) {
|
||
|
die(usage());
|
||
|
}
|
||
|
elseif (!file_exists($cmd['f'])) {
|
||
|
die("File {$cmd['f']} not found" . PHP_EOL);
|
||
|
}
|
||
|
|
||
|
include_once 'config.inc';
|
||
|
require_once "database.inc";
|
||
|
require_once 'helper.inc';
|
||
|
|
||
|
require_once 'vendor/autoload.php';
|
||
|
|
||
|
|
||
|
check_path(TMP . "/rmf");
|
||
|
chdir(TMP);
|
||
|
|
||
|
$base_name = basename($cmd['f']);
|
||
|
$err = new Sagacity_Error($cmd['f']);
|
||
|
$db = new db();
|
||
|
|
||
|
// Create reader for file
|
||
|
$Reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($cmd['f']);
|
||
|
$Reader->setReadDataOnly(true);
|
||
|
$objSS = $Reader->load($cmd['f']);
|
||
|
|
||
|
// Get the first and only worksheet
|
||
|
$wksht = $objSS->getSheet(0);
|
||
|
|
||
|
$col1 = true; // Bool to determine which column we're in within the loop
|
||
|
$ccis = array(); // Array to hold cci-control mappings
|
||
|
// Main loop to read in the Excel spreadsheet
|
||
|
foreach ($wksht->getRowIterator() as $row) {
|
||
|
foreach ($row->getCellIterator() as $cell) {
|
||
|
if ($col1) { // First column is the control
|
||
|
$ctrl = $cell->getValue();
|
||
|
}
|
||
|
else { // Second column is the cci
|
||
|
$cci = $cell->getValue();
|
||
|
}
|
||
|
// Change the col1 to iterate between the two columns
|
||
|
$col1 = !$col1;
|
||
|
}
|
||
|
|
||
|
$cci_id = substr($cci, strpos($cci, "-") + 1);
|
||
|
|
||
|
array_push($ccis, array($cci_id, $ctrl));
|
||
|
}
|
||
|
|
||
|
$db->save_EMASS_CCIs($ccis);
|
||
|
|
||
|
unset($objSS);
|
||
|
if (!isset($cmd['debug'])) {
|
||
|
rename($cmd['f'], TMP . "/rmf/$base_name");
|
||
|
}
|
||
|
|
||
|
function usage() {
|
||
|
print <<<EOO
|
||
|
Purpose: To import an Excel eMASS-CCI control mapping spreadsheet.
|
||
|
|
||
|
Usage: php parse_emass_control_map.php -f={Excel control map file} [--debug] [--help]
|
||
|
|
||
|
-f={Excel filename} File to import
|
||
|
--debug Debugging output
|
||
|
--help This screen
|
||
|
|
||
|
EOO;
|
||
|
}
|