Merge branch 'development' into feature/TTD-2608/LoginACLSetAjaxPageViaClassOption
This commit is contained in:
@@ -51,6 +51,9 @@ $test_array = [
|
||||
'element_c' => [
|
||||
'type' => 'email'
|
||||
],
|
||||
'element_d' => [
|
||||
'type' => 'butter'
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@@ -60,6 +63,8 @@ echo "ARRAYSEARCHRECURSIVE(email, [array], type): "
|
||||
. DgS::printAr(ArrayHandler::arraySearchRecursive('email', $test_array, 'type')) . "<br>";
|
||||
echo "ARRAYSEARCHRECURSIVE(email, [array]['input'], type): "
|
||||
. DgS::printAr(ArrayHandler::arraySearchRecursive('email', $test_array['input'], 'type')) . "<br>";
|
||||
echo "ARRAYSEARCHRECURSIVE(email, [array]['input'], wrong): "
|
||||
. DgS::printAr(ArrayHandler::arraySearchRecursive('email', $test_array['input'], 'wrong')) . "<br>";
|
||||
// all return
|
||||
echo "ARRAYSEARCHRECURSIVEALL(email, [array], type): "
|
||||
. Dgs::printAr((array)ArrayHandler::arraySearchRecursiveAll('email', $test_array, 'type')) . "<br>";
|
||||
@@ -68,7 +73,15 @@ echo "ARRAYSEARCHRECURSIVEALL(email, [array], type): "
|
||||
|
||||
// simple search
|
||||
echo "ARRAYSEARCHSIMPLE([array], type, email): "
|
||||
. (string)ArrayHandler::arraySearchSimple($test_array, 'type', 'email') . "<br>";
|
||||
. Dgs::prBl(ArrayHandler::arraySearchSimple($test_array, 'type', 'email')) . "<br>";
|
||||
echo "ARRAYSEARCHSIMPLE([array], type, not): "
|
||||
. Dgs::prBl(ArrayHandler::arraySearchSimple($test_array, 'type', 'not')) . "<br>";
|
||||
echo "ARRAYSEARCHSIMPLE([array], type, [email,butter]): "
|
||||
. Dgs::prBl(ArrayHandler::arraySearchSimple($test_array, 'type', ['email', 'butter'])) . "<br>";
|
||||
echo "ARRAYSEARCHSIMPLE([array], type, [email,not]): "
|
||||
. Dgs::prBl(ArrayHandler::arraySearchSimple($test_array, 'type', ['email', 'not'])) . "<br>";
|
||||
echo "ARRAYSEARCHSIMPLE([array], type, [never,not]): "
|
||||
. Dgs::prBl(ArrayHandler::arraySearchSimple($test_array, 'type', ['never', 'not'])) . "<br>";
|
||||
|
||||
$array_1 = [
|
||||
'foo' => 'bar'
|
||||
@@ -168,6 +181,31 @@ $data = [
|
||||
$search = ['image', 'result_image', 'nothing', 'EMPTY'];
|
||||
$result = ArrayHandler::arraySearchKey($data, $search);
|
||||
print "ARRAYSEARCHKEY: Search: " . DgS::printAr($search) . ", Found: " . DgS::printAr($result) . "<br>";
|
||||
$result = ArrayHandler::arraySearchKey($data, $search, true);
|
||||
print "ARRAYSEARCHKEY: FLAT: Search: " . DgS::printAr($search) . ", Found: " . DgS::printAr($result) . "<br>";
|
||||
$result = ArrayHandler::arraySearchKey($data, $search, true, true);
|
||||
print "ARRAYSEARCHKEY: FLAT:PREFIX: Search: " . DgS::printAr($search) . ", Found: " . DgS::printAr($result) . "<br>";
|
||||
$result = ArrayHandler::arraySearchKey($data, ["EMPTY"], true);
|
||||
print "ARRAYSEARCHKEY: FLAT:PREFIX: Search: " . DgS::printAr(["EMPTY"]) . ", Found: " . DgS::printAr($result) . "<br>";
|
||||
|
||||
// $data = [
|
||||
// [
|
||||
// [name] => qrc_apcd,
|
||||
// [value] => 5834367225,
|
||||
// ],
|
||||
// [
|
||||
// [name] => qrc_other,
|
||||
// [value] => test,
|
||||
// ],
|
||||
// [
|
||||
// [name] => qrc_car_type,
|
||||
// [value] => T33P17,
|
||||
// ],
|
||||
// [
|
||||
// [name] => qrc_deaer_store,
|
||||
// [value] => 9990:001,
|
||||
// ]
|
||||
// ]
|
||||
|
||||
// $test = [
|
||||
// 'A' => [
|
||||
@@ -265,6 +303,231 @@ print "array intersect key: " . DgS::printAr($keys) . ": " . DgS::printAr($out)
|
||||
|
||||
print "array + suffix: " . DgS::printAr(ArrayHandler::arrayModifyKey($array, key_mod_suffix:'_attached')) . "<br>";
|
||||
|
||||
print "<hr>";
|
||||
$unsorted = [9, 5, 'A', 4, 'B', 6, 'c', 'C', 'a'];
|
||||
$unsorted_keys = [
|
||||
'A' => 9, 'B' => 5, 'C' => 'A', 'D' => 4, 'E' => 'B', 'F' => 6, 'G' => 'c',
|
||||
'H1' => 'D', 'B1' => 'd', 'H' => 'C', 'I' => 'a'
|
||||
];
|
||||
print "Unsorted: " . DgS::printAr($unsorted) . "<br>";
|
||||
print "(sort): " . DgS::printAr(ArrayHandler::sortArray($unsorted)) . "<br>";
|
||||
print "(sort, lower): " . DgS::printAr(ArrayHandler::sortArray($unsorted, case_insensitive:true)) . "<br>";
|
||||
print "(sort, reverse): " . DgS::printAr(ArrayHandler::sortArray($unsorted, reverse:true)) . "<br>";
|
||||
print "(sort, lower, reverse): "
|
||||
. DgS::printAr(ArrayHandler::sortArray($unsorted, case_insensitive:true, reverse:true)) . "<br>";
|
||||
print "(sort, keys): " . DgS::printAr(ArrayHandler::sortArray($unsorted_keys, maintain_keys:true)) . "<br>";
|
||||
print "(sort, keys, lower): "
|
||||
. DgS::printAr(ArrayHandler::sortArray($unsorted_keys, maintain_keys:true, case_insensitive:true)) . "<br>";
|
||||
|
||||
print "<hr>";
|
||||
$unsorted = [9 => 'A', 5 => 'B', 'A' => 'C', 4 => 'D', 'B' => 'E', 6 => 'F', 'c' => 'G', 'C' => 'H', 'a' => 'I'];
|
||||
print "Unsorted Keys: " . DgS::printAr($unsorted) . "<br>";
|
||||
print "(sort): " . DgS::printAr(ArrayHandler::sortArray($unsorted)) . "<br>";
|
||||
print "(sort, keys): " . DgS::printAr(ArrayHandler::sortArray($unsorted, maintain_keys:true)) . "<br>";
|
||||
print "(kosrt): " . DgS::printAr(ArrayHandler::ksortArray($unsorted)) . "<br>";
|
||||
print "(kosrt, reverse): " . DgS::printAr(ArrayHandler::ksortArray($unsorted, reverse:true)) . "<br>";
|
||||
print "(kosrt, lower case, reverse): "
|
||||
. DgS::printAr(ArrayHandler::ksortArray($unsorted, case_insensitive:true, reverse:true)) . "<br>";
|
||||
|
||||
|
||||
print "<hr>";
|
||||
$nested = [
|
||||
'B' => 'foo', 'a', '0', 9,
|
||||
'1' => ['z', 'b', 'a'],
|
||||
'd' => ['zaip', 'bar', 'baz']
|
||||
];
|
||||
print "Nested: " . DgS::printAr($nested) . "<br>";
|
||||
print "(sort): " . DgS::printAr(ArrayHandler::sortArray($nested)) . "<br>";
|
||||
print "(ksort): " . DgS::printAr(ArrayHandler::ksortArray($nested)) . "<br>";
|
||||
|
||||
print "<hr>";
|
||||
|
||||
$search_array = [
|
||||
'table_lookup' => [
|
||||
'match' => [
|
||||
['param' => 'access_d_cd', 'data' => 'a_cd', 'time_validation' => 'on_load',],
|
||||
['param' => 'other_block', 'data' => 'b_cd'],
|
||||
['pflaume' => 'other_block', 'data' => 'c_cd'],
|
||||
['param' => 'third_block', 'data' => 'd_cd', 'time_validation' => 'cool'],
|
||||
['special' => 'other_block', 'data' => 'e_cd', 'time_validation' => 'other'],
|
||||
]
|
||||
]
|
||||
];
|
||||
print "Search: " . DgS::printAr($search_array) . "<br>";
|
||||
print "Result (all): " . Dgs::printAr(ArrayHandler::findArraysMissingKey(
|
||||
$search_array,
|
||||
'other_block',
|
||||
'time_validation'
|
||||
)) . "<br>";
|
||||
print "Result (key): " . Dgs::printAr(ArrayHandler::findArraysMissingKey(
|
||||
$search_array,
|
||||
'other_block',
|
||||
'time_validation',
|
||||
'pflaume'
|
||||
)) . "<br>";
|
||||
print "Result (key): " . Dgs::printAr(ArrayHandler::findArraysMissingKey(
|
||||
$search_array,
|
||||
'other_block',
|
||||
['data', 'time_validation'],
|
||||
'pflaume'
|
||||
)) . "<br>";
|
||||
|
||||
print "<hr>";
|
||||
|
||||
$search_array = [
|
||||
'a' => [
|
||||
'lookup' => 1,
|
||||
'value' => 'Foo',
|
||||
'other' => 'Bar',
|
||||
],
|
||||
'b' => [
|
||||
'lookup' => 1,
|
||||
'value' => 'AAA',
|
||||
'other' => 'Other',
|
||||
],
|
||||
'c' => [
|
||||
'lookup' => 0,
|
||||
'value' => 'CCC',
|
||||
'other' => 'OTHER',
|
||||
],
|
||||
'd' => [
|
||||
'd-1' => [
|
||||
'lookup' => 1,
|
||||
'value' => 'D SUB 1',
|
||||
'other' => 'Other B',
|
||||
],
|
||||
'd-2' => [
|
||||
'lookup' => 0,
|
||||
'value' => 'D SUB 2',
|
||||
'other' => 'Other C',
|
||||
],
|
||||
'more' => [
|
||||
'lookup' => 1,
|
||||
'd-more-1' => [
|
||||
'lookup' => 1,
|
||||
'value' => 'D MORE SUB 1',
|
||||
'other' => 'Other C',
|
||||
],
|
||||
'd-more-2' => [
|
||||
'lookup' => 0,
|
||||
'value' => 'D MORE SUB 0',
|
||||
'other' => 'Other C',
|
||||
],
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
print "Search: " . DgS::printAr($search_array) . "<br>";
|
||||
print "Result: " . DgS::printAr(ArrayHandler::selectArrayFromOption(
|
||||
$search_array,
|
||||
'lookup',
|
||||
1,
|
||||
)) . "<br>";
|
||||
print "Result: " . DgS::printAr(ArrayHandler::selectArrayFromOption(
|
||||
$search_array,
|
||||
'lookup',
|
||||
1,
|
||||
recursive:true
|
||||
)) . "<br>";
|
||||
print "Result: " . DgS::printAr(ArrayHandler::selectArrayFromOption(
|
||||
$search_array,
|
||||
'lookup',
|
||||
1,
|
||||
recursive:true,
|
||||
flat_separator:'-=-'
|
||||
)) . "<br>";
|
||||
print "Result: " . DgS::printAr(ArrayHandler::selectArrayFromOption(
|
||||
$search_array,
|
||||
'lookup',
|
||||
1,
|
||||
recursive:true,
|
||||
flat_result:false
|
||||
)) . "<br>";
|
||||
print "Result: " . DgS::printAr(ArrayHandler::selectArrayFromOption(
|
||||
$search_array,
|
||||
'other',
|
||||
'Other',
|
||||
case_insensitive:false,
|
||||
)) . "<br>";
|
||||
|
||||
$nestedTestData = [
|
||||
'level1_a' => [
|
||||
'name' => 'Level1A',
|
||||
'type' => 'parent',
|
||||
'children' => [
|
||||
'child1' => [
|
||||
'name' => 'Child1',
|
||||
'type' => 'child',
|
||||
'active' => true
|
||||
],
|
||||
'child2' => [
|
||||
'name' => 'Child2',
|
||||
'type' => 'child',
|
||||
'active' => false
|
||||
]
|
||||
]
|
||||
],
|
||||
'level1_b' => [
|
||||
'name' => 'Level1B',
|
||||
'type' => 'parent',
|
||||
'children' => [
|
||||
'child3' => [
|
||||
'name' => 'Child3',
|
||||
'type' => 'child',
|
||||
'active' => true,
|
||||
'nested' => [
|
||||
'deep1' => [
|
||||
'name' => 'Deep1',
|
||||
'type' => 'deep',
|
||||
'active' => true
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
'item5' => [
|
||||
'name' => 'Direct',
|
||||
'type' => 'child',
|
||||
'active' => false
|
||||
]
|
||||
];
|
||||
|
||||
$result = ArrayHandler::selectArrayFromOption(
|
||||
$nestedTestData,
|
||||
'type',
|
||||
'child',
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
true,
|
||||
':*'
|
||||
);
|
||||
print "*1*Result: " . DgS::printAr($result) . "<br>";
|
||||
$data = [
|
||||
'parent1' => [
|
||||
'name' => 'Parent1',
|
||||
'status' => 'ACTIVE',
|
||||
'children' => [
|
||||
'child1' => [
|
||||
'name' => 'Child1',
|
||||
'status' => 'active'
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
$result = ArrayHandler::selectArrayFromOption(
|
||||
$data,
|
||||
'status',
|
||||
'active',
|
||||
false, // not strict
|
||||
true, // case insensitive
|
||||
true, // recursive
|
||||
true, // flat result
|
||||
'|' // custom separator
|
||||
);
|
||||
print "*2*Result: " . DgS::printAr($result) . "<br>";
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -83,6 +83,9 @@ function mtParseCSV(
|
||||
'UTF-8',
|
||||
$encoding
|
||||
);
|
||||
if ($string === false) {
|
||||
return $lines;
|
||||
}
|
||||
}
|
||||
if ($flag == 'INTERN') {
|
||||
// split with PHP function
|
||||
|
||||
@@ -67,6 +67,8 @@ print "J/S::E-JSON ERROR: " . $json_class::jsonGetLastError() . ": " . $json_cla
|
||||
$array = ['foo' => 'bar'];
|
||||
$output = Json::jsonConvertArrayTo($array);
|
||||
print "S::JSON: " . DgS::printAr($array) . " => " . $output . "<br>";
|
||||
$array = ['foo' => 'bar', 'sub' => ['other' => 'this', 'foo' => 'bar', 'set' => [12, 34, true]]];
|
||||
print "Pretty: <pre>" . Json::jsonPrettyPrint($array) . "</pre><br>";
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
|
||||
@@ -82,6 +82,7 @@ $log->error('Cannot process data', ['error' => 'log']);
|
||||
$log->critical('Critical message', ['critical' => 'log']);
|
||||
$log->alert('Alert message', ['Alert' => 'log']);
|
||||
$log->emergency('Emergency message', ['Emergency' => 'log']);
|
||||
error_log('TRIGGER ERROR LOG MANUAL: Emergency');
|
||||
print "Log File: " . $log->getLogFile() . "<br>";
|
||||
|
||||
$log->setLogFlag(Flag::per_run);
|
||||
|
||||
@@ -38,13 +38,21 @@ $key_length = 10;
|
||||
$key_length_b = 5;
|
||||
$key_lenght_long = 64;
|
||||
print "S::RANDOMKEYGEN(auto): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "S::SETRANDOMKEYLENGTH($key_length): " . RandomKey::setRandomKeyLength($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen() . "<br>";
|
||||
// print "S::SETRANDOMKEYLENGTH($key_length): " . RandomKey::setRandomKeyLength($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length_b): " . RandomKey::randomKeyGen($key_length_b) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): " . RandomKey::randomKeyGen($key_length) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_lenght_long): " . RandomKey::randomKeyGen($key_lenght_long) . "<br>";
|
||||
print "S::RANDOMKEYGEN($key_lenght_long, list data): "
|
||||
. RandomKey::randomKeyGen($key_lenght_long, ['A', 'B', 'C'], ['7', '8', '9']) . "<br>";
|
||||
print "S::RANDOMKEYGEN(auto): " . RandomKey::randomKeyGen() . "<br>";
|
||||
print "===<Br>";
|
||||
$_array = new CoreLibs\Create\RandomKey();
|
||||
print "C->RANDOMKEYGEN(auto): " . $_array->randomKeyGen() . "<br>";
|
||||
print "C->RANDOMKEYGEN(default): " . $_array->randomKeyGen() . "<br>";
|
||||
print "===<Br>";
|
||||
// CHANGE key characters
|
||||
$_array = new CoreLibs\Create\RandomKey(['A', 'F', 'B'], ['1', '5', '9']);
|
||||
print "C->RANDOMKEYGEN(pre set): " . $_array->randomKeyGen() . "<br>";
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
|
||||
@@ -14,6 +14,9 @@ require 'config.php';
|
||||
$LOG_FILE_ID = 'classTest-string';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Strings;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$log = new CoreLibs\Logging\Logging([
|
||||
'log_folder' => BASE . LOG,
|
||||
'log_file_id' => $LOG_FILE_ID,
|
||||
@@ -29,6 +32,7 @@ print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||
|
||||
$split = '4-4-4';
|
||||
$split_length = 4;
|
||||
$test_strings = [
|
||||
'13',
|
||||
'1234',
|
||||
@@ -40,20 +44,59 @@ $test_strings = [
|
||||
];
|
||||
|
||||
foreach ($test_strings as $string) {
|
||||
print "Convert: $string with $split to: "
|
||||
. \CoreLibs\Convert\Strings::splitFormatString($string, $split)
|
||||
print "A) Convert: $string with $split to: "
|
||||
. Strings::splitFormatString($string, $split)
|
||||
. "<br>";
|
||||
try {
|
||||
print "B) Convert: $string with $split_length to: "
|
||||
. Strings::splitFormatStringFixed($string, $split_length)
|
||||
. "<br>";
|
||||
} catch (Exception $e) {
|
||||
print "Split not possible: " . $e->getMessage() . "<br>";
|
||||
}
|
||||
}
|
||||
|
||||
$split = '2_2';
|
||||
$split_length = 2;
|
||||
$string = '1234';
|
||||
print "Convert: $string with $split to: "
|
||||
. \CoreLibs\Convert\Strings::splitFormatString($string, $split)
|
||||
print "A) Convert: $string with $split to: "
|
||||
. Strings::splitFormatString($string, $split)
|
||||
. "<br>";
|
||||
print "B) Convert: $string with $split_length to: "
|
||||
. Strings::splitFormatStringFixed($string, $split_length, "_")
|
||||
. "<br>";
|
||||
$split = '2-2';
|
||||
$string = 'あいうえ';
|
||||
print "Convert: $string with $split to: "
|
||||
. \CoreLibs\Convert\Strings::splitFormatString($string, $split)
|
||||
try {
|
||||
print "Convert: $string with $split to: "
|
||||
. Strings::splitFormatString($string, $split)
|
||||
. "<br>";
|
||||
} catch (\Exception $e) {
|
||||
print "Cannot split string: " . $e->getMessage() . "<br>";
|
||||
}
|
||||
print "B) Convert: $string with $split_length to: "
|
||||
. Strings::splitFormatStringFixed($string, $split_length, "-")
|
||||
. "<br>";
|
||||
|
||||
$string = 'ABCD12345568ABC13';
|
||||
$format = '2-4_5-2#4';
|
||||
$output = 'AB-CD12_34556-8A#BC13';
|
||||
print "A) Convert: $string with $format to: "
|
||||
. Strings::splitFormatString($string, $format)
|
||||
. "<br>";
|
||||
|
||||
// try other split calls
|
||||
$string = "ABCDE";
|
||||
$split_length = 2;
|
||||
$split_char = "-=-";
|
||||
print "Convert: $string with $split_length / $split_char to: "
|
||||
. Strings::splitFormatStringFixed($string, $split_length, $split_char)
|
||||
. "<br>";
|
||||
$string = "あいうえお";
|
||||
$split_length = 2;
|
||||
$split_char = "-=-";
|
||||
print "Convert: $string with $split_length / $split_char to: "
|
||||
. Strings::splitFormatStringFixed($string, $split_length, $split_char)
|
||||
. "<br>";
|
||||
|
||||
$test_splits = [
|
||||
@@ -63,9 +106,40 @@ $test_splits = [
|
||||
'2-3-4',
|
||||
];
|
||||
foreach ($test_splits as $split) {
|
||||
print "$split with count: " . \CoreLibs\Convert\Strings::countSplitParts($split) . "<br>";
|
||||
print "$split with count: " . Strings::countSplitParts($split) . "<br>";
|
||||
}
|
||||
|
||||
// check char list in list
|
||||
$needle = "abc";
|
||||
$haystack = "abcdefg";
|
||||
print "Needle: " . $needle . ", Haysteck: " . $haystack . ": "
|
||||
. DgS::prBl(Strings::allCharsInSet($needle, $haystack)) . "<br>";
|
||||
$needle = "abcz";
|
||||
print "Needle: " . $needle . ", Haysteck: " . $haystack . ": "
|
||||
. DgS::prBl(Strings::allCharsInSet($needle, $haystack)) . "<br>";
|
||||
|
||||
print "Combined strings A: "
|
||||
. Strings::buildCharStringFromLists(['A', 'B', 'C'], ['0', '1', '2']) . "<br>";
|
||||
print "Combined strings B: "
|
||||
. Strings::buildCharStringFromLists([['F'], ['G'], 'H'], [['5', ['6']], ['0'], '1', '2']) . "<br>";
|
||||
|
||||
$input_string = "AaBbCc";
|
||||
print "Unique: " . Strings::removeDuplicates($input_string) . "<br>";
|
||||
print "Unique: " . Strings::removeDuplicates(strtolower($input_string)) . "<br>";
|
||||
|
||||
$regex_string = "/^[A-z]$/";
|
||||
print "Regex is: " . $regex_string . ": " . DgS::prBl(Strings::isValidRegex($regex_string)) . "<br>";
|
||||
$regex_string = "'//test{//'";
|
||||
print "Regex is: " . $regex_string . ": " . DgS::prBl(Strings::isValidRegex($regex_string)) . "<br>";
|
||||
print "Regex is: " . $regex_string . ": " . DgS::printAr(Strings::validateRegex($regex_string)) . "<br>";
|
||||
$regex_string = "/^[A-z";
|
||||
print "Regex is: " . $regex_string . ": " . DgS::prBl(Strings::isValidRegex($regex_string)) . "<br>";
|
||||
print "[A] LAST PREGE ERROR: " . preg_last_error() . " -> "
|
||||
. (Strings::PREG_ERROR_MESSAGES[preg_last_error()] ?? '-') . "<br>";
|
||||
$preg_error = Strings::isValidRegex($regex_string);
|
||||
print "[B] LAST PREGE ERROR: " . preg_last_error() . " -> "
|
||||
. Strings::getLastRegexErrorString() . " -> " . preg_last_error_msg() . "<br>";
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -34,6 +34,17 @@ function executeFunctionByName(functionName, context) {
|
||||
}
|
||||
return context[func].apply(context, args);
|
||||
}
|
||||
function runFunction(name) {
|
||||
var args = Array.prototype.slice.call(arguments, 1);
|
||||
runFunctionArgsArray(name, args);
|
||||
}
|
||||
function runFunctionArgsArray(name, args) {
|
||||
var fn = window[name];
|
||||
if (typeof fn !== "function") {
|
||||
return;
|
||||
}
|
||||
fn.apply(window, args);
|
||||
}
|
||||
function isObject(val) {
|
||||
if (val === null) {
|
||||
return false;
|
||||
@@ -659,6 +670,31 @@ function getQueryStringParam(search = "", query = "", single = false) {
|
||||
}
|
||||
return param;
|
||||
}
|
||||
function hasUrlParameter(key) {
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.has(key);
|
||||
}
|
||||
function getUrlParameter(key) {
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get(key);
|
||||
}
|
||||
function updateUrlParameter(key, value, reload = false) {
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set(key, value);
|
||||
const newUrl = url.toString();
|
||||
window.history.pushState({ path: newUrl }, "", newUrl);
|
||||
if (reload) {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
function removeUrlParameter(key, reload = false) {
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.delete(key);
|
||||
window.history.pushState({}, "", url.toString());
|
||||
if (reload) {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
// src/utils/LoginLogout.mjs
|
||||
function loginLogout() {
|
||||
@@ -979,7 +1015,7 @@ var ActionBox = class {
|
||||
$("#overlayBox").css("zIndex", this.zIndex.base);
|
||||
}
|
||||
$("#overlayBox").show();
|
||||
if (!keyInObject(target_id, this.zIndex.boxes)) {
|
||||
if (!objectKeyExists(this.zIndex.boxes, target_id)) {
|
||||
this.zIndex.boxes[target_id] = this.zIndex.max;
|
||||
this.zIndex.max += 10;
|
||||
} else if (this.zIndex.boxes[target_id] + 10 < this.zIndex.max) {
|
||||
@@ -1005,7 +1041,7 @@ var ActionBox = class {
|
||||
if (!exists(target_id)) {
|
||||
return;
|
||||
}
|
||||
if (keyInObject(target_id, this.action_box_storage) && clean === true) {
|
||||
if (objectKeyExists(this.action_box_storage, target_id) && clean === true) {
|
||||
this.action_box_storage[target_id] = {};
|
||||
}
|
||||
if (clean === true) {
|
||||
@@ -1043,15 +1079,15 @@ var ActionBox = class {
|
||||
* @param {Object} [settings={}] Optional settings, eg style sheets
|
||||
*/
|
||||
createActionBox(target_id = "actionBox", title = "", contents = {}, headers = {}, settings = {}, show_close = true) {
|
||||
if (!keyInObject(target_id, this.action_box_storage)) {
|
||||
if (!objectKeyExists(this.action_box_storage, target_id)) {
|
||||
this.action_box_storage[target_id] = {};
|
||||
}
|
||||
let header_css = [];
|
||||
if (keyInObject("header_css", settings)) {
|
||||
if (objectKeyExists(settings, "header_css")) {
|
||||
header_css = settings.header_css;
|
||||
}
|
||||
let action_box_css = [];
|
||||
if (keyInObject("action_box_css", settings)) {
|
||||
if (objectKeyExists(settings, "action_box_css")) {
|
||||
action_box_css = settings.action_box_css;
|
||||
}
|
||||
let elements = [];
|
||||
@@ -1082,14 +1118,14 @@ var ActionBox = class {
|
||||
)
|
||||
));
|
||||
if (getObjectCount(headers) > 0) {
|
||||
if (keyInObject("raw_string", headers)) {
|
||||
if (objectKeyExists(headers, "raw_string")) {
|
||||
elements.push(headers.raw_string);
|
||||
} else {
|
||||
elements.push(this.hec.phfo(headers));
|
||||
}
|
||||
}
|
||||
if (getObjectCount(contents) > 0) {
|
||||
if (keyInObject("raw_string", contents)) {
|
||||
if (objectKeyExists(contents, "raw_string")) {
|
||||
elements.push(contents.raw_string);
|
||||
} else {
|
||||
elements.push(this.hec.phfo(contents));
|
||||
@@ -1517,12 +1553,24 @@ function html_options_block2(name, data, selected = "", multiple = 0, options_on
|
||||
function html_options_refill2(name, data, sort = "") {
|
||||
html_options_refill(name, data, sort);
|
||||
}
|
||||
function parseQueryString2(query = "", return_key = "") {
|
||||
return parseQueryString(query, return_key);
|
||||
function parseQueryString2(query = "", return_key = "", single = false) {
|
||||
return parseQueryString(query, return_key, single);
|
||||
}
|
||||
function getQueryStringParam2(search = "", query = "", single = false) {
|
||||
return getQueryStringParam(search, query, single);
|
||||
}
|
||||
function updateUrlParameter2(key, value, reload = false) {
|
||||
return updateUrlParameter(key, value, reload);
|
||||
}
|
||||
function removeUrlParameter2(key, reload = false) {
|
||||
return removeUrlParameter(key, reload);
|
||||
}
|
||||
function hasUrlParameter2(key) {
|
||||
return hasUrlParameter(key);
|
||||
}
|
||||
function getUrlParameter2(key) {
|
||||
return getUrlParameter(key);
|
||||
}
|
||||
function loginLogout2() {
|
||||
loginLogout();
|
||||
}
|
||||
|
||||
4
www/admin/layout/javascript/utils.min.js
vendored
4
www/admin/layout/javascript/utils.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -383,7 +383,8 @@ class Basic
|
||||
public function initRandomKeyLength(int $key_length): bool
|
||||
{
|
||||
trigger_error('Method ' . __METHOD__ . ' is deprecated, use \CoreLibs\Create\RandomKey::setRandomKeyLength()', E_USER_DEPRECATED);
|
||||
return \CoreLibs\Create\RandomKey::setRandomKeyLength($key_length);
|
||||
// no op, we do no longer pre set the random key length
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -988,10 +989,10 @@ class Basic
|
||||
* @param bool $auto_check default true, if source encoding is set
|
||||
* check that the source is actually matching
|
||||
* to what we sav the source is
|
||||
* @return string encoding converted string
|
||||
* @return string|false encoding converted string
|
||||
* @deprecated use \CoreLibs\Convert\Encoding::convertEncoding() instead
|
||||
*/
|
||||
public static function convertEncoding(string $string, string $to_encoding, string $source_encoding = '', bool $auto_check = true): string
|
||||
public static function convertEncoding(string $string, string $to_encoding, string $source_encoding = '', bool $auto_check = true): string|false
|
||||
{
|
||||
trigger_error('Method ' . __METHOD__ . ' is deprecated, use \CoreLibs\Convert\Encoding::convertEncoding()', E_USER_DEPRECATED);
|
||||
return \CoreLibs\Convert\Encoding::convertEncoding($string, $to_encoding, $source_encoding, $auto_check);
|
||||
|
||||
@@ -56,7 +56,11 @@ class Encoding
|
||||
{
|
||||
// return mb_substitute_character();
|
||||
if ($return_substitute_func === true) {
|
||||
return mb_substitute_character();
|
||||
// if false abort with error
|
||||
if (($return = mb_substitute_character()) === false) {
|
||||
return self::$mb_error_char;
|
||||
}
|
||||
return $return;
|
||||
} else {
|
||||
return self::$mb_error_char;
|
||||
}
|
||||
@@ -88,7 +92,13 @@ class Encoding
|
||||
): array|false {
|
||||
// convert to target encoding and convert back
|
||||
$temp = mb_convert_encoding($string, $to_encoding, $from_encoding);
|
||||
if ($temp === false) {
|
||||
return false;
|
||||
}
|
||||
$compare = mb_convert_encoding($temp, $from_encoding, $to_encoding);
|
||||
if ($compare === false) {
|
||||
return false;
|
||||
}
|
||||
// if string does not match anymore we have a convert problem
|
||||
if ($string == $compare) {
|
||||
return false;
|
||||
|
||||
@@ -10,6 +10,8 @@ namespace CoreLibs\Combined;
|
||||
|
||||
class ArrayHandler
|
||||
{
|
||||
public const string DATA_SEPARATOR = ':';
|
||||
|
||||
/**
|
||||
* searches key = value in an array / array
|
||||
* only returns the first one found
|
||||
@@ -148,18 +150,22 @@ 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|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
|
||||
* @param array<mixed> $array search in as array
|
||||
* @param string|int $key key (key to search in)
|
||||
* @param string|int|bool|array<string|int|bool> $value values list (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,
|
||||
string|int $key,
|
||||
string|int|bool $value,
|
||||
string|int|bool|array $value,
|
||||
bool $strict = false
|
||||
): bool {
|
||||
// convert to array
|
||||
if (!is_array($value)) {
|
||||
$value = [$value];
|
||||
}
|
||||
foreach ($array as $_key => $_value) {
|
||||
// if value is an array, we search
|
||||
if (is_array($_value)) {
|
||||
@@ -167,9 +173,9 @@ class ArrayHandler
|
||||
if (($result = self::arraySearchSimple($_value, $key, $value, $strict)) !== false) {
|
||||
return $result;
|
||||
}
|
||||
} elseif ($strict === false && $_key == $key && $_value == $value) {
|
||||
} elseif ($strict === false && $_key == $key && in_array($_value, $value)) {
|
||||
return true;
|
||||
} elseif ($strict === true && $_key === $key && $_value === $value) {
|
||||
} elseif ($strict === true && $_key === $key && in_array($_value, $value, true)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -236,6 +242,160 @@ class ArrayHandler
|
||||
return $hit_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search in an array for value with or without key and
|
||||
* check in the same array block for the required key
|
||||
* If not found return an array with the array block there the required key is missing,
|
||||
* the path as string with seperator block set and the missing key entry
|
||||
*
|
||||
* @param array<mixed> $array
|
||||
* @param string|int|float|bool $search_value
|
||||
* @param string|array<string> $required_key
|
||||
* @param ?string $search_key [null]
|
||||
* @param string $path_separator [DATA_SEPARATOR]
|
||||
* @param string $current_path
|
||||
* @return array<array{content?:array<mixed>,path?:string,missing_key?:array<string>}>
|
||||
*/
|
||||
public static function findArraysMissingKey(
|
||||
array $array,
|
||||
string|int|float|bool $search_value,
|
||||
string|array $required_key,
|
||||
?string $search_key = null,
|
||||
string $path_separator = self::DATA_SEPARATOR,
|
||||
string $current_path = ''
|
||||
): array {
|
||||
$results = [];
|
||||
foreach ($array as $key => $value) {
|
||||
$path = $current_path ? $current_path . $path_separator . $key : $key;
|
||||
|
||||
if (is_array($value)) {
|
||||
// Check if this array contains the search value
|
||||
// either any value match or with key
|
||||
if ($search_key === null) {
|
||||
$containsValue = in_array($search_value, $value, true);
|
||||
} else {
|
||||
$containsValue = array_key_exists($search_key, $value) && $value[$search_key] === $search_value;
|
||||
}
|
||||
|
||||
// If it contains the value but doesn't have the required key
|
||||
if (
|
||||
$containsValue &&
|
||||
(
|
||||
(
|
||||
is_string($required_key) &&
|
||||
!array_key_exists($required_key, $value)
|
||||
) || (
|
||||
is_array($required_key) &&
|
||||
count(array_intersect($required_key, array_keys($value))) !== count($required_key)
|
||||
)
|
||||
)
|
||||
) {
|
||||
$results[] = [
|
||||
'content' => $value,
|
||||
'path' => $path,
|
||||
'missing_key' => is_array($required_key) ?
|
||||
array_values(array_diff($required_key, array_keys($value))) :
|
||||
[$required_key]
|
||||
];
|
||||
}
|
||||
|
||||
// Recursively search nested arrays
|
||||
$results = array_merge(
|
||||
$results,
|
||||
self::findArraysMissingKey(
|
||||
$value,
|
||||
$search_value,
|
||||
$required_key,
|
||||
$search_key,
|
||||
$path_separator,
|
||||
$path
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find key => value entry and return set with key for all matching
|
||||
* Can search recursively through nested arrays if recursive flag is set
|
||||
*
|
||||
* @param array<mixed> $array
|
||||
* @param string $lookup
|
||||
* @param int|string|float|bool $search
|
||||
* @param bool $strict [false]
|
||||
* @param bool $case_insensitive [false]
|
||||
* @param bool $recursive [false]
|
||||
* @param bool $flat_result [true] If set to false and recursive is on the result is a nested array
|
||||
* @param string $flat_separator [DATA_SEPARATOR] if flat result is true, can be any string
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public static function selectArrayFromOption(
|
||||
array $array,
|
||||
string $lookup,
|
||||
int|string|float|bool $search,
|
||||
bool $strict = false,
|
||||
bool $case_insensitive = false,
|
||||
bool $recursive = false,
|
||||
bool $flat_result = true,
|
||||
string $flat_separator = self::DATA_SEPARATOR
|
||||
): array {
|
||||
// skip on empty
|
||||
if ($array == []) {
|
||||
return [];
|
||||
}
|
||||
// init return result
|
||||
$result = [];
|
||||
// case sensitive convert if string
|
||||
if ($case_insensitive && is_string($search)) {
|
||||
$search = strtolower($search);
|
||||
}
|
||||
|
||||
foreach ($array as $key => $value) {
|
||||
// Handle current level search
|
||||
if (isset($value[$lookup])) {
|
||||
$compareValue = $value[$lookup];
|
||||
|
||||
if ($case_insensitive && is_string($compareValue)) {
|
||||
$compareValue = strtolower($compareValue);
|
||||
}
|
||||
|
||||
if (
|
||||
($strict && $search === $compareValue) ||
|
||||
(!$strict && $search == $compareValue)
|
||||
) {
|
||||
$result[$key] = $value;
|
||||
}
|
||||
}
|
||||
// Handle recursive search if flag is set
|
||||
if ($recursive && is_array($value)) {
|
||||
$recursiveResults = self::selectArrayFromOption(
|
||||
$value,
|
||||
$lookup,
|
||||
$search,
|
||||
$strict,
|
||||
$case_insensitive,
|
||||
true,
|
||||
$flat_result,
|
||||
$flat_separator
|
||||
);
|
||||
|
||||
// Merge recursive results with current results
|
||||
// Preserve keys by using array_merge with string keys or + operator
|
||||
foreach ($recursiveResults as $recKey => $recValue) {
|
||||
if ($flat_result) {
|
||||
$result[$key . $flat_separator . $recKey] = $recValue;
|
||||
} else {
|
||||
$result[$key][$recKey] = $recValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* main wrapper function for next/prev key
|
||||
*
|
||||
@@ -553,12 +713,13 @@ class ArrayHandler
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifieds the key of an array with a prefix and/or suffix and returns it with the original value
|
||||
* Modifieds the key of an array with a prefix and/or suffix and
|
||||
* returns it with the original value
|
||||
* does not change order in array
|
||||
*
|
||||
* @param array<string|int,mixed> $in_array
|
||||
* @param string $key_mod_prefix [default=''] key prefix string
|
||||
* @param string $key_mod_suffix [default=''] key suffix string
|
||||
* @param string $key_mod_prefix [''] key prefix string
|
||||
* @param string $key_mod_suffix [''] key suffix string
|
||||
* @return array<string|int,mixed>
|
||||
*/
|
||||
public static function arrayModifyKey(
|
||||
@@ -581,6 +742,72 @@ class ArrayHandler
|
||||
array_values($in_array)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* sort array and return in same call
|
||||
* sort ascending or descending with or without lower case convert
|
||||
* value only, will loose key connections unless preserve_keys is set to true
|
||||
*
|
||||
* @param array<mixed> $array array to sort by values
|
||||
* @param int $params sort flags
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public static function sortArray(
|
||||
array $array,
|
||||
bool $case_insensitive = false,
|
||||
bool $reverse = false,
|
||||
bool $maintain_keys = false,
|
||||
int $params = SORT_REGULAR
|
||||
): array {
|
||||
$fk_sort_lower_case = function (string $a, string $b): int {
|
||||
return strtolower($a) <=> strtolower($b);
|
||||
};
|
||||
$fk_sort_lower_case_reverse = function (string $a, string $b): int {
|
||||
return strtolower($b) <=> strtolower($a);
|
||||
};
|
||||
$case_insensitive ? (
|
||||
$maintain_keys ?
|
||||
(uasort($array, $reverse ? $fk_sort_lower_case_reverse : $fk_sort_lower_case)) :
|
||||
(usort($array, $reverse ? $fk_sort_lower_case_reverse : $fk_sort_lower_case))
|
||||
) :
|
||||
(
|
||||
$maintain_keys ?
|
||||
($reverse ? arsort($array, $params) : asort($array, $params)) :
|
||||
($reverse ? rsort($array, $params) : sort($array, $params))
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* sort by key ascending or descending and return
|
||||
*
|
||||
* @param array<mixed> $array
|
||||
* @param bool $case_insensitive [false]
|
||||
* @param bool $reverse [false]
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public static function ksortArray(array $array, bool $case_insensitive = false, bool $reverse = false): array
|
||||
{
|
||||
$fk_sort_lower_case = function (string $a, string $b): int {
|
||||
return strtolower($a) <=> strtolower($b);
|
||||
};
|
||||
$fk_sort_lower_case_reverse = function (string $a, string $b): int {
|
||||
return strtolower($b) <=> strtolower($a);
|
||||
};
|
||||
$fk_sort = function (string $a, string $b): int {
|
||||
return $a <=> $b;
|
||||
};
|
||||
$fk_sort_reverse = function (string $a, string $b): int {
|
||||
return $b <=> $a;
|
||||
};
|
||||
uksort(
|
||||
$array,
|
||||
$case_insensitive ?
|
||||
($reverse ? $fk_sort_lower_case_reverse : $fk_sort_lower_case) :
|
||||
($reverse ? $fk_sort_reverse : $fk_sort)
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -23,14 +23,14 @@ class Encoding
|
||||
* @param bool $auto_check default true, if source encoding is set
|
||||
* check that the source is actually matching
|
||||
* to what we sav the source is
|
||||
* @return string encoding converted string
|
||||
* @return string|false encoding converted string or false on error
|
||||
*/
|
||||
public static function convertEncoding(
|
||||
string $string,
|
||||
string $to_encoding,
|
||||
string $source_encoding = '',
|
||||
bool $auto_check = true
|
||||
): string {
|
||||
): string|false {
|
||||
// set if not given
|
||||
if (!$source_encoding) {
|
||||
$source_encoding = mb_detect_encoding($string);
|
||||
|
||||
@@ -119,6 +119,23 @@ class Json
|
||||
}
|
||||
return $return_string === true ? $json_error_string : self::$json_last_error;
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper to call convert array to json with pretty print
|
||||
*
|
||||
* @param array<mixed> $data
|
||||
* @return string
|
||||
*/
|
||||
public static function jsonPrettyPrint(array $data): string
|
||||
{
|
||||
return self::jsonConvertArrayTo(
|
||||
$data,
|
||||
JSON_PRETTY_PRINT |
|
||||
JSON_UNESCAPED_LINE_TERMINATORS |
|
||||
JSON_UNESCAPED_SLASHES |
|
||||
JSON_UNESCAPED_UNICODE
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -8,8 +8,20 @@ declare(strict_types=1);
|
||||
|
||||
namespace CoreLibs\Convert;
|
||||
|
||||
use CoreLibs\Combined\ArrayHandler;
|
||||
|
||||
class Strings
|
||||
{
|
||||
/** @var array<int,string> all the preg error messages */
|
||||
public const array PREG_ERROR_MESSAGES = [
|
||||
PREG_NO_ERROR => 'No error',
|
||||
PREG_INTERNAL_ERROR => 'Internal PCRE error',
|
||||
PREG_BACKTRACK_LIMIT_ERROR => 'Backtrack limit exhausted',
|
||||
PREG_RECURSION_LIMIT_ERROR => 'Recursion limit exhausted',
|
||||
PREG_BAD_UTF8_ERROR => 'Malformed UTF-8 data',
|
||||
PREG_BAD_UTF8_OFFSET_ERROR => 'Bad UTF-8 offset',
|
||||
PREG_JIT_STACKLIMIT_ERROR => 'JIT stack limit exhausted'
|
||||
];
|
||||
/**
|
||||
* return the number of elements in the split list
|
||||
* 0 if nothing / invalid split
|
||||
@@ -52,29 +64,42 @@ class Strings
|
||||
* Note a string LONGER then the maxium will be attached with the LAST
|
||||
* split character. In above exmaple
|
||||
* ABCD1234EFGHTOOLONG will be ABCD-1234-EFGH-TOOLONG
|
||||
* If the characters are NOT ASCII it will return the string as is
|
||||
*
|
||||
* @param string $value string value to split
|
||||
* @param string $string string value to split
|
||||
* @param string $split_format split format
|
||||
* @param string $split_characters list of charcters with which we split
|
||||
* if not set uses dash ('-')
|
||||
* @return string split formatted string or original value if not chnaged
|
||||
* @throws \InvalidArgumentException for empty split format, invalid values, split characters or split format
|
||||
*/
|
||||
public static function splitFormatString(
|
||||
string $value,
|
||||
string $string,
|
||||
string $split_format,
|
||||
string $split_characters = '-'
|
||||
): string {
|
||||
if (
|
||||
// abort if split format is empty
|
||||
empty($split_format) ||
|
||||
// if not in the valid ASCII character range for any of the strings
|
||||
preg_match('/[^\x20-\x7e]/', $value) ||
|
||||
// preg_match('/[^\x20-\x7e]/', $split_format) ||
|
||||
preg_match('/[^\x20-\x7e]/', $split_characters) ||
|
||||
// only numbers and split characters in split_format
|
||||
!preg_match("/[0-9" . $split_characters . "]/", $split_format)
|
||||
) {
|
||||
return $value;
|
||||
// skip if string or split format is empty is empty
|
||||
if (empty($string) || empty($split_format)) {
|
||||
return $string;
|
||||
}
|
||||
if (preg_match('/[^\x20-\x7e]/', $string)) {
|
||||
throw new \InvalidArgumentException(
|
||||
"The string to split can only be ascii characters: " . $string
|
||||
);
|
||||
}
|
||||
// get the split characters that are not numerical and check they are ascii
|
||||
$split_characters = self::removeDuplicates(preg_replace('/[0-9]/', '', $split_format) ?: '');
|
||||
if (empty($split_characters)) {
|
||||
throw new \InvalidArgumentException(
|
||||
"A split character must exist in the format string: " . $split_format
|
||||
);
|
||||
}
|
||||
if (preg_match('/[^\x20-\x7e]/', $split_characters)) {
|
||||
throw new \InvalidArgumentException(
|
||||
"The split character has to be a valid ascii character: " . $split_characters
|
||||
);
|
||||
}
|
||||
if (!preg_match("/^[0-9" . $split_characters . "]+$/", $split_format)) {
|
||||
throw new \InvalidArgumentException(
|
||||
"The split format can only be numbers and the split characters: " . $split_format
|
||||
);
|
||||
}
|
||||
// split format list
|
||||
$split_list = preg_split(
|
||||
@@ -86,14 +111,14 @@ class Strings
|
||||
);
|
||||
// if this is false, or only one array, abort split
|
||||
if (!is_array($split_list) || count($split_list) == 1) {
|
||||
return $value;
|
||||
return $string;
|
||||
}
|
||||
$out = '';
|
||||
$pos = 0;
|
||||
$last_split = '';
|
||||
foreach ($split_list as $offset) {
|
||||
if (is_numeric($offset)) {
|
||||
$_part = substr($value, $pos, (int)$offset);
|
||||
$_part = substr($string, $pos, (int)$offset);
|
||||
if (empty($_part)) {
|
||||
break;
|
||||
}
|
||||
@@ -104,8 +129,8 @@ class Strings
|
||||
$last_split = $offset;
|
||||
}
|
||||
}
|
||||
if (!empty($out) && $pos < strlen($value)) {
|
||||
$out .= $last_split . substr($value, $pos);
|
||||
if (!empty($out) && $pos < strlen($string)) {
|
||||
$out .= $last_split . substr($string, $pos);
|
||||
}
|
||||
// if last is not alphanumeric remove, remove
|
||||
if (!strcspn(substr($out, -1, 1), $split_characters)) {
|
||||
@@ -115,10 +140,49 @@ class Strings
|
||||
if (!empty($out)) {
|
||||
return $out;
|
||||
} else {
|
||||
return $value;
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Split a string into n-length blocks with a split character inbetween
|
||||
* This is simplified version from splitFormatString that uses
|
||||
* fixed split length with a characters, this evenly splits the string out into the
|
||||
* given length
|
||||
* This works with non ASCII characters too
|
||||
*
|
||||
* @param string $string string to split
|
||||
* @param int $split_length split length, must be smaller than string and larger than 0
|
||||
* @param string $split_characters [default=-] the character to split, can be more than one
|
||||
* @return string
|
||||
* @throws \InvalidArgumentException Thrown if split length style is invalid
|
||||
*/
|
||||
public static function splitFormatStringFixed(
|
||||
string $string,
|
||||
int $split_length,
|
||||
string $split_characters = '-'
|
||||
): string {
|
||||
// if empty string or if split lenght is 0 or empty split characters
|
||||
// then we skip any splitting
|
||||
if (empty($string) || $split_length == 0 || empty($split_characters)) {
|
||||
return $string;
|
||||
}
|
||||
$return_string = '';
|
||||
$string_length = mb_strlen($string);
|
||||
// check that the length is not too short
|
||||
if ($split_length < 1 || $split_length >= $string_length) {
|
||||
throw new \InvalidArgumentException(
|
||||
"The split length must be at least 1 character and less than the string length to split. "
|
||||
. "Split length: " . $split_length . ", string length: " . $string_length
|
||||
);
|
||||
}
|
||||
for ($i = 0; $i < $string_length; $i += $split_length) {
|
||||
$return_string .= mb_substr($string, $i, $split_length) . $split_characters;
|
||||
}
|
||||
// remove last trailing character which is always the split char length
|
||||
return mb_substr($return_string, 0, -1 * mb_strlen($split_characters));
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip any duplicated slahes from a path
|
||||
* eg: //foo///bar/foo.inc -> /foo/bar/foo.inc
|
||||
@@ -146,6 +210,116 @@ class Strings
|
||||
{
|
||||
return trim($text, pack('H*', 'EFBBBF'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Make as string of characters unique
|
||||
*
|
||||
* @param string $string
|
||||
* @return string
|
||||
*/
|
||||
public static function removeDuplicates(string $string): string
|
||||
{
|
||||
// combine again
|
||||
$result = implode(
|
||||
'',
|
||||
// unique list
|
||||
array_unique(
|
||||
// split into array
|
||||
mb_str_split($string)
|
||||
)
|
||||
);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* check if all characters are in set
|
||||
*
|
||||
* @param string $needle Needle to search
|
||||
* @param string $haystack Haystack to search in
|
||||
* @return bool True on found, False if not in haystack
|
||||
*/
|
||||
public static function allCharsInSet(string $needle, string $haystack): bool
|
||||
{
|
||||
$input_length = strlen($needle);
|
||||
|
||||
for ($i = 0; $i < $input_length; $i++) {
|
||||
if (strpos($haystack, $needle[$i]) === false) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* converts a list of arrays of strings into a string of unique entries
|
||||
* input arrays can be nested, only values are used
|
||||
*
|
||||
* @param array<mixed> ...$char_lists
|
||||
* @return string
|
||||
*/
|
||||
public static function buildCharStringFromLists(array ...$char_lists): string
|
||||
{
|
||||
return implode('', array_unique(
|
||||
ArrayHandler::flattenArray(
|
||||
array_merge(...$char_lists)
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a regex is valid. Does not return the detail regex parser error
|
||||
*
|
||||
* @param string $pattern Any regex string
|
||||
* @return bool False on invalid regex
|
||||
*/
|
||||
public static function isValidRegex(string $pattern): bool
|
||||
{
|
||||
preg_last_error();
|
||||
try {
|
||||
$var = '';
|
||||
@preg_match($pattern, $var);
|
||||
return preg_last_error() === PREG_NO_ERROR;
|
||||
} catch (\Error $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the last preg error messages as string
|
||||
* all messages are defined in PREG_ERROR_MESSAGES
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getLastRegexErrorString(): string
|
||||
{
|
||||
return self::PREG_ERROR_MESSAGES[preg_last_error()] ?? 'Unknown error';
|
||||
}
|
||||
|
||||
/**
|
||||
* check if a regex is invalid, returns array with flag and error string
|
||||
*
|
||||
* @param string $pattern
|
||||
* @return array{valid:bool,preg_error:int,error:null|string,pcre_error:null|string}
|
||||
*/
|
||||
public static function validateRegex(string $pattern): array
|
||||
{
|
||||
// Clear any previous PCRE errors
|
||||
preg_last_error();
|
||||
$var = '';
|
||||
if (@preg_match($pattern, $var) === false) {
|
||||
$error = preg_last_error();
|
||||
return [
|
||||
'valid' => false,
|
||||
'preg_error' => $error,
|
||||
'error' => self::PREG_ERROR_MESSAGES[$error] ?? 'Unknown error',
|
||||
'pcre_error' => preg_last_error_msg(),
|
||||
];
|
||||
}
|
||||
|
||||
return ['valid' => true, 'preg_error' => PREG_NO_ERROR, 'error' => null, 'pcre_error' => null];
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -38,6 +38,7 @@ class Email
|
||||
* @param string $encoding Encoding, if not set UTF-8
|
||||
* @param bool $kv_folding If set to true and a valid encoding, do KV folding
|
||||
* @return string Correctly encoded and build email string
|
||||
* @throws \IntlException if email name cannot be converted to UTF-8
|
||||
*/
|
||||
public static function encodeEmailName(
|
||||
string $email,
|
||||
@@ -52,6 +53,10 @@ class Email
|
||||
if ($encoding != 'UTF-8') {
|
||||
$email_name = mb_convert_encoding($email_name, $encoding, 'UTF-8');
|
||||
}
|
||||
// if we cannot transcode the name, return just the email
|
||||
if ($email_name === false) {
|
||||
throw new \IntlException('Cannot convert email_name to UTF-8');
|
||||
}
|
||||
$email_name =
|
||||
mb_encode_mimeheader(
|
||||
in_array($encoding, self::$encoding_kv_allowed) && $kv_folding ?
|
||||
@@ -77,6 +82,8 @@ class Email
|
||||
* @param bool $kv_folding If set to true and a valid encoding,
|
||||
* do KV folding
|
||||
* @return array<string> Pos 0: Subject, Pos 1: Body
|
||||
* @throws \IntlException if subject cannot be converted to UTF-8
|
||||
* @throws \IntlException if body cannot be converted to UTF-8
|
||||
*/
|
||||
private static function replaceContent(
|
||||
string $subject,
|
||||
@@ -102,6 +109,12 @@ class Email
|
||||
$subject = mb_convert_encoding($subject, $encoding, 'UTF-8');
|
||||
$body = mb_convert_encoding($body, $encoding, 'UTF-8');
|
||||
}
|
||||
if ($subject === false) {
|
||||
throw new \IntlException('Cannot convert subject to UTF-8');
|
||||
}
|
||||
if ($body === false) {
|
||||
throw new \IntlException('Cannot convert body to UTF-8');
|
||||
}
|
||||
// we need to encodde the subject
|
||||
$subject = mb_encode_mimeheader(
|
||||
in_array($encoding, self::$encoding_kv_allowed) && $kv_folding ?
|
||||
|
||||
@@ -8,39 +8,97 @@ declare(strict_types=1);
|
||||
|
||||
namespace CoreLibs\Create;
|
||||
|
||||
use CoreLibs\Convert\Strings;
|
||||
|
||||
class RandomKey
|
||||
{
|
||||
/** @var int set the default key length it nothing else is set */
|
||||
public const int KEY_LENGTH_DEFAULT = 4;
|
||||
/** @var int the maximum key length allowed */
|
||||
public const int KEY_LENGTH_MAX = 256;
|
||||
/** @var string the default characters in the key range */
|
||||
public const string KEY_CHARACTER_RANGE_DEFAULT =
|
||||
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
. 'abcdefghijklmnopqrstuvwxyz'
|
||||
. '0123456789';
|
||||
// key generation
|
||||
/** @var string */
|
||||
private static string $key_range = '';
|
||||
/** @var int */
|
||||
private static int $one_key_length;
|
||||
/** @var int */
|
||||
private static int $key_length = 4; // default key length
|
||||
/** @var int */
|
||||
private static int $max_key_length = 256; // max allowed length
|
||||
/** @var string all the characters that are int he current radnom key range */
|
||||
private static string $key_character_range = '';
|
||||
/** @var int character count in they key character range */
|
||||
private static int $key_character_range_length = 0;
|
||||
/** @var int default key lenghth */
|
||||
/** @deprecated Will be removed */
|
||||
private static int $key_length = 4;
|
||||
|
||||
/**
|
||||
* if launched as class, init random key data first
|
||||
*
|
||||
* @param array<string> ...$key_range
|
||||
*/
|
||||
public function __construct()
|
||||
public function __construct(array ...$key_range)
|
||||
{
|
||||
$this->initRandomKeyData();
|
||||
$this->setRandomKeyData(...$key_range);
|
||||
}
|
||||
|
||||
/**
|
||||
* internal key range validation
|
||||
*
|
||||
* @param array<string> ...$key_range
|
||||
* @return string
|
||||
*/
|
||||
private static function validateRandomKeyData(array ...$key_range): string
|
||||
{
|
||||
$key_character_range = Strings::buildCharStringFromLists(...$key_range);
|
||||
if (strlen(self::$key_character_range) <= 1) {
|
||||
return '';
|
||||
}
|
||||
return $key_character_range;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the random key range with the default values
|
||||
*
|
||||
* @param array<string> $key_range a list of key ranges as array
|
||||
* @return void has no return
|
||||
* @throws \LengthException If the string length is only 1 abort
|
||||
*/
|
||||
private static function initRandomKeyData(): void
|
||||
public static function setRandomKeyData(array ...$key_range): void
|
||||
{
|
||||
// random key generation base string
|
||||
self::$key_range = join('', array_merge(
|
||||
range('A', 'Z'),
|
||||
range('a', 'z'),
|
||||
range('0', '9')
|
||||
));
|
||||
self::$one_key_length = strlen(self::$key_range);
|
||||
// if key range is not set
|
||||
if (!count($key_range)) {
|
||||
self::$key_character_range = self::KEY_CHARACTER_RANGE_DEFAULT;
|
||||
} else {
|
||||
self::$key_character_range = self::validateRandomKeyData(...$key_range);
|
||||
// random key generation base string
|
||||
}
|
||||
self::$key_character_range_length = strlen(self::$key_character_range);
|
||||
if (self::$key_character_range_length <= 1) {
|
||||
throw new \LengthException(
|
||||
"The given key character range '" . self::$key_character_range . "' "
|
||||
. "is too small, must be at lest two characters: "
|
||||
. self::$key_character_range_length
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get the characters for the current key characters
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function getRandomKeyData(): string
|
||||
{
|
||||
return self::$key_character_range;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the length of all random characters
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public static function getRandomKeyDataLength(): int
|
||||
{
|
||||
return self::$key_character_range_length;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -53,7 +111,7 @@ class RandomKey
|
||||
{
|
||||
if (
|
||||
$key_length > 0 &&
|
||||
$key_length <= self::$max_key_length
|
||||
$key_length <= self::KEY_LENGTH_MAX
|
||||
) {
|
||||
return true;
|
||||
} else {
|
||||
@@ -67,6 +125,7 @@ class RandomKey
|
||||
*
|
||||
* @param int $key_length key length
|
||||
* @return bool true/false for set status
|
||||
* @deprecated This function does no longer set the key length, the randomKeyGen parameter has to b used
|
||||
*/
|
||||
public static function setRandomKeyLength(int $key_length): bool
|
||||
{
|
||||
@@ -83,6 +142,7 @@ class RandomKey
|
||||
* get the current set random key length
|
||||
*
|
||||
* @return int Current set key length
|
||||
* @deprecated Key length is set during randomKeyGen call, this nethid is deprecated
|
||||
*/
|
||||
public static function getRandomKeyLength(): int
|
||||
{
|
||||
@@ -94,28 +154,37 @@ class RandomKey
|
||||
* if override key length is set, it will check on valid key and use this
|
||||
* this will not set the class key length variable
|
||||
*
|
||||
* @param int $key_length key length override, -1 for use default
|
||||
* @return string random key
|
||||
* @param int $key_length [default=-1] key length override,
|
||||
* if not set use default [LEGACY]
|
||||
* @param array<string> $key_range a list of key ranges as array,
|
||||
* if not set use previous set data
|
||||
* @return string random key
|
||||
*/
|
||||
public static function randomKeyGen(int $key_length = -1): string
|
||||
{
|
||||
// init random key strings if not set
|
||||
if (
|
||||
!isset(self::$one_key_length)
|
||||
) {
|
||||
self::initRandomKeyData();
|
||||
}
|
||||
$use_key_length = 0;
|
||||
// only if valid int key with valid length
|
||||
if (self::validateRandomKeyLenght($key_length) === true) {
|
||||
$use_key_length = $key_length;
|
||||
public static function randomKeyGen(
|
||||
int $key_length = self::KEY_LENGTH_DEFAULT,
|
||||
array ...$key_range
|
||||
): string {
|
||||
$key_character_range = '';
|
||||
if (count($key_range)) {
|
||||
$key_character_range = self::validateRandomKeyData(...$key_range);
|
||||
$key_character_range_length = strlen($key_character_range);
|
||||
} else {
|
||||
$use_key_length = self::$key_length;
|
||||
if (!self::$key_character_range_length) {
|
||||
self::setRandomKeyData();
|
||||
}
|
||||
$key_character_range = self::getRandomKeyData();
|
||||
$key_character_range_length = self::getRandomKeyDataLength();
|
||||
}
|
||||
// if not valid key length, fallback to default
|
||||
if (!self::validateRandomKeyLenght($key_length)) {
|
||||
$key_length = self::KEY_LENGTH_DEFAULT;
|
||||
}
|
||||
// create random string
|
||||
$random_string = '';
|
||||
for ($i = 1; $i <= $use_key_length; $i++) {
|
||||
$random_string .= self::$key_range[random_int(0, self::$one_key_length - 1)];
|
||||
for ($i = 1; $i <= $key_length; $i++) {
|
||||
$random_string .= $key_character_range[
|
||||
random_int(0, $key_character_range_length - 1)
|
||||
];
|
||||
}
|
||||
return $random_string;
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ class Logging
|
||||
/** @var string log file block separator, not changeable */
|
||||
private const LOG_FILE_BLOCK_SEPARATOR = '.';
|
||||
|
||||
// MARK: OPTION array
|
||||
// NOTE: the second party array{} hs some errors
|
||||
/** @var array<string,array<string,string|bool|Level>>|array{string:array{type:string,type_info?:string,mandatory:true,alias?:string,default:string|bool|Level,deprecated:bool,use?:string}} */
|
||||
private const OPTIONS = [
|
||||
@@ -50,6 +51,7 @@ class Logging
|
||||
'type' => 'string', 'mandatory' => false,
|
||||
'default' => '', 'deprecated' => true, 'use' => 'log_file_id'
|
||||
],
|
||||
// log level
|
||||
'log_level' => [
|
||||
'type' => 'instance',
|
||||
'type_info' => '\CoreLibs\Logging\Logger\Level',
|
||||
@@ -57,6 +59,14 @@ class Logging
|
||||
'default' => Level::Debug,
|
||||
'deprecated' => false
|
||||
],
|
||||
// level to trigger write to error_log
|
||||
'error_log_write_level' => [
|
||||
'type' => 'instance',
|
||||
'type_info' => '\CoreLibs\Logging\Logger\Level',
|
||||
'mandatory' => false,
|
||||
'default' => Level::Emergency,
|
||||
'deprecated' => false,
|
||||
],
|
||||
// options
|
||||
'log_per_run' => [
|
||||
'type' => 'bool', 'mandatory' => false,
|
||||
@@ -92,8 +102,10 @@ class Logging
|
||||
/** @var array<mixed> */
|
||||
private array $options = [];
|
||||
|
||||
/** @var Level set level */
|
||||
/** @var Level set logging level */
|
||||
private Level $log_level;
|
||||
/** @var Level set level for writing to error_log, will not write if log level lower than error log write level */
|
||||
private Level $error_log_write_level;
|
||||
|
||||
// page and host name
|
||||
/** @var string */
|
||||
@@ -145,12 +157,13 @@ class Logging
|
||||
];
|
||||
|
||||
/**
|
||||
* Init logger
|
||||
* MARK: Init logger
|
||||
*
|
||||
* options array layout
|
||||
* - log_folder:
|
||||
* - log_file_id / file_id (will be deprecated):
|
||||
* - log_level:
|
||||
* - error_log_write_level: at what level we write to error_log
|
||||
*
|
||||
* - log_per_run:
|
||||
* - log_per_date: (was print_file_date)
|
||||
@@ -172,6 +185,8 @@ class Logging
|
||||
|
||||
// set log level
|
||||
$this->initLogLevel();
|
||||
// set error log write level
|
||||
$this->initErrorLogWriteLevel();
|
||||
// set log folder from options
|
||||
$this->initLogFolder();
|
||||
// set per run UID for logging
|
||||
@@ -190,8 +205,10 @@ class Logging
|
||||
// PRIVATE METHODS
|
||||
// *********************************************************************
|
||||
|
||||
// MARK: options check
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
* validate options
|
||||
*
|
||||
* @param array<mixed> $options
|
||||
* @return bool
|
||||
@@ -263,6 +280,8 @@ class Logging
|
||||
return true;
|
||||
}
|
||||
|
||||
// MARK: init log elvels
|
||||
|
||||
/**
|
||||
* init log level, just a wrapper to auto set from options
|
||||
*
|
||||
@@ -280,6 +299,24 @@ class Logging
|
||||
$this->setLoggingLevel($this->options['log_level']);
|
||||
}
|
||||
|
||||
/**
|
||||
* init error log write level
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function initErrorLogWriteLevel()
|
||||
{
|
||||
if (
|
||||
empty($this->options['error_log_write_level']) ||
|
||||
!$this->options['error_log_write_level'] instanceof Level
|
||||
) {
|
||||
$this->options['error_log_write_level'] = Level::Emergency;
|
||||
}
|
||||
$this->setErrorLogWriteLevel($this->options['error_log_write_level']);
|
||||
}
|
||||
|
||||
// MARK: set log folder
|
||||
|
||||
/**
|
||||
* Set the log folder
|
||||
* If folder is not writeable the script will throw an E_USER_ERROR
|
||||
@@ -321,6 +358,8 @@ class Logging
|
||||
return $status;
|
||||
}
|
||||
|
||||
// MARK: set host name
|
||||
|
||||
/**
|
||||
* Set the hostname and port
|
||||
* If port is not defaul 80 it will be added to the host name
|
||||
@@ -337,6 +376,8 @@ class Logging
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: set log file id (file)
|
||||
|
||||
/**
|
||||
* set log file prefix id
|
||||
*
|
||||
@@ -395,6 +436,8 @@ class Logging
|
||||
return $status;
|
||||
}
|
||||
|
||||
// MARK init log flags and levels
|
||||
|
||||
/**
|
||||
* set flags from options and option flags connection internal settings
|
||||
*
|
||||
@@ -423,6 +466,19 @@ class Logging
|
||||
return $this->log_level->includes($level);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that given level is matchins error_log write level
|
||||
*
|
||||
* @param Level $level
|
||||
* @return bool
|
||||
*/
|
||||
private function checkErrorLogWriteLevel(Level $level): bool
|
||||
{
|
||||
return $this->error_log_write_level->includes($level);
|
||||
}
|
||||
|
||||
// MARK: build log ifle name
|
||||
|
||||
/**
|
||||
* Build the file name for writing
|
||||
*
|
||||
@@ -490,6 +546,8 @@ class Logging
|
||||
return $fn;
|
||||
}
|
||||
|
||||
// MARK: master write log to file
|
||||
|
||||
/**
|
||||
* writes error msg data to file for current level
|
||||
*
|
||||
@@ -507,6 +565,10 @@ class Logging
|
||||
if (!$this->checkLogLevel($level)) {
|
||||
return false;
|
||||
}
|
||||
// if we match level then write to error_log
|
||||
if ($this->checkErrorLogWriteLevel($level)) {
|
||||
error_log((string)$message);
|
||||
}
|
||||
|
||||
// build logging file name
|
||||
// fn is log folder + file name
|
||||
@@ -531,6 +593,8 @@ class Logging
|
||||
return true;
|
||||
}
|
||||
|
||||
// MARK: master prepare log
|
||||
|
||||
/**
|
||||
* Prepare the log message with all needed info blocks:
|
||||
* [timestamp] [host name] [file path + file::row number] [running uid] {class::/->method}
|
||||
@@ -610,6 +674,7 @@ class Logging
|
||||
// PUBLIC STATIC METHJODS
|
||||
// *********************************************************************
|
||||
|
||||
// MARK: set log level
|
||||
/**
|
||||
* set the log level
|
||||
*
|
||||
@@ -670,7 +735,7 @@ class Logging
|
||||
|
||||
// **** GET/SETTER
|
||||
|
||||
// log level set and get
|
||||
// MARK: log level
|
||||
|
||||
/**
|
||||
* set new log level
|
||||
@@ -705,7 +770,30 @@ class Logging
|
||||
);
|
||||
}
|
||||
|
||||
// log file id set (file name prefix)
|
||||
// MARK: error log write level
|
||||
|
||||
/**
|
||||
* set the error_log write level
|
||||
*
|
||||
* @param string|int|Level $level
|
||||
* @return void
|
||||
*/
|
||||
public function setErrorLogWriteLevel(string|int|Level $level): void
|
||||
{
|
||||
$this->error_log_write_level = $this->processLogLevel($level);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the current level for error_log write
|
||||
*
|
||||
* @return Level
|
||||
*/
|
||||
public function getErrorLogWriteLevel(): Level
|
||||
{
|
||||
return $this->error_log_write_level;
|
||||
}
|
||||
|
||||
// MARK: log file id set (file name prefix)
|
||||
|
||||
/**
|
||||
* sets the internal log file prefix id
|
||||
@@ -733,7 +821,7 @@ class Logging
|
||||
return $this->log_file_id;
|
||||
}
|
||||
|
||||
// log unique id set (for per run)
|
||||
// MARK: log unique id set (for per run)
|
||||
|
||||
/**
|
||||
* Sets a unique id based on current date (y/m/d, h:i:s) and a unique id (8 chars)
|
||||
@@ -768,7 +856,7 @@ class Logging
|
||||
return $this->log_file_unique_id;
|
||||
}
|
||||
|
||||
// general log date
|
||||
// MARK: general log date
|
||||
|
||||
/**
|
||||
* set the log file date to Y-m-d
|
||||
@@ -791,7 +879,7 @@ class Logging
|
||||
return $this->log_file_date;
|
||||
}
|
||||
|
||||
// general flag set
|
||||
// MARK: general flag set
|
||||
|
||||
/**
|
||||
* set one of the basic flags
|
||||
@@ -846,7 +934,7 @@ class Logging
|
||||
return $this->log_flags;
|
||||
}
|
||||
|
||||
// log folder/file
|
||||
// MARK: log folder/file
|
||||
|
||||
/**
|
||||
* set new log folder, check that folder is writeable
|
||||
@@ -890,7 +978,7 @@ class Logging
|
||||
return $this->log_file_name;
|
||||
}
|
||||
|
||||
// max log file size
|
||||
// MARK: max log file size
|
||||
|
||||
/**
|
||||
* set mag log file size
|
||||
@@ -921,7 +1009,7 @@ class Logging
|
||||
}
|
||||
|
||||
// *********************************************************************
|
||||
// OPTIONS CALLS
|
||||
// MARK: OPTIONS CALLS
|
||||
// *********************************************************************
|
||||
|
||||
/**
|
||||
@@ -939,6 +1027,8 @@ class Logging
|
||||
// MAIN CALLS
|
||||
// *********************************************************************
|
||||
|
||||
// MARK: main log call
|
||||
|
||||
/**
|
||||
* Commong log interface
|
||||
*
|
||||
@@ -976,7 +1066,7 @@ class Logging
|
||||
}
|
||||
|
||||
/**
|
||||
* DEBUG: 100
|
||||
* MARK: DEBUG: 100
|
||||
*
|
||||
* write debug data to error_msg array
|
||||
*
|
||||
@@ -1008,7 +1098,7 @@ class Logging
|
||||
}
|
||||
|
||||
/**
|
||||
* INFO: 200
|
||||
* MARK: INFO: 200
|
||||
*
|
||||
* @param string|Stringable $message
|
||||
* @param mixed[] $context
|
||||
@@ -1027,7 +1117,7 @@ class Logging
|
||||
}
|
||||
|
||||
/**
|
||||
* NOTICE: 250
|
||||
* MARK: NOTICE: 250
|
||||
*
|
||||
* @param string|Stringable $message
|
||||
* @param mixed[] $context
|
||||
@@ -1046,7 +1136,7 @@ class Logging
|
||||
}
|
||||
|
||||
/**
|
||||
* WARNING: 300
|
||||
* MARK: WARNING: 300
|
||||
*
|
||||
* @param string|Stringable $message
|
||||
* @param mixed[] $context
|
||||
@@ -1065,7 +1155,7 @@ class Logging
|
||||
}
|
||||
|
||||
/**
|
||||
* ERROR: 400
|
||||
* MARK: ERROR: 400
|
||||
*
|
||||
* @param string|Stringable $message
|
||||
* @param mixed[] $context
|
||||
@@ -1084,7 +1174,7 @@ class Logging
|
||||
}
|
||||
|
||||
/**
|
||||
* CTRITICAL: 500
|
||||
* MARK: CTRITICAL: 500
|
||||
*
|
||||
* @param string|Stringable $message
|
||||
* @param mixed[] $context
|
||||
@@ -1103,7 +1193,7 @@ class Logging
|
||||
}
|
||||
|
||||
/**
|
||||
* ALERT: 550
|
||||
* MARK: ALERT: 550
|
||||
*
|
||||
* @param string|Stringable $message
|
||||
* @param mixed[] $context
|
||||
@@ -1122,7 +1212,7 @@ class Logging
|
||||
}
|
||||
|
||||
/**
|
||||
* EMERGENCY: 600
|
||||
* MARK: EMERGENCY: 600
|
||||
*
|
||||
* @param string|Stringable $message
|
||||
* @param mixed[] $context
|
||||
@@ -1141,7 +1231,7 @@ class Logging
|
||||
}
|
||||
|
||||
// *********************************************************************
|
||||
// DEPRECATED SUPPORT CALLS
|
||||
// MARK: DEPRECATED SUPPORT CALLS
|
||||
// *********************************************************************
|
||||
|
||||
// legacy, but there are too many implemented
|
||||
@@ -1199,7 +1289,7 @@ class Logging
|
||||
}
|
||||
|
||||
// *********************************************************************
|
||||
// DEPRECATED METHODS
|
||||
// MARK: DEPRECATED METHODS
|
||||
// *********************************************************************
|
||||
|
||||
/**
|
||||
@@ -1365,7 +1455,7 @@ class Logging
|
||||
}
|
||||
|
||||
// *********************************************************************
|
||||
// DEBUG METHODS
|
||||
// MARK: DEBUG METHODS
|
||||
// *********************************************************************
|
||||
|
||||
/**
|
||||
@@ -1398,6 +1488,7 @@ class Logging
|
||||
}
|
||||
// back to options level
|
||||
$this->initLogLevel();
|
||||
$this->initErrorLogWriteLevel();
|
||||
print "OPT set level: " . $this->getLoggingLevel()->getName() . "<br>";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -599,7 +599,7 @@ class Curl implements Interface\RequestsInterface
|
||||
// for post we set POST option
|
||||
if ($type == "post") {
|
||||
curl_setopt($handle, CURLOPT_POST, true);
|
||||
} elseif (!empty($type) && in_array($type, self::CUSTOM_REQUESTS)) {
|
||||
} elseif (in_array($type, self::CUSTOM_REQUESTS)) {
|
||||
curl_setopt($handle, CURLOPT_CUSTOMREQUEST, strtoupper($type));
|
||||
}
|
||||
// set body data if not null, will send empty [] for empty data
|
||||
|
||||
Reference in New Issue
Block a user