Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcde36ac17 | ||
|
|
8bde34ec7d | ||
|
|
a345d71306 | ||
|
|
0ff6294faa | ||
|
|
757d7ae01d | ||
|
|
4e78b21c67 | ||
|
|
d7e6434808 | ||
|
|
443cc2751d | ||
|
|
cf6500b55a | ||
|
|
09c2ec653f |
@@ -3692,7 +3692,7 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function preparedProviderValue(): array
|
public function providerDbGetPrepareCursorValue(): array
|
||||||
{
|
{
|
||||||
// 1: query (can be empty for do not set)
|
// 1: query (can be empty for do not set)
|
||||||
// 2: stm name
|
// 2: stm name
|
||||||
@@ -3736,7 +3736,7 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
* test return prepare cursor errors
|
* test return prepare cursor errors
|
||||||
*
|
*
|
||||||
* @covers ::dbGetPrepareCursorValue
|
* @covers ::dbGetPrepareCursorValue
|
||||||
* @dataProvider preparedProviderValue
|
* @dataProvider providerDbGetPrepareCursorValue
|
||||||
* @testdox prepared query $stm_name with $key expect error id $error_id [$_dataName]
|
* @testdox prepared query $stm_name with $key expect error id $error_id [$_dataName]
|
||||||
*
|
*
|
||||||
* @param string $query
|
* @param string $query
|
||||||
@@ -3769,6 +3769,94 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function providerDbPreparedCursorStatus(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'empty statement pararm' => [
|
||||||
|
'query' => 'SELECT row_int, uid FROM table_with_primary_key',
|
||||||
|
'stm_name' => 'test_stm_a',
|
||||||
|
'check_stm_name' => '',
|
||||||
|
'check_query' => '',
|
||||||
|
'expected' => false
|
||||||
|
],
|
||||||
|
'different stm_name' => [
|
||||||
|
'query' => 'SELECT row_int, uid FROM table_with_primary_key',
|
||||||
|
'stm_name' => 'test_stm_b',
|
||||||
|
'check_stm_name' => 'other_name',
|
||||||
|
'check_query' => '',
|
||||||
|
'expected' => 0
|
||||||
|
],
|
||||||
|
'same stm_name' => [
|
||||||
|
'query' => 'SELECT row_int, uid FROM table_with_primary_key',
|
||||||
|
'stm_name' => 'test_stm_c',
|
||||||
|
'check_stm_name' => 'test_stm_c',
|
||||||
|
'check_query' => '',
|
||||||
|
'expected' => 1
|
||||||
|
],
|
||||||
|
'same stm_name and query' => [
|
||||||
|
'query' => 'SELECT row_int, uid FROM table_with_primary_key',
|
||||||
|
'stm_name' => 'test_stm_d',
|
||||||
|
'check_stm_name' => 'test_stm_d',
|
||||||
|
'check_query' => 'SELECT row_int, uid FROM table_with_primary_key',
|
||||||
|
'expected' => 2
|
||||||
|
],
|
||||||
|
'same stm_name and different query' => [
|
||||||
|
'query' => 'SELECT row_int, uid FROM table_with_primary_key',
|
||||||
|
'stm_name' => 'test_stm_e',
|
||||||
|
'check_stm_name' => 'test_stm_e',
|
||||||
|
'check_query' => 'SELECT row_int, uid, row_int FROM table_with_primary_key',
|
||||||
|
'expected' => 1
|
||||||
|
],
|
||||||
|
'insert query test' => [
|
||||||
|
'query' => 'INSERT INTO table_with_primary_key (row_int, uid) VALUES ($1, $2)',
|
||||||
|
'stm_name' => 'test_stm_f',
|
||||||
|
'check_stm_name' => 'test_stm_f',
|
||||||
|
'check_query' => 'INSERT INTO table_with_primary_key (row_int, uid) VALUES ($1, $2)',
|
||||||
|
'expected' => 2
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test cursor status for prepared statement
|
||||||
|
*
|
||||||
|
* @covers ::dbPreparedCursorStatus
|
||||||
|
* @dataProvider providerDbPreparedCursorStatus
|
||||||
|
* @testdox Check prepared $stm_name ($check_stm_name) status is $expected [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $query
|
||||||
|
* @param string $stm_name
|
||||||
|
* @param string $check_stm_name
|
||||||
|
* @param string $check_query
|
||||||
|
* @param bool|int $expected
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testDbPreparedCursorStatus(
|
||||||
|
string $query,
|
||||||
|
string $stm_name,
|
||||||
|
string $check_stm_name,
|
||||||
|
string $check_query,
|
||||||
|
bool|int $expected
|
||||||
|
): void {
|
||||||
|
$db = new \CoreLibs\DB\IO(
|
||||||
|
self::$db_config['valid'],
|
||||||
|
self::$log
|
||||||
|
);
|
||||||
|
$db->dbPrepare($stm_name, $query);
|
||||||
|
// $db->dbExecute($stm_name);
|
||||||
|
$this->assertEquals(
|
||||||
|
$expected,
|
||||||
|
$db->dbPreparedCursorStatus($check_stm_name, $check_query),
|
||||||
|
'check prepared stement cursor status'
|
||||||
|
);
|
||||||
|
unset($db);
|
||||||
|
}
|
||||||
|
|
||||||
// - schema set/get tests
|
// - schema set/get tests
|
||||||
// dbGetSchema, dbSetSchema
|
// dbGetSchema, dbSetSchema
|
||||||
|
|
||||||
|
|||||||
@@ -395,7 +395,7 @@ final class CoreLibsLoggingLoggingTest extends TestCase
|
|||||||
}
|
}
|
||||||
$per_run_id = $log->getLogUniqueId();
|
$per_run_id = $log->getLogUniqueId();
|
||||||
$this->assertMatchesRegularExpression(
|
$this->assertMatchesRegularExpression(
|
||||||
"/^\d{4}-\d{2}-\d{2}_\d{6}_U_[a-z0-9]{8}$/",
|
"/^\d{4}-\d{2}-\d{2}_\d{6}\.U_[a-z0-9]{8}$/",
|
||||||
$per_run_id,
|
$per_run_id,
|
||||||
'assert per log run id 1st'
|
'assert per log run id 1st'
|
||||||
);
|
);
|
||||||
@@ -403,7 +403,7 @@ final class CoreLibsLoggingLoggingTest extends TestCase
|
|||||||
$log->setLogUniqueId(true);
|
$log->setLogUniqueId(true);
|
||||||
$per_run_id_2nd = $log->getLogUniqueId();
|
$per_run_id_2nd = $log->getLogUniqueId();
|
||||||
$this->assertMatchesRegularExpression(
|
$this->assertMatchesRegularExpression(
|
||||||
"/^\d{4}-\d{2}-\d{2}_\d{6}_U_[a-z0-9]{8}$/",
|
"/^\d{4}-\d{2}-\d{2}_\d{6}\.U_[a-z0-9]{8}$/",
|
||||||
$per_run_id_2nd,
|
$per_run_id_2nd,
|
||||||
'assert per log run id 2nd'
|
'assert per log run id 2nd'
|
||||||
);
|
);
|
||||||
@@ -824,13 +824,13 @@ final class CoreLibsLoggingLoggingTest extends TestCase
|
|||||||
$this->assertTrue($log_ok, 'assert ::log (debug) OK');
|
$this->assertTrue($log_ok, 'assert ::log (debug) OK');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$log->getLogFile(),
|
$log->getLogFile(),
|
||||||
$log->getLogFileId() . '_DEBUG.log'
|
$log->getLogFileId() . '.DEBUG.log'
|
||||||
);
|
);
|
||||||
$log_ok = $log->log(Level::Info, 'INFO', group_id: 'GROUP_ID', prefix: 'PREFIX:');
|
$log_ok = $log->log(Level::Info, 'INFO', group_id: 'GROUP_ID', prefix: 'PREFIX:');
|
||||||
$this->assertTrue($log_ok, 'assert ::log (info) OK');
|
$this->assertTrue($log_ok, 'assert ::log (info) OK');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$log->getLogFile(),
|
$log->getLogFile(),
|
||||||
$log->getLogFileId() . '_INFO.log'
|
$log->getLogFileId() . '.INFO.log'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -707,6 +707,17 @@ if (
|
|||||||
} else {
|
} else {
|
||||||
print "[PGB] [3] pgb_sel_test_foo prepare OK<br>";
|
print "[PGB] [3] pgb_sel_test_foo prepare OK<br>";
|
||||||
}
|
}
|
||||||
|
$stm_status = $db->dbPreparedCursorStatus('');
|
||||||
|
print "[PGB] Empty statement name: " . $log->prAr($stm_status) . "<br>";
|
||||||
|
$stm_status = $db->dbPreparedCursorStatus('pgb_sel_test_foobar');
|
||||||
|
print "[PGB] Prepared name not match status: $stm_status<br>";
|
||||||
|
$stm_status = $db->dbPreparedCursorStatus('pgb_sel_test_foo');
|
||||||
|
print "[PGB] Prepared name match status: $stm_status<br>";
|
||||||
|
$stm_status = $db->dbPreparedCursorStatus('pgb_sel_test_foo', $q_prep);
|
||||||
|
print "[PGB] prepared exists and query match status: $stm_status<br>";
|
||||||
|
$stm_status = $db->dbPreparedCursorStatus('pgb_sel_test_foo', "SELECT * FROM test_foo");
|
||||||
|
print "[PGB] prepared exists and query not match status: $stm_status<br>";
|
||||||
|
|
||||||
$db_pgb->dbClose();
|
$db_pgb->dbClose();
|
||||||
|
|
||||||
# db write class test
|
# db write class test
|
||||||
|
|||||||
107
www/admin/class_test.deprecated.helper.php
Normal file
107
www/admin/class_test.deprecated.helper.php
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
<?php // phpcs:ignore warning
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
error_reporting(E_ALL | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
// basic class test file
|
||||||
|
define('USE_DATABASE', false);
|
||||||
|
// sample config
|
||||||
|
require 'config.php';
|
||||||
|
// define log file id
|
||||||
|
$LOG_FILE_ID = 'classTest-phpv';
|
||||||
|
ob_end_flush();
|
||||||
|
|
||||||
|
$log = new CoreLibs\Logging\Logging([
|
||||||
|
'log_folder' => BASE . LOG,
|
||||||
|
'log_file_id' => $LOG_FILE_ID,
|
||||||
|
'log_per_date' => true,
|
||||||
|
]);
|
||||||
|
$_phpv = new CoreLibs\Check\PhpVersion();
|
||||||
|
$phpv_class = 'CoreLibs\Check\PhpVersion';
|
||||||
|
|
||||||
|
$PAGE_NAME = 'TEST CLASS: PHP VERSION';
|
||||||
|
print "<!DOCTYPE html>";
|
||||||
|
print "<html><head><title>" . $PAGE_NAME . "</title></head>";
|
||||||
|
print "<body>";
|
||||||
|
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||||
|
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||||
|
|
||||||
|
// fputcsv
|
||||||
|
print "<h3>\CoreLibs\DeprecatedHelper\Deprecated84::fputcsv()</h3>";
|
||||||
|
$test_csv = BASE . TMP . 'DeprecatedHelper.test.csv';
|
||||||
|
print "File: $test_csv<br>";
|
||||||
|
|
||||||
|
$fp = fopen($test_csv, "w");
|
||||||
|
if (!is_resource($fp)) {
|
||||||
|
die("Cannot open file: $test_csv");
|
||||||
|
}
|
||||||
|
\CoreLibs\DeprecatedHelper\Deprecated84::fputcsv($fp, ["A", "B", "C"]);
|
||||||
|
fclose($fp);
|
||||||
|
|
||||||
|
$fp = fopen($test_csv, "r");
|
||||||
|
if (!is_resource($fp)) {
|
||||||
|
die("Cannot open file: $test_csv");
|
||||||
|
}
|
||||||
|
while ($entry = \CoreLibs\DeprecatedHelper\Deprecated84::fgetcsv($fp)) {
|
||||||
|
print "fgetcsv: <pre>" . print_r($entry, true) . "</pre>";
|
||||||
|
}
|
||||||
|
fclose($fp);
|
||||||
|
|
||||||
|
$out = \CoreLibs\DeprecatedHelper\Deprecated84::str_getcsv("A,B,C");
|
||||||
|
print "str_getcsv: <pre>" . print_r($out, true) . "</pre>";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* temporary different CSV function, because fgetcsv seems to be broken on some systems
|
||||||
|
* (does not read out japanese text)
|
||||||
|
*
|
||||||
|
* @param string $string full line for csv split
|
||||||
|
* @param string $encoding optional, if given, converts string to the internal encoding
|
||||||
|
* before we do anything
|
||||||
|
* @param string $delimiter sepperate character, default ','
|
||||||
|
* @param string $enclosure string line marker, default '"'
|
||||||
|
* @param string $flag INTERN | EXTERN. if INTERN uses the PHP function, else uses explode
|
||||||
|
* @return array<int,string|null> array with split data from input line
|
||||||
|
*/
|
||||||
|
function mtParseCSV(
|
||||||
|
string $string,
|
||||||
|
string $encoding = '',
|
||||||
|
string $delimiter = ',',
|
||||||
|
string $enclosure = '"',
|
||||||
|
string $flag = 'INTERN'
|
||||||
|
): array {
|
||||||
|
$lines = [];
|
||||||
|
if ($encoding) {
|
||||||
|
$string = \CoreLibs\Convert\Encoding::convertEncoding(
|
||||||
|
$string,
|
||||||
|
'UTF-8',
|
||||||
|
$encoding
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ($flag == 'INTERN') {
|
||||||
|
// split with PHP function
|
||||||
|
$lines = str_getcsv($string, $delimiter, $enclosure);
|
||||||
|
} else {
|
||||||
|
// split up with delimiter
|
||||||
|
$lines = explode(',', $string) ?: [];
|
||||||
|
}
|
||||||
|
// strip " from beginning and end of line
|
||||||
|
for ($i = 0; $i < count($lines); $i++) {
|
||||||
|
// remove line breaks
|
||||||
|
$lines[$i] = preg_replace("/\r\n?/", '', (string)$lines[$i]) ?? '';
|
||||||
|
// lingering " at the beginning and end of the line
|
||||||
|
$lines[$i] = preg_replace("/^\"/", '', (string)$lines[$i]) ?? '';
|
||||||
|
$lines[$i] = preg_replace("/\"$/", '', (string)$lines[$i]) ?? '';
|
||||||
|
}
|
||||||
|
return $lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
print "</body></html>";
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -117,7 +117,7 @@ if (isset($login->loginGetAcl()['unit'])) {
|
|||||||
if ($login->loginCheckEditAccessCuid($edit_access_cuid)) {
|
if ($login->loginCheckEditAccessCuid($edit_access_cuid)) {
|
||||||
print "Set new:" . $edit_access_cuid . "<br>";
|
print "Set new:" . $edit_access_cuid . "<br>";
|
||||||
} else {
|
} else {
|
||||||
print "Load default unit id: " . $login->loginGetAcl()['unit_id'] . "<br>";
|
print "Load default unit id: " . $login->loginGetAcl()['unit_cuid'] . "<br>";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
print "Something went wrong with the login<br>";
|
print "Something went wrong with the login<br>";
|
||||||
@@ -140,4 +140,17 @@ $login->writeLog(
|
|||||||
write_type:'JSON'
|
write_type:'JSON'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
echo "<hr>";
|
||||||
|
print "<h3>Legacy Lookups</h3>";
|
||||||
|
|
||||||
|
$edit_access_id = 1;
|
||||||
|
$edit_access_cuid = $login->loginGetEditAccessCuidFromId($edit_access_id);
|
||||||
|
$edit_access_id_rev = null;
|
||||||
|
if (is_string($edit_access_cuid)) {
|
||||||
|
$edit_access_id_rev = $login->loginGetEditAccessIdFromCuid($edit_access_cuid);
|
||||||
|
}
|
||||||
|
print "EA ID: " . $edit_access_id . "<br>";
|
||||||
|
print "EA CUID: " . $log->prAr($edit_access_cuid) . "<br>";
|
||||||
|
print "REV EA CUID: " . $log->prAr($edit_access_id_rev) . "<br>";
|
||||||
|
|
||||||
print "</body></html>";
|
print "</body></html>";
|
||||||
|
|||||||
@@ -141,6 +141,7 @@ $test_files = [
|
|||||||
'class_test.error_msg.php' => 'Class Test: ERROR MSG',
|
'class_test.error_msg.php' => 'Class Test: ERROR MSG',
|
||||||
'class_test.url-requests.curl.php' => 'Class Test: URL REQUESTS: CURL',
|
'class_test.url-requests.curl.php' => 'Class Test: URL REQUESTS: CURL',
|
||||||
'subfolder/class_test.config.direct.php' => 'Class Test: CONFIG DIRECT SUB',
|
'subfolder/class_test.config.direct.php' => 'Class Test: CONFIG DIRECT SUB',
|
||||||
|
'class_test.deprecated.helper.php' => 'Class Test: DEPRECATED HELPERS',
|
||||||
];
|
];
|
||||||
|
|
||||||
asort($test_files);
|
asort($test_files);
|
||||||
|
|||||||
@@ -28,8 +28,6 @@ $log = new CoreLibs\Logging\Logging([
|
|||||||
$_phpv = new CoreLibs\Check\PhpVersion();
|
$_phpv = new CoreLibs\Check\PhpVersion();
|
||||||
$phpv_class = 'CoreLibs\Check\PhpVersion';
|
$phpv_class = 'CoreLibs\Check\PhpVersion';
|
||||||
|
|
||||||
// define a list of from to color sets for conversion test
|
|
||||||
|
|
||||||
$PAGE_NAME = 'TEST CLASS: PHP VERSION';
|
$PAGE_NAME = 'TEST CLASS: PHP VERSION';
|
||||||
print "<!DOCTYPE html>";
|
print "<!DOCTYPE html>";
|
||||||
print "<html><head><title>" . $PAGE_NAME . "</title></head>";
|
print "<html><head><title>" . $PAGE_NAME . "</title></head>";
|
||||||
|
|||||||
@@ -1478,6 +1478,8 @@ class Login
|
|||||||
// username (login), group name
|
// username (login), group name
|
||||||
$this->acl['user_name'] = $_SESSION['LOGIN_USER_NAME'];
|
$this->acl['user_name'] = $_SESSION['LOGIN_USER_NAME'];
|
||||||
$this->acl['group_name'] = $_SESSION['LOGIN_GROUP_NAME'];
|
$this->acl['group_name'] = $_SESSION['LOGIN_GROUP_NAME'];
|
||||||
|
// DEPRECATED
|
||||||
|
$this->acl['euid'] = $_SESSION['LOGIN_EUID'];
|
||||||
// edit user cuid
|
// edit user cuid
|
||||||
$this->acl['eucuid'] = $_SESSION['LOGIN_EUCUID'];
|
$this->acl['eucuid'] = $_SESSION['LOGIN_EUCUID'];
|
||||||
$this->acl['eucuuid'] = $_SESSION['LOGIN_EUCUUID'];
|
$this->acl['eucuuid'] = $_SESSION['LOGIN_EUCUUID'];
|
||||||
@@ -1530,7 +1532,7 @@ class Login
|
|||||||
$this->acl['page'] = $_SESSION['LOGIN_PAGES_ACL_LEVEL'][$this->page_name];
|
$this->acl['page'] = $_SESSION['LOGIN_PAGES_ACL_LEVEL'][$this->page_name];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->acl['unit_id'] = null;
|
$this->acl['unit_cuid'] = null;
|
||||||
$this->acl['unit_name'] = null;
|
$this->acl['unit_name'] = null;
|
||||||
$this->acl['unit_uid'] = null;
|
$this->acl['unit_uid'] = null;
|
||||||
$this->acl['unit'] = [];
|
$this->acl['unit'] = [];
|
||||||
@@ -3215,7 +3217,7 @@ HTML;
|
|||||||
* @return int|null same edit access id if ok
|
* @return int|null same edit access id if ok
|
||||||
* or the default edit access id
|
* or the default edit access id
|
||||||
* if given one is not valid
|
* if given one is not valid
|
||||||
* @deprecated Please switch to using edit access cuid check with ->loginCheckEditAccessValidCuid()
|
* @#deprecated Please switch to using edit access cuid check with ->loginCheckEditAccessValidCuid()
|
||||||
*/
|
*/
|
||||||
public function loginCheckEditAccessId(?int $edit_access_id): ?int
|
public function loginCheckEditAccessId(?int $edit_access_id): ?int
|
||||||
{
|
{
|
||||||
@@ -3288,10 +3290,24 @@ HTML;
|
|||||||
*/
|
*/
|
||||||
public function loginGetEditAccessCuidFromId(int $id): string|false
|
public function loginGetEditAccessCuidFromId(int $id): string|false
|
||||||
{
|
{
|
||||||
if (!isset($_SESSION['LOGIN_UNIT_ACL_LEVEL'][$id])) {
|
if (!isset($_SESSION['LOGIN_UNIT_LEGACY'][$id])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return (string)$_SESSION['LOGIN_UNIT_ACL_LEVEL'][$id]['cuid'];
|
return (string)$_SESSION['LOGIN_UNIT_LEGACY'][$id]['cuid'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a Legacy lookup from the edit access id to cuid for further lookups in the normal list
|
||||||
|
*
|
||||||
|
* @param string $cuid edit access cuid
|
||||||
|
* @return int|false false on not found or edit access id PK
|
||||||
|
*/
|
||||||
|
public function loginGetEditAccessIdFromCuid(string $cuid): int|false
|
||||||
|
{
|
||||||
|
if (!isset($_SESSION['LOGIN_UNIT'][$cuid])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $_SESSION['LOGIN_UNIT'][$cuid]['id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2946,7 +2946,7 @@ class IO
|
|||||||
$query_hash = $this->dbGetQueryHash($query, $params);
|
$query_hash = $this->dbGetQueryHash($query, $params);
|
||||||
// clears cache for this query
|
// clears cache for this query
|
||||||
if (empty($this->cursor_ext[$query_hash]['query'])) {
|
if (empty($this->cursor_ext[$query_hash]['query'])) {
|
||||||
$this->__dbError(18, context: [
|
$this->__dbWarning(18, context: [
|
||||||
'query' => $query,
|
'query' => $query,
|
||||||
'params' => $params,
|
'params' => $params,
|
||||||
'hash' => $query_hash,
|
'hash' => $query_hash,
|
||||||
@@ -3141,6 +3141,7 @@ class IO
|
|||||||
'pk_name' => '',
|
'pk_name' => '',
|
||||||
'count' => 0,
|
'count' => 0,
|
||||||
'query' => '',
|
'query' => '',
|
||||||
|
'query_raw' => $query,
|
||||||
'result' => null,
|
'result' => null,
|
||||||
'returning_id' => false,
|
'returning_id' => false,
|
||||||
'placeholder_converted' => [],
|
'placeholder_converted' => [],
|
||||||
@@ -3237,11 +3238,12 @@ class IO
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// if we try to use the same statement name for a differnt query, error abort
|
// if we try to use the same statement name for a differnt query, error abort
|
||||||
if ($this->prepare_cursor[$stm_name]['query'] != $query) {
|
if ($this->prepare_cursor[$stm_name]['query_raw'] != $query) {
|
||||||
// thrown error
|
// thrown error
|
||||||
$this->__dbError(26, false, context: [
|
$this->__dbError(26, false, context: [
|
||||||
'statement_name' => $stm_name,
|
'statement_name' => $stm_name,
|
||||||
'prepared_query' => $this->prepare_cursor[$stm_name]['query'],
|
'prepared_query' => $this->prepare_cursor[$stm_name]['query'],
|
||||||
|
'prepared_query_raw' => $this->prepare_cursor[$stm_name]['query_raw'],
|
||||||
'query' => $query,
|
'query' => $query,
|
||||||
'pk_name' => $pk_name,
|
'pk_name' => $pk_name,
|
||||||
]);
|
]);
|
||||||
@@ -4364,6 +4366,37 @@ class IO
|
|||||||
return $this->prepare_cursor[$stm_name][$key];
|
return $this->prepare_cursor[$stm_name][$key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a prepared query eixsts
|
||||||
|
*
|
||||||
|
* @param string $stm_name Statement to check
|
||||||
|
* @param string $query [default=''] If set then query must also match
|
||||||
|
* @return false|int<0,2> False on missing stm_name
|
||||||
|
* 0: ok, 1: stm_name matchin, 2: stm_name and query matching
|
||||||
|
*/
|
||||||
|
public function dbPreparedCursorStatus(string $stm_name, string $query = ''): false|int
|
||||||
|
{
|
||||||
|
if (empty($stm_name)) {
|
||||||
|
$this->__dbError(
|
||||||
|
101,
|
||||||
|
false,
|
||||||
|
'No statement name given'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// does not exist
|
||||||
|
$return_value = 0;
|
||||||
|
if (!empty($this->prepare_cursor[$stm_name]['query_raw'])) {
|
||||||
|
// statement name eixts
|
||||||
|
$return_value = 1;
|
||||||
|
if ($this->prepare_cursor[$stm_name]['query_raw'] == $query) {
|
||||||
|
// query also matches
|
||||||
|
$return_value = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $return_value;
|
||||||
|
}
|
||||||
|
|
||||||
// ***************************
|
// ***************************
|
||||||
// ERROR AND WARNING DATA
|
// ERROR AND WARNING DATA
|
||||||
// ***************************
|
// ***************************
|
||||||
|
|||||||
95
www/lib/CoreLibs/DeprecatedHelper/Deprecated84.php
Normal file
95
www/lib/CoreLibs/DeprecatedHelper/Deprecated84.php
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AUTHOR: Clemens Schwaighofer
|
||||||
|
* CREATED: 2025/1/17
|
||||||
|
* DESCRIPTION:
|
||||||
|
* Deprecated helper for fputcsv
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\DeprecatedHelper;
|
||||||
|
|
||||||
|
use InvalidArgumentException;
|
||||||
|
|
||||||
|
class Deprecated84
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This is a wrapper for fputcsv to fix deprecated warning for $escape parameter
|
||||||
|
* See: https://www.php.net/manual/en/function.fputcsv.php
|
||||||
|
* escape parameter deprecation and recommend to set to "" for compatible with PHP 9.0
|
||||||
|
*
|
||||||
|
* @param mixed $stream
|
||||||
|
* @param array<mixed> $fields
|
||||||
|
* @param string $separator
|
||||||
|
* @param string $enclosure
|
||||||
|
* @param string $escape
|
||||||
|
* @param string $eol
|
||||||
|
* @return int|false
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public static function fputcsv(
|
||||||
|
mixed $stream,
|
||||||
|
array $fields,
|
||||||
|
string $separator = ",",
|
||||||
|
string $enclosure = '"',
|
||||||
|
string $escape = '', // set to empty for future compatible
|
||||||
|
string $eol = PHP_EOL
|
||||||
|
): int | false {
|
||||||
|
if (!is_resource($stream)) {
|
||||||
|
throw new \InvalidArgumentException("fputcsv stream parameter must be a resrouce");
|
||||||
|
}
|
||||||
|
return fputcsv($stream, $fields, $separator, $enclosure, $escape, $eol);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a wrapper for fgetcsv to fix deprecated warning for $escape parameter
|
||||||
|
* See: https://www.php.net/manual/en/function.fgetcsv.php
|
||||||
|
* escape parameter deprecation and recommend to set to "" for compatible with PHP 9.0
|
||||||
|
*
|
||||||
|
* @param mixed $stream
|
||||||
|
* @param null|int<0,max> $length
|
||||||
|
* @param string $separator
|
||||||
|
* @param string $enclosure
|
||||||
|
* @param string $escape
|
||||||
|
* @return array<mixed>|false
|
||||||
|
* @throws InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public static function fgetcsv(
|
||||||
|
mixed $stream,
|
||||||
|
?int $length = null,
|
||||||
|
string $separator = ',',
|
||||||
|
string $enclosure = '"',
|
||||||
|
string $escape = '' // set to empty for future compatible
|
||||||
|
): array | false {
|
||||||
|
if (!is_resource($stream)) {
|
||||||
|
throw new \InvalidArgumentException("fgetcsv stream parameter must be a resrouce");
|
||||||
|
}
|
||||||
|
return fgetcsv($stream, $length, $separator, $enclosure, $escape);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a wrapper for str_getcsv to fix deprecated warning for $escape parameter
|
||||||
|
* See: https://www.php.net/manual/en/function.str-getcsv.php
|
||||||
|
* escape parameter deprecation and recommend to set to "" for compatible with PHP 9.0
|
||||||
|
*
|
||||||
|
* @param string $string
|
||||||
|
* @param string $separator
|
||||||
|
* @param string $enclosure
|
||||||
|
* @param string $escape
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
// phpcs:disable PSR1.Methods.CamelCapsMethodName
|
||||||
|
public static function str_getcsv(
|
||||||
|
string $string,
|
||||||
|
string $separator = ",",
|
||||||
|
string $enclosure = '"',
|
||||||
|
string $escape = '' // set to empty for future compatible
|
||||||
|
): array {
|
||||||
|
return str_getcsv($string, $separator, $enclosure, $escape);
|
||||||
|
}
|
||||||
|
// phpcs:enable PSR1.Methods.CamelCapsMethodName
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -30,6 +30,10 @@ class Logging
|
|||||||
{
|
{
|
||||||
/** @var int minimum size for a max file size, so we don't set 1 byte, 10kb */
|
/** @var int minimum size for a max file size, so we don't set 1 byte, 10kb */
|
||||||
public const MIN_LOG_MAX_FILESIZE = 10 * 1024;
|
public const MIN_LOG_MAX_FILESIZE = 10 * 1024;
|
||||||
|
/** @var string log file extension, not changeable */
|
||||||
|
private const LOG_FILE_NAME_EXT = "log";
|
||||||
|
/** @var string log file block separator, not changeable */
|
||||||
|
private const LOG_FILE_BLOCK_SEPARATOR = '.';
|
||||||
|
|
||||||
// NOTE: the second party array{} hs some errors
|
// NOTE: the second party array{} hs some errors
|
||||||
/** @var array<string,array<string,string|bool|Level>>|array{string:array{type:string,type_info?:string,mandatory:true,alias?:string,default:string|bool|Level,deprecated:bool,use?:string}} */
|
/** @var array<string,array<string,string|bool|Level>>|array{string:array{type:string,type_info?:string,mandatory:true,alias?:string,default:string|bool|Level,deprecated:bool,use?:string}} */
|
||||||
@@ -104,8 +108,6 @@ class Logging
|
|||||||
private string $log_folder = '';
|
private string $log_folder = '';
|
||||||
/** @var string a alphanumeric name that has to be set as global definition */
|
/** @var string a alphanumeric name that has to be set as global definition */
|
||||||
private string $log_file_id = '';
|
private string $log_file_id = '';
|
||||||
/** @var string log file name extension */
|
|
||||||
private string $log_file_name_ext = 'log';
|
|
||||||
/** @var string log file name with folder, for actual writing */
|
/** @var string log file name with folder, for actual writing */
|
||||||
private string $log_file_name = '';
|
private string $log_file_name = '';
|
||||||
/** @var int set in bytes */
|
/** @var int set in bytes */
|
||||||
@@ -431,7 +433,7 @@ class Logging
|
|||||||
private function buildLogFileName(Level $level, string $group_id = ''): string
|
private function buildLogFileName(Level $level, string $group_id = ''): string
|
||||||
{
|
{
|
||||||
// init base file path
|
// init base file path
|
||||||
$fn = $this->log_print_file . '.' . $this->log_file_name_ext;
|
$fn = $this->log_print_file . '.' . self::LOG_FILE_NAME_EXT;
|
||||||
// log ID prefix settings, if not valid, replace with empty
|
// log ID prefix settings, if not valid, replace with empty
|
||||||
if (!empty($this->log_file_id)) {
|
if (!empty($this->log_file_id)) {
|
||||||
$rpl_string = $this->log_file_id;
|
$rpl_string = $this->log_file_id;
|
||||||
@@ -440,14 +442,15 @@ class Logging
|
|||||||
}
|
}
|
||||||
$fn = str_replace('{LOGID}', $rpl_string, $fn); // log id (like a log file prefix)
|
$fn = str_replace('{LOGID}', $rpl_string, $fn); // log id (like a log file prefix)
|
||||||
|
|
||||||
$rpl_string = !$this->getLogFlag(Flag::per_level) ? '' :
|
$rpl_string = $this->getLogFlag(Flag::per_level) ?
|
||||||
'_' . $level->getName();
|
self::LOG_FILE_BLOCK_SEPARATOR . $level->getName() :
|
||||||
|
'';
|
||||||
$fn = str_replace('{LEVEL}', $rpl_string, $fn); // create output filename
|
$fn = str_replace('{LEVEL}', $rpl_string, $fn); // create output filename
|
||||||
|
|
||||||
// write per level
|
// write per level
|
||||||
$rpl_string = !$this->getLogFlag(Flag::per_group) ? '' :
|
$rpl_string = $this->getLogFlag(Flag::per_group) ?
|
||||||
// normalize level, replace all non alphanumeric characters with -
|
// normalize level, replace all non alphanumeric characters with -
|
||||||
'_' . (
|
self::LOG_FILE_BLOCK_SEPARATOR . (
|
||||||
// if return is only - then set error string
|
// if return is only - then set error string
|
||||||
preg_match(
|
preg_match(
|
||||||
"/^-+$/",
|
"/^-+$/",
|
||||||
@@ -455,25 +458,29 @@ class Logging
|
|||||||
) ?
|
) ?
|
||||||
'INVALID-LEVEL-STRING' :
|
'INVALID-LEVEL-STRING' :
|
||||||
$level_string
|
$level_string
|
||||||
);
|
) :
|
||||||
|
'';
|
||||||
$fn = str_replace('{GROUP}', $rpl_string, $fn); // create output filename
|
$fn = str_replace('{GROUP}', $rpl_string, $fn); // create output filename
|
||||||
// set per class, but don't use get_class as we will only get self
|
// set per class, but don't use get_class as we will only get self
|
||||||
$rpl_string = !$this->getLogFlag(Flag::per_class) ? '' : '_'
|
$rpl_string = $this->getLogFlag(Flag::per_class) ?
|
||||||
// set sub class settings
|
// set sub class settings
|
||||||
. str_replace('\\', '-', Support::getCallerTopLevelClass());
|
self::LOG_FILE_BLOCK_SEPARATOR . str_replace('\\', '-', Support::getCallerTopLevelClass()) :
|
||||||
|
'';
|
||||||
$fn = str_replace('{CLASS}', $rpl_string, $fn); // create output filename
|
$fn = str_replace('{CLASS}', $rpl_string, $fn); // create output filename
|
||||||
|
|
||||||
// if request to write to one file
|
// if request to write to one file
|
||||||
$rpl_string = !$this->getLogFlag(Flag::per_page) ?
|
$rpl_string = $this->getLogFlag(Flag::per_page) ?
|
||||||
'' :
|
self::LOG_FILE_BLOCK_SEPARATOR . System::getPageName(System::NO_EXTENSION) :
|
||||||
'_' . System::getPageName(System::NO_EXTENSION);
|
'';
|
||||||
$fn = str_replace('{PAGENAME}', $rpl_string, $fn); // create output filename
|
$fn = str_replace('{PAGENAME}', $rpl_string, $fn); // create output filename
|
||||||
|
|
||||||
// if run id, we auto add ymd, so we ignore the log file date
|
// if run id, we auto add ymd, so we ignore the log file date
|
||||||
if ($this->getLogFlag(Flag::per_run)) {
|
if ($this->getLogFlag(Flag::per_run)) {
|
||||||
$rpl_string = '_' . $this->getLogUniqueId(); // add 8 char unique string
|
// add 8 char unique string and date block with time
|
||||||
|
$rpl_string = self::LOG_FILE_BLOCK_SEPARATOR . $this->getLogUniqueId();
|
||||||
} elseif ($this->getLogFlag(Flag::per_date)) {
|
} elseif ($this->getLogFlag(Flag::per_date)) {
|
||||||
$rpl_string = '_' . $this->getLogDate(); // add date to file
|
// add date to file
|
||||||
|
$rpl_string = self::LOG_FILE_BLOCK_SEPARATOR . $this->getLogDate();
|
||||||
} else {
|
} else {
|
||||||
$rpl_string = '';
|
$rpl_string = '';
|
||||||
}
|
}
|
||||||
@@ -739,7 +746,10 @@ class Logging
|
|||||||
{
|
{
|
||||||
if (empty($this->log_file_unique_id) || $override == true) {
|
if (empty($this->log_file_unique_id) || $override == true) {
|
||||||
$this->log_file_unique_id =
|
$this->log_file_unique_id =
|
||||||
date('Y-m-d_His') . '_U_'
|
date('Y-m-d_His')
|
||||||
|
. self::LOG_FILE_BLOCK_SEPARATOR
|
||||||
|
. 'U_'
|
||||||
|
// this doesn't have to be unique for everything, just for this logging purpose
|
||||||
. substr(hash(
|
. substr(hash(
|
||||||
'sha1',
|
'sha1',
|
||||||
random_bytes(63)
|
random_bytes(63)
|
||||||
|
|||||||
Reference in New Issue
Block a user