PHP 8.1 base version update

This commit is contained in:
Clemens Schwaighofer
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
checkMissingCallableSignature: true
treatPhpDocTypesAsCertain: false
strictRules:
allRules: false
paths:
- %currentWorkingDirectory%/src
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
# 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
- # 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\\.$#"
path: %currentWorkingDirectory%/src/DB/SQL/PgSQL.php
# - # 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\\.$#"
# path: %currentWorkingDirectory%/src/DB/SQL/PgSQL.php
# this is ignored for now
# - '#Expression in empty\(\) is always falsy.#'
# -

View File

@@ -157,7 +157,7 @@ class Login
private $acl = [];
/** @var array<mixed> */
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 = [];
/** @var int default ACL level to be based on if nothing set */
private $default_acl_level = 0;
@@ -332,7 +332,7 @@ class Login
'type' => $res['type'],
'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
$_SESSION['DEFAULT_ACL_LIST'] = $this->default_acl_list;
@@ -986,7 +986,7 @@ class Login
* @param string $password the new password
* @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;
// check for valid in regex arrays in list
@@ -1048,7 +1048,7 @@ class Login
$res = $this->db->dbReturnRow($q);
if (
!is_array($res) ||
(is_array($res) && empty($res['edit_user_id']))
empty($res['edit_user_id'])
) {
// username wrong
$this->login_error = 201;
@@ -1068,9 +1068,11 @@ class Login
}
if (
!is_array($res) ||
(is_array($res) &&
(empty($res['edit_user_id']) ||
!$this->loginPasswordCheck($res['old_password_hash'], $this->pw_old_password)))
empty($res['edit_user_id']) ||
!$this->loginPasswordCheck(
$res['old_password_hash'],
$this->pw_old_password
)
) {
// old password wrong
$this->login_error = 202;
@@ -1124,7 +1126,7 @@ class Login
*
* @return string|null html data for login page, or null for nothing
*/
private function loginCreateLoginHTML()
private function loginCreateLoginHTML(): ?string
{
$html_string = null;
// if permission is ok, return null
@@ -1421,8 +1423,12 @@ EOM;
* @param string $username login user username
* @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) {
$this->action = 'Login';
} elseif ($this->logout) {
@@ -1794,7 +1800,6 @@ EOM;
// check that numeric, positive numeric, not longer than max input string lenght
// and not short than min password length
if (
is_numeric($length) &&
$length >= $this->password_min_length_max &&
$length <= $this->password_max_length &&
$length <= 255
@@ -2069,9 +2074,12 @@ EOM;
* @param string $type Type name to look in the acl list
* @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
* 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) {
return false;
@@ -2122,8 +2130,10 @@ EOM;
* @param string|int $data_key key value to search for
* @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])) {
return false;
}
@@ -2137,9 +2147,12 @@ EOM;
* @param string $uid Edit Access UID to look for
* @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
* @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);
}
}

View File

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

View File

@@ -534,7 +534,7 @@ class EditBase
* @throws Exception
* @throws SmartyException
*/
public function editBaseRun()
public function editBaseRun(): void
{
// set the template dir
// 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
{
trigger_error('Method ' . __METHOD__ . ' is deprecated, use join()', E_USER_DEPRECATED);
if (!is_array($array)) {
$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
* @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
preg_match("/\((.*)\)/", $color, $matches);
if (

View File

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

View File

@@ -32,7 +32,7 @@ class Jason
* or error string ('' for no error)
* @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);
}

View File

@@ -21,12 +21,12 @@ class ArrayHandler
* the needle can be found in the
* 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 = [];
if (!is_array($haystack)) {
$haystack = [];
}
if (
$key_search_for != null &&
array_key_exists($key_search_for, $haystack) &&
@@ -72,7 +72,7 @@ class ArrayHandler
*
* @param string|int $needle needle (search for)
* @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
* return new flat layout
* @param array<mixed>|null $path recursive call for previous path
@@ -80,9 +80,9 @@ class ArrayHandler
* the element was found
*/
public static function arraySearchRecursiveAll(
$needle,
string|int $needle,
array $haystack,
$key_search_for,
string|int|null $key_search_for,
bool $old = true,
?array $path = null
): ?array {
@@ -101,10 +101,6 @@ class ArrayHandler
$path['work'] = [];
}
}
// should not be needed because it would trigger a php mehtod error
if (!is_array($haystack)) {
$haystack = [];
}
// go through the array,
foreach ($haystack as $_key => $_value) {
@@ -152,17 +148,18 @@ class ArrayHandler
* array search simple. looks for key, value combination, if found, returns true
* on default does not strict check, so string '4' will match int 4 and vica versa
*
* @param array<mixed> $array search in as array
* @param string|int $key key (key to search in)
* @param string|int $value value (what to find)
* @param bool $strict [false], if set to true, will strict check key/value
* @return bool true on found, false on not found
* @param array<mixed> $array search in as array
* @param string|int $key key (key to search in)
* @param string|int|bool $value value (what to find)
* @param bool $strict [false], if set to true, will strict check key/value
* @return bool true on found, false on not found
*/
public static function arraySearchSimple(array $array, $key, $value, bool $strict = false): bool
{
if (!is_array($array)) {
$array = [];
}
public static function arraySearchSimple(
array $array,
string|int $key,
string|int|bool $value,
bool $strict = false
): bool {
foreach ($array as $_key => $_value) {
// if value is an array, we search
if (is_array($_value)) {
@@ -189,9 +186,9 @@ class ArrayHandler
* bool key flag: true: handle keys as string or int
* 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)
if (func_num_args() < 2) {
@@ -264,10 +261,10 @@ class ArrayHandler
* @param array<mixed> $needle elements to search for
* @param array<mixed> $haystack array where the $needle elements should
* 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
*/
public static function inArrayAny(array $needle, array $haystack)
public static function inArrayAny(array $needle, array $haystack): array|false
{
$found = [];
foreach ($needle as $element) {
@@ -291,8 +288,12 @@ class ArrayHandler
* @param bool $set_only flag to return all (default), or set only
* @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 = [];
// do this to only run count once
for ($i = 0, $iMax = count($db_array); $i < $iMax; $i++) {
@@ -385,11 +386,8 @@ class ArrayHandler
* and will be pushed up
* @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) {
// if it is not an array do just nothing
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
*/
public static function dateStringFormat(
$timestamp,
int|float $timestamp,
bool $show_micro = false,
bool $micro_as_float = false
): string {
@@ -100,8 +100,10 @@ class DateTime
* @param bool $show_micro show micro seconds, default true
* @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
if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) {
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
* @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;
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
* @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;
}
list ($year, $month, $day) = array_pad(
@@ -324,7 +326,7 @@ class DateTime
* @return int|bool false on error
* 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
if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) {
@@ -367,7 +369,7 @@ class DateTime
* @return int|bool false for error
* 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
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
* @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
$days = [];
// if anything invalid, return 0,0,0

View File

@@ -39,7 +39,7 @@ class Byte
* @return string converted byte number (float) with suffix
* @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 (is_numeric($bytes)) {
@@ -121,7 +121,7 @@ class Byte
* @return string|int|float converted value or original value
* @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
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,
* 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 = '';
if ($hex_prefix === true) {
$hex_color = '#';
@@ -61,7 +65,7 @@ class Colors
string $hexStr,
bool $return_as_string = false,
string $seperator = ','
) {
): string|array|bool {
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
if (!is_string($hexStr)) {
return false;
@@ -99,7 +103,7 @@ class Colors
* @return array<int|float>|bool Hue, Sat, Brightness/Value
* 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
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
* 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
// and S and V are 0 to 1
@@ -232,7 +236,7 @@ class Colors
* @return array<float>|bool hue/sat/luminance
* 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
foreach (['red', 'green', 'blue'] as $c) {
@@ -285,11 +289,8 @@ class Colors
* @param float $lum luminance: 0-100
* @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) {
$hue = 0;
}

View File

@@ -19,7 +19,7 @@ class Html
* @param mixed $string string to html encode
* @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)) {
return htmlentities($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
@@ -52,7 +52,7 @@ class Html
* @return ?string returns checked or selected,
* 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 (in_array($needle, $haystack)) {

View File

@@ -51,13 +51,13 @@ class Json
/**
* returns human readable string for json errors thrown in jsonConvertToArray
*
* @param bool|boolean $return_string [default=false] if set to true
* it will return the message string and not
* the error number
* @return int|string Either error number (0 for no error)
* or error string ('' for no error)
* @param bool $return_string [default=false] if set to true
* it will return the message string and not
* the error number
* @return int|string Either error number (0 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 = '';
// 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
* @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)) {
return 0;

View File

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

View File

@@ -18,19 +18,6 @@ class Session
/** @var string list for errors */
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
* 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
* Not this is just a wrapper for the static System::checkCLI call
@@ -116,7 +116,7 @@ class Session
* @param string|null $session_name
* @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
if ($this->checkCliStatus()) {
@@ -163,7 +163,7 @@ class Session
*
* @return string|bool
*/
public function getSessionId()
public function getSessionId(): string|bool
{
return session_id();
}
@@ -173,7 +173,7 @@ class Session
*
* @return string|bool
*/
public function getSessionName()
public function getSessionName(): string|bool
{
return session_name();
}
@@ -275,7 +275,7 @@ class Session
* @param mixed $value value to set (can be anything)
* @return void
*/
public function setS($name, $value): void
public function setS(string|int $name, mixed $value): void
{
$_SESSION[$name] = $value;
}
@@ -286,7 +286,7 @@ class Session
* @param string|int $name value key to get from _SESSION
* @return mixed value stored in _SESSION
*/
public function getS($name)
public function getS(string|int $name): mixed
{
return $_SESSION[$name] ?? '';
}
@@ -297,7 +297,7 @@ class Session
* @param string|int $name Name to check for
* @return bool True for set, False fornot set
*/
public function issetS($name): bool
public function issetS(string|int $name): bool
{
return isset($_SESSION[$name]);
}
@@ -308,7 +308,7 @@ class Session
* @param string|int $name _SESSION key name to remove
* @return void
*/
public function unsetS($name): void
public function unsetS(string|int $name): void
{
if (isset($_SESSION[$name])) {
unset($_SESSION[$name]);
@@ -325,7 +325,7 @@ class Session
* @param mixed $value
* @return void
*/
public function __set($name, $value): void
public function __set(string|int $name, mixed $value): void
{
$_SESSION[$name] = $value;
}
@@ -334,13 +334,14 @@ class Session
* Undocumented function
*
* @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])) {
return $_SESSION[$name];
}
return null;
}
/**
@@ -349,7 +350,7 @@ class Session
* @param string|int $name
* @return bool
*/
public function __isset($name): bool
public function __isset(string|int $name): bool
{
return isset($_SESSION[$name]);
}
@@ -360,7 +361,7 @@ class Session
* @param string|int $name
* @return void
*/
public function __unset($name): void
public function __unset(string|int $name): void
{
if (isset($_SESSION[$name])) {
unset($_SESSION[$name]);

View File

@@ -137,7 +137,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param string $text any html encoded 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);
@@ -156,7 +156,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param string $text encoded 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('&gt;', '>', $text);
@@ -172,7 +172,7 @@ class ArrayIO extends \CoreLibs\DB\IO
* @param bool $write write to error message, default false
* @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);
$string = '';
@@ -192,7 +192,7 @@ class ArrayIO extends \CoreLibs\DB\IO
*
* @return bool true if pk value is set, else false
*/
public function dbCheckPkSet()
public function dbCheckPkSet(): bool
{
// if pk_id is set, overrule ...
if ($this->pk_id) {
@@ -210,10 +210,10 @@ class ArrayIO extends \CoreLibs\DB\IO
/**
* 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
*/
public function dbResetArray($reset_pk = false): void
public function dbResetArray(bool $reset_pk = false): void
{
reset($this->table_array);
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
* 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
*/
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
if (is_array($table_array) && count($table_array)) {
@@ -294,12 +294,12 @@ class ArrayIO extends \CoreLibs\DB\IO
/**
* 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
* internal set array
* @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 (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)
*
* @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 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
*/
public function dbWrite(
@@ -391,7 +391,7 @@ class ArrayIO extends \CoreLibs\DB\IO
array $table_array = [],
bool $acl_limit = false
): array {
if (is_array($table_array) && count($table_array)) {
if (count($table_array)) {
$this->table_array = $table_array;
}
// PK ID check
@@ -475,13 +475,12 @@ class ArrayIO extends \CoreLibs\DB\IO
$this->table_array[$column]['type'] != 'view' &&
strlen($column) > 0 &&
// no acl limiter
($acl_limit === false ||
(
$acl_limit === false ||
// acl limit is true, min edit must be at larger than set
$acl_limit === true &&
$this->base_acl_level >=
($this->table_array[$column]['min_edit_acl'] ?? 100)
))
)
) {
// for password use hidden value if main is not set
if (
@@ -528,7 +527,7 @@ class ArrayIO extends \CoreLibs\DB\IO
}
$q_data .= $_value;
} 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) . "'";
} elseif (
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
* 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
* 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
* 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
*
* 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)
* 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
@@ -288,7 +288,7 @@ class IO
private $query; // the query string at the moment
// only inside
// 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,
/** @var bool */
private $db_debug = false; // DB_DEBUG ... (if set prints out debug msgs)
@@ -315,7 +315,7 @@ class IO
/** @var array<mixed,mixed> */
private $cursor_ext; // hash of hashes
// 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)
/** @var int */
private $num_rows; // how many rows have been found
@@ -495,15 +495,15 @@ class IO
* OTOH this whole class is so PgSQL specific
* 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;
switch ($this->db_type) {
// list of valid DB function objects
case 'pgsql':
$db_functions = new \CoreLibs\DB\SQL\PgSQL();
$db_functions = new SQL\PgSQL();
break;
// if non set or none matching abort
default:
@@ -566,7 +566,7 @@ class IO
*/
private function __closeDB(): void
{
if (!empty($this->dbh) && $this->dbh !== false) {
if (!empty($this->dbh)) {
$this->db_functions->__dbClose();
$this->dbh = null;
}
@@ -632,9 +632,6 @@ class IO
private function __printArray(array $array): string
{
$string = '';
if (!is_array($array)) {
$array = [];
}
foreach ($array as $key => $value) {
$string .= $this->nbsp . '<b>' . $key . '</b> => ';
if (is_array($value)) {
@@ -701,7 +698,7 @@ class IO
/**
* 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
* is more accurate (PgSql\Result)
* @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
* if nothing then empty string
*/
private function __dbErrorPreprocessor($cursor = false): array
private function __dbErrorPreprocessor(\PgSql\Result|false $cursor = false): array
{
$pg_error_string = '';
// 1 = self/__dbErrorPreprocessor, 2 = __dbError, __dbWarning,
@@ -774,12 +771,15 @@ class IO
/**
* write an error
* @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
* @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;
[$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor);
// write error msg ...
@@ -798,12 +798,15 @@ class IO
/**
* write a warning
* @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
* @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;
[$where_called, $pg_error_string] = $this->__dbErrorPreprocessor($cursor);
$this->__dbDebug(
@@ -821,18 +824,18 @@ class IO
/**
* if there is the 'to_encoding' var set,
* and the field is in the wrong encoding converts it to the target
* @param array<mixed>|bool|null $row Array from fetch_row
* @return array<mixed>|bool Convert fetch_row array, or false
* @param array<mixed>|false $row Array from fetch_row
* @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;
}
// only do if array, else pass through row (can be false)
if (
!is_array($row) ||
empty($this->to_encoding)// || empty($this->db_encoding)
empty($this->to_encoding)
) {
return $row;
}
@@ -914,7 +917,7 @@ class IO
* check if there is another query running, or do we hang after a
* PHP error
* @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
{
@@ -932,7 +935,7 @@ class IO
* dbReturn
* Read data from previous written data cache
* @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
*/
private function __dbReturnCacheRead(string $query_hash, bool $assoc_only): array
@@ -983,10 +986,11 @@ class IO
* - sets internal hash for query
* - checks multiple call count
* @param string $query query string
* @param string $pk_name primary key [if set to NULL no returning will be added]
* @return string|bool queryt hash OR boolean false on error
* @param string $pk_name primary key
* [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
$this->cursor = false;
@@ -1152,10 +1156,10 @@ class IO
* insert_id_ext [DEPRECATED, all in insert_id_arr]
* - holds all returning as array
* 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|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
* @return void
*/
@@ -1163,7 +1167,7 @@ class IO
bool $returning_id,
string $query,
?string $pk_name,
$cursor,
\PgSql\Result|false $cursor,
?string $stm_name = null
): void {
// $this->log->debug('DB SET INSERT ID', 'Ret: ' . ($returning_id ? 'Y' : 'N')
@@ -1271,10 +1275,10 @@ class IO
/**
* get certain settings like username, db name
* @param string $name what setting to query
* @return mixed setting value, if not allowed name return false
* @param string $name what setting to query
* @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 = '';
switch ($name) {
@@ -1373,7 +1377,7 @@ class IO
* extended version info, can access all additional information data
* @param string $parameter Array parameter name, if not valid returns
* 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
* @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
* @return bool true for ok, false on not ok
*/
public function dbCompareVersion(string $compare): bool
{
$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);
$compare = $matches[1];
$to_master = $matches[2];
@@ -1464,7 +1469,7 @@ class IO
* else current cursor
* @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
if ($query) {
@@ -1490,7 +1495,7 @@ class IO
* @param string|int|float|bool $string string to escape
* @return string escaped string
*/
public function dbEscapeString($string): string
public function dbEscapeString(string|int|float|bool $string): string
{
return $this->db_functions->__dbEscapeString($string);
}
@@ -1501,7 +1506,7 @@ class IO
* @param string|int|float|bool $string string to escape
* @return string escaped string
*/
public function dbEscapeLiteral($string): string
public function dbEscapeLiteral(string|int|float|bool $string): string
{
return $this->db_functions->__dbEscapeLiteral($string);
}
@@ -1538,11 +1543,11 @@ class IO
/**
* clear up any data for valid DB insert
* @param int|float|string|null $value to escape data
* @param string $kbn escape trigger type
* @return string escaped value
* @param int|float|string|bool|null $value to escape data
* @param string $kbn escape trigger type
* @return string escaped value
*/
public function dbSqlEscape($value, string $kbn = '')
public function dbSqlEscape(int|float|string|bool|null $value, string $kbn = ''): string
{
switch ($kbn) {
case 'i':
@@ -1551,24 +1556,35 @@ class IO
case 'f':
$value = empty($value) ? 'NULL' : floatval($value);
break;
// string (null is null, else is string)
case 't':
$value = $value === null ?
'NULL' :
"'" . $this->dbEscapeString($value) . "'";
break;
// string litereal (null is null, else is stirng)
case 'tl':
$value = $value === null ?
'NULL' :
$this->dbEscapeLiteral($value);
break;
// what is d?
// escape string, set empty to null
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;
// bytea data
case 'by':
$value = empty($value) ? 'NULL' : $this->dbEscapeBytea((string)$value);
break;
// bool
case 'b':
if (is_float($value)) {
$value = (int)$value;
@@ -1577,6 +1593,7 @@ class IO
'NULL' :
"'" . $this->dbBoolean($value, true) . "'";
break;
// int, but with empty value is 0
case 'i2':
$value = empty($value) ? 0 : intval($value);
break;
@@ -1590,14 +1607,14 @@ class IO
/**
* 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
* @param string|bool|int $string 't' / 'f' or any string, or bool true/false
* @param boolean $rev do reverse (bool to string)
* @return bool|string correct php boolean true/false
* @param bool $rev do reverse (bool to string)
* @return bool|string correct php bool true/false
* 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 ($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
* @param string $table table 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();
$table = (!empty($schema) ? $schema . '.' : '') . $table;
@@ -1736,14 +1753,14 @@ class IO
* NO_CACHE/3: don't write cache
* @param bool $assoc_only True to only returned the named and not
* 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
*/
public function dbReturn(
string $query,
int $cache = self::USE_CACHE,
bool $assoc_only = false
) {
): array|false {
$this->__dbErrorReset();
if (!$query) {
$this->__dbError(11);
@@ -1754,7 +1771,7 @@ class IO
// pre declare array
if (!isset($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,
// cached data
'data' => [],
@@ -2000,9 +2017,9 @@ class IO
* if pk name is table name and _id, pk_name
* is not needed to be set
* 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();
// 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
* @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
* if not set will use internal cursor,
* if not found, stops with 0 (error)
@@ -2039,9 +2056,9 @@ class IO
* @param bool $assoc_only false is default,
* if true only named 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();
// set last available cursor if none set or false
@@ -2064,9 +2081,9 @@ class IO
* returns the FIRST row of the given query
* @param string $query the query to be executed
* @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();
if (!$query) {
@@ -2091,9 +2108,9 @@ class IO
* createds an array of hashes of the query (all data)
* @param string $query the query to be executed
* @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();
if (!$query) {
@@ -2151,41 +2168,44 @@ class IO
* returns the full array for cursor ext
* or cursor for one query
* or detail data fonr one query cursor data
* @param string|null $query Query string, if not null convert to hash
* and return set cursor ext for only this
* if not found or null return null
* @return array<mixed>|string|int|resource|object|null
* Cursor Extended array full if no parameter
* Key is hash string from query run
* Or cursor data entry if query field is set
* If nothing found return null
* @param string|null $query Query string, if not null convert to hash
* and return set cursor ext for only this
* if not found or null return 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
* Key is hash string from query run
* Or cursor data entry if query field is set
* If nothing found return null
*/
public function dbGetCursorExt($query = null, string $query_field = '')
{
if ($query !== null) {
$query_hash = $this->dbGetQueryHash($query);
if (
is_array($this->cursor_ext) &&
isset($this->cursor_ext[$query_hash])
) {
if (empty($query_field)) {
return $this->cursor_ext[$query_hash];
} else {
return $this->cursor_ext[$query_hash][$query_field] ?? null;
}
} else {
return null;
}
public function dbGetCursorExt(
$query = null,
string $query_field = ''
): array|string|int|\PgSql\Result|null {
if ($query === null) {
return $this->cursor_ext;
}
$query_hash = $this->dbGetQueryHash($query);
if (
is_array($this->cursor_ext) &&
isset($this->cursor_ext[$query_hash])
) {
if (empty($query_field)) {
return $this->cursor_ext[$query_hash];
} else {
return $this->cursor_ext[$query_hash][$query_field] ?? null;
}
} else {
return null;
}
return $this->cursor_ext;
}
/**
* returns the current position the read out
* @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();
if (!$query) {
@@ -2199,9 +2219,9 @@ class IO
/**
* returns the number of rows for the current select query
* @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();
if (!$query) {
@@ -2253,11 +2273,14 @@ class IO
* @param string $stm_name statement name
* @param string $query queryt string to run
* @param string $pk_name optional primary key
* @return bool|object|resource false on error, true on warning or
* result on full ok (PgSql\Result)
* @return \PgSql\Result|bool false on error, true on warning or
* 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();
$matches = [];
if (!$query) {
@@ -2361,9 +2384,9 @@ class IO
* runs a prepare query
* @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
* @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();
// if no DB Handler drop out
@@ -2483,11 +2506,10 @@ class IO
/**
* checks a previous async query and returns data if finished
* NEEDS : dbExecAsync
* @return bool|object|resource cursor resource if the query is still running,
* false if an error occured or cursor of that query
* (PgSql\Result)
* @return \PgSql\Result|bool cursor resource if the query is still running,
* false if an error occured or cursor of that query
*/
public function dbCheckAsync()
public function dbCheckAsync(): \PgSql\Result|bool
{
$this->__dbErrorReset();
// 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 string $table name for the target table
* @param array<mixed> $data data array to override _POST data
* @return int|bool primary key
* @return int|false primary key
*/
public function dbWriteData(
array $write_array,
@@ -2555,13 +2577,7 @@ class IO
int $primary_key,
string $table,
array $data = []
) {
if (!is_array($write_array)) {
$write_array = [];
}
if (!is_array($not_write_array)) {
$not_write_array = [];
}
): int|false {
$not_write_update_array = [];
return $this->dbWriteDataExt(
$write_array,
@@ -2586,16 +2602,16 @@ class IO
* to write during update (optional)
* @param array<mixed> $data optional array with data
* if not _POST vars are used
* @return int|bool primary key
* @return int|false primary key
*/
public function dbWriteDataExt(
array $write_array,
$primary_key,
int|string|array $primary_key,
string $table,
array $not_write_array = [],
array $not_write_update_array = [],
array $data = []
) {
): int|false {
if (!is_array($primary_key)) {
$primary_key = [
'row' => $table . '_id',
@@ -2711,7 +2727,10 @@ class IO
$primary_key['value'] = $this->dbGetInsertPK();
}
// 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
* @return bool Current debug flag as set
*/
public function dbSetDebug($debug = null): bool
public function dbSetDebug(?bool $debug = null): bool
{
if ($debug !== null) {
$this->db_debug = $debug;
@@ -2805,7 +2824,7 @@ class IO
* @return bool False on failure to find schema value or set schema,
* True on successful set
*/
public function dbSetSchema(string $db_schema)
public function dbSetSchema(string $db_schema): bool
{
$this->__dbErrorReset();
if (empty($db_schema)) {
@@ -2934,9 +2953,9 @@ class IO
/**
* 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;
}
@@ -2992,7 +3011,7 @@ class IO
*
* @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)) {
return null;
@@ -3016,7 +3035,7 @@ class IO
* @param integer|null $pos
* @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
if ($key === null) {
@@ -3110,7 +3129,7 @@ class IO
* Not ethat returnin_id also can return false
* 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 (empty($stm_name)) {
@@ -3159,8 +3178,8 @@ class IO
* Sets error number that was last
* So we always have the last error number stored even if a new
* one is created
* @param boolean $transform Set to true to transform into id + error message
* @return string Last error number as string or error message
* @param bool $transform Set to true to transform into id + error message
* @return string Last error number as string or error message
*/
public function dbGetLastError(bool $transform = false): string
{
@@ -3180,10 +3199,10 @@ class IO
/**
* Sets warning number that was last
* 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
* @return string Last Warning number as string or warning message
* @param bool $transform Set to true to transform into id + 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 (empty($this->warning_id)) {
@@ -3221,7 +3240,7 @@ class IO
* Null for error
* @deprecated Use ->dbGetInsertPK();
*/
public function dbGetReturning()
public function dbGetReturning(): array|string|int|bool|null
{
return $this->dbGetInsertPK();
}
@@ -3271,7 +3290,7 @@ class IO
* @return array<mixed>|string|int|bool|null See above
* @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);
return $this->dbGetReturningExt($key);
@@ -3282,7 +3301,7 @@ class IO
* @return array<mixed>|string|int|bool|null [DEPRECATED]
* @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);
return $this->dbGetInsertPK();
@@ -3293,7 +3312,7 @@ class IO
* @return array<mixed>|string|int|bool|null [DEPRECATED]
* @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);
return $this->dbGetInsertPK();
@@ -3305,7 +3324,7 @@ class IO
* @return array<mixed>|string|bool|int|null [DEPRECATED]
* @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);
return $this->dbGetReturningExt($key);
@@ -3314,10 +3333,10 @@ class IO
/**
* DEPRECATED: getCursorExt
* @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
*/
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);
return $this->dbGetCursorExt($q);
@@ -3328,7 +3347,7 @@ class IO
* @return int|null [DEPRECATED]
* @deprecated use dbGetNumRows() instead
*/
public function getNumRows()
public function getNumRows(): ?int
{
trigger_error('Method ' . __METHOD__ . ' is deprecated, use dbGetNumRows()', E_USER_DEPRECATED);
return $this->dbGetNumRows();

View File

@@ -6,7 +6,7 @@
declare(strict_types=1);
namespace CoreLibs\DB\SQL\SqlInterface;
namespace CoreLibs\DB\SQL\Interface;
interface SqlFunctions
{
@@ -21,33 +21,33 @@ interface SqlFunctions
* Undocumented function
*
* @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
*
* @param string $query
* @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
*
* @param string $query
* @return boolean
* @return bool
*/
public function __dbSendQuery(string $query): bool;
/**
* Undocumented function
*
* @return object|resource|bool
* @return \PgSql\Result|false
*/
public function __dbGetResult();
public function __dbGetResult(): \PgSql\Result|false;
/**
* Undocumented function
@@ -61,85 +61,85 @@ interface SqlFunctions
*
* @param string $name
* @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
*
* @param string $name
* @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
*
* @param object|resource|bool $cursor
* @return integer
* @param \PgSql\Result|false $cursor
* @return int
*/
public function __dbNumRows($cursor): int;
public function __dbNumRows(\PgSql\Result|false $cursor): int;
/**
* Undocumented function
*
* @param object|resource|bool $cursor
* @return integer
* @param \PgSql\Result|false $cursor
* @return int
*/
public function __dbNumFields($cursor): int;
public function __dbNumFields(\PgSql\Result|false $cursor): int;
/**
* Undocumented function
*
* @param object|resource|bool $cursor
* @param \PgSql\Result|false $cursor
* @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
*
* @param object|resource|bool $cursor
* @param \PgSql\Result|false $cursor
* @param int $result_type
* @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
*
* @param boolean $assoc_type
* @return integer
* @param bool $assoc_type
* @return int
*/
public function __dbResultType(bool $assoc_type = true): int;
/**
* Undocumented function
*
* @param object|resource|bool $cursor
* @param \PgSql\Result|false $cursor
* @return array<mixed>|bool
*/
public function __dbFetchAll($cursor);
public function __dbFetchAll(\PgSql\Result|false $cursor): array|bool;
/**
* Undocumented function
*
* @param object|resource|bool $cursor
* @return integer
* @param \PgSql\Result|false $cursor
* @return int
*/
public function __dbAffectedRows($cursor): int;
public function __dbAffectedRows(\PgSql\Result|false $cursor): int;
/**
* Undocumented function
*
* @param string $query
* @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
@@ -148,7 +148,7 @@ interface SqlFunctions
* @param string $schema
* @return string|bool
*/
public function __dbPrimaryKey(string $table, string $schema = '');
public function __dbPrimaryKey(string $table, string $schema = ''): string|bool;
/**
* Undocumented function
@@ -157,9 +157,9 @@ interface SqlFunctions
* @param string $db_user
* @param string $db_pass
* @param string $db_name
* @param integer $db_port
* @param int $db_port
* @param string $db_ssl
* @return object|resource|bool
* @return \PgSql\Connection|false
*/
public function __dbConnect(
string $db_host,
@@ -168,24 +168,24 @@ interface SqlFunctions
string $db_name,
int $db_port,
string $db_ssl = 'allow'
);
): \PgSql\Connection|false;
/**
* Undocumented function
*
* @param object|resource|bool $cursor
* @param \PgSql\Result|false $cursor
* @return string
*/
public function __dbPrintError($cursor = false): string;
public function __dbPrintError(\PgSql\Result|false $cursor = false): string;
/**
* Undocumented function
*
* @param string $table
* @param boolean $extended
* @param bool $extended
* @return array<mixed>|bool
*/
public function __dbMetaData(string $table, $extended = true);
public function __dbMetaData(string $table, bool $extended = true): array|bool;
/**
* Undocumented function
@@ -193,7 +193,7 @@ interface SqlFunctions
* @param string|int|float|bool $string
* @return string
*/
public function __dbEscapeString($string): string;
public function __dbEscapeString(string|int|float|bool $string): string;
/**
* Undocumented function
@@ -201,7 +201,7 @@ interface SqlFunctions
* @param string|int|float|bool $string
* @return string
*/
public function __dbEscapeLiteral($string): string;
public function __dbEscapeLiteral(string|int|float|bool $string): string;
/**
* Undocumented function
@@ -230,15 +230,15 @@ interface SqlFunctions
/**
* Undocumented function
*
* @return boolean
* @return bool
*/
public function __dbConnectionBusy(): bool;
/**
* Undocumented function
*
* @param integer $timeout_seconds
* @return boolean
* @param int $timeout_seconds
* @return bool
*/
public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool;
@@ -253,8 +253,8 @@ interface SqlFunctions
* Undocumented function
*
* @param string $array_text
* @param integer $start
* @param integer|null $end
* @param int $start
* @param int|null $end
* @return array<mixed>|null
*/
public function __dbArrayParse(
@@ -275,7 +275,7 @@ interface SqlFunctions
* Undocumented function
*
* @param string $db_schema
* @return integer
* @return int
*/
public function __dbSetSchema(string $db_schema): int;
@@ -290,7 +290,7 @@ interface SqlFunctions
* Undocumented function
*
* @param string $db_encoding
* @return integer
* @return 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
/** @#phan-file-suppress PhanUndeclaredTypeProperty,PhanUndeclaredTypeParameter,PhanUndeclaredTypeReturnType */
class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
class PgSQL implements Interface\SqlFunctions
{
/** @var string */
private $last_error_query;
// NOTE for PHP 8.1 this is no longer a resource
/** @var object|resource|bool */ // replace object with PgSql\Connection
/** @var \PgSql\Connection|false */
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
*
* @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 = '';
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return false;
}
// 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 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 = '';
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return false;
}
// 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
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return false;
}
$result = pg_send_query($this->dbh, $query);
@@ -136,12 +135,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/**
* 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 = '';
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return false;
}
$result = pg_get_result($this->dbh);
@@ -161,7 +160,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/
public function __dbClose(): void
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return;
}
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 $query query string
* @return object|resource|bool prepare statement handler or
* false for error (PgSql\Result)
* @return \PgSql\Result|false prepare statement handler or
* 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;
}
$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 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;
}
$result = pg_execute($this->dbh, $name, $data);
@@ -212,12 +211,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/**
* wrapper for pg_num_rows
*
* @param object|resource|bool $cursor cursor PgSql\Result (former resource)
* @return int number of rows, -1 on error
* @param \PgSql\Result|false $cursor cursor
* @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 pg_num_rows($cursor);
@@ -226,12 +225,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/**
* wrapper for pg_num_fields
*
* @param object|resource|bool $cursor cursor PgSql\Result (former resource)
* @return int number for fields in result, -1 on error
* @param \PgSql\Result|false $cursor cursor
* @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 pg_num_fields($cursor);
@@ -240,13 +239,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/**
* wrapper for pg_field_name
*
* @param object|resource|bool $cursor cursor PgSql\Result (former resource)
* @param int $i field position
* @return string|bool name or false on error
* @param \PgSql\Result|false $cursor cursor
* @param int $i field position
* @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 pg_field_name($cursor, $i);
@@ -256,13 +255,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* wrapper for pg_fetch_array
* if through/true false, use __dbResultType(true)
*
* @param object|resource|bool $cursor cursor PgSql\Result (former resource)
* @param int $result_type result type as int number
* @return array<mixed>|bool array result data or false on end/error
* @param \PgSql\Result|false $cursor cursor
* @param int $result_type result type as int number
* @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;
}
// 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
*
* @param object|resource|bool $cursor cursor PgSql\Result (former resource)
* @return array<mixed>|bool data array or false for end/error
* @param \PgSql\Result|false $cursor cursor
* @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 pg_fetch_all($cursor);
@@ -301,12 +300,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/**
* wrapper for pg_affected_rows
*
* @param object|resource|bool $cursor cursor PgSql\Result (former resource)
* @return int affected rows, 0 for none, -1 for error
* @param \PgSql\Result|false $cursor cursor
* @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 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
* @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
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
* @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) {
// 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 integer $db_port port (int, 5432 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(
string $db_host,
@@ -435,7 +434,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
string $db_name,
int $db_port,
string $db_ssl = 'allow'
) {
): \PgSql\Connection|false {
if (empty($db_name)) {
return false;
}
@@ -470,22 +469,22 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* reads the last error for this cursor and returns
* html formatted string with error name
*
* @param bool|object|resource $cursor cursor PgSql\Result (former resource)
* @param \PgSql\Result|false $cursor cursor
* or null
* @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 '';
}
// 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);
$this->last_error_query = '';
$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- '
. $error_str;
} else {
@@ -500,9 +499,9 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* @param bool $extended show extended info (default true)
* @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;
}
// 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
* @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 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
* @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)'';
}
// 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
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return '';
}
// 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
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return '';
}
return pg_escape_bytea($this->dbh, $data);
@@ -584,11 +583,12 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/**
* 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
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return false;
}
return pg_connection_busy($this->dbh);
@@ -597,13 +597,13 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
/**
* Experimental wrapper with scoket timetout
*
* @param integer $timeout_seconds Wait how many seconds on timeout
* @return boolean True if connection is busy, or false on
* not busy or no db connection at all
* @param integer $timeout_seconds Wait how many seconds on timeout
* @return bool True if connection is busy, or false on
* not busy or no db connection at all
*/
public function __dbConnectionBusySocketWait(int $timeout_seconds = 3): bool
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return false;
}
$busy = pg_connection_busy($this->dbh);
@@ -626,14 +626,14 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
* On default 'version' will be stripped of any space attached info
* eg 13.5 (other info) will return only 13.5
*
* @param string $parameter Parameter string to extract from array
* @param boolean $strip If parameter is server strip out on default
* Set to false to get original string AS is
* @return string The parameter value
* @param string $parameter Parameter string to extract from array
* @param bool $strip If parameter is server strip out on default
* Set to false to get original string AS is
* @return string The parameter value
*/
public function __dbVersionInfo(string $parameter, bool $strip = true): string
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return '';
}
// extract element
@@ -655,7 +655,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/
public function __dbVersionInfoParameterList(): array
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return [];
}
return array_keys(pg_version($this->dbh));
@@ -670,7 +670,7 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
*/
public function __dbVersion(): string
{
if ($this->dbh === false || is_bool($this->dbh)) {
if (is_bool($this->dbh)) {
return '';
}
// 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
* @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;
}
if (empty($parameter)) {

View File

@@ -413,7 +413,7 @@ class Logging
* @param string $name what variable to return
* @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
return $this->{$name};
@@ -550,9 +550,9 @@ class Logging
* @param string $flag on/off
* @param string|null $level if not null then check if this array entry is set
* 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
if (!in_array($type, ['debug', 'echo', 'print'])) {

View File

@@ -122,7 +122,7 @@ class GetTextReader
* @param bool $enable_cache Enable or disable caching
* 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 ((!is_object($Reader) && !$Reader) || (is_object($Reader) && $Reader->error)) {

View File

@@ -46,7 +46,7 @@ class Encoding
* @return void
* @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);
}
@@ -60,7 +60,7 @@ class Encoding
* @return string|int Set error character
* @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);
}
@@ -81,7 +81,7 @@ class Encoding
* @param string $string string to test
* @param string $from_encoding encoding of string to test
* @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
* @deprecated Use \CoreLibs\Check\Encoding::checkConvertEncoding();
*/
@@ -89,7 +89,7 @@ class Encoding
string $string,
string $from_encoding,
string $to_encoding
) {
): array|false {
return \CoreLibs\Check\Encoding::checkConvertEncoding($string, $from_encoding, $to_encoding);
}

View File

@@ -13,27 +13,27 @@ class Elements
/**
* print the date/time drop downs, used in any queue/send/insert at date/time place
*
* @param int $year year YYYY
* @param int $month month m
* @param int $day day d
* @param int $hour hour H
* @param int $min min i
* @param string $suffix additional info printed after the date time
* variable in the drop down
* also used for ID in the on change JS call
* @param int $min_steps default is 1 (minute), can set to anything,
* is used as sum up from 0
* @param bool $name_pos_back default false, if set to true,
* the name will be printend after the drop down
* and not before the drop down
* @return string HTML formated strings for drop down lists of date and time
* @param int|string $year year YYYY
* @param int|string $month month m
* @param int|string $day day d
* @param int|string $hour hour H
* @param int|string $min min i
* @param string $suffix additional info printed after the date time
* variable in the drop down
* also used for ID in the on change JS call
* @param int $min_steps default is 1 (minute), can set to anything,
* is used as sum up from 0
* @param bool $name_pos_back default false, if set to true,
* the name will be printend after the drop down
* and not before the drop down
* @return string HTML formated strings for drop down lists of date and time
*/
public static function printDateTime(
$year,
$month,
$day,
$hour,
$min,
int|string $year,
int|string $month,
int|string $day,
int|string $hour,
int|string $min,
string $suffix = '',
int $min_steps = 1,
bool $name_pos_back = false

View File

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

View File

@@ -22,7 +22,7 @@ class Image
* if empty ROOT is choosen
* @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
* @return string|bool thumbnail name, or false for error
* @return string|false thumbnail name, or false for error
*/
public static function createThumbnail(
string $pic,
@@ -32,7 +32,7 @@ class Image
string $path = '',
string $cache_source = '',
bool $clear_cache = false
) {
): string|false {
// get image type flags
$image_types = [
1 => 'gif',
@@ -73,7 +73,7 @@ class Image
$create_file = false;
$delete_filename = '';
// 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];
if (!is_file($check_thumb)) {
$create_file = true;
@@ -100,10 +100,10 @@ class Image
[$width, $height, $type] = getimagesize($filename) ?: [];
}
// 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;
}
if (!$size_y || $size_y < 1 || !is_numeric($size_y)) {
if (!$size_y || $size_y < 1) {
$size_y = $height;
}
$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)
* to use quick but less nice version
* @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(
string $filename,
@@ -181,7 +181,7 @@ class Image
bool $use_cache = true,
bool $high_quality = true,
int $jpeg_quality = 80
) {
): string|false {
$thumbnail = false;
// $this->debug('IMAGE PREPARE', "FILE: $filename (exists "
// .(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
* @return void
*/
public static function correctImageOrientation($filename): void
public static function correctImageOrientation(string $filename): void
{
// function exists & file is writeable, else do nothing
if (!function_exists('exif_read_data') || !is_writeable($filename)) {

View File

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

View File

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

View File

@@ -1253,10 +1253,14 @@ final class CoreLibsDBIOTest extends TestCase
'string value literal' => ['string literal', 'tl', '\'string literal\'',],
'empty string value literal' => ['', 'tl', '\'\'',],
'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\'',],
'empty string value d' => ['', '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
'string value d' => ['string d', 'by', '\x737472696e672064',],
'empty string value d' => ['', 'by', 'NULL',],
@@ -1281,7 +1285,7 @@ final class CoreLibsDBIOTest extends TestCase
* @dataProvider sqlEscapeProvider
* @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 int|float|string $expected
* @return void