Compare commits

..
2 Commits
Author SHA1 Message Date
Clemens Schwaighofer 71e34848d9 Merge branch 'development' into feature/TTD-2662/function-add-to-ArrayCombined 2026-04-17 18:57:59 +09:00
Clemens Schwaighofer f275180571 Add bew array handler functions for various array interfaces
get random entry, remove array entry by value, add string to each entry in array, create sort by array key
2026-03-25 18:51:28 +09:00
29 changed files with 226 additions and 244 deletions

No files matched your search

+1 -1
View File
@@ -3,7 +3,7 @@ node_modules/
**/composer.lock **/composer.lock
**/vendor/ **/vendor/
tools/ tools/
**/configs/.env **/.env
**/.target **/.target
package-lock.json package-lock.json
build/ build/
+4 -4
View File
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<phive xmlns="https://phar.io/phive"> <phive xmlns="https://phar.io/phive">
<phar name="phpunit" version="~9.6" installed="9.6.34" location="./tools/phpunit" copy="false"/> <phar name="phpunit" version="~9.6" installed="9.6.31" location="./tools/phpunit" copy="false"/>
<phar name="phpcbf" version="4" installed="4.0.1" location="./tools/phpcbf" copy="false"/> <phar name="phpcbf" version="4" installed="4.0.1" location="./tools/phpcbf" copy="false"/>
<phar name="phpcs" version="4" installed="4.0.1" location="./tools/phpcs" copy="false"/> <phar name="phpcs" version="4" installed="4.0.1" location="./tools/phpcs" copy="false"/>
<phar name="phpstan" version="^2.0" installed="2.2.2" location="./tools/phpstan" copy="false"/> <phar name="phpstan" version="^2.0" installed="2.1.33" location="./tools/phpstan" copy="false"/>
<phar name="phan" version="^5.4.3" installed="5.5.2" location="./tools/phan" copy="false"/> <phar name="phan" version="^5.4.3" installed="5.5.2" location="./tools/phan" copy="false"/>
<phar name="psalm" version="^5.26.1" installed="5.26.1" location="./tools/psalm" copy="false"/> <phar name="psalm" version="^5.26.1" installed="5.26.1" location="./tools/psalm" copy="false"/>
<phar name="phpdox" version="^0.12.0" installed="0.12.0" location="./tools/phpdox" copy="false"/> <phar name="phpdox" version="^0.12.0" installed="0.12.0" location="./tools/phpdox" copy="false"/>
<phar name="phpdocumentor" version="^3.4.2" installed="3.10.0" location="./tools/phpDocumentor" copy="false"/> <phar name="phpdocumentor" version="^3.4.2" installed="3.9.1" location="./tools/phpDocumentor" copy="false"/>
<phar name="php-cs-fixer" version="^3.34.1" installed="3.95.10" location="./tools/php-cs-fixer" copy="false"/> <phar name="php-cs-fixer" version="^3.34.1" installed="3.92.4" location="./tools/php-cs-fixer" copy="false"/>
</phive> </phive>
+3 -3
View File
@@ -8,11 +8,11 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: en.UTF-8 LC_MESSAGES admin\n" "Project-Id-Version: en.UTF-8 LC_MESSAGES admin\n"
"Report-Msgid-Bugs-To: webmaster+corelibs-translation@ocex.jp\n" "Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
"POT-Creation-Date: 2018-03-28 10:40+0900\n" "POT-Creation-Date: 2018-03-28 10:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: clemens.schwaighofer@omc.com\n" "Last-Translator: clemens.schwaighofer@egplusww.co\n"
"Language-Team: Omnicom Content Experiences Japan <webmaster@ocex.jp>\n" "Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
"Language: en\n" "Language: en\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
+3 -3
View File
@@ -8,11 +8,11 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: en.UTF-8 LC_MESSAGES frontend\n" "Project-Id-Version: en.UTF-8 LC_MESSAGES frontend\n"
"Report-Msgid-Bugs-To: webmaster+corelibs-translation@ocex.jp\n" "Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
"POT-Creation-Date: 2018-03-28 10:40+0900\n" "POT-Creation-Date: 2018-03-28 10:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: clemens.schwaighofer@omc.com\n" "Last-Translator: clemens.schwaighofer@egplusww.co\n"
"Language-Team: Omnicom Content Experiences Japan <webmaster@ocex.jp>\n" "Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
"Language: en\n" "Language: en\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
+3 -3
View File
@@ -8,11 +8,11 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: ja.UTF-8 LC_MESSAGES admin\n" "Project-Id-Version: ja.UTF-8 LC_MESSAGES admin\n"
"Report-Msgid-Bugs-To: webmaster+corelibs-translation@ocex.jp\n" "Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
"POT-Creation-Date: 2018-03-28 10:40+0900\n" "POT-Creation-Date: 2018-03-28 10:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: clemens.schwaighofer@omc.com\n" "Last-Translator: clemens.schwaighofer@egplusww.com\n"
"Language-Team: Omnicom Content Experiences Japan <webmaster@ocex.jp>\n" "Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
"Language: ja\n" "Language: ja\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
+3 -3
View File
@@ -8,11 +8,11 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: ja.UTF-8 LC_MESSAGES frontend\n" "Project-Id-Version: ja.UTF-8 LC_MESSAGES frontend\n"
"Report-Msgid-Bugs-To: webmaster+corelibs-translation@ocex.jp\n" "Report-Msgid-Bugs-To: clemens.schwaighofer@egplusww.com\n"
"POT-Creation-Date: 2018-03-28 10:40+0900\n" "POT-Creation-Date: 2018-03-28 10:40+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: clemens.schwaighofer@omc.com\n" "Last-Translator: clemens.schwaighofer@egplusww.com\n"
"Language-Team: Omnicom Content Experiences Japan <webmaster@ocex.jp>\n" "Language-Team: E-GRAPHICS COMMUNICATIONS Japan <info.jp@egplusww.com>\n"
"Language: ja\n" "Language: ja\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@@ -277,38 +277,6 @@ final class CoreLibsConvertJsonTest extends TestCase
); );
} }
/**
* Check if invalid flag throws exception
*
* @covers ::jsonValidate
* @testdox jsonValidate test exception thrown on invalid flag
*
* @return void
*/
public function testJsonValidateInvalidFlag(): void
{
$this->expectException("\InvalidArgumentException");
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', 5);
}
/**
* Check if valid flag throws no exception
*
* @covers ::jsonValidate
* @testdox jsonValidate test no exception on valid flag
*
* @return void
*/
public function testJsonValidateValidflag(): void
{
$this->assertTrue(
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', 0)
);
$this->assertTrue(
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', JSON_INVALID_UTF8_IGNORE)
);
}
/** /**
* Undocumented function * Undocumented function
* *
-1
View File
@@ -1 +0,0 @@
test.env
-19
View File
@@ -38,25 +38,6 @@ print "GETFILENAMEENDING: $file: " . File::getFilenameEnding($file) . "<br>";
$file = getcwd() . DIRECTORY_SEPARATOR . 'class_test.file.php'; $file = getcwd() . DIRECTORY_SEPARATOR . 'class_test.file.php';
print "GETLINESFROMFILE: $file: " . File::getLinesFromFile($file) . "<br>"; print "GETLINESFROMFILE: $file: " . File::getLinesFromFile($file) . "<br>";
print "MIMEINFO: $file: " . File::getMimeType($file) . "<br>"; print "MIMEINFO: $file: " . File::getMimeType($file) . "<br>";
try {
print "MIMEINFO: does_not_exists.txt " . File::getMimeType("does_not_exists.txt") . "<br>";
} catch (\Exception $e) {
print "Error: " . get_class($e) . ": " . $e->getMessage() . "<br>";
}
$files = [
'layout/css/edit.css',
'layout/javascript/edit.jq.js',
'class_test.file.php',
getcwd() . DIRECTORY_SEPARATOR . 'class_test.file.php',
];
foreach ($files as $file) {
try {
print "MIMEINFO: $file: " . File::getMimeType($file) . "<br>";
} catch (\Exception $e) {
print "Error: " . get_class($e) . ": " . $e->getMessage() . "<br>";
}
}
print "</body></html>"; print "</body></html>";
-13
View File
@@ -1598,17 +1598,4 @@ function createNavMenu(nav_menu, header_id = 'mainHeader') // eslint-disable-lin
} }
} }
/**
* HTML decode &something; entrie
* @param {string} str
* @returns string
* @deprecated use utils.js
*/
function decodeHtmlEntities(str) // eslint-disable-line no-unused-vars
{
const parser = new DOMParser();
const doc = parser.parseFromString(str, 'text/html');
return doc.documentElement.textContent;
}
/* END */ /* END */
+7 -16
View File
@@ -135,7 +135,7 @@ var HtmlElementCreator = class {
* @param {String} tag must set tag (div, span, etc) * @param {String} tag must set tag (div, span, etc)
* @param {String} [id=''] optional set for id, if input, select will be used for name * @param {String} [id=''] optional set for id, if input, select will be used for name
* @param {String} [content=''] text content inside, is skipped if sub elements exist * @param {String} [content=''] text content inside, is skipped if sub elements exist
* @param {Array<String>} [css=[]] array for css tags * @param {Array} [css=[]] array for css tags
* @param {Object} [options={}] anything else (value, placeholder, OnClick, style) * @param {Object} [options={}] anything else (value, placeholder, OnClick, style)
* @return {Object} created element as an object * @return {Object} created element as an object
*/ */
@@ -509,11 +509,6 @@ function numberWithCommas(number) {
function convertLBtoBR(string) { function convertLBtoBR(string) {
return string.replace(/(?:\r\n|\r|\n)/g, "<br>"); return string.replace(/(?:\r\n|\r|\n)/g, "<br>");
} }
function decodeHtmlEntities(str) {
const parser = new DOMParser();
const doc = parser.parseFromString(str, "text/html");
return doc.documentElement.textContent;
}
// src/utils/DateTimeHelpers.mjs // src/utils/DateTimeHelpers.mjs
function getTimestamp() { function getTimestamp() {
@@ -665,19 +660,18 @@ function getQueryStringParam(search = "", query = "", single = false) {
if (search) { if (search) {
let _params = url.searchParams.getAll(search); let _params = url.searchParams.getAll(search);
if (_params.length == 1 || single === true) { if (_params.length == 1 || single === true) {
return _params[0]; param = _params[0];
} else if (_params.length > 1) { } else if (_params.length > 1) {
return _params; param = _params;
} }
} else { } else {
let param2 = {}; param = {};
for (const [key] of url.searchParams.entries()) { for (const [key] of url.searchParams.entries()) {
if (typeof param2[key] === "undefined") { if (typeof param[key] === "undefined") {
let _params = url.searchParams.getAll(key); let _params = url.searchParams.getAll(key);
param2[key] = _params.length < 2 || single === true ? _params[0] : _params; param[key] = _params.length < 2 || single === true ? _params[0] : _params;
} }
} }
return param2;
} }
return param; return param;
} }
@@ -1431,9 +1425,6 @@ function numberWithCommas2(x) {
function convertLBtoBR2(string) { function convertLBtoBR2(string) {
return convertLBtoBR(string); return convertLBtoBR(string);
} }
function decodeHtmlEntities2(string) {
return decodeHtmlEntities(string);
}
function getTimestamp2() { function getTimestamp2() {
return getTimestamp(); return getTimestamp();
} }
@@ -1558,7 +1549,7 @@ function acssel(_element, css) {
return hec.acssel(_element, css); return hec.acssel(_element, css);
} }
function scssel(_element, rcss, acss) { function scssel(_element, rcss, acss) {
return hec.scssel(_element, rcss, acss); hec.scssel(_element, rcss, acss);
} }
function phfo(tree) { function phfo(tree) {
return hec.phfo(tree); return hec.phfo(tree);
+1 -1
View File
@@ -1,3 +1,3 @@
function errorCatch(err){err.stack?err.lineNumber?console.error("ERROR[%s:%s] ",err.name,err.lineNumber,err):err.line?console.error("ERROR[%s:%s] ",err.name,err.line,err):console.error("ERROR[%s] ",err.name,err):err.number?(console.error("ERROR[%s:%s] %s",err.name,err.number,err.message),console.error("ERROR[description] %s",err.description)):console.error("ERROR[%s] %s",err.name,err.message)}function isFunction(name){return typeof window[name]<"u"&&typeof window[name]=="function"}function executeFunctionByName(functionName,context){var args=Array.prototype.slice.call(arguments,2),namespaces=functionName.split("."),func=namespaces.pop();if(func==null)throw new Error("Cannot get function from namespaces: "+functionName);for(var i=0;i<namespaces.length;i++)context=context[namespaces[i]];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];typeof fn=="function"&&fn.apply(window,args)}function isObject(val){return val!==null&&typeof val=="object"&&!Array.isArray(val)}function isArray(val){return val!==null&&Array.isArray(val)}function isIterable(val){return val==null?!1:typeof val[Symbol.iterator]=="function"&&typeof val!="string"?!0:typeof val=="object"&&val.constructor===Object}function getObjectCount(object){return isObject(object)?Object.keys(object).length:-1}function keyInObject(key,object){return objectKeyExists(object,key)}function objectKeyExists(object,key){return!!Object.prototype.hasOwnProperty.call(object,key)}function getKeyByValue(object,value){return Object.keys(object).find(key=>object[key]===value)??""}function valueInObject(object,value){return objectValueExists(object,value)}function objectValueExists(object,value){return!!Object.keys(object).find(key=>object[key]===value)}function deepCopyFunction(inObject){var outObject,value,key;if(typeof inObject!="object"||inObject===null)return inObject;outObject=Array.isArray(inObject)?[]:{};for(key in inObject)value=inObject[key],outObject[key]=deepCopyFunction(value);return outObject}function loadEl(el_id){let el=document.getElementById(el_id);if(el===null)throw new Error("Cannot find: "+el_id);return el}function pop(theURL,winName,features){let __winName=window.open(theURL,winName,features);__winName?.focus()}function expandTA(ta_id){let ta=this.loadEl(ta_id);if(ta instanceof HTMLElement&&ta.getAttribute("type")!=="textarea")throw new Error("Element is not a textarea: "+ta_id);let maxChars=parseInt(ta.getAttribute("cols")??"0"),ta_value=ta.getAttribute("value"),theRows=[];ta_value!=null&&(theRows=ta_value.split(` function errorCatch(err){err.stack?err.lineNumber?console.error("ERROR[%s:%s] ",err.name,err.lineNumber,err):err.line?console.error("ERROR[%s:%s] ",err.name,err.line,err):console.error("ERROR[%s] ",err.name,err):err.number?(console.error("ERROR[%s:%s] %s",err.name,err.number,err.message),console.error("ERROR[description] %s",err.description)):console.error("ERROR[%s] %s",err.name,err.message)}function isFunction(name){return typeof window[name]<"u"&&typeof window[name]=="function"}function executeFunctionByName(functionName,context){var args=Array.prototype.slice.call(arguments,2),namespaces=functionName.split("."),func=namespaces.pop();if(func==null)throw new Error("Cannot get function from namespaces: "+functionName);for(var i=0;i<namespaces.length;i++)context=context[namespaces[i]];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];typeof fn=="function"&&fn.apply(window,args)}function isObject(val){return val!==null&&typeof val=="object"&&!Array.isArray(val)}function isArray(val){return val!==null&&Array.isArray(val)}function isIterable(val){return val==null?!1:typeof val[Symbol.iterator]=="function"&&typeof val!="string"?!0:typeof val=="object"&&val.constructor===Object}function getObjectCount(object){return isObject(object)?Object.keys(object).length:-1}function keyInObject(key,object){return objectKeyExists(object,key)}function objectKeyExists(object,key){return!!Object.prototype.hasOwnProperty.call(object,key)}function getKeyByValue(object,value){return Object.keys(object).find(key=>object[key]===value)??""}function valueInObject(object,value){return objectValueExists(object,value)}function objectValueExists(object,value){return!!Object.keys(object).find(key=>object[key]===value)}function deepCopyFunction(inObject){var outObject,value,key;if(typeof inObject!="object"||inObject===null)return inObject;outObject=Array.isArray(inObject)?[]:{};for(key in inObject)value=inObject[key],outObject[key]=deepCopyFunction(value);return outObject}function loadEl(el_id){let el=document.getElementById(el_id);if(el===null)throw new Error("Cannot find: "+el_id);return el}function pop(theURL,winName,features){let __winName=window.open(theURL,winName,features);__winName?.focus()}function expandTA(ta_id){let ta=this.loadEl(ta_id);if(ta instanceof HTMLElement&&ta.getAttribute("type")!=="textarea")throw new Error("Element is not a textarea: "+ta_id);let maxChars=parseInt(ta.getAttribute("cols")??"0"),ta_value=ta.getAttribute("value"),theRows=[];ta_value!=null&&(theRows=ta_value.split(`
`));for(var numNewRows=0,i=0;i<theRows.length;i++)theRows[i].length+2>maxChars&&(numNewRows+=Math.ceil((theRows[i].length+2)/maxChars));ta.setAttribute("row",(numNewRows+theRows.length).toString())}function exists(id){return $("#"+id).length>0}var HtmlElementCreator=class{cel(tag,id="",content="",css=[],options={}){return{tag,id,name:options.name,content,css,options,sub:[]}}ael(base,attach,id=""){if(id){if(base.id==id)base.sub.push(deepCopyFunction(attach));else if(isArray(base.sub)&&base.sub.length>0)for(var i=0;i<base.sub.length;i++)this.ael(base.sub[i],attach,id)}else base.sub.push(deepCopyFunction(attach));return base}aelx(base,...attach){for(var i=0;i<attach.length;i++)base.sub.push(deepCopyFunction(attach[i]));return base}aelxar(base,attach){for(var i=0;i<attach.length;i++)base.sub.push(deepCopyFunction(attach[i]));return base}rel(base){return base.sub=[],base}rcssel(_element,css){var css_index=_element.css.indexOf(css);return css_index>-1&&_element.css.splice(css_index,1),_element}acssel(_element,css){var css_index=_element.css.indexOf(css);return css_index==-1&&_element.css.push(css),_element}scssel(_element,rcss,acss){return this.rcssel(_element,rcss),this.acssel(_element,acss),_element}phfo(tree){let name_elements=["button","fieldset","form","iframe","input","map","meta","object","output","param","select","textarea"],skip_options=["id","name","class"],no_close=["input","br","img","hr","area","col","keygen","wbr","track","source","param","command","base","meta","link","embed"];var content=[],line="<"+tree.tag,i;if(tree.id&&(line+=' id="'+tree.id+'"',name_elements.includes(tree.tag)&&(line+=' name="'+(tree.name?tree.name:tree.id)+'"')),isArray(tree.css)&&tree.css.length>0){for(line+=' class="',i=0;i<tree.css.length;i++)line+=tree.css[i]+" ";line=line.slice(0,-1),line+='"'}if(isObject(tree.options))for(let[key,item]of Object.entries(tree.options))skip_options.includes(key)||(line+=" "+key+'="'+item+'"');if(line+=">",content.push(line),isArray(tree.sub)&&tree.sub.length>0)for(tree.content&&content.push(tree.content),i=0;i<tree.sub.length;i++)content.push(this.phfo(tree.sub[i]));else tree.content&&content.push(tree.content);return no_close.includes(tree.tag)||content.push("</"+tree.tag+">"),content.join("")}phfa(list){for(var content=[],i=0;i<list.length;i++)content.push(this.phfo(list[i]));return content.join("")}};var dom=new HtmlElementCreator;function escapeHtml(string){return string.replace(/[&<>"'/]/g,function(s){var entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};return entityMap[s]})}function unescapeHtml(string){return string.replace(/&[#\w]+;/g,function(s){var entityMap={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#x2F;":"/"};return entityMap[s]})}function html_options(name,data,selected="",options_only=!1,return_string=!1,sort=""){return this.html_options_block(name,data,selected,0,options_only,return_string,sort)}function html_options_block(name,data,selected="",multiple=0,options_only=!1,return_string=!1,sort="",onchange=""){var content=[],element_select,select_options={},element_option,data_list=[],value,options={};multiple>0&&(select_options.multiple="",multiple>1&&(select_options.size=multiple)),onchange&&(select_options.OnChange=onchange),element_select=dom.cel("select",name,"",[],select_options),sort=="keys"?data_list=Object.keys(data).sort():sort=="values"?data_list=Object.keys(data).sort((a,b)=>(""+data[a]).localeCompare(data[b])):data_list=Object.keys(data);for(let key of data_list)value=data[key],options={label:value,value:key,selected:""},multiple==0&&!Array.isArray(selected)&&selected==key&&(options.selected=""),multiple==1&&Array.isArray(selected)&&selected.indexOf(key)!=-1&&(options.selected=""),element_option=dom.cel("option","",value,[],options),dom.ael(element_select,element_option);if(options_only)if(return_string){for(var i=0;i<element_select.sub.length;i++)content.push(dom.phfo(element_select.sub[i]));return content.join("")}else return element_select.sub;else return return_string?(content.push(dom.phfo(element_select)),content.join("")):element_select}function html_options_refill(name,data,sort=""){var element_option,option_selected,data_list=[],value;if(document.getElementById(name)){sort=="keys"?data_list=Object.keys(data).sort():sort=="values"?data_list=Object.keys(data).sort((a,b)=>(""+data[a]).localeCompare(data[b])):data_list=Object.keys(data),[].forEach.call(document.querySelectorAll("#"+name+" :checked"),function(elm){option_selected=elm.value}),loadEl(name).innerHTML="";for(let key of data_list)value=data[key],element_option=document.createElement("option"),element_option.label=value,element_option.value=key,element_option.innerHTML=value,key==option_selected&&(element_option.selected=!0),loadEl(name).appendChild(element_option)}}function dec2hex(dec){return("0x"+dec.toString(16)).substring(-2)}function getRandomIntInclusive(min,max){return min=Math.ceil(min),max=Math.floor(max),Math.floor(Math.random()*(max Line truncated `));for(var numNewRows=0,i=0;i<theRows.length;i++)theRows[i].length+2>maxChars&&(numNewRows+=Math.ceil((theRows[i].length+2)/maxChars));ta.setAttribute("row",(numNewRows+theRows.length).toString())}function exists(id){return $("#"+id).length>0}var HtmlElementCreator=class{cel(tag,id="",content="",css=[],options={}){return{tag,id,name:options.name,content,css,options,sub:[]}}ael(base,attach,id=""){if(id){if(base.id==id)base.sub.push(deepCopyFunction(attach));else if(isArray(base.sub)&&base.sub.length>0)for(var i=0;i<base.sub.length;i++)this.ael(base.sub[i],attach,id)}else base.sub.push(deepCopyFunction(attach));return base}aelx(base,...attach){for(var i=0;i<attach.length;i++)base.sub.push(deepCopyFunction(attach[i]));return base}aelxar(base,attach){for(var i=0;i<attach.length;i++)base.sub.push(deepCopyFunction(attach[i]));return base}rel(base){return base.sub=[],base}rcssel(_element,css){var css_index=_element.css.indexOf(css);return css_index>-1&&_element.css.splice(css_index,1),_element}acssel(_element,css){var css_index=_element.css.indexOf(css);return css_index==-1&&_element.css.push(css),_element}scssel(_element,rcss,acss){return this.rcssel(_element,rcss),this.acssel(_element,acss),_element}phfo(tree){let name_elements=["button","fieldset","form","iframe","input","map","meta","object","output","param","select","textarea"],skip_options=["id","name","class"],no_close=["input","br","img","hr","area","col","keygen","wbr","track","source","param","command","base","meta","link","embed"];var content=[],line="<"+tree.tag,i;if(tree.id&&(line+=' id="'+tree.id+'"',name_elements.includes(tree.tag)&&(line+=' name="'+(tree.name?tree.name:tree.id)+'"')),isArray(tree.css)&&tree.css.length>0){for(line+=' class="',i=0;i<tree.css.length;i++)line+=tree.css[i]+" ";line=line.slice(0,-1),line+='"'}if(isObject(tree.options))for(let[key,item]of Object.entries(tree.options))skip_options.includes(key)||(line+=" "+key+'="'+item+'"');if(line+=">",content.push(line),isArray(tree.sub)&&tree.sub.length>0)for(tree.content&&content.push(tree.content),i=0;i<tree.sub.length;i++)content.push(this.phfo(tree.sub[i]));else tree.content&&content.push(tree.content);return no_close.includes(tree.tag)||content.push("</"+tree.tag+">"),content.join("")}phfa(list){for(var content=[],i=0;i<list.length;i++)content.push(this.phfo(list[i]));return content.join("")}};var dom=new HtmlElementCreator;function escapeHtml(string){return string.replace(/[&<>"'/]/g,function(s){var entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};return entityMap[s]})}function unescapeHtml(string){return string.replace(/&[#\w]+;/g,function(s){var entityMap={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#x2F;":"/"};return entityMap[s]})}function html_options(name,data,selected="",options_only=!1,return_string=!1,sort=""){return this.html_options_block(name,data,selected,0,options_only,return_string,sort)}function html_options_block(name,data,selected="",multiple=0,options_only=!1,return_string=!1,sort="",onchange=""){var content=[],element_select,select_options={},element_option,data_list=[],value,options={};multiple>0&&(select_options.multiple="",multiple>1&&(select_options.size=multiple)),onchange&&(select_options.OnChange=onchange),element_select=dom.cel("select",name,"",[],select_options),sort=="keys"?data_list=Object.keys(data).sort():sort=="values"?data_list=Object.keys(data).sort((a,b)=>(""+data[a]).localeCompare(data[b])):data_list=Object.keys(data);for(let key of data_list)value=data[key],options={label:value,value:key,selected:""},multiple==0&&!Array.isArray(selected)&&selected==key&&(options.selected=""),multiple==1&&Array.isArray(selected)&&selected.indexOf(key)!=-1&&(options.selected=""),element_option=dom.cel("option","",value,[],options),dom.ael(element_select,element_option);if(options_only)if(return_string){for(var i=0;i<element_select.sub.length;i++)content.push(dom.phfo(element_select.sub[i]));return content.join("")}else return element_select.sub;else return return_string?(content.push(dom.phfo(element_select)),content.join("")):element_select}function html_options_refill(name,data,sort=""){var element_option,option_selected,data_list=[],value;if(document.getElementById(name)){sort=="keys"?data_list=Object.keys(data).sort():sort=="values"?data_list=Object.keys(data).sort((a,b)=>(""+data[a]).localeCompare(data[b])):data_list=Object.keys(data),[].forEach.call(document.querySelectorAll("#"+name+" :checked"),function(elm){option_selected=elm.value}),loadEl(name).innerHTML="";for(let key of data_list)value=data[key],element_option=document.createElement("option"),element_option.label=value,element_option.value=key,element_option.innerHTML=value,key==option_selected&&(element_option.selected=!0),loadEl(name).appendChild(element_option)}}function dec2hex(dec){return("0x"+dec.toString(16)).substring(-2)}function getRandomIntInclusive(min,max){return min=Math.ceil(min),max=Math.floor(max),Math.floor(Math.random()*(max Line truncated
//# sourceMappingURL=utils.min.js.map //# sourceMappingURL=utils.min.js.map
+3 -3
View File
@@ -1,7 +1,7 @@
{ {
"version": 3, "version": 3,
"sources": ["../../../src/utils/JavaScriptHelpers.mjs", "../../../src/utils/DomHelpers.mjs", "../../../src/utils/HtmlElementCreator.mjs", "../../../src/utils/HtmlHelpers.mjs", "../../../src/utils/MathHelpers.mjs", "../../../src/utils/StringHelpers.mjs", "../../../src/utils/DateTimeHelpers.mjs", "../../../src/utils/UniqIdGenerators.mjs", "../../../src/utils/ResizingAndMove.mjs", "../../../src/utils/FormatBytes.mjs", "../../../src/utils/UrlParser.mjs", "../../../src/utils/LoginLogout.mjs", "../../../src/utils/ActionIndicatorOverlayBox.mjs", "../../../src/utils/l10nTranslation.mjs", "../../../src/utils/ActionBox.mjs", "../../../src/utils/LoginNavMenu.mjs", "../../../src/utils/BrowserDetect.mjs", "../../../src/utils.mjs"], "sources": ["../../../src/utils/JavaScriptHelpers.mjs", "../../../src/utils/DomHelpers.mjs", "../../../src/utils/HtmlElementCreator.mjs", "../../../src/utils/HtmlHelpers.mjs", "../../../src/utils/MathHelpers.mjs", "../../../src/utils/StringHelpers.mjs", "../../../src/utils/DateTimeHelpers.mjs", "../../../src/utils/UniqIdGenerators.mjs", "../../../src/utils/ResizingAndMove.mjs", "../../../src/utils/FormatBytes.mjs", "../../../src/utils/UrlParser.mjs", "../../../src/utils/LoginLogout.mjs", "../../../src/utils/ActionIndicatorOverlayBox.mjs", "../../../src/utils/l10nTranslation.mjs", "../../../src/utils/ActionBox.mjs", "../../../src/utils/LoginNavMenu.mjs", "../../../src/utils/BrowserDetect.mjs", "../../../src/utils.mjs"],
"sourcesContent": ["/*\nDescription: JavaScript Helpers\nDate: 2025/3/6\nCreator: Clemens Schwaighofer\n*/\n\nexport {\n\terrorCatch, isFunction,\n\texecuteFunctionByName, runFunction, runFunctionArgsArray,\n\tisObject, isIterable, isArray, getObjectCount,\n\tkeyInObject, objectKeyExists,\n\tgetKeyByValue, valueInObject, objectValueExists,\n\tdeepCopyFunction\n};\n\n/**\n * prints out error messages based on data available from the browser\n * @param {Object} err error from try/catch block\n */\nfunction errorCatch(err)\n{\n\t// for FF & Chrome\n\tif (err.stack) {\n\t\t// only FF\n\t\tif (err.lineNumber) {\n\t\t\tconsole.error('ERROR[%s:%s] ', err.name, err.lineNumber, err);\n\t\t} else if (err.line) {\n\t\t\t// only Safari\n\t\t\tconsole.error('ERROR[%s:%s] ', err.name, err.line, err);\n\t\t} else {\n\t\t\tconsole.error('ERROR[%s] ', err.name, err);\n\t\t}\n\t} else if (err.number) {\n\t\t// IE\n\t\tconsole.error('ERROR[%s:%s] %s', err.name, err.number, err.message);\n\t\tconsole.error('ERROR[description] %s', err.description);\n\t} else {\n\t\t// the rest\n\t\tconsole.error('ERROR[%s] %s', err.name, err.message);\n\t}\n}\n\n/**\n * check if name is a function\n * @param {string} name Name of function to check if exists\n * @return {Boolean} true/false\n */\nfunction isFunction(name)\n{\n\tif (typeof window[name] !== 'undefined' &&\n\t\ttypeof window[name] === 'function') {\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n}\n\n/**\n * call a function by its string name\n * https://stackoverflow.com/a/359910\n * example: executeFunctionByName(\"My.Namespace.functionName\", window, arguments);\n * @param {string} functionName The function name or namespace + function\n * @param {any} context context (window or first namespace)\n * hidden next are all the arguments\n * @return {any} Return values from functon\n */\nfunction executeFunctionByName(functionName, context /*, args */)\n{\n\tvar args = Array.prototype.slice.call(arguments, 2);\n\tvar namespaces = functionName.split('.');\n\tvar func = namespaces.pop();\n\tif (func == undefined) {\n\t\tthrow new Error(\"Cannot get function from namespaces: \" + functionName);\n\t}\n\tfor (var i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]];\n\t}\n\treturn context[func].apply(context, args);\n}\n\n/**\n * call a function by string\n * call runFunctionArgArray\n * @param {string} name Function name to call\n * @param {Array} arguments all next function arguments are passed on as argument to the function\n * @returns void\n */\nfunction runFunction(name)\n{\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\trunFunctionArgsArray(name, args);\n}\n\n/**\n * call a function with a string, argumens as array\n * @param {string} name Function name to call\n * @param {array} args function arguments as arry\n * @returns void\n */\nfunction runFunctionArgsArray(name, args)\n{\n\tvar fn = window[name];\n\tif(typeof fn !== 'function') {\n\t\treturn;\n\t}\n\n\tfn.apply(window, args);\n}\n\n/**\n * checks if a variable is an object\n * @param {any} val possible object\n * @return {Boolean} true/false if it is an object or not\n */\nfunction isObject(val)\n{\n\treturn val !== null && typeof val === 'object' && !Array.isArray(val);\n}\n\n/**\n * Check if variable is array\n * @param {any} val possible array\n * @returns {Boolean} true/false if it an array\n */\nfunction isArray(val)\n{\n\treturn val !== null && Array.isArray(val);\n}\n\n/**\n * Check if any iterable type\n * @param {any} val possible iteratable object/array\n * @returns {Boolean} true/false if it is iterable\n */\nfunction isIterable(val)\n{\n\tif (val == null) return false;\n\n\t// Check if it's iterable, but excldue strings\n\tif (typeof val[Symbol.iterator] === 'function' && typeof val !== 'string') return true;\n\n\t// Check if it's a plain object\n\treturn typeof val === 'object' && val.constructor === Object;\n}\n\n/**\n * get the length of an object (entries)\n * @param {Object} object object to check\n * @return {Number} number of entry, or -1 if not object\n */\nfunction getObjectCount(object)\n{\n\tif (!isObject(object)) {\n\t\treturn -1;\n\t}\n\treturn Object.keys(object).length;\n}\n\n/**\n * checks if a key exists in a given object\n * @param {String} key key name\n * @param {Object} object object to search key in\n * @return {Boolean} true/false if key exists in object\n * @deprecated Use objectKeyExists\n */\nfunction keyInObject(key, object)\n{\n\treturn objectKeyExists(object, key);\n}\n\n/**\n * This is the correct order and will superseed keyInObject\n * @param {Object} object object to search key in\n * @param {String} key key name\n * @returns {Boolean} true/false if key exists in object\n */\nfunction objectKeyExists(object, key)\n{\n\treturn Object.prototype.hasOwnProperty.call(object, key) ? true : false;\n}\n\n/**\n * returns matching key of vaLine truncated "sourcesContent": ["/*\nDescription: JavaScript Helpers\nDate: 2025/3/6\nCreator: Clemens Schwaighofer\n*/\n\nexport {\n\terrorCatch, isFunction,\n\texecuteFunctionByName, runFunction, runFunctionArgsArray,\n\tisObject, isIterable, isArray, getObjectCount,\n\tkeyInObject, objectKeyExists,\n\tgetKeyByValue, valueInObject, objectValueExists,\n\tdeepCopyFunction\n};\n\n/**\n * prints out error messages based on data available from the browser\n * @param {Object} err error from try/catch block\n */\nfunction errorCatch(err)\n{\n\t// for FF & Chrome\n\tif (err.stack) {\n\t\t// only FF\n\t\tif (err.lineNumber) {\n\t\t\tconsole.error('ERROR[%s:%s] ', err.name, err.lineNumber, err);\n\t\t} else if (err.line) {\n\t\t\t// only Safari\n\t\t\tconsole.error('ERROR[%s:%s] ', err.name, err.line, err);\n\t\t} else {\n\t\t\tconsole.error('ERROR[%s] ', err.name, err);\n\t\t}\n\t} else if (err.number) {\n\t\t// IE\n\t\tconsole.error('ERROR[%s:%s] %s', err.name, err.number, err.message);\n\t\tconsole.error('ERROR[description] %s', err.description);\n\t} else {\n\t\t// the rest\n\t\tconsole.error('ERROR[%s] %s', err.name, err.message);\n\t}\n}\n\n/**\n * check if name is a function\n * @param {string} name Name of function to check if exists\n * @return {Boolean} true/false\n */\nfunction isFunction(name)\n{\n\tif (typeof window[name] !== 'undefined' &&\n\t\ttypeof window[name] === 'function') {\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n}\n\n/**\n * call a function by its string name\n * https://stackoverflow.com/a/359910\n * example: executeFunctionByName(\"My.Namespace.functionName\", window, arguments);\n * @param {string} functionName The function name or namespace + function\n * @param {any} context context (window or first namespace)\n * hidden next are all the arguments\n * @return {any} Return values from functon\n */\nfunction executeFunctionByName(functionName, context /*, args */)\n{\n\tvar args = Array.prototype.slice.call(arguments, 2);\n\tvar namespaces = functionName.split('.');\n\tvar func = namespaces.pop();\n\tif (func == undefined) {\n\t\tthrow new Error(\"Cannot get function from namespaces: \" + functionName);\n\t}\n\tfor (var i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]];\n\t}\n\treturn context[func].apply(context, args);\n}\n\n/**\n * call a function by string\n * call runFunctionArgArray\n * @param {string} name Function name to call\n * @param {Array} arguments all next function arguments are passed on as argument to the function\n * @returns void\n */\nfunction runFunction(name)\n{\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\trunFunctionArgsArray(name, args);\n}\n\n/**\n * call a function with a string, argumens as array\n * @param {string} name Function name to call\n * @param {array} args function arguments as arry\n * @returns void\n */\nfunction runFunctionArgsArray(name, args)\n{\n\tvar fn = window[name];\n\tif(typeof fn !== 'function') {\n\t\treturn;\n\t}\n\n\tfn.apply(window, args);\n}\n\n/**\n * checks if a variable is an object\n * @param {any} val possible object\n * @return {Boolean} true/false if it is an object or not\n */\nfunction isObject(val)\n{\n\treturn val !== null && typeof val === 'object' && !Array.isArray(val);\n}\n\n/**\n * Check if variable is array\n * @param {any} val possible array\n * @returns {Boolean} true/false if it an array\n */\nfunction isArray(val)\n{\n\treturn val !== null && Array.isArray(val);\n}\n\n/**\n * Check if any iterable type\n * @param {any} val possible iteratable object/array\n * @returns {Boolean} true/false if it is iterable\n */\nfunction isIterable(val)\n{\n\tif (val == null) return false;\n\n\t// Check if it's iterable, but excldue strings\n\tif (typeof val[Symbol.iterator] === 'function' && typeof val !== 'string') return true;\n\n\t// Check if it's a plain object\n\treturn typeof val === 'object' && val.constructor === Object;\n}\n\n/**\n * get the length of an object (entries)\n * @param {Object} object object to check\n * @return {Number} number of entry, or -1 if not object\n */\nfunction getObjectCount(object)\n{\n\tif (!isObject(object)) {\n\t\treturn -1;\n\t}\n\treturn Object.keys(object).length;\n}\n\n/**\n * checks if a key exists in a given object\n * @param {String} key key name\n * @param {Object} object object to search key in\n * @return {Boolean} true/false if key exists in object\n * @deprecated Use objectKeyExists\n */\nfunction keyInObject(key, object)\n{\n\treturn objectKeyExists(object, key);\n}\n\n/**\n * This is the correct order and will superseed keyInObject\n * @param {Object} object object to search key in\n * @param {String} key key name\n * @returns {Boolean} true/false if key exists in object\n */\nfunction objectKeyExists(object, key)\n{\n\treturn Object.prototype.hasOwnProperty.call(object, key) ? true : false;\n}\n\n/**\n * returns matching key of vaLine truncated
"mappings": "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 truncated "mappings": "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 truncated
"names": ["param", "i18n", "hec", "l10n", "hec", "l10n", "escapeHtml", "roundPrecision", "formatString", "unescapeHtml", "loadEl", "pop", "expandTA", "getWindowSize", "getScrollOffset", "getScrollOffsetOpener", "setCenter", "goToPos", "goTo", "numberWithCommas", "convertLBtoBR", "decodeHtmlEntities", "getTimestamp", "dec2hex", "generateId", "randomIdF", "getRandomIntInclusive", "isFunction", "executeFunctionByName", "isObject", "isArray", "isIterable", "getObjectCount", "keyInObject", "getKeyByValue", "valueInObject", "deepCopyFunction", "exists", "formatBytes", "formatBytesLong", "stringByteFormat", "errorCatch", "actionIndicator", "actionIndicatorShow", "actionIndicatorHide", "overlayBoxShow", "overlayBoxHide", "setOverlayBox", "hideOverlayBox", "ClearCall", "html_options", "html_options_block", "html_options_refill", "parseQueryString", "getQueryStringParam", "updateUrlParameter", "removeUrlParameter", "hasUrlParameter", "getUrlParameter", "loginLogout", "isWebkit", "isMobileWebKit", "isDesktopWebKit"] "names": ["i18n", "hec", "l10n", "hec", "l10n", "escapeHtml", "roundPrecision", "formatString", "unescapeHtml", "loadEl", "pop", "expandTA", "getWindowSize", "getScrollOffset", "getScrollOffsetOpener", "setCenter", "goToPos", "goTo", "numberWithCommas", "convertLBtoBR", "getTimestamp", "dec2hex", "generateId", "randomIdF", "getRandomIntInclusive", "isFunction", "executeFunctionByName", "isObject", "isArray", "isIterable", "getObjectCount", "keyInObject", "getKeyByValue", "valueInObject", "deepCopyFunction", "exists", "formatBytes", "formatBytesLong", "stringByteFormat", "errorCatch", "actionIndicator", "actionIndicatorShow", "actionIndicatorHide", "overlayBoxShow", "overlayBoxHide", "setOverlayBox", "hideOverlayBox", "ClearCall", "html_options", "html_options_block", "html_options_refill", "parseQueryString", "getQueryStringParam", "updateUrlParameter", "removeUrlParameter", "hasUrlParameter", "getUrlParameter", "loginLogout", "isWebkit", "isMobileWebKit", "isDesktopWebKit"]
} }
+2 -2
View File
@@ -15,7 +15,7 @@
] ]
}, },
"repositories": { "repositories": {
"git.egplusww.jp.Composer": { "packages.omnicomproduction.jp.Composer": {
"type": "composer", "type": "composer",
"url": "https://packages.omnicomproduction.jp/api/packages/Composer/composer" "url": "https://packages.omnicomproduction.jp/api/packages/Composer/composer"
} }
@@ -23,7 +23,7 @@
"require": { "require": {
"egrajp/smarty-extended": "^5.4", "egrajp/smarty-extended": "^5.4",
"php": ">=8.1", "php": ">=8.1",
"gullevek/dotenv": "^3.0", "gullevek/dotenv": "^2.0",
"psr/log": "^2.0 || ^3.0", "psr/log": "^2.0 || ^3.0",
"php-privacy/openpgp": "^2.1" "php-privacy/openpgp": "^2.1"
} }
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3 -9
View File
@@ -58,21 +58,15 @@ class File
* else returns '' for any other finfo read problem * else returns '' for any other finfo read problem
* *
* @param string $read_file File to read, relative or absolute path * @param string $read_file File to read, relative or absolute path
* @return string mime type * @return string
* @throws \UnexpectedValueException if file cannot be read or is not a file
* @throws \RangeException if we cannot get a mime type and throw exception is on
*/ */
public static function getMimeType(string $read_file): string public static function getMimeType(string $read_file): string
{ {
$finfo = new \finfo(FILEINFO_MIME_TYPE); $finfo = new \finfo(FILEINFO_MIME_TYPE);
if (!is_file($read_file) || !is_readable($read_file)) { if (!is_file($read_file)) {
throw new \UnexpectedValueException('[getMimeType] File not found: ' . $read_file); throw new \UnexpectedValueException('[getMimeType] File not found: ' . $read_file);
} }
$mime_type = $finfo->file($read_file); return $finfo->file($read_file) ?: '';
if ($mime_type === false) {
throw new \RangeException('[getMimeType] Cannot get mime type for: ' . $read_file);
}
return $mime_type;
} }
} }
@@ -811,6 +811,87 @@ class ArrayHandler
); );
return $in_array; return $in_array;
} }
/**
* TODO: move to CoreLibs ArrayCombined
* return one random entry from an array (value)
* the return entry is null if the incoming array is empty
* the array can also be an array of arrays
*
* @param array<mixed> $array
* @return string|int|float|bool|array<mixed>|null
*/
public static function getRandomEntryFromArray(array $array): string|int|float|bool|array|null
{
if (empty($array)) {
return null;
}
$random_index = array_rand($array);
return $array[$random_index];
}
/**
* TODO: move to CoreLibs ArrayCombined
* find and remove one value
* on default removes only the first entry
* on default does not strict compare
*
* @param array<mixed> $array
* @param string|int|float|bool|array<mixed> $value
* @param bool $strict [false]
* @return array<mixed>
*/
public static function removeArrayEntryByValue(
array $array,
string|int|float|bool|array $value,
bool $strict = false,
): array {
return array_filter($array, function ($element) use ($value, $strict) {
return $strict ?
$element !== $value :
$element != $value;
});
}
/**
* TODO: move to CoreLibs ArrayCombined
* add a string to each element in an array, default is at the end of the value,
* can be switched with the prefix flag
*
* @param array<string> $array
* @param string $string_to_add
* @param bool $prefix [false]
* @return array<string>
*/
public static function addStringToEachValueInArray(array $array, string $string_to_add, bool $prefix = false): array
{
return array_map(function ($value) use ($string_to_add, $prefix) {
return $prefix ?
$string_to_add . $value :
$value . $string_to_add;
}, $array);
}
/**
* sort by key any array, even if it is nested
*
* @param array<mixed> $data
* @return array<mixed>
*/
public static function createSortedArrayByKey(array $data): array
{
// Sort by keys
ksort($data);
// Recursively sort nested arrays
foreach ($data as $key => $value) {
if (is_array($value)) {
$data[$key] = self::createSortedArrayByKey($value);
}
}
return $data;
}
} }
// __END__ // __END__
+2 -2
View File
@@ -133,7 +133,7 @@ class DateTime
} else { } else {
for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) { for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) {
$output = floor((float)$timestamp / $timegroups[$i]); $output = floor((float)$timestamp / $timegroups[$i]);
$timestamp = $timestamp % $timegroups[$i]; $timestamp = (float)$timestamp % $timegroups[$i];
// output has days|hours|min|sec // output has days|hours|min|sec
if ($output || $time_string) { if ($output || $time_string) {
$time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : ''); $time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : '');
@@ -453,7 +453,7 @@ class DateTime
} }
if (isset($matches[11]) && is_numeric($matches[11])) { if (isset($matches[11]) && is_numeric($matches[11])) {
// for milliseconds, we need to divide by 1000 and add them // for milliseconds, we need to divide by 1000 and add them
$timestamp += ((float)$matches[11] / 1000); $timestamp += (float)($matches[11] / 1000);
} }
if ($negative) { if ($negative) {
// cast to float so we can do a negative multiplication // cast to float so we can do a negative multiplication
+63 -62
View File
@@ -43,70 +43,71 @@ class Byte
public static function humanReadableByteFormat(string|int|float $bytes, int $flags = 0): string public static function humanReadableByteFormat(string|int|float $bytes, int $flags = 0): string
{ {
// if not numeric, return as is // if not numeric, return as is
if (!is_numeric($bytes)) { if (is_numeric($bytes)) {
// flags bit wise check
// remove space between number and suffix
if ($flags & self::BYTE_FORMAT_NOSPACE) {
$space = false;
} else {
$space = true;
}
// use sprintf instead of round
if ($flags & self::BYTE_FORMAT_ADJUST) {
$adjust = true;
} else {
$adjust = false;
}
// use SI 1000 mod and not 1024 mod
if ($flags & self::BYTE_FORMAT_SI) {
$si = true;
} else {
$si = false;
}
if ($flags > 7) {
throw new \InvalidArgumentException("Invalid flags parameter: $flags", 1);
}
// si or normal
$unit = $si ? 1000 : 1024;
// always positive
$abs_bytes = $bytes == PHP_INT_MIN ? PHP_INT_MAX : abs((float)$bytes);
// smaller than unit is always B
if ($abs_bytes < $unit) {
return $bytes . 'B';
}
// labels in order of size [Y, Z]
$labels = ['', 'K', 'M', 'G', 'T', 'P', 'E'];
// exp position calculation
$exp = (int)floor(log($abs_bytes, $unit));
// avoid printing out anything larger than max labels
if ($exp >= count($labels)) {
$exp = count($labels) - 1;
}
// deviation calculation
$dev = pow($unit, $exp) * ($unit - 0.05);
// shift the exp +1 for on the border units
if (
$exp < 6 &&
$abs_bytes > ($dev - (((int)$dev & 0xfff) == 0xd00 ? 52 : 0))
) {
$exp++;
}
// label name, including leading space if flagged
$pre = ($space ? ' ' : '') . ($labels[$exp] ?? '>E') . ($si ? 'i' : '') . 'B';
$bytes_calc = $abs_bytes / pow($unit, $exp);
// if original is negative, reverse
if ($bytes < 0) {
$bytes_calc *= -1;
}
if ($adjust) {
return sprintf("%.2f%s", $bytes_calc, $pre);
} else {
return round($bytes_calc, 2) . $pre;
}
} else {
// if anything other return as string // if anything other return as string
return (string)$bytes; return (string)$bytes;
} }
// flags bit wise check
// remove space between number and suffix
if ($flags & self::BYTE_FORMAT_NOSPACE) {
$space = false;
} else {
$space = true;
}
// use sprintf instead of round
if ($flags & self::BYTE_FORMAT_ADJUST) {
$adjust = true;
} else {
$adjust = false;
}
// use SI 1000 mod and not 1024 mod
if ($flags & self::BYTE_FORMAT_SI) {
$si = true;
} else {
$si = false;
}
if ($flags > 7) {
throw new \InvalidArgumentException("Invalid flags parameter: $flags", 1);
}
// si or normal
$unit = $si ? 1000 : 1024;
// always positive
$abs_bytes = $bytes == PHP_INT_MIN ? PHP_INT_MAX : abs((float)$bytes);
// smaller than unit is always B
if ($abs_bytes < $unit) {
return $bytes . 'B';
}
// labels in order of size [Y, Z]
$labels = ['', 'K', 'M', 'G', 'T', 'P', 'E'];
// exp position calculation
$exp = (int)floor(log($abs_bytes, $unit));
// avoid printing out anything larger than max labels
if ($exp >= count($labels)) {
$exp = count($labels) - 1;
}
// deviation calculation
$dev = pow($unit, $exp) * ($unit - 0.05);
// shift the exp +1 for on the border units
if (
$exp < 6 &&
$abs_bytes > ($dev - (((int)$dev & 0xfff) == 0xd00 ? 52 : 0))
) {
$exp++;
}
// label name, including leading space if flagged
$pre = ($space ? ' ' : '') . ($labels[$exp] ?? '>E') . ($si ? 'i' : '') . 'B';
$bytes_calc = $abs_bytes / pow($unit, $exp);
// if original is negative, reverse
if ($bytes < 0) {
$bytes_calc *= -1;
}
if ($adjust) {
return sprintf("%.2f%s", $bytes_calc, $pre);
} else {
return round($bytes_calc, 2) . $pre;
}
} }
/** /**
@@ -153,7 +154,7 @@ class Byte
if (!empty($matches[1])) { if (!empty($matches[1])) {
$number_negative = true; $number_negative = true;
} }
if (isset($matches[2])) { if (isset($matches[2]) && isset($matches[3])) {
// remove all non valid characters from the number // remove all non valid characters from the number
$number = preg_replace('/[^0-9\.]/', '', $matches[2]); $number = preg_replace('/[^0-9\.]/', '', $matches[2]);
// final clean up and convert to float // final clean up and convert to float
+6 -6
View File
@@ -957,9 +957,9 @@ class Color
* Undocumented function * Undocumented function
* *
* @param HWB $hwb * @param HWB $hwb
* @return LCH * @return Lch
*/ */
public static function hwbToLch(HWB $hwb): LCH public static function hwbToLch(HWB $hwb): Lch
{ {
return self::rgbToLch( return self::rgbToLch(
self::hwbToRgb($hwb) self::hwbToRgb($hwb)
@@ -1078,10 +1078,10 @@ class Color
/** /**
* OkLab to Lch (CIE) * OkLab to Lch (CIE)
* *
* @param Lab $lab * @param LAB $lab
* @return LCH * @return LCH
*/ */
public static function okLabToLch(Lab $lab): LCH public static function okLabToLch(LAB $lab): LCH
{ {
return self::labToLch( return self::labToLch(
self::okLabToLab($lab) self::okLabToLab($lab)
@@ -1092,9 +1092,9 @@ class Color
* Lch (CIE) to OkLab * Lch (CIE) to OkLab
* *
* @param LCH $lch * @param LCH $lch
* @return Lab * @return LAB
*/ */
public static function lchToOkLab(LCH $lch): Lab public static function lchToOkLab(LCH $lch): LAB
{ {
return self::labToOkLab( return self::labToOkLab(
self::lchToLab($lch) self::lchToLab($lch)
+1 -5
View File
@@ -74,15 +74,11 @@ class Json
* Weill set the internval last error state and info can be read with jsonGetLastError * Weill set the internval last error state and info can be read with jsonGetLastError
* *
* @param string $json * @param string $json
* @param int $flags only JSON_INVALID_UTF8_IGNORE is currently allowed * @param int $flags only JSON_INVALID_UTF8_IGNORE is currently allowed
* @return bool * @return bool
* @throws \InvalidArgumentException if flags is invalid
*/ */
public static function jsonValidate(string $json, int $flags = 0): bool public static function jsonValidate(string $json, int $flags = 0): bool
{ {
if ($flags != 0 && $flags != JSON_INVALID_UTF8_IGNORE) {
throw new \InvalidArgumentException("For flag only 0 or JSON_INVALID_UTF8_IGNORE is allwed: " . $flags);
}
$json_valid = json_validate($json, flags:$flags); $json_valid = json_validate($json, flags:$flags);
self::$json_last_error = json_last_error(); self::$json_last_error = json_last_error();
return $json_valid; return $json_valid;
+9 -15
View File
@@ -2232,9 +2232,9 @@ class IO
$milliseconds = $matches[13] ?? ''; $milliseconds = $matches[13] ?? '';
// clean up, hide entries that have 00 in the time group // clean up, hide entries that have 00 in the time group
$hour = !empty($hour) ? preg_replace('/^0/', '', $hour) : ''; $hour = $hour != '00' ? preg_replace('/^0/', '', $hour) : '';
$minutes = !empty($minutes) ? preg_replace('/^0/', '', $minutes) : ''; $minutes = $minutes != '00' ? preg_replace('/^0/', '', $minutes) : '';
$seconds = !empty($seconds) ? preg_replace('/^0/', '', $seconds) : ''; $seconds = $seconds != '00' ? preg_replace('/^0/', '', $seconds) : '';
// strip any leading or trailing spaces // strip any leading or trailing spaces
$time_string = trim( $time_string = trim(
@@ -2562,27 +2562,21 @@ class IO
// set field names // set field names
$this->cursor_ext[$query_hash]['field_names'] = []; $this->cursor_ext[$query_hash]['field_names'] = [];
for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) { for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) {
if ( $this->cursor_ext[$query_hash]['field_names'][] =
($field_name = $this->db_functions->__dbFieldName( $this->db_functions->__dbFieldName(
$this->cursor_ext[$query_hash]['cursor'], $this->cursor_ext[$query_hash]['cursor'],
$i $i
)) !== false );
) {
$this->cursor_ext[$query_hash]['field_names'][] = $field_name;
}
} }
$this->field_names = $this->cursor_ext[$query_hash]['field_names']; $this->field_names = $this->cursor_ext[$query_hash]['field_names'];
// field types // field types
$this->cursor_ext[$query_hash]['field_types'] = []; $this->cursor_ext[$query_hash]['field_types'] = [];
for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) { for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) {
if ( $this->cursor_ext[$query_hash]['field_types'][] =
($field_type = $this->db_functions->__dbFieldType( $this->db_functions->__dbFieldType(
$this->cursor_ext[$query_hash]['cursor'], $this->cursor_ext[$query_hash]['cursor'],
$i $i
)) !== false );
) {
$this->cursor_ext[$query_hash]['field_types'][] = $field_type;
}
} }
$this->field_types = $this->cursor_ext[$query_hash]['field_types']; $this->field_types = $this->cursor_ext[$query_hash]['field_types'];
// combined name => type // combined name => type
+3 -3
View File
@@ -146,7 +146,7 @@ class L10n
* @param string $locale language name, if not set, try previous set * @param string $locale language name, if not set, try previous set
* @param string $domain set name for mo file, if not set, try previous set * @param string $domain set name for mo file, if not set, try previous set
* @param string $path path, if not set try to get from paths array, else self * @param string $path path, if not set try to get from paths array, else self
* @param string $override_encoding if locale does not have encoding set, use this one * @param string $override_encoding if locale does not env encoding set, use this one
* @return GetTextReader the main gettext reader object * @return GetTextReader the main gettext reader object
*/ */
public function getTranslator( public function getTranslator(
@@ -301,7 +301,7 @@ class L10n
* Get the local as array same to the GetLocale::setLocale return * Get the local as array same to the GetLocale::setLocale return
* This does not set from outside, but only what is set in the l10n class * This does not set from outside, but only what is set in the l10n class
* *
* @return array{locale:string,lang:string,lang_short:string,domain:string,encoding:string,path:string} * @return array{locale: string, lang: string, lang_short: string, domain: string, encoding: string, path: string}
*/ */
public function getLocaleAsArray(): array public function getLocaleAsArray(): array
{ {
@@ -321,7 +321,7 @@ class L10n
* parse the locale string for further processing * parse the locale string for further processing
* *
* @param string $locale Locale to parse * @param string $locale Locale to parse
* @return array{lang:string|null,country:string|null,charset:string|null,modifier:string|null} parsed locale * @return array<string,string|null> array with lang, country, charset, modifier
*/ */
public static function parseLocale(string $locale = ''): array public static function parseLocale(string $locale = ''): array
{ {
+2 -2
View File
@@ -86,7 +86,7 @@ enum Level: int
/** /**
* @param value-of<self::NAMES>|LogLevel::*|'Debug'|'Info'|'Notice'|'Warning'|'Error'|'Critical'|'Alert'|'Emergency' $name * @param value-of<self::NAMES>|LogLevel::*|'Debug'|'Info'|'Notice'|'Warning'|'Error'|'Critical'|'Alert'|'Emergency' $name
* @return self * @return static
*/ */
public static function fromName(string $name): self public static function fromName(string $name): self
{ {
@@ -104,7 +104,7 @@ enum Level: int
/** /**
* @param value-of<self::VALUES> $value * @param value-of<self::VALUES> $value
* @return self * @return static
*/ */
public static function fromValue(int $value): self public static function fromValue(int $value): self
{ {
+18 -25
View File
@@ -178,11 +178,11 @@ class Elements
"/(href=\")?(\>)?\b($protRegex)([\w\.\-?&=+%#~,;\/]+)\b([\.\-?&=+%#~,;\/]*)(\|([^\||^#]+)(#([^\|]+))?\|)?/", "/(href=\")?(\>)?\b($protRegex)([\w\.\-?&=+%#~,;\/]+)\b([\.\-?&=+%#~,;\/]*)(\|([^\||^#]+)(#([^\|]+))?\|)?/",
function ($matches) { function ($matches) {
return self::createUrl( return self::createUrl(
$matches[1], $matches[1] ?? '',
$matches[2], $matches[2] ?? '',
$matches[3], $matches[3] ?? '',
$matches[4], $matches[4] ?? '',
$matches[5], $matches[5] ?? '',
$matches[7] ?? '', $matches[7] ?? '',
$matches[9] ?? '' $matches[9] ?? ''
); );
@@ -232,15 +232,8 @@ class Elements
* @param string $class style sheet * @param string $class style sheet
* @return string correct string for url href process * @return string correct string for url href process
*/ */
private static function createUrl( private static function createUrl($href, $atag, $_1, $_2, $_3, $name, $class): string
string $href, {
string $atag,
string $_1,
string $_2,
string $_3,
string $name,
string $class
): string {
// $this->debug('URL', "1: $_1 - 2: $_2 - $_3 - atag: $atag - name: $name - class: $class"); // $this->debug('URL', "1: $_1 - 2: $_2 - $_3 - atag: $atag - name: $name - class: $class");
// if $_1 ends with //, then we strip $_1 complete & target is also blanked (its an internal link) // if $_1 ends with //, then we strip $_1 complete & target is also blanked (its an internal link)
if (preg_match("/\/\/$/", $_1) && preg_match("/^\//", $_2)) { if (preg_match("/\/\/$/", $_1) && preg_match("/^\//", $_2)) {
@@ -257,8 +250,11 @@ class Elements
. "##GT##" . ($name ? $name : $_2 . $_3) . "##LT##/a##GT##"; . "##GT##" . ($name ? $name : $_2 . $_3) . "##LT##/a##GT##";
} elseif ($href && !$atag) { } elseif ($href && !$atag) {
return "href=##QUOT##$_1$_2$_3##QUOT##"; return "href=##QUOT##$_1$_2$_3##QUOT##";
} elseif ($atag) {
return $atag . $_2 . $_3;
} else {
return $href;
} }
return $atag . $_2 . $_3;
} }
/** /**
@@ -273,15 +269,8 @@ class Elements
* @param string $class style sheet * @param string $class style sheet
* @return string created html email a href string * @return string created html email a href string
*/ */
private static function createEmail( private static function createEmail($mailto, $atag, $_1, $_2, $_3, $title, $class)
string $mailto, {
string $atag,
string $_1,
string $_2,
string $_3,
string $title,
string $class
): string {
$email = $_1 . "@" . $_2 . "." . $_3; $email = $_1 . "@" . $_2 . "." . $_3;
if (!$mailto && !$atag) { if (!$mailto && !$atag) {
return "##LT##a href=##QUOT##mailto:" . $email . "##QUOT##" return "##LT##a href=##QUOT##mailto:" . $email . "##QUOT##"
@@ -289,8 +278,12 @@ class Elements
. "##GT##" . ($title ? $title : $email) . "##LT##/a##GT##"; . "##GT##" . ($title ? $title : $email) . "##LT##/a##GT##";
} elseif ($mailto && !$atag) { } elseif ($mailto && !$atag) {
return "mailto:" . $email; return "mailto:" . $email;
} elseif ($atag) {
return $atag . $email;
} else {
// else just return email as is
return $email;
} }
return $atag . $email;
} }
} }
+8 -11
View File
@@ -954,10 +954,11 @@ class Curl implements Interface\RequestsInterface
) )
) { ) {
unset($this->config['headers'][$header_key]); unset($this->config['headers'][$header_key]);
unset($this->headers_named[strtolower($header_key)]); unset($this->headers_named[$header_key]);
} elseif ( } elseif (
// right side is array, and value is anything string or array // string value, array keys = in
// if right side is string, and we give value array, we do nothing // or both array and not a full match in the one before
(is_string($value) || is_array($value)) &&
is_array($this->config['headers'][$header_key]) is_array($this->config['headers'][$header_key])
) { ) {
// part remove of key, value must be array // part remove of key, value must be array
@@ -965,14 +966,10 @@ class Curl implements Interface\RequestsInterface
$value = [$value]; $value = [$value];
} }
// array values so we rewrite the key pos // array values so we rewrite the key pos
/** @var array<int|string,string> $headers */ $this->config['headers'][$header_key] = array_values(array_diff(
$headers = $this->config['headers'][$header_key]; $this->config['headers'][$header_key],
$this->config['headers'][$header_key] = array_values( $value
array_diff( ));
$headers,
$value
)
);
} }
} }
} }