PHP 8.1 base version update

This commit is contained in:
2023-02-28 18:04:42 +09:00
parent 1d220f25eb
commit 0a80abe8a4
30 changed files with 528 additions and 480 deletions

View File

@@ -6,8 +6,6 @@ parameters:
level: 8 # max is now 9 level: 8 # max is now 9
checkMissingCallableSignature: true checkMissingCallableSignature: true
treatPhpDocTypesAsCertain: false treatPhpDocTypesAsCertain: false
strictRules:
allRules: false
paths: paths:
- %currentWorkingDirectory%/src - %currentWorkingDirectory%/src
bootstrapFiles: bootstrapFiles:
@@ -27,9 +25,9 @@ parameters:
#- # this error is ignore because of the PHP 8.0 to 8.1 change for pg_*, only for 8.0 or lower #- # this error is ignore because of the PHP 8.0 to 8.1 change for pg_*, only for 8.0 or lower
# message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects resource(\\|null)?, object\\|resource(\\|bool)? given\\.$#" # message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects resource(\\|null)?, object\\|resource(\\|bool)? given\\.$#"
# path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php # path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php
- # this is for 8.1 or newer # - # this is for 8.1 or newer
message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects PgSql\\\\(Result|Connection(\\|string)?(\\|null)?), object\\|resource given\\.$#" # message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects PgSql\\\\(Result|Connection(\\|string)?(\\|null)?), object\\|resource given\\.$#"
path: %currentWorkingDirectory%/src/DB/SQL/PgSQL.php # path: %currentWorkingDirectory%/src/DB/SQL/PgSQL.php
# this is ignored for now # this is ignored for now
# - '#Expression in empty\(\) is always falsy.#' # - '#Expression in empty\(\) is always falsy.#'
# - # -

View File

@@ -157,7 +157,7 @@ class Login
private $acl = []; private $acl = [];
/** @var array<mixed> */ /** @var array<mixed> */
private $default_acl_list = []; private $default_acl_list = [];
/** @var array<int|string,mixed> Reverse list to lookup level from type */ /** @var array<string,int> Reverse list to lookup level from type */
private $default_acl_list_type = []; private $default_acl_list_type = [];
/** @var int default ACL level to be based on if nothing set */ /** @var int default ACL level to be based on if nothing set */
private $default_acl_level = 0; private $default_acl_level = 0;
@@ -332,7 +332,7 @@ class Login
'type' => $res['type'], 'type' => $res['type'],
'name' => $res['name'] 'name' => $res['name']
]; ];
$this->default_acl_list_type[$res['type']] = $res['level']; $this->default_acl_list_type[(string)$res['type']] = (int)$res['level'];
} }
// write that into the session // write that into the session
$_SESSION['DEFAULT_ACL_LIST'] = $this->default_acl_list; $_SESSION['DEFAULT_ACL_LIST'] = $this->default_acl_list;
@@ -986,7 +986,7 @@ class Login
* @param string $password the new password * @param string $password the new password
* @return bool true or false if valid password or not * @return bool true or false if valid password or not
*/ */
private function loginPasswordChangeValidPassword($password): bool private function loginPasswordChangeValidPassword(string $password): bool
{ {
$is_valid_password = true; $is_valid_password = true;
// check for valid in regex arrays in list // check for valid in regex arrays in list
@@ -1048,7 +1048,7 @@ class Login
$res = $this->db->dbReturnRow($q); $res = $this->db->dbReturnRow($q);
if ( if (
!is_array($res) || !is_array($res) ||
(is_array($res) && empty($res['edit_user_id'])) empty($res['edit_user_id'])
) { ) {
// username wrong // username wrong
$this->login_error = 201; $this->login_error = 201;
@@ -1068,9 +1068,11 @@ class Login
} }
if ( if (
!is_array($res) || !is_array($res) ||
(is_array($res) && empty($res['edit_user_id']) ||
(empty($res['edit_user_id']) || !$this->loginPasswordCheck(
!$this->loginPasswordCheck($res['old_password_hash'], $this->pw_old_password))) $res['old_password_hash'],
$this->pw_old_password
)
) { ) {
// old password wrong // old password wrong
$this->login_error = 202; $this->login_error = 202;
@@ -1124,7 +1126,7 @@ class Login
* *
* @return string|null html data for login page, or null for nothing * @return string|null html data for login page, or null for nothing
*/ */
private function loginCreateLoginHTML() private function loginCreateLoginHTML(): ?string
{ {
$html_string = null; $html_string = null;
// if permission is ok, return null // if permission is ok, return null
@@ -1421,8 +1423,12 @@ EOM;
* @param string $username login user username * @param string $username login user username
* @return void has no return * @return void has no return
*/ */
private function writeLog(string $event, string $data, $error = '', string $username = ''): void private function writeLog(
{ string $event,
string $data,
string|int $error = '',
string $username = ''
): void {
if ($this->login) { if ($this->login) {
$this->action = 'Login'; $this->action = 'Login';
} elseif ($this->logout) { } elseif ($this->logout) {
@@ -1794,7 +1800,6 @@ EOM;
// check that numeric, positive numeric, not longer than max input string lenght // check that numeric, positive numeric, not longer than max input string lenght
// and not short than min password length // and not short than min password length
if ( if (
is_numeric($length) &&
$length >= $this->password_min_length_max && $length >= $this->password_min_length_max &&
$length <= $this->password_max_length && $length <= $this->password_max_length &&
$length <= 255 $length <= 255
@@ -2069,9 +2074,12 @@ EOM;
* @param string $type Type name to look in the acl list * @param string $type Type name to look in the acl list
* @return int|bool Either int level or false for not found * @return int|bool Either int level or false for not found
*/ */
public function loginGetAclListFromType(string $type) public function loginGetAclListFromType(string $type): int|bool
{ {
return $this->default_acl_list_type[$type] ?? false; if (!isset($this->default_acl_list_type[$type])) {
return false;
}
return (int)$this->default_acl_list_type[$type];
} }
/** /**
@@ -2081,7 +2089,7 @@ EOM;
* @return bool true/false: if the edit access is not * @return bool true/false: if the edit access is not
* in the valid list: false * in the valid list: false
*/ */
public function loginCheckEditAccess($edit_access_id): bool public function loginCheckEditAccess(?int $edit_access_id): bool
{ {
if ($edit_access_id === null) { if ($edit_access_id === null) {
return false; return false;
@@ -2122,8 +2130,10 @@ EOM;
* @param string|int $data_key key value to search for * @param string|int $data_key key value to search for
* @return bool|string false for not found or string for found data * @return bool|string false for not found or string for found data
*/ */
public function loginGetEditAccessData(int $edit_access_id, $data_key) public function loginGetEditAccessData(
{ int $edit_access_id,
string|int $data_key
): bool|string {
if (!isset($_SESSION['UNIT'][$edit_access_id]['data'][$data_key])) { if (!isset($_SESSION['UNIT'][$edit_access_id]['data'][$data_key])) {
return false; return false;
} }
@@ -2137,9 +2147,12 @@ EOM;
* @param string $uid Edit Access UID to look for * @param string $uid Edit Access UID to look for
* @return int|bool Either primary key in int or false in bool for not found * @return int|bool Either primary key in int or false in bool for not found
*/ */
public function loginGetEditAccessIdFromUid(string $uid) public function loginGetEditAccessIdFromUid(string $uid): int|bool
{ {
return $_SESSION['UNIT_UID'][$uid] ?? false; if (!isset($_SESSION['UNIT_UID'][$uid])) {
return false;
}
return (int)$_SESSION['UNIT_UID'][$uid];
} }
/** /**
@@ -2204,8 +2217,10 @@ EOM;
* @param string|int $data_key * @param string|int $data_key
* @return bool|string * @return bool|string
*/ */
public function loginSetEditAccessData(int $edit_access_id, $data_key) public function loginSetEditAccessData(
{ int $edit_access_id,
string|int $data_key
): bool|string {
return $this->loginGetEditAccessData($edit_access_id, $data_key); return $this->loginGetEditAccessData($edit_access_id, $data_key);
} }
} }

View File

@@ -194,7 +194,7 @@ class Backend
*/ */
public function adbEditLog( public function adbEditLog(
string $event = '', string $event = '',
$data = '', string|array $data = '',
string $write_type = 'STRING' string $write_type = 'STRING'
): void { ): void {
$data_binary = ''; $data_binary = '';
@@ -262,7 +262,7 @@ class Backend
* @param string|int $menu_show_flag * @param string|int $menu_show_flag
* @return string|int * @return string|int
*/ */
public function adbSetMenuShowFlag($menu_show_flag) public function adbSetMenuShowFlag(string|int $menu_show_flag): string|int
{ {
// must be string or int // must be string or int
$this->menu_show_flag = $menu_show_flag; $this->menu_show_flag = $menu_show_flag;
@@ -274,7 +274,7 @@ class Backend
* *
* @return string|int * @return string|int
*/ */
public function adbGetMenuShowFlag() public function adbGetMenuShowFlag(): string|int
{ {
return $this->menu_show_flag; return $this->menu_show_flag;
} }
@@ -437,7 +437,7 @@ class Backend
* @return array<mixed> associative array * @return array<mixed> associative array
* @deprecated \CoreLibs\Combined\ArrayHandler::genAssocArray() * @deprecated \CoreLibs\Combined\ArrayHandler::genAssocArray()
*/ */
public function adbAssocArray(array $db_array, $key, $value): array public function adbAssocArray(array $db_array, string|int|bool $key, string|int|bool $value): array
{ {
trigger_error( trigger_error(
'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Combined\ArrayHandler::genAssocArray', 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Combined\ArrayHandler::genAssocArray',
@@ -453,7 +453,7 @@ class Backend
* @return string formatted string * @return string formatted string
* @deprecated \CoreLibs\Convert\Byte::humanReadableByteFormat() * @deprecated \CoreLibs\Convert\Byte::humanReadableByteFormat()
*/ */
public function adbByteStringFormat($number): string public function adbByteStringFormat(string|int|float $number): string
{ {
trigger_error( trigger_error(
'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Convert\Byte::humanReadableByteFormat()', 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Convert\Byte::humanReadableByteFormat()',
@@ -482,7 +482,7 @@ class Backend
string $dummy = '', string $dummy = '',
string $path = '', string $path = '',
string $cache = '' string $cache = ''
) { ): string|bool {
trigger_error( trigger_error(
'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Output\Image::createThumbnail()', 'Method ' . __METHOD__ . ' is deprecated: \CoreLibs\Output\Image::createThumbnail()',
E_USER_DEPRECATED E_USER_DEPRECATED
@@ -569,11 +569,11 @@ class Backend
* Basic class holds exact the same, except the Year/Month/Day/etc strings * Basic class holds exact the same, except the Year/Month/Day/etc strings
* are translated in this call * are translated in this call
* *
* @param int $year year YYYY * @param int|string $year year YYYY
* @param int $month month m * @param int|string $month month m
* @param int $day day d * @param int|string $day day d
* @param int $hour hour H * @param int|string $hour hour H
* @param int $min min i * @param int|string $min min i
* @param string $suffix additional info printed after the date time * @param string $suffix additional info printed after the date time
* variable in the drop down * variable in the drop down
* also used for ID in the on change JS call * also used for ID in the on change JS call
@@ -586,11 +586,11 @@ class Backend
* of date and time * of date and time
*/ */
public function adbPrintDateTime( public function adbPrintDateTime(
$year, int|string $year,
$month, int|string $month,
$day, int|string $day,
$hour, int|string $hour,
$min, int|string $min,
string $suffix = '', string $suffix = '',
int $min_steps = 1, int $min_steps = 1,
bool $name_pos_back = false bool $name_pos_back = false

View File

@@ -534,7 +534,7 @@ class EditBase
* @throws Exception * @throws Exception
* @throws SmartyException * @throws SmartyException
*/ */
public function editBaseRun() public function editBaseRun(): void
{ {
// set the template dir // set the template dir
// WARNING: this has a special check for the mailing tool layout (old layout) // WARNING: this has a special check for the mailing tool layout (old layout)

View File

@@ -672,9 +672,6 @@ class Basic
public static function arrayToString(array $array, string $connect_char): string public static function arrayToString(array $array, string $connect_char): string
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use join()', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use join()', E_USER_DEPRECATED);
if (!is_array($array)) {
$array = [];
}
return join($connect_char, $array); return join($connect_char, $array);
} }

View File

@@ -42,8 +42,11 @@ class Colors
* @param int|false $hsl_flag flag to check for hsl type * @param int|false $hsl_flag flag to check for hsl type
* @return bool True if no error, False if error * @return bool True if no error, False if error
*/ */
private static function rgbHslContentCheck(string $color, $rgb_flag, $hsl_flag): bool private static function rgbHslContentCheck(
{ string $color,
int|false $rgb_flag,
int|false $hsl_flag
): bool {
// extract string between () and split into elements // extract string between () and split into elements
preg_match("/\((.*)\)/", $color, $matches); preg_match("/\((.*)\)/", $color, $matches);
if ( if (

View File

@@ -25,7 +25,7 @@ class Encoding
* if null is set then "none" * if null is set then "none"
* @return void * @return void
*/ */
public static function setErrorChar($string): void public static function setErrorChar(string|int|null $string): void
{ {
if (empty($string)) { if (empty($string)) {
$string = 'none'; $string = 'none';
@@ -52,7 +52,7 @@ class Encoding
* directly * directly
* @return string|int Set error character * @return string|int Set error character
*/ */
public static function getErrorChar(bool $return_substitute_func = false) public static function getErrorChar(bool $return_substitute_func = false): string|int
{ {
// return mb_substitute_character(); // return mb_substitute_character();
if ($return_substitute_func === true) { if ($return_substitute_func === true) {
@@ -78,14 +78,14 @@ class Encoding
* @param string $string string to test * @param string $string string to test
* @param string $from_encoding encoding of string to test * @param string $from_encoding encoding of string to test
* @param string $to_encoding target encoding * @param string $to_encoding target encoding
* @return bool|array<string> false if no error or * @return array<string>|false false if no error or
* array with failed characters * array with failed characters
*/ */
public static function checkConvertEncoding( public static function checkConvertEncoding(
string $string, string $string,
string $from_encoding, string $from_encoding,
string $to_encoding string $to_encoding
) { ): array|false {
// convert to target encoding and convert back // convert to target encoding and convert back
$temp = mb_convert_encoding($string, $to_encoding, $from_encoding); $temp = mb_convert_encoding($string, $to_encoding, $from_encoding);
$compare = mb_convert_encoding($temp, $from_encoding, $to_encoding); $compare = mb_convert_encoding($temp, $from_encoding, $to_encoding);

View File

@@ -32,7 +32,7 @@ class Jason
* or error string ('' for no error) * or error string ('' for no error)
* @deprecated Use Json::jsonGetLastError() * @deprecated Use Json::jsonGetLastError()
*/ */
public static function jsonGetLastError(bool $return_string = false) public static function jsonGetLastError(bool $return_string = false): int|string
{ {
return Json::jsonGetLastError($return_string); return Json::jsonGetLastError($return_string);
} }

View File

@@ -21,12 +21,12 @@ class ArrayHandler
* the needle can be found in the * the needle can be found in the
* haystack array * haystack array
*/ */
public static function arraySearchRecursive($needle, array $haystack, ?string $key_search_for = null): array public static function arraySearchRecursive(
{ string|int $needle,
array $haystack,
?string $key_search_for = null
): array {
$path = []; $path = [];
if (!is_array($haystack)) {
$haystack = [];
}
if ( if (
$key_search_for != null && $key_search_for != null &&
array_key_exists($key_search_for, $haystack) && array_key_exists($key_search_for, $haystack) &&
@@ -72,7 +72,7 @@ class ArrayHandler
* *
* @param string|int $needle needle (search for) * @param string|int $needle needle (search for)
* @param array<mixed> $haystack haystack (search in) * @param array<mixed> $haystack haystack (search in)
* @param string|int $key_search_for the key to look for in * @param string|int|null $key_search_for the key to look for in
* @param bool $old [true], if set to false will * @param bool $old [true], if set to false will
* return new flat layout * return new flat layout
* @param array<mixed>|null $path recursive call for previous path * @param array<mixed>|null $path recursive call for previous path
@@ -80,9 +80,9 @@ class ArrayHandler
* the element was found * the element was found
*/ */
public static function arraySearchRecursiveAll( public static function arraySearchRecursiveAll(
$needle, string|int $needle,
array $haystack, array $haystack,
$key_search_for, string|int|null $key_search_for,
bool $old = true, bool $old = true,
?array $path = null ?array $path = null
): ?array { ): ?array {
@@ -101,10 +101,6 @@ class ArrayHandler
$path['work'] = []; $path['work'] = [];
} }
} }
// should not be needed because it would trigger a php mehtod error
if (!is_array($haystack)) {
$haystack = [];
}
// go through the array, // go through the array,
foreach ($haystack as $_key => $_value) { foreach ($haystack as $_key => $_value) {
@@ -154,15 +150,16 @@ class ArrayHandler
* *
* @param array<mixed> $array search in as array * @param array<mixed> $array search in as array
* @param string|int $key key (key to search in) * @param string|int $key key (key to search in)
* @param string|int $value value (what to find) * @param string|int|bool $value value (what to find)
* @param bool $strict [false], if set to true, will strict check key/value * @param bool $strict [false], if set to true, will strict check key/value
* @return bool true on found, false on not found * @return bool true on found, false on not found
*/ */
public static function arraySearchSimple(array $array, $key, $value, bool $strict = false): bool public static function arraySearchSimple(
{ array $array,
if (!is_array($array)) { string|int $key,
$array = []; string|int|bool $value,
} bool $strict = false
): bool {
foreach ($array as $_key => $_value) { foreach ($array as $_key => $_value) {
// if value is an array, we search // if value is an array, we search
if (is_array($_value)) { if (is_array($_value)) {
@@ -189,9 +186,9 @@ class ArrayHandler
* bool key flag: true: handle keys as string or int * bool key flag: true: handle keys as string or int
* default false: all keys are string * default false: all keys are string
* *
* @return array<mixed>|bool merged array * @return array<mixed>|false merged array
*/ */
public static function arrayMergeRecursive() public static function arrayMergeRecursive(): array|false
{ {
// croak on not enough arguemnts (we need at least two) // croak on not enough arguemnts (we need at least two)
if (func_num_args() < 2) { if (func_num_args() < 2) {
@@ -264,10 +261,10 @@ class ArrayHandler
* @param array<mixed> $needle elements to search for * @param array<mixed> $needle elements to search for
* @param array<mixed> $haystack array where the $needle elements should * @param array<mixed> $haystack array where the $needle elements should
* be searched int * be searched int
* @return array<mixed>|bool either the found elements or * @return array<mixed>|false either the found elements or
* false for nothing found or error * false for nothing found or error
*/ */
public static function inArrayAny(array $needle, array $haystack) public static function inArrayAny(array $needle, array $haystack): array|false
{ {
$found = []; $found = [];
foreach ($needle as $element) { foreach ($needle as $element) {
@@ -291,8 +288,12 @@ class ArrayHandler
* @param bool $set_only flag to return all (default), or set only * @param bool $set_only flag to return all (default), or set only
* @return array<mixed> associative array * @return array<mixed> associative array
*/ */
public static function genAssocArray(array $db_array, $key, $value, bool $set_only = false): array public static function genAssocArray(
{ array $db_array,
string|int|bool $key,
string|int|bool $value,
bool $set_only = false
): array {
$ret_array = []; $ret_array = [];
// do this to only run count once // do this to only run count once
for ($i = 0, $iMax = count($db_array); $i < $iMax; $i++) { for ($i = 0, $iMax = count($db_array); $i < $iMax; $i++) {
@@ -385,11 +386,8 @@ class ArrayHandler
* and will be pushed up * and will be pushed up
* @return array<mixed> modified, flattened array * @return array<mixed> modified, flattened array
*/ */
public static function arrayFlatForKey(array $array, $search): array public static function arrayFlatForKey(array $array, string|int $search): array
{ {
if (!is_array($array)) {
$array = [];
}
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
// if it is not an array do just nothing // if it is not an array do just nothing
if (!is_array($value)) { if (!is_array($value)) {

View File

@@ -74,7 +74,7 @@ class DateTime
* @return string formated date+time in Y-M-D h:m:s ms * @return string formated date+time in Y-M-D h:m:s ms
*/ */
public static function dateStringFormat( public static function dateStringFormat(
$timestamp, int|float $timestamp,
bool $show_micro = false, bool $show_micro = false,
bool $micro_as_float = false bool $micro_as_float = false
): string { ): string {
@@ -100,8 +100,10 @@ class DateTime
* @param bool $show_micro show micro seconds, default true * @param bool $show_micro show micro seconds, default true
* @return string interval formatted string or string as is * @return string interval formatted string or string as is
*/ */
public static function timeStringFormat($timestamp, bool $show_micro = true): string public static function timeStringFormat(
{ string|int|float $timestamp,
bool $show_micro = true
): string {
// check if the timestamp has any h/m/s/ms inside, if yes skip // check if the timestamp has any h/m/s/ms inside, if yes skip
if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) { if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) {
list($timestamp, $ms) = array_pad(explode('.', (string)round((float)$timestamp, 4)), 2, null); list($timestamp, $ms) = array_pad(explode('.', (string)round((float)$timestamp, 4)), 2, null);
@@ -157,7 +159,7 @@ class DateTime
* @param string|int|float $timestring formatted interval * @param string|int|float $timestring formatted interval
* @return string|int|float converted float interval, or string as is * @return string|int|float converted float interval, or string as is
*/ */
public static function stringToTime($timestring) public static function stringToTime(string|int|float $timestring): string|int|float
{ {
$timestamp = 0; $timestamp = 0;
if (preg_match("/(d|h|m|s|ms)/", (string)$timestring)) { if (preg_match("/(d|h|m|s|ms)/", (string)$timestring)) {
@@ -247,9 +249,9 @@ class DateTime
* @param string $date a date string in the format YYYY-MM-DD * @param string $date a date string in the format YYYY-MM-DD
* @return bool true if valid date, false if date not valid * @return bool true if valid date, false if date not valid
*/ */
public static function checkDate($date): bool public static function checkDate(string $date): bool
{ {
if (!$date) { if (empty($date)) {
return false; return false;
} }
list ($year, $month, $day) = array_pad( list ($year, $month, $day) = array_pad(
@@ -324,7 +326,7 @@ class DateTime
* @return int|bool false on error * @return int|bool false on error
* or int -1 (s<e)/0 (s=e)/1 (s>e) as difference * or int -1 (s<e)/0 (s=e)/1 (s>e) as difference
*/ */
public static function compareDate($start_date, $end_date) public static function compareDate(string $start_date, string $end_date): int|bool
{ {
// pre check for empty or wrong // pre check for empty or wrong
if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) { if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) {
@@ -367,7 +369,7 @@ class DateTime
* @return int|bool false for error * @return int|bool false for error
* or -1 (s<e)/0 (s=e)/1 (s>e) as difference * or -1 (s<e)/0 (s=e)/1 (s>e) as difference
*/ */
public static function compareDateTime($start_datetime, $end_datetime) public static function compareDateTime(string $start_datetime, string $end_datetime): int|bool
{ {
// pre check for empty or wrong // pre check for empty or wrong
if ($start_datetime == '--' || $end_datetime == '--' || !$start_datetime || !$end_datetime) { if ($start_datetime == '--' || $end_datetime == '--' || !$start_datetime || !$end_datetime) {
@@ -402,8 +404,11 @@ class DateTime
* @param bool $return_named return array type, false (default), true for named * @param bool $return_named return array type, false (default), true for named
* @return array<mixed> 0/overall, 1/weekday, 2/weekend * @return array<mixed> 0/overall, 1/weekday, 2/weekend
*/ */
public static function calcDaysInterval($start_date, $end_date, bool $return_named = false): array public static function calcDaysInterval(
{ string $start_date,
string $end_date,
bool $return_named = false
): array {
// pos 0 all, pos 1 weekday, pos 2 weekend // pos 0 all, pos 1 weekday, pos 2 weekend
$days = []; $days = [];
// if anything invalid, return 0,0,0 // if anything invalid, return 0,0,0

View File

@@ -39,7 +39,7 @@ class Byte
* @return string converted byte number (float) with suffix * @return string converted byte number (float) with suffix
* @throws \Exception 1: no valid flag set * @throws \Exception 1: no valid flag set
*/ */
public static function humanReadableByteFormat($bytes, int $flags = 0): string public static function humanReadableByteFormat(string|int|float $bytes, int $flags = 0): string
{ {
// if not numeric, return as is // if not numeric, return as is
if (is_numeric($bytes)) { if (is_numeric($bytes)) {
@@ -121,7 +121,7 @@ class Byte
* @return string|int|float converted value or original value * @return string|int|float converted value or original value
* @throws \Exception 1: no valid flag set * @throws \Exception 1: no valid flag set
*/ */
public static function stringByteFormat($number, int $flags = 0) public static function stringByteFormat(string|int|float $number, int $flags = 0): string|int|float
{ {
// use SI 1000 mod and not 1024 mod // use SI 1000 mod and not 1024 mod
if ($flags & self::BYTE_FORMAT_SI) { if ($flags & self::BYTE_FORMAT_SI) {

View File

@@ -31,8 +31,12 @@ class Colors
* @return string|bool rgb in hex values with leading # if set, * @return string|bool rgb in hex values with leading # if set,
* false for invalid color * false for invalid color
*/ */
public static function rgb2hex(int $red, int $green, int $blue, bool $hex_prefix = true) public static function rgb2hex(
{ int $red,
int $green,
int $blue,
bool $hex_prefix = true
): string|bool {
$hex_color = ''; $hex_color = '';
if ($hex_prefix === true) { if ($hex_prefix === true) {
$hex_color = '#'; $hex_color = '#';
@@ -61,7 +65,7 @@ class Colors
string $hexStr, string $hexStr,
bool $return_as_string = false, bool $return_as_string = false,
string $seperator = ',' string $seperator = ','
) { ): string|array|bool {
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string $hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
if (!is_string($hexStr)) { if (!is_string($hexStr)) {
return false; return false;
@@ -99,7 +103,7 @@ class Colors
* @return array<int|float>|bool Hue, Sat, Brightness/Value * @return array<int|float>|bool Hue, Sat, Brightness/Value
* false for input value error * false for input value error
*/ */
public static function rgb2hsb(int $red, int $green, int $blue) public static function rgb2hsb(int $red, int $green, int $blue): array|bool
{ {
// check that rgb is from 0 to 255 // check that rgb is from 0 to 255
foreach (['red', 'green', 'blue'] as $c) { foreach (['red', 'green', 'blue'] as $c) {
@@ -146,7 +150,7 @@ class Colors
* @return array<int>|bool 0 red/1 green/2 blue array as 0-255 * @return array<int>|bool 0 red/1 green/2 blue array as 0-255
* false for input value error * false for input value error
*/ */
public static function hsb2rgb(float $H, float $S, float $V) public static function hsb2rgb(float $H, float $S, float $V): array|bool
{ {
// check that H is 0 to 359, 360 = 0 // check that H is 0 to 359, 360 = 0
// and S and V are 0 to 1 // and S and V are 0 to 1
@@ -232,7 +236,7 @@ class Colors
* @return array<float>|bool hue/sat/luminance * @return array<float>|bool hue/sat/luminance
* false for input value error * false for input value error
*/ */
public static function rgb2hsl(int $red, int $green, int $blue) public static function rgb2hsl(int $red, int $green, int $blue): array|bool
{ {
// check that rgb is from 0 to 255 // check that rgb is from 0 to 255
foreach (['red', 'green', 'blue'] as $c) { foreach (['red', 'green', 'blue'] as $c) {
@@ -285,11 +289,8 @@ class Colors
* @param float $lum luminance: 0-100 * @param float $lum luminance: 0-100
* @return array<int,float|int>|bool red/blue/green 0-255 each * @return array<int,float|int>|bool red/blue/green 0-255 each
*/ */
public static function hsl2rgb(float $hue, float $sat, float $lum) public static function hsl2rgb(float $hue, float $sat, float $lum): array|bool
{ {
if (!is_numeric($hue)) {
return false;
}
if ($hue == 360) { if ($hue == 360) {
$hue = 0; $hue = 0;
} }

View File

@@ -19,7 +19,7 @@ class Html
* @param mixed $string string to html encode * @param mixed $string string to html encode
* @return mixed if string, encoded, else as is (eg null) * @return mixed if string, encoded, else as is (eg null)
*/ */
public static function htmlent($string) public static function htmlent(mixed $string): mixed
{ {
if (is_string($string)) { if (is_string($string)) {
return htmlentities($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); return htmlentities($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
@@ -52,7 +52,7 @@ class Html
* @return ?string returns checked or selected, * @return ?string returns checked or selected,
* else returns null * else returns null
*/ */
public static function checked($haystack, string $needle, int $type = 0): ?string public static function checked(array|string $haystack, string $needle, int $type = 0): ?string
{ {
if (is_array($haystack)) { if (is_array($haystack)) {
if (in_array($needle, $haystack)) { if (in_array($needle, $haystack)) {

View File

@@ -51,13 +51,13 @@ class Json
/** /**
* returns human readable string for json errors thrown in jsonConvertToArray * returns human readable string for json errors thrown in jsonConvertToArray
* *
* @param bool|boolean $return_string [default=false] if set to true * @param bool $return_string [default=false] if set to true
* it will return the message string and not * it will return the message string and not
* the error number * the error number
* @return int|string Either error number (0 for no error) * @return int|string Either error number (0 for no error)
* or error string ('' for no error) * or error string ('' for no error)
*/ */
public static function jsonGetLastError(bool $return_string = false) public static function jsonGetLastError(bool $return_string = false): int|string
{ {
$json_error_string = ''; $json_error_string = '';
// valid errors as of php 8.0 // valid errors as of php 8.0

View File

@@ -48,7 +48,7 @@ class Math
* @param string|int|float $number string or number to check * @param string|int|float $number string or number to check
* @return float if not number, then returns 0, else original input * @return float if not number, then returns 0, else original input
*/ */
public static function initNumeric($number): float public static function initNumeric(string|int|float $number): float
{ {
if (!is_numeric($number)) { if (!is_numeric($number)) {
return 0; return 0;

View File

@@ -32,7 +32,7 @@ class RandomKey
* *
* @return void has no return * @return void has no return
*/ */
private static function initRandomKeyData() private static function initRandomKeyData(): void
{ {
// random key generation base string // random key generation base string
self::$key_range = join('', array_merge( self::$key_range = join('', array_merge(
@@ -52,7 +52,6 @@ class RandomKey
private static function validateRandomKeyLenght(int $key_length): bool private static function validateRandomKeyLenght(int $key_length): bool
{ {
if ( if (
is_numeric($key_length) &&
$key_length > 0 && $key_length > 0 &&
$key_length <= self::$max_key_length $key_length <= self::$max_key_length
) { ) {

View File

@@ -18,19 +18,6 @@ class Session
/** @var string list for errors */ /** @var string list for errors */
private $session_intern_error_str = ''; private $session_intern_error_str = '';
/**
* Start session
* startSession should be called for complete check
* If this is called without any name set before the php.ini name is
* used.
*
* @return void
*/
protected function startSessionCall(): void
{
session_start();
}
/** /**
* init a session, if array is empty or array does not have session_name set * init a session, if array is empty or array does not have session_name set
* then no auto init is run * then no auto init is run
@@ -44,6 +31,19 @@ class Session
} }
} }
/**
* Start session
* startSession should be called for complete check
* If this is called without any name set before the php.ini name is
* used.
*
* @return void
*/
protected function startSessionCall(): void
{
session_start();
}
/** /**
* check if we are in CLI, we set this, so we can mock this * check if we are in CLI, we set this, so we can mock this
* Not this is just a wrapper for the static System::checkCLI call * Not this is just a wrapper for the static System::checkCLI call
@@ -116,7 +116,7 @@ class Session
* @param string|null $session_name * @param string|null $session_name
* @return string|bool * @return string|bool
*/ */
public function startSession(?string $session_name = null) public function startSession(?string $session_name = null): string|bool
{ {
// we can't start sessions on command line // we can't start sessions on command line
if ($this->checkCliStatus()) { if ($this->checkCliStatus()) {
@@ -163,7 +163,7 @@ class Session
* *
* @return string|bool * @return string|bool
*/ */
public function getSessionId() public function getSessionId(): string|bool
{ {
return session_id(); return session_id();
} }
@@ -173,7 +173,7 @@ class Session
* *
* @return string|bool * @return string|bool
*/ */
public function getSessionName() public function getSessionName(): string|bool
{ {
return session_name(); return session_name();
} }
@@ -275,7 +275,7 @@ class Session
* @param mixed $value value to set (can be anything) * @param mixed $value value to set (can be anything)
* @return void * @return void
*/ */
public function setS($name, $value): void public function setS(string|int $name, mixed $value): void
{ {
$_SESSION[$name] = $value; $_SESSION[$name] = $value;
} }
@@ -286,7 +286,7 @@ class Session
* @param string|int $name value key to get from _SESSION * @param string|int $name value key to get from _SESSION
* @return mixed value stored in _SESSION * @return mixed value stored in _SESSION
*/ */
public function getS($name) public function getS(string|int $name): mixed
{ {
return $_SESSION[$name] ?? ''; return $_SESSION[$name] ?? '';
} }
@@ -297,7 +297,7 @@ class Session
* @param string|int $name Name to check for * @param string|int $name Name to check for
* @return bool True for set, False fornot set * @return bool True for set, False fornot set
*/ */
public function issetS($name): bool public function issetS(string|int $name): bool
{ {
return isset($_SESSION[$name]); return isset($_SESSION[$name]);
} }
@@ -308,7 +308,7 @@ class Session
* @param string|int $name _SESSION key name to remove * @param string|int $name _SESSION key name to remove
* @return void * @return void
*/ */
public function unsetS($name): void public function unsetS(string|int $name): void
{ {
if (isset($_SESSION[$name])) { if (isset($_SESSION[$name])) {
unset($_SESSION[$name]); unset($_SESSION[$name]);
@@ -325,7 +325,7 @@ class Session
* @param mixed $value * @param mixed $value
* @return void * @return void
*/ */
public function __set($name, $value): void public function __set(string|int $name, mixed $value): void
{ {
$_SESSION[$name] = $value; $_SESSION[$name] = $value;
} }
@@ -334,13 +334,14 @@ class Session
* Undocumented function * Undocumented function
* *
* @param string|int $name * @param string|int $name
* @return mixed * @return mixed If name is not found, it will return null
*/ */
public function __get($name) public function __get(string|int $name): mixed
{ {
if (isset($_SESSION[$name])) { if (isset($_SESSION[$name])) {
return $_SESSION[$name]; return $_SESSION[$name];
} }
return null;
} }
/** /**
@@ -349,7 +350,7 @@ class Session
* @param string|int $name * @param string|int $name
* @return bool * @return bool
*/ */
public function __isset($name): bool public function __isset(string|int $name): bool
{ {
return isset($_SESSION[$name]); return isset($_SESSION[$name]);
} }
@@ -360,7 +361,7 @@ class Session
* @param string|int $name * @param string|int $name
* @return void * @return void
*/ */
public function __unset($name): void public function __unset(string|int $name): void
{ {
if (isset($_SESSION[$name])) { if (isset($_SESSION[$name])) {
unset($_SESSION[$name]); unset($_SESSION[$name]);

View File

@@ -137,7 +137,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param string $text any html encoded string * @param string $text any html encoded string
* @return string decoded html string * @return string decoded html string
*/ */
public function convertData($text): string public function convertData(string $text): string
{ {
$text = str_replace('&lt;b&gt;', '<b>', $text); $text = str_replace('&lt;b&gt;', '<b>', $text);
$text = str_replace('&lt;/b&gt;', '</b>', $text); $text = str_replace('&lt;/b&gt;', '</b>', $text);
@@ -156,7 +156,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param string $text encoded html string * @param string $text encoded html string
* @return string decoded html string * @return string decoded html string
*/ */
public function convertEntities($text): string public function convertEntities(string $text): string
{ {
$text = str_replace('&lt;', '<', $text); $text = str_replace('&lt;', '<', $text);
$text = str_replace('&gt;', '>', $text); $text = str_replace('&gt;', '>', $text);
@@ -172,7 +172,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param bool $write write to error message, default false * @param bool $write write to error message, default false
* @return string the array data as html string entry * @return string the array data as html string entry
*/ */
public function dbDumpArray($write = false): string public function dbDumpArray(bool $write = false): string
{ {
reset($this->table_array); reset($this->table_array);
$string = ''; $string = '';
@@ -192,7 +192,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* *
* @return bool true if pk value is set, else false * @return bool true if pk value is set, else false
*/ */
public function dbCheckPkSet() public function dbCheckPkSet(): bool
{ {
// if pk_id is set, overrule ... // if pk_id is set, overrule ...
if ($this->pk_id) { if ($this->pk_id) {
@@ -210,10 +210,10 @@ class ArrayIO extends \CoreLibs\DB\IO
/** /**
* resets the whole array values * resets the whole array values
* @param boolean $reset_pk true if we want to reset the pk too * @param bool $reset_pk true if we want to reset the pk too
* @return void has no return * @return void has no return
*/ */
public function dbResetArray($reset_pk = false): void public function dbResetArray(bool $reset_pk = false): void
{ {
reset($this->table_array); reset($this->table_array);
foreach (array_keys($this->table_array) as $column) { foreach (array_keys($this->table_array) as $column) {
@@ -230,10 +230,10 @@ class ArrayIO extends \CoreLibs\DB\IO
* *
* @param array<mixed> $table_array optional override for table array set * @param array<mixed> $table_array optional override for table array set
* set this as new table array too * set this as new table array too
* @param boolean $acl_limit [false], if set to true, well do ACL limit check * @param bool $acl_limit [false], if set to true, well do ACL limit check
* @return array<mixed> returns the table array that was deleted * @return array<mixed> returns the table array that was deleted
*/ */
public function dbDelete($table_array = [], $acl_limit = false) public function dbDelete(array $table_array = [], bool $acl_limit = false): array
{ {
// is array and has values, override set and set new // is array and has values, override set and set new
if (is_array($table_array) && count($table_array)) { if (is_array($table_array) && count($table_array)) {
@@ -294,12 +294,12 @@ class ArrayIO extends \CoreLibs\DB\IO
/** /**
* reads one row into the array * reads one row into the array
* *
* @param boolean $edit on true convert data, else as is * @param bool $edit on true convert data, else as is
* @param array<mixed> $table_array optional table array, overwrites * @param array<mixed> $table_array optional table array, overwrites
* internal set array * internal set array
* @return array<mixed> set table array with values * @return array<mixed> set table array with values
*/ */
public function dbRead($edit = false, $table_array = []) public function dbRead(bool $edit = false, array $table_array = []): array
{ {
// if array give, overrules internal array // if array give, overrules internal array
if (is_array($table_array) && count($table_array)) { if (is_array($table_array) && count($table_array)) {
@@ -381,9 +381,9 @@ class ArrayIO extends \CoreLibs\DB\IO
/** /**
* writes one set into DB or updates one set (if PK exists) * writes one set into DB or updates one set (if PK exists)
* *
* @param boolean $addslashes old convert entities and set set escape * @param bool $addslashes old convert entities and set set escape
* @param array<mixed> $table_array optional table array, overwrites internal one * @param array<mixed> $table_array optional table array, overwrites internal one
* @param boolean $acl_limit [false], if set to true, well do ACL limit check * @param bool $acl_limit [false], if set to true, well do ACL limit check
* @return array<mixed> table array or null * @return array<mixed> table array or null
*/ */
public function dbWrite( public function dbWrite(
@@ -391,7 +391,7 @@ class ArrayIO extends \CoreLibs\DB\IO
array $table_array = [], array $table_array = [],
bool $acl_limit = false bool $acl_limit = false
): array { ): array {
if (is_array($table_array) && count($table_array)) { if (count($table_array)) {
$this->table_array = $table_array; $this->table_array = $table_array;
} }
// PK ID check // PK ID check
@@ -475,13 +475,12 @@ class ArrayIO extends \CoreLibs\DB\IO
$this->table_array[$column]['type'] != 'view' && $this->table_array[$column]['type'] != 'view' &&
strlen($column) > 0 && strlen($column) > 0 &&
// no acl limiter // no acl limiter
($acl_limit === false ||
( (
$acl_limit === false ||
// acl limit is true, min edit must be at larger than set // acl limit is true, min edit must be at larger than set
$acl_limit === true &&
$this->base_acl_level >= $this->base_acl_level >=
($this->table_array[$column]['min_edit_acl'] ?? 100) ($this->table_array[$column]['min_edit_acl'] ?? 100)
)) )
) { ) {
// for password use hidden value if main is not set // for password use hidden value if main is not set
if ( if (
@@ -528,7 +527,7 @@ class ArrayIO extends \CoreLibs\DB\IO
} }
$q_data .= $_value; $q_data .= $_value;
} elseif (isset($this->table_array[$column]['bool'])) { } elseif (isset($this->table_array[$column]['bool'])) {
// boolean storeage (reverse check on ifset) // bool storage (reverse check on ifset)
$q_data .= "'" . $this->dbBoolean($this->table_array[$column]['value'], true) . "'"; $q_data .= "'" . $this->dbBoolean($this->table_array[$column]['value'], true) . "'";
} elseif ( } elseif (
isset($this->table_array[$column]['interval']) || isset($this->table_array[$column]['interval']) ||

View File

@@ -12,7 +12,7 @@
* 2013/10/10, prepare/excute were added, including auto RETURNING primary key if * 2013/10/10, prepare/excute were added, including auto RETURNING primary key if
* possible for any INSERT query in exec or prepare/execute, better debugging and * possible for any INSERT query in exec or prepare/execute, better debugging and
* data dumping. Proper string escape wrapper, special db exec writer for complex * data dumping. Proper string escape wrapper, special db exec writer for complex
* array inserts in auto calls. boolean converter from postresql to php * array inserts in auto calls. bool converter from postresql to php
* *
* 2003/12/08, one major change: renamed db_exec_ext to db_return, as it has not * 2003/12/08, one major change: renamed db_exec_ext to db_return, as it has not
* much in common with the normal db_exec wrapper, as it was written only for * much in common with the normal db_exec wrapper, as it was written only for
@@ -168,7 +168,7 @@
* - all HTML from the query data (color codes, etc) via flag to debug call * - all HTML from the query data (color codes, etc) via flag to debug call
* *
* HISTORY: * HISTORY:
* 2008/10/25 (cs) add db_boolean to fix the postgres to php boolean var problem * 2008/10/25 (cs) add db_boolean to fix the postgres to php bool var problem
* (TODO: implement this in any select return) * (TODO: implement this in any select return)
* 2008/07/03 (cs) add db_write_data function, original written for inventory tool "invSQLWriteData" * 2008/07/03 (cs) add db_write_data function, original written for inventory tool "invSQLWriteData"
* 2008/04/16 (cs) add db_escape_string function for correct string escape * 2008/04/16 (cs) add db_escape_string function for correct string escape
@@ -288,7 +288,7 @@ class IO
private $query; // the query string at the moment private $query; // the query string at the moment
// only inside // only inside
// basic vars // basic vars
/** @var object|resource|bool|int|null */ // replace object with PgSql\Connection| /** @var \PgSql\Connection|false|null */ // replace object with PgSql\Connection|
private $dbh; // the dbh handler, if disconnected by command is null, bool:false/int:-1 on error, private $dbh; // the dbh handler, if disconnected by command is null, bool:false/int:-1 on error,
/** @var bool */ /** @var bool */
private $db_debug = false; // DB_DEBUG ... (if set prints out debug msgs) private $db_debug = false; // DB_DEBUG ... (if set prints out debug msgs)
@@ -315,7 +315,7 @@ class IO
/** @var array<mixed,mixed> */ /** @var array<mixed,mixed> */
private $cursor_ext; // hash of hashes private $cursor_ext; // hash of hashes
// per query vars // per query vars
/** @var object|resource|bool */ // replace object with PgSql\Result /** @var \PgSql\Result|false */ // replace object with PgSql\Result
private $cursor; // actual cursor (DBH) private $cursor; // actual cursor (DBH)
/** @var int */ /** @var int */
private $num_rows; // how many rows have been found private $num_rows; // how many rows have been found
@@ -495,15 +495,15 @@ class IO
* OTOH this whole class is so PgSQL specific * OTOH this whole class is so PgSQL specific
* that non PgSQL doesn't make much sense anymore * that non PgSQL doesn't make much sense anymore
* *
* @return \CoreLibs\DB\SQL\PgSQL|null DB functions object or false on error * @return SQL\PgSQL|null DB functions object or false on error
*/ */
private function __loadDBFunctions() private function __loadDBFunctions(): SQL\PgSQL|null
{ {
$db_functions = null; $db_functions = null;
switch ($this->db_type) { switch ($this->db_type) {
// list of valid DB function objects // list of valid DB function objects
case 'pgsql': case 'pgsql':
$db_functions = new \CoreLibs\DB\SQL\PgSQL(); $db_functions = new SQL\PgSQL();
break; break;
// if non set or none matching abort // if non set or none matching abort
default: default:
@@ -566,7 +566,7 @@ class IO
*/ */
private function __closeDB(): void private function __closeDB(): void
{ {
if (!empty($this->dbh) && $this->dbh !== false) { if (!empty($this->dbh)) {
$this->db_functions->__dbClose(); $this->db_functions->__dbClose();
$this->dbh = null; $this->dbh = null;
} }
@@ -632,9 +632,6 @@ class IO
private function __printArray(array $array): string private function __printArray(array $array): string
{ {
$string = ''; $string = '';
if (!is_array($array)) {
$array = [];
}
foreach ($array as $key => $value) { foreach ($array as $key => $value) {
$string .= $this->nbsp . '<b>' . $key . '</b> => '; $string .= $this->nbsp . '<b>' . $key . '</b> => ';
if (is_array($value)) { if (is_array($value)) {
@@ -701,7 +698,7 @@ class IO
/** /**
* Check if there is a cursor and write this cursors error info * Check if there is a cursor and write this cursors error info
* @param object|resource|bool $cursor current cursor for pg_result_error, * @param \PgSql\Result|false $cursor current cursor for pg_result_error,
* pg_last_error too, but pg_result_error * pg_last_error too, but pg_result_error
* is more accurate (PgSql\Result) * is more accurate (PgSql\Result)
* @return array<mixed> Pos 0: if we could get the method where it was called * @return array<mixed> Pos 0: if we could get the method where it was called
@@ -709,7 +706,7 @@ class IO
* Pos 1: if we have the pg_error_string from last error * Pos 1: if we have the pg_error_string from last error
* if nothing then empty string * if nothing then empty string
*/ */
private function __dbErrorPreprocessor($cursor = false): array private function __dbErrorPreprocessor(\PgSql\Result|false $cursor = false): array
{ {
$pg_error_string = ''; $pg_error_string = '';
// 1 = self/__dbErrorPreprocessor, 2 = __dbError, __dbWarning, // 1 = self/__dbErrorPreprocessor, 2 = __dbError, __dbWarning,
@@ -774,12 +771,15 @@ class IO
/** /**
* write an error * write an error
* @param integer $error_id Any Error ID, used in debug message string * @param integer $error_id Any Error ID, used in debug message string
* @param object|resource|bool $cursor Optional cursor, passed on to preprocessor * @param \PgSql\Result|false $cursor Optional cursor, passed on to preprocessor
* @param string $msg optional message added to debug * @param string $msg optional message added to debug
* @return void * @return void
*/ */
protected function __dbError(int $error_id, $cursor = false, string $msg = ''): void protected function __dbError(
{ int $error_id,
\PgSql\Result|false $cursor = false,
string $msg = ''
): void {
$error_id = (string)$error_id; $error_id = (string)$error_id;
[$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor); [$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor);
// write error msg ... // write error msg ...
@@ -798,12 +798,15 @@ class IO
/** /**
* write a warning * write a warning
* @param integer $warning_id Integer warning id added to debug * @param integer $warning_id Integer warning id added to debug
* @param object|resource|bool $cursor Optional cursor, passed on to preprocessor * @param \PgSql\Result|false $cursor Optional cursor, passed on to preprocessor
* @param string $msg optional message added to debug * @param string $msg optional message added to debug
* @return void * @return void
*/ */
protected function __dbWarning(int $warning_id, $cursor = false, string $msg = ''): void protected function __dbWarning(
{ int $warning_id,
\PgSql\Result|false $cursor = false,
string $msg = ''
): void {
$warning_id = (string)$warning_id; $warning_id = (string)$warning_id;
[$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor); [$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor);
$this->__dbDebug( $this->__dbDebug(
@@ -821,18 +824,18 @@ class IO
/** /**
* if there is the 'to_encoding' var set, * if there is the 'to_encoding' var set,
* and the field is in the wrong encoding converts it to the target * and the field is in the wrong encoding converts it to the target
* @param array<mixed>|bool|null $row Array from fetch_row * @param array<mixed>|false $row Array from fetch_row
* @return array<mixed>|bool Convert fetch_row array, or false * @return array<mixed>|false Convert fetch_row array, or false
*/ */
private function __dbConvertEncoding($row) private function __dbConvertEncoding(array|false $row): array|false
{ {
if ($row === null) { if (is_bool($row)) {
return false; return false;
} }
// only do if array, else pass through row (can be false) // only do if array, else pass through row (can be false)
if ( if (
!is_array($row) || !is_array($row) ||
empty($this->to_encoding)// || empty($this->db_encoding) empty($this->to_encoding)
) { ) {
return $row; return $row;
} }
@@ -914,7 +917,7 @@ class IO
* check if there is another query running, or do we hang after a * check if there is another query running, or do we hang after a
* PHP error * PHP error
* @param integer $timeout_seconds For complex timeout waits, default 3 seconds * @param integer $timeout_seconds For complex timeout waits, default 3 seconds
* @return boolean True for connection OK, else false * @return bool True for connection OK, else false
*/ */
private function __dbCheckConnectionOk(int $timeout_seconds = 3): bool private function __dbCheckConnectionOk(int $timeout_seconds = 3): bool
{ {
@@ -932,7 +935,7 @@ class IO
* dbReturn * dbReturn
* Read data from previous written data cache * Read data from previous written data cache
* @param string $query_hash The hash for the current query * @param string $query_hash The hash for the current query
* @param boolean $assoc_only Only return assoc value (key named) * @param bool $assoc_only Only return assoc value (key named)
* @return array<mixed> Current position query data from cache * @return array<mixed> Current position query data from cache
*/ */
private function __dbReturnCacheRead(string $query_hash, bool $assoc_only): array private function __dbReturnCacheRead(string $query_hash, bool $assoc_only): array
@@ -983,10 +986,11 @@ class IO
* - sets internal hash for query * - sets internal hash for query
* - checks multiple call count * - checks multiple call count
* @param string $query query string * @param string $query query string
* @param string $pk_name primary key [if set to NULL no returning will be added] * @param string $pk_name primary key
* @return string|bool queryt hash OR boolean false on error * [if set to NULL no returning will be added]
* @return string|false queryt hash OR bool false on error
*/ */
private function __dbPrepareExec(string $query, string $pk_name) private function __dbPrepareExec(string $query, string $pk_name): string|false
{ {
// reset current cursor before exec // reset current cursor before exec
$this->cursor = false; $this->cursor = false;
@@ -1152,10 +1156,10 @@ class IO
* insert_id_ext [DEPRECATED, all in insert_id_arr] * insert_id_ext [DEPRECATED, all in insert_id_arr]
* - holds all returning as array * - holds all returning as array
* TODO: Only use insert_id_arr and use functions to get ok array or single * TODO: Only use insert_id_arr and use functions to get ok array or single
* @param boolean $returning_id * @param bool $returning_id
* @param string $query * @param string $query
* @param string|null $pk_name * @param string|null $pk_name
* @param object|resource|bool $cursor (PgSql\Result) * @param \PgSql\Result|false $cursor (PgSql\Result)
* @param string|null $stm_name If not null, is dbExecutre run * @param string|null $stm_name If not null, is dbExecutre run
* @return void * @return void
*/ */
@@ -1163,7 +1167,7 @@ class IO
bool $returning_id, bool $returning_id,
string $query, string $query,
?string $pk_name, ?string $pk_name,
$cursor, \PgSql\Result|false $cursor,
?string $stm_name = null ?string $stm_name = null
): void { ): void {
// $this->log->debug('DB SET INSERT ID', 'Ret: ' . ($returning_id ? 'Y' : 'N') // $this->log->debug('DB SET INSERT ID', 'Ret: ' . ($returning_id ? 'Y' : 'N')
@@ -1272,9 +1276,9 @@ class IO
/** /**
* get certain settings like username, db name * get certain settings like username, db name
* @param string $name what setting to query * @param string $name what setting to query
* @return mixed setting value, if not allowed name return false * @return int|string|bool setting value, if not allowed name return false
*/ */
public function dbGetSetting(string $name) public function dbGetSetting(string $name): int|string|bool
{ {
$setting = ''; $setting = '';
switch ($name) { switch ($name) {
@@ -1373,7 +1377,7 @@ class IO
* extended version info, can access all additional information data * extended version info, can access all additional information data
* @param string $parameter Array parameter name, if not valid returns * @param string $parameter Array parameter name, if not valid returns
* empty string * empty string
* @param boolean $strip Strip extended server info string, default true * @param bool $strip Strip extended server info string, default true
* eg nn.n (other info) will only return nn.n * eg nn.n (other info) will only return nn.n
* @return string Parameter value * @return string Parameter value
*/ */
@@ -1392,14 +1396,15 @@ class IO
} }
/** /**
* returns boolean true or false if the string matches the database version * returns bool true or false if the string matches the database version
* @param string $compare string to match in type =X.Y, >X.Y, <X.Y, <=X.Y, >=X.Y * @param string $compare string to match in type =X.Y, >X.Y, <X.Y, <=X.Y, >=X.Y
* @return bool true for ok, false on not ok * @return bool true for ok, false on not ok
*/ */
public function dbCompareVersion(string $compare): bool public function dbCompareVersion(string $compare): bool
{ {
$matches = []; $matches = [];
// compare has =, >, < prefix, and gets stripped, if the rest is not X.Y format then error // compare has =, >, < prefix, and gets stripped
// if the rest is not X.Y format then error
preg_match("/^([<>=]{1,})(\d{1,})\.(\d{1,})/", $compare, $matches); preg_match("/^([<>=]{1,})(\d{1,})\.(\d{1,})/", $compare, $matches);
$compare = $matches[1]; $compare = $matches[1];
$to_master = $matches[2]; $to_master = $matches[2];
@@ -1464,7 +1469,7 @@ class IO
* else current cursor * else current cursor
* @return string Formated string with all the data in the array * @return string Formated string with all the data in the array
*/ */
public function dbDumpData($query = ''): string public function dbDumpData(string $query = ''): string
{ {
// set start array // set start array
if ($query) { if ($query) {
@@ -1490,7 +1495,7 @@ class IO
* @param string|int|float|bool $string string to escape * @param string|int|float|bool $string string to escape
* @return string escaped string * @return string escaped string
*/ */
public function dbEscapeString($string): string public function dbEscapeString(string|int|float|bool $string): string
{ {
return $this->db_functions->__dbEscapeString($string); return $this->db_functions->__dbEscapeString($string);
} }
@@ -1501,7 +1506,7 @@ class IO
* @param string|int|float|bool $string string to escape * @param string|int|float|bool $string string to escape
* @return string escaped string * @return string escaped string
*/ */
public function dbEscapeLiteral($string): string public function dbEscapeLiteral(string|int|float|bool $string): string
{ {
return $this->db_functions->__dbEscapeLiteral($string); return $this->db_functions->__dbEscapeLiteral($string);
} }
@@ -1538,11 +1543,11 @@ class IO
/** /**
* clear up any data for valid DB insert * clear up any data for valid DB insert
* @param int|float|string|null $value to escape data * @param int|float|string|bool|null $value to escape data
* @param string $kbn escape trigger type * @param string $kbn escape trigger type
* @return string escaped value * @return string escaped value
*/ */
public function dbSqlEscape($value, string $kbn = '') public function dbSqlEscape(int|float|string|bool|null $value, string $kbn = ''): string
{ {
switch ($kbn) { switch ($kbn) {
case 'i': case 'i':
@@ -1551,24 +1556,35 @@ class IO
case 'f': case 'f':
$value = empty($value) ? 'NULL' : floatval($value); $value = empty($value) ? 'NULL' : floatval($value);
break; break;
// string (null is null, else is string)
case 't': case 't':
$value = $value === null ? $value = $value === null ?
'NULL' : 'NULL' :
"'" . $this->dbEscapeString($value) . "'"; "'" . $this->dbEscapeString($value) . "'";
break; break;
// string litereal (null is null, else is stirng)
case 'tl': case 'tl':
$value = $value === null ? $value = $value === null ?
'NULL' : 'NULL' :
$this->dbEscapeLiteral($value); $this->dbEscapeLiteral($value);
break; break;
// what is d? // escape string, set empty to null
case 'd': case 'd':
$value = empty($value) ? 'NULL' : "'" . $this->dbEscapeString($value) . "'"; $value = empty($value) ?
'NULL' :
"'" . $this->dbEscapeString($value) . "'";
break;
// escape string literal, set empty to null
case 'dl':
$value = empty($value) ?
'NULL' :
$this->dbEscapeLiteral($value);
break; break;
// bytea data // bytea data
case 'by': case 'by':
$value = empty($value) ? 'NULL' : $this->dbEscapeBytea((string)$value); $value = empty($value) ? 'NULL' : $this->dbEscapeBytea((string)$value);
break; break;
// bool
case 'b': case 'b':
if (is_float($value)) { if (is_float($value)) {
$value = (int)$value; $value = (int)$value;
@@ -1577,6 +1593,7 @@ class IO
'NULL' : 'NULL' :
"'" . $this->dbBoolean($value, true) . "'"; "'" . $this->dbBoolean($value, true) . "'";
break; break;
// int, but with empty value is 0
case 'i2': case 'i2':
$value = empty($value) ? 0 : intval($value); $value = empty($value) ? 0 : intval($value);
break; break;
@@ -1590,14 +1607,14 @@ class IO
/** /**
* if the input is a single char 't' or 'f * if the input is a single char 't' or 'f
* it will return the boolean value instead * it will return the bool value instead
* also converts smallint 1/0 to true false * also converts smallint 1/0 to true false
* @param string|bool|int $string 't' / 'f' or any string, or bool true/false * @param string|bool|int $string 't' / 'f' or any string, or bool true/false
* @param boolean $rev do reverse (bool to string) * @param bool $rev do reverse (bool to string)
* @return bool|string correct php boolean true/false * @return bool|string correct php bool true/false
* or postgresql 't'/'f' * or postgresql 't'/'f'
*/ */
public function dbBoolean($string, $rev = false) public function dbBoolean(string|bool|int $string, bool $rev = false): bool|string
{ {
if (!$rev) { if (!$rev) {
if ($string == 't' || $string == 'true') { if ($string == 't' || $string == 'true') {
@@ -1696,9 +1713,9 @@ class IO
* returns an array of the table with columns and values. FALSE on no table found * returns an array of the table with columns and values. FALSE on no table found
* @param string $table table name * @param string $table table name
* @param string $schema optional schema name * @param string $schema optional schema name
* @return array<mixed>|bool array of table data, false on error (table not found) * @return array<mixed>|false array of table data, false on error (table not found)
*/ */
public function dbShowTableMetaData(string $table, string $schema = '') public function dbShowTableMetaData(string $table, string $schema = ''): array|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
$table = (!empty($schema) ? $schema . '.' : '') . $table; $table = (!empty($schema) ? $schema . '.' : '') . $table;
@@ -1736,14 +1753,14 @@ class IO
* NO_CACHE/3: don't write cache * NO_CACHE/3: don't write cache
* @param bool $assoc_only True to only returned the named and not * @param bool $assoc_only True to only returned the named and not
* index position ones * index position ones
* @return array<mixed>|bool return array data or false on error/end * @return array<mixed>|false return array data or false on error/end
* @#suppress PhanTypeMismatchDimFetch * @#suppress PhanTypeMismatchDimFetch
*/ */
public function dbReturn( public function dbReturn(
string $query, string $query,
int $cache = self::USE_CACHE, int $cache = self::USE_CACHE,
bool $assoc_only = false bool $assoc_only = false
) { ): array|false {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
$this->__dbError(11); $this->__dbError(11);
@@ -1754,7 +1771,7 @@ class IO
// pre declare array // pre declare array
if (!isset($this->cursor_ext[$query_hash])) { if (!isset($this->cursor_ext[$query_hash])) {
$this->cursor_ext[$query_hash] = [ $this->cursor_ext[$query_hash] = [
// cursor, null: unset, 1: finished read/cache, 2: object/resource reading // cursor, null: unset, 1: finished read/cache, 2: object reading
'cursor' => null, 'cursor' => null,
// cached data // cached data
'data' => [], 'data' => [],
@@ -2000,9 +2017,9 @@ class IO
* if pk name is table name and _id, pk_name * if pk name is table name and _id, pk_name
* is not needed to be set * is not needed to be set
* if NULL is given here, no RETURNING will be auto added * if NULL is given here, no RETURNING will be auto added
* @return object|resource|bool cursor for this query or false on error (PgSql\Result) * @return \PgSql\Result|false cursor for this query or false on error
*/ */
public function dbExec(string $query = '', string $pk_name = '') public function dbExec(string $query = '', string $pk_name = ''): \PgSql\Result|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
// prepare and check if we can actually run it // prepare and check if we can actually run it
@@ -2031,7 +2048,7 @@ class IO
/** /**
* executes a cursor and returns the data, if no more data 0 will be returned * executes a cursor and returns the data, if no more data 0 will be returned
* @param object|resource|bool $cursor the cursor from db_exec or * @param \PgSql\Result|false $cursor the cursor from db_exec or
* pg_query/pg_exec/mysql_query * pg_query/pg_exec/mysql_query
* if not set will use internal cursor, * if not set will use internal cursor,
* if not found, stops with 0 (error) * if not found, stops with 0 (error)
@@ -2039,9 +2056,9 @@ class IO
* @param bool $assoc_only false is default, * @param bool $assoc_only false is default,
* if true only named rows, * if true only named rows,
* not numbered index rows * not numbered index rows
* @return array<mixed>|bool row array or false on error * @return array<mixed>|false row array or false on error
*/ */
public function dbFetchArray($cursor = false, bool $assoc_only = false) public function dbFetchArray(\PgSql\Result|false $cursor = false, bool $assoc_only = false): array|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
// set last available cursor if none set or false // set last available cursor if none set or false
@@ -2064,9 +2081,9 @@ class IO
* returns the FIRST row of the given query * returns the FIRST row of the given query
* @param string $query the query to be executed * @param string $query the query to be executed
* @param bool $assoc_only if true, only return assoc entry (default false) * @param bool $assoc_only if true, only return assoc entry (default false)
* @return array<mixed>|bool row array or false on error * @return array<mixed>|false row array or false on error
*/ */
public function dbReturnRow(string $query, bool $assoc_only = false) public function dbReturnRow(string $query, bool $assoc_only = false): array|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
@@ -2091,9 +2108,9 @@ class IO
* createds an array of hashes of the query (all data) * createds an array of hashes of the query (all data)
* @param string $query the query to be executed * @param string $query the query to be executed
* @param bool $assoc_only if true, only name ref are returned (default true) * @param bool $assoc_only if true, only name ref are returned (default true)
* @return array<mixed>|bool array of hashes (row -> fields), false on error * @return array<mixed>|false array of hashes (row -> fields), false on error
*/ */
public function dbReturnArray(string $query, bool $assoc_only = true) public function dbReturnArray(string $query, bool $assoc_only = true): array|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
@@ -2154,15 +2171,20 @@ class IO
* @param string|null $query Query string, if not null convert to hash * @param string|null $query Query string, if not null convert to hash
* and return set cursor ext for only this * and return set cursor ext for only this
* if not found or null return null * if not found or null return null
* @return array<mixed>|string|int|resource|object|null * @param string $query_field [=''] optional query field to get
* @return array<mixed>|string|int|\PgSql\Result|null
* Cursor Extended array full if no parameter * Cursor Extended array full if no parameter
* Key is hash string from query run * Key is hash string from query run
* Or cursor data entry if query field is set * Or cursor data entry if query field is set
* If nothing found return null * If nothing found return null
*/ */
public function dbGetCursorExt($query = null, string $query_field = '') public function dbGetCursorExt(
{ $query = null,
if ($query !== null) { string $query_field = ''
): array|string|int|\PgSql\Result|null {
if ($query === null) {
return $this->cursor_ext;
}
$query_hash = $this->dbGetQueryHash($query); $query_hash = $this->dbGetQueryHash($query);
if ( if (
is_array($this->cursor_ext) && is_array($this->cursor_ext) &&
@@ -2177,15 +2199,13 @@ class IO
return null; return null;
} }
} }
return $this->cursor_ext;
}
/** /**
* returns the current position the read out * returns the current position the read out
* @param string $query query to find in cursor_ext * @param string $query query to find in cursor_ext
* @return int|bool query position (row pos), false on error * @return int|false query position (row pos), false on error
*/ */
public function dbGetCursorPos(string $query) public function dbGetCursorPos(string $query): int|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
@@ -2199,9 +2219,9 @@ class IO
/** /**
* returns the number of rows for the current select query * returns the number of rows for the current select query
* @param string $query query to find in cursor_ext * @param string $query query to find in cursor_ext
* @return int|bool query position (row pos), false on error * @return int|false query position (row pos), false on error
*/ */
public function dbGetCursorNumRows(string $query) public function dbGetCursorNumRows(string $query): int|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (!$query) { if (!$query) {
@@ -2253,11 +2273,14 @@ class IO
* @param string $stm_name statement name * @param string $stm_name statement name
* @param string $query queryt string to run * @param string $query queryt string to run
* @param string $pk_name optional primary key * @param string $pk_name optional primary key
* @return bool|object|resource false on error, true on warning or * @return \PgSql\Result|bool false on error, true on warning or
* result on full ok (PgSql\Result) * result on full ok
*/ */
public function dbPrepare(string $stm_name, string $query, string $pk_name = '') public function dbPrepare(
{ string $stm_name,
string $query,
string $pk_name = ''
): \PgSql\Result|bool {
$this->__dbErrorReset(); $this->__dbErrorReset();
$matches = []; $matches = [];
if (!$query) { if (!$query) {
@@ -2361,9 +2384,9 @@ class IO
* runs a prepare query * runs a prepare query
* @param string $stm_name statement name for the query to run * @param string $stm_name statement name for the query to run
* @param array<mixed> $data data to run for this query, empty array for none * @param array<mixed> $data data to run for this query, empty array for none
* @return mixed false on error, or result on OK * @return \PgSql\Result|false false on error, or result on OK
*/ */
public function dbExecute(string $stm_name, array $data = []) public function dbExecute(string $stm_name, array $data = []): \PgSql\Result|false
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
// if no DB Handler drop out // if no DB Handler drop out
@@ -2483,11 +2506,10 @@ class IO
/** /**
* checks a previous async query and returns data if finished * checks a previous async query and returns data if finished
* NEEDS : dbExecAsync * NEEDS : dbExecAsync
* @return bool|object|resource cursor resource if the query is still running, * @return \PgSql\Result|bool cursor resource if the query is still running,
* false if an error occured or cursor of that query * false if an error occured or cursor of that query
* (PgSql\Result)
*/ */
public function dbCheckAsync() public function dbCheckAsync(): \PgSql\Result|bool
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
// if there is actually a async query there // if there is actually a async query there
@@ -2547,7 +2569,7 @@ class IO
* @param int $primary_key id key to decide if we write insert or update * @param int $primary_key id key to decide if we write insert or update
* @param string $table name for the target table * @param string $table name for the target table
* @param array<mixed> $data data array to override _POST data * @param array<mixed> $data data array to override _POST data
* @return int|bool primary key * @return int|false primary key
*/ */
public function dbWriteData( public function dbWriteData(
array $write_array, array $write_array,
@@ -2555,13 +2577,7 @@ class IO
int $primary_key, int $primary_key,
string $table, string $table,
array $data = [] array $data = []
) { ): int|false {
if (!is_array($write_array)) {
$write_array = [];
}
if (!is_array($not_write_array)) {
$not_write_array = [];
}
$not_write_update_array = []; $not_write_update_array = [];
return $this->dbWriteDataExt( return $this->dbWriteDataExt(
$write_array, $write_array,
@@ -2586,16 +2602,16 @@ class IO
* to write during update (optional) * to write during update (optional)
* @param array<mixed> $data optional array with data * @param array<mixed> $data optional array with data
* if not _POST vars are used * if not _POST vars are used
* @return int|bool primary key * @return int|false primary key
*/ */
public function dbWriteDataExt( public function dbWriteDataExt(
array $write_array, array $write_array,
$primary_key, int|string|array $primary_key,
string $table, string $table,
array $not_write_array = [], array $not_write_array = [],
array $not_write_update_array = [], array $not_write_update_array = [],
array $data = [] array $data = []
) { ): int|false {
if (!is_array($primary_key)) { if (!is_array($primary_key)) {
$primary_key = [ $primary_key = [
'row' => $table . '_id', 'row' => $table . '_id',
@@ -2711,7 +2727,10 @@ class IO
$primary_key['value'] = $this->dbGetInsertPK(); $primary_key['value'] = $this->dbGetInsertPK();
} }
// if there is not priamry key value field return false // if there is not priamry key value field return false
return $primary_key['value'] ?? false; if (!is_numeric($primary_key['value'])) {
return false;
}
return (int)$primary_key['value'];
} }
// *************************** // ***************************
@@ -2724,7 +2743,7 @@ class IO
* @param bool|null $debug true/false or null for just getting current set * @param bool|null $debug true/false or null for just getting current set
* @return bool Current debug flag as set * @return bool Current debug flag as set
*/ */
public function dbSetDebug($debug = null): bool public function dbSetDebug(?bool $debug = null): bool
{ {
if ($debug !== null) { if ($debug !== null) {
$this->db_debug = $debug; $this->db_debug = $debug;
@@ -2805,7 +2824,7 @@ class IO
* @return bool False on failure to find schema value or set schema, * @return bool False on failure to find schema value or set schema,
* True on successful set * True on successful set
*/ */
public function dbSetSchema(string $db_schema) public function dbSetSchema(string $db_schema): bool
{ {
$this->__dbErrorReset(); $this->__dbErrorReset();
if (empty($db_schema)) { if (empty($db_schema)) {
@@ -2934,9 +2953,9 @@ class IO
/** /**
* Return current database handler * Return current database handler
* @return object|resource|bool|int|null * @return \PgSql\Connection|false|null
*/ */
public function dbGetDbh() public function dbGetDbh(): \PgSql\Connection|false|null
{ {
return $this->dbh; return $this->dbh;
} }
@@ -2992,7 +3011,7 @@ class IO
* *
* @return array<mixed>|string|int|null Current insert query primary key * @return array<mixed>|string|int|null Current insert query primary key
*/ */
public function dbGetInsertPK() public function dbGetInsertPK(): array|string|int|null
{ {
if (empty($this->insert_id_pk_name)) { if (empty($this->insert_id_pk_name)) {
return null; return null;
@@ -3016,7 +3035,7 @@ class IO
* @param integer|null $pos * @param integer|null $pos
* @return array<mixed>|string|int|null * @return array<mixed>|string|int|null
*/ */
public function dbGetReturningExt(?string $key = null, ?int $pos = null) public function dbGetReturningExt(?string $key = null, ?int $pos = null): array|string|int|null
{ {
// return as is if key is null // return as is if key is null
if ($key === null) { if ($key === null) {
@@ -3110,7 +3129,7 @@ class IO
* Not ethat returnin_id also can return false * Not ethat returnin_id also can return false
* but will not set an error entry * but will not set an error entry
*/ */
public function dbGetPrepareCursorValue(string $stm_name, string $key) public function dbGetPrepareCursorValue(string $stm_name, string $key): null|string|int|bool
{ {
// if no statement name // if no statement name
if (empty($stm_name)) { if (empty($stm_name)) {
@@ -3159,7 +3178,7 @@ class IO
* Sets error number that was last * Sets error number that was last
* So we always have the last error number stored even if a new * So we always have the last error number stored even if a new
* one is created * one is created
* @param boolean $transform Set to true to transform into id + error message * @param bool $transform Set to true to transform into id + error message
* @return string Last error number as string or error message * @return string Last error number as string or error message
*/ */
public function dbGetLastError(bool $transform = false): string public function dbGetLastError(bool $transform = false): string
@@ -3180,10 +3199,10 @@ class IO
/** /**
* Sets warning number that was last * Sets warning number that was last
* So we always have the last warning number stored even if a new one is created * So we always have the last warning number stored even if a new one is created
* @param boolean $transform Set to true to transform into id + warning message * @param bool $transform Set to true to transform into id + warning message
* @return string Last Warning number as string or warning message * @return string Last Warning number as string or warning message
*/ */
public function dbGetLastWarning(bool $transform = false) public function dbGetLastWarning(bool $transform = false): string
{ {
// if no warning, return empty // if no warning, return empty
if (empty($this->warning_id)) { if (empty($this->warning_id)) {
@@ -3221,7 +3240,7 @@ class IO
* Null for error * Null for error
* @deprecated Use ->dbGetInsertPK(); * @deprecated Use ->dbGetInsertPK();
*/ */
public function dbGetReturning() public function dbGetReturning(): array|string|int|bool|null
{ {
return $this->dbGetInsertPK(); return $this->dbGetInsertPK();
} }
@@ -3271,7 +3290,7 @@ class IO
* @return array<mixed>|string|int|bool|null See above * @return array<mixed>|string|int|bool|null See above
* @deprecated use getReturningExt($key = null) instead * @deprecated use getReturningExt($key = null) instead
*/ */
public function getInsertReturn($key = null) public function getInsertReturn(?string $key = null): array|string|int|bool|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use getReturningExt($key = null)', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use getReturningExt($key = null)', E_USER_DEPRECATED);
return $this->dbGetReturningExt($key); return $this->dbGetReturningExt($key);
@@ -3282,7 +3301,7 @@ class IO
* @return array<mixed>|string|int|bool|null [DEPRECATED] * @return array<mixed>|string|int|bool|null [DEPRECATED]
* @deprecated use dbGetReturning() instead * @deprecated use dbGetReturning() instead
*/ */
public function getReturning() public function getReturning(): array|string|int|bool|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetReturning()', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetReturning()', E_USER_DEPRECATED);
return $this->dbGetInsertPK(); return $this->dbGetInsertPK();
@@ -3293,7 +3312,7 @@ class IO
* @return array<mixed>|string|int|bool|null [DEPRECATED] * @return array<mixed>|string|int|bool|null [DEPRECATED]
* @deprecated use dbGetInsertPK() instead * @deprecated use dbGetInsertPK() instead
*/ */
public function getInsertPK() public function getInsertPK(): array|string|int|bool|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetInsertPK()', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetInsertPK()', E_USER_DEPRECATED);
return $this->dbGetInsertPK(); return $this->dbGetInsertPK();
@@ -3305,7 +3324,7 @@ class IO
* @return array<mixed>|string|bool|int|null [DEPRECATED] * @return array<mixed>|string|bool|int|null [DEPRECATED]
* @deprecated use dbGetReturningExt($key = null) instead * @deprecated use dbGetReturningExt($key = null) instead
*/ */
public function getReturningExt($key = null) public function getReturningExt(?string $key = null): array|string|int|bool|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetReturningExt($key = null)', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetReturningExt($key = null)', E_USER_DEPRECATED);
return $this->dbGetReturningExt($key); return $this->dbGetReturningExt($key);
@@ -3314,10 +3333,10 @@ class IO
/** /**
* DEPRECATED: getCursorExt * DEPRECATED: getCursorExt
* @param string|null $q [DEPRECATED] * @param string|null $q [DEPRECATED]
* @return array<mixed>|string|int|resource|object|null [DEPRECATED] * @return array<mixed>|string|int|\PgSql\Result|null [DEPRECATED]
* @deprecated use dbGetCursorExt($q = null) instead * @deprecated use dbGetCursorExt($q = null) instead
*/ */
public function getCursorExt($q = null) public function getCursorExt(?string $q = null): array|string|int|\PgSql\Result|null
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetCursorExt($q = null)', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetCursorExt($q = null)', E_USER_DEPRECATED);
return $this->dbGetCursorExt($q); return $this->dbGetCursorExt($q);
@@ -3328,7 +3347,7 @@ class IO
* @return int|null [DEPRECATED] * @return int|null [DEPRECATED]
* @deprecated use dbGetNumRows() instead * @deprecated use dbGetNumRows() instead
*/ */
public function getNumRows() public function getNumRows(): ?int
{ {
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetNumRows()', E_USER_DEPRECATED); trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetNumRows()', E_USER_DEPRECATED);
return $this->dbGetNumRows(); return $this->dbGetNumRows();

View File

@@ -6,7 +6,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace CoreLibs\DB\SQL\SqlInterface; namespace CoreLibs\DB\SQL\Interface;
interface SqlFunctions interface SqlFunctions
{ {
@@ -21,33 +21,33 @@ interface SqlFunctions
* Undocumented function * Undocumented function
* *
* @param string $query * @param string $query
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbQuery(string $query); public function __dbQuery(string $query): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $query * @param string $query
* @param array<mixed> $params * @param array<mixed> $params
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbQueryParams(string $query, array $params); public function __dbQueryParams(string $query, array $params): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $query * @param string $query
* @return boolean * @return bool
*/ */
public function __dbSendQuery(string $query): bool; public function __dbSendQuery(string $query): bool;
/** /**
* Undocumented function * Undocumented function
* *
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbGetResult(); public function __dbGetResult(): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
@@ -61,85 +61,85 @@ interface SqlFunctions
* *
* @param string $name * @param string $name
* @param string $query * @param string $query
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbPrepare(string $name, string $query); public function __dbPrepare(string $name, string $query): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $name * @param string $name
* @param array<mixed> $data * @param array<mixed> $data
* @return object|resource|bool * @return \PgSql\Result|false
*/ */
public function __dbExecute(string $name, array $data); public function __dbExecute(string $name, array $data): \PgSql\Result|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return integer * @return int
*/ */
public function __dbNumRows($cursor): int; public function __dbNumRows(\PgSql\Result|false $cursor): int;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return integer * @return int
*/ */
public function __dbNumFields($cursor): int; public function __dbNumFields(\PgSql\Result|false $cursor): int;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @param int $i * @param int $i
* @return string|bool * @return string|false
*/ */
public function __dbFieldName($cursor, int $i); public function __dbFieldName(\PgSql\Result|false $cursor, int $i): string|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @param int $result_type * @param int $result_type
* @return array<mixed>|bool * @return array<mixed>|bool
*/ */
public function __dbFetchArray($cursor, int $result_type = PGSQL_BOTH); public function __dbFetchArray(\PgSql\Result|false $cursor, int $result_type = PGSQL_BOTH);
/** /**
* Undocumented function * Undocumented function
* *
* @param boolean $assoc_type * @param bool $assoc_type
* @return integer * @return int
*/ */
public function __dbResultType(bool $assoc_type = true): int; public function __dbResultType(bool $assoc_type = true): int;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return array<mixed>|bool * @return array<mixed>|bool
*/ */
public function __dbFetchAll($cursor); public function __dbFetchAll(\PgSql\Result|false $cursor): array|bool;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return integer * @return int
*/ */
public function __dbAffectedRows($cursor): int; public function __dbAffectedRows(\PgSql\Result|false $cursor): int;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $query * @param string $query
* @param string|null $pk_name * @param string|null $pk_name
* @return string|integer|false * @return string|int|false
*/ */
public function __dbInsertId(string $query, ?string $pk_name); public function __dbInsertId(string $query, ?string $pk_name): string|int|false;
/** /**
* Undocumented function * Undocumented function
@@ -148,7 +148,7 @@ interface SqlFunctions
* @param string $schema * @param string $schema
* @return string|bool * @return string|bool
*/ */
public function __dbPrimaryKey(string $table, string $schema = ''); public function __dbPrimaryKey(string $table, string $schema = ''): string|bool;
/** /**
* Undocumented function * Undocumented function
@@ -157,9 +157,9 @@ interface SqlFunctions
* @param string $db_user * @param string $db_user
* @param string $db_pass * @param string $db_pass
* @param string $db_name * @param string $db_name
* @param integer $db_port * @param int $db_port
* @param string $db_ssl * @param string $db_ssl
* @return object|resource|bool * @return \PgSql\Connection|false
*/ */
public function __dbConnect( public function __dbConnect(
string $db_host, string $db_host,
@@ -168,24 +168,24 @@ interface SqlFunctions
string $db_name, string $db_name,
int $db_port, int $db_port,
string $db_ssl = 'allow' string $db_ssl = 'allow'
); ): \PgSql\Connection|false;
/** /**
* Undocumented function * Undocumented function
* *
* @param object|resource|bool $cursor * @param \PgSql\Result|false $cursor
* @return string * @return string
*/ */
public function __dbPrintError($cursor = false): string; public function __dbPrintError(\PgSql\Result|false $cursor = false): string;
/** /**
* Undocumented function * Undocumented function
* *
* @param string $table * @param string $table
* @param boolean $extended * @param bool $extended
* @return array<mixed>|bool * @return array<mixed>|bool
*/ */
public function __dbMetaData(string $table, $extended = true); public function __dbMetaData(string $table, bool $extended = true): array|bool;
/** /**
* Undocumented function * Undocumented function
@@ -193,7 +193,7 @@ interface SqlFunctions
* @param string|int|float|bool $string * @param string|int|float|bool $string
* @return string * @return string
*/ */
public function __dbEscapeString($string): string; public function __dbEscapeString(string|int|float|bool $string): string;
/** /**
* Undocumented function * Undocumented function
@@ -201,7 +201,7 @@ interface SqlFunctions
* @param string|int|float|bool $string * @param string|int|float|bool $string
* @return string * @return string
*/ */
public function __dbEscapeLiteral($string): string; public function __dbEscapeLiteral(string|int|float|bool $string): string;
/** /**
* Undocumented function * Undocumented function
@@ -230,15 +230,15 @@ interface SqlFunctions
/** /**
* Undocumented function * Undocumented function
* *
* @return boolean * @return bool
*/ */
public function __dbConnectionBusy(): bool; public function __dbConnectionBusy(): bool;
/** /**
* Undocumented function * Undocumented function
* *
* @param integer $timeout_seconds * @param int $timeout_seconds
* @return boolean * @return bool
*/ */
public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool; public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool;
@@ -253,8 +253,8 @@ interface SqlFunctions
* Undocumented function * Undocumented function
* *
* @param string $array_text * @param string $array_text
* @param integer $start * @param int $start
* @param integer|null $end * @param int|null $end
* @return array<mixed>|null * @return array<mixed>|null
*/ */
public function __dbArrayParse( public function __dbArrayParse(
@@ -275,7 +275,7 @@ interface SqlFunctions
* Undocumented function * Undocumented function
* *
* @param string $db_schema * @param string $db_schema
* @return integer * @return int
*/ */
public function __dbSetSchema(string $db_schema): int; public function __dbSetSchema(string $db_schema): int;
@@ -290,7 +290,7 @@ interface SqlFunctions
* Undocumented function * Undocumented function
* *
* @param string $db_encoding * @param string $db_encoding
* @return integer * @return int
*/ */
public function __dbSetEncoding(string $db_encoding): int; public function __dbSetEncoding(string $db_encoding): int;

View File

@@ -51,12 +51,11 @@ namespace CoreLibs\DB\SQL;
// as main system. Currently all @var sets are written as object // as main system. Currently all @var sets are written as object
/** @#phan-file-suppress PhanUndeclaredTypeProperty,PhanUndeclaredTypeParameter,PhanUndeclaredTypeReturnType */ /** @#phan-file-suppress PhanUndeclaredTypeProperty,PhanUndeclaredTypeParameter,PhanUndeclaredTypeReturnType */
class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions class PgSQL implements Interface\SqlFunctions
{ {
/** @var string */ /** @var string */
private $last_error_query; private $last_error_query;
// NOTE for PHP 8.1 this is no longer a resource /** @var \PgSql\Connection|false */
/** @var object|resource|bool */ // replace object with PgSql\Connection
private $dbh; private $dbh;
/** /**
@@ -77,12 +76,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* wrapper for pg_query, catches error and stores it in class var * wrapper for pg_query, catches error and stores it in class var
* *
* @param string $query Query string * @param string $query Query string
* @return object|resource|bool query result (PgSql\Result) * @return \PgSql\Result|false query result
*/ */
public function __dbQuery(string $query) public function __dbQuery(string $query): \PgSql\Result|false
{ {
$this->last_error_query = ''; $this->last_error_query = '';
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
// read out the query status and save the query if needed // read out the query status and save the query if needed
@@ -100,12 +99,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* *
* @param string $query Query string with placeholders $1, .. * @param string $query Query string with placeholders $1, ..
* @param array<mixed> $params Matching parameters for each placerhold * @param array<mixed> $params Matching parameters for each placerhold
* @return object|resource|bool Query result (PgSql\Result) * @return \PgSql\Result|false Query result
*/ */
public function __dbQueryParams(string $query, array $params) public function __dbQueryParams(string $query, array $params): \PgSql\Result|false
{ {
$this->last_error_query = ''; $this->last_error_query = '';
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
// parse query and get all $n entries // parse query and get all $n entries
@@ -126,7 +125,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbSendQuery(string $query): bool public function __dbSendQuery(string $query): bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$result = pg_send_query($this->dbh, $query); $result = pg_send_query($this->dbh, $query);
@@ -136,12 +135,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_get_result * wrapper for pg_get_result
* *
* @return object|resource|bool resource handler or false for error (PgSql\Result) * @return \PgSql\Result|false resource handler or false for error
*/ */
public function __dbGetResult() public function __dbGetResult(): \PgSql\Result|false
{ {
$this->last_error_query = ''; $this->last_error_query = '';
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$result = pg_get_result($this->dbh); $result = pg_get_result($this->dbh);
@@ -161,7 +160,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbClose(): void public function __dbClose(): void
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return; return;
} }
if (pg_connection_status($this->dbh) === PGSQL_CONNECTION_OK) { if (pg_connection_status($this->dbh) === PGSQL_CONNECTION_OK) {
@@ -175,12 +174,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* *
* @param string $name statement name * @param string $name statement name
* @param string $query query string * @param string $query query string
* @return object|resource|bool prepare statement handler or * @return \PgSql\Result|false prepare statement handler or
* false for error (PgSql\Result) * false for error
*/ */
public function __dbPrepare(string $name, string $query) public function __dbPrepare(string $name, string $query): \PgSql\Result|false
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$result = pg_prepare($this->dbh, $name, $query); $result = pg_prepare($this->dbh, $name, $query);
@@ -195,11 +194,11 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* *
* @param string $name statement name * @param string $name statement name
* @param array<mixed> $data data array * @param array<mixed> $data data array
* @return object|resource|bool returns status or false for error (PgSql\Result) * @return \PgSql\Result|false returns status or false for error
*/ */
public function __dbExecute(string $name, array $data) public function __dbExecute(string $name, array $data): \PgSql\Result|false
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$result = pg_execute($this->dbh, $name, $data); $result = pg_execute($this->dbh, $name, $data);
@@ -212,12 +211,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_num_rows * wrapper for pg_num_rows
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @return int number of rows, -1 on error * @return int number of rows, -1 on error
*/ */
public function __dbNumRows($cursor): int public function __dbNumRows(\PgSql\Result|false $cursor): int
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return -1; return -1;
} }
return pg_num_rows($cursor); return pg_num_rows($cursor);
@@ -226,12 +225,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_num_fields * wrapper for pg_num_fields
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @return int number for fields in result, -1 on error * @return int number for fields in result, -1 on error
*/ */
public function __dbNumFields($cursor): int public function __dbNumFields(\PgSql\Result|false $cursor): int
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return -1; return -1;
} }
return pg_num_fields($cursor); return pg_num_fields($cursor);
@@ -240,13 +239,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_field_name * wrapper for pg_field_name
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @param int $i field position * @param int $i field position
* @return string|bool name or false on error * @return string|false name or false on error
*/ */
public function __dbFieldName($cursor, int $i) public function __dbFieldName(\PgSql\Result|false $cursor, int $i): string|false
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return false; return false;
} }
return pg_field_name($cursor, $i); return pg_field_name($cursor, $i);
@@ -256,13 +255,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* wrapper for pg_fetch_array * wrapper for pg_fetch_array
* if through/true false, use __dbResultType(true) * if through/true false, use __dbResultType(true)
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @param int $result_type result type as int number * @param int $result_type result type as int number
* @return array<mixed>|bool array result data or false on end/error * @return array<mixed>|false array result data or false on end/error
*/ */
public function __dbFetchArray($cursor, int $result_type = PGSQL_BOTH) public function __dbFetchArray(\PgSql\Result|false $cursor, int $result_type = PGSQL_BOTH): array|false
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return false; return false;
} }
// result type is passed on as is [should be checked] // result type is passed on as is [should be checked]
@@ -287,12 +286,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_fetch_all * wrapper for pg_fetch_all
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @return array<mixed>|bool data array or false for end/error * @return array<mixed>|false data array or false for end/error
*/ */
public function __dbFetchAll($cursor) public function __dbFetchAll(\PgSql\Result|false $cursor): array|false
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return false; return false;
} }
return pg_fetch_all($cursor); return pg_fetch_all($cursor);
@@ -301,12 +300,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_affected_rows * wrapper for pg_affected_rows
* *
* @param object|resource|bool $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* @return int affected rows, 0 for none, -1 for error * @return int affected rows, 0 for none, -1 for error
*/ */
public function __dbAffectedRows($cursor): int public function __dbAffectedRows(\PgSql\Result|false $cursor): int
{ {
if ($cursor === false || is_bool($cursor)) { if (is_bool($cursor)) {
return -1; return -1;
} }
return pg_affected_rows($cursor); return pg_affected_rows($cursor);
@@ -323,7 +322,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string|null $pk_name primary key name, if '' then auto detect * @param string|null $pk_name primary key name, if '' then auto detect
* @return string|int|false primary key value * @return string|int|false primary key value
*/ */
public function __dbInsertId(string $query, ?string $pk_name) public function __dbInsertId(string $query, ?string $pk_name): string|int|false
{ {
// only if an insert has been done // only if an insert has been done
if (preg_match("/^insert /i", $query)) { if (preg_match("/^insert /i", $query)) {
@@ -371,7 +370,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string $schema optional schema name, '' for default * @param string $schema optional schema name, '' for default
* @return string|bool primary key name or false if not found * @return string|bool primary key name or false if not found
*/ */
public function __dbPrimaryKey(string $table, string $schema = '') public function __dbPrimaryKey(string $table, string $schema = ''): string|bool
{ {
if ($table) { if ($table) {
// check if schema set is different from schema given, // check if schema set is different from schema given,
@@ -426,7 +425,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string $db_name databse name * @param string $db_name databse name
* @param integer $db_port port (int, 5432 is default) * @param integer $db_port port (int, 5432 is default)
* @param string $db_ssl SSL (allow is default) * @param string $db_ssl SSL (allow is default)
* @return object|resource|bool db handler PgSql\Connection or false on error * @return \PgSql\Connection|false db handler or false on error
*/ */
public function __dbConnect( public function __dbConnect(
string $db_host, string $db_host,
@@ -435,7 +434,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
string $db_name, string $db_name,
int $db_port, int $db_port,
string $db_ssl = 'allow' string $db_ssl = 'allow'
) { ): \PgSql\Connection|false {
if (empty($db_name)) { if (empty($db_name)) {
return false; return false;
} }
@@ -470,22 +469,22 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* reads the last error for this cursor and returns * reads the last error for this cursor and returns
* html formatted string with error name * html formatted string with error name
* *
* @param bool|object|resource $cursor cursor PgSql\Result (former resource) * @param \PgSql\Result|false $cursor cursor
* or null * or null
* @return string error string * @return string error string
*/ */
public function __dbPrintError($cursor = false): string public function __dbPrintError(\PgSql\Result|false $cursor = false): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
// run the query again for the error result here // run the query again for the error result here
if (($cursor === false || is_bool($cursor)) && $this->last_error_query) { if ((is_bool($cursor)) && $this->last_error_query) {
pg_send_query($this->dbh, $this->last_error_query); pg_send_query($this->dbh, $this->last_error_query);
$this->last_error_query = ''; $this->last_error_query = '';
$cursor = pg_get_result($this->dbh); $cursor = pg_get_result($this->dbh);
} }
if ($cursor && !is_bool($cursor) && $error_str = pg_result_error($cursor)) { if ($cursor && $error_str = pg_result_error($cursor)) {
return '-PostgreSQL-Error- ' return '-PostgreSQL-Error- '
. $error_str; . $error_str;
} else { } else {
@@ -500,9 +499,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param bool $extended show extended info (default true) * @param bool $extended show extended info (default true)
* @return array<mixed>|bool array data for the table info or false on error * @return array<mixed>|bool array data for the table info or false on error
*/ */
public function __dbMetaData(string $table, $extended = true) public function __dbMetaData(string $table, bool $extended = true): array|bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
// needs to prefixed with @ or it throws a warning on not existing table // needs to prefixed with @ or it throws a warning on not existing table
@@ -515,9 +514,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string|int|float|bool $string any string/int/float/bool * @param string|int|float|bool $string any string/int/float/bool
* @return string excaped string * @return string excaped string
*/ */
public function __dbEscapeString($string): string public function __dbEscapeString(string|int|float|bool $string): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
return pg_escape_string($this->dbh, (string)$string); return pg_escape_string($this->dbh, (string)$string);
@@ -531,9 +530,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string|int|float|bool $string any string/int/float/bool * @param string|int|float|bool $string any string/int/float/bool
* @return string excaped string including quites * @return string excaped string including quites
*/ */
public function __dbEscapeLiteral($string): string public function __dbEscapeLiteral(string|int|float|bool $string): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return (string)''; return (string)'';
} }
// for phpstan, thinks this is string|false? // for phpstan, thinks this is string|false?
@@ -549,7 +548,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbEscapeIdentifier(string $string): string public function __dbEscapeIdentifier(string $string): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
// for phpstan, thinks this is string|false? // for phpstan, thinks this is string|false?
@@ -564,7 +563,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbEscapeBytea(string $data): string public function __dbEscapeBytea(string $data): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
return pg_escape_bytea($this->dbh, $data); return pg_escape_bytea($this->dbh, $data);
@@ -584,11 +583,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/** /**
* wrapper for pg_connection_busy * wrapper for pg_connection_busy
* *
* @return bool True if connection is busy, False if not or no db connection at all * @return bool True if connection is busy
* False if not or no db connection at all
*/ */
public function __dbConnectionBusy(): bool public function __dbConnectionBusy(): bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
return pg_connection_busy($this->dbh); return pg_connection_busy($this->dbh);
@@ -598,12 +598,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* Experimental wrapper with scoket timetout * Experimental wrapper with scoket timetout
* *
* @param integer $timeout_seconds Wait how many seconds on timeout * @param integer $timeout_seconds Wait how many seconds on timeout
* @return boolean True if connection is busy, or false on * @return bool True if connection is busy, or false on
* not busy or no db connection at all * not busy or no db connection at all
*/ */
public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
$busy = pg_connection_busy($this->dbh); $busy = pg_connection_busy($this->dbh);
@@ -627,13 +627,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* eg 13.5 (other info) will return only 13.5 * eg 13.5 (other info) will return only 13.5
* *
* @param string $parameter Parameter string to extract from array * @param string $parameter Parameter string to extract from array
* @param boolean $strip If parameter is server strip out on default * @param bool $strip If parameter is server strip out on default
* Set to false to get original string AS is * Set to false to get original string AS is
* @return string The parameter value * @return string The parameter value
*/ */
public function __dbVersionInfo(string $parameter, bool $strip = true): string public function __dbVersionInfo(string $parameter, bool $strip = true): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
// extract element // extract element
@@ -655,7 +655,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbVersionInfoParameterList(): array public function __dbVersionInfoParameterList(): array
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return []; return [];
} }
return array_keys(pg_version($this->dbh)); return array_keys(pg_version($this->dbh));
@@ -670,7 +670,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/ */
public function __dbVersion(): string public function __dbVersion(): string
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return ''; return '';
} }
// array has client, protocol, server, we just return server stripped // array has client, protocol, server, we just return server stripped
@@ -762,9 +762,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param string $parameter Parameter to query * @param string $parameter Parameter to query
* @return string|bool Settings value as string * @return string|bool Settings value as string
*/ */
public function __dbParameter(string $parameter) public function __dbParameter(string $parameter): string|bool
{ {
if ($this->dbh === false || is_bool($this->dbh)) { if (is_bool($this->dbh)) {
return false; return false;
} }
if (empty($parameter)) { if (empty($parameter)) {

View File

@@ -413,7 +413,7 @@ class Logging
* @param string $name what variable to return * @param string $name what variable to return
* @return mixed can be anything, bool, string, int, array * @return mixed can be anything, bool, string, int, array
*/ */
public function getSetting(string $name) //:mixed DOES not work with PHP 7.4 public function getSetting(string $name): mixed
{ {
// for debug purpose only // for debug purpose only
return $this->{$name}; return $this->{$name};
@@ -550,9 +550,9 @@ class Logging
* @param string $flag on/off * @param string $flag on/off
* @param string|null $level if not null then check if this array entry is set * @param string|null $level if not null then check if this array entry is set
* else return false * else return false
* @return bool|array<mixed> if $level is null, return array, else boolean true/false * @return array<mixed>|bool if $level is null, return array, else boolean true/false
*/ */
public function getLogLevel(string $type, string $flag, ?string $level = null) public function getLogLevel(string $type, string $flag, ?string $level = null): array|bool
{ {
// abort if not valid type // abort if not valid type
if (!in_array($type, ['debug', 'echo', 'print'])) { if (!in_array($type, ['debug', 'echo', 'print'])) {

View File

@@ -122,7 +122,7 @@ class GetTextReader
* @param bool $enable_cache Enable or disable caching * @param bool $enable_cache Enable or disable caching
* of strings (default on) * of strings (default on)
*/ */
public function __construct($Reader, bool $enable_cache = true) public function __construct(FileReader|bool $Reader, bool $enable_cache = true)
{ {
// If there isn't a StreamReader, turn on short circuit mode. // If there isn't a StreamReader, turn on short circuit mode.
if ((!is_object($Reader) && !$Reader) || (is_object($Reader) && $Reader->error)) { if ((!is_object($Reader) && !$Reader) || (is_object($Reader) && $Reader->error)) {

View File

@@ -46,7 +46,7 @@ class Encoding
* @return void * @return void
* @deprecated Use \CoreLibs\Check\Encoding::setErrorChar(); * @deprecated Use \CoreLibs\Check\Encoding::setErrorChar();
*/ */
public static function setErrorChar($string): void public static function setErrorChar(string|int|null $string): void
{ {
\CoreLibs\Check\Encoding::setErrorChar($string); \CoreLibs\Check\Encoding::setErrorChar($string);
} }
@@ -60,7 +60,7 @@ class Encoding
* @return string|int Set error character * @return string|int Set error character
* @deprecated Use \CoreLibs\Check\Encoding::getErrorChar(); * @deprecated Use \CoreLibs\Check\Encoding::getErrorChar();
*/ */
public static function getErrorChar(bool $return_substitute_func = false) public static function getErrorChar(bool $return_substitute_func = false): string|int
{ {
return \CoreLibs\Check\Encoding::getErrorChar($return_substitute_func); return \CoreLibs\Check\Encoding::getErrorChar($return_substitute_func);
} }
@@ -81,7 +81,7 @@ class Encoding
* @param string $string string to test * @param string $string string to test
* @param string $from_encoding encoding of string to test * @param string $from_encoding encoding of string to test
* @param string $to_encoding target encoding * @param string $to_encoding target encoding
* @return bool|array<string> false if no error or * @return array<string>|false false if no error or
* array with failed characters * array with failed characters
* @deprecated Use \CoreLibs\Check\Encoding::checkConvertEncoding(); * @deprecated Use \CoreLibs\Check\Encoding::checkConvertEncoding();
*/ */
@@ -89,7 +89,7 @@ class Encoding
string $string, string $string,
string $from_encoding, string $from_encoding,
string $to_encoding string $to_encoding
) { ): array|false {
return \CoreLibs\Check\Encoding::checkConvertEncoding($string, $from_encoding, $to_encoding); return \CoreLibs\Check\Encoding::checkConvertEncoding($string, $from_encoding, $to_encoding);
} }

View File

@@ -13,11 +13,11 @@ class Elements
/** /**
* print the date/time drop downs, used in any queue/send/insert at date/time place * print the date/time drop downs, used in any queue/send/insert at date/time place
* *
* @param int $year year YYYY * @param int|string $year year YYYY
* @param int $month month m * @param int|string $month month m
* @param int $day day d * @param int|string $day day d
* @param int $hour hour H * @param int|string $hour hour H
* @param int $min min i * @param int|string $min min i
* @param string $suffix additional info printed after the date time * @param string $suffix additional info printed after the date time
* variable in the drop down * variable in the drop down
* also used for ID in the on change JS call * also used for ID in the on change JS call
@@ -29,11 +29,11 @@ class Elements
* @return string HTML formated strings for drop down lists of date and time * @return string HTML formated strings for drop down lists of date and time
*/ */
public static function printDateTime( public static function printDateTime(
$year, int|string $year,
$month, int|string $month,
$day, int|string $day,
$hour, int|string $hour,
$min, int|string $min,
string $suffix = '', string $suffix = '',
int $min_steps = 1, int $min_steps = 1,
bool $name_pos_back = false bool $name_pos_back = false

View File

@@ -731,9 +731,6 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
empty($this->table_array['protected']['value']) && empty($this->table_array['protected']['value']) &&
!$this->error !$this->error
) { ) {
if (!is_array($element_list)) {
$element_list = [];
}
for ($i = 0, $i_max = count($element_list); $i < $i_max; $i++) { for ($i = 0, $i_max = count($element_list); $i < $i_max; $i++) {
// $this->log->debug('form_error', 'Array: ' // $this->log->debug('form_error', 'Array: '
// . is_array($this->element_list[$element_list[$i]]['read_data']) . ' | ' // . is_array($this->element_list[$element_list[$i]]['read_data']) . ' | '
@@ -2294,12 +2291,10 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
} }
} }
} }
if (is_array($hidden_array)) {
reset($hidden_array); reset($hidden_array);
foreach ($hidden_array as $key => $value) { foreach ($hidden_array as $key => $value) {
$hidden[] = ['key' => $key, 'value' => $value]; $hidden[] = ['key' => $key, 'value' => $value];
} }
}
return $hidden; return $hidden;
} }

View File

@@ -22,7 +22,7 @@ class Image
* if empty ROOT is choosen * if empty ROOT is choosen
* @param string $cache_source cache path, if not given TMP is used * @param string $cache_source cache path, if not given TMP is used
* @param bool $clear_cache if set to true, will create thumb all the tame * @param bool $clear_cache if set to true, will create thumb all the tame
* @return string|bool thumbnail name, or false for error * @return string|false thumbnail name, or false for error
*/ */
public static function createThumbnail( public static function createThumbnail(
string $pic, string $pic,
@@ -32,7 +32,7 @@ class Image
string $path = '', string $path = '',
string $cache_source = '', string $cache_source = '',
bool $clear_cache = false bool $clear_cache = false
) { ): string|false {
// get image type flags // get image type flags
$image_types = [ $image_types = [
1 => 'gif', 1 => 'gif',
@@ -73,7 +73,7 @@ class Image
$create_file = false; $create_file = false;
$delete_filename = ''; $delete_filename = '';
// check if we can skip the PDF creation: if we have size, if do not have type, we assume type png // check if we can skip the PDF creation: if we have size, if do not have type, we assume type png
if (!$type && is_numeric($size_x) && is_numeric($size_y)) { if (!$type) {
$check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3]; $check_thumb = $tmp_src . 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[3];
if (!is_file($check_thumb)) { if (!is_file($check_thumb)) {
$create_file = true; $create_file = true;
@@ -100,10 +100,10 @@ class Image
[$width, $height, $type] = getimagesize($filename) ?: []; [$width, $height, $type] = getimagesize($filename) ?: [];
} }
// if no size given, set size to original // if no size given, set size to original
if (!$size_x || $size_x < 1 || !is_numeric($size_x)) { if (!$size_x || $size_x < 1) {
$size_x = $width; $size_x = $width;
} }
if (!$size_y || $size_y < 1 || !is_numeric($size_y)) { if (!$size_y || $size_y < 1) {
$size_y = $height; $size_y = $height;
} }
$thumb = 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[$type]; $thumb = 'thumb_' . $pic . '_' . $size_x . 'x' . $size_y . '.' . $image_types[$type];
@@ -170,7 +170,7 @@ class Image
* set to false to not use (default true) * set to false to not use (default true)
* to use quick but less nice version * to use quick but less nice version
* @param int $jpeg_quality default 80, set image quality for jpeg only * @param int $jpeg_quality default 80, set image quality for jpeg only
* @return string|bool thumbnail with path * @return string|false thumbnail with path
*/ */
public static function createThumbnailSimple( public static function createThumbnailSimple(
string $filename, string $filename,
@@ -181,7 +181,7 @@ class Image
bool $use_cache = true, bool $use_cache = true,
bool $high_quality = true, bool $high_quality = true,
int $jpeg_quality = 80 int $jpeg_quality = 80
) { ): string|false {
$thumbnail = false; $thumbnail = false;
// $this->debug('IMAGE PREPARE', "FILE: $filename (exists " // $this->debug('IMAGE PREPARE', "FILE: $filename (exists "
// .(string)file_exists($filename)."), WIDTH: $thumb_width, HEIGHT: $thumb_height"); // .(string)file_exists($filename)."), WIDTH: $thumb_width, HEIGHT: $thumb_height");
@@ -425,7 +425,7 @@ class Image
* @param string $filename path + filename to rotate. This file must be writeable * @param string $filename path + filename to rotate. This file must be writeable
* @return void * @return void
*/ */
public static function correctImageOrientation($filename): void public static function correctImageOrientation(string $filename): void
{ {
// function exists & file is writeable, else do nothing // function exists & file is writeable, else do nothing
if (!function_exists('exif_read_data') || !is_writeable($filename)) { if (!function_exists('exif_read_data') || !is_writeable($filename)) {

View File

@@ -1729,7 +1729,7 @@ final class CoreLibsACLLoginTest extends TestCase
], ],
20 20
], ],
'invalud search' => [ 'invalid search' => [
12, 12,
'foo', 'foo',
[], [],

View File

@@ -107,6 +107,13 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
*/ */
public function arraySearchRecursiveAllProvider(): array public function arraySearchRecursiveAllProvider(): array
{ {
/*
0: $needle,
1: array $input,
2: ?string $key_search_for,
3: bool $flag,
4: array $expected
*/
return [ return [
'find value' => [ 'find value' => [
0 => 'bar', 0 => 'bar',
@@ -172,6 +179,13 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
*/ */
public function arraySearchSimpleProvider(): array public function arraySearchSimpleProvider(): array
{ {
/*
0: array $input,
1: $key,
2: $value,
3: bool $flag,
4: bool $expected
*/
return [ return [
'key/value exist' => [ 'key/value exist' => [
0 => self::$array, 0 => self::$array,
@@ -665,7 +679,7 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
* *
* @param array $input * @param array $input
* @param string|int $key * @param string|int $key
* @param string|int $value * @param string|int|bool $value
* @param bool $expected * @param bool $expected
* @return void * @return void
*/ */

View File

@@ -1253,10 +1253,14 @@ final class CoreLibsDBIOTest extends TestCase
'string value literal' => ['string literal', 'tl', '\'string literal\'',], 'string value literal' => ['string literal', 'tl', '\'string literal\'',],
'empty string value literal' => ['', 'tl', '\'\'',], 'empty string value literal' => ['', 'tl', '\'\'',],
'null string value literal' => [null, 'tl', 'NULL',], 'null string value literal' => [null, 'tl', 'NULL',],
// ?d (I have no idea what that does, is like string) // escape string, but set all empty strings to null ('' is null)
'string value d' => ['string d', 'd', '\'string d\'',], 'string value d' => ['string d', 'd', '\'string d\'',],
'empty string value d' => ['', 'd', 'NULL',], 'empty string value d' => ['', 'd', 'NULL',],
'null string value d' => [null, 'd', 'NULL',], 'null string value d' => [null, 'd', 'NULL',],
// escape literal string, but set all empty strings to null ('' is null)
'string value literal d' => ['string d', 'dl', '\'string d\'',],
'empty string value literal d' => ['', 'dl', 'NULL',],
'null string value literal d' => [null, 'dl', 'NULL',],
// by bytea // by bytea
'string value d' => ['string d', 'by', '\x737472696e672064',], 'string value d' => ['string d', 'by', '\x737472696e672064',],
'empty string value d' => ['', 'by', 'NULL',], 'empty string value d' => ['', 'by', 'NULL',],
@@ -1281,7 +1285,7 @@ final class CoreLibsDBIOTest extends TestCase
* @dataProvider sqlEscapeProvider * @dataProvider sqlEscapeProvider
* @testdox Input value $input as $flag to $expected [$_dataName] * @testdox Input value $input as $flag to $expected [$_dataName]
* *
* @param int|float|string|null $input * @param int|float|string|bool|null $input
* @param string $flag * @param string $flag
* @param int|float|string $expected * @param int|float|string $expected
* @return void * @return void