Compare commits
42 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a80b28553 | ||
|
|
2c5fcd973f | ||
|
|
4515a5fdd1 | ||
|
|
f04487d553 | ||
|
|
d068aaeed7 | ||
|
|
b628331a9b | ||
|
|
3035287b5c | ||
|
|
cb17b553b0 | ||
|
|
448b54f5c1 | ||
|
|
e80915cd5c | ||
|
|
4ae1c2bde0 | ||
|
|
ee6e0581da | ||
|
|
70a30c3182 | ||
|
|
9d54d6b0d1 | ||
|
|
a46888d101 | ||
|
|
be092fc449 | ||
|
|
6059b83637 | ||
|
|
b6c6d76b43 | ||
|
|
80993a06ac | ||
|
|
50073479d4 | ||
|
|
85f701ab2a | ||
|
|
519de8a23c | ||
|
|
d5fdb22e93 | ||
|
|
0ec0007569 | ||
|
|
7165a50b4d | ||
|
|
71ee80fa06 | ||
|
|
bb5276ee44 | ||
|
|
9c242ed1b9 | ||
|
|
0fcbe91ea2 | ||
|
|
ee4417fc52 | ||
|
|
ee1dafd8d8 | ||
|
|
96104095d0 | ||
|
|
a311552c56 | ||
|
|
f694539a0b | ||
|
|
2f1388494f | ||
|
|
06fe9657e2 | ||
|
|
d4e5f92277 | ||
|
|
b2c0a57924 | ||
|
|
5522348c8a | ||
|
|
ed01d248ec | ||
|
|
899ddc011c | ||
|
|
a86eaf0f02 |
@@ -109,8 +109,9 @@ return [
|
||||
// ignore the old qq tests
|
||||
'www/admin/qq_file_upload_front.php',
|
||||
'www/admin/qq_file_upload_ajax.php',
|
||||
// symlink files for msarty
|
||||
// symlink ignore
|
||||
'www/lib/smarty-3.1.30/SmartyBC.class.php',
|
||||
'www/lib/htmlMimeMail-2.5.1/HtmlMimeMailCreate.php',
|
||||
],
|
||||
|
||||
// what not to show as problem
|
||||
|
||||
@@ -4,7 +4,7 @@ function/set_generic.sql
|
||||
function/random_string.sql
|
||||
function/set_edit_generic.sql
|
||||
function/edit_set_access_uid.sql
|
||||
function/edit_log_partition_trigger.sql
|
||||
function/edit_log_partition_insert.sql
|
||||
# generic tables
|
||||
table/edit_temp_files.sql
|
||||
table/edit_generic.sql
|
||||
@@ -22,6 +22,7 @@ table/edit_page_access.sql
|
||||
table/edit_page_content.sql
|
||||
table/edit_user.sql
|
||||
table/edit_log.sql
|
||||
table/edit_log_overflow.sql
|
||||
table/edit_access.sql
|
||||
table/edit_access_user.sql
|
||||
table/edit_access_data.sql
|
||||
@@ -30,9 +31,9 @@ trigger/trg_edit_access_right.sql
|
||||
trigger/trg_edit_access.sql
|
||||
trigger/trg_edit_access_data.sql
|
||||
trigger/trg_edit_access_user.sql
|
||||
trigger/trg_edit_generic.sql
|
||||
trigger/trg_edit_group.sql
|
||||
trigger/trg_edit_language.sql
|
||||
trigger/trg_edit_log_overflow.sql
|
||||
trigger/trg_edit_log.sql
|
||||
trigger/trg_edit_page_access.sql
|
||||
trigger/trg_edit_page_content.sql
|
||||
@@ -42,6 +43,5 @@ trigger/trg_edit_scheme.sql
|
||||
trigger/trg_edit_user.sql
|
||||
trigger/trg_edit_visible_group.sql
|
||||
trigger/trg_edit_menu_group.sql
|
||||
trigger/trg_set_edit_access_uid.sql
|
||||
# insert data
|
||||
data/edit_tables.sql
|
||||
|
||||
@@ -15,22 +15,20 @@ function_name="set_generic";
|
||||
#sql_path_prep=`echo $sql_path | sed -e "s/\///g"`;
|
||||
|
||||
# goes for each file and strips headers and endings, and creates trigger name
|
||||
for name in $sql_path*;
|
||||
do
|
||||
for name in $sql_path*; do
|
||||
echo "Wokring on $name";
|
||||
# strip ending
|
||||
# t_name=`echo $name | sed -e 's/.sql$//g' | sed -e "s/^$sql_path_prep//g" | sed -e 's/\///g'`;
|
||||
t_name=`echo $name | sed -e 's/^.*\///g' | sed -e 's/.sql$//g'`;
|
||||
# clean all beginnings
|
||||
for prefix in $file_prefix;
|
||||
do
|
||||
for prefix in $file_prefix; do
|
||||
prefix=$prefix"_";
|
||||
t_name=`echo $t_name | sed -e "s/\$prefix//g"`;
|
||||
done;
|
||||
|
||||
# those tables don't need a trigger
|
||||
# edit_generic
|
||||
# generic
|
||||
# those tables don't need a trigger
|
||||
# edit_generic
|
||||
# generic
|
||||
|
||||
# copy the trigger template to the target
|
||||
trg_filename=$trigger_path$trigger_prefix"_"$t_name".sql";
|
||||
|
||||
@@ -14,17 +14,14 @@ file_prefix="trg";
|
||||
trigger_prefix="trg";
|
||||
index_prefix="idx";
|
||||
|
||||
for file in `cat ORDER`;
|
||||
do
|
||||
if [ -f $file ];
|
||||
then
|
||||
for file in `cat ORDER`; do
|
||||
if [ -f $file ]; then
|
||||
# write them into a var, so we can re order them in the other way
|
||||
new_order=$file" "$new_order;
|
||||
fi;
|
||||
done;
|
||||
|
||||
for file in $new_order;
|
||||
do
|
||||
for file in $new_order; do
|
||||
sqltype=`echo $file | egrep "table/"`;
|
||||
trgtype=`echo $file | egrep "trigger/"`;
|
||||
idxtype=`echo $file | egrep "index/"`;
|
||||
@@ -32,43 +29,34 @@ do
|
||||
datatype=`echo $file | egrep "data/"`;
|
||||
# remove all around to get table name
|
||||
t_file=`echo $file | sed -e 's/^.*\///g' | sed -e 's/.sql$//g'`;
|
||||
for prefix in $file_prefix;
|
||||
do
|
||||
for prefix in $file_prefix; do
|
||||
prefix=$prefix"_";
|
||||
t_file=`echo $t_file | sed -e "s/\$prefix//g"`;
|
||||
done;
|
||||
# copy the trigger template to the target
|
||||
|
||||
for path in $schemas;
|
||||
do
|
||||
if [ $sqltype ];
|
||||
then
|
||||
for path in $schemas; do
|
||||
if [ $sqltype ]; then
|
||||
echo "SQL "$path"."$t_file;
|
||||
echo "DROP TABLE "$path"."$t_file" CASCADE;" | psql -U $user -h $host $db
|
||||
fi;
|
||||
if [ $trgtype ];
|
||||
then
|
||||
if [ $trgtype ]; then
|
||||
trigger=$trigger_prefix"_"$t_file;
|
||||
echo "TRG $trigger TBL "$path".$t_file";
|
||||
echo "DROP TRIGGER "$path".$trigger ON "$t_file" CASCADE;" | psql -U $user -h $host $db
|
||||
fi;
|
||||
if [ $fcttype ];
|
||||
then
|
||||
if [ $fcttype ]; then
|
||||
echo "FCT "$path"."$t_file;
|
||||
echo "DROP FUNCTION "$path"."$t_file"();" | psql -U $user -h $host $db
|
||||
fi;
|
||||
if [ $idxtype ];
|
||||
then
|
||||
if [ $idxtype ]; then
|
||||
index=$index_prefix"_"$t_file;
|
||||
# echo "IDX "$t_file;
|
||||
# echo "DROP INDEX $index ON $t_file;" | psql -U $user -h $host $db
|
||||
# echo "IDX "$t_file;
|
||||
# echo "DROP INDEX $index ON $t_file;" | psql -U $user -h $host $db
|
||||
fi;
|
||||
if [ $datatype ];
|
||||
then
|
||||
if [ $datatype ]; then
|
||||
echo "DATA "$t_file;
|
||||
# echo "DROP FUNCTION "$t_file"();" | psql -U $user -h $host $db
|
||||
# echo "DROP FUNCTION "$t_file"();" | psql -U $user -h $host $db
|
||||
fi;
|
||||
|
||||
# psql -U cms_user -h 192.168.12.14 -f $file CMSv2
|
||||
done;
|
||||
done;
|
||||
|
||||
28
4dev/database/function/edit_set_group_uid.sql
Executable file
28
4dev/database/function/edit_set_group_uid.sql
Executable file
@@ -0,0 +1,28 @@
|
||||
-- add uid add for edit_group table
|
||||
|
||||
CREATE OR REPLACE FUNCTION set_edit_group_uid() RETURNS TRIGGER AS
|
||||
$$
|
||||
DECLARE
|
||||
myrec RECORD;
|
||||
v_uid VARCHAR;
|
||||
BEGIN
|
||||
-- skip if NEW.name is not set
|
||||
IF NEW.name IS NOT NULL AND NEW.name <> '' THEN
|
||||
-- use NEW.name as base, remove all spaces
|
||||
-- name data is already unique, so we do not need to worry about this here
|
||||
v_uid := REPLACE(NEW.name, ' ', '');
|
||||
IF TG_OP = 'INSERT' THEN
|
||||
-- always set
|
||||
NEW.uid := v_uid;
|
||||
ELSIF TG_OP = 'UPDATE' THEN
|
||||
-- check if not set, then set
|
||||
SELECT INTO myrec t.* FROM edit_group t WHERE edit_group_id = NEW.edit_group_id;
|
||||
IF FOUND THEN
|
||||
NEW.uid := v_uid;
|
||||
END IF;
|
||||
END IF;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$
|
||||
LANGUAGE 'plpgsql';
|
||||
0
4dev/database/function/random_string.sql
Executable file → Normal file
0
4dev/database/function/random_string.sql
Executable file → Normal file
0
4dev/database/function/set_uid.sql
Executable file → Normal file
0
4dev/database/function/set_uid.sql
Executable file → Normal file
2
4dev/database/log/.gitignore
vendored
Normal file
2
4dev/database/log/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -9,8 +9,8 @@
|
||||
CREATE TABLE edit_access_data (
|
||||
edit_access_data_id SERIAL PRIMARY KEY,
|
||||
edit_access_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
name VARCHAR,
|
||||
value VARCHAR,
|
||||
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
value VARCHAR
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
CREATE TABLE edit_access_user (
|
||||
edit_access_user_id SERIAL PRIMARY KEY,
|
||||
edit_access_id INT NOT NULL,
|
||||
edit_user_id INT NOT NULL,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
edit_default SMALLINT DEFAULT 0,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_user_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_default SMALLINT DEFAULT 0,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
CREATE TABLE edit_group (
|
||||
edit_group_id SERIAL PRIMARY KEY,
|
||||
edit_scheme_id INT,
|
||||
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
deleted SMALLINT DEFAULT 0,
|
||||
uid VARCHAR,
|
||||
name VARCHAR,
|
||||
additional_acl JSONB,
|
||||
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
additional_acl JSONB
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
-- DROP TABLE edit_log;
|
||||
CREATE TABLE edit_log (
|
||||
edit_log_id SERIAL PRIMARY KEY,
|
||||
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
||||
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
|
||||
username VARCHAR,
|
||||
password VARCHAR,
|
||||
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
@@ -26,7 +28,6 @@ CREATE TABLE edit_log (
|
||||
action_value VARCHAR,
|
||||
action_type VARCHAR,
|
||||
action_error VARCHAR,
|
||||
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
||||
user_agent VARCHAR,
|
||||
referer VARCHAR,
|
||||
script_name VARCHAR,
|
||||
@@ -36,6 +37,5 @@ CREATE TABLE edit_log (
|
||||
http_accept VARCHAR,
|
||||
http_accept_charset VARCHAR,
|
||||
http_accept_encoding VARCHAR,
|
||||
session_id VARCHAR,
|
||||
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL
|
||||
session_id VARCHAR
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
0
4dev/database/table/edit_log_overflow.sql
Executable file → Normal file
0
4dev/database/table/edit_log_overflow.sql
Executable file → Normal file
@@ -9,6 +9,7 @@
|
||||
CREATE TABLE edit_page (
|
||||
edit_page_id SERIAL PRIMARY KEY,
|
||||
content_alias_edit_page_id INT, -- alias for page content, if the page content is defined on a different page, ege for ajax backend pages
|
||||
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
filename VARCHAR,
|
||||
name VARCHAR UNIQUE,
|
||||
order_number INT NOT NULL,
|
||||
@@ -17,6 +18,5 @@ CREATE TABLE edit_page (
|
||||
popup SMALLINT NOT NULL DEFAULT 0,
|
||||
popup_x SMALLINT,
|
||||
popup_y SMALLINT,
|
||||
hostname VARCHAR,
|
||||
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
hostname VARCHAR
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
CREATE TABLE edit_page_access (
|
||||
edit_page_access_id SERIAL PRIMARY KEY,
|
||||
edit_group_id INT NOT NULL,
|
||||
edit_page_id INT NOT NULL,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_page_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
|
||||
|
||||
6
4dev/database/table/edit_page_content.sql
Executable file → Normal file
6
4dev/database/table/edit_page_content.sql
Executable file → Normal file
@@ -10,11 +10,11 @@
|
||||
CREATE TABLE edit_page_content (
|
||||
edit_page_content_id SERIAL PRIMARY KEY,
|
||||
edit_page_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
uid VARCHAR UNIQUE,
|
||||
name VARCHAR,
|
||||
order_number INT NOT NULL,
|
||||
online SMALLINT NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
online SMALLINT NOT NULL DEFAULT 0
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
-- DROP TABLE edit_page_menu_group;
|
||||
CREATE TABLE edit_page_menu_group (
|
||||
edit_page_id INT NOT NULL,
|
||||
edit_menu_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_menu_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_menu_group_id) REFERENCES edit_menu_group (edit_menu_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
-- DROP TABLE edit_page_visible_group;
|
||||
CREATE TABLE edit_page_visible_group (
|
||||
edit_page_id INT NOT NULL,
|
||||
edit_visible_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_visible_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_visible_group_id) REFERENCES edit_visible_group (edit_visible_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
CREATE TABLE edit_query_string (
|
||||
edit_query_string_id SERIAL PRIMARY KEY,
|
||||
edit_page_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
name VARCHAR,
|
||||
value VARCHAR,
|
||||
dynamic SMALLINT NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
dynamic SMALLINT NOT NULL DEFAULT 0
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -9,10 +9,15 @@
|
||||
CREATE TABLE edit_user (
|
||||
edit_user_id SERIAL PRIMARY KEY,
|
||||
connect_edit_user_id INT, -- possible reference to other user
|
||||
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_language_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_group_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_scheme_id INT,
|
||||
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
deleted SMALLINT NOT NULL DEFAULT 0,
|
||||
username VARCHAR UNIQUE,
|
||||
@@ -26,17 +31,18 @@ CREATE TABLE edit_user (
|
||||
email VARCHAR,
|
||||
protected SMALLINT NOT NULL DEFAULT 0,
|
||||
admin SMALLINT NOT NULL DEFAULT 0,
|
||||
login_error_count INT,
|
||||
last_login TIMESTAMP WITHOUT TIME ZONE,
|
||||
login_error_count INT DEFAULT 0,
|
||||
login_error_date_last TIMESTAMP WITHOUT TIME ZONE,
|
||||
login_error_date_first TIMESTAMP WITHOUT TIME ZONE,
|
||||
strict SMALLINT DEFAULT 0,
|
||||
locked SMALLINT DEFAULT 0,
|
||||
password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed
|
||||
password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval
|
||||
additional_acl JSONB, -- additional ACL as JSON string (can be set by other pages)
|
||||
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
password_reset_time TIMESTAMP WITHOUT TIME ZONE, -- when the password reset was requested
|
||||
password_reset_uid VARCHAR, -- the uid to access the password reset page
|
||||
additional_acl JSONB -- additional ACL as JSON string (can be set by other pages)
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
COMMENT ON COLUMN edit_user.password_reset_time IS 'When the password reset was requested. For reset page uid valid check';
|
||||
COMMENT ON COLUMN edit_user.password_reset_uid IS 'Password reset page uid';
|
||||
|
||||
@@ -2,3 +2,8 @@ DROP TRIGGER IF EXISTS trg_edit_group ON edit_group;
|
||||
CREATE TRIGGER trg_edit_group
|
||||
BEFORE INSERT OR UPDATE ON edit_group
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_set_edit_group_uid ON edit_group;
|
||||
CREATE TRIGGER trg_set_edit_group_uid
|
||||
BEFORE INSERT OR UPDATE ON edit_group
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_group_uid();
|
||||
|
||||
0
4dev/database/trigger/trg_edit_log_overflow.sql
Executable file → Normal file
0
4dev/database/trigger/trg_edit_log_overflow.sql
Executable file → Normal file
0
4dev/database/trigger/trg_edit_page_content.sql
Executable file → Normal file
0
4dev/database/trigger/trg_edit_page_content.sql
Executable file → Normal file
0
4dev/database/update/edit_tables_missing_columns.sql
Executable file → Normal file
0
4dev/database/update/edit_tables_missing_columns.sql
Executable file → Normal file
0
4dev/database/update/edit_update_missing_cuid.sql
Executable file → Normal file
0
4dev/database/update/edit_update_missing_cuid.sql
Executable file → Normal file
17
phpstan.neon
17
phpstan.neon
@@ -5,14 +5,17 @@ parameters:
|
||||
level: 1
|
||||
paths:
|
||||
- %currentWorkingDirectory%/www
|
||||
#bootstrap: %currentWorkingDirectory%/phpstan-bootstrap.php
|
||||
#bootstrap: phpstan-bootstrap.php
|
||||
autoload_directories:
|
||||
autoload_files:
|
||||
bootstrapFiles:
|
||||
- %currentWorkingDirectory%/phpstan-bootstrap.php
|
||||
scanDirectories:
|
||||
- www/lib/Smarty
|
||||
scanFiles:
|
||||
- www/configs/config.php
|
||||
- www/configs/config.master.php
|
||||
- www/lib/autoloader.php
|
||||
- www/vendor/autoload.php
|
||||
- www/lib/Smarty/Autoloader.php
|
||||
- www/lib/CoreLibs/Template/SmartyExtend.php
|
||||
excludes_analyse:
|
||||
# no check admin
|
||||
- www/admin/qq_file_upload_front.php
|
||||
@@ -40,10 +43,12 @@ parameters:
|
||||
- www/tmp
|
||||
- www/lib/pChart
|
||||
- www/lib/pChart2.1.4
|
||||
- www/lib/Smarty/
|
||||
- www/lib/smarty-3.1.30/
|
||||
- www/lib/Smarty
|
||||
- www/lib/smarty-3.1.30
|
||||
# ignore composer
|
||||
- www/vendor
|
||||
# ignore the smartyextend
|
||||
- www/lib/CoreLibs/Template/SmartyExtend.php
|
||||
# ignore errores with
|
||||
# ignoreErrors:
|
||||
#- 'error regex'
|
||||
|
||||
105
www/admin/class_test.array.php
Normal file
105
www/admin/class_test.array.php
Normal file
@@ -0,0 +1,105 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-array';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Combined\ArrayHandler;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
// $_array= new CoreLibs\Combined\ArrayHandler();
|
||||
// $array_class = 'CoreLibs\Combination\ArrayHandler';
|
||||
|
||||
print "<html><head><title>TEST CLASS: ARRAY HANDLER</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
// recursive array search
|
||||
$test_array = [
|
||||
'foo' => 'bar',
|
||||
'input' => [
|
||||
'element_a' => [
|
||||
'type' => 'text'
|
||||
],
|
||||
'element_b' => [
|
||||
'type' => 'email'
|
||||
],
|
||||
'element_c' => [
|
||||
'type' => 'email'
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
echo "SOURCE ARRAY: ".DgS::printAr($test_array)."<br>";
|
||||
// frist return
|
||||
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>";
|
||||
// all return
|
||||
echo "ARRAYSEARCHRECURSIVEALL(email, [array], type): ".Dgs::printAr((array)ArrayHandler::arraySearchRecursiveAll('email', $test_array, 'type'))."<br>";
|
||||
|
||||
// simple search
|
||||
echo "ARRAYSEARCHSIMPLE([array], type, email): ".(string)ArrayHandler::arraySearchSimple($test_array, 'type', 'email')."<br>";
|
||||
|
||||
$array_1 = [
|
||||
'foo' => 'bar'
|
||||
];
|
||||
$array_2 = [
|
||||
1, 2, 3
|
||||
];
|
||||
$array_3 = [
|
||||
'alpha' => [
|
||||
'beta' => 4
|
||||
]
|
||||
];
|
||||
// recusrice merge
|
||||
print "ARRAYMERGERECURSIVE: ".DgS::printAr(ArrayHandler::arrayMergeRecursive($array_1, $array_2, $array_3))."<br>";
|
||||
// array difference
|
||||
$array_left = [
|
||||
'same' => 'data',
|
||||
'left' => 'Has L'
|
||||
];
|
||||
$array_right = [
|
||||
'same' => 'data',
|
||||
'right' => 'has R'
|
||||
];
|
||||
print "ARRAYDIFF: ".DgS::printAr(ArrayHandler::arrayDiff($array_left, $array_right))."<br>";
|
||||
// in array check
|
||||
print "INARRAYANY([1,3], [array]): ".DgS::printAr(ArrayHandler::inArrayAny([1, 3], $array_2))."<br>";
|
||||
// flatten array
|
||||
print "FLATTENARRAY: ".DgS::printAr(ArrayHandler::flattenArray($test_array))."<br>";
|
||||
print "FLATTENARRAYKEY: ".DgS::printAr(ArrayHandler::flattenArrayKey($test_array))."<br>";
|
||||
// flatten for key set
|
||||
print "ARRAYFLATFORKEY: ".DgS::printAr(ArrayHandler::arrayFlatForKey($test_array, 'type'))."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
// print "ARRAYMERGERECURSIVE: ".DgS::printAr($basic->arrayMergeRecursive($array_1, $array_2, $array_3))."<br>";
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
95
www/admin/class_test.byte.php
Normal file
95
www/admin/class_test.byte.php
Normal file
@@ -0,0 +1,95 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-byte';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Byte;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$byte_class = 'CoreLibs\Convert\Byte';
|
||||
|
||||
print "<html><head><title>TEST CLASS: BYTE CONVERT</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
// class
|
||||
$byte = 254779258;
|
||||
$string = '242.98 MB';
|
||||
// static
|
||||
print "S::BYTE TO: $byte: ".$byte_class::humanReadableByteFormat($byte)."<br>";
|
||||
print "S::BYTE FROM: $string: ".$byte_class::stringByteFormat($string)."<br>";
|
||||
|
||||
// *** BYTES TEST ***
|
||||
$bytes = array(
|
||||
-123123123,
|
||||
999999, // KB-1
|
||||
999999999, // MB-1
|
||||
254779258, // MB-n
|
||||
999999999999999, // TB-1
|
||||
588795544887632, // TB-n
|
||||
999999999999999999, // PB-1
|
||||
9223372036854775807, // MAX INT
|
||||
999999999999999999999, // EB-1
|
||||
);
|
||||
print "<b>BYTE FORMAT TESTS</b><br>";
|
||||
foreach ($bytes as $byte) {
|
||||
print '<div style="display: flex; border-bottom: 1px dashed gray;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "(".number_format($byte)."/".$byte.") bytes :";
|
||||
$_bytes = Byte::humanReadableByteFormat($byte);
|
||||
print '</div><div style="width: 10%;">'.$_bytes;
|
||||
print '</div><div style="width: 10%;">';
|
||||
print Byte::stringByteFormat($_bytes);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
//
|
||||
print '<div style="display: flex; border-bottom: 1px dotted red;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "bytes [si]:";
|
||||
$_bytes = Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_SI);
|
||||
print '</div><div style="width: 10%;">'.$_bytes;
|
||||
print '</div><div style="width: 10%;">';
|
||||
print Byte::stringByteFormat($_bytes);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
}
|
||||
|
||||
// DEPRECATED
|
||||
/* $byte = 254779258;
|
||||
$string = '242.98 MB';
|
||||
print "BYTE TO: $byte: ".$basic->humanReadableByteFormat($byte)."<br>";
|
||||
print "BYTE FROM: $string: ".$basic->stringByteFormat($string)."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
66
www/admin/class_test.colors.php
Normal file
66
www/admin/class_test.colors.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-colors';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Colors;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$color_class = 'CoreLibs\Convert\Colors';
|
||||
|
||||
print "<html><head><title>TEST CLASS: COLORS</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
// A(out of bounds)
|
||||
print "C::S/COLOR invalid rgb->hex (gray 125): -1, -1, -1: ".CoreLibs\Convert\Colors::rgb2hex(-1, -1, -1)."<br>";
|
||||
print "\$C::S/COLOR invalid rgb->hex (gary 125): -1, -1, -1: ".$color_class::rgb2hex(-1, -1, -1)."<br>";
|
||||
// B(valid)
|
||||
$rgb = [10, 20, 30];
|
||||
$hex = '#0a141e';
|
||||
$hsb = [210, 67, 12];
|
||||
$hsl = [210, 50, 7.8];
|
||||
print "S::COLOR rgb->hex: $rgb[0], $rgb[1], $rgb[2]: ".Colors::rgb2hex($rgb[0], $rgb[1], $rgb[2])."<br>";
|
||||
print "S::COLOR hex->rgb: $hex: ".DgS::printAr(Colors::hex2rgb($hex))."<br>";
|
||||
print "C::S/COLOR rgb->hext: $hex: ".DgS::printAr(CoreLibs\Convert\Colors::hex2rgb($hex))."<br>";
|
||||
// C(to hsb/hsl)
|
||||
print "S::COLOR rgb->hsb: $rgb[0], $rgb[1], $rgb[2]: ".DgS::printAr(Colors::rgb2hsb($rgb[0], $rgb[1], $rgb[2]))."<br>";
|
||||
print "S::COLOR rgb->hsl: $rgb[0], $rgb[1], $rgb[2]: ".DgS::printAr(Colors::rgb2hsl($rgb[0], $rgb[1], $rgb[2]))."<br>";
|
||||
// D(from hsb/hsl) Note that param 2 + 3 is always 0-100 divided
|
||||
print "S::COLOR hsb->rgb: $hsb[0], $hsb[1], $hsb[2]: ".DgS::printAr(Colors::hsb2rgb($hsb[0], $hsb[1], $hsb[2]))."<br>";
|
||||
print "S::COLOR hsl->rgb: $hsl[0], $hsl[1], $hsl[2]: ".DgS::printAr(Colors::hsl2rgb($hsl[0], $hsl[1], $hsl[2]))."<br>";
|
||||
|
||||
// TODO: run compare check input must match output
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
149
www/admin/class_test.datetime.php
Normal file
149
www/admin/class_test.datetime.php
Normal file
@@ -0,0 +1,149 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-datetime';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Combined\DateTime;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$datetime_class = 'CoreLibs\Combination\DateTime';
|
||||
|
||||
print "<html><head><title>TEST CLASS: DATE/TIME</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
// class
|
||||
$timestamp = 1622788315.123456;
|
||||
// static
|
||||
print "S::DATESTRINGFORMAT(sm:0): $timestamp: ".$datetime_class::dateStringFormat($timestamp)."<br>";
|
||||
|
||||
// time string thest
|
||||
$timestamp = 5887998.33445;
|
||||
$time_string = DateTime::timeStringFormat($timestamp);
|
||||
print "PLANE TIME STRING: ".$timestamp."<br>";
|
||||
print "TIME STRING TEST: ".$time_string."<br>";
|
||||
print "REVERSE TIME STRING: ".DateTime::stringToTime($time_string)."<br>";
|
||||
if (round($timestamp, 4) == DateTime::stringToTime($time_string)) {
|
||||
print "REVERSE TIME STRING MATCH<br>";
|
||||
} else {
|
||||
print "REVERSE TRIME STRING DO NOT MATCH<br>";
|
||||
}
|
||||
print "ZERO TIME STRING: ".DateTime::timeStringFormat(0, true)."<br>";
|
||||
print "ZERO TIME STRING: ".DateTime::timeStringFormat(0.0, true)."<br>";
|
||||
print "ZERO TIME STRING: ".DateTime::timeStringFormat(1.005, true)."<br>";
|
||||
|
||||
$timestamps = [
|
||||
1622788315.123456,
|
||||
-1622788315.456789
|
||||
];
|
||||
foreach ($timestamps as $timestamp) {
|
||||
print "DATESTRINGFORMAT(sm:0): $timestamp: ".DateTime::dateStringFormat($timestamp)."<br>";
|
||||
print "DATESTRINGFORMAT(sm:1): $timestamp: ".DateTime::dateStringFormat($timestamp, true)."<br>";
|
||||
}
|
||||
$intervals = [
|
||||
788315.123456,
|
||||
-123.456
|
||||
];
|
||||
foreach ($intervals as $interval) {
|
||||
print "TIMESTRINGFORMAT(sm:0): $interval: ".DateTime::timeStringFormat($interval, false)."<br>";
|
||||
$reverse_interval = DateTime::timeStringFormat($interval);
|
||||
print "TIMESTRINGFORMAT(sm:1): $interval: ".$reverse_interval."<br>";
|
||||
print "STRINGTOTIME: $reverse_interval: ".DateTime::stringToTime($reverse_interval)."<br>";
|
||||
}
|
||||
$check_dates = [
|
||||
'2021-05-01',
|
||||
'2021-05-40'
|
||||
];
|
||||
foreach ($check_dates as $check_date) {
|
||||
print "CHECKDATE: $check_date: ".(string)DateTime::checkDate($check_date)."<br>";
|
||||
}
|
||||
$check_datetimes = [
|
||||
'2021-05-01',
|
||||
'2021-05-40',
|
||||
'2021-05-01 12:13:14',
|
||||
'2021-05-40 12:13:14',
|
||||
'2021-05-01 25:13:14',
|
||||
];
|
||||
foreach ($check_datetimes as $check_datetime) {
|
||||
print "CHECKDATETIME: $check_datetime: ".(string)DateTime::checkDateTime($check_datetime)."<br>";
|
||||
}
|
||||
$compare_dates = [
|
||||
[ '2021-05-01', '2021-05-02', ],
|
||||
[ '2021-05-02', '2021-05-01', ],
|
||||
[ '2021-05-02', '2021-05-02', ],
|
||||
[ '2017/1/5', '2017-01-05', ],
|
||||
];
|
||||
// compareDate
|
||||
foreach ($compare_dates as $compare_date) {
|
||||
print "COMPAREDATE: $compare_date[0] = $compare_date[1]: ".(string)DateTime::compareDate($compare_date[0], $compare_date[1])."<br>";
|
||||
}
|
||||
$compare_datetimes = [
|
||||
[ '2021-05-01', '2021-05-02', ],
|
||||
[ '2021-05-02', '2021-05-01', ],
|
||||
[ '2021-05-02', '2021-05-02', ],
|
||||
[ '2021-05-01 10:00:00', '2021-05-01 11:00:00', ],
|
||||
[ '2021-05-01 11:00:00', '2021-05-01 10:00:00', ],
|
||||
[ '2021-05-01 10:00:00', '2021-05-01 10:00:00', ],
|
||||
];
|
||||
foreach ($compare_datetimes as $compare_datetime) {
|
||||
print "COMPAREDATE: $compare_datetime[0] = $compare_datetime[1]: ".(string)DateTime::compareDateTime($compare_datetime[0], $compare_datetime[1])."<br>";
|
||||
}
|
||||
$compare_dates = [
|
||||
[ '2021-05-01', '2021-05-10', ],
|
||||
[ '2021-05-10', '2021-05-01', ],
|
||||
[ '2021-05-02', '2021-05-01', ],
|
||||
[ '2021-05-02', '2021-05-02', ],
|
||||
];
|
||||
foreach ($compare_dates as $compare_date) {
|
||||
print "CALCDAYSINTERVAL: $compare_date[0] = $compare_date[1]: ".DgS::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1]))."<br>";
|
||||
print "CALCDAYSINTERVAL(named): $compare_date[0] = $compare_date[1]: ".DgS::printAr(DateTime::calcDaysInterval($compare_date[0], $compare_date[1], true))."<br>";
|
||||
}
|
||||
|
||||
// DEPRECATED
|
||||
/* $timestamp = 1622788315.123456;
|
||||
print "C->DATESTRINGFORMAT(sm:0): $timestamp: ".$basic->dateStringFormat($timestamp)."<br>";
|
||||
$interval = 788315.123456;
|
||||
$reverse_interval = $basic->timeStringFormat($interval);
|
||||
print "TIMESTRINGFORMAT(sm:1): $interval: ".$reverse_interval."<br>";
|
||||
print "STRINGTOTIME: $reverse_interval: ".$basic->stringToTime($reverse_interval)."<br>";
|
||||
$check_date = '2021-05-01';
|
||||
print "CHECKDATE: $check_date: ".(string)$basic->checkDate($check_date)."<br>";
|
||||
$check_datetime = '2021-05-01 12:13:14';
|
||||
print "CHECKDATETIME: $check_datetime: ".(string)$basic->checkDateTime($check_datetime)."<br>";
|
||||
$compare_date = ['2021-05-01', '2021-05-02'];
|
||||
print "COMPAREDATE: $compare_date[0] = $compare_date[1]: ".(string)$basic->compareDate($compare_date[0], $compare_date[1])."<br>";
|
||||
$compare_datetime = ['2021-05-01 10:00:00', '2021-05-01 11:00:00'];
|
||||
print "COMPAREDATE: $compare_datetime[0] = $compare_datetime[1]: ".(string)$basic->compareDateTime($compare_datetime[0], $compare_datetime[1])."<br>";
|
||||
$compare_date = ['2021-05-01', '2021-05-10'];
|
||||
print "CALCDAYSINTERVAL(named): $compare_date[0] = $compare_date[1]: ".DgS::printAr($basic->calcDaysInterval($compare_date[0], $compare_date[1], true))."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
209
www/admin/class_test.db.php
Normal file
209
www/admin/class_test.db.php
Normal file
@@ -0,0 +1,209 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', true);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-db';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$basic = new CoreLibs\Admin\Backend(DB_CONFIG);
|
||||
|
||||
print "<html><head><title>TEST CLASS: DB</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
print "DBINFO: ".$basic->dbInfo()."<br>";
|
||||
echo "DB_CONFIG_SET constant: <pre>".print_r(DB_CONFIG, true)."</pre><br>";
|
||||
|
||||
// DB client encoding
|
||||
print "DB Client encoding: ".$basic->dbGetEncoding()."<br>";
|
||||
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test", 0, true)) {
|
||||
print "TIME: ".$res['time']."<br>";
|
||||
}
|
||||
print "CACHED DATA: <pre>".print_r($basic->cursor_ext, true)."</pre><br>";
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test")) {
|
||||
print "[CACHED] TIME: ".$res['time']."<br>";
|
||||
}
|
||||
|
||||
print "<pre>";
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO TEST ".time()."') RETURNING test");
|
||||
print "DIRECT INSERT STATUS: $status | "
|
||||
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
|
||||
// should throw deprecated error
|
||||
// $basic->getReturningExt();
|
||||
print "DIRECT INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->dbGetInsertPK()), true)."<br>";
|
||||
$basic->dbPrepare("ins_foo", "INSERT INTO foo (test) VALUES ($1)");
|
||||
$status = $basic->dbExecute("ins_foo", array('BAR TEST '.time()));
|
||||
print "PREPARE INSERT STATUS: $status | "
|
||||
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING RETURN: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
|
||||
print "PREPARE INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->dbGetInsertPK()), true)."<br>";
|
||||
// returning test with multiple entries
|
||||
// $status = $basic->db_exec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id");
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id, test");
|
||||
print "DIRECT MULTIPLE INSERT STATUS: $status | "
|
||||
."PRIMARY KEYS: ".print_r($basic->dbGetInsertPK(), true)." | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
|
||||
// no returning, but not needed ;
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO; TEST ".time()."');");
|
||||
print "DIRECT INSERT STATUS: $status | "
|
||||
."PRIMARY KEY: ".$basic->dbGetInsertPK()." | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
|
||||
// UPDATE WITH RETURNING
|
||||
$status = $basic->dbExec("UPDATE foo SET test = 'SOMETHING DIFFERENT' WHERE foo_id = 3688452 RETURNING test");
|
||||
print "UPDATE STATUS: $status | "
|
||||
."RETURNING EXT: ".print_r($basic->dbGetReturningExt(), true)." | "
|
||||
."RETURNING ARRAY: ".print_r($basic->dbGetReturningArray(), true)."<br>";
|
||||
print "</pre>";
|
||||
|
||||
// REEAD PREPARE
|
||||
if ($basic->dbPrepare('sel_foo', "SELECT foo_id, test, some_bool, string_a, number_a, number_a_numeric, some_time FROM foo ORDER BY foo_id DESC LIMIT 5") === false) {
|
||||
print "Error in sel_foo prepare<br>";
|
||||
} else {
|
||||
$max_rows = 6;
|
||||
// do not run this in dbFetchArray directly as
|
||||
// dbFetchArray(dbExecute(...))
|
||||
// this will end in an endless loop
|
||||
$cursor = $basic->dbExecute('sel_foo', []);
|
||||
$i = 1;
|
||||
while (($res = $basic->dbFetchArray($cursor, true)) !== false) {
|
||||
print "DB PREP EXEC FETCH ARR: ".$i.": <pre>".print_r($res, true)."</pre><br>";
|
||||
$i ++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# db write class test
|
||||
$table = 'foo';
|
||||
print "TABLE META DATA: ".DgS::printAr($basic->dbShowTableMetaData($table))."<br>";
|
||||
$primary_key = ''; # unset
|
||||
$db_write_table = array('test', 'string_a', 'number_a', 'some_bool');
|
||||
// $db_write_table = array('test');
|
||||
$object_fields_not_touch = array();
|
||||
$object_fields_not_update = array();
|
||||
$data = array('test' => 'BOOL TEST SOMETHING '.time(), 'string_a' => 'SOME TEXT', 'number_a' => 5);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST ON '.time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST OFF '.time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST UNSET '.time());
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
|
||||
// return Array Test
|
||||
$query = "SELECT type, sdate, integer FROM foobar";
|
||||
$data = $basic->dbReturnArray($query, true);
|
||||
print "Full foobar list: <br><pre>".print_r($data, true)."</pre><br>";
|
||||
|
||||
# async test queries
|
||||
/* $basic->dbExecAsync("SELECT test FROM foo, (SELECT pg_sleep(10)) as sub WHERE foo_id IN (27, 50, 67, 44, 10)");
|
||||
echo "WAITING FOR ASYNC: ";
|
||||
$chars = array('|', '/', '-', '\\');
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
if ((list($_, $char) = each($chars)) === FALSE)
|
||||
{
|
||||
reset($chars);
|
||||
list($_, $char) = each($chars);
|
||||
}
|
||||
print $char;
|
||||
sleep(1);
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: ".$ret."<br>";
|
||||
// while ($res = $basic->dbFetchArray($ret))
|
||||
while ($res = $basic->dbFetchArray())
|
||||
{
|
||||
echo "RES: ".$res['test']."<br>";
|
||||
}
|
||||
# test async insert
|
||||
$basic->dbExecAsync("INSERT INTO foo (Test) VALUES ('ASYNC TEST ".time()."')");
|
||||
echo "WAITING FOR ASYNC INSERT: ";
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
print ".";
|
||||
sleep(1);
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: ".$ret." | PK: ".$basic->insert_id."<br>";
|
||||
print "ASYNC PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>"; */
|
||||
|
||||
$to_db_version = '9.1.9';
|
||||
print "VERSION DB: ".$basic->dbVersion()."<br>";
|
||||
print "DB Version smaller $to_db_version: ".$basic->dbCompareVersion('<'.$to_db_version)."<br>";
|
||||
print "DB Version smaller than $to_db_version: ".$basic->dbCompareVersion('<='.$to_db_version)."<br>";
|
||||
print "DB Version equal $to_db_version: ".$basic->dbCompareVersion('='.$to_db_version)."<br>";
|
||||
print "DB Version bigger than $to_db_version: ".$basic->dbCompareVersion('>='.$to_db_version)."<br>";
|
||||
print "DB Version bigger $to_db_version: ".$basic->dbCompareVersion('>'.$to_db_version)."<br>";
|
||||
|
||||
/* $q = "SELECT FOO FRO BAR";
|
||||
// $q = "Select * from foo";
|
||||
$foo = $basic->dbExecAsync($q);
|
||||
print "[ERR] Query: ".$q."<br>";
|
||||
print "[ERR] RESOURCE: $foo<br>";
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
print "[ERR]: $ret<br>";
|
||||
sleep(5);
|
||||
} */
|
||||
|
||||
// search path check
|
||||
$q = "SHOW search_path";
|
||||
$cursor = $basic->dbExec($q);
|
||||
$data = $basic->dbFetchArray($cursor)['search_path'];
|
||||
print "RETURN DATA FOR search_path: ".$data."<br>";
|
||||
// print "RETURN DATA FOR search_path: ".DgS::printAr($data)."<br>";
|
||||
// insert something into test.schema_test and see if we get the PK back
|
||||
$status = $basic->dbExec("INSERT INTO test.schema_test (contents, id) VALUES ('TIME: ".time()."', ".rand(1, 10).")");
|
||||
print "OTHER SCHEMA INSERT STATUS: ".$status." | PK NAME: ".$basic->pk_name.", PRIMARY KEY: ".$basic->insert_id."<br>";
|
||||
|
||||
print "<b>NULL TEST DB READ</b><br>";
|
||||
$q = "SELECT uid, null_varchar, null_int FROM test_null_data WHERE uid = 'A'";
|
||||
$res = $basic->dbReturnRow($q);
|
||||
var_dump($res);
|
||||
print "RES: ".DgS::printAr($res)."<br>";
|
||||
print "ISSET: ".isset($res['null_varchar'])."<br>";
|
||||
print "EMPTY: ".empty($res['null_varchar'])."<br>";
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
138
www/admin/class_test.debug.php
Normal file
138
www/admin/class_test.debug.php
Normal file
@@ -0,0 +1,138 @@
|
||||
<?php // phpcs:ignore warning
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
// all the settings are overruled by config
|
||||
$DEBUG_ALL_OVERRIDE = true; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = false;
|
||||
$ECHO_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-debug';
|
||||
ob_end_flush();
|
||||
// override ECHO ALL FALSE
|
||||
$ECHO_ALL = true;
|
||||
|
||||
use CoreLibs\Debug\Support as DebugSupport;
|
||||
use CoreLibs\Debug\FileWriter;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$debug = new CoreLibs\Debug\Logging();
|
||||
$debug_support_class = 'CoreLibs\Debug\Support';
|
||||
$debug_logging_class = 'CoreLibs\Debug\Logging';
|
||||
|
||||
print "<html><head><title>TEST CLASS: DEBUG</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
function test()
|
||||
{
|
||||
return DebugSupport::getCallerMethod(1);
|
||||
}
|
||||
|
||||
print "S::GETCALLERMETHOD: ".DebugSupport::getCallerMethod(0)."<br>";
|
||||
print "S::GETCALLERMETHOD: ".test()."<br>";
|
||||
print "S::PRINTAR: ".DebugSupport::printAr(['Foo', 'Bar'])."<br>";
|
||||
print "V-S::PRINTAR: ".$debug_support_class::printAr(['Foo', 'Bar'])."<br>";
|
||||
|
||||
// debug
|
||||
print "C->DEBUG: ".$debug->debug('CLASS-TEST-DEBUG', 'Class Test Debug')."<br>";
|
||||
print "C->DEBUG(html): ".$debug->debug('CLASS-TEST-DEBUG', 'HTML TAG<br><b>BOLD</b>')."<br>";
|
||||
print "C->DEBUG(html,strip): ".$debug->debug('CLASS-TEST-DEBUG', 'HTML TAG<br><b>BOLD</b>', true)."<br>";
|
||||
print "C->PRINTERRORMSG: <br>".$debug->printErrorMsg()."<br>";
|
||||
echo "<b>CLASS DEBUG CALL</b><br>";
|
||||
|
||||
// @codingStandardsIgnoreLine
|
||||
class TestL
|
||||
{
|
||||
public $log;
|
||||
public function __construct()
|
||||
{
|
||||
$this->log = new CoreLibs\Debug\Logging();
|
||||
}
|
||||
public function test(string $ts = null)
|
||||
{
|
||||
print "* GETCALLERCLASS(INSIDE CLASS): ".\CoreLibs\Debug\Support::getCallerClass()."<br>";
|
||||
$this->log->debug('TESTL', 'Logging in class testL'.($ts !== null ? ': '.$ts : ''));
|
||||
$this->log->debug('TESTL', 'Some other message');
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// @codingStandardsIgnoreLine
|
||||
class TestR extends TestL
|
||||
{
|
||||
public $foo;
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
public function subTest()
|
||||
{
|
||||
print "** GETCALLERCLASS(INSIDE EXTND CLASS): ".\CoreLibs\Debug\Support::getCallerClass()."<br>";
|
||||
$this->log->debug('TESTR', 'Logging in class testR (extends testL)');
|
||||
$this->test('TESTR INSIDE');
|
||||
$this->log->debug('TESTR', 'Array: '.$this->log->prAr(['a', 'b']).', Other: '.$this->log->prAr(['a', 'b']));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$tl = new TestL();
|
||||
print "CLASS: LOG ECHO: ".(string)$tl->log->getLogLevelAll('echo')."<br>";
|
||||
print "CLASS: DEBUG: ".$tl->test()."<br>";
|
||||
print "CLASS: PRINTERRORMSG: <br>".$tl->log->printErrorMsg()."<br>";
|
||||
$tr = new TestR();
|
||||
print "CLASS: LOG ECHO: ".(string)$tr->log->getLogLevelAll('echo')."<br>";
|
||||
print "CLASS EXTEND: DEBUG/tl: ".$tr->test('TESTR OUTSIDE')."<br>";
|
||||
print "CLASS EXTEND: DEBUG/tr: ".$tr->subTest()."<br>";
|
||||
print "CLASS EXTEND: PRINTERRORMSG: <br>".$tr->log->printErrorMsg()."<br>";
|
||||
|
||||
// test attaching a logger from outside
|
||||
// @codingStandardsIgnoreLine
|
||||
class AttachOutside
|
||||
{
|
||||
public $log;
|
||||
public function __construct(object $logger_class)
|
||||
{
|
||||
$this->log = $logger_class;
|
||||
}
|
||||
public function test()
|
||||
{
|
||||
$this->log->debug('ATTACHOUTSIDE', 'A test');
|
||||
return get_class($this);
|
||||
}
|
||||
}
|
||||
$ao = new AttachOutside($basic->log);
|
||||
print "AO-CLASS: DEBUG: ".$ao->test()."<br>";
|
||||
|
||||
print "GETCALLERCLASS(NON CLASS): ".\CoreLibs\Debug\Support::getCallerClass()."<br>";
|
||||
|
||||
// fdebug
|
||||
print "S::FSETFILENAME: ".FileWriter::fsetFilename('class_test_debug_file.log')."<br>";
|
||||
print "S::FDEBUG: ".FileWriter::fdebug('CLASS TEST DEBUG FILE: '.date('Y-m-d H:i:s'))."<br>";
|
||||
|
||||
// error message
|
||||
// future DEPRECATED
|
||||
// $basic->debug('BASIC CLASS', 'Debug test');
|
||||
$basic->log->debug('BASIC CLASS', 'Debug test');
|
||||
print "BASIC PRINTERRORMSG:<br>".$basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
64
www/admin/class_test.email.php
Normal file
64
www/admin/class_test.email.php
Normal file
@@ -0,0 +1,64 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-email';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\Email;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
|
||||
print "<html><head><title>TEST CLASS: HTML/ELEMENTS</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
// regex get
|
||||
print "S::GETEMAILREGEX(0): ".Email::getEmailRegex(0)."<br>";
|
||||
print "S::GETEMAILREGEX(2): ".Email::getEmailRegex(2)."<br>";
|
||||
print "S::GETEMAILREGEX(7): ".Email::getEmailRegex(7)."<br>";
|
||||
print "S::GETEMAILREGEX(8 invalid): ".Email::getEmailRegex(8)."<br>";
|
||||
print "S::GETEMAILREGEXCHECK: ".DgS::printAr(Email::getEmailRegexCheck())."<br>";
|
||||
|
||||
$email = [
|
||||
'foo@bar.org',
|
||||
'foo@i.softbank.ne.jp'
|
||||
];
|
||||
foreach ($email as $s_email) {
|
||||
print "S::EMAIL: $s_email: ".Email::getEmailType($s_email)."<br>";
|
||||
print "S::EMAIL SHORT: $s_email: ".Email::getEmailType($s_email, true)."<br>";
|
||||
}
|
||||
// DEPRECATED
|
||||
/* foreach ($email as $s_email) {
|
||||
print "D/S-EMAIL: $s_email: ".$basic->getEmailType($s_email)."<br>";
|
||||
print "D/S-EMAIL SHORT: $s_email: ".$basic->getEmailType($s_email, true)."<br>";
|
||||
} */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
94
www/admin/class_test.encoding.php
Normal file
94
www/admin/class_test.encoding.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-encoding';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Language\Encoding;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_encoding = new CoreLibs\Language\Encoding();
|
||||
$encoding_class = 'CoreLibs\Language\Encoding';
|
||||
|
||||
print "<html><head><title>TEST CLASS: ENCODING</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
// print "Valid encoding: ".$basic->printAr(mb_list_encodings())."<br>";
|
||||
|
||||
$mime_encodes = [
|
||||
['Simple string UTF8', 'UTF-8'],
|
||||
['Simple string ISO-2022-JP-MS', 'ISO-2022-JP-MS'],
|
||||
['日本語ながい', 'UTF-8'],
|
||||
['日本語ながい', 'ISO-2022-JP-MS'],
|
||||
['日本語ながい日本語ながい日本語ながい日本語ながい日本語ながい日本語ながい日本語ながい', 'ISO-2022-JP-MS'],
|
||||
];
|
||||
foreach ($mime_encodes as $mime_encode) {
|
||||
print "__MBMIMEENCODE: $mime_encode[0]: ".Encoding::__mbMimeEncode($mime_encode[0], $mime_encode[1])."<br>";
|
||||
}
|
||||
|
||||
$enc_strings = [
|
||||
'Normal Text',
|
||||
'日本語',
|
||||
// unworkable
|
||||
''
|
||||
];
|
||||
// class
|
||||
$_encoding->setErrorChar('∴');
|
||||
foreach ($enc_strings as $_string) {
|
||||
$string = $_encoding->checkConvertEncoding($_string, 'UTF-8', 'ISO-2022-JP-MS');
|
||||
print "ENC CHECK: $_string: ".($string === false ? '-OK-' : $string)."<br>";
|
||||
print "CONV ENCODING: $_string: ".$_encoding->convertEncoding($_string, 'ISO-2022-JP')."<br>";
|
||||
print "CONV ENCODING (s): $_string: ".$_encoding->convertEncoding($_string, 'ISO-2022-JP', 'UTF-8')."<br>";
|
||||
print "CONV ENCODING (s,a-false): $_string: ".$_encoding->convertEncoding($_string, 'ISO-2022-JP', 'UTF-8', false)."<br>";
|
||||
}
|
||||
print "ERROR CHAR: ".$_encoding->getErrorChar()."<br>";
|
||||
// static
|
||||
$encoding_class::setErrorChar('∴');
|
||||
foreach ($enc_strings as $_string) {
|
||||
$string = $encoding_class::checkConvertEncoding($_string, 'UTF-8', 'ISO-2022-JP-MS');
|
||||
print "S::ENC CHECK: $_string: ".($string === false ? '-OK-' : $string)."<br>";
|
||||
print "S::CONV ENCODING: $_string: ".$encoding_class::convertEncoding($_string, 'ISO-2022-JP')."<br>";
|
||||
print "S::CONV ENCODING (s): $_string: ".$encoding_class::convertEncoding($_string, 'ISO-2022-JP', 'UTF-8')."<br>";
|
||||
print "S::CONV ENCODING (s,a-false): $_string: ".$encoding_class::convertEncoding($_string, 'ISO-2022-JP', 'UTF-8', false)."<br>";
|
||||
}
|
||||
print "S::ERROR CHAR: ".$encoding_class::getErrorChar()."<br>";
|
||||
// static use
|
||||
$_string = $enc_strings[1];
|
||||
$string = Encoding::checkConvertEncoding($_string, 'UTF-8', 'ISO-2022-JP-MS');
|
||||
print "S::ENC CHECK: $_string: ".($string === false ? '-OK-' : $string)."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
/* $string = $basic->checkConvertEncoding($_string, 'UTF-8', 'ISO-2022-JP-MS');
|
||||
print "ENC CHECK: $_string: ".($string === false ? '-OK-' : $string)."<br>";
|
||||
print "CONV ENCODING: $_string: ".$basic->convertEncoding($_string, 'ISO-2022-JP')."<br>";
|
||||
print "D/__MBMIMEENCODE: ".$basic->__mbMimeEncode('Some Text', 'UTF-8')."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
47
www/admin/class_test.file.php
Normal file
47
www/admin/class_test.file.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-datetime';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\File;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
|
||||
print "<html><head><title>TEST CLASS: FILE</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$file = '/some/path/to/some/file.txt';
|
||||
print "GETFILENAMEENDING: $file: ".File::getFilenameEnding($file)."<br>";
|
||||
$file = getcwd().DIRECTORY_SEPARATOR.'class_test.file.php';
|
||||
print "GETLINESFROMFILE: $file: ".File::getLinesFromFile($file)."<br>";
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
62
www/admin/class_test.hash.php
Normal file
62
www/admin/class_test.hash.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-hash';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Create\Hash;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$hash_class = 'CoreLibs\Create\Hash';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
print "<html><head><title>TEST CLASS: HASH</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$to_crc = 'Some text block';
|
||||
// static
|
||||
print "S::__CRC32B: $to_crc: ".$hash_class::__crc32b($to_crc)."<br>";
|
||||
print "S::__SHA1SHORT(off): $to_crc: ".$hash_class::__sha1short($to_crc)."<br>";
|
||||
print "S::__SHA1SHORT(on): $to_crc: ".$hash_class::__sha1short($to_crc, true)."<br>";
|
||||
print "S::__hash(d): $to_crc: ".$hash_class::__hash($to_crc)."<br>";
|
||||
foreach (['adler32', 'fnv132', 'fnv1a32', 'joaat'] as $__hash_c) {
|
||||
print "S::__hash($__hash_c): $to_crc: ".$hash_class::__hash($to_crc, $__hash_c)."<br>";
|
||||
}
|
||||
// static use
|
||||
print "U-S::__CRC32B: $to_crc: ".Hash::__crc32b($to_crc)."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
/* print "D/__CRC32B: $to_crc: ".$basic->__crc32b($to_crc)."<br>";
|
||||
print "D/__SHA1SHORT(off): $to_crc: ".$basic->__sha1short($to_crc)."<br>";
|
||||
print "D/__hash(d): $to_crc: ".$basic->__hash($to_crc)."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
102
www/admin/class_test.html.php
Normal file
102
www/admin/class_test.html.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-html';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Convert\Html;
|
||||
use CoreLibs\Output\Form\Elements;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_html = new CoreLibs\Convert\Html();
|
||||
$_elements = new CoreLibs\Output\Form\Elements();
|
||||
$html_class = 'CoreLibs\Convert\Html';
|
||||
$elements_class = 'CoreLibs\Output\Form\Elements';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
print "<html><head><title>TEST CLASS: HTML/ELEMENTS</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$string = "Something < = > Other <br> Next line";
|
||||
print "HTMLENT: ".Html::htmlent($string).": ".$_html->htmlent($string)."<br>";
|
||||
print "REMOVELB: ".Html::htmlent($string).": ".$_html->removeLB($string)."<br>";
|
||||
$date_str = [2021, 5, 1, 11, 10];
|
||||
print "PRINTDATETIME: ".$_elements->printDateTime($date_str[0], $date_str[1], $date_str[2], $date_str[3], $date_str[4])."<br>";
|
||||
// STATIC
|
||||
$string = "Something < = > Other <br> Next line";
|
||||
print "S::HTMLENT: ".Html::htmlent($string).": ".$html_class::htmlent($string)."<br>";
|
||||
print "S::REMOVELB: ".Html::htmlent($string).": ".$html_class::removeLB($string)."<br>";
|
||||
$date_str = [2021, 5, 1, 11, 10];
|
||||
print "S::PRINTDATETIME: ".$elements_class::printDateTime($date_str[0], $date_str[1], $date_str[2], $date_str[3], $date_str[4])."<br>";
|
||||
|
||||
// STATIC use
|
||||
echo "U-S::HTML ENT INT: ".Html::htmlent(5)."<br>";
|
||||
echo "U-S::HTML ENT STRING: ".Html::htmlent('5<<>')."<br>";
|
||||
echo "U-S::HTML ENT NULL: ".Html::htmlent(null)."<br>";
|
||||
|
||||
// check convert
|
||||
$checked_list = [
|
||||
['foo', 'foo'],
|
||||
['foo', 'bar'],
|
||||
['foo', ['foo', 'bar']],
|
||||
['foo', ['bar']],
|
||||
];
|
||||
foreach ($checked_list as $check) {
|
||||
print "CHECKED(0): $check[0]: ".Html::checked($check[1], $check[0])."<br>";
|
||||
print "CHECKED(1): $check[0]: ".Html::checked($check[1], $check[0], 1)."<br>";
|
||||
}
|
||||
|
||||
// magic link creation test
|
||||
$magic_links = [
|
||||
'mailto:user@bubu.at',
|
||||
'user@bubu.at',
|
||||
'user@bubu.at|Send me email|',
|
||||
'http://www.somelink.com/?with=1234',
|
||||
'http://www.somelink.com/?with=1234|Some Title|',
|
||||
'http://www.somelink.com/?with=1234 <br>Some Title',
|
||||
];
|
||||
foreach ($magic_links as $magic_link) {
|
||||
print "MAGICLINK: ".Html::htmlent($magic_link).": ".Html::htmlent(Elements::magicLinks($magic_link))."<br>";
|
||||
}
|
||||
|
||||
// DEPREACTED
|
||||
/* $string = "Deprecated Something < = > Other <br> Deprecated Next line";
|
||||
print "D/HTMLENT: $string: ".$basic->htmlent($string)."<br>";
|
||||
print "D/REMOVELB: $string: ".$basic->removeLB($string)."<br>";
|
||||
$date_str = [2021, 5, 1, 11, 10];
|
||||
print "D/PRINTDATETIME: ".$basic->printDateTime($date_str[0], $date_str[1], $date_str[2], $date_str[3], $date_str[4])."<br>";
|
||||
$magic_link = 'http://www.somelink.com/?with=1234|Some Title|';
|
||||
print "D/MAGICLINK: ".Html::htmlent($basic->magicLinks($magic_link))."<Br>";
|
||||
*/
|
||||
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
106
www/admin/class_test.image.php
Normal file
106
www/admin/class_test.image.php
Normal file
@@ -0,0 +1,106 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-image';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Output\Image;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_image = new CoreLibs\Output\Image();
|
||||
$image_class = 'CoreLibs\Output\Image';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
print "<html><head><title>TEST CLASS: IMAGE</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
// thumb sizes
|
||||
$thumb_width = 250;
|
||||
$thumb_height = 300;
|
||||
// class
|
||||
$image = BASE.LAYOUT.CONTENT_PATH.IMAGES.'no_picture_square.jpg';
|
||||
// rotate image first
|
||||
$_image->correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>CLASS->CREATETHUMBNAILSIMPLE: ".basename($image).": WIDTH: $thumb_width<br><img src=".$_image->createThumbnailSimple($image, $thumb_width)."></div>";
|
||||
// static
|
||||
$image = BASE.LAYOUT.CONTENT_PATH.IMAGES.'no_picture.jpg';
|
||||
// rotate image first
|
||||
$image_class::correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>S::CREATETHUMBNAILSIMPLE: ".basename($image).": WIDTH: $thumb_width<br><img src=".$image_class::createThumbnailSimple($image, $thumb_width)."></div>";
|
||||
|
||||
echo "U-STATIC VARIOUS:<br>";
|
||||
// image thumbnail
|
||||
$images = array(
|
||||
// height bigger
|
||||
// 'no_picture.jpg',
|
||||
// 'no_picture.png',
|
||||
// width bigger
|
||||
// 'no_picture_width_bigger.jpg',
|
||||
// 'no_picture_width_bigger.png',
|
||||
// square
|
||||
// 'no_picture_square.jpg',
|
||||
// 'no_picture_square.png',
|
||||
// other sample images
|
||||
// '5c501af48da6c.jpg',
|
||||
// Apple HEIC files
|
||||
// 'img_2145.heic',
|
||||
// Photoshop
|
||||
'photoshop_test.psd',
|
||||
);
|
||||
// return mime type ala mimetype
|
||||
$finfo = new finfo(FILEINFO_MIME_TYPE);
|
||||
foreach ($images as $image) {
|
||||
$image = BASE.LAYOUT.CONTENT_PATH.IMAGES.$image;
|
||||
list ($height, $width, $img_type) = getimagesize($image);
|
||||
echo "<div><b>IMAGE INFO</b>: ".$height."x".$width.", TYPE: ".$img_type." [".$finfo->file($image)."]</div>";
|
||||
// rotate image first
|
||||
Image::correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>".basename($image).": WIDTH: $thumb_width<br><img src=".Image::createThumbnailSimple($image, $thumb_width)."></div>";
|
||||
echo "<div>".basename($image).": HEIGHT: $thumb_height<br><img src=".Image::createThumbnailSimple($image, 0, $thumb_height)."></div>";
|
||||
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height<br><img src=".Image::createThumbnailSimple($image, $thumb_width, $thumb_height)."></div>";
|
||||
// test with dummy
|
||||
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height (+DUMMY)<br><img src=".Image::createThumbnailSimple($image, $thumb_width, $thumb_height, null, true, false)."></div>";
|
||||
echo "<hr>";
|
||||
}
|
||||
|
||||
// DEPRECATED
|
||||
// static
|
||||
/* $image = BASE.LAYOUT.CONTENT_PATH.IMAGES.'no_picture.jpg';
|
||||
// rotate image first
|
||||
$basic->correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>S::CREATETHUMBNAILSIMPLE: ".basename($image).": WIDTH: $thumb_width<br><img src=".$basic->createThumbnailSimple($image, $thumb_width)."></div>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
73
www/admin/class_test.json.php
Normal file
73
www/admin/class_test.json.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-json';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\Jason;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$json_class = 'CoreLibs\Check\Jason';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
print "<html><head><title>TEST CLASS: JSON</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$json = '{"foo": "bar"}';
|
||||
$output = Jason::jsonConvertToArray($json);
|
||||
print "S::JSON: $json: ".DgS::printAr($output)."<br>";
|
||||
print "S::JSON ERROR: ".Jason::jsonGetLastError().": ".Jason::jsonGetLastError(true)."<br>";
|
||||
|
||||
$json = '["f: {b"""ar}]';
|
||||
$output = Jason::jsonConvertToArray($json);
|
||||
print "S::E-JSON: $json: ".DgS::printAr($output)."<br>";
|
||||
print "S::E-JSON ERROR: ".Jason::jsonGetLastError().": ".Jason::jsonGetLastError(true)."<br>";
|
||||
|
||||
// direct
|
||||
$json = '{"direct": "static function call"}';
|
||||
$output = $json_class::jsonConvertToArray($json);
|
||||
print "J/S::JSON: $json: ".DgS::printAr($output)."<br>";
|
||||
print "J/S::JSON ERROR: ".$json_class::jsonGetLastError().": ".$json_class::jsonGetLastError(true)."<br>";
|
||||
|
||||
$json = '["f: {b"""ar}]';
|
||||
$output = $json_class::jsonConvertToArray($json);
|
||||
print "J/S::E-JSON: $json: ".DgS::printAr($output)."<br>";
|
||||
print "J/S::E-JSON ERROR: ".$json_class::jsonGetLastError().": ".$json_class::jsonGetLastError(true)."<br>";
|
||||
|
||||
// DEPRECATE TEST
|
||||
/* $json = '["f: {b"""ar}]';
|
||||
$output = $basic->jsonConvertToArray($json);
|
||||
print "E-JSON: $json: ".DgS::printAr($output)."<br>";
|
||||
print "E-JSON ERROR: ".$basic->jsonGetLastError().": ".$basic->jsonGetLastError(true)."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
57
www/admin/class_test.math.php
Normal file
57
www/admin/class_test.math.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-math';
|
||||
ob_end_flush();
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_math = new CoreLibs\Convert\Math();
|
||||
$math_class = 'CoreLibs\Convert\Math';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
print "<html><head><title>TEST CLASS: MATH</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
print "FCEIL: ".$_math->fceil(5.1234567890, 5)."<br>";
|
||||
print "FLOORP: ".$_math->floorp(5123456, -3)."<br>";
|
||||
print "INITNUMERIC: ".$_math->initNumeric('123')."<br>";
|
||||
|
||||
print "S-FCEIL: ".$math_class::fceil(5.1234567890, 5)."<br>";
|
||||
print "S-FLOORP: ".$math_class::floorp(5123456, -3)."<br>";
|
||||
print "S-INITNUMERIC: ".$math_class::initNumeric('123')."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
/* print "FCEIL: ".$basic->fceil(5.1234567890, 5)."<br>";
|
||||
print "FLOORP: ".$basic->floorp(5123456, -3)."<br>";
|
||||
print "INITNUMERIC: ".$basic->initNumeric('123')."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
65
www/admin/class_test.mime.php
Normal file
65
www/admin/class_test.mime.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-mime';
|
||||
ob_end_flush();
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_mime = new CoreLibs\Convert\MimeAppName();
|
||||
|
||||
print "<html><head><title>TEST CLASS: MIME</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$mime = 'application/illustrator';
|
||||
print "MIME $mime: ".$_mime->mimeGetAppName($mime)."<br>";
|
||||
$mime = 'fake/mime';
|
||||
$_mime->mimeSetAppName($mime, 'This is a fake mime');
|
||||
print "MIME $mime: ".$_mime->mimeGetAppName($mime)."<br>";
|
||||
|
||||
// mime test
|
||||
$mime = 'application/vnd.ms-excel';
|
||||
print "App for mime $mime: ".$_mime->mimeGetAppName($mime)."<br>";
|
||||
$_mime->mimeSetAppName($mime, 'Microsoft (better) Excel');
|
||||
print "App for mime changed $mime: ".$_mime->mimeGetAppName($mime)."<br>";
|
||||
|
||||
// static call test
|
||||
$mime = 'application/x-indesign';
|
||||
print "S::App for mime $mime: ".\CoreLibs\Convert\MimeAppName::mimeGetAppName($mime)."<br>";
|
||||
$mime = 'application/vnd.ms-excel';
|
||||
print "S::App for mime $mime: ".\CoreLibs\Convert\MimeAppName::mimeGetAppName($mime)."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
/* $mime = 'application/illustrator';
|
||||
print "MIME $mime: ".$basic->mimeGetAppName($mime)."<br>";
|
||||
$mime = 'fake/mime';
|
||||
$basic->mimeSetAppName($mime, 'This is a fake mime');
|
||||
print "MIME $mime: ".$basic->mimeGetAppName($mime)."<br>"; */
|
||||
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
67
www/admin/class_test.password.php
Normal file
67
www/admin/class_test.password.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-pass';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\Password as PwdChk;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_password = new CoreLibs\Check\Password();
|
||||
$password_class = 'CoreLibs\Check\Password';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
print "<html><head><title>TEST CLASS: PASSWORD</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$password = 'something1234';
|
||||
$enc_password = $_password->passwordSet($password);
|
||||
print "PASSWORD: $password: ".$enc_password."<br>";
|
||||
print "PASSWORD VERIFY: ".(string)$_password->passwordVerify($password, $enc_password)."<br>";
|
||||
print "PASSWORD REHASH: ".(string)$_password->passwordRehashCheck($enc_password)."<br>";
|
||||
// static verify
|
||||
$password = 'othername7890';
|
||||
$enc_password = $password_class::passwordSet($password);
|
||||
print "PASSWORD: $password: ".$enc_password."<br>";
|
||||
print "S-PASSWORD VERIFY: ".(string)$password_class::passwordVerify($password, $enc_password)."<br>";
|
||||
print "PASSWORD REHASH: ".(string)$password_class::passwordRehashCheck($enc_password)."<br>";
|
||||
// direct static
|
||||
print "S::PASSWORD VERFIY: ".(string)PwdChk::passwordVerify($password, $enc_password)."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
/* $password = 'deprecated4567';
|
||||
$enc_password = $basic->passwordSet($password);
|
||||
print "PASSWORD: $password: ".$enc_password."<br>";
|
||||
print "PASSWORD VERIFY: ".(string)$basic->passwordVerify($password, $enc_password)."<br>";
|
||||
print "PASSWORD REHASH: ".(string)$basic->passwordRehashCheck($enc_password)."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
@@ -3,10 +3,10 @@
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
$DEBUG_ALL_OVERRIDE = false; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
@@ -31,21 +31,31 @@ $basic = new CoreLibs\Admin\Backend(DB_CONFIG);
|
||||
$basic->dbInfo(true);
|
||||
ob_end_flush();
|
||||
|
||||
echo "DB_CONFIG_SET constant: <pre>".print_r(DB_CONFIG, true)."</pre><br>";
|
||||
print "<html><head><title>TEST CLASS</title><head>";
|
||||
print "<body>";
|
||||
|
||||
$basic->hrRunningTime();
|
||||
$basic->runningTime();
|
||||
echo "RANDOM KEY [50]: ".$basic->randomKeyGen(50)."<br>";
|
||||
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
|
||||
echo "TIMED [def]: ".$basic->runningTime()."<br>";
|
||||
echo "TIMED [string]: ".$basic->runningtime_string."<br>";
|
||||
$basic->hrRunningTime();
|
||||
echo "RANDOM KEY [default]: ".$basic->randomKeyGen()."<br>";
|
||||
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
|
||||
|
||||
// color
|
||||
print "COLOR: -1, -1, -1: ".$basic->rgb2hex(-1, -1, -1)."<br>";
|
||||
print "COLOR: 10, 20, 30: ".$basic->rgb2hex(10, 20, 30)."<br>";
|
||||
print '<div><a href="class_test.db.php">Class Test: DB</a></div>';
|
||||
print '<div><a href="class_test.colors.php">Class Test: Colors</a></div>';
|
||||
print '<div><a href="class_test.mime.php">Class Test: MIME</a></div>';
|
||||
print '<div><a href="class_test.json.php">Class Test: Json</a></div>';
|
||||
print '<div><a href="class_test.token.php">Class Test: Form Token</a></div>';
|
||||
print '<div><a href="class_test.password.php">Class Test: Password</a></div>';
|
||||
print '<div><a href="class_test.math.php">Class Test: Math</a></div>';
|
||||
print '<div><a href="class_test.html.php">Class Test: HTML/ELEMENTS</a></div>';
|
||||
print '<div><a href="class_test.email.php">Class Test: EMAIL</a></div>';
|
||||
print '<div><a href="class_test.uids.php">Class Test: UIDS</a></div>';
|
||||
print '<div><a href="class_test.phpv.php">Class Test: PHP VERSION</a></div>';
|
||||
print '<div><a href="class_test.hash.php">Class Test: HASH</a></div>';
|
||||
print '<div><a href="class_test.encoding.php">Class Test: ENCODING</a></div>';
|
||||
print '<div><a href="class_test.image.php">Class Test: IMAGE</a></div>';
|
||||
print '<div><a href="class_test.byte.php">Class Test: BYTE CONVERT</a></div>';
|
||||
print '<div><a href="class_test.datetime.php">Class Test: DATE/TIME</a></div>';
|
||||
print '<div><a href="class_test.array.php">Class Test: ARRAY HANDLER</a></div>';
|
||||
print '<div><a href="class_test.file.php">Class Test: FILE</a></div>';
|
||||
print '<div><a href="class_test.randomkey.php">Class Test: RANDOM KEY</a></div>';
|
||||
print '<div><a href="class_test.system.php">Class Test: SYSTEM</a></div>';
|
||||
print '<div><a href="class_test.runningtime.php">Class Test: RUNNING TIME</a></div>';
|
||||
print '<div><a href="class_test.debug.php">Class Test: DEBUG</a></div>';
|
||||
|
||||
// set + check edit access id
|
||||
$edit_access_id = 3;
|
||||
@@ -61,33 +71,31 @@ if (is_object($login) && isset($login->acl['unit'])) {
|
||||
print "Something went wrong with the login<br>";
|
||||
}
|
||||
|
||||
// $basic->debug('SESSION', $basic->print_ar($_SESSION));
|
||||
// $basic->log->debug('SESSION', \CoreLibs\Debug\Support::printAr($_SESSION));
|
||||
|
||||
print "<html><head><title>TEST CLASS</title><head>";
|
||||
print "<body>";
|
||||
print '<form method="post" name="loginlogout">';
|
||||
print '<a href="javascript:document.loginlogout.login_logout.value=\'Logou\';document.loginlogout.submit();">Logout</a>';
|
||||
print '<input type="hidden" name="login_logout" value="">';
|
||||
print '</form>';
|
||||
|
||||
// print the debug core vars
|
||||
print "DEBUG OUT: ".$basic->debug_output."<br>";
|
||||
print "ECHO OUT: ".$basic->echo_output."<br>";
|
||||
print "PRINT OUT: ".$basic->print_output."<br>";
|
||||
print "NOT DEBUG OUT: ".$basic->debug_output_not."<br>";
|
||||
print "NOT ECHO OUT: ".$basic->echo_output_not."<br>";
|
||||
print "NOT PRINT OUT: ".$basic->print_output_not."<br>";
|
||||
print "DEBUG OUT ALL: ".$basic->debug_output_all."<br>";
|
||||
print "ECHO OUT ALL: ".$basic->echo_output_all."<br>";
|
||||
print "PRINT OUT ALL: ".$basic->print_output_all."<br>";
|
||||
foreach (['on', 'off'] as $flag) {
|
||||
foreach (['debug', 'echo', 'print'] as $type) {
|
||||
$prefix = $flag == 'off' ? 'NOT ' : '';
|
||||
print $prefix.strtoupper($type).' OUT: '.\CoreLibs\Debug\Support::printAr($basic->log->getLogLevel($type, $flag)).'<br>';
|
||||
}
|
||||
}
|
||||
foreach (['debug', 'echo', 'print'] as $type) {
|
||||
print strtoupper($type).' OUT ALL: '.$basic->log->getLogLevelAll($type).'<br>';
|
||||
}
|
||||
|
||||
print "CALLER BACKTRACE: ".$basic->getCallerMethod()."<br>";
|
||||
$basic->debug('SOME MARK', 'Some error output');
|
||||
$basic->log->debug('SOME MARK', 'Some error output');
|
||||
|
||||
// INTERNAL SET
|
||||
print "EDIT ACCESS ID: ".$basic->edit_access_id."<br>";
|
||||
if (is_object($login)) {
|
||||
// print "ACL: <br>".$basic->print_ar($login->acl)."<br>";
|
||||
$basic->debug('ACL', "ACL: ".$basic->printAr($login->acl));
|
||||
$basic->log->debug('ACL', "ACL: ".\CoreLibs\Debug\Support::printAr($login->acl));
|
||||
// print "DEFAULT ACL: <br>".$basic->print_ar($login->default_acl_list)."<br>";
|
||||
// print "DEFAULT ACL: <br>".$basic->print_ar($login->default_acl_list)."<br>";
|
||||
// $result = array_flip(array_filter(array_flip($login->default_acl_list), function ($key) { if (is_numeric($key)) return $key; }));
|
||||
@@ -96,250 +104,9 @@ if (is_object($login)) {
|
||||
// $basic->adbSetACL($login->acl);
|
||||
}
|
||||
|
||||
// DB client encoding
|
||||
print "DB Client encoding: ".$basic->dbGetEncoding()."<br>";
|
||||
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test", 0, true)) {
|
||||
print "TIME: ".$res['time']."<br>";
|
||||
}
|
||||
print "CACHED DATA: <pre>".print_r($basic->cursor_ext, true)."</pre><br>";
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test")) {
|
||||
print "[CACHED] TIME: ".$res['time']."<br>";
|
||||
}
|
||||
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO TEST ".time()."') RETURNING test");
|
||||
print "DIRECT INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
print "DIRECT INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>";
|
||||
$basic->dbPrepare("ins_foo", "INSERT INTO foo (test) VALUES ($1)");
|
||||
$status = $basic->dbExecute("ins_foo", array('BAR TEST '.time()));
|
||||
print "PREPARE INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
print "PREPARE INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>";
|
||||
// returning test with multiple entries
|
||||
// $status = $basic->db_exec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id");
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id, test");
|
||||
print "DIRECT MULTIPLE INSERT STATUS: $status | PRIMARY KEYS: ".print_r($basic->insert_id, true)." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
// no returning, but not needed ;
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO; TEST ".time()."');");
|
||||
print "DIRECT INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
// UPDATE WITH RETURNING
|
||||
$status = $basic->dbExec("UPDATE foo SET test = 'SOMETHING DIFFERENT' WHERE foo_id = 3688452 RETURNING test");
|
||||
print "UPDATE STATUS: $status | RETURNING EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
|
||||
# db write class test
|
||||
$table = 'foo';
|
||||
print "TABLE META DATA: ".$basic->printAr($basic->dbShowTableMetaData($table))."<br>";
|
||||
$primary_key = ''; # unset
|
||||
$db_write_table = array('test', 'string_a', 'number_a', 'some_bool');
|
||||
// $db_write_table = array('test');
|
||||
$object_fields_not_touch = array();
|
||||
$object_fields_not_update = array();
|
||||
$data = array('test' => 'BOOL TEST SOMETHING '.time(), 'string_a' => 'SOME TEXT', 'number_a' => 5);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST ON '.time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST OFF '.time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array('test' => 'BOOL TEST UNSET '.time());
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
|
||||
// return Array Test
|
||||
$query = "SELECT type, sdate, integer FROM foobar";
|
||||
$data = $basic->dbReturnArray($query, true);
|
||||
print "Full foobar list: <br><pre>".print_r($data, true)."</pre><br>";
|
||||
|
||||
# async test queries
|
||||
/* $basic->dbExecAsync("SELECT test FROM foo, (SELECT pg_sleep(10)) as sub WHERE foo_id IN (27, 50, 67, 44, 10)");
|
||||
echo "WAITING FOR ASYNC: ";
|
||||
$chars = array('|', '/', '-', '\\');
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
if ((list($_, $char) = each($chars)) === FALSE)
|
||||
{
|
||||
reset($chars);
|
||||
list($_, $char) = each($chars);
|
||||
}
|
||||
print $char;
|
||||
sleep(1);
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: ".$ret."<br>";
|
||||
// while ($res = $basic->dbFetchArray($ret))
|
||||
while ($res = $basic->dbFetchArray())
|
||||
{
|
||||
echo "RES: ".$res['test']."<br>";
|
||||
}
|
||||
# test async insert
|
||||
$basic->dbExecAsync("INSERT INTO foo (Test) VALUES ('ASYNC TEST ".time()."')");
|
||||
echo "WAITING FOR ASYNC INSERT: ";
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
print ".";
|
||||
sleep(1);
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: ".$ret." | PK: ".$basic->insert_id."<br>";
|
||||
print "ASYNC PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>"; */
|
||||
|
||||
$to_db_version = '9.1.9';
|
||||
print "VERSION DB: ".$basic->dbVersion()."<br>";
|
||||
print "DB Version smaller $to_db_version: ".$basic->dbCompareVersion('<'.$to_db_version)."<br>";
|
||||
print "DB Version smaller than $to_db_version: ".$basic->dbCompareVersion('<='.$to_db_version)."<br>";
|
||||
print "DB Version equal $to_db_version: ".$basic->dbCompareVersion('='.$to_db_version)."<br>";
|
||||
print "DB Version bigger than $to_db_version: ".$basic->dbCompareVersion('>='.$to_db_version)."<br>";
|
||||
print "DB Version bigger $to_db_version: ".$basic->dbCompareVersion('>'.$to_db_version)."<br>";
|
||||
|
||||
/* $q = "SELECT FOO FRO BAR";
|
||||
// $q = "Select * from foo";
|
||||
$foo = $basic->dbExecAsync($q);
|
||||
print "[ERR] Query: ".$q."<br>";
|
||||
print "[ERR] RESOURCE: $foo<br>";
|
||||
while (($ret = $basic->dbCheckAsync()) === true)
|
||||
{
|
||||
print "[ERR]: $ret<br>";
|
||||
sleep(5);
|
||||
} */
|
||||
|
||||
// search path check
|
||||
$q = "SHOW search_path";
|
||||
$cursor = $basic->dbExec($q);
|
||||
$data = $basic->dbFetchArray($cursor)['search_path'];
|
||||
print "RETURN DATA FOR search_path: ".$data."<br>";
|
||||
// print "RETURN DATA FOR search_path: ".$basic->printAr($data)."<br>";
|
||||
// insert something into test.schema_test and see if we get the PK back
|
||||
$status = $basic->dbExec("INSERT INTO test.schema_test (contents, id) VALUES ('TIME: ".time()."', ".rand(1, 10).")");
|
||||
print "OTHER SCHEMA INSERT STATUS: ".$status." | PK NAME: ".$basic->pk_name.", PRIMARY KEY: ".$basic->insert_id."<br>";
|
||||
|
||||
// time string thest
|
||||
$timestamp = 5887998.33445;
|
||||
$time_string = $basic->timeStringFormat($timestamp);
|
||||
print "PLANE TIME STRING: ".$timestamp."<br>";
|
||||
print "TIME STRING TEST: ".$time_string."<br>";
|
||||
print "REVERSE TIME STRING: ".$basic->stringToTime($time_string)."<br>";
|
||||
if (round($timestamp, 4) == $basic->stringToTime($time_string)) {
|
||||
print "REVERSE TIME STRING MATCH<br>";
|
||||
} else {
|
||||
print "REVERSE TRIME STRING DO NOT MATCH<br>";
|
||||
}
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(0, true)."<br>";
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(0.0, true)."<br>";
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(1.005, true)."<br>";
|
||||
|
||||
echo "HTML ENT INT: ".$basic->htmlent(5)."<br>";
|
||||
echo "HTML ENT STRING: ".$basic->htmlent('5<<>')."<br>";
|
||||
echo "HTML ENT NULL: ".$basic->htmlent(null)."<br>";
|
||||
|
||||
// magic links test
|
||||
print $basic->magicLinks('user@bubu.at').'<br>';
|
||||
print $basic->magicLinks('http://test.com/foo/bar.php?foo=1').'<br>';
|
||||
|
||||
// compare date
|
||||
$date_1 = '2017/1/5';
|
||||
$date_2 = '2017-01-05';
|
||||
print "COMPARE DATE: ".$basic->compareDate($date_1, $date_2)."<br>";
|
||||
|
||||
// recursive array search
|
||||
$test_array = array(
|
||||
'foo' => 'bar',
|
||||
'input' => array(
|
||||
'element_a' => array(
|
||||
'type' => 'text'
|
||||
),
|
||||
'element_b' => array(
|
||||
'type' => 'email'
|
||||
),
|
||||
'element_c' => array(
|
||||
'type' => 'email'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
echo "SOURCE ARRAY: ".$basic->printAr($test_array)."<br>";
|
||||
echo "FOUND ELEMENTS [base]: ".$basic->printAr($basic->arraySearchRecursive('email', $test_array, 'type'))."<br>";
|
||||
echo "FOUND ELEMENTS [input]: ".$basic->printAr($basic->arraySearchRecursive('email', $test_array['input'], 'type'))."<br>";
|
||||
|
||||
// *** BYTES TEST ***
|
||||
$bytes = array(
|
||||
-123123123,
|
||||
999999, // KB-1
|
||||
999999999, // MB-1
|
||||
254779258, // MB-n
|
||||
999999999999999, // TB-1
|
||||
588795544887632, // TB-n
|
||||
999999999999999999, // PB-1
|
||||
9223372036854775807, // MAX INT
|
||||
999999999999999999999, // EB-1
|
||||
);
|
||||
print "<b>BYTE FORMAT TESTS</b><br>";
|
||||
foreach ($bytes as $byte) {
|
||||
print '<div style="display: flex; border-bottom: 1px dashed gray;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "(".number_format($byte)."/".$byte.") bytes :";
|
||||
print '</div><div style="width: 40%;">';
|
||||
print $basic->humanReadableByteFormat($byte);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
//
|
||||
print '<div style="display: flex; border-bottom: 1px dotted red;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "bytes [si]:";
|
||||
print '</div><div style="width: 40%;">';
|
||||
// print $basic->byteStringFormat($byte, true, false, true);
|
||||
print $basic->humanReadableByteFormat($byte, $basic::BYTE_FORMAT_SI);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
}
|
||||
|
||||
|
||||
// *** IMAGE TESTS ***
|
||||
echo "<hr>";
|
||||
// image thumbnail
|
||||
$images = array(
|
||||
// height bigger
|
||||
// 'no_picture.jpg',
|
||||
// 'no_picture.png',
|
||||
// width bigger
|
||||
// 'no_picture_width_bigger.jpg',
|
||||
// 'no_picture_width_bigger.png',
|
||||
// square
|
||||
// 'no_picture_square.jpg',
|
||||
// 'no_picture_square.png',
|
||||
// other sample images
|
||||
// '5c501af48da6c.jpg',
|
||||
// Apple HEIC files
|
||||
// 'img_2145.heic',
|
||||
// Photoshop
|
||||
'photoshop_test.psd',
|
||||
);
|
||||
$thumb_width = 250;
|
||||
$thumb_height = 300;
|
||||
// return mime type ala mimetype
|
||||
$finfo = new finfo(FILEINFO_MIME_TYPE);
|
||||
foreach ($images as $image) {
|
||||
$image = BASE.LAYOUT.CONTENT_PATH.IMAGES.$image;
|
||||
list ($height, $width, $img_type) = getimagesize($image);
|
||||
echo "<div>IMAGE INFO: ".$height."x".$width.", TYPE: ".$img_type." [".$finfo->file($image)."]</div>";
|
||||
// rotate image first
|
||||
$basic->correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>".basename($image).": WIDTH: $thumb_width<br><img src=".$basic->createThumbnailSimple($image, $thumb_width)."></div>";
|
||||
echo "<div>".basename($image).": HEIGHT: $thumb_height<br><img src=".$basic->createThumbnailSimple($image, 0, $thumb_height)."></div>";
|
||||
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height<br><img src=".$basic->createThumbnailSimple($image, $thumb_width, $thumb_height)."></div>";
|
||||
// test with dummy
|
||||
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height (+DUMMY)<br><img src=".$basic->createThumbnailSimple($image, $thumb_width, $thumb_height, null, true, false)."></div>";
|
||||
echo "<hr>";
|
||||
}
|
||||
|
||||
// print error messages
|
||||
// print $login->printErrorMsg();
|
||||
print $basic->printErrorMsg();
|
||||
// print $login->log->printErrorMsg();
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
|
||||
66
www/admin/class_test.phpv.php
Normal file
66
www/admin/class_test.phpv.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-phpv';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Check\PhpVersion;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_phpv = new CoreLibs\Check\PhpVersion();
|
||||
$phpv_class = 'CoreLibs\Check\PhpVersion';
|
||||
|
||||
// define a list of from to color sets for conversion test
|
||||
|
||||
print "<html><head><title>TEST CLASS: PHP VERSION</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$min_version_s = '7';
|
||||
$min_version_ss = '7.1';
|
||||
$min_version = '7.1.0';
|
||||
$max_version = '7.3.1';
|
||||
// class
|
||||
print "MIN: $min_version: ".(string)$_phpv->checkPHPVersion($min_version)."<br>";
|
||||
print "MIN/MAX: $min_version/$max_version: ".(string)$_phpv->checkPHPVersion($min_version, $max_version)."<br>";
|
||||
print "MIN/S: $min_version_s: ".(string)$_phpv->checkPHPVersion($min_version_s)."<br>";
|
||||
print "MIN/SS: $min_version_ss: ".(string)$_phpv->checkPHPVersion($min_version_ss)."<br>";
|
||||
// static
|
||||
print "S::MIN: $min_version: ".(string)$phpv_class::checkPHPVersion($min_version)."<br>";
|
||||
print "S::MIN/MAX: $min_version/$max_version: ".(string)$phpv_class::checkPHPVersion($min_version, $max_version)."<br>";
|
||||
print "S::MIN/S: $min_version_s: ".(string)$phpv_class::checkPHPVersion($min_version_s)."<br>";
|
||||
print "S::MIN/SS: $min_version_ss: ".(string)$phpv_class::checkPHPVersion($min_version_ss)."<br>";
|
||||
// use stats
|
||||
print "U-S::MIN: $min_version: ".(string)PhpVersion::checkPHPVersion($min_version)."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
// print "MIN: $min_version: ".(string)$basic->checkPHPVersion($min_version)."<br>";
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
55
www/admin/class_test.randomkey.php
Normal file
55
www/admin/class_test.randomkey.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-randomkey';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Create\RandomKey;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$array_class = 'CoreLibs\Create\RandomKey';
|
||||
|
||||
print "<html><head><title>TEST CLASS: RANDOM KEY</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$key_length = 10;
|
||||
$key_length_b = 5;
|
||||
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::RANDOMKEYGEN($key_length_b): ".RandomKey::randomKeyGen($key_length_b)."<br>";
|
||||
print "S::RANDOMKEYGEN($key_length): ".RandomKey::randomKeyGen()."<br>";
|
||||
$_array= new CoreLibs\Create\RandomKey();
|
||||
print "C->RANDOMKEYGEN(auto): ".$_array->randomKeyGen()."<br>";
|
||||
// DEPRECATED
|
||||
// print "D\RANDOMKEYGEN(auto): ".$basic->randomKeyGen()."<br>";
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
63
www/admin/class_test.runningtime.php
Normal file
63
www/admin/class_test.runningtime.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-runningtime';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Debug\RunningTime;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
|
||||
print "<html><head><title>TEST CLASS: RUNNING IMTE</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
RunningTime::hrRunningTime();
|
||||
RunningTime::runningTime();
|
||||
echo "RANDOM KEY [50]: ".\CoreLibs\Create\RandomKey::randomKeyGen(50)."<br>";
|
||||
echo "TIMED [hr]: ".RunningTime::hrRunningTime()."<br>";
|
||||
echo "TIMED [def]: ".RunningTime::runningTime()."<br>";
|
||||
echo "TIMED [string]: ".RunningTime::runningTimeString()."<br>";
|
||||
RunningTime::hrRunningTime();
|
||||
echo "RANDOM KEY [default]: ".\CoreLibs\Create\RandomKey::randomKeyGen()."<br>";
|
||||
echo "TIMED [hr]: ".RunningTime::hrRunningTime()."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
/* $basic->hrRunningTime();
|
||||
$basic->runningTime();
|
||||
echo "RANDOM KEY [50]: ".$basic->randomKeyGen(50)."<br>";
|
||||
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
|
||||
echo "TIMED [def]: ".$basic->runningTime()."<br>";
|
||||
echo "TIMED [string]: ".$basic->runningtime_string."<br>";
|
||||
$basic->hrRunningTime();
|
||||
echo "RANDOM KEY [default]: ".$basic->randomKeyGen()."<br>";
|
||||
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
49
www/admin/class_test.system.php
Normal file
49
www/admin/class_test.system.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-system';
|
||||
ob_end_flush();
|
||||
|
||||
use CoreLibs\Get\System;
|
||||
use CoreLibs\Debug\Support as DgS;
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
|
||||
print "<html><head><title>TEST CLASS: SYSTEM</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
print "GETHOSTNAME: ".DgS::printAr(System::getHostName())."<br>";
|
||||
print "GETPAGENAME(0): ".System::getPageName()."<br>";
|
||||
print "GETPAGENAME(1): ".System::getPageName(1)."<br>";
|
||||
print "GETPAGENAME(2): ".System::getPageName(2)."<br>";
|
||||
// seting errro codes file upload
|
||||
print "FILEUPLOADERRORMESSAGE(): ".System::fileUploadErrorMessage(-1)."<br>";
|
||||
print "FILEUPLOADERRORMESSAGE(UPLOAD_ERR_CANT_WRITE): ".System::fileUploadErrorMessage(UPLOAD_ERR_CANT_WRITE)."<br>";
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
58
www/admin/class_test.token.php
Normal file
58
www/admin/class_test.token.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-token';
|
||||
ob_end_flush();
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_token = new CoreLibs\Output\Form\Token();
|
||||
$token_class = 'CoreLibs\Output\Form\Token';
|
||||
|
||||
print "<html><head><title>TEST CLASS: FORM TOKEN</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
$token = 'test_form_token';
|
||||
$token_id = $_token->setFormToken($token);
|
||||
print "TOKEN: $token: (ID) ".$token_id." => (S) ".$_SESSION[$token]."<br>";
|
||||
print "VALIDATE: $token: ".(string)$_token->validateFormToken($token_id, $token)."<br>";
|
||||
|
||||
$token = 'test_form_token_static';
|
||||
$token_id = $token_class::setFormToken($token);
|
||||
print "S-TOKEN: $token: (ID) ".$token_id." => (S) ".$_SESSION[$token]."<br>";
|
||||
print "S-VALIDATE: $token: ".(string)$token_class::validateFormToken($token_id, $token)."<br>";
|
||||
|
||||
// DEPRECATED
|
||||
/* $token = 'test_form_token_deprecated';
|
||||
$token_id = $basic->setFormToken($token);
|
||||
print "TOKEN: $token: (ID) ".$token_id." => (S) ".$_SESSION[$token]."<br>";
|
||||
print "VALIDATE: $token: ".(string)$basic->validateFormToken($token_id, $token)."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
56
www/admin/class_test.uids.php
Normal file
56
www/admin/class_test.uids.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
if ($DEBUG_ALL) {
|
||||
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||
}
|
||||
|
||||
ob_start();
|
||||
|
||||
// basic class test file
|
||||
define('USE_DATABASE', false);
|
||||
// sample config
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
$LOG_FILE_ID = 'classTest-uids';
|
||||
ob_end_flush();
|
||||
|
||||
$basic = new CoreLibs\Basic();
|
||||
$_uids = new CoreLibs\Create\Uids();
|
||||
$uids_class = 'CoreLibs\Create\Uids';
|
||||
|
||||
print "<html><head><title>TEST CLASS: UIDS</title><head>";
|
||||
print "<body>";
|
||||
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||
|
||||
// class
|
||||
print "UUIDV4: ".$_uids->uuidv4()."<br>";
|
||||
print "UNIQID (d): ".$_uids->uniqId()."<br>";
|
||||
print "UNIQID (md5): ".$_uids->uniqId('md5')."<br>";
|
||||
print "UNIQID (sha256): ".$_uids->uniqId('sha256')."<br>";
|
||||
// statc
|
||||
print "S::UUIDV4: ".$uids_class::uuidv4()."<br>";
|
||||
print "S::UNIQID (d): ".$uids_class::uniqId()."<br>";
|
||||
print "S::UNIQID (md5): ".$uids_class::uniqId('md5')."<br>";
|
||||
print "S::UNIQID (sha256): ".$uids_class::uniqId('sha256')."<br>";
|
||||
// DEPRECATED
|
||||
/* print "D/UUIDV4: ".$basic->uuidv4()."<br>";
|
||||
print "/DUNIQID (d): ".$basic->uniqId()."<br>"; */
|
||||
|
||||
// error message
|
||||
print $basic->log->printErrorMsg();
|
||||
|
||||
print "</body></html>";
|
||||
|
||||
// __END__
|
||||
@@ -17,3 +17,5 @@ require(BASE.LIB."Error.Handling.php");
|
||||
if ($var) {
|
||||
echo "OUT<br>";
|
||||
}
|
||||
// this wll throw an error and also write
|
||||
// asdfa(09);
|
||||
|
||||
@@ -20,23 +20,22 @@ if ($base->getConnectionStatus()) {
|
||||
die("Cannot connect to database");
|
||||
}
|
||||
|
||||
print "Start time: ".$base->runningTime()."<br>";
|
||||
print "HumanReadableByteFormat: ".$base->HumanReadableByteFormat(1234567.12)."<br>";
|
||||
print "humanReadableByteFormat: ".$base->humanReadableByteFormat(1234567.12)."<br>";
|
||||
// print "get_page_name [DEPRECATED]: ".$base->get_page_name()."<br>";
|
||||
print "getPageName: ".$base->getPageName()."<br>";
|
||||
print "Start time: ".\CoreLibs\Debug\RunningTime::runningTime()."<br>";
|
||||
print "HumanReadableByteFormat: ".\CoreLibs\Convert\Byte::HumanReadableByteFormat(1234567.12)."<br>";
|
||||
print "humanReadableByteFormat: ".\CoreLibs\Convert\Byte::humanReadableByteFormat(1234567.12)."<br>";
|
||||
print "getPageName: ". \CoreLibs\Get\System::getPageName()."<br>";
|
||||
|
||||
print "DB Info: ".$base->dbInfo(true)."<br>";
|
||||
|
||||
|
||||
print "End Time: ".$base->runningTime()."<br>";
|
||||
print "Start Time: ".$base->runningTime()."<br>";
|
||||
print "End Time: ".\CoreLibs\Debug\RunningTime::runningTime()."<br>";
|
||||
print "Start Time: ".\CoreLibs\Debug\RunningTime::runningTime()."<br>";
|
||||
|
||||
print "Lang: ".$base->l->__getLang().", MO File: ".$base->l->__getMoFile()."<br>";
|
||||
print "Translate test: Year -> ".$base->l->__('Year')."<br>";
|
||||
|
||||
print "End Time: ".$base->runningTime()."<br>";
|
||||
print "End Time: ".\CoreLibs\Debug\RunningTime::runningTime()."<br>";
|
||||
// end error print
|
||||
print $base->printErrorMsg();
|
||||
print $base->log->printErrorMsg();
|
||||
|
||||
# __END__
|
||||
|
||||
@@ -52,6 +52,7 @@ $options = array (
|
||||
|
||||
if (is_object($smarty)) {
|
||||
$smarty->DATA['drop_down_test'] = $options;
|
||||
$smarty->DATA['loop_start'] = 2;
|
||||
// require BASE.INCLUDES.'admin_smarty.php';
|
||||
$smarty->setSmartyVarsAdmin();
|
||||
}
|
||||
|
||||
@@ -27,8 +27,8 @@ line breaks
|
||||
in there. Theis
|
||||
is sucky';
|
||||
|
||||
print "LB remove: ".$base->removeLB($text)."<br>";
|
||||
print "LB remove: ".$base->removeLB($text, '##BR##')."<br>";
|
||||
print "LB remove: ".\CoreLibs\Convert\Html::removeLB($text)."<br>";
|
||||
print "LB remove: ".\CoreLibs\Convert\Html::removeLB($text, '##BR##')."<br>";
|
||||
|
||||
// $test = array (
|
||||
// 'A' => array (
|
||||
@@ -47,7 +47,7 @@ print "LB remove: ".$base->removeLB($text, '##BR##')."<br>";
|
||||
// )
|
||||
// );
|
||||
|
||||
// $base->debug('ARRAY', $base->printAr($test));
|
||||
// $base->log->debug('ARRAY', \CoreLibs\Debug\Support::printAr($test));
|
||||
|
||||
function rec($pre, $cur, $node = array ())
|
||||
{
|
||||
@@ -103,9 +103,9 @@ $test = rec('C', 'U', $test);
|
||||
$test = rec('F', 'U', $test);
|
||||
$test = rec('', 'Al', $test);
|
||||
$test = rec('B', 'B1', $test);
|
||||
$base->debug('REC', $base->printAr($test));
|
||||
print "FLATTEN: ".$base->printAr(flattenArrayKey($test))."<br>";
|
||||
$base->log->debug('REC', \CoreLibs\Debug\Support::printAr($test));
|
||||
print "FLATTEN: ".\CoreLibs\Debug\Support::printAr(flattenArrayKey($test))."<br>";
|
||||
|
||||
print $base->printErrorMsg();
|
||||
print $base->log->printErrorMsg();
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
*********************************************************************/
|
||||
|
||||
// please be VERY carefull only to change the right side
|
||||
$DB_CONFIG = array(
|
||||
'test' => array(
|
||||
$DB_CONFIG = [
|
||||
'test' => [
|
||||
'db_name' => 'gullevek',
|
||||
'db_user' => 'gullevek',
|
||||
'db_pass' => 'gullevek',
|
||||
@@ -19,7 +19,7 @@ $DB_CONFIG = array(
|
||||
'db_type' => 'pgsql',
|
||||
'db_encoding' => '',
|
||||
'db_ssl' => 'disable' // allow, disable, require, prefer
|
||||
)
|
||||
);
|
||||
]
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -12,18 +12,18 @@
|
||||
*********************************************************************/
|
||||
|
||||
// other master config to attach
|
||||
// $__LOCAL_CONFIG = array(
|
||||
// $__LOCAL_CONFIG = [
|
||||
// 'db_host' => '',
|
||||
// 'location' => '',
|
||||
// 'debug_flag' => true,
|
||||
// 'site_lang' => 'en_utf8',
|
||||
// 'login_enabled' => true
|
||||
// );
|
||||
// ];
|
||||
|
||||
// each host has a different db_host
|
||||
$SITE_CONFIG = array(
|
||||
$SITE_CONFIG = [
|
||||
// development host
|
||||
'soba.tokyo.tequila.jp' => array(
|
||||
'soba.tokyo.tequila.jp' => [
|
||||
// db config selection
|
||||
'db_host' => 'test',
|
||||
// other db connections
|
||||
@@ -37,8 +37,8 @@ $SITE_CONFIG = array(
|
||||
'site_lang' => 'en_utf8',
|
||||
// enable/disable login override
|
||||
'login_enabled' => true
|
||||
),
|
||||
],
|
||||
// 'other.host.com' => $__LOCAL_CONFIG
|
||||
);
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -26,7 +26,7 @@ define('LIBS', 'lib'.DS);
|
||||
define('CONFIGS', 'configs'.DS);
|
||||
// includes (strings, arrays for static, etc)
|
||||
define('INCLUDES', 'includes'.DS);
|
||||
// data folder (mostly in includes)
|
||||
// data folder (mostly in includes, or root for internal data)
|
||||
define('DATA', 'data'.DS);
|
||||
// layout base path
|
||||
define('LAYOUT', 'layout'.DS);
|
||||
@@ -36,20 +36,22 @@ define('PICTURES', 'images'.DS);
|
||||
define('IMAGES', 'images'.DS);
|
||||
// icons (below the images/ folder)
|
||||
define('ICONS', 'icons'.DS);
|
||||
// media
|
||||
// media (accessable from outside)
|
||||
define('MEDIA', 'media'.DS);
|
||||
// flash-root (below media)
|
||||
// flash-root (below media or data)
|
||||
define('FLASH', 'flash'.DS);
|
||||
// uploads (anything to keep)
|
||||
// uploads (anything to keep or data)
|
||||
define('UPLOADS', 'uploads'.DS);
|
||||
// files (binaries) (below media)
|
||||
// files (binaries) (below media or data)
|
||||
define('BINARIES', 'binaries'.DS);
|
||||
// files (videos) (below media)
|
||||
// files (videos) (below media or data)
|
||||
define('VIDEOS', 'videos'.DS);
|
||||
// files (documents) (below media)
|
||||
// files (documents) (below media or data)
|
||||
define('DOCUMENTS', 'documents'.DS);
|
||||
// files (pdfs) (below media)
|
||||
// files (pdfs) (below media or data)
|
||||
define('PDFS', 'documents'.DS);
|
||||
// files (general) (below media or data)
|
||||
define('FILES', 'files'.DS);
|
||||
// CSV
|
||||
define('CSV', 'csv'.DS);
|
||||
// css
|
||||
@@ -101,8 +103,23 @@ define('LOGOUT_TARGET', '');
|
||||
define('PASSWORD_CHANGE', false);
|
||||
define('PASSWORD_FORGOT', false);
|
||||
// min/max password length
|
||||
define('PASSWORD_MIN_LENGTH', 8);
|
||||
define('PASSWORD_MIN_LENGTH', 9);
|
||||
define('PASSWORD_MAX_LENGTH', 255);
|
||||
// defines allowed special characters
|
||||
define('PASSWORD_SPECIAL_RANGE', '@$!%*?&');
|
||||
// password must have upper case, lower case, number, special
|
||||
// comment out for not mandatory
|
||||
define('PASSWORD_LOWER', '(?=.*[a-z])');
|
||||
define('PASSWORD_UPPER', '(?=.*[A-Z])');
|
||||
define('PASSWORD_NUMBER', '(?=.*\d)');
|
||||
define('PASSWORD_SPECIAL', "(?=.*[".PASSWORD_SPECIAL_RANGE."])");
|
||||
// define full regex
|
||||
define('PASSWORD_REGEX', "/^".
|
||||
(defined('PASSWORD_LOWER') ? PASSWORD_LOWER : '').
|
||||
(defined('PASSWORD_UPPER') ? PASSWORD_UPPER : '').
|
||||
(defined('PASSWORD_NUMBER') ? PASSWORD_NUMBER : '').
|
||||
(defined('PASSWORD_SPECIAL') ? PASSWORD_SPECIAL : '').
|
||||
"[A-Za-z\d".PASSWORD_SPECIAL_RANGE."]{".PASSWORD_MIN_LENGTH.",".PASSWORD_MAX_LENGTH."}$/");
|
||||
|
||||
/************* AJAX / ACCESS *************/
|
||||
// ajax request type
|
||||
@@ -150,13 +167,6 @@ define('DEFAULT_ENCODING', 'UTF-8');
|
||||
// see Basic class constructor
|
||||
define('LOG_FILE_ID', BASE_NAME);
|
||||
|
||||
/************* CLASS ERRORS *******************/
|
||||
// 0 = default all OFF
|
||||
// 1 = throw notice on unset class var
|
||||
// 2 = no notice on unset class var, but do not set undefined class var
|
||||
// 3 = throw error and do not set class var
|
||||
define('CLASS_VARIABLE_ERROR_MODE', 3);
|
||||
|
||||
/************* QUEUE TABLE *************/
|
||||
// if we have a dev/live system
|
||||
// set_live is a per page/per item
|
||||
@@ -169,20 +179,22 @@ define('PUBLIC_SCHEMA', 'public');
|
||||
define('DEV_SCHEMA', 'public');
|
||||
define('TEST_SCHEMA', 'public');
|
||||
define('LIVE_SCHEMA', 'public');
|
||||
define('GLOBAL_DB_SCHEMA', '');
|
||||
define('LOGIN_DB_SCHEMA', '');
|
||||
|
||||
/************* CORE HOST SETTINGS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.host.php')) {
|
||||
require BASE.CONFIGS.'config.host.php';
|
||||
}
|
||||
if (!isset($SITE_CONFIG)) {
|
||||
$SITE_CONFIG = array();
|
||||
$SITE_CONFIG = [];
|
||||
}
|
||||
/************* DB ACCESS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.db.php')) {
|
||||
require BASE.CONFIGS.'config.db.php';
|
||||
}
|
||||
if (!isset($DB_CONFIG)) {
|
||||
$DB_CONFIG = array();
|
||||
$DB_CONFIG = [];
|
||||
}
|
||||
/************* OTHER PATHS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.path.php')) {
|
||||
@@ -228,7 +240,7 @@ if ((array_key_exists('HTTPS', $_SERVER) && !empty($_SERVER['HTTPS']) && $_SERVE
|
||||
}
|
||||
// define the db config set name, the db config and the db schema
|
||||
define('DB_CONFIG_NAME', $SITE_CONFIG[HOST_NAME]['db_host']);
|
||||
define('DB_CONFIG', isset($DB_CONFIG[DB_CONFIG_NAME]) ? $DB_CONFIG[DB_CONFIG_NAME] : array());
|
||||
define('DB_CONFIG', isset($DB_CONFIG[DB_CONFIG_NAME]) ? $DB_CONFIG[DB_CONFIG_NAME] : []);
|
||||
// define('DB_CONFIG_TARGET', SITE_CONFIG[$HOST_NAME]['db_host_target']);
|
||||
// define('DB_CONFIG_OTHER', SITE_CONFIG[$HOST_NAME]['db_host_other']);
|
||||
// override for login and global schemas
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
|
||||
/************* CONVERT *******************/
|
||||
// this only needed if the external thumbnail create is used
|
||||
$paths = array(
|
||||
$paths = [
|
||||
'/bin',
|
||||
'/usr/bin',
|
||||
'/usr/local/bin'
|
||||
);
|
||||
];
|
||||
// find convert
|
||||
foreach ($paths as $path) {
|
||||
if (file_exists($path.DS.'convert') && is_file($path.DS.'convert')) {
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
|
||||
// File and Folder paths
|
||||
// ID is TARGET (first array element)
|
||||
/*$PATHS = array(
|
||||
'test' => array(
|
||||
/*$PATHS = [
|
||||
'test' => [
|
||||
'csv_path' => '',
|
||||
'perl_bin' => '',
|
||||
'other_url' => '',
|
||||
)
|
||||
)*/
|
||||
]
|
||||
];*/
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -22,7 +22,7 @@ if (!defined('DS')) {
|
||||
exit('Base config unloadable');
|
||||
}
|
||||
// find trigger name "admin/" or "frontend/" in the getcwd() folder
|
||||
foreach (array('admin', 'frontend') as $folder) {
|
||||
foreach (['admin', 'frontend'] as $folder) {
|
||||
if (strstr(getcwd(), DS.$folder)) {
|
||||
define('CONTENT_PATH', $folder.DS);
|
||||
break;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
$day_short = array(
|
||||
$day_short = [
|
||||
1 => 'Mon',
|
||||
2 => 'Tue',
|
||||
3 => 'Wed',
|
||||
@@ -15,9 +15,9 @@ $day_short = array(
|
||||
5 => 'Fri',
|
||||
6 => 'Sat',
|
||||
7 => 'Sun'
|
||||
);
|
||||
];
|
||||
|
||||
$day_long = array(
|
||||
$day_long = [
|
||||
1 => 'Monday',
|
||||
2 => 'Tuesday',
|
||||
3 => 'Wednesday',
|
||||
@@ -25,10 +25,10 @@ $day_long = array(
|
||||
5 => 'Friday',
|
||||
6 => 'Saturday',
|
||||
7 => 'Sunday'
|
||||
);
|
||||
];
|
||||
|
||||
// months
|
||||
$month_long = array(
|
||||
$month_long = [
|
||||
1 => 'January',
|
||||
2 => 'February',
|
||||
3 => 'March',
|
||||
@@ -41,9 +41,9 @@ $month_long = array(
|
||||
10 => 'October',
|
||||
11 => 'November',
|
||||
12 => 'December'
|
||||
);
|
||||
];
|
||||
|
||||
$month_short = array(
|
||||
$month_short = [
|
||||
1 => 'Jan',
|
||||
2 => 'Feb',
|
||||
3 => 'Mar',
|
||||
@@ -56,6 +56,6 @@ $month_short = array(
|
||||
10 => 'Oct',
|
||||
11 => 'Nov',
|
||||
12 => 'Dec'
|
||||
);
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*********************************************************************/
|
||||
|
||||
// print debug messages
|
||||
echo $login->printErrorMsg();
|
||||
echo $cms->printErrorMsg();
|
||||
echo $login->log->printErrorMsg();
|
||||
echo $cms->log->printErrorMsg();
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -80,12 +80,10 @@ if (!$login->login) {
|
||||
// automatic hide for DEBUG messages on live server
|
||||
// can be overridden when setting DEBUG_ALL_OVERRIDE on top of the script (for emergency debugging of one page only)
|
||||
if ((TARGET == 'live' || TARGET == 'remote') && !$DEBUG_ALL_OVERRIDE) {
|
||||
$login->debug_output_all = false;
|
||||
$login->echo_output_all = false;
|
||||
$login->print_output_all = false;
|
||||
$cms->debug_output_all = false;
|
||||
$cms->echo_output_all = false;
|
||||
$cms->print_output_all = false;
|
||||
foreach (['debug', 'echo', 'print'] as $target) {
|
||||
$login->log->setLogLevelAll($type, false);
|
||||
$cms->log->setLogLevelAll($type, false);
|
||||
}
|
||||
}
|
||||
$smarty->DATA['JS_DEBUG'] = DEBUG;
|
||||
|
||||
|
||||
@@ -50,24 +50,24 @@ if ($form->mobile_phone) {
|
||||
// smarty template engine (extended Translation version)
|
||||
$smarty = new CoreLibs\Template\SmartyExtend();
|
||||
|
||||
// $form->debug('POST', $form->printAr($_POST));
|
||||
// $form->log->debug('POST', $form->log->prAr($_POST));
|
||||
|
||||
if (TARGET == 'live' || TARGET == 'remote') {
|
||||
// login
|
||||
$login->debug_output_all = DEBUG ? 1 : 0;
|
||||
$login->echo_output_all = 0;
|
||||
$login->print_output_all = DEBUG ? 1 : 0;
|
||||
$login->log->setLogLevelAll('debug', DEBUG ? true : false);
|
||||
$login->log->setLogLevelAll('echo', false);
|
||||
$login->log->setLogLevelAll('print', DEBUG ? true : false);
|
||||
// form
|
||||
$form->debug_output_all = DEBUG ? 1 : 0;
|
||||
$form->echo_output_all = 0;
|
||||
$form->print_output_all = DEBUG ? 1 : 0;
|
||||
$form->log->setLogLevelAll('debug', DEBUG ? true : false);
|
||||
$form->log->setLogLevelAll('echo', false);
|
||||
$form->log->setLogLevelAll('print', DEBUG ? true : false);
|
||||
}
|
||||
// space for setting special debug flags
|
||||
$login->debug_output_all = 1;
|
||||
$login->log->setLogLevelAll('debug', true);
|
||||
// set smarty arrays
|
||||
$HEADER = array();
|
||||
$DATA = array();
|
||||
$DEBUG_DATA = array();
|
||||
$HEADER = [];
|
||||
$DATA = [];
|
||||
$DEBUG_DATA = [];
|
||||
// set the template dir
|
||||
// WARNING: this has a special check for the mailing tool layout (old layout)
|
||||
if (defined('LAYOUT')) {
|
||||
@@ -94,15 +94,15 @@ if ($form->my_page_name == 'edit_order') {
|
||||
// order name is _always_ order_number for the edit interface
|
||||
|
||||
// follwing arrays do exist here:
|
||||
// $position ... has the positions of the array(0..max), cause in a <select>
|
||||
// $position ... has the positions of the [0..max], cause in a <select>
|
||||
// I can't put an number into the array field, in this array,
|
||||
// there are the POSITION stored, that should CHANGE there order (up/down)
|
||||
// $row_data_id ... has ALL ids from the sorting part
|
||||
// $row_data_order ... has ALL order positions from the soirting part
|
||||
if (!isset($position)) {
|
||||
$position = array();
|
||||
$position = [];
|
||||
}
|
||||
$row_data_id = $_POST['row_data_id'];
|
||||
$row_data_id = $_POST['row_data_id'] ?? [];
|
||||
$original_id = $row_data_id;
|
||||
if (count($position)) {
|
||||
$row_data_order = $_POST['row_data_order'];
|
||||
@@ -116,8 +116,8 @@ if ($form->my_page_name == 'edit_order') {
|
||||
// this gets the old before (moves one "up")
|
||||
// is done for every element in row
|
||||
// echo "A: ".$row_data_id[$position[$i]]." (".$row_data_order[$position[$i]].") -- ".$row_data_id[$position[$i]-1]." (".$row_data_order[$position[$i]-1].")<br>";
|
||||
$temp_id = $row_data_id[$position[$i]];
|
||||
$row_data_id[$position[$i]] = $row_data_id[$position[$i] - 1];
|
||||
$temp_id = $row_data_id[$position[$i]] ?? null;
|
||||
$row_data_id[$position[$i]] = $row_data_id[$position[$i] - 1] ?? null;
|
||||
$row_data_id[$position[$i] - 1] = $temp_id;
|
||||
// echo "A: ".$row_data_id[$position[$i]]." (".$row_data_order[$position[$i]].") -- ".$row_data_id[$position[$i]-1]." (".$row_data_order[$position[$i]-1].")<br>";
|
||||
} // for
|
||||
@@ -129,8 +129,8 @@ if ($form->my_page_name == 'edit_order') {
|
||||
// same as up, just up in other way, starts from bottom (last element) and moves "up"
|
||||
// element before actuel gets temp, this element, becomes element after this,
|
||||
// element after this, gets this
|
||||
$temp_id = $row_data_id[$position[$i] + 1];
|
||||
$row_data_id[$position[$i] + 1] = $row_data_id[$position[$i]];
|
||||
$temp_id = $row_data_id[$position[$i] + 1] ?? null;
|
||||
$row_data_id[$position[$i] + 1] = $row_data_id[$position[$i]] ?? null;
|
||||
$row_data_id[$position[$i]] = $temp_id;
|
||||
} // for
|
||||
} // if down
|
||||
@@ -140,8 +140,10 @@ if ($form->my_page_name == 'edit_order') {
|
||||
(isset($down) && ($position[count($position) - 1] != (count($row_data_id) - 1)))
|
||||
) {
|
||||
for ($i = 0; $i < count($row_data_id); $i ++) {
|
||||
$q = "UPDATE ".$table_name." SET order_number = ".$row_data_order[$i]." WHERE ".$table_name."_id = ".$row_data_id[$i];
|
||||
$q = $form->dbExec($q);
|
||||
if (isset($row_data_order[$i]) && isset($row_data_id[$i])) {
|
||||
$q = "UPDATE ".$table_name." SET order_number = ".$row_data_order[$i]." WHERE ".$table_name."_id = ".$row_data_id[$i];
|
||||
$q = $form->dbExec($q);
|
||||
}
|
||||
} // for all article ids ...
|
||||
} // if write
|
||||
} // if there is something to move
|
||||
@@ -154,29 +156,33 @@ if ($form->my_page_name == 'edit_order') {
|
||||
$q .= "ORDER BY order_number";
|
||||
|
||||
// init arrays
|
||||
$row_data = array();
|
||||
$options_id = array();
|
||||
$options_name = array();
|
||||
$options_selected = array();
|
||||
$row_data = [];
|
||||
$options_id = [];
|
||||
$options_name = [];
|
||||
$options_selected = [];
|
||||
// DB read data for menu
|
||||
while ($res = $form->dbReturn($q)) {
|
||||
$row_data[] = array(
|
||||
$row_data[] = [
|
||||
"id" => $res[$table_name."_id"],
|
||||
"name" => $res["name"],
|
||||
"order" => $res["order_number"]
|
||||
);
|
||||
];
|
||||
} // while read data ...
|
||||
|
||||
// html title
|
||||
$HEADER['HTML_TITLE'] = $form->l->__('Edit Order');
|
||||
|
||||
$messages = array();
|
||||
$messages = [];
|
||||
// error msg
|
||||
if (isset($error)) {
|
||||
if (!isset($msg)) {
|
||||
$msg = array();
|
||||
$msg = [];
|
||||
}
|
||||
$messages[] = array('msg' => $msg, 'class' => 'error', 'width' => '100%');
|
||||
$messages[] = [
|
||||
'msg' => $msg,
|
||||
'class' => 'error',
|
||||
'width' => '100%'
|
||||
];
|
||||
}
|
||||
$DATA['form_error_msg'] = $messages;
|
||||
|
||||
@@ -187,7 +193,9 @@ if ($form->my_page_name == 'edit_order') {
|
||||
// list of points to order
|
||||
for ($j = 0; $j < count($position); $j++) {
|
||||
// if matches, put into select array
|
||||
if ($original_id[$position[$j]] == $row_data[$i]['id']) {
|
||||
if (isset($original_id[$position[$j]]) && isset($row_data[$i]['id']) &&
|
||||
$original_id[$position[$j]] == $row_data[$i]['id']
|
||||
) {
|
||||
$options_selected[] = $i;
|
||||
}
|
||||
}
|
||||
@@ -197,8 +205,8 @@ if ($form->my_page_name == 'edit_order') {
|
||||
$DATA['options_selected'] = $options_selected;
|
||||
|
||||
// hidden list for the data (id, order number)
|
||||
$row_data_id = array();
|
||||
$row_data_order = array();
|
||||
$row_data_id = [];
|
||||
$row_data_order = [];
|
||||
for ($i = 0; $i < count($row_data); $i++) {
|
||||
$row_data_id[] = $row_data[$i]['id'];
|
||||
$row_data_order[] = $row_data[$i]['order'];
|
||||
@@ -226,7 +234,7 @@ if ($form->my_page_name == 'edit_order') {
|
||||
|
||||
$DATA['table_width'] = $table_width;
|
||||
|
||||
$messages = array();
|
||||
$messages = [];
|
||||
// write out error / status messages
|
||||
$messages[] = $form->formPrintMsg();
|
||||
$DATA['form_error_msg'] = $messages;
|
||||
@@ -244,13 +252,13 @@ if ($form->my_page_name == 'edit_order') {
|
||||
$DATA['GROUP_LEVEL'] = $_SESSION['GROUP_ACL_LEVEL'];
|
||||
$PAGES = $_SESSION['PAGES'];
|
||||
|
||||
//$form->debug('menu', $form->printAr($PAGES));
|
||||
//$form->log->debug('menu', $form->log->prAr($PAGES));
|
||||
|
||||
// build nav from $PAGES ...
|
||||
if (!isset($PAGES) || !is_array($PAGES)) {
|
||||
$PAGES = array();
|
||||
$PAGES = [];
|
||||
}
|
||||
$menuarray = array();
|
||||
$menuarray = [];
|
||||
foreach ($PAGES as $PAGE_CUID => $PAGE_DATA) {
|
||||
if ($PAGE_DATA['menu'] && $PAGE_DATA['online']) {
|
||||
$menuarray[] = $PAGE_DATA;
|
||||
@@ -269,7 +277,7 @@ if ($form->my_page_name == 'edit_order') {
|
||||
}
|
||||
|
||||
$position = 0;
|
||||
$menu_data = array();
|
||||
$menu_data = [];
|
||||
// for ($i = 1; $i <= count($menuarray); $i ++) {
|
||||
foreach ($menuarray as $i => $data) {
|
||||
// do that for new array
|
||||
@@ -295,13 +303,13 @@ if ($form->my_page_name == 'edit_order') {
|
||||
}
|
||||
// on matching, we also need to check if we are in the same folder
|
||||
if (isset($data['filename']) &&
|
||||
$data['filename'] == $form->getPageName() &&
|
||||
$data['filename'] == \CoreLibs\Get\System::getPageName() &&
|
||||
(!isset($data['hostname']) || (
|
||||
isset($data['hostname']) &&
|
||||
(!$data['hostname'] || strstr($data['hostname'], CONTENT_PATH) !== false)
|
||||
))
|
||||
) {
|
||||
$position = $j;
|
||||
$position = $i;
|
||||
$menu_data[$i]['position'] = 1;
|
||||
$menu_data[$i]['popup'] = 0;
|
||||
} else {
|
||||
@@ -324,9 +332,9 @@ if ($form->my_page_name == 'edit_order') {
|
||||
$menu_data[$i]['splitfactor_out'] = 0;
|
||||
}
|
||||
} // for
|
||||
// $form->debug('MENU ARRAY', $form->printAr($menu_data));
|
||||
// $form->log->debug('MENU ARRAY', $form->log->prAr($menu_data));
|
||||
$DATA['menu_data'] = $menu_data;
|
||||
$DATA['page_name'] = $menuarray[$position]['page_name'];
|
||||
$DATA['page_name'] = $menuarray[$position]['page_name'] ?? '-Undefined ['.$position.'] -';
|
||||
$L_TITLE = $DATA['page_name'];
|
||||
// html title
|
||||
$HEADER['HTML_TITLE'] = $form->l->__($L_TITLE);
|
||||
@@ -340,7 +348,7 @@ if ($form->my_page_name == 'edit_order') {
|
||||
$DATA['form_my_page_name'] = $form->my_page_name;
|
||||
$DATA['filename_exist'] = 0;
|
||||
$DATA['drop_down_input'] = 0;
|
||||
$elements = array();
|
||||
$elements = [];
|
||||
// depending on the "getPageName()" I show different stuff
|
||||
switch ($form->my_page_name) {
|
||||
case 'edit_users':
|
||||
@@ -378,9 +386,9 @@ if ($form->my_page_name == 'edit_order') {
|
||||
$q = "DELETE FROM temp_files";
|
||||
$form->dbExec($q);
|
||||
// gets all files in the current dir and dirs given ending with .php
|
||||
$folders = array('../admin/', '../frontend/');
|
||||
$files = array('*.php');
|
||||
$search_glob = array();
|
||||
$folders = ['../admin/', '../frontend/'];
|
||||
$files = ['*.php'];
|
||||
$search_glob = [];
|
||||
foreach ($folders as $folder) {
|
||||
// make sure this folder actually exists
|
||||
if (is_dir(ROOT.$folder)) {
|
||||
@@ -466,7 +474,7 @@ if ($form->my_page_name == 'edit_order') {
|
||||
print '[No valid page definition given]';
|
||||
break;
|
||||
}
|
||||
// $form->debug('edit', "Elements: <pre>".$form->printAr($elements));
|
||||
// $form->log->debug('edit', "Elements: <pre>".$form->log->prAr($elements));
|
||||
$DATA['elements'] = $elements;
|
||||
$DATA['hidden'] = $form->formCreateHiddenFields();
|
||||
$DATA['save_delete'] = $form->formCreateSaveDelete();
|
||||
@@ -494,7 +502,7 @@ if (is_dir(BASE.CACHE)) {
|
||||
$smarty->display($EDIT_TEMPLATE, 'editAdmin_'.$smarty->lang, 'editAdmin_'.$smarty->lang);
|
||||
|
||||
// debug output
|
||||
echo $login->printErrorMsg();
|
||||
echo $form->printErrorMsg();
|
||||
echo $login->log->printErrorMsg();
|
||||
echo $form->log->printErrorMsg();
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_access = array(
|
||||
'table_array' => array(
|
||||
'edit_access_id' => array(
|
||||
'value' => isset($GLOBALS['edit_access_id']) ? $GLOBALS['edit_access_id'] : '',
|
||||
$edit_access = [
|
||||
'table_array' => [
|
||||
'edit_access_id' => [
|
||||
'value' => $GLOBALS['edit_access_id'] ?? '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
],
|
||||
'name' => [
|
||||
'value' => $GLOBALS['name'] ?? '',
|
||||
'output_name' => 'Access Group Name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumericspace|unique'
|
||||
),
|
||||
'description' => array(
|
||||
'value' => isset($GLOBALS['description']) ? $GLOBALS['description'] : '',
|
||||
],
|
||||
'description' => [
|
||||
'value' => $GLOBALS['description'] ?? '',
|
||||
'output_name' => 'Description',
|
||||
'type' => 'textarea'
|
||||
),
|
||||
'color' => array(
|
||||
'value' => isset($GLOBALS['color']) ? $GLOBALS['color'] : '',
|
||||
],
|
||||
'color' => [
|
||||
'value' => $GLOBALS['color'] ?? '',
|
||||
'output_name' => 'Color',
|
||||
'mandatory' => 0,
|
||||
'type' => 'text',
|
||||
@@ -29,80 +29,80 @@ $edit_access = array(
|
||||
'error_check' => 'custom',
|
||||
'error_regex' => "/[\dA-Fa-f]{6}/",
|
||||
'error_example' => 'F6A544'
|
||||
),
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : 0,
|
||||
],
|
||||
'enabled' => [
|
||||
'value' => $GLOBALS['enabled'] ?? 0,
|
||||
'output_name' => 'Enabled',
|
||||
'type' => 'binary',
|
||||
'int' => 1, // OR 'bool' => 1
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'protected' => array(
|
||||
'value' => isset($GLOBALS['protected']) ? $GLOBALS['protected'] : 0,
|
||||
],
|
||||
],
|
||||
'protected' => [
|
||||
'value' => $GLOBALS['protected'] ?? 0,
|
||||
'output_name' => 'Protected',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
],
|
||||
],
|
||||
'additional_acl' => [
|
||||
'value' => $GLOBALS['additional_acl'] ?? '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
'error_check' => 'json',
|
||||
'rows' => 10,
|
||||
'cols' => 60
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
'table_name' => 'edit_access',
|
||||
"load_query" => "SELECT edit_access_id, name FROM edit_access ORDER BY name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'name'
|
||||
)
|
||||
),
|
||||
'element_list' => array(
|
||||
'edit_access_data' => array(
|
||||
],
|
||||
],
|
||||
'element_list' => [
|
||||
'edit_access_data' => [
|
||||
'output_name' => 'Edit Access Data',
|
||||
'delete_name' => 'remove_edit_access_data',
|
||||
// 'type' => 'reference_data', # is not a sub table read and connect, but only a sub table with data
|
||||
'max_empty' => 5, # maxium visible if no data is set, if filled add this number to visible
|
||||
// 'type' => 'reference_data', // is not a sub table read and connect, but only a sub table with data
|
||||
'max_empty' => 5, // maxium visible if no data is set, if filled add this number to visible
|
||||
'prefix' => 'ead',
|
||||
'elements' => array(
|
||||
'name' => array(
|
||||
'elements' => [
|
||||
'name' => [
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique',
|
||||
'output_name' => 'Name',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'value' => array(
|
||||
],
|
||||
'value' => [
|
||||
'type' => 'text',
|
||||
'output_name' => 'Value'
|
||||
),
|
||||
'enabled' => array(
|
||||
],
|
||||
'enabled' => [
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array(1)
|
||||
),
|
||||
/*'edit_access_id' => array(
|
||||
'element_list' => [1]
|
||||
],
|
||||
/*'edit_access_id' => [
|
||||
'int' => 1,
|
||||
'type' => 'hidden',
|
||||
'fk_id' => 1 # reference main key from master table above
|
||||
),*/
|
||||
'edit_access_data_id' => array(
|
||||
'fk_id' => 1 // reference main key from master table above
|
||||
],*/
|
||||
'edit_access_data_id' => [
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,109 +1,109 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_groups = array(
|
||||
'table_array' => array(
|
||||
'edit_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_group_id']) ? $GLOBALS['edit_group_id'] : '',
|
||||
$edit_groups = [
|
||||
'table_array' => [
|
||||
'edit_group_id' => [
|
||||
'value' => $GLOBALS['edit_group_id'] ?? '',
|
||||
'pk' => 1,
|
||||
'type' => 'hidden'
|
||||
),
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
],
|
||||
'enabled' => [
|
||||
'value' => $GLOBALS['enabled'] ?? '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
],
|
||||
],
|
||||
'name' => [
|
||||
'value' => $GLOBALS['name'] ?? '',
|
||||
'output_name' => 'Group Name',
|
||||
'type' => 'text',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'value' => isset($GLOBALS['edit_access_right_id']) ? $GLOBALS['edit_access_right_id'] : '',
|
||||
],
|
||||
'edit_access_right_id' => [
|
||||
'value' => $GLOBALS['edit_access_right_id'] ?? '',
|
||||
'output_name' => 'Group Level',
|
||||
'mandatory' => 1,
|
||||
'int' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_scheme_id' => array(
|
||||
'value' => isset($GLOBALS['edit_scheme_id']) ? $GLOBALS['edit_scheme_id'] : '',
|
||||
],
|
||||
'edit_scheme_id' => [
|
||||
'value' => $GLOBALS['edit_scheme_id'] ?? '',
|
||||
'output_name' => 'Group Scheme',
|
||||
'int_null' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
|
||||
),
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
],
|
||||
'additional_acl' => [
|
||||
'value' => $GLOBALS['additional_acl'] ?? '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
'error_check' => 'json',
|
||||
'rows' => 10,
|
||||
'cols' => 60
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
'load_query' => "SELECT edit_group_id, name, enabled FROM edit_group ORDER BY name",
|
||||
'table_name' => 'edit_group',
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'name'
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'enabled',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'binary' => ['Yes', 'No'],
|
||||
'before_value' => 'Enabled: '
|
||||
)
|
||||
),
|
||||
'element_list' => array(
|
||||
'edit_page_access' => array(
|
||||
],
|
||||
],
|
||||
'element_list' => [
|
||||
'edit_page_access' => [
|
||||
'output_name' => 'Pages',
|
||||
'mandatory' => 1,
|
||||
'delete' => 0, // set then reference entries are deleted, else the 'enable' flag is only set
|
||||
'enable_name' => 'enable_page_access',
|
||||
'prefix' => 'epa',
|
||||
'read_data' => array(
|
||||
'read_data' => [
|
||||
'table_name' => 'edit_page',
|
||||
'pk_id' => 'edit_page_id',
|
||||
'name' => 'name',
|
||||
'order' => 'order_number'
|
||||
),
|
||||
'elements' => array(
|
||||
'edit_page_access_id' => array(
|
||||
],
|
||||
'elements' => [
|
||||
'edit_page_access_id' => [
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
),
|
||||
'enabled' => array(
|
||||
],
|
||||
'enabled' => [
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'element_list' => [1],
|
||||
],
|
||||
'edit_access_right_id' => [
|
||||
'type' => 'drop_down_db',
|
||||
'output_name' => 'Access Level',
|
||||
'int' => 1,
|
||||
'preset' => 1, // first of the select
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_page_id' => array(
|
||||
],
|
||||
'edit_page_id' => [
|
||||
'int' => 1,
|
||||
'type' => 'hidden'
|
||||
)
|
||||
],
|
||||
/*,
|
||||
'edit_default' => array(
|
||||
'edit_default' => [
|
||||
'output_name' => 'Default',
|
||||
'type' => 'radio',
|
||||
'mandatory' => 1
|
||||
)*/
|
||||
)
|
||||
) // edit pages ggroup
|
||||
)
|
||||
);
|
||||
],*/
|
||||
],
|
||||
], // edit pages ggroup
|
||||
],
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,75 +1,75 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_languages=array(
|
||||
'table_array' => array(
|
||||
'edit_language_id' => array(
|
||||
'value' => isset($GLOBALS['edit_language_id']) ? $GLOBALS['edit_language_id'] : '',
|
||||
$edit_languages=[
|
||||
'table_array' => [
|
||||
'edit_language_id' => [
|
||||
'value' => $GLOBALS['edit_language_id'] ?? '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'short_name' => array(
|
||||
'value' => isset($GLOBALS['short_name']) ? $GLOBALS['short_name'] : '',
|
||||
],
|
||||
'short_name' => [
|
||||
'value' => $GLOBALS['short_name'] ?? '',
|
||||
'output_name' => 'Language (short)',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 2,
|
||||
'length' => 2
|
||||
),
|
||||
'long_name' => array(
|
||||
'value' => isset($GLOBALS['long_name']) ? $GLOBALS['long_name'] : '',
|
||||
],
|
||||
'long_name' => [
|
||||
'value' => $GLOBALS['long_name'] ?? '',
|
||||
'output_name' => 'Language (long)',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 40
|
||||
),
|
||||
'iso_name' => array(
|
||||
'value' => isset($GLOBALS['iso_name']) ? $GLOBALS['iso_name'] : '',
|
||||
],
|
||||
'iso_name' => [
|
||||
'value' => $GLOBALS['iso_name'] ?? '',
|
||||
'output_name' => 'ISO Code',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
],
|
||||
'order_number' => [
|
||||
'value' => $GLOBALS['order_number'] ?? '',
|
||||
'int' => 1,
|
||||
'order' => 1
|
||||
),
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
],
|
||||
'enabled' => [
|
||||
'value' => $GLOBALS['enabled'] ?? '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'lang_default' => array(
|
||||
'value' => isset($GLOBALS['lang_default']) ? $GLOBALS['lang_default'] : '',
|
||||
],
|
||||
],
|
||||
'lang_default' => [
|
||||
'value' => $GLOBALS['lang_default'] ?? '',
|
||||
'output_name' => 'Default Language',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
)
|
||||
),
|
||||
],
|
||||
],
|
||||
],
|
||||
'load_query' => "SELECT edit_language_id, long_name, iso_name, enabled FROM edit_language ORDER BY long_name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'long_name'
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'iso_name',
|
||||
'before_value' => 'ISO: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'enabled',
|
||||
'before_value' => 'Enabled: ',
|
||||
'binary' => array('Yes','No')
|
||||
)
|
||||
),
|
||||
'binary' => ['Yes','No'],
|
||||
],
|
||||
],
|
||||
'table_name' => 'edit_language'
|
||||
);
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,40 +1,40 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_menu_group = array(
|
||||
'table_array' => array(
|
||||
'edit_menu_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_menu_group_id']) ? $GLOBALS['edit_menu_group_id'] : '',
|
||||
$edit_menu_group = [
|
||||
'table_array' => [
|
||||
'edit_menu_group_id' => [
|
||||
'value' => $GLOBALS['edit_menu_group_id'] ?? '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
],
|
||||
'name' => [
|
||||
'value' => $GLOBALS['name'] ?? '',
|
||||
'output_name' => 'Group name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'flag' => array(
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
],
|
||||
'flag' => [
|
||||
'value' => $GLOBALS['flag'] ?? '',
|
||||
'output_name' => 'Flag',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique'
|
||||
),
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
],
|
||||
'order_number' => [
|
||||
'value' => $GLOBALS['order_number'] ?? '',
|
||||
'output_name' => 'Group order',
|
||||
'type' => 'order',
|
||||
'int' => 1,
|
||||
'order' => 1
|
||||
)
|
||||
),
|
||||
],
|
||||
],
|
||||
'table_name' => 'edit_menu_group',
|
||||
'load_query' => "SELECT edit_menu_group_id, name FROM edit_menu_group ORDER BY name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'name'
|
||||
)
|
||||
)
|
||||
);
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,101 +1,101 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_pages = array(
|
||||
'table_array' => array(
|
||||
'edit_page_id' => array(
|
||||
'value' => isset($GLOBALS['edit_page_id']) ? $GLOBALS['edit_page_id'] : '',
|
||||
$edit_pages = [
|
||||
'table_array' => [
|
||||
'edit_page_id' => [
|
||||
'value' => $GLOBALS['edit_page_id'] ?? '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'filename' => array(
|
||||
'value' => isset($GLOBALS['filename']) ? $GLOBALS['filename'] : '',
|
||||
],
|
||||
'filename' => [
|
||||
'value' => $GLOBALS['filename'] ?? '',
|
||||
'output_name' => 'Add File ...',
|
||||
'mandatory' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT DISTINCT temp_files.filename AS id, temp_files.folder || temp_files.filename AS name ".
|
||||
"FROM temp_files ".
|
||||
"LEFT JOIN edit_page ep ON temp_files.filename = ep.filename ".
|
||||
"WHERE ep.filename IS NULL"
|
||||
),
|
||||
'hostname' => array(
|
||||
'value' => isset($GLOBALS['hostname']) ? $GLOBALS['hostname'] : '',
|
||||
'query' => "SELECT DISTINCT temp_files.filename AS id, temp_files.folder || temp_files.filename AS name "
|
||||
."FROM temp_files "
|
||||
."LEFT JOIN edit_page ep ON temp_files.filename = ep.filename "
|
||||
."WHERE ep.filename IS NULL"
|
||||
],
|
||||
'hostname' => [
|
||||
'value' => $GLOBALS['hostname'] ?? '',
|
||||
'output_name' => 'Hostname or folder',
|
||||
'type' => 'text'
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
],
|
||||
'name' => [
|
||||
'value' => $GLOBALS['name'] ?? '',
|
||||
'output_name' => 'Page name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
],
|
||||
'order_number' => [
|
||||
'value' => $GLOBALS['order_number'] ?? '',
|
||||
'output_name' => 'Page order',
|
||||
'type' => 'order',
|
||||
'int' => 1,
|
||||
'order' => 1
|
||||
),
|
||||
/* 'flag' => array(
|
||||
],
|
||||
/* 'flag' => [
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
'output_name' => 'Page Flag',
|
||||
'type' => 'drop_down_array',
|
||||
'query' => array(
|
||||
'query' => [
|
||||
'0' => '0',
|
||||
'1' => '1',
|
||||
'2' => '2',
|
||||
'3' => '3',
|
||||
'4' => '4',
|
||||
'5' => '5'
|
||||
)
|
||||
),*/
|
||||
'online' => array(
|
||||
'value' => isset($GLOBALS['online']) ? $GLOBALS['online'] : '',
|
||||
],
|
||||
],*/
|
||||
'online' => [
|
||||
'value' => $GLOBALS['online'] ?? '',
|
||||
'output_name' => 'Online',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'menu' => array(
|
||||
'value' => isset($GLOBALS['menu']) ? $GLOBALS['menu'] : '',
|
||||
],
|
||||
],
|
||||
'menu' => [
|
||||
'value' => $GLOBALS['menu'] ?? '',
|
||||
'output_name' => 'Menu',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'popup' => array(
|
||||
'value' => isset($GLOBALS['popup']) ? $GLOBALS['popup'] : '',
|
||||
],
|
||||
],
|
||||
'popup' => [
|
||||
'value' => $GLOBALS['popup'] ?? '',
|
||||
'output_name' => 'Popup',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'popup_x' => array(
|
||||
'value' => isset($GLOBALS['popup_x']) ? $GLOBALS['popup_x'] : '',
|
||||
],
|
||||
],
|
||||
'popup_x' => [
|
||||
'value' => $GLOBALS['popup_x'] ?? '',
|
||||
'output_name' => 'Popup Width',
|
||||
'int_null' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 4,
|
||||
'length' => 4
|
||||
),
|
||||
'popup_y' => array(
|
||||
'value' => isset($GLOBALS['popup_y']) ? $GLOBALS['popup_y'] : '',
|
||||
],
|
||||
'popup_y' => [
|
||||
'value' => $GLOBALS['popup_y'] ?? '',
|
||||
'output_name' => 'Popup Height',
|
||||
'int_null' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 4,
|
||||
'length' => 4
|
||||
),
|
||||
'content_alias_edit_page_id' => array(
|
||||
'value' => isset($GLOBALS['content_alias_edit_page_id']) ? $GLOBALS['content_alias_edit_page_id'] : '',
|
||||
],
|
||||
'content_alias_edit_page_id' => [
|
||||
'value' => $GLOBALS['content_alias_edit_page_id'] ?? '',
|
||||
'output_name' => 'Content Alias Source',
|
||||
'int_null' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
@@ -110,132 +110,132 @@ $edit_pages = array(
|
||||
// "FROM edit_page ".
|
||||
// (isset($GLOBALS['edit_page_id']) ? " WHERE edit_page_id <> ".$GLOBALS['edit_page_id'] : "")." ".
|
||||
// "ORDER BY order_number"
|
||||
)
|
||||
),
|
||||
],
|
||||
],
|
||||
'load_query' => "SELECT edit_page_id, CASE WHEN hostname IS NOT NULL THEN hostname ELSE ''::VARCHAR END || filename AS filename, name, online, menu, popup FROM edit_page ORDER BY order_number",
|
||||
'table_name' => 'edit_page',
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'name'
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'filename',
|
||||
'before_value' => 'Filename: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'online',
|
||||
'binary' => array('Yes','No'),
|
||||
'binary' => ['Yes','No'],
|
||||
'before_value' => 'Online: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'menu',
|
||||
'binary' => array('Yes','No'),
|
||||
'binary' => ['Yes','No'],
|
||||
'before_value' => 'Menu: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'popup',
|
||||
'binary' => array('Yes','No'),
|
||||
'binary' => ['Yes','No'],
|
||||
'before_value' => 'Popup: '
|
||||
)
|
||||
),
|
||||
'reference_arrays' => array(
|
||||
'edit_visible_group' => array(
|
||||
],
|
||||
],
|
||||
'reference_arrays' => [
|
||||
'edit_visible_group' => [
|
||||
'table_name' => 'edit_page_visible_group',
|
||||
'other_table_pk' => 'edit_visible_group_id',
|
||||
'output_name' => 'Visible Groups (access)',
|
||||
'mandatory' => 1,
|
||||
'select_size' => 10,
|
||||
'selected' => isset($GLOBALS['edit_visible_group_id']) ? $GLOBALS['edit_visible_group_id'] : '',
|
||||
'selected' => $GLOBALS['edit_visible_group_id'] ?? '',
|
||||
'query' => "SELECT edit_visible_group_id, 'Name: ' || name || ', ' || 'Flag: ' || flag FROM edit_visible_group ORDER BY name"
|
||||
),
|
||||
'edit_menu_group' => array(
|
||||
],
|
||||
'edit_menu_group' => [
|
||||
'table_name' => 'edit_page_menu_group',
|
||||
'other_table_pk' => 'edit_menu_group_id',
|
||||
'output_name' => 'Menu Groups (grouping)',
|
||||
'mandatory' => 1,
|
||||
'select_size' => 10,
|
||||
'selected' => isset($GLOBALS['edit_menu_group_id']) ? $GLOBALS['edit_menu_group_id'] : '',
|
||||
'selected' => $GLOBALS['edit_menu_group_id'] ?? '',
|
||||
'query' => "SELECT edit_menu_group_id, 'Name: ' || name || ', ' || 'Flag: ' || flag FROM edit_menu_group ORDER BY order_number"
|
||||
)
|
||||
],
|
||||
|
||||
),
|
||||
'element_list' => array(
|
||||
'edit_query_string' => array(
|
||||
],
|
||||
'element_list' => [
|
||||
'edit_query_string' => [
|
||||
'output_name' => 'Query Strings',
|
||||
'delete_name' => 'remove_query_string',
|
||||
'prefix' => 'eqs',
|
||||
'elements' => array(
|
||||
'name' => array(
|
||||
'elements' => [
|
||||
'name' => [
|
||||
'output_name' => 'Name',
|
||||
'type' => 'text',
|
||||
'error_check' => 'unique|alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'value' => array(
|
||||
],
|
||||
'value' => [
|
||||
'output_name' => 'Value',
|
||||
'type' => 'text'
|
||||
),
|
||||
'enabled' => array(
|
||||
],
|
||||
'enabled' => [
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'dynamic' => array(
|
||||
'element_list' => [1],
|
||||
],
|
||||
'dynamic' => [
|
||||
'output_name' => 'Dynamic',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_query_string_id' => array(
|
||||
'element_list' => [1],
|
||||
],
|
||||
'edit_query_string_id' => [
|
||||
'type' => 'hidden',
|
||||
'pk_id' => 1
|
||||
)
|
||||
) // elements
|
||||
), // query_string element list
|
||||
'edit_page_content' => array(
|
||||
],
|
||||
], // elements
|
||||
], // query_string element list
|
||||
'edit_page_content' => [
|
||||
'output_name' => 'Page Content',
|
||||
'delete_name' => 'remove_page_content',
|
||||
'prefix' => 'epc',
|
||||
'elements' => array(
|
||||
'name' => array(
|
||||
'elements' => [
|
||||
'name' => [
|
||||
'output_name' => 'Content',
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'uid' => array(
|
||||
],
|
||||
'uid' => [
|
||||
'output_name' => 'UID',
|
||||
'type' => 'text',
|
||||
'error_check' => 'unique|alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'order_number' => array(
|
||||
],
|
||||
'order_number' => [
|
||||
'output_name' => 'Order',
|
||||
'type' => 'text',
|
||||
'error_check' => 'int',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'online' => array(
|
||||
],
|
||||
'online' => [
|
||||
'output_name' => 'Online',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'element_list' => [1],
|
||||
],
|
||||
'edit_access_right_id' => [
|
||||
'type' => 'drop_down_db',
|
||||
'output_name' => 'Access Level',
|
||||
'int' => 1,
|
||||
'preset' => 1, // first of the select
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_page_content_id' => array(
|
||||
],
|
||||
'edit_page_content_id' => [
|
||||
'type' => 'hidden',
|
||||
'pk_id' => 1
|
||||
)
|
||||
)
|
||||
)
|
||||
) // element list
|
||||
);
|
||||
],
|
||||
],
|
||||
],
|
||||
], // element list
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_schemes = array(
|
||||
'table_array' => array(
|
||||
'edit_scheme_id' => array(
|
||||
'value' => isset($GLOBALS['edit_scheme_id']) ? $GLOBALS['edit_scheme_id'] : '',
|
||||
$edit_schemes = [
|
||||
'table_array' => [
|
||||
'edit_scheme_id' => [
|
||||
'value' => $GLOBALS['edit_scheme_id'] ?? '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
],
|
||||
'name' => [
|
||||
'value' => $GLOBALS['name'] ?? '',
|
||||
'output_name' => 'Scheme Name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'header_color' => array(
|
||||
'value' => isset($GLOBALS['header_color']) ? $GLOBALS['header_color'] : '',
|
||||
],
|
||||
'header_color' => [
|
||||
'value' => $GLOBALS['header_color'] ?? '',
|
||||
'output_name' => 'Header Color',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
@@ -23,35 +23,35 @@ $edit_schemes = array(
|
||||
'error_check' => 'custom',
|
||||
'error_regex' => '/[\dA-Fa-f]{6}/',
|
||||
'error_example' => 'F6A544'
|
||||
),
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
],
|
||||
'enabled' => [
|
||||
'value' => $GLOBALS['enabled'] ?? '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'template' => array(
|
||||
'value' => isset($GLOBALS['template']) ? $GLOBALS['template'] : '',
|
||||
],
|
||||
],
|
||||
'template' => [
|
||||
'value' => $GLOBALS['template'] ?? '',
|
||||
'output_name' => 'Template',
|
||||
'type' => 'text'
|
||||
)
|
||||
),
|
||||
],
|
||||
],
|
||||
'table_name' => 'edit_scheme',
|
||||
'load_query' => "SELECT edit_scheme_id, name, enabled FROM edit_scheme ORDER BY name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'name'
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'enabled',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'binary' => ['Yes', 'No'],
|
||||
'before_value' => 'Enabled: '
|
||||
)
|
||||
)
|
||||
); // main array
|
||||
],
|
||||
],
|
||||
]; // main array
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,270 +1,270 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_users = array(
|
||||
'table_array' => array(
|
||||
'edit_user_id' => array(
|
||||
'value' => isset($GLOBALS['edit_user_id']) ? $GLOBALS['edit_user_id'] : '',
|
||||
$edit_users = [
|
||||
'table_array' => [
|
||||
'edit_user_id' => [
|
||||
'value' => $GLOBALS['edit_user_id'] ?? '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1,
|
||||
'int' => 1
|
||||
),
|
||||
'username' => array(
|
||||
'value' => isset($GLOBALS['username']) ? $GLOBALS['username'] : '',
|
||||
],
|
||||
'username' => [
|
||||
'value' => $GLOBALS['username'] ?? '',
|
||||
'output_name' => 'Username',
|
||||
'mandatory' => 1,
|
||||
'error_check' => 'unique|alphanumericextended',
|
||||
'type' => 'text'
|
||||
),
|
||||
'password' => array(
|
||||
'value' => isset($GLOBALS['password']) ? $GLOBALS['password'] : '',
|
||||
'HIDDEN_value' => isset($GLOBALS['HIDDEN_password']) ? $GLOBALS['HIDDEN_password'] : '',
|
||||
'CONFIRM_value' => isset($GLOBALS['CONFIRM_password']) ? $GLOBALS['CONFIRM_password'] : '',
|
||||
],
|
||||
'password' => [
|
||||
'value' => $GLOBALS['password'] ?? '',
|
||||
'HIDDEN_value' => $GLOBALS['HIDDEN_password'] ?? '',
|
||||
'CONFIRM_value' => $GLOBALS['CONFIRM_password'] ?? '',
|
||||
'output_name' => 'Password',
|
||||
'mandatory' => 1,
|
||||
'type' => 'password', // later has to be password for encryption in database
|
||||
'update' => array( // connected field updates, and update data
|
||||
'password_change_date' => array( // db row to update
|
||||
'update' => [ // connected field updates, and update data
|
||||
'password_change_date' => [ // db row to update
|
||||
'type' => 'date', // type of field (int/text/date/etc)
|
||||
'value' => 'NOW()' // value [todo: complex reference
|
||||
)
|
||||
)
|
||||
),
|
||||
],
|
||||
],
|
||||
],
|
||||
// password date when first insert and password is set, needs special field with connection to password
|
||||
// password reset force interval, if set, user needs to reset password after X time period
|
||||
'password_change_interval' => array(
|
||||
'value' => isset($GLOBALS['password_change_interval']) ? $GLOBALS['password_change_interval'] : '',
|
||||
'password_change_interval' => [
|
||||
'value' => $GLOBALS['password_change_interval'] ?? '',
|
||||
'output_name' => 'Password change interval',
|
||||
'error_check' => 'intervalshort', // can be any date length format. n Y/M/D [not H/M/S], only one set, no combination
|
||||
'type' => 'text',
|
||||
'interval' => 1, // interval needs NULL write for empty
|
||||
'size' => 5, // make it 5 chars long
|
||||
'length' => 5
|
||||
),
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
],
|
||||
'enabled' => [
|
||||
'value' => $GLOBALS['enabled'] ?? '',
|
||||
'output_name' => 'Enabled',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'strict' => array(
|
||||
'value' => isset($GLOBALS['strict']) ? $GLOBALS['strict'] : '',
|
||||
],
|
||||
],
|
||||
'strict' => [
|
||||
'value' => $GLOBALS['strict'] ?? '',
|
||||
'output_name' => 'Strict (Lock after errors)',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'locked' => array(
|
||||
'value' => isset($GLOBALS['locked']) ? $GLOBALS['locked'] : '',
|
||||
],
|
||||
],
|
||||
'locked' => [
|
||||
'value' => $GLOBALS['locked'] ?? '',
|
||||
'output_name' => 'Locked (auto set if strict with errors)',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'admin' => array(
|
||||
'value' => isset($GLOBALS['admin']) ? $GLOBALS['admin'] : '',
|
||||
],
|
||||
],
|
||||
'admin' => [
|
||||
'value' => $GLOBALS['admin'] ?? '',
|
||||
'output_name' => 'Admin',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'debug' => array(
|
||||
'value' => isset($GLOBALS['debug']) ? $GLOBALS['debug'] : '',
|
||||
],
|
||||
],
|
||||
'debug' => [
|
||||
'value' => $GLOBALS['debug'] ?? '',
|
||||
'output_name' => 'Debug',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'db_debug' => array(
|
||||
'value' => isset($GLOBALS['db_debug']) ? $GLOBALS['db_debug'] : '',
|
||||
],
|
||||
],
|
||||
'db_debug' => [
|
||||
'value' => $GLOBALS['db_debug'] ?? '',
|
||||
'output_name' => 'DB Debug',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'email' => array(
|
||||
'value' => isset($GLOBALS['email']) ? $GLOBALS['email'] : '',
|
||||
],
|
||||
],
|
||||
'email' => [
|
||||
'value' => $GLOBALS['email'] ?? '',
|
||||
'output_name' => 'E-Mail',
|
||||
'type' => 'text',
|
||||
'error_check' => 'email'
|
||||
),
|
||||
'last_name' => array(
|
||||
'value' => isset($GLOBALS['last_name']) ? $GLOBALS['last_name'] : '',
|
||||
],
|
||||
'last_name' => [
|
||||
'value' => $GLOBALS['last_name'] ?? '',
|
||||
'output_name' => 'Last Name',
|
||||
'type' => 'text'
|
||||
),
|
||||
'first_name' => array(
|
||||
'value' => isset($GLOBALS['first_name']) ? $GLOBALS['first_name'] : '',
|
||||
],
|
||||
'first_name' => [
|
||||
'value' => $GLOBALS['first_name'] ?? '',
|
||||
'output_name' => 'First Name',
|
||||
'type' => 'text'
|
||||
),
|
||||
'edit_language_id' => array(
|
||||
'value' => isset($GLOBALS['edit_language_id']) ? $GLOBALS['edit_language_id'] : '',
|
||||
],
|
||||
'edit_language_id' => [
|
||||
'value' => $GLOBALS['edit_language_id'] ?? '',
|
||||
'output_name' => 'Language',
|
||||
'mandatory' => 1,
|
||||
'int' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_language_id, long_name FROM edit_language WHERE enabled = 1 ORDER BY order_number"
|
||||
),
|
||||
'edit_scheme_id' => array(
|
||||
'value' => isset($GLOBALS['edit_scheme_id']) ? $GLOBALS['edit_scheme_id'] : '',
|
||||
],
|
||||
'edit_scheme_id' => [
|
||||
'value' => $GLOBALS['edit_scheme_id'] ?? '',
|
||||
'output_name' => 'Scheme',
|
||||
'int_null' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
|
||||
),
|
||||
'edit_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_group_id']) ? $GLOBALS['edit_group_id'] : '',
|
||||
],
|
||||
'edit_group_id' => [
|
||||
'value' => $GLOBALS['edit_group_id'] ?? '',
|
||||
'output_name' => 'Group',
|
||||
'int' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_group_id, name FROM edit_group WHERE enabled = 1 ORDER BY name",
|
||||
'mandatory' => 1
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'value' => isset($GLOBALS['edit_access_right_id']) ? $GLOBALS['edit_access_right_id'] : '',
|
||||
],
|
||||
'edit_access_right_id' => [
|
||||
'value' => $GLOBALS['edit_access_right_id'] ?? '',
|
||||
'output_name' => 'User Level',
|
||||
'mandatory' => 1,
|
||||
'int' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'login_error_count' => array(
|
||||
],
|
||||
'login_error_count' => [
|
||||
'output_name' => 'Login error count',
|
||||
'value' => isset($GLOBALS['login_error_count']) ? $GLOBALS['login_error_count'] : '',
|
||||
'value' => $GLOBALS['login_error_count'] ?? '',
|
||||
'type' => 'view',
|
||||
'empty' => '0'
|
||||
),
|
||||
'login_error_date_last' => array(
|
||||
],
|
||||
'login_error_date_last' => [
|
||||
'output_name' => 'Last login error',
|
||||
'value' => isset($GLOBALS['login_error_date_liast']) ? $GLOBALS['login_error_date_liast'] : '',
|
||||
'value' => $GLOBALS['login_error_date_liast'] ?? '',
|
||||
'type' => 'view',
|
||||
'empty' => '-'
|
||||
),
|
||||
'login_error_date_first' => array(
|
||||
],
|
||||
'login_error_date_first' => [
|
||||
'output_name' => 'First login error',
|
||||
'value' => isset($GLOBALS['login_error_date_first']) ? $GLOBALS['login_error_date_first'] : '',
|
||||
'value' => $GLOBALS['login_error_date_first'] ?? '',
|
||||
'type' => 'view',
|
||||
'empty' => '-'
|
||||
),
|
||||
'protected' => array(
|
||||
'value' => isset($GLOBALS['protected']) ? $GLOBALS['protected'] : '',
|
||||
],
|
||||
'protected' => [
|
||||
'value' => $GLOBALS['protected'] ?? '',
|
||||
'output_name' => 'Protected',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'element_list' => [
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
],
|
||||
],
|
||||
'additional_acl' => [
|
||||
'value' => $GLOBALS['additional_acl'] ?? '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
'error_check' => 'json',
|
||||
'rows' => 10,
|
||||
'cols' => 60
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
'load_query' => "SELECT edit_user_id, username, enabled, debug, db_debug, strict, locked, login_error_count FROM edit_user ORDER BY username",
|
||||
'table_name' => 'edit_user',
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'username'
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'enabled',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'binary' => ['Yes', 'No'],
|
||||
'before_value' => 'Enabled: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'debug',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'binary' => ['Yes', 'No'],
|
||||
'before_value' => 'Debug: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'db_debug',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'binary' => ['Yes', 'No'],
|
||||
'before_value' => 'DB Debug: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'strict',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'binary' => ['Yes', 'No'],
|
||||
'before_value' => 'Strict: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'locked',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'binary' => ['Yes', 'No'],
|
||||
'before_value' => 'Locked: '
|
||||
),
|
||||
array(
|
||||
],
|
||||
[
|
||||
'name' => 'login_error_count',
|
||||
'before_value' => 'Errors: '
|
||||
)
|
||||
),
|
||||
'element_list' => array(
|
||||
'edit_access_user' => array(
|
||||
],
|
||||
],
|
||||
'element_list' => [
|
||||
'edit_access_user' => [
|
||||
'output_name' => 'Accounts',
|
||||
'mandatory' => 1,
|
||||
'delete' => 0, // set then reference entries are deleted, else the 'enable' flag is only set
|
||||
'prefix' => 'ecu',
|
||||
'read_data' => array(
|
||||
'read_data' => [
|
||||
'table_name' => 'edit_access',
|
||||
'pk_id' => 'edit_access_id',
|
||||
'name' => 'name',
|
||||
'order' => 'name'
|
||||
),
|
||||
'elements' => array(
|
||||
'edit_access_user_id' => array(
|
||||
],
|
||||
'elements' => [
|
||||
'edit_access_user_id' => [
|
||||
'output_name' => 'Activate',
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
),
|
||||
'enabled' => array(
|
||||
],
|
||||
'enabled' => [
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'element_list' => [1],
|
||||
],
|
||||
'edit_access_right_id' => [
|
||||
'type' => 'drop_down_db',
|
||||
'output_name' => 'Access Level',
|
||||
'preset' => 1, // first of the select
|
||||
'int' => 1,
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_default' => array(
|
||||
],
|
||||
'edit_default' => [
|
||||
'type' => 'radio_group',
|
||||
'output_name' => 'Default',
|
||||
'int' => 1,
|
||||
'element_list' => 'radio_group'
|
||||
),
|
||||
'edit_access_id' => array(
|
||||
],
|
||||
'edit_access_id' => [
|
||||
'type' => 'hidden',
|
||||
'int' => 1
|
||||
)
|
||||
)
|
||||
) // edit pages ggroup
|
||||
)
|
||||
);
|
||||
],
|
||||
],
|
||||
], // edit pages ggroup
|
||||
],
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,33 +1,33 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_visible_group = array(
|
||||
'table_array' => array(
|
||||
'edit_visible_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_visible_group_id']) ? $GLOBALS['edit_visible_group_id'] : '',
|
||||
$edit_visible_group = [
|
||||
'table_array' => [
|
||||
'edit_visible_group_id' => [
|
||||
'value' => $GLOBALS['edit_visible_group_id'] ?? '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
],
|
||||
'name' => [
|
||||
'value' => $GLOBALS['name'] ?? '',
|
||||
'output_name' => 'Group name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'flag' => array(
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
],
|
||||
'flag' => [
|
||||
'value' => $GLOBALS['flag'] ?? '',
|
||||
'output_name' => 'Flag',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique'
|
||||
)
|
||||
),
|
||||
],
|
||||
],
|
||||
'table_name' => 'edit_visible_group',
|
||||
'load_query' => "SELECT edit_visible_group_id, name FROM edit_visible_group ORDER BY name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'show_fields' => [
|
||||
[
|
||||
'name' => 'name'
|
||||
)
|
||||
)
|
||||
);
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -12,13 +12,19 @@
|
||||
<div class="jq-container">
|
||||
<div id="jq-test" class="jp-test">
|
||||
<div id="test-div" class="test-div">
|
||||
Some content ehre or asdfasdfasf
|
||||
Some content here or asdfasdfasf
|
||||
</div>
|
||||
<div id="translate-div">
|
||||
TRANSLATION SMARTY: {t}I should be translated{/t}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="loop-test">
|
||||
<div>LOOP TEST</div>
|
||||
{section name=page_list start=1 loop=$loop_start+1}
|
||||
<div>LOOP OUTPUT: {$smarty.section.page_list.index}</div>
|
||||
{/section}
|
||||
</div>
|
||||
{* progresss indicator *}
|
||||
<div id="indicator"></div>
|
||||
{* the action confirm box *}
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
{if $STYLESHEET}
|
||||
<link rel=stylesheet type="text/css" href="{$css}{$STYLESHEET}">
|
||||
{/if}
|
||||
{if $CSS_CORE_INCLUDE}
|
||||
<link rel=stylesheet type="text/css" href="{$CSS_CORE_INCLUDE}">
|
||||
{/if}
|
||||
{if $CSS_INCLUDE}
|
||||
<link rel=stylesheet type="text/css" href="{$CSS_INCLUDE}">
|
||||
{/if}
|
||||
@@ -23,9 +26,6 @@
|
||||
<link rel=stylesheet type="text/css" href="{$CSS_SPECIAL_INCLUDE}">
|
||||
{/if}
|
||||
<script language="JavaScript" src="{$js}/firebug.js"></script>
|
||||
{if $JAVASCRIPT}
|
||||
<script language="JavaScript" src="{$js}{$JAVASCRIPT}"></script>
|
||||
{/if}
|
||||
{if $USE_JQUERY}
|
||||
{* JQuery *}
|
||||
<script type="text/javascript" src="{$js}/jquery.min.js"></script>
|
||||
@@ -37,6 +37,12 @@
|
||||
<script src="{$js}/scriptaculous/scriptaculous.js" type="text/javascript"></script>
|
||||
{/if}
|
||||
{/if}
|
||||
{if $JAVASCRIPT}
|
||||
<script language="JavaScript" src="{$js}{$JAVASCRIPT}"></script>
|
||||
{/if}
|
||||
{if $JS_CORE_INCLUDE}
|
||||
<script language="JavaScript" src="{$JS_CORE_INCLUDE}"></script>
|
||||
{/if}
|
||||
{if $JS_INCLUDE}
|
||||
<script language="JavaScript" src="{$JS_INCLUDE}"></script>
|
||||
{/if}
|
||||
|
||||
@@ -382,7 +382,7 @@ input[type="text"]:focus, textarea:focus, select:focus {
|
||||
left: 0;
|
||||
top: 0;
|
||||
position: absolute;
|
||||
z-index: 100;
|
||||
z-index: 1000;
|
||||
}
|
||||
/* Animation for above progress */
|
||||
@keyframes rotate {
|
||||
|
||||
@@ -12,6 +12,10 @@ if (!DEBUG) {
|
||||
});
|
||||
}*/
|
||||
|
||||
// open overlay boxes counter
|
||||
var GL_OB_S = 30;
|
||||
var GL_OB_BASE = 30;
|
||||
|
||||
/**
|
||||
* opens a popup window with winName and given features (string)
|
||||
* @param {String} theURL the url
|
||||
@@ -115,17 +119,18 @@ function setCenter(id, left, top)
|
||||
|
||||
/**
|
||||
* goes to an element id position
|
||||
* @param {String} element element id to move to
|
||||
* @param {Number} offset offset from top, default is 0 (px)
|
||||
* @param {String} element element id to move to
|
||||
* @param {Number} [offset=0] offset from top, default is 0 (px)
|
||||
* @param {Number} [duration=500] animation time, default 500ms
|
||||
* @param {String} [base='body,html'] base element for offset scroll
|
||||
*/
|
||||
function goToPos(element, offset = 0)
|
||||
function goToPos(element, offset = 0, duration = 500, base = 'body,html')
|
||||
{
|
||||
try {
|
||||
if ($('#' + element).length)
|
||||
{
|
||||
$('body,html').animate({
|
||||
if ($('#' + element).length) {
|
||||
$(base).animate({
|
||||
scrollTop: $('#' + element).offset().top - offset
|
||||
}, 500);
|
||||
}, duration);
|
||||
}
|
||||
} catch (err) {
|
||||
errorCatch(err);
|
||||
@@ -151,8 +156,8 @@ function __(string)
|
||||
* simple sprintf formater for replace
|
||||
* usage: "{0} is cool, {1} is not".format("Alpha", "Beta");
|
||||
* First, checks if it isn't implemented yet.
|
||||
* @param {String} !String.prototype.format string with elements to be replaced
|
||||
* @return {String} Formated string
|
||||
* @param {String} String.prototype.format string with elements to be replaced
|
||||
* @return {String} Formated string
|
||||
*/
|
||||
if (!String.prototype.format) {
|
||||
String.prototype.format = function()
|
||||
@@ -168,6 +173,18 @@ if (!String.prototype.format) {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* round to digits (float)
|
||||
* @param {Float} Number.prototype.round Float type number to round
|
||||
* @param {Number} prec Precision to round to
|
||||
* @return {Float} Rounded number
|
||||
*/
|
||||
if (Number.prototype.round) {
|
||||
Number.prototype.round = function (prec) {
|
||||
return Math.round(this * Math.pow(10, prec)) / Math.pow(10, prec);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* formats flat number 123456 to 123,456
|
||||
* @param {Number} x number to be formated
|
||||
@@ -175,9 +192,9 @@ if (!String.prototype.format) {
|
||||
*/
|
||||
function numberWithCommas(x)
|
||||
{
|
||||
var parts = x.toString().split(".");
|
||||
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
return parts.join(".");
|
||||
var parts = x.toString().split('.');
|
||||
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||
return parts.join('.');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -279,12 +296,48 @@ function randomIdF()
|
||||
return Math.random().toString(36).substring(2);
|
||||
}
|
||||
|
||||
/**
|
||||
* check if name is a function
|
||||
* @param {string} name Name of function to check if exists
|
||||
* @return {Boolean} true/false
|
||||
*/
|
||||
function isFunction(name)
|
||||
{
|
||||
if (typeof window[name] !== 'undefined' &&
|
||||
typeof window[name] === 'function') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* call a function by its string name
|
||||
* https://stackoverflow.com/a/359910
|
||||
* example: executeFunctionByName("My.Namespace.functionName", window, arguments);
|
||||
* @param {string} functionName The function name or namespace + function
|
||||
* @param {mixed} context context (window or first namespace)
|
||||
* hidden next are all the arguments
|
||||
* @return {mixed} Return values from functon
|
||||
*/
|
||||
function executeFunctionByName(functionName, context /*, args */)
|
||||
{
|
||||
var args = Array.prototype.slice.call(arguments, 2);
|
||||
var namespaces = functionName.split('.');
|
||||
var func = namespaces.pop();
|
||||
for (var i = 0; i < namespaces.length; i++) {
|
||||
context = context[namespaces[i]];
|
||||
}
|
||||
return context[func].apply(context, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if a variable is an object
|
||||
* @param {Mixed} val possible object
|
||||
* @return {Boolean} true/false if it is an object or not
|
||||
*/
|
||||
function isObject(val) {
|
||||
function isObject(val)
|
||||
{
|
||||
if (val === null) {
|
||||
return false;
|
||||
}
|
||||
@@ -296,7 +349,8 @@ function isObject(val) {
|
||||
* @param {Object} object object to check
|
||||
* @return {Number} number of entry
|
||||
*/
|
||||
function getObjectCount(object) {
|
||||
function getObjectCount(object)
|
||||
{
|
||||
return Object.keys(object).length;
|
||||
}
|
||||
|
||||
@@ -339,6 +393,31 @@ function valueInObject(object, value)
|
||||
// }) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* true deep copy for Javascript objects
|
||||
* if Object.assign({}, obj) is not working (shallow)
|
||||
* or if JSON.parse(JSON.stringify(obj)) is failing
|
||||
* @param {Object} inObject Object to copy
|
||||
* @return {Object} Copied Object
|
||||
*/
|
||||
function deepCopyFunction(inObject)
|
||||
{
|
||||
var outObject, value, key;
|
||||
if (typeof inObject !== "object" || inObject === null) {
|
||||
return inObject; // Return the value if inObject is not an object
|
||||
}
|
||||
// Create an array or object to hold the values
|
||||
outObject = Array.isArray(inObject) ? [] : {};
|
||||
// loop over ech entry in object
|
||||
for (key in inObject) {
|
||||
value = inObject[key];
|
||||
// Recursively (deep) copy for nested objects, including arrays
|
||||
outObject[key] = deepCopyFunction(value);
|
||||
}
|
||||
|
||||
return outObject;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if a DOM element actually exists
|
||||
* @param {String} id Element id to check for
|
||||
@@ -365,6 +444,49 @@ function formatBytes(bytes)
|
||||
return parseFloat(Math.round(bytes * Math.pow(10, 2)) / Math.pow(10, 2)) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
|
||||
}
|
||||
|
||||
/**
|
||||
* like formatBytes, but returns bytes for <1KB and not 0.n KB
|
||||
* @param {Number} bytes bytes in int
|
||||
* @return {String} string in GB/MB/KB
|
||||
*/
|
||||
function formatBytesLong(bytes)
|
||||
{
|
||||
var i = Math.floor(Math.log(bytes) / Math.log(1024));
|
||||
var sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
||||
return (bytes / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + sizes[i];
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a string with B/K/M/etc into a byte number
|
||||
* @param {String|Number} bytes Any string with B/K/M/etc
|
||||
* @return {String|Number} A byte number, or original string as is
|
||||
*/
|
||||
function stringByteFormat(bytes)
|
||||
{
|
||||
// if anything not string return
|
||||
if (!(typeof bytes === 'string' || bytes instanceof String)) {
|
||||
return bytes;
|
||||
}
|
||||
// for pow exponent list
|
||||
let valid_units = 'bkmgtpezy';
|
||||
// valid string that can be converted
|
||||
let regex = /([\d.,]*)\s?(eb|pb|tb|gb|mb|kb|e|p|t|g|m|k|b)$/i;
|
||||
let matches = bytes.match(regex);
|
||||
// if nothing found, return original input
|
||||
if (matches !== null) {
|
||||
// remove all non valid entries outside numbers and .
|
||||
// convert to float number
|
||||
let m1 = parseFloat(matches[1].replace(/[^0-9.]/,''));
|
||||
// only get the FIRST letter from the size, convert it to lower case
|
||||
let m2 = matches[2].replace(/[^bkmgtpezy]/i, '').charAt(0).toLowerCase();
|
||||
if (m2) {
|
||||
// use the position in the valid unit list to do the math conversion
|
||||
bytes = m1 * Math.pow(1024, valid_units.indexOf(m2));
|
||||
}
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* prints out error messages based on data available from the browser
|
||||
* @param {Object} err error from try/catch block
|
||||
@@ -394,6 +516,20 @@ function errorCatch(err)
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
* OLD action indicator and overlay boxes calls
|
||||
* DO NOT USE
|
||||
* actionIndicator -> showActionIndicator
|
||||
* actionIndicator -> hideActionIndicator
|
||||
* actionIndicatorShow -> showActionIndicator
|
||||
* actionIndicatorHide -> hideActionIndicator
|
||||
* overlayBoxShow -> showOverlayBoxLayers
|
||||
* overlayBoxHide -> hideOverlayBoxLayers
|
||||
* setOverlayBox -> showOverlayBoxLayers
|
||||
* hideOverlayBox -> hideOverlayBoxLayers
|
||||
* ClearCall -> ClearCallActionBox
|
||||
* ***********************************************************/
|
||||
|
||||
/**
|
||||
* show or hide the "do" overlay
|
||||
* @param {String} loc location name for action indicator
|
||||
@@ -402,10 +538,10 @@ function errorCatch(err)
|
||||
*/
|
||||
function actionIndicator(loc, overlay = true)
|
||||
{
|
||||
if ($('#overlayBox').is(':visible')) {
|
||||
if ($('#indicator').is(':visible')) {
|
||||
actionIndicatorHide(loc, overlay);
|
||||
} else {
|
||||
actionIndicatorShow(loc, overlay);
|
||||
actionIndicatorShow(loc, overlay);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -418,9 +554,11 @@ function actionIndicator(loc, overlay = true)
|
||||
*/
|
||||
function actionIndicatorShow(loc, overlay = true)
|
||||
{
|
||||
console.log('Indicator: SHOW [%s]', loc);
|
||||
// console.log('Indicator: SHOW [%s]', loc);
|
||||
if (!$('#indicator').is(':visible')) {
|
||||
$('#indicator').addClass('progress');
|
||||
if (!$('#indicator').hasClass('progress')) {
|
||||
$('#indicator').addClass('progress');
|
||||
}
|
||||
setCenter('indicator', true, true);
|
||||
$('#indicator').show();
|
||||
}
|
||||
@@ -438,16 +576,15 @@ function actionIndicatorShow(loc, overlay = true)
|
||||
*/
|
||||
function actionIndicatorHide(loc, overlay = true)
|
||||
{
|
||||
console.log('Indicator: HIDE [%s]', loc);
|
||||
// console.log('Indicator: HIDE [%s]', loc);
|
||||
$('#indicator').hide();
|
||||
$('#indicator').removeClass('progress');
|
||||
if (overlay === true) {
|
||||
overlayBoxHide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* shows the overlay box
|
||||
* shows the overlay box or if already visible, bumps the zIndex to 100
|
||||
*/
|
||||
function overlayBoxShow()
|
||||
{
|
||||
@@ -456,16 +593,17 @@ function overlayBoxShow()
|
||||
$('#overlayBox').css('zIndex', '100');
|
||||
} else {
|
||||
$('#overlayBox').show();
|
||||
$('#overlayBox').css('zIndex', '98');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* hides the overlay box
|
||||
* hides the overlay box or if zIndex is 100 bumps it down to previous level
|
||||
*/
|
||||
function overlayBoxHide()
|
||||
{
|
||||
// if the overlay box z-index is 100, do no hide, but set to 98
|
||||
if ($('#overlayBox').css('zIndex') == 100) {
|
||||
if ($('#overlayBox').css('zIndex') >= 100) {
|
||||
$('#overlayBox').css('zIndex', '98');
|
||||
} else {
|
||||
$('#overlayBox').hide();
|
||||
@@ -482,16 +620,182 @@ function setOverlayBox()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* opposite of set, always hides overlay box
|
||||
*/
|
||||
function hideOverlayBox()
|
||||
{
|
||||
if ($('#overlayBox').is(':visible')) {
|
||||
$('#overlayBox').hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* the abort call, clears the action box and hides it and the overlay box
|
||||
*/
|
||||
function ClearCall()
|
||||
{
|
||||
$('#actionBox').innerHTML = '';
|
||||
$('#actionBox').html('');
|
||||
$('#actionBox').hide();
|
||||
$('#overlayBox').hide();
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
* NEW action indicator and overlay box calls
|
||||
* USE THIS
|
||||
* ***********************************************************/
|
||||
|
||||
/**
|
||||
* show action indicator
|
||||
* - checks if not existing and add
|
||||
* - only shows if not visible (else ignore)
|
||||
* - overlaybox check is called and shown on a fixzed
|
||||
* zIndex of 1000
|
||||
* - indicator is page centered
|
||||
* @param {String} loc ID string, only used for console log
|
||||
*/
|
||||
function showActionIndicator(loc)
|
||||
{
|
||||
// console.log('Indicator: SHOW [%s]', loc);
|
||||
// check if indicator element exists
|
||||
if ($('#indicator').length == 0) {
|
||||
var el = document.createElement('div');
|
||||
el.className = 'progress hide';
|
||||
el.id = 'indicator';
|
||||
$('body').append(el);
|
||||
} else if (!$('#indicator').hasClass('progress')) {
|
||||
// if I add a class it will not be hidden anymore
|
||||
// hide it
|
||||
$('#indicator').addClass('progress').hide();
|
||||
}
|
||||
// indicator not visible
|
||||
if (!$('#indicator').is(':visible')) {
|
||||
// check if overlay box element exits
|
||||
checkOverlayExists();
|
||||
// if not visible show
|
||||
if (!$('#overlayBox').is(':visible')) {
|
||||
$('#overlayBox').show();
|
||||
}
|
||||
// always set to 1000 zIndex to be top
|
||||
$('#overlayBox').css('zIndex', 1000);
|
||||
// show indicator
|
||||
$('#indicator').show();
|
||||
// center it
|
||||
setCenter('indicator', true, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* hide action indicator, if it is visiable
|
||||
* If the global variable GL_OB_S is > GL_OB_BASE then
|
||||
* the overlayBox is not hidden but the zIndex
|
||||
* is set to this value
|
||||
* @param {String} loc ID string, only used for console log
|
||||
*/
|
||||
function hideActionIndicator(loc)
|
||||
{
|
||||
// console.log('Indicator: HIDE [%s]', loc);
|
||||
// check if indicator is visible
|
||||
if ($('#indicator').is(':visible')) {
|
||||
// hide indicator
|
||||
$('#indicator').hide();
|
||||
// if global overlay box count is > 0
|
||||
// then set it to this level and keep
|
||||
if (GL_OB_S > GL_OB_BASE) {
|
||||
$('#overlayBox').css('zIndex', GL_OB_S);
|
||||
} else {
|
||||
// else hide overlay box and set zIndex to 0
|
||||
$('#overlayBox').hide();
|
||||
$('#overlayBox').css('zIndex', GL_OB_BASE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if overlayBox exists, if not it is
|
||||
* added as hidden item at the body end
|
||||
*/
|
||||
function checkOverlayExists()
|
||||
{
|
||||
// check if overlay box exists, if not create it
|
||||
if ($('#overlayBox').length == 0) {
|
||||
var el = document.createElement('div');
|
||||
el.className = 'overlayBoxElement hide';
|
||||
el.id = 'overlayBox';
|
||||
$('body').append(el);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* show overlay box
|
||||
* if not visible show and set zIndex to 10 (GL_OB_BASE)
|
||||
* if visible, add +1 to the GL_OB_S variable and
|
||||
* up zIndex by this value
|
||||
*/
|
||||
function showOverlayBoxLayers(el_id)
|
||||
{
|
||||
// console.log('SHOW overlaybox: %s', GL_OB_S);
|
||||
// if overlay box is not visible show and set zIndex to 0
|
||||
if (!$('#overlayBox').is(':visible')) {
|
||||
$('#overlayBox').show();
|
||||
$('#overlayBox').css('zIndex', GL_OB_BASE);
|
||||
// also set start variable to 0
|
||||
GL_OB_S = GL_OB_BASE;
|
||||
}
|
||||
// up the overlay box counter by 1
|
||||
GL_OB_S ++;
|
||||
// set zIndex
|
||||
$('#overlayBox').css('zIndex', GL_OB_S);
|
||||
// if element given raise zIndex and show
|
||||
if (el_id) {
|
||||
if ($('#' + el_id).length > 0) {
|
||||
$('#' + el_id).css('zIndex', GL_OB_S + 1);
|
||||
$('#' + el_id).show();
|
||||
}
|
||||
}
|
||||
// console.log('SHOW overlaybox NEW zIndex: %s', $('#overlayBox').css('zIndex'));
|
||||
}
|
||||
|
||||
/**
|
||||
* hide overlay box
|
||||
* lower GL_OB_S value by -1
|
||||
* if we are 10 (GL_OB_BASE) or below hide the overlayIndex
|
||||
* and set zIndex and GL_OB_S to 0
|
||||
* else just set zIndex to the new GL_OB_S value
|
||||
* @param {String} el_id Target to hide layer
|
||||
*/
|
||||
function hideOverlayBoxLayers(el_id)
|
||||
{
|
||||
// console.log('HIDE overlaybox: %s', GL_OB_S);
|
||||
// remove on layer
|
||||
GL_OB_S --;
|
||||
// if 0 or lower (overflow) hide it and
|
||||
// set zIndex to 0
|
||||
if (GL_OB_S <= GL_OB_BASE) {
|
||||
GL_OB_S = GL_OB_BASE;
|
||||
$('#overlayBox').hide();
|
||||
$('#overlayBox').css('zIndex', GL_OB_BASE);
|
||||
} else {
|
||||
// if OB_S > 0 then set new zIndex
|
||||
$('#overlayBox').css('zIndex', GL_OB_S);
|
||||
}
|
||||
if (el_id) {
|
||||
$('#' + el_id).hide();
|
||||
$('#' + el_id).css('zIndex', 0);
|
||||
}
|
||||
// console.log('HIDE overlaybox NEW zIndex: %s', $('#overlayBox').css('zIndex'));
|
||||
}
|
||||
|
||||
/**
|
||||
* only for single action box
|
||||
*/
|
||||
function clearCallActionBox()
|
||||
{
|
||||
$('#actionBox').html('');
|
||||
$('#actionBox').hide();
|
||||
hideOverlayBoxLayers();
|
||||
}
|
||||
|
||||
// *** DOM MANAGEMENT FUNCTIONS
|
||||
/**
|
||||
* reates object for DOM element creation flow
|
||||
@@ -527,7 +831,8 @@ function ael(base, attach, id = '')
|
||||
if (id) {
|
||||
// base id match already
|
||||
if (base.id == id) {
|
||||
base.sub.push(Object.assign({}, attach));
|
||||
// base.sub.push(Object.assign({}, attach));
|
||||
base.sub.push(deepCopyFunction(attach));
|
||||
} else {
|
||||
// sub check
|
||||
if (isObject(base.sub) && base.sub.length > 0) {
|
||||
@@ -538,7 +843,8 @@ function ael(base, attach, id = '')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
base.sub.push(Object.assign({}, attach));
|
||||
// base.sub.push(Object.assign({}, attach));
|
||||
base.sub.push(deepCopyFunction(attach));
|
||||
}
|
||||
return base;
|
||||
}
|
||||
@@ -553,7 +859,24 @@ function ael(base, attach, id = '')
|
||||
function aelx(base, ...attach)
|
||||
{
|
||||
for (var i = 0; i < attach.length; i ++) {
|
||||
base.sub.push(Object.assign({}, attach[i]));
|
||||
// base.sub.push(Object.assign({}, attach[i]));
|
||||
base.sub.push(deepCopyFunction(attach[i]));
|
||||
}
|
||||
return base;
|
||||
}
|
||||
|
||||
/**
|
||||
* same as aelx, but instead of using objects as parameters
|
||||
* get an array of objects to attach
|
||||
* @param {Object} base object to where we attach the elements
|
||||
* @param {Array} attach array of objects to attach
|
||||
* @return {Object} "none", technically there is no return needed, global attach
|
||||
*/
|
||||
function aelxar(base, attach)
|
||||
{
|
||||
for (var i = 0; i < attach.length; i ++) {
|
||||
// base.sub.push(Object.assign({}, attach[i]));
|
||||
base.sub.push(deepCopyFunction(attach[i]));
|
||||
}
|
||||
return base;
|
||||
}
|
||||
@@ -677,6 +1000,22 @@ function phfo(tree)
|
||||
// combine to string
|
||||
return content.join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create HTML elements from array list
|
||||
* as a flat element without master object file
|
||||
* Is like tree.sub call
|
||||
* @param {Array} list Array of cel created objects
|
||||
* @return {String} HTML String
|
||||
*/
|
||||
function phfa(list)
|
||||
{
|
||||
var content = [];
|
||||
for (var i = 0; i < list.length; i ++) {
|
||||
content.push(phfo(list[i]));
|
||||
}
|
||||
return content.join('');
|
||||
}
|
||||
// *** DOM MANAGEMENT FUNCTIONS
|
||||
|
||||
// BLOCK: html wrappers for quickly creating html data blocks
|
||||
@@ -717,9 +1056,10 @@ function html_options(name, data, selected = '', options_only = false, return_st
|
||||
* @param {Boolean} [return_string=false] return as string and not as element
|
||||
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||
* 'values' all others are ignored
|
||||
* @param {String} [onchange=''] onchange trigger call, default unset
|
||||
* @return {String} html with build options block
|
||||
*/
|
||||
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
||||
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '', onchange = '')
|
||||
{
|
||||
var content = [];
|
||||
var element_select;
|
||||
@@ -727,13 +1067,16 @@ function html_options_block(name, data, selected = '', multiple = 0, options_onl
|
||||
var element_option;
|
||||
var data_list = []; // for sorted output
|
||||
var value;
|
||||
var option;
|
||||
// var option;
|
||||
if (multiple > 0) {
|
||||
select_options.multiple = '';
|
||||
if (multiple > 1) {
|
||||
select_options.size = multiple;
|
||||
}
|
||||
}
|
||||
if (onchange) {
|
||||
select_options.OnChange = onchange;
|
||||
}
|
||||
// set outside select, gets stripped on return if options only is true
|
||||
element_select = cel('select', name, '', [], select_options);
|
||||
// console.log('Call for %s, options: %s', name, options_only);
|
||||
@@ -824,6 +1167,9 @@ function html_options_refill(name, data, sort = '')
|
||||
element_option.label = value;
|
||||
element_option.value = key;
|
||||
element_option.innerHTML = value;
|
||||
if (key == option_selected) {
|
||||
element_option.selected = true;
|
||||
}
|
||||
document.getElementById(name).appendChild(element_option);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
edit.pt.js
|
||||
edit.jq.js
|
||||
@@ -176,7 +176,7 @@ function setCenter(id, left, top)
|
||||
var viewport = getWindowSize();
|
||||
var offset = getScrollOffset();
|
||||
|
||||
console.log('Id %s, type: %s, dimensions %s x %s, viewport %s x %s', id, type, dimensions.width, dimensions.height, viewport.width, viewport.height);
|
||||
// console.log('Id %s, type: %s, dimensions %s x %s, viewport %s x %s', id, type, dimensions.width, dimensions.height, viewport.width, viewport.height);
|
||||
// console.log('Scrolloffset left: %s, top: %s', offset.left, offset.top);
|
||||
// console.log('Left: %s, Top: %s (%s)', parseInt((viewport.width / 2) - (dimensions.width / 2) + offset.left), parseInt((viewport.height / 2) - (dimensions.height / 2) + offset.top), parseInt((viewport.height / 2) - (dimensions.height / 2)));
|
||||
if (left) {
|
||||
@@ -201,8 +201,7 @@ function setCenter(id, left, top)
|
||||
function goToPos(element, offset = 0)
|
||||
{
|
||||
try {
|
||||
if ($(element))
|
||||
{
|
||||
if ($(element)) {
|
||||
// get the element pos
|
||||
var pos = $(element).cumulativeOffset();
|
||||
// if not top element and no offset given, set auto offset for top element
|
||||
@@ -485,7 +484,7 @@ function actionIndicator(loc = '')
|
||||
*/
|
||||
function actionIndicatorShow(loc = '')
|
||||
{
|
||||
console.log('Indicator: SHOW [%s]', loc);
|
||||
// console.log('Indicator: SHOW [%s]', loc);
|
||||
$('indicator').addClassName('progress');
|
||||
setCenter('indicator', true, true);
|
||||
$('indicator').show();
|
||||
@@ -499,14 +498,14 @@ function actionIndicatorShow(loc = '')
|
||||
*/
|
||||
function actionIndicatorHide(loc = '')
|
||||
{
|
||||
console.log('Indicator: HIDE [%s]', loc);
|
||||
// console.log('Indicator: HIDE [%s]', loc);
|
||||
$('indicator').hide();
|
||||
$('indicator').removeClassName('progress');
|
||||
overlayBoxHide();
|
||||
}
|
||||
|
||||
/**
|
||||
* shows the overlay box
|
||||
* shows the overlay box or if already visible, bumps the zIndex to 100
|
||||
*/
|
||||
function overlayBoxShow()
|
||||
{
|
||||
@@ -519,7 +518,7 @@ function overlayBoxShow()
|
||||
}
|
||||
|
||||
/**
|
||||
* hides the overlay box
|
||||
* hides the overlay box or if zIndex is 100 bumps it down to previous level
|
||||
*/
|
||||
function overlayBoxHide()
|
||||
{
|
||||
@@ -544,6 +543,16 @@ function setOverlayBox()
|
||||
$('overlayBox').show();
|
||||
}
|
||||
|
||||
/**
|
||||
* opposite of set, always hides overlay box
|
||||
*/
|
||||
function hideOverlayBox()
|
||||
{
|
||||
if ($('overlayBox').visible()) {
|
||||
$('overlayBox').hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* the abort call, clears the action box and hides it and the overlay box
|
||||
*/
|
||||
@@ -618,6 +627,21 @@ function aelx(base, ...attach)
|
||||
return base;
|
||||
}
|
||||
|
||||
/**
|
||||
* same as aelx, but instead of using objects as parameters
|
||||
* get an array of objects to attach
|
||||
* @param {Object} base object to where we attach the elements
|
||||
* @param {Array} attach array of objects to attach
|
||||
* @return {Object} "none", technically there is no return needed, global attach
|
||||
*/
|
||||
function aelxar(base, attach)
|
||||
{
|
||||
attach.each(function(t) {
|
||||
base.sub.push(Object.assign({}, t));
|
||||
});
|
||||
return base;
|
||||
}
|
||||
|
||||
/**
|
||||
* resets the sub elements of the base element given
|
||||
* @param {Object} base cel created element
|
||||
|
||||
@@ -53,7 +53,8 @@
|
||||
]
|
||||
},
|
||||
time_24hr: true,
|
||||
rangeSeparator: ' から '
|
||||
rangeSeparator: " から ",
|
||||
firstDayOfWeek: 1
|
||||
};
|
||||
fp.l10ns.ja = Japanese;
|
||||
var ja = fp.l10ns;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
2
www/layout/admin/javascript/jquery-3.6.0.min.js
vendored
Normal file
2
www/layout/admin/javascript/jquery-3.6.0.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
www/layout/admin/javascript/jquery.js
vendored
2
www/layout/admin/javascript/jquery.js
vendored
@@ -1 +1 @@
|
||||
jquery-3.4.1.js
|
||||
jquery-3.6.0.js
|
||||
2
www/layout/admin/javascript/jquery.min.js
vendored
2
www/layout/admin/javascript/jquery.min.js
vendored
@@ -1 +1 @@
|
||||
jquery-3.4.1.min.js
|
||||
jquery-3.6.0.min.js
|
||||
@@ -59,6 +59,8 @@
|
||||
|
||||
namespace CoreLibs\ACL;
|
||||
|
||||
use CoreLibs\Check\Password;
|
||||
|
||||
class Login extends \CoreLibs\DB\IO
|
||||
{
|
||||
private $euid; // the user id var
|
||||
@@ -78,33 +80,33 @@ class Login extends \CoreLibs\DB\IO
|
||||
private $pw_old_password;
|
||||
private $pw_new_password;
|
||||
private $pw_new_password_confirm;
|
||||
private $pw_change_deny_users = array(); // array of users for which the password change is forbidden
|
||||
private $pw_change_deny_users = []; // array of users for which the password change is forbidden
|
||||
private $logout_target;
|
||||
private $max_login_error_count = -1;
|
||||
private $lock_deny_users = array();
|
||||
private $lock_deny_users = [];
|
||||
|
||||
// if we have password change we need to define some rules
|
||||
private $password_min_length = PASSWORD_MIN_LENGTH;
|
||||
// max length is fixed as 255 (for input type max), if set highter, it will be set back to 255
|
||||
private $password_max_length = PASSWORD_MAX_LENGTH;
|
||||
// can have several regexes, if nothing set, all is ok
|
||||
private $password_valid_chars = array(
|
||||
private $password_valid_chars = [
|
||||
// '^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,}$',
|
||||
// '^(?.*(\pL)u)(?=.*(\pN)u)(?=.*([^\pL\pN])u).{8,}',
|
||||
);
|
||||
];
|
||||
|
||||
// all possible login error conditions
|
||||
private $login_error_msg = array();
|
||||
private $login_error_msg = [];
|
||||
// this is an array holding all strings & templates passed from the outside (translation)
|
||||
private $login_template = array(
|
||||
'strings' => array(),
|
||||
private $login_template = [
|
||||
'strings' => [],
|
||||
'password_change' => '',
|
||||
'template' => ''
|
||||
);
|
||||
];
|
||||
|
||||
// acl vars
|
||||
public $acl = array();
|
||||
public $default_acl_list = array();
|
||||
public $acl = [];
|
||||
public $default_acl_list = [];
|
||||
// login html, if we are on an ajax page
|
||||
private $login_html = '';
|
||||
private $login_is_ajax_page = false;
|
||||
@@ -114,16 +116,15 @@ class Login extends \CoreLibs\DB\IO
|
||||
|
||||
/**
|
||||
* constructor, does ALL, opens db, works through connection checks, closes itself
|
||||
* @param array $db_config db config array
|
||||
* @param int $set_control_flag class variable check flags
|
||||
* @param array $db_config db config array
|
||||
*/
|
||||
public function __construct(array $db_config, int $set_control_flag = 0)
|
||||
public function __construct(array $db_config)
|
||||
{
|
||||
// log login data for this class only
|
||||
$this->log_per_class = 1;
|
||||
|
||||
// create db connection and init base class
|
||||
parent::__construct($db_config, $set_control_flag);
|
||||
parent::__construct($db_config);
|
||||
// log login data for this class only
|
||||
$this->log->setLogPer('class', true);
|
||||
// set db special errors
|
||||
if ($this->db_init_error === true) {
|
||||
echo 'Could not connect to DB<br>';
|
||||
// if I can't connect to the DB to auth exit hard. No access allowed
|
||||
@@ -161,8 +162,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
|
||||
// if we have a search path we need to set it, to use the correct DB to login
|
||||
// check what schema to use. if there is a login schema use this, else check if there is a schema set in the config, or fall back to DB_SCHEMA if this exists, if this also does not exists use public schema
|
||||
if (defined('LOGIN_DB_SCHEMA')) {
|
||||
/** @phan-suppress-next-line PhanUndeclaredConstant */
|
||||
if (defined('LOGIN_DB_SCHEMA') && LOGIN_DB_SCHEMA) {
|
||||
$SCHEMA = LOGIN_DB_SCHEMA;
|
||||
} elseif (isset($db_config['db_schema']) && $db_config['db_schema']) {
|
||||
$SCHEMA = $db_config['db_schema'];
|
||||
@@ -192,7 +192,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
// logout target (from config)
|
||||
$this->logout_target = LOGOUT_TARGET;
|
||||
// disallow user list for password change
|
||||
$this->pw_change_deny_users = array('admin');
|
||||
$this->pw_change_deny_users = ['admin'];
|
||||
// set flag if password change is okay
|
||||
if (defined('PASSWORD_CHANGE')) {
|
||||
$this->password_change = PASSWORD_CHANGE;
|
||||
@@ -204,18 +204,18 @@ class Login extends \CoreLibs\DB\IO
|
||||
// max login counts before error reporting
|
||||
$this->max_login_error_count = 10;
|
||||
// users that never get locked, even if they are set strict
|
||||
$this->lock_deny_users = array('admin');
|
||||
$this->lock_deny_users = ['admin'];
|
||||
|
||||
// init default ACL list array
|
||||
$_SESSION['DEFAULT_ACL_LIST'] = array();
|
||||
$_SESSION['DEFAULT_ACL_LIST'] = [];
|
||||
// read the current edit_access_right list into an array
|
||||
$q = "SELECT level, type, name FROM edit_access_right WHERE level >= 0 ORDER BY level";
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
// level to description format (numeric)
|
||||
$this->default_acl_list[$res['level']] = array(
|
||||
$this->default_acl_list[$res['level']] = [
|
||||
'type' => $res['type'],
|
||||
'name' => $res['name']
|
||||
);
|
||||
];
|
||||
}
|
||||
// write that into the session
|
||||
$_SESSION['DEFAULT_ACL_LIST'] = $this->default_acl_list;
|
||||
@@ -248,12 +248,13 @@ class Login extends \CoreLibs\DB\IO
|
||||
// do something with possible debug data?
|
||||
if (TARGET == 'live' || TARGET == 'remote') {
|
||||
// login
|
||||
$this->debug_output_all = DEBUG ? 1 : 0;
|
||||
$this->echo_output_all = 0;
|
||||
$this->print_output_all = DEBUG ? 1 : 0;
|
||||
$this->log->setLogLevelAll('debug', DEBUG ? true : false);
|
||||
$this->log->setLogLevelAll('echo', false);
|
||||
$this->log->setLogLevelAll('print', DEBUG ? true : false);
|
||||
}
|
||||
$status_msg = $this->printErrorMsg();
|
||||
if ($this->echo_output_all) {
|
||||
$status_msg = $this->log->printErrorMsg();
|
||||
// if ($this->echo_output_all) {
|
||||
if ($this->log->getLogLevelAll('echo')) {
|
||||
echo $status_msg;
|
||||
}
|
||||
// exit so we don't process anything further, at all
|
||||
@@ -261,8 +262,8 @@ class Login extends \CoreLibs\DB\IO
|
||||
} else {
|
||||
// if we are on an ajax page reset any POST/GET array data to avoid
|
||||
// any accidentical processing going on
|
||||
$_POST = array();
|
||||
$_GET = array();
|
||||
$_POST = [];
|
||||
$_GET = [];
|
||||
// set the action to login so we can trigger special login html return
|
||||
$_POST['action'] = 'login';
|
||||
$_POST['login_html'] = $this->login_html;
|
||||
@@ -301,6 +302,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
if (!$password) {
|
||||
$password = $this->password;
|
||||
}
|
||||
// first, errors on missing encryption
|
||||
if ((preg_match("/^\\$2(a|y)\\$/", $hash) && CRYPT_BLOWFISH != 1) ||
|
||||
(preg_match("/^\\$1\\$/", $hash) && CRYPT_MD5 != 1) ||
|
||||
(preg_match("/^\\$[0-9A-Za-z.]{12}$/", $hash) && CRYPT_STD_DES != 1)
|
||||
@@ -308,22 +310,11 @@ class Login extends \CoreLibs\DB\IO
|
||||
// this means password cannot be decrypted because of missing crypt methods
|
||||
$this->login_error = 9999;
|
||||
$password_ok = false;
|
||||
} elseif ((preg_match("/^\\$2(a)\\$/", $hash) ||
|
||||
// old password have $07$ so we check this
|
||||
(preg_match("/^\\$2(y)\\$/", $hash) && preg_match("/\\$07\\$/", $hash)) ||
|
||||
preg_match("/^\\$1\\$/", $hash) ||
|
||||
preg_match("/^\\$[0-9A-Za-z.]{12}$/", $hash)) &&
|
||||
/** @phan-suppress-next-line PhanDeprecatedFunction */
|
||||
!$this->verifyCryptString($password, $hash)
|
||||
) {
|
||||
// check passwword as crypted, $2a$ or $2y$ is blowfish start, $1$ is MD5 start, $\w{12} is standard DES
|
||||
// this is only for OLD $07$ password
|
||||
$this->login_error = 1011;
|
||||
$password_ok = false;
|
||||
} elseif (preg_match("/^\\$2y\\$/", $hash) &&
|
||||
!$this->passwordVerify($password, $hash)
|
||||
!Password::passwordVerify($password, $hash)
|
||||
) {
|
||||
// this is the new password hash methid, is only $2y$
|
||||
// all others are not valid anymore
|
||||
$this->login_error = 1013;
|
||||
$password_ok = false;
|
||||
} elseif (!preg_match("/^\\$2(a|y)\\$/", $hash) &&
|
||||
@@ -395,10 +386,10 @@ class Login extends \CoreLibs\DB\IO
|
||||
// none to be set, set in login password check
|
||||
} else {
|
||||
// check if the current password is an invalid hash and do a rehash and set password
|
||||
// $this->debug('LOGIN', 'Hash: '.$res['password'].' -> VERIFY: '.($this->passwordVerify($this->password, $res['password']) ? 'OK' : 'FAIL').' => HASH: '.($this->passwordRehashCheck($res['password']) ? 'NEW NEEDED' : 'OK'));
|
||||
if ($this->passwordRehashCheck($res['password'])) {
|
||||
// $this->debug('LOGIN', 'Hash: '.$res['password'].' -> VERIFY: '.($Password::passwordVerify($this->password, $res['password']) ? 'OK' : 'FAIL').' => HASH: '.(Password::passwordRehashCheck($res['password']) ? 'NEW NEEDED' : 'OK'));
|
||||
if (Password::passwordRehashCheck($res['password'])) {
|
||||
// update password hash to new one now
|
||||
$q = "UPDATE edit_user SET password = '".$this->dbEscapeString($this->passwordSet($this->password))."' WHERE edit_user_id = ".$res['edit_user_id'];
|
||||
$q = "UPDATE edit_user SET password = '".$this->dbEscapeString(Password::passwordSet($this->password))."' WHERE edit_user_id = ".$res['edit_user_id'];
|
||||
$this->dbExec($q);
|
||||
}
|
||||
// normal user processing
|
||||
@@ -430,9 +421,9 @@ class Login extends \CoreLibs\DB\IO
|
||||
$q .= "WHERE edit_user_id = ".$res['edit_user_id'];
|
||||
$this->dbExec($q);
|
||||
}
|
||||
$edit_page_ids = array();
|
||||
$pages = array();
|
||||
$pages_acl = array();
|
||||
$edit_page_ids = [];
|
||||
$pages = [];
|
||||
$pages_acl = [];
|
||||
// set pages access
|
||||
$q = "SELECT ep.edit_page_id, ep.cuid, epca.cuid AS content_alias_uid, ";
|
||||
$q .= "ep.hostname, ep.filename, ep.name AS edit_page_name, ";
|
||||
@@ -448,7 +439,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
// page id array for sub data readout
|
||||
$edit_page_ids[$res['edit_page_id']] = $res['cuid'];
|
||||
// create the array for pages
|
||||
$pages[$res['cuid']] = array(
|
||||
$pages[$res['cuid']] = [
|
||||
'edit_page_id' => $res['edit_page_id'],
|
||||
'cuid' => $res['cuid'],
|
||||
'content_alias_uid' => $res['content_alias_uid'], // for reference of content data on a differen page
|
||||
@@ -463,9 +454,9 @@ class Login extends \CoreLibs\DB\IO
|
||||
'online' => $res['online'],
|
||||
'acl_level' => $res['level'],
|
||||
'acl_type' => $res['type'],
|
||||
'query' => array(),
|
||||
'visible' => array()
|
||||
);
|
||||
'query' => [],
|
||||
'visible' => []
|
||||
];
|
||||
// make reference filename -> level
|
||||
$pages_acl[$res['filename']] = $res['level'];
|
||||
} // for each page
|
||||
@@ -484,11 +475,11 @@ class Login extends \CoreLibs\DB\IO
|
||||
$q .= "WHERE enabled = 1 AND edit_page_id IN (".join(', ', array_keys($edit_page_ids)).") ";
|
||||
$q .= "ORDER BY eqs.edit_page_id";
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
$pages[$edit_page_ids[$res['edit_page_id']]]['query'][] = array(
|
||||
$pages[$edit_page_ids[$res['edit_page_id']]]['query'][] = [
|
||||
'name' => $res['name'],
|
||||
'value' => $res['value'],
|
||||
'dynamic' => $res['dynamic']
|
||||
);
|
||||
];
|
||||
}
|
||||
// get the page content and add them to the page
|
||||
$_edit_page_id = 0;
|
||||
@@ -498,7 +489,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
$q .= "epc.edit_page_id IN (".join(', ', array_keys($edit_page_ids)).") ";
|
||||
$q .= "ORDER BY epc.order_number";
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
$pages[$edit_page_ids[$res['edit_page_id']]]['content'][$res['uid']] = array(
|
||||
$pages[$edit_page_ids[$res['edit_page_id']]]['content'][$res['uid']] = [
|
||||
'name' => $res['name'],
|
||||
'uid' => $res['uid'],
|
||||
'online' => $res['online'],
|
||||
@@ -506,7 +497,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
// access name and level
|
||||
'acl_type' => $res['type'],
|
||||
'acl_level' => $res['level']
|
||||
);
|
||||
];
|
||||
}
|
||||
// write back the pages data to the output array
|
||||
$_SESSION['PAGES'] = $pages;
|
||||
@@ -517,18 +508,18 @@ class Login extends \CoreLibs\DB\IO
|
||||
$q .= "WHERE eau.edit_access_id = ea.edit_access_id AND eau.edit_access_right_id = ear.edit_access_right_id ";
|
||||
$q .= "AND eau.enabled = 1 AND edit_user_id = ".$this->euid." ";
|
||||
$q .= "ORDER BY ea.name";
|
||||
$unit_access = array();
|
||||
$eauid = array();
|
||||
$unit_acl = array();
|
||||
$unit_access = [];
|
||||
$eauid = [];
|
||||
$unit_acl = [];
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
// read edit access data fields and drop them into the unit access array
|
||||
$q_sub ="SELECT name, value FROM edit_access_data WHERE enabled = 1 AND edit_access_id = ".$res['edit_access_id'];
|
||||
$ea_data = array();
|
||||
$ea_data = [];
|
||||
while ($res_sub = $this->dbReturn($q_sub)) {
|
||||
$ea_data[$res_sub['name']] = $res_sub['value'];
|
||||
}
|
||||
// build master unit array
|
||||
$unit_access[$res['edit_access_id']] = array(
|
||||
$unit_access[$res['edit_access_id']] = [
|
||||
'id' => $res['edit_access_id'],
|
||||
'acl_level' => $res['level'],
|
||||
'acl_type' => $res['type'],
|
||||
@@ -537,7 +528,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
'color' => $res['color'],
|
||||
'default' => $res['edit_default'],
|
||||
'data' => $ea_data
|
||||
);
|
||||
];
|
||||
// set the default unit
|
||||
if ($res['edit_default']) {
|
||||
$_SESSION['UNIT_DEFAULT'] = $res['edit_access_id'];
|
||||
@@ -598,7 +589,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
// unset mem limit if debug is set to 1
|
||||
// if (($GLOBALS["DEBUG_ALL"] || $GLOBALS["DB_DEBUG"] || $_SESSION["DEBUG_ALL"] || $_SESSION["DB_DEBUG"]) && ini_get('memory_limit') != -1)
|
||||
// ini_set('memory_limit', -1);
|
||||
if ($res['filename'] == $this->page_name) {
|
||||
if (isset($res['filename']) && $res['filename'] == $this->page_name) {
|
||||
$this->permission_okay = true;
|
||||
} else {
|
||||
$this->login_error = 103;
|
||||
@@ -638,24 +629,6 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: loginSetAcl
|
||||
// WAS : login_set_acl
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : sets all the basic ACLs
|
||||
// init set the basic acl the user has, based on the following rules
|
||||
// * init set from config DEFAULT ACL
|
||||
// * if page ACL is set, it overrides the default ACL
|
||||
// * if group ACL is set, it overrides the page ACL
|
||||
// * if user ACL is set, it overrides the group ACL
|
||||
// set the page ACL
|
||||
// * default ACL set
|
||||
// * set group ACL if not default overrides default ACL
|
||||
// * set page ACL if not default overrides group ACL
|
||||
// set edit access ACL and set default edit access group
|
||||
// * if an account ACL is set, set this parallel, account ACL overrides user ACL if it applies
|
||||
// * if edit access ACL level is set, use this, else use page
|
||||
// set all base ACL levels as a list keyword -> ACL number
|
||||
/**
|
||||
* sets all the basic ACLs
|
||||
* init set the basic acl the user has, based on the following rules
|
||||
@@ -731,13 +704,13 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
// detail name/level set
|
||||
$this->acl['unit_detail'][$ea_id] = array(
|
||||
$this->acl['unit_detail'][$ea_id] = [
|
||||
'name' => $unit['name'],
|
||||
'uid' => $unit['uid'],
|
||||
'level' => $this->default_acl_list[$this->acl['unit'][$ea_id]]['name'],
|
||||
'default' => $unit['default'],
|
||||
'data' => $unit['data']
|
||||
);
|
||||
];
|
||||
// set default
|
||||
if ($unit['default']) {
|
||||
$this->acl['unit_id'] = $unit['id'];
|
||||
@@ -889,7 +862,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
// no error change this users password
|
||||
if (!$this->login_error && $edit_user_id) {
|
||||
// update the user (edit_user_id) with the new password
|
||||
$q = "UPDATE edit_user SET password = '".$this->dbEscapeString($this->passwordSet($this->pw_new_password))."' WHERE edit_user_id = ".$edit_user_id;
|
||||
$q = "UPDATE edit_user SET password = '".$this->dbEscapeString(Password::passwordSet($this->pw_new_password))."' WHERE edit_user_id = ".$edit_user_id;
|
||||
$this->dbExec($q);
|
||||
$data = 'Password change for user "'.$this->pw_username.'"';
|
||||
$this->password_change_ok = true;
|
||||
@@ -1015,7 +988,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
*/
|
||||
private function loginSetTemplates(): void
|
||||
{
|
||||
$strings = array(
|
||||
$strings = [
|
||||
'HTML_TITLE' => $this->l->__('LOGIN'),
|
||||
'TITLE' => $this->l->__('LOGIN'),
|
||||
'USERNAME' => $this->l->__('Username'),
|
||||
@@ -1024,9 +997,9 @@ class Login extends \CoreLibs\DB\IO
|
||||
'ERROR_MSG' => '',
|
||||
'LOGOUT_TARGET' => '',
|
||||
'PASSWORD_CHANGE_BUTTON_VALUE' => $this->l->__('Change Password')
|
||||
);
|
||||
];
|
||||
|
||||
$error_msgs = array(
|
||||
$error_msgs = [
|
||||
'100' => $this->l->__('Fatal Error: <b>[EUID] came in as GET/POST!</b>'), // actually obsolete
|
||||
'1010' => $this->l->__('Fatal Error: <b>Login Failed - Wrong Username or Password</b>'), // user not found
|
||||
'1011' => $this->l->__('Fatal Error: <b>Login Failed - Wrong Username or Password</b>'), // blowfish password wrong
|
||||
@@ -1045,11 +1018,11 @@ class Login extends \CoreLibs\DB\IO
|
||||
'205' => $this->l->__('Fatal Error: <b>Password change - The new password is not in a valid format</b>'), // we should also not here WHAT is valid
|
||||
'300' => $this->l->__('Success: <b>Password change successful</b>'), // for OK password change
|
||||
'9999' => $this->l->__('Fatal Error: <b>necessary crypt engine could not be found</b>. Login is impossible') // this is bad bad error
|
||||
);
|
||||
];
|
||||
|
||||
// if password change is okay
|
||||
if ($this->password_change) {
|
||||
$strings = array_merge($strings, array(
|
||||
$strings = array_merge($strings, [
|
||||
'TITLE_PASSWORD_CHANGE' => 'Change Password for User',
|
||||
'OLD_PASSWORD' => $this->l->__('Old Password'),
|
||||
'NEW_PASSWORD' => $this->l->__('New Password'),
|
||||
@@ -1057,7 +1030,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
'CLOSE' => $this->l->__('Close'),
|
||||
'JS_SHOW_HIDE' => "function ShowHideDiv(id) { element = document.getElementById(id); if (element.className == 'visible' || !element.className) element.className = 'hidden'; else element.className = 'visible'; }",
|
||||
'PASSWORD_CHANGE_BUTTON' => '<input type="button" name="pw_change" value="'.$strings['PASSWORD_CHANGE_BUTTON_VALUE'].'" OnClick="ShowHideDiv(\'pw_change_div\');">'
|
||||
));
|
||||
]);
|
||||
$this->login_template['password_change'] = <<<EOM
|
||||
<div id="pw_change_div" class="hidden" style="position: absolute; top: 30px; left: 50px; width: 400px; height: 220px; background-color: white; border: 1px solid black; padding: 25px;">
|
||||
<table>
|
||||
@@ -1076,11 +1049,11 @@ EOM;
|
||||
if ($this->password_forgot) {
|
||||
}
|
||||
if (!$this->password_change && !$this->password_forgot) {
|
||||
$strings = array_merge($strings, array(
|
||||
$strings = array_merge($strings, [
|
||||
'JS_SHOW_HIDE' => '',
|
||||
'PASSWORD_CHANGE_BUTTON' => '',
|
||||
'PASSWORD_CHANGE_DIV' => ''
|
||||
));
|
||||
]);
|
||||
}
|
||||
|
||||
// first check if all strings are set from outside, if not, set with default ones
|
||||
@@ -1181,13 +1154,13 @@ EOM;
|
||||
} else {
|
||||
$this->action = '';
|
||||
}
|
||||
$_data_binary = array(
|
||||
$_data_binary = [
|
||||
'_SESSION' => $_SESSION,
|
||||
'_GET' => $_GET,
|
||||
'_POST' => $_POST,
|
||||
'_FILES' => $_FILES,
|
||||
'error' => $this->login_error
|
||||
);
|
||||
];
|
||||
$data_binary = $this->dbEscapeBytea(bzcompress(serialize($_data_binary)));
|
||||
// SQL querie for log entry
|
||||
$q = "INSERT INTO edit_log ";
|
||||
@@ -1196,9 +1169,9 @@ EOM;
|
||||
$q .= "action, action_id, action_yes, action_flag, action_menu, action_loaded, action_value, action_error) ";
|
||||
$q .= "VALUES ('".$this->dbEscapeString($username)."', 'PASSWORD', ".($this->euid ? $this->euid : 'NULL').", ";
|
||||
$q .= "NOW(), '".$this->dbEscapeString($event)."', '".$this->dbEscapeString((string)$error)."', '".$this->dbEscapeString($data)."', '".$data_binary."', '".$this->page_name."', ";
|
||||
foreach (array(
|
||||
foreach ([
|
||||
'REMOTE_ADDR', 'HTTP_USER_AGENT', 'HTTP_REFERER', 'SCRIPT_FILENAME', 'QUERY_STRING', 'SERVER_NAME', 'HTTP_HOST', 'HTTP_ACCEPT', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_ENCODING'
|
||||
) as $server_code) {
|
||||
] as $server_code) {
|
||||
if (array_key_exists($server_code, $_SERVER)) {
|
||||
$q .= "'".$this->dbEscapeString($_SERVER[$server_code])."', ";
|
||||
} else {
|
||||
|
||||
@@ -27,10 +27,10 @@ namespace CoreLibs\Admin;
|
||||
class Backend extends \CoreLibs\DB\IO
|
||||
{
|
||||
// page name
|
||||
public $menu = array();
|
||||
public $menu = [];
|
||||
public $menu_show_flag = 0; // top menu flag (mostly string)
|
||||
// action ids
|
||||
public $action_list = array('action', 'action_id', 'action_sub_id', 'action_yes', 'action_flag', 'action_menu', 'action_value', 'action_error', 'action_loaded');
|
||||
public $action_list = ['action', 'action_id', 'action_sub_id', 'action_yes', 'action_flag', 'action_menu', 'action_value', 'action_error', 'action_loaded'];
|
||||
public $action;
|
||||
public $action_id;
|
||||
public $action_sub_id;
|
||||
@@ -41,14 +41,14 @@ class Backend extends \CoreLibs\DB\IO
|
||||
public $action_value;
|
||||
public $action_error;
|
||||
// ACL array variable if we want to set acl data from outisde
|
||||
public $acl = array();
|
||||
public $acl = [];
|
||||
public $default_acl;
|
||||
// queue key
|
||||
public $queue_key;
|
||||
// the current active edit access id
|
||||
public $edit_access_id;
|
||||
// error/warning/info messages
|
||||
public $messages = array();
|
||||
public $messages = [];
|
||||
public $error = 0;
|
||||
public $warning = 0;
|
||||
public $info = 0;
|
||||
@@ -68,17 +68,16 @@ class Backend extends \CoreLibs\DB\IO
|
||||
// CONSTRUCTOR / DECONSTRUCTOR |====================================>
|
||||
/**
|
||||
* main class constructor
|
||||
* @param array $db_config db config array
|
||||
* @param int|integer $set_control_flag class variable check flag
|
||||
* @param array $db_config db config array
|
||||
*/
|
||||
public function __construct(array $db_config, int $set_control_flag = 0)
|
||||
public function __construct(array $db_config)
|
||||
{
|
||||
$this->setLangEncoding();
|
||||
// get the language sub class & init it
|
||||
$this->l = new \CoreLibs\Language\L10n($this->lang);
|
||||
|
||||
// init the database class
|
||||
parent::__construct($db_config, $set_control_flag);
|
||||
parent::__construct($db_config);
|
||||
|
||||
// set the action ids
|
||||
foreach ($this->action_list as $_action) {
|
||||
@@ -89,7 +88,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
|
||||
// queue key
|
||||
if (preg_match("/^(add|save|delete|remove|move|up|down|push_live)$/", $this->action)) {
|
||||
$this->queue_key = $this->randomKeyGen(3);
|
||||
$this->queue_key = \CoreLibs\Create\RandomKey::randomKeyGen(3);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,8 +168,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
}
|
||||
|
||||
// check schema
|
||||
if (defined('LOGIN_DB_SCHEMA')) {
|
||||
/** @phan-suppress-next-line PhanUndeclaredConstant */
|
||||
if (defined('LOGIN_DB_SCHEMA') && LOGIN_DB_SCHEMA) {
|
||||
$SCHEMA = LOGIN_DB_SCHEMA;
|
||||
} elseif ($this->dbGetSchema()) {
|
||||
$SCHEMA = $this->dbGetSchema();
|
||||
@@ -223,9 +221,9 @@ class Backend extends \CoreLibs\DB\IO
|
||||
// get the session pages array
|
||||
$PAGES = $_SESSION['PAGES'] ?? null;
|
||||
if (!isset($PAGES) || !is_array($PAGES)) {
|
||||
$PAGES = array();
|
||||
$PAGES = [];
|
||||
}
|
||||
$pages = array();
|
||||
$pages = [];
|
||||
foreach ($PAGES as $PAGE_CUID => $PAGE_DATA) {
|
||||
$pages[] = $PAGE_DATA;
|
||||
}
|
||||
@@ -256,7 +254,6 @@ class Backend extends \CoreLibs\DB\IO
|
||||
$type = 'popup';
|
||||
} else {
|
||||
$type = 'normal';
|
||||
/** @phan-suppress-next-line PhanTypeArraySuspicious */
|
||||
$data['popup'] = 0;
|
||||
}
|
||||
$query_string = '';
|
||||
@@ -300,7 +297,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
// if page name matchs -> set selected flag
|
||||
$selected = 0;
|
||||
if (isset($data['filename']) &&
|
||||
$this->getPageName() == $data['filename'] &&
|
||||
\CoreLibs\Get\System::getPageName() == $data['filename'] &&
|
||||
(!isset($data['hostname']) || (
|
||||
isset($data['hostname']) &&
|
||||
(!$data['hostname'] || strstr($data['hostname'], CONTENT_PATH) !== false)
|
||||
@@ -317,14 +314,14 @@ class Backend extends \CoreLibs\DB\IO
|
||||
$enabled = 1;
|
||||
}
|
||||
// write in to view menu array
|
||||
array_push($this->menu, array(
|
||||
array_push($this->menu, [
|
||||
'name' => $this->l->__($name),
|
||||
'url' => $url,
|
||||
'selected' => $selected,
|
||||
'enabled' => $enabled,
|
||||
'popup' => $type == 'popup' ? 1 : 0,
|
||||
'type' => $type
|
||||
));
|
||||
]);
|
||||
} // show page
|
||||
} // online and in menu
|
||||
} // for each page
|
||||
@@ -342,6 +339,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
if ($filename === null) {
|
||||
return $enabled;
|
||||
}
|
||||
/** @phan-suppress-next-line PhanNoopSwitchCases */
|
||||
switch ($filename) {
|
||||
default:
|
||||
$enabled = true;
|
||||
@@ -357,11 +355,12 @@ class Backend extends \CoreLibs\DB\IO
|
||||
* @param string|int|bool $key key
|
||||
* @param string|int|bool $value value
|
||||
* @return array associative array
|
||||
* @deprecated \CoreLibs\Combined\ArrayHandler::genAssocArray()
|
||||
*/
|
||||
public function adbAssocArray(array $db_array, $key, $value): array
|
||||
{
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->genAssocArray($db_array, $key, $value);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated: \CoreLibs\Combined\ArrayHandler::genAssocArray', E_USER_DEPRECATED);
|
||||
return \CoreLibs\Combined\ArrayHandler::genAssocArray($db_array, $key, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -369,11 +368,12 @@ class Backend extends \CoreLibs\DB\IO
|
||||
* converts bytes into formated string with KB, MB, etc
|
||||
* @param string|int|float $number string or int or number
|
||||
* @return string formatted string
|
||||
* @deprecated \CoreLibs\Convert\Byte::humanReadableByteFormat()
|
||||
*/
|
||||
public function adbByteStringFormat($number): string
|
||||
{
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->humanReadableByteFormat($number);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated: \CoreLibs\Convert\Byte::humanReadableByteFormat()', E_USER_DEPRECATED);
|
||||
return \CoreLibs\Convert\Byte::humanReadableByteFormat($number);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -385,11 +385,12 @@ class Backend extends \CoreLibs\DB\IO
|
||||
* @param string $dummy empty, or file_type to show an icon instead of nothing if file is not found
|
||||
* @param string $path if source start is not ROOT path, if empty ROOT is choosen
|
||||
* @return string|bool thumbnail name, or false for error
|
||||
* @deprecated \CoreLibs\Output\Image::createThumbnail()
|
||||
*/
|
||||
public function adbCreateThumbnail($pic, $size_x, $size_y, $dummy = '', $path = "", $cache = "")
|
||||
{
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->createThumbnail($pic, $size_x, $size_y, $dummy, $path, $cache);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated: \CoreLibs\Output\Image::createThumbnail()', E_USER_DEPRECATED);
|
||||
return \CoreLibs\Output\Image::createThumbnail($pic, $size_x, $size_y, $dummy, $path, $cache);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -399,15 +400,15 @@ class Backend extends \CoreLibs\DB\IO
|
||||
* @param array $vars optional data for a possible printf formated msg
|
||||
* @return void has no return
|
||||
*/
|
||||
public function adbMsg(string $level, string $msg, array $vars = array()): void
|
||||
public function adbMsg(string $level, string $msg, array $vars = []): void
|
||||
{
|
||||
if (!preg_match("/^info|warning|error$/", $level)) {
|
||||
$level = "info";
|
||||
}
|
||||
$this->messages[] = array(
|
||||
$this->messages[] = [
|
||||
'msg' => vsprintf($this->l->__($msg), $vars),
|
||||
'class' => $level
|
||||
);
|
||||
];
|
||||
switch ($level) {
|
||||
case 'info':
|
||||
$this->info = 1;
|
||||
@@ -443,8 +444,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
string $associate = null,
|
||||
string $file = null
|
||||
): void {
|
||||
if (defined('GLOBAL_DB_SCHEMA')) {
|
||||
/** @phan-suppress-next-line PhanUndeclaredConstant */
|
||||
if (defined('GLOBAL_DB_SCHEMA') && GLOBAL_DB_SCHEMA) {
|
||||
$SCHEMA = GLOBAL_DB_SCHEMA;
|
||||
} elseif ($this->dbGetSchema()) {
|
||||
$SCHEMA = $this->dbGetSchema();
|
||||
@@ -490,13 +490,13 @@ class Backend extends \CoreLibs\DB\IO
|
||||
bool $name_pos_back = false
|
||||
) {
|
||||
// get the build layout
|
||||
$html_time = $this->printDateTime($year, $month, $day, $hour, $min, $suffix, $min_steps, $name_pos_back);
|
||||
$html_time = \CoreLibs\Output\Form\Elements::printDateTime($year, $month, $day, $hour, $min, $suffix, $min_steps, $name_pos_back);
|
||||
// translate the strings inside
|
||||
foreach (array('Year ', 'Month ', 'Day ', 'Hour ', 'Minute ') as $_time) {
|
||||
foreach (['Year ', 'Month ', 'Day ', 'Hour ', 'Minute '] as $_time) {
|
||||
$html_time = str_replace($_time, $this->l->__(str_replace(' ', '', $_time)).' ', $html_time);
|
||||
}
|
||||
// replace week days in short
|
||||
foreach (array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun') as $_date) {
|
||||
foreach (['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] as $_date) {
|
||||
$html_time = str_replace('('.$_date.')', '('.$this->l->__($_date).')', $html_time);
|
||||
}
|
||||
// return the datetime select string with strings translated
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
160
www/lib/CoreLibs/Check/Email.php
Normal file
160
www/lib/CoreLibs/Check/Email.php
Normal file
@@ -0,0 +1,160 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace CoreLibs\Check;
|
||||
|
||||
class Email
|
||||
{
|
||||
// this is for error check parts in where the email regex failed
|
||||
private static $email_regex_check = [
|
||||
0 => "^[A-Za-z0-9!#$%&'*+\-\/=?^_`{|}~][A-Za-z0-9!#$%:\(\)&'*+\-\/=?^_`{|}~\.]{0,63}@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]{1,})*\.([a-zA-Z]{2,}){1}$", // MASTER
|
||||
1 => "@(.*)@(.*)", // double @
|
||||
2 => "^[A-Za-z0-9!#$%&'*+-\/=?^_`{|}~][A-Za-z0-9!#$%:\(\)&'*+-\/=?^_`{|}~\.]{0,63}@", // wrong part before @
|
||||
3 => "@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]{1,})*\.([a-zA-Z]{2,}){1}$", // wrong part after @
|
||||
4 => "@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]{1,})*\.", // wrong domain name part
|
||||
5 => "\.([a-zA-Z]{2,6}){1}$", // wrong top level part
|
||||
6 => "@(.*)\.{2,}", // double .. in domain name part
|
||||
7 => "@.*\.$" // ends with a dot, top level, domain missing
|
||||
];
|
||||
// the array with the mobile types that are valid
|
||||
private static $mobile_email_type = [
|
||||
'.*@docomo\.ne\.jp$' => 'keitai_docomo',
|
||||
'.*@([a-z0-9]{2}\.)?ezweb\.ne\.jp$' => 'keitai_kddi_ezweb', # correct are a[2-4], b2, c[1-9], e[2-9], h[2-4], t[1-9]
|
||||
'.*@(ez[a-j]{1}\.)?ido\.ne\.jp$' => 'keitai_kddi_ido', # ez[a-j] or nothing
|
||||
'.*@([a-z]{2}\.)?sky\.tu-ka\.ne\.jp$' => 'keitai_kddi_tu-ka', # (sky group)
|
||||
'.*@([a-z]{2}\.)?sky\.tk[kc]{1}\.ne\.jp$' => 'keitai_kddi_sky', # (sky group) [tkk,tkc only]
|
||||
'.*@([a-z]{2}\.)?sky\.dtg\.ne\.jp$' => 'keitai_kddi_dtg', # dtg (sky group)
|
||||
'.*@[tkdhcrnsq]{1}\.vodafone\.ne\.jp$' => 'keitai_softbank_vodafone', # old vodafone [t,k,d,h,c,r,n,s,q]
|
||||
'.*@jp-[dhtkrsnqc]{1}\.ne\.jp$' => 'keitai_softbank_j-phone', # very old j-phone (pre vodafone) [d,h,t,k,r,s,n,q,c]
|
||||
'.*@([dhtcrknsq]{1}\.)?softbank\.ne\.jp$' => 'keitai_softbank', # add i for iphone also as keitai, others similar to the vodafone group
|
||||
'.*@i{1}\.softbank(\.ne)?\.jp$' => 'smartphone_softbank_iphone', # add iPhone also as keitai and not as pc
|
||||
'.*@disney\.ne\.jp$' => 'keitai_softbank_disney', # (kids)
|
||||
'.*@willcom\.ne\.jp$' => 'keitai_willcom',
|
||||
'.*@willcom\.com$' => 'keitai_willcom', # new for pdx.ne.jp address
|
||||
'.*@willcom\.com$' => 'keitai_willcom', # new for pdx.ne.jp address
|
||||
'.*@wcm\.ne\.jp$' => 'keitai_willcom', # old willcom wcm.ne.jp
|
||||
'.*@pdx\.ne\.jp$' => 'keitai_willcom_pdx', # old pdx address for willcom
|
||||
'.*@bandai\.jp$' => 'keitai_willcom_bandai', # willcom paipo! (kids)
|
||||
'.*@pipopa\.ne\.jp$' => 'keitai_willcom_pipopa', # willcom paipo! (kids)
|
||||
'.*@([a-z0-9]{2,4}\.)?pdx\.ne\.jp$' => 'keitai_willcom_pdx', # actually only di,dj,dk,wm -> all others are "wrong", but none also allowed?
|
||||
'.*@ymobile([1]{1})?\.ne\.jp$' => 'keitai_willcom_ymobile', # ymobile, ymobile1 techincally not willcom, but I group them there (softbank sub)
|
||||
'.*@y-mobile\.ne\.jp$' => 'keitai_willcom_ymobile', # y-mobile techincally not willcom, but I group them there (softbank sub)
|
||||
'.*@emnet\.ne\.jp$' => 'keitai_willcom_emnet', # e-mobile, group will willcom
|
||||
'.*@emobile\.ne\.jp$' => 'keitai_willcom_emnet', # e-mobile, group will willcom
|
||||
'.*@emobile-s\.ne\.jp$' => 'keitai_willcom_emnet' # e-mobile, group will willcom
|
||||
];
|
||||
// short list for mobile email types
|
||||
private static $mobile_email_type_short = [
|
||||
'keitai_docomo' => 'docomo',
|
||||
'keitai_kddi_ezweb' => 'kddi',
|
||||
'keitai_kddi' => 'kddi',
|
||||
'keitai_kddi_tu-ka' => 'kddi',
|
||||
'keitai_kddi_sky' => 'kddi',
|
||||
'keitai_softbank' => 'softbank',
|
||||
'smartphone_softbank_iphone' => 'iphone',
|
||||
'keitai_softbank_disney' => 'softbank',
|
||||
'keitai_softbank_vodafone' => 'softbank',
|
||||
'keitai_softbank_j-phone' => 'softbank',
|
||||
'keitai_willcom' => 'willcom',
|
||||
'keitai_willcom_pdx' => 'willcom',
|
||||
'keitai_willcom_bandai' => 'willcom',
|
||||
'keitai_willcom_pipopa' => 'willcom',
|
||||
'keitai_willcom_ymobile' => 'willcom',
|
||||
'keitai_willcom_emnet' => 'willcom',
|
||||
'pc_html' => 'pc',
|
||||
// old sets -> to be removed later
|
||||
'docomo' => 'docomo',
|
||||
'kddi_ezweb' => 'kddi',
|
||||
'kddi' => 'kddi',
|
||||
'kddi_tu-ka' => 'kddi',
|
||||
'kddi_sky' => 'kddi',
|
||||
'softbank' => 'softbank',
|
||||
'keitai_softbank_iphone' => 'iphone',
|
||||
'softbank_iphone' => 'iphone',
|
||||
'softbank_disney' => 'softbank',
|
||||
'softbank_vodafone' => 'softbank',
|
||||
'softbank_j-phone' => 'softbank',
|
||||
'willcom' => 'willcom',
|
||||
'willcom_pdx' => 'willcom',
|
||||
'willcom_bandai' => 'willcom',
|
||||
'willcom_pipopa' => 'willcom',
|
||||
'willcom_ymobile' => 'willcom',
|
||||
'willcom_emnet' => 'willcom',
|
||||
'pc' => 'pc'
|
||||
];
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @param int $type Which position in the regex list to get
|
||||
* if not set or not valid get default pos 0
|
||||
* @return string
|
||||
*/
|
||||
public static function getEmailRegex(int $type = 0): string
|
||||
{
|
||||
// make sure type is in valid range
|
||||
if ($type < 0 || $type >= count(self::$email_regex_check)) {
|
||||
$type = 0;
|
||||
}
|
||||
return self::$email_regex_check[$type];
|
||||
}
|
||||
|
||||
/**
|
||||
* get the full check array
|
||||
* this will be deprected at some point
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getEmailRegexCheck(): array
|
||||
{
|
||||
return self::$email_regex_check;
|
||||
}
|
||||
|
||||
/**
|
||||
* guesses the email type (mostly for mobile) from the domain
|
||||
* if second is set to true, it will return short naming scheme (only provider)
|
||||
* @param string $email email string
|
||||
* @param bool $short default false, if true, returns only short type (pc instead of pc_html)
|
||||
* @return string|bool email type, eg "pc", "docomo", etc, false for invalid short type
|
||||
*/
|
||||
public static function getEmailType(string $email, bool $short = false)
|
||||
{
|
||||
// trip if there is no email address
|
||||
if (!$email) {
|
||||
return 'invalid';
|
||||
}
|
||||
// loop until we match a mobile type, return this first found type
|
||||
foreach (self::$mobile_email_type as $email_regex => $email_type) {
|
||||
if (preg_match("/$email_regex/", $email)) {
|
||||
if ($short) {
|
||||
return self::getShortEmailType($email_type);
|
||||
} else {
|
||||
return $email_type;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if no previous return we assume this is a pc address
|
||||
if ($short) {
|
||||
return 'pc';
|
||||
} else {
|
||||
return 'pc_html';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the short email type from a long email type
|
||||
* @param string $email_type email string
|
||||
* @return string|bool short string or false for invalid
|
||||
*/
|
||||
public static function getShortEmailType(string $email_type)
|
||||
{
|
||||
// check if the short email type exists
|
||||
if (isset(self::$mobile_email_type_short[$email_type])) {
|
||||
return self::$mobile_email_type_short[$email_type];
|
||||
} else {
|
||||
// return false on not found
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
48
www/lib/CoreLibs/Check/File.php
Normal file
48
www/lib/CoreLibs/Check/File.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* various file/file name functions
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Check;
|
||||
|
||||
class File
|
||||
{
|
||||
/**
|
||||
* quick return the extension of the given file name
|
||||
* @param string $filename file name
|
||||
* @return string extension of the file name
|
||||
*/
|
||||
public static function getFilenameEnding(string $filename): string
|
||||
{
|
||||
$page_temp = pathinfo($filename);
|
||||
return $page_temp['extension'] ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
* get lines in a file
|
||||
* @param string $file file for line count read
|
||||
* @return int number of lines or -1 for non readable file
|
||||
*/
|
||||
public static function getLinesFromFile(string $file): int
|
||||
{
|
||||
if (is_file($file) &&
|
||||
file_exists($file) &&
|
||||
is_readable($file)
|
||||
) {
|
||||
$f = fopen($file, 'rb');
|
||||
$lines = 0;
|
||||
while (!feof($f)) {
|
||||
$lines += substr_count(fread($f, 8192), "\n");
|
||||
}
|
||||
fclose($f);
|
||||
} else {
|
||||
// if file does not exist or is not readable, return -1
|
||||
$lines = -1;
|
||||
}
|
||||
// return lines in file
|
||||
return $lines;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
86
www/lib/CoreLibs/Check/Jason.php
Normal file
86
www/lib/CoreLibs/Check/Jason.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Converts a json string to array and stores error for later checking
|
||||
* can also return empty array on demand
|
||||
* and self set json as is on error as array
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Check;
|
||||
|
||||
class Jason
|
||||
{
|
||||
private static $json_last_error;
|
||||
|
||||
/**
|
||||
* converts a json string to an array
|
||||
* or inits an empty array on null string
|
||||
* or failed convert to array
|
||||
* In ANY case it will ALWAYS return array.
|
||||
* Does not throw errors
|
||||
* @param string|null $json a json string, or null data
|
||||
* @param bool $override if set to true, then on json error
|
||||
* set original value as array
|
||||
* @return array returns an array from the json values
|
||||
*/
|
||||
public static function jsonConvertToArray(?string $json, bool $override = false): array
|
||||
{
|
||||
if ($json !== null) {
|
||||
$_json = json_decode($json, true);
|
||||
if (self::$json_last_error = json_last_error()) {
|
||||
if ($override == true) {
|
||||
// init return as array with original as element
|
||||
$json = [$json];
|
||||
} else {
|
||||
$json = [];
|
||||
}
|
||||
} else {
|
||||
$json = $_json;
|
||||
}
|
||||
} else {
|
||||
$json = [];
|
||||
}
|
||||
// be sure that we return an array
|
||||
return (array)$json;
|
||||
}
|
||||
|
||||
/**
|
||||
* [jsonGetLastError description]
|
||||
* @param bool|boolean $return_string [default=false] if set to true
|
||||
* it will return the message string and not
|
||||
* the error number
|
||||
* @return int|string Either error number (0 for no error)
|
||||
* or error string ('' for no error)
|
||||
*/
|
||||
public static function jsonGetLastError(bool $return_string = false)
|
||||
{
|
||||
$json_error_string = '';
|
||||
// valid errors as of php 8.0
|
||||
switch (self::$json_last_error) {
|
||||
case JSON_ERROR_NONE:
|
||||
$json_error_string = '';
|
||||
break;
|
||||
case JSON_ERROR_DEPTH:
|
||||
$json_error_string = 'Maximum stack depth exceeded';
|
||||
break;
|
||||
case JSON_ERROR_STATE_MISMATCH:
|
||||
$json_error_string = 'Underflow or the modes mismatch';
|
||||
break;
|
||||
case JSON_ERROR_CTRL_CHAR:
|
||||
$json_error_string = 'Unexpected control character found';
|
||||
break;
|
||||
case JSON_ERROR_SYNTAX:
|
||||
$json_error_string = 'Syntax error, malformed JSON';
|
||||
break;
|
||||
case JSON_ERROR_UTF8:
|
||||
$json_error_string = 'Malformed UTF-8 characters, possibly incorrectly encoded';
|
||||
break;
|
||||
default:
|
||||
$json_error_string = 'Unknown error';
|
||||
break;
|
||||
}
|
||||
return $return_string === true ? $json_error_string : self::$json_last_error;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
57
www/lib/CoreLibs/Check/Password.php
Normal file
57
www/lib/CoreLibs/Check/Password.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* core password set, check and rehash check wrapper functions
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Check;
|
||||
|
||||
class Password
|
||||
{
|
||||
/**
|
||||
* creates the password hash
|
||||
* @param string $password password
|
||||
* @return string hashed password
|
||||
*/
|
||||
public static function passwordSet(string $password): string
|
||||
{
|
||||
// always use the PHP default for the password
|
||||
// password options ca be set in the password init, but should be kept as default
|
||||
return password_hash($password, PASSWORD_DEFAULT);
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if the entered password matches the hash
|
||||
* @param string $password password
|
||||
* @param string $hash password hash
|
||||
* @return bool true or false
|
||||
*/
|
||||
public static function passwordVerify(string $password, string $hash): bool
|
||||
{
|
||||
if (password_verify($password, $hash)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
// in case something strange, return false on default
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if the password needs to be rehashed
|
||||
* @param string $hash password hash
|
||||
* @return bool true or false
|
||||
*/
|
||||
public static function passwordRehashCheck(string $hash): bool
|
||||
{
|
||||
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
// in case of strange, force re-hash
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
55
www/lib/CoreLibs/Check/PhpVersion.php
Normal file
55
www/lib/CoreLibs/Check/PhpVersion.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace CoreLibs\Check;
|
||||
|
||||
class PhpVersion
|
||||
{
|
||||
/**
|
||||
* checks if running PHP version matches given PHP version (min or max)
|
||||
* @param string $min_version minimum version as string (x, x.y, x.y.x)
|
||||
* @param string $max_version optional maximum version as string (x, x.y, x.y.x)
|
||||
* @return bool true if ok, false if not matching version
|
||||
*/
|
||||
public static function checkPHPVersion(string $min_version, string $max_version = ''): bool
|
||||
{
|
||||
// exit with false if the min/max strings are wrong
|
||||
if (!preg_match("/^\d{1}(\.\d{1})?(\.\d{1,2})?$/", $min_version)) {
|
||||
return false;
|
||||
}
|
||||
// max is only chcked if it is set
|
||||
if ($max_version && !preg_match("/^\d{1}(\.\d{1})?(\.\d{1,2})?$/", $max_version)) {
|
||||
return false;
|
||||
}
|
||||
// split up the version strings to calc the compare number
|
||||
$version = explode('.', $min_version);
|
||||
$min_version = (int)$version[0] * 10000 + (int)($version[1] ?? 0) * 100 + (int)($version[2] ?? 0);
|
||||
if ($max_version) {
|
||||
$version = explode('.', $max_version);
|
||||
$max_version = (int)$version[0] * 10000 + (int)($version[1] ?? 0) * 100 + (int)($version[2] ?? 0);
|
||||
// drop out if min is bigger max, equal size is okay, that would be only THIS
|
||||
if ($min_version > $max_version) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// set the php version id
|
||||
if (!defined('PHP_VERSION_ID')) {
|
||||
$version = explode('.', phpversion());
|
||||
// creates something like 50107
|
||||
define('PHP_VERSION_ID', (int)$version[0] * 10000 + (int)$version[1] * 100 + (int)$version[2]);
|
||||
}
|
||||
// check if matching for version
|
||||
if ($min_version && !$max_version) {
|
||||
if (PHP_VERSION_ID >= $min_version) {
|
||||
return true;
|
||||
}
|
||||
} elseif ($min_version && $max_version) {
|
||||
if (PHP_VERSION_ID >= $min_version && PHP_VERSION_ID <= $max_version) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// if no previous return, fail
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
343
www/lib/CoreLibs/Combined/ArrayHandler.php
Normal file
343
www/lib/CoreLibs/Combined/ArrayHandler.php
Normal file
@@ -0,0 +1,343 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* html convert functions
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Combined;
|
||||
|
||||
class ArrayHandler
|
||||
{
|
||||
/**
|
||||
* searches key = value in an array / array
|
||||
* only returns the first one found
|
||||
* @param string|int $needle needle (search for)
|
||||
* @param array $haystack haystack (search in)
|
||||
* @param string|null $key_lookin the key to look out for, default empty
|
||||
* @return array array with the elements where the needle can be
|
||||
* found in the haystack array
|
||||
*/
|
||||
public static function arraySearchRecursive($needle, array $haystack, ?string $key_lookin = null): array
|
||||
{
|
||||
$path = [];
|
||||
if (!is_array($haystack)) {
|
||||
$haystack = [];
|
||||
}
|
||||
if ($key_lookin != null &&
|
||||
!empty($key_lookin) &&
|
||||
array_key_exists($key_lookin, $haystack) &&
|
||||
$needle === $haystack[$key_lookin]
|
||||
) {
|
||||
$path[] = $key_lookin;
|
||||
} else {
|
||||
foreach ($haystack as $key => $val) {
|
||||
if (is_scalar($val) &&
|
||||
$val === $needle &&
|
||||
empty($key_lookin)
|
||||
) {
|
||||
$path[] = $key;
|
||||
break;
|
||||
} elseif (is_scalar($val) &&
|
||||
!empty($key_lookin) &&
|
||||
$key === $key_lookin &&
|
||||
$val == $needle
|
||||
) {
|
||||
$path[] = $key;
|
||||
break;
|
||||
} elseif (is_array($val) &&
|
||||
$path = self::arraySearchRecursive(
|
||||
$needle,
|
||||
(array)$val,
|
||||
// to avoid PhanTypeMismatchArgumentNullable
|
||||
($key_lookin === null ? $key_lookin : (string)$key_lookin)
|
||||
)
|
||||
) {
|
||||
array_unshift($path, $key);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* recursive array search function, which returns all found not only the first one
|
||||
* @param string|int $needle needle (search for)
|
||||
* @param array $haystack haystack (search in)
|
||||
* @param string|int $key the key to look for in
|
||||
* @param array|null $path recursive call for previous path
|
||||
* @return ?array all array elements paths where the element was found
|
||||
*/
|
||||
public static function arraySearchRecursiveAll($needle, array $haystack, $key, ?array $path = null): ?array
|
||||
{
|
||||
// init if not set on null
|
||||
if ($path === null) {
|
||||
$path = [
|
||||
'level' => 0,
|
||||
'work' => []
|
||||
];
|
||||
}
|
||||
// init sub sets if not set
|
||||
if (!isset($path['level'])) {
|
||||
$path['level'] = 0;
|
||||
}
|
||||
if (!isset($path['work'])) {
|
||||
$path['work'] = [];
|
||||
}
|
||||
// should not be needed because it would trigger a php mehtod error
|
||||
if (!is_array($haystack)) {
|
||||
$haystack = [];
|
||||
}
|
||||
|
||||
// @phan HACK
|
||||
$path['level'] = $path['level'] ?? 0;
|
||||
// go through the array,
|
||||
foreach ($haystack as $_key => $_value) {
|
||||
if (is_scalar($_value) && $_value == $needle && !$key) {
|
||||
// only value matches
|
||||
$path['work'][$path['level']] = $_key;
|
||||
$path['found'][] = $path['work'];
|
||||
} elseif (is_scalar($_value) && $_value == $needle && $_key == $key) {
|
||||
// key and value matches
|
||||
$path['work'][$path['level']] = $_key;
|
||||
$path['found'][] = $path['work'];
|
||||
} elseif (is_array($_value)) {
|
||||
// add position to working
|
||||
$path['work'][$path['level']] = $_key;
|
||||
// we will up a level
|
||||
$path['level'] += 1;
|
||||
// call recursive
|
||||
$path = self::arraySearchRecursiveAll($needle, $_value, $key, $path);
|
||||
}
|
||||
}
|
||||
// @phan HACK
|
||||
$path['level'] = $path['level'] ?? 0;
|
||||
$path['work'] = $path['work'] ?? [];
|
||||
// cut all that is >= level
|
||||
array_splice($path['work'], $path['level']);
|
||||
// step back a level
|
||||
$path['level'] -= 1;
|
||||
return $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* array search simple. looks for key, value combination, if found, returns true
|
||||
* @param array $array array(search in)
|
||||
* @param string|int $key key (key to search in)
|
||||
* @param string|int $value value (what to find)
|
||||
* @return bool true on found, false on not found
|
||||
*/
|
||||
public static function arraySearchSimple(array $array, $key, $value): bool
|
||||
{
|
||||
if (!is_array($array)) {
|
||||
$array = [];
|
||||
}
|
||||
foreach ($array as $_key => $_value) {
|
||||
// if value is an array, we search
|
||||
if (is_array($_value)) {
|
||||
// call recursive, and return result if it is true, else continue
|
||||
if (($result = self::arraySearchSimple($_value, $key, $value)) !== false) {
|
||||
return $result;
|
||||
}
|
||||
} elseif ($_key == $key && $_value == $value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// no true returned, not found
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* correctly recursive merges as an array as array_merge_recursive just glues things together
|
||||
* array first array to merge
|
||||
* array second array to merge
|
||||
* ... etc
|
||||
* bool key flag: true: handle keys as string or int
|
||||
* default false: all keys are string
|
||||
* @return array|bool merged array
|
||||
*/
|
||||
public static function arrayMergeRecursive()
|
||||
{
|
||||
// croak on not enough arguemnts (we need at least two)
|
||||
if (func_num_args() < 2) {
|
||||
trigger_error(__FUNCTION__ .' needs two or more array arguments', E_USER_WARNING);
|
||||
return false;
|
||||
}
|
||||
// default key is not string
|
||||
$key_is_string = false;
|
||||
$arrays = func_get_args();
|
||||
// if last is not array, then assume it is trigger for key is always string
|
||||
if (!is_array(end($arrays))) {
|
||||
if (array_pop($arrays)) {
|
||||
$key_is_string = true;
|
||||
}
|
||||
}
|
||||
// check that arrays count is at least two, else we don't have enough to do anything
|
||||
if (count($arrays) < 2) {
|
||||
trigger_error(__FUNCTION__.' needs two or more array arguments', E_USER_WARNING);
|
||||
return false;
|
||||
}
|
||||
$merged = [];
|
||||
while ($arrays) {
|
||||
$array = array_shift($arrays);
|
||||
if (!is_array($array)) {
|
||||
trigger_error(__FUNCTION__ .' encountered a non array argument', E_USER_WARNING);
|
||||
return false;
|
||||
}
|
||||
if (!$array) {
|
||||
continue;
|
||||
}
|
||||
foreach ($array as $key => $value) {
|
||||
// if string or if key is assumed to be string do key match else add new entry
|
||||
if (is_string($key) || $key_is_string === false) {
|
||||
if (is_array($value) && array_key_exists($key, $merged) && is_array($merged[$key])) {
|
||||
// $merged[$key] = call_user_func(__METHOD__, $merged[$key], $value, $key_is_string);
|
||||
$merged[$key] = self::arrayMergeRecursive($merged[$key], $value, $key_is_string);
|
||||
} else {
|
||||
$merged[$key] = $value;
|
||||
}
|
||||
} else {
|
||||
$merged[] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* correct array_diff that does an actualy difference between two arrays.
|
||||
* array_diff only checks elements from A that are not in B, but not the
|
||||
* other way around.
|
||||
* Note that like array_diff this only checks first level values not keys
|
||||
* @param array $a array to compare a
|
||||
* @param array $b array to compare b
|
||||
* @return array array with missing elements from a & b
|
||||
*/
|
||||
public static function arrayDiff(array $a, array $b): array
|
||||
{
|
||||
$intersect = array_intersect($a, $b);
|
||||
return array_merge(array_diff($a, $intersect), array_diff($b, $intersect));
|
||||
}
|
||||
|
||||
/**
|
||||
* search for the needle array elements in haystack and return the ones found as an array,
|
||||
* is there nothing found, it returns FALSE (boolean)
|
||||
* @param array $needle elements to search for
|
||||
* @param array $haystack array where the $needle elements should be searched int
|
||||
* @return array|bool either the found elements or false for nothing found or error
|
||||
*/
|
||||
public static function inArrayAny(array $needle, array $haystack)
|
||||
{
|
||||
if (!is_array($needle)) {
|
||||
return false;
|
||||
}
|
||||
if (!is_array($haystack)) {
|
||||
return false;
|
||||
}
|
||||
$found = [];
|
||||
foreach ($needle as $element) {
|
||||
if (in_array($element, $haystack)) {
|
||||
$found[] = $element;
|
||||
}
|
||||
}
|
||||
if (count($found) == 0) {
|
||||
return false;
|
||||
} else {
|
||||
return $found;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* creates out of a normal db_return array an assoc array
|
||||
* @param array $db_array return array from the database
|
||||
* @param string|int|bool $key key set, false for not set
|
||||
* @param string|int|bool $value value set, false for not set
|
||||
* @param bool $set_only flag to return all (default), or set only
|
||||
* @return array associative array
|
||||
*/
|
||||
public static function genAssocArray(array $db_array, $key, $value, bool $set_only = false): array
|
||||
{
|
||||
$ret_array = [];
|
||||
// do this to only run count once
|
||||
for ($i = 0, $iMax = count($db_array); $i < $iMax; $i ++) {
|
||||
// if no key then we make an order reference
|
||||
if ($key !== false &&
|
||||
$value !== false &&
|
||||
(($set_only && $db_array[$i][$value]) || (!$set_only))
|
||||
) {
|
||||
$ret_array[$db_array[$i][$key]] = $db_array[$i][$value];
|
||||
} elseif ($key === false && $value !== false) {
|
||||
$ret_array[] = $db_array[$i][$value];
|
||||
} elseif ($key !== false && $value === false) {
|
||||
$ret_array[$db_array[$i][$key]] = $i;
|
||||
}
|
||||
}
|
||||
return $ret_array;
|
||||
}
|
||||
|
||||
/**
|
||||
* converts multi dimensional array to a flat array
|
||||
* does NOT preserve keys
|
||||
* @param array $array ulti dimensionial array
|
||||
* @return array flattened array
|
||||
*/
|
||||
public static function flattenArray(array $array): array
|
||||
{
|
||||
$return = [];
|
||||
array_walk_recursive(
|
||||
$array,
|
||||
function ($value) use (&$return) {
|
||||
$return[] = $value;
|
||||
}
|
||||
);
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* will loop through an array recursivly and write the array keys back
|
||||
* @param array $array multidemnsional array to flatten
|
||||
* @return array flattened keys array
|
||||
*/
|
||||
public static function flattenArrayKey(array $array): array
|
||||
{
|
||||
$return = [];
|
||||
array_walk_recursive(
|
||||
$array,
|
||||
function ($value, $key) use (&$return) {
|
||||
$return[] = $key;
|
||||
}
|
||||
);
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* searches for key -> value in an array tree and writes the value one level up
|
||||
* this will remove this leaf will all other values
|
||||
* @param array $array array(nested)
|
||||
* @param string|int $search key to find that has no sub leaf and will be pushed up
|
||||
* @return array modified, flattened array
|
||||
*/
|
||||
public static function arrayFlatForKey(array $array, $search): array
|
||||
{
|
||||
if (!is_array($array)) {
|
||||
$array = [];
|
||||
}
|
||||
foreach ($array as $key => $value) {
|
||||
// if it is not an array do just nothing
|
||||
if (is_array($value)) {
|
||||
// probe it has search key
|
||||
if (isset($value[$search])) {
|
||||
// set as current
|
||||
$array[$key] = $value[$search];
|
||||
} else {
|
||||
// call up next node down
|
||||
// $array[$key] = call_user_func(__METHOD__, $value, $search);
|
||||
$array[$key] = self::arrayFlatForKey($value, $search);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
289
www/lib/CoreLibs/Combined/DateTime.php
Normal file
289
www/lib/CoreLibs/Combined/DateTime.php
Normal file
@@ -0,0 +1,289 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* image thumbnail, rotate, etc
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Combined;
|
||||
|
||||
class DateTime
|
||||
{
|
||||
/**
|
||||
* a simple wrapper for the date format
|
||||
* @param int|float $timestamp unix timestamp
|
||||
* @param bool $show_micro show the micro time (default false)
|
||||
* @return string formated date+time in Y-M-D h:m:s ms
|
||||
*/
|
||||
public static function dateStringFormat($timestamp, bool $show_micro = false): string
|
||||
{
|
||||
// split up the timestamp, assume . in timestamp
|
||||
// array pad $ms if no microtime
|
||||
list ($timestamp, $ms) = array_pad(explode('.', (string)round($timestamp, 4)), 2, null);
|
||||
$string = date("Y-m-d H:i:s", (int)$timestamp);
|
||||
if ($show_micro && $ms) {
|
||||
$string .= ' '.$ms.'ms';
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* formats a timestamp into interval, not into a date
|
||||
* @param string|int|float $timestamp interval in seconds and optional float micro seconds
|
||||
* @param bool $show_micro show micro seconds, default true
|
||||
* @return string interval formatted string or string as is
|
||||
*/
|
||||
public static function timeStringFormat($timestamp, bool $show_micro = true): string
|
||||
{
|
||||
// check if the timestamp has any h/m/s/ms inside, if yes skip
|
||||
if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) {
|
||||
list($timestamp, $ms) = array_pad(explode('.', (string)round($timestamp, 4)), 2, null);
|
||||
// if negative remember
|
||||
$negative = false;
|
||||
if ((int)$timestamp < 0) {
|
||||
$negative = true;
|
||||
}
|
||||
$timestamp = abs((float)$timestamp);
|
||||
$timegroups = [86400, 3600, 60, 1];
|
||||
$labels = ['d', 'h', 'm', 's'];
|
||||
$time_string = '';
|
||||
// if timestamp is zero, return zero string
|
||||
if ($timestamp == 0) {
|
||||
$time_string = '0s';
|
||||
} else {
|
||||
for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i ++) {
|
||||
$output = floor((float)$timestamp / $timegroups[$i]);
|
||||
$timestamp = (float)$timestamp % $timegroups[$i];
|
||||
// output has days|hours|min|sec
|
||||
if ($output || $time_string) {
|
||||
$time_string .= $output.$labels[$i].(($i + 1) != count($timegroups) ? ' ' : '');
|
||||
}
|
||||
}
|
||||
}
|
||||
// only add ms if we have an ms value
|
||||
if ($ms !== null) {
|
||||
// if we have ms and it has leading zeros, remove them, but only if it is nut just 0
|
||||
$ms = preg_replace("/^0+(\d+)$/", '${1}', $ms);
|
||||
// add ms if there
|
||||
if ($show_micro) {
|
||||
$time_string .= ' '.(!$ms ? 0 : $ms).'ms';
|
||||
} elseif (!$time_string) {
|
||||
$time_string .= (!$ms ? 0 : $ms).'ms';
|
||||
}
|
||||
}
|
||||
if ($negative) {
|
||||
$time_string = '-'.$time_string;
|
||||
}
|
||||
} else {
|
||||
$time_string = $timestamp;
|
||||
}
|
||||
return $time_string;
|
||||
}
|
||||
|
||||
/**
|
||||
* does a reverse of the TimeStringFormat and converts the string from
|
||||
* xd xh xm xs xms to a timestamp.microtime format
|
||||
* @param string|int|float $timestring formatted interval
|
||||
* @return string|int|float converted float interval, or string as is
|
||||
*/
|
||||
public static function stringToTime($timestring)
|
||||
{
|
||||
$timestamp = 0;
|
||||
if (preg_match("/(d|h|m|s|ms)/", $timestring)) {
|
||||
// pos for preg match read + multiply factor
|
||||
$timegroups = [2 => 86400, 4 => 3600, 6 => 60, 8 => 1];
|
||||
$matches = [];
|
||||
// if start with -, strip and set negative
|
||||
$negative = false;
|
||||
if (preg_match("/^-/", $timestring)) {
|
||||
$negative = true;
|
||||
$timestring = substr($timestring, 1);
|
||||
}
|
||||
// preg match: 0: full string
|
||||
// 2, 4, 6, 8 are the to need values
|
||||
preg_match("/^((\d+)d ?)?((\d+)h ?)?((\d+)m ?)?((\d+)s ?)?((\d+)ms)?$/", $timestring, $matches);
|
||||
// multiply the returned matches and sum them up. the last one (ms) is added with .
|
||||
foreach ($timegroups as $i => $time_multiply) {
|
||||
if (isset($matches[$i]) && is_numeric($matches[$i])) {
|
||||
$timestamp += (float)$matches[$i] * $time_multiply;
|
||||
}
|
||||
}
|
||||
if (isset($matches[10]) && is_numeric($matches[10])) {
|
||||
$timestamp .= '.'.$matches[10];
|
||||
}
|
||||
if ($negative) {
|
||||
$timestamp *= -1;
|
||||
}
|
||||
return $timestamp;
|
||||
} else {
|
||||
return $timestring;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* splits & checks date, wrap around for check_date function
|
||||
* @param string $date a date string in the format YYYY-MM-DD
|
||||
* @return bool true if valid date, false if date not valid
|
||||
*/
|
||||
public static function checkDate($date): bool
|
||||
{
|
||||
if (!$date) {
|
||||
return false;
|
||||
}
|
||||
list ($year, $month, $day) = array_pad(preg_split("/[\/-]/", $date), 3, null);
|
||||
if (!$year || !$month || !$day) {
|
||||
return false;
|
||||
}
|
||||
if (!checkdate((int)$month, (int)$day, (int)$year)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* splits & checks date, wrap around for check_date function
|
||||
* @param string $datetime date (YYYY-MM-DD) + time (HH:MM:SS), SS can be dropped
|
||||
* @return bool true if valid date, false if date not valid
|
||||
*/
|
||||
public static function checkDateTime($datetime): bool
|
||||
{
|
||||
if (!$datetime) {
|
||||
return false;
|
||||
}
|
||||
list ($year, $month, $day, $hour, $min, $sec) = array_pad(preg_split("/[\/\- :]/", $datetime), 6, null);
|
||||
if (!$year || !$month || !$day) {
|
||||
return false;
|
||||
}
|
||||
if (!checkdate((int)$month, (int)$day, (int)$year)) {
|
||||
return false;
|
||||
}
|
||||
if (!is_numeric($hour) || !is_numeric($min)) {
|
||||
return false;
|
||||
}
|
||||
if (($hour < 0 || $hour > 24) ||
|
||||
($min < 0 || $min > 60) ||
|
||||
(is_numeric($sec) && ($sec < 0 || $sec > 60))
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* plits & checks date, wrap around for check_date function
|
||||
* returns int in:
|
||||
* -1 if the first date is smaller the last
|
||||
* 0 if both are equal
|
||||
* 1 if the first date is bigger than the last
|
||||
* false (bool): error
|
||||
* @param string $start_date start date string in YYYY-MM-DD
|
||||
* @param string $end_date end date string in YYYY-MM-DD
|
||||
* @return int|bool false on error, or int -1/0/1 as difference
|
||||
*/
|
||||
public static function compareDate($start_date, $end_date)
|
||||
{
|
||||
// pre check for empty or wrong
|
||||
if ($start_date == '--' || $end_date == '--' || !$start_date || !$end_date) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// splits the data up with / or -
|
||||
list ($start_year, $start_month, $start_day) = array_pad(preg_split('/[\/-]/', $start_date), 3, null);
|
||||
list ($end_year, $end_month, $end_day) = array_pad(preg_split('/[\/-]/', $end_date), 3, null);
|
||||
// check that month & day are two digits and then combine
|
||||
foreach (array('start', 'end') as $prefix) {
|
||||
foreach (array('month', 'day') as $date_part) {
|
||||
$_date = $prefix.'_'.$date_part;
|
||||
if (isset($$_date) && $$_date < 10 && !preg_match("/^0/", $$_date)) {
|
||||
$$_date = '0'.$$_date;
|
||||
}
|
||||
}
|
||||
$_date = $prefix.'_date';
|
||||
$$_date = '';
|
||||
foreach (array('year', 'month', 'day') as $date_part) {
|
||||
$_sub_date = $prefix.'_'.$date_part;
|
||||
$$_date .= $$_sub_date;
|
||||
}
|
||||
}
|
||||
// now do the compare
|
||||
if ($start_date < $end_date) {
|
||||
return -1;
|
||||
} elseif ($start_date == $end_date) {
|
||||
return 0;
|
||||
} elseif ($start_date > $end_date) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* compares the two dates + times. if seconds missing in one set, add :00, converts / to -
|
||||
* returns int/bool in:
|
||||
* -1 if the first date is smaller the last
|
||||
* 0 if both are equal
|
||||
* 1 if the first date is bigger than the last
|
||||
* false if no valid date/times chould be found
|
||||
* @param string $start_datetime start date/time in YYYY-MM-DD HH:mm:ss
|
||||
* @param string $end_datetime end date/time in YYYY-MM-DD HH:mm:ss
|
||||
* @return int|bool false for error or -1/0/1 as difference
|
||||
*/
|
||||
public static function compareDateTime($start_datetime, $end_datetime)
|
||||
{
|
||||
// pre check for empty or wrong
|
||||
if ($start_datetime == '--' || $end_datetime == '--' || !$start_datetime || !$end_datetime) {
|
||||
return false;
|
||||
}
|
||||
$start_timestamp = strtotime($start_datetime);
|
||||
$end_timestamp = strtotime($end_datetime);
|
||||
if ($start_timestamp < $end_timestamp) {
|
||||
return -1;
|
||||
} elseif ($start_timestamp == $end_timestamp) {
|
||||
return 0;
|
||||
} elseif ($start_timestamp > $end_timestamp) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* calculates the days between two dates
|
||||
* return: overall days, week days, weekend days as array 0...2 or named
|
||||
* as overall, weekday and weekend
|
||||
* @param string $start_date valid start date (y/m/d)
|
||||
* @param string $end_date valid end date (y/m/d)
|
||||
* @param bool $return_named return array type, false (default), true for named
|
||||
* @return array 0/overall, 1/weekday, 2/weekend
|
||||
*/
|
||||
public static function calcDaysInterval($start_date, $end_date, bool $return_named = false): array
|
||||
{
|
||||
// pos 0 all, pos 1 weekday, pos 2 weekend
|
||||
$days = array();
|
||||
$start = new \DateTime($start_date);
|
||||
$end = new \DateTime($end_date);
|
||||
// so we include the last day too, we need to add +1 second in the time
|
||||
$end->setTime(0, 0, 1);
|
||||
|
||||
$days[0] = $end->diff($start)->days;
|
||||
$days[1] = 0;
|
||||
$days[2] = 0;
|
||||
|
||||
$period = new \DatePeriod($start, new \DateInterval('P1D'), $end);
|
||||
|
||||
foreach ($period as $dt) {
|
||||
$curr = $dt->format('D');
|
||||
if ($curr == 'Sat' || $curr == 'Sun') {
|
||||
$days[2] ++;
|
||||
} else {
|
||||
$days[1] ++;
|
||||
}
|
||||
}
|
||||
if ($return_named === true) {
|
||||
return array(
|
||||
'overall' => $days[0],
|
||||
'weekday' => $days[1],
|
||||
'weekend' => $days[2]
|
||||
);
|
||||
} else {
|
||||
return $days;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
142
www/lib/CoreLibs/Convert/Byte.php
Normal file
142
www/lib/CoreLibs/Convert/Byte.php
Normal file
@@ -0,0 +1,142 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* image thumbnail, rotate, etc
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Convert;
|
||||
|
||||
class Byte
|
||||
{
|
||||
// define byteFormat
|
||||
const BYTE_FORMAT_NOSPACE = 1;
|
||||
const BYTE_FORMAT_ADJUST = 2;
|
||||
const BYTE_FORMAT_SI = 4;
|
||||
|
||||
/**
|
||||
* This function replaces the old byteStringFormat
|
||||
*
|
||||
* Converts any number string to human readable byte format
|
||||
* Maxium is Exobytes and above that the Exobytes suffix is used for all
|
||||
* If more are needed only the correct short name for the suffix has to be
|
||||
* added to the labels array
|
||||
* On no number string it returns string as is
|
||||
* Source Idea: SOURCE: https://programming.guide/worlds-most-copied-so-snippet.html
|
||||
*
|
||||
* The class itself hast the following defined
|
||||
* BYTE_FORMAT_NOSPACE [1] turn off spaces between number and extension
|
||||
* BYTE_FORMAT_ADJUST [2] use sprintf to always print two decimals
|
||||
* BYTE_FORMAT_SI [3] use si standard 1000 instead of bytes 1024
|
||||
* To use the constant from outside use class::CONSTANT
|
||||
* @param string|int|float $bytes bytes as string int or pure int
|
||||
* @param int $flags bitwise flag with use space turned on
|
||||
* @return string converted byte number (float) with suffix
|
||||
*/
|
||||
public static function humanReadableByteFormat($bytes, int $flags = 0): string
|
||||
{
|
||||
// if not numeric, return as is
|
||||
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;
|
||||
}
|
||||
|
||||
// si or normal
|
||||
$unit = $si ? 1000 : 1024;
|
||||
// always positive
|
||||
$abs_bytes = $bytes == PHP_INT_MIN ? PHP_INT_MAX : abs($bytes);
|
||||
// smaller than unit is always B
|
||||
if ($abs_bytes < $unit) {
|
||||
return $bytes.'B';
|
||||
}
|
||||
// labels in order of size [Y, Z]
|
||||
$labels = array('', 'K', 'M', 'G', 'T', 'P', 'E');
|
||||
// exp position calculation
|
||||
$exp = 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
|
||||
return (string)$bytes;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* calculates the bytes based on a string with nnG, nnGB, nnM, etc
|
||||
* NOTE: large exabyte numbers will overflow
|
||||
* flag allowed:
|
||||
* BYTE_FORMAT_SI [3] use si standard 1000 instead of bytes 1024
|
||||
* @param string|int|float $number any string or number to convert
|
||||
* @param int $flags bitwise flag with use space turned on
|
||||
* @return string|int|float converted value or original value
|
||||
*/
|
||||
public static function stringByteFormat($number, int $flags = 0)
|
||||
{
|
||||
// use SI 1000 mod and not 1024 mod
|
||||
if ($flags & self::BYTE_FORMAT_SI) {
|
||||
$si = true;
|
||||
} else {
|
||||
$si = false;
|
||||
}
|
||||
// matches in regex
|
||||
$matches = [];
|
||||
// all valid units
|
||||
$valid_units_ = 'bkmgtpezy';
|
||||
// detects up to exo bytes
|
||||
preg_match("/([\d.,]*)\s?(eib|pib|tib|gib|mib|kib|eb|pb|tb|gb|mb|kb|e|p|t|g|m|k|b)$/i", strtolower($number), $matches);
|
||||
if (isset($matches[1]) && isset($matches[2])) {
|
||||
// remove all non valid characters from the number
|
||||
$number = preg_replace('/[^0-9\.]/', '', $matches[1]);
|
||||
// final clean up and convert to float
|
||||
$number = (float)trim($number);
|
||||
// convert any mb/gb/etc to single m/b
|
||||
$unit = preg_replace('/[^bkmgtpezy]/i', '', $matches[2]);
|
||||
if ($unit) {
|
||||
$number = $number * pow($si ? 1000 : 1024, stripos($valid_units_, $unit[0]));
|
||||
}
|
||||
// convert to INT to avoid +E output
|
||||
$number = (int)round($number);
|
||||
}
|
||||
// if not matching return as is
|
||||
return $number;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
304
www/lib/CoreLibs/Convert/Colors.php
Normal file
304
www/lib/CoreLibs/Convert/Colors.php
Normal file
@@ -0,0 +1,304 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Convert color spaces
|
||||
* hex to rgb
|
||||
* rgb to hex
|
||||
* rgb to hsb
|
||||
* hsb to rgb
|
||||
* rgb to hsl
|
||||
* hsl to rgb
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Convert;
|
||||
|
||||
class Colors
|
||||
{
|
||||
/**
|
||||
* converts a hex RGB color to the int numbers
|
||||
* @param string $hexStr RGB hexstring
|
||||
* @param bool $returnAsString flag to return as string
|
||||
* @param string $seperator string seperator: default: ","
|
||||
* @return string|array|bool false on error or array with RGB or a string with the seperator
|
||||
*/
|
||||
public static function hex2rgb(string $hexStr, bool $returnAsString = false, string $seperator = ',')
|
||||
{
|
||||
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
|
||||
$rgbArray = array();
|
||||
if (strlen($hexStr) == 6) {
|
||||
// If a proper hex code, convert using bitwise operation. No overhead... faster
|
||||
$colorVal = hexdec($hexStr);
|
||||
$rgbArray['R'] = 0xFF & ($colorVal >> 0x10);
|
||||
$rgbArray['G'] = 0xFF & ($colorVal >> 0x8);
|
||||
$rgbArray['B'] = 0xFF & $colorVal;
|
||||
} elseif (strlen($hexStr) == 3) {
|
||||
// If shorthand notation, need some string manipulations
|
||||
$rgbArray['R'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
|
||||
$rgbArray['G'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
|
||||
$rgbArray['B'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
|
||||
} else {
|
||||
// Invalid hex color code
|
||||
return false;
|
||||
}
|
||||
// returns the rgb string or the associative array
|
||||
return $returnAsString ? implode($seperator, $rgbArray) : $rgbArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* converts the rgb values from int data to the valid rgb html hex string
|
||||
* optional can turn of leading #
|
||||
* @param int $red red 0-255
|
||||
* @param int $green green 0-255
|
||||
* @param int $blue blue 0-255
|
||||
* @param bool $hex_prefix default true, prefix with "#"
|
||||
* @return string rgb in hex values with leading # if set
|
||||
*/
|
||||
public static function rgb2hex(int $red, int $green, int $blue, bool $hex_prefix = true): string
|
||||
{
|
||||
$hex_color = '';
|
||||
if ($hex_prefix === true) {
|
||||
$hex_color = '#';
|
||||
}
|
||||
foreach (array('red', 'green', 'blue') as $color) {
|
||||
// if not valid, set to gray
|
||||
if ($$color < 0 || $$color > 255) {
|
||||
$$color = 125;
|
||||
}
|
||||
// pad left with 0
|
||||
$hex_color .= str_pad(dechex($$color), 2, '0', STR_PAD_LEFT);
|
||||
}
|
||||
return $hex_color;
|
||||
}
|
||||
|
||||
/**
|
||||
* converts RGB to HSB/V values
|
||||
* returns:
|
||||
* array with hue (0-360), sat (0-100%), brightness/value (0-100%)
|
||||
* @param int $red red 0-255
|
||||
* @param int $green green 0-255
|
||||
* @param int $blue blue 0-255
|
||||
* @return array Hue, Sat, Brightness/Value
|
||||
*/
|
||||
public static function rgb2hsb(int $red, int $green, int $blue): array
|
||||
{
|
||||
// check that rgb is from 0 to 255
|
||||
foreach (array('red', 'green', 'blue') as $c) {
|
||||
if ($$c < 0 || $$c > 255) {
|
||||
$$c = 0;
|
||||
}
|
||||
$$c = $$c / 255;
|
||||
}
|
||||
|
||||
$MAX = max($red, $green, $blue);
|
||||
$MIN = min($red, $green, $blue);
|
||||
$HUE = 0;
|
||||
|
||||
if ($MAX == $MIN) {
|
||||
return array(0, 0, round($MAX * 100));
|
||||
}
|
||||
if ($red == $MAX) {
|
||||
$HUE = ($green - $blue) / ($MAX - $MIN);
|
||||
} elseif ($green == $MAX) {
|
||||
$HUE = 2 + (($blue - $red) / ($MAX - $MIN));
|
||||
} elseif ($blue == $MAX) {
|
||||
$HUE = 4 + (($red - $green) / ($MAX - $MIN));
|
||||
}
|
||||
$HUE *= 60;
|
||||
if ($HUE < 0) {
|
||||
$HUE += 360;
|
||||
}
|
||||
|
||||
return array(
|
||||
(int)round($HUE),
|
||||
(int)round((($MAX - $MIN) / $MAX) * 100),
|
||||
(int)round($MAX * 100)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* converts HSB/V to RGB values RGB is full INT
|
||||
* @param int $H hue 0-360
|
||||
* @param int $S saturation 0-100 (int)
|
||||
* @param int $V brightness/value 0-100 (int)
|
||||
* @return array 0 red/1 green/2 blue array as 0-255
|
||||
*/
|
||||
public static function hsb2rgb(int $H, int $S, int $V): array
|
||||
{
|
||||
// check that H is 0 to 359, 360 = 0
|
||||
// and S and V are 0 to 1
|
||||
if ($H < 0 || $H > 359) {
|
||||
$H = 0;
|
||||
}
|
||||
if ($S < 0 || $S > 100) {
|
||||
$S = 0;
|
||||
}
|
||||
if ($V < 0 || $V > 100) {
|
||||
$V = 0;
|
||||
}
|
||||
// convert to internal 0-1 format
|
||||
$S /= 100;
|
||||
$V /= 100;
|
||||
|
||||
if ($S == 0) {
|
||||
return array($V * 255, $V * 255, $V * 255);
|
||||
}
|
||||
|
||||
$Hi = floor($H / 60);
|
||||
$f = ($H / 60) - $Hi;
|
||||
$p = $V * (1 - $S);
|
||||
$q = $V * (1 - ($S * $f));
|
||||
$t = $V * (1 - ($S * (1 - $f)));
|
||||
|
||||
switch ($Hi) {
|
||||
case 0:
|
||||
$red = $V;
|
||||
$green = $t;
|
||||
$blue = $p;
|
||||
break;
|
||||
case 1:
|
||||
$red = $q;
|
||||
$green = $V;
|
||||
$blue = $p;
|
||||
break;
|
||||
case 2:
|
||||
$red = $p;
|
||||
$green = $V;
|
||||
$blue = $t;
|
||||
break;
|
||||
case 3:
|
||||
$red = $p;
|
||||
$green = $q;
|
||||
$blue = $V;
|
||||
break;
|
||||
case 4:
|
||||
$red = $t;
|
||||
$green = $p;
|
||||
$blue = $V;
|
||||
break;
|
||||
case 5:
|
||||
$red = $V;
|
||||
$green = $p;
|
||||
$blue = $q;
|
||||
break;
|
||||
default:
|
||||
$red = 0;
|
||||
$green = 0;
|
||||
$blue = 0;
|
||||
}
|
||||
|
||||
return array(
|
||||
(int)round($red * 255),
|
||||
(int)round($green * 255),
|
||||
(int)round($blue * 255)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* converts a RGB (0-255) to HSL
|
||||
* return:
|
||||
* array with hue (0-360), saturation (0-100%) and luminance (0-100%)
|
||||
* @param int $red red 0-255
|
||||
* @param int $green green 0-255
|
||||
* @param int $blue blue 0-255
|
||||
* @return array hue/sat/luminance
|
||||
*/
|
||||
public static function rgb2hsl(int $red, int $green, int $blue): array
|
||||
{
|
||||
// check that rgb is from 0 to 255
|
||||
foreach (array('red', 'green', 'blue') as $c) {
|
||||
if ($$c < 0 || $$c > 255) {
|
||||
$$c = 0;
|
||||
}
|
||||
$$c = $$c / 255;
|
||||
}
|
||||
|
||||
$min = min($red, $green, $blue);
|
||||
$max = max($red, $green, $blue);
|
||||
$chroma = $max - $min;
|
||||
$sat = 0;
|
||||
$hue = 0;
|
||||
// luminance
|
||||
$lum = ($max + $min) / 2;
|
||||
|
||||
// achromatic
|
||||
if ($chroma == 0) {
|
||||
// H, S, L
|
||||
return [0.0, 0.0, round($lum * 100, 1)];
|
||||
} else {
|
||||
$sat = $chroma / (1 - abs(2 * $lum - 1));
|
||||
if ($max == $red) {
|
||||
$hue = fmod((($green - $blue) / $chroma), 6);
|
||||
if ($hue < 0) {
|
||||
$hue = (6 - fmod(abs($hue), 6));
|
||||
}
|
||||
} elseif ($max == $green) {
|
||||
$hue = ($blue - $red) / $chroma + 2;
|
||||
} elseif ($max == $blue) {
|
||||
$hue = ($red - $green) / $chroma + 4;
|
||||
}
|
||||
$hue = $hue * 60;
|
||||
// $sat = 1 - abs(2 * $lum - 1);
|
||||
return [
|
||||
round($hue, 1),
|
||||
round($sat * 100, 1),
|
||||
round($lum * 100, 1)
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* converts an HSL to RGB
|
||||
* @param int $hue hue: 0-360 (degrees)
|
||||
* @param float $sat saturation: 0-100
|
||||
* @param float $lum luminance: 0-100
|
||||
* @return array red/blue/green 0-255 each
|
||||
*/
|
||||
public static function hsl2rgb(int $hue, float $sat, float $lum): array
|
||||
{
|
||||
if ($hue < 0 || $hue > 359) {
|
||||
$hue = 0;
|
||||
}
|
||||
if ($sat < 0 || $sat > 100) {
|
||||
$sat = 0;
|
||||
}
|
||||
if ($lum < 0 || $lum > 100) {
|
||||
$lum = 0;
|
||||
}
|
||||
$hue = (1 / 360) * $hue; // calc to internal convert value for hue
|
||||
// convert to internal 0-1 format
|
||||
$sat /= 100;
|
||||
$lum /= 100;
|
||||
// if saturation is 0
|
||||
if ($sat == 0) {
|
||||
return array($lum * 255, $lum * 255, $lum * 255);
|
||||
} else {
|
||||
$m2 = $lum < 0.5 ? $lum * ($sat + 1) : ($lum + $sat) - ($lum * $sat);
|
||||
$m1 = $lum * 2 - $m2;
|
||||
$hueue = function ($base) use ($m1, $m2) {
|
||||
// base = hue, hue > 360 (1) - 360 (1), else < 0 + 360 (1)
|
||||
$base = $base < 0 ? $base + 1 : ($base > 1 ? $base - 1 : $base);
|
||||
// 6: 60, 2: 180, 3: 240
|
||||
// 2/3 = 240
|
||||
// 1/3 = 120 (all from 360)
|
||||
if ($base * 6 < 1) {
|
||||
return $m1 + ($m2 - $m1) * $base * 6;
|
||||
}
|
||||
if ($base * 2 < 1) {
|
||||
return $m2;
|
||||
}
|
||||
if ($base * 3 < 2) {
|
||||
return $m1 + ($m2 - $m1) * ((2 / 3) - $base) * 6;
|
||||
}
|
||||
return $m1;
|
||||
};
|
||||
|
||||
return array(
|
||||
(int)round(255 * $hueue($hue + (1 / 3))),
|
||||
(int)round(255 * $hueue($hue)),
|
||||
(int)round(255 * $hueue($hue - (1 / 3)))
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
60
www/lib/CoreLibs/Convert/Html.php
Normal file
60
www/lib/CoreLibs/Convert/Html.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* html convert functions
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Convert;
|
||||
|
||||
class Html
|
||||
{
|
||||
/**
|
||||
* full wrapper for html entities
|
||||
* @param mixed $string string to html encode
|
||||
* @return mixed if string, encoded, else as is (eg null)
|
||||
*/
|
||||
public static function htmlent($string)
|
||||
{
|
||||
if (is_string($string)) {
|
||||
return htmlentities($string, ENT_COMPAT|ENT_HTML401, 'UTF-8', false);
|
||||
} else {
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* strips out all line breaks or replaced with given string
|
||||
* @param string $string string
|
||||
* @param string $replace replace character, default ' '
|
||||
* @return string cleaned string without any line breaks
|
||||
*/
|
||||
public static function removeLB(string $string, string $replace = ' '): string
|
||||
{
|
||||
return str_replace(array("\r", "\n"), $replace, $string);
|
||||
}
|
||||
|
||||
/**
|
||||
* returns 'checked' or 'selected' if okay
|
||||
* $needle is a var, $haystack an array or a string
|
||||
* **** THE RETURN: VALUE WILL CHANGE TO A DEFAULT NULL IF NOT FOUND ****
|
||||
* @param array|string $haystack (search in) haystack can be an array or a string
|
||||
* @param string $needle needle (search for)
|
||||
* @param int $type type: 0: returns selected, 1, returns checked
|
||||
* @return ?string returns checked or selected, else returns null
|
||||
*/
|
||||
public static function checked($haystack, $needle, int $type = 0): ?string
|
||||
{
|
||||
if (is_array($haystack)) {
|
||||
if (in_array((string)$needle, $haystack)) {
|
||||
return $type ? 'checked' : 'selected';
|
||||
}
|
||||
} else {
|
||||
if ($haystack == $needle) {
|
||||
return $type ? 'checked' : 'selected';
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
51
www/lib/CoreLibs/Convert/Math.php
Normal file
51
www/lib/CoreLibs/Convert/Math.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* various math related function wrappers
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Convert;
|
||||
|
||||
class Math
|
||||
{
|
||||
/**
|
||||
* some float numbers will be rounded up even if they have no decimal entries
|
||||
* this function fixes this by pre-rounding before calling ceil
|
||||
* @param float $number number to round
|
||||
* @param int|integer $precision intermediat round up decimals (default 10)
|
||||
* @return float correct ceil number
|
||||
*/
|
||||
public static function fceil(float $number, int $precision = 10): float
|
||||
{
|
||||
return ceil(round($number, $precision));
|
||||
}
|
||||
|
||||
/**
|
||||
* round inside an a number, not the decimal part only
|
||||
* eg 48767 with -2 -> 48700
|
||||
* @param float $number number to round
|
||||
* @param int $precision negative number for position in number (default -2)
|
||||
* @return float rounded number
|
||||
*/
|
||||
public static function floorp(float $number, int $precision = -2): float
|
||||
{
|
||||
$mult = pow(10, $precision); // Can be cached in lookup table
|
||||
return floor($number * $mult) / $mult;
|
||||
}
|
||||
|
||||
/**
|
||||
* inits input to 0, if value is not numeric
|
||||
* @param string|int|float $number string or number to check
|
||||
* @return float if not number, then returns 0, else original input
|
||||
*/
|
||||
public static function initNumeric($number): float
|
||||
{
|
||||
if (!is_numeric($number)) {
|
||||
return 0;
|
||||
} else {
|
||||
return (float)$number;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
76
www/lib/CoreLibs/Convert/MimeAppName.php
Normal file
76
www/lib/CoreLibs/Convert/MimeAppName.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* Translates a mime id string into the actual application or file name
|
||||
* for example 'text/plain' will output 'Text file'
|
||||
*/
|
||||
|
||||
namespace CoreLibs\Convert;
|
||||
|
||||
class MimeAppName
|
||||
{
|
||||
private static $mime_apps = [];
|
||||
|
||||
/**
|
||||
* constructor: init mime list
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
self::$mime_apps = [
|
||||
// zip
|
||||
'application/zip' => 'Zip File',
|
||||
// Powerpoint
|
||||
'application/vnd.ms-powerpoint' => 'Microsoft Powerpoint',
|
||||
'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'Microsoft Powerpoint',
|
||||
// PDF
|
||||
'pplication/pdf' => 'PDF',
|
||||
// JPEG
|
||||
'image/jpeg' => 'JPEG',
|
||||
// PNG
|
||||
'image/png' => 'PNG',
|
||||
// Indesign
|
||||
'application/x-indesign' => 'Adobe InDesign',
|
||||
// Photoshop
|
||||
'image/vnd.adobe.photoshop' => 'Adobe Photoshop',
|
||||
'application/photoshop' => 'Adobe Photoshop',
|
||||
// Illustrator
|
||||
'application/illustrator' => 'Adobe Illustrator',
|
||||
// Word
|
||||
'application/vnd.ms-word' => 'Microsoft Word',
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'Microsoft Word',
|
||||
// Excel
|
||||
'application/vnd.ms-excel' => 'Microsoft Excel',
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'Microsoft Excel',
|
||||
// plain text
|
||||
'text/plain' => 'Text file',
|
||||
// html
|
||||
'text/html' => 'HTML',
|
||||
// mp4 (max 45MB each)
|
||||
'video/mpeg' => 'MPEG Video'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets or updates a mime type
|
||||
* @param string $mime MIME Name, no validiation
|
||||
* @param string $app Applicaiton name
|
||||
* @return void
|
||||
*/
|
||||
public static function mimeSetAppName(string $mime, string $app): void
|
||||
{
|
||||
self::$mime_apps[$mime] = $app;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the application name from mime type
|
||||
* if not set returns "Other file"
|
||||
* @param string $mime MIME Name
|
||||
* @return string Application name matching
|
||||
*/
|
||||
public static function mimeGetAppName(string $mime): string
|
||||
{
|
||||
return self::$mime_apps[$mime] ?? 'Other file';
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user