Compare commits
4 Commits
e71df90144
...
v9.28.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf1989819a | ||
|
|
b302fb4053 | ||
|
|
32decdd037 | ||
|
|
46cda40d37 |
@@ -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'
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
2
www/admin/layout/javascript/utils.min.js
vendored
2
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
@@ -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
|
||||||
|
|||||||
@@ -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 != '') {
|
||||||
|
|||||||
Reference in New Issue
Block a user