From 3b138f421c6302a475c5075eb805dfb8267a2ecb Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Sun, 12 Aug 2018 22:53:42 -0400 Subject: [PATCH 01/24] Fixed issue #1 --- ajax.php | 4229 +++++++++++++++++++++++++++--------------------------- 1 file changed, 2116 insertions(+), 2113 deletions(-) diff --git a/ajax.php b/ajax.php index 5ec8272..10f2419 100644 --- a/ajax.php +++ b/ajax.php @@ -1,2113 +1,2116 @@ -" . update_finding_status() . ""; -} -elseif ($action == 'update_finding_ia_controls') { - print "" . update_finding_ia_controls() . ""; -} -elseif ($action == 'update_finding_notes') { - print "" . update_finding_notes() . ""; -} -elseif ($action == 'update_risk_status') { - print update_risk_status(); -} -elseif ($action == 'update_risk_analysis') { - print update_risk_analysis(); -} -elseif ($action == 'update_control_completion') { - print update_control_completion(); -} -elseif ($action == 'update_stig_control') { - print update_stig_control(); -} -elseif ($action == 'refresh_counts') { - print "" . refresh_counts() . ""; -} -elseif ($action == 'get_control_details') { - if ($_REQUEST['id'] == 'overall') { - print get_STE_details(); - } - else { - print get_control_details(); - } -} -elseif ($action == 'update_STE') { - print update_STE_details(); -} -elseif ($action == 'update_STE_risk') { - $conn->real_query( - "UPDATE `sagacity`.`ste` SET `risk_status`='" . - strtolower($conn->real_escape_string($_REQUEST['status'])) . - "' WHERE `id`=" . $conn->real_escape_string($ste)); -} -elseif ($action == 'get_hosts') { - $cat_id = filter_input(INPUT_POST, 'cat_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - if (is_numeric($cat_id)) { - print get_hosts($cat_id); - } - else { - print json_encode(['error' => 'Invalid category ID']); - } -} -elseif ($action == 'new-get-hosts') { - $cat_id = filter_input(INPUT_POST, 'cat-id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - if (is_numeric($cat_id)) { - print new_get_hosts($cat_id); - } - else { - print json_encode(['error' => 'Invalid category ID']); - } -} -elseif ($action == 'get_target_data') { - print get_target_data($_REQUEST['type']); -} -elseif ($action == 'save_filter') { - print $db->save_Filter($_REQUEST['type'], $_REQUEST['name'], $_REQUEST['criteria']); -} -elseif ($action == 'target-filter') { - print header(JSON) . target_filter($ste, $_REQUEST['criteria']); -} -elseif ($action == 'scan-filter') { - print scan_filter($ste, $_REQUEST['criteria']); -} -elseif ($action == 'finding-filter') { - print finding_filter($ste, $_REQUEST['criteria']); -} -elseif ($action == 'reference-filter') { - print reference_filter($ste, $_REQUEST['criteria']); -} -elseif ($action == 'get-saved-filter') { - print get_saved_filter($_REQUEST['type'], $_REQUEST['name']); -} -elseif ($action == 'update-target-field') { - print update_target_field($_REQUEST['field'], $_REQUEST['data']); -} -elseif ($action == 'get_category_details') { - $cat_id = filter_input(INPUT_POST, 'cat_id', FILTER_VALIDATE_INT); - print header(JSON) . get_category_details($cat_id); -} -elseif ($action == 'add_scans') { - $import = new import(); - $import->scan_Result_Files(false); - - print header(JSON) . json_encode(array( - 'success' => 'Thread running' - )); -} -elseif ($action == 'auto-categorize') { - $db->auto_Catorgize_Targets($ste); - - print header(JSON) . json_encode([ - 'success' => 'Categorized Targets' - ]); -} -elseif ($action == 'delete-cat') { - $cat_id = filter_input(INPUT_POST, 'cat_id', FILTER_VALIDATE_INT); - if ($db->delete_Cat($cat_id)) { - print header(JSON) . json_encode([ - 'success' => 'Successfully deleted category' - ]); - } -} -elseif ($action == 'delete-file') { - $file = TMP . "/" . filter_input(INPUT_POST, 'filename', FILTER_SANITIZE_STRING); - if (file_exists($file)) { - if (unlink($file)) { - print header(JSON) . json_encode([ - 'success' => 'Deleted file' - ]); - } - else { - print header(JSON) . json_encode([ - 'error' => "Failed to delete $file" - ]); - } - } - else { - print header(JSON) . json_encode([ - 'error' => "$file does not exist" - ]); - } -} -elseif ($action == 'get-cat-data') { - $fname = filter_input(INPUT_POST, 'fname', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); - $checklist = $db->get_Checklist_By_File($fname); - - if (isset($checklist[0])) { - $checklist[0]->type = ucfirst($checklist[0]->type); - print header(JSON) . json_encode($checklist[0]); - } - else { - print header(JSON) . json_encode(array('error' => 'Error finding checklist')); - } -} -elseif ($action == 'checklist-remove-software') { - $chk_id = filter_input(INPUT_POST, 'chk_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - $sw_id = filter_input(INPUT_POST, 'sw_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - - $db->help->delete("sagacity.checklist_software_lookup", null, array( - array( - 'field' => 'chk_id', - 'op' => '=', - 'value' => $chk_id - ), - array( - 'field' => 'sw_id', - 'op' => '=', - 'value' => $sw_id, - 'sql_op' => 'AND' - ) - )); - - if ($db->help->execute()) { - print header(JSON) . json_encode(array('success' => 'Relationship deleted')); - } - else { - print header(JSON) . json_encode(array('error' => 'Failed to delete relationship')); - } -} -elseif ($action == 'checklist-add-software') { - $sw_id = filter_input(INPUT_POST, 'sw_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - $chk_id = filter_input(INPUT_POST, 'chk_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - - $db->help->insert("checklist_software_lookup", array( - 'sw_id' => $sw_id, - 'chk_id' => $chk_id - ), true); - - if (!$db->help->execute()) { - print header(JSON) . json_encode(array('status' => 'Error adding the software to the checklist')); - } - else { - print header(JSON) . json_encode(array('status' => 'Successfully added the software')); - } -} -elseif ($action == 'save-checklist') { - $rel_date = new DateTime(filter_input(INPUT_POST, 'rel-date', FILTER_SANITIZE_STRING)); - - $db->help->update("sagacity.checklist", [ - 'name' => filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING), - 'description' => filter_input(INPUT_POST, 'desc', FILTER_SANITIZE_STRING), - 'icon' => filter_input(INPUT_POST, 'icon', FILTER_SANITIZE_STRING), - 'date' => (is_a($rel_date, 'DateTime') ? $rel_date->format(MYSQL_D_FORMAT) : (new DateTime())->format(MYSQL_D_FORMAT)) - ], [ - [ - 'field' => 'id', - 'op' => '=', - 'value' => filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT) - ] - ]); - - if($db->help->execute()) { - print json_encode(['success' => 'Successfully updated checklist']); - } - else { - print json_encode(['error' => 'Error updating checklist']); - } -} -elseif ($action == 'export-ckl') { - $cat_id = filter_input(INPUT_POST, 'cat', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - $tgt_id = filter_input(INPUT_POST, 'tgt', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - $script = null; - - if (!is_numeric($ste)) { - die; - } - - if ($cat_id && is_numeric($cat_id)) { - $script = (defined('PHP_BIN') ? realpath(PHP_BIN) : realpath(PHP)) . - " -c " . realpath(PHP_CONF) . - " -f " . realpath(DOC_ROOT . "/exec/export-ckl.php") . " --" . - " -s=$ste" . - " -c=$cat_id"; - } - elseif ($tgt_id && is_numeric($tgt_id)) { - $script = (defined('PHP_BIN') ? realpath(PHP_BIN) : realpath(PHP)) . - " -c " . realpath(PHP_CONF) . - " -f " . realpath(DOC_ROOT . "/exec/export-ckl.php") . " --" . - " -s=$ste" . - " -t=$tgt_id"; - } - - if (!is_null($script)) { - if (strtolower(substr(PHP_OS, 0, 3)) == "win") { - $shell = new COM("WScript.Shell"); - $shell->CurrentDirectory = DOC_ROOT . "/exec"; - $shell->run($script, 0, false); - } - elseif (strtolower(substr(PHP_OS, 0, 3)) == 'lin') { - exec("cd " . realpath(DOC_ROOT . "/exec") . " && {$script} > /dev/null &"); - } - } -} -elseif ($action == 'delete-host') { - $sel_tgts = json_decode(html_entity_decode(filter_input(INPUT_POST, 'selected_tgts', FILTER_SANITIZE_STRING))); - if (is_array($sel_tgts) && count($sel_tgts)) { - foreach ($sel_tgts as $tgt_id) { - if (!$db->delete_Target($tgt_id)) { - print header(JSON) . json_encode(array('error' => "Failed to delete target ID $tgt_id")); - break; - } - } - } - elseif (is_numeric($sel_tgts)) { - if (!$db->delete_Target($sel_tgts)) { - print header(JSON) . json_encode(array('error' => "Failed to delete target ID $sel_tgts")); - } - } - - print header(JSON) . json_encode(['success' => "Deleted all selected target(s)"]); -} -elseif ($action == 'get-target-notes') { - $tgt_id = filter_input(INPUT_POST, 'tgt-id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - if (is_numeric($tgt_id) && $tgt_id > 0) { - $db->help->select("target", ['notes'], [ - [ - 'field' => 'id', - 'op' => '=', - 'value' => $tgt_id - ] - ]); - $row = $db->help->execute(); - if (is_array($row) && count($row) && isset($row['notes'])) { - print header(JSON) . json_encode(['notes' => $row['notes']]); - } - } -} -elseif ($action == 'save-target-notes') { - $tgt_id = filter_input(INPUT_POST, 'tgt-id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - $notes = filter_input(INPUT_POST, 'notes', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); - if (is_numeric($tgt_id) && $tgt_id > 0) { - $db->help->update("target", [ - 'notes' => htmlentities($notes) - ], [ - [ - 'field' => 'id', - 'op' => '=', - 'value' => $tgt_id - ] - ]); - if ($db->help->execute()) { - print header(JSON) . json_encode(['success' => 'Updated target notes']); - } - else { - print header(JSON) . json_encode(['error' => $db->help->c->error]); - } - } -} -elseif ($action == 'get-load-status') { - $set = $db->get_Settings([ - 'cpe-count', 'cpe-dl-progress', 'cpe-progress', - 'cve-count', 'cve-dl-progress', 'cve-progress', - 'nvd-cve-count', 'nvd-cve-dl-progress', 'nvd-cve-progress', 'nvd-year', - 'stig-count', 'stig-dl-progress', 'stig-progress', - 'nasl-count', 'nasl-dl-progress', 'nasl-progress' - ]); - print json_encode($set); -} -elseif ($action == 'delete-scan') { - $scan_id = filter_input(INPUT_POST, 'scan-id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - $del_tgts = (bool) filter_input(INPUT_POST, 'delete-targets', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); - if ($scan_id) { - if ($db->delete_Scan($ste, $scan_id, $del_tgts)) { - print json_encode(['success' => 'Deleted Scan']); - } - else { - print json_encode(['error' => 'Error deleting scan']); - } - } -} - -function update_tgt_notes() -{ - global $db; - $notes = str_replace(" ", "", filter_input(INPUT_POST, 'notes', FILTER_SANITIZE_STRING)); - $tgt = filter_input(INPUT_POST, 'tgt', FILTER_VALIDATE_INT); - - $db->help->update("sagacity.target", array( - 'notes' => $notes - ), array( - array( - 'field' => 'id', - 'op' => '=', - 'value' => $tgt - ) - )); - - if (!$db->help->execute()) { - return "failure"; - } - else { - return "success"; - } -} - -function chk_filter() -{ - global $db; - $tgt_id = filter_input(INPUT_POST, 'tgt_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - $filter = filter_input(INPUT_POST, 'filter', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); - $hide_old = (boolean) filter_input(INPUT_POST, 'hide_old', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); - - $ret = array(); - $db->help->create_table("c", true, $db->help->select("sagacity.checklist", null, array(), array( - 'order' => '`ver` DESC, CONVERT(`release`, DECIMAL(4,2)) DESC' - ))); - if (!$db->help->execute()) { - return $ret; - } - $where = array(); - $flags = array(); - - if (!empty($filter)) { - $where = array( - array( - 'field' => 'c.name', - 'op' => LIKE, - 'value' => "'%{$filter}%'" - ) - ); - } - - if (!empty($tgt_id)) { - $where[] = array( - 'field' => 'tc.chk_id', - 'op' => IS, - 'value' => null, - 'sql_op' => 'AND' - ); - $flags['table_joins'] = array( - "LEFT JOIN sagacity.target_checklist tc ON tc.chk_id = c.id AND tc.tgt_id = $tgt_id" - ); - $flags['order'] = 'c.name'; - } - if ($hide_old) { - $flags['group'] = 'c.name, c.type, c.id'; - } - - $db->help->select("c", array('c.id'), $where, $flags); - - $rows = $db->help->execute(); - if (is_array($rows) && count($rows) && isset($rows['id'])) { - $rows = array(0 => $rows); - } - - if (is_array($rows) && count($rows) && isset($rows[0])) { - foreach ($rows as $row) { - $chk = $db->get_Checklist($row['id']); - if (is_array($chk) && count($chk) && isset($chk[0]) && is_a($chk[0], 'checklist')) { - $ret[] = $chk[0]; - } - } - } - - return json_encode($ret); -} - -function sw_filter($is_os = false) -{ - global $db; - $ret = []; - $filter = "'%" . filter_input(INPUT_POST, 'filter', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE) . "%'"; - $tgt_id = filter_input(INPUT_POST, 'tgt_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - - $db->help->select("sagacity.software s", ['s.id', 's.cpe', 's.sw_string'], [ - [ - 'field' => 's.cpe', - 'op' => LIKE, - 'value' => $filter, - 'open-paren' => true - ], - [ - 'field' => 's.sw_string', - 'op' => LIKE, - 'value' => $filter, - 'sql_op' => 'OR' - ], - [ - 'field' => 's.short_sw_string', - 'op' => LIKE, - 'value' => $filter, - 'sql_op' => 'OR', - 'close-paren' => true - ], - [ - 'field' => 'ts.sft_id', - 'op' => IS, - 'value' => null, - 'sql_op' => 'AND' - ], - [ - 'field' => 's.cpe', - 'op' => LIKE, - 'value' => ($is_os ? "'%/o%'" : "'%/a%'"), - 'sql_op' => 'AND' - ] - ], [ - 'table_joins' => [ - "LEFT JOIN `sagacity`.`target_software` ts ON ts.`sft_id` = s.`id`" . ($tgt_id ? " AND ts.`tgt_id` = $tgt_id" : "") - ], - 'order' => 's.cpe', - 'limit' => 25 - ]); - - $sw = $db->help->execute(); - - if (is_array($sw) && count($sw) && isset($sw['id'])) { - $sw = [0 => $sw]; - } - - if (is_array($sw) && count($sw) && isset($sw[0])) { - foreach ($sw as $row) { - $ret[] = [ - 'sw_id' => $row['id'], - 'cpe' => $row['cpe'], - 'sw_string' => $row['sw_string'] - ]; - } - } - - return header(JSON) . json_encode($ret); -} - -function update_proc_status() -{ - global $conn, $ste; - $control_id = str_replace("_", "-", substr(param('control'), 0, -7)); - if (preg_match("/[A-Z]{4}\-\d\-\d/", $control_id)) { - $proc_id = $control_id; - $sql = "SELECT `ctrl_id` " . - "FROM `sagacity`.`proc_findings` " . - "WHERE " . - "`ste_id`=" . $conn->real_escape_string($ste) . " AND " . - "`proc_id`='" . $conn->real_escape_string($control_id) . "'"; - if ($res = $conn->query($sql)) { - if ($res->num_rows) { - $row = $res->fetch_array(MYSQLI_ASSOC); - - $sql = "UPDATE `sagacity`.`proc_findings` " . - "SET `status`='" . $conn->real_escape_string($_REQUEST['status']) . " " . - "WHERE `ste_id`=" . $conn->real_escape_string($ste) . " AND " . - "`proc_id`='" . $conn->real_escape_string($row['ctrl_id']) . "'"; - } - else { - $sql = "INSERT INTO `sagacity`.`proc_findings` (`ste_id`,`ctrl_id`,`proc_id`,`status`) VALUES (" . - $_REQUEST['ste'] . "," . - "'" . $conn->real_escape_string(substr($proc_id, 0, 6)) . "'" . - "'" . $conn->real_escape_string($proc_id) . "'" . - "'" . $conn->real_escape_string($_REQUEST['status']) . "')"; - } - - if (!$conn->real_query($sql)) { - error_log($conn->error); - Sagacity_Error::sql_handler($sql); - } - } - } - else { - $sql = "SELECT `sub_control_id` FROM `sagacity`.`proc_ia_sub_controls` WHERE `parent_control_id`=?"; - - $sub_ctrls = db_helper::selectrow_array($conn, db_helper::mysql_escape_string($conn, $sql, $control_id)); - - foreach ($sub_ctrl as $proc_id) { - $sql = "SELECT COUNT(1) FROM `sagacity`.`proc_findings` WHERE `ste_id`=? AND `proc_id`=?"; - $sql = db_helper::mysql_escape_string($conn, $sql, $_REQUEST['ste'], $proc_id); - list($cnt) = db_helper::selectrow_array($conn, $sql); - if ($cnt) { - db_helper::run($conn, "UPDATE `sagacity`.`proc_findings` SET `status`=? WHERE `ste_id`=? AND `proc_id`=?", $_REQUEST['status'], $_REQUEST['ste'], $proc_id); - } - else { - db_helper::run($conn, "INSERT INTO `sagacity`.`proc_findings` (`ste_id`,`ctrl_id`,`proc_id`,`status`) VALUES (?,?,?,?)", $_REQUEST['ste'], $control_id, $proc_id, $_REQUEST['status']); - } - } - } -} - -function update_proc_notes() -{ - $control_id = $field = $_REQUEST['control']; - $match = array(); - if (preg_match("/([A-Z]{4}\_\d\_\d)/", $control_id, $match)) { - $control_id = str_replace("_", "-", $match[1]); - - $sql = "SELECT COUNT(1) FROM `sagacity`.`proc_findings` WHERE `ste_id`=? AND `proc_id`=?"; - - switch ($field) { - case (preg_match("/_test_result/", $field) ? true : false): - $field = "`test_results`"; - break; - case (preg_match("/_mit/", $field) ? true : false): - $field = "`mitigations`"; - break; - case (preg_match("/_milestone/", $field) ? true : false): - $field = "`milestones`"; - break; - case (preg_match("/_ref/", $field) ? true : false): - $field = "`ref`"; - break; - case (preg_match("/_notes/", $field) ? true : false): - $field = "`notes`"; - break; - default: - $field = ""; - } - - list($cnt) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste'], $control_id); - if ($cnt) { - $sql = "UPDATE `sagacity`.`proc_findings` SET=? WHERE `ste_id`=? AND `proc_id`=?"; - - db_helper::run($conn, $sql, $_REQUEST['notes'], $_REQUEST['ste'], $control_id); - } - else { - $sql = "INSERT INTO `sagacity`.`proc_findings` (`ste_id`,`ctrl_id`,`proc_id`,`status`,$field) VALUES (?,?,?,?,?)"; - - db_helper::run($conn, $sql, $_REQUEST['ste'], substr($control_id, 0, 6), $control_id, "Not Reviewed", $_REQUEST['notes']); - } - } - elseif (preg_match("/([A-Z]{4}\_\d)/", $control_id, $match)) { - $control_id = str_replace("_", "-", $match[1]); - - $sql = "SELECT COUNT(1) FROM `sagacity`.`control_findings` WHERE `ste_id`=? AND `control_id`=?"; - list($cnt) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste'], $control_id); - - switch ($field) { - case (preg_match("/_vul_desc/", $field) ? true : false): - $field = "`vul_desc`"; - break; - case (preg_match("/_mit/", $field) ? true : false): - $field = "`mitigations`"; - break; - case (preg_match("/_ref/", $field) ? true : false): - $field = "`ref`"; - break; - case (preg_match("/_notes/", $field) ? true : false): - $field = "`notes`"; - break; - default: - $field = ""; - } - - if ($cnt) { - $sql = "UPDATE `sagacity`.`control_findings` SET $field=? WHERE `ste_id`=? AND `control_id`=?"; - - db_helper::run($conn, $sql, $_REQUEST['notes'], $_REQUEST['ste'], $control_id); - } - else { - $sql = "INSERT INTO `sagacity`.`control_findings` (`control_id`,`ste_id`,$field,`risk_status`) " . - "VALUES (?,?,?,(SELECT LOWER(`impact`) FROM `sagacity`.`proc_ia_controls` WHERE `control_id`=?))"; - - db_helper::run($conn, $sql, $control_id, $_REQUEST['ste'], $_REQUEST['notes'], $control_id); - } - } - - return true; -} - -function refresh_counts() -{ - $ret = ''; - $sql = "SELECT `id`,`name` FROM `ste_cat` WHERE `ste_id`=?"; - - $cats = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id']); - - foreach ($cats as $key => $cat) { - $sql2 = "SELECT (SELECT COUNT(1) " . - "FROM `sagacity`.`target` t " . - "LEFT JOIN `target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "WHERE t.`cat_id`=? AND " . - "fs.`status`='Open' AND " . - "f.`cat`=?) + " . - "(SELECT COUNT(1) AS 'total' " . - "FROM `checklist` c " . - "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "JOIN `target` t ON t.`id`=f.`tgt_id` " . - "WHERE t.`cat_id`=? AND " . - "c.`name`='Orphan' AND " . - "fs.`status`='Open' AND " . - "f.`cat`=?) AS 'sum_total'"; - - list($open_cat_1) = db_helper::selectrow_array($conn, $sql2, $row['id'], '1', $row['id'], '1'); - list($open_cat_2) = db_helper::selectrow_array($conn, $sql2, $row['id'], '2', $row['id'], '2'); - list($open_cat_3) = db_helper::selectrow_array($conn, $sql2, $row['id'], '3', $row['id'], '3'); - - $sql2 = "SELECT (SELECT COUNT(1) " . - "FROM `target` t " . - "LEFT JOIN `target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "WHERE t.`cat_id`=? AND " . - "(fs.`status`='Not Reviewed' OR fs.`status` IS NULL)) + " . - "(SELECT COUNT(1) AS 'total' " . - "FROM `checklist` c " . - "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "JOIN `target` t ON t.`id`=f.`tgt_id` " . - "WHERE t.`cat_id`=? AND " . - "c.`name`='Orphan' AND " . - "(fs.`status`='Not Reviewed' OR fs.`status` IS NULL)) AS 'sum_total'"; - - list($not_reviewed) = db_helper::selectrow_array($conn, $sql2, $row['id'], $row['id']); - - $sql2 = "SELECT (SELECT COUNT(1) " . - "FROM `target` t " . - "LEFT JOIN `target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "WHERE t.`cat_id`=? AND " . - "fs.`status`='Exception') + " . - "(SELECT COUNT(1) AS 'total' " . - "FROM `checklist` c " . - "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "JOIN `target` t ON t.`id`=f.`tgt_id` " . - "WHERE t.`cat_id`=? AND " . - "c.`name`='Orphan' AND " . - "fs.`status`='Exception') AS 'sum_total'"; - - list($exception) = db_helper::selectrow_array($conn, $sql2, $row['id'], $row['id']); - - $sql2 = "SELECT (SELECT COUNT(1) " . - "FROM `target` t " . - "LEFT JOIN `target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "WHERE t.`cat_id`=? AND " . - "fs.`status`='False Positive') + " . - "(SELECT COUNT(1) AS 'total' " . - "FROM `checklist` c " . - "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "JOIN `target` t ON t.`id`=f.`tgt_id` " . - "WHERE t.`cat_id`=? AND " . - "c.`name`='Orphan' AND " . - "fs.`status`='False Positive') AS 'sum_total'"; - - list($false_positive) = db_helper::selectrow_array($conn, $sql2, $row['id'], $row['id']); - - $row['name'] = str_replace(array(".", "-", " "), "", $row['name']); - - $ret .= ""; - } - - return $ret; -} - -function update_finding_status() -{ - global $conn; - $sql = "UPDATE `findings` SET " . - "`findings_status_id`=? " . - "WHERE " . - "`tgt_id`=? AND `pdi_id`=?"; - - db_helper::run($conn, $sql, $_REQUEST['status'], $_REQUEST['host_id'], $_REQUEST['pdi_id']); - - return true; -} - -function update_finding_ia_controls() -{ - $controls = explode(" ", $_REQUEST['ia_controls']); - $host_ids = explode(",", $_REQUEST['host_id']); - - return true; -} - -function update_finding_notes() -{ - global $conn; - $host_ids = explode(",", $_REQUEST['host_id']); - - $sql = "UPDATE `sagacity`.`findings` SET " . - "`notes`=? " . - "WHERE " . - "`tgt_id` IN (" . implode(",", $host_ids) . ") AND `pdi_id`=?"; - - db_helper::run($conn, $sql, $_REQUEST['notes'], $_REQUEST['pdi_id']); - - return true; -} - -/** - * Function to update the result script parsing status - * - * @global db $db - * @global int $ste - * - * @return array - */ -function update_script_status() -{ - global $db, $ste; - $ret = []; - - $type = filter_input(INPUT_POST, 'type', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); - $status = filter_input(INPUT_POST, 'status', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); - - if (!empty($type) && !empty($status)) { - $scans = $db->get_ScanData($ste, null, $status, $type); - } - elseif (!empty($type)) { - $scans = $db->get_ScanData($ste, null, null, $type); - } - elseif (!empty($status)) { - $scans = $db->get_ScanData($ste, null, $status); - } - else { - $scans = $db->get_ScanData($ste); - } - - foreach ($scans as $scan) { - $file_name = str_replace(["(", ")"], "", str_replace(" ", "_", $scan->get_File_Name())); - $diff = $scan->get_Last_Update()->diff($scan->get_Start_Time()); - - $ret[] = [ - "scan_id" => $scan->get_ID(), - "file_name" => $scan->get_File_Name(), - "id" => $file_name, - "file_date" => $scan->get_File_DateTime()->format("Y-m-d"), - "pid" => $scan->get_PID(), - "source" => $scan->get_Source()->get_Name(), - 'source_img' => $scan->get_Source()->get_Icon(), - "status" => $scan->get_Status(), - "perc_comp" => $scan->get_Percentage_Complete(), - "last_host" => $scan->get_Last_Host(), - "start_time" => $scan->get_Start_Time()->format("Y-m-d H:i:s"), - "update" => $scan->get_Last_Update()->format("Y-m-d H:i:s"), - "host_count" => $scan->get_Total_Host_Count(), - "error" => $scan->isScanError(), - "run_time" => $diff->format("%H:%I:%S") - ]; - } - - return json_encode(['success' => 1, 'results' => $ret]); -} - -/** - * - * @global mysqli $conn - * @global db $db - */ -function get_STE_details() -{ - global $conn, $db; - $ret = ''; - $open_high = $open_med = $open_low = $proc_na = $proc_c = $proc_total = $open_cat_1 = $open_cat_2 = $open_cat_3 = $tech_na = $tech_nf = $tech_total = 0; - - list($tech_total) = db_helper::selectrow_array($conn, "SELECT COUNT(1) FROM `sagacity`.`findings` f JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` WHERE t.`ste_id`=?", $_REQUEST['ste_id']); - list($proc_total) = db_helper::selectrow_array($conn, "SELECT COUNT(1) FROM `sagacity`.`proc_findings` WHERE `ste_id`=?", $_REQUEST['ste_id']); - - $sql = "SELECT COUNT(1) " . - "FROM `sagacity`.`proc_findings` pf " . - "JOIN `sagacity`.`control_findings` cf ON pf.`ctrl_id`=cf.`control_id` " . - "WHERE pf.`ste_id`=? " . - "AND pf.`status`=? " . - "AND cf.`risk_status`=? " - ; - - list($open_high) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Non-Compliant', 'high'); - list($open_med) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Non-Compliant', 'medium'); - list($open_low) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Non-Compliant', 'low'); - - $sql = "SELECT COUNT(1) " . - "FROM `sagacity`.`proc_findings` pf " . - "JOIN `sagacity`.`control_findings` cf ON pf.`ctrl_id`=cf.`control_id` " . - "WHERE pf.`ste_id`=? " . - "AND pf.`status`=? " - ; - - list($proc_na) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Not Applicable'); - list($proc_c) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Compliant'); - - $sql = "SELECT `ste`.`deviations`,`ste`.`recommendations`,`ste`.`residual_risk`," . - "`ste`.`conclusion`,`ste`.`risk_status`,sys.`mitigations`,sys.`executive_summary` " . - "FROM `sagacity`.`ste`,`sagacity`.`system` sys " . - "WHERE `ste`.`system_id`=sys.`id` AND " . - "`ste`.`id`=?"; - - list($dev, $rec, $res, $con, $status, $mit, $exec) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id']); - - $sql = "SELECT `id`,`name` FROM `sagacity`.`ste_cat` WHERE `ste_id`=?"; - - $cats = $db->get_STE_Cat_List($_REQUEST['ste_id']); - - foreach ($cats as $cat) { - $sql2 = "SELECT (SELECT COUNT(1) " . - "FROM `sagacity`.`target` t " . - "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "WHERE t.`cat_id`=? AND " . - "(fs.`status`='Open' OR fs.`status`='Exception') AND " . - "f.`cat`=?) + " . - "(SELECT COUNT(1) AS 'total' " . - "FROM `sagacity`.`checklist` c " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . - "WHERE t.`cat_id`=? AND " . - "c.`name`='Orphan' AND " . - "(fs.`status`='Open' OR fs.`status`='Exception') AND " . - "f.`cat`=?) AS 'sum_total'"; - - list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), '1', $cat->get_ID(), '1'); - $open_cat_1 += $tmp; - list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), '2', $cat->get_ID(), '2'); - $open_cat_2 += $tmp; - list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), '3', $cat->get_ID(), '3'); - $open_cat_3 += $tmp; - - $sql2 = "SELECT (SELECT COUNT(1) " . - "FROM `sagacity`.`target` t " . - "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "WHERE t.`cat_id`=? AND " . - "fs.`status`='Not Applicable') + " . - "(SELECT COUNT(1) AS 'total' " . - "FROM `sagacity`.`checklist` c " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . - "WHERE t.`cat_id`=? AND " . - "c.`name`='Orphan' AND " . - "fs.`status`='Not Applicable') AS 'sum_total'"; - - list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), $cat->get_ID()); - $tech_na += $tmp; - - $sql2 = "SELECT (SELECT COUNT(1) " . - "FROM `sagacity`.`target` t " . - "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "WHERE t.`cat_id`=? AND " . - "fs.`status`='Not a Finding') + " . - "(SELECT COUNT(1) AS 'total' " . - "FROM `sagacity`.`checklist` c " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . - "WHERE t.`cat_id`=? AND " . - "c.`name`='Orphan' AND " . - "fs.`status`='Not a Finding') AS 'sum_total'"; - - list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), $cat->get_ID()); - $tech_nf += $tmp; - } - -#'overall_mitigations,deviations,recommendations,residual_risk,conclusion,executive_summary' - $ret .= "
" . - "

Overall Mitigations

" . - "" . - "

Deviations

" . - "" . - "

Recommendations

" . - "" . - "Residual Risk Analysis  " . - "
" . - "" . - "

Conclusion

" . - "" . - "

Executive Summary

" . - "" . - "
" . - "
" . - "

Procedural ($proc_total)

" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "
HMLNAC
$open_high$open_med$open_low$proc_na$proc_c
" . sprintf("%i%%", ($open_high / $proc_total) * 100) . "" . sprintf("%i%%", ($open_med / $proc_total) * 100) . "" . sprintf("%i%%", ($open_low / $proc_total) * 100) . "" . sprintf("%i%%", ($proc_na / $proc_total) * 100) . "" . sprintf("%i%%", ($proc_c / $proc_total) * 100) . "
" . - "

Technical ($tech_total)

" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "
IIIIIINANF
$open_cat_1$open_cat_2$open_cat_3$tech_na$tech_nf
" . sprintf("%i%%", ($open_cat_1 / $tech_total) * 100) . "" . sprintf("%i%%", ($open_cat_2 / $tech_total) * 100) . "" . sprintf("%i%%", ($open_cat_3 / $tech_total) * 100) . "" . sprintf("%i%%", ($tech_na / $tech_total) * 100) . "" . sprintf("%i%%", ($tech_nf / $tech_total) * 100) . "
" . - "
"; -} - -function update_STE_details() -{ - global $conn; - if ($_REQUEST['id'] == 'deviations') { - $sql = "UPDATE `sagacity`.`ste` SET `deviations`=? WHERE `id`=?"; - } - elseif ($_REQUEST['id'] == 'recommendations') { - $sql = "UPDATE `sagacity`.`ste` SET `recommendations`=? WHERE `id`=?"; - } - elseif ($_REQUEST['id'] == 'residual_risk') { - $sql = "UPDATE `sagacity`.`ste` SET `residual_risk`=? WHERE `id`=?"; - } - elseif ($_REQUEST['id'] == 'conclusion') { - $sql = "UPDATE `sagacity`.`ste` SET `conclusion`=? WHERE `id`=?"; - } - elseif ($_REQUEST['id'] == 'overall_mitigations') { - $sql = "UPDATE `sagacity`.`system` JOIN `sagacity`.`ste` ON `ste`.`system_id`=`system`.`id` SET `mitigations`=? WHERE `ste`.`id`=?"; - } - elseif ($_REQUEST['id'] == 'executive_summary') { - $sql = "UPDATE `sagacity`.`system` JOIN `sagacity`.`ste` ON `ste`.`system_id`=`system`.`id` SET `executive_summary`=? WHERE `ste`.`id`=?"; - } - - db_helper::run($conn, $sql, $_REQUEST['text'], $_REQUEST['ste_id']); -} - -function get_control_details() -{ - global $conn, $db; - $ret = ''; - - $sql = "SELECT " . - "pc.`control_id`,pc.`name`,pc.`description`,pc.`impact`," . - "cf.`vul_desc`,cf.`mitigations`,cf.`risk_analysis`,cf.`risk_status`,cf.`done` " . - "FROM `sagacity`.`proc_ia_controls` pc " . - "LEFT JOIN `sagacity`.`control_findings` cf ON cf.`control_id`=pc.`control_id` " . - "WHERE pc.`control_id`=? AND cf.`ste_id`=?"; - - $ste = $db->get_STE($_REQUEST['ste'])[0]; - - $controls = $db->get_Proc_IA_Controls($ste, $_REQUEST['id'])[0]; - - $risk_analysis = $controls->finding->risk_analysis; - $ctrl_id = $controls->get_Control_ID(); - $impact = $controls->get_Impact(); - - $ret .= "
" . - $controls->get_Control_ID() . " - " . $controls->get_Name() . - "" . - "" . - " " . - "finding->done ? " checked" : "") . " id='done' value='1' onclick='javascript:toggle_control_completion();' />" . - "" . - "" . - ucfirst($controls->get_Worst_Status_String()) . - "" . - "" . - "
" . - "
" . $controls->get_Description() . "
" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" - ; - - $sql = "SELECT " . - "psc.`sub_control_id`,psc.`name`,pf.`test_results`,pf.`mitigations`,pf.`status` " . - "FROM `sagacity`.`proc_ia_sub_controls` psc " . - "LEFT JOIN `sagacity`.`proc_findings` pf ON psc.`sub_control_id`=pf.`proc_id` " . - "WHERE pf.`ste_id`=? AND " . - "psc.`parent_control_id`=? AND " . - "(pf.`status`='Non-Compliant' OR pf.`status`='Not Applicable')" - ; - - if ($res = $conn->query($sql)) { - while ($row = $res->fetch_array(MYSQLI_ASSOC)) { - $status = str_replace(" ", "_", $row['status']); - $ret .= "" . - "" . - "" . - "" . - "" - ; - } - } - - $ret .= "
Procedure /
Validation Step
FindingsMitigations
" . $controls->get_Control_ID() . "
" . $controls->get_Name() . "
" . $controls->finding->vul_desc . "" . $controls->finding->mitigations . "
" . $row['sub_control_id'] . "  " . $row['status'] . "
" . $row['name'] . "
" . $row['test_results'] . "" . $row['mitigations'] . "
" . - "
" . - "" . $controls->get_Control_ID() . " - Risk Analysis  " . - "" . - "" . - "" . - "
" . - "
" . - "$ctrl_id - Technical Findings" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - ""; - - $cat_1 = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Open", 1); - $cat_2 = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Open", 2); - $cat_3 = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Open", 3); - - /* - $sql = "SELECT ". - "IFNULL((SELECT COUNT(1) ". - "FROM `sagacity`.`target` t ". - "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` ". - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` ". - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` ". - "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` ". - "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` ". - "WHERE ". - "(fs.`status`='Open' OR fs.`status`='Exception') AND ". - "f.`cat`=? AND ". - "fc.`ia_control`=? AND ". - "t.`ste_id`=? ". - "GROUP BY f.`pdi_id`". - "), 0)". - " + ". - "IFNULL((SELECT COUNT(1) ". - "FROM `sagacity`.`checklist` c ". - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` ". - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` ". - "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` ". - "LEFT JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` ". - "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` ". - "WHERE ". - "c.`name`='Orphan' AND ". - "(fs.`status`='Open' OR fs.`status`='Exception') AND ". - "f.`cat`=? AND ". - "fc.`ia_control`=? AND ". - "t.`ste_id`=? ". - "GROUP BY f.`pdi_id`". - "), 0) AS 'sum_count'"; - - ($cat_1) = $dbh->selectrow_array($sql, undef, 1, param('id'), param('ste_id'), 1, param('id'), param('ste_id')); - ($cat_2) = $dbh->selectrow_array($sql, undef, 2, param('id'), param('ste_id'), 2, param('id'), param('ste_id')); - ($cat_3) = $dbh->selectrow_array($sql, undef, 3, param('id'), param('ste_id'), 3, param('id'), param('ste_id')); - */ - $sql = "SELECT " . - "IFNULL((SELECT COUNT(1) " . - "FROM `sagacity`.`target` t " . - "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . - "WHERE " . - "(fs.`status`='Open' OR fs.`status`='Exception') AND " . - "fc.`ia_control`=? AND " . - "t.`ste_id`=? " . - "), 0)" . - " + " . - "IFNULL((SELECT COUNT(1) " . - "FROM `sagacity`.`checklist` c " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "LEFT JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . - "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . - "WHERE " . - "c.`name`='Orphan' AND " . - "(fs.`status`='Open' OR fs.`status`='Exception') AND " . - "fc.`ia_control`=? AND " . - "t.`ste_id`=? " . - "), 0) AS 'sum_count'"; - - $unique = db_helper::selectrow_array($conn, $sql, $controls->get_Control_ID(), $_REQUEST['ste_id'], $controls->get_Control_ID(), $_REQUEST['ste_id']); - /* - $sql = "SELECT ". - "IFNULL((SELECT COUNT(1) ". - "FROM `sagacity`.`target` t ". - "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` ". - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` ". - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` ". - "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` ". - "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` ". - "WHERE ". - "fs.`status`=? AND ". - "fc.`ia_control`=? AND ". - "t.`ste_id`=? ". - "GROUP BY f.`pdi_id`". - "), 0)". - " + ". - "IFNULL((SELECT COUNT(1) ". - "FROM `sagacity`.`checklist` c ". - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` ". - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` ". - "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` ". - "LEFT JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` ". - "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` ". - "WHERE ". - "c.`name`='Orphan' AND ". - "fs.`status`=? AND ". - "fc.`ia_control`=? AND ". - "t.`ste_id`=? ". - "GROUP BY f.`pdi_id`". - "), 0) AS 'sum_count'"; - - ($na) = $dbh->selectrow_array($sql, undef, "Not Applicable", param('id'), param('ste_id'), "Not Applicable", param('id'), param('ste_id')); - ($nf) = $dbh->selectrow_array($sql, undef, "Not a Finding", param('id'), param('ste_id'), "Not a Finding", param('id'), param('ste_id')); - */ - $na = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Not Applicable"); - $nf = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Not a Finding"); - - $sql = "SELECT " . - "IFNULL((SELECT COUNT(1) " . - "FROM `sagacity`.`target` t " . - "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . - "WHERE " . - "(fs.`status`='Open' OR fs.`status`='Exception') AND " . - "fc.`ia_control`=? AND " . - "t.`ste_id`=? " . - "GROUP BY f.`tgt_id`" . - "), 0)" . - " + " . - "IFNULL((SELECT COUNT(1) " . - "FROM `sagacity`.`checklist` c " . - "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . - "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . - "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . - "LEFT JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . - "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . - "WHERE " . - "c.`name`='Orphan' AND " . - "(fs.`status`='Open' OR fs.`status`='Exception') AND " . - "fc.`ia_control`=? AND " . - "t.`ste_id`=? " . - "GROUP BY f.`tgt_id`" . - "), 0) AS 'sum_count'"; - - $host_count = db_helper::selectrow_array($conn, $sql, $controls->get_Control_ID(), $_REQUEST['ste_id'], $controls->get_Control_ID(), $_REQUEST['ste_id']); - - $ret .= "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - "" . - ""; - - $ret .= "
IIIIIINANFUniqueHostsTotal
$cat_1$cat_2$cat_3$na$nf" . $unique['sum_count'] . "" . $host_count['sum_count'] . "" . ($cat_1 + $cat_2 + $cat_3) . "
" . - "
" . - "
" . - "" . - "" . - "" . - "" . - "" . - "" - ; - - $sql = "SELECT " . - "f.`pdi_id`,s.`stig_id`,f.`cat`,pdi.`short_title`," . - "(SELECT GROUP_CONCAT(fc.`ia_control` SEPARATOR ' ') " . - "FROM `sagacity`.`finding_controls` fc " . - "WHERE " . - "fc.`finding_id`=f.`id` " . - ") AS ia_controls " . - "FROM `sagacity`.`findings` f " . - "JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . - "JOIN `sagacity`.`stigs` s ON s.`pdi_id`=f.`pdi_id` " . - "JOIN `sagacity`.`pdi_catalog` pdi ON pdi.`id`=f.`pdi_id` " . - "WHERE (fs.`status`='Open' OR fs.`status`='Exception') " . - "GROUP BY f.`pdi_id` " . - "HAVING ia_controls LIKE '%" . $_REQUEST['id'] . "%' " . - "ORDER BY s.`stig_id`" - ; - - if ($res = $conn->query($sql)) { - while ($row = $res->fetch_assoc()) { - $cat = str_repeat("I", $row['cat']); - $ias = explode(" ", $row['ia_controls']); - $ia_cnt = (is_array($ias) ? count($ias) : 0); - $stig = str_replace(".", "", $row['stig_id']); - - $sql2 = "SELECT " . - "GROUP_CONCAT(DISTINCT f.`id` SEPARATOR ',') AS 'finding_ids'," . - "GROUP_CONCAT(DISTINCT t.`name` SEPARATOR ', ') AS 'affected_hosts',f.`notes` " . - "FROM `sagacity`.`target` t " . - "JOIN `sagacity`.`findings` f ON f.`tgt_id`=t.`id` " . - "JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . - "WHERE t.`ste_id`=? AND f.`pdi_id`=?"; - - $row = db_helper::selectrow_array($conn, $sql2, $_REQUEST['ste_id'], $row['pdi_id'])[0]; - $ids = $row['finding_ids']; - $hosts = $row['affected_hosts']; - $notes = $row['notes']; - - $ret .= "" . - "" . - "" . - "" . - "" . - "" . - "" . - ""; - } - } - - - $ret .= "
STIG ID" . - "Cat" . - "M" . - "Vulnerability Title" . - "Affected Hosts" . - "Notes
(inc.)" . - "
" . $row['stig_id'] . "$cat" . - ($ia_cnt > 1 ? "" : "") . - "" . - "" . $row['short_title'] . "$hosts$notes
"; - - return $ret; -} - -function update_risk_status() -{ - global $conn; - $sql = "UPDATE `sagacity`.`control_findings` SET `risk_status`=? WHERE `ste_id`=? AND `control_id`=?"; - db_helper::run($conn, $sql, strtolower($_REQUEST['status']), $_REQUEST['ste_id'], $_REQUEST['ctrl_id']); -} - -function update_risk_analysis() -{ - global $conn; - $sql = "UPDATE `sagacity`.`control_findings` SET `risk_analysis`=? WHERE `control_id`=? AND `ste_id`=?"; - db_helper::run($conn, $sql, $_REQUEST['text'], $_REQUEST['ctrl_id'], $_REQUEST['ste_id']); -} - -function update_control_completion() -{ - global $conn; - $sql = "UPDATE `sagacity`.`control_findings` SET `done`=IF(`done`=1,0,1) WHERE `control_id`=? AND `ste_id`=?"; - db_helper::run($conn, $sql, $_REQUEST['ctrl_id'], $_REQUEST['ste_id']); -} - -function update_stig_control() -{ - global $conn; - $sql = "DELETE FROM `sagacity`.`finding_controls` WHERE `finding_id` IN (" . $_REQUEST['ids'] . ")"; - $conn->real_query($sql); - - $sql = "INSERT INTO `sagacity`.`finding_controls` (`finding_id`,`ia_control`) VALUES "; - $ids = explode(",", $_REQUEST['ids']); - for ($x = 0; $x < count($ids); $x++) { - $sql .= "(" . $ids[$x] . ",'" . $_REQUEST['ctrl_id'] . "'),"; - } - $sql = substr($sql, 0, -1); - $conn->real_query($sql); -} - -/** - * Function to get targets from the category - * - * @global db $db - * - * @param int $cat_id - * - * @return type - */ -function get_hosts($cat_id = null) -{ - global $db; - $ret = ['cat_id' => $cat_id]; - $ste_id = filter_input(INPUT_COOKIE, 'ste', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); - $tgts = []; - - if ($cat_id) { - $ste_cat = $db->get_Category($cat_id)[0]; - $tgts = $db->get_Target_By_Category($cat_id); - } - elseif (is_numeric($ste_id)) { - $tgts = $db->get_Unassigned_Targets($ste_id); - } - else { - return json_encode(['error' => "Invalid info"]); - } - - foreach ($tgts as $key => $tgt) { - $chks = $db->get_Target_Checklists($tgt->get_ID()); - if ($cat_id) { - $exp_scan_srcs = $db->get_Expected_Category_Sources($ste_cat); - } - else { - $exp_scan_srcs = null; - } - $scan_srcs = $db->get_Target_Scan_Sources($tgt, $exp_scan_srcs); - $icons = []; - $icon_str = ''; - $src_str = ''; - - foreach ($chks as $chk) { - if (!in_array($chk->get_Icon(), array_keys($icons))) { - $icons[$chk->get_Icon()]['icon'] = $chk->get_Icon(); - $icons[$chk->get_Icon()]['name'] = ''; - } - $icons[$chk->get_Icon()]['name'] .= "{$chk->get_Name()} V{$chk->get_Version()}R{$chk->get_Release()} ({$chk->get_type()})" . PHP_EOL; - } - - foreach ($icons as $icon => $data) { - $icon_str .= ""; - } - - foreach ($scan_srcs as $key => $src) { - $icon = $src['src']->get_Icon(); - if($src['scan_error']) { - $icon = strtolower($src['src']->get_Name()) . "-failed.png"; - } - - $src_str .= "get_Name()}"; - if (isset($src['count']) && $src['count']) { - $src_str .= " ({$src['count']})"; - } - $src_str .= "' class='checklist_image' />"; - } - - $ret['targets'][] = array_merge([ - 'id' => $tgt->get_ID(), - 'ste_id' => $tgt->get_STE_ID(), - 'name' => $tgt->get_Name(), - 'os' => $tgt->get_OS_String(), - 'location' => $tgt->get_Location(), - 'auto' => $tgt->get_Task_Status($tgt->get_Auto_Status_ID()), - 'man' => $tgt->get_Task_Status($tgt->get_Man_Status_ID()), - 'data' => $tgt->get_Task_Status($tgt->get_Data_Status_ID()), - 'fp' => $tgt->get_Task_Status($tgt->get_FP_Cat1_Status_ID()), - 'ip' => (count($tgt->interfaces) ? array_keys($tgt->interfaces)[0] : ''), - 'notes' => $tgt->getDisplayNotes(), - 'scans' => $src_str, - 'chk' => $icon_str, - 'nr' => $tgt->getNotReviewedCount(), - 'na' => $tgt->getNotApplicableCount(), - 'nf' => $tgt->getNotAFindingCount(), - 'cat_1' => $tgt->getCat1Count(), - 'cat_2' => $tgt->getCat2Count(), - 'cat_3' => $tgt->getCat3Count(), - 'comp' => $tgt->getCompliantPercent(), - 'assessed' => $tgt->getAssessedPercent() - ]); - } - - return json_encode($ret); -} - -function get_target_data() -{ - global $db; - - $tgt = $db->get_Target_Details($_REQUEST['ste_id'], $_REQUEST['tgt_id'])[0]; - - switch ($_REQUEST['type']) { - case 'netstat': - return $tgt->get_Netstat_Connections(); - case 'routes': - return $tgt->get_Routes(); - case 'firewall': - return $tgt->get_Firewall_Config(); - case 'shares': - return $tgt->get_Shares(); - case 'mounted': - return $tgt->get_Mounted(); - case 'process_list': - return $tgt->get_Process_List(); - case 'autorun': - return $tgt->get_Autorun(); - case 'services': - return $tgt->get_Services(); - case 'remote_registry': - return $tgt->get_Remote_Registry(); - case 'system': - return $tgt->get_System(); - case 'bios': - return $tgt->get_BIOS(); - case 'copyright': - return $tgt->get_Copyright(); - case 'missing_patches': - return $tgt->get_Missing_Patches(); - case 'user_list': - return $tgt->get_User_List(); - case 'disabled_accts': - return $tgt->get_Disabled_Accts(); - case 'stag_pwds': - return $tgt->get_Stag_Pwds(); - case 'never_logged_in': - return $tgt->get_Never_Logged_In(); - case 'pwds_never_expire': - return $tgt->get_Pwds_Never_Expire(); - } - - return null; -} - -function target_filter($ste_id, $criteria) -{ - global $db, $conn; - $where = array(); - $tgts = array(); - $idx = 0; - $like = false; - $ret = array(); - - $search = explode("\n", $criteria); - unset($search[count($search) - 1]); - - foreach ($search as $str) { - if (!$str) { - continue; - } - switch ($str) { - case (preg_match("/name /i", $str) ? true : false): - $where[] = "t.`name`"; - break; - case (preg_match("/sw /i", $str) ? true : false): - $where[] = "sw.`cpe`"; - break; - case (preg_match("/os /i", $str) ? true : false): - $where[] = "os.`cpe`"; - break; - case (preg_match("/auto status /i", $str) ? true : false): - $where[] = "`as`.`status`"; - break; - case (preg_match("/manual status /i", $str) ? true : false): - $where[] = "ms.`status`"; - break; - case (preg_match("/data gathering status /i", $str) ? true : false): - $where[] = "ds.`status`"; - break; - case (preg_match("/fp\/cat i status /i", $str) ? true : false): - $where[] = "fp.`status`"; - break; - case (preg_match("/category /i", $str) ? true : false): - $where[] = "t.`cat_id`"; - break; - case (preg_match("/open port /i", $str) ? true : false): - $where[] = "CONCAT(pps.`proto`,'/',pps.`port`)"; - break; - default: - continue 2; - } - - if (($pos = strpos($str, "!~")) !== false) { - $where[$idx] .= " NOT LIKE "; - $like = true; - } - elseif (($pos = strpos($str, "~=")) !== false) { - $where[$idx] .= " LIKE "; - $like = true; - } - elseif (($pos = strpos($str, "!=")) !== false) { - $where[$idx] .= " != "; - } - elseif (($pos = strpos($str, "=")) !== false) { - $where[$idx] .= " = "; - $pos--; - } - - $where[$idx] .= "'" . ($like ? "%" : "") . - $conn->real_escape_string(substr($str, $pos + 4, -1)) . - ($like ? "%" : "") . "'"; - - $idx++; - $like = false; - } - - $where_str = implode(" AND ", $where); - - $sql = "SELECT COUNT(DISTINCT(t.`id`)) as 'cnt' " . - "FROM `sagacity`.`target` t " . - "LEFT JOIN `sagacity`.`task_status` `as` ON t.`auto_status_id`=`as`.`id` " . - "LEFT JOIN `sagacity`.`task_status` ms ON t.`man_status_id`=ms.`id` " . - "LEFT JOIN `sagacity`.`task_status` ds ON t.`data_status_id`=ds.`id` " . - "LEFT JOIN `sagacity`.`task_status` fp ON t.`fp_cat1_status_id`=fp.`id` " . - "LEFT JOIN `sagacity`.`target_software` ts ON ts.`tgt_id`=t.`id` " . - "LEFT JOIN `sagacity`.`software` sw ON ts.`sft_id`=sw.`id` " . - "LEFT JOIN `sagacity`.`software` os ON t.`os_id`=os.`id` " . - "LEFT JOIN `sagacity`.`interfaces` i ON t.`id`=i.`tgt_id` " . - "LEFT JOIN `sagacity`.`pps_list` hp ON hp.`int_id`=i.`id` " . - "LEFT JOIN `sagacity`.`ports_proto_services` pps ON pps.`id`=hp.`pps_id` " . - "WHERE " . - $where_str - ; - $cnt = 0; - if ($res = $conn->query($sql)) { - $cnt = $res->fetch_array()[0]; - } - else { - error_log($conn->error); - Sagacity_Error::sql_handler($sql); - } - $ret['count'] = $cnt; - - $sql = "SELECT DISTINCT(t.`id`) " . - "FROM `sagacity`.`target` t " . - "LEFT JOIN `sagacity`.`task_status` `as` ON t.`auto_status_id`=`as`.`id` " . - "LEFT JOIN `sagacity`.`task_status` ms ON t.`man_status_id`=ms.`id` " . - "LEFT JOIN `sagacity`.`task_status` ds ON t.`data_status_id`=ds.`id` " . - "LEFT JOIN `sagacity`.`task_status` fp ON t.`fp_cat1_status_id`=fp.`id` " . - "LEFT JOIN `sagacity`.`target_software` ts ON ts.`tgt_id`=t.`id` " . - "LEFT JOIN `sagacity`.`software` sw ON ts.`sft_id`=sw.`id` " . - "LEFT JOIN `sagacity`.`software` os ON t.`os_id`=os.`id` " . - "LEFT JOIN `sagacity`.`interfaces` i ON t.`id`=i.`tgt_id` " . - "LEFT JOIN `sagacity`.`pps_list` hp ON hp.`int_id`=i.`id` " . - "LEFT JOIN `sagacity`.`ports_proto_services` pps ON pps.`id`=hp.`pps_id` " . - "WHERE " . - $where_str . " " . - ($_REQUEST['count'] != 'all' ? "LIMIT " . $_REQUEST['start_count'] . "," . $_REQUEST['count'] : "") - ; - - if ($res = $conn->query($sql)) { - while ($row = $res->fetch_assoc()) { - $tgts[] = $db->get_Target_Details($_REQUEST['ste'], $row['id'])[0]; - } - } - else { - error_log($conn->error); - Sagacity_Error::sql_handler($sql); - } - - foreach ($tgts as $tgt) { - $cat_id = $tgt->get_Cat_ID(); - $ste_cat = $db->get_Category($cat_id); - $chks = $db->get_Target_Checklists($tgt->get_ID()); - if (isset($cat_id)) { - $exp_scan_srcs = $db->get_Expected_Category_Sources($ste_cat); - } - else { - $exp_scan_srcs = null; - } - $scan_srcs = $db->get_Target_Scan_Sources($tgt, $exp_scan_srcs); - $icons = array(); - $icon_str = ''; - $src_str = ''; - - foreach ($chks as $chk) { - if (!in_array($chk->get_Icon(), array_keys($icons))) { - $icons[$chk->get_Icon()]['icon'] = $chk->get_Icon(); - $icons[$chk->get_Icon()]['name'] = ''; - } - $icons[$chk->get_Icon()]['name'] .= $chk->get_Name() . " V" . $chk->get_Version() . "R" . $chk->get_Release() . " (" . $chk->get_type() . ")" . PHP_EOL; - } - - foreach ($icons as $icon => $data) { - $icon_str .= ""; - } - - foreach ($scan_srcs as $src) { - $src_str .= "get_Icon() . "' title='" . $src['src']->get_Name(); - if (isset($src['count']) && $src['count']) { - $src_str .= " (" . $src['count'] . ")"; - } - $src_str .= "' class='checklist_image' />"; - } - - $ret['targets'][] = array_merge($tgt->get_JSON(), array( - 'scans' => $src_str, - 'chk' => $icon_str - )); - } - - if (isset($ret['targets']) && is_array($ret['targets']) && count($ret['targets'])) { - return json_encode($ret); - } - else { - return json_encode(array('count' => 0)); - } -} - -function reference_filter($criteria) -{ - global $db, $conn; - $where = array(); - $ref = array(); - $idx = 0; - $ret = ''; - $like = false; - $odd = true; - - $sql = "SELECT * FROM `sagacity`.`pdi_catalog` pdi "; - - $query = array( - 'cce' => array( - 'sql' => "LEFT JOIN `sagacity`.`cce` ON cce.`pdi_id`=pdi.`id` ", - 'added' => false - ), - 'cve' => array( - 'sql' => "LEFT JOIN `sagacity`.`cve` ON cve.`pdi_id`=pdi.`id` " . - "LEFT JOIN `sagacity`.`cve_db` ON cve_db.`cve_id`=cve.`cve_id` " . - "LEFT JOIN `sagacity`.`cve_references` ref ON ref.`cve_seq`=cve_db.`cve_id` " . - "LEFT JOIN `sagacity`.`cve_web` web ON web.`cve_id`=cve_db.`cve_id` ", - 'added' => false, - ), - 'vms' => array( - 'sql' => "LEFT JOIN `sagacity`.`golddisk` gd ON gd.`pdi_id`=pdi.`id` ", - 'added' => false, - ), - 'iavm' => array( - 'sql' => "LEFT JOIN `sagacity`.`iavm_notices` iavm ON iavm.`pdi_id`=pdi.`id` ", - 'added' => false, - ) - ); - - $xml = new DOMDocument(); - $xml->appendChild($root = xml_helper($xml, "root")); - - $search = explode("\n", $criteria); - unset($search[count($search) - 1]); - - foreach ($search as $str) { - switch ($str) { - case (preg_match("/cce /i", $str) ? true : false): - if (!$query['cce']['added']) { - $sql .= $query['cce']['sql']; - } - $query['cce']['added'] = true; - $where[] = ""; - break; - case (preg_match("/cpe /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/cve /i", $str) ? true : false): - if (!$query['cve']['added']) { - $sql .= $query['cve']['sql']; - } - $query['cve']['added'] = true; - $where[] = ""; - break; - case (preg_match("/ia control /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/iavm /i", $str) ? true : false): - if (!$query['iavm']['added']) { - $sql .= $query['iavm']['sql']; - } - $query['iavm']['added'] = true; - $where[] = ""; - break; - case (preg_match("/nessus plugin id /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/oval /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/reference /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/stig id /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/sv rule /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/vms id /i", $str) ? true : false): - if (!$query['vms']['added']) { - $sql .= $query['vms']['sql']; - } - $query['vms']['added'] = true; - $where[] = ""; - break; - case (preg_match("/vendor advisory /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/check contents /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/short title /i", $str) ? true : false): - $where[] = ""; - break; - case (preg_match("/description /i", $str) ? true : false): - $where[] = ""; - break; - default: - continue 2; - } - - if (($pos = strpos($str, "!~")) !== false) { - $where[$idx] .= " NOT LIKE "; - $like = true; - } - elseif (($pos = strpos($str, "~=")) !== false) { - $where[$idx] .= " LIKE "; - $like = true; - } - elseif (($pos = strpos($str, "!=")) !== false) { - $where[$idx] .= " != "; - } - elseif (($pos = strpos($str, "=")) !== false) { - $where[$idx] .= " = "; - $pos--; - } - - $where[$idx] .= "'" . ($like ? "%" : "") . - $conn->real_escape_string(substr($str, $pos + 4, -1)) . - ($like ? "%" : "") . "'"; - - $idx++; - $like = false; - } - - $where_str = implode(" AND ", $where); - - $sql = "SELECT COUNT(t.`id`) as 'cnt' " . - "WHERE " . - $where_str; - - $cnt = 0; - if ($res = $conn->query($sql)) { - $cnt = $res->fetch_array()[0]; - } - else { - error_log($conn->error); - Sagacity_Error::sql_handler($sql); - } - $root->setAttribute('count', $cnt); - - $sql = "SELECT t.`id` " . - " " . - "WHERE " . - $where_str . " " . - ($_REQUEST['count'] != 'all' ? "LIMIT " . $_REQUEST['start_count'] . "," . $_REQUEST['count'] : "") - ; - - if ($res = $conn->query($sql)) { - while ($row = $res->fetch_assoc()) { - - } - } - else { - error_log($conn->error); - Sagacity_Error::sql_handler($sql); - } - - return $xml->saveXML(); -} - -function scan_filter($ste_id, $criteria) -{ - -} - -function finding_filter($ste_id, $criteria) -{ - -} - -function get_saved_filter($type, $filter_name) -{ - global $db; - $filter = $db->get_Filters($type, $filter_name); - $ret = array(); - - if (is_array($filter) && count($filter)) { - $filter = $filter[0]; - foreach (explode("\n", $filter['criteria']) as $cri) { - if ($cri) - $ret[] = $cri; - } - } - - return json_encode($ret); -} - -function update_target_field($field, $data) -{ - global $db, $conn; - - $sql = "UPDATE `sagacity`.`target` t " . - "LEFT JOIN `sagacity`.`target_software` ts ON t.`id`=ts.`tgt_id` " . - "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . - "LEFT JOIN `sagacity`.`target_net_meta` tnm ON t.`id`=tnm.`tgt_id` " . - "LEFT JOIN `sagacity`.`target_sys_meta` tsm ON t.`id`=tsm.`tgt_id` " . - "LEFT JOIN `sagacity`.`target_user_meta` tum ON t.`id`=tum.`tgt_id` " . - "SET "; - - switch ($field) { - case 'name': - $sql .= "t.`name`='" . $conn->real_escape_string($data) . "'"; - break; - case 'location': - $sql .= "t.`location`='" . $conn->real_escape_string($data) . "'"; - break; - case 'wmi_pid': - $sql .= "tsm.`wmi_listening_pid`='" . $conn->real_escape_string($data) . "'"; - break; - case 'last_login': - $sql .= "tum.`last_login`='" . $conn->real_escape_string($data) . "'"; - break; - case 'login': - $sql .= "tum.`login`='" . $conn->real_escape_string($data) . "'"; - break; - case 'notes': - $sql .= "t.`notes`='" . $conn->real_escape_string($data) . "'"; - break; - case 'auto_status': - $sql .= "t.`auto_status_id`='" . $conn->real_escape_string($data) . "'"; - break; - case 'man_status': - $sql .= "t.`man_status_id`='" . $conn->real_escape_string($data) . "'"; - break; - case 'data_status': - $sql .= "t.`data_status_id`='" . $conn->real_escape_string($data) . "'"; - break; - case 'fp-cat1_status': - $sql .= "t.`fp_cat1_status_id`='" . $conn->real_escape_string($data) . "'"; - break; - case 'vm': - $sql .= "tsm.`is_vm`='" . $conn->real_escape_string($data) . "'"; - break; - case 'pp_on': - $sql .= "t.`pp_off`=" . ($data == '1' ? '0' : '1'); - break; - case 'netstat_data': - $sql .= "tnm.`netstat_connections`='" . $conn->real_escape_string($data) . "'"; - break; - case 'routes_data': - $sql .= "tnm.`routes`='" . $conn->real_escape_string($data) . "'"; - break; - case 'shares_data': - $sql .= "tnm.`shares`='" . $conn->real_escape_string($data) . "'"; - break; - case 'firewall_data': - $sql .= "tnm.`firewall_config`='" . $conn->real_escape_string($data) . "'"; - break; - case 'mounted_data': - $sql .= "tsm.`mounted`='" . $conn->real_escape_string($data) . "'"; - break; - case 'process_list_data': - $sql .= "tsm.`process_list`='" . $conn->real_escape_string($data) . "'"; - break; - case 'autorun_data': - $sql .= "tsm.`autorun`='" . $conn->real_escape_string($data) . "'"; - break; - case 'services_data': - $sql .= "tsm.`services`='" . $conn->real_escape_string($data) . "'"; - break; - case 'remote_registry_data': - $sql .= "tsm.`remote_registry`='" . $conn->real_escape_string($data) . "'"; - break; - case 'copyright_data': - $sql .= "tsm.`copyrighted`='" . $conn->real_escape_string($data) . "'"; - break; - case 'system_data': - $sql .= "tsm.`system`='" . $conn->real_escape_string($data) . "'"; - break; - case 'bios_data': - $sql .= "tsm.`bios`='" . $conn->real_escape_string($data) . "'"; - break; - case 'missing_patches_data': - $sql .= "t.`missing_patches`='" . $conn->real_escape_string($data) . "'"; - break; - case 'user_list_data': - $sql .= "tum.`user_list`='" . $conn->real_escape_string($data) . "'"; - break; - case 'disabled_accts_data': - $sql .= "tum.`disabled_accts`='" . $conn->real_escape_string($data) . "'"; - break; - case 'stag_pwds_data': - $sql .= "tum.`stag_pwds`='" . $conn->real_escape_string($data) . "'"; - break; - case 'never_logged_in_data': - $sql .= "tum.`never_logged_in`='" . $conn->real_escape_string($data) . "'"; - break; - case 'pwds_never_expire_data': - $sql .= "tum.`pwd_never_expires`='" . $conn->real_escape_string($data) . "'"; - break; - case '': - $sql .= "='" . $conn->real_escape_string($data) . "'"; - break; - } - - $sql .= " WHERE t.`id`=" . $conn->real_escape_string($_REQUEST['tgt_id']); - - if (!$conn->real_query($sql)) { - error_log($conn->error); - Sagacity_Error::sql_handler($sql); - - return 'false'; - } - - return 'true'; -} - -function get_category_details($cat_id) -{ - global $db; - $cat = $db->get_Category($cat_id); - if (is_array($cat) && count($cat) && isset($cat[0]) && is_a($cat[0], 'ste_cat')) { - $cat = $cat[0]; - } - else { - return 'no category found'; - } - - return json_encode([ - 'id' => $cat->get_ID(), - 'name' => $cat->get_Name(), - 'analyst' => $cat->get_Analyst(), - 'sources' => $cat->get_Sources() - ]); -} +" . update_finding_status() . ""; +} +elseif ($action == 'update_finding_ia_controls') { + print "" . update_finding_ia_controls() . ""; +} +elseif ($action == 'update_finding_notes') { + print "" . update_finding_notes() . ""; +} +elseif ($action == 'update_risk_status') { + print update_risk_status(); +} +elseif ($action == 'update_risk_analysis') { + print update_risk_analysis(); +} +elseif ($action == 'update_control_completion') { + print update_control_completion(); +} +elseif ($action == 'update_stig_control') { + print update_stig_control(); +} +elseif ($action == 'refresh_counts') { + print "" . refresh_counts() . ""; +} +elseif ($action == 'get_control_details') { + if ($_REQUEST['id'] == 'overall') { + print get_STE_details(); + } + else { + print get_control_details(); + } +} +elseif ($action == 'update_STE') { + print update_STE_details(); +} +elseif ($action == 'update_STE_risk') { + $conn->real_query( + "UPDATE `sagacity`.`ste` SET `risk_status`='" . + strtolower($conn->real_escape_string($_REQUEST['status'])) . + "' WHERE `id`=" . $conn->real_escape_string($ste)); +} +elseif ($action == 'get_hosts') { + $cat_id = filter_input(INPUT_POST, 'cat_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + if (is_numeric($cat_id)) { + print get_hosts($cat_id); + } + else { + print json_encode(['error' => 'Invalid category ID']); + } +} +elseif ($action == 'new-get-hosts') { + $cat_id = filter_input(INPUT_POST, 'cat-id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + if (is_numeric($cat_id)) { + print new_get_hosts($cat_id); + } + else { + print json_encode(['error' => 'Invalid category ID']); + } +} +elseif ($action == 'get_target_data') { + print get_target_data($_REQUEST['type']); +} +elseif ($action == 'save_filter') { + print $db->save_Filter($_REQUEST['type'], $_REQUEST['name'], $_REQUEST['criteria']); +} +elseif ($action == 'target-filter') { + print header(JSON) . target_filter($ste, $_REQUEST['criteria']); +} +elseif ($action == 'scan-filter') { + print scan_filter($ste, $_REQUEST['criteria']); +} +elseif ($action == 'finding-filter') { + print finding_filter($ste, $_REQUEST['criteria']); +} +elseif ($action == 'reference-filter') { + print reference_filter($ste, $_REQUEST['criteria']); +} +elseif ($action == 'get-saved-filter') { + print get_saved_filter($_REQUEST['type'], $_REQUEST['name']); +} +elseif ($action == 'update-target-field') { + print update_target_field($_REQUEST['field'], $_REQUEST['data']); +} +elseif ($action == 'get_category_details') { + $cat_id = filter_input(INPUT_POST, 'cat_id', FILTER_VALIDATE_INT); + print header(JSON) . get_category_details($cat_id); +} +elseif ($action == 'add_scans') { + $import = new import(); + $import->scan_Result_Files(false); + + print header(JSON) . json_encode(array( + 'success' => 'Thread running' + )); +} +elseif ($action == 'auto-categorize') { + $db->auto_Catorgize_Targets($ste); + + print header(JSON) . json_encode([ + 'success' => 'Categorized Targets' + ]); +} +elseif ($action == 'delete-cat') { + $cat_id = filter_input(INPUT_POST, 'cat_id', FILTER_VALIDATE_INT); + if ($db->delete_Cat($cat_id)) { + print header(JSON) . json_encode([ + 'success' => 'Successfully deleted category' + ]); + } +} +elseif ($action == 'delete-file') { + $file = filter_input(INPUT_POST, 'filename', FILTER_SANITIZE_STRING); + $file = realpath($file); + + if ($file && preg_match("/^" . preg_quote(TMP, '/') . "/", $file)) { + if (unlink($file)) { + print header(JSON) . json_encode([ + 'success' => 'Deleted file' + ]); + } + else { + print header(JSON) . json_encode([ + 'error' => "Failed to delete $file" + ]); + } + } + else { + $file = filter_input(INPUT_POST, 'filename', FILTER_SANITIZE_STRING); + print header(JSON) . json_encode([ + 'error' => "$file does not exist" + ]); + } +} +elseif ($action == 'get-cat-data') { + $fname = filter_input(INPUT_POST, 'fname', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); + $checklist = $db->get_Checklist_By_File($fname); + + if (isset($checklist[0])) { + $checklist[0]->type = ucfirst($checklist[0]->type); + print header(JSON) . json_encode($checklist[0]); + } + else { + print header(JSON) . json_encode(array('error' => 'Error finding checklist')); + } +} +elseif ($action == 'checklist-remove-software') { + $chk_id = filter_input(INPUT_POST, 'chk_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + $sw_id = filter_input(INPUT_POST, 'sw_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + + $db->help->delete("sagacity.checklist_software_lookup", null, array( + array( + 'field' => 'chk_id', + 'op' => '=', + 'value' => $chk_id + ), + array( + 'field' => 'sw_id', + 'op' => '=', + 'value' => $sw_id, + 'sql_op' => 'AND' + ) + )); + + if ($db->help->execute()) { + print header(JSON) . json_encode(array('success' => 'Relationship deleted')); + } + else { + print header(JSON) . json_encode(array('error' => 'Failed to delete relationship')); + } +} +elseif ($action == 'checklist-add-software') { + $sw_id = filter_input(INPUT_POST, 'sw_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + $chk_id = filter_input(INPUT_POST, 'chk_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + + $db->help->insert("checklist_software_lookup", array( + 'sw_id' => $sw_id, + 'chk_id' => $chk_id + ), true); + + if (!$db->help->execute()) { + print header(JSON) . json_encode(array('status' => 'Error adding the software to the checklist')); + } + else { + print header(JSON) . json_encode(array('status' => 'Successfully added the software')); + } +} +elseif ($action == 'save-checklist') { + $rel_date = new DateTime(filter_input(INPUT_POST, 'rel-date', FILTER_SANITIZE_STRING)); + + $db->help->update("sagacity.checklist", [ + 'name' => filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING), + 'description' => filter_input(INPUT_POST, 'desc', FILTER_SANITIZE_STRING), + 'icon' => filter_input(INPUT_POST, 'icon', FILTER_SANITIZE_STRING), + 'date' => (is_a($rel_date, 'DateTime') ? $rel_date->format(MYSQL_D_FORMAT) : (new DateTime())->format(MYSQL_D_FORMAT)) + ], [ + [ + 'field' => 'id', + 'op' => '=', + 'value' => filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT) + ] + ]); + + if($db->help->execute()) { + print json_encode(['success' => 'Successfully updated checklist']); + } + else { + print json_encode(['error' => 'Error updating checklist']); + } +} +elseif ($action == 'export-ckl') { + $cat_id = filter_input(INPUT_POST, 'cat', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + $tgt_id = filter_input(INPUT_POST, 'tgt', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + $script = null; + + if (!is_numeric($ste)) { + die; + } + + if ($cat_id && is_numeric($cat_id)) { + $script = (defined('PHP_BIN') ? realpath(PHP_BIN) : realpath(PHP)) . + " -c " . realpath(PHP_CONF) . + " -f " . realpath(DOC_ROOT . "/exec/export-ckl.php") . " --" . + " -s=$ste" . + " -c=$cat_id"; + } + elseif ($tgt_id && is_numeric($tgt_id)) { + $script = (defined('PHP_BIN') ? realpath(PHP_BIN) : realpath(PHP)) . + " -c " . realpath(PHP_CONF) . + " -f " . realpath(DOC_ROOT . "/exec/export-ckl.php") . " --" . + " -s=$ste" . + " -t=$tgt_id"; + } + + if (!is_null($script)) { + if (strtolower(substr(PHP_OS, 0, 3)) == "win") { + $shell = new COM("WScript.Shell"); + $shell->CurrentDirectory = DOC_ROOT . "/exec"; + $shell->run($script, 0, false); + } + elseif (strtolower(substr(PHP_OS, 0, 3)) == 'lin') { + exec("cd " . realpath(DOC_ROOT . "/exec") . " && {$script} > /dev/null &"); + } + } +} +elseif ($action == 'delete-host') { + $sel_tgts = json_decode(html_entity_decode(filter_input(INPUT_POST, 'selected_tgts', FILTER_SANITIZE_STRING))); + if (is_array($sel_tgts) && count($sel_tgts)) { + foreach ($sel_tgts as $tgt_id) { + if (!$db->delete_Target($tgt_id)) { + print header(JSON) . json_encode(array('error' => "Failed to delete target ID $tgt_id")); + break; + } + } + } + elseif (is_numeric($sel_tgts)) { + if (!$db->delete_Target($sel_tgts)) { + print header(JSON) . json_encode(array('error' => "Failed to delete target ID $sel_tgts")); + } + } + + print header(JSON) . json_encode(['success' => "Deleted all selected target(s)"]); +} +elseif ($action == 'get-target-notes') { + $tgt_id = filter_input(INPUT_POST, 'tgt-id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + if (is_numeric($tgt_id) && $tgt_id > 0) { + $db->help->select("target", ['notes'], [ + [ + 'field' => 'id', + 'op' => '=', + 'value' => $tgt_id + ] + ]); + $row = $db->help->execute(); + if (is_array($row) && count($row) && isset($row['notes'])) { + print header(JSON) . json_encode(['notes' => $row['notes']]); + } + } +} +elseif ($action == 'save-target-notes') { + $tgt_id = filter_input(INPUT_POST, 'tgt-id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + $notes = filter_input(INPUT_POST, 'notes', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); + if (is_numeric($tgt_id) && $tgt_id > 0) { + $db->help->update("target", [ + 'notes' => htmlentities($notes) + ], [ + [ + 'field' => 'id', + 'op' => '=', + 'value' => $tgt_id + ] + ]); + if ($db->help->execute()) { + print header(JSON) . json_encode(['success' => 'Updated target notes']); + } + else { + print header(JSON) . json_encode(['error' => $db->help->c->error]); + } + } +} +elseif ($action == 'get-load-status') { + $set = $db->get_Settings([ + 'cpe-count', 'cpe-dl-progress', 'cpe-progress', + 'cve-count', 'cve-dl-progress', 'cve-progress', + 'nvd-cve-count', 'nvd-cve-dl-progress', 'nvd-cve-progress', 'nvd-year', + 'stig-count', 'stig-dl-progress', 'stig-progress', + 'nasl-count', 'nasl-dl-progress', 'nasl-progress' + ]); + print json_encode($set); +} +elseif ($action == 'delete-scan') { + $scan_id = filter_input(INPUT_POST, 'scan-id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + $del_tgts = (bool) filter_input(INPUT_POST, 'delete-targets', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); + if ($scan_id) { + if ($db->delete_Scan($ste, $scan_id, $del_tgts)) { + print json_encode(['success' => 'Deleted Scan']); + } + else { + print json_encode(['error' => 'Error deleting scan']); + } + } +} + +function update_tgt_notes() +{ + global $db; + $notes = str_replace(" ", "", filter_input(INPUT_POST, 'notes', FILTER_SANITIZE_STRING)); + $tgt = filter_input(INPUT_POST, 'tgt', FILTER_VALIDATE_INT); + + $db->help->update("sagacity.target", array( + 'notes' => $notes + ), array( + array( + 'field' => 'id', + 'op' => '=', + 'value' => $tgt + ) + )); + + if (!$db->help->execute()) { + return "failure"; + } + else { + return "success"; + } +} + +function chk_filter() +{ + global $db; + $tgt_id = filter_input(INPUT_POST, 'tgt_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + $filter = filter_input(INPUT_POST, 'filter', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); + $hide_old = (boolean) filter_input(INPUT_POST, 'hide_old', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); + + $ret = array(); + $db->help->create_table("c", true, $db->help->select("sagacity.checklist", null, array(), array( + 'order' => '`ver` DESC, CONVERT(`release`, DECIMAL(4,2)) DESC' + ))); + if (!$db->help->execute()) { + return $ret; + } + $where = array(); + $flags = array(); + + if (!empty($filter)) { + $where = array( + array( + 'field' => 'c.name', + 'op' => LIKE, + 'value' => "'%{$filter}%'" + ) + ); + } + + if (!empty($tgt_id)) { + $where[] = array( + 'field' => 'tc.chk_id', + 'op' => IS, + 'value' => null, + 'sql_op' => 'AND' + ); + $flags['table_joins'] = array( + "LEFT JOIN sagacity.target_checklist tc ON tc.chk_id = c.id AND tc.tgt_id = $tgt_id" + ); + $flags['order'] = 'c.name'; + } + if ($hide_old) { + $flags['group'] = 'c.name, c.type, c.id'; + } + + $db->help->select("c", array('c.id'), $where, $flags); + + $rows = $db->help->execute(); + if (is_array($rows) && count($rows) && isset($rows['id'])) { + $rows = array(0 => $rows); + } + + if (is_array($rows) && count($rows) && isset($rows[0])) { + foreach ($rows as $row) { + $chk = $db->get_Checklist($row['id']); + if (is_array($chk) && count($chk) && isset($chk[0]) && is_a($chk[0], 'checklist')) { + $ret[] = $chk[0]; + } + } + } + + return json_encode($ret); +} + +function sw_filter($is_os = false) +{ + global $db; + $ret = []; + $filter = "'%" . filter_input(INPUT_POST, 'filter', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE) . "%'"; + $tgt_id = filter_input(INPUT_POST, 'tgt_id', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + + $db->help->select("sagacity.software s", ['s.id', 's.cpe', 's.sw_string'], [ + [ + 'field' => 's.cpe', + 'op' => LIKE, + 'value' => $filter, + 'open-paren' => true + ], + [ + 'field' => 's.sw_string', + 'op' => LIKE, + 'value' => $filter, + 'sql_op' => 'OR' + ], + [ + 'field' => 's.short_sw_string', + 'op' => LIKE, + 'value' => $filter, + 'sql_op' => 'OR', + 'close-paren' => true + ], + [ + 'field' => 'ts.sft_id', + 'op' => IS, + 'value' => null, + 'sql_op' => 'AND' + ], + [ + 'field' => 's.cpe', + 'op' => LIKE, + 'value' => ($is_os ? "'%/o%'" : "'%/a%'"), + 'sql_op' => 'AND' + ] + ], [ + 'table_joins' => [ + "LEFT JOIN `sagacity`.`target_software` ts ON ts.`sft_id` = s.`id`" . ($tgt_id ? " AND ts.`tgt_id` = $tgt_id" : "") + ], + 'order' => 's.cpe', + 'limit' => 25 + ]); + + $sw = $db->help->execute(); + + if (is_array($sw) && count($sw) && isset($sw['id'])) { + $sw = [0 => $sw]; + } + + if (is_array($sw) && count($sw) && isset($sw[0])) { + foreach ($sw as $row) { + $ret[] = [ + 'sw_id' => $row['id'], + 'cpe' => $row['cpe'], + 'sw_string' => $row['sw_string'] + ]; + } + } + + return header(JSON) . json_encode($ret); +} + +function update_proc_status() +{ + global $conn, $ste; + $control_id = str_replace("_", "-", substr(param('control'), 0, -7)); + if (preg_match("/[A-Z]{4}\-\d\-\d/", $control_id)) { + $proc_id = $control_id; + $sql = "SELECT `ctrl_id` " . + "FROM `sagacity`.`proc_findings` " . + "WHERE " . + "`ste_id`=" . $conn->real_escape_string($ste) . " AND " . + "`proc_id`='" . $conn->real_escape_string($control_id) . "'"; + if ($res = $conn->query($sql)) { + if ($res->num_rows) { + $row = $res->fetch_array(MYSQLI_ASSOC); + + $sql = "UPDATE `sagacity`.`proc_findings` " . + "SET `status`='" . $conn->real_escape_string($_REQUEST['status']) . " " . + "WHERE `ste_id`=" . $conn->real_escape_string($ste) . " AND " . + "`proc_id`='" . $conn->real_escape_string($row['ctrl_id']) . "'"; + } + else { + $sql = "INSERT INTO `sagacity`.`proc_findings` (`ste_id`,`ctrl_id`,`proc_id`,`status`) VALUES (" . + $_REQUEST['ste'] . "," . + "'" . $conn->real_escape_string(substr($proc_id, 0, 6)) . "'" . + "'" . $conn->real_escape_string($proc_id) . "'" . + "'" . $conn->real_escape_string($_REQUEST['status']) . "')"; + } + + if (!$conn->real_query($sql)) { + error_log($conn->error); + Sagacity_Error::sql_handler($sql); + } + } + } + else { + $sql = "SELECT `sub_control_id` FROM `sagacity`.`proc_ia_sub_controls` WHERE `parent_control_id`=?"; + + $sub_ctrls = db_helper::selectrow_array($conn, db_helper::mysql_escape_string($conn, $sql, $control_id)); + + foreach ($sub_ctrl as $proc_id) { + $sql = "SELECT COUNT(1) FROM `sagacity`.`proc_findings` WHERE `ste_id`=? AND `proc_id`=?"; + $sql = db_helper::mysql_escape_string($conn, $sql, $_REQUEST['ste'], $proc_id); + list($cnt) = db_helper::selectrow_array($conn, $sql); + if ($cnt) { + db_helper::run($conn, "UPDATE `sagacity`.`proc_findings` SET `status`=? WHERE `ste_id`=? AND `proc_id`=?", $_REQUEST['status'], $_REQUEST['ste'], $proc_id); + } + else { + db_helper::run($conn, "INSERT INTO `sagacity`.`proc_findings` (`ste_id`,`ctrl_id`,`proc_id`,`status`) VALUES (?,?,?,?)", $_REQUEST['ste'], $control_id, $proc_id, $_REQUEST['status']); + } + } + } +} + +function update_proc_notes() +{ + $control_id = $field = $_REQUEST['control']; + $match = array(); + if (preg_match("/([A-Z]{4}\_\d\_\d)/", $control_id, $match)) { + $control_id = str_replace("_", "-", $match[1]); + + $sql = "SELECT COUNT(1) FROM `sagacity`.`proc_findings` WHERE `ste_id`=? AND `proc_id`=?"; + + switch ($field) { + case (preg_match("/_test_result/", $field) ? true : false): + $field = "`test_results`"; + break; + case (preg_match("/_mit/", $field) ? true : false): + $field = "`mitigations`"; + break; + case (preg_match("/_milestone/", $field) ? true : false): + $field = "`milestones`"; + break; + case (preg_match("/_ref/", $field) ? true : false): + $field = "`ref`"; + break; + case (preg_match("/_notes/", $field) ? true : false): + $field = "`notes`"; + break; + default: + $field = ""; + } + + list($cnt) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste'], $control_id); + if ($cnt) { + $sql = "UPDATE `sagacity`.`proc_findings` SET=? WHERE `ste_id`=? AND `proc_id`=?"; + + db_helper::run($conn, $sql, $_REQUEST['notes'], $_REQUEST['ste'], $control_id); + } + else { + $sql = "INSERT INTO `sagacity`.`proc_findings` (`ste_id`,`ctrl_id`,`proc_id`,`status`,$field) VALUES (?,?,?,?,?)"; + + db_helper::run($conn, $sql, $_REQUEST['ste'], substr($control_id, 0, 6), $control_id, "Not Reviewed", $_REQUEST['notes']); + } + } + elseif (preg_match("/([A-Z]{4}\_\d)/", $control_id, $match)) { + $control_id = str_replace("_", "-", $match[1]); + + $sql = "SELECT COUNT(1) FROM `sagacity`.`control_findings` WHERE `ste_id`=? AND `control_id`=?"; + list($cnt) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste'], $control_id); + + switch ($field) { + case (preg_match("/_vul_desc/", $field) ? true : false): + $field = "`vul_desc`"; + break; + case (preg_match("/_mit/", $field) ? true : false): + $field = "`mitigations`"; + break; + case (preg_match("/_ref/", $field) ? true : false): + $field = "`ref`"; + break; + case (preg_match("/_notes/", $field) ? true : false): + $field = "`notes`"; + break; + default: + $field = ""; + } + + if ($cnt) { + $sql = "UPDATE `sagacity`.`control_findings` SET $field=? WHERE `ste_id`=? AND `control_id`=?"; + + db_helper::run($conn, $sql, $_REQUEST['notes'], $_REQUEST['ste'], $control_id); + } + else { + $sql = "INSERT INTO `sagacity`.`control_findings` (`control_id`,`ste_id`,$field,`risk_status`) " . + "VALUES (?,?,?,(SELECT LOWER(`impact`) FROM `sagacity`.`proc_ia_controls` WHERE `control_id`=?))"; + + db_helper::run($conn, $sql, $control_id, $_REQUEST['ste'], $_REQUEST['notes'], $control_id); + } + } + + return true; +} + +function refresh_counts() +{ + $ret = ''; + $sql = "SELECT `id`,`name` FROM `ste_cat` WHERE `ste_id`=?"; + + $cats = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id']); + + foreach ($cats as $key => $cat) { + $sql2 = "SELECT (SELECT COUNT(1) " . + "FROM `sagacity`.`target` t " . + "LEFT JOIN `target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "WHERE t.`cat_id`=? AND " . + "fs.`status`='Open' AND " . + "f.`cat`=?) + " . + "(SELECT COUNT(1) AS 'total' " . + "FROM `checklist` c " . + "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "JOIN `target` t ON t.`id`=f.`tgt_id` " . + "WHERE t.`cat_id`=? AND " . + "c.`name`='Orphan' AND " . + "fs.`status`='Open' AND " . + "f.`cat`=?) AS 'sum_total'"; + + list($open_cat_1) = db_helper::selectrow_array($conn, $sql2, $row['id'], '1', $row['id'], '1'); + list($open_cat_2) = db_helper::selectrow_array($conn, $sql2, $row['id'], '2', $row['id'], '2'); + list($open_cat_3) = db_helper::selectrow_array($conn, $sql2, $row['id'], '3', $row['id'], '3'); + + $sql2 = "SELECT (SELECT COUNT(1) " . + "FROM `target` t " . + "LEFT JOIN `target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "WHERE t.`cat_id`=? AND " . + "(fs.`status`='Not Reviewed' OR fs.`status` IS NULL)) + " . + "(SELECT COUNT(1) AS 'total' " . + "FROM `checklist` c " . + "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "JOIN `target` t ON t.`id`=f.`tgt_id` " . + "WHERE t.`cat_id`=? AND " . + "c.`name`='Orphan' AND " . + "(fs.`status`='Not Reviewed' OR fs.`status` IS NULL)) AS 'sum_total'"; + + list($not_reviewed) = db_helper::selectrow_array($conn, $sql2, $row['id'], $row['id']); + + $sql2 = "SELECT (SELECT COUNT(1) " . + "FROM `target` t " . + "LEFT JOIN `target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "WHERE t.`cat_id`=? AND " . + "fs.`status`='Exception') + " . + "(SELECT COUNT(1) AS 'total' " . + "FROM `checklist` c " . + "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "JOIN `target` t ON t.`id`=f.`tgt_id` " . + "WHERE t.`cat_id`=? AND " . + "c.`name`='Orphan' AND " . + "fs.`status`='Exception') AS 'sum_total'"; + + list($exception) = db_helper::selectrow_array($conn, $sql2, $row['id'], $row['id']); + + $sql2 = "SELECT (SELECT COUNT(1) " . + "FROM `target` t " . + "LEFT JOIN `target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "WHERE t.`cat_id`=? AND " . + "fs.`status`='False Positive') + " . + "(SELECT COUNT(1) AS 'total' " . + "FROM `checklist` c " . + "LEFT JOIN `pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "JOIN `target` t ON t.`id`=f.`tgt_id` " . + "WHERE t.`cat_id`=? AND " . + "c.`name`='Orphan' AND " . + "fs.`status`='False Positive') AS 'sum_total'"; + + list($false_positive) = db_helper::selectrow_array($conn, $sql2, $row['id'], $row['id']); + + $row['name'] = str_replace(array(".", "-", " "), "", $row['name']); + + $ret .= ""; + } + + return $ret; +} + +function update_finding_status() +{ + global $conn; + $sql = "UPDATE `findings` SET " . + "`findings_status_id`=? " . + "WHERE " . + "`tgt_id`=? AND `pdi_id`=?"; + + db_helper::run($conn, $sql, $_REQUEST['status'], $_REQUEST['host_id'], $_REQUEST['pdi_id']); + + return true; +} + +function update_finding_ia_controls() +{ + $controls = explode(" ", $_REQUEST['ia_controls']); + $host_ids = explode(",", $_REQUEST['host_id']); + + return true; +} + +function update_finding_notes() +{ + global $conn; + $host_ids = explode(",", $_REQUEST['host_id']); + + $sql = "UPDATE `sagacity`.`findings` SET " . + "`notes`=? " . + "WHERE " . + "`tgt_id` IN (" . implode(",", $host_ids) . ") AND `pdi_id`=?"; + + db_helper::run($conn, $sql, $_REQUEST['notes'], $_REQUEST['pdi_id']); + + return true; +} + +/** + * Function to update the result script parsing status + * + * @global db $db + * @global int $ste + * + * @return array + */ +function update_script_status() +{ + global $db, $ste; + $ret = []; + + $type = filter_input(INPUT_POST, 'type', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); + $status = filter_input(INPUT_POST, 'status', FILTER_SANITIZE_STRING, FILTER_NULL_ON_FAILURE); + + if (!empty($type) && !empty($status)) { + $scans = $db->get_ScanData($ste, null, $status, $type); + } + elseif (!empty($type)) { + $scans = $db->get_ScanData($ste, null, null, $type); + } + elseif (!empty($status)) { + $scans = $db->get_ScanData($ste, null, $status); + } + else { + $scans = $db->get_ScanData($ste); + } + + foreach ($scans as $scan) { + $file_name = str_replace(["(", ")"], "", str_replace(" ", "_", $scan->get_File_Name())); + $diff = $scan->get_Last_Update()->diff($scan->get_Start_Time()); + + $ret[] = [ + "scan_id" => $scan->get_ID(), + "file_name" => $scan->get_File_Name(), + "id" => $file_name, + "file_date" => $scan->get_File_DateTime()->format("Y-m-d"), + "pid" => $scan->get_PID(), + "source" => $scan->get_Source()->get_Name(), + 'source_img' => $scan->get_Source()->get_Icon(), + "status" => $scan->get_Status(), + "perc_comp" => $scan->get_Percentage_Complete(), + "last_host" => $scan->get_Last_Host(), + "start_time" => $scan->get_Start_Time()->format("Y-m-d H:i:s"), + "update" => $scan->get_Last_Update()->format("Y-m-d H:i:s"), + "host_count" => $scan->get_Total_Host_Count(), + "error" => $scan->isScanError(), + "run_time" => $diff->format("%H:%I:%S") + ]; + } + + return json_encode(['success' => 1, 'results' => $ret]); +} + +/** + * + * @global mysqli $conn + * @global db $db + */ +function get_STE_details() +{ + global $conn, $db; + $ret = ''; + $open_high = $open_med = $open_low = $proc_na = $proc_c = $proc_total = $open_cat_1 = $open_cat_2 = $open_cat_3 = $tech_na = $tech_nf = $tech_total = 0; + + list($tech_total) = db_helper::selectrow_array($conn, "SELECT COUNT(1) FROM `sagacity`.`findings` f JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` WHERE t.`ste_id`=?", $_REQUEST['ste_id']); + list($proc_total) = db_helper::selectrow_array($conn, "SELECT COUNT(1) FROM `sagacity`.`proc_findings` WHERE `ste_id`=?", $_REQUEST['ste_id']); + + $sql = "SELECT COUNT(1) " . + "FROM `sagacity`.`proc_findings` pf " . + "JOIN `sagacity`.`control_findings` cf ON pf.`ctrl_id`=cf.`control_id` " . + "WHERE pf.`ste_id`=? " . + "AND pf.`status`=? " . + "AND cf.`risk_status`=? " + ; + + list($open_high) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Non-Compliant', 'high'); + list($open_med) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Non-Compliant', 'medium'); + list($open_low) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Non-Compliant', 'low'); + + $sql = "SELECT COUNT(1) " . + "FROM `sagacity`.`proc_findings` pf " . + "JOIN `sagacity`.`control_findings` cf ON pf.`ctrl_id`=cf.`control_id` " . + "WHERE pf.`ste_id`=? " . + "AND pf.`status`=? " + ; + + list($proc_na) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Not Applicable'); + list($proc_c) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id'], 'Compliant'); + + $sql = "SELECT `ste`.`deviations`,`ste`.`recommendations`,`ste`.`residual_risk`," . + "`ste`.`conclusion`,`ste`.`risk_status`,sys.`mitigations`,sys.`executive_summary` " . + "FROM `sagacity`.`ste`,`sagacity`.`system` sys " . + "WHERE `ste`.`system_id`=sys.`id` AND " . + "`ste`.`id`=?"; + + list($dev, $rec, $res, $con, $status, $mit, $exec) = db_helper::selectrow_array($conn, $sql, $_REQUEST['ste_id']); + + $sql = "SELECT `id`,`name` FROM `sagacity`.`ste_cat` WHERE `ste_id`=?"; + + $cats = $db->get_STE_Cat_List($_REQUEST['ste_id']); + + foreach ($cats as $cat) { + $sql2 = "SELECT (SELECT COUNT(1) " . + "FROM `sagacity`.`target` t " . + "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "WHERE t.`cat_id`=? AND " . + "(fs.`status`='Open' OR fs.`status`='Exception') AND " . + "f.`cat`=?) + " . + "(SELECT COUNT(1) AS 'total' " . + "FROM `sagacity`.`checklist` c " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . + "WHERE t.`cat_id`=? AND " . + "c.`name`='Orphan' AND " . + "(fs.`status`='Open' OR fs.`status`='Exception') AND " . + "f.`cat`=?) AS 'sum_total'"; + + list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), '1', $cat->get_ID(), '1'); + $open_cat_1 += $tmp; + list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), '2', $cat->get_ID(), '2'); + $open_cat_2 += $tmp; + list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), '3', $cat->get_ID(), '3'); + $open_cat_3 += $tmp; + + $sql2 = "SELECT (SELECT COUNT(1) " . + "FROM `sagacity`.`target` t " . + "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "WHERE t.`cat_id`=? AND " . + "fs.`status`='Not Applicable') + " . + "(SELECT COUNT(1) AS 'total' " . + "FROM `sagacity`.`checklist` c " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . + "WHERE t.`cat_id`=? AND " . + "c.`name`='Orphan' AND " . + "fs.`status`='Not Applicable') AS 'sum_total'"; + + list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), $cat->get_ID()); + $tech_na += $tmp; + + $sql2 = "SELECT (SELECT COUNT(1) " . + "FROM `sagacity`.`target` t " . + "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "WHERE t.`cat_id`=? AND " . + "fs.`status`='Not a Finding') + " . + "(SELECT COUNT(1) AS 'total' " . + "FROM `sagacity`.`checklist` c " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . + "WHERE t.`cat_id`=? AND " . + "c.`name`='Orphan' AND " . + "fs.`status`='Not a Finding') AS 'sum_total'"; + + list($tmp) = db_helper::selectrow_array($conn, $sql2, $cat->get_ID(), $cat->get_ID()); + $tech_nf += $tmp; + } + +#'overall_mitigations,deviations,recommendations,residual_risk,conclusion,executive_summary' + $ret .= "
" . + "

Overall Mitigations

" . + "" . + "

Deviations

" . + "" . + "

Recommendations

" . + "" . + "Residual Risk Analysis  " . + "
" . + "" . + "

Conclusion

" . + "" . + "

Executive Summary

" . + "" . + "
" . + "
" . + "

Procedural ($proc_total)

" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "
HMLNAC
$open_high$open_med$open_low$proc_na$proc_c
" . sprintf("%i%%", ($open_high / $proc_total) * 100) . "" . sprintf("%i%%", ($open_med / $proc_total) * 100) . "" . sprintf("%i%%", ($open_low / $proc_total) * 100) . "" . sprintf("%i%%", ($proc_na / $proc_total) * 100) . "" . sprintf("%i%%", ($proc_c / $proc_total) * 100) . "
" . + "

Technical ($tech_total)

" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "
IIIIIINANF
$open_cat_1$open_cat_2$open_cat_3$tech_na$tech_nf
" . sprintf("%i%%", ($open_cat_1 / $tech_total) * 100) . "" . sprintf("%i%%", ($open_cat_2 / $tech_total) * 100) . "" . sprintf("%i%%", ($open_cat_3 / $tech_total) * 100) . "" . sprintf("%i%%", ($tech_na / $tech_total) * 100) . "" . sprintf("%i%%", ($tech_nf / $tech_total) * 100) . "
" . + "
"; +} + +function update_STE_details() +{ + global $conn; + if ($_REQUEST['id'] == 'deviations') { + $sql = "UPDATE `sagacity`.`ste` SET `deviations`=? WHERE `id`=?"; + } + elseif ($_REQUEST['id'] == 'recommendations') { + $sql = "UPDATE `sagacity`.`ste` SET `recommendations`=? WHERE `id`=?"; + } + elseif ($_REQUEST['id'] == 'residual_risk') { + $sql = "UPDATE `sagacity`.`ste` SET `residual_risk`=? WHERE `id`=?"; + } + elseif ($_REQUEST['id'] == 'conclusion') { + $sql = "UPDATE `sagacity`.`ste` SET `conclusion`=? WHERE `id`=?"; + } + elseif ($_REQUEST['id'] == 'overall_mitigations') { + $sql = "UPDATE `sagacity`.`system` JOIN `sagacity`.`ste` ON `ste`.`system_id`=`system`.`id` SET `mitigations`=? WHERE `ste`.`id`=?"; + } + elseif ($_REQUEST['id'] == 'executive_summary') { + $sql = "UPDATE `sagacity`.`system` JOIN `sagacity`.`ste` ON `ste`.`system_id`=`system`.`id` SET `executive_summary`=? WHERE `ste`.`id`=?"; + } + + db_helper::run($conn, $sql, $_REQUEST['text'], $_REQUEST['ste_id']); +} + +function get_control_details() +{ + global $conn, $db; + $ret = ''; + + $sql = "SELECT " . + "pc.`control_id`,pc.`name`,pc.`description`,pc.`impact`," . + "cf.`vul_desc`,cf.`mitigations`,cf.`risk_analysis`,cf.`risk_status`,cf.`done` " . + "FROM `sagacity`.`proc_ia_controls` pc " . + "LEFT JOIN `sagacity`.`control_findings` cf ON cf.`control_id`=pc.`control_id` " . + "WHERE pc.`control_id`=? AND cf.`ste_id`=?"; + + $ste = $db->get_STE($_REQUEST['ste'])[0]; + + $controls = $db->get_Proc_IA_Controls($ste, $_REQUEST['id'])[0]; + + $risk_analysis = $controls->finding->risk_analysis; + $ctrl_id = $controls->get_Control_ID(); + $impact = $controls->get_Impact(); + + $ret .= "
" . + $controls->get_Control_ID() . " - " . $controls->get_Name() . + "" . + "" . + " " . + "finding->done ? " checked" : "") . " id='done' value='1' onclick='javascript:toggle_control_completion();' />" . + "" . + "" . + ucfirst($controls->get_Worst_Status_String()) . + "" . + "" . + "
" . + "
" . $controls->get_Description() . "
" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" + ; + + $sql = "SELECT " . + "psc.`sub_control_id`,psc.`name`,pf.`test_results`,pf.`mitigations`,pf.`status` " . + "FROM `sagacity`.`proc_ia_sub_controls` psc " . + "LEFT JOIN `sagacity`.`proc_findings` pf ON psc.`sub_control_id`=pf.`proc_id` " . + "WHERE pf.`ste_id`=? AND " . + "psc.`parent_control_id`=? AND " . + "(pf.`status`='Non-Compliant' OR pf.`status`='Not Applicable')" + ; + + if ($res = $conn->query($sql)) { + while ($row = $res->fetch_array(MYSQLI_ASSOC)) { + $status = str_replace(" ", "_", $row['status']); + $ret .= "" . + "" . + "" . + "" . + "" + ; + } + } + + $ret .= "
Procedure /
Validation Step
FindingsMitigations
" . $controls->get_Control_ID() . "
" . $controls->get_Name() . "
" . $controls->finding->vul_desc . "" . $controls->finding->mitigations . "
" . $row['sub_control_id'] . "  " . $row['status'] . "
" . $row['name'] . "
" . $row['test_results'] . "" . $row['mitigations'] . "
" . + "
" . + "" . $controls->get_Control_ID() . " - Risk Analysis  " . + "" . + "" . + "" . + "
" . + "
" . + "$ctrl_id - Technical Findings" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + ""; + + $cat_1 = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Open", 1); + $cat_2 = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Open", 2); + $cat_3 = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Open", 3); + + /* + $sql = "SELECT ". + "IFNULL((SELECT COUNT(1) ". + "FROM `sagacity`.`target` t ". + "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` ". + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` ". + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` ". + "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` ". + "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` ". + "WHERE ". + "(fs.`status`='Open' OR fs.`status`='Exception') AND ". + "f.`cat`=? AND ". + "fc.`ia_control`=? AND ". + "t.`ste_id`=? ". + "GROUP BY f.`pdi_id`". + "), 0)". + " + ". + "IFNULL((SELECT COUNT(1) ". + "FROM `sagacity`.`checklist` c ". + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` ". + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` ". + "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` ". + "LEFT JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` ". + "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` ". + "WHERE ". + "c.`name`='Orphan' AND ". + "(fs.`status`='Open' OR fs.`status`='Exception') AND ". + "f.`cat`=? AND ". + "fc.`ia_control`=? AND ". + "t.`ste_id`=? ". + "GROUP BY f.`pdi_id`". + "), 0) AS 'sum_count'"; + + ($cat_1) = $dbh->selectrow_array($sql, undef, 1, param('id'), param('ste_id'), 1, param('id'), param('ste_id')); + ($cat_2) = $dbh->selectrow_array($sql, undef, 2, param('id'), param('ste_id'), 2, param('id'), param('ste_id')); + ($cat_3) = $dbh->selectrow_array($sql, undef, 3, param('id'), param('ste_id'), 3, param('id'), param('ste_id')); + */ + $sql = "SELECT " . + "IFNULL((SELECT COUNT(1) " . + "FROM `sagacity`.`target` t " . + "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . + "WHERE " . + "(fs.`status`='Open' OR fs.`status`='Exception') AND " . + "fc.`ia_control`=? AND " . + "t.`ste_id`=? " . + "), 0)" . + " + " . + "IFNULL((SELECT COUNT(1) " . + "FROM `sagacity`.`checklist` c " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "LEFT JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . + "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . + "WHERE " . + "c.`name`='Orphan' AND " . + "(fs.`status`='Open' OR fs.`status`='Exception') AND " . + "fc.`ia_control`=? AND " . + "t.`ste_id`=? " . + "), 0) AS 'sum_count'"; + + $unique = db_helper::selectrow_array($conn, $sql, $controls->get_Control_ID(), $_REQUEST['ste_id'], $controls->get_Control_ID(), $_REQUEST['ste_id']); + /* + $sql = "SELECT ". + "IFNULL((SELECT COUNT(1) ". + "FROM `sagacity`.`target` t ". + "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` ". + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` ". + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` ". + "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` ". + "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` ". + "WHERE ". + "fs.`status`=? AND ". + "fc.`ia_control`=? AND ". + "t.`ste_id`=? ". + "GROUP BY f.`pdi_id`". + "), 0)". + " + ". + "IFNULL((SELECT COUNT(1) ". + "FROM `sagacity`.`checklist` c ". + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` ". + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` ". + "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` ". + "LEFT JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` ". + "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` ". + "WHERE ". + "c.`name`='Orphan' AND ". + "fs.`status`=? AND ". + "fc.`ia_control`=? AND ". + "t.`ste_id`=? ". + "GROUP BY f.`pdi_id`". + "), 0) AS 'sum_count'"; + + ($na) = $dbh->selectrow_array($sql, undef, "Not Applicable", param('id'), param('ste_id'), "Not Applicable", param('id'), param('ste_id')); + ($nf) = $dbh->selectrow_array($sql, undef, "Not a Finding", param('id'), param('ste_id'), "Not a Finding", param('id'), param('ste_id')); + */ + $na = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Not Applicable"); + $nf = $db->get_Control_Finding_Count($controls, $_REQUEST['ste_id'], "Not a Finding"); + + $sql = "SELECT " . + "IFNULL((SELECT COUNT(1) " . + "FROM `sagacity`.`target` t " . + "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=tc.`chk_id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` AND t.`id` = f.`tgt_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . + "WHERE " . + "(fs.`status`='Open' OR fs.`status`='Exception') AND " . + "fc.`ia_control`=? AND " . + "t.`ste_id`=? " . + "GROUP BY f.`tgt_id`" . + "), 0)" . + " + " . + "IFNULL((SELECT COUNT(1) " . + "FROM `sagacity`.`checklist` c " . + "LEFT JOIN `sagacity`.`pdi_checklist_lookup` pcl ON pcl.`checklist_id`=c.`id` " . + "LEFT JOIN `sagacity`.`findings` f ON f.`pdi_id`=pcl.`pdi_id` " . + "LEFT JOIN `sagacity`.`findings_status` fs ON f.`findings_status_id`=fs.`id` " . + "LEFT JOIN `sagacity`.`target` t ON t.`id`=f.`tgt_id` " . + "LEFT JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . + "WHERE " . + "c.`name`='Orphan' AND " . + "(fs.`status`='Open' OR fs.`status`='Exception') AND " . + "fc.`ia_control`=? AND " . + "t.`ste_id`=? " . + "GROUP BY f.`tgt_id`" . + "), 0) AS 'sum_count'"; + + $host_count = db_helper::selectrow_array($conn, $sql, $controls->get_Control_ID(), $_REQUEST['ste_id'], $controls->get_Control_ID(), $_REQUEST['ste_id']); + + $ret .= "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + "" . + ""; + + $ret .= "
IIIIIINANFUniqueHostsTotal
$cat_1$cat_2$cat_3$na$nf" . $unique['sum_count'] . "" . $host_count['sum_count'] . "" . ($cat_1 + $cat_2 + $cat_3) . "
" . + "
" . + "
" . + "" . + "" . + "" . + "" . + "" . + "" + ; + + $sql = "SELECT " . + "f.`pdi_id`,s.`stig_id`,f.`cat`,pdi.`short_title`," . + "(SELECT GROUP_CONCAT(fc.`ia_control` SEPARATOR ' ') " . + "FROM `sagacity`.`finding_controls` fc " . + "WHERE " . + "fc.`finding_id`=f.`id` " . + ") AS ia_controls " . + "FROM `sagacity`.`findings` f " . + "JOIN `sagacity`.`findings_status` fs ON fs.`id`=f.`findings_status_id` " . + "JOIN `sagacity`.`stigs` s ON s.`pdi_id`=f.`pdi_id` " . + "JOIN `sagacity`.`pdi_catalog` pdi ON pdi.`id`=f.`pdi_id` " . + "WHERE (fs.`status`='Open' OR fs.`status`='Exception') " . + "GROUP BY f.`pdi_id` " . + "HAVING ia_controls LIKE '%" . $_REQUEST['id'] . "%' " . + "ORDER BY s.`stig_id`" + ; + + if ($res = $conn->query($sql)) { + while ($row = $res->fetch_assoc()) { + $cat = str_repeat("I", $row['cat']); + $ias = explode(" ", $row['ia_controls']); + $ia_cnt = (is_array($ias) ? count($ias) : 0); + $stig = str_replace(".", "", $row['stig_id']); + + $sql2 = "SELECT " . + "GROUP_CONCAT(DISTINCT f.`id` SEPARATOR ',') AS 'finding_ids'," . + "GROUP_CONCAT(DISTINCT t.`name` SEPARATOR ', ') AS 'affected_hosts',f.`notes` " . + "FROM `sagacity`.`target` t " . + "JOIN `sagacity`.`findings` f ON f.`tgt_id`=t.`id` " . + "JOIN `sagacity`.`finding_controls` fc ON fc.`finding_id`=f.`id` " . + "WHERE t.`ste_id`=? AND f.`pdi_id`=?"; + + $row = db_helper::selectrow_array($conn, $sql2, $_REQUEST['ste_id'], $row['pdi_id'])[0]; + $ids = $row['finding_ids']; + $hosts = $row['affected_hosts']; + $notes = $row['notes']; + + $ret .= "" . + "" . + "" . + "" . + "" . + "" . + "" . + ""; + } + } + + + $ret .= "
STIG ID" . + "Cat" . + "M" . + "Vulnerability Title" . + "Affected Hosts" . + "Notes
(inc.)" . + "
" . $row['stig_id'] . "$cat" . + ($ia_cnt > 1 ? "" : "") . + "" . + "" . $row['short_title'] . "$hosts$notes
"; + + return $ret; +} + +function update_risk_status() +{ + global $conn; + $sql = "UPDATE `sagacity`.`control_findings` SET `risk_status`=? WHERE `ste_id`=? AND `control_id`=?"; + db_helper::run($conn, $sql, strtolower($_REQUEST['status']), $_REQUEST['ste_id'], $_REQUEST['ctrl_id']); +} + +function update_risk_analysis() +{ + global $conn; + $sql = "UPDATE `sagacity`.`control_findings` SET `risk_analysis`=? WHERE `control_id`=? AND `ste_id`=?"; + db_helper::run($conn, $sql, $_REQUEST['text'], $_REQUEST['ctrl_id'], $_REQUEST['ste_id']); +} + +function update_control_completion() +{ + global $conn; + $sql = "UPDATE `sagacity`.`control_findings` SET `done`=IF(`done`=1,0,1) WHERE `control_id`=? AND `ste_id`=?"; + db_helper::run($conn, $sql, $_REQUEST['ctrl_id'], $_REQUEST['ste_id']); +} + +function update_stig_control() +{ + global $conn; + $sql = "DELETE FROM `sagacity`.`finding_controls` WHERE `finding_id` IN (" . $_REQUEST['ids'] . ")"; + $conn->real_query($sql); + + $sql = "INSERT INTO `sagacity`.`finding_controls` (`finding_id`,`ia_control`) VALUES "; + $ids = explode(",", $_REQUEST['ids']); + for ($x = 0; $x < count($ids); $x++) { + $sql .= "(" . $ids[$x] . ",'" . $_REQUEST['ctrl_id'] . "'),"; + } + $sql = substr($sql, 0, -1); + $conn->real_query($sql); +} + +/** + * Function to get targets from the category + * + * @global db $db + * + * @param int $cat_id + * + * @return mixed + */ +function get_hosts($cat_id = null) +{ + global $db; + $ret = ['cat_id' => $cat_id]; + $ste_id = filter_input(INPUT_COOKIE, 'ste', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); + $tgts = []; + + if ($cat_id) { + $ste_cat = $db->get_Category($cat_id)[0]; + $tgts = $db->get_Target_By_Category($cat_id); + } + elseif (is_numeric($ste_id)) { + $tgts = $db->get_Unassigned_Targets($ste_id); + } + else { + return json_encode(['error' => "Invalid info"]); + } + + foreach ($tgts as $key => $tgt) { + $chks = $db->get_Target_Checklists($tgt->get_ID()); + if ($cat_id) { + $exp_scan_srcs = $db->get_Expected_Category_Sources($ste_cat); + } + else { + $exp_scan_srcs = null; + } + $scan_srcs = $db->get_Target_Scan_Sources($tgt, $exp_scan_srcs); + $icons = []; + $icon_str = ''; + $src_str = ''; + + foreach ($chks as $chk) { + if (!in_array($chk->get_Icon(), array_keys($icons))) { + $icons[$chk->get_Icon()]['icon'] = $chk->get_Icon(); + $icons[$chk->get_Icon()]['name'] = ''; + } + $icons[$chk->get_Icon()]['name'] .= "{$chk->get_Name()} V{$chk->get_Version()}R{$chk->get_Release()} ({$chk->get_type()})" . PHP_EOL; + } + + foreach ($icons as $icon => $data) { + $icon_str .= ""; + } + + foreach ($scan_srcs as $key => $src) { + $icon = $src['src']->get_Icon(); + if($src['scan_error']) { + $icon = strtolower($src['src']->get_Name()) . "-failed.png"; + } + + $src_str .= "get_Name()}"; + if (isset($src['count']) && $src['count']) { + $src_str .= " ({$src['count']})"; + } + $src_str .= "' class='checklist_image' />"; + } + + $ret['targets'][] = array_merge([ + 'id' => $tgt->get_ID(), + 'ste_id' => $tgt->get_STE_ID(), + 'name' => $tgt->get_Name(), + 'os' => $tgt->get_OS_String(), + 'location' => $tgt->get_Location(), + 'auto' => $tgt->get_Task_Status($tgt->get_Auto_Status_ID()), + 'man' => $tgt->get_Task_Status($tgt->get_Man_Status_ID()), + 'data' => $tgt->get_Task_Status($tgt->get_Data_Status_ID()), + 'fp' => $tgt->get_Task_Status($tgt->get_FP_Cat1_Status_ID()), + 'ip' => (count($tgt->interfaces) ? array_keys($tgt->interfaces)[0] : ''), + 'notes' => $tgt->getDisplayNotes(), + 'scans' => $src_str, + 'chk' => $icon_str, + 'nr' => $tgt->getNotReviewedCount(), + 'na' => $tgt->getNotApplicableCount(), + 'nf' => $tgt->getNotAFindingCount(), + 'cat_1' => $tgt->getCat1Count(), + 'cat_2' => $tgt->getCat2Count(), + 'cat_3' => $tgt->getCat3Count(), + 'comp' => $tgt->getCompliantPercent(), + 'assessed' => $tgt->getAssessedPercent() + ]); + } + + return json_encode($ret); +} + +function get_target_data() +{ + global $db; + + $tgt = $db->get_Target_Details($_REQUEST['ste_id'], $_REQUEST['tgt_id'])[0]; + + switch ($_REQUEST['type']) { + case 'netstat': + return $tgt->get_Netstat_Connections(); + case 'routes': + return $tgt->get_Routes(); + case 'firewall': + return $tgt->get_Firewall_Config(); + case 'shares': + return $tgt->get_Shares(); + case 'mounted': + return $tgt->get_Mounted(); + case 'process_list': + return $tgt->get_Process_List(); + case 'autorun': + return $tgt->get_Autorun(); + case 'services': + return $tgt->get_Services(); + case 'remote_registry': + return $tgt->get_Remote_Registry(); + case 'system': + return $tgt->get_System(); + case 'bios': + return $tgt->get_BIOS(); + case 'copyright': + return $tgt->get_Copyright(); + case 'missing_patches': + return $tgt->get_Missing_Patches(); + case 'user_list': + return $tgt->get_User_List(); + case 'disabled_accts': + return $tgt->get_Disabled_Accts(); + case 'stag_pwds': + return $tgt->get_Stag_Pwds(); + case 'never_logged_in': + return $tgt->get_Never_Logged_In(); + case 'pwds_never_expire': + return $tgt->get_Pwds_Never_Expire(); + } + + return null; +} + +function target_filter($ste_id, $criteria) +{ + global $db, $conn; + $where = array(); + $tgts = array(); + $idx = 0; + $like = false; + $ret = array(); + + $search = explode("\n", $criteria); + unset($search[count($search) - 1]); + + foreach ($search as $str) { + if (!$str) { + continue; + } + switch ($str) { + case (preg_match("/name /i", $str) ? true : false): + $where[] = "t.`name`"; + break; + case (preg_match("/sw /i", $str) ? true : false): + $where[] = "sw.`cpe`"; + break; + case (preg_match("/os /i", $str) ? true : false): + $where[] = "os.`cpe`"; + break; + case (preg_match("/auto status /i", $str) ? true : false): + $where[] = "`as`.`status`"; + break; + case (preg_match("/manual status /i", $str) ? true : false): + $where[] = "ms.`status`"; + break; + case (preg_match("/data gathering status /i", $str) ? true : false): + $where[] = "ds.`status`"; + break; + case (preg_match("/fp\/cat i status /i", $str) ? true : false): + $where[] = "fp.`status`"; + break; + case (preg_match("/category /i", $str) ? true : false): + $where[] = "t.`cat_id`"; + break; + case (preg_match("/open port /i", $str) ? true : false): + $where[] = "CONCAT(pps.`proto`,'/',pps.`port`)"; + break; + default: + continue 2; + } + + if (($pos = strpos($str, "!~")) !== false) { + $where[$idx] .= " NOT LIKE "; + $like = true; + } + elseif (($pos = strpos($str, "~=")) !== false) { + $where[$idx] .= " LIKE "; + $like = true; + } + elseif (($pos = strpos($str, "!=")) !== false) { + $where[$idx] .= " != "; + } + elseif (($pos = strpos($str, "=")) !== false) { + $where[$idx] .= " = "; + $pos--; + } + + $where[$idx] .= "'" . ($like ? "%" : "") . + $conn->real_escape_string(substr($str, $pos + 4, -1)) . + ($like ? "%" : "") . "'"; + + $idx++; + $like = false; + } + + $where_str = implode(" AND ", $where); + + $sql = "SELECT COUNT(DISTINCT(t.`id`)) as 'cnt' " . + "FROM `sagacity`.`target` t " . + "LEFT JOIN `sagacity`.`task_status` `as` ON t.`auto_status_id`=`as`.`id` " . + "LEFT JOIN `sagacity`.`task_status` ms ON t.`man_status_id`=ms.`id` " . + "LEFT JOIN `sagacity`.`task_status` ds ON t.`data_status_id`=ds.`id` " . + "LEFT JOIN `sagacity`.`task_status` fp ON t.`fp_cat1_status_id`=fp.`id` " . + "LEFT JOIN `sagacity`.`target_software` ts ON ts.`tgt_id`=t.`id` " . + "LEFT JOIN `sagacity`.`software` sw ON ts.`sft_id`=sw.`id` " . + "LEFT JOIN `sagacity`.`software` os ON t.`os_id`=os.`id` " . + "LEFT JOIN `sagacity`.`interfaces` i ON t.`id`=i.`tgt_id` " . + "LEFT JOIN `sagacity`.`pps_list` hp ON hp.`int_id`=i.`id` " . + "LEFT JOIN `sagacity`.`ports_proto_services` pps ON pps.`id`=hp.`pps_id` " . + "WHERE " . + $where_str + ; + $cnt = 0; + if ($res = $conn->query($sql)) { + $cnt = $res->fetch_array()[0]; + } + else { + error_log($conn->error); + Sagacity_Error::sql_handler($sql); + } + $ret['count'] = $cnt; + + $sql = "SELECT DISTINCT(t.`id`) " . + "FROM `sagacity`.`target` t " . + "LEFT JOIN `sagacity`.`task_status` `as` ON t.`auto_status_id`=`as`.`id` " . + "LEFT JOIN `sagacity`.`task_status` ms ON t.`man_status_id`=ms.`id` " . + "LEFT JOIN `sagacity`.`task_status` ds ON t.`data_status_id`=ds.`id` " . + "LEFT JOIN `sagacity`.`task_status` fp ON t.`fp_cat1_status_id`=fp.`id` " . + "LEFT JOIN `sagacity`.`target_software` ts ON ts.`tgt_id`=t.`id` " . + "LEFT JOIN `sagacity`.`software` sw ON ts.`sft_id`=sw.`id` " . + "LEFT JOIN `sagacity`.`software` os ON t.`os_id`=os.`id` " . + "LEFT JOIN `sagacity`.`interfaces` i ON t.`id`=i.`tgt_id` " . + "LEFT JOIN `sagacity`.`pps_list` hp ON hp.`int_id`=i.`id` " . + "LEFT JOIN `sagacity`.`ports_proto_services` pps ON pps.`id`=hp.`pps_id` " . + "WHERE " . + $where_str . " " . + ($_REQUEST['count'] != 'all' ? "LIMIT " . $_REQUEST['start_count'] . "," . $_REQUEST['count'] : "") + ; + + if ($res = $conn->query($sql)) { + while ($row = $res->fetch_assoc()) { + $tgts[] = $db->get_Target_Details($_REQUEST['ste'], $row['id'])[0]; + } + } + else { + error_log($conn->error); + Sagacity_Error::sql_handler($sql); + } + + foreach ($tgts as $tgt) { + $cat_id = $tgt->get_Cat_ID(); + $ste_cat = $db->get_Category($cat_id); + $chks = $db->get_Target_Checklists($tgt->get_ID()); + if (isset($cat_id)) { + $exp_scan_srcs = $db->get_Expected_Category_Sources($ste_cat); + } + else { + $exp_scan_srcs = null; + } + $scan_srcs = $db->get_Target_Scan_Sources($tgt, $exp_scan_srcs); + $icons = array(); + $icon_str = ''; + $src_str = ''; + + foreach ($chks as $chk) { + if (!in_array($chk->get_Icon(), array_keys($icons))) { + $icons[$chk->get_Icon()]['icon'] = $chk->get_Icon(); + $icons[$chk->get_Icon()]['name'] = ''; + } + $icons[$chk->get_Icon()]['name'] .= $chk->get_Name() . " V" . $chk->get_Version() . "R" . $chk->get_Release() . " (" . $chk->get_type() . ")" . PHP_EOL; + } + + foreach ($icons as $icon => $data) { + $icon_str .= ""; + } + + foreach ($scan_srcs as $src) { + $src_str .= "get_Icon() . "' title='" . $src['src']->get_Name(); + if (isset($src['count']) && $src['count']) { + $src_str .= " (" . $src['count'] . ")"; + } + $src_str .= "' class='checklist_image' />"; + } + + $ret['targets'][] = array_merge($tgt->get_JSON(), array( + 'scans' => $src_str, + 'chk' => $icon_str + )); + } + + if (isset($ret['targets']) && is_array($ret['targets']) && count($ret['targets'])) { + return json_encode($ret); + } + else { + return json_encode(array('count' => 0)); + } +} + +function reference_filter($criteria) +{ + global $db, $conn; + $where = array(); + $ref = array(); + $idx = 0; + $ret = ''; + $like = false; + $odd = true; + + $sql = "SELECT * FROM `sagacity`.`pdi_catalog` pdi "; + + $query = array( + 'cce' => array( + 'sql' => "LEFT JOIN `sagacity`.`cce` ON cce.`pdi_id`=pdi.`id` ", + 'added' => false + ), + 'cve' => array( + 'sql' => "LEFT JOIN `sagacity`.`cve` ON cve.`pdi_id`=pdi.`id` " . + "LEFT JOIN `sagacity`.`cve_db` ON cve_db.`cve_id`=cve.`cve_id` " . + "LEFT JOIN `sagacity`.`cve_references` ref ON ref.`cve_seq`=cve_db.`cve_id` " . + "LEFT JOIN `sagacity`.`cve_web` web ON web.`cve_id`=cve_db.`cve_id` ", + 'added' => false, + ), + 'vms' => array( + 'sql' => "LEFT JOIN `sagacity`.`golddisk` gd ON gd.`pdi_id`=pdi.`id` ", + 'added' => false, + ), + 'iavm' => array( + 'sql' => "LEFT JOIN `sagacity`.`iavm_notices` iavm ON iavm.`pdi_id`=pdi.`id` ", + 'added' => false, + ) + ); + + $xml = new DOMDocument(); + $xml->appendChild($root = xml_helper($xml, "root")); + + $search = explode("\n", $criteria); + unset($search[count($search) - 1]); + + foreach ($search as $str) { + switch ($str) { + case (preg_match("/cce /i", $str) ? true : false): + if (!$query['cce']['added']) { + $sql .= $query['cce']['sql']; + } + $query['cce']['added'] = true; + $where[] = ""; + break; + case (preg_match("/cpe /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/cve /i", $str) ? true : false): + if (!$query['cve']['added']) { + $sql .= $query['cve']['sql']; + } + $query['cve']['added'] = true; + $where[] = ""; + break; + case (preg_match("/ia control /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/iavm /i", $str) ? true : false): + if (!$query['iavm']['added']) { + $sql .= $query['iavm']['sql']; + } + $query['iavm']['added'] = true; + $where[] = ""; + break; + case (preg_match("/nessus plugin id /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/oval /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/reference /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/stig id /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/sv rule /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/vms id /i", $str) ? true : false): + if (!$query['vms']['added']) { + $sql .= $query['vms']['sql']; + } + $query['vms']['added'] = true; + $where[] = ""; + break; + case (preg_match("/vendor advisory /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/check contents /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/short title /i", $str) ? true : false): + $where[] = ""; + break; + case (preg_match("/description /i", $str) ? true : false): + $where[] = ""; + break; + default: + continue 2; + } + + if (($pos = strpos($str, "!~")) !== false) { + $where[$idx] .= " NOT LIKE "; + $like = true; + } + elseif (($pos = strpos($str, "~=")) !== false) { + $where[$idx] .= " LIKE "; + $like = true; + } + elseif (($pos = strpos($str, "!=")) !== false) { + $where[$idx] .= " != "; + } + elseif (($pos = strpos($str, "=")) !== false) { + $where[$idx] .= " = "; + $pos--; + } + + $where[$idx] .= "'" . ($like ? "%" : "") . + $conn->real_escape_string(substr($str, $pos + 4, -1)) . + ($like ? "%" : "") . "'"; + + $idx++; + $like = false; + } + + $where_str = implode(" AND ", $where); + + $sql = "SELECT COUNT(t.`id`) as 'cnt' " . + "WHERE " . + $where_str; + + $cnt = 0; + if ($res = $conn->query($sql)) { + $cnt = $res->fetch_array()[0]; + } + else { + error_log($conn->error); + Sagacity_Error::sql_handler($sql); + } + $root->setAttribute('count', $cnt); + + $sql = "SELECT t.`id` " . + " " . + "WHERE " . + $where_str . " " . + ($_REQUEST['count'] != 'all' ? "LIMIT " . $_REQUEST['start_count'] . "," . $_REQUEST['count'] : "") + ; + + if ($res = $conn->query($sql)) { + while ($row = $res->fetch_assoc()) { + + } + } + else { + error_log($conn->error); + Sagacity_Error::sql_handler($sql); + } + + return $xml->saveXML(); +} + +function scan_filter($ste_id, $criteria) +{ + +} + +function finding_filter($ste_id, $criteria) +{ + +} + +function get_saved_filter($type, $filter_name) +{ + global $db; + $filter = $db->get_Filters($type, $filter_name); + $ret = array(); + + if (is_array($filter) && count($filter)) { + $filter = $filter[0]; + foreach (explode("\n", $filter['criteria']) as $cri) { + if ($cri) + $ret[] = $cri; + } + } + + return json_encode($ret); +} + +function update_target_field($field, $data) +{ + global $db, $conn; + + $sql = "UPDATE `sagacity`.`target` t " . + "LEFT JOIN `sagacity`.`target_software` ts ON t.`id`=ts.`tgt_id` " . + "LEFT JOIN `sagacity`.`target_checklist` tc ON t.`id`=tc.`tgt_id` " . + "LEFT JOIN `sagacity`.`target_net_meta` tnm ON t.`id`=tnm.`tgt_id` " . + "LEFT JOIN `sagacity`.`target_sys_meta` tsm ON t.`id`=tsm.`tgt_id` " . + "LEFT JOIN `sagacity`.`target_user_meta` tum ON t.`id`=tum.`tgt_id` " . + "SET "; + + switch ($field) { + case 'name': + $sql .= "t.`name`='" . $conn->real_escape_string($data) . "'"; + break; + case 'location': + $sql .= "t.`location`='" . $conn->real_escape_string($data) . "'"; + break; + case 'wmi_pid': + $sql .= "tsm.`wmi_listening_pid`='" . $conn->real_escape_string($data) . "'"; + break; + case 'last_login': + $sql .= "tum.`last_login`='" . $conn->real_escape_string($data) . "'"; + break; + case 'login': + $sql .= "tum.`login`='" . $conn->real_escape_string($data) . "'"; + break; + case 'notes': + $sql .= "t.`notes`='" . $conn->real_escape_string($data) . "'"; + break; + case 'auto_status': + $sql .= "t.`auto_status_id`='" . $conn->real_escape_string($data) . "'"; + break; + case 'man_status': + $sql .= "t.`man_status_id`='" . $conn->real_escape_string($data) . "'"; + break; + case 'data_status': + $sql .= "t.`data_status_id`='" . $conn->real_escape_string($data) . "'"; + break; + case 'fp-cat1_status': + $sql .= "t.`fp_cat1_status_id`='" . $conn->real_escape_string($data) . "'"; + break; + case 'vm': + $sql .= "tsm.`is_vm`='" . $conn->real_escape_string($data) . "'"; + break; + case 'pp_on': + $sql .= "t.`pp_off`=" . ($data == '1' ? '0' : '1'); + break; + case 'netstat_data': + $sql .= "tnm.`netstat_connections`='" . $conn->real_escape_string($data) . "'"; + break; + case 'routes_data': + $sql .= "tnm.`routes`='" . $conn->real_escape_string($data) . "'"; + break; + case 'shares_data': + $sql .= "tnm.`shares`='" . $conn->real_escape_string($data) . "'"; + break; + case 'firewall_data': + $sql .= "tnm.`firewall_config`='" . $conn->real_escape_string($data) . "'"; + break; + case 'mounted_data': + $sql .= "tsm.`mounted`='" . $conn->real_escape_string($data) . "'"; + break; + case 'process_list_data': + $sql .= "tsm.`process_list`='" . $conn->real_escape_string($data) . "'"; + break; + case 'autorun_data': + $sql .= "tsm.`autorun`='" . $conn->real_escape_string($data) . "'"; + break; + case 'services_data': + $sql .= "tsm.`services`='" . $conn->real_escape_string($data) . "'"; + break; + case 'remote_registry_data': + $sql .= "tsm.`remote_registry`='" . $conn->real_escape_string($data) . "'"; + break; + case 'copyright_data': + $sql .= "tsm.`copyrighted`='" . $conn->real_escape_string($data) . "'"; + break; + case 'system_data': + $sql .= "tsm.`system`='" . $conn->real_escape_string($data) . "'"; + break; + case 'bios_data': + $sql .= "tsm.`bios`='" . $conn->real_escape_string($data) . "'"; + break; + case 'missing_patches_data': + $sql .= "t.`missing_patches`='" . $conn->real_escape_string($data) . "'"; + break; + case 'user_list_data': + $sql .= "tum.`user_list`='" . $conn->real_escape_string($data) . "'"; + break; + case 'disabled_accts_data': + $sql .= "tum.`disabled_accts`='" . $conn->real_escape_string($data) . "'"; + break; + case 'stag_pwds_data': + $sql .= "tum.`stag_pwds`='" . $conn->real_escape_string($data) . "'"; + break; + case 'never_logged_in_data': + $sql .= "tum.`never_logged_in`='" . $conn->real_escape_string($data) . "'"; + break; + case 'pwds_never_expire_data': + $sql .= "tum.`pwd_never_expires`='" . $conn->real_escape_string($data) . "'"; + break; + case '': + $sql .= "='" . $conn->real_escape_string($data) . "'"; + break; + } + + $sql .= " WHERE t.`id`=" . $conn->real_escape_string($_REQUEST['tgt_id']); + + if (!$conn->real_query($sql)) { + error_log($conn->error); + Sagacity_Error::sql_handler($sql); + + return 'false'; + } + + return 'true'; +} + +function get_category_details($cat_id) +{ + global $db; + $cat = $db->get_Category($cat_id); + if (is_array($cat) && count($cat) && isset($cat[0]) && is_a($cat[0], 'ste_cat')) { + $cat = $cat[0]; + } + else { + return 'no category found'; + } + + return json_encode([ + 'id' => $cat->get_ID(), + 'name' => $cat->get_Name(), + 'analyst' => $cat->get_Analyst(), + 'sources' => $cat->get_Sources() + ]); +} From d6b6fe159d1b400b40a1e3b789e2af1ca1b8d062 Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Tue, 21 Aug 2018 17:29:25 -0400 Subject: [PATCH 02/24] Fix to #4 --- exec/parse_excel_echecklist.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/exec/parse_excel_echecklist.php b/exec/parse_excel_echecklist.php index ed7c614..fe04da3 100644 --- a/exec/parse_excel_echecklist.php +++ b/exec/parse_excel_echecklist.php @@ -268,6 +268,7 @@ foreach ($objSS->getWorksheetIterator() as $wksht) { $new_findings = []; $updated_findings = []; + $row_count = 0; foreach ($wksht->getRowIterator(11) as $row) { $stig_id = $wksht->getCell("{$stig_col}{$row->getRowIndex()}")->getValue(); @@ -327,12 +328,21 @@ foreach ($objSS->getWorksheetIterator() as $wksht) { $x++; } + $row_count++; + + if($row_count % 100 == 0) { + if(!$db->add_Findings_By_Target($updated_findings, $new_findings)) { + die(print_r(debug_backtrace(), true)); + } else { + $updated_findings = []; + $new_findings = []; + } + } + + $db->update_Running_Scan($base_name, ['name' => 'perc_comp', 'value' => (($row->getRowIndex() - 10) / $row_count) * 100]); if (PHP_SAPI == 'cli') { print "\r" . sprintf("%.2f%%", (($row->getRowIndex() - 10) / $row_count) * 100); } - else { - $db->update_Running_Scan($base_name, ['name' => 'perc_comp', 'value' => (($row->getRowIndex() - 10) / $row_count) * 100]); - } } if (!$db->add_Findings_By_Target($updated_findings, $new_findings)) { From 9edd6c1c353b3f0cfda383089b861da658acf630 Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Tue, 28 Aug 2018 20:46:48 -0400 Subject: [PATCH 03/24] Fixes to bug #5 --- exec/background_stigs.php | 2 +- exec/installer.php | 10 ++++++++++ setup.php | 12 ++++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/exec/background_stigs.php b/exec/background_stigs.php index 03c3637..7d01cdb 100644 --- a/exec/background_stigs.php +++ b/exec/background_stigs.php @@ -155,7 +155,7 @@ foreach ($xml_files as $key => $file) { continue; } elseif(!empty(STIG_EXCLUSIONS) && preg_match("/" . STIG_EXCLUSIONS . "/i", $file)) { - unlink($file); + unlink(TMP . "/stigs/xml/$file"); $log->debug("Skipping $file due to matching STIG exclusion"); continue; } diff --git a/exec/installer.php b/exec/installer.php index 7e00965..22937ce 100644 --- a/exec/installer.php +++ b/exec/installer.php @@ -101,16 +101,26 @@ function save_Database($params) $php = null; $mysql = null; if (strtolower(substr(PHP_OS, 0, 3)) == 'lin') { + $res = []; + exec("which php", $res); if (file_exists('/bin/php')) { $php = realpath("/bin/php"); } + elseif (is_array($res) && isset($res[0]) && file_exists($res[0])) { + $php = realpath($res[0]); + } else { die(json_encode(['error' => 'Cannot find the PHP executable'])); } + $res = []; + exec("which mysql", $res); if (file_exists('/bin/mysql')) { $mysql = realpath('/bin/mysql'); } + elseif (is_array($res) && isset($res[0]) && file_exists($res[0])) { + $mysql = realpath($res[0]); + } else { die(json_encode(['error' => 'Cannot find the MySQL executable'])); } diff --git a/setup.php b/setup.php index febbbf6..e9a7a96 100644 --- a/setup.php +++ b/setup.php @@ -51,6 +51,14 @@ if (!is_writable(dirname(__FILE__) . "/config.inc")) { die("Sagacity needs write access to the config.inc file in the document root"); } +if(!is_writable(dirname(__FILE__) . "/inc")) { + die("Sagacity needs write access to the /inc directory to create the encrypted password file"); +} + +if(!file_exists(dirname(__FILE__) . "/logs")) { + mkdir(dirname(__FILE__) . "/logs"); +} + if (!function_exists('openssl_encrypt')) { print << @@ -596,14 +604,14 @@ EOL;
-
+
From d52454d1bb7acdb41bd7f1c85e469bddd5fd9098 Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Tue, 28 Aug 2018 21:27:13 -0400 Subject: [PATCH 04/24] Updates to 3rd party libraries Add Dockerfile and specific docker-php.ini --- .gitignore | 3 + CHANGELOG.md | 2 + Dockerfile | 6 + conf/docker-php.ini | 14 + config.inc | 5 +- inc/.gitignore | 1 + inc/composer.json | 41 +- inc/composer.lock | 452 ++- .../src/BackgroundProcess.php | 2 +- inc/vendor/composer/autoload_files.php | 43 +- inc/vendor/composer/autoload_psr4.php | 3 + inc/vendor/composer/autoload_real.php | 18 + inc/vendor/composer/autoload_static.php | 63 + inc/vendor/composer/installed.json | 201 +- inc/vendor/godsgood33/php-db/.gitattributes | 17 + inc/vendor/godsgood33/php-db/.gitignore | 4 + inc/vendor/godsgood33/php-db/.scrutinizer.yml | 26 + inc/vendor/godsgood33/php-db/LICENSE | 201 ++ inc/vendor/godsgood33/php-db/README.md | Bin 0 -> 7252 bytes inc/vendor/godsgood33/php-db/composer.json | 37 + inc/vendor/godsgood33/php-db/composer.lock | 1549 +++++++++ .../php-db/examples/create_table_json.json | 136 + inc/vendor/godsgood33/php-db/phpunit.xml | 16 + inc/vendor/godsgood33/php-db/src/DBConfig.php | 50 + inc/vendor/godsgood33/php-db/src/Database.php | 1896 ++++++++++ .../godsgood33/php-db/tests/DatabaseTest.php | 794 +++++ .../godsgood33/php-db/tests/TestClass.php | 24 + .../godsgood33/php-db/tests/TestClass2.php | 5 + .../godsgood33/php-db/tests/bootstrap.php | 3 + inc/vendor/markbaker/complex/README.md | 155 + .../markbaker/complex/classes/Autoloader.php | 53 + .../markbaker/complex/classes/Bootstrap.php | 38 + .../markbaker/complex/classes/src/Complex.php | 387 +++ .../complex/classes/src/Exception.php | 13 + .../complex/classes/src/functions/abs.php | 29 + .../complex/classes/src/functions/acos.php | 38 + .../complex/classes/src/functions/acosh.php | 34 + .../complex/classes/src/functions/acot.php | 25 + .../complex/classes/src/functions/acoth.php | 25 + .../complex/classes/src/functions/acsc.php | 29 + .../complex/classes/src/functions/acsch.php | 29 + .../classes/src/functions/argument.php | 28 + .../complex/classes/src/functions/asec.php | 29 + .../complex/classes/src/functions/asech.php | 29 + .../complex/classes/src/functions/asin.php | 37 + .../complex/classes/src/functions/asinh.php | 33 + .../complex/classes/src/functions/atan.php | 45 + .../complex/classes/src/functions/atanh.php | 38 + .../classes/src/functions/conjugate.php | 28 + .../complex/classes/src/functions/cos.php | 34 + .../complex/classes/src/functions/cosh.php | 32 + .../complex/classes/src/functions/cot.php | 29 + .../complex/classes/src/functions/coth.php | 24 + .../complex/classes/src/functions/csc.php | 29 + .../complex/classes/src/functions/csch.php | 29 + .../complex/classes/src/functions/exp.php | 34 + .../complex/classes/src/functions/inverse.php | 29 + .../complex/classes/src/functions/ln.php | 33 + .../complex/classes/src/functions/log10.php | 32 + .../complex/classes/src/functions/log2.php | 32 + .../classes/src/functions/negative.php | 31 + .../complex/classes/src/functions/pow.php | 40 + .../complex/classes/src/functions/rho.php | 28 + .../complex/classes/src/functions/sec.php | 25 + .../complex/classes/src/functions/sech.php | 25 + .../complex/classes/src/functions/sin.php | 32 + .../complex/classes/src/functions/sinh.php | 32 + .../complex/classes/src/functions/sqrt.php | 29 + .../complex/classes/src/functions/tan.php | 40 + .../complex/classes/src/functions/tanh.php | 35 + .../complex/classes/src/functions/theta.php | 38 + .../complex/classes/src/operations/add.php | 46 + .../classes/src/operations/divideby.php | 56 + .../classes/src/operations/divideinto.php | 56 + .../classes/src/operations/multiply.php | 48 + .../classes/src/operations/subtract.php | 46 + inc/vendor/markbaker/complex/composer.json | 77 + .../complex/examples/complexTest.php | 154 + .../complex/examples/testFunctions.php | 52 + .../complex/examples/testOperations.php | 34 + inc/vendor/markbaker/complex/license.md | 25 + inc/vendor/pacificsec/cpe/.gitignore | 5 + inc/vendor/pacificsec/cpe/README.md | 42 + inc/vendor/pacificsec/cpe/composer.json | 26 + .../cpe/src/Common/LogicalValue.php | 44 + .../pacificsec/cpe/src/Common/Utilities.php | 166 + .../cpe/src/Common/WellFormedName.php | 210 ++ .../cpe/src/Matching/CPENameMatcher.php | 287 ++ .../CPE => src}/Matching/Relation.php | 0 .../CPE => src}/Naming/CPENameBinder.php | 357 +- .../cpe/src/Naming/CPENameUnbinder.php | 466 +++ .../PacificSec/CPE/Common/LogicalValue.php | 42 - .../PacificSec/CPE/Common/Utilities.php | 167 - .../PacificSec/CPE/Common/WellFormedName.php | 210 -- .../CPE/Matching/CPENameMatcher.php | 287 -- .../PacificSec/CPE/Naming/CPENameUnbinder.php | 466 --- inc/vendor/phpoffice/phpspreadsheet/.sami.php | 24 + .../phpoffice/phpspreadsheet/.travis.yml | 21 +- .../phpoffice/phpspreadsheet/CHANGELOG.md | 89 + inc/vendor/phpoffice/phpspreadsheet/README.md | 4 +- .../phpoffice/phpspreadsheet/composer.json | 9 +- .../phpoffice/phpspreadsheet/composer.lock | 146 +- .../phpspreadsheet/docs/extra/extra.js | 57 - .../phpoffice/phpspreadsheet/docs/index.md | 2 + .../references/features-cross-reference.md | 18 + .../references/function-list-by-category.md | 46 +- .../docs/references/function-list-by-name.md | 47 +- .../docs/topics/accessing-cells.md | 6 +- .../phpspreadsheet/docs/topics/autofilters.md | 4 +- .../topics/reading-and-writing-to-file.md | 16 +- .../phpspreadsheet/docs/topics/recipes.md | 8 +- .../phpspreadsheet/docs/topics/worksheets.md | 4 +- .../phpoffice/phpspreadsheet/mkdocs.yml | 4 - .../Autofilter/10_Autofilter_selection_1.php | 2 +- .../Autofilter/10_Autofilter_selection_2.php | 2 +- .../10_Autofilter_selection_display.php | 2 +- .../Basic/08_Conditional_formatting.php | 2 +- .../Basic/08_Conditional_formatting_2.php | 2 +- .../Chart/32_Chart_read_write_HTML.php | 2 +- .../samples/Chart/32_Chart_read_write_PDF.php | 2 +- .../samples/Chart/33_Chart_create_area.php | 62 +- .../Chart/33_Chart_create_bar_stacked.php | 66 +- .../samples/Chart/33_Chart_create_column.php | 66 +- .../Chart/33_Chart_create_column_2.php | 66 +- .../Chart/33_Chart_create_composite.php | 98 +- .../samples/Chart/33_Chart_create_line.php | 62 +- .../Chart/33_Chart_create_multiple_charts.php | 128 +- .../samples/Chart/33_Chart_create_pie.php | 122 +- .../samples/Chart/33_Chart_create_radar.php | 66 +- .../samples/Chart/33_Chart_create_scatter.php | 50 +- .../samples/Chart/33_Chart_create_stock.php | 56 +- ...a_configurable_read_filter_(version_1).php | 2 +- ...a_configurable_read_filter_(version_2).php | 2 +- .../20_Reader_worksheet_hyperlink_image.php | 54 + .../Custom_properties.php | 10 +- .../samples/bootstrap/js/bootstrap.min.js | Bin 37051 -> 37045 bytes .../samples/bootstrap/js/jquery.min.js | Bin 86355 -> 86351 bytes .../samples/templates/chartSpreadsheet.php | 66 +- .../Calculation/Calculation.php | 187 +- .../PhpSpreadsheet/Calculation/DateTime.php | 57 +- .../Calculation/Engineering.php | 694 ++-- .../PhpSpreadsheet/Calculation/Financial.php | 108 +- .../PhpSpreadsheet/Calculation/Functions.php | 19 +- .../PhpSpreadsheet/Calculation/Logical.php | 149 +- .../PhpSpreadsheet/Calculation/LookupRef.php | 29 + .../PhpSpreadsheet/Calculation/MathTrig.php | 205 +- .../PhpSpreadsheet/Calculation/TextData.php | 92 + .../Calculation/functionlist.txt | 34 + .../src/PhpSpreadsheet/Cell/Coordinate.php | 126 +- .../src/PhpSpreadsheet/Cell/Hyperlink.php | 8 + .../src/PhpSpreadsheet/Chart/DataSeries.php | 2 +- .../src/PhpSpreadsheet/Helper/Html.php | 11 +- .../src/PhpSpreadsheet/Helper/Migrator.php | 54 +- .../src/PhpSpreadsheet/Reader/Csv.php | 41 +- .../src/PhpSpreadsheet/Reader/Html.php | 1 + .../src/PhpSpreadsheet/Reader/IReadFilter.php | 6 +- .../src/PhpSpreadsheet/Reader/Xlsx.php | 534 ++- .../src/PhpSpreadsheet/Reader/Xml.php | 2 +- .../src/PhpSpreadsheet/Shared/Date.php | 2 +- .../src/PhpSpreadsheet/Shared/JAMA/Matrix.php | 4 +- .../PhpSpreadsheet/Shared/Trend/BestFit.php | 48 +- .../Shared/Trend/PolynomialBestFit.php | 2 +- .../src/PhpSpreadsheet/Spreadsheet.php | 305 ++ .../src/PhpSpreadsheet/Style/NumberFormat.php | 2 +- .../src/PhpSpreadsheet/Style/Style.php | 3 + .../PhpSpreadsheet/Worksheet/AutoFilter.php | 2 +- .../PhpSpreadsheet/Worksheet/BaseDrawing.php | 28 +- .../PhpSpreadsheet/Worksheet/Worksheet.php | 28 +- .../PhpSpreadsheet/Writer/Xls/Worksheet.php | 2 +- .../src/PhpSpreadsheet/Writer/Xlsx.php | 32 +- .../Writer/Xlsx/ContentTypes.php | 21 +- .../PhpSpreadsheet/Writer/Xlsx/Drawing.php | 38 +- .../src/PhpSpreadsheet/Writer/Xlsx/Rels.php | 75 +- .../PhpSpreadsheet/Writer/Xlsx/Workbook.php | 17 +- .../PhpSpreadsheet/Writer/Xlsx/Worksheet.php | 54 +- .../Calculation/CalculationTest.php | 120 + .../Calculation/DateTimeTest.php | 487 +++ .../Calculation/EngineeringTest.php | 1009 ++++++ .../Calculation/FinancialTest.php | 613 ++++ .../Calculation/FunctionsTest.php | 385 ++ .../Calculation/LogicalTest.php | 123 + .../Calculation/LookupRefTest.php | 172 + .../Calculation/MathTrigTest.php | 881 +++++ .../Calculation/TextDataTest.php | 431 +++ .../Cell/AdvancedValueBinderTest.php | 79 + .../Cell/CoordinateTest.php | 367 ++ .../PhpSpreadsheetTests/Cell/DataTypeTest.php | 17 + .../Cell/DataValidationTest.php | 19 + .../Cell/DataValidatorTest.php | 73 + .../Cell/DefaultValueBinderTest.php | 86 + .../Cell/HyperlinkTest.php | 81 + .../Chart/DataSeriesValuesTest.php | 62 + .../PhpSpreadsheetTests/Chart/LayoutTest.php | 30 + .../PhpSpreadsheetTests/Chart/LegendTest.php | 127 + .../Collection/CellsTest.php | 117 + .../Custom/ComplexAssert.php | 82 + .../Functional/AbstractFunctional.php | 39 + .../Functional/ColumnWidthTest.php | 43 + .../Functional/CommentsTest.php | 44 + .../Functional/ConditionalStopIfTrueTest.php | 72 + .../Functional/DrawingImageHyperlinkTest.php | 42 + .../Functional/EnclosureTest.php | 37 + .../Functional/FreezePaneTest.php | 75 + .../Functional/HtmlCommentsTest.php | 63 + .../Functional/MergedCellsTest.php | 42 + .../Functional/PrintAreaTest.php | 44 + .../Functional/ReadFilterTest.php | 124 + .../TypeAttributePreservationTest.php | 51 + .../Functional/WorkbookViewAttributesTest.php | 80 + .../PhpSpreadsheetTests/Helper/HtmlTest.php | 33 + .../Helper/MigratorTest.php | 88 + .../PhpSpreadsheetTests/Helper/SampleTest.php | 62 + .../PhpSpreadsheetTests/IOFactoryTest.php | 147 + .../PhpSpreadsheetTests/Reader/CsvTest.php | 109 + .../PhpSpreadsheetTests/Reader/HtmlTest.php | 46 + .../PhpSpreadsheetTests/Reader/OdsTest.php | 225 ++ .../PhpSpreadsheetTests/Reader/XlsxTest.php | 19 + .../PhpSpreadsheetTests/Reader/XmlTest.php | 105 + .../ReferenceHelperTest.php | 56 + .../PhpSpreadsheetTests/SettingsTest.php | 40 + .../Shared/CodePageTest.php | 54 + .../PhpSpreadsheetTests/Shared/DateTest.php | 171 + .../PhpSpreadsheetTests/Shared/FileTest.php | 32 + .../PhpSpreadsheetTests/Shared/FontTest.php | 86 + .../Shared/PasswordHasherTest.php | 25 + .../Shared/StringHelperTest.php | 100 + .../Shared/TimeZoneTest.php | 32 + .../Style/BorderRangeTest.php | 73 + .../PhpSpreadsheetTests/Style/BorderTest.php | 26 + .../PhpSpreadsheetTests/Style/ColorTest.php | 73 + .../Style/NumberFormatTest.php | 48 + .../Worksheet/AutoFilter/Column/RuleTest.php | 103 + .../Worksheet/AutoFilter/ColumnTest.php | 176 + .../Worksheet/AutoFilterTest.php | 336 ++ .../Worksheet/ColumnCellIteratorTest.php | 86 + .../Worksheet/ColumnIteratorTest.php | 85 + .../Worksheet/ColumnTest.php | 48 + .../Worksheet/DrawingTest.php | 40 + .../Worksheet/RowCellIteratorTest.php | 88 + .../Worksheet/RowIteratorTest.php | 83 + .../PhpSpreadsheetTests/Worksheet/RowTest.php | 48 + .../Worksheet/WorksheetTest.php | 133 + .../Writer/Ods/ContentTest.php | 98 + .../Writer/Xls/WorkbookTest.php | 143 + .../Writer/Xlsx/UnparsedDataTest.php | 103 + .../phpspreadsheet/tests/bootstrap.php | 13 + .../tests/data/Calculation/DateTime/DATE.php | 489 +++ .../data/Calculation/DateTime/DATEDIF.php | 616 ++++ .../data/Calculation/DateTime/DATEVALUE.php | 297 ++ .../tests/data/Calculation/DateTime/DAY.php | 56 + .../data/Calculation/DateTime/DAYS360.php | 208 ++ .../tests/data/Calculation/DateTime/EDATE.php | 79 + .../data/Calculation/DateTime/EOMONTH.php | 89 + .../tests/data/Calculation/DateTime/HOUR.php | 52 + .../data/Calculation/DateTime/ISOWEEKNUM.php | 36 + .../data/Calculation/DateTime/MINUTE.php | 52 + .../tests/data/Calculation/DateTime/MONTH.php | 52 + .../data/Calculation/DateTime/NETWORKDAYS.php | 103 + .../data/Calculation/DateTime/SECOND.php | 52 + .../tests/data/Calculation/DateTime/TIME.php | 136 + .../data/Calculation/DateTime/TIMEVALUE.php | 56 + .../data/Calculation/DateTime/WEEKDAY.php | 130 + .../data/Calculation/DateTime/WEEKNUM.php | 77 + .../data/Calculation/DateTime/WORKDAY.php | 92 + .../tests/data/Calculation/DateTime/YEAR.php | 48 + .../data/Calculation/DateTime/YEARFRAC.php | 388 +++ .../data/Calculation/Engineering/BESSELI.php | 279 ++ .../data/Calculation/Engineering/BESSELJ.php | 169 + .../data/Calculation/Engineering/BESSELK.php | 194 ++ .../data/Calculation/Engineering/BESSELY.php | 119 + .../data/Calculation/Engineering/BIN2DEC.php | 49 + .../data/Calculation/Engineering/BIN2HEX.php | 73 + .../data/Calculation/Engineering/BIN2OCT.php | 77 + .../data/Calculation/Engineering/BITAND.php | 20 + .../Calculation/Engineering/BITLSHIFT.php | 20 + .../data/Calculation/Engineering/BITOR.php | 24 + .../Calculation/Engineering/BITRSHIFT.php | 16 + .../data/Calculation/Engineering/BITXOR.php | 24 + .../data/Calculation/Engineering/COMPLEX.php | 3085 +++++++++++++++++ .../Calculation/Engineering/CONVERTUOM.php | 148 + .../data/Calculation/Engineering/DEC2BIN.php | 91 + .../data/Calculation/Engineering/DEC2HEX.php | 75 + .../data/Calculation/Engineering/DEC2OCT.php | 57 + .../data/Calculation/Engineering/DELTA.php | 129 + .../data/Calculation/Engineering/ERF.php | 581 ++++ .../data/Calculation/Engineering/ERFC.php | 166 + .../Calculation/Engineering/ERFPRECISE.php | 22 + .../data/Calculation/Engineering/GESTEP.php | 409 +++ .../data/Calculation/Engineering/HEX2BIN.php | 71 + .../data/Calculation/Engineering/HEX2DEC.php | 67 + .../data/Calculation/Engineering/HEX2OCT.php | 58 + .../data/Calculation/Engineering/IMABS.php | 112 + .../Calculation/Engineering/IMAGINARY.php | 124 + .../Calculation/Engineering/IMARGUMENT.php | 108 + .../Calculation/Engineering/IMCONJUGATE.php | 108 + .../data/Calculation/Engineering/IMCOS.php | 112 + .../data/Calculation/Engineering/IMCOSH.php | 112 + .../data/Calculation/Engineering/IMCOT.php | 112 + .../data/Calculation/Engineering/IMCSC.php | 112 + .../data/Calculation/Engineering/IMCSCH.php | 112 + .../data/Calculation/Engineering/IMDIV.php | 89 + .../data/Calculation/Engineering/IMEXP.php | 112 + .../data/Calculation/Engineering/IMLN.php | 112 + .../data/Calculation/Engineering/IMLOG10.php | 112 + .../data/Calculation/Engineering/IMLOG2.php | 112 + .../data/Calculation/Engineering/IMPOWER.php | 94 + .../Calculation/Engineering/IMPRODUCT.php | 80 + .../data/Calculation/Engineering/IMREAL.php | 124 + .../data/Calculation/Engineering/IMSEC.php | 112 + .../data/Calculation/Engineering/IMSECH.php | 112 + .../data/Calculation/Engineering/IMSIN.php | 112 + .../data/Calculation/Engineering/IMSINH.php | 112 + .../data/Calculation/Engineering/IMSQRT.php | 116 + .../data/Calculation/Engineering/IMSUB.php | 40 + .../data/Calculation/Engineering/IMSUM.php | 56 + .../data/Calculation/Engineering/IMTAN.php | 112 + .../data/Calculation/Engineering/OCT2BIN.php | 61 + .../data/Calculation/Engineering/OCT2DEC.php | 41 + .../data/Calculation/Engineering/OCT2HEX.php | 42 + .../data/Calculation/Financial/ACCRINT.php | 75 + .../data/Calculation/Financial/ACCRINTM.php | 45 + .../data/Calculation/Financial/AMORDEGRC.php | 26 + .../data/Calculation/Financial/AMORLINC.php | 26 + .../data/Calculation/Financial/COUPDAYBS.php | 40 + .../data/Calculation/Financial/COUPDAYS.php | 61 + .../data/Calculation/Financial/COUPDAYSNC.php | 40 + .../data/Calculation/Financial/COUPNCD.php | 40 + .../data/Calculation/Financial/COUPNUM.php | 48 + .../data/Calculation/Financial/COUPPCD.php | 40 + .../data/Calculation/Financial/CUMIPMT.php | 87 + .../data/Calculation/Financial/CUMPRINC.php | 87 + .../tests/data/Calculation/Financial/DB.php | 134 + .../tests/data/Calculation/Financial/DDB.php | 115 + .../tests/data/Calculation/Financial/DISC.php | 43 + .../data/Calculation/Financial/DOLLARDE.php | 51 + .../data/Calculation/Financial/DOLLARFR.php | 51 + .../data/Calculation/Financial/EFFECT.php | 31 + .../tests/data/Calculation/Financial/FV.php | 65 + .../data/Calculation/Financial/FVSCHEDULE.php | 39 + .../data/Calculation/Financial/INTRATE.php | 45 + .../tests/data/Calculation/Financial/IPMT.php | 70 + .../tests/data/Calculation/Financial/IRR.php | 61 + .../data/Calculation/Financial/ISPMT.php | 34 + .../tests/data/Calculation/Financial/MIRR.php | 77 + .../data/Calculation/Financial/NOMINAL.php | 31 + .../tests/data/Calculation/Financial/NPER.php | 73 + .../tests/data/Calculation/Financial/NPV.php | 42 + .../data/Calculation/Financial/PDURATION.php | 36 + .../data/Calculation/Financial/PRICE.php | 96 + .../data/Calculation/Financial/PRICEDISC.php | 12 + .../tests/data/Calculation/Financial/PV.php | 24 + .../tests/data/Calculation/Financial/RATE.php | 72 + .../tests/data/Calculation/Financial/RRI.php | 28 + .../tests/data/Calculation/Financial/SLN.php | 40 + .../tests/data/Calculation/Financial/SYD.php | 44 + .../tests/data/Calculation/Financial/XIRR.php | 71 + .../data/Calculation/Functions/ERROR_TYPE.php | 59 + .../Calculation/Functions/IF_CONDITION.php | 36 + .../data/Calculation/Functions/ISFORMULA.php | 84 + .../data/Calculation/Functions/IS_BLANK.php | 67 + .../data/Calculation/Functions/IS_ERR.php | 67 + .../data/Calculation/Functions/IS_ERROR.php | 67 + .../data/Calculation/Functions/IS_EVEN.php | 83 + .../data/Calculation/Functions/IS_LOGICAL.php | 67 + .../data/Calculation/Functions/IS_NA.php | 67 + .../data/Calculation/Functions/IS_NONTEXT.php | 67 + .../data/Calculation/Functions/IS_NUMBER.php | 67 + .../data/Calculation/Functions/IS_ODD.php | 83 + .../data/Calculation/Functions/IS_TEXT.php | 67 + .../tests/data/Calculation/Functions/N.php | 138 + .../tests/data/Calculation/Functions/TYPE.php | 100 + .../tests/data/Calculation/Logical/AND.php | 124 + .../tests/data/Calculation/Logical/IF.php | 37 + .../data/Calculation/Logical/IFERROR.php | 44 + .../tests/data/Calculation/Logical/NOT.php | 83 + .../tests/data/Calculation/Logical/OR.php | 119 + .../tests/data/Calculation/Logical/XOR.php | 52 + .../data/Calculation/LookupRef/COLUMNS.php | 36 + .../Calculation/LookupRef/FORMULATEXT.php | 34 + .../data/Calculation/LookupRef/HLOOKUP.php | 278 ++ .../data/Calculation/LookupRef/INDEX.php | 90 + .../data/Calculation/LookupRef/MATCH.php | 99 + .../tests/data/Calculation/LookupRef/ROWS.php | 36 + .../data/Calculation/LookupRef/VLOOKUP.php | 294 ++ .../tests/data/Calculation/MathTrig/ACOT.php | 60 + .../tests/data/Calculation/MathTrig/ACOTH.php | 60 + .../tests/data/Calculation/MathTrig/ATAN2.php | 86 + .../data/Calculation/MathTrig/CEILING.php | 104 + .../data/Calculation/MathTrig/COMBIN.php | 126 + .../tests/data/Calculation/MathTrig/COT.php | 44 + .../tests/data/Calculation/MathTrig/COTH.php | 60 + .../tests/data/Calculation/MathTrig/CSC.php | 44 + .../tests/data/Calculation/MathTrig/CSCH.php | 60 + .../tests/data/Calculation/MathTrig/EVEN.php | 72 + .../tests/data/Calculation/MathTrig/FACT.php | 44 + .../data/Calculation/MathTrig/FACTDOUBLE.php | 36 + .../tests/data/Calculation/MathTrig/FLOOR.php | 57 + .../tests/data/Calculation/MathTrig/GCD.php | 132 + .../tests/data/Calculation/MathTrig/INT.php | 80 + .../tests/data/Calculation/MathTrig/LCM.php | 68 + .../tests/data/Calculation/MathTrig/LOG.php | 344 ++ .../data/Calculation/MathTrig/MDETERM.php | 262 ++ .../data/Calculation/MathTrig/MINVERSE.php | 411 +++ .../tests/data/Calculation/MathTrig/MMULT.php | 305 ++ .../tests/data/Calculation/MathTrig/MOD.php | 54 + .../data/Calculation/MathTrig/MROUND.php | 59 + .../data/Calculation/MathTrig/MULTINOMIAL.php | 17 + .../tests/data/Calculation/MathTrig/ODD.php | 56 + .../tests/data/Calculation/MathTrig/POWER.php | 409 +++ .../data/Calculation/MathTrig/PRODUCT.php | 51 + .../data/Calculation/MathTrig/QUOTIENT.php | 34 + .../tests/data/Calculation/MathTrig/ROMAN.php | 28 + .../data/Calculation/MathTrig/ROUNDDOWN.php | 74 + .../data/Calculation/MathTrig/ROUNDUP.php | 74 + .../tests/data/Calculation/MathTrig/SEC.php | 60 + .../tests/data/Calculation/MathTrig/SECH.php | 60 + .../data/Calculation/MathTrig/SERIESSUM.php | 34 + .../tests/data/Calculation/MathTrig/SIGN.php | 56 + .../data/Calculation/MathTrig/SQRTPI.php | 64 + .../data/Calculation/MathTrig/SUBTOTAL.php | 74 + .../Calculation/MathTrig/SUBTOTALHIDDEN.php | 74 + .../Calculation/MathTrig/SUBTOTALNESTED.php | 18 + .../tests/data/Calculation/MathTrig/SUMIF.php | 61 + .../data/Calculation/MathTrig/SUMPRODUCT.php | 19 + .../tests/data/Calculation/MathTrig/SUMSQ.php | 47 + .../data/Calculation/MathTrig/SUMX2MY2.php | 19 + .../data/Calculation/MathTrig/SUMX2PY2.php | 19 + .../data/Calculation/MathTrig/SUMXMY2.php | 19 + .../tests/data/Calculation/MathTrig/TRUNC.php | 99 + .../tests/data/Calculation/TextData/CHAR.php | 48 + .../tests/data/Calculation/TextData/CLEAN.php | 24 + .../tests/data/Calculation/TextData/CODE.php | 72 + .../data/Calculation/TextData/CONCATENATE.php | 21 + .../data/Calculation/TextData/DOLLAR.php | 34 + .../tests/data/Calculation/TextData/EXACT.php | 39 + .../tests/data/Calculation/TextData/FIND.php | 74 + .../tests/data/Calculation/TextData/FIXED.php | 34 + .../tests/data/Calculation/TextData/LEFT.php | 34 + .../tests/data/Calculation/TextData/LEN.php | 28 + .../tests/data/Calculation/TextData/LOWER.php | 20 + .../tests/data/Calculation/TextData/MID.php | 57 + .../data/Calculation/TextData/NUMBERVALUE.php | 52 + .../data/Calculation/TextData/PROPER.php | 16 + .../data/Calculation/TextData/REPLACE.php | 32 + .../tests/data/Calculation/TextData/RIGHT.php | 34 + .../data/Calculation/TextData/SEARCH.php | 62 + .../data/Calculation/TextData/SUBSTITUTE.php | 42 + .../tests/data/Calculation/TextData/T.php | 24 + .../tests/data/Calculation/TextData/TEXT.php | 69 + .../data/Calculation/TextData/TEXTJOIN.php | 28 + .../tests/data/Calculation/TextData/TRIM.php | 32 + .../tests/data/Calculation/TextData/UPPER.php | 20 + .../tests/data/Calculation/TextData/VALUE.php | 44 + .../CalculationBinaryComparisonOperation.php | 267 ++ .../tests/data/Cell/DefaultValueBinder.php | 76 + .../tests/data/CellAbsoluteCoordinate.php | 52 + .../tests/data/CellAbsoluteReference.php | 68 + .../tests/data/CellBuildRange.php | 26 + .../tests/data/CellCoordinates.php | 46 + .../CellExtractAllCellReferencesInRange.php | 152 + .../tests/data/CellGetRangeBoundaries.php | 30 + .../data/CellMergeRangesInCollection.php | 70 + .../tests/data/CellRangeBoundaries.php | 30 + .../tests/data/CellRangeDimension.php | 18 + .../tests/data/CellSplitRange.php | 32 + .../phpspreadsheet/tests/data/ColumnIndex.php | 52 + .../tests/data/ColumnString.php | 52 + .../tests/data/CoordinateIsRange.php | 24 + .../TypeAttributePreservation/Formula.php | 40 + .../tests/data/Reader/CSV/backslash.csv | 2 + .../tests/data/Reader/CSV/contains_html.csv | 1 + .../data/Reader/CSV/csv_without_extension | 3 + .../tests/data/Reader/CSV/empty.csv | 0 .../tests/data/Reader/CSV/enclosure.csv | 4 + .../data/Reader/CSV/semicolon_separated.csv | 3 + .../Reader/HTML/csv_with_angle_bracket.csv | 1 + .../tests/data/Reader/Ods/data.ods | Bin 0 -> 11764 bytes .../Reader/XLSX/without_cell_reference.xlsx | Bin 0 -> 6384 bytes .../tests/data/Reader/Xml/WithoutStyle.xml | 47 + .../Reader/Xml/XEETestInvalidSimpleXML.xml | 8 + .../data/Reader/Xml/XEETestInvalidUTF-16.xml | Bin 0 -> 276 bytes .../Reader/Xml/XEETestInvalidUTF-16BE.xml | Bin 0 -> 278 bytes .../Reader/Xml/XEETestInvalidUTF-16LE.xml | Bin 0 -> 278 bytes .../data/Reader/Xml/XEETestInvalidUTF-8.xml | 8 + .../data/Reader/Xml/XEETestValidUTF-16.xml | Bin 0 -> 176 bytes .../data/Reader/Xml/XEETestValidUTF-16BE.xml | Bin 0 -> 178 bytes .../data/Reader/Xml/XEETestValidUTF-16LE.xml | Bin 0 -> 178 bytes .../data/Reader/Xml/XEETestValidUTF-8.xml | 4 + .../data/Shared/CentimeterSizeToPixels.php | 24 + .../tests/data/Shared/CodePage.php | 219 ++ .../data/Shared/Date/DateTimeToExcel.php | 72 + .../data/Shared/Date/ExcelToTimestamp1900.php | 75 + .../Date/ExcelToTimestamp1900Timezone.php | 137 + .../data/Shared/Date/ExcelToTimestamp1904.php | 45 + .../tests/data/Shared/Date/FormatCodes.php | 149 + .../Shared/Date/FormattedPHPToExcel1900.php | 89 + .../data/Shared/Date/TimestampToExcel1900.php | 61 + .../data/Shared/Date/TimestampToExcel1904.php | 29 + .../tests/data/Shared/FontSizeToPixels.php | 68 + .../tests/data/Shared/InchSizeToPixels.php | 24 + .../tests/data/Shared/PasswordHashes.php | 28 + .../data/Style/ColorChangeBrightness.php | 77 + .../tests/data/Style/ColorGetBlue.php | 35 + .../tests/data/Style/ColorGetGreen.php | 35 + .../tests/data/Style/ColorGetRed.php | 35 + .../tests/data/Style/NumberFormat.php | 189 + .../tests/data/Style/NumberFormatDates.php | 65 + .../tests/data/Writer/Ods/content-empty.xml | 25 + .../data/Writer/Ods/content-with-data.xml | 105 + .../data/Writer/XLSX/form_pass_print.xlsm | Bin 0 -> 17469 bytes reference/stigs/.gitignore | 2 + 511 files changed, 45950 insertions(+), 2729 deletions(-) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 conf/docker-php.ini create mode 100644 inc/.gitignore create mode 100644 inc/vendor/godsgood33/php-db/.gitattributes create mode 100644 inc/vendor/godsgood33/php-db/.gitignore create mode 100644 inc/vendor/godsgood33/php-db/.scrutinizer.yml create mode 100644 inc/vendor/godsgood33/php-db/LICENSE create mode 100644 inc/vendor/godsgood33/php-db/README.md create mode 100644 inc/vendor/godsgood33/php-db/composer.json create mode 100644 inc/vendor/godsgood33/php-db/composer.lock create mode 100644 inc/vendor/godsgood33/php-db/examples/create_table_json.json create mode 100644 inc/vendor/godsgood33/php-db/phpunit.xml create mode 100644 inc/vendor/godsgood33/php-db/src/DBConfig.php create mode 100644 inc/vendor/godsgood33/php-db/src/Database.php create mode 100644 inc/vendor/godsgood33/php-db/tests/DatabaseTest.php create mode 100644 inc/vendor/godsgood33/php-db/tests/TestClass.php create mode 100644 inc/vendor/godsgood33/php-db/tests/TestClass2.php create mode 100644 inc/vendor/godsgood33/php-db/tests/bootstrap.php create mode 100644 inc/vendor/markbaker/complex/README.md create mode 100644 inc/vendor/markbaker/complex/classes/Autoloader.php create mode 100644 inc/vendor/markbaker/complex/classes/Bootstrap.php create mode 100644 inc/vendor/markbaker/complex/classes/src/Complex.php create mode 100644 inc/vendor/markbaker/complex/classes/src/Exception.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/abs.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/acos.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/acosh.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/acot.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/acoth.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/acsc.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/acsch.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/argument.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/asec.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/asech.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/asin.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/asinh.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/atan.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/atanh.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/conjugate.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/cos.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/cosh.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/cot.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/coth.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/csc.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/csch.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/exp.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/inverse.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/ln.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/log10.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/log2.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/negative.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/pow.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/rho.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/sec.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/sech.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/sin.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/sinh.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/sqrt.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/tan.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/tanh.php create mode 100644 inc/vendor/markbaker/complex/classes/src/functions/theta.php create mode 100644 inc/vendor/markbaker/complex/classes/src/operations/add.php create mode 100644 inc/vendor/markbaker/complex/classes/src/operations/divideby.php create mode 100644 inc/vendor/markbaker/complex/classes/src/operations/divideinto.php create mode 100644 inc/vendor/markbaker/complex/classes/src/operations/multiply.php create mode 100644 inc/vendor/markbaker/complex/classes/src/operations/subtract.php create mode 100644 inc/vendor/markbaker/complex/composer.json create mode 100644 inc/vendor/markbaker/complex/examples/complexTest.php create mode 100644 inc/vendor/markbaker/complex/examples/testFunctions.php create mode 100644 inc/vendor/markbaker/complex/examples/testOperations.php create mode 100644 inc/vendor/markbaker/complex/license.md create mode 100644 inc/vendor/pacificsec/cpe/.gitignore create mode 100644 inc/vendor/pacificsec/cpe/composer.json create mode 100644 inc/vendor/pacificsec/cpe/src/Common/LogicalValue.php create mode 100644 inc/vendor/pacificsec/cpe/src/Common/Utilities.php create mode 100644 inc/vendor/pacificsec/cpe/src/Common/WellFormedName.php create mode 100644 inc/vendor/pacificsec/cpe/src/Matching/CPENameMatcher.php rename inc/vendor/pacificsec/cpe/{vendor/PacificSec/CPE => src}/Matching/Relation.php (100%) rename inc/vendor/pacificsec/cpe/{vendor/PacificSec/CPE => src}/Naming/CPENameBinder.php (53%) create mode 100644 inc/vendor/pacificsec/cpe/src/Naming/CPENameUnbinder.php delete mode 100644 inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/LogicalValue.php delete mode 100644 inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/Utilities.php delete mode 100644 inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/WellFormedName.php delete mode 100644 inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Matching/CPENameMatcher.php delete mode 100644 inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Naming/CPENameUnbinder.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/.sami.php delete mode 100644 inc/vendor/phpoffice/phpspreadsheet/docs/extra/extra.js create mode 100644 inc/vendor/phpoffice/phpspreadsheet/samples/Reader/20_Reader_worksheet_hyperlink_image.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/DateTimeTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/EngineeringTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/FinancialTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/LogicalTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/LookupRefTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/MathTrigTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/TextDataTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/AdvancedValueBinderTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataTypeTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataValidationTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataValidatorTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/HyperlinkTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/DataSeriesValuesTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/LayoutTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/LegendTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Collection/CellsTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Custom/ComplexAssert.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/AbstractFunctional.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/CommentsTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/DrawingImageHyperlinkTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/HtmlCommentsTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/HtmlTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/MigratorTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/SampleTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/IOFactoryTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/CsvTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/HtmlTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/OdsTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/XlsxTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/XmlTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/ReferenceHelperTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/SettingsTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/CodePageTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/DateTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/FileTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/FontTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/PasswordHasherTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/StringHelperTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/TimeZoneTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/BorderRangeTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/BorderTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/ColorTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/NumberFormatTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/Column/RuleTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/ColumnTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilterTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIteratorTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/DrawingTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowCellIteratorTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowIteratorTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Ods/ContentTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Xls/WorkbookTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Xlsx/UnparsedDataTest.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/bootstrap.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/DATE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/DATEDIF.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/DATEVALUE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/DAY.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/DAYS360.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/EDATE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/EOMONTH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/HOUR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/ISOWEEKNUM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/MINUTE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/MONTH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/NETWORKDAYS.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/SECOND.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/TIME.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/TIMEVALUE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/WEEKDAY.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/WEEKNUM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/WORKDAY.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/YEAR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/DateTime/YEARFRAC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BESSELI.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BESSELJ.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BESSELK.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BESSELY.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BIN2DEC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BIN2HEX.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BIN2OCT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BITAND.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BITLSHIFT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BITOR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BITRSHIFT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/BITXOR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/COMPLEX.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/CONVERTUOM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/DEC2BIN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/DEC2HEX.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/DEC2OCT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/DELTA.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/ERF.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/ERFC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/ERFPRECISE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/GESTEP.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/HEX2BIN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/HEX2DEC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/HEX2OCT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMABS.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMAGINARY.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMARGUMENT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMCONJUGATE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMCOS.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMCOSH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMCOT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMCSC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMCSCH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMDIV.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMEXP.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMLN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMLOG10.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMLOG2.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMPOWER.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMPRODUCT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMREAL.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMSEC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMSECH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMSIN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMSINH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMSQRT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMSUB.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMSUM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/IMTAN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/OCT2BIN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/OCT2DEC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Engineering/OCT2HEX.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/ACCRINT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/ACCRINTM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/AMORDEGRC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/AMORLINC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/COUPDAYBS.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/COUPDAYS.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/COUPDAYSNC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/COUPNCD.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/COUPNUM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/COUPPCD.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/CUMIPMT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/CUMPRINC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/DB.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/DDB.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/DISC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/DOLLARDE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/DOLLARFR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/EFFECT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/FV.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/FVSCHEDULE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/INTRATE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/IPMT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/IRR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/ISPMT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/MIRR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/NOMINAL.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/NPER.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/NPV.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/PDURATION.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/PRICE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/PRICEDISC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/PV.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/RATE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/RRI.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/SLN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/SYD.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Financial/XIRR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/ERROR_TYPE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IF_CONDITION.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/ISFORMULA.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_BLANK.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_ERR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_ERROR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_EVEN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_LOGICAL.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_NA.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_NONTEXT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_NUMBER.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_ODD.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/IS_TEXT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/N.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/TYPE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Logical/AND.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Logical/IF.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Logical/IFERROR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Logical/NOT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Logical/OR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Logical/XOR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/COLUMNS.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/FORMULATEXT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/HLOOKUP.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/INDEX.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/MATCH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/ROWS.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/VLOOKUP.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/ACOT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/ACOTH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/ATAN2.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/CEILING.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/COMBIN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/COT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/COTH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/CSC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/CSCH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/EVEN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/FACT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/FACTDOUBLE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/FLOOR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/GCD.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/INT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/LCM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/LOG.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/MDETERM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/MINVERSE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/MMULT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/MOD.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/MROUND.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/MULTINOMIAL.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/ODD.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/POWER.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/PRODUCT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/QUOTIENT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/ROMAN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/ROUNDDOWN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/ROUNDUP.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SEC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SECH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SERIESSUM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SIGN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SQRTPI.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTAL.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTALHIDDEN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTALNESTED.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMIF.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMPRODUCT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMSQ.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMX2MY2.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMX2PY2.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMXMY2.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/TRUNC.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/CHAR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/CLEAN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/CODE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/CONCATENATE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/DOLLAR.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/EXACT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/FIND.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/FIXED.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/LEFT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/LEN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/LOWER.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/MID.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/NUMBERVALUE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/PROPER.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/REPLACE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/RIGHT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/SEARCH.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/SUBSTITUTE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/T.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/TEXT.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/TEXTJOIN.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/TRIM.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/UPPER.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/VALUE.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CalculationBinaryComparisonOperation.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Cell/DefaultValueBinder.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellAbsoluteCoordinate.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellAbsoluteReference.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellBuildRange.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellCoordinates.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellExtractAllCellReferencesInRange.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellGetRangeBoundaries.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellMergeRangesInCollection.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellRangeBoundaries.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellRangeDimension.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CellSplitRange.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/ColumnIndex.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/ColumnString.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/CoordinateIsRange.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Functional/TypeAttributePreservation/Formula.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/backslash.csv create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/contains_html.csv create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/csv_without_extension create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/empty.csv create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/enclosure.csv create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/semicolon_separated.csv create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/HTML/csv_with_angle_bracket.csv create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Ods/data.ods create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/XLSX/without_cell_reference.xlsx create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/WithoutStyle.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidSimpleXML.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16BE.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16LE.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-8.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestValidUTF-16.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestValidUTF-16BE.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestValidUTF-16LE.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestValidUTF-8.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/CentimeterSizeToPixels.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/CodePage.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/DateTimeToExcel.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/ExcelToTimestamp1900.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/ExcelToTimestamp1900Timezone.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/ExcelToTimestamp1904.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/FormatCodes.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/FormattedPHPToExcel1900.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/TimestampToExcel1900.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/TimestampToExcel1904.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/FontSizeToPixels.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/InchSizeToPixels.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/PasswordHashes.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Style/ColorChangeBrightness.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Style/ColorGetBlue.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Style/ColorGetGreen.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Style/ColorGetRed.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Style/NumberFormat.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Style/NumberFormatDates.php create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Writer/Ods/content-empty.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Writer/Ods/content-with-data.xml create mode 100644 inc/vendor/phpoffice/phpspreadsheet/tests/data/Writer/XLSX/form_pass_print.xlsm create mode 100644 reference/stigs/.gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2d640e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.buildpath +/.project +/.settings/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 110b393..d240acb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +## v1.3.3 + ## v1.3.2 - Initial GitHub load - Previous versions loaded on [SourceForge](https://sourceforge.net/projects/sagacity/) \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b395466 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM php:7.2.8-apache-stretch +COPY conf/docker-php.ini /usr/local/etc/php/php.ini +RUN apt update && apt -y install zlib1g-dev mysql-client +RUN docker-php-ext-install mysqli zip +RUN mkdir /var/log/sagacity && chown www-data:www-data /var/log/sagacity +EXPOSE 80 diff --git a/conf/docker-php.ini b/conf/docker-php.ini new file mode 100644 index 0000000..490b557 --- /dev/null +++ b/conf/docker-php.ini @@ -0,0 +1,14 @@ +memory_limit=1024M +error_reporting=E_ALL +display_errors=On +display_startup_errors=On +html_errors=On +variables_order="GPCS" +request_order="GPCS" +post_max_size=1G +include_path="./:/var/www/html:/var/www/html/classes:/var/www/html/inc" +file_uploads=On +upload_max_filesize=1G +allow_url_fopen=On +allow_url_include=Off +date.timezone=America/Indiana/Indianapolis \ No newline at end of file diff --git a/config.inc b/config.inc index 3df1759..a35954b 100644 --- a/config.inc +++ b/config.inc @@ -15,6 +15,7 @@ * - Nov 14, 2017 - File created * - May 24, 2018 - Updated constants for 1.3.2 release * - Jun 2, 2018 - Added new STIG_EXCLUSIONS constant to permanently exclude STIGs + * - Aug 28, 2018 - Updated constants for 1.3.3 release */ // @new /** @@ -29,8 +30,8 @@ define('E_DEBUG', 65535); define('DOC_ROOT', '{DOC_ROOT}'); define('PWD_FILE', '{PWD_FILE}'); define('TMP', '{TMP_PATH}'); -define('VER', '1.3.2'); -define('REL_DATE', '2018-05-31'); +define('VER', '1.3.3'); +define('REL_DATE', '2018-08-31'); define('LOG_LEVEL', '{E_ERROR}'); define('LOG_PATH', '{LOG_PATH}'); define('SALT', '{SALT}'); diff --git a/inc/.gitignore b/inc/.gitignore new file mode 100644 index 0000000..80875bd --- /dev/null +++ b/inc/.gitignore @@ -0,0 +1 @@ +/passwd \ No newline at end of file diff --git a/inc/composer.json b/inc/composer.json index 6f2de3b..acd3ccc 100644 --- a/inc/composer.json +++ b/inc/composer.json @@ -1,12 +1,31 @@ { - "require" : { - "phpoffice/phpspreadsheet" : "^1.0", - "cocur/background-process" : "^0.7.0", - "tecnickcom/tcpdf" : "^6.2", - "pacificsec/cpe" : "^1.0", - "monolog/monolog": "^1.23" - }, - "require-dev" : { - "phpunit/phpunit" : "^6.2" - } -} + "require" : { + "phpoffice/phpspreadsheet" : "~1.4", + "cocur/background-process" : "~0.7", + "tecnickcom/tcpdf" : "~6.2", + "pacificsec/cpe" : "1.0.1", + "godsgood33/php-db" : "~1.3" + }, + "require-dev" : { + "phpunit/phpunit" : "~7.3" + }, + "type" : "project", + "homepage" : "https://cyberperspectives.com", + "license" : "Apache-2.0", + "authors" : [{ + "name" : "Ryan Prather", + "email" : "ryan.prather@cyberperspectives.com", + "role" : "Braun" + }, { + "name" : "Jeff Odegard", + "email" : "jeff.odegard@cyberperspectives.com", + "role" : "Brains" + } + ], + "keywords" : [ + "security", + "disa", + "rmf" + ], + "name" : "cyberperspectives\\sagacity" +} \ No newline at end of file diff --git a/inc/composer.lock b/inc/composer.lock index 398686e..8eaaff6 100644 --- a/inc/composer.lock +++ b/inc/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "92ac4709f5221f74a1c7f00e59df8ad7", + "content-hash": "184b710525eca347d52d3a2062cdf1c7", "packages": [ { "name": "cocur/background-process", @@ -44,6 +44,148 @@ ], "time": "2017-02-11T12:41:41+00:00" }, + { + "name": "godsgood33/php-db", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/godsgood33/php-db.git", + "reference": "cdf01f123c16dcb0b294b3b9013557e2d472f1c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/godsgood33/php-db/zipball/cdf01f123c16dcb0b294b3b9013557e2d472f1c9", + "reference": "cdf01f123c16dcb0b294b3b9013557e2d472f1c9", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.23" + }, + "require-dev": { + "phpunit/phpunit": "~7.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Godsgood33\\Php_Db\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Ryan Prather", + "email": "godsgood33@gmail.com", + "role": "Developer" + } + ], + "description": "PHP Database Library", + "homepage": "https://github.com/godsgood33/php-db", + "keywords": [ + "database", + "library", + "mysql", + "mysqli" + ], + "time": "2018-06-07T18:30:13+00:00" + }, + { + "name": "markbaker/complex", + "version": "1.4.6", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "a78d82ae4e682c3809fc3023d1b0ce654f6ab12b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/a78d82ae4e682c3809fc3023d1b0ce654f6ab12b", + "reference": "a78d82ae4e682c3809fc3023d1b0ce654f6ab12b", + "shasum": "" + }, + "require": { + "php": "^5.6.0|^7.0.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3", + "phpcompatibility/php-compatibility": "^8.0", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "2.*", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^4.8.35|^5.4.0", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "^3.3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + }, + "files": [ + "classes/src/functions/abs.php", + "classes/src/functions/acos.php", + "classes/src/functions/acosh.php", + "classes/src/functions/acot.php", + "classes/src/functions/acoth.php", + "classes/src/functions/acsc.php", + "classes/src/functions/acsch.php", + "classes/src/functions/argument.php", + "classes/src/functions/asec.php", + "classes/src/functions/asech.php", + "classes/src/functions/asin.php", + "classes/src/functions/asinh.php", + "classes/src/functions/atan.php", + "classes/src/functions/atanh.php", + "classes/src/functions/conjugate.php", + "classes/src/functions/cos.php", + "classes/src/functions/cosh.php", + "classes/src/functions/cot.php", + "classes/src/functions/coth.php", + "classes/src/functions/csc.php", + "classes/src/functions/csch.php", + "classes/src/functions/exp.php", + "classes/src/functions/inverse.php", + "classes/src/functions/ln.php", + "classes/src/functions/log2.php", + "classes/src/functions/log10.php", + "classes/src/functions/negative.php", + "classes/src/functions/pow.php", + "classes/src/functions/rho.php", + "classes/src/functions/sec.php", + "classes/src/functions/sech.php", + "classes/src/functions/sin.php", + "classes/src/functions/sinh.php", + "classes/src/functions/sqrt.php", + "classes/src/functions/tan.php", + "classes/src/functions/tanh.php", + "classes/src/functions/theta.php", + "classes/src/operations/add.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "time": "2018-07-31T08:38:40+00:00" + }, { "name": "monolog/monolog", "version": "1.23.0", @@ -124,33 +266,59 @@ }, { "name": "pacificsec/cpe", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/pacificsec/cpe.git", - "reference": "3d78d66fc4ea249b6f353a7c48f426835a792d11" + "reference": "52cc49e04388ba00493be634287f6ce3efb30afc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pacificsec/cpe/zipball/3d78d66fc4ea249b6f353a7c48f426835a792d11", - "reference": "3d78d66fc4ea249b6f353a7c48f426835a792d11", + "url": "https://api.github.com/repos/pacificsec/cpe/zipball/52cc49e04388ba00493be634287f6ce3efb30afc", + "reference": "52cc49e04388ba00493be634287f6ce3efb30afc", "shasum": "" }, + "require": { + "php": ">=5.3.0" + }, "type": "library", - "notification-url": "https://packagist.org/downloads/" + "autoload": { + "psr-4": { + "PacificSec\\CPE\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio Franco", + "email": "antonio.franco@pacificsec.com" + } + ], + "description": "CPE: Common Platform Enumeration for PHP", + "homepage": "https://github.com/pacificsec/cpe", + "keywords": [ + "cpe", + "cve", + "pacificsec", + "security" + ], + "time": "2018-08-22T17:55:09+00:00" }, { "name": "phpoffice/phpspreadsheet", - "version": "1.2.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "36acc372875c4d894dc093825ce4f62209db5a76" + "reference": "125f462a718956f37d81305ca0df4f17cef0f3b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/36acc372875c4d894dc093825ce4f62209db5a76", - "reference": "36acc372875c4d894dc093825ce4f62209db5a76", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/125f462a718956f37d81305ca0df4f17cef0f3b9", + "reference": "125f462a718956f37d81305ca0df4f17cef0f3b9", "shasum": "" }, "require": { @@ -166,6 +334,7 @@ "ext-xmlwriter": "*", "ext-zip": "*", "ext-zlib": "*", + "markbaker/complex": "^1.4.1", "php": "^5.6|^7.0", "psr/simple-cache": "^1.0" }, @@ -175,7 +344,7 @@ "jpgraph/jpgraph": "^4.0", "mpdf/mpdf": "^7.0.0", "phpunit/phpunit": "^5.7", - "squizlabs/php_codesniffer": "^2.7", + "squizlabs/php_codesniffer": "^3.3", "tecnickcom/tcpdf": "^6.2" }, "suggest": { @@ -223,7 +392,7 @@ "xls", "xlsx" ], - "time": "2018-04-10T03:53:16+00:00" + "time": "2018-08-06T02:58:06+00:00" }, { "name": "psr/log", @@ -440,16 +609,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "478465659fd987669df0bd8a9bf22a8710e5f1b6" + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/478465659fd987669df0bd8a9bf22a8710e5f1b6", - "reference": "478465659fd987669df0bd8a9bf22a8710e5f1b6", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", "shasum": "" }, "require": { @@ -484,26 +653,26 @@ "object", "object graph" ], - "time": "2018-05-29T17:25:09+00:00" + "time": "2018-06-11T23:09:50+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^1.0.1", + "phar-io/version": "^2.0", "php": "^5.6 || ^7.0" }, "type": "library", @@ -539,20 +708,20 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" + "time": "2018-07-08T19:23:20+00:00" }, { "name": "phar-io/version", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", "shasum": "" }, "require": { @@ -586,7 +755,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" + "time": "2018-07-08T19:19:57+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -742,16 +911,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.7.6", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", "shasum": "" }, "require": { @@ -763,12 +932,12 @@ }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { @@ -801,44 +970,44 @@ "spy", "stub" ], - "time": "2018-04-18T13:57:24+00:00" + "time": "2018-08-05T17:53:17+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.3.2", + "version": "6.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a", + "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-token-stream": "^3.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", + "sebastian/environment": "^3.1", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3.x-dev" + "dev-master": "6.0-dev" } }, "autoload": { @@ -864,29 +1033,29 @@ "testing", "xunit" ], - "time": "2018-04-06T15:36:58+00:00" + "time": "2018-06-01T07:51:50+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.5", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cecbc684605bb0cc288828eb5d65d93d5c676d3c", + "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -901,7 +1070,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -911,7 +1080,7 @@ "filesystem", "iterator" ], - "time": "2017-11-27T13:52:08+00:00" + "time": "2018-06-11T11:44:00+00:00" }, { "name": "phpunit/php-text-template", @@ -956,28 +1125,28 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -992,7 +1161,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -1001,33 +1170,33 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2018-02-01T13:07:23+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1050,40 +1219,40 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "time": "2018-02-01T13:16:43+00:00" }, { "name": "phpunit/phpunit", - "version": "6.5.8", + "version": "7.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b" + "reference": "34705f81bddc3f505b9599a2ef96e2b4315ba9b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4f21a3c6b97c42952fd5c2837bb354ec0199b97b", - "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34705f81bddc3f505b9599a2ef96e2b4315ba9b8", + "reference": "34705f81bddc3f505b9599a2ef96e2b4315ba9b8", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", - "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.5", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", + "phpunit/php-timer": "^2.0", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", @@ -1092,15 +1261,15 @@ "sebastian/version": "^2.0.1" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" + "phpunit/phpunit-mock-objects": "*" }, "require-dev": { "ext-pdo": "*" }, "suggest": { + "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -1108,7 +1277,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5.x-dev" + "dev-master": "7.3-dev" } }, "autoload": { @@ -1134,66 +1303,7 @@ "testing", "xunit" ], - "time": "2018-04-10T11:38:34+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3eaf040f20154d27d6da59ca2c6e28ac8fd56dce", - "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2018-05-29T13:50:43+00:00" + "time": "2018-08-22T06:39:21+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1242,30 +1352,30 @@ }, { "name": "sebastian/comparator", - "version": "2.1.3", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", + "php": "^7.1", + "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1302,32 +1412,33 @@ "compare", "equality" ], - "time": "2018-02-01T13:46:46+00:00" + "time": "2018-07-12T15:12:46+00:00" }, { "name": "sebastian/diff", - "version": "2.0.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "366541b989927187c4ca70490a35615d3fef2dce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce", + "reference": "366541b989927187c4ca70490a35615d3fef2dce", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1352,9 +1463,12 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2017-08-03T08:09:46+00:00" + "time": "2018-06-10T07:54:39+00:00" }, { "name": "sebastian/environment", diff --git a/inc/vendor/cocur/background-process/src/BackgroundProcess.php b/inc/vendor/cocur/background-process/src/BackgroundProcess.php index 938b633..2cc354f 100644 --- a/inc/vendor/cocur/background-process/src/BackgroundProcess.php +++ b/inc/vendor/cocur/background-process/src/BackgroundProcess.php @@ -186,7 +186,7 @@ class BackgroundProcess { /** * @param int $pid PID of process to resume * - * @return Cocur\BackgroundProcess\BackgroundProcess + * @return BackgroundProcess */ static public function createFromPID($pid) { $process = new self(); diff --git a/inc/vendor/composer/autoload_files.php b/inc/vendor/composer/autoload_files.php index d931b8f..23129e8 100644 --- a/inc/vendor/composer/autoload_files.php +++ b/inc/vendor/composer/autoload_files.php @@ -6,5 +6,46 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', + 'abede361264e2ae69ec1eee813a101af' => $vendorDir . '/markbaker/complex/classes/src/functions/abs.php', + '21a5860fbef5be28db5ddfbc3cca67c4' => $vendorDir . '/markbaker/complex/classes/src/functions/acos.php', + '1546e3f9d127f2a9bb2d1b6c31c26ef1' => $vendorDir . '/markbaker/complex/classes/src/functions/acosh.php', + 'd2516f7f4fba5ea5905f494b4a8262e0' => $vendorDir . '/markbaker/complex/classes/src/functions/acot.php', + '4511163d560956219b96882c0980b65e' => $vendorDir . '/markbaker/complex/classes/src/functions/acoth.php', + 'c361f5616dc2a8da4fa3e137077cd4ea' => $vendorDir . '/markbaker/complex/classes/src/functions/acsc.php', + '02d68920fc98da71991ce569c91df0f6' => $vendorDir . '/markbaker/complex/classes/src/functions/acsch.php', + '88e19525eae308b4a6aa3419364875d3' => $vendorDir . '/markbaker/complex/classes/src/functions/argument.php', + '60e8e2d0827b58bfc904f13957e51849' => $vendorDir . '/markbaker/complex/classes/src/functions/asec.php', + '13d2f040713999eab66c359b4d79871d' => $vendorDir . '/markbaker/complex/classes/src/functions/asech.php', + '838ab38beb32c68a79d3cd2c007d5a04' => $vendorDir . '/markbaker/complex/classes/src/functions/asin.php', + 'bb28eccd0f8f008333a1b3c163d604ac' => $vendorDir . '/markbaker/complex/classes/src/functions/asinh.php', + '9e483de83558c98f7d3feaa402c78cb3' => $vendorDir . '/markbaker/complex/classes/src/functions/atan.php', + '36b74b5b765ded91ee58c8ee3c0e85e3' => $vendorDir . '/markbaker/complex/classes/src/functions/atanh.php', + '05c15ee9510da7fd6bf6136f436500c0' => $vendorDir . '/markbaker/complex/classes/src/functions/conjugate.php', + 'd3208dfbce2505e370788f9f22f6785f' => $vendorDir . '/markbaker/complex/classes/src/functions/cos.php', + '141cf1fb3a3046f8b64534b0ebab33ca' => $vendorDir . '/markbaker/complex/classes/src/functions/cosh.php', + 'be660df75fd0dbe7fa7c03b7434b3294' => $vendorDir . '/markbaker/complex/classes/src/functions/cot.php', + '01e31ea298a51bc9e91517e3ce6b9e76' => $vendorDir . '/markbaker/complex/classes/src/functions/coth.php', + '803ddd97f7b1da68982a7b087c3476f6' => $vendorDir . '/markbaker/complex/classes/src/functions/csc.php', + '3001cdfd101ec3c32da34ee43c2e149b' => $vendorDir . '/markbaker/complex/classes/src/functions/csch.php', + '77b2d7629ef2a93fabb8c56754a91051' => $vendorDir . '/markbaker/complex/classes/src/functions/exp.php', + '4a4471296dec796c21d4f4b6552396a9' => $vendorDir . '/markbaker/complex/classes/src/functions/inverse.php', + 'c3e9897e1744b88deb56fcdc39d34d85' => $vendorDir . '/markbaker/complex/classes/src/functions/ln.php', + 'a83cacf2de942cff288de15a83afd26d' => $vendorDir . '/markbaker/complex/classes/src/functions/log2.php', + '6a861dacc9ee2f3061241d4c7772fa21' => $vendorDir . '/markbaker/complex/classes/src/functions/log10.php', + '4d2522d968c8ba78d6c13548a1b4200e' => $vendorDir . '/markbaker/complex/classes/src/functions/negative.php', + 'fd587ca933fc0447fa5ab4843bdd97f7' => $vendorDir . '/markbaker/complex/classes/src/functions/pow.php', + '383ef01c62028fc78cd4388082fce3c2' => $vendorDir . '/markbaker/complex/classes/src/functions/rho.php', + '150fbd1b95029dc47292da97ecab9375' => $vendorDir . '/markbaker/complex/classes/src/functions/sec.php', + '549abd9bae174286d660bdaa07407c68' => $vendorDir . '/markbaker/complex/classes/src/functions/sech.php', + '6bfbf5eaea6b17a0ed85cb21ba80370c' => $vendorDir . '/markbaker/complex/classes/src/functions/sin.php', + '22efe13f1a497b8e199540ae2d9dc59c' => $vendorDir . '/markbaker/complex/classes/src/functions/sinh.php', + 'e90135ab8e787795a509ed7147de207d' => $vendorDir . '/markbaker/complex/classes/src/functions/sqrt.php', + 'bb0a7923ffc6a90919cd64ec54ff06bc' => $vendorDir . '/markbaker/complex/classes/src/functions/tan.php', + '2d302f32ce0fd4e433dd91c5bb404a28' => $vendorDir . '/markbaker/complex/classes/src/functions/tanh.php', + '24dd4658a952171a4ee79218c4f9fd06' => $vendorDir . '/markbaker/complex/classes/src/functions/theta.php', + 'e49b7876281d6f5bc39536dde96d1f4a' => $vendorDir . '/markbaker/complex/classes/src/operations/add.php', + '47596e02b43cd6da7700134fd08f88cf' => $vendorDir . '/markbaker/complex/classes/src/operations/subtract.php', + '883af48563631547925fa4c3b48ead07' => $vendorDir . '/markbaker/complex/classes/src/operations/multiply.php', + 'f190e3308e6ca23234a2875edc985c03' => $vendorDir . '/markbaker/complex/classes/src/operations/divideby.php', + 'ac9e33ce6841aa5bf5d16d465a2f03a7' => $vendorDir . '/markbaker/complex/classes/src/operations/divideinto.php', ); diff --git a/inc/vendor/composer/autoload_psr4.php b/inc/vendor/composer/autoload_psr4.php index 111fd3c..076955b 100644 --- a/inc/vendor/composer/autoload_psr4.php +++ b/inc/vendor/composer/autoload_psr4.php @@ -9,6 +9,9 @@ return array( 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'), + 'PacificSec\\CPE\\' => array($vendorDir . '/pacificsec/cpe/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), + 'Godsgood33\\Php_Db\\' => array($vendorDir . '/godsgood33/php-db/src'), + 'Complex\\' => array($vendorDir . '/markbaker/complex/classes/src'), 'Cocur\\BackgroundProcess\\' => array($vendorDir . '/cocur/background-process/src'), ); diff --git a/inc/vendor/composer/autoload_real.php b/inc/vendor/composer/autoload_real.php index 38c051b..73421f3 100644 --- a/inc/vendor/composer/autoload_real.php +++ b/inc/vendor/composer/autoload_real.php @@ -47,6 +47,24 @@ class ComposerAutoloaderInit69a0c53551ee5f4e61c53efb549e5e72 $loader->register(true); + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit69a0c53551ee5f4e61c53efb549e5e72::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire69a0c53551ee5f4e61c53efb549e5e72($fileIdentifier, $file); + } + return $loader; } } + +function composerRequire69a0c53551ee5f4e61c53efb549e5e72($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + require $file; + + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + } +} diff --git a/inc/vendor/composer/autoload_static.php b/inc/vendor/composer/autoload_static.php index 7f8651d..42ceafc 100644 --- a/inc/vendor/composer/autoload_static.php +++ b/inc/vendor/composer/autoload_static.php @@ -6,19 +6,70 @@ namespace Composer\Autoload; class ComposerStaticInit69a0c53551ee5f4e61c53efb549e5e72 { + public static $files = array ( + 'abede361264e2ae69ec1eee813a101af' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/abs.php', + '21a5860fbef5be28db5ddfbc3cca67c4' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/acos.php', + '1546e3f9d127f2a9bb2d1b6c31c26ef1' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/acosh.php', + 'd2516f7f4fba5ea5905f494b4a8262e0' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/acot.php', + '4511163d560956219b96882c0980b65e' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/acoth.php', + 'c361f5616dc2a8da4fa3e137077cd4ea' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/acsc.php', + '02d68920fc98da71991ce569c91df0f6' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/acsch.php', + '88e19525eae308b4a6aa3419364875d3' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/argument.php', + '60e8e2d0827b58bfc904f13957e51849' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/asec.php', + '13d2f040713999eab66c359b4d79871d' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/asech.php', + '838ab38beb32c68a79d3cd2c007d5a04' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/asin.php', + 'bb28eccd0f8f008333a1b3c163d604ac' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/asinh.php', + '9e483de83558c98f7d3feaa402c78cb3' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/atan.php', + '36b74b5b765ded91ee58c8ee3c0e85e3' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/atanh.php', + '05c15ee9510da7fd6bf6136f436500c0' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/conjugate.php', + 'd3208dfbce2505e370788f9f22f6785f' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/cos.php', + '141cf1fb3a3046f8b64534b0ebab33ca' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/cosh.php', + 'be660df75fd0dbe7fa7c03b7434b3294' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/cot.php', + '01e31ea298a51bc9e91517e3ce6b9e76' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/coth.php', + '803ddd97f7b1da68982a7b087c3476f6' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/csc.php', + '3001cdfd101ec3c32da34ee43c2e149b' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/csch.php', + '77b2d7629ef2a93fabb8c56754a91051' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/exp.php', + '4a4471296dec796c21d4f4b6552396a9' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/inverse.php', + 'c3e9897e1744b88deb56fcdc39d34d85' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/ln.php', + 'a83cacf2de942cff288de15a83afd26d' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/log2.php', + '6a861dacc9ee2f3061241d4c7772fa21' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/log10.php', + '4d2522d968c8ba78d6c13548a1b4200e' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/negative.php', + 'fd587ca933fc0447fa5ab4843bdd97f7' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/pow.php', + '383ef01c62028fc78cd4388082fce3c2' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/rho.php', + '150fbd1b95029dc47292da97ecab9375' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/sec.php', + '549abd9bae174286d660bdaa07407c68' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/sech.php', + '6bfbf5eaea6b17a0ed85cb21ba80370c' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/sin.php', + '22efe13f1a497b8e199540ae2d9dc59c' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/sinh.php', + 'e90135ab8e787795a509ed7147de207d' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/sqrt.php', + 'bb0a7923ffc6a90919cd64ec54ff06bc' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/tan.php', + '2d302f32ce0fd4e433dd91c5bb404a28' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/tanh.php', + '24dd4658a952171a4ee79218c4f9fd06' => __DIR__ . '/..' . '/markbaker/complex/classes/src/functions/theta.php', + 'e49b7876281d6f5bc39536dde96d1f4a' => __DIR__ . '/..' . '/markbaker/complex/classes/src/operations/add.php', + '47596e02b43cd6da7700134fd08f88cf' => __DIR__ . '/..' . '/markbaker/complex/classes/src/operations/subtract.php', + '883af48563631547925fa4c3b48ead07' => __DIR__ . '/..' . '/markbaker/complex/classes/src/operations/multiply.php', + 'f190e3308e6ca23234a2875edc985c03' => __DIR__ . '/..' . '/markbaker/complex/classes/src/operations/divideby.php', + 'ac9e33ce6841aa5bf5d16d465a2f03a7' => __DIR__ . '/..' . '/markbaker/complex/classes/src/operations/divideinto.php', + ); + public static $prefixLengthsPsr4 = array ( 'P' => array ( 'Psr\\SimpleCache\\' => 16, 'Psr\\Log\\' => 8, 'PhpOffice\\PhpSpreadsheet\\' => 25, + 'PacificSec\\CPE\\' => 15, ), 'M' => array ( 'Monolog\\' => 8, ), + 'G' => + array ( + 'Godsgood33\\Php_Db\\' => 18, + ), 'C' => array ( + 'Complex\\' => 8, 'Cocur\\BackgroundProcess\\' => 24, ), ); @@ -36,10 +87,22 @@ class ComposerStaticInit69a0c53551ee5f4e61c53efb549e5e72 array ( 0 => __DIR__ . '/..' . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet', ), + 'PacificSec\\CPE\\' => + array ( + 0 => __DIR__ . '/..' . '/pacificsec/cpe/src', + ), 'Monolog\\' => array ( 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', ), + 'Godsgood33\\Php_Db\\' => + array ( + 0 => __DIR__ . '/..' . '/godsgood33/php-db/src', + ), + 'Complex\\' => + array ( + 0 => __DIR__ . '/..' . '/markbaker/complex/classes/src', + ), 'Cocur\\BackgroundProcess\\' => array ( 0 => __DIR__ . '/..' . '/cocur/background-process/src', diff --git a/inc/vendor/composer/installed.json b/inc/vendor/composer/installed.json index bc55cf8..ddbe219 100644 --- a/inc/vendor/composer/installed.json +++ b/inc/vendor/composer/installed.json @@ -39,6 +39,152 @@ "unix" ] }, + { + "name": "godsgood33/php-db", + "version": "1.3.1", + "version_normalized": "1.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/godsgood33/php-db.git", + "reference": "cdf01f123c16dcb0b294b3b9013557e2d472f1c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/godsgood33/php-db/zipball/cdf01f123c16dcb0b294b3b9013557e2d472f1c9", + "reference": "cdf01f123c16dcb0b294b3b9013557e2d472f1c9", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.23" + }, + "require-dev": { + "phpunit/phpunit": "~7.2" + }, + "time": "2018-06-07T18:30:13+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Godsgood33\\Php_Db\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Ryan Prather", + "email": "godsgood33@gmail.com", + "role": "Developer" + } + ], + "description": "PHP Database Library", + "homepage": "https://github.com/godsgood33/php-db", + "keywords": [ + "database", + "library", + "mysql", + "mysqli" + ] + }, + { + "name": "markbaker/complex", + "version": "1.4.6", + "version_normalized": "1.4.6.0", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "a78d82ae4e682c3809fc3023d1b0ce654f6ab12b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/a78d82ae4e682c3809fc3023d1b0ce654f6ab12b", + "reference": "a78d82ae4e682c3809fc3023d1b0ce654f6ab12b", + "shasum": "" + }, + "require": { + "php": "^5.6.0|^7.0.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3", + "phpcompatibility/php-compatibility": "^8.0", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "2.*", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^4.8.35|^5.4.0", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "^3.3.0" + }, + "time": "2018-07-31T08:38:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + }, + "files": [ + "classes/src/functions/abs.php", + "classes/src/functions/acos.php", + "classes/src/functions/acosh.php", + "classes/src/functions/acot.php", + "classes/src/functions/acoth.php", + "classes/src/functions/acsc.php", + "classes/src/functions/acsch.php", + "classes/src/functions/argument.php", + "classes/src/functions/asec.php", + "classes/src/functions/asech.php", + "classes/src/functions/asin.php", + "classes/src/functions/asinh.php", + "classes/src/functions/atan.php", + "classes/src/functions/atanh.php", + "classes/src/functions/conjugate.php", + "classes/src/functions/cos.php", + "classes/src/functions/cosh.php", + "classes/src/functions/cot.php", + "classes/src/functions/coth.php", + "classes/src/functions/csc.php", + "classes/src/functions/csch.php", + "classes/src/functions/exp.php", + "classes/src/functions/inverse.php", + "classes/src/functions/ln.php", + "classes/src/functions/log2.php", + "classes/src/functions/log10.php", + "classes/src/functions/negative.php", + "classes/src/functions/pow.php", + "classes/src/functions/rho.php", + "classes/src/functions/sec.php", + "classes/src/functions/sech.php", + "classes/src/functions/sin.php", + "classes/src/functions/sinh.php", + "classes/src/functions/sqrt.php", + "classes/src/functions/tan.php", + "classes/src/functions/tanh.php", + "classes/src/functions/theta.php", + "classes/src/operations/add.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ] + }, { "name": "monolog/monolog", "version": "1.23.0", @@ -121,36 +267,62 @@ }, { "name": "pacificsec/cpe", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "version": "1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", "url": "https://github.com/pacificsec/cpe.git", - "reference": "3d78d66fc4ea249b6f353a7c48f426835a792d11" + "reference": "52cc49e04388ba00493be634287f6ce3efb30afc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pacificsec/cpe/zipball/3d78d66fc4ea249b6f353a7c48f426835a792d11", - "reference": "3d78d66fc4ea249b6f353a7c48f426835a792d11", + "url": "https://api.github.com/repos/pacificsec/cpe/zipball/52cc49e04388ba00493be634287f6ce3efb30afc", + "reference": "52cc49e04388ba00493be634287f6ce3efb30afc", "shasum": "" }, + "require": { + "php": ">=5.3.0" + }, + "time": "2018-08-22T17:55:09+00:00", "type": "library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/" + "installation-source": "source", + "autoload": { + "psr-4": { + "PacificSec\\CPE\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio Franco", + "email": "antonio.franco@pacificsec.com" + } + ], + "description": "CPE: Common Platform Enumeration for PHP", + "homepage": "https://github.com/pacificsec/cpe", + "keywords": [ + "cpe", + "cve", + "pacificsec", + "security" + ] }, { "name": "phpoffice/phpspreadsheet", - "version": "1.2.1", - "version_normalized": "1.2.1.0", + "version": "1.4.0", + "version_normalized": "1.4.0.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "36acc372875c4d894dc093825ce4f62209db5a76" + "reference": "125f462a718956f37d81305ca0df4f17cef0f3b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/36acc372875c4d894dc093825ce4f62209db5a76", - "reference": "36acc372875c4d894dc093825ce4f62209db5a76", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/125f462a718956f37d81305ca0df4f17cef0f3b9", + "reference": "125f462a718956f37d81305ca0df4f17cef0f3b9", "shasum": "" }, "require": { @@ -166,6 +338,7 @@ "ext-xmlwriter": "*", "ext-zip": "*", "ext-zlib": "*", + "markbaker/complex": "^1.4.1", "php": "^5.6|^7.0", "psr/simple-cache": "^1.0" }, @@ -175,7 +348,7 @@ "jpgraph/jpgraph": "^4.0", "mpdf/mpdf": "^7.0.0", "phpunit/phpunit": "^5.7", - "squizlabs/php_codesniffer": "^2.7", + "squizlabs/php_codesniffer": "^3.3", "tecnickcom/tcpdf": "^6.2" }, "suggest": { @@ -184,7 +357,7 @@ "mpdf/mpdf": "Option for rendering PDF with PDF Writer", "tecnick.com/tcpdf": "Option for rendering PDF with PDF Writer" }, - "time": "2018-04-10T03:53:16+00:00", + "time": "2018-08-06T02:58:06+00:00", "type": "library", "installation-source": "source", "autoload": { diff --git a/inc/vendor/godsgood33/php-db/.gitattributes b/inc/vendor/godsgood33/php-db/.gitattributes new file mode 100644 index 0000000..bdb0cab --- /dev/null +++ b/inc/vendor/godsgood33/php-db/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/inc/vendor/godsgood33/php-db/.gitignore b/inc/vendor/godsgood33/php-db/.gitignore new file mode 100644 index 0000000..b0fbc01 --- /dev/null +++ b/inc/vendor/godsgood33/php-db/.gitignore @@ -0,0 +1,4 @@ +.settings/ +.buildpath +code-coverage/ +/vendor/ diff --git a/inc/vendor/godsgood33/php-db/.scrutinizer.yml b/inc/vendor/godsgood33/php-db/.scrutinizer.yml new file mode 100644 index 0000000..5653d85 --- /dev/null +++ b/inc/vendor/godsgood33/php-db/.scrutinizer.yml @@ -0,0 +1,26 @@ +checks: + php: true + +filter: + paths: ["src/*"] + +tools: + external_code_coverage: + timeout: 600 + php_sim: true + php_pdepend: true + php_analyzer: true + php_cs_fixer: true + +build: + nodes: + analysis: + tests: + override: + - php-scrutinizer-run + +build_failure_conditions: + - 'elements.rating(<= C).new.exists' # No new classes/methods with a rating of C or worse allowed + - 'issues.severity(>= MAJOR).new.exists' # New issues of major or higher severity + - 'project.metric_change("scrutinizer.test_coverage", < 0)' # Code Coverage decreased from previous inspection + - 'patches.label("Unused Use Statements").new.exists' # No new unused imports patches allowed \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/LICENSE b/inc/vendor/godsgood33/php-db/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/inc/vendor/godsgood33/php-db/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/inc/vendor/godsgood33/php-db/README.md b/inc/vendor/godsgood33/php-db/README.md new file mode 100644 index 0000000000000000000000000000000000000000..80e791204cb6fc02f457c91e01c796f20ea9ab2c GIT binary patch literal 7252 zcmc(kYj0ac5Qg__koXUWv>(!nB&02O71RrYqC%jgst`fQiJiu+W2eVXLqPm>;C*&H zo;|)LBvp}hnseEm%R4jg>~8=0`&z2f59u3SReG52r+3pk>6i4LuKVdEbyF|3_2s8D zN-bR{X_$UZYw1w;qjapN&(fxT!?d4jeI02=U)LY0qvv(K?WPU=J4ihric5G-&U+=%vyStLu()Ur;bmOg9<#w!Ry^hD` zlqG@SgY02P_;L3-TiVKgy=@GMK&k)#MUwc{ie6utaX1r6@Z;Lix2}+`#{af-*VDbt zt<#yFM;b#Ms`N+~_jp-pOh>*nLgw-foBMi06_}>3M)vb;{vw%~ZDn+=QOMoU+i5>K z>359)srFc7csz}Tjl#2bW3>4Vj?8$OtwS!>g$dM$P*Ytx&IvR@v-mUA+Jz;1#Vc#HI?~xj4oJDa}dTPaBGe?7J z>T6zC@g$Ssj@608r+Nzei1xAc+|dPw%N|a$#auAlgG4ZWL3qQ!p z6U}tQ(2K{8BofUJyv0lY5?ib$e)evl$i2|B)dW^qZuhdJQ$2fCuB7YIx2NxSb%Erm z{(dc;)2zO$+95K(DQ0_VSN}F^WKDj3K9PGfZKo&c=H!`L;CEd%5hW}yH6G=dypnxg zp-z4T&Z`;8)d|-Ad@Nhr8Vf4S2!vNBwuIg{*# zXzb;fc*N}Oz4U$hSz}8qN{%!(?Mo(^=~|~VmhO($PLZ`;)lJN3YWLiKsQ7Iw=2%PR zpu_o*EQ7Bt^M?A~&rzV(tmg35c-ux%Z&ZaWRkJ|NIzpg ztH?4EhEmD*hHlB39uL@o_sp@i4;^N<8_Y*6bQt&Fmn^E(IKp~Juv0hJk6Q{NhMCtq zOo0tZ;0t*BeZ&sV0af^p@6pxFM)a|gg9)s+5xZbZD&APaP>Fant9uq#@So1L*V)z+ z$@KoWlUa{y_n6~xiT7+jc7}`Y6aF5^7kDx_+A$$du^zk29Hi&eOp5jRcPXj&;eY3K8pklYhiSI;#kNrJNL$Zhjd5Kuw!TPalTB7tRxOoyj+&spz>hp-mT?|v zksqGzNMMBRc)D3%nLVzFy^ryXahzulRoPN>e9aR%>y>Tez3Q4+dM@&IC`)XOv8KD| zCLr7rzp;A5QoOR&f3V?IvL$k*X(-2{2SST1F>tu& zKepVX=2+j0vg?i9pUtB{^pm-WKDmMg^YosNDqen?ZDHL2o4}gOeJ@8g{aq6ig1xV( zeQo+eZ>-wNSkMuyW7-NdS%Hyb zv2KqHG|shifPI~f1uOcwoaF;-K9J2Y1X;(LgtKjI*w3@v7ONKPNnxR%eM}>K5$lYF zu*`MD4%4(*hluYF@*WC*ruF&WpEFP65YKp6&ZHUpM>Z`(H;@A%XVelqP7h1$Lau2u zeh=GcBgiROFC)%w8+%y=lSSS$W3|^riM^R>`EPncj_;y<*WT1> zY=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "478465659fd987669df0bd8a9bf22a8710e5f1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/478465659fd987669df0bd8a9bf22a8710e5f1b6", + "reference": "478465659fd987669df0bd8a9bf22a8710e5f1b6", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2018-05-29T17:25:09+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2017-03-05T18:14:27+00:00" + }, + { + "name": "phar-io/version", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2017-03-05T17:38:23+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-30T07:14:17+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.6", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2018-04-18T13:57:24+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "6.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a", + "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.1", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "suggest": { + "ext-xdebug": "^2.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2018-06-01T07:51:50+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "e20525b0c2945c7c317fff95660698cb3d2a53bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/e20525b0c2945c7c317fff95660698cb3d2a53bc", + "reference": "e20525b0c2945c7c317fff95660698cb3d2a53bc", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-05-28T12:13:49+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2018-02-01T13:07:23+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2018-02-01T13:16:43+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "7.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "00bc0b93f0ff4f557e9ea766557fde96da9a03dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/00bc0b93f0ff4f557e9ea766557fde96da9a03dd", + "reference": "00bc0b93f0ff4f557e9ea766557fde96da9a03dd", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.1", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.0", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpunit/phpunit-mock-objects": "*" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2018-06-05T03:40:05+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ed5fd2281113729f1ebcc64d101ad66028aeb3d5", + "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5", + "shasum": "" + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-04-18T13:33:00+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "e09160918c66281713f1c324c1f4c4c3037ba1e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/e09160918c66281713f1c324c1f4c4c3037ba1e8", + "reference": "e09160918c66281713f1c324c1f4c4c3037ba1e8", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2018-02-01T13:45:15+00:00" + }, + { + "name": "sebastian/environment", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2017-07-01T08:51:00+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2017-04-03T13:19:02+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2017-04-07T12:08:54+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2018-01-29T19:49:41+00:00" + } + ], + "aliases": [], + "minimum-stability": "beta", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/inc/vendor/godsgood33/php-db/examples/create_table_json.json b/inc/vendor/godsgood33/php-db/examples/create_table_json.json new file mode 100644 index 0000000..08cc67a --- /dev/null +++ b/inc/vendor/godsgood33/php-db/examples/create_table_json.json @@ -0,0 +1,136 @@ +{ + "tables": [ + { + "schema": "db", + "name": "settings", + "primary_key": [ + "id" + ], + "unique": [ + "meta_key" + ], + "fields": [ + { + "name": "id", + "dataType": "int(11)", + "type": 3, + "length": 11, + "values": [], + "ai": true, + "nn": true, + "default": "" + }, + { + "name": "meta_key", + "dataType": "varchar(100)", + "type": 253, + "length": 100, + "values": [], + "ai": false, + "nn": true, + "default": "" + }, + { + "name": "meta_value", + "dataType": "mediumtext", + "type": 250, + "length": null, + "values": [], + "ai": false, + "nn": false, + "default": null + } + ] + }, + { + "schema": "db", + "name": "test", + "primary_key": [ + "id", + "fk" + ], + "fields": [ + { + "name": "id", + "dataType": "int(11)", + "type": 3, + "length": 11, + "values": [], + "ai": true, + "nn": true, + "default": "" + }, + { + "name": "fk", + "dataType": "int(11)", + "type": 3, + "length": 11, + "values": [], + "ai": false, + "nn": true, + "default": "" + }, + { + "name": "default", + "dataType": "tinyint(1)", + "type": 1, + "length": 1, + "values": [], + "ai": false, + "nn": false, + "default": "0" + }, + { + "name": "enum", + "dataType": "enum", + "type": 247, + "length": null, + "values": [ + "1", + "2" + ], + "ai": false, + "nn": false, + "default": "1" + } + ], + "constraints": [ + { + "id": "con_1", + "local": "fk", + "schema": "db", + "table": "test", + "field": "id", + "update": null, + "delete": null + } + ], + "index": [ + { + "id": "default_idx", + "type": "index", + "ref": "default" + } + ] + }, + { + "schema": "db", + "name": "test2", + "primary_key": [ + "id" + ], + "fields": [ + { + "name": "id", + "dataType": "int(11)", + "type": 3, + "length": 11, + "values": [], + "ai": true, + "nn": true, + "default": "" + } + ] + } + ] +} \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/phpunit.xml b/inc/vendor/godsgood33/php-db/phpunit.xml new file mode 100644 index 0000000..4ff2356 --- /dev/null +++ b/inc/vendor/godsgood33/php-db/phpunit.xml @@ -0,0 +1,16 @@ + + + + + tests/ + + + + + src/ + + + \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/src/DBConfig.php b/inc/vendor/godsgood33/php-db/src/DBConfig.php new file mode 100644 index 0000000..002d7bc --- /dev/null +++ b/inc/vendor/godsgood33/php-db/src/DBConfig.php @@ -0,0 +1,50 @@ +_c = $dbh; + } else { + if (PHP_DB_SERVER == '{IP|hostname}' || PHP_DB_USER == '{username}' || PHP_DB_PWD == '{password}' || PHP_DB_SCHEMA == '{schema}') { + throw new Error("Need to update DBConfig.php", E_ERROR); + } + $this->_c = new mysqli(PHP_DB_SERVER, PHP_DB_USER, PHP_DB_PWD, PHP_DB_SCHEMA); + } + + if ($this->_c->connect_errno) { + throw new Error("Could not create database class due to error {$this->_c->error}", E_ERROR); + } + + $this->_logPath = $strLogPath; + touch($this->_logPath . "/db.log"); + + $this->_logger = new Logger('db', [ + new StreamHandler(realpath($this->_logPath . "/db.log"), $this->_logLevel) + ]); + + if (PHP_SAPI == 'cli') { + $stream = new StreamHandler("php://output", $this->_logLevel); + $stream->setFormatter(new LineFormatter("%datetime% %level_name% %message%" . PHP_EOL, "H:i:s.u")); + $this->_logger->pushHandler($stream); + } + + $this->_logger->info("Database connected"); + $this->_logger->debug("Connection details:", [ + 'Server' => PHP_DB_SERVER, + 'User' => PHP_DB_USER, + 'Schema' => PHP_DB_SCHEMA + ]); + + $this->setVar("time_zone", "+00:00"); + $this->setVar("sql_mode", ""); + } + + /** + * Function to make sure that the database is connected + * + * @return boolean + */ + public function isConnected() + { + $this->_logger->debug("Pinging server"); + return $this->_c->ping(); + } + + /** + * Setter function for _logger + * + * @param Logger $log + */ + public function setLogger(Logger $log) + { + $this->_logger->debug("Setting logger"); + $this->_logger = $log; + } + + /** + * Getter function for _logger + * + * @return string + */ + public function getLogLevel() + { + $this->_logger->debug("Getting log level ({$this->_logLevel})"); + return $this->_logLevel; + } + + /** + * Function to set the log level just in case there needs to be a change to the default log level + * + * @param string $strLevel + */ + public function setLogLevel($strLevel) + { + $this->_logger->debug("Setting log level to {$strLevel}"); + $this->_logLevel = $strLevel; + + $handles = []; + + foreach ($this->_logger->getHandlers() as $h) { + $h->/** @scrutinizer ignore-call */ + setLevel($strLevel); + $handles[] = $h; + } + + $this->_logger->setHandlers($handles); + } + + /** + * Getter function for _queryType + * + * @return int + */ + public function getQueryType() + { + return $this->_queryType; + } + + /** + * Setter function for _queryType + * + * @param int $qt + */ + public function setQueryType($qt) + { + $this->_queryType = $qt; + } + + /** + * Getter function for _sql + * + * @return string + */ + public function getSql() + { + return $this->_sql; + } + + /** + * Function to return the currently selected database schema + * + * @return string + */ + public function getSchema() + { + if ($res = $this->_c->query("SELECT DATABASE()")) { + $row = $res->fetch_row(); + + $this->_logger->debug("Getting schema {$row[0]}"); + return $row[0]; + } + return null; + } + + /** + * Function to set schema + * + * @param string $strSchema + */ + public function setSchema($strSchema) + { + $this->_logger->debug("Setting schema to {$strSchema}"); + if (! $this->_c->select_db($strSchema)) { + $this->_logger->emergency("Unknown schema {$strSchema}"); + return false; + } + return true; + } + + /** + * Method to set a MYSQL variable + * + * @param string $strName + * @param string $strVal + * + * @return boolean + */ + public function setVar($strName, $strVal) + { + if (! $strName || ! $strVal) { + $this->_logger->debug("name or value are blank", [ + 'name' => $strName, + 'value' => $strVal + ]); + return false; + } + + $this->_logger->debug("Setting {$strName} = '{$strVal}'"); + + if ($this->_c->real_query("SET $strName = {$this->_escape($strVal)}")) { + return true; + } else { + $this->_logger->error("Failed to set variable {$this->_c->error}"); + return false; + } + } + + /** + * Function to execute the statement + * + * @param mixed $return + * [optional] + * MYSQLI constant to control what is returned from the mysqli_result object + * @param string $class + * [optional] + * Class to use when returning object + * @param string $strSql + * [optional] + * Optional SQL query + * + * @throws \Exception + * @throws \InvalidArgumentException + * + * @return mixed + */ + public function execute($return = MYSQLI_ASSOC, $class = null, $strSql = null) + { + if (! is_null($strSql)) { + $this->_sql = $strSql; + } + + $query = 'SELECT'; + switch ($this->_queryType) { + case self::SELECT_COUNT: + $query = 'SELECT COUNT'; + break; + case self::INSERT: + case self::EXTENDED_INSERT: + $query = 'INSERT'; + break; + case self::UPDATE: + case self::EXTENDED_UPDATE: + $query = 'UPDATE'; + break; + case self::REPLACE: + case self::EXTENDED_REPLACE: + $query = 'REPLACE'; + break; + case self::DROP: + $query = 'DROP'; + break; + case self::DELETE: + $query = 'DELETE'; + break; + case self::CREATE_TABLE: + $query = 'CREATE TABLE'; + break; + case self::TRUNCATE: + $query = 'TRUNCATE'; + break; + } + + if (is_a($this->_c, 'mysqli')) { + if (! $this->_c->ping()) { + require_once 'DBConfig.php'; + $this->_c = null; + $this->_c = new mysqli(PHP_DB_SERVER, PHP_DB_USER, PHP_DB_PWD, PHP_DB_SCHEMA); + } + } else { + throw new \Error('Database was not connected', E_ERROR); + } + + $this->_logger->info("Executing {$query} query"); + $this->_logger->debug($this->_sql); + + try { + if (in_array($this->_queryType, [ + self::SELECT, + self::SELECT_COUNT + ])) { + $this->_result = $this->_c->query($this->_sql); + if ($this->_c->error) { + $this->_logger->error("There is an error {$this->_c->error}"); + $this->_logger->debug("Errored on query", [$this->_sql]); + throw new Exception("There was an error {$this->_c->error}", E_ERROR); + } + } else { + $this->_result = $this->_c->real_query($this->_sql); + if ($this->_c->errno) { + $this->_logger->error("There was an error {$this->_c->error}"); + $this->_logger->debug("Errored on query", [$this->_sql]); + throw new Exception("There was an error {$this->_c->error}", E_ERROR); + } + } + + if ($return == MYSQLI_OBJECT && ! is_null($class) && class_exists(/** @scrutinizer ignore-type */$class)) { + $this->_logger->debug("Checking results for query", [ + 'class' => get_class($class) + ]); + $this->_result = $this->checkResults($return, $class); + } elseif ($return == MYSQLI_OBJECT && is_null($class)) { + $this->_logger->debug("Checking results for query", [ + 'class' => 'stdClass' + ]); + $this->_result = $this->checkResults($return, 'stdClass'); + } else { + $this->_logger->debug("Checking results for query and returning associative array"); + $this->_result = $this->checkResults(MYSQLI_ASSOC); + } + } catch (Exception $e) {} + + return $this->_result; + } + + /** + * Function to check the results and return what is expected + * + * @param mixed $returnType + * [optional] + * Optional return mysqli_result return type + * @param mixed $class + * + * @return mixed + */ + public function checkResults($returnType = MYSQLI_ASSOC, $class = null) + { + $res = null; + + switch ($this->_queryType) { + case self::SELECT_COUNT: + if (! is_a($this->_result, 'mysqli_result')) { + $this->_logger->error("Error with return on query"); + return; + } + + if ($this->_result->num_rows == 1) { + $row = $this->_result->fetch_assoc(); + if (isset($row['count'])) { + $this->_logger->debug("Returning SELECT_COUNT query", [ + 'count' => $row['count'] + ]); + $res = $row['count']; + } + } elseif ($this->_result->num_rows > 1) { + $this->_logger->debug("Returning SELECT_COUNT query", [ + 'count' => $this->_result->num_rows + ]); + $res = $this->_result->num_rows; + } + + mysqli_free_result($this->_result); + + return $res; + case self::SELECT: + if (! is_a($this->_result, 'mysqli_result')) { + $this->_logger->error("Error with return on query"); + return; + } + + if ($returnType == MYSQLI_OBJECT && ! is_null($class) && class_exists($class)) { + if ($this->_result->num_rows == 1) { + $this->_logger->debug("Returning object from SELECT query", [ + 'type' => get_class($class) + ]); + $res = $this->_result->fetch_object($class); + } elseif ($this->_result->num_rows > 1) { + $this->_logger->debug("Returning object array from SELECT query", [ + 'type' => get_class($class) + ]); + while ($row = $this->_result->fetch_object($class)) { + $res[] = $row; + } + } + } else { + if ($this->_result->num_rows == 1) { + $this->_logger->debug("Fetching results"); + $res = $this->_result->fetch_array($returnType); + } elseif ($this->_result->num_rows > 1) { + $this->_logger->debug("Fetching results array"); + $res = $this->fetchAll($returnType); + } + } + + mysqli_free_result($this->_result); + + return $res; + case self::INSERT: + if ($this->_c->error) { + $this->_logger->error("Database Error {$this->_c->error}"); + return 0; + } + + if ($this->_c->insert_id) { + $this->_logger->debug("Insert successful returning insert_id", [ + 'id' => $this->_c->insert_id + ]); + return $this->_c->insert_id; + } elseif ($this->_c->affected_rows) { + $this->_logger->debug("Insert successful return affected row count", [ + 'count' => $this->_c->affected_rows + ]); + return $this->_c->affected_rows; + } + + $this->_logger->debug("Insert successful, but no ID so returning 1 for success"); + + return 1; + // intentional fall through + case self::EXTENDED_INSERT: + // intentional fall through + case self::EXTENDED_REPLACE: + // intentional fall through + case self::EXTENDED_UPDATE: + // intentional fall through + case self::REPLACE: + // intentional fall through + case self::UPDATE: + // intentional fall through + case self::DELETE: + // intentional fall through + case self::ALTER_TABLE: + if ($this->_c->error) { + $this->_logger->error("Database Error {$this->_c->error}"); + return false; + } elseif ($this->_c->affected_rows) { + $this->_logger->debug("Returning affected row count for {$this->_queryType}", [ + 'count' => $this->_c->affected_rows + ]); + return $this->_c->affected_rows; + } else { + return true; + } + break; + case self::CREATE_TABLE: + // intentional fall through + case self::DROP: + // intentional fall through + case self::TRUNCATE: + $this->_logger->debug("Returning from {$this->_queryType}"); + return true; + } + } + + /** + * Function to pass through calling the query function (used for backwards compatibility and for more complex queries that aren't currently supported) + * Nothing is escaped + * + * @param string $strSql + * [optional] + * Optional query to pass in and execute + * + * @return \mysqli_result|boolean + */ + public function query($strSql = null) + { + if (is_null($strSql)) { + return $this->_c->query($this->_sql); + } else { + return $this->_c->query($strSql); + } + } + + /** + * A function to build a select query + * + * @param string $strTableName + * The table to query + * @param array|string $fields + * [optional] + * Optional array of fields to return (defaults to '*') + * @param array $arrWhere + * [optional] + * Optional 2-dimensional array to build where clause from + * @param array $arrFlags + * [optional] + * Optional 2-dimensional array to allow other flags + * + * @see Database::where() + * @see Database::flags() + * + * @throws \InvalidArgumentException + * + * @return mixed + */ + public function select($strTableName, $fields = null, $arrWhere = [], $arrFlags = []) + { + $this->_sql = null; + $this->_queryType = self::SELECT; + + if (! is_null($strTableName)) { + $this->_logger->debug("Starting SELECT query of {$strTableName}", [ + 'fields' => $this->fields($fields) + ]); + $this->_sql = "SELECT " . $this->fields($fields) . " FROM $strTableName"; + } else { + $this->_logger->emergency("Table name is invalid or wrong type"); + throw new Error("Table name is invalid"); + } + + if (isset($arrFlags['joins']) && is_array($arrFlags['joins']) && count($arrFlags['joins'])) { + $this->_logger->debug("Adding joins", [ + 'joins' => implode(' ', $arrFlags['joins']) + ]); + $this->_sql .= " " . implode(" ", $arrFlags['joins']); + } else { + $this->_logger->debug("No joins"); + } + + if (! is_null($arrWhere) && is_array($arrWhere) && count($arrWhere)) { + $where_str = " WHERE"; + $this->_logger->debug("Parsing where clause and adding to query"); + foreach ($arrWhere as $x => $w) { + $where_str .= $this->parseClause($w, $x); + } + if (strlen($where_str) > strlen(" WHERE")) { + $this->_sql .= $where_str; + } + } + + if (is_array($arrFlags) && count($arrFlags)) { + $this->_logger->debug("Parsing flags and adding to query", $arrFlags); + $this->_sql .= $this->flags($arrFlags); + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to build a query to check the number of rows in a table + * + * @param string $strTableName + * The table to query + * @param array $arrWhere + * [optional] + * Optional 2-dimensional array to build where clause + * @param array $arrFlags + * [optional] + * Optional 2-dimensional array to add flags + * + * @see Database::where() + * @see Database::flags() + * + * @return string|NULL + */ + public function selectCount($strTableName, $arrWhere = [], $arrFlags = []) + { + $this->_sql = null; + $this->_queryType = self::SELECT_COUNT; + + if (! is_null($strTableName)) { + $this->_sql = "SELECT COUNT(1) AS 'count' FROM $strTableName"; + } else { + $this->_logger->emergency("Table name is invalid or wrong type"); + throw new Error("Table name is invalid"); + } + + if (isset($arrFlags['joins']) && is_array($arrFlags['joins'])) { + $this->_sql .= " " . implode(" ", $arrFlags['joins']); + } + + if (! is_null($arrWhere) && is_array($arrWhere) && count($arrWhere)) { + $where_str = " WHERE"; + foreach ($arrWhere as $x => $w) { + $where_str .= $this->parseClause($w, $x); + } + if (strlen($where_str) > strlen(" WHERE")) { + $this->_sql .= $where_str; + } + } + + if (is_array($arrFlags) && count($arrFlags)) { + $this->_sql .= $this->flags($arrFlags); + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to build an insert query statement + * + * @param string $strTableName + * @param array|string $arrParams + * @param boolean $blnToIgnore + * + * @return string|NULL + */ + public function insert($strTableName, $arrParams = null, $blnToIgnore = false) + { + $this->_sql = null; + $this->_queryType = self::INSERT; + + if (! is_null($strTableName)) { + $this->_sql = "INSERT" . ($blnToIgnore ? " IGNORE" : "") . " INTO $strTableName" . (is_array($arrParams) && count($arrParams) ? " (`" . implode("`,`", array_keys($arrParams)) . "`)" : null); + } else { + throw new Error("Table name is invalid"); + } + + if (is_array($arrParams) && count($arrParams)) { + $this->_sql .= " VALUES (" . implode(",", array_map([ + $this, + '_escape' + ], array_values($arrParams))) . ")"; + } elseif (is_string($arrParams) && stripos($arrParams, 'SELECT') !== false) { + $this->_sql .= " {$arrParams}"; + } else { + throw new Error("Invalid type passed to insert " . gettype($arrParams)); + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to create an extended insert query statement + * + * @param string $strTableName + * The table name that the data is going to be inserted on + * @param array $arrFields + * An array of field names that each value represents + * @param array|string $params + * An array of array of values or a string with a SELECT statement to populate the insert with + * @param boolean $blnToIgnore + * [optional] + * Boolean to decide if we need to use the INSERT IGNORE INTO syntax + * + * @return NULL|string Returns the SQL if self::$autorun is set to false, else it returns the output from running. + */ + public function extendedInsert($strTableName, $arrFields, $params, $blnToIgnore = false) + { + $this->_sql = null; + $this->_queryType = self::EXTENDED_INSERT; + + if (! is_null($strTableName) && is_string($strTableName)) { + $this->_sql = "INSERT " . ($blnToIgnore ? "IGNORE " : "") . "INTO $strTableName " . "(`" . implode("`,`", $arrFields) . "`)"; + } else { + throw new Error("Table name is invalid"); + } + + if (is_array($params) && count($params)) { + $this->_sql .= " VALUES "; + if (isset($params[0]) && is_array($params[0])) { + foreach ($params as $p) { + if (count($p) != count($arrFields)) { + $this->_logger->emergency("Inconsistent number of fields to values in extended_insert", [ + $p + ]); + throw new Error("Inconsistent number of fields in fields and values in extended_insert " . print_r($p, true)); + } + $this->sql .= "(" . implode(",", array_map([$this, '_escape'], array_values($p))) . ")"; + + if ($p != end($params)) { + $this->_sql .= ","; + } + } + } else { + $this->sql .= "(" . implode("),(", array_map([$this, '_escape'], array_values($params))) . ")"; + } + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Build a statement to update a table + * + * @param string $strTableName + * The table name to update + * @param array $arrParams + * Name/value pairs of the field name and value + * @param array $arrWhere + * [optional] + * Two-dimensional array to create where clause + * @param array $arrFlags + * [optional] + * Two-dimensional array to create other flag options (joins, order, and group) + * + * @see Database::where() + * @see Database::flags() + * + * @return NULL|string + */ + public function update($strTableName, $arrParams, $arrWhere = [], $arrFlags = []) + { + $this->_sql = "UPDATE "; + $this->_queryType = self::UPDATE; + + if (! is_null($strTableName) && is_string($strTableName)) { + $this->_sql .= $strTableName; + + if (isset($arrFlags['joins']) && is_array($arrFlags['joins'])) { + $this->_sql .= " " . implode(" ", $arrFlags['joins']); + unset($arrFlags['joins']); + } + + $this->_sql .= " SET "; + } else { + throw new Error("Table name is invalid"); + } + + if (is_array($arrParams) && count($arrParams)) { + foreach ($arrParams as $f => $p) { + if ((strpos($f, "`") === false) && (strpos($f, ".") === false) && (strpos($f, "*") === false) && (stripos($f, " as ") === false)) { + $f = "`{$f}`"; + } + + if (! is_null($p)) { + $this->_sql .= "$f={$this->_escape($p)},"; + } else { + $this->_sql .= "$f=NULL,"; + } + } + } else { + throw new Error("No fields to update"); + } + + $this->_sql = substr($this->_sql, 0, - 1); + + if (! is_null($arrWhere) && is_array($arrWhere) && count($arrWhere)) { + $where_str = " WHERE"; + foreach ($arrWhere as $x => $w) { + $where_str .= $this->parseClause($w, $x); + } + if (strlen($where_str) > strlen(" WHERE")) { + $this->_sql .= $where_str; + } + } + + if (! is_null($arrFlags) && is_array($arrFlags) && count($arrFlags)) { + $this->_sql .= $this->flags($arrFlags); + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to offer an extended updated functionality by using two different tables. + * + * @param string $strTableToUpdate + * The table that you want to update (alias 'tbu' is automatically added) + * @param string $strOriginalTable + * The table with the data you want to overwrite to_be_updated table (alias 'o' is automatically added) + * @param string $strLinkField + * The common index value between them that will join the fields + * @param array|string $arrParams + * If string only a single field is updated (tbu.$params = o.$params) + * If array each element in the array is a field to be updated (tbu.$param = o.$param) + * + * @return mixed + */ + public function extendedUpdate($strTableToUpdate, $strOriginalTable, $strLinkField, $arrParams) + { + $this->_sql = "UPDATE "; + $this->_queryType = self::EXTENDED_UPDATE; + + if (! is_null($strTableToUpdate) && ! is_null($strOriginalTable) && ! is_null($strLinkField)) { + $this->_sql .= "$strTableToUpdate tbu INNER JOIN $strOriginalTable o USING ($strLinkField) SET "; + } else { + throw new Error("Missing necessary fields"); + } + + if (is_array($arrParams) && count($arrParams)) { + foreach ($arrParams as $param) { + if ($param != $strLinkField) { + $this->_sql .= "tbu.`$param` = o.`$param`,"; + } + } + $this->_sql = substr($this->_sql, 0, - 1); + } elseif (is_string($arrParams)) { + $this->_sql .= "tbu.`$arrParams` = o.`$arrParams`"; + } else { + throw new Exception("Do not understand datatype " . gettype($arrParams), E_ERROR); + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to build a replace query + * + * @param string $strTableName + * The table to update + * @param array $arrParams + * Name/value pair to insert + * + * @return NULL|string + */ + public function replace($strTableName, $arrParams) + { + $this->_sql = null; + $this->_queryType = self::REPLACE; + + if (! is_null($strTableName) && is_string($strTableName)) { + $this->_sql = "REPLACE INTO $strTableName " . "(`" . implode("`,`", array_keys($arrParams)) . "`)"; + } else { + throw new Error("Table name is invalid"); + } + + $this->_sql .= " VALUES (" . implode(",", array_map([ + $this, + '_escape' + ], array_values($arrParams))) . ")"; + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to build an extended replace statement + * + * @param string $strTableName + * Table name to update + * @param array $arrFields + * Array of fields + * @param array $arrParams + * Two-dimensional array of values + * + * @return NULL|string + */ + public function extendedReplace($strTableName, $arrFields, $arrParams) + { + $this->_sql = null; + $this->_queryType = self::EXTENDED_REPLACE; + + if (! is_array($arrFields) || ! count($arrFields)) { + throw new Exception("Error with the field type"); + } + + if (! is_null($strTableName) && is_string($strTableName)) { + $this->_sql = "REPLACE INTO $strTableName " . "(`" . implode("`,`", $arrFields) . "`)"; + } else { + throw new Error("Table name is invalid"); + } + + if (is_array($arrParams) && count($arrParams)) { + $this->_sql .= " VALUES "; + foreach ($arrParams as $p) { + $this->_sql .= "(" . implode(",", array_map([ + $this, + '_escape' + ], array_values($p))) . ")"; + + if ($p != end($arrParams)) { + $this->_sql .= ","; + } + } + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to build a delete statement + * + * @param string $strTableName + * Table name to act on + * @param array $arrFields + * [optional] + * Optional list of fields to delete (used when including multiple tables) + * @param array $arrWhere + * [optional] + * Optional 2-dimensional array to build where clause from + * @param array $arrJoins + * [optional] + * Optional 2-dimensional array to add other flags + * + * @see Database::where() + * @see Database::flags() + * + * @return string|NULL + */ + public function delete($strTableName, $arrFields = [], $arrWhere = [], $arrJoins = []) + { + $this->_sql = "DELETE"; + $this->_queryType = self::DELETE; + + $this->_logger->debug("Deleting table data"); + + if (! is_null($arrFields) && is_array($arrFields) && count($arrFields)) { + $this->_sql .= " " . implode(",", $arrFields); + } + + if (! is_null($strTableName) && is_string($strTableName)) { + $this->_sql .= " FROM $strTableName"; + } else { + throw new Error("Table name is invalid"); + } + + if (! is_null($arrJoins) && is_array($arrJoins) && count($arrJoins)) { + $this->_sql .= " " . implode(" ", $arrJoins); + } + + if (! is_null($arrWhere) && is_array($arrWhere) && count($arrWhere)) { + $where_str = " WHERE"; + foreach ($arrWhere as $x => $w) { + $where_str .= $this->parseClause($w, $x); + } + if (strlen($where_str) > strlen(" WHERE")) { + $this->_sql .= $where_str; + } + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to build a drop table statement (automatically executes) + * + * @param string $strTableName + * Table to drop + * @param string $strType + * [optional] + * Type of item to drop ('table', 'view') (defaulted to 'table') + * @param boolean $blnIsTemp + * [optional] + * Optional boolean if this is a temporary table + * + * @return string|NULL + */ + public function drop($strTableName, $strType = 'table', $blnIsTemp = false) + { + $this->_sql = null; + $this->_queryType = self::DROP; + + switch ($strType) { + case 'table': + $strType = 'TABLE'; + break; + case 'view': + $strType = 'VIEW'; + break; + default: + throw new Error("Invalid type " . gettype($strType), E_ERROR); + } + + if (! is_null($strTableName) && is_string($strTableName)) { + $this->_sql = "DROP" . ($blnIsTemp ? " TEMPORARY" : "") . " $strType IF EXISTS `{$strTableName}`"; + } else { + throw new Error("Table name is invalid"); + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to build a truncate table statement (automatically executes) + * + * @param string $strTableName + * Table to truncate + * + * @throws \Error + * + * @return string|NULL + */ + public function truncate($strTableName) + { + $this->_sql = null; + $this->_queryType = self::TRUNCATE; + + if (! is_null($strTableName) && is_string($strTableName)) { + $this->_sql = "TRUNCATE TABLE $strTableName"; + } else { + throw new Error("Table name is invalid"); + } + + if (self::$autorun) { + return $this->execute(MYSQLI_BOTH); + } + + return $this->_sql; + } + + /** + * Function to build a create temporary table statement + * + * @param string $strTableName + * Name to give the table when creating + * @param boolean $blnIsTemp + * [optional] + * Optional boolean to make the table a temporary table + * @param mixed $strSelect + * [optional] + * Optional parameter if null uses last built statement + * If string, will be made the SQL statement executed to create the table + * If array, 2-dimensional array with "field", "datatype" values to build table fields + * + * @return NULL|string + */ + public function createTable($strTableName, $blnIsTemp = false, $strSelect = null) + { + $this->_queryType = self::CREATE_TABLE; + + if (is_null($strSelect) && ! is_null($this->_sql) && substr($this->_sql, 0, 6) == 'SELECT') { + $this->_sql = "CREATE" . ($blnIsTemp ? " TEMPORARY" : "") . " TABLE IF NOT EXISTS $strTableName AS ($this->_sql)"; + } elseif (! is_null($strTableName) && is_string($strTableName) && is_string($strSelect)) { + $this->_sql = "CREATE" . ($blnIsTemp ? " TEMPORARY" : "") . " TABLE IF NOT EXISTS $strTableName AS ($strSelect)"; + } elseif (! is_null($strTableName) && is_string($strTableName) && is_array($strSelect)) { + $this->_sql = "CREATE" . ($blnIsTemp ? " TEMPORARY" : "") . " TABLE IF NOT EXISTS $strTableName ("; + + foreach ($strSelect as $field) { + $default = null; + if (isset($field['default'])) { + $default = (is_null($field['default']) ? "" : " DEFAULT '{$field['default']}'"); + } + $this->_sql .= "`{$field['field']}` {$field['datatype']}" . $default . (isset($field['option']) ? " {$field['option']}" : '') . ","; + } + $this->_sql = substr($this->_sql, 0, - 1) . ")"; + } + + if (self::$autorun) { + return $this->execute(); + } + + return $this->_sql; + } + + /** + * Function to create a table using a stdClass object derived from JSON + * + * @param \stdClass $json + * + * @example /examples/create_table_json.json + * + */ + public function createTableJson($json) + { + $this->_queryType = self::CREATE_TABLE; + $this->_c->select_db($json->schema); + + $this->_sql = "CREATE TABLE IF NOT EXISTS `{$json->name}` ("; + foreach ($json->fields as $field) { + $this->_sql .= "`{$field->name}` {$field->dataType}"; + + if ($field->dataType == 'enum') { + $this->_sql .= "('" . implode("','", $field->values) . "')"; + } + + if ($field->ai) { + $this->_sql .= " AUTO_INCREMENT"; + } + + if ($field->nn) { + $this->_sql .= " NOT NULL"; + } else { + if ($field->default === null) { + $this->_sql .= " DEFAULT NULL"; + } elseif (strlen($field->default)) { + $this->_sql .= " DEFAULT '{$field->default}'"; + } + } + + if ($field != end($json->fields)) { + $this->_sql .= ","; + } + } + + if (isset($json->index) && count($json->index)) { + foreach ($json->index as $ind) { + $this->_sql .= ", " . strtoupper($ind->type) . " `{$ind->id}` (`{$ind->ref}`)"; + } + } + + if (isset($json->constraints) && count($json->constraints)) { + foreach ($json->constraints as $con) { + $this->_sql .= ", CONSTRAINT `{$con->id}` " . "FOREIGN KEY (`{$con->local}`) " . "REFERENCES `{$con->schema}`.`{$con->table}` (`{$con->field}`) " . "ON DELETE " . (is_null($con->delete) ? "NO ACTION" : strtoupper($con->delete)) . " " . "ON UPDATE " . (is_null($con->update) ? "NO ACTION" : strtoupper($con->update)); + } + } + + if (isset($json->unique) && count($json->unique)) { + $this->_sql .= ", UNIQUE(`" . implode("`,`", $json->unique) . "`)"; + } + + if (isset($json->primary_key) && count($json->primary_key)) { + $this->_sql .= ", PRIMARY KEY(`" . implode("`,`", $json->primary_key) . "`))"; + } else { + if (substr($this->_sql, - 1) == ',') { + $this->_sql = substr($this->_sql, 0, - 1); + } + + $this->_sql .= ")"; + } + + $this->execute(MYSQLI_BOTH); + } + + /** + * Function to alter a existing table + * + * @param string $strTableName + * Table to alter + * @param int $intAction + * What action should be taken ('add-column', 'drop-column', 'modify-column') + * @param mixed $arrParams + * For add column this is a stdClass object that has the same elements as the example json + * + * @return mixed + */ + public function alterTable($strTableName, $intAction, $arrParams) + { + $this->_queryType = self::ALTER_TABLE; + $this->_sql = "ALTER TABLE $strTableName"; + if ($intAction == self::ADD_COLUMN) { + $nn = ($arrParams->nn ? " NOT NULL" : ""); + $default = null; + if ($arrParams->default === null) { + $default = " DEFAULT NULL"; + } elseif (strlen($arrParams->default)) { + $default = " DEFAULT {$this->_escape($arrParams->default)}"; + } + $this->_sql .= " ADD COLUMN `{$arrParams->name}` {$arrParams->dataType}" . $nn . $default; + } elseif ($intAction == self::DROP_COLUMN) { + $this->_sql .= " DROP COLUMN "; + foreach ($arrParams as $col) { + $this->_sql .= "`{$col->name}`"; + + if ($col != end($arrParams)) { + $this->_sql .= ","; + } + } + } elseif ($intAction == self::MODIFY_COLUMN) { + $this->_sql .= " MODIFY COLUMN"; + $nn = ($arrParams->nn ? " NOT NULL" : ""); + $default = null; + if ($arrParams->default === null) { + $default = " DEFAULT NULL"; + } elseif (strlen($arrParams->default)) { + $default = " DEFAULT {$this->_escape($arrParams->default)}"; + } + $this->_sql .= " `{$arrParams->name}` `{$arrParams->new_name}` {$arrParams->dataType}" . $nn . $default; + } + + if (self::$autorun) { + return $this->execute(); + } + + return $this->_sql; + } + + /** + * Check to see if a field in a table exists + * + * @param string $strTableName + * Table to check + * @param string $strFieldName + * Field name to find + * + * @return boolean Returns TRUE if field is found in that schema and table, otherwise FALSE + */ + public function fieldExists($strTableName, $strFieldName) + { + $fdata = $this->fieldData($strTableName); + + if (is_array($fdata) && count($fdata)) { + foreach ($fdata as $field) { + if ($field->name == $strFieldName) { + return true; + } + } + } + + return false; + } + + /** + * Function to get the column data (datatype, flags, defaults, etc) + * + * @param string $strTableName + * Table to query + * @param mixed $field + * [optional] + * Optional field to retrieve data (if null, returns data from all fields) + * + * @return array + */ + public function fieldData($strTableName, $field = null) + { + if (is_null($field)) { + $res = $this->_c->query("SELECT * FROM $strTableName LIMIT 1"); + } elseif (is_array($field)) { + $res = $this->_c->query("SELECT `" . implode("`,`", $field) . "` FROM $strTableName LIMIT 1"); + } elseif (is_string($field)) { + $res = $this->_c->query("SELECT $field FROM $strTableName LIMIT 1"); + } else { + return null; + } + + $fields = null; + if (is_a($res, 'mysqli_result')) { + $fields = $res->fetch_fields(); + foreach ($fields as $i => $f) { + $fields["{$f->name}"] = $f; + unset($fields[$i]); + } + } + + return $fields; + } + + /** + * Function to check that all field parameters are set correctly + * + * @param object $field_data + * @param object $check + * @param array $pks + * @param object $index + * + * @return array|string + */ + public function fieldCheck($field_data, $check, $pks, $index) + { + $default = null; + $ret = null; + + $nn = ($check->nn ? " NOT NULL" : null); + if ($check->default === null) { + $default = " DEFAULT NULL"; + } elseif (strlen($check->default)) { + $default = " DEFAULT '{$check->default}'"; + } + + if ($field_data->type != $check->type && $check->type != MYSQLI_TYPE_ENUM) { + $this->_logger->notice("Wrong datatype", [ + 'name' => $field_data->name, + 'datatype' => $check->dataType + ]); + $ret = " CHANGE COLUMN `{$field_data->name}` `{$check->name}` {$check->dataType}" . "{$nn}{$default}"; + } elseif (! is_null($check->length) && $field_data->length != $check->length) { + $this->_logger->notice("Incorrect size", [ + 'name' => $field_data->name, + 'current' => $field_data->length, + 'new_size' => $check->length + ]); + $ret = " CHANGE COLUMN `{$field_data->name}` `{$check->name}` {$check->dataType}" . "{$nn}{$default}"; + } elseif ($check->type == MYSQLI_TYPE_ENUM && ! ($field_data->flags & MYSQLI_ENUM_FLAG)) { + $this->_logger->notice("Setting ENUM type", [ + 'name' => $field_data->name, + 'values' => implode(",", $check->values) + ]); + $ret = " CHANGE COLUMN `{$field_data->name}` `{$check->name}` {$check->dataType}('" . implode("','", $check->values) . "')" . "{$nn}{$default}"; + } + + if (! is_null($index) && count($index)) { + foreach ($index as $ind) { + if ($check->name == $ind->ref && ! ($field_data->flags & MYSQLI_MULTIPLE_KEY_FLAG)) { + $this->_logger->debug("Missing index", [ + 'name' => $field_data->name + ]); + $ret .= ($ret ? "," : "") . " ADD INDEX `{$ind->id}` (`{$ind->ref}` ASC)"; + } + } + } + + if (in_array($check->name, $pks) && ! ($field_data->flags & MYSQLI_PRI_KEY_FLAG)) { + $this->_logger->debug("Setting PKs", [ + 'keys' => implode(',', $pks) + ]); + $ret .= ($ret ? "," : "") . " DROP PRIMARY KEY, ADD PRIMARY KEY(`" . implode("`,`", $pks) . "`)"; + } + + return $ret; + } + + /** + * Function to check for the existence of a table within a schema + * + * @param string $strSchema + * The schema to search in + * @param string $strTableName + * Table to search for + * + * @return integer|boolean Returns number of tables that match if table is found in that schema, otherwise FALSE + */ + public function tableExists($strSchema, $strTableName) + { + if (! $this->_c->select_db($strSchema)) { + fwrite("php://stdout", $this->_c->error . PHP_EOL); + } + $sql = "SHOW TABLES LIKE '{$strTableName}'"; + + if ($res = $this->_c->query($sql)) { + if (gettype($res) == 'object' && is_a($res, 'mysqli_result') && $res->num_rows) { + return $res->num_rows; + } + } else { + if ($this->_c->errno) { + fwrite("php://stdout", $this->_c->error . PHP_EOL); + } + } + + return false; + } + + /** + * Function to detect if string is a JSON object or not + * + * @param string $strVal + * + * @return boolean + */ + public function isJson($strVal) + { + json_decode($strVal); + return (json_last_error() == JSON_ERROR_NONE); + } + + /** + * Function to escape SQL characters to prevent SQL injection + * + * @param mixed $val + * Value to escape + * @param boolean $blnEscape + * Decide if we should escape or not + * + * @return string Escaped value + */ + public function _escape($val, $blnEscape = true) + { + if (is_null($val) || (is_string($val) && strtolower($val) == 'null')) { + return 'NULL'; + } elseif (is_numeric($val) || is_string($val)) { + if (stripos($val, "IF(") !== false) { + return $val; + } + elseif ($blnEscape) { + return "'{$this->_c->real_escape_string($val)}'"; + } + return $val; + } elseif (is_a($val, 'DateTime')) { + return "'{$val->format(MYSQL_DATETIME)}'"; + } elseif (is_bool($val)) { + return $val ? "'1'" : "'0'"; + } elseif (gettype($val) == 'object' && method_exists($val, '_escape')) { + $ret = call_user_func([ + $val, + '_escape' + ]); + if ($ret !== false) { + return $ret; + } else { + throw new Exception("Error in return from _escape method in " . get_class($val), E_ERROR); + } + } elseif (gettype($val) == 'object') { + $this->_logger->error("Unknown object to escape " . get_class($val) . " in SQL string {$this->_sql}"); + return; + } + + throw new Exception("Unknown datatype to escape in SQL string {$this->_sql} " . gettype($val), E_ERROR); + } + + /** + * Function to retrieve all results + * + * @param int $intResultType + * + * @return mixed + */ + public function fetchAll($intResultType = MYSQLI_ASSOC) + { + $res = []; + if (method_exists('mysqli_result', 'fetch_all')) { // Compatibility layer with PHP < 5.3 + $res = $this->_result->fetch_all($intResultType); + } else { + while ($tmp = $this->_result->fetch_array($intResultType)) { + $res[] = $tmp; + } + } + + return $res; + } + + /** + * Function to populate the fields for the SQL + * + * @param array|string $fields + * [optional] + * Optional array of fields to string together to create a field list + * + * @return string + */ + public function fields($fields = null) + { + $ret = null; + + if (is_array($fields) && count($fields) && isset($fields[0]) && is_string($fields[0])) { + foreach ($fields as $field) { + if ((strpos($field, '`') === false) && (strpos($field, '.') === false) && (strpos($field, '*') === false) && (strpos($field, 'JSON_') === false) && (stripos($field, ' as ') === false)) { + $ret .= "`$field`,"; + } else { + $ret .= "$field,"; + } + } + $ret = substr($ret, - 1) == ',' ? substr($ret, 0, - 1) : $ret; + } elseif (is_string($fields)) { + $ret = $fields; + } elseif (is_null($fields)) { + $ret = "*"; + } else { + throw new \InvalidArgumentException("Invalid field type"); + } + + return $ret; + } + + /** + * Function to parse the flags + * + * @param array $flags + * Two-dimensional array to added flags + * + * + * [ + *   'joins' => [ + *     "JOIN table2 t2 ON t2.id=t1.id" + *   ], + *   'group' => 'field', + *   'having' => 'field', + *   'order' => 'field', + *   'start' => 0, + *   'limit' => 0 + * ] + * + * + * @see Database::groups() + * @see Database::having() + * @see Database::order() + * + * @return string + */ + public function flags($arrFlags) + { + $ret = ''; + + if (isset($arrFlags['group'])) { + $ret .= $this->groups($arrFlags['group']); + } + + if (isset($arrFlags['having']) && is_array($arrFlags['having'])) { + $having = " HAVING"; + foreach ($arrFlags['having'] as $x => $h) { + $having .= $this->parseClause($h, $x); + } + if (strlen($having) > strlen(" HAVING")) { + $ret .= $having; + } + } + + if (isset($arrFlags['order'])) { + $ret .= $this->order($arrFlags['order']); + } + + if (isset($arrFlags['limit']) && (is_string($arrFlags['limit']) || is_numeric($arrFlags['limit']))) { + $ret .= " LIMIT "; + if (isset($arrFlags['start']) && (is_string($arrFlags['start']) || is_numeric($arrFlags['start']))) { + $ret .= "{$arrFlags['start']},"; + } + $ret .= "{$arrFlags['limit']}"; + } + + return $ret; + } + + /** + * Function to parse SQL GROUP BY statements + * + * @param mixed $groups + * + * @return string + */ + public function groups($groups) + { + $ret = ''; + if (is_array($groups) && count($groups)) { + $ret .= " GROUP BY"; + + foreach ($groups as $grp) { + $ret .= " $grp"; + + if ($grp != end($groups)) { + $ret .= ","; + } + } + } elseif (is_string($groups)) { + $ret .= " GROUP BY {$groups}"; + } else { + throw (new Exception("Error in datatype for groups " . gettype($groups), E_ERROR)); + } + + return $ret; + } + + /** + * Function to parse SQL ORDER BY statements + * + * @param mixed $order + * + * @return string + */ + public function order($order) + { + $ret = ''; + if (is_array($order)) { + $ret .= " ORDER BY"; + + foreach ($order as $ord) { + $ret .= " {$ord['field']} {$ord['sort']}"; + + if ($ord != end($order)) { + $ret .= ","; + } + } + } elseif (is_string($order)) { + $ret .= " ORDER BY {$order}"; + } + + return $ret; + } + + /** + * Function to see if a constraint exists + * + * @param string $strConstraintId + * + * @return boolean + */ + public function isConstraint($strConstraintId) + { + $res = $this->_c->query("SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_NAME = '{$strConstraintId}'"); + + if ($res->num_rows) { + return true; + } + + return false; + } + + /** + * Function to parse where and having clauses + * + * @param array $arrClause + * @param int $intIndex + */ + public function parseClause($arrClause, $intIndex) + { + $ret = null; + + $this->_logger->debug("Parsing clause", $arrClause); + + if (! isset($arrClause['field']) && isset($arrClause['close-paren']) && $arrClause['close-paren']) { + $ret .= ")"; + return $ret; + } elseif ($intIndex > 0 && ! isset($arrClause['sql_op'])) { + $this->_logger->warning("Missing sql_op field to identify how current and previous WHERE clause statements should be linked ('AND', 'OR', 'XOR', etc), skipped", [ + 'clause' => implode(",", $arrClause) + ]); + return; + } + + $op = '='; + if (isset($arrClause['op'])) { + $op = $arrClause['op']; + } + + switch ($op) { + case self::BETWEEN: + if (! isset($arrClause['field']) || ! isset($arrClause['low']) || ! isset($arrClause['high'])) { + $this->_logger->warning("Missing field, low, or high for BETWEEN where clause, skipping"); + return; + } + break; + default: + if (! isset($arrClause['field']) || ! isset($arrClause['value'])) { + $this->_logger->warning("Missing field or value for WHERE clause, skipping", $arrClause); + return; + } + } + + if ($intIndex > 0) { + $ret .= " {$arrClause['sql_op']}"; + } + + if (isset($arrClause['open-paren']) && $arrClause['open-paren']) { + $ret .= " ("; + } + + if (isset($arrClause['backticks']) && ! $arrClause['backticks']) { + $field = $arrClause['field']; + } else { + $field = "`{$arrClause['field']}`"; + } + + if ($op == self::IN || $op == self::NOT_IN) { + if (is_string($arrClause['value'])) { + $ret .= " {$field} {$op} " . (strpos($arrClause['value'], '(') !== false ? $arrClause['value'] : "({$arrClause['value']})"); + } elseif (is_array($arrClause['value'])) { + $ret .= " {$field} {$op} (" . implode(",", array_map([ + $this, + '_escape' + ], $arrClause['value'])) . ")"; + } else { + $this->_logger->error("Invalid datatype for IN WHERE clause, only string and array allowed " . gettype($arrClause['value']), $arrClause); + throw new Exception("Invalid datatype for IN WHERE clause", E_ERROR); + } + } elseif ($op == self::BETWEEN) { + $ret .= " {$field} BETWEEN {$this->_escape($arrClause['low'])} AND {$this->_escape($arrClause['high'])}"; + } else { + if (isset($arrClause['escape']) && ! $arrClause['escape']) { + $value = $arrClause['value']; + } else { + $value = $this->_escape($arrClause['value']); + } + + if (isset($arrClause['case_insensitive']) && $arrClause['case_insensitive']) { + $ret .= " LOWER({$field}) {$op} LOWER({$this->_escape($arrClause['value'])})"; + } elseif (preg_match("/\(SELECT/", $arrClause['value'])) { + $ret .= " {$field} {$op} {$arrClause['value']}"; + } else { + $ret .= " {$field} {$op} {$value}"; + } + } + + if (isset($arrClause['close-paren']) && $arrClause['close-paren']) { + $ret .= ")"; + } + + return $ret; + } +} diff --git a/inc/vendor/godsgood33/php-db/tests/DatabaseTest.php b/inc/vendor/godsgood33/php-db/tests/DatabaseTest.php new file mode 100644 index 0000000..366efad --- /dev/null +++ b/inc/vendor/godsgood33/php-db/tests/DatabaseTest.php @@ -0,0 +1,794 @@ +db = new Database(realpath(__DIR__)); + // Database::$autorun = true; + } + + public function testCanCreateDatabaseInstance() + { + $this->assertInstanceOf("Godsgood33\Php_Db\Database", $this->db); + } + + public function testGetSchema() + { + $schema = $this->db->getSchema(); + $this->assertEquals("db", $schema); + } + + public function testSetSchemaWithNonExistentSchema() + { + $ret = $this->db->setSchema("george"); + $this->assertFalse($ret); + } + + public function testDatabaseConnection() + { + $this->assertTrue($this->db->isConnected()); + } + + public function testPassInMysqliConnection() + { + $conn = new mysqli(PHP_DB_SERVER, PHP_DB_USER, PHP_DB_PWD, PHP_DB_SCHEMA); + if ($conn->connect_errno) { + fwrite(STDOUT, $conn->connect_error); + } + + $this->db = new Database(realpath(__DIR__), $conn); + + $this->assertInstanceOf("Godsgood33\Php_Db\Database", $this->db); + } + + public function testSetLogLevel() + { + $this->db->setLogLevel(Logger::DEBUG); + $this->assertEquals(Logger::DEBUG, $this->db->getLogLevel()); + } + + /** + * @expectedException TypeError + */ + public function testSelectWithInvalidTableName() + { + $this->db->select(new stdClass()); + } + + public function testSelectWithNoParameters() + { + // query table with NO parameters + $this->db->select("test"); + $this->assertEquals("SELECT * FROM test", $this->db->getSql()); + } + + public function testSelectWithNullFieldParameter() + { + // query table with null fields parameter + $this->db->select("test", null); + $this->assertEquals("SELECT * FROM test", $this->db->getSql()); + } + + public function testSelectWithOneArrayParameter() + { + // query table with one parameter + $this->db->select("test", [ + 'id' + ]); + $this->assertEquals("SELECT `id` FROM test", $this->db->getSql()); + } + + public function testSelectWithTwoArrayParameters() + { + // query table with 2 parameters + $this->db->select("test", [ + 'id', + 'name' + ]); + $this->assertEquals("SELECT `id`,`name` FROM test", $this->db->getSql()); + } + + public function testSelectWithOneStringParameter() + { + // query table with string parameter + $this->db->select("test", 'id'); + $this->assertEquals("SELECT id FROM test", $this->db->getSql()); + } + + /** + * @expectedException InvalidArgumentException + */ + public function testSelectWithStdClassParameter() + { + // query table with object parameter + $this->db->select("test", new stdClass()); + $this->assertEquals("SELECT FROM test", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testSelectWithNullWhereParameter() + { + // query table with null where parameter + $this->db->select("test", 'id', null); + $this->assertEquals("SELECT id FROM test", $this->db->getSql()); + } + + public function testSelectWithEmptyArrayWhereParameter() + { + // query table with empty array where paramter + $this->db->select("test", 'id', []); + $this->assertEquals("SELECT id FROM test", $this->db->getSql()); + } + + public function testSelectWithImcompleteWhereArrayParameter() + { + // query with incomplete WHERE clause + $this->db->select("test", 'id', [ + [ + 'field' => 'id' + ] + ]); + $this->assertEquals("SELECT id FROM test", $this->db->getSql()); + } + + public function testGroupWithString() + { + // $this->markTestIncomplete(); + + // query with single group by string + $sql = $this->db->groups('name'); + $this->assertEquals(" GROUP BY name", $sql); + } + + public function testGroupWithArray() + { + // query with array group by string + $sql = $this->db->groups([ + 'name', + 'id' + ]); + $this->assertEquals(" GROUP BY name, id", $sql); + } + + /** + * @expectedException Exception + */ + public function testGroupWrongUnknownDataType() + { + // $this->markTestIncomplete(); + + // query group with invalid datatype (stdClass) should throw Exception + $this->db->groups(new stdClass()); + } + + public function testOrderWithString() + { + // $this->markTestIncomplete(); + + // query with single name order parameter + $sql = $this->db->order("name"); + $this->assertEquals(" ORDER BY name", $sql); + } + + public function testOrderWithArray() + { + // query with order array + $sql = $this->db->order([ + [ + 'field' => 'id', + 'sort' => 'ASC' + ], + [ + 'field' => 'name', + 'sort' => 'DESC' + ] + ]); + $this->assertEquals(" ORDER BY id ASC, name DESC", $sql); + } + + public function testOrderWithObject() + { + // query with invalid datatype (stdClass) will return empty string + $sql = $this->db->order(new stdClass()); + $this->assertEquals("", $sql); + } + + public function testFlags() + { + // $this->markTestIncomplete(); + + // query flags with all parameters + $sql = $this->db->flags([ + 'group' => 'name', + 'order' => 'name', + 'having' => [ + [ + 'field' => 'id', + 'op' => '=', + 'value' => 1 + ] + ], + 'limit' => '10', + 'start' => '5' + ]); + $this->assertEquals(" GROUP BY name HAVING `id` = '1' ORDER BY name LIMIT 5,10", $sql); + } + + public function testCreateTemporaryTable() + { + $this->db->select("test"); + $this->db->createTable('test2', true); + $this->assertEquals("CREATE TEMPORARY TABLE IF NOT EXISTS test2 AS (SELECT * FROM test)", $this->db->getSql()); + } + + public function testCreateTable() + { + // Database::$autorun = false; + $this->db->createTable('test', false, $this->db->select("test")); + $this->assertEquals("CREATE TABLE IF NOT EXISTS test AS (SELECT * FROM test)", $this->db->getSql()); + // Database::$autorun = true; + } + + public function testCreateTableWithArrayParameter() + { + $this->db->createTable("test", true, [ + [ + 'field' => 'id', + 'datatype' => 'int(11)', + 'option' => 'PRIMARY KEY' + ], + [ + 'field' => 'name', + 'datatype' => 'varchar(100)', + 'default' => null + ], + [ + 'field' => 'email', + 'datatype' => 'varchar(100)', + 'default' => '' + ] + ]); + $this->assertEquals("CREATE TEMPORARY TABLE IF NOT EXISTS test (`id` int(11) PRIMARY KEY,`name` varchar(100),`email` varchar(100) DEFAULT '')", $this->db->getSql()); + } + + public function testCreateTableJson() + { + $json = json_decode(file_get_contents(dirname(dirname(__FILE__)) . "/examples/create_table_json.json")); + + $this->db->createTableJson($json->tables[0]); + $this->assertEquals("CREATE TABLE IF NOT EXISTS `settings` (`id` int(11) AUTO_INCREMENT NOT NULL,`meta_key` varchar(100) NOT NULL,`meta_value` mediumtext DEFAULT NULL, UNIQUE(`meta_key`), PRIMARY KEY(`id`))", $this->db->getSql()); + } + + public function testCreateTableJson2() + { + $json = json_decode(file_get_contents(dirname(dirname(__FILE__)) . "/examples/create_table_json.json")); + + $this->db->createTableJson($json->tables[1]); + $this->assertEquals("CREATE TABLE IF NOT EXISTS `test` (`id` int(11) AUTO_INCREMENT NOT NULL,`fk` int(11) NOT NULL,`default` tinyint(1) DEFAULT '0',`enum` enum('1','2') DEFAULT '1', INDEX `default_idx` (`default`), CONSTRAINT `con_1` FOREIGN KEY (`fk`) REFERENCES `db`.`test` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, PRIMARY KEY(`id`,`fk`))", $this->db->getSql()); + } + + public function testCreateTableJson3() + { + $json = json_decode(file_get_contents(dirname(dirname(__FILE__)) . "/examples/create_table_json.json")); + + $this->db->createTableJson($json->tables[2]); + $this->assertEquals("CREATE TABLE IF NOT EXISTS `test2` (`id` int(11) AUTO_INCREMENT NOT NULL, PRIMARY KEY(`id`))", $this->db->getSql()); + } + + public function testTableExists() + { + $tbl_count = $this->db->tableExists('db', 'settings'); + $this->assertEquals(1, $tbl_count); + } + + public function testMultipleTableExists() + { + $tbl_count = $this->db->tableExists('db', 'test%'); + $this->assertEquals(2, $tbl_count); + } + + public function testTableNotPresent() + { + $tbl_not_present = $this->db->tableExists('db', "users"); + $this->assertFalse($tbl_not_present); + } + + public function testAlterTableAddColumn() + { + $new = new stdClass(); + $new->name = 'newCol'; + $new->dataType = 'tinyint(1)'; + $new->nn = false; + $new->default = null; + + $this->db->alterTable('test', Database::ADD_COLUMN, $new); + $this->assertEquals("ALTER TABLE test ADD COLUMN `newCol` tinyint(1) DEFAULT NULL", $this->db->getSql()); + } + + public function testAlterTableModifyColumn() + { + $mod = new stdClass(); + $mod->name = 'default'; + $mod->new_name = 'default2'; + $mod->dataType = 'int(1)'; + $mod->nn = true; + $mod->default = 1; + + $this->db->alterTable("test", Database::MODIFY_COLUMN, $mod); + $this->assertEquals("ALTER TABLE test MODIFY COLUMN `default` `default2` int(1) NOT NULL DEFAULT '1'", $this->db->getSql()); + } + + public function testAlterTableDropColumn() + { + $drop = new stdClass(); + $drop->name = 'newCol'; + + $this->db->alterTable("test", Database::DROP_COLUMN, [ + $drop + ]); + $this->assertEquals("ALTER TABLE test DROP COLUMN `newCol`", $this->db->getSql()); + } + + public function testSelectCountWithNoParameters() + { + $this->db->selectCount("test"); + $this->assertEquals("SELECT COUNT(1) AS 'count' FROM test", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testSelectCountWithStdClassParameterForTable() + { + $this->db->selectCount(new stdClass()); + } + + public function testSelectCountWithArrayWhereParameter() + { + $this->db->selectCount("test", [ + [ + 'field' => 'name', + 'value' => 'Ed' + ] + ], [ + 'joins' => [ + "JOIN settings s ON s.id = test.id" + ] + ]); + $this->assertEquals("SELECT COUNT(1) AS 'count' FROM test JOIN settings s ON s.id = test.id WHERE `name` = 'Ed'", $this->db->getSql()); + } + + public function testInsertWithOneElementArrayParameter() + { + // query with one parameter + $this->db->insert("test", [ + 'id' => 1 + ]); + $this->assertEquals("INSERT INTO test (`id`) VALUES ('1')", $this->db->getSql()); + } + + public function testInsertWithTwoElementArrayParameter() + { + // query with 2 parameters + $this->db->insert("test", [ + 'id' => 1, + 'name' => 'Ed' + ], true); + $this->assertEquals("INSERT IGNORE INTO test (`id`,`name`) VALUES ('1','Ed')", $this->db->getSql()); + } + + public function testInsertWithSelectStatement() + { + // insert query using SELECT statement + $this->db->insert("test", "SELECT id FROM settings"); + $this->assertEquals("INSERT INTO test SELECT id FROM settings", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testInsertInvalidTableNameDataType() + { + $this->db->insert(new stdClass()); + } + + /** + * @expectedException Error + */ + public function testInsertInvalidParameterDataType() + { + $this->db->insert("test", new stdClass()); + } + + public function testEInsert() + { + // extended insert query with fields and 2 items + $this->db->extendedInsert("test", [ + 'id', + 'name' + ], [ + [ + 1, + 'Ed' + ], + [ + 2, + 'Frank' + ] + ]); + $this->assertEquals("INSERT INTO test (`id`,`name`) VALUES ('1','Ed'),('2','Frank')", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testEInsertInvalidTableNameDatatype() + { + $this->db->extendedInsert(new stdClass(), [], []); + } + + /** + * @expectedException Error + */ + public function testEInsertDifferentFieldValuePairs() + { + $this->db->extendedInsert('test', [ + 'id', + 'name' + ], [ + [ + 1 + ], + [ + 2 + ] + ]); + } + + /** + * @expectedException Error + */ + public function testEInsertDifferentFieldValuePairs2() + { + $this->db->extendedInsert('test', [ + 'id', + 'name' + ], [ + [ + 1, + 'Ed' + ], + [ + 2 + ] + ]); + } + + public function testUpdateWithOneElementArrayParameter() + { + $this->db->update('test', [ + 'name' => 'Frank' + ]); + $this->assertEquals("UPDATE test SET `name`='Frank'", $this->db->getSql()); + } + + public function testUpdateWithOneElementAndWhereArray() + { + $this->db->update('test', [ + 'name' => 'Frank' + ], [ + [ + 'field' => 'id', + 'value' => 1 + ] + ]); + $this->assertEquals("UPDATE test SET `name`='Frank' WHERE `id` = '1'", $this->db->getSql()); + } + + public function testUpdateWithOneElementAndJoinClause() + { + $this->db->update('test t', [ + 't.name' => 'Frank' + ], [], [ + 'joins' => [ + "JOIN settings s ON s.id=t.id" + ] + ]); + $this->assertEquals("UPDATE test t JOIN settings s ON s.id=t.id SET t.name='Frank'", $this->db->getSql()); + } + + public function testUpdateWithOneElementAndLimitClause() + { + $this->db->update('test', [ + 'name' => 'Frank' + ], [], [ + 'limit' => 1 + ]); + $this->assertEquals("UPDATE test SET `name`='Frank' LIMIT 1", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testUpdateInvalidTableNameDatatype() + { + $this->db->update(new stdClass(), []); + } + + public function testEUpdateWithArrayList() + { + $this->db->extendedUpdate("test", "settings", "id", [ + 'name' + ]); + $this->assertEquals("UPDATE test tbu INNER JOIN settings o USING (id) SET tbu.`name` = o.`name`", $this->db->getSql()); + } + + public function testEUpdateWithStringList() + { + $this->db->extendedUpdate("test", "settings", "id", "name"); + $this->assertEquals("UPDATE test tbu INNER JOIN settings o USING (id) SET tbu.`name` = o.`name`", $this->db->getSql()); + } + + /** + * @expectedException Exception + */ + public function testEUpdateInvalidParamDatatype() + { + $this->db->extendedUpdate('test', 'settings', 'id', new stdClass()); + } + + public function testReplace() + { + $this->db->replace("test", [ + 'id' => 1 + ]); + $this->assertEquals("REPLACE INTO test (`id`) VALUES ('1')", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testReplaceInvalidTableNameDatatype() + { + $this->db->replace(new stdClass(), []); + } + + public function testEReplace() + { + $this->db->extendedReplace("test", [ + 'id', + 'name' + ], [ + [ + 1, + 'Ed' + ], + [ + 2, + 'Frank' + ] + ]); + $this->assertEquals("REPLACE INTO test (`id`,`name`) VALUES ('1','Ed'),('2','Frank')", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testEReplaceInvalidTableNameDatatype() + { + $this->db->extendedReplace(new stdClass(), [], []); + } + + public function testFieldExists() + { + $id_exists = $this->db->fieldExists('test', 'id'); + $this->assertTrue($id_exists); + } + + public function testFieldDoesNotExist() + { + $phone_not_exists = $this->db->fieldExists('test', 'phone'); + $this->assertFalse($phone_not_exists); + } + + public function testFieldData() + { + $id = new stdClass(); + $id->name = 'id'; + $id->orgname = 'id'; + $id->table = 'test2'; + $id->orgtable = 'test2'; + $id->def = null; + $id->db = 'db'; + $id->catalog = 'def'; + $id->max_length = 0; + $id->length = 11; + $id->charsetnr = 63; + $id->flags = 49667; + $id->type = 3; + $id->decimals = 0; + + // query all fields in table + $fd = $this->db->fieldData("test2"); + $this->assertEquals([ + 'id' => $id + ], $fd); + + // query single field in table + $fd = $this->db->fieldData('test2', 'id'); + $this->assertEquals([ + 'id' => $id + ], $fd); + + // query array of fields in table + $fd = $this->db->fieldData('test2', [ + 'id' + ]); + $this->assertEquals([ + 'id' => $id + ], $fd); + + // invalid datatype for field name + $fd = $this->db->fieldData('test2', new stdClass()); + $this->assertEquals(null, $fd); + } + + public function testEscapeDontEscapeNow() + { + // $this->markTestIncomplete(); + $ret = $this->db->_escape('NOW()', false); + $this->assertEquals("NOW()", $ret); + } + + public function testEscapeDontEscapeBackticks() + { + $ret = $this->db->_escape("t.`id`", false); + $this->assertEquals("t.`id`", $ret); + } + + public function testEscapeEscapeDateTime() + { + $dt = new DateTime("2017-01-01 00:00:00"); + $ret = $this->db->_escape($dt); + $this->assertEquals("'2017-01-01 00:00:00'", $ret); + } + + public function testEscapeBoolean() + { + $ret = $this->db->_escape(true); + $this->assertEquals("'1'", $ret); + } + + public function testEscapeClassWithEscapeMethod() + { + $tc = new TestClass(); + $tc->var = "test's"; + $ret = $this->db->_escape($tc); + $this->assertEquals("test\'s", $ret); + } + + public function testEscapeUnknownClassToEscape() + { + // $this->markTestIncomplete(); + $tc2 = new TestClass2(); + $tc2->var = "test"; + $ret = $this->db->_escape($tc2); + + $this->assertEquals("", $ret); + } + + public function testDeleteBasic() + { + $this->db->delete("test"); + $this->assertEquals("DELETE FROM test", $this->db->getSql()); + } + + public function testDeleteWithWhereClause() + { + $this->db->delete('test', [ + 'id' + ], [ + [ + 'field' => 'id', + 'op' => '=', + 'value' => 1 + ] + ]); + $this->assertEquals("DELETE id FROM test WHERE `id` = '1'", $this->db->getSql()); + } + + public function testDeleteWithJoin() + { + $this->db->delete('test t', [], [], [ + 'joins' => "JOIN settings s ON s.id=t.id" + ]); + $this->assertEquals("DELETE FROM test t JOIN settings s ON s.id=t.id", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testDeleteInvalidTableNameDatatype() + { + $this->db->delete(new stdClass()); + } + + public function testTruncate() + { + $this->db->truncate('test'); + $this->assertEquals("TRUNCATE TABLE test", $this->db->getSql()); + } + + /** + * @expectedException TypeError + */ + public function testTruncateInvalidTableNameDatatype() + { + $this->db->truncate(new stdClass()); + } + + public function testDropSettingsTable() + { + // Database::$autorun = false; + $sql = $this->db->drop("settings"); + $this->assertEquals("DROP TABLE IF EXISTS `settings`", $sql); + // Database::$autorun = true; + } + + public function testDropTestTable() + { + // Database::$autorun = false; + $sql = $this->db->drop("test"); + $this->assertEquals("DROP TABLE IF EXISTS `test`", $sql); + // Database::$autorun = true; + } + + public function testDropView() + { + // Database::$autorun = false; + $sql = $this->db->drop("test", "view"); + $this->assertEquals("DROP VIEW IF EXISTS `test`", $sql); + // Database::$autorun = true; + } + + /** + * @expectedException TypeError + */ + public function testDropInvalidTableNameDatatype() + { + $this->db->drop(new stdClass()); + } + + /** + * @expectedException TypeError + */ + public function testDropInvalidTypeDatatype() + { + $this->db->drop('test', new stdClass()); + } + + public function testSetSchema() + { + // set the schema and validate that it is what we set it to + $this->db->setSchema("test"); + $row = $this->db->query("SELECT DATABASE()"); + $this->assertEquals("test", $row->fetch_array()[0]); + } +} \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/tests/TestClass.php b/inc/vendor/godsgood33/php-db/tests/TestClass.php new file mode 100644 index 0000000..836a54c --- /dev/null +++ b/inc/vendor/godsgood33/php-db/tests/TestClass.php @@ -0,0 +1,24 @@ +var); + } +} \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/tests/TestClass2.php b/inc/vendor/godsgood33/php-db/tests/TestClass2.php new file mode 100644 index 0000000..4d01a9e --- /dev/null +++ b/inc/vendor/godsgood33/php-db/tests/TestClass2.php @@ -0,0 +1,5 @@ +add($complexString2); +``` +or pass all values to the appropriate function +``` +$complexString1 = '1.23-4.56i'; +$complexString2 = '2.34+5.67i'; + +echo Complex\add($complexString1, $complexString2); +``` +If you want to perform the same operation against multiple values (e.g. to add three or more complex numbers), then you can pass multiple arguments to any of the operations. + +You can pass these arguments as Complex objects, or as an array or string that will parse to a complex object. + +## Using functions + +When calling any of the available functions for a complex value, you can either call the relevant method for the Complex object +``` +$complexString = '1.23-4.56i'; + +$complexObject = new Complex\Complex($complexString); +echo $complexObject->sinh(); +``` +or you can call the function as you would in procedural code, passing the Complex object as an argument +``` +$complexString = '1.23-4.56i'; + +$complexObject = new Complex\Complex($complexString); +echo Complex\sinh($complexObject); +``` +When called procedurally using the function, you can pass in the argument as a Complex object, or as an array or string that will parse to a complex object. +``` +$complexString = '1.23-4.56i'; + +echo Complex\sinh($complexString); +``` + +In the case of the `pow()` function (the only implemented function that requires an additional argument) you need to pass both arguments when calling the function procedurally + +``` +$complexString = '1.23-4.56i'; + +$complexObject = new Complex\Complex($complexString); +echo Complex\pow($complexObject, 2); +``` +or pass the additional argument when calling the method +``` +$complexString = '1.23-4.56i'; + +$complexObject = new Complex\Complex($complexString); +echo $complexObject->pow(2); +``` diff --git a/inc/vendor/markbaker/complex/classes/Autoloader.php b/inc/vendor/markbaker/complex/classes/Autoloader.php new file mode 100644 index 0000000..9a8fcc1 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/Autoloader.php @@ -0,0 +1,53 @@ +regex = $regex; + parent::__construct($it, $regex); + } +} + +class FilenameFilter extends FilesystemRegexFilter +{ + // Filter files against the regex + public function accept() + { + return (!$this->isFile() || preg_match($this->regex, $this->getFilename())); + } +} + + +$srcFolder = __DIR__ . DIRECTORY_SEPARATOR . 'src'; +$srcDirectory = new RecursiveDirectoryIterator($srcFolder); + +$filteredFileList = new FilenameFilter($srcDirectory, '/(?:php)$/i'); +$filteredFileList = new FilenameFilter($filteredFileList, '/^(?!.*(Complex|Exception)\.php).*$/i'); + +foreach (new RecursiveIteratorIterator($filteredFileList) as $file) { + if ($file->isFile()) { + include_once $file; + } +} diff --git a/inc/vendor/markbaker/complex/classes/src/Complex.php b/inc/vendor/markbaker/complex/classes/src/Complex.php new file mode 100644 index 0000000..5671eb2 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/Complex.php @@ -0,0 +1,387 @@ + 0.0 && empty($suffix)) { + $suffix = 'i'; + } + + // Set parsed values in our properties + $this->realPart = (float) $realPart; + $this->imaginaryPart = (float) $imaginaryPart; + $this->suffix = strtolower($suffix); + } + + /** + * Gets the real part of this complex number + * + * @return Float + */ + public function getReal() + { + return $this->realPart; + } + + /** + * Gets the imaginary part of this complex number + * + * @return Float + */ + public function getImaginary() + { + return $this->imaginaryPart; + } + + /** + * Gets the suffix of this complex number + * + * @return String + */ + public function getSuffix() + { + return $this->suffix; + } + + /** + * Returns true if this is a real value, false if a complex value + * + * @return Bool + */ + public function isReal() + { + return $this->imaginaryPart == 0.0; + } + + /** + * Returns true if this is a complex value, false if a real value + * + * @return Bool + */ + public function isComplex() + { + return !$this->isReal(); + } + + public function format() + { + $str = ""; + if ($this->imaginaryPart != 0.0) { + if (\abs($this->imaginaryPart) != 1.0) { + $str .= $this->imaginaryPart . $this->suffix; + } else { + $str .= (($this->imaginaryPart < 0.0) ? '-' : '') . $this->suffix; + } + } + if ($this->realPart != 0.0) { + if (($str) && ($this->imaginaryPart > 0.0)) { + $str = "+" . $str; + } + $str = $this->realPart . $str; + } + if (!$str) { + $str = "0.0"; + } + + return $str; + } + + public function __toString() + { + return $this->format(); + } + + /** + * Validates whether the argument is a valid complex number, converting scalar or array values if possible + * + * @param mixed $complex The value to validate + * @return Complex + * @throws Exception If the argument isn't a Complex number or cannot be converted to one + */ + public static function validateComplexArgument($complex) + { + if (is_scalar($complex) || is_array($complex)) { + $complex = new Complex($complex); + } elseif (!is_object($complex) || !($complex instanceof Complex)) { + throw new Exception('Value is not a valid complex number'); + } + + return $complex; + } + + /** + * Returns the reverse of this complex number + * + * @return Complex + */ + public function reverse() + { + return new Complex( + $this->imaginaryPart, + $this->realPart, + ($this->realPart == 0.0) ? null : $this->suffix + ); + } + + public function invertImaginary() + { + return new Complex( + $this->realPart, + $this->imaginaryPart * -1, + ($this->imaginaryPart == 0.0) ? null : $this->suffix + ); + } + + public function invertReal() + { + return new Complex( + $this->realPart * -1, + $this->imaginaryPart, + ($this->imaginaryPart == 0.0) ? null : $this->suffix + ); + } + + protected static $functions = [ + 'abs', + 'acos', + 'acosh', + 'acot', + 'acoth', + 'acsc', + 'acsch', + 'argument', + 'asec', + 'asech', + 'asin', + 'asinh', + 'atan', + 'atanh', + 'conjugate', + 'cos', + 'cosh', + 'cot', + 'coth', + 'csc', + 'csch', + 'exp', + 'inverse', + 'ln', + 'log2', + 'log10', + 'negative', + 'pow', + 'rho', + 'sec', + 'sech', + 'sin', + 'sinh', + 'sqrt', + 'tan', + 'tanh', + 'theta', + ]; + + protected static $operations = [ + 'add', + 'subtract', + 'multiply', + 'divideby', + 'divideinto', + ]; + + /** + * Returns the result of the function call or operation + * + * @return Complex|float + * @throws Exception|\InvalidArgumentException + */ + public function __call($functionName, $arguments) + { + $functionName = strtolower(str_replace('_', '', $functionName)); + + // Test for function calls + if (in_array($functionName, self::$functions)) { + $functionName = "\\" . __NAMESPACE__ . "\\{$functionName}"; + return $functionName($this, ...$arguments); + } + // Test for operation calls + if (in_array($functionName, self::$operations)) { + $functionName = "\\" . __NAMESPACE__ . "\\{$functionName}"; + return $functionName($this, ...$arguments); + } + throw new Exception('Function or Operation does not exist'); + } +} diff --git a/inc/vendor/markbaker/complex/classes/src/Exception.php b/inc/vendor/markbaker/complex/classes/src/Exception.php new file mode 100644 index 0000000..a2beb73 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/Exception.php @@ -0,0 +1,13 @@ +getReal() - $invsqrt->getImaginary(), + $complex->getImaginary() + $invsqrt->getReal() + ); + $log = ln($adjust); + + return new Complex( + $log->getImaginary(), + -1 * $log->getReal() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/acosh.php b/inc/vendor/markbaker/complex/classes/src/functions/acosh.php new file mode 100644 index 0000000..18a992e --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/acosh.php @@ -0,0 +1,34 @@ +isReal() && ($complex->getReal() > 1)) { + return new Complex(\acosh($complex->getReal())); + } + + $acosh = acos($complex) + ->reverse(); + if ($acosh->getReal() < 0.0) { + $acosh = $acosh->invertReal(); + } + + return $acosh; +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/acot.php b/inc/vendor/markbaker/complex/classes/src/functions/acot.php new file mode 100644 index 0000000..11bee46 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/acot.php @@ -0,0 +1,25 @@ +getReal() == 0.0 && $complex->getImaginary() == 0.0) { + return INF; + } + + return asin(inverse($complex)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/acsch.php b/inc/vendor/markbaker/complex/classes/src/functions/acsch.php new file mode 100644 index 0000000..bb45d34 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/acsch.php @@ -0,0 +1,29 @@ +getReal() == 0.0 && $complex->getImaginary() == 0.0) { + return INF; + } + + return asinh(inverse($complex)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/argument.php b/inc/vendor/markbaker/complex/classes/src/functions/argument.php new file mode 100644 index 0000000..d7209cc --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/argument.php @@ -0,0 +1,28 @@ +getReal() == 0.0 && $complex->getImaginary() == 0.0) { + return INF; + } + + return acos(inverse($complex)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/asech.php b/inc/vendor/markbaker/complex/classes/src/functions/asech.php new file mode 100644 index 0000000..b36c40e --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/asech.php @@ -0,0 +1,29 @@ +getReal() == 0.0 && $complex->getImaginary() == 0.0) { + return INF; + } + + return acosh(inverse($complex)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/asin.php b/inc/vendor/markbaker/complex/classes/src/functions/asin.php new file mode 100644 index 0000000..9c982ac --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/asin.php @@ -0,0 +1,37 @@ +getReal() - $complex->getImaginary(), + $invsqrt->getImaginary() + $complex->getReal() + ); + $log = ln($adjust); + + return new Complex( + $log->getImaginary(), + -1 * $log->getReal() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/asinh.php b/inc/vendor/markbaker/complex/classes/src/functions/asinh.php new file mode 100644 index 0000000..c1243fd --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/asinh.php @@ -0,0 +1,33 @@ +isReal() && ($complex->getReal() > 1)) { + return new Complex(\asinh($complex->getReal())); + } + + $asinh = clone $complex; + $asinh = $asinh->reverse() + ->invertReal(); + $asinh = asin($asinh); + return $asinh->reverse() + ->invertImaginary(); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/atan.php b/inc/vendor/markbaker/complex/classes/src/functions/atan.php new file mode 100644 index 0000000..2c75dcf --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/atan.php @@ -0,0 +1,45 @@ +isReal()) { + return new Complex(\atan($complex->getReal())); + } + + $t1Value = new Complex(-1 * $complex->getImaginary(), $complex->getReal()); + $uValue = new Complex(1, 0); + + $d1Value = clone $uValue; + $d1Value = subtract($d1Value, $t1Value); + $d2Value = add($t1Value, $uValue); + $uResult = $d1Value->divideBy($d2Value); + $uResult = ln($uResult); + + return new Complex( + (($uResult->getImaginary() == M_PI) ? -M_PI : $uResult->getImaginary()) * -0.5, + $uResult->getReal() * 0.5, + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/atanh.php b/inc/vendor/markbaker/complex/classes/src/functions/atanh.php new file mode 100644 index 0000000..c53f2a9 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/atanh.php @@ -0,0 +1,38 @@ +isReal()) { + $real = $complex->getReal(); + if ($real >= -1.0 && $real <= 1.0) { + return new Complex(\atanh($real)); + } else { + return new Complex(\atanh(1 / $real), (($real < 0.0) ? M_PI_2 : -1 * M_PI_2)); + } + } + + $iComplex = clone $complex; + $iComplex = $iComplex->invertImaginary() + ->reverse(); + return atan($iComplex) + ->invertReal() + ->reverse(); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/conjugate.php b/inc/vendor/markbaker/complex/classes/src/functions/conjugate.php new file mode 100644 index 0000000..bd1984b --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/conjugate.php @@ -0,0 +1,28 @@ +getReal(), + -1 * $complex->getImaginary(), + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/cos.php b/inc/vendor/markbaker/complex/classes/src/functions/cos.php new file mode 100644 index 0000000..80a4683 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/cos.php @@ -0,0 +1,34 @@ +isReal()) { + return new Complex(\cos($complex->getReal())); + } + + return conjugate( + new Complex( + \cos($complex->getReal()) * \cosh($complex->getImaginary()), + \sin($complex->getReal()) * \sinh($complex->getImaginary()), + $complex->getSuffix() + ) + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/cosh.php b/inc/vendor/markbaker/complex/classes/src/functions/cosh.php new file mode 100644 index 0000000..a4bea65 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/cosh.php @@ -0,0 +1,32 @@ +isReal()) { + return new Complex(\cosh($complex->getReal())); + } + + return new Complex( + \cosh($complex->getReal()) * \cos($complex->getImaginary()), + \sinh($complex->getReal()) * \sin($complex->getImaginary()), + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/cot.php b/inc/vendor/markbaker/complex/classes/src/functions/cot.php new file mode 100644 index 0000000..339101e --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/cot.php @@ -0,0 +1,29 @@ +getReal() == 0.0 && $complex->getImaginary() == 0.0) { + return new Complex(INF); + } + + return inverse(tan($complex)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/coth.php b/inc/vendor/markbaker/complex/classes/src/functions/coth.php new file mode 100644 index 0000000..7fe705a --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/coth.php @@ -0,0 +1,24 @@ +getReal() == 0.0 && $complex->getImaginary() == 0.0) { + return INF; + } + + return inverse(sin($complex)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/csch.php b/inc/vendor/markbaker/complex/classes/src/functions/csch.php new file mode 100644 index 0000000..f450098 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/csch.php @@ -0,0 +1,29 @@ +getReal() == 0.0 && $complex->getImaginary() == 0.0) { + return INF; + } + + return inverse(sinh($complex)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/exp.php b/inc/vendor/markbaker/complex/classes/src/functions/exp.php new file mode 100644 index 0000000..4cac696 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/exp.php @@ -0,0 +1,34 @@ +getReal() == 0.0) && (\abs($complex->getImaginary()) == M_PI)) { + return new Complex(-1.0, 0.0); + } + + $rho = \exp($complex->getReal()); + + return new Complex( + $rho * \cos($complex->getImaginary()), + $rho * \sin($complex->getImaginary()), + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/inverse.php b/inc/vendor/markbaker/complex/classes/src/functions/inverse.php new file mode 100644 index 0000000..7d3182a --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/inverse.php @@ -0,0 +1,29 @@ +getReal() == 0.0 && $complex->getImaginary() == 0.0) { + throw new \InvalidArgumentException('Division by zero'); + } + + return $complex->divideInto(1.0); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/ln.php b/inc/vendor/markbaker/complex/classes/src/functions/ln.php new file mode 100644 index 0000000..39071cf --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/ln.php @@ -0,0 +1,33 @@ +getReal() == 0.0) && ($complex->getImaginary() == 0.0)) { + throw new \InvalidArgumentException(); + } + + return new Complex( + \log(rho($complex)), + theta($complex), + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/log10.php b/inc/vendor/markbaker/complex/classes/src/functions/log10.php new file mode 100644 index 0000000..694d3d0 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/log10.php @@ -0,0 +1,32 @@ +getReal() == 0.0) && ($complex->getImaginary() == 0.0)) { + throw new \InvalidArgumentException(); + } elseif (($complex->getReal() > 0.0) && ($complex->getImaginary() == 0.0)) { + return new Complex(\log10($complex->getReal()), 0.0, $complex->getSuffix()); + } + + return ln($complex) + ->multiply(\log10(Complex::EULER)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/log2.php b/inc/vendor/markbaker/complex/classes/src/functions/log2.php new file mode 100644 index 0000000..081f2c4 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/log2.php @@ -0,0 +1,32 @@ +getReal() == 0.0) && ($complex->getImaginary() == 0.0)) { + throw new \InvalidArgumentException(); + } elseif (($complex->getReal() > 0.0) && ($complex->getImaginary() == 0.0)) { + return new Complex(\log($complex->getReal(), 2), 0.0, $complex->getSuffix()); + } + + return ln($complex) + ->multiply(\log(Complex::EULER, 2)); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/negative.php b/inc/vendor/markbaker/complex/classes/src/functions/negative.php new file mode 100644 index 0000000..dbd1192 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/negative.php @@ -0,0 +1,31 @@ +getReal(), + -1 * $complex->getImaginary(), + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/pow.php b/inc/vendor/markbaker/complex/classes/src/functions/pow.php new file mode 100644 index 0000000..18ee269 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/pow.php @@ -0,0 +1,40 @@ +getImaginary() == 0.0 && $complex->getReal() >= 0.0) { + return new Complex(\pow($complex->getReal(), $power)); + } + + $rValue = \sqrt(($complex->getReal() * $complex->getReal()) + ($complex->getImaginary() * $complex->getImaginary())); + $rPower = \pow($rValue, $power); + $theta = $complex->argument() * $power; + if ($theta == 0) { + return new Complex(1); + } + + return new Complex($rPower * \cos($theta), $rPower * \sin($theta), $complex->getSuffix()); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/rho.php b/inc/vendor/markbaker/complex/classes/src/functions/rho.php new file mode 100644 index 0000000..750f3f9 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/rho.php @@ -0,0 +1,28 @@ +getReal() * $complex->getReal()) + + ($complex->getImaginary() * $complex->getImaginary()) + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/sec.php b/inc/vendor/markbaker/complex/classes/src/functions/sec.php new file mode 100644 index 0000000..7dd43ea --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/sec.php @@ -0,0 +1,25 @@ +isReal()) { + return new Complex(\sin($complex->getReal())); + } + + return new Complex( + \sin($complex->getReal()) * \cosh($complex->getImaginary()), + \cos($complex->getReal()) * \sinh($complex->getImaginary()), + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/sinh.php b/inc/vendor/markbaker/complex/classes/src/functions/sinh.php new file mode 100644 index 0000000..4c0f650 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/sinh.php @@ -0,0 +1,32 @@ +isReal()) { + return new Complex(\sinh($complex->getReal())); + } + + return new Complex( + \sinh($complex->getReal()) * \cos($complex->getImaginary()), + \cosh($complex->getReal()) * \sin($complex->getImaginary()), + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/sqrt.php b/inc/vendor/markbaker/complex/classes/src/functions/sqrt.php new file mode 100644 index 0000000..9c171b8 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/sqrt.php @@ -0,0 +1,29 @@ +getSuffix()); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/tan.php b/inc/vendor/markbaker/complex/classes/src/functions/tan.php new file mode 100644 index 0000000..014d798 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/tan.php @@ -0,0 +1,40 @@ +isReal()) { + return new Complex(\tan($complex->getReal())); + } + + $real = $complex->getReal(); + $imaginary = $complex->getImaginary(); + $divisor = 1 + \pow(\tan($real), 2) * \pow(\tanh($imaginary), 2); + if ($divisor == 0.0) { + throw new \InvalidArgumentException('Division by zero'); + } + + return new Complex( + \pow(sech($imaginary)->getReal(), 2) * \tan($real) / $divisor, + \pow(sec($real)->getReal(), 2) * \tanh($imaginary) / $divisor, + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/tanh.php b/inc/vendor/markbaker/complex/classes/src/functions/tanh.php new file mode 100644 index 0000000..028741d --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/tanh.php @@ -0,0 +1,35 @@ +getReal(); + $imaginary = $complex->getImaginary(); + $divisor = \cos($imaginary) * \cos($imaginary) + \sinh($real) * \sinh($real); + if ($divisor == 0.0) { + throw new \InvalidArgumentException('Division by zero'); + } + + return new Complex( + \sinh($real) * \cosh($real) / $divisor, + 0.5 * \sin(2 * $imaginary) / $divisor, + $complex->getSuffix() + ); +} diff --git a/inc/vendor/markbaker/complex/classes/src/functions/theta.php b/inc/vendor/markbaker/complex/classes/src/functions/theta.php new file mode 100644 index 0000000..d12866c --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/functions/theta.php @@ -0,0 +1,38 @@ +getReal() == 0.0) { + if ($complex->isReal()) { + return 0.0; + } elseif ($complex->getImaginary() < 0.0) { + return M_PI / -2; + } + return M_PI / 2; + } elseif ($complex->getReal() > 0.0) { + return \atan($complex->getImaginary() / $complex->getReal()); + } elseif ($complex->getImaginary() < 0.0) { + return -(M_PI - \atan(\abs($complex->getImaginary()) / \abs($complex->getReal()))); + } + + return M_PI - \atan($complex->getImaginary() / \abs($complex->getReal())); +} diff --git a/inc/vendor/markbaker/complex/classes/src/operations/add.php b/inc/vendor/markbaker/complex/classes/src/operations/add.php new file mode 100644 index 0000000..10bd42f --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/operations/add.php @@ -0,0 +1,46 @@ +isComplex() && $complex->isComplex() && + $result->getSuffix() !== $complex->getSuffix()) { + throw new Exception('Suffix Mismatch'); + } + + $real = $result->getReal() + $complex->getReal(); + $imaginary = $result->getImaginary() + $complex->getImaginary(); + + $result = new Complex( + $real, + $imaginary, + ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix()) + ); + } + + return $result; +} diff --git a/inc/vendor/markbaker/complex/classes/src/operations/divideby.php b/inc/vendor/markbaker/complex/classes/src/operations/divideby.php new file mode 100644 index 0000000..089e0ef --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/operations/divideby.php @@ -0,0 +1,56 @@ +isComplex() && $complex->isComplex() && + $result->getSuffix() !== $complex->getSuffix()) { + throw new Exception('Suffix Mismatch'); + } + if ($complex->getReal() == 0.0 && $complex->getImaginary() == 0.0) { + throw new \InvalidArgumentException('Division by zero'); + } + + $delta1 = ($result->getReal() * $complex->getReal()) + + ($result->getImaginary() * $complex->getImaginary()); + $delta2 = ($result->getImaginary() * $complex->getReal()) - + ($result->getReal() * $complex->getImaginary()); + $delta3 = ($complex->getReal() * $complex->getReal()) + + ($complex->getImaginary() * $complex->getImaginary()); + + $real = $delta1 / $delta3; + $imaginary = $delta2 / $delta3; + + $result = new Complex( + $real, + $imaginary, + ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix()) + ); + } + + return $result; +} diff --git a/inc/vendor/markbaker/complex/classes/src/operations/divideinto.php b/inc/vendor/markbaker/complex/classes/src/operations/divideinto.php new file mode 100644 index 0000000..3dfe085 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/operations/divideinto.php @@ -0,0 +1,56 @@ +isComplex() && $complex->isComplex() && + $result->getSuffix() !== $complex->getSuffix()) { + throw new Exception('Suffix Mismatch'); + } + if ($result->getReal() == 0.0 && $result->getImaginary() == 0.0) { + throw new \InvalidArgumentException('Division by zero'); + } + + $delta1 = ($complex->getReal() * $result->getReal()) + + ($complex->getImaginary() * $result->getImaginary()); + $delta2 = ($complex->getImaginary() * $result->getReal()) - + ($complex->getReal() * $result->getImaginary()); + $delta3 = ($result->getReal() * $result->getReal()) + + ($result->getImaginary() * $result->getImaginary()); + + $real = $delta1 / $delta3; + $imaginary = $delta2 / $delta3; + + $result = new Complex( + $real, + $imaginary, + ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix()) + ); + } + + return $result; +} diff --git a/inc/vendor/markbaker/complex/classes/src/operations/multiply.php b/inc/vendor/markbaker/complex/classes/src/operations/multiply.php new file mode 100644 index 0000000..bf2473e --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/operations/multiply.php @@ -0,0 +1,48 @@ +isComplex() && $complex->isComplex() && + $result->getSuffix() !== $complex->getSuffix()) { + throw new Exception('Suffix Mismatch'); + } + + $real = ($result->getReal() * $complex->getReal()) - + ($result->getImaginary() * $complex->getImaginary()); + $imaginary = ($result->getReal() * $complex->getImaginary()) + + ($result->getImaginary() * $complex->getReal()); + + $result = new Complex( + $real, + $imaginary, + ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix()) + ); + } + + return $result; +} diff --git a/inc/vendor/markbaker/complex/classes/src/operations/subtract.php b/inc/vendor/markbaker/complex/classes/src/operations/subtract.php new file mode 100644 index 0000000..075ef44 --- /dev/null +++ b/inc/vendor/markbaker/complex/classes/src/operations/subtract.php @@ -0,0 +1,46 @@ +isComplex() && $complex->isComplex() && + $result->getSuffix() !== $complex->getSuffix()) { + throw new Exception('Suffix Mismatch'); + } + + $real = $result->getReal() - $complex->getReal(); + $imaginary = $result->getImaginary() - $complex->getImaginary(); + + $result = new Complex( + $real, + $imaginary, + ($imaginary == 0.0) ? null : max($result->getSuffix(), $complex->getSuffix()) + ); + } + + return $result; +} diff --git a/inc/vendor/markbaker/complex/composer.json b/inc/vendor/markbaker/complex/composer.json new file mode 100644 index 0000000..cb05712 --- /dev/null +++ b/inc/vendor/markbaker/complex/composer.json @@ -0,0 +1,77 @@ +{ + "name": "markbaker/complex", + "type": "library", + "description": "PHP Class for working with complex numbers", + "keywords": ["complex", "mathematics"], + "homepage": "https://github.com/MarkBaker/PHPComplex", + "license": "MIT", + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "require": { + "php": "^5.6.0|^7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|^5.4.0", + "phpdocumentor/phpdocumentor":"2.*", + "phpmd/phpmd": "2.*", + "sebastian/phpcpd": "2.*", + "phploc/phploc": "2.*", + "squizlabs/php_codesniffer": "^3.3.0", + "phpcompatibility/php-compatibility": "^8.0", + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3" + }, + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + }, + "files": [ + "classes/src/functions/abs.php", + "classes/src/functions/acos.php", + "classes/src/functions/acosh.php", + "classes/src/functions/acot.php", + "classes/src/functions/acoth.php", + "classes/src/functions/acsc.php", + "classes/src/functions/acsch.php", + "classes/src/functions/argument.php", + "classes/src/functions/asec.php", + "classes/src/functions/asech.php", + "classes/src/functions/asin.php", + "classes/src/functions/asinh.php", + "classes/src/functions/atan.php", + "classes/src/functions/atanh.php", + "classes/src/functions/conjugate.php", + "classes/src/functions/cos.php", + "classes/src/functions/cosh.php", + "classes/src/functions/cot.php", + "classes/src/functions/coth.php", + "classes/src/functions/csc.php", + "classes/src/functions/csch.php", + "classes/src/functions/exp.php", + "classes/src/functions/inverse.php", + "classes/src/functions/ln.php", + "classes/src/functions/log2.php", + "classes/src/functions/log10.php", + "classes/src/functions/negative.php", + "classes/src/functions/pow.php", + "classes/src/functions/rho.php", + "classes/src/functions/sec.php", + "classes/src/functions/sech.php", + "classes/src/functions/sin.php", + "classes/src/functions/sinh.php", + "classes/src/functions/sqrt.php", + "classes/src/functions/tan.php", + "classes/src/functions/tanh.php", + "classes/src/functions/theta.php", + "classes/src/operations/add.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "minimum-stability": "dev" +} \ No newline at end of file diff --git a/inc/vendor/markbaker/complex/examples/complexTest.php b/inc/vendor/markbaker/complex/examples/complexTest.php new file mode 100644 index 0000000..7dafd8a --- /dev/null +++ b/inc/vendor/markbaker/complex/examples/complexTest.php @@ -0,0 +1,154 @@ +add(456); +echo $x, PHP_EOL; + +$x = new Complex(123.456); +$x->add(789.012); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->add(new Complex(-987.654, -32.1)); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->add(-987.654); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->add(new Complex(0, 1)); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->add(new Complex(0, -1)); +echo $x, PHP_EOL; + + +echo PHP_EOL, 'Subtract', PHP_EOL; + +$x = new Complex(123); +$x->subtract(456); +echo $x, PHP_EOL; + +$x = new Complex(123.456); +$x->subtract(789.012); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->subtract(new Complex(-987.654, -32.1)); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->subtract(-987.654); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->subtract(new Complex(0, 1)); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->subtract(new Complex(0, -1)); +echo $x, PHP_EOL; + + +echo PHP_EOL, 'Multiply', PHP_EOL; + +$x = new Complex(123); +$x->multiply(456); +echo $x, PHP_EOL; + +$x = new Complex(123.456); +$x->multiply(789.012); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->multiply(new Complex(-987.654, -32.1)); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->multiply(-987.654); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->multiply(new Complex(0, 1)); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->multiply(new Complex(0, -1)); +echo $x, PHP_EOL; + + +echo PHP_EOL, 'Divide By', PHP_EOL; + +$x = new Complex(123); +$x->divideBy(456); +echo $x, PHP_EOL; + +$x = new Complex(123.456); +$x->divideBy(789.012); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->divideBy(new Complex(-987.654, -32.1)); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->divideBy(-987.654); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->divideBy(new Complex(0, 1)); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->divideBy(new Complex(0, -1)); +echo $x, PHP_EOL; + + +echo PHP_EOL, 'Divide Into', PHP_EOL; + +$x = new Complex(123); +$x->divideInto(456); +echo $x, PHP_EOL; + +$x = new Complex(123.456); +$x->divideInto(789.012); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->divideInto(new Complex(-987.654, -32.1)); +echo $x, PHP_EOL; + +$x = new Complex(123.456, 78.90); +$x->divideInto(-987.654); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->divideInto(new Complex(0, 1)); +echo $x, PHP_EOL; + +$x = new Complex(-987.654, -32.1); +$x->divideInto(new Complex(0, -1)); +echo $x, PHP_EOL; diff --git a/inc/vendor/markbaker/complex/examples/testFunctions.php b/inc/vendor/markbaker/complex/examples/testFunctions.php new file mode 100644 index 0000000..4d5ed73 --- /dev/null +++ b/inc/vendor/markbaker/complex/examples/testFunctions.php @@ -0,0 +1,52 @@ +getMessage(), PHP_EOL; + } + } + echo PHP_EOL; + } +} diff --git a/inc/vendor/markbaker/complex/examples/testOperations.php b/inc/vendor/markbaker/complex/examples/testOperations.php new file mode 100644 index 0000000..f791263 --- /dev/null +++ b/inc/vendor/markbaker/complex/examples/testOperations.php @@ -0,0 +1,34 @@ + ', $result, PHP_EOL; + +echo PHP_EOL; + +echo 'Subtraction', PHP_EOL; + +$result = \Complex\subtract(...$values); +echo '=> ', $result, PHP_EOL; + +echo PHP_EOL; + +echo 'Multiplication', PHP_EOL; + +$result = \Complex\multiply(...$values); +echo '=> ', $result, PHP_EOL; diff --git a/inc/vendor/markbaker/complex/license.md b/inc/vendor/markbaker/complex/license.md new file mode 100644 index 0000000..5b4b156 --- /dev/null +++ b/inc/vendor/markbaker/complex/license.md @@ -0,0 +1,25 @@ +The MIT License (MIT) +===================== + +Copyright © `2017` `Mark Baker` + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the “Software”), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/.gitignore b/inc/vendor/pacificsec/cpe/.gitignore new file mode 100644 index 0000000..a7a214c --- /dev/null +++ b/inc/vendor/pacificsec/cpe/.gitignore @@ -0,0 +1,5 @@ +/.settings/ +/.buildpath +/.project +/vendor/ +/composer.lock diff --git a/inc/vendor/pacificsec/cpe/README.md b/inc/vendor/pacificsec/cpe/README.md index c855f04..d03c72c 100644 --- a/inc/vendor/pacificsec/cpe/README.md +++ b/inc/vendor/pacificsec/cpe/README.md @@ -22,3 +22,45 @@ Features - CPE rich comparison. - CPE Language parsing and evaluation. - MIT Licensed. + +Getting Started +-------- +- Clone repository + +```bash +$ git clone https://github.com/pacificsec/cpe.git +$ cd cpe +``` +- Create a new PHP file to run tests + +```php +unbindURI("cpe:/a:microsoft:internet_explorer%01%01%01%01:?:beta"); +var_dump($wfn); +$wfn = $cpenu->unbindURI("cpe:/a:microsoft:internet_explorer:8.%2a:sp%3f"); +var_dump($wfn); +$wfn = $cpenu->unbindURI("cpe:/a:microsoft:internet_explorer:8.%02:sp%01"); +var_dump($wfn); +$wfn = $cpenu->unbindURI("cpe:/a:hp:insight_diagnostics:7.4.0.1570::~~online~win2003~x64~"); +var_dump($wfn); +$wfn = $cpenu->unbindFS("cpe:2.3:a:micr\\?osoft:internet_explorer:8.0.6001:beta:*:*:*:*:*:*"); +var_dump($wfn); +``` \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/composer.json b/inc/vendor/pacificsec/cpe/composer.json new file mode 100644 index 0000000..b386db0 --- /dev/null +++ b/inc/vendor/pacificsec/cpe/composer.json @@ -0,0 +1,26 @@ +{ + "name" : "pacificsec/cpe", + "type" : "library", + "description" : "CPE: Common Platform Enumeration for PHP", + "keywords" : [ + "cpe", + "cve", + "security", + "pacificsec" + ], + "homepage" : "https://github.com/pacificsec/cpe", + "license" : "MIT", + "authors" : [{ + "name" : "Antonio Franco", + "email" : "antonio.franco@pacificsec.com" + } + ], + "require" : { + "php" : ">=5.3.0" + }, + "autoload" : { + "psr-4" : { + "PacificSec\\CPE\\" : "src" + } + } +} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/src/Common/LogicalValue.php b/inc/vendor/pacificsec/cpe/src/Common/LogicalValue.php new file mode 100644 index 0000000..5d13494 --- /dev/null +++ b/inc/vendor/pacificsec/cpe/src/Common/LogicalValue.php @@ -0,0 +1,44 @@ +. + * + * @see cpe.mitre.org for more information. + * @author Antonio Franco + * @email antonio.franco@pacificsec.com + */ +class LogicalValue { + + private $any = false; + private $na = false; + + // Object must be constructed with the string "ANY" or "NA". + public function __construct($type) { + if ($type == "ANY") { + $this->any = true; + } else if ($type == "NA") { + $this->na = true; + } else { + throw new Exception("LogicalValue must be ANY or NA"); + } + } + + public function isANY(){ + return $this->any; + } + + public function isNA(){ + return $this->na; + } + + public function __toString(){ + if ($this->any){ + return "ANY"; + } + return "NA"; + } +} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/src/Common/Utilities.php b/inc/vendor/pacificsec/cpe/src/Common/Utilities.php new file mode 100644 index 0000000..e1e1f03 --- /dev/null +++ b/inc/vendor/pacificsec/cpe/src/Common/Utilities.php @@ -0,0 +1,166 @@ +. + * + * @see cpe.mitre.org for more information. + * @author Antonio Franco + * @email antonio.franco@pacificsec.com + */ +class Utilities { + + /** + * Searches string for special characters * and ? + * @param string $string to be searched + * @return bool true if string contains wildcard, false otherwise + */ + public static function containsWildcards($string) { + if (strpos($string, "*") !== false || strpos($string, "?") !== false) { + if (!(strpos($string, "\\") !== false)) { + return true; + } + } + return false; + } + + /** + * Checks if given number is even or not + * @param int $num number to check + * @return bool true if number is even, false if not + */ + public static function isEvenNumber($num) { + return (is_int($num) && $num % 2 == 0); + } + + /** + * Counts the number of escape characters in the string beginning and ending + * at the given indices + * @param string $str string to search + * @param int $start beginning index + * @param int $end ending index + * @return number of escape characters in string + * @todo fix the use of $str. The Java version is also not using this variable. + */ + public static function countEscapeCharacters($str, $start, $end) { + $result = 0; + $active = false; + $i = 0; + while ($i < $end) { + if ($active && ($i >= $start)) { + $result = $result + 1; + } + $i = $i + 1; + } + return $result; + } + + /** + * Searches a string for the first unescaped colon and returns the index of + * that colon + * @param string $str string to search + * @return int index of first unescaped colon, or 0 if not found + */ + public static function getUnescapedColonIndex($str) { + $found = false; + $colon_idx = 0; + $start_idx = 0; + // Find the first non-escaped colon. + while (!$found) { + $colon_idx = strpos($str, ":", $start_idx + 1); + // If no colon is found, return 0. + if ($colon_idx === false) { + return 0; + } + // Peek at character before colon. + if (substr($str, $colon_idx-1, 1) == "\\") { + // If colon is escaped, keep looking. + $start_idx = $colon_idx; + } else { + $found = true; + } + } + return $colon_idx; + } + + /** + * Returns true if the string contains only + * alphanumeric characters or the underscore character, + * false otherwise. + * @param string $c the string in question + * @return bool true if $c is alphanumeric or underscore, false if not + */ + public static function isAlphanum($c) { + return (preg_match("/^[a-zA-Z0-9\_]+$/", $c) ? true : false); + } + + /** + * This function is not part of the reference implementation pseudo code + * found in the CPE 2.3 specification. It enforces two rules in the + * specification: + * URI must start with the characters "cpe:/" + * A URI may not contain more than 7 components + * If either rule is violated, a Exception is thrown. + * @param $in string with URI to be validated + */ + public static function validateURI($in) { + // make sure uri starts with cpe:/ + if (strpos(strtolower($in), "cpe:/") !== 0) { + throw new Exception("Error: URI must start with 'cpe:/'. Given: " . $in, 0); + } + // make sure uri doesn't contain more than 7 colons + $count = sizeof(explode(":", $in)); + if ($count > 8) { + throw new Exception("Error parsing URI. Found " . ($count - 8) . " extra components in: " . $in, 0); + } + } + + /** + * This function is not part of the reference implementation pseudo code + * found in the CPE 2.3 specification. It enforces three rules found in the + * specification: + * Formatted string must start with the characters "cpe:2.3:" + * A formatted string must contain 11 components + * A formatted string must not contain empty components + * If any rule is violated, a ParseException is thrown. + * @param $in string with FS to be validated + */ + public static function validateFS($in) { + if (strpos(strtolower($in), "cpe:2.3:") !== 0) { + throw new Exception("Error: Formatted String must start with \"cpe:2.3\". Given: " . $in, 0); + } + + $count = 0; + for ($i = 0; $i != strlen($in); $i++){ + if (substr($in, $i, 1) == ":"){ + if (substr($in, $i - 1, 1) != "\\"){ + $count++; + } + if (($i+1) < strlen($in) && substr($in, $i+1, 1) == ":"){ + throw new Exception("Error parsing formatted string. Found empty component", 0); + } + } + } + if ($count > 12){ + $extra = $count - 12; + $s = "Error parsing formatted string. Found " . $extra . " extra component"; + if ($extra > 1){ + $s = $s . "s"; + } + $s = $s . " in: " . $in; + throw new Exception($s, 0); + } + if ($count < 12){ + $missing = 12 - $count; + $s = "Error parsing formatted string. Missing " . $missing . " component"; + if ($missing > 1){ + $s = $s . "s"; + } + throw new Exception($s, 0); + } + } +} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/src/Common/WellFormedName.php b/inc/vendor/pacificsec/cpe/src/Common/WellFormedName.php new file mode 100644 index 0000000..e3a7253 --- /dev/null +++ b/inc/vendor/pacificsec/cpe/src/Common/WellFormedName.php @@ -0,0 +1,210 @@ +. + * + * @see cpe.mitre.org for details. + * @author Antonio Franco + * @email antonio.franco@pacificsec.com + */ +class WellFormedName { + + // Underlying wfn representation. + private $wfn = null; + // All permissible WFN attributes as defined by specification. + private $attributes = array("part", "vendor", "product", "version", + "update", "edition", "language", "sw_edition", "target_sw", + "target_hw", "other"); + + /** + * Constructs a new WellFormedName object, setting each component to the + * given parameter value. If a parameter is null, the component is set to + * the default value "ANY". + * @param $part string representing the part component + * @param $vendor string representing the vendor component + * @param $product string representing the product component + * @param $version string representing the version component + * @param $update string representing the update component + * @param $edition string representing the edition component + * @param $language string representing the language component + * @param $sw_edition string representing the sw_edition component + * @param $target_sw string representing the target_sw component + * @param $target_hw string representing the target_hw component + * @param $other string representing the other component + */ + public function __construct($part = null, $vendor = null, $product = null, $version = null, + $update = null, $edition = null, $language = null, $sw_edition = null, $target_sw = null, + $target_hw = null, $other = null) { + + $this->wfn = array(); + + // Constructs a new WellFormedName object, with all components set to the default value "ANY". + if ($part === null && $vendor === null && $product === null && $version === null && + $update === null && $edition === null && $language === null && $sw_edition === null && $target_sw === null && + $target_hw === null && $other === null){ + foreach ($this->attributes as $a){ + if ($a != "part"){ + $this->set($a, new LogicalValue("ANY")); + } + } + return; + } + + $this->set("part", $part); + $this->set("vendor", $vendor); + $this->set("product", $product); + $this->set("version", $version); + $this->set("update", $update); + $this->set("edition", $edition); + $this->set("language", $language); + $this->set("sw_edition", $sw_edition); + $this->set("target_sw", $target_sw); + $this->set("target_hw", $target_hw); + $this->set("other", $other); + } + + /** + * @param $attribute string representing the component value to get + * @return string the string value of the given component, or default value "ANY" + * if the component does not exist + */ + public function get($attribute){ + if (array_key_exists($attribute, $this->wfn)) + return $this->wfn[$attribute]; + else + return new LogicalValue("ANY"); + } + + /** + * Sets the given attribute to value, if the attribute is in the list of + * permissible components + * @param $attribute string representing the component to set + * @param $value object or string representing the value of the given component + */ + public final function set($attribute, $value){ + // Iterate over permissible attributes. + foreach ($this->attributes as $a){ + // If the argument is a valid attribute, set that attribute's value. + if ($attribute == $a) { + // check to see if we're setting a LogicalValue ANY or NA + if ($value instanceof LogicalValue){ + // don't allow logical values in part component + if ($attribute == "part"){ + var_dump($value); echo "
\n"; + var_dump($a); echo "
\n"; + var_dump($attribute); echo "
\n"; + throw new Exception("Error! part component cannot be a logical value"); + } + // put the Object in the ht and break + $this->wfn[$attribute] = $value; + break; + } + if ($value == null || $value == ""){ + // if value is null or blank, set attribute to default logical ANY + $this->wfn[$attribute] = new LogicalValue("ANY"); + break; + } + $svalue = $value; + // Reg exs + // check for printable characters - no control characters + if (!preg_match("/^[[:print:]]*$/", $svalue)){ + throw new Exception("Error! encountered non printable character in: " . $svalue, 0); + } + // svalue has whitespace + if (preg_match("/^.*\\s+.*$/", $svalue)){ + throw new Exception("Error! component cannot contain whitespace: " . $svalue, 0); + } + // svalue has more than one unquoted star + if (preg_match("/^\\*{2,}.*$/", $svalue) || preg_match("/^.*\\*{2,}$/", $svalue)){ + throw new Exception("Error! component cannot contain more than one * in sequence: " . $svalue, 0); + } + // svalue has unquoted punctuation embedded + if (preg_match("/^.*(?\\@\\[\\]\\^\\`\\{\\|\\}\\~\\-].*$/", $svalue)) { + throw new Exception("Error! component cannot contain unquoted punctuation: " . $svalue, 0); + } + // svalue has an unquoted * + if (preg_match("/^.+(?wfn[$attribute] = $svalue; + break; + } + // remove leading and trailing ?s + $v = $svalue; + while (strpos($v, "?") === 0) { + // remove all leading ?'s + $v = substr($v, 1); + } + $v = strrev($v); + while (strpos($v, "?") === 0) { + // remove all trailing ?'s (string has been reversed) + $v = substr($v, 1); + } + // back to normal + $v = strrev($v); + // after leading and trailing ?s are removed, check if value + // contains unquoted ?s + if (preg_match("/^.+(?wfn[$attribute] = $svalue; + break; + } + } + } + + /** + * + * @return string representation of the WellFormedName + */ + public function __toString() { + $str = "wfn:["; + foreach ($this->attributes as $attr) { + $str = $str . $attr; + $str = $str . "="; + + $o = $this->wfn[$attr]; + if ($o instanceof LogicalValue) { + $str = $str . $o; + $str = $str . ", "; + } else { + $str = $str . "\""; + $str = $str . $o; + $str = $str . "\", "; + } + } + $str = substr($str, 0, strlen($str)-1); + $str = substr($str, 0, strlen($str)-1); + $str = $str . "]"; + + return $str; + } + +} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/src/Matching/CPENameMatcher.php b/inc/vendor/pacificsec/cpe/src/Matching/CPENameMatcher.php new file mode 100644 index 0000000..a4d4ae3 --- /dev/null +++ b/inc/vendor/pacificsec/cpe/src/Matching/CPENameMatcher.php @@ -0,0 +1,287 @@ +. + * + * @see cpe.mitre.org for more information. + * @author Antonio Franco + * @email antonio.franco@pacificsec.com + */ +class CPENameMatcher { + + /** + * Tests two Well Formed Names for disjointness. + * @param $source WellFormedName Source WFN + * @param $target WellFormedName Target WFN + * @return true if the names are disjoint, false otherwise + */ + public function isDisjoint(WellFormedName $source, WellFormedName $target) { + // if any pairwise comparison is disjoint, the names are disjoint. + $resultList = $this->compareWFNs($source, $target); + foreach ($resultList as $result){ + if ($result == Relation::DISJOINT) + return true; + } + return false; + } + + /** + * Tests two Well Formed Names for equality. + * @param $source WellFormedName Source WFN + * @param $target WellFormedName Target WFN + * @return true if the names are equal, false otherwise + */ + public function isEqual(WellFormedName $source, WellFormedName $target) { + // if every pairwise comparison is equal, the names are equal. + $resultList = $this->compareWFNs($source, $target); + foreach ($resultList as $result){ + if ($result != Relation::EQUAL){ + return false; + } + } + return true; + } + + /** + * Tests if the target Well Formed Name is a subset of the source Well Formed + * Name. + * @param $source WellFormedName Source WFN + * @param $target WellFormedName Target WFN + * @return true if the target is a subset of the source, false otherwise + */ + public function isSubset(WellFormedName $source, WellFormedName $target) { + // if any comparison is anything other than subset or equal, then target is + // not a subset of source. + $resultList = $this->compareWFNs($source, $target); + foreach ($resultList as $result){ + if ($result != Relation::SUBSET && $result != Relation::EQUAL) { + return false; + } + } + return true; + } + + /** + * Tests if the target Well Formed name is a superset of the source Well Formed + * Name. + * @param $source WellFormedName Source WFN + * @param $target WellFormedName Target WFN + * @return true if the target is a superset of the source, false otherwise + */ + public function isSuperset(WellFormedName $source, WellFormedName $target) { + // if any comparison is anything other than superset or equal, then target is not + // a superset of source. + $resultList = $this->compareWFNs($source, $target); + foreach ($resultList as $result){ + if ($result != Relation::SUPERSET && $result != Relation::EQUAL) { + return false; + } + } + return true; + } + + /** + * Compares each attribute value pair in two Well Formed Names. + * @param $source WellFormedName Source WFN + * @param $target WellFormedName Target WFN + * @return array A array mapping attribute string to attribute value Relation + */ + public function compareWFNs(WellFormedName $source, WellFormedName $target) { + $result = array(); + $result["part"] = $this->compare($source->get("part"), $target->get("part")); + $result["vendor"] = $this->compare($source->get("vendor"), $target->get("vendor")); + $result["product"] = $this->compare($source->get("product"), $target->get("product")); + $result["version"] = $this->compare($source->get("version"), $target->get("version")); + $result["update"] = $this->compare($source->get("update"), $target->get("update")); + $result["edition"] = $this->compare($source->get("edition"), $target->get("edition")); + $result["language"] = $this->compare($source->get("language"), $target->get("language")); + $result["sw_edition"] = $this->compare($source->get("sw_edition"), $target->get("sw_edition")); + $result["target_sw"] = $this->compare($source->get("target_sw"), $target->get("target_sw")); + $result["target_hw"] = $this->compare($source->get("target_hw"), $target->get("target_hw")); + $result["other"] = $this->compare($source->get("other"), $target->get("other")); + return $result; + } + + /** + * Compares an attribute value pair. + * @param string $source Source attribute value. + * @param string $target Target attribute value. + * @return int The relation between the two attribute values. + */ + private function compare($source, $target) { + // matching is case insensitive, convert strings to lowercase. + if ($this->isString($source)) { + $source = strtolower($source); + } + if ($this->isString($target)) { + $target = strtolower($target); + } + + // Unquoted wildcard characters yield an undefined result. + if ($this->isString($target) && Utilities::containsWildcards($target)) { + return Relation::UNDEFINED; + } + // If source and target values are equal, then result is equal. + if ($source == $target) { + return Relation::EQUAL; + } + + // Check to see if source or target are Logical Values. + $lvSource = null; + $lvTarget = null; + if ($source instanceof LogicalValue) { + $lvSource = $source; + } + if ($target instanceof LogicalValue) { + $lvTarget = $target; + } + if ($lvSource != null && $lvTarget != null) { + // If Logical Values are equal, result is equal. + if ($lvSource->isANY() == $lvTarget->isANY() || $lvSource->isNA() == $lvTarget->isNA()) { + return Relation::EQUAL; + } + } + // If source value is ANY, result is a superset. + if ($lvSource != null) { + if ($lvSource->isANY()) { + return Relation::SUPERSET; + } + } + // If target value is ANY, result is a subset. + if ($lvTarget != null) { + if ($lvTarget->isANY()) { + return Relation::SUBSET; + } + } + // If source or target is NA, result is disjoint. + if ($lvSource != null) { + if ($lvSource->isNA()) { + return Relation::DISJOINT; + } + } + if ($lvTarget != null) { + if ($lvTarget->isNA()) { + return Relation::DISJOINT; + } + } + // only Strings will get to this point, not LogicalValues + return $this->compareStrings($source, $target); + } + + /** + * Compares a source string to a target string, and addresses the condition + * in which the source string includes unquoted special characters. It + * performs a simple regular expression match, with the assumption that + * (as required) unquoted special characters appear only at the beginning + * and/or the end of the source string. It also properly differentiates + * between unquoted and quoted special characters. + * + * @param $source string Source attribute value. + * @param $target string Target attribute value. + * @return Relation between source and target Strings. + */ + private function compareStrings($source, $target) { + $start = 0; + $end = strlen($source); + $begins = 0; + $ends = 0; + $index = 0; $leftover = 0; $escapes = 0; + + if (substr($source, 0, 1) == "*") { + $start = 1; + $begins = -1; + } else { + while (($start < strlen($source)) && (substr($source, $start, 1) == "?")) { + $start = $start + 1; + $begins = $begins + 1; + } + } + if ((substr($source, $end - 1, 1) == "*") && ($this->isEvenWildcards($source, $end - 1))) { //TODO + $end = $end - 1; + $ends = -1; + } else { + while (($end > 0) && substr($source, $end - 1, 1) == "?" && ($this->isEvenWildcards($source, $end - 1))) { //TODO + $end = $end - 1; + $ends = $ends + 1; + } + } + + $source = substr($source, $start, $end-$start); + $index = -1; + $leftover = strlen($target); + while ($leftover > 0) { + $index = strpos($target, $source, $index + 1); + if ($index === false) { + break; + } + $escapes = Utilities::countEscapeCharacters($target, 0, $index); + if (($index > 0) && ($begins != -1) && ($begins < ($index - $escapes))) { + break; + } + $escapes = Utilities::countEscapeCharacters($target, $index + 1, strlen($target)); + $leftover = strlen($target) - $index - $escapes - strlen($source); + if (($leftover > 0) && (($ends != -1) && ($leftover > $ends))) { + continue; + } + return Relation::SUPERSET; + } + return Relation::DISJOINT; + } + + /** + * Searches a string for the backslash character + * @param $str string to search in + * @param int $idx end index + * @return true if the number of backslash characters is even, false if odd + */ + private function isEvenWildcards($str, $idx) { + $result = 0; + while (($idx > 0) && (strpos($str, "\\", $idx - 1)) !== false) { + $idx = $idx - 1; + $result = $result + 1; + } + return Utilities::isEvenNumber($result); + } + + /** + * Tests if an Object is an instance of the String class + * @param mixed $arg the var to test + * @return bool true if arg is a string, false if not + */ + private function isString($arg) { + return is_string($arg); + } + + /* + * Static method to demonstrate this class. + */ + public static function test() { + // Examples. + $wfn = new WellFormedName("a", "microsoft", "internet_explorer", "8\\.0\\.6001", "beta", new LogicalValue("ANY"), "sp2", null, null, null, null); + $wfn2 = new WellFormedName("a", "microsoft", "internet_explorer", new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY")); + $cpenm = new CPENameMatcher(); + $cpenu = new CPENameUnbinder(); + $cpenb = new CPENameBinder(); + $wfn = $cpenu->unbindURI($cpenb->bindToURI($wfn)); + $wfn2 = $cpenu->unbindFS($cpenb->bindToFS($wfn2)); + var_dump($cpenm->isDisjoint($wfn, $wfn2)); // false + var_dump($cpenm->isEqual($wfn, $wfn2)); // false + var_dump($cpenm->isSubset($wfn, $wfn2)); // true, $wfn2 is a subset of wfn + var_dump($cpenm->isSuperset($wfn, $wfn2)); // false + $wfn = $cpenu->unbindFS("cpe:2.3:a:adobe:*:9.*:*:PalmOS:*:*:*:*:*"); + $wfn2 = $cpenu->unbindURI("cpe:/a::Reader:9.3.2:-:-"); + var_dump($cpenm->isDisjoint($wfn, $wfn2)); // true, $wfn2 and wfn are disjoint + var_dump($cpenm->isEqual($wfn, $wfn2)); // false + var_dump($cpenm->isSubset($wfn, $wfn2)); // false + var_dump($cpenm->isSuperset($wfn, $wfn2)); // false + } +} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Matching/Relation.php b/inc/vendor/pacificsec/cpe/src/Matching/Relation.php similarity index 100% rename from inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Matching/Relation.php rename to inc/vendor/pacificsec/cpe/src/Matching/Relation.php diff --git a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Naming/CPENameBinder.php b/inc/vendor/pacificsec/cpe/src/Naming/CPENameBinder.php similarity index 53% rename from inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Naming/CPENameBinder.php rename to inc/vendor/pacificsec/cpe/src/Naming/CPENameBinder.php index 15e489e..864dc8b 100644 --- a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Naming/CPENameBinder.php +++ b/inc/vendor/pacificsec/cpe/src/Naming/CPENameBinder.php @@ -7,28 +7,41 @@ use PacificSec\CPE\Common\LogicalValue; /** * The CPENameBinder class is a simple implementation - * of the CPE Name binding algorithm, as specified in the - * CPE Naming Standard version 2.3. It is based on Java version - * implemented by Joshua Kraunelis . - * - * @see cpe.mitre.org for more information. + * of the CPE Name binding algorithm, as specified in the + * CPE Naming Standard version 2.3. + * It is based on Java version + * implemented by Joshua Kraunelis . + * + * @see cpe.mitre.org for more information. * @author Antonio Franco * @email antonio.franco@pacificsec.com */ -class CPENameBinder { +class CPENameBinder +{ /** * Binds a {@link WellFormedName} object to a URI. - * @param $w WellFormedName to be bound to URI - * @return URI binding of WFN + * + * @param $w WellFormedName + * to be bound to URI + * @return string URI binding of WFN */ - public function bindToURI(WellFormedName $w) { + public function bindToURI(WellFormedName $w) + { // Initialize the output with the CPE v2.2 URI prefix. $uri = "cpe:/"; // Define the attributes that correspond to the seven components in a v2.2. CPE. - $attributes = array("part", "vendor", "product", "version", "update", "edition", "language"); + $attributes = array( + "part", + "vendor", + "product", + "version", + "update", + "edition", + "language" + ); // Iterate over the well formed name foreach ($attributes as $a) { @@ -56,15 +69,28 @@ class CPENameBinder { /** * Top-level function used to bind WFN w to formatted string. - * @param $w WellFormedName to bind - * @return Formatted String + * + * @param $w WellFormedName + * to bind + * @return string Formatted String */ - public function bindToFS(WellFormedName $w) { + public function bindToFS(WellFormedName $w) + { // Initialize the output with the CPE v2.3 string prefix. $fs = "cpe:2.3:"; - foreach (array("part", "vendor", "product", "version", - "update", "edition", "language", "sw_edition", "target_sw", - "target_hw", "other") as $a) { + foreach (array( + "part", + "vendor", + "product", + "version", + "update", + "edition", + "language", + "sw_edition", + "target_sw", + "target_hw", + "other" + ) as $a) { $v = $this->bindValueForFS($w->get($a)); $fs = $fs . $v; // add a colon except at the very end @@ -78,10 +104,13 @@ class CPENameBinder { /** * Convert the value v to its proper string representation for insertion to * formatted string. - * @param $v value to convert - * @return Formatted value + * + * @param mixed $v + * value to convert + * @return mixed Formatted value */ - private function bindValueForFS($v) { + private function bindValueForFS($v) + { if ($v instanceof LogicalValue) { $l = $v; // The value NA binds to a blank. @@ -97,30 +126,34 @@ class CPENameBinder { } /** - * Inspect each character in string s. Certain nonalpha characters pass + * Inspect each character in string s. + * Certain nonalpha characters pass * thru without escaping into the result, but most retain escaping. - * @param $s - * @return + * + * @param + * $s + * @return */ - private function processQuotedChars($s) { + private function processQuotedChars($s) + { $result = ""; $idx = 0; while ($idx < strlen($s)) { $c = substr($s, $idx, 1); if ($c != "\\") { // unquoted characters pass thru unharmed. - $result = $result . $c; + $result .= $c; } else { // escaped characters are examined. $nextchr = substr($s, $idx + 1, 1); // the period, hyphen and underscore pass unharmed. if ($nextchr == "." || $nextchr == "-" || $nextchr == "_") { - $result = $result . $nextchr; + $result .= $nextchr; $idx = $idx + 2; continue; } else { // all others retain escaping. - $result = $result . "\\" . $nextchr; + $result .= "\\" . $nextchr; $idx = $idx + 2; continue; } @@ -132,12 +165,16 @@ class CPENameBinder { /** * Converts a string to the proper string for including in - * a CPE v2.2-conformant URI. The logical value ANY binds + * a CPE v2.2-conformant URI. + * The logical value ANY binds * to the blank in the 2.2-conformant URI. - * @param $s string to be converted - * @return converted string + * + * @param $s string + * to be converted + * @return string converted string */ - private function bindValueForURI($s) { + private function bindValueForURI($s) + { if ($s instanceof LogicalValue) { $l = $s; // The value NA binds to a blank. @@ -159,10 +196,13 @@ class CPENameBinder { * - Pass alphanumeric characters thru untouched * - Percent-encode quoted non-alphanumerics as needed * - Unquoted special characters are mapped to their special forms - * @param $s string to be transformed - * @return transformed string + * + * @param $s string + * to be transformed + * @return string transformed string */ - private function transformForURI($s) { + private function transformForURI($s) + { $result = ""; $idx = 0; @@ -171,7 +211,7 @@ class CPENameBinder { $thischar = substr($s, $idx, 1); // Alphanumerics (incl. underscore) pass untouched. if (Utilities::isAlphanum($thischar)) { - $result = $result . $thischar; + $result .= $thischar; $idx = $idx + 1; continue; } @@ -179,17 +219,17 @@ class CPENameBinder { if ($thischar == "\\") { $idx = $idx + 1; $nxtchar = substr($s, $idx, 1); - $result = $result . $this->pctEncode($nxtchar); + $result .= $this->pctEncode($nxtchar); $idx = $idx + 1; continue; } // Bind the unquoted '?' special character to "%01". if ($thischar == "?") { - $result = $result . "%01"; + $result .= "%01"; } // Bind the unquoted '*' special character to "%02". if ($thischar == "*") { - $result = $result . "%02"; + $result .= "%02"; } $idx = $idx + 1; } @@ -199,122 +239,98 @@ class CPENameBinder { /** * Returns the appropriate percent-encoding of character c. * Certain characters are returned without encoding. - * @param $c the single character string to be encoded - * @return the percent encoded string + * + * @param string $c the + * single character string to be encoded + * @return string the percent encoded string */ - private function pctEncode($c) { - if ($c == "!") { - return "%21"; + private function pctEncode($c) + { + switch ($c) { + case '!': + return "%21"; + case "\"": + return "%22"; + case "#": + return "%23"; + case "$": + return "%24"; + case "%": + return "%25"; + case "&": + return "%26"; + case "'": + return "%27"; + case "(": + return "%28"; + case ")": + return "%29"; + case "*": + return "%2a"; + case "+": + return "%2b"; + case ",": + return "%2c"; + case "/": + return "%2f"; + case ":": + return "%3a"; + case ";": + return "%3b"; + case "<": + return "%3c"; + case "=": + return "%3d"; + case ">": + return "%3e"; + case "?": + return "%3f"; + case "@": + return "%40"; + case "[": + return "%5b"; + case "\\": + return "%5c"; + case "]": + return "%5d"; + case "^": + return "%5e"; + case "`": + return "%60"; + case "{": + return "%7b"; + case "|": + return "%7c"; + case "}": + return "%7d"; + case "~": + return "%7e"; + default: + return $c; } - if ($c == "\"") { - return "%22"; - } - if ($c == "#") { - return "%23"; - } - if ($c == "$") { - return "%24"; - } - if ($c == "%") { - return "%25"; - } - if ($c == "&") { - return "%26"; - } - if ($c == "'") { - return "%27"; - } - if ($c == "(") { - return "%28"; - } - if ($c == ")") { - return "%29"; - } - if ($c == "*") { - return "%2a"; - } - if ($c == "+") { - return "%2b"; - } - if ($c == ",") { - return "%2c"; - } - // bound without encoding. - if ($c == "-") { - return $c; - } - // bound without encoding. - if ($c == ".") { - return $c; - } - if ($c == "/") { - return "%2f"; - } - if ($c == ":") { - return "%3a"; - } - if ($c == ";") { - return "%3b"; - } - if ($c == "<") { - return "%3c"; - } - if ($c == "=") { - return "%3d"; - } - if ($c == ">") { - return "%3e"; - } - if ($c == "?") { - return "%3f"; - } - if ($c == "@") { - return "%40"; - } - if ($c == "[") { - return "%5b"; - } - if ($c == "\\") { - return "%5c"; - } - if ($c == "]") { - return "%5d"; - } - if ($c == "^") { - return "%5e"; - } - if ($c == "`") { - return "%60"; - } - if ($c == "{") { - return "%7b"; - } - if ($c == "|") { - return "%7c"; - } - if ($c == "}") { - return "%7d"; - } - if ($c == "~") { - return "%7d"; - } - // Shouldn't reach here, return original character - return $c; } /** - * Packs the values of the five arguments into the single - * edition component. If all the values are blank, the + * Packs the values of the five arguments into the single + * edition component. + * If all the values are blank, the * function returns a blank. - * @param $ed edition string - * @param $sw_ed software edition string - * @param $t_sw target software string - * @param $t_hw target hardware string - * @param $oth other edition information string - * @return the packed string, or blank + * + * @param string $ed edition + * string + * @param string $sw_ed software + * edition string + * @param string $t_sw target + * software string + * @param string $t_hw target + * hardware string + * @param string $oth other + * edition information string + * @return string the packed string, or blank */ - private function pack($ed, $sw_ed, $t_sw, $t_hw, $oth) { - if ($sw_ed == "" && $t_sw == "" && $t_hw == "" && $oth == "") { + private function pack($ed, $sw_ed, $t_sw, $t_hw, $oth) + { + if ($sw_ed == "" && $t_sw == "" && $t_hw == "" && $oth == "") { // All the extended attributes are blank, so don't do // any packing, just return ed. return $ed; @@ -326,13 +342,16 @@ class CPENameBinder { /** * Removes trailing colons from the URI. - * @param $s the string to be trimmed - * @return the trimmed string + * + * @param string $s the + * string to be trimmed + * @return string the trimmed string */ - private function trim($s) { + private function trim($s) + { $s1 = strrev($s); $idx = 0; - for ($i = 0; $i != strlen($s1); $i++) { + for ($i = 0; $i != strlen($s1); $i ++) { if (substr($s1, $i, 1) == ":") { $idx = $idx + 1; } else { @@ -341,30 +360,30 @@ class CPENameBinder { } // Return the substring after all trailing colons, // reversed back to its original character order. - return strrev(substr($s1, $idx, strlen($s1)-$idx)); + return strrev(substr($s1, $idx, strlen($s1) - $idx)); } /* * Static method to demonstrate this class. */ - public static function test() { + public static function test() + { // A few examples. - echo "Testing CPENamingBind...
\n"; - $wfn = new WellFormedName("a", "microsoft", "internet_explorer", "8\\.0\\.6001", - "beta", new LogicalValue("ANY"), "sp2", null, null, null, null); - $wfn2 = new WellFormedName(); - - $wfn2->set("part", "a"); - $wfn2->set("vendor", "foo\\\$bar"); - $wfn2->set("product", "insight"); - $wfn2->set("version", "7\\.4\\.0\\.1570"); - $wfn2->set("target_sw", "win2003"); - $wfn2->set("update", new LogicalValue("NA")); - $wfn2->set("sw_edition", "online"); - $wfn2->set("target_hw", "x64"); - $cpenb = new CPENameBinder(); - - echo $cpenb->bindToURI($wfn) . "
\n"; - echo $cpenb->bindToFS($wfn2) . "
\n"; + echo "Testing CPENamingBind...
\n"; + $wfn = new WellFormedName("a", "microsoft", "internet_explorer", "8\\.0\\.6001", "beta", new LogicalValue("ANY"), "sp2", null, null, null, null); + $wfn2 = new WellFormedName(); + + $wfn2->set("part", "a"); + $wfn2->set("vendor", "foo\\\$bar"); + $wfn2->set("product", "insight"); + $wfn2->set("version", "7\\.4\\.0\\.1570"); + $wfn2->set("target_sw", "win2003"); + $wfn2->set("update", new LogicalValue("NA")); + $wfn2->set("sw_edition", "online"); + $wfn2->set("target_hw", "x64"); + $cpenb = new CPENameBinder(); + + echo $cpenb->bindToURI($wfn) . "
\n"; + echo $cpenb->bindToFS($wfn2) . "
\n"; } } \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/src/Naming/CPENameUnbinder.php b/inc/vendor/pacificsec/cpe/src/Naming/CPENameUnbinder.php new file mode 100644 index 0000000..14c3cb4 --- /dev/null +++ b/inc/vendor/pacificsec/cpe/src/Naming/CPENameUnbinder.php @@ -0,0 +1,466 @@ +. + * + * @see cpe.mitre.org for more information. + * @author Antonio Franco + * @email antonio.franco@pacificsec.com + */ +class CPENameUnbinder { + + /** + * Top level function used to unbind a URI to a WFN. + * @param $uri string representing the URI to be unbound. + * @return WellFormedName representing the unbound URI. + * @throws Exception representing parsing errors. + */ + public function unbindURI($uri) { + // Validate the URI + Utilities::validateURI($uri); + // Initialize the empty WFN. + $result = new WellFormedName(); + + for ($i = 0; $i != 8; $i++) { + // get the i'th component of uri + $v = $this->getCompURI($uri, $i); + switch ($i) { + case 1: + $result->set("part", $this->decode($v)); + break; + case 2: + $result->set("vendor", $this->decode($v)); + break; + case 3: + $result->set("product", $this->decode($v)); + break; + case 4: + $result->set("version", $this->decode($v)); + break; + case 5: + $result->set("update", $this->decode($v)); + break; + case 6: + // Special handling for edition component. + // Unpack edition if needed. + if ($v == "" || $v == "-" + || substr($v, 0, 1) != "~") { + // Just a logical value or a non-packed value. + // So unbind to legacy edition, leaving other + // extended attributes unspecified. + $result->set("edition", $this->decode($v)); + } else { + // We have five values packed together here. + $this->unpack($v, $result); + } + break; + case 7: + $result->set("language", $this->decode($v)); + break; + } + } + return $result; + } + + /** + * Top level function to unbind a formatted string to WFN. + * @param string $fs Formatted string to unbind + * @return WellFormedName + * @throws Exception representing parsing error + */ + public function unbindFS($fs) { + // Validate the formatted string + Utilities::validateFS($fs); + // Initialize empty WFN + $result = new WellFormedName(); + // The cpe scheme is the 0th component, the cpe version is the 1st. + // So we start parsing at the 2nd component. + for ($a = 2; $a != 13; $a++) { + // Get the a'th string field. + $v = $this->getCompFS($fs, $a); + // Unbind the string. + $v = $this->unbindValueFS($v); + // Set the value of the corresponding attribute. + switch ($a) { + case 2: + $result->set("part", $v); + break; + case 3: + $result->set("vendor", $v); + break; + case 4: + $result->set("product", $v); + break; + case 5: + $result->set("version", $v); + break; + case 6: + $result->set("update", $v); + break; + case 7: + $result->set("edition", $v); + break; + case 8: + $result->set("language", $v); + break; + case 9: + $result->set("sw_edition", $v); + break; + case 10: + $result->set("target_sw", $v); + break; + case 11: + $result->set("target_hw", $v); + break; + case 12: + $result->set("other", $v); + break; + } + } + return $result; + } + + /** + * Returns the i'th field of the formatted string. The colon is the field + * delimiter unless prefixed by a backslash. + * @param string $fs formatted string to retrieve from + * @param int $i index of field to retrieve from fs. + * @return int value of index of formatted string + */ + private function getCompFS($fs, $i) { + if ($i == 0) { + // return the substring from index 0 to the first occurence of an + // unescaped colon + $colon_idx = Utilities::getUnescapedColonIndex($fs); + // If no colon is found, we are at the end of the formatted string, + // so just return what's left. + if ($colon_idx == 0) { + return $fs; + } + return substr($fs, 0, $colon_idx); + } else { + $substrStart = Utilities::getUnescapedColonIndex($fs) + 1; + $substrLength = strlen($fs) - $substrStart; + return $this->getCompFS(substr($fs, $substrStart, $substrLength), $i - 1); + } + } + + /** + * Takes a string value and returns the appropriate logical value if string + * is the bound form of a logical value. If string is some general value + * string, add quoting of non-alphanumerics as needed. + * @param string $s value to be unbound + * @return string logical value or quoted string + * @throws Exception representing parsing errors + */ + private function unbindValueFS($s) { + if ($s == "*") { + return new LogicalValue("ANY"); + } + if ($s == "-") { + return new LogicalValue("NA"); + } + return $this->addQuoting($s); + } + + /** + * Inspect each character in a string, copying quoted characters, with + * their escaping, into the result. Look for unquoted non alphanumerics + * and if not "*" or "?", add escaping. + * @param $s + * @return + * @throws Exception representing parsing errors. + */ + private function addQuoting($s) { + $result = ""; + $idx = 0; + $embedded = false; + while ($idx < strlen($s)) { + $c = substr($s, $idx, 1); + if (Utilities::isAlphanum($c)) { + // Alphanumeric characters pass untouched. + $result .= $c; + $idx = $idx + 1; + $embedded = true; + continue; + } + if ($c == "\\") { + // Anything quoted in the bound string stays quoted in the + // unbound string. + $result .= substr($s, $idx, 2); + $idx = $idx + 2; + $embedded = true; + continue; + } + if ($c == "*") { + // An unquoted asterisk must appear at the beginning or the end + // of the string. + if ($idx == 0 || $idx == strlen($s) - 1) { + $result .= $c; + $idx = $idx + 1; + $embedded = true; + continue; + } else { + throw new Exception("Error! cannot have unquoted * embedded in formatted string.", 0); + } + } + if ($c == "?") { + // An unquoted question mark must appear at the beginning or + // end of the string, or in a leading or trailing sequence. + if ( // ? legal at beginning or end + (($idx == 0) || ($idx == (strlen($s) - 1))) + // embedded is false, so must be preceded by ? + || (!$embedded && (substr($s, $idx - 1, 1) == "?")) + // embedded is true, so must be followed by ? + || ($embedded && (substr($s, $idx + 1, 1) == "?"))) { + $result .= $c; + $idx = $idx + 1; + $embedded = false; + continue; + } else { + throw new Exception("Error! cannot have unquoted ? embedded in formatted string.", 0); + } + } + // All other characters must be quoted. + $result .= "\\" . $c; + $idx = $idx + 1; + $embedded = true; + } + return $result; + } + + /** + * Return the i'th component of the URI. + * @param $uri string representation of URI to retrieve components from. + * @param int $i Index of component to return. + * @return mixed If i = 0, returns the URI scheme. Otherwise, returns the i'th + * component of uri. + */ + private function getCompURI($uri, $i) { + if ($i == 0) { + return substr($uri, $i, strpos($uri, "/")); + } + $sa = explode(":", $uri); + // If requested component exceeds the number + // of components in URI, return blank + if ($i >= sizeof($sa)) { + return ""; + } + if ($i === 1) { + return substr($sa[$i], 1, strlen($sa[$i])-1); + } + return $sa[$i]; + } + + /** + * Scans a string and returns a copy with all percent-encoded characters + * decoded. This function is the inverse of pctEncode() defined in the + * CPENameBinder class. Only legal percent-encoded forms are decoded. + * Others raise a ParseException. + * @param $s string to be decoded + * @return string decoded string + * @throws Exception representing parsing errors + * @see CPENameBinder#pctEncode + */ + private function decode($s) { + if ($s == "") { + return new LogicalValue("ANY"); + } + if ($s == "-") { + return new LogicalValue("NA"); + } + // Start the scanning loop. + // Normalize: convert all uppercase letters to lowercase first. + $s = strtolower($s); + $result = ""; + $idx = 0; + $embedded = false; + while ($idx < strlen($s)) { + // Get the idx'th character of s. + $c = substr($s, $idx, 1); + // Deal with dot, hyphen, and tilde: decode with quoting. + if ($c == "." || $c == "-" || $c == "~") { + $result .= "\\" . $c; + $idx = $idx + 1; + // a non-%01 encountered. + $embedded = true; + continue; + } + if ($c != "%") { + $result .= $c; + $idx = $idx + 1; + // a non-%01 encountered. + $embedded = true; + continue; + } + // We get here if we have a substring starting w/ '%'. + $form = substr($s, $idx, 3); + if ($form == "%01") { + if (($idx == 0) + || ($idx == strlen($s) - 3) + || (!$embedded && substr($s, $idx - 3, 2) == "%01") + || ($embedded && (strlen($s) >= $idx + 6)) + && (substr($s, $idx + 3, 3) == "%01")) { + $result .= "?"; + $idx = $idx + 3; + continue; + } else { + throw new Exception("Error decoding string", 0); + } + } else if ($form == "%02") { + if (($idx == 0) || ($idx == (strlen($s) - 3))) { + $result .= "*"; + } else { + throw new Exception("Error decoding string", 0); + } + } else if ($form == "%21") { + $result .= "\\!"; + } else if ($form == "%22") { + $result .= "\\\""; + } else if ($form == "%23") { + $result .= "\\#"; + } else if ($form == "%24") { + $result .= "\\$"; + } else if ($form == "%25") { + $result .= "\\%"; + } else if ($form == "%26") { + $result .= "\\&"; + } else if ($form == "%27") { + $result .= "\\'"; + } else if ($form == "%28") { + $result .= "\\("; + } else if ($form == "%29") { + $result .= "\\)"; + } else if ($form == "%2a") { + $result .= "\\*"; + } else if ($form == "%2b") { + $result .= "\\+"; + } else if ($form == "%2c") { + $result .= "\\,"; + } else if ($form == "%2f") { + $result .= "\\/"; + } else if ($form == "%3a") { + $result .= "\\:"; + } else if ($form == "%3b") { + $result .= "\\;"; + } else if ($form == "%3c") { + $result .= "\\<"; + } else if ($form == "%3d") { + $result .= "\\="; + } else if ($form == "%3e") { + $result .= "\\>"; + } else if ($form == "%3f") { + $result .= "\\?"; + } else if ($form == "%40") { + $result .= "\\@"; + } else if ($form == "%5b") { + $result .= "\\["; + } else if ($form == "%5c") { + $result .= "\\\\"; + } else if ($form == "%5d") { + $result .= "\\]"; + } else if ($form == "%5e") { + $result .= "\\^"; + } else if ($form == "%60") { + $result .= "\\`"; + } else if ($form == "%7b") { + $result .= "\\{"; + } else if ($form == "%7c") { + $result .= "\\|"; + } else if ($form == "%7d") { + $result .= "\\}"; + } else if ($form == "%7e") { + $result .= "\\~"; + } else { + throw new Exception("Unknown form: " . $form, 0); + } + $idx = $idx + 3; + $embedded = true; + } + return $result; + } + + /** + * Unpacks the elements in s and sets the attributes in the given + * WellFormedName accordingly. + * @param string $s packed string + * @param $wfn WellFormedName + * @return WellFormedName The augmented WellFormedName. + */ + private function unpack($s, WellFormedName $wfn) { + // Parse out the five elements. + $start = 1; + $ed = ""; $sw_edition = ""; $t_sw = ""; $t_hw = ""; $oth = ""; + $end = strpos($s, "~", $start); + if ($start == $end) { + $ed = ""; + } else { + $ed = substr($s, $start, $end-$start); + } + $start = $end + 1; + $end = strpos($s, "~", $start); + if ($start == $end) { + $sw_edition = ""; + } else { + $sw_edition = substr($s, $start, $end-$start); + } + $start = $end + 1; + $end = strpos($s, "~", $start); + if ($start == $end) { + $t_sw = ""; + } else { + $t_sw = substr($s, $start, $end-$start); + } + $start = $end + 1; + $end = strpos($s, "~", $start); + if ($start == $end) { + $t_hw = ""; + } else { + $t_hw = substr($s, $start, $end-$start); + } + $start = $end + 1; + if ($start >= strlen($s)) { + $oth = ""; + } else { + $oth = substr($s, $start, strlen($s) - 1 - $start); + } + // Set each component in the WFN. + try { + $wfn->set("edition", $this->decode($ed)); + $wfn->set("sw_edition", $this->decode($sw_edition)); + $wfn->set("target_sw", $this->decode($t_sw)); + $wfn->set("target_hw", $this->decode($t_hw)); + $wfn->set("other", $this->decode($oth)); + } catch (Exception $e) { + echo $e->getMessage() . "\n"; + } + return $wfn; + } + + /* + * Static method to demonstrate this class. + */ + public static function test() { + // A few examples. + echo "Testing CPENamingUnbind...
\n"; + $cpenu = new CPENameUnbinder(); + $wfn = $cpenu->unbindURI("cpe:/a:microsoft:internet_explorer%01%01%01%01:?:beta"); + echo $wfn . "
\n"; + $wfn = $cpenu->unbindURI("cpe:/a:microsoft:internet_explorer:8.%2a:sp%3f"); + echo $wfn . "
\n"; + $wfn = $cpenu->unbindURI("cpe:/a:microsoft:internet_explorer:8.%02:sp%01"); + echo $wfn . "
\n"; + $wfn = $cpenu->unbindURI("cpe:/a:hp:insight_diagnostics:7.4.0.1570::~~online~win2003~x64~"); + echo $wfn . "
\n"; + echo $cpenu->unbindFS("cpe:2.3:a:micr\\?osoft:internet_explorer:8.0.6001:beta:*:*:*:*:*:*") . "
\n"; + } +} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/LogicalValue.php b/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/LogicalValue.php deleted file mode 100644 index 43529bd..0000000 --- a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/LogicalValue.php +++ /dev/null @@ -1,42 +0,0 @@ -. - * - * @see cpe.mitre.org for more information. - * @author Antonio Franco - * @email antonio.franco@pacificsec.com - */ -class LogicalValue { - - private $any = false; - private $na = false; - - // Object must be constructed with the string "ANY" or "NA". - public function __construct($type) { - if ($type == "ANY") { - $this->any = true; - } else if ($type == "NA") { - $this->na = true; - } else { - throw new Exception("LogicalValue must be ANY or NA"); - } - } - - public function isANY(){ - return $this->any; - } - - public function isNA(){ - return $this->na; - } - - public function __toString(){ - if ($this->any){ - return "ANY"; - } - return "NA"; - } -} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/Utilities.php b/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/Utilities.php deleted file mode 100644 index d93c55a..0000000 --- a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/Utilities.php +++ /dev/null @@ -1,167 +0,0 @@ -. - * - * @see cpe.mitre.org for more information. - * @author Antonio Franco - * @email antonio.franco@pacificsec.com - */ -class Utilities { - - /** - * Searches string for special characters * and ? - * @param $string to be searched - * @return true if string contains wildcard, false otherwise - */ - public static function containsWildcards($string) { - if (strpos($string, "*") !== false || strpos($string, "?") !== false) { - if (!(strpos($string, "\\") !== false)) { - return true; - } - return false; - } - return false; - } - - /** - * Checks if given number is even or not - * @param $num number to check - * @return true if number is even, false if not - */ - public static function isEvenNumber($num) { - return (is_int($num) && $num % 2 == 0); - } - - /** - * Counts the number of escape characters in the string beginning and ending - * at the given indices - * @param $str string to search - * @param $start beginning index - * @param $end ending index - * @return number of escape characters in string - * @todo fix the use of $str. The Java version is also not using this variable. - */ - public static function countEscapeCharacters($str, $start, $end) { - $result = 0; - $active = false; - $i = 0; - while ($i < $end) { - if ($active && ($i >= $start)) { - $result = $result + 1; - } - $i = $i + 1; - } - return $result; - } - - /** - * Searches a string for the first unescaped colon and returns the index of - * that colon - * @param $str string to search - * @return index of first unescaped colon, or 0 if not found - */ - public static function getUnescapedColonIndex($str) { - $found = false; - $colon_idx = 0; - $start_idx = 0; - // Find the first non-escaped colon. - while (!$found) { - $colon_idx = strpos($str, ":", $start_idx + 1); - // If no colon is found, return 0. - if ($colon_idx === false) { - return 0; - } - // Peek at character before colon. - if (substr($str, $colon_idx-1, 1) == "\\") { - // If colon is escaped, keep looking. - $start_idx = $colon_idx; - } else { - $found = true; - } - } - return $colon_idx; - } - - /** - * Returns true if the string contains only - * alphanumeric characters or the underscore character, - * false otherwise. - * @param $c the string in question - * @return true if $c is alphanumeric or underscore, false if not - */ - public static function isAlphanum($c) { - return (preg_match("/^[a-zA-Z0-9]$/", $c) || $c == "_"); - } - - /** - * This function is not part of the reference implementation pseudo code - * found in the CPE 2.3 specification. It enforces two rules in the - * specification: - * URI must start with the characters "cpe:/" - * A URI may not contain more than 7 components - * If either rule is violated, a Exception is thrown. - * @param $in string with URI to be validated - */ - public static function validateURI($in) { - // make sure uri starts with cpe:/ - if (strpos(strtolower($in), "cpe:/") !== 0) { - throw new Exception("Error: URI must start with 'cpe:/'. Given: " . $in, 0); - } - // make sure uri doesn't contain more than 7 colons - $count = sizeof(explode(":", $in)); - if ($count > 8) { - throw new Exception("Error parsing URI. Found " . ($count - 8) . " extra components in: " . $in, 0); - } - } - - /** - * This function is not part of the reference implementation pseudo code - * found in the CPE 2.3 specification. It enforces three rules found in the - * specification: - * Formatted string must start with the characters "cpe:2.3:" - * A formatted string must contain 11 components - * A formatted string must not contain empty components - * If any rule is violated, a ParseException is thrown. - * @param $in string with FS to be validated - */ - public static function validateFS($in) { - if (strpos(strtolower($in), "cpe:2.3:") !== 0) { - throw new Exception("Error: Formatted String must start with \"cpe:2.3\". Given: " . $in, 0); - } - - $count = 0; - for ($i = 0; $i != strlen($in); $i++){ - if (substr($in, $i, 1) == ":"){ - if (substr($in, $i - 1, 1) != "\\"){ - $count++; - } - if (($i+1) < strlen($in) && substr($in, $i+1, 1) == ":"){ - throw new Exception("Error parsing formatted string. Found empty component", 0); - } - } - } - if ($count > 12){ - $extra = $count - 12; - $s = "Error parsing formatted string. Found " . $extra . " extra component"; - if ($extra > 1){ - $s = $s . "s"; - } - $s = $s . " in: " . $in; - throw new Exception($s, 0); - } - if ($count < 12){ - $missing = 12 - $count; - $s = "Error parsing formatted string. Missing " . $missing . " component"; - if ($missing > 1){ - $s = $s . "s"; - } - throw new Exception($s, 0); - } - } -} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/WellFormedName.php b/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/WellFormedName.php deleted file mode 100644 index 6542532..0000000 --- a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Common/WellFormedName.php +++ /dev/null @@ -1,210 +0,0 @@ -. - * - * @see cpe.mitre.org for details. - * @author Antonio Franco - * @email antonio.franco@pacificsec.com - */ -class WellFormedName { - - // Underlying wfn representation. - private $wfn = null; - // All permissible WFN attributes as defined by specification. - const ATTRIBUTES = array("part", "vendor", "product", "version", - "update", "edition", "language", "sw_edition", "target_sw", - "target_hw", "other"); - - /** - * Constructs a new WellFormedName object, setting each component to the - * given parameter value. If a parameter is null, the component is set to - * the default value "ANY". - * @param $part string representing the part component - * @param $vendor string representing the vendor component - * @param $product string representing the product component - * @param $version string representing the version component - * @param $update string representing the update component - * @param $edition string representing the edition component - * @param $language string representing the language component - * @param $sw_edition string representing the sw_edition component - * @param $target_sw string representing the target_sw component - * @param $target_hw string representing the target_hw component - * @param $other string representing the other component - */ - public function __construct($part = null, $vendor = null, $product = null, $version = null, - $update = null, $edition = null, $language = null, $sw_edition = null, $target_sw = null, - $target_hw = null, $other = null) { - - $this->wfn = array(); - - // Constructs a new WellFormedName object, with all components set to the default value "ANY". - if ($part === null && $vendor === null && $product === null && $version === null && - $update === null && $edition === null && $language === null && $sw_edition === null && $target_sw === null && - $target_hw === null && $other === null){ - foreach (WellFormedName::ATTRIBUTES as $a){ - if ($a != "part"){ - $this->set($a, new LogicalValue("ANY")); - } - } - return; - } - - $this->set("part", $part); - $this->set("vendor", $vendor); - $this->set("product", $product); - $this->set("version", $version); - $this->set("update", $update); - $this->set("edition", $edition); - $this->set("language", $language); - $this->set("sw_edition", $sw_edition); - $this->set("target_sw", $target_sw); - $this->set("target_hw", $target_hw); - $this->set("other", $other); - } - - /** - * @param $attribute string representing the component value to get - * @return the string value of the given component, or default value "ANY" - * if the component does not exist - */ - public function get($attribute){ - if (array_key_exists($attribute, $this->wfn)) - return $this->wfn[$attribute]; - else - return new LogicalValue("ANY"); - } - - /** - * Sets the given attribute to value, if the attribute is in the list of - * permissible components - * @param $attribute string representing the component to set - * @param $value object or string representing the value of the given component - */ - public final function set($attribute, $value){ - // Iterate over permissible attributes. - foreach (WellFormedName::ATTRIBUTES as $a){ - // If the argument is a valid attribute, set that attribute's value. - if ($attribute == $a) { - // check to see if we're setting a LogicalValue ANY or NA - if ($value instanceof LogicalValue){ - // don't allow logical values in part component - if ($attribute == "part"){ - var_dump($value); echo "
\n"; - var_dump($a); echo "
\n"; - var_dump($attribute); echo "
\n"; - throw new Exception("Error! part component cannot be a logical value"); - } - // put the Object in the ht and break - $this->wfn[$attribute] = $value; - break; - } - if ($value == null || $value == ""){ - // if value is null or blank, set attribute to default logical ANY - $this->wfn[$attribute] = new LogicalValue("ANY"); - break; - } - $svalue = $value; - // Reg exs - // check for printable characters - no control characters - if (!preg_match("/^[[:print:]]*$/", $svalue)){ - throw new Exception("Error! encountered non printable character in: " . $svalue, 0); - } - // svalue has whitespace - if (preg_match("/^.*\\s+.*$/", $svalue)){ - throw new Exception("Error! component cannot contain whitespace: " . $svalue, 0); - } - // svalue has more than one unquoted star - if (preg_match("/^\\*{2,}.*$/", $svalue) || preg_match("/^.*\\*{2,}$/", $svalue)){ - throw new Exception("Error! component cannot contain more than one * in sequence: " . $svalue, 0); - } - // svalue has unquoted punctuation embedded - if (preg_match("/^.*(?\\@\\[\\]\\^\\`\\{\\|\\}\\~\\-].*$/", $svalue)) { - throw new Exception("Error! component cannot contain unquoted punctuation: " . $svalue, 0); - } - // svalue has an unquoted * - if (preg_match("/^.+(?wfn[$attribute] = $svalue; - break; - } - // remove leading and trailing ?s - $v = $svalue; - while (strpos($v, "?") === 0) { - // remove all leading ?'s - $v = substr($v, 1); - } - $v = strrev($v); - while (strpos($v, "?") === 0) { - // remove all trailing ?'s (string has been reversed) - $v = substr($v, 1); - } - // back to normal - $v = strrev($v); - // after leading and trailing ?s are removed, check if value - // contains unquoted ?s - if (preg_match("/^.+(?wfn[$attribute] = $svalue; - break; - } - } - } - - /** - * - * @return string representation of the WellFormedName - */ - public function __toString() { - $str = "wfn:["; - foreach (WellFormedName::ATTRIBUTES as $attr) { - $str = $str . $attr; - $str = $str . "="; - - $o = $this->wfn[$attr]; - if ($o instanceof LogicalValue) { - $str = $str . $o; - $str = $str . ", "; - } else { - $str = $str . "\""; - $str = $str . $o; - $str = $str . "\", "; - } - } - $str = substr($str, 0, strlen($str)-1); - $str = substr($str, 0, strlen($str)-1); - $str = $str . "]"; - - return $str; - } - -} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Matching/CPENameMatcher.php b/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Matching/CPENameMatcher.php deleted file mode 100644 index 029537f..0000000 --- a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Matching/CPENameMatcher.php +++ /dev/null @@ -1,287 +0,0 @@ -. - * - * @see cpe.mitre.org for more information. - * @author Antonio Franco - * @email antonio.franco@pacificsec.com - */ -class CPENameMatcher { - - /** - * Tests two Well Formed Names for disjointness. - * @param $source WellFormedName Source WFN - * @param $target WellFormedName Target WFN - * @return true if the names are disjoint, false otherwise - */ - public function isDisjoint(WellFormedName $source, WellFormedName $target) { - // if any pairwise comparison is disjoint, the names are disjoint. - $resultList = $this->compareWFNs($source, $target); - foreach ($resultList as $result){ - if ($result == Relation::DISJOINT) - return true; - } - return false; - } - - /** - * Tests two Well Formed Names for equality. - * @param $source WellFormedName Source WFN - * @param $target WellFormedName Target WFN - * @return true if the names are equal, false otherwise - */ - public function isEqual(WellFormedName $source, WellFormedName $target) { - // if every pairwise comparison is equal, the names are equal. - $resultList = $this->compareWFNs($source, $target); - foreach ($resultList as $result){ - if ($result != Relation::EQUAL){ - return false; - } - } - return true; - } - - /** - * Tests if the target Well Formed Name is a subset of the source Well Formed - * Name. - * @param $source WellFormedName Source WFN - * @param $target WellFormedName Target WFN - * @return true if the target is a subset of the source, false otherwise - */ - public function isSubset(WellFormedName $source, WellFormedName $target) { - // if any comparison is anything other than subset or equal, then target is - // not a subset of source. - $resultList = $this->compareWFNs($source, $target); - foreach ($resultList as $result){ - if ($result != Relation::SUBSET && $result != Relation::EQUAL) { - return false; - } - } - return true; - } - - /** - * Tests if the target Well Formed name is a superset of the source Well Formed - * Name. - * @param $source WellFormedName Source WFN - * @param $target WellFormedName Target WFN - * @return true if the target is a superset of the source, false otherwise - */ - public function isSuperset(WellFormedName $source, WellFormedName $target) { - // if any comparison is anything other than superset or equal, then target is not - // a superset of source. - $resultList = $this->compareWFNs($source, $target); - foreach ($resultList as $result){ - if ($result != Relation::SUPERSET && $result != Relation::EQUAL) { - return false; - } - } - return true; - } - - /** - * Compares each attribute value pair in two Well Formed Names. - * @param $source WellFormedName Source WFN - * @param $target WellFormedName Target WFN - * @return A array mapping attribute string to attribute value Relation - */ - public function compareWFNs(WellFormedName $source, WellFormedName $target) { - $result = array(); - $result["part"] = $this->compare($source->get("part"), $target->get("part")); - $result["vendor"] = $this->compare($source->get("vendor"), $target->get("vendor")); - $result["product"] = $this->compare($source->get("product"), $target->get("product")); - $result["version"] = $this->compare($source->get("version"), $target->get("version")); - $result["update"] = $this->compare($source->get("update"), $target->get("update")); - $result["edition"] = $this->compare($source->get("edition"), $target->get("edition")); - $result["language"] = $this->compare($source->get("language"), $target->get("language")); - $result["sw_edition"] = $this->compare($source->get("sw_edition"), $target->get("sw_edition")); - $result["target_sw"] = $this->compare($source->get("target_sw"), $target->get("target_sw")); - $result["target_hw"] = $this->compare($source->get("target_hw"), $target->get("target_hw")); - $result["other"] = $this->compare($source->get("other"), $target->get("other")); - return $result; - } - - /** - * Compares an attribute value pair. - * @param $source Source attribute value. - * @param $target Target attribute value. - * @return The relation between the two attribute values. - */ - private function compare($source, $target) { - // matching is case insensitive, convert strings to lowercase. - if ($this->isString($source)) { - $source = strtolower($source); - } - if ($this->isString($target)) { - $target = strtolower($target); - } - - // Unquoted wildcard characters yield an undefined result. - if ($this->isString($target) && Utilities::containsWildcards($target)) { - return Relation::UNDEFINED; - } - // If source and target values are equal, then result is equal. - if ($source == $target) { - return Relation::EQUAL; - } - - // Check to see if source or target are Logical Values. - $lvSource = null; - $lvTarget = null; - if ($source instanceof LogicalValue) { - $lvSource = $source; - } - if ($target instanceof LogicalValue) { - $lvTarget = $target; - } - if ($lvSource != null && $lvTarget != null) { - // If Logical Values are equal, result is equal. - if ($lvSource->isANY() == $lvTarget->isANY() || $lvSource->isNA() == $lvTarget->isNA()) { - return Relation::EQUAL; - } - } - // If source value is ANY, result is a superset. - if ($lvSource != null) { - if ($lvSource->isANY()) { - return Relation::SUPERSET; - } - } - // If target value is ANY, result is a subset. - if ($lvTarget != null) { - if ($lvTarget->isANY()) { - return Relation::SUBSET; - } - } - // If source or target is NA, result is disjoint. - if ($lvSource != null) { - if ($lvSource->isNA()) { - return Relation::DISJOINT; - } - } - if ($lvTarget != null) { - if ($lvTarget->isNA()) { - return Relation::DISJOINT; - } - } - // only Strings will get to this point, not LogicalValues - return $this->compareStrings($source, $target); - } - - /** - * Compares a source string to a target string, and addresses the condition - * in which the source string includes unquoted special characters. It - * performs a simple regular expression match, with the assumption that - * (as required) unquoted special characters appear only at the beginning - * and/or the end of the source string. It also properly differentiates - * between unquoted and quoted special characters. - * - * @param $source string Source attribute value. - * @param $target string Target attribute value. - * @return Relation between source and target Strings. - */ - private function compareStrings($source, $target) { - $start = 0; - $end = strlen($source); - $begins = 0; - $ends = 0; - $index = 0; $leftover = 0; $escapes = 0; - - if (substr($source, 0, 1) == "*") { - $start = 1; - $begins = -1; - } else { - while (($start < strlen($source)) && (substr($source, $start, 1) == "?")) { - $start = $start + 1; - $begins = $begins + 1; - } - } - if ((substr($source, $end - 1, 1) == "*") && ($this->isEvenWildcards($source, $end - 1))) { //TODO - $end = $end - 1; - $ends = -1; - } else { - while (($end > 0) && substr($source, $end - 1, 1) == "?" && ($this->isEvenWildcards($source, $end - 1))) { //TODO - $end = $end - 1; - $ends = $ends + 1; - } - } - - $source = substr($source, $start, $end-$start); - $index = -1; - $leftover = strlen($target); - while ($leftover > 0) { - $index = strpos($target, $source, $index + 1); - if ($index === false) { - break; - } - $escapes = Utilities::countEscapeCharacters($target, 0, $index); - if (($index > 0) && ($begins != -1) && ($begins < ($index - $escapes))) { - break; - } - $escapes = Utilities::countEscapeCharacters($target, $index + 1, strlen($target)); - $leftover = strlen($target) - $index - $escapes - strlen($source); - if (($leftover > 0) && (($ends != -1) && ($leftover > $ends))) { - continue; - } - return Relation::SUPERSET; - } - return Relation::DISJOINT; - } - - /** - * Searches a string for the backslash character - * @param $str string to search in - * @param $idx end index - * @return true if the number of backslash characters is even, false if odd - */ - private function isEvenWildcards($str, $idx) { - $result = 0; - while (($idx > 0) && (strpos($str, "\\", $idx - 1)) !== false) { - $idx = $idx - 1; - $result = $result + 1; - } - return Utilities::isEvenNumber($result); - } - - /** - * Tests if an Object is an instance of the String class - * @param $arg the var to test - * @return true if arg is a string, false if not - */ - private function isString($arg) { - is_string($arg); - } - - /* - * Static method to demonstrate this class. - */ - public static function test() { - // Examples. - $wfn = new WellFormedName("a", "microsoft", "internet_explorer", "8\\.0\\.6001", "beta", new LogicalValue("ANY"), "sp2", null, null, null, null); - $wfn2 = new WellFormedName("a", "microsoft", "internet_explorer", new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY"), new LogicalValue("ANY")); - $cpenm = new CPENameMatcher(); - $cpenu = new CPENameUnbinder(); - $cpenb = new CPENameBinder(); - $wfn = $cpenu->unbindURI($cpenb->bindToURI($wfn)); - $wfn2 = $cpenu->unbindFS($cpenb->bindToFS($wfn2)); - var_dump($cpenm->isDisjoint($wfn, $wfn2)); // false - var_dump($cpenm->isEqual($wfn, $wfn2)); // false - var_dump($cpenm->isSubset($wfn, $wfn2)); // true, $wfn2 is a subset of wfn - var_dump($cpenm->isSuperset($wfn, $wfn2)); // false - $wfn = $cpenu->unbindFS("cpe:2.3:a:adobe:*:9.*:*:PalmOS:*:*:*:*:*"); - $wfn2 = $cpenu->unbindURI("cpe:/a::Reader:9.3.2:-:-"); - var_dump($cpenm->isDisjoint($wfn, $wfn2)); // true, $wfn2 and wfn are disjoint - var_dump($cpenm->isEqual($wfn, $wfn2)); // false - var_dump($cpenm->isSubset($wfn, $wfn2)); // false - var_dump($cpenm->isSuperset($wfn, $wfn2)); // false - } -} \ No newline at end of file diff --git a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Naming/CPENameUnbinder.php b/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Naming/CPENameUnbinder.php deleted file mode 100644 index 3a1439d..0000000 --- a/inc/vendor/pacificsec/cpe/vendor/PacificSec/CPE/Naming/CPENameUnbinder.php +++ /dev/null @@ -1,466 +0,0 @@ -. - * - * @see cpe.mitre.org for more information. - * @author Antonio Franco - * @email antonio.franco@pacificsec.com - */ -class CPENameUnbinder { - - /** - * Top level function used to unbind a URI to a WFN. - * @param $uri string representing the URI to be unbound. - * @return WellFormedName representing the unbound URI. - * @throws Exception representing parsing errors. - */ - public function unbindURI($uri) { - // Validate the URI - Utilities::validateURI($uri); - // Initialize the empty WFN. - $result = new WellFormedName(); - - for ($i = 0; $i != 8; $i++) { - // get the i'th component of uri - $v = $this->getCompURI($uri, $i); - switch ($i) { - case 1: - $result->set("part", $this->decode($v)); - break; - case 2: - $result->set("vendor", $this->decode($v)); - break; - case 3: - $result->set("product", $this->decode($v)); - break; - case 4: - $result->set("version", $this->decode($v)); - break; - case 5: - $result->set("update", $this->decode($v)); - break; - case 6: - // Special handling for edition component. - // Unpack edition if needed. - if ($v == "" || $v == "-" - || substr($v, 0, 1) != "~") { - // Just a logical value or a non-packed value. - // So unbind to legacy edition, leaving other - // extended attributes unspecified. - $result->set("edition", $this->decode($v)); - } else { - // We have five values packed together here. - $this->unpack($v, $result); - } - break; - case 7: - $result->set("language", $this->decode($v)); - break; - } - } - return $result; - } - - /** - * Top level function to unbind a formatted string to WFN. - * @param $fs Formatted string to unbind - * @return WellFormedName - * @throws Exception representing parsing error - */ - public function unbindFS($fs) { - // Validate the formatted string - Utilities::validateFS($fs); - // Initialize empty WFN - $result = new WellFormedName(); - // The cpe scheme is the 0th component, the cpe version is the 1st. - // So we start parsing at the 2nd component. - for ($a = 2; $a != 13; $a++) { - // Get the a'th string field. - $v = $this->getCompFS($fs, $a); - // Unbind the string. - $v = $this->unbindValueFS($v); - // Set the value of the corresponding attribute. - switch ($a) { - case 2: - $result->set("part", $v); - break; - case 3: - $result->set("vendor", $v); - break; - case 4: - $result->set("product", $v); - break; - case 5: - $result->set("version", $v); - break; - case 6: - $result->set("update", $v); - break; - case 7: - $result->set("edition", $v); - break; - case 8: - $result->set("language", $v); - break; - case 9: - $result->set("sw_edition", $v); - break; - case 10: - $result->set("target_sw", $v); - break; - case 11: - $result->set("target_hw", $v); - break; - case 12: - $result->set("other", $v); - break; - } - } - return $result; - } - - /** - * Returns the i'th field of the formatted string. The colon is the field - * delimiter unless prefixed by a backslash. - * @param $fs formatted string to retrieve from - * @param $i index of field to retrieve from fs. - * @return value of index of formatted string - */ - private function getCompFS($fs, $i) { - if ($i == 0) { - // return the substring from index 0 to the first occurence of an - // unescaped colon - $colon_idx = Utilities::getUnescapedColonIndex($fs); - // If no colon is found, we are at the end of the formatted string, - // so just return what's left. - if ($colon_idx == 0) { - return $fs; - } - return substr($fs, 0, $colon_idx); - } else { - $substrStart = Utilities::getUnescapedColonIndex($fs) + 1; - $substrLength = strlen($fs) - $substrStart; - return $this->getCompFS(substr($fs, $substrStart, $substrLength), $i - 1); - } - } - - /** - * Takes a string value and returns the appropriate logical value if string - * is the bound form of a logical value. If string is some general value - * string, add quoting of non-alphanumerics as needed. - * @param $s value to be unbound - * @return logical value or quoted string - * @throws Exception representing parsing errors - */ - private function unbindValueFS($s) { - if ($s == "*") { - return new LogicalValue("ANY"); - } - if ($s == "-") { - return new LogicalValue("NA"); - } - return $this->addQuoting($s); - } - - /** - * Inspect each character in a string, copying quoted characters, with - * their escaping, into the result. Look for unquoted non alphanumerics - * and if not "*" or "?", add escaping. - * @param $s - * @return - * @throws Exception representing parsing errors. - */ - private function addQuoting($s) { - $result = ""; - $idx = 0; - $embedded = false; - while ($idx < strlen($s)) { - $c = substr($s, $idx, 1); - if (Utilities::isAlphanum($c) || $c == "_") { - // Alphanumeric characters pass untouched. - $result = $result . $c; - $idx = $idx + 1; - $embedded = true; - continue; - } - if ($c == "\\") { - // Anything quoted in the bound string stays quoted in the - // unbound string. - $result = $result . substr($s, $idx, 2); - $idx = $idx + 2; - $embedded = true; - continue; - } - if ($c == "*") { - // An unquoted asterisk must appear at the beginning or the end - // of the string. - if ($idx == 0 || $idx == strlen($s) - 1) { - $result = $result . $c; - $idx = $idx + 1; - $embedded = true; - continue; - } else { - throw new Exception("Error! cannot have unquoted * embedded in formatted string.", 0); - } - } - if ($c == "?") { - // An unquoted question mark must appear at the beginning or - // end of the string, or in a leading or trailing sequence. - if ( // ? legal at beginning or end - (($idx == 0) || ($idx == (strlen($s) - 1))) - // embedded is false, so must be preceded by ? - || (!$embedded && (substr($s, $idx - 1, 1) == "?")) - // embedded is true, so must be followed by ? - || ($embedded && (substr($s, $idx + 1, 1) == "?"))) { - $result = $result . $c; - $idx = $idx + 1; - $embedded = false; - continue; - } else { - throw new Exception("Error! cannot have unquoted ? embedded in formatted string.", 0); - } - } - // All other characters must be quoted. - $result = $result . "\\" . $c; - $idx = $idx + 1; - $embedded = true; - } - return $result; - } - - /** - * Return the i'th component of the URI. - * @param $uri string representation of URI to retrieve components from. - * @param $i Index of component to return. - * @return If i = 0, returns the URI scheme. Otherwise, returns the i'th - * component of uri. - */ - private function getCompURI($uri, $i) { - if ($i == 0) { - return substr($uri, $i, strpos($uri, "/")); - } - $sa = explode(":", $uri); - // If requested component exceeds the number - // of components in URI, return blank - if ($i >= sizeof($sa)) { - return ""; - } - if ($i === 1) { - return substr($sa[$i], 1, strlen($sa[$i])-1); - } - return $sa[$i]; - } - - /** - * Scans a string and returns a copy with all percent-encoded characters - * decoded. This function is the inverse of pctEncode() defined in the - * CPENameBinder class. Only legal percent-encoded forms are decoded. - * Others raise a ParseException. - * @param $s string to be decoded - * @return decoded string - * @throws Exception representing parsing errors - * @see CPENameBinder#pctEncode - */ - private function decode($s) { - if ($s == "") { - return new LogicalValue("ANY"); - } - if ($s == "-") { - return new LogicalValue("NA"); - } - // Start the scanning loop. - // Normalize: convert all uppercase letters to lowercase first. - $s = strtolower($s); - $result = ""; - $idx = 0; - $embedded = false; - while ($idx < strlen($s)) { - // Get the idx'th character of s. - $c = substr($s, $idx, 1); - // Deal with dot, hyphen, and tilde: decode with quoting. - if ($c == "." || $c == "-" || $c == "~") { - $result = $result . "\\" . $c; - $idx = $idx + 1; - // a non-%01 encountered. - $embedded = true; - continue; - } - if ($c != "%") { - $result = $result . $c; - $idx = $idx + 1; - // a non-%01 encountered. - $embedded = true; - continue; - } - // We get here if we have a substring starting w/ '%'. - $form = substr($s, $idx, 3); - if ($form == "%01") { - if (($idx == 0) - || ($idx == strlen($s) - 3) - || (!$embedded && substr($s, $idx - 3, 2) == "%01") - || ($embedded && (strlen($s) >= $idx + 6)) - && (substr($s, $idx + 3, 3) == "%01")) { - $result = $result . "?"; - $idx = $idx + 3; - continue; - } else { - throw new Exception("Error decoding string", 0); - } - } else if ($form == "%02") { - if (($idx == 0) || ($idx == (strlen($s) - 3))) { - $result = $result . "*"; - } else { - throw new Exception("Error decoding string", 0); - } - } else if ($form == "%21") { - $result = $result . "\\!"; - } else if ($form == "%22") { - $result = $result . "\\\""; - } else if ($form == "%23") { - $result = $result . "\\#"; - } else if ($form == "%24") { - $result = $result . "\\$"; - } else if ($form == "%25") { - $result = $result . "\\%"; - } else if ($form == "%26") { - $result = $result . "\\&"; - } else if ($form == "%27") { - $result = $result . "\\'"; - } else if ($form == "%28") { - $result = $result . "\\("; - } else if ($form == "%29") { - $result = $result . "\\)"; - } else if ($form == "%2a") { - $result = $result . "\\*"; - } else if ($form == "%2b") { - $result = $result . "\\+"; - } else if ($form == "%2c") { - $result = $result . "\\,"; - } else if ($form == "%2f") { - $result = $result . "\\/"; - } else if ($form == "%3a") { - $result = $result . "\\))"; - } else if ($form == "%3b") { - $result = $result . "\\;"; - } else if ($form == "%3c") { - $result = $result . "\\<"; - } else if ($form == "%3d") { - $result = $result . "\\="; - } else if ($form == "%3e") { - $result = $result . "\\>"; - } else if ($form == "%3f") { - $result = $result . "\\?"; - } else if ($form == "%40") { - $result = $result . "\\@"; - } else if ($form == "%5b") { - $result = $result . "\\["; - } else if ($form == "%5c") { - $result = $result . "\\\\"; - } else if ($form == "%5d") { - $result = $result . "\\]"; - } else if ($form == "%5e") { - $result = $result . "\\^"; - } else if ($form == "%60") { - $result = $result . "\\`"; - } else if ($form == "%7b") { - $result = $result . "\\{"; - } else if ($form == "%7c") { - $result = $result . "\\|"; - } else if ($form == "%7d") { - $result = $result . "\\}"; - } else if ($form == "%7e") { - $result = $result . "\\~"; - } else { - throw new Exception("Unknown form: " . $form, 0); - } - $idx = $idx + 3; - $embedded = true; - } - return $result; - } - - /** - * Unpacks the elements in s and sets the attributes in the given - * WellFormedName accordingly. - * @param $s packed string - * @param $wfn WellFormedName - * @return The augmented WellFormedName. - */ - private function unpack($s, WellFormedName $wfn) { - // Parse out the five elements. - $start = 1; - $ed = ""; $sw_edition = ""; $t_sw = ""; $t_hw = ""; $oth = ""; - $end = strpos($s, "~", $start); - if ($start == $end) { - $ed = ""; - } else { - $ed = substr($s, $start, $end-$start); - } - $start = $end + 1; - $end = strpos($s, "~", $start); - if ($start == $end) { - $sw_edition = ""; - } else { - $sw_edition = substr($s, $start, $end-$start); - } - $start = $end + 1; - $end = strpos($s, "~", $start); - if ($start == $end) { - $t_sw = ""; - } else { - $t_sw = substr($s, $start, $end-$start); - } - $start = $end + 1; - $end = strpos($s, "~", $start); - if ($start == $end) { - $t_hw = ""; - } else { - $t_hw = substr($s, $start, $end-$start); - } - $start = $end + 1; - if ($start >= strlen($s)) { - $oth = ""; - } else { - $oth = substr($s, $start, strlen($s) - 1 - $start); - } - // Set each component in the WFN. - try { - $wfn->set("edition", $this->decode($ed)); - $wfn->set("sw_edition", $this->decode($sw_edition)); - $wfn->set("target_sw", $this->decode($t_sw)); - $wfn->set("target_hw", $this->decode($t_hw)); - $wfn->set("other", $this->decode($oth)); - } catch (Exception $e) { - echo $e->getMessage() . "\n"; - } - return $wfn; - } - - /* - * Static method to demonstrate this class. - */ - public static function test() { - // A few examples. - echo "Testing CPENamingUnbind...
\n"; - $cpenu = new CPENameUnbinder(); - $wfn = $cpenu->unbindURI("cpe:/a:microsoft:internet_explorer%01%01%01%01:?:beta"); - echo $wfn . "
\n"; - $wfn = $cpenu->unbindURI("cpe:/a:microsoft:internet_explorer:8.%2a:sp%3f"); - echo $wfn . "
\n"; - $wfn = $cpenu->unbindURI("cpe:/a:microsoft:internet_explorer:8.%02:sp%01"); - echo $wfn . "
\n"; - $wfn = $cpenu->unbindURI("cpe:/a:hp:insight_diagnostics:7.4.0.1570::~~online~win2003~x64~"); - echo $wfn . "
\n"; - echo $cpenu->unbindFS("cpe:2.3:a:micr\\?osoft:internet_explorer:8.0.6001:beta:*:*:*:*:*:*") . "
\n"; - } -} \ No newline at end of file diff --git a/inc/vendor/phpoffice/phpspreadsheet/.sami.php b/inc/vendor/phpoffice/phpspreadsheet/.sami.php new file mode 100644 index 0000000..9a2fca3 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/.sami.php @@ -0,0 +1,24 @@ +files() + ->name('*.php') + ->in($dir = __DIR__ . '/src'); +$versions = GitVersionCollection::create($dir) + ->addFromTags(function ($version) { + return preg_match('~^\d+\.\d+\.\d+$~', $version); + }) + ->add('master'); + +return new Sami($iterator, [ + 'title' => 'PhpSpreadsheet', + 'versions' => $versions, + 'build_dir' => __DIR__ . '/build/%version%', + 'cache_dir' => __DIR__ . '/cache/%version%', + 'remote_repository' => new GitHubRemoteRepository('PHPOffice/PhpSpreadsheet', dirname($dir)), +]); diff --git a/inc/vendor/phpoffice/phpspreadsheet/.travis.yml b/inc/vendor/phpoffice/phpspreadsheet/.travis.yml index 463f195..3a94e66 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/.travis.yml +++ b/inc/vendor/phpoffice/phpspreadsheet/.travis.yml @@ -10,6 +10,7 @@ php: cache: directories: + - cache - vendor - $HOME/.composer/cache @@ -28,7 +29,7 @@ jobs: php: 7.1 script: - ./vendor/bin/php-cs-fixer fix --diff --verbose --dry-run - - ./vendor/bin/phpcs --report-width=200 --report-summary --report-full samples/ src/ tests/ --ignore=samples/Header.php --standard=PSR2 -n + - ./vendor/bin/phpcs --report-width=200 samples/ src/ tests/ --ignore=samples/Header.php --standard=PSR2 -n - stage: Coverage php: 7.1 @@ -38,3 +39,21 @@ jobs: after_script: - wget https://scrutinizer-ci.com/ocular.phar - php ocular.phar code-coverage:upload --format=php-clover tests/coverage-clover.xml + + - stage: API documentation + php: 7.1 + before_script: + - curl -O http://get.sensiolabs.org/sami.phar + script: + - git fetch origin master:master + - git fetch origin --tags + - php sami.phar update .sami.php + - echo '

If you are not automatically redirected, please go to the latest stable API documentation.

' > build/index.html + deploy: + provider: pages + skip-cleanup: true + local-dir: build + github-token: $GITHUB_TOKEN + on: + all_branches: true + condition: $TRAVIS_BRANCH =~ ^master|develop$ diff --git a/inc/vendor/phpoffice/phpspreadsheet/CHANGELOG.md b/inc/vendor/phpoffice/phpspreadsheet/CHANGELOG.md index e2a9bfa..42e6fc2 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/CHANGELOG.md +++ b/inc/vendor/phpoffice/phpspreadsheet/CHANGELOG.md @@ -5,6 +5,95 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [1.4.0] - 2018-08-06 + +### Added + +- Add excel function EXACT(value1, value2) support - [#595](https://github.com/PHPOffice/PhpSpreadsheet/pull/595) +- Support workbook view attributes for Xlsx format - [#523](https://github.com/PHPOffice/PhpSpreadsheet/issues/523) +- Read and write hyperlink for drawing image - [#490](https://github.com/PHPOffice/PhpSpreadsheet/pull/490) +- Added calculation engine support for the new bitwise functions that were added in MS Excel 2013 + - BITAND() Returns a Bitwise 'And' of two numbers + - BITOR() Returns a Bitwise 'Or' of two number + - BITXOR() Returns a Bitwise 'Exclusive Or' of two numbers + - BITLSHIFT() Returns a number shifted left by a specified number of bits + - BITRSHIFT() Returns a number shifted right by a specified number of bits +- Added calculation engine support for other new functions that were added in MS Excel 2013 and MS Excel 2016 + - Text Functions + - CONCAT() Synonym for CONCATENATE() + - NUMBERVALUE() Converts text to a number, in a locale-independent way + - UNICHAR() Synonym for CHAR() in PHPSpreadsheet, which has always used UTF-8 internally + - UNIORD() Synonym for ORD() in PHPSpreadsheet, which has always used UTF-8 internally + - TEXTJOIN() Joins together two or more text strings, separated by a delimiter + - Logical Functions + - XOR() Returns a logical Exclusive Or of all arguments + - Date/Time Functions + - ISOWEEKNUM() Returns the ISO 8601 week number of the year for a given date + - Lookup and Reference Functions + - FORMULATEXT() Returns a formula as a string + - Financial Functions + - PDURATION() Calculates the number of periods required for an investment to reach a specified value + - RRI() Calculates the interest rate required for an investment to grow to a specified future value + - Engineering Functions + - ERF.PRECISE() Returns the error function integrated between 0 and a supplied limit + - ERFC.PRECISE() Synonym for ERFC + - Math and Trig Functions + - SEC() Returns the secant of an angle + - SECH() Returns the hyperbolic secant of an angle + - CSC() Returns the cosecant of an angle + - CSCH() Returns the hyperbolic cosecant of an angle + - COT() Returns the cotangent of an angle + - COTH() Returns the hyperbolic cotangent of an angle + - ACOT() Returns the cotangent of an angle + - ACOTH() Returns the hyperbolic cotangent of an angle +- Refactored Complex Engineering Functions to use external complex number library +- Added calculation engine support for the new complex number functions that were added in MS Excel 2013 + - IMCOSH() Returns the hyperbolic cosine of a complex number + - IMCOT() Returns the cotangent of a complex number + - IMCSC() Returns the cosecant of a complex number + - IMCSCH() Returns the hyperbolic cosecant of a complex number + - IMSEC() Returns the secant of a complex number + - IMSECH() Returns the hyperbolic secant of a complex number + - IMSINH() Returns the hyperbolic sine of a complex number + - IMTAN() Returns the tangent of a complex number + +### Fixed + +- Fix ISFORMULA() function to work with a cell reference to another worksheet +- Xlsx reader crashed when reading a file with workbook protection - [#553](https://github.com/PHPOffice/PhpSpreadsheet/pull/553) +- Cell formats with escaped spaces were causing incorrect date formatting - [#557](https://github.com/PHPOffice/PhpSpreadsheet/issues/557) +- Could not open CSV file containing HTML fragment - [#564](https://github.com/PHPOffice/PhpSpreadsheet/issues/564) +- Exclude the vendor folder in migration - [#481](https://github.com/PHPOffice/PhpSpreadsheet/issues/481) +- Chained operations on cell ranges involving borders operated on last cell only [#428](https://github.com/PHPOffice/PhpSpreadsheet/issues/428) +- Avoid memory exhaustion when cloning worksheet with a drawing [#437](https://github.com/PHPOffice/PhpSpreadsheet/issues/437) +- Migration tool keep variables containing $PHPExcel untouched [#598](https://github.com/PHPOffice/PhpSpreadsheet/issues/598) +- Rowspans/colspans were incorrect when adding worksheet using loadIntoExisting [#619](https://github.com/PHPOffice/PhpSpreadsheet/issues/619) + +## [1.3.1] - 2018-06-12 + +### Fixed + +- Ranges across Z and AA columns incorrectly threw an exception - [#545](https://github.com/PHPOffice/PhpSpreadsheet/issues/545) + +## [1.3.0] - 2018-06-10 + +### Added + +- Support to read Xlsm templates with form elements, macros, printer settings, protected elements and back compatibility drawing, and save result without losing important elements of document - [#435](https://github.com/PHPOffice/PhpSpreadsheet/issues/435) +- Expose sheet title maximum length as `Worksheet::SHEET_TITLE_MAXIMUM_LENGTH` - [#482](https://github.com/PHPOffice/PhpSpreadsheet/issues/482) +- Allow escape character to be set in CSV reader – [#492](https://github.com/PHPOffice/PhpSpreadsheet/issues/492) + +### Fixed + +- Subtotal 9 in a group that has other subtotals 9 exclude the totals of the other subtotals in the range - [#332](https://github.com/PHPOffice/PhpSpreadsheet/issues/332) +- `Helper\Html` support UTF-8 HTML input - [#444](https://github.com/PHPOffice/PhpSpreadsheet/issues/444) +- Xlsx loaded an extra empty comment for each real comment - [#375](https://github.com/PHPOffice/PhpSpreadsheet/issues/375) +- Xlsx reader do not read rows and columns filtered out in readFilter at all - [#370](https://github.com/PHPOffice/PhpSpreadsheet/issues/370) +- Make newer Excel versions properly recalculate formulas on document open - [#456](https://github.com/PHPOffice/PhpSpreadsheet/issues/456) +- `Coordinate::extractAllCellReferencesInRange()` throws an exception for an invalid range – [#519](https://github.com/PHPOffice/PhpSpreadsheet/issues/519) +- Fixed parsing of conditionals in COUNTIF functions - [#526](https://github.com/PHPOffice/PhpSpreadsheet/issues/526) +- Corruption errors for saved Xlsx docs with frozen panes - [#532](https://github.com/PHPOffice/PhpSpreadsheet/issues/532) + ## [1.2.1] - 2018-04-10 ### Fixed diff --git a/inc/vendor/phpoffice/phpspreadsheet/README.md b/inc/vendor/phpoffice/phpspreadsheet/README.md index 0a138d7..e63e26e 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/README.md +++ b/inc/vendor/phpoffice/phpspreadsheet/README.md @@ -18,9 +18,7 @@ PhpSpreadsheet is a library written in pure PHP and providing a set of classes t ## Documentation -Read more about it, including install instructions, in the official documentation: - -https://phpspreadsheet.readthedocs.io +Read more about it, including install instructions, in the [official documentation](https://phpspreadsheet.readthedocs.io). Or check out the [API documentation](https://phpoffice.github.io/PhpSpreadsheet/master). Please ask your support questions on [StackOverflow](http://stackoverflow.com/questions/tagged/phpspreadsheet), or have a quick chat on [Gitter](https://gitter.im/PHPOffice/PhpSpreadsheet). diff --git a/inc/vendor/phpoffice/phpspreadsheet/composer.json b/inc/vendor/phpoffice/phpspreadsheet/composer.json index 1c033bb..4a08707 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/composer.json +++ b/inc/vendor/phpoffice/phpspreadsheet/composer.json @@ -25,7 +25,7 @@ "scripts": { "check": [ "php-cs-fixer fix --ansi --dry-run --diff", - "phpcs --report-width=200 --report-summary --report-full samples/ src/ tests/ --ignore=samples/Header.php --standard=PSR2 -n", + "phpcs --report-width=200 samples/ src/ tests/ --ignore=samples/Header.php --standard=PSR2 -n", "phpunit --color=always" ], "fix": [ @@ -46,16 +46,17 @@ "ext-xmlwriter": "*", "ext-zip": "*", "ext-zlib": "*", - "psr/simple-cache": "^1.0" + "psr/simple-cache": "^1.0", + "markbaker/complex": "^1.4.1" }, "require-dev": { "tecnickcom/tcpdf": "^6.2", - "squizlabs/php_codesniffer": "^2.7", "phpunit/phpunit": "^5.7", "dompdf/dompdf": "^0.8.0", "mpdf/mpdf": "^7.0.0", "jpgraph/jpgraph": "^4.0", - "friendsofphp/php-cs-fixer": "@stable" + "friendsofphp/php-cs-fixer": "@stable", + "squizlabs/php_codesniffer": "^3.3" }, "suggest": { "mpdf/mpdf": "Option for rendering PDF with PDF Writer", diff --git a/inc/vendor/phpoffice/phpspreadsheet/composer.lock b/inc/vendor/phpoffice/phpspreadsheet/composer.lock index 2991465..fe9fbc6 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/composer.lock +++ b/inc/vendor/phpoffice/phpspreadsheet/composer.lock @@ -1,11 +1,106 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e61a906bd83393400add286703f10557", + "content-hash": "66067b3ab7afd673a28cf0b31eb9ae20", "packages": [ + { + "name": "markbaker/complex", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "615f5443473cf37729666e2354fd8dfa2cb48e91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/615f5443473cf37729666e2354fd8dfa2cb48e91", + "reference": "615f5443473cf37729666e2354fd8dfa2cb48e91", + "shasum": "" + }, + "require": { + "php": "^5.6.0|^7.0.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "2.*", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^4.8.35|^5.4.0", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "^3.1.1", + "wimg/php-compatibility": "^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + }, + "files": [ + "classes/src/functions/abs.php", + "classes/src/functions/acos.php", + "classes/src/functions/acosh.php", + "classes/src/functions/acot.php", + "classes/src/functions/acoth.php", + "classes/src/functions/acsc.php", + "classes/src/functions/acsch.php", + "classes/src/functions/argument.php", + "classes/src/functions/asec.php", + "classes/src/functions/asech.php", + "classes/src/functions/asin.php", + "classes/src/functions/asinh.php", + "classes/src/functions/atan.php", + "classes/src/functions/atanh.php", + "classes/src/functions/conjugate.php", + "classes/src/functions/cos.php", + "classes/src/functions/cosh.php", + "classes/src/functions/cot.php", + "classes/src/functions/coth.php", + "classes/src/functions/csc.php", + "classes/src/functions/csch.php", + "classes/src/functions/exp.php", + "classes/src/functions/inverse.php", + "classes/src/functions/ln.php", + "classes/src/functions/log2.php", + "classes/src/functions/log10.php", + "classes/src/functions/negative.php", + "classes/src/functions/pow.php", + "classes/src/functions/rho.php", + "classes/src/functions/sec.php", + "classes/src/functions/sech.php", + "classes/src/functions/sin.php", + "classes/src/functions/sinh.php", + "classes/src/functions/sqrt.php", + "classes/src/functions/tan.php", + "classes/src/functions/tanh.php", + "classes/src/functions/theta.php", + "classes/src/operations/add.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "time": "2018-07-24T19:47:28+00:00" + }, { "name": "psr/simple-cache", "version": "1.0.0", @@ -2106,64 +2201,37 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "2.8.1", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d" + "reference": "628a481780561150481a9ec74709092b9759b3ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d", - "reference": "d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/628a481780561150481a9ec74709092b9759b3ec", + "reference": "628a481780561150481a9ec74709092b9759b3ec", "shasum": "" }, "require": { "ext-simplexml": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": ">=5.1.2" + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "bin": [ - "scripts/phpcs", - "scripts/phpcbf" + "bin/phpcs", + "bin/phpcbf" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, - "autoload": { - "classmap": [ - "CodeSniffer.php", - "CodeSniffer/CLI.php", - "CodeSniffer/Exception.php", - "CodeSniffer/File.php", - "CodeSniffer/Fixer.php", - "CodeSniffer/Report.php", - "CodeSniffer/Reporting.php", - "CodeSniffer/Sniff.php", - "CodeSniffer/Tokens.php", - "CodeSniffer/Reports/", - "CodeSniffer/Tokenizers/", - "CodeSniffer/DocGenerators/", - "CodeSniffer/Standards/AbstractPatternSniff.php", - "CodeSniffer/Standards/AbstractScopeSniff.php", - "CodeSniffer/Standards/AbstractVariableSniff.php", - "CodeSniffer/Standards/IncorrectPatternException.php", - "CodeSniffer/Standards/Generic/Sniffs/", - "CodeSniffer/Standards/MySource/Sniffs/", - "CodeSniffer/Standards/PEAR/Sniffs/", - "CodeSniffer/Standards/PSR1/Sniffs/", - "CodeSniffer/Standards/PSR2/Sniffs/", - "CodeSniffer/Standards/Squiz/Sniffs/", - "CodeSniffer/Standards/Zend/Sniffs/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" @@ -2180,7 +2248,7 @@ "phpcs", "standards" ], - "time": "2017-03-01T22:17:45+00:00" + "time": "2018-07-26T23:47:18+00:00" }, { "name": "symfony/console", diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/extra/extra.js b/inc/vendor/phpoffice/phpspreadsheet/docs/extra/extra.js deleted file mode 100644 index fdef958..0000000 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/extra/extra.js +++ /dev/null @@ -1,57 +0,0 @@ -var nodemcu = nodemcu || {}; -(function () { - 'use strict'; - - $(document).ready(function () { - fixSearch(); - }); - - /* - * RTD messes up MkDocs' search feature by tinkering with the search box defined in the theme, see - * https://github.com/rtfd/readthedocs.org/issues/1088. This function sets up a DOM4 MutationObserver - * to react to changes to the search form (triggered by RTD on doc ready). It then reverts everything - * the RTD JS code modified. - */ - function fixSearch() { - var target = document.getElementById('rtd-search-form'); - var config = {attributes: true, childList: true}; - - var observer = new MutationObserver(function (mutations) { - // if it isn't disconnected it'll loop infinitely because the observed element is modified - observer.disconnect(); - var form = $('#rtd-search-form'); - form.empty(); - form.attr('action', 'https://' + window.location.hostname + '/en/' + determineSelectedBranch() + '/search.html'); - $('').attr({ - type: "text", - name: "q", - placeholder: "Search docs" - }).appendTo(form); - }); - - if (window.location.origin.indexOf('readthedocs') > -1) { - observer.observe(target, config); - } - } - - /** - * Analyzes the URL of the current page to find out what the selected GitHub branch is. It's usually - * part of the location path. The code needs to distinguish between running MkDocs standalone - * and docs served from RTD. If no valid branch could be determined 'dev' returned. - * - * @returns GitHub branch name - */ - function determineSelectedBranch() { - var branch = 'dev', path = window.location.pathname; - if (window.location.origin.indexOf('readthedocs') > -1) { - // path is like /en///build/ -> extract 'lang' - // split[0] is an '' because the path starts with the separator - var thirdPathSegment = path.split('/')[2]; - // 'latest' is an alias on RTD for the 'dev' branch - which is the default for 'branch' here - if (thirdPathSegment !== 'latest') { - branch = thirdPathSegment; - } - } - return branch; - } -}()); \ No newline at end of file diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/index.md b/inc/vendor/phpoffice/phpspreadsheet/docs/index.md index 79d884d..08a9199 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/index.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/index.md @@ -95,6 +95,8 @@ architecture](./topics/architecture.md), [accessing cells](./topics/accessing-cells.md) and [reading and writing to files](./topics/reading-and-writing-to-file.md). +Or browse the [API documentation](https://phpoffice.github.io/PhpSpreadsheet/master). + # Credits Please refer to the [contributor diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/references/features-cross-reference.md b/inc/vendor/phpoffice/phpspreadsheet/docs/references/features-cross-reference.md index 2d28cd4..716a378 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/references/features-cross-reference.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/references/features-cross-reference.md @@ -750,6 +750,24 @@ + + Drawing hyperlink + + ✔ + + + + + + + ✔ + + + + + $drawing->getHyperlink()->getUrl() + $drawing->setHyperlink()->setUrl($url) + Cell Formatting diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-category.md b/inc/vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-category.md index 5561828..185bf4c 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-category.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-category.md @@ -41,6 +41,7 @@ DAYS360 | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DAYS360 EDATE | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::EDATE EOMONTH | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::EOMONTH HOUR | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::HOUROFDAY +ISOWEEKNUM | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::ISOWEEKNUM MINUTE | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::MINUTE MONTH | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::MONTHOFYEAR NETWORKDAYS | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::NETWORKDAYS @@ -73,7 +74,9 @@ DEC2HEX | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DECTOHE DEC2OCT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DECTOOCT DELTA | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::DELTA ERF | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERF +ERF.PRECISE | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFPRECISE ERFC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFC +ERFC.PRECISE | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFC GESTEP | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::GESTEP HEX2BIN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTOBIN HEX2DEC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTODEC @@ -83,6 +86,10 @@ IMAGINARY | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMAGINA IMARGUMENT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMARGUMENT IMCONJUGATE | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCONJUGATE IMCOS | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOS +IMCOSH | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOSH +IMCOT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOT +IMCSC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCSC +IMCSCH | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCSCH IMDIV | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMDIV IMEXP | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMEXP IMLN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLN @@ -91,10 +98,14 @@ IMLOG2 | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLOG2 IMPOWER | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMPOWER IMPRODUCT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMPRODUCT IMREAL | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMREAL +IMSEC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSEC +IMSECH | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSECH IMSIN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSIN +IMSINH | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSINH IMSQRT | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSQRT IMSUB | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSUB IMSUM | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSUM +IMTAN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMTAN OCT2BIN | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTOBIN OCT2DEC | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTODEC OCT2HEX | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::OCTTOHEX @@ -137,6 +148,7 @@ ODDFPRICE | **Not yet Implemented** ODDFYIELD | **Not yet Implemented** ODDLPRICE | **Not yet Implemented** ODDLYIELD | **Not yet Implemented** +PDURATION | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PDURATION PMT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PMT PPMT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PPMT PRICE | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PRICE @@ -145,6 +157,7 @@ PRICEMAT | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PRICEMAT PV | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PV RATE | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RATE RECEIVED | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RECEIVED +RRI | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RRI SLN | \PhpOffice\PhpSpreadsheet\Calculation\Financial::SLN SYD | \PhpOffice\PhpSpreadsheet\Calculation\Financial::SYD TBILLEQ | \PhpOffice\PhpSpreadsheet\Calculation\Financial::TBILLEQ @@ -169,6 +182,7 @@ ISBLANK | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_BLANK ISERR | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_ERR ISERROR | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_ERROR ISEVEN | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_EVEN +ISFORMULA | \PhpOffice\PhpSpreadsheet\Calculation\Functions::ISFORMULA ISLOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_LOGICAL ISNA | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_NA ISNONTEXT | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_NONTEXT @@ -184,13 +198,14 @@ TYPE | \PhpOffice\PhpSpreadsheet\Calculation\Functions::TYPE Excel Function | PhpSpreadsheet Function --------------------|------------------------------------------- -AND | \PhpOffice\PhpSpreadsheet\Calculation\Logical::LOGICAL_AND +AND | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalAnd FALSE | \PhpOffice\PhpSpreadsheet\Calculation\Logical::FALSE IF | \PhpOffice\PhpSpreadsheet\Calculation\Logical::STATEMENT_IF IFERROR | \PhpOffice\PhpSpreadsheet\Calculation\Logical::IFERROR NOT | \PhpOffice\PhpSpreadsheet\Calculation\Logical::NOT -OR | \PhpOffice\PhpSpreadsheet\Calculation\Logical::LOGICAL_OR +OR | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalOr TRUE | \PhpOffice\PhpSpreadsheet\Calculation\Logical::TRUE +XOR | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalXor ## CATEGORY_LOOKUP_AND_REFERENCE @@ -201,8 +216,9 @@ AREAS | **Not yet Implemented** CHOOSE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::CHOOSE COLUMN | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::COLUMN COLUMNS | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::COLUMNS +FORMULATEXT | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::FORMULATEXT GETPIVOTDATA | **Not yet Implemented** -HLOOKUP | **Not yet Implemented** +HLOOKUP | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::HLOOKUP HYPERLINK | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::HYPERLINK INDEX | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDEX INDIRECT | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDIRECT @@ -222,6 +238,8 @@ Excel Function | PhpSpreadsheet Function ABS | abs ACOS | acos ACOSH | acosh +ACOT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ACOT +ACOTH | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ACOTH ASIN | asin ASINH | asinh ATAN | atan @@ -231,6 +249,10 @@ CEILING | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CEILING COMBIN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COMBIN COS | cos COSH | cosh +COT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COT +COTH | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COTH +CSC | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CSC +CSCH | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CSCH DEGREES | rad2deg EVEN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::EVEN EXP | exp @@ -261,6 +283,8 @@ ROMAN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROMAN ROUND | round ROUNDDOWN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROUNDDOWN ROUNDUP | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROUNDUP +SEC | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SEC +SECH | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SECH SERIESSUM | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SERIESSUM SIGN | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SIGN SIN | sin @@ -270,7 +294,7 @@ SQRTPI | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SQRTPI SUBTOTAL | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUBTOTAL SUM | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUM SUMIF | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMIF -SUMIFS | **Not yet Implemented** +SUMIFS | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMIFS SUMPRODUCT | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMPRODUCT SUMSQ | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMSQ SUMX2MY2 | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMX2MY2 @@ -336,6 +360,7 @@ MIN | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MIN MINA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MINA MINIF | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MINIF MODE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MODE +MODE.SNGL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MODE NEGBINOMDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NEGBINOMDIST NORMDIST | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMDIST NORMINV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::NORMINV @@ -355,6 +380,8 @@ SLOPE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::SLOPE SMALL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::SMALL STANDARDIZE | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STANDARDIZE STDEV | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEV +STDEV.S | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEV +STDEV.P | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVP STDEVA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVA STDEVP | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVP STDEVPA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVPA @@ -365,6 +392,8 @@ TREND | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TREND TRIMMEAN | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TRIMMEAN TTEST | **Not yet Implemented** VAR | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARFunc +VAR.P | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARP +VAR.S | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARFunc VARA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARA VARP | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARP VARPA | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARPA @@ -380,9 +409,10 @@ BAHTTEXT | **Not yet Implemented** CHAR | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CHARACTER CLEAN | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TRIMNONPRINTABLE CODE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::ASCIICODE +CONCAT | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CONCATENATE CONCATENATE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CONCATENATE DOLLAR | \PhpOffice\PhpSpreadsheet\Calculation\TextData::DOLLAR -EXACT | **Not yet Implemented** +EXACT | \PhpOffice\PhpSpreadsheet\Calculation\TextData::EXACT FIND | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHSENSITIVE FINDB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHSENSITIVE FIXED | \PhpOffice\PhpSpreadsheet\Calculation\TextData::FIXEDFORMAT @@ -394,6 +424,7 @@ LENB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::STRINGLENG LOWER | \PhpOffice\PhpSpreadsheet\Calculation\TextData::LOWERCASE MID | \PhpOffice\PhpSpreadsheet\Calculation\TextData::MID MIDB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::MID +NUMBERVALUE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::NUMBERVALUE PHONETIC | **Not yet Implemented** PROPER | \PhpOffice\PhpSpreadsheet\Calculation\TextData::PROPERCASE REPLACE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::REPLACE @@ -406,6 +437,9 @@ SEARCHB | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHINSE SUBSTITUTE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SUBSTITUTE T | \PhpOffice\PhpSpreadsheet\Calculation\TextData::RETURNSTRING TEXT | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TEXTFORMAT +TEXTJOIN | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TEXTJOIN TRIM | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TRIMSPACES +UNICHAR | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CHARACTER +UNICODE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::ASCIICODE UPPER | \PhpOffice\PhpSpreadsheet\Calculation\TextData::UPPERCASE -VALUE | **Not yet Implemented** +VALUE | \PhpOffice\PhpSpreadsheet\Calculation\TextData::VALUE diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-name.md b/inc/vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-name.md index 8b7ad95..a8caca6 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-name.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/references/function-list-by-name.md @@ -9,10 +9,12 @@ ACCRINT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet ACCRINTM | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::ACCRINTM ACOS | CATEGORY_MATH_AND_TRIG | acos ACOSH | CATEGORY_MATH_AND_TRIG | acosh +ACOT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ACOT +ACOTH | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ACOTH ADDRESS | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::CELL_ADDRESS AMORDEGRC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::AMORDEGRC AMORLINC | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::AMORLINC -AND | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::LOGICAL_AND +AND | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalAnd AREAS | CATEGORY_LOOKUP_AND_REFERENCE | **Not yet Implemented** ASC | CATEGORY_TEXT_AND_DATA | **Not yet Implemented** ASIN | CATEGORY_MATH_AND_TRIG | asin @@ -59,12 +61,15 @@ COLUMN | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet COLUMNS | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::COLUMNS COMBIN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COMBIN COMPLEX | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::COMPLEX +CONCAT | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CONCATENATE CONCATENATE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CONCATENATE CONFIDENCE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CONFIDENCE CONVERT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::CONVERTUOM CORREL | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CORREL COS | CATEGORY_MATH_AND_TRIG | cos COSH | CATEGORY_MATH_AND_TRIG | cosh +COT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COT +COTH | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::COTH COUNT | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNT COUNTA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTA COUNTBLANK | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COUNTBLANK @@ -78,6 +83,8 @@ COUPNUM | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet COUPPCD | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::COUPPCD COVAR | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::COVAR CRITBINOM | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CRITBINOM +CSC | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CSC +CSCH | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::CSCH CUBEKPIMEMBER | CATEGORY_CUBE | **Not yet Implemented** CUBEMEMBER | CATEGORY_CUBE | **Not yet Implemented** CUBEMEMBERPROPERTY | CATEGORY_CUBE | **Not yet Implemented** @@ -131,10 +138,12 @@ EDATE | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet EFFECT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::EFFECT EOMONTH | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::EOMONTH ERF | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERF +ERF.PRECISE | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFPRECISE ERFC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFC +ERFC.PRECISE | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::ERFC ERROR.TYPE | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::ERROR_TYPE EVEN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::EVEN -EXACT | CATEGORY_TEXT_AND_DATA | **Not yet Implemented** +EXACT | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::EXACT EXP | CATEGORY_MATH_AND_TRIG | exp EXPONDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::EXPONDIST @@ -154,6 +163,7 @@ FISHERINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet FIXED | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::FIXEDFORMAT FLOOR | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::FLOOR FORECAST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::FORECAST +FORMULATEXT | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::FORMULATEXT FREQUENCY | CATEGORY_STATISTICAL | **Not yet Implemented** FTEST | CATEGORY_STATISTICAL | **Not yet Implemented** FV | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::FV @@ -180,7 +190,7 @@ HARMEAN | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet HEX2BIN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTOBIN HEX2DEC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTODEC HEX2OCT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::HEXTOOCT -HLOOKUP | CATEGORY_LOOKUP_AND_REFERENCE | **Not yet Implemented** +HLOOKUP | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::HLOOKUP HOUR | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::HOUROFDAY HYPERLINK | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::HYPERLINK HYPGEOMDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::HYPGEOMDIST @@ -196,6 +206,10 @@ IMAGINARY | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet IMARGUMENT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMARGUMENT IMCONJUGATE | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCONJUGATE IMCOS | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOS +IMCOSH | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOSH +IMCOT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCOT +IMCSC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCSC +IMCSCH | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMCSCH IMDIV | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMDIV IMEXP | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMEXP IMLN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMLN @@ -204,10 +218,14 @@ IMLOG2 | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet IMPOWER | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMPOWER IMPRODUCT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMPRODUCT IMREAL | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMREAL +IMSEC | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSEC +IMSECH | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSECH IMSIN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSIN +IMSINH | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSINH IMSQRT | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSQRT IMSUB | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSUB IMSUM | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMSUM +IMTAN | CATEGORY_ENGINEERING | \PhpOffice\PhpSpreadsheet\Calculation\Engineering::IMTAN INDEX | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDEX INDIRECT | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDIRECT INFO | CATEGORY_INFORMATION | **Not yet Implemented** @@ -220,11 +238,13 @@ ISBLANK | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet ISERR | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_ERR ISERROR | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_ERROR ISEVEN | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_EVEN +ISFORMULA | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::ISFORMULA ISLOGICAL | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_LOGICAL ISNA | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_NA ISNONTEXT | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_NONTEXT ISNUMBER | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_NUMBER ISODD | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_ODD +ISOWEEKNUM | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::ISOWEEKNUM ISPMT | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::ISPMT ISREF | CATEGORY_INFORMATION | **Not yet Implemented** ISTEXT | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet\Calculation\Functions::IS_TEXT @@ -284,6 +304,7 @@ MIRR | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet MMULT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MMULT MOD | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MOD MODE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MODE +MODE.SNGL | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::MODE MONTH | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::MONTHOFYEAR MROUND | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MROUND MULTINOMIAL | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::MULTINOMIAL @@ -305,6 +326,7 @@ NOT | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet NOW | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::DATETIMENOW NPER | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::NPER NPV | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::NPV +NUMBERVALUE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::NUMBERVALUE ## O @@ -319,12 +341,13 @@ ODDFYIELD | CATEGORY_FINANCIAL | **Not yet Implemented** ODDLPRICE | CATEGORY_FINANCIAL | **Not yet Implemented** ODDLYIELD | CATEGORY_FINANCIAL | **Not yet Implemented** OFFSET | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::OFFSET -OR | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::LOGICAL_OR +OR | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalOr ## P Excel Function | Category | PhpSpreadsheet Function --------------------|--------------------------------|------------------------------------------- +PDURATION | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::PDURATION PEARSON | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::CORREL PERCENTILE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::PERCENTILE PERCENTRANK | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::PERCENTRANK @@ -371,6 +394,7 @@ ROUNDDOWN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet ROUNDUP | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::ROUNDUP ROW | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::ROW ROWS | CATEGORY_LOOKUP_AND_REFERENCE | \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::ROWS +RRI | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::RRI RSQ | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::RSQ RTD | CATEGORY_LOOKUP_AND_REFERENCE | **Not yet Implemented** @@ -380,6 +404,8 @@ Excel Function | Category | PhpSpreadsheet Function --------------------|--------------------------------|------------------------------------------- SEARCH | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHINSENSITIVE SEARCHB | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::SEARCHINSENSITIVE +SEC | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SEC +SECH | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SECH SECOND | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::SECOND SERIESSUM | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SERIESSUM SIGN | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SIGN @@ -393,6 +419,8 @@ SQRT | CATEGORY_MATH_AND_TRIG | sqrt SQRTPI | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SQRTPI STANDARDIZE | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STANDARDIZE STDEV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEV +STDEV.S | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEV +STDEV.P | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVP STDEVA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVA STDEVP | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVP STDEVPA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::STDEVPA @@ -401,7 +429,7 @@ SUBSTITUTE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet SUBTOTAL | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUBTOTAL SUM | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUM SUMIF | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMIF -SUMIFS | CATEGORY_MATH_AND_TRIG | **Not yet Implemented** +SUMIFS | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMIFS SUMPRODUCT | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMPRODUCT SUMSQ | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMSQ SUMX2MY2 | CATEGORY_MATH_AND_TRIG | \PhpOffice\PhpSpreadsheet\Calculation\MathTrig::SUMX2MY2 @@ -421,6 +449,7 @@ TBILLPRICE | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet TBILLYIELD | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::TBILLYIELD TDIST | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TDIST TEXT | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TEXTFORMAT +TEXTJOIN | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::TEXTJOIN TIME | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::TIME TIMEVALUE | CATEGORY_DATE_AND_TIME | \PhpOffice\PhpSpreadsheet\Calculation\DateTime::TIMEVALUE TINV | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::TINV @@ -438,6 +467,8 @@ TYPE | CATEGORY_INFORMATION | \PhpOffice\PhpSpreadsheet Excel Function | Category | PhpSpreadsheet Function --------------------|--------------------------------|------------------------------------------- +UNICHAR | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::CHARACTER +UNICODE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::ASCIICODE UPPER | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::UPPERCASE USDOLLAR | CATEGORY_FINANCIAL | **Not yet Implemented** @@ -445,8 +476,10 @@ USDOLLAR | CATEGORY_FINANCIAL | **Not yet Implemented** Excel Function | Category | PhpSpreadsheet Function --------------------|--------------------------------|------------------------------------------- -VALUE | CATEGORY_TEXT_AND_DATA | **Not yet Implemented** +VALUE | CATEGORY_TEXT_AND_DATA | \PhpOffice\PhpSpreadsheet\Calculation\TextData::VALUE VAR | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARFunc +VAR.P | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARP +VAR.S | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARFunc VARA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARA VARP | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARP VARPA | CATEGORY_STATISTICAL | \PhpOffice\PhpSpreadsheet\Calculation\Statistical::VARPA @@ -468,6 +501,8 @@ Excel Function | Category | PhpSpreadsheet Function --------------------|--------------------------------|------------------------------------------- XIRR | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::XIRR XNPV | CATEGORY_FINANCIAL | \PhpOffice\PhpSpreadsheet\Calculation\Financial::XNPV +XOR | CATEGORY_LOGICAL | \PhpOffice\PhpSpreadsheet\Calculation\Logical::logicalXor + ## Y diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/accessing-cells.md b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/accessing-cells.md index c85fb0f..f14e2bd 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/accessing-cells.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/accessing-cells.md @@ -426,9 +426,9 @@ for ($row = 1; $row <= $highestRow; ++$row) { echo '' . PHP_EOL; ``` -Note that we can't use a <= comparison here, because 'AA' would match -as <= 'B', so we increment the highest column letter and then loop -while \$col != the incremented highest column. +Note that we can't use a `<=` comparison here, because `'AA'` would match +as `<= 'B'`, so we increment the highest column letter and then loop +while `$col !=` the incremented highest column. ## Using value binders to facilitate data entry diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/autofilters.md b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/autofilters.md index f7c9421..66321ee 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/autofilters.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/autofilters.md @@ -285,8 +285,8 @@ $columnFilter->createRule() We also set the rule type to CUSTOMFILTER. -This defined two rules, filtering numbers that are >= -20 OR <= -20, so we also need to modify the join condition to reflect AND rather +This defined two rules, filtering numbers that are `>= -20` OR `<= +20`, so we also need to modify the join condition to reflect AND rather than OR. ``` php diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/reading-and-writing-to-file.md b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/reading-and-writing-to-file.md index d9cb9a7..cf58e54 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/reading-and-writing-to-file.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/reading-and-writing-to-file.md @@ -634,16 +634,16 @@ $writer->setSheetIndex(0); #### Setting the images root of the HTML file There might be situations where you want to explicitly set the included -images root. For example, one might want to see +images root. For example, instead of: + + ``` html + + ``` + +You might want to see: ``` html - -``` - -instead of - -``` html -. + ``` You can use the following code to achieve this result: diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/recipes.md b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/recipes.md index 0c6c313..0b40cf3 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/recipes.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/recipes.md @@ -3,12 +3,12 @@ The following pages offer you some widely-used PhpSpreadsheet recipes. Please note that these do NOT offer complete documentation on specific PhpSpreadsheet API functions, but just a bump to get you started. If you -need specific API functions, please refer to the API documentation. +need specific API functions, please refer to the [API documentation](https://phpoffice.github.io/PhpSpreadsheet/master). For example, [setting a worksheet's page orientation and size ](#setting-a-worksheets-page-orientation-and-size) covers setting a page orientation to A4. Other paper formats, like US Letter, are not covered -in this document, but in the PhpSpreadsheet API documentation. +in this document, but in the PhpSpreadsheet [API documentation](https://phpoffice.github.io/PhpSpreadsheet/master). ## Setting a spreadsheet's metadata @@ -132,7 +132,7 @@ will take care of displaying the formula according the applications language. Translation is taken care of by the application! The following line of code writes the formula -`=IF(C4>500,"profit","loss")` into the cell B8. Note that the +`=IF(C4>500,"profit","loss")` into the cell B8. Note that the formula must start with `=` to make PhpSpreadsheet recognise this as a formula. @@ -301,7 +301,7 @@ $spreadsheet->getActiveSheet()->getPageSetup() ``` Note that there are additional page settings available. Please refer to -the API documentation for all possible options. +the [API documentation](https://phpoffice.github.io/PhpSpreadsheet/master) for all possible options. ### Page Setup: Scaling options diff --git a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/worksheets.md b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/worksheets.md index 6100d3a..f97a006 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/docs/topics/worksheets.md +++ b/inc/vendor/phpoffice/phpspreadsheet/docs/topics/worksheets.md @@ -31,8 +31,6 @@ index, use the `getSheet()` method. $spreadsheet->getSheet(1); ``` -If you don't specify a sheet index, then the first worksheet will be -returned. Methods also exist allowing you to reorder the worksheets in the workbook. @@ -71,7 +69,7 @@ $spreadsheet->createSheet(); ``` A new worksheet created using this method will be called -"Worksheet<n>" where "<n>" is the lowest number possible to +`Worksheet` where `` is the lowest number possible to guarantee that the title is unique. Alternatively, you can instantiate a new worksheet (setting the title to diff --git a/inc/vendor/phpoffice/phpspreadsheet/mkdocs.yml b/inc/vendor/phpoffice/phpspreadsheet/mkdocs.yml index 0062000..1a224f5 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/mkdocs.yml +++ b/inc/vendor/phpoffice/phpspreadsheet/mkdocs.yml @@ -5,7 +5,3 @@ edit_uri: edit/develop/docs/ theme: readthedocs extra_css: - extra/extra.css - -extra_javascript: - - extra/extra.js - \ No newline at end of file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_1.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_1.php index 4f1fc48..30efc19 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_1.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_1.php @@ -125,7 +125,7 @@ $autoFilter->getColumn('C') ) ->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER); // Filter the Date column on a filter value of the first day of every period of the current year -// We us a dateGroup ruletype for this, although it is still a standard filter +// We us a dateGroup ruletype for this, although it is still a standard filter foreach ($periods as $period) { $endDate = date('t', mktime(0, 0, 0, $period, 1, $currentYear)); diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_2.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_2.php index 63f11a2..1520c97 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_2.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_2.php @@ -108,7 +108,7 @@ $spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->ca $autoFilter = $spreadsheet->getActiveSheet()->getAutoFilter(); $helper->log('Set active filters'); // Filter the Country column on a filter value of Germany -// As it's just a simple value filter, we can use FILTERTYPE_FILTER +// As it's just a simple value filter, we can use FILTERTYPE_FILTER $autoFilter->getColumn('C') ->setFilterType(Column::AUTOFILTER_FILTERTYPE_FILTER) ->createRule() diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_display.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_display.php index b2b77b7..50986bf 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_display.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Autofilter/10_Autofilter_selection_display.php @@ -125,7 +125,7 @@ $autoFilter->getColumn('C') ) ->setRuleType(Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER); // Filter the Date column on a filter value of the first day of every period of the current year -// We us a dateGroup ruletype for this, although it is still a standard filter +// We us a dateGroup ruletype for this, although it is still a standard filter foreach ($periods as $period) { $endDate = date('t', mktime(0, 0, 0, $period, 1, $currentYear)); diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting.php index 0ad45c3..2f54863 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting.php @@ -84,7 +84,7 @@ $conditionalStyles[] = $conditional2; $conditionalStyles[] = $conditional3; $spreadsheet->getActiveSheet()->getStyle('B2')->setConditionalStyles($conditionalStyles); -// duplicate the conditional styles across a range of cells +// duplicate the conditional styles across a range of cells $helper->log('Duplicate the conditional formatting across a range of cells'); $spreadsheet->getActiveSheet()->duplicateConditionalStyle( $spreadsheet->getActiveSheet()->getStyle('B2')->getConditionalStyles(), diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting_2.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting_2.php index 607578c..818cdd9 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting_2.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Basic/08_Conditional_formatting_2.php @@ -59,7 +59,7 @@ $conditionalStyles[] = $conditional1; $conditionalStyles[] = $conditional3; $spreadsheet->getActiveSheet()->getStyle('A1')->setConditionalStyles($conditionalStyles); -// duplicate the conditional styles across a range of cells +// duplicate the conditional styles across a range of cells $helper->log('Duplicate the conditional formatting across a range of cells'); $spreadsheet->getActiveSheet()->duplicateConditionalStyle( $spreadsheet->getActiveSheet()->getStyle('A1')->getConditionalStyles(), diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/32_Chart_read_write_HTML.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/32_Chart_read_write_HTML.php index 8071edd..5febbf9 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/32_Chart_read_write_HTML.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/32_Chart_read_write_HTML.php @@ -5,7 +5,7 @@ use PhpOffice\PhpSpreadsheet\Settings; require __DIR__ . '/../Header.php'; -// Change these values to select the Rendering library that you wish to use +// Change these values to select the Rendering library that you wish to use Settings::setChartRenderer(\PhpOffice\PhpSpreadsheet\Chart\Renderer\JpGraph::class); $inputFileType = 'Xlsx'; diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/32_Chart_read_write_PDF.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/32_Chart_read_write_PDF.php index 7cc5156..ee3ad0e 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/32_Chart_read_write_PDF.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/32_Chart_read_write_PDF.php @@ -7,7 +7,7 @@ require __DIR__ . '/../Header.php'; IOFactory::registerWriter('Pdf', \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class); -// Change these values to select the Rendering library that you wish to use +// Change these values to select the Rendering library that you wish to use Settings::setChartRenderer(\PhpOffice\PhpSpreadsheet\Chart\Renderer\JpGraph::class); $inputFileType = 'Xlsx'; diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_area.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_area.php index f44232f..4478d2d 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_area.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_area.php @@ -23,42 +23,42 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_AREACHART, // plotType DataSeries::GROUPING_PERCENT_STACKED, // plotGrouping @@ -68,15 +68,15 @@ $series = new DataSeries( $dataSeriesValues // plotValues ); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_TOPRIGHT, null, false); $title = new Title('Test %age-Stacked Area Chart'); $yAxisLabel = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -88,11 +88,11 @@ $chart = new Chart( $yAxisLabel // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('A7'); $chart->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_bar_stacked.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_bar_stacked.php index 16654a1..7ba4d8d 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_bar_stacked.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_bar_stacked.php @@ -23,42 +23,42 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_BARCHART, // plotType DataSeries::GROUPING_STACKED, // plotGrouping @@ -67,19 +67,19 @@ $series = new DataSeries( $xAxisTickValues, // plotCategory $dataSeriesValues // plotValues ); -// Set additional dataseries parameters -// Make it a horizontal bar rather than a vertical column graph +// Set additional dataseries parameters +// Make it a horizontal bar rather than a vertical column graph $series->setPlotDirection(DataSeries::DIRECTION_BAR); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_RIGHT, null, false); $title = new Title('Test Chart'); $yAxisLabel = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -91,11 +91,11 @@ $chart = new Chart( $yAxisLabel // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('A7'); $chart->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_column.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_column.php index bc67644..9ffe9d3 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_column.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_column.php @@ -23,42 +23,42 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_BARCHART, // plotType DataSeries::GROUPING_STANDARD, // plotGrouping @@ -67,19 +67,19 @@ $series = new DataSeries( $xAxisTickValues, // plotCategory $dataSeriesValues // plotValues ); -// Set additional dataseries parameters -// Make it a vertical column rather than a horizontal bar graph +// Set additional dataseries parameters +// Make it a vertical column rather than a horizontal bar graph $series->setPlotDirection(DataSeries::DIRECTION_COL); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_RIGHT, null, false); $title = new Title('Test Column Chart'); $yAxisLabel = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -91,11 +91,11 @@ $chart = new Chart( $yAxisLabel // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('A7'); $chart->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_column_2.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_column_2.php index a00b23b..bba9210 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_column_2.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_column_2.php @@ -31,42 +31,42 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 'Budget' - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 'Forecast' - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$E$1', null, 1), // 'Actual' + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 'Budget' + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 'Forecast' + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$E$1', null, 1), // 'Actual' ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$B$13', null, 12), // Q1 to Q4 for 2010 to 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$B$13', null, 12), // Q1 to Q4 for 2010 to 2012 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$13', null, 12), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$13', null, 12), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$E$2:$E$13', null, 12), ]; -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_BARCHART, // plotType DataSeries::GROUPING_CLUSTERED, // plotGrouping @@ -75,20 +75,20 @@ $series = new DataSeries( $xAxisTickValues, // plotCategory $dataSeriesValues // plotValues ); -// Set additional dataseries parameters -// Make it a vertical column rather than a horizontal bar graph +// Set additional dataseries parameters +// Make it a vertical column rather than a horizontal bar graph $series->setPlotDirection(DataSeries::DIRECTION_COL); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_BOTTOM, null, false); $title = new Title('Test Grouped Column Chart'); $xAxisLabel = new Title('Financial Period'); $yAxisLabel = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -100,11 +100,11 @@ $chart = new Chart( $yAxisLabel // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('G2'); $chart->setBottomRightPosition('P20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_composite.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_composite.php index 272048d..83dc34a 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_composite.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_composite.php @@ -31,46 +31,46 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels1 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // Temperature + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // Temperature ]; $dataSeriesLabels2 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // Rainfall + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // Rainfall ]; $dataSeriesLabels3 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // Humidity + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // Humidity ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$13', null, 12), // Jan to Dec + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$13', null, 12), // Jan to Dec ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues1 = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$13', null, 12), ]; -// Build the dataseries +// Build the dataseries $series1 = new DataSeries( DataSeries::TYPE_BARCHART, // plotType DataSeries::GROUPING_CLUSTERED, // plotGrouping @@ -79,22 +79,22 @@ $series1 = new DataSeries( $xAxisTickValues, // plotCategory $dataSeriesValues1 // plotValues ); -// Set additional dataseries parameters -// Make it a vertical column rather than a horizontal bar graph +// Set additional dataseries parameters +// Make it a vertical column rather than a horizontal bar graph $series1->setPlotDirection(DataSeries::DIRECTION_COL); -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues2 = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$13', null, 12), ]; -// Build the dataseries +// Build the dataseries $series2 = new DataSeries( DataSeries::TYPE_LINECHART, // plotType DataSeries::GROUPING_STANDARD, // plotGrouping @@ -104,18 +104,18 @@ $series2 = new DataSeries( $dataSeriesValues2 // plotValues ); -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues3 = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$13', null, 12), ]; -// Build the dataseries +// Build the dataseries $series3 = new DataSeries( DataSeries::TYPE_AREACHART, // plotType DataSeries::GROUPING_STANDARD, // plotGrouping @@ -125,14 +125,14 @@ $series3 = new DataSeries( $dataSeriesValues3 // plotValues ); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series1, $series2, $series3]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_RIGHT, null, false); $title = new Title('Average Weather Chart for Crete'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -144,11 +144,11 @@ $chart = new Chart( null // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('F2'); $chart->setBottomRightPosition('O16'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_line.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_line.php index 3961d70..bdaf011 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_line.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_line.php @@ -23,35 +23,35 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), @@ -59,7 +59,7 @@ $dataSeriesValues = [ ]; $dataSeriesValues[2]->setLineWidth(60000); -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_LINECHART, // plotType DataSeries::GROUPING_STACKED, // plotGrouping @@ -69,15 +69,15 @@ $series = new DataSeries( $dataSeriesValues // plotValues ); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_TOPRIGHT, null, false); $title = new Title('Test Stacked Line Chart'); $yAxisLabel = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -89,11 +89,11 @@ $chart = new Chart( $yAxisLabel // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('A7'); $chart->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_multiple_charts.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_multiple_charts.php index b907a39..10a11e1 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_multiple_charts.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_multiple_charts.php @@ -23,42 +23,42 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels1 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues1 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues1 = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series1 = new DataSeries( DataSeries::TYPE_AREACHART, // plotType DataSeries::GROUPING_PERCENT_STACKED, // plotGrouping @@ -68,15 +68,15 @@ $series1 = new DataSeries( $dataSeriesValues1 // plotValues ); -// Set the series in the plot area +// Set the series in the plot area $plotArea1 = new PlotArea(null, [$series1]); -// Set the chart legend +// Set the chart legend $legend1 = new Legend(Legend::POSITION_TOPRIGHT, null, false); $title1 = new Title('Test %age-Stacked Area Chart'); $yAxisLabel1 = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart1 = new Chart( 'chart1', // name $title1, // title @@ -88,49 +88,49 @@ $chart1 = new Chart( $yAxisLabel1 // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart1->setTopLeftPosition('A7'); $chart1->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart1); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels2 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues2 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues2 = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series2 = new DataSeries( DataSeries::TYPE_BARCHART, // plotType DataSeries::GROUPING_STANDARD, // plotGrouping @@ -139,19 +139,19 @@ $series2 = new DataSeries( $xAxisTickValues2, // plotCategory $dataSeriesValues2 // plotValues ); -// Set additional dataseries parameters -// Make it a vertical column rather than a horizontal bar graph +// Set additional dataseries parameters +// Make it a vertical column rather than a horizontal bar graph $series2->setPlotDirection(DataSeries::DIRECTION_COL); -// Set the series in the plot area +// Set the series in the plot area $plotArea2 = new PlotArea(null, [$series2]); -// Set the chart legend +// Set the chart legend $legend2 = new Legend(Legend::POSITION_RIGHT, null, false); $title2 = new Title('Test Column Chart'); $yAxisLabel2 = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart2 = new Chart( 'chart2', // name $title2, // title @@ -163,11 +163,11 @@ $chart2 = new Chart( $yAxisLabel2 // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart2->setTopLeftPosition('I7'); $chart2->setBottomRightPosition('P20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart2); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_pie.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_pie.php index 4972644..d4ec075 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_pie.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_pie.php @@ -24,38 +24,38 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels1 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues1 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues1 = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series1 = new DataSeries( DataSeries::TYPE_PIECHART, // plotType null, // plotGrouping (Pie charts don't have any grouping) @@ -65,19 +65,19 @@ $series1 = new DataSeries( $dataSeriesValues1 // plotValues ); -// Set up a layout object for the Pie chart +// Set up a layout object for the Pie chart $layout1 = new Layout(); $layout1->setShowVal(true); $layout1->setShowPercent(true); -// Set the series in the plot area +// Set the series in the plot area $plotArea1 = new PlotArea($layout1, [$series1]); -// Set the chart legend +// Set the chart legend $legend1 = new Legend(Legend::POSITION_RIGHT, null, false); $title1 = new Title('Test Pie Chart'); -// Create the chart +// Create the chart $chart1 = new Chart( 'chart1', // name $title1, // title @@ -86,48 +86,48 @@ $chart1 = new Chart( true, // plotVisibleOnly 0, // displayBlanksAs null, // xAxisLabel - null // yAxisLabel - Pie charts don't have a Y-Axis + null // yAxisLabel - Pie charts don't have a Y-Axis ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart1->setTopLeftPosition('A7'); $chart1->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart1); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels2 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues2 = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues2 = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series2 = new DataSeries( DataSeries::TYPE_DONUTCHART, // plotType null, // plotGrouping (Donut charts don't have any grouping) @@ -137,17 +137,17 @@ $series2 = new DataSeries( $dataSeriesValues2 // plotValues ); -// Set up a layout object for the Pie chart +// Set up a layout object for the Pie chart $layout2 = new Layout(); $layout2->setShowVal(true); $layout2->setShowCatName(true); -// Set the series in the plot area +// Set the series in the plot area $plotArea2 = new PlotArea($layout2, [$series2]); $title2 = new Title('Test Donut Chart'); -// Create the chart +// Create the chart $chart2 = new Chart( 'chart2', // name $title2, // title @@ -156,14 +156,14 @@ $chart2 = new Chart( true, // plotVisibleOnly 0, // displayBlanksAs null, // xAxisLabel - null // yAxisLabel - Like Pie charts, Donut charts don't have a Y-Axis + null // yAxisLabel - Like Pie charts, Donut charts don't have a Y-Axis ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart2->setTopLeftPosition('I7'); $chart2->setBottomRightPosition('P20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart2); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_radar.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_radar.php index 9d05f85..e57914a 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_radar.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_radar.php @@ -32,41 +32,41 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$13', null, 12), // Jan to Dec - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$13', null, 12), // Jan to Dec + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$13', null, 12), // Jan to Dec + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$13', null, 12), // Jan to Dec ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$13', null, 12), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$13', null, 12), ]; -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_RADARCHART, // plotType null, // plotGrouping (Radar charts don't have any grouping) @@ -79,17 +79,17 @@ $series = new DataSeries( DataSeries::STYLE_MARKER // plotStyle ); -// Set up a layout object for the Pie chart +// Set up a layout object for the Pie chart $layout = new Layout(); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea($layout, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_RIGHT, null, false); $title = new Title('Test Radar Chart'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -98,14 +98,14 @@ $chart = new Chart( true, // plotVisibleOnly 0, // displayBlanksAs null, // xAxisLabel - null // yAxisLabel - Radar charts don't have a Y-Axis + null // yAxisLabel - Radar charts don't have a Y-Axis ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('F2'); $chart->setBottomRightPosition('M15'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_scatter.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_scatter.php index 2070fe2..12fc2bd 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_scatter.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_scatter.php @@ -23,36 +23,36 @@ $worksheet->fromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels +// Set the X-Axis Labels $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_SCATTERCHART, // plotType null, // plotGrouping (Scatter charts don't have any grouping) @@ -65,15 +65,15 @@ $series = new DataSeries( DataSeries::STYLE_LINEMARKER // plotStyle ); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_TOPRIGHT, null, false); $title = new Title('Test Scatter Chart'); $yAxisLabel = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -85,11 +85,11 @@ $chart = new Chart( $yAxisLabel // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('A7'); $chart->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_stock.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_stock.php index 2342d1a..7a9f727 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_stock.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Chart/33_Chart_create_stock.php @@ -29,36 +29,36 @@ $worksheet->fromArray( ); $worksheet->getStyle('B2:E6')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_00); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), //Max / Open new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), //Min / Close new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), //Min Threshold / Min new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$E$1', null, 1), //Max Threshold / Max ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$6', null, 5), // Counts + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$6', null, 5), // Counts ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$6', null, 5), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$6', null, 5), @@ -66,7 +66,7 @@ $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$E$2:$E$6', null, 5), ]; -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_STOCKCHART, // plotType null, // plotGrouping - if we set this to not null, then xlsx throws error @@ -76,16 +76,16 @@ $series = new DataSeries( $dataSeriesValues // plotValues ); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_RIGHT, null, false); $title = new Title('Test Stock Chart'); $xAxisLabel = new Title('Counts'); $yAxisLabel = new Title('Values'); -// Create the chart +// Create the chart $chart = new Chart( 'stock-chart', // name $title, // title @@ -97,11 +97,11 @@ $chart = new Chart( $yAxisLabel // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('A7'); $chart->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); // Save Excel 2007 file diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/11_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_(version_1).php b/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/11_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_(version_1).php index 892ab33..1856221 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/11_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_(version_1).php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/11_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_(version_1).php @@ -57,7 +57,7 @@ for ($startRow = 2; $startRow <= 240; $startRow += $chunkSize) { // Load only the rows that match our filter from $inputFileName to a PhpSpreadsheet Object $spreadsheet = $reader->load($inputFileName); - // Do some processing here + // Do some processing here $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true); var_dump($sheetData); diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/12_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_(version_2).php b/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/12_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_(version_2).php index 0a3e8f3..1f39ec4 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/12_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_(version_2).php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/12_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_(version_2).php @@ -60,7 +60,7 @@ for ($startRow = 2; $startRow <= 240; $startRow += $chunkSize) { // Load only the rows that match our filter from $inputFileName to a PhpSpreadsheet Object $spreadsheet = $reader->load($inputFileName); - // Do some processing here + // Do some processing here $sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true); var_dump($sheetData); diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/20_Reader_worksheet_hyperlink_image.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/20_Reader_worksheet_hyperlink_image.php new file mode 100644 index 0000000..0636e46 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Reader/20_Reader_worksheet_hyperlink_image.php @@ -0,0 +1,54 @@ +log('Start'); + +$spreadsheet = new Spreadsheet(); + +$aSheet = $spreadsheet->getActiveSheet(); + +$gdImage = @imagecreatetruecolor(120, 20); +$textColor = imagecolorallocate($gdImage, 255, 255, 255); +imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor); + +$baseUrl = 'https://phpspreadsheet.readthedocs.io/'; + +$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing(); +$drawing->setName('In-Memory image 1'); +$drawing->setDescription('In-Memory image 1'); +$drawing->setCoordinates('A1'); +$drawing->setImageResource($gdImage); +$drawing->setRenderingFunction( + \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG +); +$drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT); +$drawing->setHeight(36); +$helper->log('Write image'); + +$hyperLink = new \PhpOffice\PhpSpreadsheet\Cell\Hyperlink($baseUrl, 'test image'); +$drawing->setHyperlink($hyperLink); +$helper->log('Write link: ' . $baseUrl); + +$drawing->setWorksheet($aSheet); + +$filename = tempnam(\PhpOffice\PhpSpreadsheet\Shared\File::sysGetTempDir(), 'phpspreadsheet-test'); + +$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, $inputFileType); +$writer->save($filename); + +$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); + +$reloadedSpreadsheet = $reader->load($filename); +unlink($filename); + +$helper->log('reloaded Spreadsheet'); + +foreach ($reloadedSpreadsheet->getActiveSheet()->getDrawingCollection() as $pDrawing) { + $helper->log('Read link: ' . $pDrawing->getHyperlink()->getUrl()); +} + +$helper->log('end'); diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/Reading_workbook_data/Custom_properties.php b/inc/vendor/phpoffice/phpspreadsheet/samples/Reading_workbook_data/Custom_properties.php index 3c40440..1c222b5 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/samples/Reading_workbook_data/Custom_properties.php +++ b/inc/vendor/phpoffice/phpspreadsheet/samples/Reading_workbook_data/Custom_properties.php @@ -25,24 +25,24 @@ foreach ($customPropertyList as $customPropertyName) { // Manipulate properties as appropriate for display purposes switch ($propertyType) { - case 'i': // integer + case 'i': // integer $propertyType = 'integer number'; break; - case 'f': // float + case 'f': // float $propertyType = 'floating point number'; break; - case 's': // string + case 's': // string $propertyType = 'string'; break; - case 'd': // date + case 'd': // date $propertyValue = date('l, d<\s\up>S F Y g:i A', $propertyValue); $propertyType = 'date'; break; - case 'b': // boolean + case 'b': // boolean $propertyValue = ($propertyValue) ? 'TRUE' : 'FALSE'; $propertyType = 'boolean'; diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/bootstrap/js/bootstrap.min.js b/inc/vendor/phpoffice/phpspreadsheet/samples/bootstrap/js/bootstrap.min.js index e1cd129bb1f2764133bb16977b7d659675be2b4e..9bcd2fccaed9442f1460191d6670ca5e8e08520c 100644 GIT binary patch delta 33 pcmdnJkZJ2eCT4vt#fdC>6OC0TMk=vzDQM|$Y*ebL~0q3R)g#Z8m diff --git a/inc/vendor/phpoffice/phpspreadsheet/samples/bootstrap/js/jquery.min.js b/inc/vendor/phpoffice/phpspreadsheet/samples/bootstrap/js/jquery.min.js index 03b23aec9d9a1a6ddb2c85edc76133cbf199c7f4..f6a6a99e60ee9a5ce4d0922a3a82c6d81c1db7f2 100644 GIT binary patch delta 31 ncmcb-i1qv;)(MVGT#A#u8KpPIf2!FWRLfqwIqKKfromArray( ] ); -// Set the Labels for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Labels for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesLabels = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1', null, 1), // 2010 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$C$1', null, 1), // 2011 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$D$1', null, 1), // 2012 ]; -// Set the X-Axis Labels -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the X-Axis Labels +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $xAxisTickValues = [ - new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 + new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$A$2:$A$5', null, 4), // Q1 to Q4 ]; -// Set the Data values for each data series we want to plot -// Datatype -// Cell reference for data -// Format Code -// Number of datapoints in series -// Data values -// Data Marker +// Set the Data values for each data series we want to plot +// Datatype +// Cell reference for data +// Format Code +// Number of datapoints in series +// Data values +// Data Marker $dataSeriesValues = [ new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$B$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$C$2:$C$5', null, 4), new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$D$2:$D$5', null, 4), ]; -// Build the dataseries +// Build the dataseries $series = new DataSeries( DataSeries::TYPE_BARCHART, // plotType DataSeries::GROUPING_CLUSTERED, // plotGrouping @@ -64,19 +64,19 @@ $series = new DataSeries( $xAxisTickValues, // plotCategory $dataSeriesValues // plotValues ); -// Set additional dataseries parameters -// Make it a horizontal bar rather than a vertical column graph +// Set additional dataseries parameters +// Make it a horizontal bar rather than a vertical column graph $series->setPlotDirection(DataSeries::DIRECTION_BAR); -// Set the series in the plot area +// Set the series in the plot area $plotArea = new PlotArea(null, [$series]); -// Set the chart legend +// Set the chart legend $legend = new Legend(Legend::POSITION_RIGHT, null, false); $title = new Title('Test Bar Chart'); $yAxisLabel = new Title('Value ($k)'); -// Create the chart +// Create the chart $chart = new Chart( 'chart1', // name $title, // title @@ -88,11 +88,11 @@ $chart = new Chart( $yAxisLabel // yAxisLabel ); -// Set the position where the chart should appear in the worksheet +// Set the position where the chart should appear in the worksheet $chart->setTopLeftPosition('A7'); $chart->setBottomRightPosition('H20'); -// Add the chart to the worksheet +// Add the chart to the worksheet $worksheet->addChart($chart); return $spreadsheet; diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php index 2d3a28c..79b98b9 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Calculation.php @@ -224,6 +224,16 @@ class Calculation 'functionCall' => 'acosh', 'argumentCount' => '1', ], + 'ACOT' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [MathTrig::class, 'ACOT'], + 'argumentCount' => '1', + ], + 'ACOTH' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [MathTrig::class, 'ACOTH'], + 'argumentCount' => '1', + ], 'ADDRESS' => [ 'category' => Category::CATEGORY_LOOKUP_AND_REFERENCE, 'functionCall' => [LookupRef::class, 'cellAddress'], @@ -359,6 +369,31 @@ class Calculation 'functionCall' => [Statistical::class, 'BINOMDIST'], 'argumentCount' => '4', ], + 'BITAND' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'BITAND'], + 'argumentCount' => '2', + ], + 'BITOR' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'BITOR'], + 'argumentCount' => '2', + ], + 'BITXOR' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'BITOR'], + 'argumentCount' => '2', + ], + 'BITLSHIFT' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'BITLSHIFT'], + 'argumentCount' => '2', + ], + 'BITRSHIFT' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'BITRSHIFT'], + 'argumentCount' => '2', + ], 'CEILING' => [ 'category' => Category::CATEGORY_MATH_AND_TRIG, 'functionCall' => [MathTrig::class, 'CEILING'], @@ -425,6 +460,11 @@ class Calculation 'functionCall' => [Engineering::class, 'COMPLEX'], 'argumentCount' => '2,3', ], + 'CONCAT' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [TextData::class, 'CONCATENATE'], + 'argumentCount' => '1+', + ], 'CONCATENATE' => [ 'category' => Category::CATEGORY_TEXT_AND_DATA, 'functionCall' => [TextData::class, 'CONCATENATE'], @@ -455,6 +495,16 @@ class Calculation 'functionCall' => 'cosh', 'argumentCount' => '1', ], + 'COT' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [MathTrig::class, 'COT'], + 'argumentCount' => '1', + ], + 'COTH' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [MathTrig::class, 'COTH'], + 'argumentCount' => '1', + ], 'COUNT' => [ 'category' => Category::CATEGORY_STATISTICAL, 'functionCall' => [Statistical::class, 'COUNT'], @@ -520,6 +570,16 @@ class Calculation 'functionCall' => [Statistical::class, 'CRITBINOM'], 'argumentCount' => '3', ], + 'CSC' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [MathTrig::class, 'CSC'], + 'argumentCount' => '1', + ], + 'CSCH' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [MathTrig::class, 'CSCH'], + 'argumentCount' => '1', + ], 'CUBEKPIMEMBER' => [ 'category' => Category::CATEGORY_CUBE, 'functionCall' => [Functions::class, 'DUMMY'], @@ -735,11 +795,21 @@ class Calculation 'functionCall' => [Engineering::class, 'ERF'], 'argumentCount' => '1,2', ], + 'ERF.PRECISE' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'ERFPRECISE'], + 'argumentCount' => '1', + ], 'ERFC' => [ 'category' => Category::CATEGORY_ENGINEERING, 'functionCall' => [Engineering::class, 'ERFC'], 'argumentCount' => '1', ], + 'ERFC.PRECISE' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'ERFC'], + 'argumentCount' => '1', + ], 'ERROR.TYPE' => [ 'category' => Category::CATEGORY_INFORMATION, 'functionCall' => [Functions::class, 'errorType'], @@ -752,7 +822,7 @@ class Calculation ], 'EXACT' => [ 'category' => Category::CATEGORY_TEXT_AND_DATA, - 'functionCall' => [Functions::class, 'DUMMY'], + 'functionCall' => [TextData::class, 'EXACT'], 'argumentCount' => '2', ], 'EXP' => [ @@ -825,6 +895,13 @@ class Calculation 'functionCall' => [Statistical::class, 'FORECAST'], 'argumentCount' => '3', ], + 'FORMULATEXT' => [ + 'category' => Category::CATEGORY_LOOKUP_AND_REFERENCE, + 'functionCall' => [LookupRef::class, 'FORMULATEXT'], + 'argumentCount' => '1', + 'passCellReference' => true, + 'passByReference' => [true], + ], 'FREQUENCY' => [ 'category' => Category::CATEGORY_STATISTICAL, 'functionCall' => [Functions::class, 'DUMMY'], @@ -961,6 +1038,26 @@ class Calculation 'functionCall' => [Engineering::class, 'IMCOS'], 'argumentCount' => '1', ], + 'IMCOSH' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'IMCOSH'], + 'argumentCount' => '1', + ], + 'IMCOT' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'IMCOT'], + 'argumentCount' => '1', + ], + 'IMCSC' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'IMCSC'], + 'argumentCount' => '1', + ], + 'IMCSCH' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'IMCSCH'], + 'argumentCount' => '1', + ], 'IMDIV' => [ 'category' => Category::CATEGORY_ENGINEERING, 'functionCall' => [Engineering::class, 'IMDIV'], @@ -1001,11 +1098,26 @@ class Calculation 'functionCall' => [Engineering::class, 'IMREAL'], 'argumentCount' => '1', ], + 'IMSEC' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'IMSEC'], + 'argumentCount' => '1', + ], + 'IMSECH' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'IMSECH'], + 'argumentCount' => '1', + ], 'IMSIN' => [ 'category' => Category::CATEGORY_ENGINEERING, 'functionCall' => [Engineering::class, 'IMSIN'], 'argumentCount' => '1', ], + 'IMSINH' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'IMSINH'], + 'argumentCount' => '1', + ], 'IMSQRT' => [ 'category' => Category::CATEGORY_ENGINEERING, 'functionCall' => [Engineering::class, 'IMSQRT'], @@ -1021,6 +1133,11 @@ class Calculation 'functionCall' => [Engineering::class, 'IMSUM'], 'argumentCount' => '1+', ], + 'IMTAN' => [ + 'category' => Category::CATEGORY_ENGINEERING, + 'functionCall' => [Engineering::class, 'IMTAN'], + 'argumentCount' => '1', + ], 'INDEX' => [ 'category' => Category::CATEGORY_LOOKUP_AND_REFERENCE, 'functionCall' => [LookupRef::class, 'INDEX'], @@ -1114,6 +1231,11 @@ class Calculation 'functionCall' => [Functions::class, 'isOdd'], 'argumentCount' => '1', ], + 'ISOWEEKNUM' => [ + 'category' => Category::CATEGORY_DATE_AND_TIME, + 'functionCall' => [DateTime::class, 'ISOWEEKNUM'], + 'argumentCount' => '1', + ], 'ISPMT' => [ 'category' => Category::CATEGORY_FINANCIAL, 'functionCall' => [Financial::class, 'ISPMT'], @@ -1394,6 +1516,11 @@ class Calculation 'functionCall' => [Financial::class, 'NPV'], 'argumentCount' => '2+', ], + 'NUMBERVALUE' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [TextData::class, 'NUMBERVALUE'], + 'argumentCount' => '1+', + ], 'OCT2BIN' => [ 'category' => Category::CATEGORY_ENGINEERING, 'functionCall' => [Engineering::class, 'OCTTOBIN'], @@ -1446,6 +1573,11 @@ class Calculation 'functionCall' => [Logical::class, 'logicalOr'], 'argumentCount' => '1+', ], + 'PDURATION' => [ + 'category' => Category::CATEGORY_FINANCIAL, + 'functionCall' => [Financial::class, 'PDURATION'], + 'argumentCount' => '3', + ], 'PEARSON' => [ 'category' => Category::CATEGORY_STATISTICAL, 'functionCall' => [Statistical::class, 'CORREL'], @@ -1627,6 +1759,11 @@ class Calculation 'functionCall' => [LookupRef::class, 'ROWS'], 'argumentCount' => '1', ], + 'RRI' => [ + 'category' => Category::CATEGORY_FINANCIAL, + 'functionCall' => [Financial::class, 'RRI'], + 'argumentCount' => '3', + ], 'RSQ' => [ 'category' => Category::CATEGORY_STATISTICAL, 'functionCall' => [Statistical::class, 'RSQ'], @@ -1647,6 +1784,16 @@ class Calculation 'functionCall' => [TextData::class, 'SEARCHINSENSITIVE'], 'argumentCount' => '2,3', ], + 'SEC' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [MathTrig::class, 'SEC'], + 'argumentCount' => '1', + ], + 'SECH' => [ + 'category' => Category::CATEGORY_MATH_AND_TRIG, + 'functionCall' => [MathTrig::class, 'SECH'], + 'argumentCount' => '1', + ], 'SECOND' => [ 'category' => Category::CATEGORY_DATE_AND_TIME, 'functionCall' => [DateTime::class, 'SECOND'], @@ -1838,6 +1985,11 @@ class Calculation 'functionCall' => [TextData::class, 'TEXTFORMAT'], 'argumentCount' => '2', ], + 'TEXTJOIN' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [TextData::class, 'TEXTJOIN'], + 'argumentCount' => '3+', + ], 'TIME' => [ 'category' => Category::CATEGORY_DATE_AND_TIME, 'functionCall' => [DateTime::class, 'TIME'], @@ -1898,6 +2050,16 @@ class Calculation 'functionCall' => [Functions::class, 'TYPE'], 'argumentCount' => '1', ], + 'UNICHAR' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [TextData::class, 'CHARACTER'], + 'argumentCount' => '1', + ], + 'UNICODE' => [ + 'category' => Category::CATEGORY_TEXT_AND_DATA, + 'functionCall' => [TextData::class, 'ASCIICODE'], + 'argumentCount' => '1', + ], 'UPPER' => [ 'category' => Category::CATEGORY_TEXT_AND_DATA, 'functionCall' => [TextData::class, 'UPPERCASE'], @@ -1918,6 +2080,16 @@ class Calculation 'functionCall' => [Statistical::class, 'VARFunc'], 'argumentCount' => '1+', ], + 'VAR.P' => [ + 'category' => Category::CATEGORY_STATISTICAL, + 'functionCall' => [Statistical::class, 'VARP'], + 'argumentCount' => '1+', + ], + 'VAR.S' => [ + 'category' => Category::CATEGORY_STATISTICAL, + 'functionCall' => [Statistical::class, 'VARFunc'], + 'argumentCount' => '1+', + ], 'VARA' => [ 'category' => Category::CATEGORY_STATISTICAL, 'functionCall' => [Statistical::class, 'VARA'], @@ -1973,6 +2145,11 @@ class Calculation 'functionCall' => [Financial::class, 'XNPV'], 'argumentCount' => '3', ], + 'XOR' => [ + 'category' => Category::CATEGORY_LOGICAL, + 'functionCall' => [Logical::class, 'logicalXor'], + 'argumentCount' => '1+', + ], 'YEAR' => [ 'category' => Category::CATEGORY_DATE_AND_TIME, 'functionCall' => [DateTime::class, 'YEAR'], @@ -2395,10 +2572,10 @@ class Calculation if (self::$functionReplaceToLocale === null) { self::$functionReplaceToLocale = []; - foreach (array_values(self::$localeFunctions) as $localeFunctionName) { + foreach (self::$localeFunctions as $localeFunctionName) { self::$functionReplaceToLocale[] = '$1' . trim($localeFunctionName) . '$2'; } - foreach (array_values(self::$localeBoolean) as $localeBoolean) { + foreach (self::$localeBoolean as $localeBoolean) { self::$functionReplaceToLocale[] = '$1' . trim($localeBoolean) . '$2'; } } @@ -2414,10 +2591,10 @@ class Calculation { if (self::$functionReplaceFromLocale === null) { self::$functionReplaceFromLocale = []; - foreach (array_values(self::$localeFunctions) as $localeFunctionName) { + foreach (self::$localeFunctions as $localeFunctionName) { self::$functionReplaceFromLocale[] = '/(@?[^\w\.])' . preg_quote($localeFunctionName, '/') . '([\s]*\()/Ui'; } - foreach (array_values(self::$localeBoolean) as $excelBoolean) { + foreach (self::$localeBoolean as $excelBoolean) { self::$functionReplaceFromLocale[] = '/(@?[^\w\.])' . preg_quote($excelBoolean, '/') . '([^\w\.])/Ui'; } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTime.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTime.php index 0bd131c..a07a28d 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTime.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/DateTime.php @@ -10,7 +10,7 @@ class DateTime /** * Identify if a year is a leap year or not. * - * @param int $year The year to test + * @param int|string $year The year to test * * @return bool TRUE if the year is a leap year, otherwise FALSE */ @@ -70,7 +70,7 @@ class DateTime (Functions::getCompatibilityMode() == Functions::COMPATIBILITY_GNUMERIC)) { return Functions::VALUE(); } - if ((is_object($dateValue)) && ($dateValue instanceof \DateTime)) { + if ((is_object($dateValue)) && ($dateValue instanceof \DateTimeImmutable)) { $dateValue = Date::PHPToExcel($dateValue); } else { $saveReturnDateType = Functions::getReturnDateType(); @@ -650,7 +650,7 @@ class DateTime * or a standard date string * @param string $unit * - * @return int Interval between the dates + * @return int|string Interval between the dates */ public static function DATEDIF($startDate = 0, $endDate = 0, $unit = 'D') { @@ -792,7 +792,7 @@ class DateTime * occur on the 31st of a month become equal to the 30th of the * same month. * - * @return int Number of days between start date and end date + * @return int|string Number of days between start date and end date */ public static function DAYS360($startDate = 0, $endDate = 0, $method = false) { @@ -942,7 +942,7 @@ class DateTime * @param mixed $endDate Excel date serial value (float), PHP date timestamp (integer), * PHP DateTime object, or a standard date string * - * @return int Interval between the dates + * @return int|string Interval between the dates */ public static function NETWORKDAYS($startDate, $endDate, ...$dateArgs) { @@ -1127,7 +1127,7 @@ class DateTime * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), * PHP DateTime object, or a standard date string * - * @return int Day of the month + * @return int|string Day of the month */ public static function DAYOFMONTH($dateValue = 1) { @@ -1169,7 +1169,7 @@ class DateTime * 2 Numbers 1 (Monday) through 7 (Sunday). * 3 Numbers 0 (Monday) through 6 (Sunday). * - * @return int Day of the week value + * @return int|string Day of the week value */ public static function WEEKDAY($dateValue = 1, $style = 1) { @@ -1248,7 +1248,7 @@ class DateTime * 1 or omitted Week begins on Sunday. * 2 Week begins on Monday. * - * @return int Week Number + * @return int|string Week Number */ public static function WEEKNUM($dateValue = 1, $method = 1) { @@ -1286,6 +1286,37 @@ class DateTime return (int) $weekOfYear; } + /** + * ISOWEEKNUM. + * + * Returns the ISO 8601 week number of the year for a specified date. + * + * Excel Function: + * ISOWEEKNUM(dateValue) + * + * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), + * PHP DateTime object, or a standard date string + * + * @return int|string Week Number + */ + public static function ISOWEEKNUM($dateValue = 1) + { + $dateValue = Functions::flattenSingleValue($dateValue); + + if ($dateValue === null) { + $dateValue = 1; + } elseif (is_string($dateValue = self::getDateValue($dateValue))) { + return Functions::VALUE(); + } elseif ($dateValue < 0.0) { + return Functions::NAN(); + } + + // Execute function + $PHPDateObject = Date::excelToDateTimeObject($dateValue); + + return (int) $PHPDateObject->format('W'); + } + /** * MONTHOFYEAR. * @@ -1298,7 +1329,7 @@ class DateTime * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), * PHP DateTime object, or a standard date string * - * @return int Month of the year + * @return int|string Month of the year */ public static function MONTHOFYEAR($dateValue = 1) { @@ -1331,7 +1362,7 @@ class DateTime * @param mixed $dateValue Excel date serial value (float), PHP date timestamp (integer), * PHP DateTime object, or a standard date string * - * @return int Year + * @return int|string Year */ public static function YEAR($dateValue = 1) { @@ -1363,7 +1394,7 @@ class DateTime * @param mixed $timeValue Excel date serial value (float), PHP date timestamp (integer), * PHP DateTime object, or a standard time string * - * @return int Hour + * @return int|string Hour */ public static function HOUROFDAY($timeValue = 0) { @@ -1404,7 +1435,7 @@ class DateTime * @param mixed $timeValue Excel date serial value (float), PHP date timestamp (integer), * PHP DateTime object, or a standard time string * - * @return int Minute + * @return int|string Minute */ public static function MINUTE($timeValue = 0) { @@ -1445,7 +1476,7 @@ class DateTime * @param mixed $timeValue Excel date serial value (float), PHP date timestamp (integer), * PHP DateTime object, or a standard time string * - * @return int Second + * @return int|string Second */ public static function SECOND($timeValue = 0) { diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering.php index 2be5c50..3f1b48b 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engineering.php @@ -2,6 +2,9 @@ namespace PhpOffice\PhpSpreadsheet\Calculation; +use Complex\Complex; +use Complex\Exception as ComplexException; + class Engineering { /** @@ -718,83 +721,23 @@ class Engineering * * Parses a complex number into its real and imaginary parts, and an I or J suffix * + * @deprecated 2.0.0 No longer used by internal code. Please use the Complex\Complex class instead + * * @param string $complexNumber The complex number * - * @return string[] Indexed on "real", "imaginary" and "suffix" + * @return mixed[] Indexed on "real", "imaginary" and "suffix" */ public static function parseComplex($complexNumber) { - $workString = (string) $complexNumber; - - $realNumber = $imaginary = 0; - // Extract the suffix, if there is one - $suffix = substr($workString, -1); - if (!is_numeric($suffix)) { - $workString = substr($workString, 0, -1); - } else { - $suffix = ''; - } - - // Split the input into its Real and Imaginary components - $leadingSign = 0; - if (strlen($workString) > 0) { - $leadingSign = (($workString[0] == '+') || ($workString[0] == '-')) ? 1 : 0; - } - $power = ''; - $realNumber = strtok($workString, '+-'); - if (strtoupper(substr($realNumber, -1)) == 'E') { - $power = strtok('+-'); - ++$leadingSign; - } - - $realNumber = substr($workString, 0, strlen($realNumber) + strlen($power) + $leadingSign); - - if ($suffix != '') { - $imaginary = substr($workString, strlen($realNumber)); - - if (($imaginary == '') && (($realNumber == '') || ($realNumber == '+') || ($realNumber == '-'))) { - $imaginary = $realNumber . '1'; - $realNumber = '0'; - } elseif ($imaginary == '') { - $imaginary = $realNumber; - $realNumber = '0'; - } elseif (($imaginary == '+') || ($imaginary == '-')) { - $imaginary .= '1'; - } - } + $complex = new Complex($complexNumber); return [ - 'real' => $realNumber, - 'imaginary' => $imaginary, - 'suffix' => $suffix, + 'real' => $complex->getReal(), + 'imaginary' => $complex->getImaginary(), + 'suffix' => $complex->getSuffix(), ]; } - /** - * Cleans the leading characters in a complex number string. - * - * @param string $complexNumber The complex number to clean - * - * @return string The "cleaned" complex number - */ - private static function cleanComplex($complexNumber) - { - if ($complexNumber[0] == '+') { - $complexNumber = substr($complexNumber, 1); - } - if ($complexNumber[0] == '0') { - $complexNumber = substr($complexNumber, 1); - } - if ($complexNumber[0] == '.') { - $complexNumber = '0' . $complexNumber; - } - if ($complexNumber[0] == '+') { - $complexNumber = substr($complexNumber, 1); - } - - return $complexNumber; - } - /** * Formats a number base string value with leading zeroes. * @@ -1745,10 +1688,10 @@ class Engineering /** * COMPLEX. * - * Converts real and imaginary coefficients into a complex number of the form x + yi or x + yj. + * Converts real and imaginary coefficients into a complex number of the form x +/- yi or x +/- yj. * * Excel Function: - * COMPLEX(realNumber,imaginary[,places]) + * COMPLEX(realNumber,imaginary[,suffix]) * * @category Engineering Functions * @@ -1768,34 +1711,9 @@ class Engineering if (((is_numeric($realNumber)) && (is_numeric($imaginary))) && (($suffix == 'i') || ($suffix == 'j') || ($suffix == '')) ) { - $realNumber = (float) $realNumber; - $imaginary = (float) $imaginary; + $complex = new Complex($realNumber, $imaginary, $suffix); - if ($suffix == '') { - $suffix = 'i'; - } - if ($realNumber == 0.0) { - if ($imaginary == 0.0) { - return (string) '0'; - } elseif ($imaginary == 1.0) { - return (string) $suffix; - } elseif ($imaginary == -1.0) { - return (string) '-' . $suffix; - } - - return (string) $imaginary . $suffix; - } elseif ($imaginary == 0.0) { - return (string) $realNumber; - } elseif ($imaginary == 1.0) { - return (string) $realNumber . '+' . $suffix; - } elseif ($imaginary == -1.0) { - return (string) $realNumber . '-' . $suffix; - } - if ($imaginary > 0) { - $imaginary = (string) '+' . $imaginary; - } - - return (string) $realNumber . $imaginary . $suffix; + return (string) $complex; } return Functions::VALUE(); @@ -1820,9 +1738,7 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - - return $parsedComplex['imaginary']; + return (new Complex($complexNumber))->getImaginary(); } /** @@ -1843,9 +1759,7 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - - return $parsedComplex['real']; + return (new Complex($complexNumber))->getReal(); } /** @@ -1864,12 +1778,7 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - - return sqrt( - ($parsedComplex['real'] * $parsedComplex['real']) + - ($parsedComplex['imaginary'] * $parsedComplex['imaginary']) - ); + return (new Complex($complexNumber))->abs(); } /** @@ -1883,27 +1792,18 @@ class Engineering * * @param string $complexNumber the complex number for which you want the argument theta * - * @return float + * @return float|string */ public static function IMARGUMENT($complexNumber) { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - if ($parsedComplex['real'] == 0.0) { - if ($parsedComplex['imaginary'] == 0.0) { - return Functions::DIV0(); - } elseif ($parsedComplex['imaginary'] < 0.0) { - return M_PI / -2; - } - return M_PI / 2; - } elseif ($parsedComplex['real'] > 0.0) { - return atan($parsedComplex['imaginary'] / $parsedComplex['real']); - } elseif ($parsedComplex['imaginary'] < 0.0) { - return 0 - (M_PI - atan(abs($parsedComplex['imaginary']) / abs($parsedComplex['real']))); + $complex = new Complex($complexNumber); + if ($complex->getReal() == 0.0 && $complex->getImaginary() == 0.0) { + return Functions::DIV0(); } - return M_PI - atan($parsedComplex['imaginary'] / abs($parsedComplex['real'])); + return $complex->argument(); } /** @@ -1922,19 +1822,7 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - - if ($parsedComplex['imaginary'] == 0.0) { - return $parsedComplex['real']; - } - - return self::cleanComplex( - self::COMPLEX( - $parsedComplex['real'], - 0 - $parsedComplex['imaginary'], - $parsedComplex['suffix'] - ) - ); + return (string) (new Complex($complexNumber))->conjugate(); } /** @@ -1953,19 +1841,83 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); + return (string) (new Complex($complexNumber))->cos(); + } - if ($parsedComplex['imaginary'] == 0.0) { - return cos($parsedComplex['real']); - } + /** + * IMCOSH. + * + * Returns the hyperbolic cosine of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMCOSH(complexNumber) + * + * @param string $complexNumber the complex number for which you want the hyperbolic cosine + * + * @return float|string + */ + public static function IMCOSH($complexNumber) + { + $complexNumber = Functions::flattenSingleValue($complexNumber); - return self::IMCONJUGATE( - self::COMPLEX( - cos($parsedComplex['real']) * cosh($parsedComplex['imaginary']), - sin($parsedComplex['real']) * sinh($parsedComplex['imaginary']), - $parsedComplex['suffix'] - ) - ); + return (string) (new Complex($complexNumber))->cosh(); + } + + /** + * IMCOT. + * + * Returns the cotangent of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMCOT(complexNumber) + * + * @param string $complexNumber the complex number for which you want the cotangent + * + * @return float|string + */ + public static function IMCOT($complexNumber) + { + $complexNumber = Functions::flattenSingleValue($complexNumber); + + return (string) (new Complex($complexNumber))->cot(); + } + + /** + * IMCSC. + * + * Returns the cosecant of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMCSC(complexNumber) + * + * @param string $complexNumber the complex number for which you want the cosecant + * + * @return float|string + */ + public static function IMCSC($complexNumber) + { + $complexNumber = Functions::flattenSingleValue($complexNumber); + + return (string) (new Complex($complexNumber))->csc(); + } + + /** + * IMCSCH. + * + * Returns the hyperbolic cosecant of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMCSCH(complexNumber) + * + * @param string $complexNumber the complex number for which you want the hyperbolic cosecant + * + * @return float|string + */ + public static function IMCSCH($complexNumber) + { + $complexNumber = Functions::flattenSingleValue($complexNumber); + + return (string) (new Complex($complexNumber))->csch(); } /** @@ -1984,17 +1936,83 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); + return (string) (new Complex($complexNumber))->sin(); + } - if ($parsedComplex['imaginary'] == 0.0) { - return sin($parsedComplex['real']); - } + /** + * IMSINH. + * + * Returns the hyperbolic sine of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMSINH(complexNumber) + * + * @param string $complexNumber the complex number for which you want the hyperbolic sine + * + * @return float|string + */ + public static function IMSINH($complexNumber) + { + $complexNumber = Functions::flattenSingleValue($complexNumber); - return self::COMPLEX( - sin($parsedComplex['real']) * cosh($parsedComplex['imaginary']), - cos($parsedComplex['real']) * sinh($parsedComplex['imaginary']), - $parsedComplex['suffix'] - ); + return (string) (new Complex($complexNumber))->sinh(); + } + + /** + * IMSEC. + * + * Returns the secant of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMSEC(complexNumber) + * + * @param string $complexNumber the complex number for which you want the secant + * + * @return float|string + */ + public static function IMSEC($complexNumber) + { + $complexNumber = Functions::flattenSingleValue($complexNumber); + + return (string) (new Complex($complexNumber))->sec(); + } + + /** + * IMSECH. + * + * Returns the hyperbolic secant of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMSECH(complexNumber) + * + * @param string $complexNumber the complex number for which you want the hyperbolic secant + * + * @return float|string + */ + public static function IMSECH($complexNumber) + { + $complexNumber = Functions::flattenSingleValue($complexNumber); + + return (string) (new Complex($complexNumber))->sech(); + } + + /** + * IMTAN. + * + * Returns the tangent of a complex number in x + yi or x + yj text format. + * + * Excel Function: + * IMTAN(complexNumber) + * + * @param string $complexNumber the complex number for which you want the tangent + * + * @return float|string + */ + public static function IMTAN($complexNumber) + { + $complexNumber = Functions::flattenSingleValue($complexNumber); + + return (string) (new Complex($complexNumber))->tan(); } /** @@ -2013,22 +2031,12 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - $theta = self::IMARGUMENT($complexNumber); if ($theta === Functions::DIV0()) { return '0'; } - $d1 = cos($theta / 2); - $d2 = sin($theta / 2); - $r = sqrt(sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary']))); - - if ($parsedComplex['suffix'] == '') { - return self::COMPLEX($d1 * $r, $d2 * $r); - } - - return self::COMPLEX($d1 * $r, $d2 * $r, $parsedComplex['suffix']); + return (string) (new Complex($complexNumber))->sqrt(); } /** @@ -2047,20 +2055,12 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - - if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + $complex = new Complex($complexNumber); + if ($complex->getReal() == 0.0 && $complex->getImaginary() == 0.0) { return Functions::NAN(); } - $logR = log(sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary']))); - $t = self::IMARGUMENT($complexNumber); - - if ($parsedComplex['suffix'] == '') { - return self::COMPLEX($logR, $t); - } - - return self::COMPLEX($logR, $t, $parsedComplex['suffix']); + return (string) (new Complex($complexNumber))->ln(); } /** @@ -2079,15 +2079,12 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - - if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + $complex = new Complex($complexNumber); + if ($complex->getReal() == 0.0 && $complex->getImaginary() == 0.0) { return Functions::NAN(); - } elseif (($parsedComplex['real'] > 0.0) && ($parsedComplex['imaginary'] == 0.0)) { - return log10($parsedComplex['real']); } - return self::IMPRODUCT(log10(self::EULER), self::IMLN($complexNumber)); + return (string) (new Complex($complexNumber))->log10(); } /** @@ -2106,15 +2103,12 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - - if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) { + $complex = new Complex($complexNumber); + if ($complex->getReal() == 0.0 && $complex->getImaginary() == 0.0) { return Functions::NAN(); - } elseif (($parsedComplex['real'] > 0.0) && ($parsedComplex['imaginary'] == 0.0)) { - return log($parsedComplex['real'], 2); } - return self::IMPRODUCT(log(self::EULER, 2), self::IMLN($complexNumber)); + return (string) (new Complex($complexNumber))->log2(); } /** @@ -2133,21 +2127,7 @@ class Engineering { $complexNumber = Functions::flattenSingleValue($complexNumber); - $parsedComplex = self::parseComplex($complexNumber); - - if (($parsedComplex['real'] == 0.0) && ($parsedComplex['imaginary'] == 0.0)) { - return '1'; - } - - $e = exp($parsedComplex['real']); - $eX = $e * cos($parsedComplex['imaginary']); - $eY = $e * sin($parsedComplex['imaginary']); - - if ($parsedComplex['suffix'] == '') { - return self::COMPLEX($eX, $eY); - } - - return self::COMPLEX($eX, $eY, $parsedComplex['suffix']); + return (string) (new Complex($complexNumber))->exp(); } /** @@ -2172,18 +2152,7 @@ class Engineering return Functions::VALUE(); } - $parsedComplex = self::parseComplex($complexNumber); - - $r = sqrt(($parsedComplex['real'] * $parsedComplex['real']) + ($parsedComplex['imaginary'] * $parsedComplex['imaginary'])); - $rPower = pow($r, $realNumber); - $theta = self::IMARGUMENT($complexNumber) * $realNumber; - if ($theta == 0) { - return 1; - } elseif ($parsedComplex['imaginary'] == 0.0) { - return self::COMPLEX($rPower * cos($theta), $rPower * sin($theta), $parsedComplex['suffix']); - } - - return self::COMPLEX($rPower * cos($theta), $rPower * sin($theta), $parsedComplex['suffix']); + return (string) (new Complex($complexNumber))->pow($realNumber); } /** @@ -2204,32 +2173,11 @@ class Engineering $complexDividend = Functions::flattenSingleValue($complexDividend); $complexDivisor = Functions::flattenSingleValue($complexDivisor); - $parsedComplexDividend = self::parseComplex($complexDividend); - $parsedComplexDivisor = self::parseComplex($complexDivisor); - - if (($parsedComplexDividend['suffix'] != '') && ($parsedComplexDivisor['suffix'] != '') && - ($parsedComplexDividend['suffix'] != $parsedComplexDivisor['suffix']) - ) { + try { + return (string) (new Complex($complexDividend))->divideby(new Complex($complexDivisor)); + } catch (ComplexException $e) { return Functions::NAN(); } - if (($parsedComplexDividend['suffix'] != '') && ($parsedComplexDivisor['suffix'] == '')) { - $parsedComplexDivisor['suffix'] = $parsedComplexDividend['suffix']; - } - - $d1 = ($parsedComplexDividend['real'] * $parsedComplexDivisor['real']) + ($parsedComplexDividend['imaginary'] * $parsedComplexDivisor['imaginary']); - $d2 = ($parsedComplexDividend['imaginary'] * $parsedComplexDivisor['real']) - ($parsedComplexDividend['real'] * $parsedComplexDivisor['imaginary']); - $d3 = ($parsedComplexDivisor['real'] * $parsedComplexDivisor['real']) + ($parsedComplexDivisor['imaginary'] * $parsedComplexDivisor['imaginary']); - - $r = $d1 / $d3; - $i = $d2 / $d3; - - if ($i > 0.0) { - return self::cleanComplex($r . '+' . $i . $parsedComplexDivisor['suffix']); - } elseif ($i < 0.0) { - return self::cleanComplex($r . $i . $parsedComplexDivisor['suffix']); - } - - return $r; } /** @@ -2250,21 +2198,11 @@ class Engineering $complexNumber1 = Functions::flattenSingleValue($complexNumber1); $complexNumber2 = Functions::flattenSingleValue($complexNumber2); - $parsedComplex1 = self::parseComplex($complexNumber1); - $parsedComplex2 = self::parseComplex($complexNumber2); - - if ((($parsedComplex1['suffix'] != '') && ($parsedComplex2['suffix'] != '')) && - ($parsedComplex1['suffix'] != $parsedComplex2['suffix']) - ) { + try { + return (string) (new Complex($complexNumber1))->subtract(new Complex($complexNumber2)); + } catch (ComplexException $e) { return Functions::NAN(); - } elseif (($parsedComplex1['suffix'] == '') && ($parsedComplex2['suffix'] != '')) { - $parsedComplex1['suffix'] = $parsedComplex2['suffix']; } - - $d1 = $parsedComplex1['real'] - $parsedComplex2['real']; - $d2 = $parsedComplex1['imaginary'] - $parsedComplex2['imaginary']; - - return self::COMPLEX($d1, $d2, $parsedComplex1['suffix']); } /** @@ -2282,29 +2220,19 @@ class Engineering public static function IMSUM(...$complexNumbers) { // Return value - $returnValue = self::parseComplex('0'); - $activeSuffix = ''; - - // Loop through the arguments + $returnValue = new Complex(0.0); $aArgs = Functions::flattenArray($complexNumbers); - foreach ($aArgs as $arg) { - $parsedComplex = self::parseComplex($arg); - if ($activeSuffix == '') { - $activeSuffix = $parsedComplex['suffix']; - } elseif (($parsedComplex['suffix'] != '') && ($activeSuffix != $parsedComplex['suffix'])) { - return Functions::NAN(); + try { + // Loop through the arguments + foreach ($aArgs as $complex) { + $returnValue = $returnValue->add(new Complex($complex)); } - - $returnValue['real'] += $parsedComplex['real']; - $returnValue['imaginary'] += $parsedComplex['imaginary']; + } catch (ComplexException $e) { + return Functions::NAN(); } - if ($returnValue['imaginary'] == 0.0) { - $activeSuffix = ''; - } - - return self::COMPLEX($returnValue['real'], $returnValue['imaginary'], $activeSuffix); + return (string) $returnValue; } /** @@ -2322,29 +2250,19 @@ class Engineering public static function IMPRODUCT(...$complexNumbers) { // Return value - $returnValue = self::parseComplex('1'); - $activeSuffix = ''; - - // Loop through the arguments + $returnValue = new Complex(1.0); $aArgs = Functions::flattenArray($complexNumbers); - foreach ($aArgs as $arg) { - $parsedComplex = self::parseComplex($arg); - $workValue = $returnValue; - if (($parsedComplex['suffix'] != '') && ($activeSuffix == '')) { - $activeSuffix = $parsedComplex['suffix']; - } elseif (($parsedComplex['suffix'] != '') && ($activeSuffix != $parsedComplex['suffix'])) { - return Functions::NAN(); + try { + // Loop through the arguments + foreach ($aArgs as $complex) { + $returnValue = $returnValue->multiply(new Complex($complex)); } - $returnValue['real'] = ($workValue['real'] * $parsedComplex['real']) - ($workValue['imaginary'] * $parsedComplex['imaginary']); - $returnValue['imaginary'] = ($workValue['real'] * $parsedComplex['imaginary']) + ($workValue['imaginary'] * $parsedComplex['real']); + } catch (ComplexException $e) { + return Functions::NAN(); } - if ($returnValue['imaginary'] == 0.0) { - $activeSuffix = ''; - } - - return self::COMPLEX($returnValue['real'], $returnValue['imaginary'], $activeSuffix); + return (string) $returnValue; } /** @@ -2423,6 +2341,179 @@ class Engineering return self::$twoSqrtPi * $sum; } + /** + * Validate arguments passed to the bitwise functions. + * + * @param mixed $value + * + * @throws Exception + * + * @return int + */ + private static function validateBitwiseArgument($value) + { + $value = Functions::flattenSingleValue($value); + + if (is_int($value)) { + return $value; + } elseif (is_numeric($value)) { + if ($value == (int) ($value)) { + $value = (int) ($value); + if (($value > pow(2, 48) - 1) || ($value < 0)) { + throw new Exception(Functions::NAN()); + } + + return $value; + } + + throw new Exception(Functions::NAN()); + } + + throw new Exception(Functions::VALUE()); + } + + /** + * BITAND. + * + * Returns the bitwise AND of two integer values. + * + * Excel Function: + * BITAND(number1, number2) + * + * @category Engineering Functions + * + * @param int $number1 + * @param int $number2 + * + * @return int|string + */ + public static function BITAND($number1, $number2) + { + try { + $number1 = self::validateBitwiseArgument($number1); + $number2 = self::validateBitwiseArgument($number2); + } catch (Exception $e) { + return $e->getMessage(); + } + + return $number1 & $number2; + } + + /** + * BITOR. + * + * Returns the bitwise OR of two integer values. + * + * Excel Function: + * BITOR(number1, number2) + * + * @category Engineering Functions + * + * @param int $number1 + * @param int $number2 + * + * @return int|string + */ + public static function BITOR($number1, $number2) + { + try { + $number1 = self::validateBitwiseArgument($number1); + $number2 = self::validateBitwiseArgument($number2); + } catch (Exception $e) { + return $e->getMessage(); + } + + return $number1 | $number2; + } + + /** + * BITXOR. + * + * Returns the bitwise XOR of two integer values. + * + * Excel Function: + * BITXOR(number1, number2) + * + * @category Engineering Functions + * + * @param int $number1 + * @param int $number2 + * + * @return int|string + */ + public static function BITXOR($number1, $number2) + { + try { + $number1 = self::validateBitwiseArgument($number1); + $number2 = self::validateBitwiseArgument($number2); + } catch (Exception $e) { + return $e->getMessage(); + } + + return $number1 ^ $number2; + } + + /** + * BITLSHIFT. + * + * Returns the number value shifted left by shift_amount bits. + * + * Excel Function: + * BITLSHIFT(number, shift_amount) + * + * @category Engineering Functions + * + * @param int $number + * @param int $shiftAmount + * + * @return int|string + */ + public static function BITLSHIFT($number, $shiftAmount) + { + try { + $number = self::validateBitwiseArgument($number); + } catch (Exception $e) { + return $e->getMessage(); + } + + $shiftAmount = Functions::flattenSingleValue($shiftAmount); + + $result = $number << $shiftAmount; + if ($result > pow(2, 48) - 1) { + return Functions::NAN(); + } + + return $result; + } + + /** + * BITRSHIFT. + * + * Returns the number value shifted right by shift_amount bits. + * + * Excel Function: + * BITRSHIFT(number, shift_amount) + * + * @category Engineering Functions + * + * @param int $number + * @param int $shiftAmount + * + * @return int|string + */ + public static function BITRSHIFT($number, $shiftAmount) + { + try { + $number = self::validateBitwiseArgument($number); + } catch (Exception $e) { + return $e->getMessage(); + } + + $shiftAmount = Functions::flattenSingleValue($shiftAmount); + + return $number >> $shiftAmount; + } + /** * ERF. * @@ -2431,7 +2522,7 @@ class Engineering * Note: In Excel 2007 or earlier, if you input a negative value for the upper or lower bound arguments, * the function would return a #NUM! error. However, in Excel 2010, the function algorithm was * improved, so that it can now calculate the function for both positive and negative ranges. - * PhpSpreadsheet follows Excel 2010 behaviour, and accepts nagative arguments. + * PhpSpreadsheet follows Excel 2010 behaviour, and accepts negative arguments. * * Excel Function: * ERF(lower[,upper]) @@ -2440,7 +2531,7 @@ class Engineering * @param float $upper upper bound for integrating ERF. * If omitted, ERF integrates between zero and lower_limit * - * @return float + * @return float|string */ public static function ERF($lower, $upper = null) { @@ -2459,6 +2550,25 @@ class Engineering return Functions::VALUE(); } + /** + * ERFPRECISE. + * + * Returns the error function integrated between the lower and upper bound arguments. + * + * Excel Function: + * ERF.PRECISE(limit) + * + * @param float $limit bound for integrating ERF + * + * @return float|string + */ + public static function ERFPRECISE($limit) + { + $limit = Functions::flattenSingleValue($limit); + + return self::ERF($limit); + } + // // Private method to calculate the erfc value // @@ -2507,7 +2617,7 @@ class Engineering * * @param float $x The lower bound for integrating ERFC * - * @return float + * @return float|string */ public static function ERFC($x) { diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial.php index 24cdfb0..3cb6d40 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Financial.php @@ -6,7 +6,7 @@ use PhpOffice\PhpSpreadsheet\Shared\Date; class Financial { - const FINANCIAL_MAX_ITERATIONS = 128; + const FINANCIAL_MAX_ITERATIONS = 32; const FINANCIAL_PRECISION = 1.0e-08; @@ -63,8 +63,8 @@ class Financial * * Returns the number of days in a specified year, as defined by the "basis" value * - * @param int $year The year against which we're testing - * @param int $basis The type of day count: + * @param int|string $year The year against which we're testing + * @param int|string $basis The type of day count: * 0 or omitted US (NASD) 360 * 1 Actual (365 or 366 in a leap year) * 2 360 @@ -144,7 +144,7 @@ class Financial * 3 Actual/365 * 4 European 30/360 * - * @return float + * @return float|string */ public static function ACCRINT($issue, $firstinterest, $settlement, $rate, $par = 1000, $frequency = 1, $basis = 0) { @@ -197,7 +197,7 @@ class Financial * 3 Actual/365 * 4 European 30/360 * - * @return float + * @return float|string */ public static function ACCRINTM($issue, $settlement, $rate, $par = 1000, $basis = 0) { @@ -401,7 +401,7 @@ class Financial * 3 Actual/365 * 4 European 30/360 * - * @return float + * @return float|string */ public static function COUPDAYBS($settlement, $maturity, $frequency, $basis = 0) { @@ -460,7 +460,7 @@ class Financial * 3 Actual/365 * 4 European 30/360 * - * @return float + * @return float|string */ public static function COUPDAYS($settlement, $maturity, $frequency, $basis = 0) { @@ -489,7 +489,7 @@ class Financial case 1: // Actual/actual if ($frequency == 1) { - $daysPerYear = self::daysPerYear(DateTime::YEAR($maturity), $basis); + $daysPerYear = self::daysPerYear(DateTime::YEAR($settlement), $basis); return $daysPerYear / $frequency; } @@ -534,7 +534,7 @@ class Financial * 3 Actual/365 * 4 European 30/360 * - * @return float + * @return float|string */ public static function COUPDAYSNC($settlement, $maturity, $frequency, $basis = 0) { @@ -651,7 +651,7 @@ class Financial * 3 Actual/365 * 4 European 30/360 * - * @return int + * @return int|string */ public static function COUPNUM($settlement, $maturity, $frequency, $basis = 0) { @@ -769,7 +769,7 @@ class Financial * 0 or omitted At the end of the period. * 1 At the beginning of the period. * - * @return float + * @return float|string */ public static function CUMIPMT($rate, $nper, $pv, $start, $end, $type = 0) { @@ -817,7 +817,7 @@ class Financial * 0 or omitted At the end of the period. * 1 At the beginning of the period. * - * @return float + * @return float|string */ public static function CUMPRINC($rate, $nper, $pv, $start, $end, $type = 0) { @@ -870,7 +870,7 @@ class Financial * @param int $month Number of months in the first year. If month is omitted, * it defaults to 12. * - * @return float + * @return float|string */ public static function DB($cost, $salvage, $life, $period, $month = 12) { @@ -940,7 +940,7 @@ class Financial * If factor is omitted, it is assumed to be 2 (the * double-declining balance method). * - * @return float + * @return float|string */ public static function DDB($cost, $salvage, $life, $period, $factor = 2.0) { @@ -1004,7 +1004,7 @@ class Financial * 3 Actual/365 * 4 European 30/360 * - * @return float + * @return float|string */ public static function DISC($settlement, $maturity, $price, $redemption, $basis = 0) { @@ -1049,7 +1049,7 @@ class Financial * @param float $fractional_dollar Fractional Dollar * @param int $fraction Fraction * - * @return float + * @return float|string */ public static function DOLLARDE($fractional_dollar = null, $fraction = 0) { @@ -1087,7 +1087,7 @@ class Financial * @param float $decimal_dollar Decimal Dollar * @param int $fraction Fraction * - * @return float + * @return float|string */ public static function DOLLARFR($decimal_dollar = null, $fraction = 0) { @@ -1124,7 +1124,7 @@ class Financial * @param float $nominal_rate Nominal interest rate * @param int $npery Number of compounding payments per year * - * @return float + * @return float|string */ public static function EFFECT($nominal_rate = 0, $npery = 0) { @@ -1160,7 +1160,7 @@ class Financial * 0 or omitted At the end of the period. * 1 At the beginning of the period. * - * @return float + * @return float|string */ public static function FV($rate = 0, $nper = 0, $pmt = 0, $pv = 0, $type = 0) { @@ -1230,7 +1230,7 @@ class Financial * 3 Actual/365 * 4 European 30/360 * - * @return float + * @return float|string */ public static function INTRATE($settlement, $maturity, $investment, $redemption, $basis = 0) { @@ -1275,7 +1275,7 @@ class Financial * @param float $fv Future Value * @param int $type Payment type: 0 = at the end of each period, 1 = at the beginning of each period * - * @return float + * @return float|string */ public static function IPMT($rate, $per, $nper, $pv, $fv = 0, $type = 0) { @@ -1318,7 +1318,7 @@ class Financial * calculate the internal rate of return. * @param float $guess A number that you guess is close to the result of IRR * - * @return float + * @return float|string */ public static function IRR($values, $guess = 0.1) { @@ -1428,7 +1428,7 @@ class Financial * @param float $finance_rate The interest rate you pay on the money used in the cash flows * @param float $reinvestment_rate The interest rate you receive on the cash flows as you reinvest them * - * @return float + * @return float|string */ public static function MIRR($values, $finance_rate, $reinvestment_rate) { @@ -1470,7 +1470,7 @@ class Financial * @param float $effect_rate Effective interest rate * @param int $npery Number of compounding payments per year * - * @return float + * @return float|string */ public static function NOMINAL($effect_rate = 0, $npery = 0) { @@ -1497,7 +1497,7 @@ class Financial * @param float $fv Future Value * @param int $type Payment type: 0 = at the end of each period, 1 = at the beginning of each period * - * @return float + * @return float|string */ public static function NPER($rate = 0, $pmt = 0, $pv = 0, $fv = 0, $type = 0) { @@ -1556,6 +1556,33 @@ class Financial return $returnValue; } + /** + * PDURATION. + * + * Calculates the number of periods required for an investment to reach a specified value. + * + * @param float $rate Interest rate per period + * @param float $pv Present Value + * @param float $fv Future Value + * + * @return float|string + */ + public static function PDURATION($rate = 0, $pv = 0, $fv = 0) + { + $rate = Functions::flattenSingleValue($rate); + $pv = Functions::flattenSingleValue($pv); + $fv = Functions::flattenSingleValue($fv); + + // Validate parameters + if (!is_numeric($rate) || !is_numeric($pv) || !is_numeric($fv)) { + return Functions::VALUE(); + } elseif ($rate <= 0.0 || $pv <= 0.0 || $fv <= 0.0) { + return Functions::NAN(); + } + + return (log($fv) - log($pv)) / log(1 + $rate); + } + /** * PMT. * @@ -1933,6 +1960,33 @@ class Financial return Functions::VALUE(); } + /** + * RRI. + * + * Calculates the interest rate required for an investment to grow to a specified future value . + * + * @param float $nper The number of periods over which the investment is made + * @param float $pv Present Value + * @param float $fv Future Value + * + * @return float|string + */ + public static function RRI($nper = 0, $pv = 0, $fv = 0) + { + $nper = Functions::flattenSingleValue($nper); + $pv = Functions::flattenSingleValue($pv); + $fv = Functions::flattenSingleValue($fv); + + // Validate parameters + if (!is_numeric($nper) || !is_numeric($pv) || !is_numeric($fv)) { + return Functions::VALUE(); + } elseif ($nper <= 0.0 || $pv <= 0.0 || $fv < 0.0) { + return Functions::NAN(); + } + + return pow($fv / $pv, 1 / $nper) - 1; + } + /** * SLN. * @@ -1942,7 +1996,7 @@ class Financial * @param mixed $salvage Value at the end of the depreciation * @param mixed $life Number of periods over which the asset is depreciated * - * @return float + * @return float|string */ public static function SLN($cost, $salvage, $life) { @@ -1972,7 +2026,7 @@ class Financial * @param mixed $life Number of periods over which the asset is depreciated * @param mixed $period Period * - * @return float + * @return float|string */ public static function SYD($cost, $salvage, $life, $period) { diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Functions.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Functions.php index b6389a8..6fa07de 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Functions.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Functions.php @@ -277,7 +277,7 @@ class Functions return '=' . $condition; } - preg_match('/([<>=]+)(.*)/', $condition, $matches); + preg_match('/(=|<[>=]?|>=?)(.*)/', $condition, $matches); list(, $operator, $operand) = $matches; if (!is_numeric($operand)) { @@ -355,7 +355,7 @@ class Functions return false; } - return in_array($value, array_values(self::$errorCodes)); + return in_array($value, self::$errorCodes); } /** @@ -648,17 +648,26 @@ class Functions /** * ISFORMULA. * - * @param mixed $value The cell to check + * @param mixed $cellReference The cell to check * @param Cell $pCell The current cell (containing this formula) * * @return bool|string */ - public static function isFormula($value = '', Cell $pCell = null) + public static function isFormula($cellReference = '', Cell $pCell = null) { if ($pCell === null) { return self::REF(); } - return substr($pCell->getWorksheet()->getCell($value)->getValue(), 0, 1) === '='; + preg_match('/^' . Calculation::CALCULATION_REGEXP_CELLREF . '$/i', $cellReference, $matches); + + $cellReference = $matches[6] . $matches[7]; + $worksheetName = trim($matches[3], "'"); + + $worksheet = (!empty($worksheetName)) + ? $pCell->getWorksheet()->getParent()->getSheetByName($worksheetName) + : $pCell->getWorksheet(); + + return $worksheet->getCell($cellReference)->isFormula(); } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical.php index 6b12692..c36e3fc 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Logical.php @@ -38,6 +38,32 @@ class Logical return false; } + private static function countTrueValues(array $args) + { + $returnValue = 0; + + foreach ($args as $arg) { + // Is it a boolean value? + if (is_bool($arg)) { + $returnValue += $arg; + } elseif ((is_numeric($arg)) && (!is_string($arg))) { + $returnValue += ((int) $arg != 0); + } elseif (is_string($arg)) { + $arg = strtoupper($arg); + if (($arg == 'TRUE') || ($arg == Calculation::getTRUE())) { + $arg = true; + } elseif (($arg == 'FALSE') || ($arg == Calculation::getFALSE())) { + $arg = false; + } else { + return Functions::VALUE(); + } + $returnValue += ($arg != 0); + } + } + + return $returnValue; + } + /** * LOGICAL_AND. * @@ -62,37 +88,23 @@ class Logical */ public static function logicalAnd(...$args) { - // Return value - $returnValue = true; + $args = Functions::flattenArray($args); - // Loop through the arguments - $aArgs = Functions::flattenArray($args); - $argCount = -1; - foreach ($aArgs as $argCount => $arg) { - // Is it a boolean value? - if (is_bool($arg)) { - $returnValue = $returnValue && $arg; - } elseif ((is_numeric($arg)) && (!is_string($arg))) { - $returnValue = $returnValue && ($arg != 0); - } elseif (is_string($arg)) { - $arg = strtoupper($arg); - if (($arg == 'TRUE') || ($arg == Calculation::getTRUE())) { - $arg = true; - } elseif (($arg == 'FALSE') || ($arg == Calculation::getFALSE())) { - $arg = false; - } else { - return Functions::VALUE(); - } - $returnValue = $returnValue && ($arg != 0); - } - } - - // Return - if ($argCount < 0) { + if (count($args) == 0) { return Functions::VALUE(); } - return $returnValue; + $args = array_filter($args, function ($value) { + return $value !== null || (is_string($value) && trim($value) == ''); + }); + $argCount = count($args); + + $returnValue = self::countTrueValues($args); + if (is_string($returnValue)) { + return $returnValue; + } + + return ($returnValue > 0) && ($returnValue == $argCount); } /** @@ -119,37 +131,65 @@ class Logical */ public static function logicalOr(...$args) { - // Return value - $returnValue = false; + $args = Functions::flattenArray($args); - // Loop through the arguments - $aArgs = Functions::flattenArray($args); - $argCount = -1; - foreach ($aArgs as $argCount => $arg) { - // Is it a boolean value? - if (is_bool($arg)) { - $returnValue = $returnValue || $arg; - } elseif ((is_numeric($arg)) && (!is_string($arg))) { - $returnValue = $returnValue || ($arg != 0); - } elseif (is_string($arg)) { - $arg = strtoupper($arg); - if (($arg == 'TRUE') || ($arg == Calculation::getTRUE())) { - $arg = true; - } elseif (($arg == 'FALSE') || ($arg == Calculation::getFALSE())) { - $arg = false; - } else { - return Functions::VALUE(); - } - $returnValue = $returnValue || ($arg != 0); - } - } - - // Return - if ($argCount < 0) { + if (count($args) == 0) { return Functions::VALUE(); } - return $returnValue; + $args = array_filter($args, function ($value) { + return $value !== null || (is_string($value) && trim($value) == ''); + }); + + $returnValue = self::countTrueValues($args); + if (is_string($returnValue)) { + return $returnValue; + } + + return $returnValue > 0; + } + + /** + * LOGICAL_XOR. + * + * Returns the Exclusive Or logical operation for one or more supplied conditions. + * i.e. the Xor function returns TRUE if an odd number of the supplied conditions evaluate to TRUE, and FALSE otherwise. + * + * Excel Function: + * =XOR(logical1[,logical2[, ...]]) + * + * The arguments must evaluate to logical values such as TRUE or FALSE, or the arguments must be arrays + * or references that contain logical values. + * + * Boolean arguments are treated as True or False as appropriate + * Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False + * If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds + * the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value + * + * @category Logical Functions + * + * @param mixed $args Data values + * + * @return bool|string the logical XOR of the arguments + */ + public static function logicalXor(...$args) + { + $args = Functions::flattenArray($args); + + if (count($args) == 0) { + return Functions::VALUE(); + } + + $args = array_filter($args, function ($value) { + return $value !== null || (is_string($value) && trim($value) == ''); + }); + + $returnValue = self::countTrueValues($args); + if (is_string($returnValue)) { + return $returnValue; + } + + return $returnValue % 2 == 1; } /** @@ -176,6 +216,7 @@ class Logical public static function NOT($logical = false) { $logical = Functions::flattenSingleValue($logical); + if (is_string($logical)) { $logical = strtoupper($logical); if (($logical == 'TRUE') || ($logical == Calculation::getTRUE())) { diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef.php index d8cdc24..71550a7 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/LookupRef.php @@ -866,4 +866,33 @@ class LookupRef return self::VLOOKUP($lookup_value, $lookup_vector, 2); } + + /** + * FORMULATEXT. + * + * @param mixed $cellReference The cell to check + * @param Cell $pCell The current cell (containing this formula) + * + * @return string + */ + public static function FORMULATEXT($cellReference = '', Cell $pCell = null) + { + if ($pCell === null) { + return Functions::REF(); + } + + preg_match('/^' . Calculation::CALCULATION_REGEXP_CELLREF . '$/i', $cellReference, $matches); + + $cellReference = $matches[6] . $matches[7]; + $worksheetName = trim($matches[3], "'"); + $worksheet = (!empty($worksheetName)) + ? $pCell->getWorksheet()->getParent()->getSheetByName($worksheetName) + : $pCell->getWorksheet(); + + if (!$worksheet->getCell($cellReference)->isFormula()) { + return Functions::NA(); + } + + return $worksheet->getCell($cellReference)->getValue(); + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig.php index 46e9f1a..41fc0de 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig.php @@ -1081,30 +1081,55 @@ class MathTrig ); } + protected static function filterFormulaArgs($cellReference, $args) + { + return array_filter( + $args, + function ($index) use ($cellReference) { + list(, $row, $column) = explode('.', $index); + if ($cellReference->getWorksheet()->cellExists($column . $row)) { + //take this cell out if it contains the SUBTOTAL or AGGREGATE functions in a formula + $isFormula = $cellReference->getWorksheet()->getCell($column . $row)->isFormula(); + $cellFormula = !preg_match('/^=.*\b(SUBTOTAL|AGGREGATE)\s*\(/i', $cellReference->getWorksheet()->getCell($column . $row)->getValue()); + + return !$isFormula || $cellFormula; + } + + return true; + }, + ARRAY_FILTER_USE_KEY + ); + } + /** * SUBTOTAL. * * Returns a subtotal in a list or database. * * @param int the number 1 to 11 that specifies which function to - * use in calculating subtotals within a list + * use in calculating subtotals within a range + * list + * Numbers 101 to 111 shadow the functions of 1 to 11 + * but ignore any values in the range that are + * in hidden rows or columns * @param array of mixed Data Series * * @return float */ public static function SUBTOTAL(...$args) { + $cellReference = array_pop($args); $aArgs = Functions::flattenArrayIndexed($args); - $cellReference = array_pop($aArgs); $subtotal = array_shift($aArgs); // Calculate if ((is_numeric($subtotal)) && (!is_string($subtotal))) { if ($subtotal > 100) { $aArgs = self::filterHiddenArgs($cellReference, $aArgs); - $subtotal = $subtotal - 100; + $subtotal -= 100; } + $aArgs = self::filterFormulaArgs($cellReference, $aArgs); switch ($subtotal) { case 1: return Statistical::AVERAGE($aArgs); @@ -1433,4 +1458,178 @@ class MathTrig return ((int) ($value * $adjust)) / $adjust; } + + /** + * SEC. + * + * Returns the secant of an angle. + * + * @param float $angle Number + * + * @return float|string The secant of the angle + */ + public static function SEC($angle) + { + $angle = Functions::flattenSingleValue($angle); + + if (!is_numeric($angle)) { + return Functions::VALUE(); + } + + $result = cos($angle); + + return ($result == 0.0) ? Functions::DIV0() : 1 / $result; + } + + /** + * SECH. + * + * Returns the hyperbolic secant of an angle. + * + * @param float $angle Number + * + * @return float|string The hyperbolic secant of the angle + */ + public static function SECH($angle) + { + $angle = Functions::flattenSingleValue($angle); + + if (!is_numeric($angle)) { + return Functions::VALUE(); + } + + $result = cosh($angle); + + return ($result == 0.0) ? Functions::DIV0() : 1 / $result; + } + + /** + * CSC. + * + * Returns the cosecant of an angle. + * + * @param float $angle Number + * + * @return float|string The cosecant of the angle + */ + public static function CSC($angle) + { + $angle = Functions::flattenSingleValue($angle); + + if (!is_numeric($angle)) { + return Functions::VALUE(); + } + + $result = sin($angle); + + return ($result == 0.0) ? Functions::DIV0() : 1 / $result; + } + + /** + * CSCH. + * + * Returns the hyperbolic cosecant of an angle. + * + * @param float $angle Number + * + * @return float|string The hyperbolic cosecant of the angle + */ + public static function CSCH($angle) + { + $angle = Functions::flattenSingleValue($angle); + + if (!is_numeric($angle)) { + return Functions::VALUE(); + } + + $result = sinh($angle); + + return ($result == 0.0) ? Functions::DIV0() : 1 / $result; + } + + /** + * COT. + * + * Returns the cotangent of an angle. + * + * @param float $angle Number + * + * @return float|string The cotangent of the angle + */ + public static function COT($angle) + { + $angle = Functions::flattenSingleValue($angle); + + if (!is_numeric($angle)) { + return Functions::VALUE(); + } + + $result = tan($angle); + + return ($result == 0.0) ? Functions::DIV0() : 1 / $result; + } + + /** + * COTH. + * + * Returns the hyperbolic cotangent of an angle. + * + * @param float $angle Number + * + * @return float|string The hyperbolic cotangent of the angle + */ + public static function COTH($angle) + { + $angle = Functions::flattenSingleValue($angle); + + if (!is_numeric($angle)) { + return Functions::VALUE(); + } + + $result = tanh($angle); + + return ($result == 0.0) ? Functions::DIV0() : 1 / $result; + } + + /** + * ACOT. + * + * Returns the arccotangent of a number. + * + * @param float $number Number + * + * @return float|string The arccotangent of the number + */ + public static function ACOT($number) + { + $number = Functions::flattenSingleValue($number); + + if (!is_numeric($number)) { + return Functions::VALUE(); + } + + return (M_PI / 2) - atan($number); + } + + /** + * ACOTH. + * + * Returns the hyperbolic arccotangent of a number. + * + * @param float $number Number + * + * @return float|string The hyperbolic arccotangent of the number + */ + public static function ACOTH($number) + { + $number = Functions::flattenSingleValue($number); + + if (!is_numeric($number)) { + return Functions::VALUE(); + } + + $result = log(($number + 1) / ($number - 1)) / 2; + + return is_nan($result) ? Functions::NAN() : $result; + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData.php index f0e8a3c..e30b2ff 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/TextData.php @@ -577,4 +577,96 @@ class TextData return (float) $value; } + + /** + * NUMBERVALUE. + * + * @param mixed $value Value to check + * @param string $decimalSeparator decimal separator, defaults to locale defined value + * @param string $groupSeparator group/thosands separator, defaults to locale defined value + * + * @return float|string + */ + public static function NUMBERVALUE($value = '', $decimalSeparator = null, $groupSeparator = null) + { + $value = Functions::flattenSingleValue($value); + $decimalSeparator = Functions::flattenSingleValue($decimalSeparator); + $groupSeparator = Functions::flattenSingleValue($groupSeparator); + + if (!is_numeric($value)) { + $decimalSeparator = empty($decimalSeparator) ? StringHelper::getDecimalSeparator() : $decimalSeparator; + $groupSeparator = empty($groupSeparator) ? StringHelper::getThousandsSeparator() : $groupSeparator; + + $decimalPositions = preg_match_all('/' . preg_quote($decimalSeparator) . '/', $value, $matches, PREG_OFFSET_CAPTURE); + if ($decimalPositions > 1) { + return Functions::VALUE(); + } + $decimalOffset = array_pop($matches[0])[1]; + if (strpos($value, $groupSeparator, $decimalOffset) !== false) { + return Functions::VALUE(); + } + + $value = str_replace([$groupSeparator, $decimalSeparator], ['', '.'], $value); + + // Handle the special case of trailing % signs + $percentageString = rtrim($value, '%'); + if (!is_numeric($percentageString)) { + return Functions::VALUE(); + } + + $percentageAdjustment = strlen($value) - strlen($percentageString); + if ($percentageAdjustment) { + $value = (float) $percentageString; + $value /= pow(10, $percentageAdjustment * 2); + } + } + + return (float) $value; + } + + /** + * Compares two text strings and returns TRUE if they are exactly the same, FALSE otherwise. + * EXACT is case-sensitive but ignores formatting differences. + * Use EXACT to test text being entered into a document. + * + * @param $value1 + * @param $value2 + * + * @return bool + */ + public static function EXACT($value1, $value2) + { + $value1 = Functions::flattenSingleValue($value1); + $value2 = Functions::flattenSingleValue($value2); + + return (string) $value2 === (string) $value1; + } + + /** + * TEXTJOIN. + * + * @param mixed $delimiter + * @param mixed $ignoreEmpty + * @param mixed $args + * + * @return string + */ + public static function TEXTJOIN($delimiter, $ignoreEmpty, ...$args) + { + // Loop through arguments + $aArgs = Functions::flattenArray($args); + foreach ($aArgs as $key => &$arg) { + if ($ignoreEmpty && trim($arg) == '') { + unset($aArgs[$key]); + } elseif (is_bool($arg)) { + if (Functions::getCompatibilityMode() == Functions::COMPATIBILITY_OPENOFFICE) { + $arg = (int) $arg; + } else { + $arg = ($arg) ? Calculation::getTRUE() : Calculation::getFALSE(); + } + } + } + + return implode($delimiter, $aArgs); + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/functionlist.txt b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/functionlist.txt index 5ac6cf4..7043f76 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/functionlist.txt +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/functionlist.txt @@ -3,6 +3,8 @@ ACCRINT ACCRINTM ACOS ACOSH +ACOT +ACOTH ADDRESS AMORDEGRC AMORLINC @@ -30,6 +32,11 @@ BIN2DEC BIN2HEX BIN2OCT BINOMDIST +BITAND +BITLSHIFT +BITOR +BITRSHIFT +BITXOR CEILING CELL CHAR @@ -43,12 +50,15 @@ COLUMN COLUMNS COMBIN COMPLEX +CONCAT CONCATENATE CONFIDENCE CONVERT CORREL COS COSH +COT +COTH COUNT COUNTA COUNTBLANK @@ -62,6 +72,8 @@ COUPNUM COUPPCD COVAR CRITBINOM +CSC +CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY @@ -105,7 +117,9 @@ EDATE EFFECT EOMONTH ERF +ERF.PRECISE ERFC +ERFC.PRECISE ERROR.TYPE EVEN EXACT @@ -149,6 +163,10 @@ IMAGINARY IMARGUMENT IMCONJUGATE IMCOS +IMCOSH +IMCOT +IMCSC +IMCSCH IMEXP IMLN IMLOG10 @@ -156,10 +174,14 @@ IMLOG2 IMPOWER IMPRODUCT IMREAL +IMSEC +IMSECH IMSIN +IMSINH IMSQRT IMSUB IMSUM +IMTAN INDEX INDIRECT INFO @@ -177,6 +199,7 @@ ISNA ISNONTEXT ISNUMBER ISODD +ISOWEEKNUM ISPMT ISREF ISTEXT @@ -229,6 +252,7 @@ NOT NOW NPER NPV +NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX @@ -239,6 +263,7 @@ ODDLPRICE ODDLYIELD OFFSET OR +PDURATION PEARSON PERCENTILE PERCENTRANK @@ -275,10 +300,13 @@ ROUNDDOWN ROUNDUP ROW ROWS +RRI RSQ RTD SEARCH SEARCHB +SEC +SECH SECOND SERIESSUM SIGN @@ -292,6 +320,8 @@ SQRT SQRTPI STANDARDIZE STDEV +STDEV.A +STDEV.P STDEVA STDEVP STDEVPA @@ -315,6 +345,7 @@ TBILLPRICE TBILLYIELD TDIST TEXT +TEXTJOIN TIME TIMEVALUE TINV @@ -327,6 +358,8 @@ TRUE TRUNC TTEST TYPE +UNICHAR +UNIORD UPPER USDOLLAR VALUE @@ -342,6 +375,7 @@ WEIBULL WORKDAY XIRR XNPV +XOR YEAR YEARFRAC YIELD diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php index 1efcb62..366ec49 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Coordinate.php @@ -327,7 +327,7 @@ abstract class Coordinate } /** - * Extract all cell references in range. + * Extract all cell references in range, which may be comprised of multiple cell ranges. * * @param string $pRange Range (e.g. A1 or A1:C10 or A1:E10 A20:E25) * @@ -335,49 +335,12 @@ abstract class Coordinate */ public static function extractAllCellReferencesInRange($pRange) { - // Returnvalue $returnValue = []; // Explode spaces - $cellBlocks = explode(' ', str_replace('$', '', strtoupper($pRange))); + $cellBlocks = self::getCellBlocksFromRangeString($pRange); foreach ($cellBlocks as $cellBlock) { - // Single cell? - if (!self::coordinateIsRange($cellBlock)) { - $returnValue[] = $cellBlock; - - continue; - } - - // Range... - $ranges = self::splitRange($cellBlock); - foreach ($ranges as $range) { - // Single cell? - if (!isset($range[1])) { - $returnValue[] = $range[0]; - - continue; - } - - // Range... - list($rangeStart, $rangeEnd) = $range; - sscanf($rangeStart, '%[A-Z]%d', $startCol, $startRow); - sscanf($rangeEnd, '%[A-Z]%d', $endCol, $endRow); - ++$endCol; - - // Current data - $currentCol = $startCol; - $currentRow = $startRow; - - // Loop cells - while ($currentCol != $endCol) { - while ($currentRow <= $endRow) { - $returnValue[] = $currentCol . $currentRow; - ++$currentRow; - } - ++$currentCol; - $currentRow = $startRow; - } - } + $returnValue = array_merge($returnValue, self::getReferencesForCellBlock($cellBlock)); } // Sort the result by column and row @@ -392,6 +355,60 @@ abstract class Coordinate return array_values($sortKeys); } + /** + * Get all cell references for an individual cell block. + * + * @param string $cellBlock A cell range e.g. A4:B5 + * + * @return array All individual cells in that range + */ + private static function getReferencesForCellBlock($cellBlock) + { + $returnValue = []; + + // Single cell? + if (!self::coordinateIsRange($cellBlock)) { + return (array) $cellBlock; + } + + // Range... + $ranges = self::splitRange($cellBlock); + foreach ($ranges as $range) { + // Single cell? + if (!isset($range[1])) { + $returnValue[] = $range[0]; + + continue; + } + + // Range... + list($rangeStart, $rangeEnd) = $range; + list($startColumn, $startRow) = self::coordinateFromString($rangeStart); + list($endColumn, $endRow) = self::coordinateFromString($rangeEnd); + $startColumnIndex = self::columnIndexFromString($startColumn); + $endColumnIndex = self::columnIndexFromString($endColumn); + ++$endColumnIndex; + + // Current data + $currentColumnIndex = $startColumnIndex; + $currentRow = $startRow; + + self::validateRange($cellBlock, $startColumnIndex, $endColumnIndex, $currentRow, $endRow); + + // Loop cells + while ($currentColumnIndex < $endColumnIndex) { + while ($currentRow <= $endRow) { + $returnValue[] = self::stringFromColumnIndex($currentColumnIndex) . $currentRow; + ++$currentRow; + } + ++$currentColumnIndex; + $currentRow = $startRow; + } + } + + return $returnValue; + } + /** * Convert an associative array of single cell coordinates to values to an associative array * of cell ranges to values. Only adjacent cell coordinates with the same @@ -477,4 +494,33 @@ abstract class Coordinate return $mergedCoordCollection; } + + /** + * Get the individual cell blocks from a range string, splitting by space and removing any $ characters. + * + * @param string $pRange + * + * @return string[] + */ + private static function getCellBlocksFromRangeString($pRange) + { + return explode(' ', str_replace('$', '', strtoupper($pRange))); + } + + /** + * Check that the given range is valid, i.e. that the start column and row are not greater than the end column and + * row. + * + * @param string $cellBlock The original range, for displaying a meaningful error message + * @param int $startColumnIndex + * @param int $endColumnIndex + * @param int $currentRow + * @param int $endRow + */ + private static function validateRange($cellBlock, $startColumnIndex, $endColumnIndex, $currentRow, $endRow) + { + if ($startColumnIndex >= $endColumnIndex || $currentRow > $endRow) { + throw new Exception('Invalid range: "' . $cellBlock . '"'); + } + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Hyperlink.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Hyperlink.php index ad48cb6..e17c20d 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Hyperlink.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Cell/Hyperlink.php @@ -89,6 +89,14 @@ class Hyperlink return strpos($this->url, 'sheet://') !== false; } + /** + * @return string + */ + public function getTypeHyperlink() + { + return $this->isInternal() ? '' : 'External'; + } + /** * Get hash code. * diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeries.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeries.php index 2bda0c9..8056bbe 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeries.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Chart/DataSeries.php @@ -217,7 +217,7 @@ class DataSeries /** * Get Plot Order. * - * @return string + * @return int[] */ public function getPlotOrder() { diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Html.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Html.php index 61c66a8..eaf7302 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Html.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Html.php @@ -603,6 +603,13 @@ class Html $this->stringData = ''; } + /** + * Parse HTML formatting and return the resulting RichText. + * + * @param string $html + * + * @return RichText + */ public function toRichTextObject($html) { $this->initialise(); @@ -611,8 +618,8 @@ class Html $dom = new DOMDocument(); // Load the HTML file into the DOM object // Note the use of error suppression, because typically this will be an html fragment, so not fully valid markup - @$dom->loadHTML($html); - + $prefix = ''; + @$dom->loadHTML($prefix . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); // Discard excess white space $dom->preserveWhiteSpace = false; diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Migrator.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Migrator.php index b6d5f2a..26d5fce 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Migrator.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Helper/Migrator.php @@ -4,6 +4,22 @@ namespace PhpOffice\PhpSpreadsheet\Helper; class Migrator { + /** + * @var string[] + */ + private $from; + + /** + * @var string[] + */ + private $to; + + public function __construct() + { + $this->from = array_keys($this->getMapping()); + $this->to = array_values($this->getMapping()); + } + /** * Return the ordered mapping from old PHPExcel class names to new PhpSpreadsheet one. * @@ -204,7 +220,6 @@ class Migrator 'PHPExcel_Settings' => \PhpOffice\PhpSpreadsheet\Settings::class, 'PHPExcel_Style' => \PhpOffice\PhpSpreadsheet\Style\Style::class, 'PHPExcel_Worksheet' => \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::class, - 'PHPExcel' => \PhpOffice\PhpSpreadsheet\Spreadsheet::class, ]; $methods = [ @@ -249,19 +264,25 @@ class Migrator { $patterns = [ '/*.md', - '/*.php', - '/*.phtml', '/*.txt', '/*.TXT', + '/*.php', + '/*.phpt', + '/*.php3', + '/*.php4', + '/*.php5', + '/*.phtml', ]; - $from = array_keys($this->getMapping()); - $to = array_values($this->getMapping()); - foreach ($patterns as $pattern) { foreach (glob($path . $pattern) as $file) { + if (strpos($path, '/vendor/') !== false) { + echo $file . " skipped\n"; + + continue; + } $original = file_get_contents($file); - $converted = str_replace($from, $to, $original); + $converted = $this->replace($original); if ($original !== $converted) { echo $file . " converted\n"; @@ -290,4 +311,23 @@ class Migrator $this->recursiveReplace($path); } } + + /** + * Migrate the given code from PHPExcel to PhpSpreadsheet. + * + * @param string $original + * + * @return string + */ + public function replace($original) + { + $converted = str_replace($this->from, $this->to, $original); + + // The string "PHPExcel" gets special treatment because of how common it might be. + // This regex requires a word boundary around the string, and it can't be + // preceded by $ or -> (goal is to filter out cases where a variable is named $PHPExcel or similar) + $converted = preg_replace('~(?)(\b|\\\\)PHPExcel\b~', '\\' . \PhpOffice\PhpSpreadsheet\Spreadsheet::class, $converted); + + return $converted; + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php index 6adb6ee..6899773 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Csv.php @@ -50,6 +50,13 @@ class Csv extends BaseReader */ private $contiguousRow = -1; + /** + * The character that can escape the enclosure. + * + * @var string + */ + private $escapeCharacter = '\\'; + /** * Create a new CSV Reader instance. */ @@ -254,7 +261,7 @@ class Csv extends BaseReader $worksheetInfo[0]['totalColumns'] = 0; // Loop through each line of the file in turn - while (($rowData = fgetcsv($fileHandle, 0, $this->delimiter, $this->enclosure)) !== false) { + while (($rowData = fgetcsv($fileHandle, 0, $this->delimiter, $this->enclosure, $this->escapeCharacter)) !== false) { ++$worksheetInfo[0]['totalRows']; $worksheetInfo[0]['lastColumnIndex'] = max($worksheetInfo[0]['lastColumnIndex'], count($rowData) - 1); } @@ -326,7 +333,7 @@ class Csv extends BaseReader } // Loop through each line of the file in turn - while (($rowData = fgetcsv($fileHandle, 0, $this->delimiter, $this->enclosure)) !== false) { + while (($rowData = fgetcsv($fileHandle, 0, $this->delimiter, $this->enclosure, $this->escapeCharacter)) !== false) { $columnLetter = 'A'; foreach ($rowData as $rowDatum) { if ($rowDatum != '' && $this->readFilter->readCell($columnLetter, $currentRow)) { @@ -458,6 +465,30 @@ class Csv extends BaseReader return $this->contiguous; } + /** + * Set escape backslashes. + * + * @param string $escapeCharacter + * + * @return $this + */ + public function setEscapeCharacter($escapeCharacter) + { + $this->escapeCharacter = $escapeCharacter; + + return $this; + } + + /** + * Get escape backslashes. + * + * @return string + */ + public function getEscapeCharacter() + { + return $this->escapeCharacter; + } + /** * Can the current IReader read the file? * @@ -476,6 +507,12 @@ class Csv extends BaseReader fclose($this->fileHandle); + // Trust file extension if any + if (strtolower(pathinfo($pFilename, PATHINFO_EXTENSION)) === 'csv') { + return true; + } + + // Attempt to guess mimetype $type = mime_content_type($pFilename); $supportedTypes = [ 'text/csv', diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Html.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Html.php index 9d44c8c..b570fa4 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Html.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Html.php @@ -554,6 +554,7 @@ class Html extends BaseReader $row = 0; $column = 'A'; $content = ''; + $this->rowspan = []; $this->processDomElement($dom, $spreadsheet->getActiveSheet(), $row, $column, $content); // Return diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReadFilter.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReadFilter.php index 03c48db..ccfe05a 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReadFilter.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/IReadFilter.php @@ -7,9 +7,9 @@ interface IReadFilter /** * Should this cell be read? * - * @param $column string Column address (as a string value like "A", or "IV") - * @param $row int Row number - * @param $worksheetName string Optional worksheet name + * @param string $column Column address (as a string value like "A", or "IV") + * @param int $row Row number + * @param string $worksheetName Optional worksheet name * * @return bool */ diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php index 734ab2a..c6e8512 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php @@ -3,6 +3,7 @@ namespace PhpOffice\PhpSpreadsheet\Reader; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; +use PhpOffice\PhpSpreadsheet\Cell\Hyperlink; use PhpOffice\PhpSpreadsheet\Document\Properties; use PhpOffice\PhpSpreadsheet\NamedRange; use PhpOffice\PhpSpreadsheet\Reader\Xlsx\Chart; @@ -25,6 +26,7 @@ use PhpOffice\PhpSpreadsheet\Style\Style; use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter\Column; use PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; +use SimpleXMLElement; use XMLReader; use ZipArchive; @@ -115,15 +117,17 @@ class Xlsx extends BaseReader $zip->open($pFilename); // The files we're looking at here are small enough that simpleXML is more efficient than XMLReader + //~ http://schemas.openxmlformats.org/package/2006/relationships"); $rels = simplexml_load_string( $this->securityScan($this->getFromZipArchive($zip, '_rels/.rels')) - ); //~ http://schemas.openxmlformats.org/package/2006/relationships"); + ); foreach ($rels->Relationship as $rel) { switch ($rel['Type']) { case 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument': + //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $xmlWorkbook = simplexml_load_string( $this->securityScan($this->getFromZipArchive($zip, "{$rel['Target']}")) - ); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" + ); if ($xmlWorkbook->sheets) { foreach ($xmlWorkbook->sheets->sheet as $eleSheet) { @@ -157,8 +161,8 @@ class Xlsx extends BaseReader $zip = new ZipArchive(); $zip->open($pFilename); + //~ http://schemas.openxmlformats.org/package/2006/relationships" $rels = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan($this->getFromZipArchive($zip, '_rels/.rels')), 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() @@ -166,8 +170,9 @@ class Xlsx extends BaseReader foreach ($rels->Relationship as $rel) { if ($rel['Type'] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument') { $dir = dirname($rel['Target']); + + //~ http://schemas.openxmlformats.org/package/2006/relationships" $relsWorkbook = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan( $this->getFromZipArchive($zip, "$dir/_rels/" . basename($rel['Target']) . '.rels') ), @@ -183,8 +188,8 @@ class Xlsx extends BaseReader } } + //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $xmlWorkbook = simplexml_load_string( - //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $this->securityScan( $this->getFromZipArchive($zip, "{$rel['Target']}") ), @@ -193,7 +198,7 @@ class Xlsx extends BaseReader ); if ($xmlWorkbook->sheets) { $dir = dirname($rel['Target']); - /** @var \SimpleXMLElement $eleSheet */ + /** @var SimpleXMLElement $eleSheet */ foreach ($xmlWorkbook->sheets->sheet as $eleSheet) { $tmpInfo = [ 'worksheetName' => (string) $eleSheet['name'], @@ -316,6 +321,60 @@ class Xlsx extends BaseReader return $contents; } + /** + * Set Worksheet column attributes by attributes array passed. + * + * @param Worksheet $docSheet + * @param string $column A, B, ... DX, ... + * @param array $columnAttributes array of attributes (indexes are attribute name, values are value) + * 'xfIndex', 'visible', 'collapsed', 'outlineLevel', 'width', ... ? + */ + private function setColumnAttributes(Worksheet $docSheet, $column, array $columnAttributes) + { + if (isset($columnAttributes['xfIndex'])) { + $docSheet->getColumnDimension($column)->setXfIndex($columnAttributes['xfIndex']); + } + if (isset($columnAttributes['visible'])) { + $docSheet->getColumnDimension($column)->setVisible($columnAttributes['visible']); + } + if (isset($columnAttributes['collapsed'])) { + $docSheet->getColumnDimension($column)->setCollapsed($columnAttributes['collapsed']); + } + if (isset($columnAttributes['outlineLevel'])) { + $docSheet->getColumnDimension($column)->setOutlineLevel($columnAttributes['outlineLevel']); + } + if (isset($columnAttributes['width'])) { + $docSheet->getColumnDimension($column)->setWidth($columnAttributes['width']); + } + } + + /** + * Set Worksheet row attributes by attributes array passed. + * + * @param Worksheet $docSheet + * @param int $row 1, 2, 3, ... 99, ... + * @param array $rowAttributes array of attributes (indexes are attribute name, values are value) + * 'xfIndex', 'visible', 'collapsed', 'outlineLevel', 'rowHeight', ... ? + */ + private function setRowAttributes(Worksheet $docSheet, $row, array $rowAttributes) + { + if (isset($rowAttributes['xfIndex'])) { + $docSheet->getRowDimension($row)->setXfIndex($rowAttributes['xfIndex']); + } + if (isset($rowAttributes['visible'])) { + $docSheet->getRowDimension($row)->setVisible($rowAttributes['visible']); + } + if (isset($rowAttributes['collapsed'])) { + $docSheet->getRowDimension($row)->setCollapsed($rowAttributes['collapsed']); + } + if (isset($rowAttributes['outlineLevel'])) { + $docSheet->getRowDimension($row)->setOutlineLevel($rowAttributes['outlineLevel']); + } + if (isset($rowAttributes['rowHeight'])) { + $docSheet->getRowDimension($row)->setRowHeight($rowAttributes['rowHeight']); + } + } + /** * Loads Spreadsheet from file. * @@ -336,13 +395,14 @@ class Xlsx extends BaseReader $excel->removeCellStyleXfByIndex(0); // remove the default style $excel->removeCellXfByIndex(0); // remove the default style } + $unparsedLoadedData = []; $zip = new ZipArchive(); $zip->open($pFilename); // Read the theme first, because we need the colour scheme when reading the styles + //~ http://schemas.openxmlformats.org/package/2006/relationships" $wbRels = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan($this->getFromZipArchive($zip, 'xl/_rels/workbook.xml.rels')), 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() @@ -388,8 +448,8 @@ class Xlsx extends BaseReader } } + //~ http://schemas.openxmlformats.org/package/2006/relationships" $rels = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan($this->getFromZipArchive($zip, '_rels/.rels')), 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() @@ -444,7 +504,7 @@ class Xlsx extends BaseReader ); if (is_object($xmlCore)) { $docProps = $excel->getProperties(); - /** @var \SimpleXMLElement $xmlProperty */ + /** @var SimpleXMLElement $xmlProperty */ foreach ($xmlCore as $xmlProperty) { $cellDataOfficeAttributes = $xmlProperty->attributes(); if (isset($cellDataOfficeAttributes['name'])) { @@ -470,8 +530,8 @@ class Xlsx extends BaseReader break; case 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument': $dir = dirname($rel['Target']); + //~ http://schemas.openxmlformats.org/package/2006/relationships" $relsWorkbook = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan($this->getFromZipArchive($zip, "$dir/_rels/" . basename($rel['Target']) . '.rels')), 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() @@ -480,8 +540,8 @@ class Xlsx extends BaseReader $sharedStrings = []; $xpath = self::getArrayItem($relsWorkbook->xpath("rel:Relationship[@Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings']")); + //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $xmlStrings = simplexml_load_string( - //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $this->securityScan($this->getFromZipArchive($zip, "$dir/$xpath[Target]")), 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() @@ -527,8 +587,8 @@ class Xlsx extends BaseReader $styles = []; $cellStyles = []; $xpath = self::getArrayItem($relsWorkbook->xpath("rel:Relationship[@Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles']")); + //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $xmlStyles = simplexml_load_string( - //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $this->securityScan($this->getFromZipArchive($zip, "$dir/$xpath[Target]")), 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() @@ -638,8 +698,8 @@ class Xlsx extends BaseReader } } + //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $xmlWorkbook = simplexml_load_string( - //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $this->securityScan($this->getFromZipArchive($zip, "{$rel['Target']}")), 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() @@ -655,6 +715,9 @@ class Xlsx extends BaseReader } } + // Set protection + $this->readProtection($excel, $xmlWorkbook); + $sheetId = 0; // keep track of new sheet id in final workbook $oldSheetId = -1; // keep track of old sheet id in final workbook $countSkippedSheets = 0; // keep track of number of skipped sheets @@ -663,7 +726,7 @@ class Xlsx extends BaseReader $charts = $chartDetails = []; if ($xmlWorkbook->sheets) { - /** @var \SimpleXMLElement $eleSheet */ + /** @var SimpleXMLElement $eleSheet */ foreach ($xmlWorkbook->sheets->sheet as $eleSheet) { ++$oldSheetId; @@ -687,8 +750,8 @@ class Xlsx extends BaseReader // reverse $docSheet->setTitle((string) $eleSheet['name'], false, false); $fileWorksheet = $worksheets[(string) self::getArrayItem($eleSheet->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'), 'id')]; + //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $xmlSheet = simplexml_load_string( - //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main" $this->securityScan($this->getFromZipArchive($zip, "$dir/$fileWorksheet")), 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() @@ -811,30 +874,6 @@ class Xlsx extends BaseReader } } - if (isset($xmlSheet->cols) && !$this->readDataOnly) { - foreach ($xmlSheet->cols->col as $col) { - for ($i = (int) ($col['min']); $i <= (int) ($col['max']); ++$i) { - if ($col['style'] && !$this->readDataOnly) { - $docSheet->getColumnDimension(Coordinate::stringFromColumnIndex($i))->setXfIndex((int) ($col['style'])); - } - if (self::boolean($col['hidden'])) { - $docSheet->getColumnDimension(Coordinate::stringFromColumnIndex($i))->setVisible(false); - } - if (self::boolean($col['collapsed'])) { - $docSheet->getColumnDimension(Coordinate::stringFromColumnIndex($i))->setCollapsed(true); - } - if ($col['outlineLevel'] > 0) { - $docSheet->getColumnDimension(Coordinate::stringFromColumnIndex($i))->setOutlineLevel((int) ($col['outlineLevel'])); - } - $docSheet->getColumnDimension(Coordinate::stringFromColumnIndex($i))->setWidth((float) ($col['width'])); - - if ((int) ($col['max']) == 16384) { - break; - } - } - } - } - if (isset($xmlSheet->printOptions) && !$this->readDataOnly) { if (self::boolean((string) $xmlSheet->printOptions['gridLinesSet'])) { $docSheet->setShowGridlines(true); @@ -850,25 +889,11 @@ class Xlsx extends BaseReader } } + $this->readColumnsAndRowsAttributes($xmlSheet, $docSheet); + if ($xmlSheet && $xmlSheet->sheetData && $xmlSheet->sheetData->row) { $cIndex = 1; // Cell Start from 1 foreach ($xmlSheet->sheetData->row as $row) { - if ($row['ht'] && !$this->readDataOnly) { - $docSheet->getRowDimension((int) ($row['r']))->setRowHeight((float) ($row['ht'])); - } - if (self::boolean($row['hidden']) && !$this->readDataOnly) { - $docSheet->getRowDimension((int) ($row['r']))->setVisible(false); - } - if (self::boolean($row['collapsed'])) { - $docSheet->getRowDimension((int) ($row['r']))->setCollapsed(true); - } - if ($row['outlineLevel'] > 0) { - $docSheet->getRowDimension((int) ($row['r']))->setOutlineLevel((int) ($row['outlineLevel'])); - } - if ($row['s'] && !$this->readDataOnly) { - $docSheet->getRowDimension((int) ($row['r']))->setXfIndex((int) ($row['s'])); - } - $rowIndex = 1; foreach ($row->c as $c) { $r = (string) $c['r']; @@ -883,7 +908,7 @@ class Xlsx extends BaseReader if ($this->getReadFilter() !== null) { $coordinates = Coordinate::coordinateFromString($r); - if (!$this->getReadFilter()->readCell($coordinates[0], $coordinates[1], $docSheet->getTitle())) { + if (!$this->getReadFilter()->readCell($coordinates[0], (int) $coordinates[1], $docSheet->getTitle())) { continue; } } @@ -1068,8 +1093,8 @@ class Xlsx extends BaseReader } // Or Date Group elements foreach ($filters->dateGroupItem as $dateGroupItem) { + // Operator is undefined, but always treated as EQUAL $column->createRule()->setRule( - // Operator is undefined, but always treated as EQUAL null, [ 'year' => (string) $dateGroupItem['year'], @@ -1106,8 +1131,8 @@ class Xlsx extends BaseReader $column->setFilterType(Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER); // We should only ever have one dynamic filter foreach ($filterColumn->dynamicFilter as $filterRule) { + // Operator is undefined, but always treated as EQUAL $column->createRule()->setRule( - // Operator is undefined, but always treated as EQUAL null, (string) $filterRule['val'], (string) $filterRule['type'] @@ -1185,6 +1210,11 @@ class Xlsx extends BaseReader self::boolean((string) $xmlSheet->pageSetup['useFirstPageNumber'])) { $docPageSetup->setFirstPageNumber((int) ($xmlSheet->pageSetup['firstPageNumber'])); } + + $relAttributes = $xmlSheet->pageSetup->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + if (isset($relAttributes['id'])) { + $unparsedLoadedData['sheets'][$docSheet->getCodeName()]['pageSetupRelId'] = (string) $relAttributes['id']; + } } if ($xmlSheet && $xmlSheet->headerFooter && !$this->readDataOnly) { @@ -1268,13 +1298,23 @@ class Xlsx extends BaseReader } } + // unparsed sheet AlternateContent + if ($xmlSheet && !$this->readDataOnly) { + $mc = $xmlSheet->children('http://schemas.openxmlformats.org/markup-compatibility/2006'); + if ($mc->AlternateContent) { + foreach ($mc->AlternateContent as $alternateContent) { + $unparsedLoadedData['sheets'][$docSheet->getCodeName()]['AlternateContents'][] = $alternateContent->asXML(); + } + } + } + // Add hyperlinks $hyperlinks = []; if (!$this->readDataOnly) { // Locate hyperlink relations if ($zip->locateName(dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels')) { + //~ http://schemas.openxmlformats.org/package/2006/relationships" $relsWorksheet = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan( $this->getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels') ), @@ -1290,7 +1330,7 @@ class Xlsx extends BaseReader // Loop through hyperlinks if ($xmlSheet && $xmlSheet->hyperlinks) { - /** @var \SimpleXMLElement $hyperlink */ + /** @var SimpleXMLElement $hyperlink */ foreach ($xmlSheet->hyperlinks->hyperlink as $hyperlink) { // Link url $linkRel = $hyperlink->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'); @@ -1322,8 +1362,8 @@ class Xlsx extends BaseReader if (!$this->readDataOnly) { // Locate comment relations if ($zip->locateName(dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels')) { + //~ http://schemas.openxmlformats.org/package/2006/relationships" $relsWorksheet = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan( $this->getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels') ), @@ -1367,6 +1407,9 @@ class Xlsx extends BaseReader } } + // later we will remove from it real vmlComments + $unparsedVmlDrawings = $vmlComments; + // Loop through VML comments foreach ($vmlComments as $relName => $relPath) { // Load VML comments file @@ -1407,7 +1450,7 @@ class Xlsx extends BaseReader if (($column !== null) && ($row !== null)) { // Set comment properties - $comment = $docSheet->getCommentByColumnAndRow((string) $column, $row + 1); + $comment = $docSheet->getCommentByColumnAndRow($column + 1, $row + 1); $comment->getFillColor()->setRGB($fillColor); // Parse style @@ -1431,16 +1474,31 @@ class Xlsx extends BaseReader $comment->setVisible($stylePair[1] == 'visible'); } } + + unset($unparsedVmlDrawings[$relName]); } } } } + // unparsed vmlDrawing + if ($unparsedVmlDrawings) { + foreach ($unparsedVmlDrawings as $rId => $relPath) { + $rId = substr($rId, 3); // rIdXXX + $unparsedVmlDrawing = &$unparsedLoadedData['sheets'][$docSheet->getCodeName()]['vmlDrawings']; + $unparsedVmlDrawing[$rId] = []; + $unparsedVmlDrawing[$rId]['filePath'] = self::dirAdd("$dir/$fileWorksheet", $relPath); + $unparsedVmlDrawing[$rId]['relFilePath'] = $relPath; + $unparsedVmlDrawing[$rId]['content'] = $this->securityScan($this->getFromZipArchive($zip, $unparsedVmlDrawing[$rId]['filePath'])); + unset($unparsedVmlDrawing); + } + } + // Header/footer images if ($xmlSheet && $xmlSheet->legacyDrawingHF && !$this->readDataOnly) { if ($zip->locateName(dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels')) { + //~ http://schemas.openxmlformats.org/package/2006/relationships" $relsWorksheet = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan( $this->getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels') ), @@ -1457,8 +1515,8 @@ class Xlsx extends BaseReader if ($vmlRelationship != '') { // Fetch linked images + //~ http://schemas.openxmlformats.org/package/2006/relationships" $relsVML = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan( $this->getFromZipArchive($zip, dirname($vmlRelationship) . '/_rels/' . basename($vmlRelationship) . '.rels') ), @@ -1520,8 +1578,8 @@ class Xlsx extends BaseReader // TODO: Autoshapes from twoCellAnchors! if ($zip->locateName(dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels')) { + //~ http://schemas.openxmlformats.org/package/2006/relationships" $relsWorksheet = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan( $this->getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels') ), @@ -1537,8 +1595,8 @@ class Xlsx extends BaseReader if ($xmlSheet->drawing && !$this->readDataOnly) { foreach ($xmlSheet->drawing as $drawing) { $fileDrawing = $drawings[(string) self::getArrayItem($drawing->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'), 'id')]; + //~ http://schemas.openxmlformats.org/package/2006/relationships" $relsDrawing = simplexml_load_string( - //~ http://schemas.openxmlformats.org/package/2006/relationships" $this->securityScan( $this->getFromZipArchive($zip, dirname($fileDrawing) . '/_rels/' . basename($fileDrawing) . '.rels') ), @@ -1546,9 +1604,12 @@ class Xlsx extends BaseReader Settings::getLibXmlLoaderOptions() ); $images = []; - + $hyperlinks = []; if ($relsDrawing && $relsDrawing->Relationship) { foreach ($relsDrawing->Relationship as $ele) { + if ($ele['Type'] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink') { + $hyperlinks[(string) $ele['Id']] = (string) $ele['Target']; + } if ($ele['Type'] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image') { $images[(string) $ele['Id']] = self::dirAdd($fileDrawing, $ele['Target']); } elseif ($ele['Type'] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart') { @@ -1570,12 +1631,15 @@ class Xlsx extends BaseReader if ($xmlDrawing->oneCellAnchor) { foreach ($xmlDrawing->oneCellAnchor as $oneCellAnchor) { if ($oneCellAnchor->pic->blipFill) { - /** @var \SimpleXMLElement $blip */ + /** @var SimpleXMLElement $blip */ $blip = $oneCellAnchor->pic->blipFill->children('http://schemas.openxmlformats.org/drawingml/2006/main')->blip; - /** @var \SimpleXMLElement $xfrm */ + /** @var SimpleXMLElement $xfrm */ $xfrm = $oneCellAnchor->pic->spPr->children('http://schemas.openxmlformats.org/drawingml/2006/main')->xfrm; - /** @var \SimpleXMLElement $outerShdw */ + /** @var SimpleXMLElement $outerShdw */ $outerShdw = $oneCellAnchor->pic->spPr->children('http://schemas.openxmlformats.org/drawingml/2006/main')->effectLst->outerShdw; + /** @var \SimpleXMLElement $hlinkClick */ + $hlinkClick = $oneCellAnchor->pic->nvPicPr->cNvPr->children('http://schemas.openxmlformats.org/drawingml/2006/main')->hlinkClick; + $objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $objDrawing->setName((string) self::getArrayItem($oneCellAnchor->pic->nvPicPr->cNvPr->attributes(), 'name')); $objDrawing->setDescription((string) self::getArrayItem($oneCellAnchor->pic->nvPicPr->cNvPr->attributes(), 'descr')); @@ -1606,6 +1670,9 @@ class Xlsx extends BaseReader $shadow->getColor()->setRGB(self::getArrayItem($outerShdw->srgbClr->attributes(), 'val')); $shadow->setAlpha(self::getArrayItem($outerShdw->srgbClr->alpha->attributes(), 'val') / 1000); } + + $this->readHyperLinkDrawing($objDrawing, $oneCellAnchor, $hyperlinks); + $objDrawing->setWorksheet($docSheet); } else { // ? Can charts be positioned with a oneCellAnchor ? @@ -1623,6 +1690,7 @@ class Xlsx extends BaseReader $blip = $twoCellAnchor->pic->blipFill->children('http://schemas.openxmlformats.org/drawingml/2006/main')->blip; $xfrm = $twoCellAnchor->pic->spPr->children('http://schemas.openxmlformats.org/drawingml/2006/main')->xfrm; $outerShdw = $twoCellAnchor->pic->spPr->children('http://schemas.openxmlformats.org/drawingml/2006/main')->effectLst->outerShdw; + $hlinkClick = $twoCellAnchor->pic->nvPicPr->cNvPr->children('http://schemas.openxmlformats.org/drawingml/2006/main')->hlinkClick; $objDrawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $objDrawing->setName((string) self::getArrayItem($twoCellAnchor->pic->nvPicPr->cNvPr->attributes(), 'name')); $objDrawing->setDescription((string) self::getArrayItem($twoCellAnchor->pic->nvPicPr->cNvPr->attributes(), 'descr')); @@ -1654,6 +1722,9 @@ class Xlsx extends BaseReader $shadow->getColor()->setRGB(self::getArrayItem($outerShdw->srgbClr->attributes(), 'val')); $shadow->setAlpha(self::getArrayItem($outerShdw->srgbClr->alpha->attributes(), 'val') / 1000); } + + $this->readHyperLinkDrawing($objDrawing, $twoCellAnchor, $hyperlinks); + $objDrawing->setWorksheet($docSheet); } elseif (($this->includeCharts) && ($twoCellAnchor->graphicFrame)) { $fromCoordinate = Coordinate::stringFromColumnIndex(((string) $twoCellAnchor->from->col) + 1) . ($twoCellAnchor->from->row + 1); @@ -1663,7 +1734,7 @@ class Xlsx extends BaseReader $toOffsetX = Drawing::EMUToPixels($twoCellAnchor->to->colOff); $toOffsetY = Drawing::EMUToPixels($twoCellAnchor->to->rowOff); $graphic = $twoCellAnchor->graphicFrame->children('http://schemas.openxmlformats.org/drawingml/2006/main')->graphic; - /** @var \SimpleXMLElement $chartRef */ + /** @var SimpleXMLElement $chartRef */ $chartRef = $graphic->graphicData->children('http://schemas.openxmlformats.org/drawingml/2006/chart')->chart; $thisChart = (string) $chartRef->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'); @@ -1680,9 +1751,33 @@ class Xlsx extends BaseReader } } } + + // store original rId of drawing files + $unparsedLoadedData['sheets'][$docSheet->getCodeName()]['drawingOriginalIds'] = []; + foreach ($relsWorksheet->Relationship as $ele) { + if ($ele['Type'] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing') { + $unparsedLoadedData['sheets'][$docSheet->getCodeName()]['drawingOriginalIds'][(string) $ele['Target']] = (string) $ele['Id']; + } + } + + // unparsed drawing AlternateContent + $xmlAltDrawing = simplexml_load_string( + $this->securityScan($this->getFromZipArchive($zip, $fileDrawing)), + 'SimpleXMLElement', + Settings::getLibXmlLoaderOptions() + )->children('http://schemas.openxmlformats.org/markup-compatibility/2006'); + + if ($xmlAltDrawing->AlternateContent) { + foreach ($xmlAltDrawing->AlternateContent as $alternateContent) { + $unparsedLoadedData['sheets'][$docSheet->getCodeName()]['drawingAlternateContents'][] = $alternateContent->asXML(); + } + } } } + $this->readFormControlProperties($excel, $zip, $dir, $fileWorksheet, $docSheet, $unparsedLoadedData); + $this->readPrinterSettings($excel, $zip, $dir, $fileWorksheet, $docSheet, $unparsedLoadedData); + // Loop through definedNames if ($xmlWorkbook->definedNames) { foreach ($xmlWorkbook->definedNames->definedName as $definedName) { @@ -1826,8 +1921,10 @@ class Xlsx extends BaseReader } if ((!$this->readDataOnly) || (!empty($this->loadSheetsOnly))) { + $workbookView = $xmlWorkbook->bookViews->workbookView; + // active sheet index - $activeTab = (int) ($xmlWorkbook->bookViews->workbookView['activeTab']); // refers to old sheet index + $activeTab = (int) ($workbookView['activeTab']); // refers to old sheet index // keep active sheet index if sheet is still loaded, else first sheet is set as the active if (isset($mapSheetId[$activeTab]) && $mapSheetId[$activeTab] !== null) { @@ -1838,6 +1935,46 @@ class Xlsx extends BaseReader } $excel->setActiveSheetIndex(0); } + + if (isset($workbookView['showHorizontalScroll'])) { + $showHorizontalScroll = (string) $workbookView['showHorizontalScroll']; + $excel->setShowHorizontalScroll($this->castXsdBooleanToBool($showHorizontalScroll)); + } + + if (isset($workbookView['showVerticalScroll'])) { + $showVerticalScroll = (string) $workbookView['showVerticalScroll']; + $excel->setShowVerticalScroll($this->castXsdBooleanToBool($showVerticalScroll)); + } + + if (isset($workbookView['showSheetTabs'])) { + $showSheetTabs = (string) $workbookView['showSheetTabs']; + $excel->setShowSheetTabs($this->castXsdBooleanToBool($showSheetTabs)); + } + + if (isset($workbookView['minimized'])) { + $minimized = (string) $workbookView['minimized']; + $excel->setMinimized($this->castXsdBooleanToBool($minimized)); + } + + if (isset($workbookView['autoFilterDateGrouping'])) { + $autoFilterDateGrouping = (string) $workbookView['autoFilterDateGrouping']; + $excel->setAutoFilterDateGrouping($this->castXsdBooleanToBool($autoFilterDateGrouping)); + } + + if (isset($workbookView['firstSheet'])) { + $firstSheet = (string) $workbookView['firstSheet']; + $excel->setFirstSheetIndex((int) $firstSheet); + } + + if (isset($workbookView['visibility'])) { + $visibility = (string) $workbookView['visibility']; + $excel->setVisibility($visibility); + } + + if (isset($workbookView['tabRatio'])) { + $tabRatio = (string) $workbookView['tabRatio']; + $excel->setTabRatio((int) $tabRatio); + } } break; @@ -1852,6 +1989,18 @@ class Xlsx extends BaseReader 'SimpleXMLElement', Settings::getLibXmlLoaderOptions() ); + + // Default content types + foreach ($contentTypes->Default as $contentType) { + switch ($contentType['ContentType']) { + case 'application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings': + $unparsedLoadedData['default_content_types'][(string) $contentType['Extension']] = (string) $contentType['ContentType']; + + break; + } + } + + // Override content types foreach ($contentTypes->Override as $contentType) { switch ($contentType['ContentType']) { case 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml': @@ -1876,10 +2025,20 @@ class Xlsx extends BaseReader } } } + + break; + + // unparsed + case 'application/vnd.ms-excel.controlproperties+xml': + $unparsedLoadedData['override_content_types'][(string) $contentType['PartName']] = (string) $contentType['ContentType']; + + break; } } } + $excel->setUnparsedLoadedData($unparsedLoadedData); + $zip->close(); return $excel; @@ -1912,7 +2071,7 @@ class Xlsx extends BaseReader /** * @param Style $docStyle - * @param \SimpleXMLElement|\stdClass $style + * @param SimpleXMLElement|\stdClass $style */ private static function readStyle(Style $docStyle, $style) { @@ -1953,7 +2112,7 @@ class Xlsx extends BaseReader // fill if (isset($style->fill)) { if ($style->fill->gradientFill) { - /** @var \SimpleXMLElement $gradientFill */ + /** @var SimpleXMLElement $gradientFill */ $gradientFill = $style->fill->gradientFill[0]; if (!empty($gradientFill['type'])) { $docStyle->getFill()->setFillType((string) $gradientFill['type']); @@ -2042,7 +2201,7 @@ class Xlsx extends BaseReader /** * @param Border $docBorder - * @param \SimpleXMLElement $eleBorder + * @param SimpleXMLElement $eleBorder */ private static function readBorder(Border $docBorder, $eleBorder) { @@ -2055,7 +2214,7 @@ class Xlsx extends BaseReader } /** - * @param \SimpleXMLElement | null $is + * @param SimpleXMLElement | null $is * * @return RichText */ @@ -2215,4 +2374,227 @@ class Xlsx extends BaseReader return $value === 'true' || $value === 'TRUE'; } + + /** + * @param \PhpOffice\PhpSpreadsheet\Worksheet\Drawing $objDrawing + * @param \SimpleXMLElement $cellAnchor + * @param array $hyperlinks + */ + private function readHyperLinkDrawing($objDrawing, $cellAnchor, $hyperlinks) + { + $hlinkClick = $cellAnchor->pic->nvPicPr->cNvPr->children('http://schemas.openxmlformats.org/drawingml/2006/main')->hlinkClick; + + if ($hlinkClick->count() === 0) { + return; + } + + $hlinkId = (string) $hlinkClick->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships')['id']; + $hyperlink = new Hyperlink( + $hyperlinks[$hlinkId], + (string) self::getArrayItem($cellAnchor->pic->nvPicPr->cNvPr->attributes(), 'name') + ); + $objDrawing->setHyperlink($hyperlink); + } + + private function readProtection(Spreadsheet $excel, SimpleXMLElement $xmlWorkbook) + { + if (!$xmlWorkbook->workbookProtection) { + return; + } + + if ($xmlWorkbook->workbookProtection['lockRevision']) { + $excel->getSecurity()->setLockRevision((bool) $xmlWorkbook->workbookProtection['lockRevision']); + } + + if ($xmlWorkbook->workbookProtection['lockStructure']) { + $excel->getSecurity()->setLockStructure((bool) $xmlWorkbook->workbookProtection['lockStructure']); + } + + if ($xmlWorkbook->workbookProtection['lockWindows']) { + $excel->getSecurity()->setLockWindows((bool) $xmlWorkbook->workbookProtection['lockWindows']); + } + + if ($xmlWorkbook->workbookProtection['revisionsPassword']) { + $excel->getSecurity()->setRevisionsPassword((string) $xmlWorkbook->workbookProtection['revisionsPassword'], true); + } + + if ($xmlWorkbook->workbookProtection['workbookPassword']) { + $excel->getSecurity()->setWorkbookPassword((string) $xmlWorkbook->workbookProtection['workbookPassword'], true); + } + } + + private function readFormControlProperties(Spreadsheet $excel, ZipArchive $zip, $dir, $fileWorksheet, $docSheet, array &$unparsedLoadedData) + { + if (!$zip->locateName(dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels')) { + return; + } + + //~ http://schemas.openxmlformats.org/package/2006/relationships" + $relsWorksheet = simplexml_load_string( + $this->securityScan( + $this->getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels') + ), + 'SimpleXMLElement', + Settings::getLibXmlLoaderOptions() + ); + $ctrlProps = []; + foreach ($relsWorksheet->Relationship as $ele) { + if ($ele['Type'] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp') { + $ctrlProps[(string) $ele['Id']] = $ele; + } + } + + $unparsedCtrlProps = &$unparsedLoadedData['sheets'][$docSheet->getCodeName()]['ctrlProps']; + foreach ($ctrlProps as $rId => $ctrlProp) { + $rId = substr($rId, 3); // rIdXXX + $unparsedCtrlProps[$rId] = []; + $unparsedCtrlProps[$rId]['filePath'] = self::dirAdd("$dir/$fileWorksheet", $ctrlProp['Target']); + $unparsedCtrlProps[$rId]['relFilePath'] = (string) $ctrlProp['Target']; + $unparsedCtrlProps[$rId]['content'] = $this->securityScan($this->getFromZipArchive($zip, $unparsedCtrlProps[$rId]['filePath'])); + } + unset($unparsedCtrlProps); + } + + private function readPrinterSettings(Spreadsheet $excel, ZipArchive $zip, $dir, $fileWorksheet, $docSheet, array &$unparsedLoadedData) + { + if (!$zip->locateName(dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels')) { + return; + } + + //~ http://schemas.openxmlformats.org/package/2006/relationships" + $relsWorksheet = simplexml_load_string( + $this->securityScan( + $this->getFromZipArchive($zip, dirname("$dir/$fileWorksheet") . '/_rels/' . basename($fileWorksheet) . '.rels') + ), + 'SimpleXMLElement', + Settings::getLibXmlLoaderOptions() + ); + $sheetPrinterSettings = []; + foreach ($relsWorksheet->Relationship as $ele) { + if ($ele['Type'] == 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings') { + $sheetPrinterSettings[(string) $ele['Id']] = $ele; + } + } + + $unparsedPrinterSettings = &$unparsedLoadedData['sheets'][$docSheet->getCodeName()]['printerSettings']; + foreach ($sheetPrinterSettings as $rId => $printerSettings) { + $rId = substr($rId, 3); // rIdXXX + $unparsedPrinterSettings[$rId] = []; + $unparsedPrinterSettings[$rId]['filePath'] = self::dirAdd("$dir/$fileWorksheet", $printerSettings['Target']); + $unparsedPrinterSettings[$rId]['relFilePath'] = (string) $printerSettings['Target']; + $unparsedPrinterSettings[$rId]['content'] = $this->securityScan($this->getFromZipArchive($zip, $unparsedPrinterSettings[$rId]['filePath'])); + } + unset($unparsedPrinterSettings); + } + + /** + * Convert an 'xsd:boolean' XML value to a PHP boolean value. + * A valid 'xsd:boolean' XML value can be one of the following + * four values: 'true', 'false', '1', '0'. It is case sensitive. + * + * Note that just doing '(bool) $xsdBoolean' is not safe, + * since '(bool) "false"' returns true. + * + * @see https://www.w3.org/TR/xmlschema11-2/#boolean + * + * @param string $xsdBoolean An XML string value of type 'xsd:boolean' + * + * @return bool Boolean value + */ + private function castXsdBooleanToBool($xsdBoolean) + { + if ($xsdBoolean === 'false') { + return false; + } + + return (bool) $xsdBoolean; + } + + /** + * Read columns and rows attributes from XML and set them on the worksheet. + * + * @param SimpleXMLElement $xmlSheet + * @param Worksheet $docSheet + */ + private function readColumnsAndRowsAttributes(SimpleXMLElement $xmlSheet, Worksheet $docSheet) + { + $columnsAttributes = []; + $rowsAttributes = []; + if (isset($xmlSheet->cols) && !$this->readDataOnly) { + foreach ($xmlSheet->cols->col as $col) { + for ($i = (int) ($col['min']); $i <= (int) ($col['max']); ++$i) { + if ($col['style'] && !$this->readDataOnly) { + $columnsAttributes[Coordinate::stringFromColumnIndex($i)]['xfIndex'] = (int) $col['style']; + } + if (self::boolean($col['hidden'])) { + $columnsAttributes[Coordinate::stringFromColumnIndex($i)]['visible'] = false; + } + if (self::boolean($col['collapsed'])) { + $columnsAttributes[Coordinate::stringFromColumnIndex($i)]['collapsed'] = true; + } + if ($col['outlineLevel'] > 0) { + $columnsAttributes[Coordinate::stringFromColumnIndex($i)]['outlineLevel'] = (int) $col['outlineLevel']; + } + $columnsAttributes[Coordinate::stringFromColumnIndex($i)]['width'] = (float) $col['width']; + + if ((int) ($col['max']) == 16384) { + break; + } + } + } + } + + if ($xmlSheet && $xmlSheet->sheetData && $xmlSheet->sheetData->row) { + foreach ($xmlSheet->sheetData->row as $row) { + if ($row['ht'] && !$this->readDataOnly) { + $rowsAttributes[(int) $row['r']]['rowHeight'] = (float) $row['ht']; + } + if (self::boolean($row['hidden']) && !$this->readDataOnly) { + $rowsAttributes[(int) $row['r']]['visible'] = false; + } + if (self::boolean($row['collapsed'])) { + $rowsAttributes[(int) $row['r']]['collapsed'] = true; + } + if ($row['outlineLevel'] > 0) { + $rowsAttributes[(int) $row['r']]['outlineLevel'] = (int) $row['outlineLevel']; + } + if ($row['s'] && !$this->readDataOnly) { + $rowsAttributes[(int) $row['r']]['xfIndex'] = (int) $row['s']; + } + } + } + + // set columns/rows attributes + $columnsAttributesSet = []; + $rowsAttributesSet = []; + foreach ($columnsAttributes as $coordColumn => $columnAttributes) { + foreach ($rowsAttributes as $coordRow => $rowAttributes) { + if ($this->getReadFilter() !== null) { + if (!$this->getReadFilter()->readCell($coordColumn, $coordRow, $docSheet->getTitle())) { + continue 2; + } + } + } + + if (!isset($columnsAttributesSet[$coordColumn])) { + $this->setColumnAttributes($docSheet, $coordColumn, $columnAttributes); + $columnsAttributesSet[$coordColumn] = true; + } + } + + foreach ($rowsAttributes as $coordRow => $rowAttributes) { + foreach ($columnsAttributes as $coordColumn => $columnAttributes) { + if ($this->getReadFilter() !== null) { + if (!$this->getReadFilter()->readCell($coordColumn, $coordRow, $docSheet->getTitle())) { + continue 2; + } + } + } + + if (!isset($rowsAttributesSet[$coordRow])) { + $this->setRowAttributes($docSheet, $coordRow, $rowAttributes); + $rowsAttributesSet[$coordRow] = true; + } + } + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php index e4f866d..65babc3 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml.php @@ -76,7 +76,7 @@ class Xml extends BaseReader // Read sample data (first 2 KB will do) $data = fread($fileHandle, 2048); fclose($fileHandle); - $data = strtr($data, "'", '"'); // fix headers with single quote + $data = str_replace("'", '"', $data); // fix headers with single quote $valid = true; foreach ($signature as $match) { diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Date.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Date.php index 8f130ad..91c3ee0 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Date.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Date.php @@ -256,7 +256,7 @@ class Date /** * Convert a Unix timestamp to an MS Excel serialized date/time value. * - * @param DateTimeInterface $dateValue Unix Timestamp + * @param int $dateValue Unix Timestamp * * @return float MS Excel serialized date/time value */ diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/JAMA/Matrix.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/JAMA/Matrix.php index 528a025..8ab9cfb 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/JAMA/Matrix.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/JAMA/Matrix.php @@ -1000,7 +1000,7 @@ class Matrix */ public function times(...$args) { - if (count() > 0) { + if (count($args) > 0) { $match = implode(',', array_map('gettype', $args)); switch ($match) { @@ -1094,7 +1094,7 @@ class Matrix */ public function power(...$args) { - if (count() > 0) { + if (count($args) > 0) { $match = implode(',', array_map('gettype', $args)); switch ($match) { diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/BestFit.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/BestFit.php index 79c52c3..d8e63d5 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/BestFit.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/BestFit.php @@ -142,7 +142,7 @@ class BestFit * * @param int $dp Number of places of decimal precision to display * - * @return string + * @return float */ public function getSlope($dp = 0) { @@ -158,7 +158,7 @@ class BestFit * * @param int $dp Number of places of decimal precision to display * - * @return string + * @return float */ public function getSlopeSE($dp = 0) { @@ -174,7 +174,7 @@ class BestFit * * @param int $dp Number of places of decimal precision to display * - * @return string + * @return float */ public function getIntersect($dp = 0) { @@ -190,7 +190,7 @@ class BestFit * * @param int $dp Number of places of decimal precision to display * - * @return string + * @return float */ public function getIntersectSE($dp = 0) { @@ -217,6 +217,13 @@ class BestFit return $this->goodnessOfFit; } + /** + * Return the goodness of fit for this regression. + * + * @param int $dp Number of places of decimal precision to return + * + * @return float + */ public function getGoodnessOfFitPercent($dp = 0) { if ($dp != 0) { @@ -242,6 +249,11 @@ class BestFit return $this->stdevOfResiduals; } + /** + * @param int $dp Number of places of decimal precision to return + * + * @return float + */ public function getSSRegression($dp = 0) { if ($dp != 0) { @@ -251,6 +263,11 @@ class BestFit return $this->SSRegression; } + /** + * @param int $dp Number of places of decimal precision to return + * + * @return float + */ public function getSSResiduals($dp = 0) { if ($dp != 0) { @@ -260,6 +277,11 @@ class BestFit return $this->SSResiduals; } + /** + * @param int $dp Number of places of decimal precision to return + * + * @return float + */ public function getDFResiduals($dp = 0) { if ($dp != 0) { @@ -269,6 +291,11 @@ class BestFit return $this->DFResiduals; } + /** + * @param int $dp Number of places of decimal precision to return + * + * @return float + */ public function getF($dp = 0) { if ($dp != 0) { @@ -278,6 +305,11 @@ class BestFit return $this->f; } + /** + * @param int $dp Number of places of decimal precision to return + * + * @return float + */ public function getCovariance($dp = 0) { if ($dp != 0) { @@ -287,6 +319,11 @@ class BestFit return $this->covariance; } + /** + * @param int $dp Number of places of decimal precision to return + * + * @return float + */ public function getCorrelation($dp = 0) { if ($dp != 0) { @@ -296,6 +333,9 @@ class BestFit return $this->correlation; } + /** + * @return float[] + */ public function getYBestFitValues() { return $this->yBestFitValues; diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PolynomialBestFit.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PolynomialBestFit.php index 6073970..83c9200 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PolynomialBestFit.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Trend/PolynomialBestFit.php @@ -164,7 +164,7 @@ class PolynomialBestFit extends BestFit $this->intersect = array_shift($coefficients); $this->slope = $coefficients; - $this->calculateGoodnessOfFit($x_sum, $y_sum, $xx_sum, $yy_sum, $xy_sum); + $this->calculateGoodnessOfFit($x_sum, $y_sum, $xx_sum, $yy_sum, $xy_sum, 0, 0, 0); foreach ($this->xValues as $xKey => $xValue) { $this->yBestFitValues[$xKey] = $this->getValueOfYForX($xValue); } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php index 659b310..150f71b 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Spreadsheet.php @@ -9,6 +9,17 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; class Spreadsheet { + // Allowable values for workbook window visilbity + const VISIBILITY_VISIBLE = 'visible'; + const VISIBILITY_HIDDEN = 'hidden'; + const VISIBILITY_VERY_HIDDEN = 'veryHidden'; + + private static $workbookViewVisibilityValues = [ + self::VISIBILITY_VISIBLE, + self::VISIBILITY_HIDDEN, + self::VISIBILITY_VERY_HIDDEN, + ]; + /** * Unique ID. * @@ -115,6 +126,75 @@ class Spreadsheet */ private $ribbonBinObjects; + /** + * List of unparsed loaded data for export to same format with better compatibility. + * It has to be minimized when the library start to support currently unparsed data. + * + * @var array + */ + private $unparsedLoadedData = []; + + /** + * Controls visibility of the horizonal scroll bar in the application. + * + * @var bool + */ + private $showHorizontalScroll = true; + + /** + * Controls visibility of the horizonal scroll bar in the application. + * + * @var bool + */ + private $showVerticalScroll = true; + + /** + * Controls visibility of the sheet tabs in the application. + * + * @var bool + */ + private $showSheetTabs = true; + + /** + * Specifies a boolean value that indicates whether the workbook window + * is minimized. + * + * @var bool + */ + private $minimized = false; + + /** + * Specifies a boolean value that indicates whether to group dates + * when presenting the user with filtering optiomd in the user + * interface. + * + * @var bool + */ + private $autoFilterDateGrouping = true; + + /** + * Specifies the index to the first sheet in the book view. + * + * @var int + */ + private $firstSheetIndex = 0; + + /** + * Specifies the visible status of the workbook. + * + * @var string + */ + private $visibility = self::VISIBILITY_VISIBLE; + + /** + * Specifies the ratio between the workbook tabs bar and the horizontal + * scroll bar. TabRatio is assumed to be out of 1000 of the horizontal + * window width. + * + * @var int + */ + private $tabRatio = 600; + /** * The workbook has macros ? * @@ -256,6 +336,32 @@ class Spreadsheet } } + /** + * List of unparsed loaded data for export to same format with better compatibility. + * It has to be minimized when the library start to support currently unparsed data. + * + * @internal + * + * @return array + */ + public function getUnparsedLoadedData() + { + return $this->unparsedLoadedData; + } + + /** + * List of unparsed loaded data for export to same format with better compatibility. + * It has to be minimized when the library start to support currently unparsed data. + * + * @internal + * + * @param array $unparsedLoadedData + */ + public function setUnparsedLoadedData(array $unparsedLoadedData) + { + $this->unparsedLoadedData = $unparsedLoadedData; + } + /** * return the extension of a filename. Internal use for a array_map callback (php<5.3 don't like lambda function). * @@ -1182,4 +1288,203 @@ class Spreadsheet { return $this->uniqueID; } + + /** + * Get the visibility of the horizonal scroll bar in the application. + * + * @return bool True if horizonal scroll bar is visible + */ + public function getShowHorizontalScroll() + { + return $this->showHorizontalScroll; + } + + /** + * Set the visibility of the horizonal scroll bar in the application. + * + * @param bool $showHorizontalScroll True if horizonal scroll bar is visible + */ + public function setShowHorizontalScroll($showHorizontalScroll) + { + $this->showHorizontalScroll = (bool) $showHorizontalScroll; + } + + /** + * Get the visibility of the vertical scroll bar in the application. + * + * @return bool True if vertical scroll bar is visible + */ + public function getShowVerticalScroll() + { + return $this->showVerticalScroll; + } + + /** + * Set the visibility of the vertical scroll bar in the application. + * + * @param bool $showVerticalScroll True if vertical scroll bar is visible + */ + public function setShowVerticalScroll($showVerticalScroll) + { + $this->showVerticalScroll = (bool) $showVerticalScroll; + } + + /** + * Get the visibility of the sheet tabs in the application. + * + * @return bool True if the sheet tabs are visible + */ + public function getShowSheetTabs() + { + return $this->showSheetTabs; + } + + /** + * Set the visibility of the sheet tabs in the application. + * + * @param bool $showSheetTabs True if sheet tabs are visible + */ + public function setShowSheetTabs($showSheetTabs) + { + $this->showSheetTabs = (bool) $showSheetTabs; + } + + /** + * Return whether the workbook window is minimized. + * + * @return bool true if workbook window is minimized + */ + public function getMinimized() + { + return $this->minimized; + } + + /** + * Set whether the workbook window is minimized. + * + * @param bool $minimized true if workbook window is minimized + */ + public function setMinimized($minimized) + { + $this->minimized = (bool) $minimized; + } + + /** + * Return whether to group dates when presenting the user with + * filtering optiomd in the user interface. + * + * @return bool true if workbook window is minimized + */ + public function getAutoFilterDateGrouping() + { + return $this->autoFilterDateGrouping; + } + + /** + * Set whether to group dates when presenting the user with + * filtering optiomd in the user interface. + * + * @param bool $autoFilterDateGrouping true if workbook window is minimized + */ + public function setAutoFilterDateGrouping($autoFilterDateGrouping) + { + $this->autoFilterDateGrouping = (bool) $autoFilterDateGrouping; + } + + /** + * Return the first sheet in the book view. + * + * @return int First sheet in book view + */ + public function getFirstSheetIndex() + { + return $this->firstSheetIndex; + } + + /** + * Set the first sheet in the book view. + * + * @param int $firstSheetIndex First sheet in book view + * + * @throws Exception if the given value is invalid + */ + public function setFirstSheetIndex($firstSheetIndex) + { + if ($firstSheetIndex >= 0) { + $this->firstSheetIndex = (int) $firstSheetIndex; + } else { + throw new Exception('First sheet index must be a positive integer.'); + } + } + + /** + * Return the visibility status of the workbook. + * + * This may be one of the following three values: + * - visibile + * + * @return string Visible status + */ + public function getVisibility() + { + return $this->visibility; + } + + /** + * Set the visibility status of the workbook. + * + * Valid values are: + * - 'visible' (self::VISIBILITY_VISIBLE): + * Workbook window is visible + * - 'hidden' (self::VISIBILITY_HIDDEN): + * Workbook window is hidden, but can be shown by the user + * via the user interface + * - 'veryHidden' (self::VISIBILITY_VERY_HIDDEN): + * Workbook window is hidden and cannot be shown in the + * user interface. + * + * @param string $visibility visibility status of the workbook + * + * @throws Exception if the given value is invalid + */ + public function setVisibility($visibility) + { + if ($visibility === null) { + $visibility = self::VISIBILITY_VISIBLE; + } + + if (in_array($visibility, self::$workbookViewVisibilityValues)) { + $this->visibility = $visibility; + } else { + throw new Exception('Invalid visibility value.'); + } + } + + /** + * Get the ratio between the workbook tabs bar and the horizontal scroll bar. + * TabRatio is assumed to be out of 1000 of the horizontal window width. + * + * @return int Ratio between the workbook tabs bar and the horizontal scroll bar + */ + public function getTabRatio() + { + return $this->tabRatio; + } + + /** + * Set the ratio between the workbook tabs bar and the horizontal scroll bar + * TabRatio is assumed to be out of 1000 of the horizontal window width. + * + * @param int $tabRatio Ratio between the tabs bar and the horizontal scroll bar + * + * @throws Exception if the given value is invalid + */ + public function setTabRatio($tabRatio) + { + if ($tabRatio >= 0 || $tabRatio <= 1000) { + $this->tabRatio = (int) $tabRatio; + } else { + throw new Exception('Tab ratio must be between 0 and 1000.'); + } + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php index 8075af4..63ef20a 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat.php @@ -589,7 +589,7 @@ class NumberFormat extends Supervisor } // Convert any other escaped characters to quoted strings, e.g. (\T to "T") - $format = preg_replace('/(\\\(.))(?=(?:[^"]|"[^"]*")*$)/u', '"${2}"', $format); + $format = preg_replace('/(\\\([^ ]))(?=(?:[^"]|"[^"]*")*$)/u', '"${2}"', $format); // Get the sections, there can be up to four sections, separated with a semi-colon (but only if not a quoted literal) $sections = preg_split('/(;)(?=(?:[^"]|"[^"]*")*$)/u', $format); diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Style.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Style.php index c872976..3a8ebaa 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Style.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/Style.php @@ -333,6 +333,9 @@ class Style extends Supervisor } } + // restore initial cell selection range + $this->getActiveSheet()->getStyle($pRange); + return $this; } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php index 935ac88..b92c986 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/AutoFilter.php @@ -841,7 +841,7 @@ class AutoFilter $vars = get_object_vars($this); foreach ($vars as $key => $value) { if (is_object($value)) { - if ($key == 'workSheet') { + if ($key === 'workSheet') { // Detach from worksheet $this->{$key} = null; } else { diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php index 6489f92..98b6897 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/BaseDrawing.php @@ -2,6 +2,7 @@ namespace PhpOffice\PhpSpreadsheet\Worksheet; +use PhpOffice\PhpSpreadsheet\Cell\Hyperlink; use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException; use PhpOffice\PhpSpreadsheet\IComparable; @@ -98,6 +99,13 @@ class BaseDrawing implements IComparable */ protected $shadow; + /** + * Image hyperlink. + * + * @var null|Hyperlink + */ + private $hyperlink; + /** * Create a new BaseDrawing. */ @@ -501,11 +509,29 @@ class BaseDrawing implements IComparable { $vars = get_object_vars($this); foreach ($vars as $key => $value) { - if (is_object($value)) { + if ($key == 'worksheet') { + $this->worksheet = null; + } elseif (is_object($value)) { $this->$key = clone $value; } else { $this->$key = $value; } } } + + /** + * @param null|Hyperlink $pHyperlink + */ + public function setHyperlink(Hyperlink $pHyperlink = null) + { + $this->hyperlink = $pHyperlink; + } + + /** + * @return null|Hyperlink + */ + public function getHyperlink() + { + return $this->hyperlink; + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php index 156a360..42dcd69 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php @@ -37,6 +37,13 @@ class Worksheet implements IComparable const SHEETSTATE_HIDDEN = 'hidden'; const SHEETSTATE_VERYHIDDEN = 'veryHidden'; + /** + * Maximum 31 characters allowed for sheet title. + * + * @var int + */ + const SHEET_TITLE_MAXIMUM_LENGTH = 31; + /** * Invalid characters in sheet title. * @@ -434,9 +441,9 @@ class Worksheet implements IComparable throw new Exception('Invalid character found in sheet code name'); } - // Maximum 31 characters allowed for sheet title - if ($CharCount > 31) { - throw new Exception('Maximum 31 characters allowed in sheet code name.'); + // Enforce maximum characters allowed for sheet title + if ($CharCount > self::SHEET_TITLE_MAXIMUM_LENGTH) { + throw new Exception('Maximum ' . self::SHEET_TITLE_MAXIMUM_LENGTH . ' characters allowed in sheet code name.'); } return $pValue; @@ -458,9 +465,9 @@ class Worksheet implements IComparable throw new Exception('Invalid character found in sheet title'); } - // Maximum 31 characters allowed for sheet title - if (Shared\StringHelper::countCharacters($pValue) > 31) { - throw new Exception('Maximum 31 characters allowed in sheet title.'); + // Enforce maximum characters allowed for sheet title + if (Shared\StringHelper::countCharacters($pValue) > self::SHEET_TITLE_MAXIMUM_LENGTH) { + throw new Exception('Maximum ' . self::SHEET_TITLE_MAXIMUM_LENGTH . ' characters allowed in sheet title.'); } return $pValue; @@ -2956,13 +2963,14 @@ class Worksheet implements IComparable $newCollection = $this->cellCollection->cloneCellCollection($this); $this->cellCollection = $newCollection; } elseif ($key == 'drawingCollection') { - $newCollection = new ArrayObject(); - foreach ($this->drawingCollection as $id => $item) { + $currentCollection = $this->drawingCollection; + $this->drawingCollection = new ArrayObject(); + foreach ($currentCollection as $item) { if (is_object($item)) { - $newCollection[$id] = clone $this->drawingCollection[$id]; + $newDrawing = clone $item; + $newDrawing->setWorksheet($this); } } - $this->drawingCollection = $newCollection; } elseif (($key == 'autoFilter') && ($this->autoFilter instanceof AutoFilter)) { $newAutoFilter = clone $this->autoFilter; $this->autoFilter = $newAutoFilter; diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php index 48df37e..351e54d 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xls/Worksheet.php @@ -827,7 +827,7 @@ class Worksheet extends BIFFwriter $formula = substr($formula, 1); } else { // Error handling - $this->writeString($row, $col, 'Unrecognised character for formula'); + $this->writeString($row, $col, 'Unrecognised character for formula', 0); return -1; } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php index 0982c06..dd19021 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php @@ -137,9 +137,9 @@ class Xlsx extends BaseWriter } $hashTablesArray = ['stylesConditionalHashTable', 'fillHashTable', 'fontHashTable', - 'bordersHashTable', 'numFmtHashTable', 'drawingHashTable', - 'styleHashTable', - ]; + 'bordersHashTable', 'numFmtHashTable', 'drawingHashTable', + 'styleHashTable', + ]; // Set HashTable variables foreach ($hashTablesArray as $tableName) { @@ -290,12 +290,26 @@ class Xlsx extends BaseWriter } } - $chartRef1 = $chartRef2 = 0; + $chartRef1 = 0; // Add worksheet relationships (drawings, ...) for ($i = 0; $i < $this->spreadSheet->getSheetCount(); ++$i) { // Add relationships $zip->addFromString('xl/worksheets/_rels/sheet' . ($i + 1) . '.xml.rels', $this->getWriterPart('Rels')->writeWorksheetRelationships($this->spreadSheet->getSheet($i), ($i + 1), $this->includeCharts)); + // Add unparsedLoadedData + $sheetCodeName = $this->spreadSheet->getSheet($i)->getCodeName(); + $unparsedLoadedData = $this->spreadSheet->getUnparsedLoadedData(); + if (isset($unparsedLoadedData['sheets'][$sheetCodeName]['ctrlProps'])) { + foreach ($unparsedLoadedData['sheets'][$sheetCodeName]['ctrlProps'] as $ctrlProp) { + $zip->addFromString($ctrlProp['filePath'], $ctrlProp['content']); + } + } + if (isset($unparsedLoadedData['sheets'][$sheetCodeName]['printerSettings'])) { + foreach ($unparsedLoadedData['sheets'][$sheetCodeName]['printerSettings'] as $ctrlProp) { + $zip->addFromString($ctrlProp['filePath'], $ctrlProp['content']); + } + } + $drawings = $this->spreadSheet->getSheet($i)->getDrawingCollection(); $drawingCount = count($drawings); if ($this->includeCharts) { @@ -307,6 +321,9 @@ class Xlsx extends BaseWriter // Drawing relationships $zip->addFromString('xl/drawings/_rels/drawing' . ($i + 1) . '.xml.rels', $this->getWriterPart('Rels')->writeDrawingRelationships($this->spreadSheet->getSheet($i), $chartRef1, $this->includeCharts)); + // Drawings + $zip->addFromString('xl/drawings/drawing' . ($i + 1) . '.xml', $this->getWriterPart('Drawing')->writeDrawings($this->spreadSheet->getSheet($i), $this->includeCharts)); + } elseif (isset($unparsedLoadedData['sheets'][$sheetCodeName]['drawingAlternateContents'])) { // Drawings $zip->addFromString('xl/drawings/drawing' . ($i + 1) . '.xml', $this->getWriterPart('Drawing')->writeDrawings($this->spreadSheet->getSheet($i), $this->includeCharts)); } @@ -320,6 +337,13 @@ class Xlsx extends BaseWriter $zip->addFromString('xl/comments' . ($i + 1) . '.xml', $this->getWriterPart('Comments')->writeComments($this->spreadSheet->getSheet($i))); } + // Add unparsed relationship parts + if (isset($unparsedLoadedData['sheets'][$this->spreadSheet->getSheet($i)->getCodeName()]['vmlDrawings'])) { + foreach ($unparsedLoadedData['sheets'][$this->spreadSheet->getSheet($i)->getCodeName()]['vmlDrawings'] as $vmlDrawing) { + $zip->addFromString($vmlDrawing['filePath'], $vmlDrawing['content']); + } + } + // Add header/footer relationship parts if (count($this->spreadSheet->getSheet($i)->getHeaderFooter()->getImages()) > 0) { // VML Drawings diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php index a34d346..6b22d71 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php @@ -57,7 +57,8 @@ class ContentTypes extends WriterPart // Yes : not standard content but "macroEnabled" $this->writeOverrideContentType($objWriter, '/xl/workbook.xml', 'application/vnd.ms-excel.sheet.macroEnabled.main+xml'); //... and define a new type for the VBA project - $this->writeDefaultContentType($objWriter, 'bin', 'application/vnd.ms-office.vbaProject'); + // Better use Override, because we can use 'bin' also for xl\printerSettings\printerSettings1.bin + $this->writeOverrideContentType($objWriter, '/xl/vbaProject.bin', 'application/vnd.ms-office.vbaProject'); if ($spreadsheet->hasMacrosCertificate()) { // signed macros ? // Yes : add needed information @@ -88,14 +89,16 @@ class ContentTypes extends WriterPart $this->writeOverrideContentType($objWriter, '/xl/sharedStrings.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'); // Add worksheet relationship content types + $unparsedLoadedData = $spreadsheet->getUnparsedLoadedData(); $chart = 1; for ($i = 0; $i < $sheetCount; ++$i) { $drawings = $spreadsheet->getSheet($i)->getDrawingCollection(); $drawingCount = count($drawings); $chartCount = ($includeCharts) ? $spreadsheet->getSheet($i)->getChartCount() : 0; + $hasUnparsedDrawing = isset($unparsedLoadedData['sheets'][$spreadsheet->getSheet($i)->getCodeName()]['drawingOriginalIds']); // We need a drawing relationship for the worksheet if we have either drawings or charts - if (($drawingCount > 0) || ($chartCount > 0)) { + if (($drawingCount > 0) || ($chartCount > 0) || $hasUnparsedDrawing) { $this->writeOverrideContentType($objWriter, '/xl/drawings/drawing' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.drawing+xml'); } @@ -160,6 +163,20 @@ class ContentTypes extends WriterPart } } + // unparsed defaults + if (isset($unparsedLoadedData['default_content_types'])) { + foreach ($unparsedLoadedData['default_content_types'] as $extName => $contentType) { + $this->writeDefaultContentType($objWriter, $extName, $contentType); + } + } + + // unparsed overrides + if (isset($unparsedLoadedData['override_content_types'])) { + foreach ($unparsedLoadedData['override_content_types'] as $partName => $overrideType) { + $this->writeOverrideContentType($objWriter, $partName, $overrideType); + } + } + $objWriter->endElement(); // Return diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Drawing.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Drawing.php index a8bd8c0..08256a1 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Drawing.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Drawing.php @@ -43,7 +43,12 @@ class Drawing extends WriterPart $i = 1; $iterator = $pWorksheet->getDrawingCollection()->getIterator(); while ($iterator->valid()) { - $this->writeDrawing($objWriter, $iterator->current(), $i); + /** @var BaseDrawing $pDrawing */ + $pDrawing = $iterator->current(); + $pRelationId = $i; + $hlinkClickId = $pDrawing->getHyperlink() === null ? null : ++$i; + + $this->writeDrawing($objWriter, $pDrawing, $pRelationId, $hlinkClickId); $iterator->next(); ++$i; @@ -59,6 +64,14 @@ class Drawing extends WriterPart } } + // unparsed AlternateContent + $unparsedLoadedData = $pWorksheet->getParent()->getUnparsedLoadedData(); + if (isset($unparsedLoadedData['sheets'][$pWorksheet->getCodeName()]['drawingAlternateContents'])) { + foreach ($unparsedLoadedData['sheets'][$pWorksheet->getCodeName()]['drawingAlternateContents'] as $drawingAlternateContent) { + $objWriter->writeRaw($drawingAlternateContent); + } + } + $objWriter->endElement(); // Return @@ -142,10 +155,11 @@ class Drawing extends WriterPart * @param XMLWriter $objWriter XML Writer * @param BaseDrawing $pDrawing * @param int $pRelationId + * @param null|int $hlinkClickId * * @throws WriterException */ - public function writeDrawing(XMLWriter $objWriter, BaseDrawing $pDrawing, $pRelationId = -1) + public function writeDrawing(XMLWriter $objWriter, BaseDrawing $pDrawing, $pRelationId = -1, $hlinkClickId = null) { if ($pRelationId >= 0) { // xdr:oneCellAnchor @@ -179,6 +193,10 @@ class Drawing extends WriterPart $objWriter->writeAttribute('id', $pRelationId); $objWriter->writeAttribute('name', $pDrawing->getName()); $objWriter->writeAttribute('descr', $pDrawing->getDescription()); + + //a:hlinkClick + $this->writeHyperLinkDrawing($objWriter, $hlinkClickId); + $objWriter->endElement(); // xdr:cNvPicPr @@ -482,4 +500,20 @@ class Drawing extends WriterPart return $aDrawings; } + + /** + * @param XMLWriter $objWriter + * @param null|int $hlinkClickId + */ + private function writeHyperLinkDrawing(XMLWriter $objWriter, $hlinkClickId) + { + if ($hlinkClickId === null) { + return; + } + + $objWriter->startElement('a:hlinkClick'); + $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $objWriter->writeAttribute('r:id', 'rId' . $hlinkClickId); + $objWriter->endElement(); + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Rels.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Rels.php index e5d2aa5..76c196b 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Rels.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Rels.php @@ -195,18 +195,31 @@ class Rels extends WriterPart // Write drawing relationships? $d = 0; + $drawingOriginalIds = []; + $unparsedLoadedData = $pWorksheet->getParent()->getUnparsedLoadedData(); + if (isset($unparsedLoadedData['sheets'][$pWorksheet->getCodeName()]['drawingOriginalIds'])) { + $drawingOriginalIds = $unparsedLoadedData['sheets'][$pWorksheet->getCodeName()]['drawingOriginalIds']; + } + if ($includeCharts) { $charts = $pWorksheet->getChartCollection(); } else { $charts = []; } - if (($pWorksheet->getDrawingCollection()->count() > 0) || - (count($charts) > 0)) { + + if (($pWorksheet->getDrawingCollection()->count() > 0) || (count($charts) > 0) || $drawingOriginalIds) { + $relPath = '../drawings/drawing' . $pWorksheetId . '.xml'; + $rId = ++$d; + + if (isset($drawingOriginalIds[$relPath])) { + $rId = (int) (substr($drawingOriginalIds[$relPath], 3)); + } + $this->writeRelationship( $objWriter, - ++$d, + $rId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', - '../drawings/drawing' . $pWorksheetId . '.xml' + $relPath ); } @@ -255,11 +268,32 @@ class Rels extends WriterPart ); } + $this->writeUnparsedRelationship($pWorksheet, $objWriter, 'ctrlProps', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp'); + $this->writeUnparsedRelationship($pWorksheet, $objWriter, 'vmlDrawings', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing'); + $this->writeUnparsedRelationship($pWorksheet, $objWriter, 'printerSettings', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings'); + $objWriter->endElement(); return $objWriter->getData(); } + private function writeUnparsedRelationship(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $pWorksheet, XMLWriter $objWriter, $relationship, $type) + { + $unparsedLoadedData = $pWorksheet->getParent()->getUnparsedLoadedData(); + if (!isset($unparsedLoadedData['sheets'][$pWorksheet->getCodeName()][$relationship])) { + return; + } + + foreach ($unparsedLoadedData['sheets'][$pWorksheet->getCodeName()][$relationship] as $rId => $value) { + $this->writeRelationship( + $objWriter, + $rId, + $type, + $value['relFilePath'] + ); + } + } + /** * Write drawing relationships to XML format. * @@ -295,12 +329,16 @@ class Rels extends WriterPart if ($iterator->current() instanceof \PhpOffice\PhpSpreadsheet\Worksheet\Drawing || $iterator->current() instanceof MemoryDrawing) { // Write relationship for image drawing + /** @var \PhpOffice\PhpSpreadsheet\Worksheet\Drawing $drawing */ + $drawing = $iterator->current(); $this->writeRelationship( $objWriter, $i, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', - '../media/' . str_replace(' ', '', $iterator->current()->getIndexedFilename()) + '../media/' . str_replace(' ', '', $drawing->getIndexedFilename()) ); + + $i = $this->writeDrawingHyperLink($objWriter, $drawing, $i); } $iterator->next(); @@ -398,4 +436,31 @@ class Rels extends WriterPart throw new WriterException('Invalid parameters passed.'); } } + + /** + * @param $objWriter + * @param \PhpOffice\PhpSpreadsheet\Worksheet\Drawing $drawing + * @param $i + * + * @throws WriterException + * + * @return int + */ + private function writeDrawingHyperLink($objWriter, $drawing, $i) + { + if ($drawing->getHyperlink() === null) { + return $i; + } + + ++$i; + $this->writeRelationship( + $objWriter, + $i, + 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', + $drawing->getHyperlink()->getUrl(), + $drawing->getHyperlink()->getTypeHyperlink() + ); + + return $i; + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php index e9de179..43a1916 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php @@ -117,14 +117,14 @@ class Workbook extends WriterPart $objWriter->startElement('workbookView'); $objWriter->writeAttribute('activeTab', $spreadsheet->getActiveSheetIndex()); - $objWriter->writeAttribute('autoFilterDateGrouping', '1'); - $objWriter->writeAttribute('firstSheet', '0'); - $objWriter->writeAttribute('minimized', '0'); - $objWriter->writeAttribute('showHorizontalScroll', '1'); - $objWriter->writeAttribute('showSheetTabs', '1'); - $objWriter->writeAttribute('showVerticalScroll', '1'); - $objWriter->writeAttribute('tabRatio', '600'); - $objWriter->writeAttribute('visibility', 'visible'); + $objWriter->writeAttribute('autoFilterDateGrouping', ($spreadsheet->getAutoFilterDateGrouping() ? 'true' : 'false')); + $objWriter->writeAttribute('firstSheet', $spreadsheet->getFirstSheetIndex()); + $objWriter->writeAttribute('minimized', ($spreadsheet->getMinimized() ? 'true' : 'false')); + $objWriter->writeAttribute('showHorizontalScroll', ($spreadsheet->getShowHorizontalScroll() ? 'true' : 'false')); + $objWriter->writeAttribute('showSheetTabs', ($spreadsheet->getShowSheetTabs() ? 'true' : 'false')); + $objWriter->writeAttribute('showVerticalScroll', ($spreadsheet->getShowVerticalScroll() ? 'true' : 'false')); + $objWriter->writeAttribute('tabRatio', $spreadsheet->getTabRatio()); + $objWriter->writeAttribute('visibility', $spreadsheet->getVisibility()); $objWriter->endElement(); @@ -175,6 +175,7 @@ class Workbook extends WriterPart // fullCalcOnLoad isn't needed if we've recalculating for the save $objWriter->writeAttribute('calcCompleted', ($recalcRequired) ? 1 : 0); $objWriter->writeAttribute('fullCalcOnLoad', ($recalcRequired) ? 0 : 1); + $objWriter->writeAttribute('forceFullCalc', ($recalcRequired) ? 0 : 1); $objWriter->endElement(); } diff --git a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php index f551c60..cb46a12 100644 --- a/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php +++ b/inc/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php @@ -51,6 +51,12 @@ class Worksheet extends WriterPart $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'); $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $objWriter->writeAttribute('xmlns:xdr', 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing'); + $objWriter->writeAttribute('xmlns:x14', 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main'); + $objWriter->writeAttribute('xmlns:mc', 'http://schemas.openxmlformats.org/markup-compatibility/2006'); + $objWriter->writeAttribute('mc:Ignorable', 'x14ac'); + $objWriter->writeAttribute('xmlns:x14ac', 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'); + // sheetPr $this->writeSheetPr($objWriter, $pSheet); @@ -114,6 +120,9 @@ class Worksheet extends WriterPart // LegacyDrawingHF $this->writeLegacyDrawingHF($objWriter, $pSheet); + // AlternateContent + $this->writeAlternateContent($objWriter, $pSheet); + $objWriter->endElement(); // Return @@ -237,6 +246,7 @@ class Worksheet extends WriterPart } $activeCell = $pSheet->getActiveCell(); + $sqref = $pSheet->getSelectedCells(); // Pane $pane = ''; @@ -248,6 +258,7 @@ class Worksheet extends WriterPart $topLeftCell = $pSheet->getTopLeftCell(); $activeCell = $topLeftCell; + $sqref = $topLeftCell; // pane $pane = 'topRight'; @@ -283,7 +294,7 @@ class Worksheet extends WriterPart $objWriter->writeAttribute('pane', $pane); } $objWriter->writeAttribute('activeCell', $activeCell); - $objWriter->writeAttribute('sqref', $activeCell); + $objWriter->writeAttribute('sqref', $sqref); $objWriter->endElement(); $objWriter->endElement(); @@ -843,6 +854,11 @@ class Worksheet extends WriterPart $objWriter->writeAttribute('useFirstPageNumber', '1'); } + $getUnparsedLoadedData = $pSheet->getParent()->getUnparsedLoadedData(); + if (isset($getUnparsedLoadedData['sheets'][$pSheet->getCodeName()]['pageSetupRelId'])) { + $objWriter->writeAttribute('r:id', $getUnparsedLoadedData['sheets'][$pSheet->getCodeName()]['pageSetupRelId']); + } + $objWriter->endElement(); } @@ -1142,16 +1158,27 @@ class Worksheet extends WriterPart * @param PhpspreadsheetWorksheet $pSheet Worksheet * @param bool $includeCharts Flag indicating if we should include drawing details for charts */ - private function writeDrawings(XMLWriter $objWriter = null, PhpspreadsheetWorksheet $pSheet = null, $includeCharts = false) + private function writeDrawings(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet, $includeCharts = false) { + $unparsedLoadedData = $pSheet->getParent()->getUnparsedLoadedData(); + $hasUnparsedDrawing = isset($unparsedLoadedData['sheets'][$pSheet->getCodeName()]['drawingOriginalIds']); $chartCount = ($includeCharts) ? $pSheet->getChartCollection()->count() : 0; - // If sheet contains drawings, add the relationships - if (($pSheet->getDrawingCollection()->count() > 0) || - ($chartCount > 0)) { - $objWriter->startElement('drawing'); - $objWriter->writeAttribute('r:id', 'rId1'); - $objWriter->endElement(); + if ($chartCount == 0 && $pSheet->getDrawingCollection()->count() == 0 && !$hasUnparsedDrawing) { + return; } + + // If sheet contains drawings, add the relationships + $objWriter->startElement('drawing'); + + $rId = 'rId1'; + if (isset($unparsedLoadedData['sheets'][$pSheet->getCodeName()]['drawingOriginalIds'])) { + $drawingOriginalIds = $unparsedLoadedData['sheets'][$pSheet->getCodeName()]['drawingOriginalIds']; + // take first. In future can be overriten + $rId = reset($drawingOriginalIds); + } + + $objWriter->writeAttribute('r:id', $rId); + $objWriter->endElement(); } /** @@ -1185,4 +1212,15 @@ class Worksheet extends WriterPart $objWriter->endElement(); } } + + private function writeAlternateContent(XMLWriter $objWriter, PhpspreadsheetWorksheet $pSheet) + { + if (empty($pSheet->getParent()->getUnparsedLoadedData()['sheets'][$pSheet->getCodeName()]['AlternateContents'])) { + return; + } + + foreach ($pSheet->getParent()->getUnparsedLoadedData()['sheets'][$pSheet->getCodeName()]['AlternateContents'] as $alternateContent) { + $objWriter->writeRaw($alternateContent); + } + } } diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php new file mode 100644 index 0000000..871b6ef --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/CalculationTest.php @@ -0,0 +1,120 @@ +setLocale('en_us'); + } + + /** + * @dataProvider providerBinaryComparisonOperation + * + * @param mixed $formula + * @param mixed $expectedResultExcel + * @param mixed $expectedResultOpenOffice + */ + public function testBinaryComparisonOperation($formula, $expectedResultExcel, $expectedResultOpenOffice) + { + Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL); + $resultExcel = Calculation::getInstance()->_calculateFormulaValue($formula); + self::assertEquals($expectedResultExcel, $resultExcel, 'should be Excel compatible'); + + Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); + $resultOpenOffice = Calculation::getInstance()->_calculateFormulaValue($formula); + self::assertEquals($expectedResultOpenOffice, $resultOpenOffice, 'should be OpenOffice compatible'); + } + + public function providerBinaryComparisonOperation() + { + return require 'data/CalculationBinaryComparisonOperation.php'; + } + + /** + * @dataProvider providerGetFunctions + * + * @param string $category + * @param array|string $functionCall + * @param string $argumentCount + */ + public function testGetFunctions($category, $functionCall, $argumentCount) + { + self::assertInternalType('callable', $functionCall); + } + + public function providerGetFunctions() + { + return Calculation::getInstance()->getFunctions(); + } + + public function testIsImplemented() + { + $calculation = Calculation::getInstance(); + self::assertFalse($calculation->isImplemented('non-existing-function')); + self::assertFalse($calculation->isImplemented('AREAS')); + self::assertTrue($calculation->isImplemented('coUNt')); + self::assertTrue($calculation->isImplemented('abs')); + } + + /** + * @dataProvider providerCanLoadAllSupportedLocales + * + * @param string $locale + */ + public function testCanLoadAllSupportedLocales($locale) + { + $calculation = Calculation::getInstance(); + self::assertTrue($calculation->setLocale($locale)); + } + + public function providerCanLoadAllSupportedLocales() + { + return [ + ['bg'], + ['cs'], + ['da'], + ['de'], + ['en_us'], + ['es'], + ['fi'], + ['fr'], + ['hu'], + ['it'], + ['nl'], + ['no'], + ['pl'], + ['pt'], + ['pt_br'], + ['ru'], + ['sv'], + ['tr'], + ]; + } + + public function testDoesHandleXlfnFunctions() + { + $calculation = Calculation::getInstance(); + + $tree = $calculation->parseFormula('=_xlfn.ISFORMULA(A1)'); + self::assertCount(3, $tree); + $function = $tree[2]; + self::assertEquals('Function', $function['type']); + + $tree = $calculation->parseFormula('=_xlfn.STDEV.S(A1:B2)'); + self::assertCount(5, $tree); + $function = $tree[4]; + self::assertEquals('Function', $function['type']); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/DateTimeTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/DateTimeTest.php new file mode 100644 index 0000000..a6d781a --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/DateTimeTest.php @@ -0,0 +1,487 @@ +format('d-M-Y'), '31-Jan-2012'); + } + + public function testDATEwith1904Calendar() + { + Date::setExcelCalendar(Date::CALENDAR_MAC_1904); + $result = DateTime::DATE(1918, 11, 11); + Date::setExcelCalendar(Date::CALENDAR_WINDOWS_1900); + self::assertEquals($result, 5428); + } + + public function testDATEwith1904CalendarError() + { + Date::setExcelCalendar(Date::CALENDAR_MAC_1904); + $result = DateTime::DATE(1901, 1, 31); + Date::setExcelCalendar(Date::CALENDAR_WINDOWS_1900); + self::assertEquals($result, '#NUM!'); + } + + /** + * @dataProvider providerDATEVALUE + * + * @param mixed $expectedResult + */ + public function testDATEVALUE($expectedResult, ...$args) + { + $result = DateTime::DATEVALUE(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerDATEVALUE() + { + return require 'data/Calculation/DateTime/DATEVALUE.php'; + } + + public function testDATEVALUEtoPHP() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_NUMERIC); + $result = DateTime::DATEVALUE('2012-1-31'); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + self::assertEquals(1327968000, $result, null, 1E-8); + } + + public function testDATEVALUEtoPHPObject() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_OBJECT); + $result = DateTime::DATEVALUE('2012-1-31'); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + // Must return an object... + self::assertInternalType('object', $result); + // ... of the correct type + self::assertTrue(is_a($result, 'DateTime')); + // ... with the correct value + self::assertEquals($result->format('d-M-Y'), '31-Jan-2012'); + } + + /** + * @dataProvider providerYEAR + * + * @param mixed $expectedResult + */ + public function testYEAR($expectedResult, ...$args) + { + $result = DateTime::YEAR(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerYEAR() + { + return require 'data/Calculation/DateTime/YEAR.php'; + } + + /** + * @dataProvider providerMONTH + * + * @param mixed $expectedResult + */ + public function testMONTH($expectedResult, ...$args) + { + $result = DateTime::MONTHOFYEAR(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerMONTH() + { + return require 'data/Calculation/DateTime/MONTH.php'; + } + + /** + * @dataProvider providerWEEKNUM + * + * @param mixed $expectedResult + */ + public function testWEEKNUM($expectedResult, ...$args) + { + $result = DateTime::WEEKNUM(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerWEEKNUM() + { + return require 'data/Calculation/DateTime/WEEKNUM.php'; + } + + /** + * @dataProvider providerISOWEEKNUM + * + * @param mixed $expectedResult + * @param mixed $dateValue + */ + public function testISOWEEKNUM($expectedResult, $dateValue) + { + $result = DateTime::ISOWEEKNUM($dateValue); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerISOWEEKNUM() + { + return require 'data/Calculation/DateTime/ISOWEEKNUM.php'; + } + + /** + * @dataProvider providerWEEKDAY + * + * @param mixed $expectedResult + */ + public function testWEEKDAY($expectedResult, ...$args) + { + $result = DateTime::WEEKDAY(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerWEEKDAY() + { + return require 'data/Calculation/DateTime/WEEKDAY.php'; + } + + /** + * @dataProvider providerDAY + * + * @param mixed $expectedResultExcel + * @param mixed $expectedResultOpenOffice + */ + public function testDAY($expectedResultExcel, $expectedResultOpenOffice, ...$args) + { + $resultExcel = DateTime::DAYOFMONTH(...$args); + self::assertEquals($expectedResultExcel, $resultExcel, null, 1E-8); + + Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); + $resultOpenOffice = DateTime::DAYOFMONTH(...$args); + self::assertEquals($expectedResultOpenOffice, $resultOpenOffice, null, 1E-8); + } + + public function providerDAY() + { + return require 'data/Calculation/DateTime/DAY.php'; + } + + /** + * @dataProvider providerTIME + * + * @param mixed $expectedResult + */ + public function testTIME($expectedResult, ...$args) + { + $result = DateTime::TIME(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerTIME() + { + return require 'data/Calculation/DateTime/TIME.php'; + } + + public function testTIMEtoPHP() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_NUMERIC); + $result = DateTime::TIME(7, 30, 20); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + self::assertEquals(27020, $result, null, 1E-8); + } + + public function testTIMEtoPHPObject() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_OBJECT); + $result = DateTime::TIME(7, 30, 20); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + // Must return an object... + self::assertInternalType('object', $result); + // ... of the correct type + self::assertTrue(is_a($result, 'DateTime')); + // ... with the correct value + self::assertEquals($result->format('H:i:s'), '07:30:20'); + } + + /** + * @dataProvider providerTIMEVALUE + * + * @param mixed $expectedResult + */ + public function testTIMEVALUE($expectedResult, ...$args) + { + $result = DateTime::TIMEVALUE(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerTIMEVALUE() + { + return require 'data/Calculation/DateTime/TIMEVALUE.php'; + } + + public function testTIMEVALUEtoPHP() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_NUMERIC); + $result = DateTime::TIMEVALUE('7:30:20'); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + self::assertEquals(23420, $result, null, 1E-8); + } + + public function testTIMEVALUEtoPHPObject() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_OBJECT); + $result = DateTime::TIMEVALUE('7:30:20'); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + // Must return an object... + self::assertInternalType('object', $result); + // ... of the correct type + self::assertTrue(is_a($result, 'DateTime')); + // ... with the correct value + self::assertEquals($result->format('H:i:s'), '07:30:20'); + } + + /** + * @dataProvider providerHOUR + * + * @param mixed $expectedResult + */ + public function testHOUR($expectedResult, ...$args) + { + $result = DateTime::HOUROFDAY(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerHOUR() + { + return require 'data/Calculation/DateTime/HOUR.php'; + } + + /** + * @dataProvider providerMINUTE + * + * @param mixed $expectedResult + */ + public function testMINUTE($expectedResult, ...$args) + { + $result = DateTime::MINUTE(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerMINUTE() + { + return require 'data/Calculation/DateTime/MINUTE.php'; + } + + /** + * @dataProvider providerSECOND + * + * @param mixed $expectedResult + */ + public function testSECOND($expectedResult, ...$args) + { + $result = DateTime::SECOND(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerSECOND() + { + return require 'data/Calculation/DateTime/SECOND.php'; + } + + /** + * @dataProvider providerNETWORKDAYS + * + * @param mixed $expectedResult + */ + public function testNETWORKDAYS($expectedResult, ...$args) + { + $result = DateTime::NETWORKDAYS(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerNETWORKDAYS() + { + return require 'data/Calculation/DateTime/NETWORKDAYS.php'; + } + + /** + * @dataProvider providerWORKDAY + * + * @param mixed $expectedResult + */ + public function testWORKDAY($expectedResult, ...$args) + { + $result = DateTime::WORKDAY(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerWORKDAY() + { + return require 'data/Calculation/DateTime/WORKDAY.php'; + } + + /** + * @dataProvider providerEDATE + * + * @param mixed $expectedResult + */ + public function testEDATE($expectedResult, ...$args) + { + $result = DateTime::EDATE(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerEDATE() + { + return require 'data/Calculation/DateTime/EDATE.php'; + } + + public function testEDATEtoPHP() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_NUMERIC); + $result = DateTime::EDATE('2012-1-26', -1); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + self::assertEquals(1324857600, $result, null, 1E-8); + } + + public function testEDATEtoPHPObject() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_OBJECT); + $result = DateTime::EDATE('2012-1-26', -1); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + // Must return an object... + self::assertInternalType('object', $result); + // ... of the correct type + self::assertTrue(is_a($result, 'DateTime')); + // ... with the correct value + self::assertEquals($result->format('d-M-Y'), '26-Dec-2011'); + } + + /** + * @dataProvider providerEOMONTH + * + * @param mixed $expectedResult + */ + public function testEOMONTH($expectedResult, ...$args) + { + $result = DateTime::EOMONTH(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerEOMONTH() + { + return require 'data/Calculation/DateTime/EOMONTH.php'; + } + + public function testEOMONTHtoPHP() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_NUMERIC); + $result = DateTime::EOMONTH('2012-1-26', -1); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + self::assertEquals(1325289600, $result, null, 1E-8); + } + + public function testEOMONTHtoPHPObject() + { + Functions::setReturnDateType(Functions::RETURNDATE_PHP_OBJECT); + $result = DateTime::EOMONTH('2012-1-26', -1); + Functions::setReturnDateType(Functions::RETURNDATE_EXCEL); + // Must return an object... + self::assertInternalType('object', $result); + // ... of the correct type + self::assertTrue(is_a($result, 'DateTime')); + // ... with the correct value + self::assertEquals($result->format('d-M-Y'), '31-Dec-2011'); + } + + /** + * @dataProvider providerDATEDIF + * + * @param mixed $expectedResult + */ + public function testDATEDIF($expectedResult, ...$args) + { + $result = DateTime::DATEDIF(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerDATEDIF() + { + return require 'data/Calculation/DateTime/DATEDIF.php'; + } + + /** + * @dataProvider providerDAYS360 + * + * @param mixed $expectedResult + */ + public function testDAYS360($expectedResult, ...$args) + { + $result = DateTime::DAYS360(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerDAYS360() + { + return require 'data/Calculation/DateTime/DAYS360.php'; + } + + /** + * @dataProvider providerYEARFRAC + * + * @param mixed $expectedResult + */ + public function testYEARFRAC($expectedResult, ...$args) + { + $result = DateTime::YEARFRAC(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerYEARFRAC() + { + return require 'data/Calculation/DateTime/YEARFRAC.php'; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/EngineeringTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/EngineeringTest.php new file mode 100644 index 0000000..09da20c --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/EngineeringTest.php @@ -0,0 +1,1009 @@ +complexAssert = new ComplexAssert(); + Functions::setCompatibilityMode(Functions::COMPATIBILITY_EXCEL); + } + + public function tearDown() + { + $this->complexAssert = null; + } + + /** + * @dataProvider providerBESSELI + * + * @param mixed $expectedResult + */ + public function testBESSELI($expectedResult, ...$args) + { + $result = Engineering::BESSELI(...$args); + self::assertEquals($expectedResult, $result, null, self::BESSEL_PRECISION); + } + + public function providerBESSELI() + { + return require 'data/Calculation/Engineering/BESSELI.php'; + } + + /** + * @dataProvider providerBESSELJ + * + * @param mixed $expectedResult + */ + public function testBESSELJ($expectedResult, ...$args) + { + $result = Engineering::BESSELJ(...$args); + self::assertEquals($expectedResult, $result, null, self::BESSEL_PRECISION); + } + + public function providerBESSELJ() + { + return require 'data/Calculation/Engineering/BESSELJ.php'; + } + + /** + * @dataProvider providerBESSELK + * + * @param mixed $expectedResult + */ + public function testBESSELK($expectedResult, ...$args) + { + $result = Engineering::BESSELK(...$args); + self::assertEquals($expectedResult, $result, null, self::BESSEL_PRECISION); + } + + public function providerBESSELK() + { + return require 'data/Calculation/Engineering/BESSELK.php'; + } + + /** + * @dataProvider providerBESSELY + * + * @param mixed $expectedResult + */ + public function testBESSELY($expectedResult, ...$args) + { + $result = Engineering::BESSELY(...$args); + self::assertEquals($expectedResult, $result, null, self::BESSEL_PRECISION); + } + + public function providerBESSELY() + { + return require 'data/Calculation/Engineering/BESSELY.php'; + } + + /** + * @dataProvider providerCOMPLEX + * + * @param mixed $expectedResult + */ + public function testParseComplex() + { + list($real, $imaginary, $suffix) = [1.23e-4, 5.67e+8, 'j']; + + $result = Engineering::parseComplex('1.23e-4+5.67e+8j'); + $this->assertArrayHasKey('real', $result); + $this->assertEquals($real, $result['real']); + $this->assertArrayHasKey('imaginary', $result); + $this->assertEquals($imaginary, $result['imaginary']); + $this->assertArrayHasKey('suffix', $result); + $this->assertEquals($suffix, $result['suffix']); + } + + /** + * @dataProvider providerCOMPLEX + * + * @param mixed $expectedResult + */ + public function testCOMPLEX($expectedResult, ...$args) + { + $result = Engineering::COMPLEX(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerCOMPLEX() + { + return require 'data/Calculation/Engineering/COMPLEX.php'; + } + + /** + * @dataProvider providerIMAGINARY + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMAGINARY($expectedResult, $value) + { + $result = Engineering::IMAGINARY($value); + self::assertEquals($expectedResult, $result, null, self::COMPLEX_PRECISION); + } + + public function providerIMAGINARY() + { + return require 'data/Calculation/Engineering/IMAGINARY.php'; + } + + /** + * @dataProvider providerIMREAL + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMREAL($expectedResult, $value) + { + $result = Engineering::IMREAL($value); + self::assertEquals($expectedResult, $result, null, self::COMPLEX_PRECISION); + } + + public function providerIMREAL() + { + return require 'data/Calculation/Engineering/IMREAL.php'; + } + + /** + * @dataProvider providerIMABS + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMABS($expectedResult, $value) + { + $result = Engineering::IMABS($value); + self::assertEquals($expectedResult, $result, null, self::COMPLEX_PRECISION); + } + + public function providerIMABS() + { + return require 'data/Calculation/Engineering/IMABS.php'; + } + + /** + * @dataProvider providerIMARGUMENT + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMARGUMENT($expectedResult, $value) + { + $result = Engineering::IMARGUMENT($value); + self::assertEquals($expectedResult, $result, null, self::COMPLEX_PRECISION); + } + + public function providerIMARGUMENT() + { + return require 'data/Calculation/Engineering/IMARGUMENT.php'; + } + + /** + * @dataProvider providerIMCONJUGATE + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMCONJUGATE($expectedResult, $value) + { + $result = Engineering::IMCONJUGATE($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMCONJUGATE() + { + return require 'data/Calculation/Engineering/IMCONJUGATE.php'; + } + + /** + * @dataProvider providerIMCOS + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMCOS($expectedResult, $value) + { + $result = Engineering::IMCOS($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMCOS() + { + return require 'data/Calculation/Engineering/IMCOS.php'; + } + + /** + * @dataProvider providerIMCOSH + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMCOSH($expectedResult, $value) + { + $result = Engineering::IMCOSH($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMCOSH() + { + return require 'data/Calculation/Engineering/IMCOSH.php'; + } + + /** + * @dataProvider providerIMCOT + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMCOT($expectedResult, $value) + { + $result = Engineering::IMCOT($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMCOT() + { + return require 'data/Calculation/Engineering/IMCOT.php'; + } + + /** + * @dataProvider providerIMCSC + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMCSC($expectedResult, $value) + { + $result = Engineering::IMCSC($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMCSC() + { + return require 'data/Calculation/Engineering/IMCSC.php'; + } + + /** + * @dataProvider providerIMCSCH + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMCSCH($expectedResult, $value) + { + $result = Engineering::IMCSCH($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMCSCH() + { + return require 'data/Calculation/Engineering/IMCSCH.php'; + } + + /** + * @dataProvider providerIMSEC + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMSEC($expectedResult, $value) + { + $result = Engineering::IMSEC($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMSEC() + { + return require 'data/Calculation/Engineering/IMSEC.php'; + } + + /** + * @dataProvider providerIMSECH + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMSECH($expectedResult, $value) + { + $result = Engineering::IMSECH($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMSECH() + { + return require 'data/Calculation/Engineering/IMSECH.php'; + } + + /** + * @dataProvider providerIMDIV + * + * @param mixed $expectedResult + */ + public function testIMDIV($expectedResult, ...$args) + { + $result = Engineering::IMDIV(...$args); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMDIV() + { + return require 'data/Calculation/Engineering/IMDIV.php'; + } + + /** + * @dataProvider providerIMEXP + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMEXP($expectedResult, $value) + { + $result = Engineering::IMEXP($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMEXP() + { + return require 'data/Calculation/Engineering/IMEXP.php'; + } + + /** + * @dataProvider providerIMLN + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMLN($expectedResult, $value) + { + $result = Engineering::IMLN($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMLN() + { + return require 'data/Calculation/Engineering/IMLN.php'; + } + + /** + * @dataProvider providerIMLOG2 + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMLOG2($expectedResult, $value) + { + $result = Engineering::IMLOG2($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMLOG2() + { + return require 'data/Calculation/Engineering/IMLOG2.php'; + } + + /** + * @dataProvider providerIMLOG10 + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMLOG10($expectedResult, $value) + { + $result = Engineering::IMLOG10($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMLOG10() + { + return require 'data/Calculation/Engineering/IMLOG10.php'; + } + + /** + * @dataProvider providerIMPOWER + * + * @param mixed $expectedResult + */ + public function testIMPOWER($expectedResult, ...$args) + { + $result = Engineering::IMPOWER(...$args); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMPOWER() + { + return require 'data/Calculation/Engineering/IMPOWER.php'; + } + + /** + * @dataProvider providerIMPRODUCT + * + * @param mixed $expectedResult + */ + public function testIMPRODUCT($expectedResult, ...$args) + { + $result = Engineering::IMPRODUCT(...$args); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMPRODUCT() + { + return require 'data/Calculation/Engineering/IMPRODUCT.php'; + } + + /** + * @dataProvider providerIMSIN + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMSIN($expectedResult, $value) + { + $result = Engineering::IMSIN($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMSIN() + { + return require 'data/Calculation/Engineering/IMSIN.php'; + } + + /** + * @dataProvider providerIMSINH + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMSINH($expectedResult, $value) + { + $result = Engineering::IMSINH($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMSINH() + { + return require 'data/Calculation/Engineering/IMSINH.php'; + } + + /** + * @dataProvider providerIMTAN + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMTAN($expectedResult, $value) + { + $result = Engineering::IMTAN($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMTAN() + { + return require 'data/Calculation/Engineering/IMTAN.php'; + } + + /** + * @dataProvider providerIMSQRT + * + * @param mixed $expectedResult + * @param mixed $value + */ + public function testIMSQRT($expectedResult, $value) + { + $result = Engineering::IMSQRT($value); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMSQRT() + { + return require 'data/Calculation/Engineering/IMSQRT.php'; + } + + /** + * @dataProvider providerIMSUB + * + * @param mixed $expectedResult + */ + public function testIMSUB($expectedResult, ...$args) + { + $result = Engineering::IMSUB(...$args); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMSUB() + { + return require 'data/Calculation/Engineering/IMSUB.php'; + } + + /** + * @dataProvider providerIMSUM + * + * @param mixed $expectedResult + */ + public function testIMSUM($expectedResult, ...$args) + { + $result = Engineering::IMSUM(...$args); + self::assertTrue( + $this->complexAssert->assertComplexEquals($expectedResult, $result, self::COMPLEX_PRECISION), + $this->complexAssert->getErrorMessage() + ); + } + + public function providerIMSUM() + { + return require 'data/Calculation/Engineering/IMSUM.php'; + } + + /** + * @dataProvider providerERF + * + * @param mixed $expectedResult + */ + public function testERF($expectedResult, ...$args) + { + $result = Engineering::ERF(...$args); + self::assertEquals($expectedResult, $result, null, self::ERF_PRECISION); + } + + public function providerERF() + { + return require 'data/Calculation/Engineering/ERF.php'; + } + + /** + * @dataProvider providerERFPRECISE + * + * @param mixed $expectedResult + */ + public function testERFPRECISE($expectedResult, ...$args) + { + $result = Engineering::ERFPRECISE(...$args); + self::assertEquals($expectedResult, $result, null, self::ERF_PRECISION); + } + + public function providerERFPRECISE() + { + return require 'data/Calculation/Engineering/ERFPRECISE.php'; + } + + /** + * @dataProvider providerERFC + * + * @param mixed $expectedResult + */ + public function testERFC($expectedResult, ...$args) + { + $result = Engineering::ERFC(...$args); + self::assertEquals($expectedResult, $result, null, self::ERF_PRECISION); + } + + public function providerERFC() + { + return require 'data/Calculation/Engineering/ERFC.php'; + } + + /** + * @dataProvider providerBIN2DEC + * + * @param mixed $expectedResult + */ + public function testBIN2DEC($expectedResult, ...$args) + { + $result = Engineering::BINTODEC(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerBIN2DEC() + { + return require 'data/Calculation/Engineering/BIN2DEC.php'; + } + + /** + * @dataProvider providerBIN2HEX + * + * @param mixed $expectedResult + */ + public function testBIN2HEX($expectedResult, ...$args) + { + $result = Engineering::BINTOHEX(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerBIN2HEX() + { + return require 'data/Calculation/Engineering/BIN2HEX.php'; + } + + /** + * @dataProvider providerBIN2OCT + * + * @param mixed $expectedResult + */ + public function testBIN2OCT($expectedResult, ...$args) + { + $result = Engineering::BINTOOCT(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerBIN2OCT() + { + return require 'data/Calculation/Engineering/BIN2OCT.php'; + } + + /** + * @dataProvider providerDEC2BIN + * + * @param mixed $expectedResult + */ + public function testDEC2BIN($expectedResult, ...$args) + { + $result = Engineering::DECTOBIN(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerDEC2BIN() + { + return require 'data/Calculation/Engineering/DEC2BIN.php'; + } + + /** + * @dataProvider providerDEC2HEX + * + * @param mixed $expectedResult + */ + public function testDEC2HEX($expectedResult, ...$args) + { + $result = Engineering::DECTOHEX(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerDEC2HEX() + { + return require 'data/Calculation/Engineering/DEC2HEX.php'; + } + + /** + * @dataProvider providerDEC2OCT + * + * @param mixed $expectedResult + */ + public function testDEC2OCT($expectedResult, ...$args) + { + $result = Engineering::DECTOOCT(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerDEC2OCT() + { + return require 'data/Calculation/Engineering/DEC2OCT.php'; + } + + /** + * @dataProvider providerHEX2BIN + * + * @param mixed $expectedResult + */ + public function testHEX2BIN($expectedResult, ...$args) + { + $result = Engineering::HEXTOBIN(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerHEX2BIN() + { + return require 'data/Calculation/Engineering/HEX2BIN.php'; + } + + /** + * @dataProvider providerHEX2DEC + * + * @param mixed $expectedResult + */ + public function testHEX2DEC($expectedResult, ...$args) + { + $result = Engineering::HEXTODEC(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerHEX2DEC() + { + return require 'data/Calculation/Engineering/HEX2DEC.php'; + } + + /** + * @dataProvider providerHEX2OCT + * + * @param mixed $expectedResult + */ + public function testHEX2OCT($expectedResult, ...$args) + { + $result = Engineering::HEXTOOCT(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerHEX2OCT() + { + return require 'data/Calculation/Engineering/HEX2OCT.php'; + } + + /** + * @dataProvider providerOCT2BIN + * + * @param mixed $expectedResult + */ + public function testOCT2BIN($expectedResult, ...$args) + { + $result = Engineering::OCTTOBIN(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerOCT2BIN() + { + return require 'data/Calculation/Engineering/OCT2BIN.php'; + } + + /** + * @dataProvider providerOCT2DEC + * + * @param mixed $expectedResult + */ + public function testOCT2DEC($expectedResult, ...$args) + { + $result = Engineering::OCTTODEC(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerOCT2DEC() + { + return require 'data/Calculation/Engineering/OCT2DEC.php'; + } + + /** + * @dataProvider providerOCT2HEX + * + * @param mixed $expectedResult + */ + public function testOCT2HEX($expectedResult, ...$args) + { + $result = Engineering::OCTTOHEX(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerOCT2HEX() + { + return require 'data/Calculation/Engineering/OCT2HEX.php'; + } + + /** + * @dataProvider providerBITAND + * + * @param mixed $expectedResult + * @param mixed[] $args + */ + public function testBITAND($expectedResult, array $args) + { + $result = Engineering::BITAND(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerBITAND() + { + return require 'data/Calculation/Engineering/BITAND.php'; + } + + /** + * @dataProvider providerBITOR + * + * @param mixed $expectedResult + * @param mixed[] $args + */ + public function testBITOR($expectedResult, array $args) + { + $result = Engineering::BITOR(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerBITOR() + { + return require 'data/Calculation/Engineering/BITOR.php'; + } + + /** + * @dataProvider providerBITXOR + * + * @param mixed $expectedResult + * @param mixed[] $args + */ + public function testBITXOR($expectedResult, array $args) + { + $result = Engineering::BITXOR(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerBITXOR() + { + return require 'data/Calculation/Engineering/BITXOR.php'; + } + + /** + * @dataProvider providerBITLSHIFT + * + * @param mixed $expectedResult + * @param mixed[] $args + */ + public function testBITLSHIFT($expectedResult, array $args) + { + $result = Engineering::BITLSHIFT(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerBITLSHIFT() + { + return require 'data/Calculation/Engineering/BITLSHIFT.php'; + } + + /** + * @dataProvider providerBITRSHIFT + * + * @param mixed $expectedResult + * @param mixed[] $args + */ + public function testBITRSHIFT($expectedResult, array $args) + { + $result = Engineering::BITRSHIFT(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerBITRSHIFT() + { + return require 'data/Calculation/Engineering/BITRSHIFT.php'; + } + + /** + * @dataProvider providerDELTA + * + * @param mixed $expectedResult + */ + public function testDELTA($expectedResult, ...$args) + { + $result = Engineering::DELTA(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerDELTA() + { + return require 'data/Calculation/Engineering/DELTA.php'; + } + + /** + * @dataProvider providerGESTEP + * + * @param mixed $expectedResult + */ + public function testGESTEP($expectedResult, ...$args) + { + $result = Engineering::GESTEP(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerGESTEP() + { + return require 'data/Calculation/Engineering/GESTEP.php'; + } + + public function testGetConversionGroups() + { + $result = Engineering::getConversionGroups(); + self::assertInternalType('array', $result); + } + + public function testGetConversionGroupUnits() + { + $result = Engineering::getConversionGroupUnits(); + self::assertInternalType('array', $result); + } + + public function testGetConversionGroupUnitDetails() + { + $result = Engineering::getConversionGroupUnitDetails(); + self::assertInternalType('array', $result); + } + + public function testGetConversionMultipliers() + { + $result = Engineering::getConversionMultipliers(); + self::assertInternalType('array', $result); + } + + /** + * @dataProvider providerCONVERTUOM + * + * @param mixed $expectedResult + */ + public function testCONVERTUOM($expectedResult, ...$args) + { + $result = Engineering::CONVERTUOM(...$args); + self::assertEquals($expectedResult, $result, null); + } + + public function providerCONVERTUOM() + { + return require 'data/Calculation/Engineering/CONVERTUOM.php'; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/FinancialTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/FinancialTest.php new file mode 100644 index 0000000..d910389 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/FinancialTest.php @@ -0,0 +1,613 @@ +markTestIncomplete('TODO: This test should be fixed'); + + $result = Financial::PRICE(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerPRICE() + { + return require 'data/Calculation/Financial/PRICE.php'; + } + + /** + * @dataProvider providerPRICEDISC + * + * @param mixed $expectedResult + */ + public function testPRICEDISC($expectedResult, array $args) + { + $result = Financial::PRICEDISC(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerPRICEDISC() + { + return require 'data/Calculation/Financial/PRICEDISC.php'; + } + + /** + * @dataProvider providerPV + * + * @param mixed $expectedResult + */ + public function testPV($expectedResult, array $args) + { + $result = Financial::PV(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerPV() + { + return require 'data/Calculation/Financial/PV.php'; + } + + /** + * @dataProvider providerRATE + * + * @param mixed $expectedResult + */ + public function testRATE($expectedResult, ...$args) + { + $this->markTestIncomplete('TODO: This test should be fixed'); + + $result = Financial::RATE(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerRATE() + { + return require 'data/Calculation/Financial/RATE.php'; + } + + /** + * @dataProvider providerXIRR + * + * @param mixed $expectedResult + */ + public function testXIRR($expectedResult, ...$args) + { + $this->markTestIncomplete('TODO: This test should be fixed'); + + $result = Financial::XIRR(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerXIRR() + { + return require 'data/Calculation/Financial/XIRR.php'; + } + + /** + * @dataProvider providerPDURATION + * + * @param mixed $expectedResult + */ + public function testPDURATION($expectedResult, array $args) + { + $result = Financial::PDURATION(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerPDURATION() + { + return require 'data/Calculation/Financial/PDURATION.php'; + } + + /** + * @dataProvider providerRRI + * + * @param mixed $expectedResult + */ + public function testRRI($expectedResult, array $args) + { + $result = Financial::RRI(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerRRI() + { + return require 'data/Calculation/Financial/RRI.php'; + } + + /** + * @dataProvider providerSLN + * + * @param mixed $expectedResult + */ + public function testSLN($expectedResult, array $args) + { + $result = Financial::SLN(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerSLN() + { + return require 'data/Calculation/Financial/SLN.php'; + } + + /** + * @dataProvider providerSYD + * + * @param mixed $expectedResult + */ + public function testSYD($expectedResult, array $args) + { + $result = Financial::SYD(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerSYD() + { + return require 'data/Calculation/Financial/SYD.php'; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php new file mode 100644 index 0000000..df2028c --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/FunctionsTest.php @@ -0,0 +1,385 @@ +assertTrue($result); + // Test that mode has been changed + $this->assertEquals(Functions::COMPATIBILITY_GNUMERIC, Functions::getCompatibilityMode()); + } + + public function testInvalidCompatibilityMode() + { + $result = Functions::setCompatibilityMode('INVALIDMODE'); + // Test for a false response for failure + $this->assertFalse($result); + // Test that mode has not been changed + $this->assertEquals(Functions::COMPATIBILITY_EXCEL, Functions::getCompatibilityMode()); + } + + public function testReturnDateType() + { + $result = Functions::setReturnDateType(Functions::RETURNDATE_PHP_OBJECT); + // Test for a true response for success + $this->assertTrue($result); + // Test that mode has been changed + $this->assertEquals(Functions::RETURNDATE_PHP_OBJECT, Functions::getReturnDateType()); + } + + public function testInvalidReturnDateType() + { + $result = Functions::setReturnDateType('INVALIDTYPE'); + // Test for a false response for failure + $this->assertFalse($result); + // Test that mode has not been changed + $this->assertEquals(Functions::RETURNDATE_EXCEL, Functions::getReturnDateType()); + } + + public function testDUMMY() + { + $result = Functions::DUMMY(); + self::assertEquals('#Not Yet Implemented', $result); + } + + public function testDIV0() + { + $result = Functions::DIV0(); + self::assertEquals('#DIV/0!', $result); + } + + public function testNA() + { + $result = Functions::NA(); + self::assertEquals('#N/A', $result); + } + + public function testNAN() + { + $result = Functions::NAN(); + self::assertEquals('#NUM!', $result); + } + + public function testNAME() + { + $result = Functions::NAME(); + self::assertEquals('#NAME?', $result); + } + + public function testREF() + { + $result = Functions::REF(); + self::assertEquals('#REF!', $result); + } + + public function testNULL() + { + $result = Functions::null(); + self::assertEquals('#NULL!', $result); + } + + public function testVALUE() + { + $result = Functions::VALUE(); + self::assertEquals('#VALUE!', $result); + } + + /** + * @dataProvider providerIsBlank + * + * @param mixed $expectedResult + */ + public function testIsBlank($expectedResult, ...$args) + { + $result = Functions::isBlank(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsBlank() + { + return require 'data/Calculation/Functions/IS_BLANK.php'; + } + + /** + * @dataProvider providerIsErr + * + * @param mixed $expectedResult + */ + public function testIsErr($expectedResult, ...$args) + { + $result = Functions::isErr(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsErr() + { + return require 'data/Calculation/Functions/IS_ERR.php'; + } + + /** + * @dataProvider providerIsError + * + * @param mixed $expectedResult + */ + public function testIsError($expectedResult, ...$args) + { + $result = Functions::isError(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsError() + { + return require 'data/Calculation/Functions/IS_ERROR.php'; + } + + /** + * @dataProvider providerErrorType + * + * @param mixed $expectedResult + */ + public function testErrorType($expectedResult, ...$args) + { + $result = Functions::errorType(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerErrorType() + { + return require 'data/Calculation/Functions/ERROR_TYPE.php'; + } + + /** + * @dataProvider providerIsLogical + * + * @param mixed $expectedResult + */ + public function testIsLogical($expectedResult, ...$args) + { + $result = Functions::isLogical(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsLogical() + { + return require 'data/Calculation/Functions/IS_LOGICAL.php'; + } + + /** + * @dataProvider providerIsNa + * + * @param mixed $expectedResult + */ + public function testIsNa($expectedResult, ...$args) + { + $result = Functions::isNa(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsNa() + { + return require 'data/Calculation/Functions/IS_NA.php'; + } + + /** + * @dataProvider providerIsNumber + * + * @param mixed $expectedResult + */ + public function testIsNumber($expectedResult, ...$args) + { + $result = Functions::isNumber(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsNumber() + { + return require 'data/Calculation/Functions/IS_NUMBER.php'; + } + + /** + * @dataProvider providerIsText + * + * @param mixed $expectedResult + */ + public function testIsText($expectedResult, ...$args) + { + $result = Functions::isText(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsText() + { + return require 'data/Calculation/Functions/IS_TEXT.php'; + } + + /** + * @dataProvider providerIsNonText + * + * @param mixed $expectedResult + */ + public function testIsNonText($expectedResult, ...$args) + { + $result = Functions::isNonText(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsNonText() + { + return require 'data/Calculation/Functions/IS_NONTEXT.php'; + } + + /** + * @dataProvider providerIsEven + * + * @param mixed $expectedResult + */ + public function testIsEven($expectedResult, ...$args) + { + $result = Functions::isEven(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsEven() + { + return require 'data/Calculation/Functions/IS_EVEN.php'; + } + + /** + * @dataProvider providerIsOdd + * + * @param mixed $expectedResult + */ + public function testIsOdd($expectedResult, ...$args) + { + $result = Functions::isOdd(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsOdd() + { + return require 'data/Calculation/Functions/IS_ODD.php'; + } + + /** + * @dataProvider providerTYPE + * + * @param mixed $expectedResult + */ + public function testTYPE($expectedResult, ...$args) + { + $result = Functions::TYPE(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerTYPE() + { + return require 'data/Calculation/Functions/TYPE.php'; + } + + /** + * @dataProvider providerN + * + * @param mixed $expectedResult + */ + public function testN($expectedResult, ...$args) + { + $result = Functions::n(...$args); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerN() + { + return require 'data/Calculation/Functions/N.php'; + } + + /** + * @dataProvider providerIsFormula + * + * @param mixed $expectedResult + * @param mixed $reference Reference to the cell we wish to test + * @param mixed $value Value of the cell we wish to test + */ + public function testIsFormula($expectedResult, $reference, $value = 'undefined') + { + $ourCell = null; + if ($value !== 'undefined') { + $remoteCell = $this->getMockBuilder(Cell::class) + ->disableOriginalConstructor() + ->getMock(); + $remoteCell->method('isFormula') + ->will($this->returnValue(substr($value, 0, 1) == '=')); + + $remoteSheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + $remoteSheet->method('getCell') + ->will($this->returnValue($remoteCell)); + + $workbook = $this->getMockBuilder(Spreadsheet::class) + ->disableOriginalConstructor() + ->getMock(); + $workbook->method('getSheetByName') + ->will($this->returnValue($remoteSheet)); + + $sheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + $sheet->method('getCell') + ->will($this->returnValue($remoteCell)); + $sheet->method('getParent') + ->will($this->returnValue($workbook)); + + $ourCell = $this->getMockBuilder(Cell::class) + ->disableOriginalConstructor() + ->getMock(); + $ourCell->method('getWorksheet') + ->will($this->returnValue($sheet)); + } + + $result = Functions::isFormula($reference, $ourCell); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerIsFormula() + { + return require 'data/Calculation/Functions/ISFORMULA.php'; + } + + /** + * @dataProvider providerIfCondition + * + * @param mixed $expectedResult + */ + public function testIfCondition($expectedResult, ...$args) + { + $result = Functions::ifCondition(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerIfCondition() + { + return require 'data/Calculation/Functions/IF_CONDITION.php'; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/LogicalTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/LogicalTest.php new file mode 100644 index 0000000..3dec0c7 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/LogicalTest.php @@ -0,0 +1,123 @@ +getMockBuilder(Cell::class) + ->disableOriginalConstructor() + ->getMock(); + $remoteCell->method('isFormula') + ->will($this->returnValue(substr($value, 0, 1) == '=')); + $remoteCell->method('getValue') + ->will($this->returnValue($value)); + + $remoteSheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + $remoteSheet->method('getCell') + ->will($this->returnValue($remoteCell)); + + $workbook = $this->getMockBuilder(Spreadsheet::class) + ->disableOriginalConstructor() + ->getMock(); + $workbook->method('getSheetByName') + ->will($this->returnValue($remoteSheet)); + + $sheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + $sheet->method('getCell') + ->will($this->returnValue($remoteCell)); + $sheet->method('getParent') + ->will($this->returnValue($workbook)); + + $ourCell = $this->getMockBuilder(Cell::class) + ->disableOriginalConstructor() + ->getMock(); + $ourCell->method('getWorksheet') + ->will($this->returnValue($sheet)); + } + + $result = LookupRef::FORMULATEXT($reference, $ourCell); + self::assertEquals($expectedResult, $result, null, 1E-8); + } + + public function providerFormulaText() + { + return require 'data/Calculation/LookupRef/FORMULATEXT.php'; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/MathTrigTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/MathTrigTest.php new file mode 100644 index 0000000..fa49796 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/MathTrigTest.php @@ -0,0 +1,881 @@ +markTestIncomplete('TODO: This test should be fixed'); + + $result = MathTrig::MINVERSE(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerMINVERSE() + { + return require 'data/Calculation/MathTrig/MINVERSE.php'; + } + + /** + * @dataProvider providerMMULT + * + * @param mixed $expectedResult + */ + public function testMMULT($expectedResult, ...$args) + { + $this->markTestIncomplete('TODO: This test should be fixed'); + + $result = MathTrig::MMULT(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerMMULT() + { + return require 'data/Calculation/MathTrig/MMULT.php'; + } + + /** + * @dataProvider providerMULTINOMIAL + * + * @param mixed $expectedResult + */ + public function testMULTINOMIAL($expectedResult, ...$args) + { + $result = MathTrig::MULTINOMIAL(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerMULTINOMIAL() + { + return require 'data/Calculation/MathTrig/MULTINOMIAL.php'; + } + + /** + * @dataProvider providerMROUND + * + * @param mixed $expectedResult + */ + public function testMROUND($expectedResult, ...$args) + { + Calculation::setArrayReturnType(Calculation::RETURN_ARRAY_AS_VALUE); + $result = MathTrig::MROUND(...$args); + Calculation::setArrayReturnType(Calculation::RETURN_ARRAY_AS_ARRAY); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerMROUND() + { + return require 'data/Calculation/MathTrig/MROUND.php'; + } + + /** + * @dataProvider providerPRODUCT + * + * @param mixed $expectedResult + */ + public function testPRODUCT($expectedResult, ...$args) + { + $result = MathTrig::PRODUCT(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerPRODUCT() + { + return require 'data/Calculation/MathTrig/PRODUCT.php'; + } + + /** + * @dataProvider providerQUOTIENT + * + * @param mixed $expectedResult + */ + public function testQUOTIENT($expectedResult, ...$args) + { + $result = MathTrig::QUOTIENT(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerQUOTIENT() + { + return require 'data/Calculation/MathTrig/QUOTIENT.php'; + } + + /** + * @dataProvider providerROUNDUP + * + * @param mixed $expectedResult + */ + public function testROUNDUP($expectedResult, ...$args) + { + $result = MathTrig::ROUNDUP(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerROUNDUP() + { + return require 'data/Calculation/MathTrig/ROUNDUP.php'; + } + + /** + * @dataProvider providerROUNDDOWN + * + * @param mixed $expectedResult + */ + public function testROUNDDOWN($expectedResult, ...$args) + { + $result = MathTrig::ROUNDDOWN(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerROUNDDOWN() + { + return require 'data/Calculation/MathTrig/ROUNDDOWN.php'; + } + + /** + * @dataProvider providerSERIESSUM + * + * @param mixed $expectedResult + */ + public function testSERIESSUM($expectedResult, ...$args) + { + $result = MathTrig::SERIESSUM(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSERIESSUM() + { + return require 'data/Calculation/MathTrig/SERIESSUM.php'; + } + + /** + * @dataProvider providerSUMSQ + * + * @param mixed $expectedResult + */ + public function testSUMSQ($expectedResult, ...$args) + { + $result = MathTrig::SUMSQ(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSUMSQ() + { + return require 'data/Calculation/MathTrig/SUMSQ.php'; + } + + /** + * @dataProvider providerSUMPRODUCT + * + * @param mixed $expectedResult + */ + public function testSUMPRODUCT($expectedResult, ...$args) + { + $result = MathTrig::SUMPRODUCT(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSUMPRODUCT() + { + return require 'data/Calculation/MathTrig/SUMPRODUCT.php'; + } + + /** + * @dataProvider providerSUMX2MY2 + * + * @param mixed $expectedResult + */ + public function testSUMX2MY2($expectedResult, ...$args) + { + $result = MathTrig::SUMX2MY2(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSUMX2MY2() + { + return require 'data/Calculation/MathTrig/SUMX2MY2.php'; + } + + /** + * @dataProvider providerSUMX2PY2 + * + * @param mixed $expectedResult + */ + public function testSUMX2PY2($expectedResult, ...$args) + { + $result = MathTrig::SUMX2PY2(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSUMX2PY2() + { + return require 'data/Calculation/MathTrig/SUMX2PY2.php'; + } + + /** + * @dataProvider providerSUMXMY2 + * + * @param mixed $expectedResult + */ + public function testSUMXMY2($expectedResult, ...$args) + { + $result = MathTrig::SUMXMY2(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSUMXMY2() + { + return require 'data/Calculation/MathTrig/SUMXMY2.php'; + } + + /** + * @dataProvider providerTRUNC + * + * @param mixed $expectedResult + */ + public function testTRUNC($expectedResult, ...$args) + { + $result = MathTrig::TRUNC(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerTRUNC() + { + return require 'data/Calculation/MathTrig/TRUNC.php'; + } + + /** + * @dataProvider providerROMAN + * + * @param mixed $expectedResult + */ + public function testROMAN($expectedResult, ...$args) + { + $result = MathTrig::ROMAN(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerROMAN() + { + return require 'data/Calculation/MathTrig/ROMAN.php'; + } + + /** + * @dataProvider providerSQRTPI + * + * @param mixed $expectedResult + */ + public function testSQRTPI($expectedResult, ...$args) + { + $result = MathTrig::SQRTPI(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSQRTPI() + { + return require 'data/Calculation/MathTrig/SQRTPI.php'; + } + + /** + * @dataProvider providerSUMIF + * + * @param mixed $expectedResult + */ + public function testSUMIF($expectedResult, ...$args) + { + $result = MathTrig::SUMIF(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSUMIF() + { + return require 'data/Calculation/MathTrig/SUMIF.php'; + } + + /** + * @dataProvider providerSUBTOTAL + * + * @param mixed $expectedResult + */ + public function testSUBTOTAL($expectedResult, ...$args) + { + $cell = $this->getMockBuilder(Cell::class) + ->setMethods(['getValue']) + ->disableOriginalConstructor() + ->getMock(); + $cell->method('getValue') + ->willReturn(null); + $worksheet = $this->getMockBuilder(Worksheet::class) + ->setMethods(['cellExists', 'getCell']) + ->disableOriginalConstructor() + ->getMock(); + $worksheet->method('cellExists') + ->willReturn(true); + $worksheet->method('getCell') + ->willReturn($cell); + $cellReference = $this->getMockBuilder(Cell::class) + ->setMethods(['getWorksheet']) + ->disableOriginalConstructor() + ->getMock(); + $cellReference->method('getWorksheet') + ->willReturn($worksheet); + + array_push($args, $cellReference); + $result = MathTrig::SUBTOTAL(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSUBTOTAL() + { + return require 'data/Calculation/MathTrig/SUBTOTAL.php'; + } + + protected function rowVisibility() + { + $data = [1 => false, 2 => true, 3 => false, 4 => true, 5 => false, 6 => false, 7 => false, 8 => true, 9 => false, 10 => true, 11 => true]; + foreach ($data as $k => $v) { + yield $k => $v; + } + } + + /** + * @dataProvider providerHiddenSUBTOTAL + * + * @param mixed $expectedResult + */ + public function testHiddenSUBTOTAL($expectedResult, ...$args) + { + $visibilityGenerator = $this->rowVisibility(); + + $rowDimension = $this->getMockBuilder(RowDimension::class) + ->setMethods(['getVisible']) + ->disableOriginalConstructor() + ->getMock(); + $rowDimension->method('getVisible') + ->will($this->returnCallback(function () use ($visibilityGenerator) { + $result = $visibilityGenerator->current(); + $visibilityGenerator->next(); + + return $result; + })); + $columnDimension = $this->getMockBuilder(ColumnDimension::class) + ->setMethods(['getVisible']) + ->disableOriginalConstructor() + ->getMock(); + $columnDimension->method('getVisible') + ->willReturn(true); + $cell = $this->getMockBuilder(Cell::class) + ->setMethods(['getValue']) + ->disableOriginalConstructor() + ->getMock(); + $cell->method('getValue') + ->willReturn(''); + $worksheet = $this->getMockBuilder(Worksheet::class) + ->setMethods(['cellExists', 'getCell', 'getRowDimension', 'getColumnDimension']) + ->disableOriginalConstructor() + ->getMock(); + $worksheet->method('cellExists') + ->willReturn(true); + $worksheet->method('getCell') + ->willReturn($cell); + $worksheet->method('getRowDimension') + ->willReturn($rowDimension); + $worksheet->method('getColumnDimension') + ->willReturn($columnDimension); + $cellReference = $this->getMockBuilder(Cell::class) + ->setMethods(['getWorksheet']) + ->disableOriginalConstructor() + ->getMock(); + $cellReference->method('getWorksheet') + ->willReturn($worksheet); + + array_push($args, $cellReference); + $result = MathTrig::SUBTOTAL(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerHiddenSUBTOTAL() + { + return require 'data/Calculation/MathTrig/SUBTOTALHIDDEN.php'; + } + + protected function cellValues(array $cellValues) + { + foreach ($cellValues as $k => $v) { + yield $k => $v; + } + } + + protected function cellIsFormula(array $cellValues) + { + foreach ($cellValues as $cellValue) { + yield $cellValue[0] === '='; + } + } + + /** + * @dataProvider providerNestedSUBTOTAL + * + * @param mixed $expectedResult + */ + public function testNestedSUBTOTAL($expectedResult, ...$args) + { + $cellValueGenerator = $this->cellValues(Functions::flattenArray(array_slice($args, 1))); + $cellIsFormulaGenerator = $this->cellIsFormula(Functions::flattenArray(array_slice($args, 1))); + + $cell = $this->getMockBuilder(Cell::class) + ->setMethods(['getValue', 'isFormula']) + ->disableOriginalConstructor() + ->getMock(); + $cell->method('getValue') + ->will($this->returnCallback(function () use ($cellValueGenerator) { + $result = $cellValueGenerator->current(); + $cellValueGenerator->next(); + + return $result; + })); + $cell->method('isFormula') + ->will($this->returnCallback(function () use ($cellIsFormulaGenerator) { + $result = $cellIsFormulaGenerator->current(); + $cellIsFormulaGenerator->next(); + + return $result; + })); + $worksheet = $this->getMockBuilder(Worksheet::class) + ->setMethods(['cellExists', 'getCell']) + ->disableOriginalConstructor() + ->getMock(); + $worksheet->method('cellExists') + ->willReturn(true); + $worksheet->method('getCell') + ->willReturn($cell); + $cellReference = $this->getMockBuilder(Cell::class) + ->setMethods(['getWorksheet']) + ->disableOriginalConstructor() + ->getMock(); + $cellReference->method('getWorksheet') + ->willReturn($worksheet); + + array_push($args, $cellReference); + + $result = MathTrig::SUBTOTAL(...$args); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerNestedSUBTOTAL() + { + return require 'data/Calculation/MathTrig/SUBTOTALNESTED.php'; + } + + /** + * @dataProvider providerSEC + * + * @param mixed $expectedResult + * @param mixed $angle + */ + public function testSEC($expectedResult, $angle) + { + $result = MathTrig::SEC($angle); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSEC() + { + return require 'data/Calculation/MathTrig/SEC.php'; + } + + /** + * @dataProvider providerSECH + * + * @param mixed $expectedResult + * @param mixed $angle + */ + public function testSECH($expectedResult, $angle) + { + $result = MathTrig::SECH($angle); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerSECH() + { + return require 'data/Calculation/MathTrig/SECH.php'; + } + + /** + * @dataProvider providerCSC + * + * @param mixed $expectedResult + * @param mixed $angle + */ + public function testCSC($expectedResult, $angle) + { + $result = MathTrig::CSC($angle); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerCSC() + { + return require 'data/Calculation/MathTrig/CSC.php'; + } + + /** + * @dataProvider providerCSCH + * + * @param mixed $expectedResult + * @param mixed $angle + */ + public function testCSCH($expectedResult, $angle) + { + $result = MathTrig::CSCH($angle); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerCSCH() + { + return require 'data/Calculation/MathTrig/CSCH.php'; + } + + /** + * @dataProvider providerCOT + * + * @param mixed $expectedResult + * @param mixed $angle + */ + public function testCOT($expectedResult, $angle) + { + $result = MathTrig::COT($angle); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerCOT() + { + return require 'data/Calculation/MathTrig/COT.php'; + } + + /** + * @dataProvider providerCOTH + * + * @param mixed $expectedResult + * @param mixed $angle + */ + public function testCOTH($expectedResult, $angle) + { + $result = MathTrig::COTH($angle); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerCOTH() + { + return require 'data/Calculation/MathTrig/COTH.php'; + } + + /** + * @dataProvider providerACOT + * + * @param mixed $expectedResult + * @param mixed $number + */ + public function testACOT($expectedResult, $number) + { + $result = MathTrig::ACOT($number); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerACOT() + { + return require 'data/Calculation/MathTrig/ACOT.php'; + } + + /** + * @dataProvider providerACOTH + * + * @param mixed $expectedResult + * @param mixed $number + */ + public function testACOTH($expectedResult, $number) + { + $result = MathTrig::ACOTH($number); + self::assertEquals($expectedResult, $result, null, 1E-12); + } + + public function providerACOTH() + { + return require 'data/Calculation/MathTrig/ACOTH.php'; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/TextDataTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/TextDataTest.php new file mode 100644 index 0000000..ffe5c68 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Calculation/TextDataTest.php @@ -0,0 +1,431 @@ +getMockBuilder(Worksheet::class) + ->setMethods(['getStyle', 'getNumberFormat', 'setFormatCode', 'getCellCollection']) + ->getMock(); + $cellCollection = $this->getMockBuilder(Cells::class) + ->disableOriginalConstructor() + ->getMock(); + $cellCollection->expects($this->any()) + ->method('getParent') + ->will($this->returnValue($sheet)); + + $sheet->expects($this->once()) + ->method('getStyle') + ->will($this->returnSelf()); + $sheet->expects($this->once()) + ->method('getNumberFormat') + ->will($this->returnSelf()); + $sheet->expects($this->once()) + ->method('setFormatCode') + ->with($format) + ->will($this->returnSelf()); + $sheet->expects($this->any()) + ->method('getCellCollection') + ->will($this->returnValue($cellCollection)); + + StringHelper::setCurrencyCode($currencyCode); + StringHelper::setDecimalSeparator($decimalSeparator); + StringHelper::setThousandsSeparator($thousandsSeparator); + + $cell = new Cell(null, DataType::TYPE_STRING, $sheet); + + $binder = new AdvancedValueBinder(); + $binder->bindValue($cell, $value); + self::assertEquals($valueBinded, $cell->getValue()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php new file mode 100644 index 0000000..5136226 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/CoordinateTest.php @@ -0,0 +1,367 @@ +getMessage(), 'Column string index can not be longer than 3 characters'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + public function testColumnIndexFromStringTooShort() + { + $cellAddress = ''; + + try { + Coordinate::columnIndexFromString($cellAddress); + } catch (\Exception $e) { + self::assertInstanceOf(Exception::class, $e); + self::assertEquals($e->getMessage(), 'Column string index can not be empty'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerColumnIndex + * + * @param mixed $expectedResult + * @param int $columnIndex + */ + public function testStringFromColumnIndex($expectedResult, $columnIndex) + { + $string = Coordinate::stringFromColumnIndex($columnIndex); + self::assertEquals($expectedResult, $string); + + $columnIndexBack = Coordinate::columnIndexFromString($string); + self::assertEquals($columnIndexBack, $columnIndex, 'should be able to get the original input with opposite method'); + } + + public function providerColumnIndex() + { + return require 'data/ColumnIndex.php'; + } + + /** + * @dataProvider providerCoordinates + * + * @param mixed $expectedResult + */ + public function testCoordinateFromString($expectedResult, ...$args) + { + $result = Coordinate::coordinateFromString(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerCoordinates() + { + return require 'data/CellCoordinates.php'; + } + + public function testCoordinateFromStringWithRangeAddress() + { + $cellAddress = 'A1:AI2012'; + + try { + Coordinate::coordinateFromString($cellAddress); + } catch (\Exception $e) { + self::assertInstanceOf(Exception::class, $e); + self::assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + public function testCoordinateFromStringWithEmptyAddress() + { + $cellAddress = ''; + + try { + Coordinate::coordinateFromString($cellAddress); + } catch (\Exception $e) { + self::assertInstanceOf(Exception::class, $e); + self::assertEquals($e->getMessage(), 'Cell coordinate can not be zero-length string'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + public function testCoordinateFromStringWithInvalidAddress() + { + $cellAddress = 'AI'; + + try { + Coordinate::coordinateFromString($cellAddress); + } catch (\Exception $e) { + self::assertInstanceOf(Exception::class, $e); + self::assertEquals($e->getMessage(), 'Invalid cell coordinate ' . $cellAddress); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerAbsoluteCoordinates + * + * @param mixed $expectedResult + */ + public function testAbsoluteCoordinateFromString($expectedResult, ...$args) + { + $result = Coordinate::absoluteCoordinate(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerAbsoluteCoordinates() + { + return require 'data/CellAbsoluteCoordinate.php'; + } + + public function testAbsoluteCoordinateFromStringWithRangeAddress() + { + $cellAddress = 'A1:AI2012'; + + try { + Coordinate::absoluteCoordinate($cellAddress); + } catch (\Exception $e) { + self::assertInstanceOf(Exception::class, $e); + self::assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerAbsoluteReferences + * + * @param mixed $expectedResult + */ + public function testAbsoluteReferenceFromString($expectedResult, ...$args) + { + $result = Coordinate::absoluteReference(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerAbsoluteReferences() + { + return require 'data/CellAbsoluteReference.php'; + } + + public function testAbsoluteReferenceFromStringWithRangeAddress() + { + $cellAddress = 'A1:AI2012'; + + try { + Coordinate::absoluteReference($cellAddress); + } catch (\Exception $e) { + self::assertInstanceOf(Exception::class, $e); + self::assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + /** + * @dataProvider providerSplitRange + * + * @param mixed $expectedResult + */ + public function testSplitRange($expectedResult, ...$args) + { + $result = Coordinate::splitRange(...$args); + foreach ($result as $key => $split) { + if (!is_array($expectedResult[$key])) { + self::assertEquals($expectedResult[$key], $split[0]); + } else { + self::assertEquals($expectedResult[$key], $split); + } + } + } + + public function providerSplitRange() + { + return require 'data/CellSplitRange.php'; + } + + /** + * @dataProvider providerBuildRange + * + * @param mixed $expectedResult + */ + public function testBuildRange($expectedResult, ...$args) + { + $result = Coordinate::buildRange(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerBuildRange() + { + return require 'data/CellBuildRange.php'; + } + + public function testBuildRangeInvalid() + { + $this->expectException(\TypeError::class); + + if (PHP_MAJOR_VERSION < 7) { + $this->markTestSkipped('Cannot catch type hinting error with PHP 5.6'); + } + + $cellRange = ''; + Coordinate::buildRange($cellRange); + } + + /** + * @dataProvider providerRangeBoundaries + * + * @param mixed $expectedResult + */ + public function testRangeBoundaries($expectedResult, ...$args) + { + $result = Coordinate::rangeBoundaries(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerRangeBoundaries() + { + return require 'data/CellRangeBoundaries.php'; + } + + /** + * @dataProvider providerRangeDimension + * + * @param mixed $expectedResult + */ + public function testRangeDimension($expectedResult, ...$args) + { + $result = Coordinate::rangeDimension(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerRangeDimension() + { + return require 'data/CellRangeDimension.php'; + } + + /** + * @dataProvider providerGetRangeBoundaries + * + * @param mixed $expectedResult + */ + public function testGetRangeBoundaries($expectedResult, ...$args) + { + $result = Coordinate::getRangeBoundaries(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerGetRangeBoundaries() + { + return require 'data/CellGetRangeBoundaries.php'; + } + + /** + * @dataProvider providerExtractAllCellReferencesInRange + * + * @param mixed $expectedResult + */ + public function testExtractAllCellReferencesInRange($expectedResult, ...$args) + { + $result = Coordinate::extractAllCellReferencesInRange(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerExtractAllCellReferencesInRange() + { + return require 'data/CellExtractAllCellReferencesInRange.php'; + } + + /** + * @dataProvider providerInvalidRange + * + * @param string $range + */ + public function testExtractAllCellReferencesInRangeInvalidRange($range) + { + $this->expectException(Exception::class); + $this->expectExceptionMessage('Invalid range: "' . $range . '"'); + + Coordinate::extractAllCellReferencesInRange($range); + } + + public function providerInvalidRange() + { + return [['Z1:A1'], ['A4:A1'], ['B1:A1'], ['AA1:Z1']]; + } + + /** + * @dataProvider providerMergeRangesInCollection + * + * @param mixed $expectedResult + */ + public function testMergeRangesInCollection($expectedResult, ...$args) + { + $result = Coordinate::mergeRangesInCollection(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerMergeRangesInCollection() + { + return require 'data/CellMergeRangesInCollection.php'; + } + + /** + * @dataProvider providerCoordinateIsRange + * + * @param mixed $expectedResult + */ + public function testCoordinateIsRange($expectedResult, ...$args) + { + $result = Coordinate::coordinateIsRange(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerCoordinateIsRange() + { + return require 'data/CoordinateIsRange.php'; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataTypeTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataTypeTest.php new file mode 100644 index 0000000..c450e6e --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataTypeTest.php @@ -0,0 +1,17 @@ +getHashCode()); + $dataValidation->setType(DataValidation::TYPE_CUSTOM); + + self::assertSame('778f6c9e0ffcd5eaa7d8e1432d67f919', $dataValidation->getHashCode()); + self::assertSame('778f6c9e0ffcd5eaa7d8e1432d67f919', $dataValidation->getHashCode(), 'getHashCode() should not have side effect'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataValidatorTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataValidatorTest.php new file mode 100644 index 0000000..9d4db69 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DataValidatorTest.php @@ -0,0 +1,73 @@ +getActiveSheet(); + $testCell = $sheet->getCell('A1'); + + self::assertTrue($testCell->hasValidValue(), 'a cell without any validation data is always valid'); + } + + public function testUnsupportedType() + { + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $testCell = $sheet->getCell('A1'); + + $validation = $testCell->getDataValidation(); + $validation->setType(DataValidation::TYPE_CUSTOM); + $validation->setAllowBlank(true); + + self::assertFalse($testCell->hasValidValue(), 'cannot assert that value is valid when the validation type is not supported'); + } + + public function testList() + { + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $testCell = $sheet->getCell('A1'); + + $validation = $testCell->getDataValidation(); + $validation->setType(DataValidation::TYPE_LIST); + + // blank value + $testCell->setValue(''); + $validation->setAllowBlank(true); + self::assertTrue($testCell->hasValidValue(), 'cell can be empty'); + $validation->setAllowBlank(false); + self::assertFalse($testCell->hasValidValue(), 'cell can not be empty'); + + // inline list + $validation->setFormula1('"yes,no"'); + $testCell->setValue('foo'); + self::assertFalse($testCell->hasValidValue(), "cell value ('foo') is not allowed"); + $testCell->setValue('yes'); + self::assertTrue($testCell->hasValidValue(), "cell value ('yes') has to be allowed"); + + // list from cells + $sheet->getCell('B1')->setValue(5); + $sheet->getCell('B2')->setValue(6); + $sheet->getCell('B3')->setValue(7); + $testCell = $sheet->getCell('A1'); // redefine $testCell, because it has broken coordinates after using other cells + $validation->setFormula1('B1:B3'); + $testCell->setValue('10'); + self::assertFalse($testCell->hasValidValue(), "cell value ('10') is not allowed"); + $testCell = $sheet->getCell('A1'); // redefine $testCell, because it has broken coordinates after using other cells + $testCell->setValue('5'); + self::assertTrue($testCell->hasValidValue(), "cell value ('5') has to be allowed"); + + $testCell = $sheet->getCell('A1'); // redefine $testCell, because it has broken coordinates after using other cells + $validation->setFormula1('broken : cell : coordinates'); + + self::assertFalse($testCell->hasValidValue(), 'invalid formula should not throw exceptions'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php new file mode 100644 index 0000000..356a721 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/DefaultValueBinderTest.php @@ -0,0 +1,86 @@ +cellStub = $this->getMockBuilder(Cell::class) + ->disableOriginalConstructor() + ->getMock(); + // Configure the stub. + $this->cellStub->expects($this->any()) + ->method('setValueExplicit') + ->will($this->returnValue(true)); + } + + /** + * @dataProvider binderProvider + * + * @param mixed $value + */ + public function testBindValue($value) + { + $this->createCellStub(); + $binder = new DefaultValueBinder(); + $result = $binder->bindValue($this->cellStub, $value); + self::assertTrue($result); + } + + public function binderProvider() + { + return [ + [null], + [''], + ['ABC'], + ['=SUM(A1:B2)'], + [true], + [false], + [123], + [-123.456], + ['123'], + ['-123.456'], + ['#REF!'], + [new DateTime()], + [new DateTimeImmutable()], + ]; + } + + /** + * @dataProvider providerDataTypeForValue + * + * @param mixed $expectedResult + */ + public function testDataTypeForValue($expectedResult, ...$args) + { + $result = DefaultValueBinder::dataTypeForValue(...$args); + self::assertEquals($expectedResult, $result); + } + + public function providerDataTypeForValue() + { + return require 'data/Cell/DefaultValueBinder.php'; + } + + public function testDataTypeForRichTextObject() + { + $objRichText = new RichText(); + $objRichText->createText('Hello World'); + + $expectedResult = DataType::TYPE_INLINE; + $result = DefaultValueBinder::dataTypeForValue($objRichText); + self::assertEquals($expectedResult, $result); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/HyperlinkTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/HyperlinkTest.php new file mode 100644 index 0000000..b1337a0 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Cell/HyperlinkTest.php @@ -0,0 +1,81 @@ +getUrl(); + self::assertEquals($urlValue, $result); + } + + public function testSetUrl() + { + $initialUrlValue = 'https://www.example.com'; + $newUrlValue = 'http://github.com/PHPOffice/PhpSpreadsheet'; + + $testInstance = new Hyperlink($initialUrlValue); + $result = $testInstance->setUrl($newUrlValue); + self::assertInstanceOf(Hyperlink::class, $result); + + $result = $testInstance->getUrl(); + self::assertEquals($newUrlValue, $result); + } + + public function testGetTooltip() + { + $tooltipValue = 'PhpSpreadsheet Web Site'; + + $testInstance = new Hyperlink(null, $tooltipValue); + + $result = $testInstance->getTooltip(); + self::assertEquals($tooltipValue, $result); + } + + public function testSetTooltip() + { + $initialTooltipValue = 'PhpSpreadsheet Web Site'; + $newTooltipValue = 'PhpSpreadsheet Repository on Github'; + + $testInstance = new Hyperlink(null, $initialTooltipValue); + $result = $testInstance->setTooltip($newTooltipValue); + self::assertInstanceOf(Hyperlink::class, $result); + + $result = $testInstance->getTooltip(); + self::assertEquals($newTooltipValue, $result); + } + + public function testIsInternal() + { + $initialUrlValue = 'https://www.example.com'; + $newUrlValue = 'sheet://Worksheet1!A1'; + + $testInstance = new Hyperlink($initialUrlValue); + $result = $testInstance->isInternal(); + self::assertFalse($result); + + $testInstance->setUrl($newUrlValue); + $result = $testInstance->isInternal(); + self::assertTrue($result); + } + + public function testGetHashCode() + { + $urlValue = 'https://www.example.com'; + $tooltipValue = 'PhpSpreadsheet Web Site'; + $initialExpectedHash = '3a8d5a682dba27276dce538c39402437'; + + $testInstance = new Hyperlink($urlValue, $tooltipValue); + + $result = $testInstance->getHashCode(); + self::assertEquals($initialExpectedHash, $result); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/DataSeriesValuesTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/DataSeriesValuesTest.php new file mode 100644 index 0000000..ff79803 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/DataSeriesValuesTest.php @@ -0,0 +1,62 @@ +setDataType($dataTypeValue); + self::assertInstanceOf(DataSeriesValues::class, $result); + } + } + + public function testSetInvalidDataTypeThrowsException() + { + $testInstance = new DataSeriesValues(); + + try { + $testInstance->setDataType('BOOLEAN'); + } catch (Exception $e) { + self::assertEquals($e->getMessage(), 'Invalid datatype for chart data series values'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + public function testGetDataType() + { + $dataTypeValue = 'String'; + + $testInstance = new DataSeriesValues(); + $testInstance->setDataType($dataTypeValue); + + $result = $testInstance->getDataType(); + self::assertEquals($dataTypeValue, $result); + } + + public function testGetLineWidth() + { + $testInstance = new DataSeriesValues(); + self::assertEquals(12700, $testInstance->getLineWidth(), 'should have default'); + + $testInstance->setLineWidth(40000); + self::assertEquals(40000, $testInstance->getLineWidth()); + + $testInstance->setLineWidth(1); + self::assertEquals(12700, $testInstance->getLineWidth(), 'should enforce minimum width'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/LayoutTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/LayoutTest.php new file mode 100644 index 0000000..9ae8046 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/LayoutTest.php @@ -0,0 +1,30 @@ +setLayoutTarget($LayoutTargetValue); + self::assertInstanceOf(Layout::class, $result); + } + + public function testGetLayoutTarget() + { + $LayoutTargetValue = 'String'; + + $testInstance = new Layout(); + $testInstance->setLayoutTarget($LayoutTargetValue); + + $result = $testInstance->getLayoutTarget(); + self::assertEquals($LayoutTargetValue, $result); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/LegendTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/LegendTest.php new file mode 100644 index 0000000..e21baaf --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Chart/LegendTest.php @@ -0,0 +1,127 @@ +setPosition($positionValue); + self::assertTrue($result); + } + } + + public function testSetInvalidPositionReturnsFalse() + { + $testInstance = new Legend(); + + $result = $testInstance->setPosition('BottomLeft'); + self::assertFalse($result); + // Ensure that value is unchanged + $result = $testInstance->getPosition(); + self::assertEquals(Legend::POSITION_RIGHT, $result); + } + + public function testGetPosition() + { + $PositionValue = Legend::POSITION_BOTTOM; + + $testInstance = new Legend(); + $testInstance->setPosition($PositionValue); + + $result = $testInstance->getPosition(); + self::assertEquals($PositionValue, $result); + } + + public function testSetPositionXL() + { + $positionValues = [ + Legend::XL_LEGEND_POSITION_BOTTOM, + Legend::XL_LEGEND_POSITION_CORNER, + Legend::XL_LEGEND_POSITION_CUSTOM, + Legend::XL_LEGEND_POSITION_LEFT, + Legend::XL_LEGEND_POSITION_RIGHT, + Legend::XL_LEGEND_POSITION_TOP, + ]; + + $testInstance = new Legend(); + + foreach ($positionValues as $positionValue) { + $result = $testInstance->setPositionXL($positionValue); + self::assertTrue($result); + } + } + + public function testSetInvalidXLPositionReturnsFalse() + { + $testInstance = new Legend(); + + $result = $testInstance->setPositionXL(999); + self::assertFalse($result); + // Ensure that value is unchanged + $result = $testInstance->getPositionXL(); + self::assertEquals(Legend::XL_LEGEND_POSITION_RIGHT, $result); + } + + public function testGetPositionXL() + { + $PositionValue = Legend::XL_LEGEND_POSITION_CORNER; + + $testInstance = new Legend(); + $testInstance->setPositionXL($PositionValue); + + $result = $testInstance->getPositionXL(); + self::assertEquals($PositionValue, $result); + } + + public function testSetOverlay() + { + $overlayValues = [ + true, + false, + ]; + + $testInstance = new Legend(); + + foreach ($overlayValues as $overlayValue) { + $result = $testInstance->setOverlay($overlayValue); + self::assertTrue($result); + } + } + + public function testSetInvalidOverlayReturnsFalse() + { + $testInstance = new Legend(); + + $result = $testInstance->setOverlay('INVALID'); + self::assertFalse($result); + + $result = $testInstance->getOverlay(); + self::assertFalse($result); + } + + public function testGetOverlay() + { + $OverlayValue = true; + + $testInstance = new Legend(); + $testInstance->setOverlay($OverlayValue); + + $result = $testInstance->getOverlay(); + self::assertEquals($OverlayValue, $result); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Collection/CellsTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Collection/CellsTest.php new file mode 100644 index 0000000..be14aa5 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Collection/CellsTest.php @@ -0,0 +1,117 @@ +getActiveSheet(); + $collection = $sheet->getCellCollection(); + + // Assert empty state + self::assertEquals([], $collection->getCoordinates(), 'cell list should be empty'); + self::assertEquals([], $collection->getSortedCoordinates(), 'sorted cell list should be empty'); + self::assertNull($collection->get('B2'), 'getting non-existing cell must return null'); + self::assertFalse($collection->has('B2'), 'non-existing cell should be non-existent'); + + // Add one cell + $cell1 = $sheet->getCell('B2'); + self::assertSame($cell1, $collection->add('B2', $cell1), 'adding a cell should return the cell'); + + // Assert cell presence + self::assertEquals(['B2'], $collection->getCoordinates(), 'cell list should contains the cell'); + self::assertEquals(['B2'], $collection->getSortedCoordinates(), 'sorted cell list contains the cell'); + self::assertSame($cell1, $collection->get('B2'), 'should get exact same object'); + self::assertTrue($collection->has('B2'), 'cell should exists'); + + // Add a second cell + $cell2 = $sheet->getCell('A1'); + self::assertSame($cell2, $collection->add('A1', $cell2), 'adding a second cell should return the cell'); + self::assertEquals(['B2', 'A1'], $collection->getCoordinates(), 'cell list should contains the cell'); + self::assertEquals(['A1', 'B2'], $collection->getSortedCoordinates(), 'sorted cell list contains the cell'); + + // Assert collection copy + $sheet2 = $spreadsheet->createSheet(); + $collection2 = $collection->cloneCellCollection($sheet2); + self::assertTrue($collection2->has('A1')); + $copiedCell2 = $collection2->get('A1'); + self::assertNotSame($cell2, $copiedCell2, 'copied cell should not be the same object any more'); + self::assertSame($collection2, $copiedCell2->getParent(), 'copied cell should be owned by the copied collection'); + self::assertSame('A1', $copiedCell2->getCoordinate(), 'copied cell should keep attributes'); + + // Assert deletion + $collection->delete('B2'); + self::assertFalse($collection->has('B2'), 'cell should have been deleted'); + self::assertEquals(['A1'], $collection->getCoordinates(), 'cell list should contains the cell'); + + // Assert update + $cell2 = $sheet->getCell('A1'); + self::assertSame($sheet->getCellCollection(), $collection); + self::assertSame($cell2, $collection->update($cell2), 'should update existing cell'); + + $cell3 = $sheet->getCell('C3'); + self::assertSame($cell3, $collection->update($cell3), 'should silently add non-existing cell'); + self::assertEquals(['A1', 'C3'], $collection->getCoordinates(), 'cell list should contains the cell'); + } + + public function testCacheLastCell() + { + $workbook = new Spreadsheet(); + $cells = ['A1', 'A2']; + $sheet = $workbook->getActiveSheet(); + $sheet->setCellValue('A1', 1); + $sheet->setCellValue('A2', 2); + self::assertEquals($cells, $sheet->getCoordinates(), 'list should include last added cell'); + } + + public function testCanGetCellAfterAnotherIsDeleted() + { + $workbook = new Spreadsheet(); + $sheet = $workbook->getActiveSheet(); + $collection = $sheet->getCellCollection(); + $sheet->setCellValue('A1', 1); + $sheet->setCellValue('A2', 1); + $collection->delete('A1'); + $sheet->setCellValue('A3', 1); + self::assertNotNull($collection->get('A2'), 'should be able to get back the cell even when another cell was deleted while this one was the current one'); + } + + public function testThrowsWhenCellCannotBeRetrievedFromCache() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $collection = $this->getMockBuilder(Cells::class) + ->setConstructorArgs([new Worksheet(), new Memory()]) + ->setMethods(['has']) + ->getMock(); + + $collection->method('has') + ->willReturn(true); + + $collection->get('A2'); + } + + public function testThrowsWhenCellCannotBeStoredInCache() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $cache = $this->createMock(Memory::class); + $cell = $this->createMock(Cell::class); + $cache->method('set') + ->willReturn(false); + + $collection = new Cells(new Worksheet(), $cache); + + $collection->add('A1', $cell); + $collection->add('A2', $cell); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Custom/ComplexAssert.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Custom/ComplexAssert.php new file mode 100644 index 0000000..762b288 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Custom/ComplexAssert.php @@ -0,0 +1,82 @@ +errorMessage = 'Expected Error: ' . $actual . ' !== ' . $expected; + + return false; + } + + private function adjustDelta($expected, $actual, $delta) + { + $adjustedDelta = $delta; + + if (abs($actual) > 10 && abs($expected) > 10) { + $variance = floor(log10(abs($expected))); + $adjustedDelta *= pow(10, $variance); + } + + return $adjustedDelta > 1.0 ? 1.0 : $adjustedDelta; + } + + public function assertComplexEquals($expected, $actual, $delta = 0) + { + if ($expected === INF || $expected[0] === '#') { + return $this->testExpectedExceptions($expected, $actual); + } + + $expectedComplex = new Complex($expected); + $actualComplex = new Complex($actual); + + if (!is_numeric($actualComplex->getReal()) || !is_numeric($expectedComplex->getReal())) { + if ($actualComplex->getReal() !== $expectedComplex->getReal()) { + $this->errorMessage = 'Mismatched String: ' . $actualComplex->getReal() . ' !== ' . $expectedComplex->getReal(); + + return false; + } + + return true; + } + + $adjustedDelta = $this->adjustDelta($expectedComplex->getReal(), $actualComplex->getReal(), $delta); + if (abs($actualComplex->getReal() - $expectedComplex->getReal()) > $adjustedDelta) { + $this->errorMessage = 'Mismatched Real part: ' . $actualComplex->getReal() . ' != ' . $expectedComplex->getReal(); + + return false; + } + + $adjustedDelta = $this->adjustDelta($expectedComplex->getImaginary(), $actualComplex->getImaginary(), $delta); + if (abs($actualComplex->getImaginary() - $expectedComplex->getImaginary()) > $adjustedDelta) { + $this->errorMessage = 'Mismatched Imaginary part: ' . $actualComplex->getImaginary() . ' != ' . $expectedComplex->getImaginary(); + + return false; + } + + if ($actualComplex->getSuffix() !== $actualComplex->getSuffix()) { + $this->errorMessage = 'Mismatched Suffix: ' . $actualComplex->getSuffix() . ' != ' . $expectedComplex->getSuffix(); + + return false; + } + + return true; + } + + public function getErrorMessage() + { + return $this->errorMessage; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/AbstractFunctional.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/AbstractFunctional.php new file mode 100644 index 0000000..da9f76e --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/AbstractFunctional.php @@ -0,0 +1,39 @@ +save($filename); + + $reader = IOFactory::createReader($format); + if ($readerCustomizer) { + $readerCustomizer($reader); + } + $reloadedSpreadsheet = $reader->load($filename); + unlink($filename); + + return $reloadedSpreadsheet; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php new file mode 100644 index 0000000..6d4fc2c --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ColumnWidthTest.php @@ -0,0 +1,43 @@ +getActiveSheet(); + $sheet->setCellValue('A1', 'Hello World !'); + $sheet->getColumnDimension('A')->setWidth(20); + $this->assertColumn($spreadsheet); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + $this->assertColumn($reloadedSpreadsheet); + } + + private function assertColumn(Spreadsheet $spreadsheet) + { + $sheet = $spreadsheet->getActiveSheet(); + $columnDimensions = $sheet->getColumnDimensions(); + + self::assertArrayHasKey('A', $columnDimensions); + $column = array_shift($columnDimensions); + self::assertEquals(20, $column->getWidth()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/CommentsTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/CommentsTest.php new file mode 100644 index 0000000..a394c96 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/CommentsTest.php @@ -0,0 +1,44 @@ +getActiveSheet()->getCell('E10')->setValue('Comment'); + $spreadsheet->getActiveSheet() + ->getComment('E10') + ->getText() + ->createText('Comment to test'); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + + $commentsLoaded = $reloadedSpreadsheet->getSheet(0)->getComments(); + self::assertCount(1, $commentsLoaded); + + $commentCoordinate = key($commentsLoaded); + self::assertSame('E10', $commentCoordinate); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php new file mode 100644 index 0000000..3aa3f94 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ConditionalStopIfTrueTest.php @@ -0,0 +1,72 @@ + no styling + $condition0 = new \PhpOffice\PhpSpreadsheet\Style\Conditional(); + $condition0->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_EXPRESSION); + $condition0->addCondition('LEN(TRIM(A1))=0'); + $condition0->setStopIfTrue(true); // ! stop here + + // if value below 0.6 (matches also blank cells!) -> red background + $condition1 = new \PhpOffice\PhpSpreadsheet\Style\Conditional(); + $condition1->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS); + $condition1->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_LESSTHAN); + $condition1->addCondition(0.6); + $condition1->getStyle()->getFill() + ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) + ->getEndColor()->setARGB(self::COLOR_RED); + + // if value above 0.6 -> green background + $condition2 = new \PhpOffice\PhpSpreadsheet\Style\Conditional(); + $condition2->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS); + $condition2->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_GREATERTHAN); + $condition2->addCondition(0.6); + $condition2->getStyle()->getFill() + ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) + ->getEndColor()->setARGB(self::COLOR_GREEN); + + $spreadsheet = new Spreadsheet(); + $spreadsheet->getActiveSheet()->getCell('A1')->setValue(0.7); + $spreadsheet->getActiveSheet()->getCell('A2')->setValue(''); + $spreadsheet->getActiveSheet()->getCell('A3')->setValue(0.4); + + // put all three conditions in sheet + $conditionalStyles = []; + array_push($conditionalStyles, $condition0); + array_push($conditionalStyles, $condition1); + array_push($conditionalStyles, $condition2); + $spreadsheet->getActiveSheet()->setConditionalStyles($pCoordinate, $conditionalStyles); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + + // see if we successfully written "StopIfTrue" + $newConditionalStyles = $reloadedSpreadsheet->getActiveSheet()->getConditionalStyles($pCoordinate); + self::assertTrue($newConditionalStyles[0]->getStopIfTrue(), 'StopIfTrue should be set (=true) on first condition'); + self::assertFalse($newConditionalStyles[1]->getStopIfTrue(), 'StopIfTrue should not be set (=false) on second condition'); + self::assertFalse($newConditionalStyles[2]->getStopIfTrue(), 'StopIfTrue should not be set (=false) on third condition'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/DrawingImageHyperlinkTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/DrawingImageHyperlinkTest.php new file mode 100644 index 0000000..9933315 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/DrawingImageHyperlinkTest.php @@ -0,0 +1,42 @@ +getActiveSheet(); + + $gdImage = @imagecreatetruecolor(120, 20); + $textColor = imagecolorallocate($gdImage, 255, 255, 255); + imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor); + + $drawing = new MemoryDrawing(); + $drawing->setName('In-Memory image 1'); + $drawing->setDescription('In-Memory image 1'); + $drawing->setCoordinates('A1'); + $drawing->setImageResource($gdImage); + $drawing->setRenderingFunction( + MemoryDrawing::RENDERING_JPEG + ); + $drawing->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT); + $drawing->setHeight(36); + $hyperLink = new Hyperlink($baseUrl, 'test image'); + $drawing->setHyperlink($hyperLink); + $drawing->setWorksheet($aSheet); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx'); + + foreach ($reloadedSpreadsheet->getActiveSheet()->getDrawingCollection() as $pDrawing) { + self::assertEquals('https://github.com/PHPOffice/PhpSpreadsheet', $pDrawing->getHyperlink()->getUrl(), 'functional test drawing hyperlink'); + } + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php new file mode 100644 index 0000000..3a5f961 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/EnclosureTest.php @@ -0,0 +1,37 @@ +'; + + $spreadsheet = new Spreadsheet(); + $spreadsheet->getActiveSheet()->getCell('A1')->setValue($value); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + + $actual = $reloadedSpreadsheet->getActiveSheet()->getCell('A1')->getCalculatedValue(); + self::assertSame($value, $actual, 'should be able to write and read strings with multiples quotes'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php new file mode 100644 index 0000000..fda6723 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/FreezePaneTest.php @@ -0,0 +1,75 @@ +getActiveSheet()->freezePane($cellSplit, $topLeftCell); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + + // Read written file + $reloadedActive = $reloadedSpreadsheet->getActiveSheet(); + $actualCellSplit = $reloadedActive->getFreezePane(); + $actualTopLeftCell = $reloadedActive->getTopLeftCell(); + + self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane'); + self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell'); + } + + public function providerFormatsInvalidSelectedCells() + { + return [ + ['Xlsx'], + ]; + } + + /** + * @dataProvider providerFormatsInvalidSelectedCells + * + * @param string $format + */ + public function testFreezePaneWithInvalidSelectedCells($format) + { + $cellSplit = 'A7'; + $topLeftCell = 'A24'; + + $spreadsheet = new Spreadsheet(); + $worksheet = $spreadsheet->getActiveSheet(); + + $worksheet->freezePane('A7', 'A24'); + $worksheet->setSelectedCells('F5'); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + + // Read written file + $reloadedActive = $reloadedSpreadsheet->getActiveSheet(); + $actualCellSplit = $reloadedActive->getFreezePane(); + $actualTopLeftCell = $reloadedActive->getTopLeftCell(); + + self::assertSame($cellSplit, $actualCellSplit, 'should be able to set freeze pane'); + self::assertSame($topLeftCell, $actualTopLeftCell, 'should be able to set the top left cell'); + self::assertSame('A24', $reloadedActive->getSelectedCells(), 'selected cell should default to be first cell after the freeze pane'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/HtmlCommentsTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/HtmlCommentsTest.php new file mode 100644 index 0000000..1b49727 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/HtmlCommentsTest.php @@ -0,0 +1,63 @@ +createText($valueSingle); + + $plainMulti = new RichText(); + $plainMulti->createText($valueMulti); + + $richSingle = new RichText(); + $richSingle->createTextRun($valueSingle)->getFont()->setBold(true); + + $richMultiSimple = new RichText(); + $richMultiSimple->createTextRun($valueMulti)->getFont()->setBold(true); + + $richMultiMixed = new RichText(); + $richMultiMixed->createText('I am' . PHP_EOL); + $richMultiMixed->createTextRun('multi-line')->getFont()->setBold(true); + $richMultiMixed->createText(PHP_EOL . 'comment!'); + + return [ + 'single line plain text' => [$plainSingle], + 'multi-line plain text' => [$plainMulti], + 'single line simple rich text' => [$richSingle], + 'multi-line simple rich text' => [$richMultiSimple], + 'multi-line mixed rich text' => [$richMultiMixed], + ]; + } + + /** + * @dataProvider providerCommentRichText + * + * @param mixed $richText + */ + public function testComments($richText) + { + $this->spreadsheet = new Spreadsheet(); + + $this->spreadsheet->getActiveSheet()->getCell('A1')->setValue('Comment'); + + $this->spreadsheet->getActiveSheet() + ->getComment('A1') + ->setText($richText); + + $reloadedSpreadsheet = $this->writeAndReload($this->spreadsheet, 'Html'); + + $actual = $reloadedSpreadsheet->getActiveSheet()->getComment('A1')->getText()->getPlainText(); + self::assertSame($richText->getPlainText(), $actual); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php new file mode 100644 index 0000000..7a60194 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/MergedCellsTest.php @@ -0,0 +1,42 @@ +setActiveSheetIndex(0); + $spreadsheet->getActiveSheet()->setCellValue('A1', '1'); + $spreadsheet->getActiveSheet()->setCellValue('B1', '2'); + $spreadsheet->getActiveSheet()->setCellValue('A2', '33'); + $spreadsheet->getActiveSheet()->mergeCells('A2:B2'); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + + $actual = 0; + foreach ($reloadedSpreadsheet->getWorksheetIterator() as $worksheet) { + $actual += count($worksheet->getMergeCells()); + } + + self::assertSame(1, $actual, "Format $format failed, could not read 1 merged cell"); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php new file mode 100644 index 0000000..1a6709c --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/PrintAreaTest.php @@ -0,0 +1,44 @@ +getActiveSheet()->setTitle('Sheet 1'); + $worksheet1->getPageSetup()->setPrintArea('A1:B1'); + + for ($i = 2; $i < 4; ++$i) { + $sheet = $spreadsheet->createSheet()->setTitle("Sheet $i"); + $sheet->getPageSetup()->setPrintArea("A$i:B$i"); + } + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format, function (BaseReader $reader) { + $reader->setLoadSheetsOnly(['Sheet 1', 'Sheet 3']); + }); + + $actual1 = $reloadedSpreadsheet->getSheetByName('Sheet 1')->getPageSetup()->getPrintArea(); + $actual3 = $reloadedSpreadsheet->getSheetByName('Sheet 3')->getPageSetup()->getPrintArea(); + self::assertSame('A1:B1', $actual1, 'should be able to write and read normal page setup'); + self::assertSame('A3:B3', $actual3, 'should be able to write and read page setup even when skipping sheets'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php new file mode 100644 index 0000000..288fc57 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/ReadFilterTest.php @@ -0,0 +1,124 @@ +getActiveSheet()->fromArray($arrayData, null, 'A1'); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + $sheet = $reloadedSpreadsheet->getSheet(0); + // test highest column (very specific num of columns because of some 3rd party software) + self::assertSame('J', $sheet->getHighestColumn()); + + // test highest row (very specific num of rows because of some 3rd party software) + self::assertEquals(10, $sheet->getHighestRow()); + + // test top left coordinate + $sortedCoordinates = $sheet->getCellCollection()->getSortedCoordinates(); + $coordinateTopLeft = reset($sortedCoordinates); + self::assertSame('A1', $coordinateTopLeft); + } + + /** + * Test load Xlsx file with many empty cells (and big max row number) with readfilter. + * + * @dataProvider providerCellsValues + * + * @param array $arrayData + * @param mixed $format + */ + public function testXlsxLoadWithReadFilter($format, array $arrayData) + { + $spreadsheet = new Spreadsheet(); + $spreadsheet->getActiveSheet()->fromArray($arrayData, null, 'A1'); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format, function ($reader) { + // Create a stub for the readFilter class. + $readFilterStub = $this->createMock(IReadFilter::class); + $readFilterStub->method('readCell') + ->will($this->returnCallback([$this, 'readFilterReadCell'])); + // apply filter + $reader->setReadFilter($readFilterStub); + }); + $sheet = $reloadedSpreadsheet->getSheet(0); + // test highest column (very specific num of columns because of some 3rd party software) + self::assertSame('D', $sheet->getHighestColumn()); + + // test highest row (very specific num of rows because of some 3rd party software) + self::assertEquals(6, $sheet->getHighestRow()); + + // test top left coordinate + $sortedCoordinates = $sheet->getCellCollection()->getSortedCoordinates(); + $coordinateTopLeft = reset($sortedCoordinates); + self::assertSame('B2', $coordinateTopLeft); + } + + /** + * @see \PhpOffice\PhpSpreadsheet\Reader\IReadFilter::readCell() + * + * @param string $column Column address (as a string value like "A", or "IV") + * @param int $row Row number + * @param string $worksheetName Optional worksheet name + * + * @return bool + */ + public function readFilterReadCell($column, $row, $worksheetName = '') + { + // define filter range + $rowMin = 2; + $rowMax = 6; + $columnMin = 'B'; + $columnMax = 'D'; + + $r = (int) $row; + if ($r > $rowMax || $r < $rowMin) { + return false; + } + + $col = sprintf('%04s', $column); + if ($col > sprintf('%04s', $columnMax) || + $col < sprintf('%04s', $columnMin)) { + return false; + } + + return true; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php new file mode 100644 index 0000000..53cc718 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/TypeAttributePreservationTest.php @@ -0,0 +1,51 @@ +getActiveSheet(); + $sheet->fromArray($values); + + $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format); + $reloadedSheet = $reloadedSpreadsheet->getActiveSheet(); + + $expected = $sheet->getCell('A1')->getCalculatedValue(); + + if ($sheet->getCell('A1')->getDataType() === 'f') { + $actual = $reloadedSheet->getCell('A1')->getOldCalculatedValue(); + } else { + $actual = $reloadedSheet->getCell('A1')->getValue(); + } + + self::assertSame($expected, $actual); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php new file mode 100644 index 0000000..cce2a95 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Functional/WorkbookViewAttributesTest.php @@ -0,0 +1,80 @@ +getActiveSheet(); + $worksheet1->setTitle('Tweedledee'); + $worksheet1->setCellValue('A1', 1); + $worksheet2 = $workbook->createSheet(); + $worksheet2->setTitle('Tweeldedum'); + $worksheet2->setCellValue('A1', 2); + + // Check that the bookview attributes return default values + $this->assertTrue($workbook->getShowHorizontalScroll()); + $this->assertTrue($workbook->getShowVerticalScroll()); + $this->assertTrue($workbook->getShowSheetTabs()); + $this->assertTrue($workbook->getAutoFilterDateGrouping()); + $this->assertFalse($workbook->getMinimized()); + $this->assertSame(0, $workbook->getFirstSheetIndex()); + $this->assertSame(600, $workbook->getTabRatio()); + $this->assertSame(Spreadsheet::VISIBILITY_VISIBLE, $workbook->getVisibility()); + + // Set the bookview attributes to non-default values + $workbook->setShowHorizontalScroll(false); + $workbook->setShowVerticalScroll(false); + $workbook->setShowSheetTabs(false); + $workbook->setAutoFilterDateGrouping(false); + $workbook->setMinimized(true); + $workbook->setFirstSheetIndex(1); + $workbook->setTabRatio(700); + $workbook->setVisibility(Spreadsheet::VISIBILITY_HIDDEN); + + // Check that bookview attributes were set properly + $this->assertFalse($workbook->getShowHorizontalScroll()); + $this->assertFalse($workbook->getShowVerticalScroll()); + $this->assertFalse($workbook->getShowSheetTabs()); + $this->assertFalse($workbook->getAutoFilterDateGrouping()); + $this->assertTrue($workbook->getMinimized()); + $this->assertSame(1, $workbook->getFirstSheetIndex()); + $this->assertSame(700, $workbook->getTabRatio()); + $this->assertSame(Spreadsheet::VISIBILITY_HIDDEN, $workbook->getVisibility()); + + $workbook2 = $this->writeAndReload($workbook, $format); + + // Check that the read spreadsheet has the right bookview attributes + $this->assertFalse($workbook2->getShowHorizontalScroll()); + $this->assertFalse($workbook2->getShowVerticalScroll()); + $this->assertFalse($workbook2->getShowSheetTabs()); + $this->assertFalse($workbook2->getAutoFilterDateGrouping()); + $this->assertTrue($workbook2->getMinimized()); + $this->assertSame(1, $workbook2->getFirstSheetIndex()); + $this->assertSame(700, $workbook2->getTabRatio()); + $this->assertSame(Spreadsheet::VISIBILITY_HIDDEN, $workbook2->getVisibility()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/HtmlTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/HtmlTest.php new file mode 100644 index 0000000..b15a728 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/HtmlTest.php @@ -0,0 +1,33 @@ +toRichTextObject($input); + + self::assertSame($expected, $actual->getPlainText()); + } + + public function providerUtf8EncodingSupport() + { + return [ + ['foo', 'foo'], + ['können', 'können'], + ['русский', 'русский'], + ["foo\nbar", '

foo

bar

'], + ]; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/MigratorTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/MigratorTest.php new file mode 100644 index 0000000..a64cda8 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/MigratorTest.php @@ -0,0 +1,88 @@ +getMapping() as $classname) { + if (substr_count($classname, '\\')) { + self::assertTrue(class_exists($classname) || interface_exists($classname), 'mapping is wrong, class does not exists in project: ' . $classname); + } + } + } + + public function testReplace() + { + $input = <<<'STRING' +do(); + $fooobjPHPExcel->do(); + $objPHPExcel->do(); + $this->objPHPExcel->do(); + $this->PHPExcel->do(); + + return \PHPExcel_Cell::stringFromColumnIndex(9); + } +} +STRING; + + $expected = <<<'STRING' +do(); + $fooobjPHPExcel->do(); + $objPHPExcel->do(); + $this->objPHPExcel->do(); + $this->PHPExcel->do(); + + return \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex(9); + } +} +STRING; + + $migrator = new Migrator(); + self::assertSame($expected, $migrator->replace($input)); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/SampleTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/SampleTest.php new file mode 100644 index 0000000..be1f50c --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Helper/SampleTest.php @@ -0,0 +1,62 @@ +setOutputCallback(function () { + }); + + require $sample; + } + + public function providerSample() + { + $skipped = [ + 'Chart/32_Chart_read_write_PDF.php', // Unfortunately JpGraph is not up to date for latest PHP and raise many warnings + 'Chart/32_Chart_read_write_HTML.php', // idem + ]; + + // TCPDF does not support PHP 7.2 + if (version_compare(PHP_VERSION, '7.2.0') >= 0) { + $skipped[] = 'Pdf/21_Pdf_TCPDF.php'; + } + + // Unfortunately some tests are too long be ran with code-coverage + // analysis on Travis, so we need to exclude them + global $argv; + if (in_array('--coverage-clover', $argv)) { + $tooLongToBeCovered = [ + 'Basic/06_Largescale.php', + 'Basic/13_CalculationCyclicFormulae.php', + ]; + $skipped = array_merge($skipped, $tooLongToBeCovered); + } + + $helper = new Sample(); + $result = []; + foreach ($helper->getSamples() as $samples) { + foreach ($samples as $sample) { + if (!in_array($sample, $skipped)) { + $file = '../samples/' . $sample; + $result[] = [$file]; + } + } + } + + return $result; + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/IOFactoryTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/IOFactoryTest.php new file mode 100644 index 0000000..4c9c52d --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/IOFactoryTest.php @@ -0,0 +1,147 @@ +expectException(\InvalidArgumentException::class); + + IOFactory::identify('/non/existing/file'); + } + + public function testIdentifyExistingDirectoryThrowExceptions() + { + $this->expectException(\InvalidArgumentException::class); + + IOFactory::identify('.'); + } + + public function testRegisterInvalidWriter() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Writer\Exception::class); + + IOFactory::registerWriter('foo', 'bar'); + } + + public function testRegisterInvalidReader() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Reader\Exception::class); + + IOFactory::registerReader('foo', 'bar'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/CsvTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/CsvTest.php new file mode 100644 index 0000000..eeddbb0 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/CsvTest.php @@ -0,0 +1,109 @@ +getDelimiter()); + + $spreadsheet = $reader->load($filename); + + self::assertSame($expectedDelimiter, $reader->getDelimiter(), 'should be able to infer the delimiter'); + + $actual = $spreadsheet->getActiveSheet()->getCell($cell)->getValue(); + self::assertSame($expectedValue, $actual, 'should be able to retrieve correct value'); + } + + public function providerDelimiterDetection() + { + return [ + [ + __DIR__ . '/../../data/Reader/CSV/enclosure.csv', + ',', + 'C4', + 'username2', + ], + [ + __DIR__ . '/../../data/Reader/CSV/semicolon_separated.csv', + ';', + 'C2', + '25,5', + ], + [ + __DIR__ . '/../../data/Reader/HTML/csv_with_angle_bracket.csv', + ',', + 'B1', + 'Number of items with weight <= 50kg', + ], + [ + __DIR__ . '/../../../samples/Reader/sampleData/example1.csv', + ',', + 'I4', + '100%', + ], + [ + __DIR__ . '/../../../samples/Reader/sampleData/example2.csv', + ',', + 'D8', + -58.373161, + ], + ]; + } + + /** + * @dataProvider providerCanLoad + * + * @param bool $expected + * @param string $filename + */ + public function testCanLoad($expected, $filename) + { + $reader = new Csv(); + self::assertSame($expected, $reader->canRead($filename)); + } + + public function providerCanLoad() + { + return [ + [false, 'data/Reader/Ods/data.ods'], + [false, 'data/Reader/Xml/WithoutStyle.xml'], + [true, 'data/Reader/CSV/enclosure.csv'], + [true, 'data/Reader/CSV/semicolon_separated.csv'], + [true, 'data/Reader/CSV/contains_html.csv'], + [true, 'data/Reader/CSV/csv_without_extension'], + [true, 'data/Reader/HTML/csv_with_angle_bracket.csv'], + [true, 'data/Reader/CSV/empty.csv'], + [true, '../samples/Reader/sampleData/example1.csv'], + [true, '../samples/Reader/sampleData/example2.csv'], + ]; + } + + public function testEscapeCharacters() + { + $reader = (new Csv())->setEscapeCharacter('"'); + $worksheet = $reader->load(__DIR__ . '/../../data/Reader/CSV/backslash.csv') + ->getActiveSheet(); + + $expected = [ + ['field 1', 'field 2\\'], + ['field 3\\', 'field 4'], + ]; + + $this->assertSame('"', $reader->getEscapeCharacter()); + $this->assertSame($expected, $worksheet->toArray()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/HtmlTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/HtmlTest.php new file mode 100644 index 0000000..9f9b11e --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/HtmlTest.php @@ -0,0 +1,46 @@ +canRead($filename)); + } + + public function providerCanReadVerySmallFile() + { + $padding = str_repeat('a', 2048); + + return [ + [true, ' ' . $padding . ' '], + [true, ' ' . $padding . ''], + [true, ''], + [false, ''], + ]; + } + + /** + * @dataProvider providerCanReadVerySmallFile + * + * @param bool $expected + * @param string $content + */ + public function testCanReadVerySmallFile($expected, $content) + { + $filename = tempnam(sys_get_temp_dir(), 'html'); + file_put_contents($filename, $content); + + $reader = new Html(); + $actual = $reader->canRead($filename); + unlink($filename); + + self::assertSame($expected, $actual); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/OdsTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/OdsTest.php new file mode 100644 index 0000000..a6edaee --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/OdsTest.php @@ -0,0 +1,225 @@ +spreadsheetOdsTest) { + $filename = __DIR__ . '/../../../samples/templates/OOCalcTest.ods'; + + // Load into this instance + $reader = new Ods(); + $this->spreadsheetOdsTest = $reader->loadIntoExisting($filename, new Spreadsheet()); + } + + return $this->spreadsheetOdsTest; + } + + /** + * @return Spreadsheet + */ + protected function loadDataFile() + { + if (!$this->spreadsheetData) { + $filename = __DIR__ . '/../../data/Reader/Ods/data.ods'; + + // Load into this instance + $reader = new Ods(); + $this->spreadsheetData = $reader->loadIntoExisting($filename, new Spreadsheet()); + } + + return $this->spreadsheetData; + } + + public function testReadFileProperties() + { + $filename = __DIR__ . '/../../data/Reader/Ods/data.ods'; + + // Load into this instance + $reader = new Ods(); + + // Test "listWorksheetNames" method + + self::assertEquals([ + 'Sheet1', + 'Second Sheet', + ], $reader->listWorksheetNames($filename)); + } + + public function testLoadWorksheets() + { + $spreadsheet = $this->loadDataFile(); + + self::assertInstanceOf('PhpOffice\PhpSpreadsheet\Spreadsheet', $spreadsheet); + + self::assertEquals(2, $spreadsheet->getSheetCount()); + + $firstSheet = $spreadsheet->getSheet(0); + self::assertInstanceOf('PhpOffice\PhpSpreadsheet\Worksheet\Worksheet', $firstSheet); + + $secondSheet = $spreadsheet->getSheet(1); + self::assertInstanceOf('PhpOffice\PhpSpreadsheet\Worksheet\Worksheet', $secondSheet); + } + + public function testReadValueAndComments() + { + $spreadsheet = $this->loadOdsTestFile(); + + $firstSheet = $spreadsheet->getSheet(0); + + self::assertEquals(29, $firstSheet->getHighestRow()); + self::assertEquals('N', $firstSheet->getHighestColumn()); + + // Simple cell value + self::assertEquals('Test String 1', $firstSheet->getCell('A1')->getValue()); + + // Merged cell + self::assertEquals('BOX', $firstSheet->getCell('B18')->getValue()); + + // Comments/Annotations + self::assertEquals( + 'Test for a simple colour-formatted string', + $firstSheet->getComment('A1')->getText()->getPlainText() + ); + + // Data types + self::assertEquals(DataType::TYPE_STRING, $firstSheet->getCell('A1')->getDataType()); + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('B1')->getDataType()); // Int + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('B6')->getDataType()); // Float + self::assertEquals(1.23, $firstSheet->getCell('B6')->getValue()); + self::assertEquals(0, $firstSheet->getCell('G10')->getValue()); + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A10')->getDataType()); // Date + self::assertEquals(22269.0, $firstSheet->getCell('A10')->getValue()); + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A13')->getDataType()); // Time + self::assertEquals(25569.0625, $firstSheet->getCell('A13')->getValue()); + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A15')->getDataType()); // Date + Time + self::assertEquals(22269.0625, $firstSheet->getCell('A15')->getValue()); + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A11')->getDataType()); // Fraction + + self::assertEquals(DataType::TYPE_BOOL, $firstSheet->getCell('D6')->getDataType()); + self::assertTrue($firstSheet->getCell('D6')->getValue()); + + self::assertEquals(DataType::TYPE_FORMULA, $firstSheet->getCell('C6')->getDataType()); // Formula + self::assertEquals('=TRUE()', $firstSheet->getCell('C6')->getValue()); // Formula + + // Percentage, Currency + + $spreadsheet = $this->loadDataFile(); + + $firstSheet = $spreadsheet->getSheet(0); + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A1')->getDataType()); // Percentage (10%) + self::assertEquals(0.1, $firstSheet->getCell('A1')->getValue()); + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A2')->getDataType()); // Percentage (10.00%) + self::assertEquals(0.1, $firstSheet->getCell('A2')->getValue()); + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A4')->getDataType()); // Currency (€10.00) + self::assertEquals(10, $firstSheet->getCell('A4')->getValue()); + + self::assertEquals(DataType::TYPE_NUMERIC, $firstSheet->getCell('A5')->getDataType()); // Currency ($20) + self::assertEquals(20, $firstSheet->getCell('A5')->getValue()); + } + + public function testReadColors() + { + $spreadsheet = $this->loadOdsTestFile(); + $firstSheet = $spreadsheet->getSheet(0); + + // Background color + + $style = $firstSheet->getCell('K3')->getStyle(); + + self::assertEquals('none', $style->getFill()->getFillType()); + self::assertEquals('FFFFFFFF', $style->getFill()->getStartColor()->getARGB()); + self::assertEquals('FF000000', $style->getFill()->getEndColor()->getARGB()); + } + + public function testReadRichText() + { + $spreadsheet = $this->loadOdsTestFile(); + $firstSheet = $spreadsheet->getSheet(0); + + self::assertEquals( + "I don't know if OOCalc supports Rich Text in the same way as Excel, " . + 'And this row should be autofit height with text wrap', + $firstSheet->getCell('A28')->getValue() + ); + } + + public function testReadCellsWithRepeatedSpaces() + { + $spreadsheet = $this->loadDataFile(); + $firstSheet = $spreadsheet->getSheet(0); + + self::assertEquals('This has 4 spaces before and 2 after ', $firstSheet->getCell('A8')->getValue()); + self::assertEquals('This only one after ', $firstSheet->getCell('A9')->getValue()); + self::assertEquals('Test with DIFFERENT styles and multiple spaces: ', $firstSheet->getCell('A10')->getValue()); + self::assertEquals("test with new \nLines", $firstSheet->getCell('A11')->getValue()); + } + + public function testReadHyperlinks() + { + $spreadsheet = $this->loadOdsTestFile(); + $firstSheet = $spreadsheet->getSheet(0); + + $hyperlink = $firstSheet->getCell('A29'); + + self::assertEquals(DataType::TYPE_STRING, $hyperlink->getDataType()); + self::assertEquals('PhpSpreadsheet', $hyperlink->getValue()); + self::assertEquals('https://github.com/PHPOffice/phpspreadsheet', $hyperlink->getHyperlink()->getUrl()); + } + + // Below some test for features not implemented yet + + public function testReadBoldItalicUnderline() + { + $this->markTestIncomplete('Features not implemented yet'); + + $spreadsheet = $this->loadOdsTestFile(); + $firstSheet = $spreadsheet->getSheet(0); + + // Font styles + + $style = $firstSheet->getCell('A1')->getStyle(); + self::assertEquals('FF000000', $style->getFont()->getColor()->getARGB()); + self::assertEquals(11, $style->getFont()->getSize()); + self::assertEquals(Font::UNDERLINE_NONE, $style->getFont()->getUnderline()); + + $style = $firstSheet->getCell('E3')->getStyle(); + self::assertEquals(Font::UNDERLINE_SINGLE, $style->getFont()->getUnderline()); + + $style = $firstSheet->getCell('E1')->getStyle(); + self::assertTrue($style->getFont()->getBold()); + self::assertTrue($style->getFont()->getItalic()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/XlsxTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/XlsxTest.php new file mode 100644 index 0000000..fd14714 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/XlsxTest.php @@ -0,0 +1,19 @@ +load($filename); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/XmlTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/XmlTest.php new file mode 100644 index 0000000..763e177 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Reader/XmlTest.php @@ -0,0 +1,105 @@ +expectException(\PhpOffice\PhpSpreadsheet\Reader\Exception::class); + + $reader = $this->getMockForAbstractClass(BaseReader::class); + $expectedResult = 'FAILURE: Should throw an Exception rather than return a value'; + $result = $reader->securityScanFile($filename); + self::assertEquals($expectedResult, $result); + } + + public function providerInvalidXML() + { + $tests = []; + foreach (glob(__DIR__ . '/../../data/Reader/Xml/XEETestInvalidUTF*.xml') as $file) { + $tests[basename($file)] = [realpath($file)]; + } + + return $tests; + } + + /** + * @dataProvider providerInvalidSimpleXML + * + * @param $filename + */ + public function testInvalidSimpleXML($filename) + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Reader\Exception::class); + + $xmlReader = new Xml(); + $xmlReader->trySimpleXMLLoadString($filename); + } + + public function providerInvalidSimpleXML() + { + $tests = []; + foreach (glob(__DIR__ . '/../../data/Reader/Xml/XEETestInvalidSimpleXML*.xml') as $file) { + $tests[basename($file)] = [realpath($file)]; + } + + return $tests; + } + + /** + * @dataProvider providerValidXML + * + * @param mixed $filename + * @param mixed $expectedResult + */ + public function testValidXML($filename, $expectedResult) + { + $reader = $this->getMockForAbstractClass(BaseReader::class); + $result = $reader->securityScanFile($filename); + self::assertEquals($expectedResult, $result); + } + + public function providerValidXML() + { + $tests = []; + foreach (glob(__DIR__ . '/../../data/Reader/Xml/XEETestValid*.xml') as $file) { + $tests[basename($file)] = [realpath($file), file_get_contents($file)]; + } + + return $tests; + } + + /** + * Check if it can read XML Hyperlink correctly. + */ + public function testReadHyperlinks() + { + $reader = new Xml(); + $spreadsheet = $reader->load('../samples/templates/Excel2003XMLTest.xml'); + $firstSheet = $spreadsheet->getSheet(0); + + $hyperlink = $firstSheet->getCell('L1'); + + self::assertEquals(DataType::TYPE_STRING, $hyperlink->getDataType()); + self::assertEquals('PhpSpreadsheet', $hyperlink->getValue()); + self::assertEquals('http://phpspreadsheet.readthedocs.io/', $hyperlink->getHyperlink()->getUrl()); + } + + public function testReadWithoutStyle() + { + $reader = new Xml(); + $spreadsheet = $reader->load(__DIR__ . '/../../data/Reader/Xml/WithoutStyle.xml'); + self::assertSame('Test String 1', $spreadsheet->getActiveSheet()->getCell('A1')->getValue()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/ReferenceHelperTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/ReferenceHelperTest.php new file mode 100644 index 0000000..08b290d --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/ReferenceHelperTest.php @@ -0,0 +1,56 @@ + $value) { + self::assertEquals($columnExpectedResult[$key], $value); + } + } + + public function testColumnReverseSort() + { + $columnBase = $columnExpectedResult = [ + 'A', 'B', 'Z', + 'AA', 'AB', 'AZ', + 'BA', 'BB', 'BZ', + 'ZA', 'ZB', 'ZZ', + 'AAA', 'AAB', 'AAZ', + 'ABA', 'ABB', 'ABZ', + 'AZA', 'AZB', 'AZZ', + 'BAA', 'BAB', 'BAZ', + 'BBA', 'BBB', 'BBZ', + 'BZA', 'BZB', 'BZZ', + ]; + shuffle($columnBase); + $columnExpectedResult = array_reverse($columnExpectedResult); + usort($columnBase, [ReferenceHelper::class, 'columnReverseSort']); + foreach ($columnBase as $key => $value) { + self::assertEquals($columnExpectedResult[$key], $value); + } + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/SettingsTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/SettingsTest.php new file mode 100644 index 0000000..6878986 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/SettingsTest.php @@ -0,0 +1,40 @@ +prevValue = libxml_disable_entity_loader(); + libxml_disable_entity_loader(false); // Enable entity loader + } + + protected function tearDown() + { + libxml_disable_entity_loader($this->prevValue); + } + + public function testGetXMLSettings() + { + $result = Settings::getLibXmlLoaderOptions(); + self::assertTrue((bool) ((LIBXML_DTDLOAD | LIBXML_DTDATTR) & $result)); + self::assertFalse(libxml_disable_entity_loader()); + } + + public function testSetXMLSettings() + { + Settings::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID); + $result = Settings::getLibXmlLoaderOptions(); + self::assertTrue((bool) ((LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID) & $result)); + self::assertFalse(libxml_disable_entity_loader()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/CodePageTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/CodePageTest.php new file mode 100644 index 0000000..b0e5fbf --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/CodePageTest.php @@ -0,0 +1,54 @@ +getMessage(), 'Unknown codepage: 12345'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } + + public function testNumberToNameWithUnsupportedCodePage() + { + $unsupportedCodePage = 720; + + try { + CodePage::numberToName($unsupportedCodePage); + } catch (Exception $e) { + self::assertEquals($e->getMessage(), 'Code page 720 not supported.'); + + return; + } + $this->fail('An expected exception has not been raised.'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/DateTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/DateTest.php new file mode 100644 index 0000000..4a5479e --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Shared/DateTest.php @@ -0,0 +1,171 @@ +getActiveSheet(); + + $argb = 'FFFF0000'; + $color = new Color($argb); + + $sheet->getStyle('A1:C1')->getBorders()->getTop()->setBorderStyle(Border::BORDER_THIN)->setColor($color); + $sheet->getStyle('A1:A3')->getBorders()->getLeft()->setBorderStyle(Border::BORDER_THIN)->setColor($color); + $sheet->getStyle('C1:C3')->getBorders()->getRight()->setBorderStyle(Border::BORDER_THIN)->setColor($color); + $sheet->getStyle('A3:C3')->getBorders()->getBottom()->setBorderStyle(Border::BORDER_THIN)->setColor($color); + + // upper row + $expectations = [ + // cell => Left/Right/Top/Bottom + 'A1' => 'LT', + 'B1' => 'T', + 'C1' => 'RT', + 'A2' => 'L', + 'B2' => '', + 'C2' => 'R', + 'A3' => 'LB', + 'B3' => 'B', + 'C3' => 'RB', + ]; + $sides = [ + 'L' => 'Left', + 'R' => 'Right', + 'T' => 'Top', + 'B' => 'Bottom', + ]; + + foreach ($expectations as $cell => $borders) { + $bs = $sheet->getStyle($cell)->getBorders(); + foreach ($sides as $sidekey => $side) { + $assertion = "setBorderStyle on a range of cells, $cell $side"; + $func = "get$side"; + $b = $bs->$func(); // boo + + if (strpos($borders, $sidekey) === false) { + self::assertSame(Border::BORDER_NONE, $b->getBorderStyle(), $assertion); + } else { + self::assertSame(Border::BORDER_THIN, $b->getBorderStyle(), $assertion); + self::assertSame($argb, $b->getColor()->getARGB(), $assertion); + } + } + } + } + + public function testBorderRangeDirectly() + { + // testcase for the underlying problem directly + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $style = $sheet->getStyle('A1:C1')->getBorders()->getTop()->setBorderStyle(Border::BORDER_THIN); + self::assertSame('A1:C1', $style->getSelectedCells(), 'getSelectedCells should not change after a style operation on a border range'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/BorderTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/BorderTest.php new file mode 100644 index 0000000..7efe935 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/BorderTest.php @@ -0,0 +1,26 @@ +getActiveSheet()->getStyle('A1')->getBorders(); + $allBorders = $borders->getAllBorders(); + $bottom = $borders->getBottom(); + + $actual = $bottom->getBorderStyle(); + self::assertSame(Border::BORDER_NONE, $actual, 'should default to none'); + + $allBorders->setBorderStyle(Border::BORDER_THIN); + + $actual = $bottom->getBorderStyle(); + self::assertSame(Border::BORDER_THIN, $actual, 'should have been set via allBorders'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/ColorTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/ColorTest.php new file mode 100644 index 0000000..a99c899 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Style/ColorTest.php @@ -0,0 +1,73 @@ +mockAutoFilterColumnObject = $this->getMockBuilder(Column::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->testAutoFilterRuleObject = new Column\Rule( + $this->mockAutoFilterColumnObject + ); + } + + public function testGetRuleType() + { + $result = $this->testAutoFilterRuleObject->getRuleType(); + self::assertEquals(Column\Rule::AUTOFILTER_RULETYPE_FILTER, $result); + } + + public function testSetRuleType() + { + $expectedResult = Column\Rule::AUTOFILTER_RULETYPE_DATEGROUP; + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterRuleObject->setRuleType($expectedResult); + self::assertInstanceOf(Column\Rule::class, $result); + + $result = $this->testAutoFilterRuleObject->getRuleType(); + self::assertEquals($expectedResult, $result); + } + + public function testSetValue() + { + $expectedResult = 100; + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterRuleObject->setValue($expectedResult); + self::assertInstanceOf(Column\Rule::class, $result); + + $result = $this->testAutoFilterRuleObject->getValue(); + self::assertEquals($expectedResult, $result); + } + + public function testGetOperator() + { + $result = $this->testAutoFilterRuleObject->getOperator(); + self::assertEquals(Column\Rule::AUTOFILTER_COLUMN_RULE_EQUAL, $result); + } + + public function testSetOperator() + { + $expectedResult = Column\Rule::AUTOFILTER_COLUMN_RULE_LESSTHAN; + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterRuleObject->setOperator($expectedResult); + self::assertInstanceOf(Column\Rule::class, $result); + + $result = $this->testAutoFilterRuleObject->getOperator(); + self::assertEquals($expectedResult, $result); + } + + public function testSetGrouping() + { + $expectedResult = Column\Rule::AUTOFILTER_RULETYPE_DATEGROUP_MONTH; + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterRuleObject->setGrouping($expectedResult); + self::assertInstanceOf(Column\Rule::class, $result); + + $result = $this->testAutoFilterRuleObject->getGrouping(); + self::assertEquals($expectedResult, $result); + } + + public function testGetParent() + { + $result = $this->testAutoFilterRuleObject->getParent(); + self::assertInstanceOf(Column::class, $result); + } + + public function testSetParent() + { + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterRuleObject->setParent($this->mockAutoFilterColumnObject); + self::assertInstanceOf(Column\Rule::class, $result); + } + + public function testClone() + { + $result = clone $this->testAutoFilterRuleObject; + self::assertInstanceOf(Column\Rule::class, $result); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/ColumnTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/ColumnTest.php new file mode 100644 index 0000000..9ce636d --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilter/ColumnTest.php @@ -0,0 +1,176 @@ +mockAutoFilterObject = $this->getMockBuilder(AutoFilter::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockAutoFilterObject->expects($this->any()) + ->method('testColumnInRange') + ->will($this->returnValue(3)); + + $this->testAutoFilterColumnObject = new AutoFilter\Column($this->testInitialColumn, $this->mockAutoFilterObject); + } + + public function testGetColumnIndex() + { + $result = $this->testAutoFilterColumnObject->getColumnIndex(); + self::assertEquals($this->testInitialColumn, $result); + } + + public function testSetColumnIndex() + { + $expectedResult = 'L'; + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterColumnObject->setColumnIndex($expectedResult); + self::assertInstanceOf(AutoFilter\Column::class, $result); + + $result = $this->testAutoFilterColumnObject->getColumnIndex(); + self::assertEquals($expectedResult, $result); + } + + public function testGetParent() + { + $result = $this->testAutoFilterColumnObject->getParent(); + self::assertInstanceOf(AutoFilter::class, $result); + } + + public function testSetParent() + { + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterColumnObject->setParent($this->mockAutoFilterObject); + self::assertInstanceOf(AutoFilter\Column::class, $result); + } + + public function testGetFilterType() + { + $result = $this->testAutoFilterColumnObject->getFilterType(); + self::assertEquals(AutoFilter\Column::AUTOFILTER_FILTERTYPE_FILTER, $result); + } + + public function testSetFilterType() + { + $result = $this->testAutoFilterColumnObject->setFilterType(AutoFilter\Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER); + self::assertInstanceOf(AutoFilter\Column::class, $result); + + $result = $this->testAutoFilterColumnObject->getFilterType(); + self::assertEquals(AutoFilter\Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER, $result); + } + + public function testSetInvalidFilterTypeThrowsException() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $expectedResult = 'Unfiltered'; + + $this->testAutoFilterColumnObject->setFilterType($expectedResult); + } + + public function testGetJoin() + { + $result = $this->testAutoFilterColumnObject->getJoin(); + self::assertEquals(AutoFilter\Column::AUTOFILTER_COLUMN_JOIN_OR, $result); + } + + public function testSetJoin() + { + $result = $this->testAutoFilterColumnObject->setJoin(AutoFilter\Column::AUTOFILTER_COLUMN_JOIN_AND); + self::assertInstanceOf(AutoFilter\Column::class, $result); + + $result = $this->testAutoFilterColumnObject->getJoin(); + self::assertEquals(AutoFilter\Column::AUTOFILTER_COLUMN_JOIN_AND, $result); + } + + public function testSetInvalidJoinThrowsException() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $expectedResult = 'Neither'; + + $this->testAutoFilterColumnObject->setJoin($expectedResult); + } + + public function testSetAttributes() + { + $attributeSet = [ + 'val' => 100, + 'maxVal' => 200, + ]; + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterColumnObject->setAttributes($attributeSet); + self::assertInstanceOf(AutoFilter\Column::class, $result); + } + + public function testGetAttributes() + { + $attributeSet = [ + 'val' => 100, + 'maxVal' => 200, + ]; + + $this->testAutoFilterColumnObject->setAttributes($attributeSet); + + $result = $this->testAutoFilterColumnObject->getAttributes(); + self::assertInternalType('array', $result); + self::assertCount(count($attributeSet), $result); + } + + public function testSetAttribute() + { + $attributeSet = [ + 'val' => 100, + 'maxVal' => 200, + ]; + + foreach ($attributeSet as $attributeName => $attributeValue) { + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterColumnObject->setAttribute($attributeName, $attributeValue); + self::assertInstanceOf(AutoFilter\Column::class, $result); + } + } + + public function testGetAttribute() + { + $attributeSet = [ + 'val' => 100, + 'maxVal' => 200, + ]; + + $this->testAutoFilterColumnObject->setAttributes($attributeSet); + + foreach ($attributeSet as $attributeName => $attributeValue) { + $result = $this->testAutoFilterColumnObject->getAttribute($attributeName); + self::assertEquals($attributeValue, $result); + } + $result = $this->testAutoFilterColumnObject->getAttribute('nonExistentAttribute'); + self::assertNull($result); + } + + public function testClone() + { + $originalRule = $this->testAutoFilterColumnObject->createRule(); + $result = clone $this->testAutoFilterColumnObject; + self::assertInstanceOf(AutoFilter\Column::class, $result); + self::assertCount(1, $result->getRules()); + self::assertContainsOnlyInstancesOf(AutoFilter\Column\Rule::class, $result->getRules()); + $clonedRule = $result->getRules()[0]; + self::assertNotSame($originalRule, $clonedRule); + self::assertSame($result, $clonedRule->getParent()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilterTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilterTest.php new file mode 100644 index 0000000..6766aac --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/AutoFilterTest.php @@ -0,0 +1,336 @@ +mockWorksheetObject = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + $this->cellCollection = $this->getMockBuilder(Cells::class) + ->disableOriginalConstructor() + ->getMock(); + $this->mockWorksheetObject->expects($this->any()) + ->method('getCellCollection') + ->will($this->returnValue($this->cellCollection)); + + $this->testAutoFilterObject = new AutoFilter($this->testInitialRange, $this->mockWorksheetObject); + } + + public function testToString() + { + $expectedResult = $this->testInitialRange; + + // magic __toString should return the active autofilter range + $result = $this->testAutoFilterObject; + self::assertEquals($expectedResult, $result); + } + + public function testGetParent() + { + $result = $this->testAutoFilterObject->getParent(); + self::assertInstanceOf(Worksheet::class, $result); + } + + public function testSetParent() + { + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterObject->setParent($this->mockWorksheetObject); + self::assertInstanceOf(AutoFilter::class, $result); + } + + public function testGetRange() + { + $expectedResult = $this->testInitialRange; + + // Result should be the active autofilter range + $result = $this->testAutoFilterObject->getRange(); + self::assertEquals($expectedResult, $result); + } + + public function testSetRange() + { + $ranges = [ + 'G1:J512' => 'Worksheet1!G1:J512', + 'K1:N20' => 'K1:N20', + ]; + + foreach ($ranges as $actualRange => $fullRange) { + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterObject->setRange($fullRange); + self::assertInstanceOf(AutoFilter::class, $result); + + // Result should be the new autofilter range + $result = $this->testAutoFilterObject->getRange(); + self::assertEquals($actualRange, $result); + } + } + + public function testClearRange() + { + $expectedResult = ''; + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterObject->setRange(''); + self::assertInstanceOf(AutoFilter::class, $result); + + // Result should be a clear range + $result = $this->testAutoFilterObject->getRange(); + self::assertEquals($expectedResult, $result); + } + + public function testSetRangeInvalidRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $expectedResult = 'A1'; + + $this->testAutoFilterObject->setRange($expectedResult); + } + + public function testGetColumnsEmpty() + { + // There should be no columns yet defined + $result = $this->testAutoFilterObject->getColumns(); + self::assertInternalType('array', $result); + self::assertCount(0, $result); + } + + public function testGetColumnOffset() + { + $columnIndexes = [ + 'H' => 0, + 'K' => 3, + 'M' => 5, + ]; + + // If we request a specific column by its column ID, we should get an + // integer returned representing the column offset within the range + foreach ($columnIndexes as $columnIndex => $columnOffset) { + $result = $this->testAutoFilterObject->getColumnOffset($columnIndex); + self::assertEquals($columnOffset, $result); + } + } + + public function testGetInvalidColumnOffset() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $invalidColumn = 'G'; + + $this->testAutoFilterObject->getColumnOffset($invalidColumn); + } + + public function testSetColumnWithString() + { + $expectedResult = 'L'; + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterObject->setColumn($expectedResult); + self::assertInstanceOf(AutoFilter::class, $result); + + $result = $this->testAutoFilterObject->getColumns(); + // Result should be an array of \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet\AutoFilter\Column + // objects for each column we set indexed by the column ID + self::assertInternalType('array', $result); + self::assertCount(1, $result); + self::assertArrayHasKey($expectedResult, $result); + self::assertInstanceOf(Column::class, $result[$expectedResult]); + } + + public function testSetInvalidColumnWithString() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $invalidColumn = 'A'; + + $this->testAutoFilterObject->setColumn($invalidColumn); + } + + public function testSetColumnWithColumnObject() + { + $expectedResult = 'M'; + $columnObject = new AutoFilter\Column($expectedResult); + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterObject->setColumn($columnObject); + self::assertInstanceOf(AutoFilter::class, $result); + + $result = $this->testAutoFilterObject->getColumns(); + // Result should be an array of \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet\AutoFilter\Column + // objects for each column we set indexed by the column ID + self::assertInternalType('array', $result); + self::assertCount(1, $result); + self::assertArrayHasKey($expectedResult, $result); + self::assertInstanceOf(Column::class, $result[$expectedResult]); + } + + public function testSetInvalidColumnWithObject() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $invalidColumn = 'E'; + $this->testAutoFilterObject->setColumn($invalidColumn); + } + + public function testSetColumnWithInvalidDataType() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $invalidColumn = 123.456; + $this->testAutoFilterObject->setColumn($invalidColumn); + } + + public function testGetColumns() + { + $columnIndexes = ['L', 'M']; + + foreach ($columnIndexes as $columnIndex) { + $this->testAutoFilterObject->setColumn($columnIndex); + } + + $result = $this->testAutoFilterObject->getColumns(); + // Result should be an array of \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet\AutoFilter\Column + // objects for each column we set indexed by the column ID + self::assertInternalType('array', $result); + self::assertCount(count($columnIndexes), $result); + foreach ($columnIndexes as $columnIndex) { + self::assertArrayHasKey($columnIndex, $result); + self::assertInstanceOf(Column::class, $result[$columnIndex]); + } + } + + public function testGetColumn() + { + $columnIndexes = ['L', 'M']; + + foreach ($columnIndexes as $columnIndex) { + $this->testAutoFilterObject->setColumn($columnIndex); + } + + // If we request a specific column by its column ID, we should + // get a \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet\AutoFilter\Column object returned + foreach ($columnIndexes as $columnIndex) { + $result = $this->testAutoFilterObject->getColumn($columnIndex); + self::assertInstanceOf(Column::class, $result); + } + } + + public function testGetColumnByOffset() + { + $columnIndexes = [ + 0 => 'H', + 3 => 'K', + 5 => 'M', + ]; + + // If we request a specific column by its offset, we should + // get a \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet\AutoFilter\Column object returned + foreach ($columnIndexes as $columnIndex => $columnID) { + $result = $this->testAutoFilterObject->getColumnByOffset($columnIndex); + self::assertInstanceOf(Column::class, $result); + self::assertEquals($result->getColumnIndex(), $columnID); + } + } + + public function testGetColumnIfNotSet() + { + // If we request a specific column by its column ID, we should + // get a \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet\AutoFilter\Column object returned + $result = $this->testAutoFilterObject->getColumn('K'); + self::assertInstanceOf(Column::class, $result); + } + + public function testGetColumnWithoutRangeSet() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + // Clear the range + $this->testAutoFilterObject->setRange(''); + $this->testAutoFilterObject->getColumn('A'); + } + + public function testClearRangeWithExistingColumns() + { + $expectedResult = ''; + + $columnIndexes = ['L', 'M', 'N']; + foreach ($columnIndexes as $columnIndex) { + $this->testAutoFilterObject->setColumn($columnIndex); + } + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterObject->setRange(''); + self::assertInstanceOf(AutoFilter::class, $result); + + // Range should be cleared + $result = $this->testAutoFilterObject->getRange(); + self::assertEquals($expectedResult, $result); + + // Column array should be cleared + $result = $this->testAutoFilterObject->getColumns(); + self::assertInternalType('array', $result); + self::assertCount(0, $result); + } + + public function testSetRangeWithExistingColumns() + { + $expectedResult = 'G1:J512'; + + // These columns should be retained + $columnIndexes1 = ['I', 'J']; + foreach ($columnIndexes1 as $columnIndex) { + $this->testAutoFilterObject->setColumn($columnIndex); + } + // These columns should be discarded + $columnIndexes2 = ['K', 'L', 'M']; + foreach ($columnIndexes2 as $columnIndex) { + $this->testAutoFilterObject->setColumn($columnIndex); + } + + // Setters return the instance to implement the fluent interface + $result = $this->testAutoFilterObject->setRange($expectedResult); + self::assertInstanceOf(AutoFilter::class, $result); + + // Range should be correctly set + $result = $this->testAutoFilterObject->getRange(); + self::assertEquals($expectedResult, $result); + + // Only columns that existed in the original range and that + // still fall within the new range should be retained + $result = $this->testAutoFilterObject->getColumns(); + self::assertInternalType('array', $result); + self::assertCount(count($columnIndexes1), $result); + } + + public function testClone() + { + $columnIndexes = ['L', 'M']; + + foreach ($columnIndexes as $columnIndex) { + $this->testAutoFilterObject->setColumn($columnIndex); + } + + $result = clone $this->testAutoFilterObject; + self::assertInstanceOf(AutoFilter::class, $result); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIteratorTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIteratorTest.php new file mode 100644 index 0000000..46880e2 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnCellIteratorTest.php @@ -0,0 +1,86 @@ +mockCell = $this->getMockBuilder(Cell::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockWorksheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockWorksheet->expects($this->any()) + ->method('getHighestRow') + ->will($this->returnValue(5)); + $this->mockWorksheet->expects($this->any()) + ->method('getCellByColumnAndRow') + ->will($this->returnValue($this->mockCell)); + } + + public function testIteratorFullRange() + { + $iterator = new ColumnCellIterator($this->mockWorksheet, 'A'); + $ColumnCellIndexResult = 1; + self::assertEquals($ColumnCellIndexResult, $iterator->key()); + + foreach ($iterator as $key => $ColumnCell) { + self::assertEquals($ColumnCellIndexResult++, $key); + self::assertInstanceOf(Cell::class, $ColumnCell); + } + } + + public function testIteratorStartEndRange() + { + $iterator = new ColumnCellIterator($this->mockWorksheet, 'A', 2, 4); + $ColumnCellIndexResult = 2; + self::assertEquals($ColumnCellIndexResult, $iterator->key()); + + foreach ($iterator as $key => $ColumnCell) { + self::assertEquals($ColumnCellIndexResult++, $key); + self::assertInstanceOf(Cell::class, $ColumnCell); + } + } + + public function testIteratorSeekAndPrev() + { + $iterator = new ColumnCellIterator($this->mockWorksheet, 'A', 2, 4); + $columnIndexResult = 4; + $iterator->seek(4); + self::assertEquals($columnIndexResult, $iterator->key()); + + for ($i = 1; $i < $columnIndexResult - 1; ++$i) { + $iterator->prev(); + self::assertEquals($columnIndexResult - $i, $iterator->key()); + } + } + + public function testSeekOutOfRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $iterator = new ColumnCellIterator($this->mockWorksheet, 'A', 2, 4); + $iterator->seek(1); + } + + public function testPrevOutOfRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $iterator = new ColumnCellIterator($this->mockWorksheet, 'A', 2, 4); + $iterator->prev(); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorTest.php new file mode 100644 index 0000000..7285961 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnIteratorTest.php @@ -0,0 +1,85 @@ +mockColumn = $this->getMockBuilder(Column::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockWorksheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockWorksheet->expects($this->any()) + ->method('getHighestColumn') + ->will($this->returnValue('E')); + } + + public function testIteratorFullRange() + { + $iterator = new ColumnIterator($this->mockWorksheet); + $columnIndexResult = 'A'; + self::assertEquals($columnIndexResult, $iterator->key()); + + foreach ($iterator as $key => $column) { + self::assertEquals($columnIndexResult++, $key); + self::assertInstanceOf(Column::class, $column); + } + } + + public function testIteratorStartEndRange() + { + $iterator = new ColumnIterator($this->mockWorksheet, 'B', 'D'); + $columnIndexResult = 'B'; + self::assertEquals($columnIndexResult, $iterator->key()); + + foreach ($iterator as $key => $column) { + self::assertEquals($columnIndexResult++, $key); + self::assertInstanceOf(Column::class, $column); + } + } + + public function testIteratorSeekAndPrev() + { + $ranges = range('A', 'E'); + $iterator = new ColumnIterator($this->mockWorksheet, 'B', 'D'); + $columnIndexResult = 'D'; + $iterator->seek('D'); + self::assertEquals($columnIndexResult, $iterator->key()); + + for ($i = 1; $i < array_search($columnIndexResult, $ranges); ++$i) { + $iterator->prev(); + $expectedResult = $ranges[array_search($columnIndexResult, $ranges) - $i]; + self::assertEquals($expectedResult, $iterator->key()); + } + } + + public function testSeekOutOfRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $iterator = new ColumnIterator($this->mockWorksheet, 'B', 'D'); + $iterator->seek('A'); + } + + public function testPrevOutOfRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $iterator = new ColumnIterator($this->mockWorksheet, 'B', 'D'); + $iterator->prev(); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnTest.php new file mode 100644 index 0000000..b1e7b47 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/ColumnTest.php @@ -0,0 +1,48 @@ +mockWorksheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + $this->mockWorksheet->expects($this->any()) + ->method('getHighestRow') + ->will($this->returnValue(5)); + } + + public function testInstantiateColumnDefault() + { + $column = new Column($this->mockWorksheet); + self::assertInstanceOf(Column::class, $column); + $columnIndex = $column->getColumnIndex(); + self::assertEquals('A', $columnIndex); + } + + public function testInstantiateColumnSpecified() + { + $column = new Column($this->mockWorksheet, 'E'); + self::assertInstanceOf(Column::class, $column); + $columnIndex = $column->getColumnIndex(); + self::assertEquals('E', $columnIndex); + } + + public function testGetCellIterator() + { + $column = new Column($this->mockWorksheet); + $cellIterator = $column->getCellIterator(); + self::assertInstanceOf(ColumnCellIterator::class, $cellIterator); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/DrawingTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/DrawingTest.php new file mode 100644 index 0000000..32bd97f --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/DrawingTest.php @@ -0,0 +1,40 @@ +getActiveSheet(); + + $gdImage = @imagecreatetruecolor(120, 20); + $textColor = imagecolorallocate($gdImage, 255, 255, 255); + imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor); + + $drawing = new MemoryDrawing(); + $drawing->setName('In-Memory image 1'); + $drawing->setDescription('In-Memory image 1'); + $drawing->setCoordinates('A1'); + $drawing->setImageResource($gdImage); + $drawing->setRenderingFunction( + MemoryDrawing::RENDERING_JPEG + ); + $drawing->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT); + $drawing->setHeight(36); + $drawing->setWorksheet($aSheet); + + $originDrawingCount = count($aSheet->getDrawingCollection()); + $clonedWorksheet = clone $aSheet; + $clonedDrawingCount = count($clonedWorksheet->getDrawingCollection()); + + self::assertEquals($originDrawingCount, $clonedDrawingCount); + self::assertNotSame($aSheet, $clonedWorksheet); + self::assertNotSame($aSheet->getDrawingCollection(), $clonedWorksheet->getDrawingCollection()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowCellIteratorTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowCellIteratorTest.php new file mode 100644 index 0000000..9346d0a --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowCellIteratorTest.php @@ -0,0 +1,88 @@ +mockCell = $this->getMockBuilder(Cell::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockWorksheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockWorksheet->expects($this->any()) + ->method('getHighestColumn') + ->will($this->returnValue('E')); + $this->mockWorksheet->expects($this->any()) + ->method('getCellByColumnAndRow') + ->will($this->returnValue($this->mockCell)); + } + + public function testIteratorFullRange() + { + $iterator = new RowCellIterator($this->mockWorksheet); + $RowCellIndexResult = 'A'; + self::assertEquals($RowCellIndexResult, $iterator->key()); + + foreach ($iterator as $key => $RowCell) { + self::assertEquals($RowCellIndexResult++, $key); + self::assertInstanceOf(Cell::class, $RowCell); + } + } + + public function testIteratorStartEndRange() + { + $iterator = new RowCellIterator($this->mockWorksheet, 2, 'B', 'D'); + $RowCellIndexResult = 'B'; + self::assertEquals($RowCellIndexResult, $iterator->key()); + + foreach ($iterator as $key => $RowCell) { + self::assertEquals($RowCellIndexResult++, $key); + self::assertInstanceOf(Cell::class, $RowCell); + } + } + + public function testIteratorSeekAndPrev() + { + $ranges = range('A', 'E'); + $iterator = new RowCellIterator($this->mockWorksheet, 2, 'B', 'D'); + $RowCellIndexResult = 'D'; + $iterator->seek('D'); + self::assertEquals($RowCellIndexResult, $iterator->key()); + + for ($i = 1; $i < array_search($RowCellIndexResult, $ranges); ++$i) { + $iterator->prev(); + $expectedResult = $ranges[array_search($RowCellIndexResult, $ranges) - $i]; + self::assertEquals($expectedResult, $iterator->key()); + } + } + + public function testSeekOutOfRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $iterator = new RowCellIterator($this->mockWorksheet, 2, 'B', 'D'); + $iterator->seek(1); + } + + public function testPrevOutOfRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $iterator = new RowCellIterator($this->mockWorksheet, 2, 'B', 'D'); + $iterator->prev(); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowIteratorTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowIteratorTest.php new file mode 100644 index 0000000..63e26b3 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowIteratorTest.php @@ -0,0 +1,83 @@ +mockRow = $this->getMockBuilder(Row::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockWorksheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->mockWorksheet->expects($this->any()) + ->method('getHighestRow') + ->will($this->returnValue(5)); + } + + public function testIteratorFullRange() + { + $iterator = new RowIterator($this->mockWorksheet); + $rowIndexResult = 1; + self::assertEquals($rowIndexResult, $iterator->key()); + + foreach ($iterator as $key => $row) { + self::assertEquals($rowIndexResult++, $key); + self::assertInstanceOf(Row::class, $row); + } + } + + public function testIteratorStartEndRange() + { + $iterator = new RowIterator($this->mockWorksheet, 2, 4); + $rowIndexResult = 2; + self::assertEquals($rowIndexResult, $iterator->key()); + + foreach ($iterator as $key => $row) { + self::assertEquals($rowIndexResult++, $key); + self::assertInstanceOf(Row::class, $row); + } + } + + public function testIteratorSeekAndPrev() + { + $iterator = new RowIterator($this->mockWorksheet, 2, 4); + $columnIndexResult = 4; + $iterator->seek(4); + self::assertEquals($columnIndexResult, $iterator->key()); + + for ($i = 1; $i < $columnIndexResult - 1; ++$i) { + $iterator->prev(); + self::assertEquals($columnIndexResult - $i, $iterator->key()); + } + } + + public function testSeekOutOfRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $iterator = new RowIterator($this->mockWorksheet, 2, 4); + $iterator->seek(1); + } + + public function testPrevOutOfRange() + { + $this->expectException(\PhpOffice\PhpSpreadsheet\Exception::class); + + $iterator = new RowIterator($this->mockWorksheet, 2, 4); + $iterator->prev(); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowTest.php new file mode 100644 index 0000000..0b2822c --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/RowTest.php @@ -0,0 +1,48 @@ +mockWorksheet = $this->getMockBuilder(Worksheet::class) + ->disableOriginalConstructor() + ->getMock(); + $this->mockWorksheet->expects($this->any()) + ->method('getHighestColumn') + ->will($this->returnValue('E')); + } + + public function testInstantiateRowDefault() + { + $row = new Row($this->mockWorksheet); + self::assertInstanceOf(Row::class, $row); + $rowIndex = $row->getRowIndex(); + self::assertEquals(1, $rowIndex); + } + + public function testInstantiateRowSpecified() + { + $row = new Row($this->mockWorksheet, 5); + self::assertInstanceOf(Row::class, $row); + $rowIndex = $row->getRowIndex(); + self::assertEquals(5, $rowIndex); + } + + public function testGetCellIterator() + { + $row = new Row($this->mockWorksheet); + $cellIterator = $row->getCellIterator(); + self::assertInstanceOf(RowCellIterator::class, $cellIterator); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php new file mode 100644 index 0000000..5dfa825 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Worksheet/WorksheetTest.php @@ -0,0 +1,133 @@ +setTitle($testTitle); + self::assertSame($testTitle, $worksheet->getTitle()); + } + + public function setTitleInvalidProvider() + { + return [ + [str_repeat('a', 32), 'Maximum 31 characters allowed in sheet title.'], + ['invalid*title', 'Invalid character found in sheet title'], + ]; + } + + /** + * @param string $title + * @param string $expectMessage + * @dataProvider setTitleInvalidProvider + */ + public function testSetTitleInvalid($title, $expectMessage) + { + // First, test setting title with validation disabled -- should be successful + $worksheet = new Worksheet(); + $worksheet->setTitle($title, true, false); + + // Next, test again with validation enabled -- this time we should fail + $worksheet = new Worksheet(); + $this->expectException(\Exception::class); + $this->expectExceptionMessage($expectMessage); + $worksheet->setTitle($title); + } + + public function testSetTitleDuplicate() + { + // Create a Spreadsheet with three Worksheets (the first is created automatically) + $spreadsheet = new Spreadsheet(); + $spreadsheet->createSheet(); + $spreadsheet->createSheet(); + + // Set unique title -- should be unchanged + $sheet = $spreadsheet->getSheet(0); + $sheet->setTitle('Test Title'); + self::assertSame('Test Title', $sheet->getTitle()); + + // Set duplicate title -- should have numeric suffix appended + $sheet = $spreadsheet->getSheet(1); + $sheet->setTitle('Test Title'); + self::assertSame('Test Title 1', $sheet->getTitle()); + + // Set duplicate title with validation disabled -- should be unchanged + $sheet = $spreadsheet->getSheet(2); + $sheet->setTitle('Test Title', true, false); + self::assertSame('Test Title', $sheet->getTitle()); + } + + public function testSetCodeName() + { + $testCodeName = str_repeat('a', 31); + + $worksheet = new Worksheet(); + $worksheet->setCodeName($testCodeName); + self::assertSame($testCodeName, $worksheet->getCodeName()); + } + + public function setCodeNameInvalidProvider() + { + return [ + [str_repeat('a', 32), 'Maximum 31 characters allowed in sheet code name.'], + ['invalid*code*name', 'Invalid character found in sheet code name'], + ]; + } + + /** + * @param string $codeName + * @param string $expectMessage + * @dataProvider setCodeNameInvalidProvider + */ + public function testSetCodeNameInvalid($codeName, $expectMessage) + { + // First, test setting code name with validation disabled -- should be successful + $worksheet = new Worksheet(); + $worksheet->setCodeName($codeName, false); + + // Next, test again with validation enabled -- this time we should fail + $worksheet = new Worksheet(); + $this->expectException(\Exception::class); + $this->expectExceptionMessage($expectMessage); + $worksheet->setCodeName($codeName); + } + + public function testSetCodeNameDuplicate() + { + // Create a Spreadsheet with three Worksheets (the first is created automatically) + $spreadsheet = new Spreadsheet(); + $spreadsheet->createSheet(); + $spreadsheet->createSheet(); + + // Set unique code name -- should be massaged to Snake_Case + $sheet = $spreadsheet->getSheet(0); + $sheet->setCodeName('Test Code Name'); + self::assertSame('Test_Code_Name', $sheet->getCodeName()); + + // Set duplicate code name -- should be massaged and have numeric suffix appended + $sheet = $spreadsheet->getSheet(1); + $sheet->setCodeName('Test Code Name'); + self::assertSame('Test_Code_Name_1', $sheet->getCodeName()); + + // Set duplicate code name with validation disabled -- should be unchanged, and unmassaged + $sheet = $spreadsheet->getSheet(2); + $sheet->setCodeName('Test Code Name', false); + self::assertSame('Test Code Name', $sheet->getCodeName()); + } + + public function testFreezePaneSelectedCell() + { + $worksheet = new Worksheet(); + $worksheet->freezePane('B2'); + self::assertSame('B2', $worksheet->getTopLeftCell()); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Ods/ContentTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Ods/ContentTest.php new file mode 100644 index 0000000..0c9995a --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Ods/ContentTest.php @@ -0,0 +1,98 @@ +compatibilityMode = Functions::getCompatibilityMode(); + Functions::setCompatibilityMode(Functions::COMPATIBILITY_OPENOFFICE); + } + + protected function tearDown() + { + parent::tearDown(); + Functions::setCompatibilityMode($this->compatibilityMode); + } + + public function testWriteEmptySpreadsheet() + { + $content = new Content(new Ods(new Spreadsheet())); + $xml = $content->write(); + + self::assertXmlStringEqualsXmlFile($this->samplesPath . '/content-empty.xml', $xml); + } + + public function testWriteSpreadsheet() + { + $workbook = new Spreadsheet(); + + // Worksheet 1 + $worksheet1 = $workbook->getActiveSheet(); + $worksheet1->setCellValue('A1', 1); // Number + $worksheet1->setCellValue('B1', 12345.6789); // Number + $worksheet1->setCellValue('C1', '1'); // Number without cast + $worksheet1->setCellValueExplicit('D1', '01234', DataType::TYPE_STRING); // Number casted to string + $worksheet1->setCellValue('E1', 'Lorem ipsum'); // String + + $worksheet1->setCellValue('A2', true); // Boolean + $worksheet1->setCellValue('B2', false); // Boolean + $worksheet1->setCellValueExplicit( + 'C2', + '=IF(A3, CONCATENATE(A1, " ", A2), CONCATENATE(A2, " ", A1))', + DataType::TYPE_FORMULA + ); // Formula + + $worksheet1->setCellValue('D2', Date::PHPToExcel(1488635026)); // Date + $worksheet1->getStyle('D2') + ->getNumberFormat() + ->setFormatCode(NumberFormat::FORMAT_DATE_DATETIME); + + // Styles + $worksheet1->getStyle('A1')->getFont()->setBold(true); + $worksheet1->getStyle('B1')->getFont()->setItalic(true); + $worksheet1->getStyle('C1')->getFont()->setName('Courier'); + $worksheet1->getStyle('C1')->getFont()->setSize(14); + $worksheet1->getStyle('C1')->getFont()->setColor(new Color(Color::COLOR_BLUE)); + + $worksheet1->getStyle('C1')->getFill()->setFillType(Fill::FILL_SOLID); + $worksheet1->getStyle('C1')->getFill()->setStartColor(new Color(Color::COLOR_RED)); + + $worksheet1->getStyle('C1')->getFont()->setUnderline(Font::UNDERLINE_SINGLE); + $worksheet1->getStyle('C2')->getFont()->setUnderline(Font::UNDERLINE_DOUBLE); + $worksheet1->getStyle('D2')->getFont()->setUnderline(Font::UNDERLINE_NONE); + + // Worksheet 2 + $worksheet2 = $workbook->createSheet(); + $worksheet2->setTitle('New Worksheet'); + $worksheet2->setCellValue('A1', 2); + + // Write + $content = new Content(new Ods($workbook)); + $xml = $content->write(); + + self::assertXmlStringEqualsXmlFile($this->samplesPath . '/content-with-data.xml', $xml); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Xls/WorkbookTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Xls/WorkbookTest.php new file mode 100644 index 0000000..591f48f --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Xls/WorkbookTest.php @@ -0,0 +1,143 @@ +workbook = new Workbook($spreadsheet, $strTotal, $strUnique, $str_table, $colors, $parser); + } + + /** + * @dataProvider providerAddColor + * + * @param array $testColors + * @param array $expectedResult + */ + public function testAddColor(array $testColors, array $expectedResult) + { + $workbookReflection = new \ReflectionClass(Workbook::class); + $methodAddColor = $workbookReflection->getMethod('addColor'); + $propertyPalette = $workbookReflection->getProperty('palette'); + $methodAddColor->setAccessible(true); + $propertyPalette->setAccessible(true); + + foreach ($testColors as $testColor) { + $methodAddColor->invoke($this->workbook, $testColor); + } + + $palette = $propertyPalette->getValue($this->workbook); + + self::assertEquals($expectedResult, $palette); + } + + public function providerAddColor() + { + $this->setUp(); + + $workbookReflection = new \ReflectionClass(Workbook::class); + $propertyPalette = $workbookReflection->getProperty('palette'); + $propertyPalette->setAccessible(true); + + $palette = $propertyPalette->getValue($this->workbook); + + $newColor1 = [0x00, 0x00, 0x01, 0x00]; + $newColor2 = [0x00, 0x00, 0x02, 0x00]; + $newColor3 = [0x00, 0x00, 0x03, 0x00]; + + // Add one new color + $paletteTestOne = $palette; + $paletteTestOne[8] = $newColor1; + + // Add one new color + one existing color after index 8 + $paletteTestTwo = $paletteTestOne; + + // Add one new color + one existing color before index 9 + $paletteTestThree = $paletteTestOne; + $paletteTestThree[9] = $palette[8]; + + // Add three new color + $paletteTestFour = $palette; + $paletteTestFour[8] = $newColor1; + $paletteTestFour[9] = $newColor2; + $paletteTestFour[10] = $newColor3; + + // Add all existing color + $colorsAdd = array_map([$this, 'paletteToColor'], $palette); + $paletteTestFive = $palette; + + // Add new color after all existing color + $colorsAddTwo = array_map([$this, 'paletteToColor'], $palette); + $colorsAddTwo[] = $this->paletteToColor($newColor1); + $paletteTestSix = $palette; + + // Add one existing color + $paletteTestSeven = $palette; + + // Add two existing color + $paletteTestHeight = $palette; + + // Add last existing color and add one new color + $keyPalette = array_keys($palette); + $last = end($keyPalette); + $lastColor = $this->paletteToColor($palette[$last]); + $paletteTestNine = $palette; + + return [ + [[$this->paletteToColor($newColor1)], $paletteTestOne], + [[$this->paletteToColor($newColor1), $this->paletteToColor($palette[12])], $paletteTestTwo], + [[$this->paletteToColor($newColor1), $this->paletteToColor($palette[8])], $paletteTestThree], + [[$this->paletteToColor($newColor1), $this->paletteToColor($newColor2), $this->paletteToColor($newColor3)], $paletteTestFour], + [$colorsAdd, $paletteTestFive], + [$colorsAddTwo, $paletteTestSix], + [[$this->paletteToColor($palette[8])], $paletteTestSeven], + [[$this->paletteToColor($palette[25]), $this->paletteToColor($palette[10])], $paletteTestHeight], + [[$lastColor, $this->paletteToColor($newColor1)], $paletteTestNine], + ]; + } + + /** + * Change palette color to rgb string. + * + * @param array $palette palette color + * + * @return string rgb string + */ + private function paletteToColor($palette) + { + return $this->right('00' . dechex((int) ($palette[0])), 2) + . $this->right('00' . dechex((int) ($palette[1])), 2) + . $this->right('00' . dechex((int) ($palette[2])), 2); + } + + /** + * Return n right character in string. + * + * @param string $value text to get right character + * @param int $nbchar number of char at right of string + * + * @return string + */ + private function right($value, $nbchar) + { + return mb_substr($value, mb_strlen($value) - $nbchar, $nbchar); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Xlsx/UnparsedDataTest.php b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Xlsx/UnparsedDataTest.php new file mode 100644 index 0000000..c17d55d --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/PhpSpreadsheetTests/Writer/Xlsx/UnparsedDataTest.php @@ -0,0 +1,103 @@ +load($sampleFilename); + + $excel->getSheet(1)->setCellValue('B1', '222'); + + $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($excel); + $writer->save($resultFilename); + self::assertFileExists($resultFilename); + + $resultZip = new ZipArchive(); + $resultZip->open($resultFilename); + $resultContentTypesRaw = $resultZip->getFromName('[Content_Types].xml'); + $resultControlPropRaw = $resultZip->getFromName('xl/ctrlProps/ctrlProp1.xml'); + $resultDrawingRaw = $resultZip->getFromName('xl/drawings/drawing1.xml'); + $resultVmlDrawingRaw = $resultZip->getFromName('xl/drawings/vmlDrawing1.vml'); + $resultPrinterSettingsRaw = $resultZip->getFromName('xl/printerSettings/printerSettings1.bin'); + $resultVbaProjectRaw = $resultZip->getFromName('xl/vbaProject.bin'); + $resultWorkbookRaw = $resultZip->getFromName('xl/workbook.xml'); + $resultSheet1RelsRaw = $resultZip->getFromName('xl/worksheets/_rels/sheet1.xml.rels'); + $resultSheet1Raw = $resultZip->getFromName('xl/worksheets/sheet1.xml'); + $resultSheet2Raw = $resultZip->getFromName('xl/worksheets/sheet2.xml'); + if (false === $resultZip->close()) { + throw new Exception("Could not close zip file \"{$resultFilename}\"."); + } + unlink($resultFilename); + + // [Content_Types].xml + $this->assertTrue(strpos($resultContentTypesRaw, 'application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings') > 0, 'Content type for printerSettings not found!'); + $this->assertTrue(strpos($resultContentTypesRaw, 'application/vnd.ms-office.vbaProject') > 0, 'Content type for VbaProject not found!'); + $this->assertTrue(strpos($resultContentTypesRaw, 'application/vnd.ms-excel.controlproperties+xml') > 0, 'Content type for ctrlProp not found!'); + + // xl/ctrlProps/ctrlProp1.xml + $this->assertTrue(!empty($resultControlPropRaw), 'ctrlProp not found!'); + + // xl/drawings/drawing1.xml + $this->assertTrue(strpos($resultDrawingRaw, ' 0, 'AlternateContent at drawing.xml not found!'); + + // xl/drawings/vmlDrawing1.vml + $this->assertTrue(!empty($resultVmlDrawingRaw), 'vmlDrawing not found!'); + + // xl/printerSettings/printerSettings1.bin + $this->assertTrue(!empty($resultPrinterSettingsRaw), 'printerSettings.bin not found!'); + + // xl/vbaProject.bin + $this->assertTrue(!empty($resultVbaProjectRaw), 'vbaProject.bin not found!'); + + // xl/workbook.xml + $xmlWorkbook = simplexml_load_string($resultWorkbookRaw, 'SimpleXMLElement', Settings::getLibXmlLoaderOptions()); + if (!$xmlWorkbook->workbookProtection) { + $this->fail('workbook.xml/workbookProtection not found!'); + } else { + $this->assertEquals($xmlWorkbook->workbookProtection['workbookPassword'], 'CBEB', 'workbook.xml/workbookProtection[workbookPassword] is wrong!'); + $this->assertEquals($xmlWorkbook->workbookProtection['lockStructure'], 'true', 'workbook.xml/workbookProtection[lockStructure] is wrong!'); + + $this->assertEquals($xmlWorkbook->sheets->sheet[0]['state'], '', 'workbook.xml/sheets/sheet[0][state] is wrong!'); + $this->assertEquals($xmlWorkbook->sheets->sheet[1]['state'], 'hidden', 'workbook.xml/sheets/sheet[1][state] is wrong!'); + } + unset($xmlWorkbook); + + // xl/worksheets/_rels/sheet1.xml.rels + $this->assertTrue(strpos($resultSheet1RelsRaw, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings') > 0, 'Sheet relation with printerSettings not found!'); + $this->assertTrue(strpos($resultSheet1RelsRaw, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing') > 0, 'Sheet relation with vmlDrawing not found!'); + $this->assertTrue(strpos($resultSheet1RelsRaw, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/ctrlProp') > 0, 'Sheet relation with ctrlProp not found!'); + + // xl/worksheets/sheet1.xml + $this->assertTrue(strpos($resultSheet1Raw, ' 0, 'AlternateContent at sheet1.xml not found!'); + $xmlWorksheet = simplexml_load_string($resultSheet1Raw, 'SimpleXMLElement', Settings::getLibXmlLoaderOptions()); + $pageSetupAttributes = $xmlWorksheet->pageSetup->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $this->assertTrue(!empty($pageSetupAttributes['id']), 'sheet1.xml/pageSetup[r:id] not found!'); + if (!$xmlWorksheet->sheetProtection) { + $this->fail('sheet1.xml/sheetProtection not found!'); + } else { + $this->assertEquals($xmlWorksheet->sheetProtection['password'], 'CBEB', 'sheet1.xml/sheetProtection[password] is wrong!'); + $this->assertEquals($xmlWorksheet->sheetProtection['sheet'], 'true', 'sheet1.xml/sheetProtection[sheet] is wrong!'); + $this->assertEquals($xmlWorksheet->sheetProtection['objects'], 'true', 'sheet1.xml/sheetProtection[objects] is wrong!'); + $this->assertEquals($xmlWorksheet->sheetProtection['scenarios'], 'true', 'sheet1.xml/sheetProtection[scenarios] is wrong!'); + } + unset($xmlWorksheet); + + // xl/worksheets/sheet2.xml + $this->assertTrue(!empty($resultSheet2Raw), 'sheet2.xml not found!'); + } +} diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/bootstrap.php b/inc/vendor/phpoffice/phpspreadsheet/tests/bootstrap.php new file mode 100644 index 0000000..f89fe40 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/bootstrap.php @@ -0,0 +1,13 @@ +"A"', + '>A', + ], + [ + '<="A"', + '<=A', + ], + [ + '>"A"', + '>A', + ], + [ + '>="A"', + '>=A', + ], + [ + '<>"A"', + '<>A', + ], + [ + '<""< PLEASE SELECT >"', + '<>< Please Select >', + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/ISFORMULA.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/ISFORMULA.php new file mode 100644 index 0000000..9e0d0d0 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/Functions/ISFORMULA.php @@ -0,0 +1,84 @@ + 0, 2 > 0, + ], + [ + true, + true, false, false, + ], + [ + true, + 1 > 0, 0 > 1, + ], + [ + true, + 0 > 1, 2 > 0, + ], + [ + false, + 0 > 1, 0 > 2, + ], + [ + false, + 1 > 0, 2 > 0, 0 > 1, 0 > 2, + ], + [ + true, + 1 > 0, 2 > 0, 3 > 0, 0 > 1, + ], + [ + false, + 'TRUE', + 1, + 0.5, + ], + [ + true, + 'FALSE', + 1.5, + 0, + ], + [ + '#VALUE!', + 'HELLO WORLD', + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/COLUMNS.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/COLUMNS.php new file mode 100644 index 0000000..3a6a587 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/COLUMNS.php @@ -0,0 +1,36 @@ + [1, 1]], + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/FORMULATEXT.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/FORMULATEXT.php new file mode 100644 index 0000000..30b2d6e --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/FORMULATEXT.php @@ -0,0 +1,34 @@ + ['R' => 1]], // Expected + // Input + [20 => ['R' => 1]], + ], + [ + '#VALUE!', // Expected + // Input + [ + 20 => ['R' => 1], + 21 => ['R' => 2], + ], + -1, + ], + [ + '#REF!', // Expected + // Input + [ + 20 => ['R' => 1], + 21 => ['R' => 2], + ], + 10, + ], + [ + [21 => ['R' => 2]], // Expected + // Input + [ + 20 => ['R' => 1], + 21 => ['R' => 2], + ], + 2, + ], + [ + [21 => ['R' => 2, 'S' => 4]], // Expected + // Input + [ + '20' => ['R' => 1, 'S' => 3], + '21' => ['R' => 2, 'S' => 4], + ], + 2, + 0, + ], + [ + '#VALUE!', // Expected + // Input + [ + '20' => ['R' => 1, 'S' => 3], + '21' => ['R' => 2, 'S' => 4], + ], + 2, + -1, + ], + [ + '#VALUE!', // Expected + // Input + [ + '20' => ['R' => 1, 'S' => 3], + '21' => ['R' => 2, 'S' => 4], + ], + 2, + 10, + ], + [ + 4, // Expected + // Input + [ + '20' => ['R' => 1, 'S' => 3], + '21' => ['R' => 2, 'S' => 4], + ], + 2, + 2, + ], + [ + 4, // Expected + // Input + [ + '20' => ['R' => 1, 'S' => 3], + '21' => ['R' => 2, 'S' => 4], + ], + [ + '21' => ['R' => 2], + ], + [ + '21' => ['R' => 2], + ], + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/MATCH.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/MATCH.php new file mode 100644 index 0000000..a82acdd --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/MATCH.php @@ -0,0 +1,99 @@ + [1, 1]], + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/VLOOKUP.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/VLOOKUP.php new file mode 100644 index 0000000..2ef64d0 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/LookupRef/VLOOKUP.php @@ -0,0 +1,294 @@ + ['A' => 0], + 2 => ['A' => 1], + 3 => ['A' => 1], + 4 => ['A' => 2], + 5 => ['A' => 3], + 6 => ['A' => 5], + 7 => ['A' => 8], + 8 => ['A' => 13], + 9 => ['A' => 21], + 10 => ['A' => 34], + 11 => ['A' => 55], + 12 => ['A' => 89], +]; + +return [ + [ + 19.3333333333333, + 1, + $baseTestData, + ], + [ + 12, + 2, + $baseTestData, + ], + [ + 12, + 3, + $baseTestData, + ], + [ + 89, + 4, + $baseTestData, + ], + [ + 0, + 5, + $baseTestData, + ], + [ + 0, + 6, + $baseTestData, + ], + [ + 27.5196899207337, + 7, + $baseTestData, + ], + [ + 26.3480971271593, + 8, + $baseTestData, + ], + [ + 232, + 9, + $baseTestData, + ], + [ + 757.3333333333330, + 10, + $baseTestData, + ], + [ + 694.2222222222220, + 11, + $baseTestData, + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTALHIDDEN.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTALHIDDEN.php new file mode 100644 index 0000000..001531f --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTALHIDDEN.php @@ -0,0 +1,74 @@ + ['A' => 0], + 2 => ['A' => 1], + 3 => ['A' => 1], + 4 => ['A' => 2], + 5 => ['A' => 3], + 6 => ['A' => 5], + 7 => ['A' => 8], + 8 => ['A' => 13], + 9 => ['A' => 21], + 10 => ['A' => 34], + 11 => ['A' => 55], + 12 => ['A' => 89], +]; + +return [ + [ + 21, + 101, + $baseTestData, + ], + [ + 5, + 102, + $baseTestData, + ], + [ + 5, + 103, + $baseTestData, + ], + [ + 55, + 104, + $baseTestData, + ], + [ + 1, + 105, + $baseTestData, + ], + [ + 48620, + 106, + $baseTestData, + ], + [ + 23.1840462387393, + 107, + $baseTestData, + ], + [ + 20.7364413533277, + 108, + $baseTestData, + ], + [ + 105, + 109, + $baseTestData, + ], + [ + 537.5, + 110, + $baseTestData, + ], + [ + 430, + 111, + $baseTestData, + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTALNESTED.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTALNESTED.php new file mode 100644 index 0000000..e1ae38f --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUBTOTALNESTED.php @@ -0,0 +1,18 @@ + ['A' => 123], + 2 => ['A' => 234], + 3 => ['A' => '=SUBTOTAL(1, A1:A2)'], + 4 => ['A' => '=ROMAN(SUBTOTAL(1, A1:A2))'], + 5 => ['A' => 'This is text containing "=" and "SUBTOTAL("'], + 6 => ['A' => '=AGGREGATE(1, A1:A2)'], +]; + +return [ + [ + 357, + 9, + $baseTestData, + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMIF.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMIF.php new file mode 100644 index 0000000..0b94701 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMIF.php @@ -0,0 +1,61 @@ +=5', + ], + [ + 10, + [ + ['text'], + [2], + ], + '=text', + [ + [10], + [100], + ], + ], + [ + 10, + [ + ['"text with quotes"'], + [2], + ], + '="text with quotes"', + [ + [10], + [100], + ], + ], + [ + 10, + [ + ['"text with quotes"'], + [''], + ], + '>"', // Compare to the single characater " (double quote) + [ + [10], + [100], + ], + ], + [ + 100, + [ + [''], + ['anything'], + ], + '>"', // Compare to the single characater " (double quote) + [ + [10], + [100], + ], + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMPRODUCT.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMPRODUCT.php new file mode 100644 index 0000000..3a75e03 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/MathTrig/SUMPRODUCT.php @@ -0,0 +1,19 @@ + [ + "\u{0061}\u{030A}", + "\u{0061}\u{030A}", + "\u{00E5}", + 'x', + ], + 'Multibytes are supported' => [ + 'x', + "\u{00E5}", + "\u{00E5}", + 'x', + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/T.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/T.php new file mode 100644 index 0000000..8eb7095 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Calculation/TextData/T.php @@ -0,0 +1,24 @@ + 1', + true, + true, + ], + [ + '=3 > 3', + false, + false, + ], + [ + '=1 > 3', + false, + false, + ], + [ + '=3 < 1', + false, + false, + ], + [ + '=3 < 3', + false, + false, + ], + [ + '=1 < 3', + true, + true, + ], + [ + '=3 = 1', + false, + false, + ], + [ + '=3 = 3', + true, + true, + ], + [ + '=1 = 1.0', + true, + true, + ], + [ + '=3 >= 1', + true, + true, + ], + [ + '=3 >= 3', + true, + true, + ], + [ + '=1 >= 3', + false, + false, + ], + [ + '=3 <= 1', + false, + false, + ], + [ + '=3 <= 3', + true, + true, + ], + [ + '=1 <= 3', + true, + true, + ], + [ + '=3 <> 1', + true, + true, + ], + [ + '=3 <> 3', + false, + false, + ], + [ + '=1 <> 1.0', + false, + false, + ], + [ + '="a" > "a"', + false, + false, + ], + [ + '="A" > "A"', + false, + false, + ], + [ + '="A" > "a"', + false, + true, + ], + [ + '="a" > "A"', + false, + false, + ], + [ + '="a" < "a"', + false, + false, + ], + [ + '="A" < "A"', + false, + false, + ], + [ + '="A" < "a"', + false, + false, + ], + [ + '="a" < "A"', + false, + true, + ], + [ + '="a" = "a"', + true, + true, + ], + [ + '="A" = "A"', + true, + true, + ], + [ + '="A" = "a"', + true, + false, + ], + [ + '="a" = "A"', + true, + false, + ], + [ + '="a" <= "a"', + true, + true, + ], + [ + '="A" <= "A"', + true, + true, + ], + [ + '="A" <= "a"', + true, + false, + ], + [ + '="a" <= "A"', + true, + true, + ], + [ + '="a" >= "a"', + true, + true, + ], + [ + '="A" >= "A"', + true, + true, + ], + [ + '="A" >= "a"', + true, + true, + ], + [ + '="a" >= "A"', + true, + false, + ], + [ + '="a" <> "a"', + false, + false, + ], + [ + '="A" <> "A"', + false, + false, + ], + [ + '="A" <> "a"', + false, + true, + ], + [ + '="a" <> "A"', + false, + true, + ], + [ + '="A" > "b"', + false, + true, + ], + [ + '="a" > "b"', + false, + false, + ], + [ + '="b" > "a"', + true, + true, + ], + [ + '="b" > "A"', + true, + false, + ], + // Test natural sorting is not used + [ + '="a2" > "a10"', + true, + true, + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Cell/DefaultValueBinder.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Cell/DefaultValueBinder.php new file mode 100644 index 0000000..53ba628 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Cell/DefaultValueBinder.php @@ -0,0 +1,76 @@ + 'x', + 'A4' => 'y', + ], + [ + 'A1' => 'x', + 'A2' => 'x', + 'A3' => 'x', + 'A4' => 'y', + ], + ], + [ + [ + 'A1:A4' => 'x', + 'A6:A7' => 'x', + 'A9' => 'x', + ], + [ + 'A7' => 'x', + 'A1' => 'x', + 'A4' => 'x', + 'A6' => 'x', + 'A2' => 'x', + 'A9' => 'x', + 'A3' => 'x', + ], + ], + [ + [ + 'A1:A3' => 'x', + 'B1:B3' => 'x', + ], + [ + 'A1' => 'x', + 'B3' => 'x', + 'A2' => 'x', + 'B2' => 'x', + 'A3' => 'x', + 'B1' => 'x', + ], + ], + [ + [ + 'A1' => 'x', + 'A2' => 'y', + 'A3' => 'z', + ], + [ + 'A1' => 'x', + 'A2' => 'y', + 'A3' => 'z', + ], + ], + [ + [ + 'C1' => 'x', + 'A1:A3' => 'x', + 'A1:A3,C1:C3' => 'y', + ], + [ + 'C1' => 'x', + 'A1:A3' => 'x', + 'A1:A3,C1:C3' => 'y', + ], + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/CellRangeBoundaries.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/CellRangeBoundaries.php new file mode 100644 index 0000000..9e856ce --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/CellRangeBoundaries.php @@ -0,0 +1,30 @@ +Link";"Column C" \ No newline at end of file diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/csv_without_extension b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/csv_without_extension new file mode 100644 index 0000000..378dc51 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/csv_without_extension @@ -0,0 +1,3 @@ +This;Are;Headers +Cell A2;Number with comma;25,5 +Two colons and a comma;B|3;:,: diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/empty.csv b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/empty.csv new file mode 100644 index 0000000..e69de29 diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/enclosure.csv b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/enclosure.csv new file mode 100644 index 0000000..a768c63 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/enclosure.csv @@ -0,0 +1,4 @@ +"Date/Time","task","username" +"12/17/2017 14:35","viewpage","username1", +"12/17/2017 04:00","editpage","username5", +"11/29/2017 08:20","deletepage","username2",, diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/semicolon_separated.csv b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/semicolon_separated.csv new file mode 100644 index 0000000..378dc51 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/CSV/semicolon_separated.csv @@ -0,0 +1,3 @@ +This;Are;Headers +Cell A2;Number with comma;25,5 +Two colons and a comma;B|3;:,: diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/HTML/csv_with_angle_bracket.csv b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/HTML/csv_with_angle_bracket.csv new file mode 100644 index 0000000..6e1b0ab --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/HTML/csv_with_angle_bracket.csv @@ -0,0 +1 @@ +Collection Name,Number of items with weight <= 50kg diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Ods/data.ods b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Ods/data.ods new file mode 100644 index 0000000000000000000000000000000000000000..3171eb6b7e31487b89848a91b89cae9adaa7ad35 GIT binary patch literal 11764 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 I`>Xc90O|;(I{*Lx literal 0 HcmV?d00001 diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/XLSX/without_cell_reference.xlsx b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/XLSX/without_cell_reference.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..99e5f1d4295a03e4b188c2e813e87f9170ed4350 GIT binary patch literal 6384 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 + + + + + 3 + #000000 + + + + + 9000 + 13860 + 240 + 75 + False + False + + + + + + + + + + + + Test String 1 + + + Test for a simple colour-formatted string + + + + + 1 + + +
+ +
+
diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidSimpleXML.xml b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidSimpleXML.xml new file mode 100644 index 0000000..9a382a7 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidSimpleXML.xml @@ -0,0 +1,8 @@ + + + R&d + R + R>d + R'd + R"d + diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16.xml b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16.xml new file mode 100644 index 0000000000000000000000000000000000000000..c16bcc96c0ea63b05d0a9e5469518e5cd46bd214 GIT binary patch literal 276 zcmX|*O%K6P5Jk_HU-4K73tt-xs$Ect4H7IwEJPcTRGYMo@aJ*+S~AI-$-C#?nfC_= zk0*B`3=cw5GHxWqOldNt$3WdkiMi-MkQ#Hf>Yg17x}rvw$;dfN4fIAfBedL0?o5P- zOI_vAV9uJE{0BDp%1^~7@*9qpF`CLMXrGnXrR9z89Y|{`BVnsvrk<)^ZusSuT20Bt U4LM^u+q7)Pgidu&|G(e;0(>YZZ~y=R literal 0 HcmV?d00001 diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16BE.xml b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16BE.xml new file mode 100644 index 0000000000000000000000000000000000000000..3d04aa75bd8fe602838defcddf75a8bea44e8068 GIT binary patch literal 278 zcmX|*!4APd6h+ULuNYkj3)IGfY7b2A$?qRqa@|3_eg2V&87$TEa{0FF(b5GPQgV)q%*Oe*s>oPauESO zO_fKB1smpa9NFr((d9-8SD7P6#!kJmp6gys`1z`=A#=Gy T!B{^#w5?-8x87&)pYMMG@dPFM literal 0 HcmV?d00001 diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16LE.xml b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestInvalidUTF-16LE.xml new file mode 100644 index 0000000000000000000000000000000000000000..63ee8c274267f3fde2fd47dc42b19a05aa30b461 GIT binary patch literal 278 zcmX|*!4APd6h+ULuNYkj3)IGfY8O-@5hPfMSco + +]> + + + test: (&x0;) + \ No newline at end of file diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestValidUTF-16.xml b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestValidUTF-16.xml new file mode 100644 index 0000000000000000000000000000000000000000..2283752ee3f19bd69e3fac55d6539625bb66b5e5 GIT binary patch literal 176 zcmYL?%?g505QV?3J%zL{bJHR$cRqo(mlP573f+s?%a_L~h=KV#-OJ%zZ}a?>I#A*d%%_mUEVUBP>ieEW`*5CijfzBxlq!G|{k5i=bV zo}LlMg_w+#qiQ6@@zlPR>Uf!2QSu-Wb>ha|I8UGv(JBw-(;2(S!HX!kvRCB#G%CV2 U@6@eC;H+=8UH5YNv4=nX1;EQ2hX4Qo literal 0 HcmV?d00001 diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestValidUTF-16LE.xml b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Reader/Xml/XEETestValidUTF-16LE.xml new file mode 100644 index 0000000000000000000000000000000000000000..50eacb8148ab3dd7961d83f32f87147c2006c8c3 GIT binary patch literal 178 zcmYj~yAFat5JgX`UqR?WX)Fv%rIjVn6Cs8KmxSFA`Fk%Tg_&et_spG~f)8&7B4#=! zJUt_h3o#ifN7YD*coSaah^aUqE#Nur!#hugBMY7Wv|HfX;g%5 U-l + + test: Valid + \ No newline at end of file diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/CentimeterSizeToPixels.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/CentimeterSizeToPixels.php new file mode 100644 index 0000000..6ef11d9 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/CentimeterSizeToPixels.php @@ -0,0 +1,24 @@ + 19-Dec-1960 05:00:00 UTC + [ + -285102000, + 22269, + 'America/New_York', + ], + // 01-Jan-1970 00:00:00 EST => 01-Jan-1970 05:00:00 UTC PHP Base Date + [ + 18000, + 25569, + 'America/New_York', + ], + // 07-Dec-1982 00:00:00 EST => 07-Dec-1982 05:00:00 UTC + [ + 408085200, + 30292, + 'America/New_York', + ], + // 12-Jun-2008 00:00:00 EDT => 12-Jun-2008 04:00:00 UTC + [ + 1213243200, + 39611, + 'America/New_York', + ], + // 19-Jan-2038 00:00:00 EST => 19-Jan-2038 05:00:00 UTC PHP 32-bit Latest Date + [ + 2147490000, + 50424, + 'America/New_York', + ], + // 05-Mar-1961 13:37:46 EST => 05-Mar-1961 18:37:46 UTC + [ + -278486534, + 22345.56789, + 'America/New_York', + ], + // 05-Mar-1961 16:17:37 EST => 05-Mar-1961 21:17:37 UTC + [ + -278476943, + 22345.6789, + 'America/New_York', + ], + // 12:00:00 EST => 17:00:00 UTC + [ + 61200, + 0.5, + 'America/New_York', + ], + // 18:00.00 EST => 23:00:00 UTC + [ + 82800, + 0.75, + 'America/New_York', + ], + // 02:57:46 EST => 07:57:46 UTC + [ + 28666, + 0.12345, + 'America/New_York', + ], + // 02-Nov-2012 00:00:00 EDT => 02-Nov-2012 04:00:00 UTC + [ + 1351828800, + 41215, + 'America/New_York', + ], + // 19-Dec-1960 00:00:00 NZST => 18-Dec-1960 12:00:00 UTC + [ + -285163200, + 22269, + 'Pacific/Auckland', + ], + // 01-Jan-1970 00:00:00 NZST => 31-Dec-1969 12:00:00 UTC PHP Base Date + [ + -43200, + 25569, + 'Pacific/Auckland', + ], + // 07-Dec-1982 00:00:00 NZDT => 06-Dec-1982 11:00:00 UTC + [ + 408020400, + 30292, + 'Pacific/Auckland', + ], + // 12-Jun-2008 00:00:00 NZST => 11-Jun-2008 12:00:00 UTC + [ + 1213185600, + 39611, + 'Pacific/Auckland', + ], + // 18-Jan-2038 12:00:00 NZDT => 17-Jan-2038 23:00:00 UTC PHP 32-bit Latest Date + [ + 2147382000, + 50423.5, + 'Pacific/Auckland', + ], + // 05-Mar-1961 13:37:46 NZST => 05-Mar-1961 01:37:46 UTC + [ + -278547734, + 22345.56789, + 'Pacific/Auckland', + ], + // 05-Mar-1961 16:17:37 NZST => 05-Mar-1961 04:17:37 UTC + [ + -278538143, + 22345.6789, + 'Pacific/Auckland', + ], + // 12:00:00 NZST => 00:00:00 UTC + [ + 0, + 0.5, + 'Pacific/Auckland', + ], + // 18:00.00 NZST => 06:00:00 UTC + [ + 21600, + 0.75, + 'Pacific/Auckland', + ], + // 02:57:46 NZST => 14:57:46 UTC + [ + -32534, + 0.12345, + 'Pacific/Auckland', + ], + // 02-Nov-2012 00:00:00 NZDT => 01-Nov-2012 11:00:00 UTC + [ + 1351767600, + 41215, + 'Pacific/Auckland', + ], +]; diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/ExcelToTimestamp1904.php b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/ExcelToTimestamp1904.php new file mode 100644 index 0000000..e0f3075 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Shared/Date/ExcelToTimestamp1904.php @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Writer/Ods/content-with-data.xml b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Writer/Ods/content-with-data.xml new file mode 100644 index 0000000..4818438 --- /dev/null +++ b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Writer/Ods/content-with-data.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + 12345.6789 + + + 1 + + + 01234 + + + Lorem ipsum + + + + + + 1 + + + + + + 1 1 + + + 42798.572060185 + + + + + + + + + + + 2 + + + + + + + + \ No newline at end of file diff --git a/inc/vendor/phpoffice/phpspreadsheet/tests/data/Writer/XLSX/form_pass_print.xlsm b/inc/vendor/phpoffice/phpspreadsheet/tests/data/Writer/XLSX/form_pass_print.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..9a593a9cb2b4ec144ab354ab4cbbd6c9a55c3ec1 GIT binary patch literal 17469 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 literal 0 HcmV?d00001 diff --git a/reference/stigs/.gitignore b/reference/stigs/.gitignore new file mode 100644 index 0000000..2dd3889 --- /dev/null +++ b/reference/stigs/.gitignore @@ -0,0 +1,2 @@ +/*.xml +/*.csv \ No newline at end of file From 082ccd538122baf4c9fbfcdf11d92a3fba6c852d Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Wed, 5 Sep 2018 14:36:35 -0400 Subject: [PATCH 05/24] Fix for bug #8 --- inc/database.inc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/inc/database.inc b/inc/database.inc index cef3491..9be4a08 100644 --- a/inc/database.inc +++ b/inc/database.inc @@ -73,6 +73,7 @@ * - May 31, 2018 - Changes to support renaming sagacity.pdi_catalog.check_content field and scan error detection * - Jun 2, 2018 - Formatting and added set_Setting_Array method * - Jun 5, 2018 - Changed set_Setting_Array method to use SQL update instead of replace + * - Sep 5, 2018 - Fix for #8 */ include_once 'base.inc'; include_once 'software.inc'; @@ -1695,7 +1696,7 @@ class db_helper /** * - * @return type + * @return string */ public static function mysql_escape_string() { @@ -2784,7 +2785,7 @@ class db * @param integer $cat_id * Integer category ID to get the summary on * - * @return NULL|array:targets,checklist,summary + * @return NULL|array:targets,checklist,string * Returns an associative array of target (id & name), checklists, and a summary that joins the two */ public function get_Checklist_Summary($cat_id) @@ -4102,7 +4103,7 @@ class db * Function to get the findings that are assigned to specific controls * * @param ste $ste - * @param proc_ia_control $ia_ctrl + * @param \proc_ia_control $ia_ctrl * @param string $status * @return array:finding |NULL */ @@ -6250,7 +6251,7 @@ class db * @param integer $tgt_id * @param string $ip * - * @return NULL|interface + * @return NULL|interfaces */ public function get_Interface_By_IP($tgt_id, $ip) { @@ -9259,7 +9260,7 @@ class db /** * Function to retrieve a software item by using the CPE or CPE v2.3 * - * @param strinig $cpe_in + * @param string $cpe_in * CPE to search for * * @return software|NULL @@ -12218,7 +12219,7 @@ class db } $int_ids = $tmp; } - if (count($int_ids)) { + if (is_array($int_ids) && count($int_ids)) { $this->help->delete("pps_list", null, [ [ 'field' => 'int_id', From 19554b97315dc6d1d7cfadec8c464c811d253a82 Mon Sep 17 00:00:00 2001 From: Ryan P Date: Wed, 5 Sep 2018 19:59:45 -0400 Subject: [PATCH 06/24] Update config.inc Add global UPDATE_FREQ constant to define refresh delay for ajax updates --- config.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/config.inc b/config.inc index a35954b..8fc06d5 100644 --- a/config.inc +++ b/config.inc @@ -60,6 +60,7 @@ define('NOTIFICATIONS', '{NOTIFICATIONS}'); define('PORT_LIMIT', '{PORT_LIMIT}'); define('MAX_RESULTS', '{MAX_RESULTS}'); define('ECHECKLIST_FORMAT', '{ECHECKLIST_FORMAT}'); +define('UPDATE_FREQ', '{UPDATE_FREQ}'); /** * Company variables From d41c1f9e21980f3ddb87ff412b889e054fd01184 Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Thu, 6 Sep 2018 13:43:23 -0400 Subject: [PATCH 07/24] Moved NVD CVE parse progress to update_db and changed download progress to update overall instead of each file progress (bug #6) Added include for autoload in helper.inc (bug #7) Removed a few unnecessary variables --- exec/background_results.php | 2 -- exec/parse_nvd_json_cve.php | 13 ------------- exec/update_db.php | 8 +++++--- inc/helper.inc | 11 +++++++---- 4 files changed, 12 insertions(+), 22 deletions(-) diff --git a/exec/background_results.php b/exec/background_results.php index 45c7e64..292602c 100644 --- a/exec/background_results.php +++ b/exec/background_results.php @@ -80,8 +80,6 @@ $dbh = new db(); $files = glob("*.*"); $stack = []; -$running = []; -$time = 0; $threads = []; foreach ($files as $file) { diff --git a/exec/parse_nvd_json_cve.php b/exec/parse_nvd_json_cve.php index 7cbb8c3..4d8d06f 100644 --- a/exec/parse_nvd_json_cve.php +++ b/exec/parse_nvd_json_cve.php @@ -65,7 +65,6 @@ print "Currently " . count($existing_cves) . " in DB" . PHP_EOL . "Parsing: " . $db_cpes = []; $new_cves = []; $new_cve_refs = []; -$new_cve_web = []; $sw_rows = []; $new = 0; $existing = 0; @@ -82,9 +81,6 @@ $cve_fields = [ $ref_fields = [ 'cve_seq', 'source', 'url', 'val' ]; -$web_fields = [ - 'cve_id', 'xml' -]; foreach ($json->CVE_Items as $cve) { if (!isset($existing_cves["{$cve->cve->CVE_data_meta->ID}"])) { @@ -168,18 +164,9 @@ foreach ($json->CVE_Items as $cve) { $new_cves = []; $new_cve_refs = []; - $new_cve_web = []; $sw_rows = []; print "\t" . ($existing + $new) . " completed" . PHP_EOL; - - $db->help->update("settings", ['meta_value' => number_format((($existing + $new) / count($json->CVE_Items)) * 100, 2)], [ - [ - 'field' => 'meta_key', - 'value' => 'nvd-cve-progress' - ] - ]); - $db->help->execute(); } } diff --git a/exec/update_db.php b/exec/update_db.php index 7cfeb61..11674e3 100644 --- a/exec/update_db.php +++ b/exec/update_db.php @@ -361,9 +361,10 @@ if (isset($cmd['nvd'])) { $load_date = new DateTime($db->get_Settings("nvd-cve-load-date")); if ($load_date < $too_old) { // More than 7 days old so have to do a full load - foreach ($nvd_years as $yr) { + foreach ($nvd_years as $x => $yr) { $db->set_Setting('nvd-year', $yr); - download_file("https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-{$yr}.json.zip", TMP . "/nvd/nvdcve-{$yr}.json.zip", $db->help, 'nvd-cve-dl-progress'); + $db->set_Setting('nvd-cve-dl-progress', (($x + 1) / count($nvd_years)) * 100); + download_file("https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-{$yr}.json.zip", TMP . "/nvd/nvdcve-{$yr}.json.zip"); $zip = new ZipArchive(); $zip->open(TMP . "/nvd/nvdcve-{$yr}.json.zip"); $zip->extractTo(TMP . "/nvd"); @@ -392,7 +393,7 @@ if (isset($cmd['nvd'])) { chdir(DOC_ROOT . "/exec"); if (isset($cmd['po']) || !isset($cmd['do'])) { $json_files = glob(TMP . "/nvd/*.json"); - foreach ($json_files as $j) { + foreach ($json_files as $x => $j) { $match = []; if (preg_match("/(\d{4}|recent|modified)/", basename($j), $match)) { $db->set_Setting('nvd-year', $match[1]); @@ -407,6 +408,7 @@ if (isset($cmd['nvd'])) { $log->debug("Running NVD CVE parsing script on file: $j"); passthru($script); + $db->set_Setting('nvd-cve-progress', (($x + 1) / count($json_files)) * 100); } } diff --git a/inc/helper.inc b/inc/helper.inc index 78f652f..ce3c589 100644 --- a/inc/helper.inc +++ b/inc/helper.inc @@ -42,6 +42,9 @@ */ include_once 'error.inc'; include_once 'validation.inc'; +include_once 'vendor/autoload.php'; + +use Monolog\Logger; /** * Function to get element or value from XML document using XPath @@ -720,9 +723,9 @@ function url_exists($url) /** * - * @param type $start - * @param type $end - * @return type + * @param float $start + * @param float $end + * @return float */ function microtime_diff($start, $end = null) { @@ -815,7 +818,7 @@ function add_intervals($i1, $i2) /** * Helper method to convert a file name to a .log file - * + * * @param string $fname * * @return string New filename with the prepended LOG_PATH From 972c456fc54602b3b7e8b19afb41d176516e7295 Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Thu, 6 Sep 2018 18:38:31 -0400 Subject: [PATCH 08/24] Typo fix --- ste/export.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ste/export.php b/ste/export.php index 89b7a55..e118d32 100644 --- a/ste/export.php +++ b/ste/export.php @@ -302,7 +302,7 @@ foreach ($findings as $worksheet_name => $data) { updateHostHeader($sheet, $data['target_list'], $db); - $log->debug("Completed worksheet $worksheet"); + $log->debug("Completed worksheet $worksheet_name"); } $ss->removeSheetByIndex(2); From 422ff8094a1215ef595b198a810b0152ada0d6a3 Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Tue, 11 Sep 2018 16:51:23 -0400 Subject: [PATCH 09/24] Fix for bug #9 --- exec/parse_excel_echecklist.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/exec/parse_excel_echecklist.php b/exec/parse_excel_echecklist.php index fe04da3..1a978c3 100644 --- a/exec/parse_excel_echecklist.php +++ b/exec/parse_excel_echecklist.php @@ -249,10 +249,11 @@ foreach ($objSS->getWorksheetIterator() as $wksht) { // increment the column indexes for notes, check contents, and missing PDI if (is_array($tgts) && count($tgts) > 1) { - $idx['overall'] += count($tgts); - $idx['consistent'] += count($tgts); - $idx['notes'] += count($tgts); - $idx['check_contents'] += count($tgts); + $increase = count($tgts) - 1; + $idx['overall'] += $increase; + $idx['consistent'] += $increase; + $idx['notes'] += $increase; + $idx['check_contents'] += $increase; } elseif (empty($tgts)) { $log->warning("Failed to identify targets in worksheet {$wksht->getTitle()}"); From 495bad4bada69773caec74140871f833cd3668aa Mon Sep 17 00:00:00 2001 From: Jeff Odegard <42775175+JeffOdegard@users.noreply.github.com> Date: Tue, 18 Sep 2018 12:07:58 -0600 Subject: [PATCH 10/24] Updates to eliminate orphaned checklists. --- classes/checklist.inc | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/classes/checklist.inc b/classes/checklist.inc index ccd1a35..ba20eb1 100644 --- a/classes/checklist.inc +++ b/classes/checklist.inc @@ -399,7 +399,7 @@ class checklist case (preg_match("/SharePoint/i", $this->name) ? true : false): $this->icon = 'Microsoft Sharepoint.png'; break; - case (preg_match("/Dot Net/i", $this->name) ? true : false): + case (preg_match("/Dot Net|DotNet/i", $this->name) ? true : false): $this->icon = 'Microsoft .NET.png'; break; case (preg_match("/Internet Explorer/i", $this->name) ? true : false): @@ -574,6 +574,27 @@ class checklist break; case (preg_match("/Mainframe /i", $this->name) ? true : false): $this->icon = 'mainframe.png'; + break; + case (preg_match("/HBSS/i", $this->name) ? true : false): + $this->icon = 'HBSS.jpg'; + break; + case (preg_match("/Akamai/i", $this->name) ? true : false): + $this->icon = 'Akamai.png'; + break; + case (preg_match("/ArcGIS/i", $this->name) ? true : false): + $this->icon = 'ArcGIS.png'; + break; + case (preg_match("/Bromium/i", $this->name) ? true : false): + $this->icon = 'Bromium.png'; + break; + case (preg_match("/Forescout/i", $this->name) ? true : false): + $this->icon = 'Forescout.jpg'; + break; + case (preg_match("/DB Networks|DBN\-6300/i", $this->name) ? true : false): + $this->icon = 'DB Networks.png'; + break; + case (preg_match("/Windows PAW/i", $this->name) ? true : false): + $this->icon = 'Windows PAW.jpg'; break; default: $this->icon = 'Orphan.png'; From a8d9725168c2ada8cb5b69b0cebb5540d0127c8b Mon Sep 17 00:00:00 2001 From: Jeff Odegard <42775175+JeffOdegard@users.noreply.github.com> Date: Tue, 18 Sep 2018 12:08:58 -0600 Subject: [PATCH 11/24] Images for new checklist icons --- img/checklist_icons/Akamai.png | Bin 0 -> 7408 bytes img/checklist_icons/ArcGIS.png | Bin 0 -> 262229 bytes img/checklist_icons/Bromium.png | Bin 0 -> 12788 bytes img/checklist_icons/DB Networks.png | Bin 0 -> 2932 bytes img/checklist_icons/Forescout.jpg | Bin 0 -> 25602 bytes img/checklist_icons/Windows PAW.jpg | Bin 0 -> 14394 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/checklist_icons/Akamai.png create mode 100644 img/checklist_icons/ArcGIS.png create mode 100644 img/checklist_icons/Bromium.png create mode 100644 img/checklist_icons/DB Networks.png create mode 100644 img/checklist_icons/Forescout.jpg create mode 100644 img/checklist_icons/Windows PAW.jpg diff --git a/img/checklist_icons/Akamai.png b/img/checklist_icons/Akamai.png new file mode 100644 index 0000000000000000000000000000000000000000..a09337530af9eba00f21cd00b3b911d02fd617dd GIT binary patch literal 7408 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

HT_=jk6{++=;CEG>qh0Z!eGE47McB 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 z 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 QsyBe=xRZxty#pch-^g&@FaQ7m literal 0 HcmV?d00001 diff --git a/img/checklist_icons/Bromium.png b/img/checklist_icons/Bromium.png new file mode 100644 index 0000000000000000000000000000000000000000..1adfdc5ec6aec5685685b8acdc4d5a34f78de6ff GIT binary patch literal 12788 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 literal 0 HcmV?d00001 diff --git a/img/checklist_icons/Forescout.jpg b/img/checklist_icons/Forescout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3edea72e74b79060d2bc3ca97b4e3a5a8a633242 GIT binary patch literal 25602 zcmb@t2Ut_lwk;e)MY>9t5)}{-=>md4R0Kpt1QZmIh;$H;-V;FusZpwc5CH*^5-9&_x}8CwmaczyNd^1OlA`-a89o1fDSfw|^XT8c0LiSm)*=Lu2*x4z@DR zuk0Mo`zpxFpO^IUa&mJxuYXtX{N0B-dgpyr6s4}5_wccP>Es=7Uh}+~JPU|E3DO1~ zV_^7u|F?tj1moZ1}Pg3H&4$R^SBmY2fEGG9Ckd?1|&YfwMz^_d&he`(71e8M>e{z;boK7&-!*yk*wpOFQ*#?z zJ9`I5Cuc8jA74NJfWS9z--SoKkBo{>NK8sj`IMTLo%1y}FaKM?_pYC=3 z*0%PJ&aPjBL&GDZ*s<}6Io$lh;?nZU>Kb8ZcW<9~Ksr47YZn8E@qe22FU$TfyUqZ1 z9Rt?jIMZLd7>@Y?gYnGq6BiUtp1oM+35{APLDk&BRm5RZwPzcI14^-oZ7VHjD$GNgwvQ)vqu`v`%CL5 z!FHf7$;3&mtUop)NnsFoL}(+t%a&w92fcGc(m@^Hh+ay>kD6ZgjyvnWUP9aq!zPOR z!zXde&E&}Rt*@}lrM?iuX>7n8RM4?Ot&D6RUF1~LhM^G4YNF<}(mx=V^~&vn?xep7 z)lr7BXk}LC{Dzvd2yy>8IsS1#h4)=dEGU-`gh*UMsilj|;v2A^AdyN}OoeKXf2l!48q2KhB)Ig!O&A3^mJ5MG~yBQSW6gEw_o62>Xl@UUWBEh^P!*eBwg&-af5 zZ=H*;L

D3TcDg_AhKZLLrpbGc3%9_hsCTYp<8cZcDhNN5_0#%&6WT-d%s%x~10X z{>qa*aM<%($Gk>V>epO67#eI#2ZiBi{TSZh&P|Gm!|bG*Cwt|){3~n>d&w_$8$AVQt_JGLzB?zBf(y7SX!TiAgN5T4`jF~(` zFtPQtq_5Y&wxeGStaxt@F#J66;knJ3vX3j$8>sOE8i!uG3K7DsaZ*^H9CAo3&PbI*377dZ#jKso+fxq|Do--85nX^0jZgkVqrlBU?<|(%_tTy}bL-I%P1= z#ud&dgb*jHbr^J4YcdOA(OJLbOge($52O$8qw6!9x1=_|rZE>!*_uU8sIqCTOXpvB z7m`apPX{%5Y01NScFb2{m+FAUj-B(roB#3qubByXiCZ=`O`4GK=Pg670iR+@JZJ)I z*1LDQ^^tXt%zDA4SPJ+29CS0sg7%SM@fSIGb3N8f5>UT`zpwgR+jz%NwrgX%_5oo z{}`x5I%xI_1aHa-f;Eq(nBOmxi>&kQKTJO2DQYr5J>#=w`!M(u6~r#;YZ*LZl&^NT zU#Z}l-gN4oSt~U19A`6%1?vB%b)qdfBFE{Q?a$h}j2BVzn)m!P!*)gvp=5txlVH=j zr~O@KW9yPnpC0JKMgN4rdmEgxUi3EsmSnQTs{B9UoB-|1qz% zhHq!eJK|`XYwRwws8ghbHoh|-z+|mv{lP1AP)H)r&8??!mZQQsIm&4!;%id0kmp)5 zO#p9sg@F!=EXgbH{1s^JI%=#H*Hj-+B>w)bmYU#DOD~+w@Vz5yg!3f4soZaHvXB&k z>nSe!;}&th-`oyD9Mn(Pm2@c^!pu%UPqwI|ms@AJ{MUioR+v8F%!r_uhnn8Tr2RIn-Vt`|&}bW2JCUlkcF ziW}p)e$g*Pan1d{XjY6ve>W+!LR(nZ5O*=}WCg72kf0M7(E%SD!c}c_DapmwapKsI zO{*$U%kIGyyW%`THEf$_LdA~Kc6Mqx{@4iF@OR8T`<0#9AtxF>r^9V>EJVpDU3d6= zO?jF{&?m8{Imr@^Q^J9YHJ!J*l{96!@GQb$M$pJ(8*L@=3_3NRi- zh;A~k$D`JM!+jyw9gAG7=gj6+a;&@?7>~k9(uDbDc!k4jR}KBydfz^)fo+8{+<41X zgP6pRPfo^m+$v&VIv@HhzH*U?zt4IClL{GsL#!gqY=q3OP;SnKc+THVdr=tl@)a@d ztqn;$vca^^-u)At9X1Yc(gZxch{i;%y86vK{T-B*ax07-drrCat6tD+Rn45Lqo&W4 zPrHviDne`O*i27)qxI_Fbu^d69IZvYbgfa=5Q_Wq%4wuAkU@w0;Xg*w^N{ZXmQ_=B zS|b~WMQK;5b5%uY&FhRQLs%cB#w7?OHf!Z5qV8(IckzKqR>1zQS|pK z8znXsUXh_Q$|sfr-`bqgN?ao$aZD6mF1>OYzIPP4Z_W>DlN^R+Pt^F#zJ0cUC>h$2 zZl%}(GkcGei}Q2;@yC${jx9%&J#~Mj`MWJtiv+%V^qUj3%#S?u>s|}ywZm23d}CRf zjwG2Kj#0Io?j&R~k-P66oI&6WdojXw`ef7Ky9ArMl+0@c(W19oPu!*_l;|K(JMLo_oQkwY=lL74|<8{k@SEteHXf3s+KTT#vq<`4{iPZ(n2oU_iO!STzR z-qWH(n|Y4YN26-oF@<-sstdbRC~!W3zG4{v&t@9qA$CjleVccuqSsHe-yUYH-QtO& zQoFlg_r~A=TB$l>Y{&EPPpuBOSr;<<%ReLDe>JML5Kz(HDA0;oT06SH+)3Rv##Om( z@efWg$W}1G&;6tRhDGKp={AfjoFtjw(l_RJGak<6Y!HHDeQT4q!Yf-G;@^^W*>Edo z-*19HWJYNV(MktRM$=df2!g~7g0?=6buQQ6iuvXb{C?u6vMS+>NWt6>G4}e5mp{K_ zo-Aa4li~2&1LyJKE20E&xNI=qYQ2xUEnto_Oi4d~j8FcVf1b|Hat%{BZ)vB(+03k& zD~$^Q4oi^KbIG}0#cN7aR+a_<0Y0MlG{Gw`lE01H=oyo|Ns5>phwtahC{LGRh#h8Z9mlj8IsatOka5Lp zI>3#6YOglF&p>-*F=Z<+@EuqIHHH`qqMiDP#}c1K^;r_`zoOhARNS<6iC#%`8a-=6 zdvfFEiO^NC+Q>#x*H^gGAGxLD@0xlG4im^CKt{aSAP2+V!WvZ#^u47>dsNUtuItvb zagW-)+&Nf#K6XCO5)2b$QaMz(%2}+qp%MNCz3i^p9KmRVb86FItki@CBHtj z`3#<6zOxxce(}eePr54Z(<+4y%Fwrxc^TrIUmekCoLikfx6QgrJ3HvQN4?aJyQL!i3smZQ>Byae{wXEKZJE5b&L?(BItSbh$v+l&*k2_ z5ji<=3E#t#uSpn<&s0yB@0q-=LTCkfb8tbT*%I^(>?)~zZhxZdE9uSSvPairU>=UP zL`jO-@JzYHW|b@99Fd)~byWme)ak)K{9KQHb?Y-?F z1*GPD=E@5geAE|JK5VTAQ=bRt$~dqjL^L`X$B5O>A5KwA0Y6NF^I~kCZn^J2lL^+F z^VV>g&@d3MVI1m?B)~T>mH{?^3ALdf-dnTAd*ggbyOM_+(IF!4{V*`tnaGtQ;jQi(P#VF0WQ= zId7*qB!qynrm1e3YP{4nO~Krum}J*%$HE!wEXdb`Z`I*3vEJ8vIL(K;6tz87ilXBg z+gI*(=6|yjlV3Q??x}VlvlWCz^QQIhn7iomc-gPbkl=)D;&h+ci{u)=$f?Sfz&k8qo0zZ%(Mu)VnP3;Y zzP022W3{>iaiC4;uP3I}t{Hxys4r|gfv#5iGDFJb6kys7%Shxe6eeCMchLeG|5jd) z4m$O7c&wvXPsHL>SN{z@hT|A51;o_ma{I)wOzvFHp|$ioDr8cx%6s(#bpIQTi~2YZT+=8)clLy;x|g1AhICFFh$ zKd?$L7_vPsC?lWl|0GaJS^zx6wxLQo2k@1fc#k7=^t0pvi#aXN^TYb}~FmzyKeY{6mg+CR%Wlk63zij|skAPG9?sX_i< z0DR*Fx6!{JCkw6qbU3+-c3;#Ja<;P(#dG`E)V?!XhjP)z;do2vJ52fWn!#Y{SC}(( zW?Vdu-s|yK*HxRq4K+>dZ$__aXLh(gl6p|`L8-usdt@mjdLF{RYIUsN9Ubfbuzb*a zN=r$mZR8J*KkMdjIWj5a^#TF<30`$T;iIuS%4taBm4jCW%vljUe{SwbuF@h{Ig#Uk zUa7In1U8(Y7Q@|9k?_i73=zS<{=3Hf&fwFP(Hkv!<7d5gTE8Z1zEQj4(Wg9r#Se_5 z1k#i@tvx&cCjgfE2LP56aGp6Gd@rQfWg=s#yvSKmz+Fx@U$IYG;flUQJhNI?QJE+F zZ4gITl=PVCO2D~&7Ri$6IkRTDvp|J6jhsWUtQ@2fs|)U&mA>xXt$6T(4)WoveKcIq zRq$wacg2f<`g9BRNmc&7ZY|PdHFO&ahc~GKK_FsUoSGfq(T3zorh}SA*pp85y2!0j*OlUi^>zFP8x1#7!7_Dp+Z_8nc_ zM)+u_dO(SMJr8^_i@c-s2`kWkJ&bd`Z`n##NfA?hpD17LT7MKFf%luGgTfma{f~9G zz|IW3^k!!@)IB{h(QXsVdF!`Diq{lEY$p(FnZu&+aX&kXu)h{`x%)W)DfqFgP!8G@ z9VBpxfNdSuP;*ha3g_&+@LX#n<#_NG{Lgc<6_JMNl!M`!bRyN_38 zi)GyD0lk%!^IQvEF}9_W4}1wxw1`5!b`jP=3jE8=>ba5Fl7c+vhZTIhRYuGgQ#l|0 zf|)i7o!RA(MzO|ZT=KxZdi5Q#_?A6K2#GS^!Z={Y3)?YhNb4yLx!GqY*DXgRni9Gv zN+;SaQtf;%h~A_Poeh$6rd}fz&_O4cSEkQXbDr1XJEAZ@8qPffs~v7zdheV5 ze$@VOZ&$44{QTKW>23J<5YZNIxRHZDnrYEu!c$9P^Kb6n{l%RAFc>`jV0p<;BV+K@ z*ExUGgFMIhI#rDtHOu<^ZC@={z;ZYMJp?p($f8t4D@=k6j)k4q+b#a{fp=&xPgKmj zeg1kG9D9d(DfyGAZTmFCD+yzgV)2Fto`$1!eZ+56 zw1z5KakcE`)sDvmp~#v^gGj=~<(yw*TIMt%I>>t;)k6m%z!eTra7P4BWdTm+W*$qc z`O~%?i?I^;V%qM{`LHQM8u6#!o6^+Q`g(WY6tj^duwc8^#aYE`-R$89>)!Y5)@gc` zun{EQcryqWQ)Mm}MjQF!$X+Art!2?&8qcY5>O)*75DM(n%nzM1a$o%Zz0o0#Fx9Fr zxJDD=*|^yWiRB@e+>3v{v!>O}$^q3{-kA<*9ivQFq1*e?J0*bVxT8*li=RIN_m zCj^(i(89k!2kBOttS)9vx2&}WnGIMmk!BFxRlSJEz}f3=7!baML;7SjA$|3Fmv zaLEoAE|OCHHUcsWt55J3{bW|L%MvA$hD^3%roL;C_9t@3W19k#Dinpb8|=ziGf7D! zh}pb)xt1CH9iT)%S1=XwjpSg6DA4x0IvDbbOW?=@`t{q_Gdr}O)XTcP((?);V)jF@ z#V@coZ}1kP`4m4X0DpE;DCK|yU32kjJ<$<+Krar;wFeT(oDC~(vNZiD= zqfgjO_2JILqoKmZ-I!g0)SYfVEjN>GPY$l`GB?Lr>+atyp1^eP7=Ha19pn9sT_uB0 z`v#EE0CsYf4jMIa{9hbToda>3TAWRdq=OuunRVX_ z)5-u%@S#C=UA|i+Vh(a_1!jLs^ zcF(GczoGtq4gP6F2A*7Jyr@>bTd^iQ2jSB8;Z@+os^eagIPhNl$ zmW@j*8zZ%88Y_V&Q9%8V~1g-K4iwe73d@Q%J1IbQ$!hG$1u-JWJ)L!24^x>8)8 zlT&hi2>GTtW~nmTsOf3$Npfnx4jofBd$FTllDKekY?t_ec2B+ zgd|B+QBEt8EoprOzYYeO*r>#x75E~~GMpPDqd!#?dSn~nXaC$29UE*Z6>LBJs=N>n zzCde+;tfz>+Ejz|JMSRF4frXGUwlRcb{x2@k!kwQjq}}7KxOTyr%^6pLJlB{z?x_v z>U%A4C1OrkqbtORSJ~hN{z}SG4hTM~1!CdUX}sAVvujm6=gz!B2XWNNIDB2HR0$M8 zKh|(>sj)44cd-CNOWu4q{&# zonE*s9Iw| zTu4Lh6Zx&~XQo`#m$CxBubKT0UbVN2*VpxA>TdqFC&V$5&NE~_b!9*`NwHJRxVTx7 ziZ$B^!mjbd+2q%c&zZv;w#O)qEY^y2Tm=Poj>X%5>+ot0_VqJzkt*J$F9z=oav{d5DbyJ5ukCFxp=w`NgK z7S4*j*VR5LbXxb6Xfe#_v+d8iGE`Y>$MPTQcEq(phKzpVnA$Vqh86ciU3Q)Y@O{1W zV**&x4ai3|n$KYlp{2>wpAonG{_0bko#cuAR&8?sb>3JEPZMhB^5HUZoSJ4&LfU3t z?8oi;)N3hm6LA{o4NVyIsae%Q%HrlTe&^3IORYmodTo~{Q`Dw1z1DTqA3HAE+1c8O z@!0%AY8#-84~BPD0I*g#2X21mGS3%tez3xywQ|uV@-A#?P!0zah>pbU+y}S00hkuT z0|eV~yluY|Oq6iEyHYw*w6sd=mufd<9`&7}v&3r-)iMcwH_be>r>Uto{?b}LYzF3_ zQ4#UybHaW}jLKF>07~R*b?SyugxIkt$)X;R(7;|^X3n}Lq}@HPL6F2g*X4sa>-=G? zDZW&9GgX$~`_avAaQ=h+M~)+f;&;=QQnXWeqH-hhFONlfHcLQ*d_>aO67Gq4=$uP& z@NIsr9zXRO6%BdmPLlequ7R}@Bn3$RtbX|7=V&6cXiOYS)8~lio~-iceIC1^=OE~a zO#)7CLN>s=UemsxB3m!Rx{x5YF#fC0x9t6z`pvHchwKSNPKFyUEf1v6)#tfulfqe}ANHle%7!U?`dr!2h{iNhn^wOKkspbq}}MdSVv8 zUUFL528_uVeHW3LQ@hq2B@Lg$Gy};O8)ZEhd_Aw{`^@hfPX=C<#%*kl>o~kGK6jcp zV%K%-$4~R0Q6KXo5E=^`&&|qUy_g@{aS+F9>zeZNXVTg)IElG?K`*3dx*wR^A6({! z`(sDJWiu2mE^U(giAwZ5yquKs#Gp((J8abSw;B^TP*)^>5j+KWYguX49oP9Mqt|ec z8H_x3$R2GllU6Hn@jwB4)FF_bsJm||LIvVNx?b5d9SnduKF(pvJ2qHnp`ph{*RG3W zm4Aj?7-NjCMokgrF2B(PEd-_=L_5BH_{}Je2~2B%t9!xgV@x9MQX&N6T3;-0DsU}3 z>~UBmKHoWlbu$}&1WG8&vE`~R8~&R4Z|-s$qJxU^`u|CcGPOhSR(*$h zK$metDj&Xj3p-m3+lMy=K^BFy#ORzGbE8X=E=$q3rW%@nu8lp<(1`wcR!)4kymbZ#{?tTM5{$(6n8Z9sU zn(c%9u4t<5LfktL^eNL_>Mbe)G8+M9hTE@4hgh`oF5^_AUPzz+Ir7Eu$HcW2YxJU5 zX6z+^=0X$EpIKd;xSb=e= z6Rq`cY5ag_!DsW4JTytihAZheYuU5?`5sDal#SKS8=c>aH{7- z=kI?eK6@n|2N2gMTal5qPSs2BdT2zT2s&V{*ou{^wYJoIG+x!FVNlvnHXFs1=TmrW z%<;A=M^MC-MeG$DmN&+g%~Q92HY!S8usr(k7(sqa!ki|#zt0Lhgx7OS8BqnAwG^y9 zWUP0gp3t5l8pDx@XUme6)I(SEUDR7>h5H+r%9D_smOyGQCEXM6rtqf~GVy+{WB9f7 zfat51#RXq2^kK2HvZG;qw#zUT#T=6r8KEVTudb0l&$$r^6sj=?LspjB9(ikn3-yZ$ z0iJ4og8gA7oZlXHkf+w$_T@;ID)VH$Y;Z1WqAxs%(fSu(X{D-B3_?P6)P3@WqYECK z)q0Beqj35DnlXw*Z=W#?VVTRE?j7o~*9zD5dkL?J-bZECG2pS3suke`B7DQHrmn84yeibM>uPU-kj-%U zE9q;uJP)4pNE_#iILGuqn?y`~$JV^{J$<$O>cb-EC$*n1e_Olfi%Qi}g*QFaV8xHB z$xt9yr{zar+~UcX5SU~f;D zZQ*?H)AoxswqwIIqhW`#qgwVkuxt+%1``W5CNQhVr9iR>!6fSvfNjBL%I{c1-9|j?uCWJ z*Ie#kuyS6DliQ7%3zziWERMT<>{I0Wyl{kdw{fc+{rLT&9{R=vNHFBbHOhCxx&|}} zeA>fQ^=d)DuYQ`zQTbaEr%dNc?y2egT_2v4r$eM1p|v`}s|WuK-v8m_gXpZhq3jh$ z(BH0d2IT0M>%THWuno|X0$Q($p8nCa<}^QAq6~~B6HPVnZ)r>ex4K?(m1{MBkcx8h zQnBhbu86`-n+j{`88h?rtj?6do2i!!)vZ9j^A}54X2H^iS?_cN)Ku-g>t^NI(PCtA;4T{<1Y zHp#0@c|tWbrzL4<&SuCpoAz)d}B_BfD9jOOD7UX^qY@IiX{XFHK;!EDp=I_t{Q6{6u}HodOa{Wy852 zXZ{4=B83*aoaN>qn)7^jBB0cym%ElyOlBDPkCreGB}>dx-#KL@?i?v-xDbP>p$(^D z-P89onen`Da@QU%T*?tUxkWm{;ams5L8eSuu6tN@a31AuH!frMA-{*dl}J}_`F>4q z(&0Ad|C<^g8yMb?cw7&GhT=#6r!C{i0F7(YS7ziUIzw zv7t?D5htDqEr{I2VP1U-o(Zh;Bc@Pef+fgzSIbng?32|O?%r0m49*MK$dU^Xy} zXxPUVt@EbM%Hi!n{WQ12VTws?ooG&+SG!&2qTwP?sB|IY0k#1-p-NOCpf)ChuBPQC zIGdkCPOVkGt`OS$W7xwLc!-pO_|~QGQgk7AskL&yUy&wYSavN(WKTezQEazM5Sy)< zEr3G&0!2JjGT=VB&<-yr&9?fs>KUOQwR&QD!|I;WlMQ_ECY=V!V5K`aR}Y`{M~nyN zX#uT>qt%_eu-vgAvv&hlR@WsP=QaNr$l8o`UwZ>i=}TudbtI=ZgYi#!PPf+_ge@3* z)L5|2j%#+t4!~tP)&j8}02STz3?^(TvAu`kGtVR!pBIJT1-zi2ubTbB1z-E+eDA=i zWhrEouZ?y-htR8Z=nRWpgW}Cl5x$;^Ejgr`#nKj5$Hx|9OO`aBU;ZgHR&l$tijED; zb)V;1uzmpliM%YjOgrMihj3d{uKfbkCIJDIU#*LD;hE)r}>kZ2QZ@xaOW8I6h^{~+s@I-lTY!*X@lOg*w`hPxV*!~kkCMVhR#atqr+yiiiY&00AANV#WDxI4xM z>)0rgv?i6zs6iP0u-LJBZ@`7{+w^kY#rz7CtW)`sC{t+G+pj;y96fJ|ru^+Nm}=$w z9=-dIx(NUK-vAJt4ur=q$NuYTGX}#)L+3|aZNqWb@}qQY<5lk$7HpW+2N#lW0uCpm zAxGe~h}CXZ1><9!2MgRKemRsT)y!L;&+0p{U?ijWzqlDrsiw}BRt%0ybs`ECc*Yd9UyF4pBWQ15AJ z!jHzN*Uh$0X60L~je2SOvGJY$l`A5}W3I|nYBJgoLh1$R~7&1(ec(1|r84{E@TnCT00Pyev?D+uHFxU_X zu*ShU_;meC5i04p=tun2$&k$1(EbfiE{Hxq)ul(Np? z9Gb#E-M`IZSFdr1Hrl|a);b1|AMHPjrY#=fUhUrNT$apH%dU@e^wSC&e{eky2ooZM zr>xpNCobr?_**opAH><8S*ejND7<6g#9N7Y1&7R`97q5;e0-8rFh3;N^R;bmQnl%+ zvUEo58|;Bg{q9C5Q+>eCja|lfP)ymxu9)(0#;v^+Cuo@8b~CdO?W&S-|*VHhG1VBfa?4T881#WpFr5Weirf5uI~#f zUxNu>-a-elc#97OYv!yT>3k0**ZLpfFKSPpSBmugRSY#p{+lt^{+Gb79?<*GQg z7Dc4W#X#Q`7@>tCm}HAzY&OCkX3p^)W{`vgBu|fVN z*?eSd(IRhWt1Bz-CowIOB*SBr)Nt00zZ-WAdY0B}#Yjj*T`HW#u+IP~aJ*tA6WBkD zqL3udDxlbOXtp3VB{T(^Z>dqo{pp}RUY?D_QB&H%>a(l6S02lS6=Cp~0?=jm8&Cwt zW~f-e$qX`cuvGaq=y9hjrI~Es2jMF|gDdcI2Vlk6YATVlGi*YW3r^=78 z{^}-oD`A9u6Z!VXrWsGE3j>`y6Y%Do6FV2mhBh}g2d`N_)_Euo0>La{kDs&WFvbAL zK=0ClrliSRt<%|2Qs@5DlllMWr2eyc`rmo{KO3(o6;deKDp;CigR9--Y(<{c0+f$;_?cc}?=1Vi9xW%aIe*IvP`Zmc=}zIoWPDnP8t09|Gv@9(OB2 zoES$XQ9v^{oJbO+gLKm8AT*vDppzq#Llc~wb*J*WzommnrmJ)iB{1$OV!}l8Mbr+Q zvsO9F@CoVd$(d7~u10L<9` zV_a5EbxjCL(pe~#K|kVH=s%ulmO>gL*5jE%9pb0gt-`lf^{G9dJuQEVmR@Fgvu{U{ zj!U4iT%Yy-I&pQITc0+DjsPF2qsD$CoETTm0n)GQWIu`~)=f0d^#NHwUbm5Nw4@N2 ztqYQnvo50=%D7^=wj<-IRaN5AyF&1Ozy1Q(M{`r%GUlXkN*Vz zjEB2G?4E}IGNehuu?B#g$AI_oPHf0C0Q}bj;2%kONC(01(m_KyN&XQV`FKEpu}r>8 z;%us^z`k0|l)`T86;@SzV9tpOxOKaN>o~ z>wTBJdVS3XKBBe~N2RNs4sGg<3djQc^O#?=l|7yotm zTY?qf04Kyq3G(T>_@r9c=Dh2zRmk!;30rsqv-G0n)iTiWc%{?2kk~3$qi17*DhGX# zGv>Psr^#-jrEZv59%BB+F8Q>hmI!_`F9%o4zwi2Dh1qKQl|lVC(F=DGi9c3%%_?r< zu`QK9PR-+qZ%e-|$izGsBES6ZU#z{Bza;Dibaax6gJrOM#{K(((Sq-+m#(<(^g?R7 zr(CuSqu{06VK8y016JOT9FgCCh|9e+=~DQyx)ZwiA!xx(nZVfwi7=07#t1_l)#KaU zWNaTR>dGgGdKNKd35_PMHJ5~YzFl<=X(KDq1}Y&Ub;^~uNhP|!FNEKa#aSiX+N`|O*D%<#KMu{UtYY%>zv)YP7#(@r+-{0%le7Xzkod#6JC?G{;<-$DU zPWW0&H5*+cJeCk}guRCWK#Nxy5{qGlRPH}{Ia`yw_Qcns;Pjl{bA7d=gom_YEeV3e z>joib5wU*s`>UkA_tA##%3+ovLEvcV_+$@zd+O;37xAKL_avm} z`@9ahAi@m-k4@*E(GJ)jxG3EEVu^gklc643H{fH;JJ z-_Sus)m7w?F?tn@x0pH9r-Rx!5B5;ht5406VNK`uQQ>e`=sWdT>S77f#txUx8XcV; zd0UFj=+A{0y|9PXn(Hf0bWk-?P3{1bN|lxP1HNm%`vmjS@a;u$Iw-mjzkpX05ieb) zgTVRlmKT%@bWnBy9(c)ePmU(r;Fs($csWhvqfP*Zq9V}@KDvzLfa7z^=pfw68)7}l z@Y^#TcXz_|xeYAWor^k%R^OP7*15;G8lEB!oIHPH91(Z2KMDpit|?jaZHg1H+SF7U z`#MdXAU6E~F-LaD)G>*a1q<3lL5>`^OZlc^@AD}wL}utu&Il6biOGN_VraGyb;f_v zYG_Ybk^L9KlMYhueiQrgV%QF*=fH+dF9dx!MA)Tq7>0K|t|=!u;HjwM`D+Gdt$gg~ zy5dgCZ(kz@~P2}RJealtf?*$8T2aCRk7YqZ`i6}qTl);C~CI0Ag7PLgy zZL$Gob^#K{2DB~Sn$0<9xkVTbD`KE~O_YeidcoN~icn60Y_2e-RW3qB$^2K7Z9RT* zzGES7bKyP|Vn7GQ2CyS3f-MBvZj0+TeIGn+Vg;b#H|C3ahZNdPDcsPT2iHFAhLxsa?smbMc;q005M!uJ&m6d*%l#n95`M+eUxHWeOG50U-(8>QqI z6bCAzgn?Z0my8}@44V%o!DQZTQP z6?{<`duZelJi1Pxu;=UgIj;!4*edM+-tB3fi}3Cz={XVy4bHT1j5TtCtWT}NI24Pv zPgr_POeuw=m<_eKCETxzIT^1Qv@E$2^fj#Rk16|rriQH2L}riTmDt4(lTUbD>ucZ| z*rmQG2rzjpB#YLg?P0|tYzF}w=~%YrVP;rIT7qb3Mv2uzp(R;M=t)+hBjUybKT#bGj7W7)+c~MuA#=aNteww zx1Gq$u)b}$9We-Xj+9uBjM%Vy*3!%9_3WCaO~hr7_9aPVTjEl?bwSO?cU(D4=Gig% zPo}BBo}bM@vcavXvNv%(<`(sV&#kaGhl~IXztTXeB9AC!<^xJt)odBlIzv*^>!>=a zo56=uAo#e1Jk+0a!{syG=QrSfVuBB@gJw*i84cG7#8QG>+rjijELwWg#(cz$y{G5* zPQZ|*ey`fbmvaY(;}$gLr-T$@MStA6Vg&8^WF!z{>;@ifBVz$n=9R~9~hlt z%=Iy8oLkl1f1v*Jx6V`Z(7j8cfE+`NVqH0G6Jpi`;gGx10wW4Oaoe=Brjh@2GEvFO zM28IkXq{*z*^nQtCBuZVq6u?AK$M+)$&1AvvtX@+w6OQ`_&H?X{djb2XfXI7zuYN;9Si}31*sUvL6ieFd$x~YjlX-=3=01xK9n-y@$&l?(x z4jzZQm%-Ooxz@vWh8ng``}EC|P=#y1duZs8vO@>?MeRv8I6j#x-s)XmtIYVOUFd{= zX3;5LRUK;=+o5MFz(hEihkD&`3^vwqfh6b3k$%;sXvHJ`MP){1H)lzgCX?MJ^fm=T zt)npGUYE{TPCJ^NRZ$2zxiYyzARv5~M}K}d`uyORPnJxdH!2nG*7sU{xpkY{Q9UK1 zB2`%`dBWmexnMT;V{gYpt!?oT<~a=CDonO~w<6>2kV%zI1`&H|&ahz`xOC%*_j0k_ z1Ix7Z2O3AAY1cg2= zJV{hX<{Xm_jQXBb9kV*H$g)He4}RR=aK^Fto6E#o6%`V7%>FRnee3&yGXe*1l?I24 zunePn^iwv7j<0gI9{}B*=&c!Vs`M@fhio%2!7WFXpkvLQ!~#AYK19^M{JLZxk@(|)i+js zmOnzM*TLudnxUtIpN^zqZw@Xs_(1AD>Yvfu`u&HqxgJO$vzb;}29Qlwtv8}C*<{-O zgllgiujnC3{5&HYD=l6r6Q-$CBqkb*o=}xX8xG1@r_gyTb#K+vgqkBLJPC{Q--PM` zLJ!kuf@;fpfukQ`jkoUPc%lMQ*O=kB-*GmxrENrmfD4k%2f0D@Gfa6<{c`h9*2l)J zQ(|ZK#DdZWNJ@kRQ(DwkwEs-&rg&x!OAjLw6aH{ai?aLB|Db&W-ZH~9<5H8@@E{|v-Qi<> z1OuGQ^17p+Oo?19CFCnby+3b6IpfxhVHra7_s51q+KSaugE#3Nu%*S(=vo&z+lov8 zcR<^8j$C39d|c=FEV&Gs8%!qD&ij@VYTFf^%@f~Q$0U`Zq5Hm(nZRa2BkH%)TJVri zH2gj7Ji?%V?+`7WCm?l}4k`ps%Z$5}W%4SFIv`DW)SMV6A}HL54z`6@iRSKv59}4K zh>qTp=q5PcIJ(LEBMH&sTXw5sDXrPwIFk(aTdXq^1yI=WT~esWi=lu_k?{Mrjabis z82GGY_u&teA}Is!-il;WzUhu*mnr&V@d(pF_e&KG zRd$CT552cyXYuL&3m*CPPp2H_0JO!>4JW#Y~Cr!S(~&Qd&OGA%_zJ!~6(sYQgFOLgFyiNcrp6eH990+)<^&H_L=|g235qE2 z2UJuHx&GvK^9K=};rplTM@ozbpqr;wMTnvjJE(^Mp&U3fn-VI9m6fr_JlVQfrEq(a ze_O357)(}$cLn49sNn#B+EYeVKwcU~1opLo-y}Ghv!_g=dFvua8CBk`n-!oLTy%X^whp;+Zi6DEZ#oSJi5(P$iLuhW(XHIcj2E zz^psxGv|rCH^dOFUd17OVt0T_m_NCUYi5}0(mPq~J3xd#pD!@>9CYXhm-}sI6PZ;o?n&=L9`IWJbhBA>(Mzk1NL{{aw)F*|H-IA0p-k;fdk$?L2&m(dbkO@? zK%{-RJa0%5f)jcAsQKCj1JrbA7Rl@xxM}-PT8kH8Op8%8g!$jAhW?)2x8>gl5H55O z_1zPIg$ac-1Z$$k)_8xAYB$dXuWE?c7boqWsVZ3<@9g}RY^VEh@v^`(|Gv*;XUI>j zq{Hg~&=7|WD5;drLf`p%-AyL6PK%AGV7jI3S+0>54QJti;=@Y$L` z%F!}~yQM>A=epvm%7p7z(B3I;asc2|wt00M4QW0lel~0B-fD)4!D?ToN%>Y~L*68@ znqjo`x8mYW+`3rNoT$;p??>Q+!lNtHFvtrGC#?kox;n$=+{a>oa&{518+K=j z?SLDd75){aF3Epb4h4J=uZN8I5v&KSK`cd~w3-ew%7=Cr3c&+MCtN;Zb}s5b`|-*{ zY1oQtHqSIZ#I-2-oW;ow!@Ilg6VXIZJg|ZBZ_M$AQN^b72E*BG@%&X?4vJel%P~an zmm=4N;KG3q)$%Y?s7q(7FpR^W1M0iL-N+8kH%C>CkQl8?c&my~WhmQBkM-5pi?)tC zrjH;~9-TyGB9yUqWF<-PySHL!M%^` zs}6FmZS8oVg-bX@_$tks5MiDcl@hw5Tlr6RP@Y_X|NGM zF$7_#Li=qA6wm8Qh%hlElhzp*hzL!J1aCTG|M_#I?w)_L%6e7cNw12|nXNB}m@#%} zf5(Oinay8L>V|cHjbdXvS<7Xdl2c0US*nNmtVUwGP>v|qkcn4s(N#e zF)?(|OM{?RGx@{$W-H;uNmUBD&+GDS&iT{TV7xlDf=M*0TcOn|IK0|TWMKKCBjx>% z-}Q>WsjpGX^E6gD@*P9+ZP>Jx%;TT-0~8(w{B#CaNM}zicLpt1ArVPr!ER$C_kRY< ze1SUqF$SxLluzB|D|plm?s|mX=|VXlh@8i|yKf8qk5axftf}pL6G1PEA_yWXLPS(h z1iVT>YE&*=jEeLU6%;T+q=P_WgCGJC5K&rGqzh46=%FK^AiXI8A~gXLN)jMB{P&&t z&pf}GPxCzUCHazbPR`zYt@W;Vy=%1vhUxseI>SvHDuy*BSiQEaF}-3}V}ALpel|Ed zx=^zxM_L_C`?xBGTN8LIMG#nJ#D-ASZWd_aVm9wGmOCev}<^(8+SvO?HpDUjNGI z!2$7!{i3P7UQ?8r7+33AbI>|=|Lmm@v4z|S1grhCvs|g&ih{1(v6zF)#cP{2*vr7{ zG$6kIl`udQf@3;ZIIuhUX{99m2C1<|(d?ydNN`5q(SFx>bFJIuc0wO3Z;hYqh4@C2 zyPea_Gp^h_9b*=tugUdf3E$*euyz};GzjMn@`D04WQ~6Ga$RE@!+B2V4Il2`taGh2 zWCLPu7UMq(@u7hRbRCoa`I=61wtcn7xV8SBsPEeQ@MEsoti(pv~m+CZ}chk6jqxZE~cD3b13hW>^U&pm@Pk@X8zGZj5gTFzm3Qz08DzhB{D-W^I*Q$d z?}%~uA1qJ`Jq-;~Y{I%GJIvdQHo884YH&v3SE~|;#dTo1z(RHu-ZI|SZdG5Yr}QO7 zjGEb>`1?m%d)V-Y#JJwM;^Z|o0cbQG!MyU-SU;Ojxfhf4^4jH|qD}2M#mVo+n|k^0 zxquAYzQ)2wxWs!NnD1!1cJgW;%&lBu_y~iSO1#fp2x;Vu?eAYa14o}?kU*3kyrdiA zq^DH}T`sB7{xp)Qu(T!c7*)C#&swbi@E9IJ^7>Gyz8=eN<$N5+!0>WUYYg{Z3)49Q zm9AqZ)DBR&u%>`VwM6efRF4(qhM9^*O4Q&Stbr5>(Bl4DId@2&yspsq-fkxlxnrta zUvMudFblQ&f&+Av?r3$T;Knmy;_03a|1dw_z)oLChUWC_Vw=FQ83O`WHnewQ;V)XV zvwTqxV*putKk(FcbN-CWSLAq|%_rnCA>o#_{kkx?Fx+%=uY03C z|C1jKuBnofJTch)Mo|C?QO+Y)n9ax{AC(fyY9)B8y;w2sfiA;d7n6x6my$1W3Qx3t zpPBc;9iErY6xn$_y=IoAzP4`~SL)Wd8xw^PhQGY`#I;X-=s2a9iuqpDqA3MidR7eW zKy4#G^AEoOb@VwLabtA)qH_0Jm#~gRNGbWIOKxtvZ~vUK<6iIDPOpMLJ!^*~etR7o zej90efj#D0sQGV0`CbRKtXM6GANe4t3i&&5&HM_h4Iy^Posidew| zPcU&r=eZqb8bdkLV z-Z|EE!Ng|E%E?}@&}Z^6I_-F30<`@s?(kX{SCQIe&FpGkSGR-l#hR{(+YGovcM(wl z@6^tLczfM*n;$9mK+>12-aL=5CHMiub4EB;y=-t`U5rNwD#lr=5>=U8P=welIK2pp zHzE1G+&MX$Mn}HtH7g@pMOi8lRfS5Dg9Ghzhc#f;hbgP)Q8^4>A_su>yQB`nVQ|${ zKJH(}0?YgI2shh^a+NFn7g!@9W2yvhNDr}kn^YubA8pJM zY203io0N*=iv7(`q5P>0 z(t#QQj@mdpIQKUlm4YY^F?wYqN{h5kv%6Wr_C*u+jL<4I3!=O#Tm$3a3(+u_$0K zjEB95)m(HBVw_A_225ZSY-tX);a)`21kTDA*R~!C+YzXt1`}m|MYCU5v;|nMr@6nEeu;8}kkNgHGOiNT`*D+6r$kn!w`nmiRHyP|l%6l^& z0K3m#K|3fBwTK|KNvWE=OhS};apqVhf3UpNr`>f+;L)i%*xHiQu&23|?yvT=xs~)C zz@J&N3@H(a@l3?tdFtb1$y$3fvR3q1+D})nUI#V1MT4>fU7u{u4C8+QEwNIS&=d zxR)6|D1d%O!G*_apM$;G&D)bQNnV)Bq8AxVd(;YjDeqt0L-g%bX1njlm0SUt-9k** zG5(nNI(hTE6=CckVR4W}TOm#5PjYyP#QnG-XW;6M^>8;Hd-}^h)F!r2-cZ2VUbe3O z-*~R=b*PVaag4m=sxKt^7NEcnEC;AQ0Mw-I`Hx87P+Scc$PC|%+1xRNo1H_i&6l&N zt#0>Fyo2xbFLYCzYek!z6wyDRS>>mxDohf*s7H}j3;3ZQu6LC0r4(w1{9SAIF_fT z6mBIyg!BfOMJ~u~e*)>Ju>JgqqxRKYnyAmZr+NY6`n~1jhBDL1hDMjKi-*%W>Dnz9 z7+12}gzRoHyYae!^q)Mmv>(@f^CyLA4lGg{^`7zt#mLZP*lnuLf=+nX{)vH775I{> zTdm31m{z*opE$EZpQ`ILOL`Qq8^_gBoE#5O9w*|bOdD_+V-d631f5(LR3S<*)S@7W zHs1AojVft3G6x;)FG+FW8}((&X^ezDE`)Uk;uYxzAFMGtEQCgE+WiA&U)rsr5Ye{y9&Pf;C}3}t z@ec(8ZIzS=>2VK1vY^EH*Q>dy)*XKec0#KXJg{!GPd6!oSfw9K%p^9c@H902o0ngX zw>yffrVv5V)=F1bR;TXm0I`Ha=qdenJzdP((2a{~D$_sHt%50`=PWW7U+MZ9pB%4? zjwa06{9L@$n|*(Ut+x$5L**)oH7d*cPUzMib$4+xH%dOLh*~4;DLN*lU;j>d_VoG^ zB(jU8KX{1?0>;jfHktd$zq%`)`KgaXJMlaB~JQHs>0n8+tcSA`%$(wgJLb{=!>++y3SoJq- zTPvR11wzJyDi2Tr_CQKu*6p&QE{0jXkBsW)KgTGP0OV5cI_0IZcpDYk05ErvjVVX~ zq?rbDumflOGaVi1Z{+Q2?!Ek@0Ij>zo1w$pF$^9i?w95R|E1oMm;?@O`nSE#YFu$u zN{l@x$2Mtk5P>XCKAnVz(-He-H7dgsn*yzE;*Ni5ud%Zg1Y@6^;8W@EhfnOw2#)@+ z-?ca(Poe3N7lH=0vfk}@h$|&DDPd(oB?b#W`AZ)TubN}G<6cZTfzyvoeBEuLz-y*a z?r3q}=c(Jlx4n-r&#_(QTc?|B<}i)O$Yfm8lF;17^qckp^3Qh{A*Iw?=U@+g5F*u1 zh@fa$q~EO4d(l#J+kW|OKl;m#7dxsCd@U(5`7MB2!kN)@#9|TS85<*AESzz13`a)q z@8h>;uM`nM@iB0`<|T@Ei&;>#CD38vJb>u5x?jxVOqy~lSS}8O8GAezvySy6ukS&Z z?gEQAS%nxv*C8jV1h%GOpu?;?$CA8hFhu}0XMY4!WKI9Da3ae_pNl;Y(Q%B@b#EGK z{YWWhgP#KM1bidP;rn{=kUrJ5B3lx0lcGDsG(F+i>Ns=ShuWSeMTI%r0W$!*!=VFHrtHuqjfmtmwMN& z<}`)g1@I$6yH*k0DIVAMum`x(9nw&2IjPju>e}c#DO*=^mhuXR-N$0c>G9wDTbCt# zC-)xEgM$F?@s}-*I(Q%8+a~3G%p)8IC`_JMsi(3JlD7nY4p2;i{&1L|(uvjQBK`wF zSw(ZdGjY3SD5ZhC6!J?1{U>hL1C^SQiH*VbQd(%mgL0w=1`N(VrbXOmcU7l z82`B!BH5qDEux(7Ff z+33vGqb)cz$|>|t_xSVWW*AA<#aRO}%MY7zFAj<&ZblzwqlR1{5lfaBTf9Gu(CF(h zKPJ;h44V$m(MhrKg(~8D$5fLyBVRuncK=8=cHfk=Pp!^-IiHw zwYpg6w|%h6Sk|aSFU_Dn_gTIXw&&fN1)g`LbYj~?OEC5zH(Afl$a;U@c#s2K`RHBV zF`lp)P}=dq(o}GPJY*)kM1xFb;-B=BHDWycdSt3$iG|Z6+lOeozZ_i*uOMk-xQd#s z-@GDW!nN{}GE$10BDW~d9{dRz%;AZHyU1gI5~Y`JZ5luKq8s&;Bu>$5eJC15(QDYi!jC64fx;-I64f0B&RQLZ2VL9^g_m&_Sg0Zu#zQ;oOzZ)d<5dEGX5c8Y7Edlj{q4zpyhDl;HI=y@b-W=PS_cC7COIQea z-M3NA8ICcZeN0yAs1BPJv2|rYfZE^|k~gQ7`ln;9=W& zAuLS-yuhqKRGJ-j847t@{lluCtsC7@9;_(5-PM)W*V|6NoI2HM?O|pmFD3MoGCoXQ zKSh+nF{E#A31noF1|L5xT?gyG9f1C)-aJEoc&Hn##-LTmVA-E8W8z6E#)Qs%$0*2B ztFCITktjWCuO7L4nXF(Xx@a%d%>wn@r;1ja=_HRli!;9uEG{*;Qjth!CE};bDB{im;zk|(%AV9 z?~lKlW=yMn%+Jd^rnsF!-gAB^7{%jqL3*`4lK-*xuyctfV)xqb8}QDKm?O=(pC9`n zs^Z?d{km7v>>wIRSQ3*QntTY_%Gfi&|Bp|F?NvE##msKhyF+qAIDG97K=h8WKSE=6CSA?A-pzfnFk|K0SAvE@MJ zzwV;`9B8nFNzPvz9px#ozMucQPP5W?xTRt({$eCT5@m~R$1%N@VnZ$S?B-Di;0`#E zS?0IH7K&HjsbOY>;tP&`_s*S5JcldS?#(`^J(JJg@5P>J5%-&hUFGje()HAj& z_RxoMFHfkhRZOFP|Ngd@%Xp33m-u)L5iS%sjQS}e@okq=_L1lrSd2GSNdK=O6g!aX zo5i)M-%zQ2`Ef2!xBSix{RaZBptH^7w_T^Xgel!A{{3m45V?=l5AG?9BHyyl`sqb$ zA=9=5yb!~+v`OnYSmdg$J(-LbwpHP!u%sg{G|ca-MWmpMRNJ^8CA-d-snI{MkKlF82a|oQr$Xi!mSmz zKUB7|Gd%YPW>4!m2a}KP$6NDYufvRgICo@#H8s<{ z(OIs9*@}NqQgzUxCM_E1=+ZyzyPU&&{FxL%6uRH}S_(o258KiBK0Ol4KS%|82?}Y}D;D{O<7#+c7g|NWhPGk*N2qm~Xtfjmp8HaKM$Aj?^%~S zGWzuntU`OlaCU2N+RF*ikchh9_gFc6;bp1r4kIk9tIJ+)wkw7x2k(l-9&=c*|0h=F z_DhEgU5f>mma3{?&TGhVPD9F4w6lJ3_Zfv(Veen4o>WxENRYoThY7bU_vp((bzm@O zSf5&+p%|XAd}u6~bERWe;UbR3wxmBp*@a4RML+Pweqx(5M;FV>g%$#RROeJ9Var$vu1;`^ppI$L*K4y(jsdgLZ8`tR{tL`Z^ z4=AlIxl^oQOb!y>_L?JH;Ex0G%AF)0x})!trv|cYZV=41K2;GDId9By;OA}n(r}DX z03l=F2;9F`Q~Tj?93~92j6B3RxFsMFV$+UA@SlbTPaGO98Aapv*~bz*)RIo>NFGU@ z84i-o|7kU0X__8(MVIzj>>7a9PhYz)+_I-NYJUne)1P$u6eqd34%^s`h0|~)Vhe$V zp%2LkS7Q&ZhKa^Hk7#MayRwtHGLLCOLUWEZ=m!=NWkF;{a$howe3UbRlG2d1yLs@` z^qi1!iPzzfnSJ01b^4%2Ypk;Kg;_}=L9wJH9-3A{l15m?JoPcmb%ZT=hFSi#Xwqi>U`;&t zkK}IxoME~@MH<--BREk8eUI_)5_3}d>3DwF zQQ26YE&3B?wt|y`>LFcb!D=?L81MY`%0hCdEiE)a&LNcgbWlc`G0GA&wMK9aco$=5 zFudS4GV9(rR_eE=QAq0ke)scz`k>ZOf6*T)HH*pO2AX?{dhP#|ggp9&CY<;Fi2RyD zW{@Zp=kInG9qhfQLFJOO$;&dJeb3Q%NaZx{t)b6io>G{|0vDS;z-8W{XAT)nG^buY zUO|*it7V{9*JA=urP7R-1)&x!RlH*OM6ah`nxcidR8(-Zjz*h;K;E_Zzl`mZ{ZG}8 zoJ`2p+U(W$<)?z=U^l0JSckx_sYQ}HOE)Zl)05{%hI)>ZqU2x$7|K_R+N3b4j^}A3 z7CG%fGJ14I5N(?@S(ct$bJZiw)-3ev1SEsJMuS1WiaE zApz{51`ej{?VVvaOST46deFsZ$TEX?!&V4^I%dA9&fU-oAnc^4m@eF7AcUxN=ZVc- zynQUUMru@YL}tM(xzZ_hM7M12ct=dy@@je1FJOe k;i_&pFth27ioqxTS0B=UeE+31_y0O%|NrlI+qQ=P3)m!QaVy1Nt#m%5lW;*?lwu%giy9QC&?CboEF=d`;>#C%qihSnj-r$ zDNNa>EU6~R9us58Zp@5j3^Q}j?^5S{&+$AQ;%k?4o zDCvQgA3bb&7?P5bf`Y&oBw;}t%!9noL6EgIqys_FV(^(FBn^I(0$*QV5(ab-S|BAg z|NYxbT1I;QwP@i&X&Ko?va<8<#Y>hhS-eT1veBg2jojjF95{KEL;fg4g;S<3s=Y}uHUwQ(Mp@|Wj6#U8D6>daIwaL!k5an zjogjf&-{3GiQFoc)v9YYX=-V2)-f{PVX|}A?t_QS4_h3uJZg8+-of$IX(#uy9_Kv0 zynQZQymUD*C^#hi=ZMItYuBT1$K8ofNc{C~Qfk_x^o-1`?3^c0i;7FA&z_f7RoB$M zs(bzBZBuhgYg_xrj!sr@-{<~;!J*+1-o)h8G=D}gJ2%gl6eRtXt$%U$H@;Q?z7_x- zER>z+OKL$NcuTKXD6@XsBE|hSvfl@+++cWRvC@HC4+~!|(b#UwRX+1$qui>EMyyS| zdDgyg_Mb6!_5X^qe=+t4U!Bl5(o#Tq(kmbs5{pu!wV`@tx6=-*J5u5UL>4z3Q%0G^ z?Nt)!8(eWl8gJ>#%O)CeN^|v3b`xcWk6IFr_1C!nFr|1YBaO&5csKP{_btMrqRWxS zV_XcXkdFvT;je#N|Nb}Gd)X+*!hk=3lR$9V3}te!Q}hH`;3t88#!T4}WF=7eC=S(+ zL)8$LtXPR7h4jodOQ4vv&V!}G4>YQw1ez6NDv-M)vuVbk`}kdgeaJv&knFlSF+~EY z>=T!u%O6Of+sQr0LlL}_1may3KiWg7P!L`)U^1#D&;r~*NUd@|%wG0BkAS zMiaSWzFdL96@}lf7|heUU;I2#0yPYYM@0<|spXl!5yq5~Ks|Hq^OXJDm2|dySJ)8z zCt6z^??|9(yy#mAl$zWFi!fgZL;meb=&2c8hywc^4Mi+CfY9RK3H>u!|4!(-CiV92 zaKNDiA~y=#XYc2m2V+G$Bv6&Y+~!JY3G{M$UN{#2aH*JdY32d?i7tT#r-;+2XReK# zodlAnal_GQ{7({y8|Ev4Y8%0&3hvJmsQzDy-1{h$QX%^%JvtkmD^HO?e$4O@ra{dg z@_9gH&=#*2F;|+(mZ8=2l7{EydH`%%!skk$7q>>0zKVyi9y9re36TEHC=!bRu@5DX zzlQ{xoP!055@>sC7G<*piew7*OCWQT7l^>DSOWD9{lg{xFXNR{7{*;hgp#^x@21Z; zCQZbPsg=vwz+6&#Fkh8&$#=h)Vx|(5FgaF=)EF$nxtbh#*p~n37ELCE*tAEpl2^C; z#U7`kOXvjHy?ML2UF5Xq&u`XsXrPMn$MO^LRYj9~SHH1hwNtvS&6RAmwNs-Zfd#rW zfX8tW_;Smt(3Oq&0;7-RuEsAb61whgyxqNG)li^9Xek8CuS3rxg~^vC(3K0bCO5Xi47YC)k28Y?p5y7hy84Hvn#)YFsJb;z zh+ZFK3QQhLpuQ=jI=d1^8uunkphbL)h)DAbIIK$(u8Im26G)A4@4~al&*UAkt1qXa@hE|zb@Y8>7(bEuO zIyDTdCyVH6tlt!GcMz}ezzrDg}T8STnWBTPgbZ<&4;;a`uLd)5Z&%%Fx7z1AV3|-gvd9uWrk_^SQURxwPM(Zf)!cID7M- zaHbewd5_G`>AQU*3^zTo7bCc`3nLQe0%;qdheRj961Jk>g)=qJo`q<4Vjmy=e7_zb zT^KBZNbT&%%@6$5oJeEmVe<5Z!k?CyfR$iY3lkG1Y96L>@tFY4=Du8@4Uw(?c%BgR z{Ia<3047e&TLPW=P{Ns;l@;x~7l#sCfqMb;+CbF)yGludOD1)kIjyHiPd7kCKt-^B z3~H^D!V76aYaaTJiV5N9x5q62O8Wq$vywo!ej|o9^at$#7nWrR#1iNbA1_iHmO#K( ze1E-A=i_#CZiSU_O%$0afgpsp;752?{6*=a>jL1xe}Cvt)G)EY0;h%E(cA3BF;SCf zC2;KJ8X5rES`qFh)PhC33HKzE*Ho$pS=h8qlcedM>BFm<-MSjYneJL~-yC_*iMabK z%RY9&Q=1-|Ky&aF?ONrE=Hd#>i-~UUkcvE$k~j(E{jqNFppI@DE5kw6!R~5Kt58O0 zBcR%HRmKMUDnc!v2{p4*hg90z;>J#!-c6<6YUDrGVVshVbig=aJ1*2FC6W+Nc!6(c zab4%MweP+s6=lyR+Th*Zetm&qISUE~HnL92k;k0YGJw$s1HCQ$5nB-E+}T=8DJ|x7 z*L_YD?N08S5wGm{n_mBrZ96+dyVjAfk7<~jT^A+VcY}l?_P^_M)Bmi`0_|EXUvJr0 zWBAv@vzY4u&=&%wY2l(K6@<}Wlvdu}M;?3AN9rg$(L5&deOM9|keyci#JH=x`^WVs z>SpwX#B;a`9L;?^N%R7s&J>S_VM!oyup2TI;HU|2Njn;I50BXO683R3x4bd*xf{DG z-$J|dO|c*D?5$xk_aNnFQXR=`t)Q%`G`*{SYTc^)oz6=%FW>5m^oS??QZJJGP-xGt ztmLWtPF_G4gP6P?7fqg~19Gr4DW;+EPLJx@t0 z>wbHj8L&xd*&WB=xve(lN>Z~R*vSB+{3WxBHaD0ffrcFH8vq)~1`A&H;e|2)H-}yo zgriG^U>j@%GTi{=`XMiu3^-dRf!=(_ql&MBs4(U3SWkCppBqE;-Qmx}6mZugjp+^1 z+LT9dR#mjNk<<#=XfF0A%yR5C=&JnqG#ScHtr!q=(i@v?w`{Lq(wsu;X)&%21ckqU1X}ozBe*$By(gwIt7bX^ zSa=C-p{+sJjI7(j&5RIX^1SAbQIucA$|`bhN|)yO{h*FIVgd*7tbs}p6|N%0PYDvJ z1X~?;bb^B=9c?d%H&|pbHbx#nFP)1$sg;snD8S!6tw!mlMAE)vc9MG?tB{{|H$;eJ zxfCbf+0KNArj5QoJZf_4c+0IxR$sNl_H|aK?@?M1(Tv1purz7FNPERUnQah|YOL2K z_9>`s*|93&y0)RyXH%OWGx15e8=tV<7BzC*j;|}CsQNTn(_f2pBcH{oS=+vPReZE4 ze%IT~-GoB#(DMBB{HfxO!$NeaLSL>yr!ITxqG$=UR06TS4cl^DPxVH^8=c7bvrLrw z)+3A-I3O&ZHV`Q#@*{bfV}sm9b+6Wei1KUcovq!;&j|gi#!0US(U9{vfigiVcZ9qY zW_2dGsfO1iV0m)t7O0}i(^DC?&1JKPO~>l!=U;}fKgCbCS5*Wcek8%hwug`2pedA7 zLr=XY>QdgfC;Vjk4U=v5`YebTEsgm$*#~C)T%9MDVS2YzD`SR@PK@LFOzF!z!26jiyfoO?Nfu^ z6g@>U8P%a@+J52+dtZgTA?Oe53$HT=*-D-s;r;Wom z>TP@>PRW4Hh`9KNOVQ>FIJe6KG!PYg66bIt{f5rTK9kzbcMJSFXQ#wFE)VfcYx$&^ zGm%VGNTKcPn%e72TWa%uS(utgp?N1p_1dfNefo0W^0IA@ud}JRK9m|gV)k(o=}fFm ziu#G>iBb10Jtl$9wi>xE;`5urVzlD6I85v|YqQNS{%NPj22zJ-ZD|w$c7p}Jr2yEA zt$p`DsVpPYPflhebejZrKF}FIb6j~}Cb5O6-y)I`?hBx{{@!XN!jsr~5as~7NQyCsj zh?hVQ-P(sYslviMGvqD}VbFQy)M{C_Rb$PoNUS>3;-WntHgVBxqQ?))!cmHri0)9Kf$eSPcmDad7Pe+i(CxnSTKrqlODJ9DKOBxtXm!zFYk zP#?N=oW8E+qv~;`(J)khKzZoond^s#)0%3(@4J?+W4zoM_F%fC`bMa4= z%dOIjDI#6+;#?y)H(tge%1pp7j0@xt9z~$(IhMv#-TS8u&!)9(4EIRyCPMo2hviJ+|jA zr|EfbHVLy&X~L#jyhpg!oDSrK7#Qn0p)1BYR-0g+?`fb`1N_(`)&!iyCYgVLOuL?$fuhE>lhTZ(lb6&F9fj>KBJMA%E9kkZY~ zC$3)Ytozu1+G8zk305}B;f8V|a`%IrZY^@Ifk9)D*zS2gyKz@V`;C&ilNGz@k9;1^ETHH+wvdzg!f!IK#w2$f$JU=X{t_FcD`HPGL>eXomkISF)t1K@8|<+Tb$BLp z%gpy$x)S-D&dt?w#wx`zrNFcK_=S;)K&wY^gynkp9$yFl#h057Joss_Jc(V z{|GF@f`5Xc;O8`9Iq9tk#ID;;H2UP>_J2nfBB(@PLLe^a@$As&-ncnsHu1I%NWe?0 z2WOK7dnM4u`)Y#{DBW;>Q?%?+-6q&tPCNA{*cgNW8f`*J0Ez~eX`EQ@?Q;nv_?9C| zP*6iY>N6$KVdIM!E{-`XN6?i(1tAnP!ovmBAIk$#E7_a0F%`T7N?TLukDD+?%P{m` z8)kR=wj#re#Ya-3b%zy3wx&kQLx=Xugo)=IuZkc+xCC0F!cOKj?BA_<5M2|YV4s- z6lG4tMG2%BM5$@R4}J_P>vbt94flG&?)5V`Kt0ryr-@@F9U0GbYZ{-;os$Bt`a!gZ z%7e%19|)pOc(EEqTD_+dU4E57^vYW~ovuSFlVtw4;SQmoFhBPx3EhQih~U;rMbW|b za$Sm(rF%h;=ZR-cm()CkZ8OV{HXe-G<;v8TOV2kU506R#L|IrXufGKwE` z;9MK}bAo>h>dJxJwB#Px(R|=lBSa~2ifJIl+XUkd(vAglU(*hwFKLI2voG|++bYuU z^(1z|=zQ8Sz4uE!Nj_6IXsuW7&nZ5T^Cj)b7CM@Sf}UP{0Vy3}Y^~56FsCa?zu3H3+{G<)F;zrI?sVpuk(RxEtgN zE5}))S0@lSu!7gly_w=4n`l$Io#Ks@dYa%{j3}Z~2Wi&>4tAh|(sZ!x23g#Of!{G+ za%MMjnXq{C?ajT>vD+t4#t&mMWt438VUj?{@PBg3QU!qlM-*YE4Dy-1z`qYXDL~N0 zpzPTc{))+8N|iv3H*qEgvuh-fE2;mTrzpjEgf{gv@sW+W@>JCH>iH5+Rh~Rq3)~QM zO{)ej@vPgsaH#ZuD7_v$e5L!Mav{Oe72$snuvq*?0-OoNX;z969rHUcN@m-=FA9`E zmWgo11h06fYtE7EM5`I`mY}XQu+N&hE zgbc*U7LgoIr5U?EI&mdNzq`&TI46d#zxRT9I9SP$xPbsSqPilu-PE9Wsalv_HM;RJ z*{UTk)3wpf`S?wxLKESZ8`Y=`jvgga*@G@I@8$fAth~ey(Z(B7RtjM3>GFg6UCn~B z{o&_V-PgW`&@DAcZ%SGkiCzWn&Kcs?p0jB7v6zX%c`nK+{9N&!@@+x~!R}Y|Q^_Y9 zr&E@V3J+FyYcy#t_vu!v_-Myo)%4h7_SW5XS`N{tI&Po5c+P1*djr*zmo8j^zUoY5 z`}K`p8!zw#E#038hJ|iH)Eb({_6*Yb@vK|sYeelT?S^O6oKH!hVAJ5Xu&?URl2oTRLxfiqAO#s)Z5Y=eOHr#=mERtL;i}cN~ioYtxLAb!uAUWr41l8rp z*kj$*`ArLjO!vFD7FX-5b?4quKa$U!dN0k-;GKKeW6(jba~h9>JB;$jL9!d*cMuB{nDhink7P1-M~(CGbKP*j|D1Sqr+r0KW+_YD{HFs8t{9qwbZrJ$kLxNQr;vX>(@G7*r~9b`Lg)G?j6@Ce%0YuFroG}$ij z(`gJQq@wD^iKftdzvjuWJ+?Q+<01icXGkB3SS67$mllPvd_-=A_;128QO#BNH%w59 zv1ayhVjZl(OxX_h@kOm?w0S0DuvWC0dJqnPD7U!M;3GBCya8Z_sX1uz+$ZE}&7G{o zaR}vp;P!LMQ!>h?Sp(>+s?ne+o362vk*^y@1)J65`N zfi_WI6-g1To(M`~wMUu)IWBeV6~_emvUj!oeaDJ2y9jW52RGOO(5L=2tjoD8+=kb#JLHpd zIj1$x=0>Y`Xv$84{2KkK))L&NCsIuSG{)wW>(yq%ly@KoJBscgz#OOhL4W#TEiSX~ zx909N^2S1dNFX;y^4wbcfdL6LJ^}0U;!sN;31m>OhU4yoXO|K{uc*Mu5se7NJ&KnHck&I%GBoJunI<5&r~BcHE77nv{U!^Exj6tA?g;Mj;PGOtK@Z4 zzwgHcyG=@|jJV>dMw}mhZe2LNpPtUiv^HkgP5Iv#sQjKsWs`a_-w;3E-^!J%W_ex2 zEEDacxF0fcEws5hk`^a za%%kh5oE%W>~O+LC-1hTu-eX%HIbS8sp4pdZyMG*(DsbG)@v9!hx>WF@}u5B zw}L9|Xwa4K{khor zc2-kAwt%hMp|Z9#UCe=Lg>&YoP%WNAat}qp)u;2-L(dHF5Q1O8rQl%0{W5v`JW{$| z+uLJmT4xiv6m)5GLC|DhV$_Bt`U{wQO_1gqV?o+awZ@`~dv~aMOxzyvjfxr5r(NP} z_%k+8=#$15;o=5%056VzU0^OeXu(3h36eKkDcF1oyJW;5Ecl0{>6XI%CB9jg(LOpU zC@ePTU2gH|>!132NC@S zwkw2R++OfdOm^U#4R&w7fFpw#dmO$dfz%0(LSKSsljw9okh49v;CjKVQ$CG>AB@As zr^e?uAG1`wt-aHAL`dY&abctij?1%mTOPOWy_eDz*Ie(qb~>x{$NsPaD|02s&DZ{4 zE0T^HrfmH%i=OKSfc-`*auzfKj{R~m^$LJHQuEbla~InW|CBC)M##U?rA45V2+pUX z(4`Y_uP2uRZ=RS2PQ!Gt2W$O0+>_z-^xbDM4(9>;wS(7ml;!qFrgmf(i+w5G()| zb@DcUTv^qx#%w|f&-#2D{KV^`RreiO<0i(a#wgTX*({4$(b(EDrD=hf63h?LvhNu2S;d3@9C@7OKuz4?h;&n0=>%0^7S2K2dm3u-O9joS zBIi1B3s3gvp3$%44!K>9ys>?96PO8ph8!Z$K$m#1$dT}hi(>aGrlQ&QAW!q=X`7sCmi3;RfxS}L zl!0>0Ij`iIWelpO1iE|rc@Cn4^xT4%5j6!3wVhP{OpTucmiIEam<($0Z+DdLWiuji z#invm7azU{45q^n@yfDTTgu5y;g8nxCvNPN@a_27QwL7yx=B3OY=JZ=N*g%>TFdKGM)%)GAkyc z1Fs=xY0CsLeJa&7H5WHuOea}>N?2iH{gahSN5O{Y*Uun(kA>bX$?5Yo_|V=zGq2wN z#ta>-uBDdXDSc@p2Y8bkoeyWQMY;uI?6Y2=svU%FG0wLTs+k5-rJ|W8&ghmgTaOnU zCa_UYQRw+D>N~YcFpsilqTPlEx(A6pv=~HPFYen?6s~Rn#d}n^> znXg|Nm3>H9KnoOSP#WNQZ^eG~R?udxu>oKZA{Yi>U`;~h04NBe8DgLK@k|3jD6U{` z1FiQvL;UX|voci?Dg<3%HL&dq2o8W;vFUH5WQq$9Hh{+BRrt>+`Lz1?QHgt^KV{ROK`%`vR4|f; z9*)6?l;^DtjQD}-zz0!9Th?Tx1o!D3l|SmY*=^5{35^Gf*Jk6NE#j0GSI52^c1Z05 z83g4nZ{7N!?0C=9dM>o3OS0c~KI`xjeiH8aIyHg+^VGxzTr$GlcRS5NkmcAvYm}cm zIth;Z6f+=vTZL)Cj;dEE5(C?Fuj>7fp=vB*&e>_IgG0wDh2}+tojM8G+0~CuTVDv+ z_(Qe-4UX<(`;*cE8}G+BSed{EJ|ZFD_%)FMb8imSv2c-`9V1Tni2fB@^d_Ad)Xn&@ zCNOX)#Bkbn-aF*gd}$+rsT`n**+|cft$`!F$||qT()ggVxEdiK_mS)NyfMY}>V@v- zR{m1&oq2Qjgfo^Z0~=SfH7@goWtAgrRIjy{#%*FME&>llMD&qF>s*2C-m-=$*Ro^t zckQwyzYM0RoC_Lr;a$=x`ph}oiPLxnrU2swvBEDZ5KNm@F?s2y zO7Yc=7Hv6!ND$)R2ZGM1u;UX_eNOo;QeRA=-1T;2|wxAn-yM*Zscl?+ndv_*Zk# zjY=iupBzWIXjdJW4Q`)#`qk9_Vjy?^UBIlNv{Cy#w7+OEqf!Gin`LJ5n>^Jsk!ov# zg$8<5<#*%LjYy4($wQlgTrOZjh2CLfd`^c1;&TO8xOTmjwcRnU^l&&8G`x8<^G>Q4=ZVWt_Jb8cjrOa2`$O)BMXqhe6y%zB! zcV=3PZ=;KuL03oV&sss$wrI-hp!JRPN4=$u8!*qIBliWA8k|Z{nJsTHnlqj6Hq5!C zXUiHdICpNq;=;3}=>`U!Pb~*Cy2cGTkK!y?6&hhBB(G00B-p4Hq3P;lXB^M)DT+HM za{IO)3#4Yh!9)3=``}qB5afFFi0VgjK947R85$BtVYvxbiyrj&PY#x9! z4D5ltQ0kbva5awDfmzw#+#i|`SC^h7Ud{}Y!fgxmq+d7D?;5Wb&>~K?Go;bQ=3M@M zFgJjJc?M2DMFOp+=!$Q_J()~7Flo{dzRGM>bGdHc(wIjWuNDK-7<*sF?c7S-w0I|^ zz_NFmUJv3yuYf2kigw#BfoKji5wS9E308WIRp*|kbME1fO=TkK-gVovm$cnJ?pR5B zGNmB+0nCzv;~X_pcW}B6hU{xGTo%Z_0j%u^qJs{J6M&v*m?eT0fX3{2iDE(V*Qs6s z5!m>L%svAl&ljNDXsAb}MJw{^DLRNA`{y;lKJ$y52aBNdi-6SVZ;K3pow@T}#)sHf zxS8H|FiYBap86W@10nT-1k(HyxgP(|$Q>$i2J^#t66iS?9l>k?4s!rtLdtexomKj% zlX6>n9%unqHW=479!_fN8(5D!lQR}DbDUZJ4A1JC=nyiEiMI$Kz+Zhy*evMd(jB;! z&wH4vF5XGy^7yS2enIH)!9h`h+CmfVV<%A`O=uc8saICNsf0gq|K!PAaqwmjTZS`U zXzix&DJSRsA>=YF!&8&KWml&&D{rpzqfX-8TDd~6!?NgWCTO#}8LS}~?-Vbip47HAV2a+}gC z=4jpJq(_0eD8ETfT#PS^r(`DwVvhTAF?@f4Fb}PVR~OM#yvFKx+!yNSPZs;L8|Gf) z#0fZIf4sB6cgCGXu91g(GpoB+)+7c0GCVhZV|PU1rB2i(tDr2gu(LW^Xqu@y9qkg= zt;L`DnczQ}S2iL@3~8~&)?Xx6Gz>m!8jMD7AW!`oM319Tff8~K#L|Yv2M0O@9o8Gg(|H8batg zvahGbtN##|1>X~poyeGsSMv6-#gUTJ--bDnPmZC zX`}Ukm;1jxa~Wca#7DS7C%bHsWNw1TqD%0>nNt zhLGp=gZV0IW8f|rK;B>g#}e0=$oHd(xPMitmDrUu2`D>=Zt4cy{6<)ca=gPT*CLS7 zlrl)KXlV*#i~tF=V7c?17JU)<-VZ4_)271cHkQH2K-bH Date: Tue, 18 Sep 2018 19:28:10 -0400 Subject: [PATCH 12/24] Delete php-db library due to confusion with db_helper class and required rewrite to use it. --- inc/vendor/godsgood33/php-db/.gitattributes | 17 - inc/vendor/godsgood33/php-db/.gitignore | 4 - inc/vendor/godsgood33/php-db/.scrutinizer.yml | 26 - inc/vendor/godsgood33/php-db/LICENSE | 201 -- inc/vendor/godsgood33/php-db/README.md | Bin 7252 -> 0 bytes inc/vendor/godsgood33/php-db/composer.json | 37 - inc/vendor/godsgood33/php-db/composer.lock | 1549 -------------- .../php-db/examples/create_table_json.json | 136 -- inc/vendor/godsgood33/php-db/phpunit.xml | 16 - inc/vendor/godsgood33/php-db/src/DBConfig.php | 50 - inc/vendor/godsgood33/php-db/src/Database.php | 1896 ----------------- .../godsgood33/php-db/tests/DatabaseTest.php | 794 ------- .../godsgood33/php-db/tests/TestClass.php | 24 - .../godsgood33/php-db/tests/TestClass2.php | 5 - .../godsgood33/php-db/tests/bootstrap.php | 3 - .../tcpdf/2b18ac9052cd78929dd2fe01b9bf65b9 | Bin 16999733 -> 0 bytes 16 files changed, 4758 deletions(-) delete mode 100644 inc/vendor/godsgood33/php-db/.gitattributes delete mode 100644 inc/vendor/godsgood33/php-db/.gitignore delete mode 100644 inc/vendor/godsgood33/php-db/.scrutinizer.yml delete mode 100644 inc/vendor/godsgood33/php-db/LICENSE delete mode 100644 inc/vendor/godsgood33/php-db/README.md delete mode 100644 inc/vendor/godsgood33/php-db/composer.json delete mode 100644 inc/vendor/godsgood33/php-db/composer.lock delete mode 100644 inc/vendor/godsgood33/php-db/examples/create_table_json.json delete mode 100644 inc/vendor/godsgood33/php-db/phpunit.xml delete mode 100644 inc/vendor/godsgood33/php-db/src/DBConfig.php delete mode 100644 inc/vendor/godsgood33/php-db/src/Database.php delete mode 100644 inc/vendor/godsgood33/php-db/tests/DatabaseTest.php delete mode 100644 inc/vendor/godsgood33/php-db/tests/TestClass.php delete mode 100644 inc/vendor/godsgood33/php-db/tests/TestClass2.php delete mode 100644 inc/vendor/godsgood33/php-db/tests/bootstrap.php delete mode 100644 inc/vendor/tecnickcom/tcpdf/2b18ac9052cd78929dd2fe01b9bf65b9 diff --git a/inc/vendor/godsgood33/php-db/.gitattributes b/inc/vendor/godsgood33/php-db/.gitattributes deleted file mode 100644 index bdb0cab..0000000 --- a/inc/vendor/godsgood33/php-db/.gitattributes +++ /dev/null @@ -1,17 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/inc/vendor/godsgood33/php-db/.gitignore b/inc/vendor/godsgood33/php-db/.gitignore deleted file mode 100644 index b0fbc01..0000000 --- a/inc/vendor/godsgood33/php-db/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.settings/ -.buildpath -code-coverage/ -/vendor/ diff --git a/inc/vendor/godsgood33/php-db/.scrutinizer.yml b/inc/vendor/godsgood33/php-db/.scrutinizer.yml deleted file mode 100644 index 5653d85..0000000 --- a/inc/vendor/godsgood33/php-db/.scrutinizer.yml +++ /dev/null @@ -1,26 +0,0 @@ -checks: - php: true - -filter: - paths: ["src/*"] - -tools: - external_code_coverage: - timeout: 600 - php_sim: true - php_pdepend: true - php_analyzer: true - php_cs_fixer: true - -build: - nodes: - analysis: - tests: - override: - - php-scrutinizer-run - -build_failure_conditions: - - 'elements.rating(<= C).new.exists' # No new classes/methods with a rating of C or worse allowed - - 'issues.severity(>= MAJOR).new.exists' # New issues of major or higher severity - - 'project.metric_change("scrutinizer.test_coverage", < 0)' # Code Coverage decreased from previous inspection - - 'patches.label("Unused Use Statements").new.exists' # No new unused imports patches allowed \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/LICENSE b/inc/vendor/godsgood33/php-db/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/inc/vendor/godsgood33/php-db/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/inc/vendor/godsgood33/php-db/README.md b/inc/vendor/godsgood33/php-db/README.md deleted file mode 100644 index 80e791204cb6fc02f457c91e01c796f20ea9ab2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7252 zcmc(kYj0ac5Qg__koXUWv>(!nB&02O71RrYqC%jgst`fQiJiu+W2eVXLqPm>;C*&H zo;|)LBvp}hnseEm%R4jg>~8=0`&z2f59u3SReG52r+3pk>6i4LuKVdEbyF|3_2s8D zN-bR{X_$UZYw1w;qjapN&(fxT!?d4jeI02=U)LY0qvv(K?WPU=J4ihric5G-&U+=%vyStLu()Ur;bmOg9<#w!Ry^hD` zlqG@SgY02P_;L3-TiVKgy=@GMK&k)#MUwc{ie6utaX1r6@Z;Lix2}+`#{af-*VDbt zt<#yFM;b#Ms`N+~_jp-pOh>*nLgw-foBMi06_}>3M)vb;{vw%~ZDn+=QOMoU+i5>K z>359)srFc7csz}Tjl#2bW3>4Vj?8$OtwS!>g$dM$P*Ytx&IvR@v-mUA+Jz;1#Vc#HI?~xj4oJDa}dTPaBGe?7J z>T6zC@g$Ssj@608r+Nzei1xAc+|dPw%N|a$#auAlgG4ZWL3qQ!p z6U}tQ(2K{8BofUJyv0lY5?ib$e)evl$i2|B)dW^qZuhdJQ$2fCuB7YIx2NxSb%Erm z{(dc;)2zO$+95K(DQ0_VSN}F^WKDj3K9PGfZKo&c=H!`L;CEd%5hW}yH6G=dypnxg zp-z4T&Z`;8)d|-Ad@Nhr8Vf4S2!vNBwuIg{*# zXzb;fc*N}Oz4U$hSz}8qN{%!(?Mo(^=~|~VmhO($PLZ`;)lJN3YWLiKsQ7Iw=2%PR zpu_o*EQ7Bt^M?A~&rzV(tmg35c-ux%Z&ZaWRkJ|NIzpg ztH?4EhEmD*hHlB39uL@o_sp@i4;^N<8_Y*6bQt&Fmn^E(IKp~Juv0hJk6Q{NhMCtq zOo0tZ;0t*BeZ&sV0af^p@6pxFM)a|gg9)s+5xZbZD&APaP>Fant9uq#@So1L*V)z+ z$@KoWlUa{y_n6~xiT7+jc7}`Y6aF5^7kDx_+A$$du^zk29Hi&eOp5jRcPXj&;eY3K8pklYhiSI;#kNrJNL$Zhjd5Kuw!TPalTB7tRxOoyj+&spz>hp-mT?|v zksqGzNMMBRc)D3%nLVzFy^ryXahzulRoPN>e9aR%>y>Tez3Q4+dM@&IC`)XOv8KD| zCLr7rzp;A5QoOR&f3V?IvL$k*X(-2{2SST1F>tu& zKepVX=2+j0vg?i9pUtB{^pm-WKDmMg^YosNDqen?ZDHL2o4}gOeJ@8g{aq6ig1xV( zeQo+eZ>-wNSkMuyW7-NdS%Hyb zv2KqHG|shifPI~f1uOcwoaF;-K9J2Y1X;(LgtKjI*w3@v7ONKPNnxR%eM}>K5$lYF zu*`MD4%4(*hluYF@*WC*ruF&WpEFP65YKp6&ZHUpM>Z`(H;@A%XVelqP7h1$Lau2u zeh=GcBgiROFC)%w8+%y=lSSS$W3|^riM^R>`EPncj_;y<*WT1> zY=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "time": "2017-06-19T01:22:40+00:00" - }, - { - "name": "psr/log", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2016-10-10T12:19:37+00:00" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "^6.2.3", - "squizlabs/php_codesniffer": "^3.0.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2017-07-22T11:58:36+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "478465659fd987669df0bd8a9bf22a8710e5f1b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/478465659fd987669df0bd8a9bf22a8710e5f1b6", - "reference": "478465659fd987669df0bd8a9bf22a8710e5f1b6", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "time": "2018-05-29T17:25:09+00:00" - }, - { - "name": "phar-io/manifest", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^1.0.1", - "php": "^5.6 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" - }, - { - "name": "phar-io/version", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2017-09-11T18:02:19+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", - "shasum": "" - }, - "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2017-07-14T14:27:02+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.7.6", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" - }, - "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2018-04-18T13:57:24+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "6.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a", - "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "suggest": { - "ext-xdebug": "^2.6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2018-06-01T07:51:50+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "e20525b0c2945c7c317fff95660698cb3d2a53bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/e20525b0c2945c7c317fff95660698cb3d2a53bc", - "reference": "e20525b0c2945c7c317fff95660698cb3d2a53bc", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2018-05-28T12:13:49+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", - "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2018-02-01T13:07:23+00:00" - }, - { - "name": "phpunit/php-token-stream", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", - "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2018-02-01T13:16:43+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "7.2.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "00bc0b93f0ff4f557e9ea766557fde96da9a03dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/00bc0b93f0ff4f557e9ea766557fde96da9a03dd", - "reference": "00bc0b93f0ff4f557e9ea766557fde96da9a03dd", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.0", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2018-06-05T03:40:05+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" - }, - { - "name": "sebastian/comparator", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ed5fd2281113729f1ebcc64d101ad66028aeb3d5", - "reference": "ed5fd2281113729f1ebcc64d101ad66028aeb3d5", - "shasum": "" - }, - "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2018-04-18T13:33:00+00:00" - }, - { - "name": "sebastian/diff", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "e09160918c66281713f1c324c1f4c4c3037ba1e8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/e09160918c66281713f1c324c1f4c4c3037ba1e8", - "reference": "e09160918c66281713f1c324c1f4c4c3037ba1e8", - "shasum": "" - }, - "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0", - "symfony/process": "^2 || ^3.3 || ^4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "time": "2018-02-01T13:45:15+00:00" - }, - { - "name": "sebastian/environment", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2017-07-01T08:51:00+00:00" - }, - { - "name": "sebastian/exporter", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2017-04-03T13:19:02+00:00" - }, - { - "name": "sebastian/global-state", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2017-04-27T15:39:26+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "shasum": "" - }, - "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "shasum": "" - }, - "require": { - "php": ">=5.6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07T12:08:54+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2018-01-29T19:49:41+00:00" - } - ], - "aliases": [], - "minimum-stability": "beta", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [] -} diff --git a/inc/vendor/godsgood33/php-db/examples/create_table_json.json b/inc/vendor/godsgood33/php-db/examples/create_table_json.json deleted file mode 100644 index 08cc67a..0000000 --- a/inc/vendor/godsgood33/php-db/examples/create_table_json.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "tables": [ - { - "schema": "db", - "name": "settings", - "primary_key": [ - "id" - ], - "unique": [ - "meta_key" - ], - "fields": [ - { - "name": "id", - "dataType": "int(11)", - "type": 3, - "length": 11, - "values": [], - "ai": true, - "nn": true, - "default": "" - }, - { - "name": "meta_key", - "dataType": "varchar(100)", - "type": 253, - "length": 100, - "values": [], - "ai": false, - "nn": true, - "default": "" - }, - { - "name": "meta_value", - "dataType": "mediumtext", - "type": 250, - "length": null, - "values": [], - "ai": false, - "nn": false, - "default": null - } - ] - }, - { - "schema": "db", - "name": "test", - "primary_key": [ - "id", - "fk" - ], - "fields": [ - { - "name": "id", - "dataType": "int(11)", - "type": 3, - "length": 11, - "values": [], - "ai": true, - "nn": true, - "default": "" - }, - { - "name": "fk", - "dataType": "int(11)", - "type": 3, - "length": 11, - "values": [], - "ai": false, - "nn": true, - "default": "" - }, - { - "name": "default", - "dataType": "tinyint(1)", - "type": 1, - "length": 1, - "values": [], - "ai": false, - "nn": false, - "default": "0" - }, - { - "name": "enum", - "dataType": "enum", - "type": 247, - "length": null, - "values": [ - "1", - "2" - ], - "ai": false, - "nn": false, - "default": "1" - } - ], - "constraints": [ - { - "id": "con_1", - "local": "fk", - "schema": "db", - "table": "test", - "field": "id", - "update": null, - "delete": null - } - ], - "index": [ - { - "id": "default_idx", - "type": "index", - "ref": "default" - } - ] - }, - { - "schema": "db", - "name": "test2", - "primary_key": [ - "id" - ], - "fields": [ - { - "name": "id", - "dataType": "int(11)", - "type": 3, - "length": 11, - "values": [], - "ai": true, - "nn": true, - "default": "" - } - ] - } - ] -} \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/phpunit.xml b/inc/vendor/godsgood33/php-db/phpunit.xml deleted file mode 100644 index 4ff2356..0000000 --- a/inc/vendor/godsgood33/php-db/phpunit.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - tests/ - - - - - src/ - - - \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/src/DBConfig.php b/inc/vendor/godsgood33/php-db/src/DBConfig.php deleted file mode 100644 index 002d7bc..0000000 --- a/inc/vendor/godsgood33/php-db/src/DBConfig.php +++ /dev/null @@ -1,50 +0,0 @@ -_c = $dbh; - } else { - if (PHP_DB_SERVER == '{IP|hostname}' || PHP_DB_USER == '{username}' || PHP_DB_PWD == '{password}' || PHP_DB_SCHEMA == '{schema}') { - throw new Error("Need to update DBConfig.php", E_ERROR); - } - $this->_c = new mysqli(PHP_DB_SERVER, PHP_DB_USER, PHP_DB_PWD, PHP_DB_SCHEMA); - } - - if ($this->_c->connect_errno) { - throw new Error("Could not create database class due to error {$this->_c->error}", E_ERROR); - } - - $this->_logPath = $strLogPath; - touch($this->_logPath . "/db.log"); - - $this->_logger = new Logger('db', [ - new StreamHandler(realpath($this->_logPath . "/db.log"), $this->_logLevel) - ]); - - if (PHP_SAPI == 'cli') { - $stream = new StreamHandler("php://output", $this->_logLevel); - $stream->setFormatter(new LineFormatter("%datetime% %level_name% %message%" . PHP_EOL, "H:i:s.u")); - $this->_logger->pushHandler($stream); - } - - $this->_logger->info("Database connected"); - $this->_logger->debug("Connection details:", [ - 'Server' => PHP_DB_SERVER, - 'User' => PHP_DB_USER, - 'Schema' => PHP_DB_SCHEMA - ]); - - $this->setVar("time_zone", "+00:00"); - $this->setVar("sql_mode", ""); - } - - /** - * Function to make sure that the database is connected - * - * @return boolean - */ - public function isConnected() - { - $this->_logger->debug("Pinging server"); - return $this->_c->ping(); - } - - /** - * Setter function for _logger - * - * @param Logger $log - */ - public function setLogger(Logger $log) - { - $this->_logger->debug("Setting logger"); - $this->_logger = $log; - } - - /** - * Getter function for _logger - * - * @return string - */ - public function getLogLevel() - { - $this->_logger->debug("Getting log level ({$this->_logLevel})"); - return $this->_logLevel; - } - - /** - * Function to set the log level just in case there needs to be a change to the default log level - * - * @param string $strLevel - */ - public function setLogLevel($strLevel) - { - $this->_logger->debug("Setting log level to {$strLevel}"); - $this->_logLevel = $strLevel; - - $handles = []; - - foreach ($this->_logger->getHandlers() as $h) { - $h->/** @scrutinizer ignore-call */ - setLevel($strLevel); - $handles[] = $h; - } - - $this->_logger->setHandlers($handles); - } - - /** - * Getter function for _queryType - * - * @return int - */ - public function getQueryType() - { - return $this->_queryType; - } - - /** - * Setter function for _queryType - * - * @param int $qt - */ - public function setQueryType($qt) - { - $this->_queryType = $qt; - } - - /** - * Getter function for _sql - * - * @return string - */ - public function getSql() - { - return $this->_sql; - } - - /** - * Function to return the currently selected database schema - * - * @return string - */ - public function getSchema() - { - if ($res = $this->_c->query("SELECT DATABASE()")) { - $row = $res->fetch_row(); - - $this->_logger->debug("Getting schema {$row[0]}"); - return $row[0]; - } - return null; - } - - /** - * Function to set schema - * - * @param string $strSchema - */ - public function setSchema($strSchema) - { - $this->_logger->debug("Setting schema to {$strSchema}"); - if (! $this->_c->select_db($strSchema)) { - $this->_logger->emergency("Unknown schema {$strSchema}"); - return false; - } - return true; - } - - /** - * Method to set a MYSQL variable - * - * @param string $strName - * @param string $strVal - * - * @return boolean - */ - public function setVar($strName, $strVal) - { - if (! $strName || ! $strVal) { - $this->_logger->debug("name or value are blank", [ - 'name' => $strName, - 'value' => $strVal - ]); - return false; - } - - $this->_logger->debug("Setting {$strName} = '{$strVal}'"); - - if ($this->_c->real_query("SET $strName = {$this->_escape($strVal)}")) { - return true; - } else { - $this->_logger->error("Failed to set variable {$this->_c->error}"); - return false; - } - } - - /** - * Function to execute the statement - * - * @param mixed $return - * [optional] - * MYSQLI constant to control what is returned from the mysqli_result object - * @param string $class - * [optional] - * Class to use when returning object - * @param string $strSql - * [optional] - * Optional SQL query - * - * @throws \Exception - * @throws \InvalidArgumentException - * - * @return mixed - */ - public function execute($return = MYSQLI_ASSOC, $class = null, $strSql = null) - { - if (! is_null($strSql)) { - $this->_sql = $strSql; - } - - $query = 'SELECT'; - switch ($this->_queryType) { - case self::SELECT_COUNT: - $query = 'SELECT COUNT'; - break; - case self::INSERT: - case self::EXTENDED_INSERT: - $query = 'INSERT'; - break; - case self::UPDATE: - case self::EXTENDED_UPDATE: - $query = 'UPDATE'; - break; - case self::REPLACE: - case self::EXTENDED_REPLACE: - $query = 'REPLACE'; - break; - case self::DROP: - $query = 'DROP'; - break; - case self::DELETE: - $query = 'DELETE'; - break; - case self::CREATE_TABLE: - $query = 'CREATE TABLE'; - break; - case self::TRUNCATE: - $query = 'TRUNCATE'; - break; - } - - if (is_a($this->_c, 'mysqli')) { - if (! $this->_c->ping()) { - require_once 'DBConfig.php'; - $this->_c = null; - $this->_c = new mysqli(PHP_DB_SERVER, PHP_DB_USER, PHP_DB_PWD, PHP_DB_SCHEMA); - } - } else { - throw new \Error('Database was not connected', E_ERROR); - } - - $this->_logger->info("Executing {$query} query"); - $this->_logger->debug($this->_sql); - - try { - if (in_array($this->_queryType, [ - self::SELECT, - self::SELECT_COUNT - ])) { - $this->_result = $this->_c->query($this->_sql); - if ($this->_c->error) { - $this->_logger->error("There is an error {$this->_c->error}"); - $this->_logger->debug("Errored on query", [$this->_sql]); - throw new Exception("There was an error {$this->_c->error}", E_ERROR); - } - } else { - $this->_result = $this->_c->real_query($this->_sql); - if ($this->_c->errno) { - $this->_logger->error("There was an error {$this->_c->error}"); - $this->_logger->debug("Errored on query", [$this->_sql]); - throw new Exception("There was an error {$this->_c->error}", E_ERROR); - } - } - - if ($return == MYSQLI_OBJECT && ! is_null($class) && class_exists(/** @scrutinizer ignore-type */$class)) { - $this->_logger->debug("Checking results for query", [ - 'class' => get_class($class) - ]); - $this->_result = $this->checkResults($return, $class); - } elseif ($return == MYSQLI_OBJECT && is_null($class)) { - $this->_logger->debug("Checking results for query", [ - 'class' => 'stdClass' - ]); - $this->_result = $this->checkResults($return, 'stdClass'); - } else { - $this->_logger->debug("Checking results for query and returning associative array"); - $this->_result = $this->checkResults(MYSQLI_ASSOC); - } - } catch (Exception $e) {} - - return $this->_result; - } - - /** - * Function to check the results and return what is expected - * - * @param mixed $returnType - * [optional] - * Optional return mysqli_result return type - * @param mixed $class - * - * @return mixed - */ - public function checkResults($returnType = MYSQLI_ASSOC, $class = null) - { - $res = null; - - switch ($this->_queryType) { - case self::SELECT_COUNT: - if (! is_a($this->_result, 'mysqli_result')) { - $this->_logger->error("Error with return on query"); - return; - } - - if ($this->_result->num_rows == 1) { - $row = $this->_result->fetch_assoc(); - if (isset($row['count'])) { - $this->_logger->debug("Returning SELECT_COUNT query", [ - 'count' => $row['count'] - ]); - $res = $row['count']; - } - } elseif ($this->_result->num_rows > 1) { - $this->_logger->debug("Returning SELECT_COUNT query", [ - 'count' => $this->_result->num_rows - ]); - $res = $this->_result->num_rows; - } - - mysqli_free_result($this->_result); - - return $res; - case self::SELECT: - if (! is_a($this->_result, 'mysqli_result')) { - $this->_logger->error("Error with return on query"); - return; - } - - if ($returnType == MYSQLI_OBJECT && ! is_null($class) && class_exists($class)) { - if ($this->_result->num_rows == 1) { - $this->_logger->debug("Returning object from SELECT query", [ - 'type' => get_class($class) - ]); - $res = $this->_result->fetch_object($class); - } elseif ($this->_result->num_rows > 1) { - $this->_logger->debug("Returning object array from SELECT query", [ - 'type' => get_class($class) - ]); - while ($row = $this->_result->fetch_object($class)) { - $res[] = $row; - } - } - } else { - if ($this->_result->num_rows == 1) { - $this->_logger->debug("Fetching results"); - $res = $this->_result->fetch_array($returnType); - } elseif ($this->_result->num_rows > 1) { - $this->_logger->debug("Fetching results array"); - $res = $this->fetchAll($returnType); - } - } - - mysqli_free_result($this->_result); - - return $res; - case self::INSERT: - if ($this->_c->error) { - $this->_logger->error("Database Error {$this->_c->error}"); - return 0; - } - - if ($this->_c->insert_id) { - $this->_logger->debug("Insert successful returning insert_id", [ - 'id' => $this->_c->insert_id - ]); - return $this->_c->insert_id; - } elseif ($this->_c->affected_rows) { - $this->_logger->debug("Insert successful return affected row count", [ - 'count' => $this->_c->affected_rows - ]); - return $this->_c->affected_rows; - } - - $this->_logger->debug("Insert successful, but no ID so returning 1 for success"); - - return 1; - // intentional fall through - case self::EXTENDED_INSERT: - // intentional fall through - case self::EXTENDED_REPLACE: - // intentional fall through - case self::EXTENDED_UPDATE: - // intentional fall through - case self::REPLACE: - // intentional fall through - case self::UPDATE: - // intentional fall through - case self::DELETE: - // intentional fall through - case self::ALTER_TABLE: - if ($this->_c->error) { - $this->_logger->error("Database Error {$this->_c->error}"); - return false; - } elseif ($this->_c->affected_rows) { - $this->_logger->debug("Returning affected row count for {$this->_queryType}", [ - 'count' => $this->_c->affected_rows - ]); - return $this->_c->affected_rows; - } else { - return true; - } - break; - case self::CREATE_TABLE: - // intentional fall through - case self::DROP: - // intentional fall through - case self::TRUNCATE: - $this->_logger->debug("Returning from {$this->_queryType}"); - return true; - } - } - - /** - * Function to pass through calling the query function (used for backwards compatibility and for more complex queries that aren't currently supported) - * Nothing is escaped - * - * @param string $strSql - * [optional] - * Optional query to pass in and execute - * - * @return \mysqli_result|boolean - */ - public function query($strSql = null) - { - if (is_null($strSql)) { - return $this->_c->query($this->_sql); - } else { - return $this->_c->query($strSql); - } - } - - /** - * A function to build a select query - * - * @param string $strTableName - * The table to query - * @param array|string $fields - * [optional] - * Optional array of fields to return (defaults to '*') - * @param array $arrWhere - * [optional] - * Optional 2-dimensional array to build where clause from - * @param array $arrFlags - * [optional] - * Optional 2-dimensional array to allow other flags - * - * @see Database::where() - * @see Database::flags() - * - * @throws \InvalidArgumentException - * - * @return mixed - */ - public function select($strTableName, $fields = null, $arrWhere = [], $arrFlags = []) - { - $this->_sql = null; - $this->_queryType = self::SELECT; - - if (! is_null($strTableName)) { - $this->_logger->debug("Starting SELECT query of {$strTableName}", [ - 'fields' => $this->fields($fields) - ]); - $this->_sql = "SELECT " . $this->fields($fields) . " FROM $strTableName"; - } else { - $this->_logger->emergency("Table name is invalid or wrong type"); - throw new Error("Table name is invalid"); - } - - if (isset($arrFlags['joins']) && is_array($arrFlags['joins']) && count($arrFlags['joins'])) { - $this->_logger->debug("Adding joins", [ - 'joins' => implode(' ', $arrFlags['joins']) - ]); - $this->_sql .= " " . implode(" ", $arrFlags['joins']); - } else { - $this->_logger->debug("No joins"); - } - - if (! is_null($arrWhere) && is_array($arrWhere) && count($arrWhere)) { - $where_str = " WHERE"; - $this->_logger->debug("Parsing where clause and adding to query"); - foreach ($arrWhere as $x => $w) { - $where_str .= $this->parseClause($w, $x); - } - if (strlen($where_str) > strlen(" WHERE")) { - $this->_sql .= $where_str; - } - } - - if (is_array($arrFlags) && count($arrFlags)) { - $this->_logger->debug("Parsing flags and adding to query", $arrFlags); - $this->_sql .= $this->flags($arrFlags); - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to build a query to check the number of rows in a table - * - * @param string $strTableName - * The table to query - * @param array $arrWhere - * [optional] - * Optional 2-dimensional array to build where clause - * @param array $arrFlags - * [optional] - * Optional 2-dimensional array to add flags - * - * @see Database::where() - * @see Database::flags() - * - * @return string|NULL - */ - public function selectCount($strTableName, $arrWhere = [], $arrFlags = []) - { - $this->_sql = null; - $this->_queryType = self::SELECT_COUNT; - - if (! is_null($strTableName)) { - $this->_sql = "SELECT COUNT(1) AS 'count' FROM $strTableName"; - } else { - $this->_logger->emergency("Table name is invalid or wrong type"); - throw new Error("Table name is invalid"); - } - - if (isset($arrFlags['joins']) && is_array($arrFlags['joins'])) { - $this->_sql .= " " . implode(" ", $arrFlags['joins']); - } - - if (! is_null($arrWhere) && is_array($arrWhere) && count($arrWhere)) { - $where_str = " WHERE"; - foreach ($arrWhere as $x => $w) { - $where_str .= $this->parseClause($w, $x); - } - if (strlen($where_str) > strlen(" WHERE")) { - $this->_sql .= $where_str; - } - } - - if (is_array($arrFlags) && count($arrFlags)) { - $this->_sql .= $this->flags($arrFlags); - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to build an insert query statement - * - * @param string $strTableName - * @param array|string $arrParams - * @param boolean $blnToIgnore - * - * @return string|NULL - */ - public function insert($strTableName, $arrParams = null, $blnToIgnore = false) - { - $this->_sql = null; - $this->_queryType = self::INSERT; - - if (! is_null($strTableName)) { - $this->_sql = "INSERT" . ($blnToIgnore ? " IGNORE" : "") . " INTO $strTableName" . (is_array($arrParams) && count($arrParams) ? " (`" . implode("`,`", array_keys($arrParams)) . "`)" : null); - } else { - throw new Error("Table name is invalid"); - } - - if (is_array($arrParams) && count($arrParams)) { - $this->_sql .= " VALUES (" . implode(",", array_map([ - $this, - '_escape' - ], array_values($arrParams))) . ")"; - } elseif (is_string($arrParams) && stripos($arrParams, 'SELECT') !== false) { - $this->_sql .= " {$arrParams}"; - } else { - throw new Error("Invalid type passed to insert " . gettype($arrParams)); - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to create an extended insert query statement - * - * @param string $strTableName - * The table name that the data is going to be inserted on - * @param array $arrFields - * An array of field names that each value represents - * @param array|string $params - * An array of array of values or a string with a SELECT statement to populate the insert with - * @param boolean $blnToIgnore - * [optional] - * Boolean to decide if we need to use the INSERT IGNORE INTO syntax - * - * @return NULL|string Returns the SQL if self::$autorun is set to false, else it returns the output from running. - */ - public function extendedInsert($strTableName, $arrFields, $params, $blnToIgnore = false) - { - $this->_sql = null; - $this->_queryType = self::EXTENDED_INSERT; - - if (! is_null($strTableName) && is_string($strTableName)) { - $this->_sql = "INSERT " . ($blnToIgnore ? "IGNORE " : "") . "INTO $strTableName " . "(`" . implode("`,`", $arrFields) . "`)"; - } else { - throw new Error("Table name is invalid"); - } - - if (is_array($params) && count($params)) { - $this->_sql .= " VALUES "; - if (isset($params[0]) && is_array($params[0])) { - foreach ($params as $p) { - if (count($p) != count($arrFields)) { - $this->_logger->emergency("Inconsistent number of fields to values in extended_insert", [ - $p - ]); - throw new Error("Inconsistent number of fields in fields and values in extended_insert " . print_r($p, true)); - } - $this->sql .= "(" . implode(",", array_map([$this, '_escape'], array_values($p))) . ")"; - - if ($p != end($params)) { - $this->_sql .= ","; - } - } - } else { - $this->sql .= "(" . implode("),(", array_map([$this, '_escape'], array_values($params))) . ")"; - } - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Build a statement to update a table - * - * @param string $strTableName - * The table name to update - * @param array $arrParams - * Name/value pairs of the field name and value - * @param array $arrWhere - * [optional] - * Two-dimensional array to create where clause - * @param array $arrFlags - * [optional] - * Two-dimensional array to create other flag options (joins, order, and group) - * - * @see Database::where() - * @see Database::flags() - * - * @return NULL|string - */ - public function update($strTableName, $arrParams, $arrWhere = [], $arrFlags = []) - { - $this->_sql = "UPDATE "; - $this->_queryType = self::UPDATE; - - if (! is_null($strTableName) && is_string($strTableName)) { - $this->_sql .= $strTableName; - - if (isset($arrFlags['joins']) && is_array($arrFlags['joins'])) { - $this->_sql .= " " . implode(" ", $arrFlags['joins']); - unset($arrFlags['joins']); - } - - $this->_sql .= " SET "; - } else { - throw new Error("Table name is invalid"); - } - - if (is_array($arrParams) && count($arrParams)) { - foreach ($arrParams as $f => $p) { - if ((strpos($f, "`") === false) && (strpos($f, ".") === false) && (strpos($f, "*") === false) && (stripos($f, " as ") === false)) { - $f = "`{$f}`"; - } - - if (! is_null($p)) { - $this->_sql .= "$f={$this->_escape($p)},"; - } else { - $this->_sql .= "$f=NULL,"; - } - } - } else { - throw new Error("No fields to update"); - } - - $this->_sql = substr($this->_sql, 0, - 1); - - if (! is_null($arrWhere) && is_array($arrWhere) && count($arrWhere)) { - $where_str = " WHERE"; - foreach ($arrWhere as $x => $w) { - $where_str .= $this->parseClause($w, $x); - } - if (strlen($where_str) > strlen(" WHERE")) { - $this->_sql .= $where_str; - } - } - - if (! is_null($arrFlags) && is_array($arrFlags) && count($arrFlags)) { - $this->_sql .= $this->flags($arrFlags); - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to offer an extended updated functionality by using two different tables. - * - * @param string $strTableToUpdate - * The table that you want to update (alias 'tbu' is automatically added) - * @param string $strOriginalTable - * The table with the data you want to overwrite to_be_updated table (alias 'o' is automatically added) - * @param string $strLinkField - * The common index value between them that will join the fields - * @param array|string $arrParams - * If string only a single field is updated (tbu.$params = o.$params) - * If array each element in the array is a field to be updated (tbu.$param = o.$param) - * - * @return mixed - */ - public function extendedUpdate($strTableToUpdate, $strOriginalTable, $strLinkField, $arrParams) - { - $this->_sql = "UPDATE "; - $this->_queryType = self::EXTENDED_UPDATE; - - if (! is_null($strTableToUpdate) && ! is_null($strOriginalTable) && ! is_null($strLinkField)) { - $this->_sql .= "$strTableToUpdate tbu INNER JOIN $strOriginalTable o USING ($strLinkField) SET "; - } else { - throw new Error("Missing necessary fields"); - } - - if (is_array($arrParams) && count($arrParams)) { - foreach ($arrParams as $param) { - if ($param != $strLinkField) { - $this->_sql .= "tbu.`$param` = o.`$param`,"; - } - } - $this->_sql = substr($this->_sql, 0, - 1); - } elseif (is_string($arrParams)) { - $this->_sql .= "tbu.`$arrParams` = o.`$arrParams`"; - } else { - throw new Exception("Do not understand datatype " . gettype($arrParams), E_ERROR); - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to build a replace query - * - * @param string $strTableName - * The table to update - * @param array $arrParams - * Name/value pair to insert - * - * @return NULL|string - */ - public function replace($strTableName, $arrParams) - { - $this->_sql = null; - $this->_queryType = self::REPLACE; - - if (! is_null($strTableName) && is_string($strTableName)) { - $this->_sql = "REPLACE INTO $strTableName " . "(`" . implode("`,`", array_keys($arrParams)) . "`)"; - } else { - throw new Error("Table name is invalid"); - } - - $this->_sql .= " VALUES (" . implode(",", array_map([ - $this, - '_escape' - ], array_values($arrParams))) . ")"; - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to build an extended replace statement - * - * @param string $strTableName - * Table name to update - * @param array $arrFields - * Array of fields - * @param array $arrParams - * Two-dimensional array of values - * - * @return NULL|string - */ - public function extendedReplace($strTableName, $arrFields, $arrParams) - { - $this->_sql = null; - $this->_queryType = self::EXTENDED_REPLACE; - - if (! is_array($arrFields) || ! count($arrFields)) { - throw new Exception("Error with the field type"); - } - - if (! is_null($strTableName) && is_string($strTableName)) { - $this->_sql = "REPLACE INTO $strTableName " . "(`" . implode("`,`", $arrFields) . "`)"; - } else { - throw new Error("Table name is invalid"); - } - - if (is_array($arrParams) && count($arrParams)) { - $this->_sql .= " VALUES "; - foreach ($arrParams as $p) { - $this->_sql .= "(" . implode(",", array_map([ - $this, - '_escape' - ], array_values($p))) . ")"; - - if ($p != end($arrParams)) { - $this->_sql .= ","; - } - } - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to build a delete statement - * - * @param string $strTableName - * Table name to act on - * @param array $arrFields - * [optional] - * Optional list of fields to delete (used when including multiple tables) - * @param array $arrWhere - * [optional] - * Optional 2-dimensional array to build where clause from - * @param array $arrJoins - * [optional] - * Optional 2-dimensional array to add other flags - * - * @see Database::where() - * @see Database::flags() - * - * @return string|NULL - */ - public function delete($strTableName, $arrFields = [], $arrWhere = [], $arrJoins = []) - { - $this->_sql = "DELETE"; - $this->_queryType = self::DELETE; - - $this->_logger->debug("Deleting table data"); - - if (! is_null($arrFields) && is_array($arrFields) && count($arrFields)) { - $this->_sql .= " " . implode(",", $arrFields); - } - - if (! is_null($strTableName) && is_string($strTableName)) { - $this->_sql .= " FROM $strTableName"; - } else { - throw new Error("Table name is invalid"); - } - - if (! is_null($arrJoins) && is_array($arrJoins) && count($arrJoins)) { - $this->_sql .= " " . implode(" ", $arrJoins); - } - - if (! is_null($arrWhere) && is_array($arrWhere) && count($arrWhere)) { - $where_str = " WHERE"; - foreach ($arrWhere as $x => $w) { - $where_str .= $this->parseClause($w, $x); - } - if (strlen($where_str) > strlen(" WHERE")) { - $this->_sql .= $where_str; - } - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to build a drop table statement (automatically executes) - * - * @param string $strTableName - * Table to drop - * @param string $strType - * [optional] - * Type of item to drop ('table', 'view') (defaulted to 'table') - * @param boolean $blnIsTemp - * [optional] - * Optional boolean if this is a temporary table - * - * @return string|NULL - */ - public function drop($strTableName, $strType = 'table', $blnIsTemp = false) - { - $this->_sql = null; - $this->_queryType = self::DROP; - - switch ($strType) { - case 'table': - $strType = 'TABLE'; - break; - case 'view': - $strType = 'VIEW'; - break; - default: - throw new Error("Invalid type " . gettype($strType), E_ERROR); - } - - if (! is_null($strTableName) && is_string($strTableName)) { - $this->_sql = "DROP" . ($blnIsTemp ? " TEMPORARY" : "") . " $strType IF EXISTS `{$strTableName}`"; - } else { - throw new Error("Table name is invalid"); - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to build a truncate table statement (automatically executes) - * - * @param string $strTableName - * Table to truncate - * - * @throws \Error - * - * @return string|NULL - */ - public function truncate($strTableName) - { - $this->_sql = null; - $this->_queryType = self::TRUNCATE; - - if (! is_null($strTableName) && is_string($strTableName)) { - $this->_sql = "TRUNCATE TABLE $strTableName"; - } else { - throw new Error("Table name is invalid"); - } - - if (self::$autorun) { - return $this->execute(MYSQLI_BOTH); - } - - return $this->_sql; - } - - /** - * Function to build a create temporary table statement - * - * @param string $strTableName - * Name to give the table when creating - * @param boolean $blnIsTemp - * [optional] - * Optional boolean to make the table a temporary table - * @param mixed $strSelect - * [optional] - * Optional parameter if null uses last built statement - * If string, will be made the SQL statement executed to create the table - * If array, 2-dimensional array with "field", "datatype" values to build table fields - * - * @return NULL|string - */ - public function createTable($strTableName, $blnIsTemp = false, $strSelect = null) - { - $this->_queryType = self::CREATE_TABLE; - - if (is_null($strSelect) && ! is_null($this->_sql) && substr($this->_sql, 0, 6) == 'SELECT') { - $this->_sql = "CREATE" . ($blnIsTemp ? " TEMPORARY" : "") . " TABLE IF NOT EXISTS $strTableName AS ($this->_sql)"; - } elseif (! is_null($strTableName) && is_string($strTableName) && is_string($strSelect)) { - $this->_sql = "CREATE" . ($blnIsTemp ? " TEMPORARY" : "") . " TABLE IF NOT EXISTS $strTableName AS ($strSelect)"; - } elseif (! is_null($strTableName) && is_string($strTableName) && is_array($strSelect)) { - $this->_sql = "CREATE" . ($blnIsTemp ? " TEMPORARY" : "") . " TABLE IF NOT EXISTS $strTableName ("; - - foreach ($strSelect as $field) { - $default = null; - if (isset($field['default'])) { - $default = (is_null($field['default']) ? "" : " DEFAULT '{$field['default']}'"); - } - $this->_sql .= "`{$field['field']}` {$field['datatype']}" . $default . (isset($field['option']) ? " {$field['option']}" : '') . ","; - } - $this->_sql = substr($this->_sql, 0, - 1) . ")"; - } - - if (self::$autorun) { - return $this->execute(); - } - - return $this->_sql; - } - - /** - * Function to create a table using a stdClass object derived from JSON - * - * @param \stdClass $json - * - * @example /examples/create_table_json.json - * - */ - public function createTableJson($json) - { - $this->_queryType = self::CREATE_TABLE; - $this->_c->select_db($json->schema); - - $this->_sql = "CREATE TABLE IF NOT EXISTS `{$json->name}` ("; - foreach ($json->fields as $field) { - $this->_sql .= "`{$field->name}` {$field->dataType}"; - - if ($field->dataType == 'enum') { - $this->_sql .= "('" . implode("','", $field->values) . "')"; - } - - if ($field->ai) { - $this->_sql .= " AUTO_INCREMENT"; - } - - if ($field->nn) { - $this->_sql .= " NOT NULL"; - } else { - if ($field->default === null) { - $this->_sql .= " DEFAULT NULL"; - } elseif (strlen($field->default)) { - $this->_sql .= " DEFAULT '{$field->default}'"; - } - } - - if ($field != end($json->fields)) { - $this->_sql .= ","; - } - } - - if (isset($json->index) && count($json->index)) { - foreach ($json->index as $ind) { - $this->_sql .= ", " . strtoupper($ind->type) . " `{$ind->id}` (`{$ind->ref}`)"; - } - } - - if (isset($json->constraints) && count($json->constraints)) { - foreach ($json->constraints as $con) { - $this->_sql .= ", CONSTRAINT `{$con->id}` " . "FOREIGN KEY (`{$con->local}`) " . "REFERENCES `{$con->schema}`.`{$con->table}` (`{$con->field}`) " . "ON DELETE " . (is_null($con->delete) ? "NO ACTION" : strtoupper($con->delete)) . " " . "ON UPDATE " . (is_null($con->update) ? "NO ACTION" : strtoupper($con->update)); - } - } - - if (isset($json->unique) && count($json->unique)) { - $this->_sql .= ", UNIQUE(`" . implode("`,`", $json->unique) . "`)"; - } - - if (isset($json->primary_key) && count($json->primary_key)) { - $this->_sql .= ", PRIMARY KEY(`" . implode("`,`", $json->primary_key) . "`))"; - } else { - if (substr($this->_sql, - 1) == ',') { - $this->_sql = substr($this->_sql, 0, - 1); - } - - $this->_sql .= ")"; - } - - $this->execute(MYSQLI_BOTH); - } - - /** - * Function to alter a existing table - * - * @param string $strTableName - * Table to alter - * @param int $intAction - * What action should be taken ('add-column', 'drop-column', 'modify-column') - * @param mixed $arrParams - * For add column this is a stdClass object that has the same elements as the example json - * - * @return mixed - */ - public function alterTable($strTableName, $intAction, $arrParams) - { - $this->_queryType = self::ALTER_TABLE; - $this->_sql = "ALTER TABLE $strTableName"; - if ($intAction == self::ADD_COLUMN) { - $nn = ($arrParams->nn ? " NOT NULL" : ""); - $default = null; - if ($arrParams->default === null) { - $default = " DEFAULT NULL"; - } elseif (strlen($arrParams->default)) { - $default = " DEFAULT {$this->_escape($arrParams->default)}"; - } - $this->_sql .= " ADD COLUMN `{$arrParams->name}` {$arrParams->dataType}" . $nn . $default; - } elseif ($intAction == self::DROP_COLUMN) { - $this->_sql .= " DROP COLUMN "; - foreach ($arrParams as $col) { - $this->_sql .= "`{$col->name}`"; - - if ($col != end($arrParams)) { - $this->_sql .= ","; - } - } - } elseif ($intAction == self::MODIFY_COLUMN) { - $this->_sql .= " MODIFY COLUMN"; - $nn = ($arrParams->nn ? " NOT NULL" : ""); - $default = null; - if ($arrParams->default === null) { - $default = " DEFAULT NULL"; - } elseif (strlen($arrParams->default)) { - $default = " DEFAULT {$this->_escape($arrParams->default)}"; - } - $this->_sql .= " `{$arrParams->name}` `{$arrParams->new_name}` {$arrParams->dataType}" . $nn . $default; - } - - if (self::$autorun) { - return $this->execute(); - } - - return $this->_sql; - } - - /** - * Check to see if a field in a table exists - * - * @param string $strTableName - * Table to check - * @param string $strFieldName - * Field name to find - * - * @return boolean Returns TRUE if field is found in that schema and table, otherwise FALSE - */ - public function fieldExists($strTableName, $strFieldName) - { - $fdata = $this->fieldData($strTableName); - - if (is_array($fdata) && count($fdata)) { - foreach ($fdata as $field) { - if ($field->name == $strFieldName) { - return true; - } - } - } - - return false; - } - - /** - * Function to get the column data (datatype, flags, defaults, etc) - * - * @param string $strTableName - * Table to query - * @param mixed $field - * [optional] - * Optional field to retrieve data (if null, returns data from all fields) - * - * @return array - */ - public function fieldData($strTableName, $field = null) - { - if (is_null($field)) { - $res = $this->_c->query("SELECT * FROM $strTableName LIMIT 1"); - } elseif (is_array($field)) { - $res = $this->_c->query("SELECT `" . implode("`,`", $field) . "` FROM $strTableName LIMIT 1"); - } elseif (is_string($field)) { - $res = $this->_c->query("SELECT $field FROM $strTableName LIMIT 1"); - } else { - return null; - } - - $fields = null; - if (is_a($res, 'mysqli_result')) { - $fields = $res->fetch_fields(); - foreach ($fields as $i => $f) { - $fields["{$f->name}"] = $f; - unset($fields[$i]); - } - } - - return $fields; - } - - /** - * Function to check that all field parameters are set correctly - * - * @param object $field_data - * @param object $check - * @param array $pks - * @param object $index - * - * @return array|string - */ - public function fieldCheck($field_data, $check, $pks, $index) - { - $default = null; - $ret = null; - - $nn = ($check->nn ? " NOT NULL" : null); - if ($check->default === null) { - $default = " DEFAULT NULL"; - } elseif (strlen($check->default)) { - $default = " DEFAULT '{$check->default}'"; - } - - if ($field_data->type != $check->type && $check->type != MYSQLI_TYPE_ENUM) { - $this->_logger->notice("Wrong datatype", [ - 'name' => $field_data->name, - 'datatype' => $check->dataType - ]); - $ret = " CHANGE COLUMN `{$field_data->name}` `{$check->name}` {$check->dataType}" . "{$nn}{$default}"; - } elseif (! is_null($check->length) && $field_data->length != $check->length) { - $this->_logger->notice("Incorrect size", [ - 'name' => $field_data->name, - 'current' => $field_data->length, - 'new_size' => $check->length - ]); - $ret = " CHANGE COLUMN `{$field_data->name}` `{$check->name}` {$check->dataType}" . "{$nn}{$default}"; - } elseif ($check->type == MYSQLI_TYPE_ENUM && ! ($field_data->flags & MYSQLI_ENUM_FLAG)) { - $this->_logger->notice("Setting ENUM type", [ - 'name' => $field_data->name, - 'values' => implode(",", $check->values) - ]); - $ret = " CHANGE COLUMN `{$field_data->name}` `{$check->name}` {$check->dataType}('" . implode("','", $check->values) . "')" . "{$nn}{$default}"; - } - - if (! is_null($index) && count($index)) { - foreach ($index as $ind) { - if ($check->name == $ind->ref && ! ($field_data->flags & MYSQLI_MULTIPLE_KEY_FLAG)) { - $this->_logger->debug("Missing index", [ - 'name' => $field_data->name - ]); - $ret .= ($ret ? "," : "") . " ADD INDEX `{$ind->id}` (`{$ind->ref}` ASC)"; - } - } - } - - if (in_array($check->name, $pks) && ! ($field_data->flags & MYSQLI_PRI_KEY_FLAG)) { - $this->_logger->debug("Setting PKs", [ - 'keys' => implode(',', $pks) - ]); - $ret .= ($ret ? "," : "") . " DROP PRIMARY KEY, ADD PRIMARY KEY(`" . implode("`,`", $pks) . "`)"; - } - - return $ret; - } - - /** - * Function to check for the existence of a table within a schema - * - * @param string $strSchema - * The schema to search in - * @param string $strTableName - * Table to search for - * - * @return integer|boolean Returns number of tables that match if table is found in that schema, otherwise FALSE - */ - public function tableExists($strSchema, $strTableName) - { - if (! $this->_c->select_db($strSchema)) { - fwrite("php://stdout", $this->_c->error . PHP_EOL); - } - $sql = "SHOW TABLES LIKE '{$strTableName}'"; - - if ($res = $this->_c->query($sql)) { - if (gettype($res) == 'object' && is_a($res, 'mysqli_result') && $res->num_rows) { - return $res->num_rows; - } - } else { - if ($this->_c->errno) { - fwrite("php://stdout", $this->_c->error . PHP_EOL); - } - } - - return false; - } - - /** - * Function to detect if string is a JSON object or not - * - * @param string $strVal - * - * @return boolean - */ - public function isJson($strVal) - { - json_decode($strVal); - return (json_last_error() == JSON_ERROR_NONE); - } - - /** - * Function to escape SQL characters to prevent SQL injection - * - * @param mixed $val - * Value to escape - * @param boolean $blnEscape - * Decide if we should escape or not - * - * @return string Escaped value - */ - public function _escape($val, $blnEscape = true) - { - if (is_null($val) || (is_string($val) && strtolower($val) == 'null')) { - return 'NULL'; - } elseif (is_numeric($val) || is_string($val)) { - if (stripos($val, "IF(") !== false) { - return $val; - } - elseif ($blnEscape) { - return "'{$this->_c->real_escape_string($val)}'"; - } - return $val; - } elseif (is_a($val, 'DateTime')) { - return "'{$val->format(MYSQL_DATETIME)}'"; - } elseif (is_bool($val)) { - return $val ? "'1'" : "'0'"; - } elseif (gettype($val) == 'object' && method_exists($val, '_escape')) { - $ret = call_user_func([ - $val, - '_escape' - ]); - if ($ret !== false) { - return $ret; - } else { - throw new Exception("Error in return from _escape method in " . get_class($val), E_ERROR); - } - } elseif (gettype($val) == 'object') { - $this->_logger->error("Unknown object to escape " . get_class($val) . " in SQL string {$this->_sql}"); - return; - } - - throw new Exception("Unknown datatype to escape in SQL string {$this->_sql} " . gettype($val), E_ERROR); - } - - /** - * Function to retrieve all results - * - * @param int $intResultType - * - * @return mixed - */ - public function fetchAll($intResultType = MYSQLI_ASSOC) - { - $res = []; - if (method_exists('mysqli_result', 'fetch_all')) { // Compatibility layer with PHP < 5.3 - $res = $this->_result->fetch_all($intResultType); - } else { - while ($tmp = $this->_result->fetch_array($intResultType)) { - $res[] = $tmp; - } - } - - return $res; - } - - /** - * Function to populate the fields for the SQL - * - * @param array|string $fields - * [optional] - * Optional array of fields to string together to create a field list - * - * @return string - */ - public function fields($fields = null) - { - $ret = null; - - if (is_array($fields) && count($fields) && isset($fields[0]) && is_string($fields[0])) { - foreach ($fields as $field) { - if ((strpos($field, '`') === false) && (strpos($field, '.') === false) && (strpos($field, '*') === false) && (strpos($field, 'JSON_') === false) && (stripos($field, ' as ') === false)) { - $ret .= "`$field`,"; - } else { - $ret .= "$field,"; - } - } - $ret = substr($ret, - 1) == ',' ? substr($ret, 0, - 1) : $ret; - } elseif (is_string($fields)) { - $ret = $fields; - } elseif (is_null($fields)) { - $ret = "*"; - } else { - throw new \InvalidArgumentException("Invalid field type"); - } - - return $ret; - } - - /** - * Function to parse the flags - * - * @param array $flags - * Two-dimensional array to added flags - * - * - * [ - *   'joins' => [ - *     "JOIN table2 t2 ON t2.id=t1.id" - *   ], - *   'group' => 'field', - *   'having' => 'field', - *   'order' => 'field', - *   'start' => 0, - *   'limit' => 0 - * ] - * - * - * @see Database::groups() - * @see Database::having() - * @see Database::order() - * - * @return string - */ - public function flags($arrFlags) - { - $ret = ''; - - if (isset($arrFlags['group'])) { - $ret .= $this->groups($arrFlags['group']); - } - - if (isset($arrFlags['having']) && is_array($arrFlags['having'])) { - $having = " HAVING"; - foreach ($arrFlags['having'] as $x => $h) { - $having .= $this->parseClause($h, $x); - } - if (strlen($having) > strlen(" HAVING")) { - $ret .= $having; - } - } - - if (isset($arrFlags['order'])) { - $ret .= $this->order($arrFlags['order']); - } - - if (isset($arrFlags['limit']) && (is_string($arrFlags['limit']) || is_numeric($arrFlags['limit']))) { - $ret .= " LIMIT "; - if (isset($arrFlags['start']) && (is_string($arrFlags['start']) || is_numeric($arrFlags['start']))) { - $ret .= "{$arrFlags['start']},"; - } - $ret .= "{$arrFlags['limit']}"; - } - - return $ret; - } - - /** - * Function to parse SQL GROUP BY statements - * - * @param mixed $groups - * - * @return string - */ - public function groups($groups) - { - $ret = ''; - if (is_array($groups) && count($groups)) { - $ret .= " GROUP BY"; - - foreach ($groups as $grp) { - $ret .= " $grp"; - - if ($grp != end($groups)) { - $ret .= ","; - } - } - } elseif (is_string($groups)) { - $ret .= " GROUP BY {$groups}"; - } else { - throw (new Exception("Error in datatype for groups " . gettype($groups), E_ERROR)); - } - - return $ret; - } - - /** - * Function to parse SQL ORDER BY statements - * - * @param mixed $order - * - * @return string - */ - public function order($order) - { - $ret = ''; - if (is_array($order)) { - $ret .= " ORDER BY"; - - foreach ($order as $ord) { - $ret .= " {$ord['field']} {$ord['sort']}"; - - if ($ord != end($order)) { - $ret .= ","; - } - } - } elseif (is_string($order)) { - $ret .= " ORDER BY {$order}"; - } - - return $ret; - } - - /** - * Function to see if a constraint exists - * - * @param string $strConstraintId - * - * @return boolean - */ - public function isConstraint($strConstraintId) - { - $res = $this->_c->query("SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_NAME = '{$strConstraintId}'"); - - if ($res->num_rows) { - return true; - } - - return false; - } - - /** - * Function to parse where and having clauses - * - * @param array $arrClause - * @param int $intIndex - */ - public function parseClause($arrClause, $intIndex) - { - $ret = null; - - $this->_logger->debug("Parsing clause", $arrClause); - - if (! isset($arrClause['field']) && isset($arrClause['close-paren']) && $arrClause['close-paren']) { - $ret .= ")"; - return $ret; - } elseif ($intIndex > 0 && ! isset($arrClause['sql_op'])) { - $this->_logger->warning("Missing sql_op field to identify how current and previous WHERE clause statements should be linked ('AND', 'OR', 'XOR', etc), skipped", [ - 'clause' => implode(",", $arrClause) - ]); - return; - } - - $op = '='; - if (isset($arrClause['op'])) { - $op = $arrClause['op']; - } - - switch ($op) { - case self::BETWEEN: - if (! isset($arrClause['field']) || ! isset($arrClause['low']) || ! isset($arrClause['high'])) { - $this->_logger->warning("Missing field, low, or high for BETWEEN where clause, skipping"); - return; - } - break; - default: - if (! isset($arrClause['field']) || ! isset($arrClause['value'])) { - $this->_logger->warning("Missing field or value for WHERE clause, skipping", $arrClause); - return; - } - } - - if ($intIndex > 0) { - $ret .= " {$arrClause['sql_op']}"; - } - - if (isset($arrClause['open-paren']) && $arrClause['open-paren']) { - $ret .= " ("; - } - - if (isset($arrClause['backticks']) && ! $arrClause['backticks']) { - $field = $arrClause['field']; - } else { - $field = "`{$arrClause['field']}`"; - } - - if ($op == self::IN || $op == self::NOT_IN) { - if (is_string($arrClause['value'])) { - $ret .= " {$field} {$op} " . (strpos($arrClause['value'], '(') !== false ? $arrClause['value'] : "({$arrClause['value']})"); - } elseif (is_array($arrClause['value'])) { - $ret .= " {$field} {$op} (" . implode(",", array_map([ - $this, - '_escape' - ], $arrClause['value'])) . ")"; - } else { - $this->_logger->error("Invalid datatype for IN WHERE clause, only string and array allowed " . gettype($arrClause['value']), $arrClause); - throw new Exception("Invalid datatype for IN WHERE clause", E_ERROR); - } - } elseif ($op == self::BETWEEN) { - $ret .= " {$field} BETWEEN {$this->_escape($arrClause['low'])} AND {$this->_escape($arrClause['high'])}"; - } else { - if (isset($arrClause['escape']) && ! $arrClause['escape']) { - $value = $arrClause['value']; - } else { - $value = $this->_escape($arrClause['value']); - } - - if (isset($arrClause['case_insensitive']) && $arrClause['case_insensitive']) { - $ret .= " LOWER({$field}) {$op} LOWER({$this->_escape($arrClause['value'])})"; - } elseif (preg_match("/\(SELECT/", $arrClause['value'])) { - $ret .= " {$field} {$op} {$arrClause['value']}"; - } else { - $ret .= " {$field} {$op} {$value}"; - } - } - - if (isset($arrClause['close-paren']) && $arrClause['close-paren']) { - $ret .= ")"; - } - - return $ret; - } -} diff --git a/inc/vendor/godsgood33/php-db/tests/DatabaseTest.php b/inc/vendor/godsgood33/php-db/tests/DatabaseTest.php deleted file mode 100644 index 366efad..0000000 --- a/inc/vendor/godsgood33/php-db/tests/DatabaseTest.php +++ /dev/null @@ -1,794 +0,0 @@ -db = new Database(realpath(__DIR__)); - // Database::$autorun = true; - } - - public function testCanCreateDatabaseInstance() - { - $this->assertInstanceOf("Godsgood33\Php_Db\Database", $this->db); - } - - public function testGetSchema() - { - $schema = $this->db->getSchema(); - $this->assertEquals("db", $schema); - } - - public function testSetSchemaWithNonExistentSchema() - { - $ret = $this->db->setSchema("george"); - $this->assertFalse($ret); - } - - public function testDatabaseConnection() - { - $this->assertTrue($this->db->isConnected()); - } - - public function testPassInMysqliConnection() - { - $conn = new mysqli(PHP_DB_SERVER, PHP_DB_USER, PHP_DB_PWD, PHP_DB_SCHEMA); - if ($conn->connect_errno) { - fwrite(STDOUT, $conn->connect_error); - } - - $this->db = new Database(realpath(__DIR__), $conn); - - $this->assertInstanceOf("Godsgood33\Php_Db\Database", $this->db); - } - - public function testSetLogLevel() - { - $this->db->setLogLevel(Logger::DEBUG); - $this->assertEquals(Logger::DEBUG, $this->db->getLogLevel()); - } - - /** - * @expectedException TypeError - */ - public function testSelectWithInvalidTableName() - { - $this->db->select(new stdClass()); - } - - public function testSelectWithNoParameters() - { - // query table with NO parameters - $this->db->select("test"); - $this->assertEquals("SELECT * FROM test", $this->db->getSql()); - } - - public function testSelectWithNullFieldParameter() - { - // query table with null fields parameter - $this->db->select("test", null); - $this->assertEquals("SELECT * FROM test", $this->db->getSql()); - } - - public function testSelectWithOneArrayParameter() - { - // query table with one parameter - $this->db->select("test", [ - 'id' - ]); - $this->assertEquals("SELECT `id` FROM test", $this->db->getSql()); - } - - public function testSelectWithTwoArrayParameters() - { - // query table with 2 parameters - $this->db->select("test", [ - 'id', - 'name' - ]); - $this->assertEquals("SELECT `id`,`name` FROM test", $this->db->getSql()); - } - - public function testSelectWithOneStringParameter() - { - // query table with string parameter - $this->db->select("test", 'id'); - $this->assertEquals("SELECT id FROM test", $this->db->getSql()); - } - - /** - * @expectedException InvalidArgumentException - */ - public function testSelectWithStdClassParameter() - { - // query table with object parameter - $this->db->select("test", new stdClass()); - $this->assertEquals("SELECT FROM test", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testSelectWithNullWhereParameter() - { - // query table with null where parameter - $this->db->select("test", 'id', null); - $this->assertEquals("SELECT id FROM test", $this->db->getSql()); - } - - public function testSelectWithEmptyArrayWhereParameter() - { - // query table with empty array where paramter - $this->db->select("test", 'id', []); - $this->assertEquals("SELECT id FROM test", $this->db->getSql()); - } - - public function testSelectWithImcompleteWhereArrayParameter() - { - // query with incomplete WHERE clause - $this->db->select("test", 'id', [ - [ - 'field' => 'id' - ] - ]); - $this->assertEquals("SELECT id FROM test", $this->db->getSql()); - } - - public function testGroupWithString() - { - // $this->markTestIncomplete(); - - // query with single group by string - $sql = $this->db->groups('name'); - $this->assertEquals(" GROUP BY name", $sql); - } - - public function testGroupWithArray() - { - // query with array group by string - $sql = $this->db->groups([ - 'name', - 'id' - ]); - $this->assertEquals(" GROUP BY name, id", $sql); - } - - /** - * @expectedException Exception - */ - public function testGroupWrongUnknownDataType() - { - // $this->markTestIncomplete(); - - // query group with invalid datatype (stdClass) should throw Exception - $this->db->groups(new stdClass()); - } - - public function testOrderWithString() - { - // $this->markTestIncomplete(); - - // query with single name order parameter - $sql = $this->db->order("name"); - $this->assertEquals(" ORDER BY name", $sql); - } - - public function testOrderWithArray() - { - // query with order array - $sql = $this->db->order([ - [ - 'field' => 'id', - 'sort' => 'ASC' - ], - [ - 'field' => 'name', - 'sort' => 'DESC' - ] - ]); - $this->assertEquals(" ORDER BY id ASC, name DESC", $sql); - } - - public function testOrderWithObject() - { - // query with invalid datatype (stdClass) will return empty string - $sql = $this->db->order(new stdClass()); - $this->assertEquals("", $sql); - } - - public function testFlags() - { - // $this->markTestIncomplete(); - - // query flags with all parameters - $sql = $this->db->flags([ - 'group' => 'name', - 'order' => 'name', - 'having' => [ - [ - 'field' => 'id', - 'op' => '=', - 'value' => 1 - ] - ], - 'limit' => '10', - 'start' => '5' - ]); - $this->assertEquals(" GROUP BY name HAVING `id` = '1' ORDER BY name LIMIT 5,10", $sql); - } - - public function testCreateTemporaryTable() - { - $this->db->select("test"); - $this->db->createTable('test2', true); - $this->assertEquals("CREATE TEMPORARY TABLE IF NOT EXISTS test2 AS (SELECT * FROM test)", $this->db->getSql()); - } - - public function testCreateTable() - { - // Database::$autorun = false; - $this->db->createTable('test', false, $this->db->select("test")); - $this->assertEquals("CREATE TABLE IF NOT EXISTS test AS (SELECT * FROM test)", $this->db->getSql()); - // Database::$autorun = true; - } - - public function testCreateTableWithArrayParameter() - { - $this->db->createTable("test", true, [ - [ - 'field' => 'id', - 'datatype' => 'int(11)', - 'option' => 'PRIMARY KEY' - ], - [ - 'field' => 'name', - 'datatype' => 'varchar(100)', - 'default' => null - ], - [ - 'field' => 'email', - 'datatype' => 'varchar(100)', - 'default' => '' - ] - ]); - $this->assertEquals("CREATE TEMPORARY TABLE IF NOT EXISTS test (`id` int(11) PRIMARY KEY,`name` varchar(100),`email` varchar(100) DEFAULT '')", $this->db->getSql()); - } - - public function testCreateTableJson() - { - $json = json_decode(file_get_contents(dirname(dirname(__FILE__)) . "/examples/create_table_json.json")); - - $this->db->createTableJson($json->tables[0]); - $this->assertEquals("CREATE TABLE IF NOT EXISTS `settings` (`id` int(11) AUTO_INCREMENT NOT NULL,`meta_key` varchar(100) NOT NULL,`meta_value` mediumtext DEFAULT NULL, UNIQUE(`meta_key`), PRIMARY KEY(`id`))", $this->db->getSql()); - } - - public function testCreateTableJson2() - { - $json = json_decode(file_get_contents(dirname(dirname(__FILE__)) . "/examples/create_table_json.json")); - - $this->db->createTableJson($json->tables[1]); - $this->assertEquals("CREATE TABLE IF NOT EXISTS `test` (`id` int(11) AUTO_INCREMENT NOT NULL,`fk` int(11) NOT NULL,`default` tinyint(1) DEFAULT '0',`enum` enum('1','2') DEFAULT '1', INDEX `default_idx` (`default`), CONSTRAINT `con_1` FOREIGN KEY (`fk`) REFERENCES `db`.`test` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, PRIMARY KEY(`id`,`fk`))", $this->db->getSql()); - } - - public function testCreateTableJson3() - { - $json = json_decode(file_get_contents(dirname(dirname(__FILE__)) . "/examples/create_table_json.json")); - - $this->db->createTableJson($json->tables[2]); - $this->assertEquals("CREATE TABLE IF NOT EXISTS `test2` (`id` int(11) AUTO_INCREMENT NOT NULL, PRIMARY KEY(`id`))", $this->db->getSql()); - } - - public function testTableExists() - { - $tbl_count = $this->db->tableExists('db', 'settings'); - $this->assertEquals(1, $tbl_count); - } - - public function testMultipleTableExists() - { - $tbl_count = $this->db->tableExists('db', 'test%'); - $this->assertEquals(2, $tbl_count); - } - - public function testTableNotPresent() - { - $tbl_not_present = $this->db->tableExists('db', "users"); - $this->assertFalse($tbl_not_present); - } - - public function testAlterTableAddColumn() - { - $new = new stdClass(); - $new->name = 'newCol'; - $new->dataType = 'tinyint(1)'; - $new->nn = false; - $new->default = null; - - $this->db->alterTable('test', Database::ADD_COLUMN, $new); - $this->assertEquals("ALTER TABLE test ADD COLUMN `newCol` tinyint(1) DEFAULT NULL", $this->db->getSql()); - } - - public function testAlterTableModifyColumn() - { - $mod = new stdClass(); - $mod->name = 'default'; - $mod->new_name = 'default2'; - $mod->dataType = 'int(1)'; - $mod->nn = true; - $mod->default = 1; - - $this->db->alterTable("test", Database::MODIFY_COLUMN, $mod); - $this->assertEquals("ALTER TABLE test MODIFY COLUMN `default` `default2` int(1) NOT NULL DEFAULT '1'", $this->db->getSql()); - } - - public function testAlterTableDropColumn() - { - $drop = new stdClass(); - $drop->name = 'newCol'; - - $this->db->alterTable("test", Database::DROP_COLUMN, [ - $drop - ]); - $this->assertEquals("ALTER TABLE test DROP COLUMN `newCol`", $this->db->getSql()); - } - - public function testSelectCountWithNoParameters() - { - $this->db->selectCount("test"); - $this->assertEquals("SELECT COUNT(1) AS 'count' FROM test", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testSelectCountWithStdClassParameterForTable() - { - $this->db->selectCount(new stdClass()); - } - - public function testSelectCountWithArrayWhereParameter() - { - $this->db->selectCount("test", [ - [ - 'field' => 'name', - 'value' => 'Ed' - ] - ], [ - 'joins' => [ - "JOIN settings s ON s.id = test.id" - ] - ]); - $this->assertEquals("SELECT COUNT(1) AS 'count' FROM test JOIN settings s ON s.id = test.id WHERE `name` = 'Ed'", $this->db->getSql()); - } - - public function testInsertWithOneElementArrayParameter() - { - // query with one parameter - $this->db->insert("test", [ - 'id' => 1 - ]); - $this->assertEquals("INSERT INTO test (`id`) VALUES ('1')", $this->db->getSql()); - } - - public function testInsertWithTwoElementArrayParameter() - { - // query with 2 parameters - $this->db->insert("test", [ - 'id' => 1, - 'name' => 'Ed' - ], true); - $this->assertEquals("INSERT IGNORE INTO test (`id`,`name`) VALUES ('1','Ed')", $this->db->getSql()); - } - - public function testInsertWithSelectStatement() - { - // insert query using SELECT statement - $this->db->insert("test", "SELECT id FROM settings"); - $this->assertEquals("INSERT INTO test SELECT id FROM settings", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testInsertInvalidTableNameDataType() - { - $this->db->insert(new stdClass()); - } - - /** - * @expectedException Error - */ - public function testInsertInvalidParameterDataType() - { - $this->db->insert("test", new stdClass()); - } - - public function testEInsert() - { - // extended insert query with fields and 2 items - $this->db->extendedInsert("test", [ - 'id', - 'name' - ], [ - [ - 1, - 'Ed' - ], - [ - 2, - 'Frank' - ] - ]); - $this->assertEquals("INSERT INTO test (`id`,`name`) VALUES ('1','Ed'),('2','Frank')", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testEInsertInvalidTableNameDatatype() - { - $this->db->extendedInsert(new stdClass(), [], []); - } - - /** - * @expectedException Error - */ - public function testEInsertDifferentFieldValuePairs() - { - $this->db->extendedInsert('test', [ - 'id', - 'name' - ], [ - [ - 1 - ], - [ - 2 - ] - ]); - } - - /** - * @expectedException Error - */ - public function testEInsertDifferentFieldValuePairs2() - { - $this->db->extendedInsert('test', [ - 'id', - 'name' - ], [ - [ - 1, - 'Ed' - ], - [ - 2 - ] - ]); - } - - public function testUpdateWithOneElementArrayParameter() - { - $this->db->update('test', [ - 'name' => 'Frank' - ]); - $this->assertEquals("UPDATE test SET `name`='Frank'", $this->db->getSql()); - } - - public function testUpdateWithOneElementAndWhereArray() - { - $this->db->update('test', [ - 'name' => 'Frank' - ], [ - [ - 'field' => 'id', - 'value' => 1 - ] - ]); - $this->assertEquals("UPDATE test SET `name`='Frank' WHERE `id` = '1'", $this->db->getSql()); - } - - public function testUpdateWithOneElementAndJoinClause() - { - $this->db->update('test t', [ - 't.name' => 'Frank' - ], [], [ - 'joins' => [ - "JOIN settings s ON s.id=t.id" - ] - ]); - $this->assertEquals("UPDATE test t JOIN settings s ON s.id=t.id SET t.name='Frank'", $this->db->getSql()); - } - - public function testUpdateWithOneElementAndLimitClause() - { - $this->db->update('test', [ - 'name' => 'Frank' - ], [], [ - 'limit' => 1 - ]); - $this->assertEquals("UPDATE test SET `name`='Frank' LIMIT 1", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testUpdateInvalidTableNameDatatype() - { - $this->db->update(new stdClass(), []); - } - - public function testEUpdateWithArrayList() - { - $this->db->extendedUpdate("test", "settings", "id", [ - 'name' - ]); - $this->assertEquals("UPDATE test tbu INNER JOIN settings o USING (id) SET tbu.`name` = o.`name`", $this->db->getSql()); - } - - public function testEUpdateWithStringList() - { - $this->db->extendedUpdate("test", "settings", "id", "name"); - $this->assertEquals("UPDATE test tbu INNER JOIN settings o USING (id) SET tbu.`name` = o.`name`", $this->db->getSql()); - } - - /** - * @expectedException Exception - */ - public function testEUpdateInvalidParamDatatype() - { - $this->db->extendedUpdate('test', 'settings', 'id', new stdClass()); - } - - public function testReplace() - { - $this->db->replace("test", [ - 'id' => 1 - ]); - $this->assertEquals("REPLACE INTO test (`id`) VALUES ('1')", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testReplaceInvalidTableNameDatatype() - { - $this->db->replace(new stdClass(), []); - } - - public function testEReplace() - { - $this->db->extendedReplace("test", [ - 'id', - 'name' - ], [ - [ - 1, - 'Ed' - ], - [ - 2, - 'Frank' - ] - ]); - $this->assertEquals("REPLACE INTO test (`id`,`name`) VALUES ('1','Ed'),('2','Frank')", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testEReplaceInvalidTableNameDatatype() - { - $this->db->extendedReplace(new stdClass(), [], []); - } - - public function testFieldExists() - { - $id_exists = $this->db->fieldExists('test', 'id'); - $this->assertTrue($id_exists); - } - - public function testFieldDoesNotExist() - { - $phone_not_exists = $this->db->fieldExists('test', 'phone'); - $this->assertFalse($phone_not_exists); - } - - public function testFieldData() - { - $id = new stdClass(); - $id->name = 'id'; - $id->orgname = 'id'; - $id->table = 'test2'; - $id->orgtable = 'test2'; - $id->def = null; - $id->db = 'db'; - $id->catalog = 'def'; - $id->max_length = 0; - $id->length = 11; - $id->charsetnr = 63; - $id->flags = 49667; - $id->type = 3; - $id->decimals = 0; - - // query all fields in table - $fd = $this->db->fieldData("test2"); - $this->assertEquals([ - 'id' => $id - ], $fd); - - // query single field in table - $fd = $this->db->fieldData('test2', 'id'); - $this->assertEquals([ - 'id' => $id - ], $fd); - - // query array of fields in table - $fd = $this->db->fieldData('test2', [ - 'id' - ]); - $this->assertEquals([ - 'id' => $id - ], $fd); - - // invalid datatype for field name - $fd = $this->db->fieldData('test2', new stdClass()); - $this->assertEquals(null, $fd); - } - - public function testEscapeDontEscapeNow() - { - // $this->markTestIncomplete(); - $ret = $this->db->_escape('NOW()', false); - $this->assertEquals("NOW()", $ret); - } - - public function testEscapeDontEscapeBackticks() - { - $ret = $this->db->_escape("t.`id`", false); - $this->assertEquals("t.`id`", $ret); - } - - public function testEscapeEscapeDateTime() - { - $dt = new DateTime("2017-01-01 00:00:00"); - $ret = $this->db->_escape($dt); - $this->assertEquals("'2017-01-01 00:00:00'", $ret); - } - - public function testEscapeBoolean() - { - $ret = $this->db->_escape(true); - $this->assertEquals("'1'", $ret); - } - - public function testEscapeClassWithEscapeMethod() - { - $tc = new TestClass(); - $tc->var = "test's"; - $ret = $this->db->_escape($tc); - $this->assertEquals("test\'s", $ret); - } - - public function testEscapeUnknownClassToEscape() - { - // $this->markTestIncomplete(); - $tc2 = new TestClass2(); - $tc2->var = "test"; - $ret = $this->db->_escape($tc2); - - $this->assertEquals("", $ret); - } - - public function testDeleteBasic() - { - $this->db->delete("test"); - $this->assertEquals("DELETE FROM test", $this->db->getSql()); - } - - public function testDeleteWithWhereClause() - { - $this->db->delete('test', [ - 'id' - ], [ - [ - 'field' => 'id', - 'op' => '=', - 'value' => 1 - ] - ]); - $this->assertEquals("DELETE id FROM test WHERE `id` = '1'", $this->db->getSql()); - } - - public function testDeleteWithJoin() - { - $this->db->delete('test t', [], [], [ - 'joins' => "JOIN settings s ON s.id=t.id" - ]); - $this->assertEquals("DELETE FROM test t JOIN settings s ON s.id=t.id", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testDeleteInvalidTableNameDatatype() - { - $this->db->delete(new stdClass()); - } - - public function testTruncate() - { - $this->db->truncate('test'); - $this->assertEquals("TRUNCATE TABLE test", $this->db->getSql()); - } - - /** - * @expectedException TypeError - */ - public function testTruncateInvalidTableNameDatatype() - { - $this->db->truncate(new stdClass()); - } - - public function testDropSettingsTable() - { - // Database::$autorun = false; - $sql = $this->db->drop("settings"); - $this->assertEquals("DROP TABLE IF EXISTS `settings`", $sql); - // Database::$autorun = true; - } - - public function testDropTestTable() - { - // Database::$autorun = false; - $sql = $this->db->drop("test"); - $this->assertEquals("DROP TABLE IF EXISTS `test`", $sql); - // Database::$autorun = true; - } - - public function testDropView() - { - // Database::$autorun = false; - $sql = $this->db->drop("test", "view"); - $this->assertEquals("DROP VIEW IF EXISTS `test`", $sql); - // Database::$autorun = true; - } - - /** - * @expectedException TypeError - */ - public function testDropInvalidTableNameDatatype() - { - $this->db->drop(new stdClass()); - } - - /** - * @expectedException TypeError - */ - public function testDropInvalidTypeDatatype() - { - $this->db->drop('test', new stdClass()); - } - - public function testSetSchema() - { - // set the schema and validate that it is what we set it to - $this->db->setSchema("test"); - $row = $this->db->query("SELECT DATABASE()"); - $this->assertEquals("test", $row->fetch_array()[0]); - } -} \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/tests/TestClass.php b/inc/vendor/godsgood33/php-db/tests/TestClass.php deleted file mode 100644 index 836a54c..0000000 --- a/inc/vendor/godsgood33/php-db/tests/TestClass.php +++ /dev/null @@ -1,24 +0,0 @@ -var); - } -} \ No newline at end of file diff --git a/inc/vendor/godsgood33/php-db/tests/TestClass2.php b/inc/vendor/godsgood33/php-db/tests/TestClass2.php deleted file mode 100644 index 4d01a9e..0000000 --- a/inc/vendor/godsgood33/php-db/tests/TestClass2.php +++ /dev/null @@ -1,5 +0,0 @@ -C^c-v!rp(-IjOuFOK)_(iNjggZ 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

IW1f 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

MaWp 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%0A!J;}xPu+D5_3i94PkJ1m<-4QEoMX

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 _CRS!{Vx@67OeKjlUcSy)}JDd2f7@g`= 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 +${_^iJ@Z1SzE}0! zP;JlekDhB=PTgvS$&vDDbbQ~`9WB%yF=-wA^E$ya(yxY+vZ_0&0kM)pGj;%zj`*r^ z^%lM@)_Jb4A+UKuJ2YjZo>f%?ILKzeQb##G!LFnDm)5Oecl;+vOBVA&U&aGn5tWj=QW0VDy;D0f;`L`Tr83Y{XG_If6cunx-INCUe zO6t==b8>7fbup>i-6Wyof$$;;w8rSX0?oIQF~x5B!|^8DR?zS4(g4!l+cb93jF6J} zfO(66FcggYFk#0Aw%sGswt5FpT}h^=f|406!sMO)7lu?8IX#R1m6X@|b5Yf`Xxl)r zlE%(rA)Z%6R57#e-Xl0>a8x$ojP^O8p~uaW%aR#o7}2i$HE1->l!=z+32h37Rkc=S zM#%&zJh@^wb_XQ;iY=^Zx4P|{!FLkJX)^6=MwG7QJ;aQ;&Uv1ZQ>sTpQ{xjEyv9apMS(R7&}>IIZE zu_#dxcXlqL3O!pH#c__W(RE#0@f%US)KZg38VC@P#5d2~smF9Dqk+n85>_ z-K_@}=B@SQBh-3q`i7u-f2Q6yYhY7Rzmv+dOv5s}1Hfq2fDNB1eZJVu=sHNegQ~7A zG<#@tJ)Z#_7YBCPHzFt!cLWyRNXR{_sQwfkCd)w~F5owk!j}`oWXr;gyTUijWV0Vu zVtuf-wmKwhWuoY}@l6=Mp8D`jCx~+v=F8;vSqym32XAvq;+wLZ_}oGL8_>E|mt<6F z$#Wd`=-1Fp`@$AEQ5iTYR1QJs82f|Qn*RVuoVBj2ajoedG?y0;#W_grQKcdlX@S9T z`C>8&Bc1@LI=@_>QNO#;^c`Y3^myYJ7Z;ZDGE3(;c-Zo?vkdnD44mKtMmh${OT8-l zOSp#m%SygOcX8v8^35EXjWGSdD;Os{^MQaeU2kilCCU4wV|ANz2T{*;d#N_56zH(t z-&;ly%PR)k1a1kyA$GY^K*k3&OI_+aX!VYq)%3e{n?ciJF?={A%F=F)&~I(xxQ@}NEQBOwd)701B`ep-Yw%0ICHS0Wk#i-9AN%9hTV0l&D z>w%aw4usJ)#C=lA#dP+LCbrU^7I4zaoC~LO-z7%SeKJmS#~`)2mg`%CG9;5~AW1yd zvS-AR!OHCXqmZP>!ubH>I34Hk&tBad=vvHEt;EOTZJE%pkr*z0$RUp7xQuTdsUtS+ zF{O)yc|nj{wZv8zWfE(cz6R!4Au45k@)($_1_vc%5|3fe8LQgW)yGW!9!aOc;z|Xv zir#ln;I7lTB>bQdGCpIF2?SLOs|obq#JgK)ukISs`Y9#1iDN9Wg2AQ3dL8IU@A>hL zYkRC%N2=&ESP0asY|0WcHn41Go_PNNTCJ}qFMBYTQ1v#cVFt0Mi(3V+K@ntd`nM7R=qww-BY|@Z1>oCPq^|i-l~T@PW;A9-q@wN71ab z^pMIep;){^Fkb_|bC0HL38reAmr6`D5n`8?Rtlip+uO>_!Ln2_z#D+uox8Jv? zA5nu<(_p=|EMl1h0LoO4kq3}zB)pF%>yLnduTw##%^-#g@i(VeQ_-Yrc)+>0{&Wj8 zVn}2;%S3p}Ztajj$*xb*`ovuwsn}iWwyy?>s#=GR8IppHG-lx*mIwM}5q_v9or}bNp9(#p{{{XS_xAkYZ zgpxte($A)398ovM8pkHwL1sdQ$ccLW9W{c0%g8KsSa*=kWJ%PVci^HEti?!bH3 z%jrJHSI!xI``6VSRy7`owvVTEc9U1=$^QVE7>7P2G3SB1wllPWoMdDX+P-$`O&&GW zW_>A)u$JBth8U^reY1ne9gck}a*|G&(HJ)yK$Sy2>$hxqhEDEJ*0qpGW?lntkc2G9 zI49rq?^)YzCU90KWMz>IfpQ07?tN=Z(w8tvd@b+Yw{8)bk1d>FV4t2l)N(ypTxz>M zrvCtjn@js&!>#wIiEnXtB(|ytn`a73eOXRElne2DsbJN$IP~p4?HbP1pAe0qd|-VT zjPdK~$JT*#FIeAbnhnOA3Qr_cgB`zxC-WnaoOyB>0m;Y<--TAZY zx`k;vsJi?`)NQS8m1By{R^{@gmQf>M91=MmoyG=0%@^srF{JeLR<`?D;0_5sK+Fl` z<2VHScJv;V&VLJL)7z9dtDYm@MH z4AnhaBXgx*z^4XSB#a+oRFCtZy?fQRy&a(qO7bS0G|K`+jug8#eNV6i*8h7qq>$gmK#;wxZn~1AK$mytVykD zu@ENIEaP*7wWd&cI2>m@n)!1})uq%LONnmgxVgJHxrmI3Lb8?IPv#lH#R?Y_q_fQc z-x|JSjPS}k4t_$RFI1A~xA5}g%FnGIs5FF-BkFd6jJ^Q=Xvc|+?a#hB#Z3;cr%dRO z-`Yse8I?lJrzktOe!{*bms5`7S)0I-cek4opEt}>!8DN}5M(Yq%I}hM^Ys)zh<^fo zC-QyE9E&VsNSHb>$YnVP?_SM(XJOSE)s4JqW2j$SBur!$@lMNw?iV%FdOz`VTzyIw z*5MP_N}&i?f_Ov^`h~r?B>vS%W>eJ@lw}okeF2(Er=;pOy0)DK^@Phcw8|MBPJZ8C zO1D=6ceE~R)#^&d7QAUI)r@;ICH3n>>I;1-%wUw!#4)zG#%vq$#>a+PMpp z?oJ2pYv%s6x|R;O)bA{qiBj#tyKqpR2M6XTN%2=hC^<#7+CGvj0LdT^b4psdcB}Y{ zYy2Zmv_+WR-`SRS7~K{I8L{u&fsS!mPNe)}ySKH6PqnaycVXaM%QNgU1`N4T#@z68 z=}grt7azZ)d)MEHwi+#r@Mzao*P75^iw<`ze&vsEwtLqePsNU;wAAh-yV-muiIuHg z2ZBi$&IfFM_^xXrUVjdif|KE7l`WDmNHw3AQJg~2?jv#KNc8uvK3OLx#q@MMX?PFn zZujy-@fQyqst!;t7m`i~%acK+((XPbnVBUR1Z;ef^2Jp*QqHlVcV`R&u5+KIUNMp4 zM=LaMf}Hmis&LyGUy=uoM2(Rc6eqAf@kO)?mV)&eqi03uX>y=_PZTmg5-C*@J^OeL zae?;tsb9vCgG>qJsppK=n)n(^lB4J!!_UQoq}#`*^*4(=EZ@qxR}N5c0-kvuz4AVF z-eQ#|i6n`Gqkzi5@Im#jgl)>jY=Gb}ehUoaBe1WhzW^^TWa#PE_E`)mbW-2N-~qG} z6rTLk;mF^$oHK{gYPx4q&3c=h*S$Hekcv(#g#I;k)|Yi`nq{1Kk9icV8dY-$jgc);3M%jRwUx%NLg0e?G7D@hgM%dui*C7bonHJf{; zlr&Hru5b@>eJT_#k|447aEBX6KNt4A7fLur~%jR|rD%+3)<2-pU%!>Be@ z?d5M24mbB7Fe@`}GF87_%pk_ z)@&o**uh+RKm*#kHGI|hPuI5nE1_K4Tw6l2&AH)a9J~4lKHpB&+@m*Nw86>Y~odxv$vew-iPwhxeAvA)kMMchQ)$D=)0E%vSqG}!M zNO9{;-H%E_e@fI6LU^PmqdE1j9!+X6{rMcyZ|}u2l8qR4bM>UndXlk)uTpx~s~B2J zOw(kMV_nWbQR_s*=_o#{u36ecbd7feS23yDj^GwMasVC8VtP;U4%Ry}{{W~iQV5p{ zCn`dgB=P!UmB}qLPU4iGmqyE~dY@0}xa}WNl~7#Fu_)XD8UCz$3gSPFKZzG2{#`$& zb!IS_{5Lk_6gmF@yWgBvH}T7>V(K2Sl3hMu8&9^3MH8UlpH{AC@qk<)Q?+snH7uL( zb+oWc+r2O6-oLSa8!>YtE5kIBbG@_qk9<{)Z%wzGOoDq@%yO@l*Zum@TY0V0)<=!h zySDW{nW!T-O^{>SncQ>R6~gk#yZ8iavon9DNoQ>YvJ^fb&fIdR*wt%SQ!oStIQFep zqa=5N803J+0mwPVDy%j!SWn|i88OPcKp-3%taDoTc4yXsQOk34Cxr=i2&C=KIQ6D8 zO&A+@jPu&HG0$xQX{{htINIHb#VJ^C)nt@lD8K*#ij&K}v}#^Yx&SPy(55r zYuToQpIS}a)(HIbOPXeBL9A;e29z3)G`XQcvP{zEqXv{36dNC!_Gz1|*{w#g`J~M^ zHSE@-SnSucP0e^3)C(P6rqY90!qQi()r>7IC3>-tweL#xEn$xVP85QdHH;&js!j>V zpd8dHuPF^M+M|%2{{UK>G?k2aU9 zybIH%AHPA2Y?ez;O?C+sT?Po(A zkvQR$`c<6fy;-|sN!n5HeCgCZ2h`my)K>RhI`Z7xOE^em1bFJe6UGiRfI!cGT0e34 zi*~vR()xnV@ii$znHor15U0dUCI>&0EKjLC8ts%bQqpa89ZJe;%Sfgc%OO{F$px@B z{J{mdJXVT|>qES*X-0cr)Zx7q)+?dvw^7*HUz<|QA+m&|kVp#*?UNhahB6V$amUWO zhJ)7g>iVFCbQ}0>3`NVx36&TEaAN}?5I83pHI?f-wmNijEaS zu1@4o#BC=WhU4c}HH!<`Y(#ogma*Ik5rf=@WdU)FZ9T?2c0BgZXr;uy3=+yzw#6;9 z5DCETl0f}P6^6C^K{}nBGwFIBp>z!9-s(8K%?CIHI)fW${{VL#=qqnTYV-?}Q0o0F zUAuyN7%!ul1;XBiF{xW~=XODy7DB6m-0eJeq86QFuRZPHxasmO?4^uc7+f8w$VtO7 z86fRFyJy`=qj{wDR=GBwF0Wy-p43kExlcUlwO2EDUeW+Y(UPR`#TkpFBDra;*HYA0 z&fKD?SpW?*c-ZHTN&urBi5%wwnwOEaO3RVlrOn-~_OEYoWpKAeV2bH5Ax|=f3^Kc) zf=+YJ-+bcrdkY?->McrWEa9A4x?h>1kclNo_r$U8&#MU^zA&lp#=Ea9t}Z%uTQ$^V z&B^e@l0>iJ010^x-KWZ-kFPkP8g7I%%R4)pT`JBUNZ3yyNe~ECm&3vzQZ`|J+}8Vv ze0Gd2mXBq3X{bdmpe@7^$!Vt9$#ddPvZSP#h>w?3mE)71MnJ4&x;5wVxtOz~#;Y3J za?;FPkje%;#1H`k=i3JwZ97KrZf;sFLdL>vDP_2tYh9thP(Tu38j*DrNcu(*!jQC}q4MJk(v4}1?!a7U*Hw>9%; z{{TF2FQC7*wYIa=3{3^bGRr!a-G&F(B$7b~%z3JPNBE!AH~K)ayT20K5tkwq4TF#u zILJRd=jT#hrae(Su%1V2M?}$j3s>q`-&>PXw{vrHWwgC6%Or6j*s^T{54=XCWQ-4d zkz1Rai%zNhIv01Eqv*Etqb1Cdl_5K!iHk2Qlh^^AjCZe_zxD2~KA&l2ZGUwIy`*7d ziW0FQ0AtO!^KtJ}f9vgkQjU1hpAPn45^ouF`d9QtF557jS&aFh0+wwC)R=>JYJl=}QJ!11p3lZqbm;x!|E;k;QIrdV<#LNQv$=>$vspQ5S5Hghg9rQ^Qhq{{Nb{{RbhZ>O|PwkD2J z=*=eo04po701(*0%Y5pU_f*NGX!g2NO7|04TqWce#slMRCn#BgBa!4IpD@ac*~FrxPLB41TG09>%}v#zYTwYXnK~bYpmW(5zs|sA<30X zso2evoDf(X4oA-wSvMu^6BMJTH(Th7SL-XCS5VQl32nRyY$T3JB8pRslOaM?6pRdk zp7{VA`&V$%<&t|?PrRaTYbiFeK44RIks=6oW|o zUX>8r{4TEmW*xRlgBc#~Pk&IPXVSG0uImkULb&m+CK=CtsImV5^%cpq9d7#fS9{{R#EZ%fgvBa-x8+{-G+fQGK0FasV0RR%58ICh7U~>8%np(8*FCI&(_+OYWr8UgB$+XJ%`q zXLBrtfj-9s1L?&__>a_9maIjX8pNR{l1`pn|Tr+s*;! z_01mAnmgN0;Klik-)Be3d?k$lKDK6#6DEE_|c{7_JY$9sZTc zk~FO9$39v&{V1zz3Qpz4;xU#jyba)tj!zsDT1^j78V!`1tTuPIQ>Msf@n32};P{1j zZN%Ymj@UV@*G*o{rf5$!&hu?F_}UI~glCcV6<$f02<}(L+Q$ID=26=RA1_~8lyf|L zM6*YergR1CJx=SV^}AT-nklt8Qb;6?j@TDCbp#yXfyX|ki98w&<9`;h)EHga#|r82 zYA6=kIS~Nzg2lYp90D+KaBG^|Jcm!7ILN~Jb}7pEef+;NMO23F;^TV5<(@_gTsZ}k zgU{0*nC(rA)k+WDvUxGCDMai&N7nY*jlQMRompXLX{g0+78z%gc#`0#JOl)%9FBR& z2fizX>NeJd#Wb@?1OYh;hl8{Oka3S+eknD5T3O(lI1Rd({OH?q=siYGO=eB>vqoNb zE~g4hHfplXEQ+C{V~dKTai@hg!fQ5t$iieQp>ym4_VlT&7DSpzJQ-N94o(5bKBw2# zv$lG#giE9@Pw=<}xe?G&<>&y@T8 zs9HmD9DZ`kI3p^3zqK8>zM5#3J-b$W{EA;Ab7ZIjXmj!fqp((nXA6Nnc$2>pvCBB&`}I zeBadB92%@+$yzmN`tR^A^1@Dxo@;ly-yE&+a$Fzfh66rB*e)<}>64n+T6JEDbjQKe zAu*PXR$_4*v+mle-HUlo9qZ&9KE1utdQxo$-bnr$=3_LaLjvAiyK)cZ`Fhn&D^Z%` zWx9f~F%8cEuPkXD?^LxtN)0$#wabKCiPGIkKh)d-`qrSCKgI1>S@fOM zHu6SiXOF}JKpr&C?ZJDKQ`lHCsKBUgPuKd1`p1N{xIEN zSoQ9p(?b%a(kn*T%F7lo7-#x`$ol57jjUa$TfktshQ{G!h}@Ymy^Feq+Qg1F zfyO=aRi?ky^xGXbR}(LZJ|;yVp$kp4+ zcy2A%Gam_ayq``zD~1wy-KW`GuxeZB_IDm3dxXXsFbMLWL-VUm;gsEHBTRuyvPc0r z#!WKz-aE@(s;lt|iU42g3z7QbsagV#Fjx>f161VXt+Q{k-jLF2bKQiF7@|b+r62_e zi`*zDzwc4q+(R^KB8){YFb=(+lXbkyKu4LLl!NO&+Ad@x`oy4%C*~N zf`lpn7z4L%{{UL-b5f4GHML=8yhvg4B0G=DMn*n=T9Q7fyk(9lZXQHe+=;m0A93@b z6G*W{JR(CkrgMs<_Zuc&!ydirFvViEeVyy@-|a52{x8&W*=biBl3nIxJ&8Wb-Qo@K%FA5wEeEud2D z+xG>*$Gu$_kF+WBqH(kyDj6r?AVst+sUt#M4&#;N9DL|>NXn}tDaa>`b`^Fx*EeR!xL zFD$InImtYc*dLWD?XY;EA(DAyR(JDffu7aXe++uPdTUpTNmNV(dnE_h`+WOXHFu8O ztgJ>z;Cs`p9!V|(%^(GiaHE?B;wzXUp54|+q)^JratJjkBN+9r zLHIw`mQiTYXH)?{L+%oMQ$I33M*LP~1U$BnkQ%d|<6 zn)j`9OP|C`y+2&Mw!YH$Kmiu<#`u>j`GaSVr!;Fw>+K&Hy5Vh04^_Q3=nwFyg%c^zJ!3Z6&cwI$uoqbn*BD6_02Z!;vjs|JVu| zR-;)kBE6c6cQm`GQHe9nF6xIh?AGF9aA|W;hNlMOCWRWwGhV3kno(MfWAjT*6tn_5 zz4osPOwcf*lu~At8o(Bol9sT-idt@K*`OO8Nt#U8vsl(Ty-gIgf-QQImVu8`c8%M; zaf)>%V;-+ptJREpmo@73V;-+ptJDH0G_;lK#uqf5>(sT3B`tcCRx#>E-L&lGvBrJr zYoGoj>oYy=mVu(&%@(O}NoI_zBB)&Lkw`huly(^1ocdNFpG2eRFZFd_A3` zSWUFVkPpqlGApUh;zlswkI&fl8~B-~i8{$PM|4g43ub$ad^AYjTt~aKg_IG4f$BTg zLg+0TEhDGxOhQ$X>KLY)CL2{G*f(ul4Zkt&D<7p;H&Ol~&8#HW@-35jU&DV6LWCf~ zF(1-gZy6hx)7AUvtaUXX3eBfN!6Y3wXqOseX}1Upv@CK*ImjfE0nTxr4spe3DJf|f zl6;+rKw*XegXn9@0;;Nj6-EF901uTddVrwZc%4ev#%=6?&!{p<{{Z}|WovCR(m3U~ zh9v-i(?}P2?oLm0lauwS(g@?Ynq>#XlqhmfaJk3#Kdo{<#b3oMO&eFAK(^B()Gs3o zx=AD+60;2LU

Lk&&LqiY`fa(YMmt-D!eZ^ z^9DFLIj$kqoolT1j<+SorFr0>i^53l@{uazI17{C*0!B{_=k1Yof{p6#f&EU(&SA# z#>6b~Dv`NHat==;*b3%Wwy|6+GXzU}aNAwo$@3rbq{;49o{Hhey_Vx!jVi^i5^oY2 zM%Tj-T}k|;dmX&hdpp=s-P%<`=W|2Lk6urvc|YEXS!uD}>GB1*hY^yFWFbnfat=SM zKQDY%CE=P`q$>k?Sb|U-3WLYpve#0z+0f_HtZuZ44&1B*#N5sKRFBN0e7lc&$!mIK zwhUe}8r29Y&5YpVzB`^rH4UxJ{hK^cN?|f7R!~OPQ^ENfwQT|z*=Bvwk=+Nc(x+|* zMqG+@qP3H%c|t2QWM@2Lio_;)UKkOhiMcGPoR3@|omGHY#O3@Y@iUzE1L!k~jNM&F zE3`Kbs!yXDNqe2578|g%nJzA0{#{yCJA79tHg+Ho4hPrTgWF9cS1Gw!N@oO|@t;qZ z6iH<|lEl7txd_T+&gNo$hpE8D19U!ikxHHVv9(Au7#Vbi@$7OUXiTHV=$3?;aES0NR-2aVo@5sIcMD9d7Jk2u;l zABECSe2E)a%POo_5=j;D4H1r4O}JH4mLUq@@GuCgx?e=<7S^^p{f*qQ-p0|Pw7hMR z_t_|s^SM(yy$LH4cz69GtV{LoLV^^NkUD>N6$K>=^~9fS(Z8cR#V~+BXlqo*cSh3k`1N86$!b1bawE3x*@H z$?xmluU~4{5b3O{VH04Wbs1m?_wG;5hs6x?I%a5mgJQc$`w!RmuWOop+_Bri6fwW_ zoH~!EKHoZrvzo0DDBA}EHzq*rc-+L1>qIRz87){Lm%~snt+&(H6$0s3CNyc8A!R#4 zGYsGlPeaeGS{72uR5})y7{XSZqWd@j41#*=Yzo+`O#e^)h?r+Q!2_c;TXR# zImqqv8OW^}ajIilYMMT`{5*=xbghlWh#PJq4(;1>WR@g*?k)4iGhDC!C?;Jyp&`*U z{XW{&FK$H4ZMH@lG~|X*0p*!bw;kvuw_Ei`PV^1v(c`v`8LvJUPe$|2Y{zptg+1|* za{T4HA5LF&uHNdCO!~}|U0z5rB$Kgb-Rs}C&~aVaX5y~9IiVfw=bBBQjd-Yd1mhrP zx^|BOz+;FROp)Y;C_!VlgP%cM^Gh>Ds4+&`;rzUDpOCJBVI|`DcdV?|>fjkS9(&|` z``0#Yow$`6PN9jLr6L9nGcL@{uK^2FWxgTmX+ZAaCAc&{}LfeoY%nnC?{8B6y z$$GK}P?8lTPoT#?e_E2pcoH^jt0`Y8&N;!y&+Anc#5YEJf{YYy5snLFU;$9r)zL?6+^|hdkIzGSis>(10z0_Xv(u(#LPr;4gf5BdSP>X9s@h`T zGOp?NZBfbd0!MG5uaUK#e)p%Nuw5rtcet9_C7LA|iZFXdMtM8}aw^W5)p5str6sPb zs7D&aqFwF?iG~S8&HzwH8SD*qM=Gyz#__l>Y2LpZ?&r7ZI9A@};PEa1c1C4l0&1Q0tO;FDNnxPwi#Fb884hxrc};g>DR=O?)wp42CqL8h5l!;*_yU>>-< zYmFyNnoG$pZ!F2ScYb_D9lcL%{{H|f#7TQ2zw;2EToa7Z3$KZHF|43$Vsh<(25D|% zw3lklBD0JSBH(?hGRUOuqNM0zv)0*6$@zU0*oLviW|M zoQMWM6+NE= z4{Z7h6{$%)cS725V_*X^j1r{wKcyZL>9N>DHN!~LZNOdFIQRP3J5ChFzX17c?xVX1 z6{KRJfkB*%RU6#~{^`xsaI>Ksh};7a^v@=>+9svqy4$m|#UMTzTmpVo4ySiA7HtUYVKv_mcxk;T6Z>K$d&_I*pK$EftR#BfWdK+;`Z+!c)YU*S;1 zlg>xw^{=10pIDz&yD2hCJTgE>P^1j!oB&DW@@qq^Y4}Bt7jEIn;N+Z- zT=%S7TwX4tDTGY3hTO-y40`1AT~N;)(a~?hLS$H%WLz(Eo_VRGc%|N_a9;laTBmm~ zE?J82Z)!_v=am*#QhaF~v=(tbr0m3fl*m1IYQ} zg43XO5r*kSm<)1{N%Y}=ierqqv}%$ znXVE^RH*|pV`w88tmIcEi#FU6cN3fwR%4RlKHGw~ix9{L-0g^iq&F)GE6k&Z?OxXI_%yK#DmxTPnvg=3y2CYG=IfAsn* zHHYhe#0WZK_}VqFoy0;yOrbz0umk4-BEaw-WegDK;qzz7-Jy%WYw~{DEm&#aEp&8yH<~-x)ZJ~I;l)iD<#Zv2axa- zpHRHyfm;sZzDnp#QtLs#a}vnc6GYI)yNd4KF`mTy_{VDcS3tS7(z<%W3%mGPqk$N) zBzaii9(g?Rlir3Yxh?i_+@U@a{jC}d9MV%`ktK~@CRaw}GMs}_RZ4a?y;SurQqN8B z1?=k&j^a4?dbLTYT$@`Nt`ZlV#-)U5-KdO}$w$j977>Ev?FtJM>?`A5y44orsBhwe zdztJ-!!oRcX;M!UHL^OgjJup*;)g7*82OkhdJfg= zebK~Bk_Id|OlK85HvS?xE=It1;B&zB`BxK)qf?S0wzXMXJM-c99moFw2BuO(@42@r z>~Y0Znn#M_h z**ny70N~SOmLVV`a=7P?Dbu8Dvf;Oq*hU!`WO0*El~;yOKJMo{=9W9h+`EbGoDrI5 z!$mW*85|t)2WpakAx$IiHEt=u)BybHK{f30Ji8|bybVLToEn7H= zlQg-g^Gll48y}kXX_=)4v4_&;m<>9BM*~tXAR35Mfj)+nqY{c*V)o{rnox^gq|GQi zP%!V-mYPi_Xas(1*`|YD&1x|0(r1cH(s!*!7c}5$l%lbRid@rkUd;iAW|o_p_GlW# zrKGP`2(+}7>c%}@rLRyhwdzV*!9D3-q@~Sc3tp;^s9B}b+db3*;fMk<<8dcAFd91Wsvu$MrtcyLPWv2lC zZQg_ADQ7+kz@NIKCd71Vz=ER__M3UZtr|!zqHsPP0SWVVd@4v zzz+HSYHQT4nxWn{m7}QNekEvDqWlM%NiA5SpiFq|4ho^{dH(=fEn(IA9pna2;#RR0 zAzfsYF4n*#WbkpG;=W4M_3g5=h^`_bn6zp(A<5?h9DS;!eM93gM{EFmp@71CzLh8H zCZ3jq40jaYXWJK7w$`u-XPPud{G_n+eLd)ZPIWGq)M-2D_dgLFB||V$2bg4IKXLU2 zzHrrg%I51tu(Fm(X127G#s*mfvbY{n7z~9Tf|;Rp_5GwV#c8Qr+oV7u#Dzp)9OPph z`W*dfzlw*zRyNx{s>vLT794r2-_j$fX_J3sjic${x9_n zmZv7IZm|G3K*zs3vV1be>P%{&f==I4k>BT7O=fwzhW=esP`ZWhWh~OmjAwDrU_Cp1 zJ!#%}I9miEB{d)bf=6i#WHez5ZY_b3GQ*!y?Np_?aUQ`T*azhYfr>qGZw-RQa#B01 zbzI1jDGKMX>~mPnMWvGAo+$Rmw~P(|ri>#cXy}x_16JCCHW?vSKDiuy#ZMLd3?}iK zRd>LQuPP6(+OqMPqhBuU4p;zq9_FNLhHM5nIPL{6(N<*8a^~{@Asg9$FPEHEIB%HT zVm$bG^8hGtFB7MX8y)f3;L$r77TG57cQX>CGNuD(xIWmT@T$-+VOZf-Y>yFh+i@8m z>r%lAm)c|JKd;uQ4Mrb^m>EBuzm-op=aNs_t6Sel%F^y3eOI>cy+z`h9VBY>l#O)+ zg;7YjAu{I$Fmvh1?NaNAmlsjoGnHwE;0VDy;D#RH`uf&QbrUp--eoz!!*VE`nz5Ho zNM{2nAZ6Tg+2kMB{Hkvpmt_;U@nK7KXi=w*Zw28yly4hB?UD2PQbuB#Bq=0d#-ym( zjl_%)G2Vm8sja+HnGj+{ASpe##RJkc7K-r+0QUzYIRtjC98IR!s$68O>51_d*NlY5 zKa@N?jBNpUV&3`m_NqG0wRZX(t22^jfBA^BG^iMd)nuy(ALRx`bQlve>nv+|Mz@Q4T0kT88uzJBx{O9SFVm2n(H%wvo`)%7GE`Om#?v^i{gp8VO1 z8D!KRaqz1%Z;2BJBVg`(ah!MO*1IWXRN2pbcR&qiQ?$KE-%kNANjrm#WkU0kcqfiA zL*C&gjC@1Lr9fX18yWe0$9l7_*v+Qh-CE3Y*3uZWw*k~-AED#>`%sU7p6|wHiQw2g zMME1imB)Mm?}3y4A@ivJ01n%tl9Hdfme&p>}P>HVtAckdW0D;B`=G)ODUNj#7LGs-uYfunMxoK zLmAF{a572Gc|7+t3tqOqu$CBgBrIKiA|FhvAIyDu#(#fW1=Ufty~Ht@OL=m5zz05+ zP+whLvaQ6j$^wN}b|ip10bLPpP_{2iM3(y+?3Xx=o4sx$)*@?otTK|JIUa$qFc&_R zhJ}bK8zG7F4@`gNwY?i-4y7g4wf(q6w*F!r_%EKo8cdXxomk&RjWxb9(*7AEksdeO z2vd{<_Zju!PAD`(Y)k<@!8-jhksKs1`dMB`m$RZ_+k@DqF&ZoFCKn8g% z-NCAsvzP(!*Eks@)r*($TsQ!73G(*)){@u04qfc>4gfxPa5l!d;19iLyj+pE^Yf<5aK=LCxj7_O`bZ_~i>X=0_9Q9eJY-Tybdq48 zA-%n-mi^7Wxu+oKAc3B7O~C}Zl04I7uvP<)om{qOb}PNhw*fQXcw%+)m~iHBWCeR z9#sVQA&+X@)RDXhsWk3i%8Up;VromPk~}a1xgDO8ONks9m<2#Fp5Oc$r4G?1*%X}c zKC~+P2j*$Cd)G_Y3#iJUFQ^}C*j(N;*1$yWv-)82)rr#)L}<;yM#g>qp7o%PNhV<& zC;5bDzvUk);>#4>foQ*aFJOdAZo8bQ@t+xCk9rw$&2eh)bT&v7GPc|jJ?e99a~i=U zQUfAno^oIBPPv&ctrR@MIo);v-?bvpY!PpGi4AROc5MM+1CZZ4UrfqJV={u_9{ z31+sGWlLj&>L`7v+blu*5;sIEvl?91K7C9T5(PRw!6GwJ?SZbo;ok9gw%#6j*egPL}~Vq=je4$?&K$Qbj; zHAV@7SvnF!4DAQrx)n=fbjj@2X~|S8wR?v4tM<0|mn0XFxc1_QS{b9WE}{H9;J8zO zeY5XHG?^A@b1UuJfVDiAwu!f+OKWFs@BxV1As?H*>J=TF@y=M4MInxTNcJL#HPXu) zM1c}9?ceKEH+VM)&OAjUj2=XpGwdJk#~w~)zz#Cfyn zMobTASK@<5x*;mKTo+T@1ml8zYFvH|CE(FnYxh3`Eul#cn(~)6w+JmvdS?{< zO`=T+8VKZjNda_S%0fsEGTx_w#bYPBdG97^LZCnuQFsTA^in(5j@w{j(41y9;BGZv zuQ>O+G-Ji0F>;WUm`f={{{W&J-1qxY-9xHwukYe~%;2I&wVxy?-~*m9@~n!;vlUtM zh}$^F81|_nnn7}n3i{xC)Z1-^#Wva9{{Rd+>)Dam{c&3h2Zn)0Rd^ZU_L>H=o1p_SuM_SHX?< z2l9-993BbvuADh;JAE9{!^e_eKgk^%t@^UVShxpHzgvi7LRQ=}M=TO4%Fa0CdVTv; z9VPgYb7gH5dXf0A9%%`Ci=XDG9hVr!eXEz*+34@CM{{|9HNB8Sx!E_D^70Cd9i-MW z>h)l|l`W-Rq0Suv9$!K}byuF_qM322@8kZCpVhrjF0ZfOUg&U$FHBC71zfa=oNd71 z;Ck0A)>eDjzll6bl1~10QM6=x4@#2LQg|kob2|w+!#8#&qHXso5!y1%+4PwKka zS%?XB5yVQWEI0SlD_5-C& z7H(Dsxx8G&C4J0*pIxJd_48I&ThYd!G^J;PP@T3m;y=oUM7ywGHEX}#%9jUZ0H#<0 zf(h?c-7Te!Vo|Z%y91tnwM<==V4!Y3?buUdlzHWs2Pc8rrlQfQmF1D3k{r`156aO0z4XA(=$pt&)#K^5-PE9{M(3acCg-_yQ1^%RbAU9iV)k*=knL#nhlo)}@& z?Piu)yaiZf4t!5zj@_ue#l%+7Ni^~-aUjb(8~`g?eFvpv^;-V^(@wQ}oBNn;ph1>- zTqyqle=5ZFN8+bWXd-CD&3}0t?C>qfsN~NWer8;y_)gh3;-5@~l-t}*aLTMvQapI1dMP-^e_VDnGyedd&4{<0+}X`; z#1R7qSIHyGkVxk}!2N6HZBA!Y@m;pRVUFYNLKjjZhuCb-WAxYe+@faDr=X>{NIm;30 zo;j|42T{#ADCJx*#?63(R^Zh!7Sy(d6FW8m`sSeJkvo@TtZ_=H-DrBRhQe6lgx@T` z5Vumo8PY+>A-nVI@6C4Zm+SjYNujj5ib!sJ1wJH&LQOCADj$DePWAH(Y7Gt4=_y5u zJOuQ}@6YQ-EVYYyY@5L?BSKG+{{SyN{*$p^mUO{k%KF82ssA6VCn9uy|>e@>=HB(Toy@Gjta05@kNGxzk z2R?3dfmm7Y#IZ{9I~f@6EKeuWgws#t9-h9MYqG0a%M^;wBKe5U8#to>0K{$*6pK%W zYy-5qf=@q60Tt@Oc^r(P(OWxMWM}3*XuSHR?68jlLXjTpACzP1Qp%fZ(P!`!(`CJy zMO%PGNZx(t9DKp3p-n5s-zl0#T$6?YN%?V9V$`RUn5I+%82WwvYBwcdIg`uV0An={ z4*m^c<8G70R?1+8RKX0}n>qFrDhoS^rDkCTwfDiY^`~y8ExW@PzVP+jx+M8qg|zs#BE}5R1V)$L$xcW5eTl7 ztf2PwT5MCPfk14q9H|vwr%1`$VM#6{P+^sXkhgaJqx$;Pwi{iX$nZ?06i~_o6|BX? zvVgAsz^4M3&G294n|7z-mBZ*5)~&_@iKG94k-6cYVhb17LQMc;L1W1BXbxz z<#WLA_3g;!x-jQ$@tCbDGcYVkAdX8WON=m=a^Qp5sU3%}`q2nriQo|~`1Xtp5g@2xVX7ij$N_7-%RCr_4!cE2{~E} zHns}Z^y%&962#3Ucm?I{hV`hKgW3X$BUR(S{X^<;>07-cNIJtMm*$>T+L32w;ukxZ zo&xdQng>3SC4}?o_k{y7IPkFQNCc_KKRROrvl!@yq*7M1uU_XFO%vX!+v znMn=E&pGs|b#kwM@T#gRkr-9)z{No5mcSr8+tqym_RTvm$t3Y&4B&(P>Ifw zIv$5T<=k=IF-WA0$-PE)@>B!!$n8Nc^!tcY#bhQj%)5vErw2aV)YRhN5J^76-8rs! z8iWyDN>T?U8*$30JRFauMX0uK?jwO)!C464hQQ7{jxqlLiVa{yQihf-z>JN5AM^c2P;mabZ56TWKwIVKkD5jwNBVF+~BuF8K5r?ency zN2Z&rYS#yG&=l+<)n}1Hl0e$NRwpgnamOP)s}U@XX2tDP$MLbUI0GYVaKL>z{i|`) zy7|-5=emm4X>PVR^Q{zs%EW>X*Z%;6#WKwpcqJtK9lu!oIlGeH;_mY7>Ng?dns`mB zG}9`KN)_9KkXr+3=L6QU_x&fQ=+`<%oFQ{>s?7Hmx}0tYjbtKbk_mmK3Ic)$A-%;B z(!Uxfx`f)_HLTY%x};N~@I(ikvtz%Y#~r?P&fBf;bxVk>^|g-oO}Es(H^G$vGGyh@ zsp0e8f`GXlvyM5>OP5)KX(fi**5>*+i!7}KTh&;9PDucq`)3}wswr~&f=$8E z@P|?9U%>S#EZT7L#oX;HkCqQ0)S4~R%B&sOI3NuBS4;d)eIsAiwX4aj?=<_ge+DRK z3*u#a_=-u#3Pu!+5$l@d@Y-BMBHTqH1r6AoR5Qjc6pQ4onk`bsJzByx$Afbhkz^zl zap(`V2e^W5J^+_lS(D1j$+W5T`u%Fvy}+L56CAl7gSI|Yao0|G5ht2!mcjg~$o)_H z*B>VzYaj6=7aX#9nI{=M4)xJ`M(HhK9y1?6>=!v6gYQ_mBe#O{WJ@Q8r?LFPx?e@@ z5HNVMlCprs31%RAliQ!|O_lpjj9LlXr^MJ@nIcgsUFeROAqIONw`${ecT2;mRwR;0 z?sHwj{yU%IR!IiOibj!KfsQtl>BqfrS>nXfsX`9(*!IDx;N6X%q+5<_iS6X@R2b9q zfO+TT-lmBsMJtYb9D0g}PKD9gp&${0asISbt>U;=1IAZ8hQJ`4_Q}QtR&~-j&sj{d zT9%C%xF-#}I6tK$y2$qXu)7y3eQLV1A{Ab9z*0HSy)^9#S(`GB0V6dk*sPZN$HsJM z+!+o=)9LlaO$-soZcgWIi`y6(1JgL^m?A7O z;_?)HzxWh3YcCH@mQwD)WK{gTV2u9&m0#EHQ6Y{dB^j{5ugi>7)^{s5n;a6htVjBHxo%zU0xit_Qv9$%emuXKAS@tI7q$&-xQqdVEmKz9jOpAnk$c@~ekXaCRWt2dLmxYl)*0 z5fpe*GlAPa^c>sqL9m23LkwV5Mg92orppTIF>PlN%)FN*;QXqEyB9&?NLBOLe5y$p z#Va`&KsfoIolA{93$g~ZmTAmRLdt`j_W5?NSy;TY1(z|WztV`8hD8^0t05pLJG-By zD%`8DgxK)M<@EcSXExT1-@#(WXl=KohsE2F8x?jK2ZGYWDJ=g0lo8Jz=u-tvn~rxJ z4`D?i%gYpj&cqmHW82#m34DbyEbipXDR5PJ#%sY8L*pr6z?`ETGEnA@KvF^g5;@9` zZvCj72=|6aB88@%@CF+hK7;nHB$mLw32t3)t;MXT%v7j9;m`M|x-&_)Tg#KFM6yK~ zWbn+G86Lg!^Qw?5z#qhkk>hN*en39dSH*jMHSQFPX`h}SBm>3|&*j>ZR-)k-*vJKU zb{_s$wT4U9rgV$6%DGh}@koqQ8dSGMTQV zRtOgbR2-c9p55pjlttucjD*3*C%tO5s|LMEFJXX~t&}54!Q1jRk98tUM9if33_FS# z8kAjj`!v4_K}V2dZan?)eNA1pv~`F6VSr}j1?LCeguTfzh26Ip1d+{IhI^F&t2}Wz z;fTO$%|8MrMLLMdj%+y2cQ1OAPq!+Q6Sb77Am_KWOX9~OV5nCok_R`aLAZbms6=OeKBRKE%qUGZljd;b8XK@&*DUv5=>{Y821W=Zl}Bmsa1c&)bd zG+mbMnWL3T@^krEXBDJ3XsZwLVdFG$l!gb45ZO89hoxnN&md;pPyybZ6r`{$<(Tu5 za!n%#Zpm(Jl*J>umRD{{{!|{>sUZc`Vz&S*a(V0rsjBI5Aj~nldB#ewBZ~Bl@u4M1 zPf|b9v)FF-R#}Oc1mtI$zb(&zs?jklpmw2AltKifYo5)X_3Qa|Bx7(OgOX{u+epi@ z^4`xmUF_Ri)BR|*<;#mmRAULo0Tq{mVSqhPetXdiC*K5vImq<%p*T}A*){dSWG>PW zNZ@-=o#4s5Dw268-mNQ~_NxRcDzh+i zjE%mZBT+>QGLw0OuH{U2>jWAsl^ZHOcG>*x4?><})Xpk&amLS}SSot~AY!5W*)IB#_?! z059!A^m{9N+jjVbPZ_Zd`x@IEiI0H*&)r ziKfXCDv|&@yMyUcTv@F6lG(Na+!A;-L7c?QgtmP_tF81RCxv719Z1S&f_u|m+9X2D z$@NZ@kJD(n@dH!^^P-(Qjg9d;{gGvn`r4$S}Qql@h zSY$XFP-&u+8c?C&*MY?}8eGr_;??Y$Zfn#6KRKr_y)aX)oyKwTHyG8-W9go(J^@>=C2BBzD)@CQgvD|!E zfWRAxz;m4Pp#19(1?sD=C2)X~wDK~2Yl|io$+oQSz?T~8jeeV`O=~c?f>RvP`SQMm zdgs=(+Sgs`dd8I{o};PDb8f^OI2Z@e@Buv6I5!Bfg0lA<3acB<;Vg+D2o6ub+PTyp z%?~b(z<2r@u?J9H!r;j%mv?a3i)eC@U zEhIxc#Z;AB%WuI-=HMO8i~mW)(5@f2+%l0Vs@7I%)*hDT&`=qU8p zLRjMxNJNX37{_Yolw36WH$~VrY2mesN0$W133l{R+~TNeJw>PNB7_-bndV`T6krOBn|ZdC#6WN`a!L8uLTW0PKw4z&q%6uF8C5{w ztk22%04fEwyHx|iU=;1-@lTLRY8AJa1p9WRY35K!iGXimQ@MU)D;;LRrdcF%oyO2T zN59I7z07-pq-cPSc+P$M)@|q6F)x)q#8vBAxZLUvP5@lc$qU%YHc2}*wC6iWlaYbI z2e_rTkV!6NI922iom}xFcnUc0*yE8*X;7eyDzNo9?kabF0B5yZm$|!n8I^$YsUE_c z6pJR@k`Dr`>(&O&Q1OA_N!SlV?L!cNcqAI?gH9@ii=gCU(2PkC!0t&osl(gAF>W!A zz)dUZM8CY|>^9qdMqU|u&jjoplm4DLu#k{gDl)^pnEPK4b z5J3x!GX8H;LB{}4tGy#jw$!FS9xqxr8*Gsw+KxXcVI~Ut3}e>=n#zWn)M7*@(VHiM z?OH7^Eg~pI)RtF{(j%E!Ty8lB3J{C~oE($bee1S4BG%ZBJG2?mBWBTB_6X&gZxF|n zP0IrJEJ@D*DLuZl2UUXV!bo23TV_e0F@^l@4>>F8-_YaIt!Z6bZ>4Eg_Hx7E%@mE| zy5(9`U~*Xc@OF{yReFz6(=|JdHs4E>yelM_RYHP1xGRC^JN>9i5O5DEIaL|$X4%tT zzf>YZjzHVbB;Zz>$4#|^O_s*|$2$o`o6viYf7+<)W8nIlXl5-$k@cU)uueZTQkZghyQVq=rS> z#D;8wLwt`FUfJ_(Wr9EEa@jTmt$U(^W$M(f?(@xNCy9RZ9D`jh7 z_8aAd~y#&|3%b#L+w(Cn^VtgN_b)ALm-zpeC@EbxfF$l?-qf*C#%_P$7A3 z9h_6kXzbH5QMJ8CKj&Roay~RG?4H^uTS6W)C|4OJ{{Sfe01*8jTM*^ zy*nJ$3H8X?5-U`AV+=`+PC5De`&F${-V6OJ{{WHevQ++mhI^DeHV4T1e2qJewB?|^ zpe!=GOi>tv=)myQdd1`#qAM#gP*}Hr>8ylvJZuV+l|M|@yHT82+9w3u+^>hC>~F<3~KH?VCEk(6RWmIQ7%#z4=vHPd?X{{T$T>~zgLMe2L| zDYhAe$*9RBVFI=kqMQa|Mg|mfUpZ+Sth!~j#84RF@z=w4;IRbz`c+4`J{zACIrJaZ zO9tVjv`$du?AUb#iF0l7yP<+>oxUJ4112+)Smz+Hd5DvOtw8NJ^Y#eJX_BRH+cP2H^D3Z5z<#^bma z+A+!Q0Iqj-*6C`DtS|uc_S|bx)0fuvw%eSXup8Te0RI3=Sx4Gm8P+XsV3|-x5>>X9pghV_!hR^1)#c3W&K@lRRX4^MD5ju=T}puCcXG zE*^ueENz6X!4(kWHNqXoO&F3(b#WF-1uZNp*g|FKR=xZv@0FW zxWG7&9l?1S;L#m;Exqzb2_URMK0l~}NBIiql1lUMU3p+0|AqY zzia&KITVmszTi*2D@6|Y#EOHCNcA-Q{4m)ZNMMN>%C8&)+*DKCwbjxsyxUzpM{lpr ziNw&VJcc}l7zf;DsRxVV!^e~a`BVy3E8POXj~mH4c#K_HvAK`0wH!oCVH-pjAajx5 z+P$hOcu|ucT%Jxn&-eM)q##2Q4*1}Xc=oC}@<`SXzdsSb`I}h)&$TkrcaAWdutCb7 zb5raFHxcsOlaZX_t6#<8tVMV`dB^vrO*Kpb0eX`{zAU47INMPh!uSkw5czohs6=Y4 za!w9ET6-}V*vF1}q4dzzW|lJz>cp3aC-ZqvIfT=qN6(d^A^fATAGM z{{Wh+723*TSz?J%j@(AOamRf3qM9Ty+G;8yb}c6{vm67DO6JKbi#J;wZ)l_M}6`th)0O&CP6;HdUve!_QFWm zuZ9emV~+W%Vw!EglXyYijj^^Cw^QE6k~m!QxyKn8KDpwn^*!ro(AmKukff^8ss!2? z`~2$eke4v&-W-X)AC-f00PIa7yrWW

PbWa^>=bAI*;V_c*9u`;JoD3=A%rq~B_{ z8?5BEY1o$V8g*A3`U6@HoQbXHxEHD6JOQ^BO~ZKO8SS2HEor3QUi@9&n+&%QTQ{Cm zUKgGZy=!z^9|KAd%B>-o=0MqEaDS(sIX;!>`k6zGS)bf1sNeW~A9fkMDI}3_qxzKp z08VS1UVc?|IrKTLcT-z1(=5@ZWh3(k;Gd}U;<9&^{u2|wG5dScdPu0N`CxBJ9<&DH zbc|$fI6qq7>-Vc|(zf}ZEnPcQL7 z1ljOmTtqXGk8z6GlAcJV<6^_M&^;BhS%Ja%RWhyOGdSE7a6PKT68MuwgL;O1U<%On z1%-{ipJev%vd-Y{l%LIyarLHi;L?6g$Ciw^zGXR8812BRBAm}60yg0DpIW8_f>#AH zGn|h~wPyph!f#*~Jo}MVX(MR2FNS8uH>PlYbu&U7?TZRjb|)CBiXM z`u3w5a5CW{PoK7Gp|G8F<+cMgk|KbzEIi{0G8Z*eSMGnrgq?i>%jW_2ruis1Ms`EBjaDB_f)3B`64um)0o z9SLRUnkA)Mj|J{uaEu%u`%OdBk&CiCyZ}Kt`F5id!j{(eVmXDo_SDn|--?cA-zj4K`>S&$*qVY;CnHO_^Q+f|-4ESWjDbE?jT-CJOiz!TM6rV;zxli7or=!~2G?T1JBKgH!^^^BsT}@`J}b zS3LYy>ieAn(mPE&$!&2ul5R{{RUXQH{(hWS1bs?oY+YSkObh2PDQ`FH``0#X{{T;= zV_=KTZFG;YFh_7l)K{zKj*{!Uo}Rz>m!9h4+>A>EviV&{Y!jWe)w*l(Q$^M$h6&=h zvz|k=mI31g_VW*ar7k~H8TY1izfCQ0+0g6R;}nPINt(F_p>tl%H#CINpbjRJG}3vb zIR^)dARoHC4KPxQ)M5Fgc@{O@BL!UJEO0YJdV)<-Jt}9=qPLd$MpY*VYkq`tTsK|n z>)Wf_ORKmej{Rj~-W<<}!BU$-F(FuFox_@(=Arn8#-2%Vk7v*pSC;qCEY@=*@Sf5} za;NBhYAsIA!&HH+wHP3}h~dmK;QbCi&bdVWPY+4-tomp1iyNIyt<+nlnxuF@U>`Xp zasliB?dofY^*3AUdWNuu6R`WixFmGk`fYX6oWwc~yKMW804@BOv_fjorLgHekYp1R#^f;6B~yY@&hS*z8<- zWb=y8B70^gvYQsbp>40EaTf8U&a zC^Kqd`DNHgs`LJIr&o;^Y-Qg*;3)p)l2LN)6jJ+|=_H544&Ho@P>yp@M9Cn+K)S~D^3Gjf&(xhWPH8*=CoVZZ9Od_m7Z1nqzrI7aZ{9~4w?m4IGZHz2MDL>>~U3LxY^1OcVH2kb6l*EV_@IA zJPr@mgNw1RWcLGXGFzDd+@&{uU~)g-HBS1?q|=f($PB(^924zU8_c)?&vNK{Ek_E- zvo;iXK=P;eqZ?Zk0cULP;FR2_^BOMzZxthfiZYV%9^n}JXV}-IhTy!6yLjgV(0!_5 z1cuxstf(`%?IiB@t2~};DbZegOMOvRR8_USjn~JEux@*bcBad5cuFQ@i2{s_?XOwe zldCLJc2k3q-y@7tv~B!a@Ipbi5)d-o#ZppjS`TQW@Yhdp(B&ggx!j6B%Aa*)RyFX! z0R}kr`JZ~fCB!kQ%awo12wGvfjj{mU8jf%e6+Uwm4G!>GFgBhu$2D=b7)r>XzW|fi z3XNw`a1mnhkC)3`kH)_FFf%h7F$k_}W0i2I-l|k?` zyoJ?yBX?{8L@#7}c?y;rLl6h1DiqXQNtS*)eW)o)v}z@q-@&pFNZW}Zg2T05(qxd^ z6;~xfG+-&@usOi~`1PUY>1WJ*6z`8(O+79a>4mvI86n&ct~+}7rD@j6!O_?HCsj8+ zFv)iyo+yH-J`NbE^lto&4t{lr{6UOb^+mviypF2s8=m9W-i+z6O{PWSc&1Bn9`hOv zyTSIs#(PlSv$mg5xv{#898V7?9k#I?pOE#gXi}Y*$+#K7$_`^VDm>r#`Bc}}OLHV| zA;hG5j{KkXreWiZk+jAeZhZ|?)frU8gCLm4r*2JkB%aX)qC2Jxe*#YV z1bUBJT(wC7_+(h(aBkSVv#BRZ^am0&TC^Qf5_B#0C_R6Bq@`88$; zAZH8%H$C&fq-jTCYKO|j;_y(Bw1zzQ`Bc^k;YcKq;Dg&3shYwQBC--#Hb~BMQ(d4B z9EF1%_9myvbSo&|vrjAIhhNI1@sUa<43PNo^ZhvY_p0+Pr z$^%VW2FZ~|Hois)B>U(80D)94-@}qbb>N&HX;SE!TgAXAI0KGplFb=Yfs;;?Og2z% zTPkVbapngfT6;e3%D<&1<~%oQs8EX7^&{KoQ?n}|-cN`)0DDwS5cY1=^i?649D(gc zs~HbK+lC2ak6O2Fv72+TQau#aRba8@T!!pNp%j+#`C3E(F!!W!u+T%|B$8dNfCnHq zdLb+@I!7(T33ee0qp&{z06GAdJ3(XSJ+MVQ-4IF#A#=dT6&H=(gs+1|Z*d&4q%$gr z_IYr7eLi$PWeIdP>;oA9_o@?5%FVb3{{RZ{_pdd<6Gtq|l?%t4JE$l$^bLf!tL=5c z$9<;b zPeWFSE<6}?)4k+obwI70;QL_kK=l+0TfRZ4h)P2e_-d?T1HZj!uS=T=BWRm3o(aK? z2dVnjKH^w~&{<H~Kjy}htjj0{dsnnlJiN63TCWxQDm zGWbIve^9GevNCJa8Ndv#RFF6a-nRD3YirV%ak|Mob0_D3ubb4KdBDK0M%D;LcVfD7 zrhr`uhmu(gXT(gdkN&YZc_wF#wz{#6|0B<+?2_Q3Y9ejnKfw$vq+%u1ku zShfcp@H_ifgx#G{?$k{JE@{{Z0EK54k*ZVzUPq-1Qg+qm^+hjKgH%2dBQ zPCY@U^$xLjdq0IN?JNL`YsjXbhr1HwZ6yZoqo!6ZyDNek;mG`ZF%nWPVw zjIWe>`d3`4v<0?b)2z^2J4~6GS2<#TYOfd(T}2>`o1RI|2hOkQtm|bfzdrdRpQTH6 z;k0(MT1Lqm@J4rFk8|_yT#ju?*`Gx%cS^d}bv2cxK^RaNmdgS1ALT$boiOQl4FXKF zAYH-1;DcMM?070=Rq1qOsctwo|+_4p?IttIsp=D*Ki6 zOGxcxQ6h-TU=>mhexjFOg&JumfJ7YQDtG`7o@&B?U6?T|>z*nXDAuybV@3;*GwME7 z&%S(%LR4k}->7(PmQqLM911xt<-AO>5xfD<7$E$OR~Fw3ey@ZHD(*g|Dl4E2GPv`$ z51SnA_pX^GCWThpY#`d4Hxr~LBr%`Q>7Ug1sIN`7*&$UhkO)t6^Qu}bUOa$s&&B}f zKYvQlTOv;0LM&~E$eg2gf#}ue!+vpoIE!LkDMoAMS1C!-(?0$7rX}%LT zhP#mV!6*Evf=y`>x+!g_+$$X8>qc}bZSIm*ScxM6f$R@Gs63L2*FkadCVg@RE-IbA zsbO(@C8fRXtk*G(&m2;#l^;A+(r`15J7&I)&lZHG6qyvc6ihp{dq1sF)-Te+!dcom zDQRl#`4NpyZ797{_{?<;7hBElN%( z*?uWsYPx-$qv=_8yg;)%BN->Pt_AM^@U%Btix;#&h+qIpmb( zsI#xr;CSu5+1oz}b(B3xHMzPM2KFx!ONpP%&y0m0huD6?y7RimjPf#~D9bY(06odC zjdUy9*)=##zzGUCVv+X%A4==}Y1OxyoKsudNG8%*JfnKBNZ4grPC*{v)9Zos?_BGV$KhJswB{AV!edq&az7>q zaG>$py8i%A^&PgWr^9h6j@jmv!jUuNvtw`{UAQ=^!y=lrN`9Tj+S*^|pzT3-d2MAE zi+OPkym`QBTp-W4H9L_SmVYXMSd+lO?rVqsGWA}IH}L7S+myPvNZFOp222*l4tWeQ zky?2aRh-ScNqHam+pSt%-q_j5rA4|KlIAuNE2{y=9Qt;yHL~8~MmF(~TaBdovF>x* zKebA3mi87Q*m3mZEGq_7gWpYZ4_wV_t-mBGmmZftnxA$h^M0|qv-(zc<_RExIsRiY^8h&% zcT}^Q(PouqMzmmVa`g;D)prlC5LwmNYR4&<}jIJdCByts70Z>3Eh;`Ed(=5{IGH`GFRp+HGgF#gy5s^jQ&>xzuL4(YQaGv z2p*vJtD1I)4yMz~cOxWmMqkOtuN~;e060L$zaq!yK;j32-Q&_$WG^hzNwwouCt&x_ zu77M*ol;hKtsrR?OmTq2*W^#n2e-k-m|?$BTszT z1iE=y+m>=YNc624bCE_q#pQ~1a_YmeC)TT@Nfh{Hz$Bgz7^gjqgH=lba3$mhDcEt7 z^~Fc2+(&ODk-;gDE0B(jfI#3Mk*17Ob@EC4mmYs0aJecr;Z99g_@Gs>5g9y^xXm+0 zf?MnOEnhLD%oMQYvFd4cYbUXhW0Bj!k$1#P0$DOZJbfrsRJi#!7FW0nAoBT7wN!MG zFbNp?(?QtBYcprm)P(L(39f{zKtl|Tz|ZSSyYh0&j`%0NBLV=g7E-vuCYWT&5Xl7I zBv_RI{GjI)X3Ja>9}3|W5ROSd?~2cDZQ~9=KA;@cgts>Yq@x55Bs^p5Q=AmL8GVD& zYSv*DJQ&G2!v!2vcJs<2JJC~|ueLqt8(7>g2ogp;f;eOP4r$iqof$Agr{+`YDSnDb zDg1}bhDgEOr1$yMdYp|Go4jQ0Jd!>C0JQ~EBD%{FEg3t0{>SH0-`+jYRVNAud>NIb3XDS+R8XPw&PUFcdAPnYGG8VcB52(bP|=A7e8Ze)9lpk+o&qNb;NW)1 z+r@4*q_DXH=1&k#t&lOFT%XtdXg;_e;Ul_;1_*&4YIetBPpvdFa;+Jp1~w8)Zo=Jx zk}Q)L?#u2y@kM$zBG;;pr0xd<@G+ioL+zGXrxJ;TO&Hu89kJJvomAt!|( zXPgnx@Mx%T?srQPn2MGq1P@g=9VC>fs>U71L|rGI^eX* zjpQoeVDd4VxvO6WXN7?9%Mw5C`F^!%<8fLUbXSDT>e4N@iikPgkK5j?MJjkgC$}+< z#IfYlY_6^%h@nBd8N>PynDnZegNV^w&hpB~@~;46{{S?tHtC8(szT;>L6uGj;{g8v ztwU^*Ko(uYX*esMD&$v7@bQ`d0GOnbLleQN#nq}V65BaEsA5<5r{wC5*$$-)mk8Tb z7B7`v{9=Tytgy&hY%d*w$*nBWw3=s(jHns5tY6~elbX*=uH36*oMYOKIckkWw$TP) zV~yJ<1&HnSqnZSk!%z`U3XnH3-QVS(N~32iw%Rks11nujtCDzSQacY`eQ4iK*TglcpzzRrV+rP^> z?Lls25$TN*I~iGUg@+&ye0Ma}xtQruZ75VW<{jCNG27a_#MlxAJ&V7bQrDW~2#h&QP;xZ{DVUxG8qA*>Sg`xx~ zk#`V>2j4jKqM8M&+(R-LP;M&2B;ol!zK4qFgLvY@$QLR!aiWM-nS%lt5sZ3_`c#@_ zoB`2YBJju|T%0z2ii6wqtFl{T;bjsPd17)-)yJp+dgqL0p^7Go^5Q6^A{d6&+@m@5 z^m$0CuqNlk1)-mh!oVbtq&z30K%hm*wx+b4vEC$iwvpgLe1LG)-#pO*tk=-;Ley zGsyeZ-n#JYthBh{NY}}%#u&C5f zG2P(N;I&lUEXY}7+78SP*!v!9GoolWy4BsxaZ404LZ!%?BRK8{%vPVN(rGnxmMf%{ z*@~*6%O*R6#xQEiM;tmG^s&!wZyiYsJM3e@$saNQ0E+5ac*f(~8Kjzlf>KKXyMEJy z?0%JOpeRgDjQ;?0-9;Zyd2aoBT&Zp2Ts3&lEQ9)?10sg&dD>3+2P` zK&}Z&=HkuTCvs(Y-ZkEeK+hmCqcg>0d#j034-VU6t`V{ous_a$ODaRB+r+yz2@3<9 zGiTrBRz!i~V-mi_!jcHaJvgM2ZD<#4v8&jNF@0!`tn8Tqm=d|hGDmvP^xl^oE4ig- zkZ#E1Xyen?il!P_iePQYDtN^^Ofm16m~fI!|>rQw|ZSdQ2 zWbwfD9=~c6qezW8cyOj3-~ez>Z><=L+Tpb6H!Or;kOJ^1CYNjQuPU;;XTI!Ze@d(? zi$HC(T@V!51WP~-xVw3-yahXj*^l>5^_Gcq`bN}@Wzr) zGS80>#%T|4u4+p;-r69SNV5Q?VU)2_hujg|{c3!lU~yd_Op@F9u?SIyPDV~m7m8<= zHge?QagK38<&B`Z-#*;qf!~jMOMAyi%A>Y(gYAl=R;>!-Of?#bW7skn9PRmIy)tN3 zEgC(l(i5Kf7#z^wijGFYGXTfT{{SIYVVznAZM&lf3Q7IxX`u3Gd^&nO#jX%DNI&WB z>?)n+m?E9>TWpE9z5w}AO(J%8V~`dwai5i0k@v(Ml}>p2{K%uuNsGz!1hLbiwTVOp zyjO5W?%)rdJsLRfr4I58oDzdSueA`7k*>f*1CJ*i@$EycV~)v5XLYYj4@^;woXX{9Dzgbde-YxnIyb+n&Cz~ zNgavDxL&~g>ocp|q<1JIU9qy`0XFCTYMskR5-fk9U9h`|@vX zI>Pd81uf;&WwX^S=UuKqDo|%Tk0pQrpP9g{{f*U)_NU`(k9l(Y#L*Kx<8=h}kk zE>!xTQ}eA(n)0TR6Wy6oRzb38pvZwiBLsthJxRuBR)H)QuwB7#I2R^8@B*g_Lk1(h z2Ll=Ay=AH0m?a4;!5T9ONPz*yM+c9URvBT9Uv>TawJnqmhv#ny9QkM z#xwJ)*Sf^k31Mw#a^_1$d5bS-n&Jh!4wB$RJP6Ej%8%P&Y<MvD#TC5iiS&qInrRY4I)_-$o#P|=vIjl5 zUyKvkq}cVL1(wXEvv0{UDR zQ2u*Q%>v1mWyl2msyz5jD7vv-sHVYpy+w0%cXK7ms?O6pK38r@Jb*p3Ow=`LF6|QD zS;|4;c*Yg&yo_!iGCS3Nr|{*n(=M6h@g>M%`O=l7(7 zI4y3H;@mn%yUc{=0+FVhi|llj(3;+vd@Rfs`AQs{iA7j@xv}wOfG$J*aX)!Wf?Y+Pc+MH3`^yaK>pP(f^K5JcXclbLagDi0-g?j zUpgNslwPf|iQZ!-0`0-i(zP8YXwmC$ZF}Loaz@zN4h}sJ>DrekvM$DtWV*~TT3%`D zW>=EhKM_&M3}XcG?VSGDtev5WuV4;>Nql1?^MosaLg&|=!!@#NSGek%+qj(NL5U2> zy>??8hs=9WRnTUORoD~9Ob;2OQd9%a6qvF_DsOaT({@Ly>F=i8Y8R4*GQ%49Q7{`L zE!!v80RE@ev23%L)?>KFT!nmbyVsiO-Fu~6{{ZP9iy?_=lQHv?<-p_R{*{>0G?kO4 z?q65_acEi+0t*}rkO)}!n-YKsT0dSrqT!XoDjQqP*NuCJP&c9u!28rvp-xsJC zL4`zEmmCeMFfcs_6be-YVTnH@?^VX+)yOI9M~%{k{!C&q@0_vw(}a&G05MhWesx?y zft=DXkYRbpYN4(9ALC*CykmezaYd~zRLdE>k&et_LCYxmdWvS9q%*oSgK~Q9Kj%f` z(ruG18N|eScP{)N?NgRW^vXuo%QiY*FN52pDLZ?HW@W9uiT!KRG7_8Ek$*q?j@yf4}SwP#8 zdkSc{!Di;Vu~KGh<^{&$+eUMR zHFD|+Y;R0=4v!*@*;A3vHKEerOFMUXp$ee*hDI6O*}ysO2hylpM3?uEaX1RO=WBmg z-@S7EYi-t%Mv@laHkL-~$j2iJSMr?kjE_;0JNBWPt^AWaJ;N&(IplJFe_CB`;nmD` z%vuCcsByP&9P&O{p)EIxL6L$w_Q0pdkN!-XccLj~+yGpI?kTakWg)v`zoj}`c`z6u z#xgKC#YFb=!wSzVQY=zrBVgd-x)Mf3m}dznUEXYBrJh8{IV7>j1a_gZxAO+v=hCKT zA=fw@deCv$7*-h_;*mkymBHF@e_9Hc(!^aD?#TSW^F*U0ZDjKX?l`I`rnB1KT)VQE zq*O%%A;~?n>4AenG_K6pwusK)qn2~d?^XJWIcl-Ra!R-n$sRYJ`Ss`1{{S_ef)+{8 zxn;=Q2=&Dr(=Bdw3HGi4&NpL^m-eR0>2?(@6=HuIQ%hyoR6Y+q{r>=JBdgf7vPm3q z_;G$^Bl73`zLX+c8Cm9Z-|s>rc%fJ=V;v-(lH8!>s)){@%E;x)U3 zbvepz?lIdL=QNYa$FmOAp@J@z)7Wt3w_-Dq=Ez`4?0mheJ8p^a_xZPZ7%1@A43#;@ z`PTmct1V^!0Mc*az!nynRdsfx5viQjFoVtPn#~U}l(ESLhV#t&n zpU7ILuzj(WH0WMck)w&bu>laVJPh|I8LbtK^6ArJNI-cPAAgv1sB3ZCUO>uZ zQ3Q)3?O~8IPoN+9`p~#Ikqm5irhL11 zbMMH-80#1Xu8VsDMi=65JZ;&*=O+W?IH}2~$s}F=7TL|Z-5y2Q757gDAm0B|t ziOgy^2aHpt20L_e#O)X-urxa2SWUZ66pSW3U>djMIM>{^(?xRPHgX0qLV=M?jZtHC zGPCEN52v*QhG`;@$UBjaYUEc-8*eJ1w%~g6^P?y=p;Qr7n(=S|0Y=g3im$=J!3Lg~`TZzW3QCdXv&aXx%81(K11qlOz#y7! zpbrx)dv^}Pm1PQm769k7RHXR?ebUBS2S70KWwYpa5&l&yVit_XzTUEp%V(0u48#z=-V zl>SqYPqt`AbCMfj-kP&*KH%&tJS@P4Z!S-68~ROqQ_*KS>{ob|ej-v^!UJ?{Pi{E> z08G+a%P@62z=h90Ix_{<=~N*Mv5zSoiTUT6=9H%yIU^=LMXiRZBig{yphal|a(CmN zzz_CnZC_#3;hq?pBw?0c18E!#4{yBL;tuj#3%q}7z z#&M9tKe4GvJvj{BmRfQxW!r^>C{c#m`R~a&6;9q~7EKOSFvKY=2yau|bKBCXo6{i? zJE$w)Y<_d>MrqoLL|~P-tI5GEK)^iuf1N6YQUFIwx>zJ6GVd#qwD3o_HA`86=8^;v z6XBjo!2llQdUO7DMkxew#9)dfZ1bKopHWlX-@NFt$t1gDT<|gv%bIA$rDzIHiS*le zZe_PfVUvIb)O|fG3aY@9A291I22`#cnP&IGSk8w&(~xe0|j5amel{ zHnwA1`-5!G(!fUIyyqh&agN~n8q+h!9pPyucS$%bB*_X-E6;zQ(t|~8Eu_?$B~~)X zL`BDZDfAwkWmWv9_&UBu|AY~(DG7xk)FJ(=FS=JWx8mJlOrmVAv-X6=RdU((ye5M{tJj>DH1mC&FS9< z^{Q9t@cKuF(Qke36p@u|pO>u%CngxA(MR}}A(>@Zh)m#=?oS+1D=A*e!EPIf50o>$ z0B|_L?VnRwX1H|SAM=t>e=6~n`}$PZdbCmLtpr{h6OSvXIX>cqvA0PeC%u!TQ{CK4 zEzp3MK;?vih#BwY{-N#Os&zbu?&dg<$0R&HoSuFP2<9g36q4Ro5^c-D|Q zNIXo)hqiDJZ_=dIH9Lr|t|p384aAML(*TACJF}l$)y*CW;4oWia@^VYbBNV|;R7B> z^#{EV)ijBxy}6RkH=5qv3&}H(Ml;DKxZOFn#ac~yDYOwAP~q_=a&yjpSoEb5m@Lbq z1(iX@KD~x0y_-O`c6RM-C22!o76aG(UrM8>Sle6ADjya%CxGCRtBm^nsiP}&%$BTo zPqd|OB))j$c0-48mQZp1z3Qy8VI^B~~qnC58 zdD__j0A{@_D>QNh3<20zAZ_BAMuMfpd^z(8QKVwScG5GNk6LIF3@i)VWROcW+^?hoFtsTv@P?^&Z%rhGSkbZ|8)4^LBF2Y)U?1Bx*vX~LJx$yTQ z{ZBP{q$CWO1Ww*YVURoa1JZzKTBX&FpK}~Dm5P7m$rq!8>S&$KyjHM7a}CP5od|dd zIgP;_`*WJof>H{cx<|EnZQ2OL3SziHiAQyF=yB=AL#G*S>>l!4W-w>NE1baZorL^7it6Fx#F`>+>pc52Ony?l3^fafvqTPMc775(z_)aShoNH*aK3F zjiNQ!p|ikK%?yAtVTvCvKp=Y5$jq)*U`FpS3Nmv@;4%tHB-ghp&Ka2#ZslB`l|BZZ z-F7L+`Jm2yYNnkl_~Da<1Xasf+`PUzIrDi)9mn3GO?ygP?UXu#Rh|fh3>>LEp8o)? z3AdJ5@FajXcq~sC_NjGwk`v*^!H_vIk=Xq4No{(Lzs{Q}>Hx+o(MhQEMSdpA^LcJ} zBLKM11DbS_y7^A^1JSsvQ8ltiQr|KM1Sw?=u%B;geZ8zVakI%D$wLs_`u!=~l_tmN zw`X+E3PsDx$JBqFUXYkwMZ{P=_K-lV>)PGg$P9=TOJPW0ew0~Yl2{CqG?KnUmuKL5 zW0O&wV)ke9f>+=RQ!)&N{H0qwdr({H4g59lnP9kV=_$+R}j()I&9nmeQb+~JSbQy+)h!wwQHswO!pI4X1{`iZk9_fr*KehaBDuW_nokOhmhWGG&?(ef zJm4m^YKdzchHF_cgKK4pPB>ysajkc&Zzt7B)b1pP-K7LX`ELku=3Mdb!TZ*u zsygl+M%L3!TUV8mO!$o^-O1Pk?VkStBUsH|`p)&YTiYPKhyY8Hzz=SH2WnqY>nYSW zaNxyKxhsn5!8)~;lYOjRU1|4i@YBj<{$L8rlh^@O;IwEp7l1m+6CogX;*(KWt`%+| zghjQs%McjYeF*s;X!lD`B(~a(sy~`o8KXZz*jEg)N?T`kC|csY75WcjA_ zV1-sA%16HHlg~S~{Dq7iZ?hQMdRivwZH2%fsU?pG+)*fcav~rR&x?h8k`Dtv<;6cy znIpN9DA`j7cFy^tcKggrJ*Wo+I-KO^)MB3|S-7WV74}rR({5%*otakRJOH48N`cL3 z?XFyD$#lbWMHcB7Z+)wb4}6NC_VHaUq*Kam<{MPck zG0m#aCC!|vU}Fd}rFXFBKVMqeTjiiYUNam_s!2fG0q#ik?e?y?P2-$Wf3^vx<9`P_ z)w~1n&1(#Rv|!2`xo=jX(qk&@>~VkqJpAjX+}lNGqUty4YaG`wl#N+OmJkRfx$lzL zz^uep>ERh}t%6AVkd3(7NbG%cRm&==%gB(H++UCLuzk0~d@P?1%_CrzMqCfLtlq7l z%Wo;Wv`|sbL~H4qzV=rZvypXlwvcnRyiDiVZ3c`-3M4QQFnL${!OrScCyCm3W6CO9 zMk3*5k8a?6Ksg7}p!k_Xg;pRROwr4WZ{k{%=11^UNwBaT#yzUtj*X_zbKqLsN@Zh^ z&Y*=O4+Z5E~HRd4r7f};IYSlm;=&`@~@}u?9uEt+I*Iw+BVE4Qxc4FeQ*!2 zdb89TEEm_2$^l~=AXjC=_~x%FmB9XFb36*4oU^X{uf%kwWaTw1tlc z2Rsj+Kd`LkwWdb}&8^5LH@K6^AF=1swO6)MzM_}6Kg%-Z$R4S)86L+uu8gx%r{ac9 z)s<}Tt|Zi;jme4$)r@cIR4L`XzLk5WZUk0S$ic`4M09caTRHFaBlW8G7IBH}qh&AQ zEXp>H7mT0utJ+n(w%Sag(nOHEm2v6^ImzJq0r#$XIMo?DJ*~*&Maz~h$ zuo$f7y%Bzlj>cJtXi1&UGvb_meKSWj_Lkz=UIp^He^YHaJ%~SFO3q!qy4)EQc#*6| zDFJUTPXuS{&)T*xADKB`=+tysTa6Ojgj5oS49&+F0Q2p^?@-^x6!Xa|#_}?%tSqB( zQl}s&^e5c|-#{r$UDE7;+l<>k3Dn^m=CjubflVLWH$%^ZoX?j;W( z;z8$q_$2lj`DUpbeA?}2aCdmFPDmhRW4CH6FAzBDj3-oR<4-m+iPLr5VdV@q_)Jf4 ze0JuYW1?EzbnKomWxZJonH5>EnEsq_LGSX%&b3`*rwi>@PKHZpqDW%wzymgW24Rzs z0Pos{Y92P8@j)EICq@7yPInKPz^=%8iAoVyurDSmZ7$*+ra5A`Qp5urXWPH)`x+yr zX}33JfQYjw&d`}X>usisIM!(HoXBPzIgfZ&=L~c8`O?J31Z*ZH3*Ox9@jutoiZ9m5 z=^*rE;%jwHswHVxf~N~f9G4EO@NvqnTs*VwN8V zPn-EA{9ra0Q^TKHS>{V#Ox=xrD&#@q2k|2VanI)aj`c?B7+x)Zb+w1Ho#<3#B zX0WkmiMjF%n-G#tv}YgYu<>nvXdKG34kOB4!j~O6Rd6hRbg( zGXoeT5y{UZ>sq~D+8Zb%Rl$*%{$YXi{?xCe#E_PfZxxwFHiMP_09vGTsH^!89hrE^ zRq-2uI2osS=w%PL%mxP>AM~f)K<0Li5YlXK$_F|6cdEu2NX8q3$i@i8Uegt_bW?L9 zcqqk`WbNkz*EMfK(&nD+riL~#CoarD1DYjhhAT*}bn8}>j7K|w*yqzdvs#TV#C$R= zkqE}@6z*W+o>a-H;z#Ld=AG4zG&CQT*+f3 z$cYq&R!z*~a)1U-PXoVx^m4wS8Uopwai~nCz?BLFUN@3PP#=EZY|!lv$j_;yGocEN znN@+|M}FMa*G{sM+oiAOSv)BvUBS10QJi^k&PWHJokgcv+?eBzHE5%b2Wcm6#IZRC z)SP1&>_souNlK0Rk?D3bjWT4qh^NEK8^e%;<;GP<*thFMx@y$v+LW+~0>y9x!yp_m zUw@x!lTNo2Y3ADMR`Dc?M1`0Pu-XoNdtiUFS2QHsZY7=5#7J4gK1K)td49l}DPvl~lH{9}^w4a43!A5@mVGRsfKFMh1UcNbOCj z)Y@^r)riY0V4cKrc=xC1@t7}dO~z6!z6^ly6^PHTIP#zNYBj1sO5K)k<%zAPQi4dA z4Y@n+BxeWcE1lin%(v6WCiYd3c|&a_PqE|Y`&UP}i6gYTiBXtsF05MwcQ`-aA3Da` zX>jUSOxFnzTz-EOJPzWzy)9IVLhj9vNq93|wE7%V!C)mY#T4#dL>LEYZpWOTp%qv0 zCUS19<2#IG@J~1={{Vm}k4IRhou?Fw%F=EjqkQBO#z^4Pda@@r^2`b|zyl6QQwy%$`INjC;^{Xyr4#w~2p!U_DNJ3#e6DhUJ$FnKevWIO>{jY3JR^pWC3>f`xy z5!m}@<=(QEw}dfWyF(L#2WsiXZY`sTw?EYetuDu8p?pEf9# zohn@4#{M493MC+8j@+Dk)PD}IaU_7T*(M0v$0wd?UPpB!ND*WlC8FLdu zJEngr{Y7i9m3%26w}s0{`=jnkfN`1=scDxY;|_opP(TMity3Of3`G}U+X!X3l=x9I zgc)EedtEk5%UP}#NaI+$tDF<`qy05&HI(wCp*FJdAUu!vikD5XfrP1f9^mq4ZsIp{ z>5ocT`igBY11;zasOhU~rb6N{WGBrcxg+mF0-s7Z)eLQ~n%>pe+J)K_XOD1CtwW~h zmp4lk94(N@ej49k)Sa0hzyrKFXl+6TC;ygD_s8z!}cDU6bQ z$9Hc~d;b9DvA42FFQ*g4VsghQ+?AxqnPhH^v_@TgG3&-L_ol}w@dm?+M7Fw>U&4w< zROQ(ekO$A&qly{xl0jbl8t7?IZuELm%roXVJ?W}Q86TU{p3d8XWDNV#%M(Na4z3UQ zeJdj*I@&`V!G?G|){557ZB(bj7m-pj({53e_6l=@`&MekOLV)7<71LbeEF6(!+ooE z78jlwZOK@M5qE&xa5kTx1L;uDE+Op82xU5uvr{UrYYSASZie-bKPiC8-`FPZtmo-hdeeCwaMlINl)`k(|f03^NZ=_Z7{0 zZutzFblU{7$1jA~&U=O#{qS>LTKQv=OKH3>4cS%S3J$^>1QYfKxqU~rTPusEfO^_2 z+WoR%;yG2N{$NlWJaO~mik|I!J!1TMd>G+*M2+SV@-jH|`%w*A-67W?5wvWnhb+YB zxW-SvdZ&Mpb*Wq*7I_&0mQrzy45=CI_4lbMT~S9Lb8qZtvHpd`ljz8)EcOK-L5opIxk~@dFc+sOsN-7p1i9S#}jy~Mc zh+S<0Uf#5kBs-aujm4M{0LQtiPrD|U!24@&`74%S%`D11uHbDTE(m#!fmf$?Ejx&`XEc;N)t3Ym|w3otEE##9q%Y5<8H(#7xYBv(G zV6dH`0+EySsWj-#)r9RZMsPrjb_XPLf)0CktHn6($+dEzedXk-aXfJ%Iw;x|Jm6>3 zKJ{}?x|y`(fccQ%Wl&{CeLEiJgWWrAjnzCn1C(9^VD|4;T1K_9R*|;DBzx4Zax=!> ze*XZaJfNBnFK|xaMDVb<0pwG)TW&CYb5UuqNR2;-6BbrYr0{d{K7;E+A-NXQLLn^N zjy1HEG&Q*kKXCP!&?(WpF(K6*wf` zfhk>$v%6^BRa|pP_V%Y}OD6cFg;F*ft+!+*?3Eu{s~nyolfsfYf#j*< zZciU^#Z|j>m@eQVbmIW`A5TM0(&UmWsOCcmaK#6gIRsHrrDn9Wiu$aPwdzA9#zKL} z1Smg0dKWdzMREy~Iq&qVmuohytIwA}BOYVn?NA5ERZ*lh&BV?wAXwuAXe@H)*kZ35 zN|+y$(#h8BF3!#Zl^(;^kz~H~Qj+P6&~&Q@ z)uel^QaG(u2}we+F5ZBzaaz}FDB`(_O_x((1)AN)#cXyb9G^lBVJ-AK_>xVJ3bLud zB!Yg1uW3(t4Uv<6;0|6n7auP4xssmKG;JCe(~hNLEUy+w*E^P6;dcSfImHf(LJ+|r zEo{rmq>SVi9{&I%N|%e_BE8a=&NhsIIsNKUszqfr%n{ou5;2WlMkIwknEfg-=N$|6 zD@JqpRqBRs0hu>rcYgJ3+fA@EZyN0wJma6G7gq6PkcoT+RoWExBxBZx-9t8=a~#CF ztBi2j&(HL$ERI@WjXjJ}I$B~(?RMN4gMvr3T(t(;11d<76UiD+gbvPLc#CQADTvIi84cWU}vQ1`k5x0fO z2Q{G6I@eOM5-Ko9AeD$HWjXJ-9OsPv>m6rwspaqNrmfrCPa`bq2~^~^I|^9JP375mYGwIqg`RyZILCNEGil$Azkd66=PanEge{JZG;N~0MAwrEbBXLo+;5fqmh z1=s*N#{lv`4ZkLcS*)5>{MOfyMzIjPnLDs2zDIwp3Dt4EqHEx>s6lfC{xt5cj58vP zat9s#>9$&`X*X8Wsa8}wlw*VP&$SR1mr`7dTWHdF_huC=04jT_&un@c3wfqA6G>xo zq(V;kT%7InDsle!rN<>LHW;@Tprks0zQ2{?1Wz*-IOMY&_M*18F^hJ%k_2g(Y{|eQ z?Lp+x1r>JQjC+#5wF5UsD$wpg7TG4pN8kr@CD=Qu9 zPb4118XKr@-U@)xl-j@mag+1(6h;Z!OO3K_FeB_7agVoZn$F(c*uy)ZxMXa*b_dXR z=BDJa?n7~Hr4uLAS{!o5_bBcd`4PYXHaqb|G@E&?Eu&Jt9D&i5i1~NTT$<#>Vu`KN zSo!3W-`sxmkX{%i3o>|?y?g_tCAH1O z(pv-c(PJ0#^!1v~vV2uUc zwW_xCh#9bnhAoVMPkeS1MZ=gZXYk1^Vvb29W#EX{3aj_cPjeZ9`u6dVtcuGLp5H&z z((e?>c>rw&5!c z#~>fm-mKa$!^Hxqz}m_`sOKE>_BF`cq1xRU{-o34yS%prl1Z(0lt}o;r$6|jx{BgR z6tG|+G5fCHUOwNw3)Nzn>I&#e#U3{9Z^|)6a7D92;l_3*2GiJ%`99eFY3CxHFGDGgjJdAh$06Ij9AtX-7p#)htZz`M~KE0_?3uw&B zt0OTbLiga13HftLD(uNslrGFtBytsUBL`_MfPR0yMR5hB*6;kNwy500*J#HWA6jgz zw@|bKcTXyk(Twrm`_!5}!TvpYY{-c4T&$T6&wxfS4h3m!ZuIT*M{{T<9vQ-evv3*9ZW+M#&m2~N zSeV{PA%YBBDr|+^26f2pSYRA;jy-C4-O9}+?XkL3%PcE#AdR29$G2!-F~A=Evqf&* zrtyP#Fi9H?@@JI?f;-@f5Q1NZwzZDq%dtrVu>(B)JJavl6lE7q@;f0>lsx2sJALR$ za+QWx#HS*(B$;-B7DD)gECDB+j^_l_8b!J!*B2Uvs>vB|BgY`#i~gT%iYAaO7YP*0 zh{t9zo)6#s^H&o>Y3^f+$_bx)4-wunRmX9+1JawCR)>x|qA4xzo=*Y@*&>k{1ad~F z0QM*QaqU8-u#)2L8#{rpCJc(if~0z9&|TY(U)MQp!GN}Zd zJ9_i&&#eVFe1(enFi_ZCUB=R-vys1PMg(I%xHM;_EuC)O6t<6eOr87_>T#ajQNEzP zyVowFy1WuC)P6@V7Y+wvSo-|=^b|izf_t0ErH*EeUggygpQ^T#RG628!CCw!4br{uw5Xw(}#hDIUth zw;An3?zDSWvANY^l~vuy@L`lb)CT}_h8$y@5PnpX$!ed1s~VHEXXdnu;6V1!MGHU* zjj4cs{`HBMOp@k%i=Q8J8AvJt3*Vd*_pXI@O{~hY7+JPtrrebt;QQvH)gXBE*<`Y} zMh79)hpsY8k@fxPVa(vQEPi~0{r;2#r>vgaRF+qY;lYeCEQD~p^9`-^O2vN2&f_U`(@kDib{{V&Q@;uWjw1~klH)XN@`_x@Iqr5iAZsytI zfhOp=1P(|b{`DrfZ*}WfZQ4eUPqt>2kx(&L+M{;^k?+sFQMkF+ga!CalSK>J>GH)I z#Wa$Id0Wg6J@M=Gu8TH`%cxp1-K6q&W`t}~4}Xv!A@5n;8>gpM5Z#wB!r6snjH40d zImbM5FEO)ajM6~CI? zovw?!EO{Ui!5G1&Y1%dJpQXa>49sN#iHC_4;2dE0!L0%$_E+mQ%A0$%Vi6{N$UNBx zJ^OHelv>_s&FpVIs@u&YqQ>hWWnqk*j@Zxo)IW)M@u)><8ZcJu<2_hHYiYR|7) zmQ#$jIRpOCFah~ytaSNVFA@Q4(!? z524SXKD_bustMDUnjG*$q{ys~V7=(mSHUX=PZvcave>z;S?m zfyv~GgG%Yko8J=Z@V@c`##PnYL_P8|oObs0qVhwH&FL9No{BnCh?E%^%O%9kBQrR{ zfDQ*8z&rcg2*t>Qs0fEmMKAhF7 zi*Xg2y24GiQ+vh9Vo!1E1~L!UsOFngFBe@A=-X`|npmzBs~}O8<}>|4N$=a!id{NX zSj0CmT(>?|KyskqWqpUw+NoNY=UL?N+iFJ4iW@Ryo(RVPXCL3zpDRrr&A2c}6O~nx zFzlq9X9F0{OaZhh zAdl2~^HuI#h5}TGxfmtS1K%Fwx9v-E7I|Q|Zx&f2BP|nPWRFpgwMFfXREKIV?+PL~ z2=St{WaWtf=a0TA_TgSh0*K_F22?p7T#chVcdE<$yNF&iVQ>|J7{)ozf2lvEPnhOe zmR~6wNI#Qk-N(6 z3kt;F@bUe6KaZ8o=MP%wM#q~a$AlNf1hTH*OMtk}kaT0ODn-016OF+0`M%igRpPmrL}Z3FUD#GF&Pn$9RnUzZ6-|$T z4;{ZxN-|FDDKZ7M@CPMcLUyP@jQjCcbbC~LvSp3TdorW91D;2%OKFw7@QR|T+)Dy8 z^TGG+RwD6|?)AeLk~pxWk;ypi??~+hK_fS-8+lW}1I+GOlyIaEVts1Gl)1N6QRQ50 z0APSP?@<_hd7kCK@#5nfG6>*etV6nch7pk;U=Luv!wMO7bK8W#SYaY3VJs#5$NP7sK$LGOdgqyUsDl?nk|2`mWMOo-IdY@Mm1BA>C$P8msWAf2Z+IC zk+9e!fN{v@joqk)hKFya!|}E-yiT$hr(YL#)9f?ce8xM~a(bxB<69N|i#JxfWsFe= zmSvQ%M~+7X{$ETClR_VzfGZDJGxd#XBTY5DDGRaC7WyC9WmJ+NAy_)Mq1V5(d>DDm|xN zcsd+WGopo*p$yn0Z3iIz{dlV6kFjwU_Br}^4;^KZBuN7mkx2qPfK{{Woc1-Gywl{e zE{!T-HnN5p-VgNy?UCEPAG_4x5XWX`m1LL_lSV*Oj>>X7eJUw;{1ur5Isl2v`GXGs z0NhrD=D!i2!KAW*#iGkOKqMjKJ2Djee7;op)*GRCmoT%sy0I~^+>MS3pL!c?(#a#o zJgiWz1GkiC9lP=A`qU{BE~Zt9Qa>xGUk7S(^j{L%^a#No+TUQi}NE6&7QyXVnf@HWJG;>699Jg|D^F68IYSUqBRuR+fZLFgTxQg3&!Ue%T-TwZyv0I-S)5C{x z8$&6<8v$vQ8wraT0+nsH}w! zatAmW`_<^>ce;{KAu{{Xc< zB^PWXjh1wm%K7etgU7h_`&A@w9V9Pu%J2o0g(uDLw0e$ey`9s;6HRWiyELXao=y%A zEJ5v%I3HTA3X(K03|fqL3?pKQeDQ(+Y#e|Oe#4LNSqV~G8?8rFnacy^~VW7Hd zda1ooS<`%KuN(8&p~1%<^akF+Uh`6d!f6GcF1y$d5l3v})Mwtil8fk<+;!c${0+1T zG>>;Q(kmlyR~W`e&ow32jo`--w3lRYC~q#{t%@h2T0v`ZX?t*mn%i##=Omnd)ji~k zs$XA6q$3oJfI^L+5AkO`{#34ep;D#EnQ1MrTH$1MbwIzH*KHWQfo&ccQJO^CwO<$` z*OB+8>6W)f;pCjWD+XUIc9#RcCnBJ^g|!I2EK7*l_Qrr?JmcxbGj`BvG~~$*?&({^ zXAzDVXC;BF_lYb`69kQ6C^nMAKVOvwy0*Bnn55E1(&rvV4g1j(Y~gK1!7i^DlMD0h zO5m2zmsU@H?JcN=-Hea4c~_Fh(0!;}w=%|pCTB8&9eK`u&M5kuRDp+p&|M5NyPr0G zUY}}*UbE4X3s$zfyIY2hjGiT-2<|(8eLZVM?x@N5GN~`d>IN_Zv!)K?kXygni0N`g z3_!}M<0e2y8DF@m^vifsC!HdLFNI)RJ9CdR_MzQRYy3U;$0HvQW6PyX&|YiMA!fl;L`xtnqh?d^}AD?BGOtDzCxbV{CDJWV~m28gQetZxdqzfai97en8ZmX^k0EE5oNUI!WFT*fK9}F`WLjX7#M((e7c`i87Mu zF2c^ldSo8oYOi{6J-b3M8-^Ras(<(uZfRnY3#l!_#VGRldw3x5NIsRCcAFhf-9~Fq zmf%FJUu0)KY-1VkQ<>f{7F(r|cU+FbgWa3UDK=aqqOb&R9mk;+8c!U9G8RHTal19s z^zUNy&!DVyMY+4TebXhmSxhN9xrs14<$wn{0N{OUi|JOfM{JXiwN!Cy;0uPIP`D~K#~ZT<)RHrt`eWGBFI$Dj zq4Iip$wpkL!QEI5Hff3yvY{%%M&$kd=xjyrt|V4XzAEiNxEzkcwtBXirs_U(aW}=y z&gOjQ91pPVSv0Vg4Mk#}MTcVoWc2xSOOHGrZfSe49Zq_l;H2%u$; z*b1`umbd9H@W2K;K9!SxmhC4=*;wQYB<3%}bgR!V&Y2Vm&9nf9{j$KJ$`2PTcZK1Y!MYr?F2Z2@f zsi(7fE#{YPqc8=BEW_5UPYiL{N+OU-*#1J7fb4Ip;qkTiq~!4Nru(4dIV2 zaog`p2A^f9%+Qzsk{>F!a^Ae3zwb#L@q=lt6V2M79+D!nV=`NzOa@UZ?%LVTSLIp_ zX7z5K#^%}wHth>VBa|n84{`@;5jBw0^%4{8V7jOfo$7->nczlJ7DK3A+M{p1JpzEevG?L3Q2WOKdvQLN4EJ*M4 zsis6*89oB$8Kkz!WdP)#E*rB$U z$HXwQBP@}S8BX29x2N8{CHQQWrs)fF;lj-#Tq3XLImTFhs!OY2^R%(DlM?Rp<0N|L z^{Th_(l({=;3m+j$`tO}2?NdZqLN(c4{vid#II`m)-;d)p<|5h+y4N&6f#QUni`T@ z?5}^O->sV5IEj>vpUPlMXO+Ml)OOYvwsxVft!EJty_}3~U$3P~x|0_nQPD`tp+Xps zf0w-%Xy?8~hSEtc5>beOlOx|GdvQ{E=O1fBC2G-4wJUj6ZQ@99y8?m;BL^h=pYK&I zkV?-O0|z-B@xcT1?^ODR&8%h-y!P_W=X`Tkh_L`$nTmfPhgh165j49sb~Y`jX( zk(oDb@VV{ZllAwY%WXWjGcCL`9|&R8FKOf}CXg{jtqfmdbgxiPBJ{ zUAl;5Q`-y4VcZP*){68A??guj;fP`*ZOypwydOcI+KlB@Lnt@4R6%iWw(wl88)t|S zUk8Kh@)^ZhwS2}5rwrk;0l^&ipcgl?O9){!OESK~`24s&pIV-0Rj^axkqnB_@AU^h z-#QKky|zno=Hl^4jT%N`OB~^jdHYl=Az3zqwSZs)bGd$>zG@Y{9woGL##sgzAo_cZ zRhwy8Tr5-DL~^7I;1wU!$^CIhp?@Nzlc(}tRXY>|v<=wE$L~{K+{QGxwx%O!_#pY2 zw-Lao;JRoG!cF+%T=IAawmx+wwX9dSaRZYQ@(Sl-l24cCiqo#m6?!S&Tt^eY9swQ7 zN4z+bk)Attr|9u4cI|Xi#*#c3Ca_M*0c`_OLk_SW7zshL&~NVj6D8G@1N$nEXxL8iWSy%um>DUWKBLhmof z2A1M`Xl1rrdvzE801%EQckux^7%ZoQ^yZ0Of5@y?7YM3aM%-bDm3-p_6W9-z%ZimG z$D6dQOFLwJRzu@N9XMhJG7q=k`_S!H&Q{m0;fbSkRmv+dAd-Fm0N-l40k+w5eH6{$ zE9^kYo-@ZEaZUKNxwVXfjPY(?H}y9d$@zbsG+T?YW#JGc(!I^4_KV6m|S!*WldJOTR*R?lAP zZBM2&-;TL4p_F_+)okSF@`fCHpP;GaRis^1RrxPPt~J6duCX+eL<>TDl=@(vSYy*atwHjSUQH~Ko7ySs7AVm`np~+fyB)zn%Mt01U!bb6 zcuvESSsD9xU6*EpYm^c~OT<&n8_HE8U^|X~Zh4`xO&lUQ0AywJhYSf| zeg6PX_^X<=(6iE(%0KysoCfg%Lp!uIl)5mm& zSv-1v@yZMBnlQ?9#~ciI{{T9{on2B!1V|=H0|v?3+>QwJJh|MW^1F z9z`fNt04sWfZ*e}>^^mGURzyCb-0oh-r&ajq}1} zJ8|f8G4`m>Skzx(lexBoQd=9iw8#v;4a^~BXDiB)%7dQc)QXhByyhbstOPSD$lc!* zFHfJux3rRW#o}$;pnhT7IX&@74aLG;%<{?c5DbY~M+A2tTytE~Pw?2uu8P;8n^2Nq z5w=IaEH@kuNFP2wVN9CwS^;n&Tq`kD+(!O#dG;W8uTS911L_|R&_*j4}D- z9DCJU3$?dz4k>;j0)Vzi0m1aa91Q#WRh(T|yz2htog!#%FDHcCtTPtf;IrT&?am7y z?0e#*ZAmR<7I&Mz9|SWvKg%TfMnKLpPgr0RIJZydIVXIm8IUN*0Q*wi>2Tgd;yI8_ zD-5$AAjiKwzTUMtIHzISMGLljYlAg~z__*wcgH8Hk%Q^=6<<;y{(Y)l9_?|#xai5U&p_cllqa5;^ zP{Q&Yc!ijGf$yC9cA(RB45sQvmN5*Gv1Uk*Z$cZNpBScb$vu1qITUr^JEz&IZfHDE zfb+Brx`D{!zE2-vL$x?f#_5FqQZ<4GMj4T|?a06j*!xvxY45Rl{nfII&9A4;qwq^%B>6{h0xJXPgWV@MC= zUT{8q^MOojh}L;l;2q9dA;v8m$2?&aDB68KW1nwI z6{y{bbs=+Uow4O{lakzwA3`(l?rA2hwR>HRyn^saE1A?O;7KEGcR0y71GaHgZW1?? zZe=k+9!@(pIQ!?{=Tl!#Exm#pgbgzWFCocL*gTJ6^QtLtEdKxxZzT5dPjZVRNZw!x z;3>z;pTBB?SGIDnZl!q`o5aB-fo-_J`~5RnnY9^GHAw<^yn&7}>)y87pHIx1b^G2c zJn)i=@s2W}VL--n$TiIco#Wk@1QMCmyvPPf$pC(&fnAt5O*-%^*{-*}id{O^XNj|% z9B?u{Y0DrnTuQPZHy?6~jptD%u2d5b$4PTkUXU$3F{6ei-(L#T-K z^Ke<=l2&iZqX3bQl~1O$m)79PFquHw%Dut#`%<)=c?`C!lSYju)Fl^DF^L?7@Vw1L z&6GBB$sCQ97$LF%9CjpC7;N6sS6Nh}BLF~t8|Dwc%8JI8bJ(OelL<<>%0|0L1pAKt zy=#**YFc^&LRjgRaP6L32_s{iw2axtd*}U%b*12VwKz2KZwi0ckjp4mbwYNk`{zA{ zTDiEIOA$Eo`h(A)><2tk`h{Y*xeum7@!OT~rG->FqY;lO^-?f-tbn)M5-Ew~ zG7cLfCmqIpYTl829{7flg37^H%1bB%1LenT(#so8;>~DmRu>mh$hP~WWnIc&f`c6K z`+L`=@uq;PCglY8VUj+C({FBWqP$q!BsvY;@HiPHk6)M0q-oGui)&qli?L=Sa~=Wj z!S$=f$*X3P(N5agp7uUUlp8QOB=g(Q{V1Qp3!9kT-Bvi)k^#*jT0rps8T1V;;xg`W$1i_WIIk z_fa!u?nyulP;TdUr*CoJ?M5==v^%OQJep1Yqchp;mTCM!Azm2vAdlDesAAKhk8h8N zl^hgi18a=(0PpjuB)zt@)N|l0@gtlpk%75SxZ~|hsa@LLJW`0Gj$pf4F|+}JjC$mI z`qORc2+N$y5F_7!627)rdcuRWZmP?Dws-k_v@wklf1-pQ8zir-XO2$XKyXIKUq<-|0}=tg>lK zsw1(QRZzhB9f&+I9fuw2_rryXMU<-{O~yH5&Q$uJbBc)?GYgFDieD=2^aJHW%}&87 zqh1!dnamPHI&H!nk>?+q{rb^Pp0t|RLs+C!;fdHQHV(yXd-K8L6d`AG$LVJo8w>X93VJ0BtA{+1a304lS!Y~~0e z4H-~2leF#s0LcFUDiwPy5)XyEei;hIB8(h&1M5=jS4!|e$d9@L0s{GC?2Oge+|$wduHfOPgstNo`EnNR)2? z_jVcdCadW-*0z@~Bug2NZ|QU-ZXNg(^t_i145$=t+U>i6{_#w=xHDXcVF8q3(1VT4 zI}ul>R3x@llFoS==fR01P;jS};P*H`TCJzJx7Y6N))MVAGH-0EsK)@~gZ}`UG>+0= zLR|AH|#i!^65kr|+M9c{R zNXhrA-8*X(eLW1fkVz=?due1qm4$IN^D>WkZi zYh<^MHMfBk;u4%FW9~8g)`b0>e&Tl1@PQhhnG-BWd5j#s<|lSOYC9T|-qEdYqKTBv z2?GEU&b)Dqez>I93d*ra@{}8j?O!j<xekA*f29r9>=_^p9l^NU!>Es7PxY#*=b$H` z3}8th4{OBwiT!!3FoPsg{@BaXr zn|eSkz9($(DcoaYgP&prJKs!Ji7oD;isnXZbzvV2%h-BUnoxnYLhl@lXvc6NL1CWQ zJ+VV?qW$DBysV2ag^aTa z4{_;=sd+hxgC@$_WRIRbD<##Mwk+4u zN&Lr8FZFn102-*0EP>gJliaB7O>YllgCQCFzy&XXo!siZcmUwusAUPn;8yKhBm5%XDW?3oDWokPh6`+)z}!ky_jx?2$Q@ z2@H9_&(4ah>|~L)#9e>@Hg_-nXiT0G6D_{)5Bxa;nuuRXAq#@X)DKz?JcH0vUVF>? zJAWR37Ty43jY%0noZ}twS*W3sOn`;LoN-!Ix18EfaPdgiNXz2NibzcQA8)T}2G>!f zjv@?W&y|mIDY4pAhHllJ(^-~TZ=c0~5++P%up`)>`OQhH#T*)XK+hv896MxybNhYj zl<^4}3;2RELk41TjQSs1sjKV~GKpmg{UCPwSCG6Ou1|Cph@-G*$`q5tRE+H{+;UA( z>P$ z2s674>+`9a+8E&kHt9n1mgM&2n!Cuit=Kw~Y+Xf`-9y`8ykTECBPc=7_Ni9t-tNvj zsHI4wm;SG)&&*SGTj*@G`xl-Sbdz$iQQUgx6#H#D$}4$R74Vv83ZQzX%;XP$U%f|{ zw`f%9vg*ZcHI#1xsma=K3C}eg=*-DF>@Y_l-|oZZPtxI%2}%NdHr{vc;GA*&sBE{l z3wtf7Oe6Vq{?(AeKihff;OpnyfL& zzp*CQgH@yIq1Jx}L<-CK3t$d=k?l~4ekyCDZ*viK;Y5dbr*3%9%7?`+r+VuRy}B*D zSxC_B8$$PE^zD;TO7UB|+e(3mea_w>MA?ow^*OC93hj0>Y$JKDT)nNLTrgM8*yRL* z0Qq(x`&Er9?O0s3%;j=D1mnyB^&EHk(NR)`Jr17!=7RqKQHkxQk(xLqk|7e5!D2h$`%qh1 ztzS!WZUbDClCmIGv7mh7lYSI*4viG8J$L z1p0PrD;iNr0!i*bJv!O$Q^fdy(PNe*k-_%=07}%@CA3!3%>?r@_G&kUQ~N zYe$>;(Z>u{w?ak$LJKA^2>_Gd*PrsD{{RrN>0T#_3(GJ;5Mo(*_0N82SVHwJS>~r(})aJHHXLa!;ncS*?_zQq?e7))|K063Vn%2-5*o7#IxBy3R zPp`ie`*`C^s3mzfNZwHraNzxMQj(`-6tzrED(W}5N4REp-HZQx&mOd@Ts;w)(~4ht?jj2;J|r(Q~*4GI=zSrA4JK@5Yj$sayFs9mk}*EXTq z+|C`AHc%8D-eWFCckBx0?!kar64q?sde9(IsFTgXKfFC^^aY=7inc%MHpegXJtG zk+L$2oB%P;B+$KOjH@M@%!@oD9PmH~x9&Kj9DJIvx$#;imsRnimg!K5H{g&zr`zfN zwOZo&XSDuIXJ~xx2h-FarB~6UYe*+`bu&rj4JTvs&+qo9T1>WEUuw-H%p*`^2RY}A z*GCk(MEhp1PM&FW;L@Zm48eBG8N|6y@Sj7G=}wwiCTOAG6!E)Zq+)X+Jb{Djk5g5x zq$cb~a26S0kN|{o-orhG7dOE!1>b_MVvSUQydft$kG=;VYT|3$+C$Z%rk4s&acOE~ zMtMj=`@$@He5FYz1CmaAaYc1bm@uuJF=`P`tUM7NyNP#TdjA02Mt$lFJAE;rxfk1s zY@N#{A1Af|=N#v@IH;|)`&AC4)U=yep-UTUt63FUAuc~F6aFGO8TX*p z*YepcrfXGoNP>hy$jW|)InT8p(t3{O{{S&s+uOCn0P%@Laj3_j2eBFVCzINv2uqdt zIx=MDxTK2uUWSnAvB#+!pB=}GD*#7^eRIY>m3Ktx%lT4UiIJ|EPXSym-UlQePtvs( z6I{uoM*Tx|92X&oSd$GiVX?HF;QYDIHBB3*?tU(Bio1g5Co-Z(Z?rbhJb|;x2Z8>S zlg%XBXjtNVZJF6Lc&Co`SSLYzv4>o$g2ZPE7=L<(#v55|AzAJ3TT+pW82n5s`v6q) z?ti@#T{?1ktZFjB9qM>eBSt|J07Ccuv+Y#E|l^L_Uv=&KiX%e;9iHQWDDFe}lKQQ|H)^DmB zJ6%R5w2>u+TX2pkIb-Sx2O!o-%2dPBvsGiLTE(cOtt5p^csqv(xWOQOyBeQRxW<=z zBuecB-^^&+mQpZx0y}as$DpjWuA^xbiSWRvkcTCQm=bvh+zeH=p7IY8$jL6rRi+GA zYRjH6^BnpgO47o+8BV(o*<3Zog?7ru3xJC(Xj34Jki;LC9DU6b(&Uc%-M$|ObK&F3 z1gIEn4^yA-n#QXwuGdTvk3M%#ChWb-1`2N z!#pl>_LPfvviDHg{5F?+8ebu{Qf?63F??q`R4=|iy>p8@>E@P1c?b+QFzvwf&!>LW zZtCf;T2U;mj^vZyj2`?GQ6;Ud#HjZ27G>MK$UymL=f!klToY2+&ym}tYV38UmNgp@ zgbEP<04#PRwtMrBwH3M4CKARakwZ$XfwtgnJ;3zz?^)e0NbP1f1%H?U!EBw~hti!q zsd7v2U66o7G2upg0qc@$o>{ zML{hgWc;A5w6ojX%i+L`8+44*5Jx@EcsS>=pfX$Osb*zqqMGJsXAc_fJRTK?q4Ru) z0R zMw=W-a;a*PM#&48Kn#t!zcBYZc_SG(Gzw`hC%tIrQbVy|BhJ?2Ue9wc&r7^wlU00RKkt9Wg{ipVubRYuG0fPy*gf;h*^y*E+N zHce}J2BmEx%QG1vRm6%uME?Ma4;%uekc~^8Kk&(k;j#0KnNYO2d||!z_*PSN0k?D=RqnL z-f_o&sN>~bP?Bj$5^G={reBEB<+l<@q5`r>8?G_WARk|?XY`F(G^^Movtrp8Zg4Z7 z_lnR-3AxhmZV?G~Kot}oS0g^B(>0Sz7~q>KKqt22+Pm=6i%cCo9dAO^<++Y&yl)ol z##_VA0Quy6soG+^7H-chUj;0lC=1CfGFvCO9R8-Vnpz8(B(sT~8boDMB*sV{-=%DH zt5c`_z!2xOI_UM@an4830Y2 zbAU15KK|mkp^@~?XH8d#84YJ-!%39+1$+<}jupQZMbI%mffhP75wu4V; zZFLDmdv07#CFNPp;kj5I#~}Xze_EF2=4(f5NYPA^OSx09kvR*`-~DNwQkr$lGO@f7 z+}v#{PIe&qk50g5r-s!nY%Qb{B+^9@Xvp&&*uV;Xah%anw3`Lc8uw3z!eWPVOz6Op z*%Bsv!|n1ts*QxV8cn>G*3T?<8xI4&h%bp8R8u)l}S@Ygb_i0c7&N-K;yEpdYAXkZ*+vPu5{TpFxmnY#>M?4L@CQQ~-4Yq?dV+}npAEFWs8rv*e-Fyd8j%0Iu$ z(y14^aFM9p3<#$=;Q{{u%^cF0z1X?Bxll&eXu_Ph2e3V{jMFrs76|;ZrR2NfN4Ln8 zG9<$ARQAWy6BUW8B$7gr%o0_}E6zY4KJ@a1p!8}rD@{2q6t&2ehBva4z$1+N zPzdId-uJ?ZmSyBAQ=A-n{KZ>)Wwx-EPrt#Pk%}UYk!HBSjY2E8#Bi~ z;P;^j=xDH{FXBh$GCKy{@3#m2nvQ#;HRQ5G37%YTFV7(H`F{AK8Y^tIxE?G?IrFGx z^KQ@OKQCH{!3Dmj;=|&2M}zXnS1UT}Nq~`;lm^EpjjbPg@?;Mkr z1eV*MdK-Im1i^f+!*Iz25$5mpq9yJhPk?Q0ujd$GNyi_hXLLGEyJP1Mbs<>gW@0cx zXK@|RZ%>svLeT6R9bHD;V~l#{y{AYt`?PK3PaK(7jQNz~kGIR`Mx~ffDg_2hnF!k> z8~_hEDn4SS^`RcL2wgMcEmGn;i1$bsvUV}!1rd1phw?4W0(KoSx!6{g#5`Y=s zZhQB~`{u0VmuMyzz(q7_NGuRO(SzUg;87b(qY^9^0aZLhC}6~HZ$dl%pDGUw ze-UkQ4(WU)Wpo3K01t1UtvcrH&C8h;(ZEvYZgbd=(w)UU4-$Whjv3lVBpC)@!yE&j z%qrEEth>@UE<85DB$Xfv&uTdkArARse=d3Z`&YEkk=%)p?#>1uj5p~{;F=l8+3Is# z#~R4~B;GhIBnnE8Tye+$00x0eu6Qs&5;b;Uccwjg{rRg}h3tM5*2Xcsux*a~XXG>e zy{HAbMUeQaNhc~$XKf@Pt7sPJ(OPepPrGPYb0GnE_4$6i>a3fVSl%TpBgA|TLH7RQ zmiFRAvsls-5)unCHbFk%51lgJ_TXvcu`>YRy0`$5p8oVweVX52AxlXN*QHENyJ#jr zc=>bb^r&tzCGk%Q!YdL^{&INWb~ve^yoOkLaS+;b5FeC}QBOct>HM1uC?f-(eEzjR zA)%JGOBiLh-6FDwEZmdZk8jewt=;BnR&9uorrd&96&}A|eAW9l1|%sfY<#b#0Np?$ zzttf7;)LJWn~N)iR^d)biAl&O)`WKLi&e8PXzg<_WF|ow=L^O^_V%ktlgSA-QX=4x z!2V!9XR#E`Msr}3_%bMWz(oWr1N0R}3+t;`-CPqRVV$wa9=QYMU3JT7nuA}NqL{6Y zjP~S5apFsqcL&LV=|J^;RLfu>F`^K7V5Bko`&Bsg7Qa@Cd08!xm)LMXKPrae;y1dD zq{xj9MhM6lqa1YhP3x}(>qbArS~!4YByKOaml;a&6s|Fyv?Us-;1))u~t|0K)s#2jcVZ)VXKdpm{Nl90&+o-A%y0!clHtn0|F@!4PC<-uuk2wbQm(vnELB`(01#!8%Iew4G!%=p^g z7&!H+(&RP*l|7AQZQjS(Dm>xjBLMzfXEk!>$;%UNhA^v^&lKBciEh^;awx+PxF7hU zv(E@Zp)jOjv(7~Z=vLn#1+hUkCwwZ5V2tF^eKzJRDJORklefvgzJ010t!(3!3QQx; z95Lr<&uYDOvBvWhYa^)uxbO26vZtW8Z=wxC`OFZ!LRfeqSP`_3Za>b2J<81}%zIdz z9lTW5>ap&Pm0g=Wlf_d9!kh!xdQpl?NMh81k(9`X1b5Cy6)lv(XIP~^3@*cSZOKvZ zk6MB$jM4*B22?GKuw#`Y?NT(e zs0hqsd~Ia|oxgr*uOxexK%;Xe%yt>~734PT^p;Nug6}gY@_~`_jfb%9%{JFhF6K60 z4|wAhVhnsdt-r%6yeZ?4Q}d}UH3=e@#UbQOlAz!KF-A?TBS}R&qOH!JZQ0~iIAQs{ zGxD!ns|h@$v{DU@zJPrGezkPnnT8`JbHV3!DQ#tjG@V!}jeF#GqNggRN=}gj+pM-gX%JvbvR;z zQg@7yi=Q?-cKXm;AoZpYx0I<(jpD`tVUvy7?rT4$l7Q0B^lBt8J|;YCtXvF(g`f6|LwJ6_xF5j-*N+qZU9NhtDYq!Eh%OF6Y zAE`agDVnCAd#6ULaGT-JmE(Nl9+>p2R9oYF3RSahsA&^TY?7q^01q=omXwyvgT4Qv!N{{ zoEcbiw>`xxPadQ*wD}-?9J>I{ z4s-P%y;alN?naJQiYFYhESTC3dC%|ZRAQd$G@9T}(c8}}1%XgwIqWlm*!-$ZDJl$G zi_u44y0#Z`wUiI=>_$9BtEqisa|E|> z#$akHR|CpIjtD38pgMV;D1_FLM)Cu&?DHRN{W754kx4ug`yP z8nh1s%K$Dw(Z2#N2IeD=^{Tr5hc)S4M^BNj7a7@*2qV4)C9uAlC=Bq(rTA%|1Gm0? zMk;Qav;_4)>!>9bs__X`0o;-EoM(fMPkN3;zIup6JD=+a%LI{lt?Zoac{VeX5xK`k-Fup3hMeOsH+}HxSbD zSg*0?y%4p$H#2ON%F4MQZUY}qaBDxNDJmqCgCm{WOJD=^`c?bwLdt0$!ik|0C=9Fq zA?iJ;SQIsFCv_&&H&9|W7RFCkZ&s- zpOryO^V^!z=z68!!U*h)XK3>y{_Fwc{{Vwh$&K+fg=f`ay3|%ioj~2QW^ginaqXH} zC)#9KHoGn{Doi}zb68zQ;_6LFn&p?pf65aBZ=e_*jT^Mo;Wl>>IXdkhEg}H9!Vd5D1GLuY$0d3-10X&2`6ypxz8E-SF}rs^!+w9 zyYPvh4#OA)JqCYzuX%3`&HUvNB!rY3f{+l8LGq}ili2f?=>uS$TJ$I)G;!udCnFr6 z+KqJR%q;SV8YGipc|jy+JmbHip#i=Q?oEKqe>M}kXXovTd^(hH2DW00yoP6VCD0CW zSCnmN(R8#C)=tp#N}eR72_pxBSR5{WZ~*P{r}Sj^dL_!6Q3A_-7-^-J1e}7r{>iBuJAk5Ycp$}5P25a(F-mYf}=S4 zl5tDHa=!+Y+w7A;&^|ESjWtq8W0PT?NfJB^=lX~>CAE|jS>0O8J3(@?84QMeMV(d(#aHnUw@YI4}iByR8F9o`-|!BOvz{MKr1R$WW0<<)h&nL|w&jHSEz<{$t! z5!moDepRHgxwf;?taV#GVq0suB{5C#%ekUV5O4|Mdt*Fv@~B3iqUe{iOD2UbtER|M zskva1c$ovswDvjAr+;eagw@H*wq7xms@{=e<_m$QNbN1eH}OnW?Idl%BR|xq-+|71 z(7Rg`XQ+W<@ks>3`HeZ+(Trzt;~ur`dipPog6cT#UQ3A$vfHt2GH`LbzH`UUlUcWo zbPK!rZ>}`?12w!L#M#ImWO3XA4gu{#9H}SdSxe)w$5C}H7MrL8W=j-g0gJd8$n^vL z;`ZL2FsV{k?;*n&X-m2Q0xZ2hYV(^k4{5nAe3cQW`8t4h$K9!Mhri0ln) zx|64*)O1pG+bhcu#b<^ox30(sI9!Y{$q&b&`c(7AE%E-e6*);;1zt;d*OKDm*3w%U zi>&bAEaz|vG3+_*-#w_-xeex{cBXevhK^W#V3FrxPFsxjCkH;&mA02hywa_HJ|$a- z`mr4P40=?W#;b54v3N|YIUAUw9Lg{xr1o!vQ+Y(kqQZQIK zBWKM1*cEMccr{%uqSO*8UM9}w1z&MLn|EgK^83}`oL0$Kz(m^FwcHmlTtf)unF#W! z`2oTE(0;AyOTi-DXs{Vp;dnyhbZz}#QNjMzCCm~>ZqS!c3FOPexNh(1^1wOz(a7~1 z*U)?&E#hZ|b}F)uImjK)%=h_HLQV}dJCAkX$=vBz7FuKzPXUf#p@tNYymu$u^Tksd zjoSz%lfq_=#?a@5&m1imySwT^Y&6YffVc4rvu$12^cfzM$aKpaHXj}Fl7xN5A=`p- zF`W8#<27e0{9813>_1_96t=tV!{o;ClE=%Pxb2Mhs4gK%pbrkC6tUXJw8H9BumdaT z-`=X9g|wN{%#x_Vv*2 zKzT3Zw@pB~Nh4HBk&gk3k1~ppzf8TnAu4fW5NFT&4f~;|Yj1%?m`c+q&L|feiq7n}hIj#`es+kb(#@F-&ch3NQ z>U*299jrnrRURq4L9sv?J-8m;#e%+Ev#8y)uqbC6!hk>r$T$E1KE|B~i4=Y$?firxSYV&m=j&8;cm!9L za=|Z#Ctz@7MtlxQ*gq)r3#n-wBv9h5+}-91eT)?NDm=vR|&9b8Q9Okla6ovpMqvoUVI{ZlTIRJ z1fh>=-~y+f-TQh~*sb+DOY3`cJc*}8A!rC}h}e$f)Q`WV2KengirR@3QA;I)Sn9U! zmg_$GM5tB64g+vd$=O>I7!$#o%#mP5W1BKdKWGDjmmqcrVDTANVnUF_l*Ve(CJ z5n{3_BQBx6dHPgZrOm~y{82UhQ`i+H77_V<_X1A`<@-^Jl6Cz8l!V*qi^Yme2tmBmq5$v(jyOQg2jd%HzxmDGuRJTM0Y z`Lo!Jb|0@4Ht$V0I)8^0t}c-7+WAo4LI4;%lZw*mde!tYw3e;oJNcMkY(eT9+~EH8 z2C;8yx{MRt%%`Dmeg;)|(D_#VAX`Uu?FKn9-&9c%g#YFB0|)7Z~!6f6JQ6 zn|GGwmJz!S*asc5YiVt(SzAK{ma#N$N}aDJQbXS){QFj7`MwWayYPlQSqmboanCs8 z>MPXrv$@MuB1@x3(fTdi>ajh>)LA@LkrO!M1as(kt!>?uAHiM;97y3wD#RXf;Z}wv zia7v<9gr>`198ATy?*pQ`e6z|ro(q5$#s{KL^)%$bB51q+szJ*{4OJEXEQ{F#Ih0P zVlaQF+ky6~mbR7=T0?MQTX`Nl;HbdQagRW9PDiM(J$jgY9PScYF*AuQtfje_{6uKJ zAq<3<80CrdJo|T{x0ccBSJ9Y~G?d5uz(1gXJNxiK`x@zYIzwDU(zJmdQY2&q{{S%u zf0w0Vth60UIqx+Kn@OkB?=751D-IFxLgbD(86C!RT{v?_cGqZzNN_VcmE_T_l(!N8 z0L#w`lq@@tFmgV$N2Y|*Ut6L#^5B?xM+9!~@;!&?N3OK!@2q7iB9$O*xoGeJIb+H6 z8O;dME#1T zFlsGE!}+mn{%Ey_%FO#1spK&C&wpCd9Z6=l+;W@$0PV+Y4*vi=W9?O@x3#{6$txAm6XV(OO-euG$T;>IlU_GGad|!SbFD%eU`TWM-D~D9BRsNWJ@koPU;S`8Mpyy`o)W z;^#~lc^2zoUm8sA89$Vf>B!^fRP>9v%3R1~XycWc_JO-BJx_mAReFH5+MKZoOfg)B z4Dz8P%a50QgY>6qP>8Nkp>r&8f+qGV0Ne=qkSX}CJ2OE>i*zKsK*mTiE3gNjTz4J6 zdI_moLM{kd0?y*X}fVrXOXvyda&dEg&UV?(96kuH`7 zia1|)2p5iVgOmN}wvB0Y+Q3VdF?q7WKv(o9kNyo>X(en6suty=MJXm-f^8r6vGn^B zL88B9XN>{!IBlTgy=bSmmSJ?}5zmO*SY=cJ=-r9MWaNrOwDFQas(4)R4i6_ZaU{^j zmfZqGm)m?enQ-nr#1WrE-iHaMmi)tNmx|^@!fx7KaC??tTK1MtTMt0dp0s_URlb?o@?h4{VI*IPKn} zZ;iCM3m~4@4nwPQN%f-k&bH*+n`v4wyH_Bb6Wf}e=5&*2xP(fKgs$8$ECzcX0ORY$ zQZMBae+GKS>f-BAjU-acd2sEwci-NO8~bZ}*`$V91Gx#ZPw8K+TGU~Coi;nYJTxiX zq9_VRc|R{-*XKiTq__V7m|0>tK)WPf3WMwO?dwS|d%6Q_!Qd=!uBB;UidlPaCtw59 z?@qG1K=QQV(LpJ(InD=c4l(}#nu>cZHci*CY7q!ovSUmc27B;(;*!@IV?cV z@0Ne@O~*iPfzh(t%W@TCfIDH8m#_znQ#B@8En*iCvhD>{lNir%NcXF{wZ)#Rbqwyt zB9VaUv|zA3xEc2ERc1(<6D$wp4VR3834zQ5n}s5M5C*)9xl0V5uE;GE~T9+gW{RS~a~AF13JZd&5q%#K0B06{^Y z%Z}W8bHzAa%Pqo*90Yug+lD#x0*7gr%4CMt=LAY{`-$hD*oq-|vV2h_Z1CFvGUwCO z`%!AN#=B(S72(D_RnEh-IQ02_YU^BXT*UZ%@sZ|XjDUN3=7YODq)8AGNXxqm<{2Hx z_N&$m#ltji3XRMg@}Ga(iboSzPB`SawOLiRxly%G0l!arQ9HJrxMfKY>~&W8_ccQ9 z2@+V|7gDa-jg!h0XMs}1Y?54=osc$i=o{DEc=IdB(2*5yts?QOa=aqXH#S8Q-*J zh{h`2oYMQ2Za^s*i9*J`kTpXz7V<#E60U=R1fX;;Dup=O;Cm zy9FNZYt8wNMh!`9i#5Wl$gwFrxg03^Q<^j{Au@uiz+gW&+K*u&0I>=&pGvtbZ4^6X zl;;@>pW2v2VWE;TGoDqKkF8m}2km=*^;&zq7eX(W$gh=Ck- z2PUcQEDH~MW=O2VK{%sGVBE|Mt_jBn6=zO{8IbKkgkD&j9Q|lKOk&mX zs!0KoMpa?K#!nT3nC6ttAmxu71If)y$Pwc*A_Y8^?tb*PwqS`1%7|28f_W6<7>+|C z)<1fDx|o>ZPUC2+aVJ(zvzI(|D_Q7?+DWE_=|L*!$Q zN7ubk>IszHcmm$yEajF$yM}#$3yFYpkJ5I%GzFn6r%CZ!If7H(Bz#)CAT{`dKXNTi#gP8o;kqO!l zsG&Ml?8fbq)X9R|cN2k+ZfNz`7TZnGQ8Nskue>PZIq!}tSv2^tLrak+sj9SB4KDux z989}W7;zZ%$o~K;&g)mV_xerDZm`D~9fIKfIP|L*GRq?%g`#X^E6I-_9=!UT)k}HN z;g$=A8*oXIF}UZ@dt!tVhQT+=Ei(Zl6`d5I8Q_zg{*-BFe+(JqB@d7(I42+8tX^qx zz0|EJXyk;bMabK`xxx10s7>NrT&m^v{{Vq`&3E!sqn4=&b#Ru_Vj&|VVCFN7f2}l6 z@wWyGrS5en3F5#5R1ou-M ze>PSM0r@DQI-K_x5$=}b#PyCo;3+%-S_*SjkfqVNx4#z_sDW2(OjKYiYGK;=GkGAb(TvI zTM#j2k$C6oJ0F!Ku_Wye_>)VsKPB#?6~phD-cU+0&Pc)RYeAyvaq4y#S9jM?uEcK% z7EH*lIR|DtRU5ffz3_otE2=YYT;v~@rBSiF+i!7eG|wHeB1T9+3~}}E^sBVzA8wed z;4PxZac!vEBgSJ(gd=fqM(;v#^Tk>5?;hm;01=qGLOiF#057gF>+3>A`I6jx5;C&m z9w+9>Ba(19t9p^Uks*^PcBUL5@ z=BubpZ#*&S&XGnG4cN&C=f!5Cl3=VBP0@eu;2J-7Bx6Ummi|3}j1kFY7$2@p2AXR2 zBl``t>btvd7s0n#k$HR$0Y1D_r|O8O5iQHHVdiMS#y(m7d(;3#BnT5^Wq0G8oQ~vt zzH}sL4=6Lh#o{l92ZkK*d7z_>_n=w3(e;}t6=t=Ia9DCyVdjkU+ut?MHS3`Ilgwjf zmDrXc%MIQ8nmeXnnD*PmkiUXJ#DuQl^`jwdpHs9;yJ+LO8E26>@7ur1mJ(Q{bY_xv zj%{kU7grl?_ksun^Ttj&$JVqLx?0;zvC1A9kZmkmE4$npJ8wLi0?jp?WJfEKic}G| z*MsYfQ*SQ?&YvWc%3_ZjvnUJCZ`U6SH%Y8-As`Tli(N!41}V~z-wW>3o^u^9Izx@EZZ7}+qkl`jL% z?C#!jSo8P!{OHb=EY{a$CX{RhGaO@a9Ovg$Y_(`w{59R0Tt*MR-{o{*>?W`S%&6hTRD>B!%`0Q3Nf7EXSvU%GCR9y(l~r+ z42Z>?Dwf>Y`rz@!2)wY5PSh?FO|@wjFd3wocZLLed;0NLbcKv)9yC@@y(B>+m&lXN z*a6#&*EFFNtr|Yyck^soOQ8{9j#UvymvQIJM+AY6K9yE$i)k86M&?82As0A3v7cjF zOZZroPY^?7>dKITf`oDvy^jMl4Za%13tCFW#9L&;5Ym#w{=*e)a^wzP5kkWH^4aEw z0`bFfg<`{o8Rt3gj8R!;x3jWjol;%Rxpy`OJ$*Q#k;f(7xmb5bqxv1seEm7i8@AK$ zZ>FBw%E=~MSb%a+kO#>B0E?e`tkOCloK}$@mLQN^OBBSTu2*v%%krzMbs1EW0_@Ee zA8{b$d!JvGMQ>{z#+h{`x)hctB2;evUth4Q_H7}%cp{k|0s(U&!tu^??^4$O#N`d_ zg7SN);0WK5o6d)v53LR{qDr12R&p}CTNzCM0D8ZwMR1o-8Y&oPR(RMP@A>}#ZYo2h zUE0{0uQsp|he)yxdG3GGo-$EN{F0)5GfTX_wGRXMl8F3NiQ@%`U+G3Yun%EFFN~8g zLkzakuowq8L>{Df$)ma+zi{$fTEP$VSQycY@}&Bx^!n9as?ue!4>6W`UgeakykuZw zB~Q#8_V%QNn#;z2ptDb~ew8)Oqju0+yF6fSYzz#6-yO487V_FS=WCLy8mJ8l1CU9_ z8SFpOq0;mnS7-?cfF?N7FG~X3=+I%WVn-XScz_A;Pcxf7$UbC?wbyk($ftuS<dlfWMT06N^=+Q%;+LJTVJftZlf)&4Kh8 z9ga^F#J<)%2&}a2R(qRw4;O=RGYH%d$}oOoA8NC21^$&`47V}ulp{!FXm&IwBMRVv ze@}kZdM#Js>?OEK7UxyD#4OS-)3p9jo`7SM^EDYa9+ih1yH{3ZwGNWiZgmYdShP!f zL{;%-k~x``hIu40!jaD%=uc5eI$c~uuREkNGQ~1K^3@Ir3c#HAAEk6rtj(+GH>mJ< znv7`0RukN0;dAN_Kdo{p^(T%gqc-at7Y>ZOP67ekf%DJzuFp#;<@`&bClwb~ZEWu# zn!**oV-y!iRbCODjC1*wc^^6%dmf!^W4C7$To(d6n5Iy!gSwoa4sl+&)3pm1us8O1 z3n5PyClQ^FF`V(o3y;#S>E;XDtzHSBGPL%AcSUdF5I{ITT>6h{rlYmckFgp{%UGQj z-RFcc9wVtO9y^SWkq6qX$7qW%nhW_FLzFh@xD0?9WCzo~>?lQti>CD1gHeqmitaXe zcge~gGI9@;?f$&-HVk;u33?kw4|TO z&+DEjUACw2n$!tvJ2FOm%yI?@=O^}~I{5LQ9{?#0?QKXG8fMxQ_ z5m};998ZLI{{X4?Bh%|kEH}2o-g5_xvI711WdwuIzZG-AHie2t$Uw@e>=gdkIjJs% z&xBkIL=OlLsmE`Z`cUQInks72Y1Wp_9CPnLwFuaxdk)PhSIv|eP+#)-)^A!aaL*?Z8 zd*J$WnryFxHQ4Hkn#HE8r(Ht*K>(Y^J{_}f3Q^7u;G-U#9Qyq#R{=?#~ts`!_Xq!%?0{qwwSrg;IHpw*LTsPTUI4X*UyU z7cdo#3?ye_riQP#cvx$D?aD)lejP(DLKY@KAwW5JaYU!v6Pf|**2-E zM=p(b8AVvj6pR+wQFE3np6%O%@}OF+s>^E9TQf}zVaM}MW$q40A1`06UFry}H3%Sh zrg;iCimIdyjBrUjWbwyyQ&<}V1lJSJEuttDN35^tG2Hu{Q^6=JMB2BbIc2XGjyPnM z(m1lJV>#MAGQZxo-8VAbz_!z06A|0H!X-%=#(do1XCw;3l$L#7AqAbRu&V~!9AF6> zJO|0_Po`+0yO&SbgWar2X2UYu+Lnz%b}N8M9^=1ie^G%=dwcA7_e|Y2qS|kd#qnT_ z1Zi*!IRxP2JPrrnileVZ6k23)+oo*h-Q#%WitYzI0r#fa>Ts>SgWa;;Sw|s`L>@`E zV{iu}a0GgCIO2`h#*mLh(c=7OeHg-asXv6gV{4H%M z)fKL$mwE?bk_HF>4@`r{&`{lK-W!yV*ek{mg1h-;z{fSN)9jkT-K?z2lx3D2gZ}_g zazhOI4)~x_s;sOWt9Y(m+z>`d&OW@?f2ER^M$s8Akv~J}(xucFmnq^rY!20M00Xxk zz5f7e)Aa_SaN3o$NfWR$DPW{AE7*Sif}zlFE$wb#4TMGn5OL{%03UqT-WzyiG2IwJ zWyx7bzsu=W%J;Idw2Y0)PiJhg!EpmQkHe4>Bn{6PIN$-n?^o~dBk&*^jAf;0N`_U! z$%W(V$Q=IwtpV0SkEwMFdmDLP=`l1ICt=7Xz#mW#>rkBq77$&)(!SXtc{bX} zzN&VR!_$H9P*_DA5v8oREjNN%FdGbGQGytp`uqI;bSqQW63$T!jWkl0X-sHKPe52oa5_QUYwBWU0rE+aRIx6-JM-S zlnh%W9QPQ`e!{vZOLY~LD?4g>EORZ?SaQ*+1dr+f=hGge>p?Gtt-h;s919acJBclq zYbe4000=oeVEg@Rw-$F8JM89`CZ8qHYgf~wzlPa*a>>^u__3wPoDMiR{J`Y$G3i(%!q4mM4e;G1ahPq}G z#Dw5;-1&L;=Bj*F*cd{yI|02+Pry86eu9q|B}@ryD{*gQJBf7*1$?V)&jn6<@y>WX z`1Yj!BWoP$vBDyO0cFdU^9A7IqR_WqI2R$0hk^+i+1TSg=BsKkd?ujGpUFaj)FASe z^#}E>Tc#TFI`34LO+3pU#tWGI>=cqu7$5J7tE1h(AY>Lr$l!?v{{RdVhV;e=sV*%e z7Bec`hT2uag}?-kf6A!AF^bMqndC^6XUoqy{{Y}qq?)8|$K4xoeIV1V)(%!ijSd$B zjE~l?sQ7I`8q35D7|AZfg~uv==vRdmvX2SUSsY}(F@k%JeLZVUq4e}_C7V*X@O%zq zF_3)2^7rly8KjoY%7D7Apwh_FnI2HWjDF3ik)p}T`c`iem?S&INw zv*lc56YGvDrk?=0yM`HKR8=D`i<5)v^P?A08tq#g(=-f;Zp$p}OpUp5k@PfAPE@!i zM}?vBJfyc613kF!+Mh0#B8EHZZV<I5AImgp9l>0(*u8B3t<%U`LCc@V*E8lNhnow&v^M6K*# zk_R)1P0j&X5aC8JF^bOG>JG8&P^cS{0l}i$B=R-GM+!9lDrM9Wl>qkx{JYg8oluhb z6Ij#r8w=kJm&CVr-{R+k{+v|^Cs;Kor<^0@ywNLg-(ODDOIeP0wNE%m6`OD;Ao_9h z$E87}=*v8;WRVJtZ6$y%zaV`;qMb)(eFWjwV3ORdgqYoS0l_>TJMt=}{E~U@mvzhV zqhR0<`>MleQQEV{#ig~*{oss{c+Nd>j@34&Yw(sZ-PqhoI)Si)nDb=dpF%OkBI22& zS3t>i8Lg~tng)$$WElhU?d*2v)`HyLNxItM7Bb9OWOh6Z;;3I9VRBr~dREUcXI+PdM1BtJ&7)g#ny#m|S~+$&_b8%JEJoBw%``_98gPRCtC>g?6N`^#*D!h;yh33 zC)+;sTF+$3F!2hi6P=y;^dtTEptd#=wWMgRE2}YPRqdYryLO_}K=48lE?#7hk{n@* zpO?6#omrwRGLdePyrD#>c9RxH;Co}!iXC-5%y-d?S%mUnF)Fz%2=@6`uAOJP5kq=# z#EpzQ{K5N*n@b-KtKvq_a;b!3xMlf#^IEH8H(u0U7VUVkBLAARhF~c><(` zR3aQ?4s%V$!FnrvG^1`;8;%A@?_PL(FhqrM43DeGgVni{$)Qb)@Z|W zPZZ+EXdk^vZv)I+MvU&GcGc&PQ&F=YzrAA($-v~|p9um%l?|RSX%LOWa3y^}^{HMZ z*}5_Vj#)|MP%{#DEs%J}pzTQ#JFb8DP(0-EQHJvZ!*KSm09mlUzLabsUx$rZ7BU@} z_YInRtPsN?M0W$RU`I6F8*w z82ZvYic|$s53e;5&3Fu+_@=SRl0%X^f-%h!vx+@{c!V5oUfBeCP^2H5Cm0nn%u$qr z2_G)?p3$h7G}7D_VhiriCzJK1xw&+cY+KY0;~A$qE!3k5Qe(z5-l|MmDH(UM=e;VS ztm@q_EW!ySfdso$B!H`Laova`o(D8%R+=f+O@J7s1#sV)c*tyee@~}06Q<@c++W+6 z-R<4oP{iAC!;JCi-l%H#H!^@n-n$b8~LSGXv&_)vu^gH8aC@2-PUr6B`O;=JaV|5F~=7a-q|Lxq9&cww(*;^oJNF8BF0x~ z;AC_2s}oOkC9+#6Q*X6bcHO8G6qy(>2QnER}m3B)j{P+Q*qP6z+0!AzT5EYI;o8@wz!jR$>ST1D{fTYKvdVA}a~h zGPg0X#@}veMcv8?9yy)M2F}&we6#YZtZs7I7bKM=9gs!teI!sFa~nyPhap=H=xDBFBY3>C&Z9P?HBPN#~IFe_4KRy zjNijkO6+wGOOiOjGDPfUiwxr>m}829*5q5amM~pgDqLg%>BV*nuAQ{aGPFD#=0u>9b5{i~g6(Ij`UE%1;)>^wk#Zrkn!Y!V4< zb!1yG&1P7~4a2X8=s7v#Beic)81)?%gpynGXr$1r_o%yoC5_4y7Yg`&-Nt+HJ->Pa zy(zja+v*(<{@;|3r>4l(-seJDJalg9!nm>ry|sPc|S`c~@uOE+_0++HiCyAtrt z{vr-M!|U3rD6rCPgi_kcHMHxDrpa74Y=-`x0XXNqS~=BqY*iQXWxtBt&8Wq7Bk!0H z!zB0nR;x}+nJ;Fzn&?Q_4I{2Fq>SKT;2)J^Z^fJ%)QP3dJhq{R!!m7g+aQl{aw*g5 zHw%4n8kSTfqixB^u8HI1v^V@s``rusPl<&iV!l@1-X8Bv`F(!8R#A03tE-2GD1ylw zkYo-?C+F|lg|4G}9H2t)YqeMr87fa6wP#44?#kWfib7?b4(8yHGCAkhib&y5PQ~J` z(Xx$SRI-oaqjlPFNC&X&#FOvnC}&n_GMySmfw3LF8IYb2e2{w|Pu8H(^(m}$sgdR0 z%jQ))5zjdK`&4%QMB>xH)WK_F3aiGTvJ=k$@Ox55GmNcx7IE&3Jz27h%W$A%DIrfd zrN4Hb=zzV`(DKls;910rexbcDYj7m)w$gR>37*(xjdugxWig zt#7(^^5T6mD=Qmc9j4r?5Pl*6d7S4wjLL1?Oa(}$r^o>__W@D%JG*jn&P(lScN5 zhhQclQ~(JB2b|z`#X@ntE{vtE8P&AZ?{zut;+@tta`Ky=0XQc=pzMBC4xbFr-CWB! ziJ?^p`&%P%{{RUdr{zx9H94cSNT-q0dS#V>+}Y>9aDDSa>@|n7h(m=UMa$&ybIAMG zTw^B?La%2<=`N4eI-3il&!^bOY~+b9t_YC!%HRTV$mEYoGpT+V^t~sMh&~>JpipF5~JIjGLGu#NhD+|w{Q-7_UGqVi}~f!wK<|iF-;lTRGt9u+|%N2 za(CGY$v5pU>AJjjcQRbZWQx&edrV7ljAI_3_^o>C5b8-|1^v4>j@w}`w6Dwq-@mD0Z#r(K4%2`*vQF5W224z5ck zN0fuf&-qb}O8h2_i7mtixgGh)TheJ z78eU{>EO$r8Oa`2UscBx95--uXv^d=E}<2kzD3Ts@Jy{5sEf=3X9ahT*dFx@Y8LwC zoy$uDG|I(3AzUlE?#55co^j1(wQbsk#ns&HZZGC>BP1V{0p|dEV0v@fwKlpfyqY1o zvG}PVw2gDKI~qnK&B)04kDWB*7$n=+tO*6ImbRA>*-vs2Sa^uBvGZgRk3-m3M6l~U zUJ&=XBuizhZURuM0V|x9E9wq2-hjuVYjE9Oz|zFGmMoV7$ZZ?L9GCCN9=^Y&OQc_2 zEyem>>6x6Pe>eg{N6(lHXXnjJD~z|>LqcvZM(sZoI8hGcGp?iC%vRw$k z+PTjMInSu9-j5yC%(6qN!2bXjDOjLza1~VkU@?oQYv`g;?Pog#u9MGqR2k3-#o>ALn??ypjmu z_W5_J{WXRZpJKb5v|ZF~ZAFy!Y_`!}gfcu$87{mKF#e$9KPt#{&XaYiTuvkKEnsIm zHqc}gM9O|o!SBlc=8+gp+i?p!FKp6wck_HZU9z{o?HNEw{#qhF{;xJTC15P*2 z=QsgJrg8hzVsef!h!4xpzid<; zMQ0tZuRIaUyzbqV7+iY}YVL!g-c5Ijq&2G2H(Er#P$2g>xp-?T){> zzJb-}h%89Oz9(S zjg%K6JQ4{WocA7_)}KnawbQPb!nTd?BZc5xW!7SHy!!Sej{M@d^Ek>WN3mDIPAD#| zo#xV2ptLLtg&8Wu5HLPt{HZjEVZ6DWE@rrRAR*5F06KOg{TR3fr0^CZVujOIe+N9Ov ziqlPq3q_vwWF8!Hj2xZ_Rqyw!dIg>QD2oY=?E{VRNUB#k1Y-*P6T#5}S_B?uJ880WE_u@4sStW~NnRWnIXbQXW-v`&dZEdeqG;)Gu z$-*hXIZ!>u4|C7RRwCN=DXyfo@b{T{Vynq>+tZA2X=I+{tfox7(MWS7MB^A3=k?~f za$|Wk^ifSmM?k#1zc1m&7Fc9E8_o%he=n5#fH|yOQak)ukpzG94}=-O8SXR528eX- zt8Z&>3pb4g*>%H`tfZXe6k+Ib`}*RAZ-(yKWQ5Bk>mw}EcLB4=Tw}}ZDZLIqr;(}> z)~L|gY4PeQ6oE`l5f~wH>NAXb;<{WDyjpazO1Ov+LBSk$0B7ymxi?K}vcavvY}Xb8j+0=_p}>GQ_An z0p|5Tt#eI3Q<)6#J9w~_Wr1;pR&V^{y>zaT-0$mE9PvJ10LqSX7b84>im?_pmm=zWDEvsof6L5kyT#8V0C(*~Zgkyt z*3qx-9^KJ_ghLx+s zDND9VW)U5e5X>ZnOJPFuj2w?l=9y=sCD%(`ykaYdw*(_btP7u20~zDr-!*5Xw2k^S zvOHcJG|Hk`2obCLWcLRc8TtSWLG!*ET7)9f7n5wCT}WZLi@>;+e-Seqx??>509Vg7 zQ^Qt>nC1;5g4+k7Vsb0mmCuWQzZD+S3o;$e&Ozk-@j>I3FeeBYa-jk4dH(=Pz9_y4 zF&k}$n)RhXLZJX)76T^)@y~wLm%5X*XKVREz#W3A;PLwYlsvk|irMnz*mKCn5BL7` z_#_X0v9Tc*5E(~&j!u60r%_#mvbU@5eS2iINTcme^=g#-OeFPWD0W{l>>0v-#_kaIXX)`k~BfpQ1g?t4Ej~E zFOV*RHh0q7PvgMN7)JA=_hIXwmMcqTWfr24Pc_U?+e!<0IVuhg2>Vt7dzL^$MogFs z;%7U)wV}~92w~F^A9G-_1o6ojrpX4Cqkcgt&+z#+y8#0NzxS{{xb5lt)mdRPLvJI6 zcqBL|T=1j5aoVeiOWjC(t85}~2s`8w2;-lDE3J2xgpIN#m*IF@_lKefc7R z#|()qo-c@b0AYfVbH{)8-j{56>@js^44QvzCM*bwu5PS(TzIv zWk&tyfd2qWA9JX9_F~#4bT1ez@}5Z^q}821{#JW)d5qh#pbQ76Z?~-nY9Prc%SB7M z?ycsS-?zjr?+k$BIV280?ie*|Pns)>cC@;JA#Wh^O3Ri*=yUCyRp^$|=Jw=>jEKOy z5Tk-UPrXxHq>|TS$q#+N2=d3AAEC$k(sH$-r7J*t-3ctN?cg_%co!LwW!silAJV{{ z2Yz!>HNBh(B-X*AmR9nV$W-@SpXs9uZ(!*5*Asa0hsaI7XveQVI?rqEjWcDmq0-!y z8IW?l#~!3}`qg14JuoH9Y^Nx=VK;|y5=Y^J*l*9zVe_cr#BU2V&-1^esK~+eKGjc8 zcDsSRvJ{UQ*oTbp0X~#s$4Q<{Km9nrHugQh80>#c_NzBqW^D?$H!VD7+4m}f3aH3A z&pT+P#lf}GV+Q5pNsiLKCx26s`%q})j!R_3FK>AhZFDDck~{pxO{;0LU)rFtF)F|} zwqFf`1~|qs$L~u?wO~s20_rI(FC({YItb!u{{WXHKze{Y$Lm33wUFuvp?p!nAwPeu z61;(I1cFb^B9A*0!+NmekxbDorc1Ld@k_EaE(Cp;aIt%zMJ%n&xnC^Uh zZ496e=Zy2|kx(twt%cFRmRCmI8E$rupS?hCF7NP`%F(oHKqbh?4fH!3popYrci?QU6aQc0v#-OG8&JdZ*9(CBQM<;<5- zG6@x$H{1^(_9CrMZjSQJY!Vd%8$%KfN6)n{6o%y4Ew-f$GUvka1Ck37=Eus5B1Ll~ zjHTjMQe#)ow{L!EegH5)&%c{%Gute;0Tw%U$#6#_)DNFEe)i#Exq@LktYt!>Dh>y( zet$YicSyG)m;|z}uby6f){IW-Wgr26LA4V6gX5+KIfTdD=vlIGiXu z+>_7WlgAuThSKh?UA#F8kk}>E-~;Hs^w80y(pv^g6jR*@Y~03}^D~})W9e2k0~}WB zmdZn}0-TJ2^7+)()=6s{z0x;<86nBz#9`y61Kd;KDGVCJ_kyfO;-z18Jh+hNE+h*e@fD?jopIXK}miIUmvKC{xi8=Kqyay$7PE{D!90YkLjep(|ZCiV{t#h&Vzx`jC6kxMj91k)pdah*6cdE2+uyu0DL#YeNo~ zZqdf=7m&8&5mJ(N+BW3&&wBCH)4dMeBogTBffTn%1aL-@5?WGl!~^+oc^~+#6k3u) zddYQh8alXCcvmFn=h)Uc9^O0H4Z8_iMDZF%LWJaj&!%ekj#62WKaTPs3d!c|dtg^4 zTwJBgrUd zJ&X$}*}6#f9na~pzojbCsG;y!CYo+6qQlWWT zp)R4YwT3x&$T;FX-Mun>s$!pco-Z}rB%F#!HCD{U1Cl>;8!b~RU6>dTdFKU6V@Cx#Iifs@K`FiH2%?Lj(=SF_ah zrF$5#B?!`ae4Fv+Bkx=g^z(C4szWtKxvyb z0as!9a7P&A@@nz)>N2MO=Hq_qE=y~BXRgMtD>_J2i=em+Pkw!I?OJ4zLbG1nStP}q zYRHbNWPUi??Z$rfn}<-iwUXY_{?_qTQHrZL1O@{Q&u-s(KWz%hbNoK;+&s8Th@?kd zn+{JW)bWG#spY*`=`R4CBTcuu)^23DMO(-Ln`+7kKBqp|=8wSkqUG)^qPMcPVZpeZ zvuCp9@z|5|thS_Nc_~6a>h#?od3xA>OG&(QT_(#XOVA8>?bO z3IhfsIRS_`sRVj$zPzm7751WJ^TTY;+z>H_9A$ge&Zn}wXc}8srj`qrSc)|4o*R>l z`Wz3v1l(Fs)r%u1KSxg26U}RIu3KAEB& zQwFo6i)$-=TTs48<2#xml}0>m$nW~`np-6;rbs2Wnk&eoEpXBjTL9p(2it>+yPVu^ zQnmIBK2zws{0`FY(ULsRao^bXsz1OXwz8cpZ`q3@#1n zE&)7p-Tg<>vXf7|ylpIoJ=q!W#cb~HE{Trj%18ytW()`PpzJ=ikGz@gE}JnZY>-qA z$Je!V;BtM5Zo(hKp^r|AV{r;3=R1fcml@zuoh75QOskV5$$}M$A5sko(k*Q-CRCrq zgew04S0i`1?SYCbacI`ct!0#D?oT_%`qs(6Yhi6BSe7&60c8?Iq!wTs^EcDq)})%s zc3A>nN`fX)EDPCz$?iTw_Z1eL=6KzkFu0T$0*t;> z`twk7a#^ zh6{JKN0;IxTaCo5h5RwQKKc1lTWfJkIF{x=7DRCAyy16ypL%$~r)yx_Gv--jjJ&KL zBRqge^r&sjsc?o8R#k5)?Soni#fMV5l6edy_wPZ5y-VqZ${KWI=`q2Amt!{1DUfHZul>vM*aB=E#d(o{jcr|Svdn@lP z+c=4lcrTX7B>RJ!qo`TSVJh2PO&rk>Pl#h6D+7#Y-{nz@R^!x(wq+VcY?`&N&ql^K<+(IjS%55{nr<+1Bs zbC(!e0(#j!(pw8J0^ad_R6y+V0hM9sxIE{zCrV9l`nww`j04SQEqY$dUW(CdC-`anLmaT&w}-so_B?=cJ$)%P4MOJEP?iW` zojg&23$`=HGQ+kpj%ktW5w-GZ>2753$Wjh4201^iPaJYaI%d#oL+IN}Yb2U`wz0m3 zIU4DhZcu=L7<}@lk8B#w-)s8i#CG!7+|2=I5x9l6tDZKJ2Oq6#ue8|DOL$pX+DL`P z(7qhkTOr^!0-3=rgeREB#A?a!5D_<;@4QlIAI{MXlEBWj-`l5l#VI9ts2B z9AocMjGJ$Z(j9EG)Lj{8VQOvDPM+2xPRF@M-bic`2^@ot-#TOo2A`l$;7IbcOjTrl zCGmVbs6K%P4>Wg8)%AHbTSwNl1ASp)Ba#n@{%RQyqmDxzr2R8eb!SjmYPWV)w^|;P zWvdC6a8@=8bfcZFi-pIwdE@6yw>N zex2)krPxPxV7HK2s{!IG+s1Y{+6V;*^()^$FKWhHD%syAs0RaSJn%O6&#iLJM&RAtn}Z*Q@^aYhPq?jbMi|#m zxSr-VxnMj50h=k2-yWcQS5|Cw3mY7hl|B8siZPoCBy`*v84E2&Hn&*us8z-sb5}r zi6jw>c=DE!G38P0Ffe(|N)c3tmPc&LO#UMeJMBJUyz|X$EH%qT(rs+5t)xj}gshD3 zyt5KB-}0&C;CkY-H}+1mM;v1X5w~!104J07=ACBA9vA{i@{$LbkMgdZk&NTARcz8* z>X2`^7cD4sz_ygW4&Ffr0F&?Z6zw6dgLt+^F>kmek0N-XcOG(ak@c+9O4At`NI(^W zCgMmRGgmZw`|AlKy0v*BMa*Zya-Js{D&6zx#YR|CPKD!JHkz%Dr=#n)u9{?b`g#z! zl20ftk23R~3E=uvmU65qGTcYu+?IIWIqlw2BNM`d>+Rm0y1aHU@4dQ<3eKnB$&*I8GNLlDuLgT>MMySDoq)E!*TBg;tQpjoL#t47-c@E2Xkj5 zkJg!QrAV5jF3^lSKO+UVC?5P^l0f&xJTUQX$?Rz=L74TSEK)-1yb|mP&+U(wHSI4} zj@s(l;yGGYV%{ygFA9XIlKP%_oI5a))Mww+PH&WtM z3d-2QT;z`3sFkeVD@fL?D!hCrL27Ss1o)pRl7Eg|449z0?rJYUvtm49->a zjPaA+s@&IzY7V!I;I^`C*V@uaj#qh-nxpOs4z+kRyF zp4D?yzG z`*sxgqj@MpVm5RO~(5;6()#z$(dRd#kk&@b_H zBWhYSJ|YdOJVZhZ=WhoDb{NOrf?416^{k5w_YQ(c0}(6%hl$9`08R+c2NkdDNOY^7 zqePMxlT~QYmXrQ~P{gRuu0c8a3Ki7W`bG7v)y2ZZ1dy}F@kSZ9sK8VGOU^z-X1N^V z+KjB_%lO@t`eH$Uu?P#v)(c9HmwiaR?GOrLHm8`KE4eMNI^X)w8yep+V)?>+XF z9lf}%r$OA?>5xrx8H8P#43WlH4G~n@>$^Ou$m8D?YUfppUe~ny=(Ou+xP&rGE4ILm zj19w(amf3M3n$adEoy|_Sl*M0>f@ze-Wj2^zIi~4Ym(tfC-RO*Kdx%s{{T4Be9?^k5FkHWE*>dMetU62kut+Wyts2`gg9^i_(ZF>xJn@Hw& zhUwYamLkf5hvseGjknX*xTTVOtuMJ$qSYCj{{V`%w~je&kj#B z%sKDgy)R9ra?v@e(1PJ^t!>@2g6@X{Iqmyr`_#Z2TgQ=E@<2J;z$9`3s#a?wL2sE` z4J3(xaoIu7@B373aMA8$AbC`Q^8|DCuBz~bOe<=yF4bIRh-P*?_s8#2T(q}BM`EE+ zgp4ZV%Z}&vs^ND{;YlL`LaS}<+n?TuH1LRABt*hCsgc;Jd|`42Vf)nOqKP^fv8#yT z@jUXx2|F?dPk*SUU&9(=1}inXw*85a?}6)%DmktvhTQlBBQOD-NX|X8{_|03(6q6c zZq+xA*fA3W_{UIZQE0`MD zq7AWp07Dc5h9|e%6*iGFLml6be5TkS1}2Lev&RSgT;qyvreuoNNMk5M9l|~51p0CB zj8;vlXkIjB?yR2hCxgGm2h4zS!{h~Nx^qvSZw@Q6k>vv;NJk5gE;03?GF?U*9{?0^ ztfld^@=50%@scz06>1$;M38KK(#4z}d0cb*Q_9-nXR}g_Y_65wJwD!Ch{USCY=Ux5 zJA!`mW;&#l7I#9@LriK8mpj@Ac0p7fU1lgf)cmeI`w zgrs4gJ9y`e{`EDF%z)JvZ=|@^VQXs^6FaAf&miSj)KNyVyn9G4?rlNbp%-Z-fgEIy zO!37Bveh3&x`N&qS~>0aD+7#eB zZLwNyG)wUJF+Yfi103TgIU|AYc+YC1WoWiG{{Rs)tN6Zbp&^lna1U&I(3`uMq>?qa zo!!`FK{(s{=A@cNnm-CjCJ3Xj8Nef*zv)FquOm=nPxwNKBgpX1(y>s!WGZoxe{uJq zeNQM|Uv;9&Eg6m&pDFrPcagO8jKo>neq6W(c9Fn7+0WXiy47HpOTt@*_uNO6{J`(^ zrci0x*i&&ANiTUDG^ivIa-o}?VD|ZTro(jW;Lmc!q7KEA7$BZAk5k1|&^1@Lyd!W# zBWVFa?d_jl)vCI?wbZo3Z8Sk{cMX!MP<{CxzQ3&*dtTOz_6e|&=Sz#5Pvx#j1Dtl` zew74v{tu4#Y$IhE91u@5Olfy^wlU3bmV!w)Vkh&AdYpSx8b!NlVV+4Ln8F;ZjERS_ z_B5QAgDs$4*0(%%cJZU+uH|s*4*vkBtwjcne&t--v|c`0S+nK@k?ZrTNhP!}###dy zQd?;_0QTGsU$NDsGDyoJN-k4mv4#A&>~rtHG|$?-s20J!J!ow82_u=EA(2@ffyNFq z_w8C=4hFWFBAM4=R0!vG(cjCH*q=(NtU_N&Lc5yWf|qW zow@ZMwWYt*;lHyVA1GIhc?zybImidrvlfx3#Fv=vXJAPDq%Cyf{5vap&|Vooh(qwt zZh;VO4jec>e(4)xA4UjY~cG26Zi%nE78H z)EoV3fxonh2@+S9Nn||Wk+AdVe%0$sU^~!8tC3@wj(k^6kY|nf@Z)Ft6oS1cEVvoMW1n?m4AX zZ)zh%ED;%r1%6_vUPpfvvPTqd!A{m@In5$hvF#;9yIS%_jtI$+f72WSr`eCM6mw5f zmZh3-LN}Z;P35c_cE67Bj!cVEIkPK$skr&Rg_6_wF;C`fv}P*Q!Gt%vO^r ztTR`#v}|Kyap{g~WNodvK~2(!oVT(pQM|B6XkcZDp}3qMh{@%H z9ysH*EzQea*}cEQ!m8oCKMZGMfIQru)k67T_~>Q$#dx3s1@T6EoQB3Y_CHF3Ig?b^ z(h%fI*@Nvohle|f_Q$cJ^WIM#)TwZ0fa4)#j7Y%aj>jLZ1HOPW zO15z{mgy)#x4F-1l_r(OY#`W-xIl7F2XkFg#-;8^n`(uE%Gnj?2=hME;(0++pX^0L zBgGB8Uk?!x7Q?&bjMOv3aV)@1Gbzbq^5eb-0;-8xMt$UwV1C%wA#T?di#_C^-+( zpsTv2#B8#Y8?a!ANC%(l0*q=BrMk-?xDi~#wUrbFY?1~BeX>nsgu{^$Ds!CVV!Z|P z8?T6+jM6A184h_qw6ehEu~b76%VmA2nB|h;SGkG1vG0;kp{ly2wY)dRdr<^Xss8|` z;ILf!;P=O%rYc=sU9J4`C9}E>vi9H%X1qd214gA~ordokWeNiJ&p9+yc(qJc==QgF zXjw#a8|`7CQE=9S$)K z{8G6J!J}ch2b&xcIqrL6x%>4L@;`_pmPsJ;MhPF39y5;hXGhlL({7`b%1n7N`A_B^ z-#U)tL18V&!_E~phAIePP~`A^_^4xqaki!-yRw?=Z8VbINogL;u22#)CNa2wr^>H? z>MJ?4YuJy)L43*;a@&Jvh6DUR{2CtuO{d?vA#$JuMqKU()DQEfNowssfaAc42KgD3 zuZioxKDn-k7&ZqJXZUPvt+cT37TcL!j^Z)m?c^@(@CV3qnl-9U)+(Bu-anWL*bn?=Ms&)jH_pXkDh3kQ0voa7T4NNr)Q_$J?drTh>*&Eq>eZM z{SaspHVKG81h814UFU51Dt<+)sCL)IpUq-(;~K#L%(xf z#9M$y)?=N=AZH$iuvdCamiAHHy9bAkRZb2^zo)eq&=wW7xseR5sX5_E$P13-W1nAN zYP9gdrz^0hT^D83UiVPAzP#|v-YH`YYlU&1O5@U!`%k-q@Y}%>O%IF2N~eL`pL5^q zMs)iKF0|{fhq*<%Rooq4oQ!#JagN8G211@lRKBRHL9QyM?N=?!c zXdS9(*RQ8L+IVh?M(}{EsqRNVZ`QH!G|PCKODwy9$s`)+mb$ooCMlzqPl{FA`$5{I z=Npfy{{Y}tHuO7cV&Hg&X&-YH$@6E^*19lB?lLyig3)>JnFNczPzNKi_RSi)*!E&M zT3?6um zjZ`ZG{UC61eW?8?-Li|}hFbD1QqE|uS~#U<*&fm6BR;=QD?1EKmr_C^GwjI0>^bgg z+_y4WUdJGanU|cOQhj)#%>Etg8KW58mO$KoqNxb+>!3dE6I?67EOR?97?PoJk&eWQ zs%|7M?954Xmid}3@z9ywt|CwX;Z;G;vF55=!2=oEDMJzFQq9TvcI4A0{Ge?fwYd@k zE}ZRE^6}jIQ>X) zJXUqk+g*mO^=q}X@Z)(PifMPVL;~+4)Sq9aUA)v_lEM5lB=>GYuwn`*1DtV?PX@Da zC&ZjblM;g1Ezj@U?N=fVZp7i@k(X`>^#1_hS3AWN?F!oHv!^w+<;p>F8PymxgZfx! zusrkHiuDu;V;ocIU-GORj7EKN-}D2Dho+Xo(l3nEtnSQ(x5COmRtMaA{i{;ZG>VqC zmhua0hC94w8+&juobm60QOPbdUmwsl@N?)t=QQiaxMK2SBinaia(nkQmRBcFjV))C zq+3~wMl+Cm9DDrg_0$h}txIcT1d`iA-XD}}xHQFuZymEX#n}BfT;Tn%n)*t+My=QrQ?zNL9u!g}3dh7?#|41leq+|H^rg6Y1anGm*Yh$V%A$Jq=RWn9 z*6w7I_2io2nV6E>cwBofeQRN(Y4#7HLvLWRrSFCU&Y923q1W{ybKG@p|%kgrh1 zZE>YpM`NcMZK9mT8g0NuJ%DWPAmax;s48@Br(q4&t8;604UB}mLO7hPV6gKOj9?GF z9-0|+KAyC+*KXo2-^_rjZDeeF`rza1S;5vFMr{qf-lcT*;CO6H9g;`xK&e4VCZo{H zi?-QSBe}hMyKAetp52*BTsS2%NGuQA{{S_p=F;vbGd4y@mju*>K$LAVU}xKk!pM~b>X?n%ey;MZy=ICwH%*^ ziZp4xvTm4=&vEeBm;_TK(Skz6gE?#y-<(!2s&y+Hja8$D+{Ynv5to!W1cQ)CB>eMQ z$hww2TdDpp;iJ9OZyg%tf_Q3j0+F<1ft>apwCMVKLN_{-&k-{$j9G+9Z}p3b%n1Z_BG3@ZRg6UqMUNQ|U59nqw;X)}a3YI5t0+ zPnaG#90ESHCsELDA^43;O-Vi-TOu|dVhO-F_4-oVTKrzHUeYlox@}1aR`QZRFFlx^ zE3HN?^G`xc;1{U8a@zQARZJLO5BuVh&f)aX4Yk~nImry8+zizXNeovn0ga=0$qui< z2j@~*Z7_c^BW&jxe>Vd?y{oT}vo*g*wUTLFo#G$NX5E}0+lnb`WuU!gV{Jaj?al)LyqtC!^{du*7kYfp6|?NOmQKSNY;nP<%N~*~ z$yiMyf)gKwGQ5lm$sA#rHh3VD+K$Ph=+N6)%WX8R2|}zTUOYe!LH9Yq9-Po!AQPzz zc_T^Zm4J;)ZOa}22Y@+0wMnfd#i-hmO=)xD6__)5TOHI7mV5fwG}CX5(Kegg1l?)( z7MAebO&5h5NMZ|~TM7vy4OKf}`tV18UTM)@2<&BL zNMCL?+sra{k5GNaJu542{tV&cBg6;G{$_|?-HXeSBE+%CTO|R=C;X{pg(pj+G>IkD zJZT-GGH?F?04HmFkG?*2XHNLJTHP8l6t?ipba+fzLXhTG! z3erc6N_`JKhXL* zT`)2LKHQ(M6%IUwN}j@c?6(?RF7e$XTkbiIOanJL!6W238LF^p0`3L4wq;o4okTt) zfbz@P#&R$?C$Nl4lq=^8ztdwacI{ycwgo@E??r{$^Z%U}{i6kZSv{$y;I%ZgAd*>6+4O(%afK zl1CzVPOT_;Jj1yd2hg5-)6NPqQAo<@(KXeb-O5;)Ew8P`z>QKeRzLvA^7q^HJ*hQ& zJ9{gaYgjxuyf9G*3ajoj%N~2yQ%8#KJBYPduQo4?MXNag5^@_S>BSf^$!{dkN<_FU zRZHgt{%`WA!yg=qnMk!})29s6TLiUWpqz~1fo=ix@9S278rttt z(=4U5k9DoQjItFuIc^t^ZvOzSV)Uzvy9-M;b8mSAv5jqFnD~g^&c2<=%}QAL!qeH! zmXzHD`p-qvY-|aFX|2&_aT@ImBz>WP$T--UG=q4yZD%aD(W}W5L`RAV{DAlS z)ZR$Ed|S3jUD-cLYC6`fZ4H`14AE)wc#RqJI;%(z0F3j%qSx&$m6iVh#z89Wm7@#! z8U;RVk@BkcaB3QT)~P0)87yGfijTDvWME|S-n@TmhSvV#{{TpaXS!>PrI{s_ToCf6 z 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

hAkZc)ewxE}u0RJiC`b|u^n0r3gg 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%0AxUn4U!cA*3TgNCx0Otgb=jBwc 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

v0U7Cpzr+Cm+?f&OO|Z}^S9{1e9mtM6UA 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�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؞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 z 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

7eFJ9e_@815rd-!r(!Zx_uu}sa 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�UBABrcWZ={rO%v~^eXvIQFbPF0qWvHH}HP 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

  • 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�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

  • diff --git a/ste/export.php b/ste/export.php index e118d32..4ad2f9b 100644 --- a/ste/export.php +++ b/ste/export.php @@ -48,8 +48,6 @@ use Monolog\Handler\StreamHandler; set_time_limit(0); $db = new db(); -$checklists = []; -$x = 0; $emass_ccis = null; $log_level = convert_log_level(); $chk_hosts = filter_input_array(INPUT_POST, 'chk_host'); @@ -204,7 +202,6 @@ foreach ($findings as $worksheet_name => $data) { foreach ($data['stigs'] as $stig_id => $tgt_status) { $log->debug("Running through STIG $stig_id", $tgt_status); $ia_controls_string = null; - $notes = ''; // If $do_rmf is set, replace CCIs w/ eMASS RMF Control and build string to // insert into IA Controls cell, otherwise just use CCIs. @@ -231,7 +228,7 @@ foreach ($findings as $worksheet_name => $data) { ->setCellValue("B{$row}", $tgt_status['echecklist']->get_VMS_ID()) ->setCellValue("C{$row}", $tgt_status['echecklist']->get_Cat_Level_String()) ->setCellValue("D{$row}", $ia_controls_string) - ->setCellValue("E{$row}", str_replace("\\n", "\n", html_entity_decode($tgt_status['echecklist']->get_Short_Title()))); + ->setCellValue("E{$row}", deduplicateString($tgt_status['echecklist']->get_Short_Title())); $log->debug("Added STIG info ($stig_id), not to targets"); foreach ($data['target_list'] as $host_name => $col_id) { @@ -262,8 +259,8 @@ foreach ($findings as $worksheet_name => $data) { ->setConditionalStyles([$conditions['true'], $conditions['false']]); //->setDataValidation($validation['true_false']); - $sheet->setCellValue($notes_col . $row, html_entity_decode($tgt_status['echecklist']->get_Notes())) - ->setCellValue($check_contents_col . $row, str_replace("\\n", "\n", html_entity_decode($tgt_status['echecklist']->get_Check_Contents()))); + $sheet->setCellValue($notes_col . $row, deduplicateString($tgt_status['echecklist']->get_Notes())) + ->setCellValue($check_contents_col . $row, deduplicateString($tgt_status['echecklist']->get_Check_Contents())); $log->debug("Added remaining cells"); $row++; @@ -489,3 +486,20 @@ function updateHostHeader($sheet, $tgts, &$db) { ->setCellValue('C6', $not_applicable) ->setCellValue('C7', $not_reviewed); } + +/** + * Method to split a string into an array (by new line \n) and use array_unique to remove duplicate strings + * + * @param string $str + * + * @return string + */ +function deduplicateString($str) +{ + $ret = null; + $ret = str_replace(["\\n", PHP_EOL], "\r", $str); + $ret = array_unique(explode("\r", $ret)); + $ret = html_entity_decode(implode("\r", $ret)); + + return $ret; +} From dca07e06f5a75c9b336b110c6fc81158b9e7d01d Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Thu, 27 Sep 2018 14:27:57 -0400 Subject: [PATCH 24/24] Bug #18 fix --- inc/excelConditionalStyles.inc | 8 +++++++- ste/export.php | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/inc/excelConditionalStyles.inc b/inc/excelConditionalStyles.inc index cd4fd04..3068162 100644 --- a/inc/excelConditionalStyles.inc +++ b/inc/excelConditionalStyles.inc @@ -353,10 +353,16 @@ $conditions['not_reviewed_count']->getStyle() ->setEndColor($yellow); $validation['host_status']->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST); -$validation['host_status']->setFormula1("=ValidStatus"); +$validation['host_status']->setAllowBlank(false); +$validation['host_status']->setFormula1('"Not Reviewed,Not a Finding,Open,Not Applicable,No Data,Exception,False Positive"'); $validation['host_status']->setShowDropDown(true); +$validation['host_status']->setShowErrorMessage(true); +$validation['host_status']->setError("Selected value not valid"); +$validation['host_status']->setErrorTitle("Invalid selection"); +$validation['host_status']->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP); $validation['true_false']->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST); +$validation['true_false']->setAllowBlank(false); $validation['true_false']->setFormula1("=TRUE,FALSE"); $validation['true_false']->setShowDropDown(true); diff --git a/ste/export.php b/ste/export.php index 4ad2f9b..d6f0abe 100644 --- a/ste/export.php +++ b/ste/export.php @@ -239,8 +239,6 @@ foreach ($findings as $worksheet_name => $data) { $col = Coordinate::stringFromColumnIndex($col_id); $sheet->setCellValue("{$col}{$row}", $status); - $sheet->getCell("{$col}{$row}")->setDataValidation(clone $validation['host_status']); - $log->debug("Set data validation for target $host_name"); } $overall_str = "=IF(" . @@ -252,7 +250,6 @@ foreach ($findings as $worksheet_name => $data) { "COLUMNS(F{$row}:{$last_tgt_col}{$row}), TRUE, FALSE)"; $sheet->setCellValue($overall_col . $row, $overall_str); - $sheet->getCell("{$col}{$row}")->setDataValidation(clone $validation['host_status']); $sheet->setCellValue($same_col . $row, $same_str, true) ->getStyle("{$same_col}11:{$same_col}{$sheet->getHighestDataRow()}") @@ -266,6 +263,9 @@ foreach ($findings as $worksheet_name => $data) { $row++; } + $sheet->setDataValidation("{$col}11:{$col}{$row}", clone $validation['host_status']); + $log->debug("Set data validation for target $host_name"); + $log->debug("Completed STIG parsing"); $sheet->getStyle("F11:" . Coordinate::stringFromColumnIndex(count($data['target_list']) + 6) . $row) ->setConditionalStyles($host_status);