Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ace02b14d8 | |||
| 58e916d314 | |||
| 4f6d85f4da | |||
| cd45590a72 | |||
| 4d42da201c | |||
| e310cb626a | |||
| c04c71d755 | |||
| 9fc40a6629 | |||
| 6362e7f2f0 | |||
| 50dfc10d31 | |||
| 24077e483f | |||
| 6585c6bfef | |||
| f180046283 | |||
| b64d0ce5f0 |
@@ -1 +1 @@
|
|||||||
9.25.3
|
9.26.5
|
||||||
|
|||||||
@@ -1418,6 +1418,7 @@ class Login
|
|||||||
'additional_acl' => Json::jsonConvertToArray($res['additional_acl']),
|
'additional_acl' => Json::jsonConvertToArray($res['additional_acl']),
|
||||||
'data' => $ea_data
|
'data' => $ea_data
|
||||||
];
|
];
|
||||||
|
// LEGACY LOOKUP
|
||||||
$unit_access_eaid[$res['edit_access_id']] = [
|
$unit_access_eaid[$res['edit_access_id']] = [
|
||||||
'cuid' => $res['cuid'],
|
'cuid' => $res['cuid'],
|
||||||
];
|
];
|
||||||
@@ -1477,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'];
|
||||||
@@ -1529,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'] = [];
|
||||||
@@ -1552,8 +1555,10 @@ class Login
|
|||||||
$this->acl['unit_legacy'][$unit['id']] = $this->acl['unit'][$ea_cuid];
|
$this->acl['unit_legacy'][$unit['id']] = $this->acl['unit'][$ea_cuid];
|
||||||
// detail name/level set
|
// detail name/level set
|
||||||
$this->acl['unit_detail'][$ea_cuid] = [
|
$this->acl['unit_detail'][$ea_cuid] = [
|
||||||
|
'id' => $unit['id'],
|
||||||
'name' => $unit['name'],
|
'name' => $unit['name'],
|
||||||
'uid' => $unit['uid'],
|
'uid' => $unit['uid'],
|
||||||
|
'cuuid' => $unit['cuuid'],
|
||||||
'level' => $this->default_acl_list[$this->acl['unit'][$ea_cuid]]['name'] ?? -1,
|
'level' => $this->default_acl_list[$this->acl['unit'][$ea_cuid]]['name'] ?? -1,
|
||||||
'default' => $unit['default'],
|
'default' => $unit['default'],
|
||||||
'data' => $unit['data'],
|
'data' => $unit['data'],
|
||||||
@@ -3277,6 +3282,34 @@ HTML;
|
|||||||
return (int)$_SESSION['LOGIN_UNIT_CUID'][$uid];
|
return (int)$_SESSION['LOGIN_UNIT_CUID'][$uid];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy lookup for edit access id to cuid
|
||||||
|
*
|
||||||
|
* @param int $id edit access id PK
|
||||||
|
* @return string|false edit access cuid or false if not found
|
||||||
|
*/
|
||||||
|
public function loginGetEditAccessCuidFromId(int $id): string|false
|
||||||
|
{
|
||||||
|
if (!isset($_SESSION['LOGIN_UNIT_LEGACY'][$id])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
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'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if admin flag is set
|
* Check if admin flag is set
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -289,7 +289,7 @@ class Backend
|
|||||||
* JSON, STRING/SERIEAL, BINARY/BZIP or ZLIB
|
* JSON, STRING/SERIEAL, BINARY/BZIP or ZLIB
|
||||||
* @param string|null $db_schema [default=null] override target schema
|
* @param string|null $db_schema [default=null] override target schema
|
||||||
* @return void
|
* @return void
|
||||||
* @deprecated Use $login->writeLog() and set action_set from ->adbGetActionSet()
|
* @deprecated Use $login->writeLog($event, $data, action_set:$cms->adbGetActionSet(), write_type:$write_type)
|
||||||
*/
|
*/
|
||||||
public function adbEditLog(
|
public function adbEditLog(
|
||||||
string $event = '',
|
string $event = '',
|
||||||
|
|||||||
95
src/DeprecatedHelper/Deprecated84.php
Normal file
95
src/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)
|
||||||
|
|||||||
@@ -1531,6 +1531,12 @@ final class CoreLibsACLLoginTest extends TestCase
|
|||||||
$login_mock->loginGetEditAccessCuidFromUid($mock_settings['edit_access_uid']),
|
$login_mock->loginGetEditAccessCuidFromUid($mock_settings['edit_access_uid']),
|
||||||
'Assert check access uid to cuid valid'
|
'Assert check access uid to cuid valid'
|
||||||
);
|
);
|
||||||
|
// - loginGetEditAccessCuidFromId
|
||||||
|
$this->assertEquals(
|
||||||
|
$expected['check_access_cuid'],
|
||||||
|
$login_mock->loginGetEditAccessCuidFromUid($mock_settings['edit_access_id']),
|
||||||
|
'Assert check access id to cuid valid'
|
||||||
|
);
|
||||||
// Deprecated
|
// Deprecated
|
||||||
// - loginCheckEditAccess
|
// - loginCheckEditAccess
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
|
|||||||
@@ -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'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user