sagacity/exec/parse_emass_control_map.php
2018-05-07 10:51:08 -04:00

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;
}