Compare commits

..

4 Commits

Author SHA1 Message Date
Clemens Schwaighofer
cf1989819a phpstan fixes 2025-04-01 11:22:59 +09:00
Clemens Schwaighofer
b302fb4053 Add CombinedDateTime class calcDaysInteral wrapper functions
calcDaysIntervalNamedIndex for force using named index and returning only named index
calcDaysIntervalNumIndex for force using numeric index and returning only numeric index
2025-04-01 11:15:00 +09:00
Clemens Schwaighofer
32decdd037 Readme update 2025-03-28 10:58:07 +09:00
Clemens Schwaighofer
46cda40d37 JavaScript general utils file updates 2025-03-28 10:53:42 +09:00
10 changed files with 132 additions and 62 deletions

View File

@@ -1068,8 +1068,32 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
return_named:$return_named, return_named:$return_named,
include_end_date:$include_end_date, include_end_date:$include_end_date,
exclude_start_date:$exclude_start_date exclude_start_date:$exclude_start_date
) ),
'call calcDaysInterval'
); );
if ($return_named) {
$this->assertEquals(
$expected,
\CoreLibs\Combined\DateTime::calcDaysIntervalNamedIndex(
$input_a,
$input_b,
include_end_date:$include_end_date,
exclude_start_date:$exclude_start_date
),
'call calcDaysIntervalNamedIndex'
);
} else {
$this->assertEquals(
$expected,
\CoreLibs\Combined\DateTime::calcDaysIntervalNumIndex(
$input_a,
$input_b,
include_end_date:$include_end_date,
exclude_start_date:$exclude_start_date
),
'call calcDaysIntervalNamedIndex'
);
}
} }
/** /**

View File

@@ -114,3 +114,11 @@ Add `.libs` to the master .gitingore
### Update phpunit ### Update phpunit
On a version update the old phpunit folder in .libs has to be removed and the new version extracted again On a version update the old phpunit folder in .libs has to be removed and the new version extracted again
## Javascript
The original edit.js javascript functions are now in utils.js or utils.min.js.
The development for thos files is located in a different repository
https://[service]/CodeBlocks/javascript-utils

View File

@@ -473,7 +473,10 @@ function intervalStringFormatDeprecated(
// print "-> V: $value | $part, $time_name | I: " . is_int($value) . " | F: " . is_float($value) // print "-> V: $value | $part, $time_name | I: " . is_int($value) . " | F: " . is_float($value)
// . " | " . ($value != 0 ? 'Not zero' : 'ZERO') . "<br>"; // . " | " . ($value != 0 ? 'Not zero' : 'ZERO') . "<br>";
// var_dump($skip_last_zero); // var_dump($skip_last_zero);
if ($value != 0 || $skip_zero === false || $skip_last_zero === false) { if (
is_numeric($value) &&
($value != 0 || $skip_zero === false || $skip_last_zero === false)
) {
if ($part == 'f') { if ($part == 'f') {
if ($truncate_nanoseconds === true) { if ($truncate_nanoseconds === true) {
$value = round($value, 3); $value = round($value, 3);

View File

@@ -76,41 +76,41 @@ $db->dbResetEncoding();
// empty calls, none of the below should fail // empty calls, none of the below should fail
// //
$db->dbGetCursor(); $foo = $db->dbGetCursor();
// //
$db->dbGetCursorExt(); $foo = $db->dbGetCursorExt();
// //
$db->dbGetCursorPos('SELECT foo', ['bar']); $foo = $db->dbGetCursorPos('SELECT foo', ['bar']);
// //
$db->dbGetCursorNumRows('SELECT foo', ['bar']); $foo = $db->dbGetCursorNumRows('SELECT foo', ['bar']);
// //
$db->dbGetInsertPKName(); $foo = $db->dbGetInsertPKName();
// //
$db->dbGetInsertPK(); $foo = $db->dbGetInsertPK();
// //
$db->dbGetReturningExt(); $foo = $db->dbGetReturningExt();
$db->dbGetReturningExt('foo'); $foo = $db->dbGetReturningExt('foo');
$db->dbGetReturningExt('foo', 0); $foo = $db->dbGetReturningExt('foo', 0);
$db->dbGetReturningExt(pos:0); $foo = $db->dbGetReturningExt(pos:0);
// //
$db->dbGetReturningArray(); $foo = $db->dbGetReturningArray();
// //
$db->dbGetNumRows(); $foo = $db->dbGetNumRows();
// //
$db->dbGetNumFields(); $foo = $db->dbGetNumFields();
// //
$db->dbGetFieldNames(); $foo = $db->dbGetFieldNames();
// //
$db->dbGetFieldTypes(); $foo = $db->dbGetFieldTypes();
// //
$db->dbGetFieldNameTypes(); $foo = $db->dbGetFieldNameTypes();
// //
$db->dbGetFieldName(0); $foo = $db->dbGetFieldName(0);
// //
$db->dbGetFieldType(0); $foo = $db->dbGetFieldType(0);
$db->dbGetFieldType('foo'); $foo = $db->dbGetFieldType('foo');
// //
$db->dbGetPrepareCursorValue('foo', 'bar'); $foo = $db->dbGetPrepareCursorValue('foo', 'bar');
// TEST CACHE READS // TEST CACHE READS

View File

@@ -86,8 +86,10 @@ if (!isset($_SESSION['counter'])) {
$_SESSION['counter']++; $_SESSION['counter']++;
print "[READ] A " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>"; print "[READ] A " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
$_SESSION[$var] = $value; $_SESSION[$var] = $value;
/** @phpstan-ignore-next-line nullCoalesce.offset */
print "[READ] B " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>"; print "[READ] B " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
print "[READ] Confirm " . $var . " is " . $value . ": " print "[READ] Confirm " . $var . " is " . $value . ": "
/** @phpstan-ignore-next-line equal.alwaysTrue, nullCoalesce.offset */
. (($_SESSION[$var] ?? '') == $value ? 'Matching' : 'Not matching') . "<br>"; . (($_SESSION[$var] ?? '') == $value ? 'Matching' : 'Not matching') . "<br>";
// test set wrappers methods // test set wrappers methods

View File

@@ -127,8 +127,8 @@ var HtmlElementCreator = class {
return { return {
tag, tag,
id, id,
// override name if set, else id is used. Only for input/button
name: options.name, name: options.name,
// override name if set [name gets ignored in tree build anyway]
content, content,
css, css,
options, options,
@@ -230,6 +230,7 @@ var HtmlElementCreator = class {
scssel(_element, rcss, acss) { scssel(_element, rcss, acss) {
this.rcssel(_element, rcss); this.rcssel(_element, rcss);
this.acssel(_element, acss); this.acssel(_element, acss);
return _element;
} }
/** /**
* parses the object tree created with cel/ael and converts it into an HTML string * parses the object tree created with cel/ael and converts it into an HTML string
@@ -585,6 +586,9 @@ function formatBytes(bytes) {
if (typeof bytes === "bigint") { if (typeof bytes === "bigint") {
bytes = Number(bytes); bytes = Number(bytes);
} }
if (isNaN(bytes)) {
return bytes.toString();
}
do { do {
bytes = bytes / 1024; bytes = bytes / 1024;
i++; i++;
@@ -628,37 +632,8 @@ function stringByteFormat(bytes, raw = false) {
} }
// src/utils/UrlParser.mjs // src/utils/UrlParser.mjs
function parseQueryString(query = "", return_key = "") { function parseQueryString(query = "", return_key = "", single = false) {
if (!query) { return getQueryStringParam(return_key, query, single);
query = window.location.search.substring(1);
}
var vars = query.split("&");
var query_string = {};
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
var key = decodeURIComponent(pair[0]);
var value = decodeURIComponent(pair[1]);
if (!key || value === "undefined") {
continue;
}
if (typeof query_string[key] === "undefined") {
query_string[key] = decodeURIComponent(value);
} else if (typeof query_string[key] === "string") {
var arr = [query_string[key], decodeURIComponent(value)];
query_string[key] = arr;
} else {
query_string[key].push(decodeURIComponent(value));
}
}
if (return_key) {
if (keyInObject(return_key, query_string)) {
return query_string[return_key];
} else {
return "";
}
} else {
return query_string;
}
} }
function getQueryStringParam(search = "", query = "", single = false) { function getQueryStringParam(search = "", query = "", single = false) {
if (!query) { if (!query) {
@@ -1357,7 +1332,7 @@ function roundPrecision2(number, prec) {
return roundPrecision(number, prec); return roundPrecision(number, prec);
} }
function formatString2(string, ...args) { function formatString2(string, ...args) {
return formatString(string, args); return formatString(string, ...args);
} }
function unescapeHtml2(string) { function unescapeHtml2(string) {
return unescapeHtml(string); return unescapeHtml(string);
@@ -1501,7 +1476,7 @@ function ael(base, attach, id = "") {
return hec.ael(base, attach, id); return hec.ael(base, attach, id);
} }
function aelx(base, ...attach) { function aelx(base, ...attach) {
return hec.aelx(base, attach); return hec.aelx(base, ...attach);
} }
function aelxar(base, attach) { function aelxar(base, attach) {
return hec.aelxar(base, attach); return hec.aelxar(base, attach);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -714,6 +714,66 @@ class DateTime
} }
} }
/**
* wrapper for calcDaysInterval with numeric return only
*
* @param string $start_date valid start date (y/m/d)
* @param string $end_date valid end date (y/m/d)
* @param bool $include_end_date [default=true] include end date in calc
* @param bool $exclude_start_date [default=false] include end date in calc
* @return array{0:int,1:int,2:int,3:bool}
*/
public static function calcDaysIntervalNumIndex(
string $start_date,
string $end_date,
bool $include_end_date = true,
bool $exclude_start_date = false
): array {
$values = self::calcDaysInterval(
$start_date,
$end_date,
false,
$include_end_date,
$exclude_start_date
);
return [
$values[0] ?? 0,
$values[1] ?? 0,
$values[2] ?? 0,
$values[3] ?? false,
];
}
/**
* wrapper for calcDaysInterval with named return only
*
* @param string $start_date valid start date (y/m/d)
* @param string $end_date valid end date (y/m/d)
* @param bool $include_end_date [default=true] include end date in calc
* @param bool $exclude_start_date [default=false] include end date in calc
* @return array{overall:int,weekday:int,weekend:int,reverse:bool}
*/
public static function calcDaysIntervalNamedIndex(
string $start_date,
string $end_date,
bool $include_end_date = true,
bool $exclude_start_date = false
): array {
$values = self::calcDaysInterval(
$start_date,
$end_date,
true,
$include_end_date,
$exclude_start_date
);
return [
'overall' => $values['overall'] ?? 0,
'weekday' => $values['weekday'] ?? 0,
'weekend' => $values['weekend'] ?? 0,
'reverse' => $values['reverse'] ?? false,
];
}
/** /**
* check if a weekend day (sat/sun) is in the given date range * check if a weekend day (sat/sun) is in the given date range
* Can have time too, but is not needed * Can have time too, but is not needed

View File

@@ -418,9 +418,7 @@ class ProgressBar
// if this is percent, we ignore anything, it is auto positioned // if this is percent, we ignore anything, it is auto positioned
if ($this->label[$name]['type'] != 'percent') { if ($this->label[$name]['type'] != 'percent') {
foreach (['top', 'left', 'width', 'height'] as $pos_name) { foreach (['top', 'left', 'width', 'height'] as $pos_name) {
if ($$pos_name !== false) { $this->label[$name][$pos_name] = intval($$pos_name);
$this->label[$name][$pos_name] = intval($$pos_name);
}
} }
if ($align != '') { if ($align != '') {