Compare commits

...

11 Commits

Author SHA1 Message Date
Clemens Schwaighofer
3e29073664 phan config update 2020-02-17 14:52:49 +09:00
Clemens Schwaighofer
5601b14d5f DEFINE capital fix, JS action indicator fix, basic class date check fix
- captial DEFINE is now lower case
- indicator is visible check in javascript for showing indicator
- remove not needed overlay box 100% css, this is set in the stylesheet
anway
- Fix array pad missing in date compare functions in Basic class
2020-02-06 18:07:04 +09:00
Clemens Schwaighofer
a1afc1fb2e edit table add missing log overflow and update log partition function 2020-01-30 10:37:07 +09:00
Clemens Schwaighofer
d445bc3526 Database edit tables updates and fixes, remove all zero size index files 2020-01-29 13:50:25 +09:00
Clemens Schwaighofer
719d82d4ee Update missing order settings in database import order file 2020-01-28 11:07:12 +09:00
Clemens Schwaighofer
6807f33120 Update table layout construction files 2020-01-28 10:59:46 +09:00
Clemens Schwaighofer
114ca6c24a Update all isset()? to ??
All the old isset($var) ? $var : <other> have been changed to $var ??
<other>
2020-01-24 17:52:38 +09:00
Clemens Schwaighofer
e46d0fa4a4 Phan fixes with smarty class and file uploader class 2020-01-22 15:48:34 +09:00
Clemens Schwaighofer
f7db84c62f Minor fixes in corelibs 2020-01-22 15:14:25 +09:00
Clemens Schwaighofer
3267fc0266 Updates and fixes, remove .htaccess
Remove .htaccess file with php variable settings as this will not work
on FPM calls.
Various minor fixes in core libs

Basic lib debug output check is now a sub class so we can use this
everywhere without writing the whole if statement again

Basic lib has a dummy uniq id method added. Not yet finished
2020-01-22 14:55:23 +09:00
Clemens Schwaighofer
d9e13ae14c Updates and fixes to CoreLibs
- fixed all DEFINE to define in config* files
- Updates Login class with missing strict declarations
- some fixes in Login class for possible errors
- Basic class return array layout updates for all rgb sets plus correct
  static update
- Basic class timestamp method fix for not full set (eg missing seconds)
- Basic class add method for getting linecount from a file
- DB IO class gets a get settings return value method
2020-01-07 15:45:24 +09:00
68 changed files with 680 additions and 371 deletions

View File

@@ -56,6 +56,7 @@ return [
"./www/configs/config.db.php", "./www/configs/config.db.php",
"./www/configs/config.host.php", "./www/configs/config.host.php",
"./www/configs/config.path.php", "./www/configs/config.path.php",
"./www/configs/config.other.php",
"./www/configs/config.master.php", "./www/configs/config.master.php",
"./www/includes/admin_header.php", "./www/includes/admin_header.php",
], ],
@@ -83,7 +84,7 @@ return [
// to parse, but not analyze // to parse, but not analyze
"exclude_analysis_directory_list" => [ "exclude_analysis_directory_list" => [
'www/vendor', 'www/vendor',
'www/lib/FileUpload', // 'www/lib/FileUpload',
'www/lib/pChart', 'www/lib/pChart',
'www/lib/pChart2.1.4', 'www/lib/pChart2.1.4',
'www/lib/Smarty', 'www/lib/Smarty',
@@ -108,6 +109,8 @@ return [
// ignore the old qq tests // ignore the old qq tests
'www/admin/qq_file_upload_front.php', 'www/admin/qq_file_upload_front.php',
'www/admin/qq_file_upload_ajax.php', 'www/admin/qq_file_upload_ajax.php',
// symlink files for msarty
'www/lib/smarty-3.1.30/SmartyBC.class.php',
], ],
// what not to show as problem // what not to show as problem

View File

@@ -1,7 +1,10 @@
# functions # functions
function/update_function.sql function/set_uid.sql
function/set_generic.sql
function/random_string.sql function/random_string.sql
function/set_edit_generic.sql
function/edit_set_access_uid.sql function/edit_set_access_uid.sql
function/edit_log_partition_trigger.sql
# generic tables # generic tables
table/edit_temp_files.sql table/edit_temp_files.sql
table/edit_generic.sql table/edit_generic.sql

View File

@@ -39,7 +39,7 @@ do
done; done;
# copy the trigger template to the target # copy the trigger template to the target
for path in $schema; for path in $schemas;
do do
if [ $sqltype ]; if [ $sqltype ];
then then

View File

@@ -1,3 +1,10 @@
-- AUTHOR: Clemens Schwaighofer
-- DATE: 2018-07-17
-- DESCRIPTION:
-- partition the edit_log table by year
-- auto creates table if missing, if failure writes to overflow table
-- HISTORY:
CREATE OR REPLACE FUNCTION edit_log_insert_trigger () CREATE OR REPLACE FUNCTION edit_log_insert_trigger ()
RETURNS TRIGGER AS RETURNS TRIGGER AS
$$ $$
@@ -6,18 +13,23 @@ DECLARE
end_date DATE; end_date DATE;
timeformat TEXT := 'YYYY'; timeformat TEXT := 'YYYY';
selector TEXT := 'year'; selector TEXT := 'year';
_interval INTERVAL; base_table TEXT := 'edit_log';
_interval INTERVAL := '1 ' || selector;
_interval_next INTERVAL := '2 ' || selector;
table_name TEXT; table_name TEXT;
-- compare date column
compare_date DATE := NEW.event_date;
compare_date_name TEXT := 'event_date';
-- the create commands
command_create_table TEXT := 'CREATE TABLE IF NOT EXISTS {TABLE_NAME} (CHECK({COMPARE_DATE_NAME} >= {START_DATE} AND {COMPARE_DATE_NAME} < {END_DATE})) INHERITS ({BASE_NAME})';
command_create_primary_key TEXT := 'ALTER TABLE {TABLE_NAME} ADD PRIMARY KEY ({BASE_TABLE}_id)';
command_create_foreign_key_1 TEXT := 'ALTER TABLE {TABLE_NAME} ADD CONSTRAINT {TABLE_NAME}_euid_fkey FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL';
command_create_trigger_1 TEXT = 'CREATE TRIGGER trg_{TABLE_NAME} BEFORE INSERT OR UPDATE ON {TABLE_NAME} FOR EACH ROW EXECUTE PROCEDURE set_edit_generic()';
BEGIN BEGIN
-- get year and month from edit_log date so we can build the target edit_log table
-- move interval
_interval := '1 ' || selector;
-- current table name
table_name := 'edit_log_' || to_char(NEW.event_date, timeformat);
-- we are in valid start time area -- we are in valid start time area
IF (NEW.event_date >= start_date) THEN IF (NEW.event_date >= start_date) THEN
-- current table name
table_name := base_table || '_' || to_char(NEW.event_date, timeformat);
BEGIN BEGIN
EXECUTE 'INSERT INTO ' || quote_ident(table_name) || ' SELECT ($1).*' USING NEW; EXECUTE 'INSERT INTO ' || quote_ident(table_name) || ' SELECT ($1).*' USING NEW;
-- if insert failed because of missing table, create new below -- if insert failed because of missing table, create new below
@@ -25,17 +37,45 @@ BEGIN
WHEN undefined_table THEN WHEN undefined_table THEN
-- another block, so in case the creation fails here too -- another block, so in case the creation fails here too
BEGIN BEGIN
-- create new talbe here + all indexes -- create new table here + all indexes
start_date := date_trunc(selector, NEW.event_date); start_date := date_trunc(selector, NEW.event_date);
end_date := date_trunc(selector, NEW.event_date + _interval); end_date := date_trunc(selector, NEW.event_date + _interval);
-- creat table -- creat table
EXECUTE 'CREATE TABLE IF NOT EXISTS ' || quote_ident(table_name) || ' ( CHECK ( event_date >= ' || quote_literal(start_date) || ' AND event_date < ' || quote_literal(end_date) || ' ) ) INHERITS (edit_log)'; EXECUTE format(REPLACE( -- end date
REPLACE( -- start date
REPLACE( -- compare date name
REPLACE( -- base name (inherit)
REPLACE( -- table name
command_create_table,
'{TABLE_NAME}',
table_name
),
'{BASE_NAME}',
base_table
),
'{COMPARE_DATE_NAME}',
compare_date_name
),
'{START_DATE}',
quote_literal(start_date)
),
'{END_DATE}',
quote_literal(end_date)
));
-- create all indexes and triggers -- create all indexes and triggers
EXECUTE 'ALTER TABLE ' || quote_ident(table_name) || ' ADD PRIMARY KEY (edit_log_id)'; EXECUTE format(REPLACE(
REPLACE(
command_create_primary_key,
'{TABLE_NAME}',
table_name
),
'{BASE_TABLE}',
base_table
));
-- FK constraints -- FK constraints
EXECUTE 'ALTER TABLE ' || quote_ident(table_name) || ' ADD CONSTRAINT fk_' || quote_ident(table_name) || '_euid_fkey FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE CASCADE'; EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name));
-- generic trigger -- generic trigger
EXECUTE 'CREATE TRIGGER trg_' || quote_ident(table_name) || ' BEFORE INSERT OR UPDATE ON ' || quote_ident(table_name) || ' FOR EACH ROW EXECUTE PROCEDURE set_edit_generic()'; EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name));
-- insert try again -- insert try again
EXECUTE 'INSERT INTO ' || quote_ident(table_name) || ' SELECT ($1).*' USING NEW; EXECUTE 'INSERT INTO ' || quote_ident(table_name) || ' SELECT ($1).*' USING NEW;
@@ -49,6 +89,57 @@ BEGIN
-- if this faled, throw it into the overflow table (so we don't loose anything) -- if this faled, throw it into the overflow table (so we don't loose anything)
INSERT INTO edit_log_overflow VALUES (NEW.*); INSERT INTO edit_log_overflow VALUES (NEW.*);
END; END;
-- main insert run done, check if we have to create next months table
BEGIN
-- check if next month table exists
table_name := base_table || '_' || to_char((SELECT NEW.event_date + _interval)::DATE, timeformat);
-- RAISE NOTICE 'SEARCH NEXT: %', table_name;
IF (SELECT to_regclass(table_name)) IS NULL THEN
-- move inner interval same
start_date := date_trunc(selector, NEW.event_date + _interval);
end_date := date_trunc(selector, NEW.event_date + _interval_next);
-- RAISE NOTICE 'CREATE NEXT: %', table_name;
-- create table
EXECUTE format(REPLACE( -- end date
REPLACE( -- start date
REPLACE( -- compare date name
REPLACE( -- base name (inherit)
REPLACE( -- table name
command_create_table,
'{TABLE_NAME}',
table_name
),
'{BASE_NAME}',
base_table
),
'{COMPARE_DATE_NAME}',
compare_date_name
),
'{START_DATE}',
quote_literal(start_date)
),
'{END_DATE}',
quote_literal(end_date)
));
-- create all indexes and triggers
EXECUTE format(REPLACE(
REPLACE(
command_create_primary_key,
'{TABLE_NAME}',
table_name
),
'{BASE_TABLE}',
base_table
));
-- FK constraints
EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name));
-- generic trigger
EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name));
END IF;
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'Failed to create next table: %', table_name;
END;
ELSE ELSE
-- if outside valid date, insert into overflow -- if outside valid date, insert into overflow
INSERT INTO edit_log_overflow VALUES (NEW.*); INSERT INTO edit_log_overflow VALUES (NEW.*);

View File

@@ -2,7 +2,7 @@
CREATE OR REPLACE FUNCTION set_uid() RETURNS TRIGGER AS ' CREATE OR REPLACE FUNCTION set_uid() RETURNS TRIGGER AS '
DECLARE DECLARE
random_length INT = 12; -- that should be long enough random_length INT = 32; -- that should be long enough
BEGIN BEGIN
IF TG_OP = ''INSERT'' THEN IF TG_OP = ''INSERT'' THEN
NEW.uid := random_string(random_length); NEW.uid := random_string(random_length);

View File

@@ -1,14 +1,16 @@
-- adds the created or updated date tags -- adds the created or updated date tags
CREATE OR REPLACE FUNCTION set_generic() RETURNS TRIGGER AS ' -- OLD, DEPRECATED, use set_generic.sql
BEGIN
IF TG_OP = ''INSERT'' THEN -- CREATE OR REPLACE FUNCTION set_generic() RETURNS TRIGGER AS '
NEW.date_created := clock_timestamp(); -- BEGIN
NEW.user_created := current_user; -- IF TG_OP = ''INSERT'' THEN
ELSIF TG_OP = ''UPDATE'' THEN -- NEW.date_created := clock_timestamp();
NEW.date_updated := clock_timestamp(); -- NEW.user_created := current_user;
NEW.user_updated := current_user; -- ELSIF TG_OP = ''UPDATE'' THEN
END IF; -- NEW.date_updated := clock_timestamp();
RETURN NEW; -- NEW.user_updated := current_user;
END; -- END IF;
' LANGUAGE 'plpgsql'; -- RETURN NEW;
-- END;
-- ' LANGUAGE 'plpgsql';

View File

@@ -8,12 +8,12 @@
-- DROP TABLE edit_access; -- DROP TABLE edit_access;
CREATE TABLE edit_access ( CREATE TABLE edit_access (
edit_access_id SERIAL PRIMARY KEY, edit_access_id SERIAL PRIMARY KEY,
enabled SMALLINT NOT NULL DEFAULT 0,
protected SMALLINT DEFAULT 0,
deleted SMALLINT DEFAULT 0,
uid VARCHAR,
name VARCHAR UNIQUE, name VARCHAR UNIQUE,
description VARCHAR, description VARCHAR,
color VARCHAR, color VARCHAR,
uid VARCHAR,
enabled SMALLINT NOT NULL DEFAULT 0,
protected INT,
deleted SMALLINT DEFAULT 0,
additional_acl JSONB additional_acl JSONB
) INHERITS (edit_generic) WITHOUT OIDS; ) INHERITS (edit_generic) WITHOUT OIDS;

View File

@@ -9,8 +9,8 @@
CREATE TABLE edit_access_data ( CREATE TABLE edit_access_data (
edit_access_data_id SERIAL PRIMARY KEY, edit_access_data_id SERIAL PRIMARY KEY,
edit_access_id INT NOT NULL, edit_access_id INT NOT NULL,
enabled SMALLINT NOT NULL DEFAULT 0,
name VARCHAR, name VARCHAR,
value VARCHAR, value VARCHAR,
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 FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
) INHERITS (edit_generic) WITHOUT OIDS; ) INHERITS (edit_generic) WITHOUT OIDS;

View File

@@ -8,10 +8,10 @@
-- DROP TABLE edit_access_user; -- DROP TABLE edit_access_user;
CREATE TABLE edit_access_user ( CREATE TABLE edit_access_user (
edit_access_user_id SERIAL PRIMARY KEY, edit_access_user_id SERIAL PRIMARY KEY,
edit_default SMALLINT DEFAULT 0,
edit_access_id INT NOT NULL, edit_access_id INT NOT NULL,
edit_user_id INT NOT NULL, edit_user_id INT NOT NULL,
edit_access_right_id INT NOT NULL, edit_access_right_id INT NOT NULL,
edit_default SMALLINT DEFAULT 0,
enabled SMALLINT NOT NULL 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, FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,

View File

@@ -8,11 +8,12 @@
-- DROP TABLE edit_group; -- DROP TABLE edit_group;
CREATE TABLE edit_group ( CREATE TABLE edit_group (
edit_group_id SERIAL PRIMARY KEY, edit_group_id SERIAL PRIMARY KEY,
name VARCHAR,
enabled SMALLINT NOT NULL DEFAULT 0,
deleted SMALLINT DEFAULT 0,
edit_scheme_id INT, edit_scheme_id INT,
edit_access_right_id INT NOT NULL, edit_access_right_id INT NOT NULL,
enabled SMALLINT NOT NULL DEFAULT 0,
deleted SMALLINT DEFAULT 0,
uid VARCHAR,
name VARCHAR,
additional_acl JSONB, 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_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 FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE

View File

@@ -9,10 +9,10 @@
-- DROP TABLE edit_language; -- DROP TABLE edit_language;
CREATE TABLE edit_language ( CREATE TABLE edit_language (
edit_language_id SERIAL PRIMARY KEY, edit_language_id SERIAL PRIMARY KEY,
short_name VARCHAR,
long_name VARCHAR,
iso_name VARCHAR,
order_number INT,
enabled SMALLINT NOT NULL DEFAULT 0, enabled SMALLINT NOT NULL DEFAULT 0,
lang_default SMALLINT NOT NULL DEFAULT 0 lang_default SMALLINT NOT NULL DEFAULT 0,
long_name VARCHAR,
short_name VARCHAR,
iso_name VARCHAR,
order_number INT
) INHERITS (edit_generic) WITHOUT OIDS; ) INHERITS (edit_generic) WITHOUT OIDS;

View File

@@ -37,5 +37,5 @@ CREATE TABLE edit_log (
http_accept_charset VARCHAR, http_accept_charset VARCHAR,
http_accept_encoding VARCHAR, http_accept_encoding VARCHAR,
session_id VARCHAR, session_id VARCHAR,
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL
) INHERITS (edit_generic) WITHOUT OIDS; ) INHERITS (edit_generic) WITHOUT OIDS;

View File

@@ -0,0 +1,12 @@
-- AUTHOR: Clemens Schwaighofer
-- DATE: 2020/1/28
-- DESCRIPTION:
-- edit log overflow table
-- this is the overflow table for partition
-- TABLE: edit_log_overflow
-- HISTORY:
-- DROP TABLE edit_log_overflow;
CREATE TABLE IF NOT EXISTS edit_log_overflow () INHERITS (edit_log);
ALTER TABLE edit_log_overflow ADD PRIMARY KEY (edit_log_id);
ALTER TABLE edit_log_overflow ADD CONSTRAINT edit_log_overflow_euid_fkey FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL;

View File

@@ -17,5 +17,6 @@ CREATE TABLE edit_page (
popup SMALLINT NOT NULL DEFAULT 0, popup SMALLINT NOT NULL DEFAULT 0,
popup_x SMALLINT, popup_x SMALLINT,
popup_y SMALLINT, popup_y SMALLINT,
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE, hostname VARCHAR,
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE
) INHERITS (edit_generic) WITHOUT OIDS; ) INHERITS (edit_generic) WITHOUT OIDS;

View File

@@ -8,10 +8,10 @@
-- DROP TABLE edit_page_access; -- DROP TABLE edit_page_access;
CREATE TABLE edit_page_access ( CREATE TABLE edit_page_access (
edit_page_access_id SERIAL PRIMARY KEY, edit_page_access_id SERIAL PRIMARY KEY,
enabled SMALLINT NOT NULL DEFAULT 0,
edit_group_id INT NOT NULL, edit_group_id INT NOT NULL,
edit_page_id INT NOT NULL, edit_page_id INT NOT NULL,
edit_access_right_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, FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_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, 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 FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE

View File

@@ -11,8 +11,8 @@ CREATE TABLE edit_page_content (
edit_page_content_id SERIAL PRIMARY KEY, edit_page_content_id SERIAL PRIMARY KEY,
edit_page_id INT NOT NULL, edit_page_id INT NOT NULL,
edit_access_right_id INT NOT NULL, edit_access_right_id INT NOT NULL,
name VARCHAR,
uid VARCHAR UNIQUE, uid VARCHAR UNIQUE,
name VARCHAR,
order_number INT NOT NULL, order_number INT NOT NULL,
online SMALLINT NOT NULL DEFAULT 0, 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_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,

View File

@@ -8,10 +8,10 @@
-- DROP TABLE edit_query_string; -- DROP TABLE edit_query_string;
CREATE TABLE edit_query_string ( CREATE TABLE edit_query_string (
edit_query_string_id SERIAL PRIMARY KEY, edit_query_string_id SERIAL PRIMARY KEY,
edit_page_id INT NOT NULL,
enabled SMALLINT NOT NULL DEFAULT 0,
name VARCHAR, name VARCHAR,
value VARCHAR, value VARCHAR,
enabled SMALLINT NOT NULL DEFAULT 0,
dynamic SMALLINT NOT NULL DEFAULT 0, dynamic SMALLINT NOT NULL DEFAULT 0,
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_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
) INHERITS (edit_generic) WITHOUT OIDS; ) INHERITS (edit_generic) WITHOUT OIDS;

View File

@@ -7,5 +7,6 @@
-- DROP TABLE temp_files; -- DROP TABLE temp_files;
CREATE TABLE temp_files ( CREATE TABLE temp_files (
filename VARCHAR filename VARCHAR,
folder VARCHAR
); );

View File

@@ -9,23 +9,23 @@
CREATE TABLE edit_user ( CREATE TABLE edit_user (
edit_user_id SERIAL PRIMARY KEY, edit_user_id SERIAL PRIMARY KEY,
connect_edit_user_id INT, -- possible reference to other user connect_edit_user_id INT, -- possible reference to other user
edit_language_id INT NOT NULL,
edit_group_id INT NOT NULL,
edit_scheme_id INT,
edit_access_right_id INT NOT NULL,
enabled SMALLINT NOT NULL DEFAULT 0,
deleted SMALLINT NOT NULL DEFAULT 0,
username VARCHAR UNIQUE, username VARCHAR UNIQUE,
password VARCHAR, password VARCHAR,
first_name VARCHAR, first_name VARCHAR,
last_name VARCHAR, last_name VARCHAR,
first_name_furigana VARCHAR, first_name_furigana VARCHAR,
last_name_furigana VARCHAR, last_name_furigana VARCHAR,
enabled SMALLINT NOT NULL DEFAULT 0,
deleted SMALLINT NOT NULL DEFAULT 0,
debug SMALLINT NOT NULL DEFAULT 0, debug SMALLINT NOT NULL DEFAULT 0,
db_debug SMALLINT NOT NULL DEFAULT 0, db_debug SMALLINT NOT NULL DEFAULT 0,
email VARCHAR, email VARCHAR,
protected SMALLINT NOT NULL DEFAULT 0, protected SMALLINT NOT NULL DEFAULT 0,
admin SMALLINT NOT NULL DEFAULT 0, admin SMALLINT NOT NULL DEFAULT 0,
edit_language_id INT NOT NULL,
edit_group_id INT NOT NULL,
edit_scheme_id INT,
edit_access_right_id INT NOT NULL,
login_error_count INT, login_error_count INT,
login_error_date_last TIMESTAMP WITHOUT TIME ZONE, login_error_date_last TIMESTAMP WITHOUT TIME ZONE,
login_error_date_first TIMESTAMP WITHOUT TIME ZONE, login_error_date_first TIMESTAMP WITHOUT TIME ZONE,

View File

@@ -11,7 +11,3 @@ CREATE TABLE edit_visible_group (
name VARCHAR, name VARCHAR,
flag VARCHAR flag VARCHAR
) INHERITS (edit_generic) WITHOUT OIDS; ) INHERITS (edit_generic) WITHOUT OIDS;
DELETE FROM edit_visible_group;
INSERT INTO edit_visible_group (name, flag) VALUES ('Main Menu', 'main');
INSERT INTO edit_visible_group (name, flag) VALUES ('Data popup Menu', 'datapopup');

View File

@@ -1,9 +1,9 @@
DROP TRIGGER trg_edit_access ON edit_access; DROP TRIGGER IF EXISTS trg_edit_access ON edit_access;
CREATE TRIGGER trg_edit_access CREATE TRIGGER trg_edit_access
BEFORE INSERT OR UPDATE ON edit_access BEFORE INSERT OR UPDATE ON edit_access
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
DROP TRIGGER trg_set_edit_access_uid ON edit_access; DROP TRIGGER IF EXISTS trg_set_edit_access_uid ON edit_access;
CREATE TRIGGER trg_set_edit_access_uid CREATE TRIGGER trg_set_edit_access_uid
BEFORE INSERT OR UPDATE ON edit_access BEFORE INSERT OR UPDATE ON edit_access
FOR EACH ROW EXECUTE PROCEDURE set_edit_access_uid(); FOR EACH ROW EXECUTE PROCEDURE set_edit_access_uid();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_access_data ON edit_access_data; DROP TRIGGER IF EXISTS trg_edit_access_data ON edit_access_data;
CREATE TRIGGER trg_edit_access_data CREATE TRIGGER trg_edit_access_data
BEFORE INSERT OR UPDATE ON edit_access_data BEFORE INSERT OR UPDATE ON edit_access_data
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_access_right ON edit_access_right; DROP TRIGGER IF EXISTS trg_edit_access_right ON edit_access_right;
CREATE TRIGGER trg_edit_access_right CREATE TRIGGER trg_edit_access_right
BEFORE INSERT OR UPDATE ON edit_access_right BEFORE INSERT OR UPDATE ON edit_access_right
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_access_user ON edit_access_user; DROP TRIGGER IF EXISTS trg_edit_access_user ON edit_access_user;
CREATE TRIGGER trg_edit_access_user CREATE TRIGGER trg_edit_access_user
BEFORE INSERT OR UPDATE ON edit_access_user BEFORE INSERT OR UPDATE ON edit_access_user
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_group ON edit_group; DROP TRIGGER IF EXISTS trg_edit_group ON edit_group;
CREATE TRIGGER trg_edit_group CREATE TRIGGER trg_edit_group
BEFORE INSERT OR UPDATE ON edit_group BEFORE INSERT OR UPDATE ON edit_group
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_language ON edit_language; DROP TRIGGER IF EXISTS trg_edit_language ON edit_language;
CREATE TRIGGER trg_edit_language CREATE TRIGGER trg_edit_language
BEFORE INSERT OR UPDATE ON edit_language BEFORE INSERT OR UPDATE ON edit_language
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,9 +1,9 @@
DROP TRIGGER trg_edit_log ON edit_log; DROP TRIGGER IF EXISTS trg_edit_log ON edit_log;
CREATE TRIGGER trg_edit_log CREATE TRIGGER trg_edit_log
BEFORE INSERT OR UPDATE ON edit_log BEFORE INSERT OR UPDATE ON edit_log
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
DROP TRIGGER trg_edit_log_insert_partition ON edit_log; DROP TRIGGER IF EXISTS trg_edit_log_insert_partition ON edit_log;
CREATE TRIGGER trg_edit_log_insert_partition CREATE TRIGGER trg_edit_log_insert_partition
BEFORE INSERT OR UPDATE ON edit_log BEFORE INSERT OR UPDATE ON edit_log
FOR EACH ROW EXECUTE PROCEDURE edit_log_insert_trigger(); FOR EACH ROW EXECUTE PROCEDURE edit_log_insert_trigger();

View File

@@ -0,0 +1,4 @@
DROP TRIGGER IF EXISTS trg_edit_log_overflow ON edit_log_overflow;
CREATE TRIGGER trg_edit_log_overflow
BEFORE INSERT OR UPDATE ON edit_log_overflow
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_menu_group ON edit_menu_group; DROP TRIGGER IF EXISTS trg_edit_menu_group ON edit_menu_group;
CREATE TRIGGER trg_edit_menu_group CREATE TRIGGER trg_edit_menu_group
BEFORE INSERT OR UPDATE ON edit_menu_group BEFORE INSERT OR UPDATE ON edit_menu_group
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_page ON edit_page; DROP TRIGGER IF EXISTS trg_edit_page ON edit_page;
CREATE TRIGGER trg_edit_page CREATE TRIGGER trg_edit_page
BEFORE INSERT OR UPDATE ON edit_page BEFORE INSERT OR UPDATE ON edit_page
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_page_access ON edit_page_access; DROP TRIGGER IF EXISTS trg_edit_page_access ON edit_page_access;
CREATE TRIGGER trg_edit_page_access CREATE TRIGGER trg_edit_page_access
BEFORE INSERT OR UPDATE ON edit_page_access BEFORE INSERT OR UPDATE ON edit_page_access
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_page_content ON edit_page_content; DROP TRIGGER IF EXISTS trg_edit_page_content ON edit_page_content;
CREATE TRIGGER trg_edit_page_content CREATE TRIGGER trg_edit_page_content
BEFORE INSERT OR UPDATE ON edit_page_content BEFORE INSERT OR UPDATE ON edit_page_content
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_query_string ON edit_query_string; DROP TRIGGER IF EXISTS trg_edit_query_string ON edit_query_string;
CREATE TRIGGER trg_edit_query_string CREATE TRIGGER trg_edit_query_string
BEFORE INSERT OR UPDATE ON edit_query_string BEFORE INSERT OR UPDATE ON edit_query_string
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_scheme ON edit_scheme; DROP TRIGGER IF EXISTS trg_edit_scheme ON edit_scheme;
CREATE TRIGGER trg_edit_scheme CREATE TRIGGER trg_edit_scheme
BEFORE INSERT OR UPDATE ON edit_scheme BEFORE INSERT OR UPDATE ON edit_scheme
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_user ON edit_user; DROP TRIGGER IF EXISTS trg_edit_user ON edit_user;
CREATE TRIGGER trg_edit_user CREATE TRIGGER trg_edit_user
BEFORE INSERT OR UPDATE ON edit_user BEFORE INSERT OR UPDATE ON edit_user
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -1,4 +1,4 @@
DROP TRIGGER trg_edit_visible_group ON edit_visible_group; DROP TRIGGER IF EXISTS trg_edit_visible_group ON edit_visible_group;
CREATE TRIGGER trg_edit_visible_group CREATE TRIGGER trg_edit_visible_group
BEFORE INSERT OR UPDATE ON edit_visible_group BEFORE INSERT OR UPDATE ON edit_visible_group
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();

View File

@@ -8,7 +8,7 @@ ALTER TABLE edit_access ADD protected SMALLINT DEFAULT 0;
ALTER TABLE edit_group ADD uid VARCHAR; ALTER TABLE edit_group ADD uid VARCHAR;
ALTER TABLE edit_group ADD deleted SMALLINT DEFAULT 0; ALTER TABLE edit_group ADD deleted SMALLINT DEFAULT 0;
ALTER TABLE temp_files ADD folder varchar; ALTER TABLE temp_files ADD folder VARCHAR;
ALTER TABLE edit_page ADD hostname varchar; ALTER TABLE edit_page ADD hostname VARCHAR;
ALTER TABLE edit_user ADD deleted SMALLINT DEFAULT 0; ALTER TABLE edit_user ADD deleted SMALLINT DEFAULT 0;

View File

@@ -224,6 +224,13 @@ if (round($timestamp, 4) == $basic->stringToTime($time_string)) {
} else { } else {
print "REVERSE TRIME STRING DO NOT MATCH<br>"; 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 // magic links test
print $basic->magicLinks('user@bubu.at').'<br>'; print $basic->magicLinks('user@bubu.at').'<br>';

9
www/admin/phan_test.php Executable file
View File

@@ -0,0 +1,9 @@
<?php declare(strict_types=1);
require 'config.php';
require BASE.INCLUDES.'admin_header.php';
// $DATA['foo'] = 'bar';
// $messages['foo'] = 'bar';
// __END__

View File

@@ -10,26 +10,28 @@ define('USE_DATABASE', true);
define('USE_HEADER', true); define('USE_HEADER', true);
require 'config.php'; require 'config.php';
require BASE.INCLUDES.'admin_header.php'; require BASE.INCLUDES.'admin_header.php';
$smarty->MASTER_TEMPLATE_NAME = 'main_body.tpl'; if (is_object($smarty)) {
$smarty->TEMPLATE_NAME = 'smarty_test.tpl'; $smarty->MASTER_TEMPLATE_NAME = 'main_body.tpl';
$smarty->CSS_SPECIAL_TEMPLATE_NAME = 'smart_test.css'; $smarty->TEMPLATE_NAME = 'smarty_test.tpl';
$smarty->USE_PROTOTYPE = false; $smarty->CSS_SPECIAL_TEMPLATE_NAME = 'smart_test.css';
$smarty->USE_JQUERY = true; $smarty->USE_PROTOTYPE = false;
$smarty->JS_DATEPICKR = false; $smarty->USE_JQUERY = true;
if ($smarty->USE_PROTOTYPE) { $smarty->JS_DATEPICKR = false;
$smarty->ADMIN_JAVASCRIPT = 'edit.pt.js'; if ($smarty->USE_PROTOTYPE) {
$smarty->JS_SPECIAL_TEMPLATE_NAME = 'prototype.test.js'; $smarty->ADMIN_JAVASCRIPT = 'edit.pt.js';
} elseif ($smarty->USE_JQUERY) { $smarty->JS_SPECIAL_TEMPLATE_NAME = 'prototype.test.js';
$smarty->ADMIN_JAVASCRIPT = 'edit.jq.js'; } elseif ($smarty->USE_JQUERY) {
$smarty->JS_SPECIAL_TEMPLATE_NAME = 'jquery.test.js'; $smarty->ADMIN_JAVASCRIPT = 'edit.jq.js';
} $smarty->JS_SPECIAL_TEMPLATE_NAME = 'jquery.test.js';
$smarty->PAGE_WIDTH = "100%"; }
// require BASE.INCLUDES.'admin_set_paths.php'; $smarty->PAGE_WIDTH = '100%';
$smarty->setSmartyPaths(); // require BASE.INCLUDES.'admin_set_paths.php';
$smarty->setSmartyPaths();
// smarty test // smarty test
$smarty->DATA['SMARTY_TEST'] = 'Test Data'; $smarty->DATA['SMARTY_TEST'] = 'Test Data';
$smarty->DATA['TRANSLATE_TEST'] = $cms->l->__('Are we translated?'); $smarty->DATA['TRANSLATE_TEST'] = $cms->l->__('Are we translated?');
}
// drop down test with optgroups // drop down test with optgroups
$options = array ( $options = array (
@@ -48,8 +50,9 @@ $options = array (
) )
); );
$smarty->DATA['drop_down_test'] = $options; if (is_object($smarty)) {
$smarty->DATA['drop_down_test'] = $options;
// require BASE.INCLUDES.'admin_smarty.php'; // require BASE.INCLUDES.'admin_smarty.php';
$smarty->setSmartyVarsAdmin(); $smarty->setSmartyVarsAdmin();
}
require BASE.INCLUDES.'admin_footer.php'; require BASE.INCLUDES.'admin_footer.php';

View File

@@ -9,146 +9,146 @@
/************* PATHS *********************/ /************* PATHS *********************/
// directory seperator // directory seperator
DEFINE('DS', DIRECTORY_SEPARATOR); define('DS', DIRECTORY_SEPARATOR);
// ** NEW/BETTER DIR DECLARATIONS ** // ** NEW/BETTER DIR DECLARATIONS **
// path to original file (if symlink) // path to original file (if symlink)
DEFINE('DIR', __DIR__.DS); define('DIR', __DIR__.DS);
// base dir root folder level // base dir root folder level
DEFINE('BASE', str_replace('/configs', '', __DIR__).DS); define('BASE', str_replace('/configs', '', __DIR__).DS);
// ** OLD DIR DECLARATIONS ** // ** OLD DIR DECLARATIONS **
// path to document root of file called // path to document root of file called
DEFINE('ROOT', getcwd().DS); define('ROOT', getcwd().DS);
// libs path // libs path
DEFINE('LIB', 'lib'.DS); define('LIB', 'lib'.DS);
DEFINE('LIBS', 'lib'.DS); define('LIBS', 'lib'.DS);
// configs folder // configs folder
DEFINE('CONFIGS', 'configs'.DS); define('CONFIGS', 'configs'.DS);
// includes (strings, arrays for static, etc) // includes (strings, arrays for static, etc)
DEFINE('INCLUDES', 'includes'.DS); define('INCLUDES', 'includes'.DS);
// data folder (mostly in includes) // data folder (mostly in includes)
DEFINE('DATA', 'data'.DS); define('DATA', 'data'.DS);
// layout base path // layout base path
DEFINE('LAYOUT', 'layout'.DS); define('LAYOUT', 'layout'.DS);
// pic-root (compatible to CMS) // pic-root (compatible to CMS)
DEFINE('PICTURES', 'images'.DS); define('PICTURES', 'images'.DS);
// images // images
DEFINE('IMAGES', 'images'.DS); define('IMAGES', 'images'.DS);
// icons (below the images/ folder) // icons (below the images/ folder)
DEFINE('ICONS', 'icons'.DS); define('ICONS', 'icons'.DS);
// media // media
DEFINE('MEDIA', 'media'.DS); define('MEDIA', 'media'.DS);
// flash-root (below media) // flash-root (below media)
DEFINE('FLASH', 'flash'.DS); define('FLASH', 'flash'.DS);
// uploads (anything to keep) // uploads (anything to keep)
DEFINE('UPLOADS', 'uploads'.DS); define('UPLOADS', 'uploads'.DS);
// files (binaries) (below media) // files (binaries) (below media)
DEFINE('BINARIES', 'binaries'.DS); define('BINARIES', 'binaries'.DS);
// files (videos) (below media) // files (videos) (below media)
DEFINE('VIDEOS', 'videos'.DS); define('VIDEOS', 'videos'.DS);
// files (documents) (below media) // files (documents) (below media)
DEFINE('DOCUMENTS', 'documents'.DS); define('DOCUMENTS', 'documents'.DS);
// files (pdfs) (below media) // files (pdfs) (below media)
DEFINE('PDFS', 'documents'.DS); define('PDFS', 'documents'.DS);
// CSV // CSV
DEFINE('CSV', 'csv'.DS); define('CSV', 'csv'.DS);
// css // css
DEFINE('CSS', 'css'.DS); define('CSS', 'css'.DS);
// font (web) // font (web)
DEFINE('FONT', 'font'.DS); define('FONT', 'font'.DS);
// js // js
DEFINE('JS', 'javascript'.DS); define('JS', 'javascript'.DS);
// table arrays // table arrays
DEFINE('TABLE_ARRAYS', 'table_arrays'.DS); define('TABLE_ARRAYS', 'table_arrays'.DS);
// smarty libs path // smarty libs path
DEFINE('SMARTY', 'Smarty'.DS); define('SMARTY', 'Smarty'.DS);
// po langs // po langs
DEFINE('LANG', 'lang'.DS); define('LANG', 'lang'.DS);
// cache path // cache path
DEFINE('CACHE', 'cache'.DS); define('CACHE', 'cache'.DS);
// temp path // temp path
DEFINE('TMP', 'tmp'.DS); define('TMP', 'tmp'.DS);
// log files // log files
DEFINE('LOG', 'log'.DS); define('LOG', 'log'.DS);
// compiled template folder // compiled template folder
DEFINE('TEMPLATES_C', 'templates_c'.DS); define('TEMPLATES_C', 'templates_c'.DS);
// template base // template base
DEFINE('TEMPLATES', 'templates'.DS); define('TEMPLATES', 'templates'.DS);
/************* HASH / ACL DEFAULT / ERROR SETTINGS / SMARTY *************/ /************* HASH / ACL DEFAULT / ERROR SETTINGS / SMARTY *************/
// default hash type // default hash type
DEFINE('DEFAULT_HASH', 'sha256'); define('DEFAULT_HASH', 'sha256');
// default acl level // default acl level
DEFINE('DEFAULT_ACL_LEVEL', 80); define('DEFAULT_ACL_LEVEL', 80);
// SSL host name // SSL host name
// DEFINE('SSL_HOST', 'ssl.host.name'); // define('SSL_HOST', 'ssl.host.name');
// error page strictness, Default is 3 // error page strictness, Default is 3
// 1: only show error page as the last mesure if really no mid & aid can be loaded and found at all // 1: only show error page as the last mesure if really no mid & aid can be loaded and found at all
// 2: if template not found, do not search, show error template // 2: if template not found, do not search, show error template
// 3: if default template is not found, show error template, do not fall back to default tree // 3: if default template is not found, show error template, do not fall back to default tree
// 4: very strict, even on normal fixable errors through error // 4: very strict, even on normal fixable errors through error
// DEFINE('ERROR_STRICT', 3); // define('ERROR_STRICT', 3);
// allow page caching in general, set to 'FALSE' if you do debugging or development! // allow page caching in general, set to 'false' if you do debugging or development!
// DEFINE('ALLOW_SMARTY_CACHE', false); // define('ALLOW_SMARTY_CACHE', false);
// cache life time, in second', default here is 2 days (172800s) // cache life time, in second', default here is 2 days (172800s)
// -1 is never expire cache // -1 is never expire cache
// DEFINE('SMARTY_CACHE_LIFETIME', -1); // define('SMARTY_CACHE_LIFETIME', -1);
/************* LOGOUT ********************/ /************* LOGOUT ********************/
// logout target // logout target
DEFINE('LOGOUT_TARGET', ''); define('LOGOUT_TARGET', '');
// password change allowed // password change allowed
DEFINE('PASSWORD_CHANGE', false); define('PASSWORD_CHANGE', false);
DEFINE('PASSWORD_FORGOT', false); define('PASSWORD_FORGOT', false);
// min/max password length // min/max password length
DEFINE('PASSWORD_MIN_LENGTH', 8); define('PASSWORD_MIN_LENGTH', 8);
DEFINE('PASSWORD_MAX_LENGTH', 255); define('PASSWORD_MAX_LENGTH', 255);
/************* AJAX / ACCESS *************/ /************* AJAX / ACCESS *************/
// ajax request type // ajax request type
DEFINE('AJAX_REQUEST_TYPE', 'POST'); define('AJAX_REQUEST_TYPE', 'POST');
// what AJAX type to use // what AJAX type to use
DEFINE('USE_PROTOTYPE', false); define('USE_PROTOTYPE', false);
DEFINE('USE_SCRIPTACULOUS', false); define('USE_SCRIPTACULOUS', false);
DEFINE('USE_JQUERY', true); define('USE_JQUERY', true);
/************* LAYOUT WIDTHS *************/ /************* LAYOUT WIDTHS *************/
DEFINE('PAGE_WIDTH', 800); define('PAGE_WIDTH', 800);
DEFINE('CONTENT_WIDTH', 800); define('CONTENT_WIDTH', 800);
// the default template name // the default template name
DEFINE('MASTER_TEMPLATE_NAME', 'main_body.tpl'); define('MASTER_TEMPLATE_NAME', 'main_body.tpl');
/************* OVERALL CONTROL NAMES *************/ /************* OVERALL CONTROL NAMES *************/
// BELOW has HAS to be changed // BELOW has HAS to be changed
// base name for all session and log names // base name for all session and log names
DEFINE('BASE_NAME', 'CoreLibs'); define('BASE_NAME', 'CoreLibs');
/************* SESSION NAMES *************/ /************* SESSION NAMES *************/
// server name HASH // server name HASH
DEFINE('SERVER_NAME_HASH', hash('crc32b', $_SERVER['HTTP_HOST'])); define('SERVER_NAME_HASH', hash('crc32b', $_SERVER['HTTP_HOST']));
DEFINE('SERVER_PATH_HASH', hash('crc32b', BASE)); define('SERVER_PATH_HASH', hash('crc32b', BASE));
// backend // backend
DEFINE('EDIT_SESSION_NAME', BASE_NAME.'Admin'.SERVER_NAME_HASH.SERVER_PATH_HASH); define('EDIT_SESSION_NAME', BASE_NAME.'Admin'.SERVER_NAME_HASH.SERVER_PATH_HASH);
// frontend // frontend
DEFINE('SESSION_NAME', BASE_NAME.SERVER_NAME_HASH.SERVER_PATH_HASH); define('SESSION_NAME', BASE_NAME.SERVER_NAME_HASH.SERVER_PATH_HASH);
// SET_SESSION_NAME should be set in the header if a special session name is needed // SET_SESSION_NAME should be set in the header if a special session name is needed
DEFINE('SET_SESSION_NAME', SESSION_NAME); define('SET_SESSION_NAME', SESSION_NAME);
/************* CACHE/COMPILE IDS *************/ /************* CACHE/COMPILE IDS *************/
DEFINE('CACHE_ID', 'CACHE_'.BASE_NAME.'_'.SERVER_NAME_HASH); define('CACHE_ID', 'CACHE_'.BASE_NAME.'_'.SERVER_NAME_HASH);
DEFINE('COMPILE_ID', 'COMPILE_'.BASE_NAME.'_'.SERVER_NAME_HASH); define('COMPILE_ID', 'COMPILE_'.BASE_NAME.'_'.SERVER_NAME_HASH);
/************* LANGUAGE / ENCODING *******/ /************* LANGUAGE / ENCODING *******/
DEFINE('DEFAULT_LANG', 'en_utf8'); define('DEFAULT_LANG', 'en_utf8');
// default web page encoding setting // default web page encoding setting
DEFINE('DEFAULT_ENCODING', 'UTF-8'); define('DEFAULT_ENCODING', 'UTF-8');
/************* LOGGING *******************/ /************* LOGGING *******************/
// below two can be defined here, but they should be // below two can be defined here, but they should be
// defined in either the header file or the file itself // defined in either the header file or the file itself
// as $LOG_FILE_ID which takes presence over LOG_FILE_ID // as $LOG_FILE_ID which takes presence over LOG_FILE_ID
// see Basic class constructor // see Basic class constructor
DEFINE('LOG_FILE_ID', BASE_NAME); define('LOG_FILE_ID', BASE_NAME);
/************* CLASS ERRORS *******************/ /************* CLASS ERRORS *******************/
// 0 = default all OFF // 0 = default all OFF
@@ -161,14 +161,14 @@ define('CLASS_VARIABLE_ERROR_MODE', 3);
// if we have a dev/live system // if we have a dev/live system
// set_live is a per page/per item // set_live is a per page/per item
// live_queue is a global queue system // live_queue is a global queue system
// DEFINE('QUEUE', 'live_queue'); // define('QUEUE', 'live_queue');
/************* DB PATHS (PostgreSQL) *****************/ /************* DB PATHS (PostgreSQL) *****************/
// schema names, can also be defined per <DB INFO> // schema names, can also be defined per <DB INFO>
DEFINE('PUBLIC_SCHEMA', 'public'); define('PUBLIC_SCHEMA', 'public');
DEFINE('DEV_SCHEMA', 'public'); define('DEV_SCHEMA', 'public');
DEFINE('TEST_SCHEMA', 'public'); define('TEST_SCHEMA', 'public');
DEFINE('LIVE_SCHEMA', 'public'); define('LIVE_SCHEMA', 'public');
/************* CORE HOST SETTINGS *****************/ /************* CORE HOST SETTINGS *****************/
if (file_exists(BASE.CONFIGS.'config.host.php')) { if (file_exists(BASE.CONFIGS.'config.host.php')) {
@@ -195,7 +195,7 @@ if (file_exists(BASE.CONFIGS.'config.path.php')) {
// get the name without the port // get the name without the port
list($HOST_NAME) = array_pad(explode(':', $_SERVER['HTTP_HOST'], 2), 2, null); list($HOST_NAME) = array_pad(explode(':', $_SERVER['HTTP_HOST'], 2), 2, null);
// set HOST name // set HOST name
DEFINE('HOST_NAME', $HOST_NAME); define('HOST_NAME', $HOST_NAME);
// BAIL ON MISSING MASTER SITE CONFIG // BAIL ON MISSING MASTER SITE CONFIG
if (!isset($SITE_CONFIG[HOST_NAME]['location'])) { if (!isset($SITE_CONFIG[HOST_NAME]['location'])) {
echo 'Missing SITE_CONFIG entry for: "'.HOST_NAME.'". Contact Administrator'; echo 'Missing SITE_CONFIG entry for: "'.HOST_NAME.'". Contact Administrator';
@@ -220,41 +220,41 @@ if ((!isset($SITE_CONFIG[HOST_NAME]['db_host']) && count($DB_CONFIG)) ||
// set SSL on // set SSL on
if ((array_key_exists('HTTPS', $_SERVER) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || if ((array_key_exists('HTTPS', $_SERVER) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ||
$_SERVER['SERVER_PORT'] == 443) { $_SERVER['SERVER_PORT'] == 443) {
DEFINE('HOST_SSL', true); define('HOST_SSL', true);
DEFINE('HOST_PROTOCOL', 'https://'); define('HOST_PROTOCOL', 'https://');
} else { } else {
DEFINE('HOST_SSL', false); define('HOST_SSL', false);
DEFINE('HOST_PROTOCOL', 'http://'); define('HOST_PROTOCOL', 'http://');
} }
// define the db config set name, the db config and the db schema // 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_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] : array());
// DEFINE('DB_CONFIG_TARGET', SITE_CONFIG[$HOST_NAME]['db_host_target']); // define('DB_CONFIG_TARGET', SITE_CONFIG[$HOST_NAME]['db_host_target']);
// DEFINE('DB_CONFIG_OTHER', SITE_CONFIG[$HOST_NAME]['db_host_other']); // define('DB_CONFIG_OTHER', SITE_CONFIG[$HOST_NAME]['db_host_other']);
// override for login and global schemas // override for login and global schemas
// DEFINE('LOGIN_DB_SCHEMA', PUBLIC_SCHEMA); // where the edit* tables are // define('LOGIN_DB_SCHEMA', PUBLIC_SCHEMA); // where the edit* tables are
// DEFINE('GLOBAL_DB_SCHEMA', PUBLIC_SCHEMA); // where global tables are that are used by all schemas (eg queue tables for online, etc) // define('GLOBAL_DB_SCHEMA', PUBLIC_SCHEMA); // where global tables are that are used by all schemas (eg queue tables for online, etc)
// debug settings, site lang, etc // debug settings, site lang, etc
DEFINE('TARGET', $SITE_CONFIG[HOST_NAME]['location']); define('TARGET', $SITE_CONFIG[HOST_NAME]['location']);
DEFINE('DEBUG', $SITE_CONFIG[HOST_NAME]['debug_flag']); define('DEBUG', $SITE_CONFIG[HOST_NAME]['debug_flag']);
DEFINE('SITE_LANG', $SITE_CONFIG[HOST_NAME]['site_lang']); define('SITE_LANG', $SITE_CONFIG[HOST_NAME]['site_lang']);
DEFINE('LOGIN_ENABLED', $SITE_CONFIG[HOST_NAME]['login_enabled']); define('LOGIN_ENABLED', $SITE_CONFIG[HOST_NAME]['login_enabled']);
// paths // paths
// DEFINE('CSV_PATH', $PATHS[TARGET]['csv_path']); // define('CSV_PATH', $PATHS[TARGET]['csv_path']);
// DEFINE('EXPORT_SCRIPT', $PATHS[TARGET]['perl_bin']); // define('EXPORT_SCRIPT', $PATHS[TARGET]['perl_bin']);
// DEFINE('REDIRECT_URL', $PATHS[TARGET]['redirect_url']); // define('REDIRECT_URL', $PATHS[TARGET]['redirect_url']);
// show all errors if debug_all & show_error_handling are enabled // show all errors if debug_all & show_error_handling are enabled
DEFINE('SHOW_ALL_ERRORS', true); define('SHOW_ALL_ERRORS', true);
/************* GENERAL PAGE TITLE ********/ /************* GENERAL PAGE TITLE ********/
DEFINE('G_TITLE', '<OVERALL FALLBACK PAGE TITLE>'); define('G_TITLE', '<OVERALL FALLBACK PAGE TITLE>');
/************ STYLE SHEETS / JS **********/ /************ STYLE SHEETS / JS **********/
DEFINE('ADMIN_STYLESHEET', 'edit.css'); define('ADMIN_STYLESHEET', 'edit.css');
DEFINE('ADMIN_JAVASCRIPT', 'edit.js'); define('ADMIN_JAVASCRIPT', 'edit.js');
DEFINE('STYLESHEET', 'frontend.css'); define('STYLESHEET', 'frontend.css');
DEFINE('JAVASCRIPT', 'frontend.js'); define('JAVASCRIPT', 'frontend.js');
// anything optional // anything optional
/************* INTERNAL ******************/ /************* INTERNAL ******************/

View File

@@ -20,7 +20,7 @@ $paths = array(
foreach ($paths as $path) { foreach ($paths as $path) {
if (file_exists($path.DS.'convert') && is_file($path.DS.'convert')) { if (file_exists($path.DS.'convert') && is_file($path.DS.'convert')) {
// image magick convert location // image magick convert location
DEFINE('CONVERT', $path.DS.'convert'); define('CONVERT', $path.DS.'convert');
} }
} }
unset($paths); unset($paths);

View File

@@ -14,8 +14,6 @@ if ($DEBUG_ALL && $ENABLE_ERROR_HANDLING) {
} }
// predefine vars // predefine vars
$messages = array(); $messages = array();
// import all POST vars
// extract($_POST, EXTR_SKIP);
//------------------------------ variable init end //------------------------------ variable init end
//------------------------------ library include start //------------------------------ library include start

View File

@@ -85,12 +85,12 @@ $table_width = '100%';
// define all needed smarty stuff for the general HTML/page building // define all needed smarty stuff for the general HTML/page building
$HEADER['CSS'] = CSS; $HEADER['CSS'] = CSS;
$HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING; $HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING;
$HEADER['STYLESHEET'] = isset($ADMIN_STYLESHEET) ? $ADMIN_STYLESHEET : ADMIN_STYLESHEET; $HEADER['STYLESHEET'] = $ADMIN_STYLESHEET ?? ADMIN_STYLESHEET;
if ($form->my_page_name == 'edit_order') { if ($form->my_page_name == 'edit_order') {
// get is for "table_name" and "where" only // get is for "table_name" and "where" only
$table_name = isset($_GET['table_name']) ? $_GET['table_name'] : ''; $table_name = $_GET['table_name'] ?? '';
// $where = isset($_GET['where']) ? $_GET['where'] : ''; // $where = $_GET['where'] ?? '';
// order name is _always_ order_number for the edit interface // order name is _always_ order_number for the edit interface
// follwing arrays do exist here: // follwing arrays do exist here:
@@ -208,7 +208,7 @@ if ($form->my_page_name == 'edit_order') {
// hidden names for the table & where string // hidden names for the table & where string
$DATA['table_name'] = $table_name; $DATA['table_name'] = $table_name;
$DATA['where_string'] = isset($where_string) ? $where_string : ''; $DATA['where_string'] = $where_string ?? '';
$EDIT_TEMPLATE = 'edit_order.tpl'; $EDIT_TEMPLATE = 'edit_order.tpl';
} else { } else {
@@ -282,7 +282,7 @@ if ($form->my_page_name == 'edit_order') {
'' ''
). ).
// filename // filename
$data['filename']. ($data['filename'] ?? '').
// query string // query string
(isset($data['query_string']) && $data['query_string'] ? (isset($data['query_string']) && $data['query_string'] ?
$data['query_string'] : $data['query_string'] :
@@ -294,7 +294,8 @@ if ($form->my_page_name == 'edit_order') {
$menu_data[$i]['splitfactor_in'] = 0; $menu_data[$i]['splitfactor_in'] = 0;
} }
// on matching, we also need to check if we are in the same folder // on matching, we also need to check if we are in the same folder
if ($data['filename'] == $form->getPageName() && if (isset($data['filename']) &&
$data['filename'] == $form->getPageName() &&
(!isset($data['hostname']) || ( (!isset($data['hostname']) || (
isset($data['hostname']) && isset($data['hostname']) &&
(!$data['hostname'] || strstr($data['hostname'], CONTENT_PATH) !== false) (!$data['hostname'] || strstr($data['hostname'], CONTENT_PATH) !== false)
@@ -476,7 +477,7 @@ if ($form->my_page_name == 'edit_order') {
} }
// debug data, if DEBUG flag is on, this data is print out // debug data, if DEBUG flag is on, this data is print out
$DEBUG_DATA['DEBUG'] = isset($DEBUG_TMPL) ? $DEBUG_TMPL : ''; $DEBUG_DATA['DEBUG'] = $DEBUG_TMPL ?? '';
// create main data array // create main data array
$CONTENT_DATA = array_merge($HEADER, $DATA, $DEBUG_DATA); $CONTENT_DATA = array_merge($HEADER, $DATA, $DEBUG_DATA);

View File

View File

View File

@@ -86,9 +86,10 @@ function getScrollOffset()
function setCenter(id, left, top) function setCenter(id, left, top)
{ {
// get size of id // get size of id
var dimensions = {}; var dimensions = {
dimensions.height = $('#' + id).height(); height: $('#' + id).height(),
dimensions.width = $('#' + id).width(); width: $('#' + id).width()
};
var type = $('#' + id).css('position'); var type = $('#' + id).css('position');
var viewport = getWindowSize(); var viewport = getWindowSize();
var offset = getScrollOffset(); var offset = getScrollOffset();
@@ -418,9 +419,11 @@ function actionIndicator(loc, overlay = true)
function actionIndicatorShow(loc, overlay = true) function actionIndicatorShow(loc, overlay = true)
{ {
console.log('Indicator: SHOW [%s]', loc); console.log('Indicator: SHOW [%s]', loc);
$('#indicator').addClass('progress'); if (!$('#indicator').is(':visible')) {
setCenter('indicator', true, true); $('#indicator').addClass('progress');
$('#indicator').show(); setCenter('indicator', true, true);
$('#indicator').show();
}
if (overlay === true) { if (overlay === true) {
overlayBoxShow(); overlayBoxShow();
} }
@@ -474,12 +477,9 @@ function overlayBoxHide()
*/ */
function setOverlayBox() function setOverlayBox()
{ {
var viewport = document.viewport.getDimensions(); if (!$('#overlayBox').is(':visible')) {
$('#overlayBox').setStyle ({ $('#overlayBox').show();
width: '100%', }
height: '100%'
});
$('#overlayBox').show();
} }
/** /**

View File

@@ -3,8 +3,9 @@
* firebug 1.2+ and the webkit console */ * firebug 1.2+ and the webkit console */
var ConsoleSetup = function() { var ConsoleSetup = function() {
if (!window.console) if (!window.console) {
window.console = {}; window.console = {};
}
var names = ['log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml', 'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd']; var names = ['log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml', 'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd'];

View File

View File

@@ -179,16 +179,16 @@ class Login extends \CoreLibs\DB\IO
// get login vars, are so, can't be changed // get login vars, are so, can't be changed
// prepare // prepare
// pass on vars to Object vars // pass on vars to Object vars
$this->login = isset($_POST['login_login']) ? $_POST['login_login'] : ''; $this->login = $_POST['login_login'] ?? '';
$this->username = isset($_POST['login_username']) ? $_POST['login_username'] : ''; $this->username = $_POST['login_username'] ?? '';
$this->password = isset($_POST['login_password']) ? $_POST['login_password'] : ''; $this->password = $_POST['login_password'] ?? '';
$this->logout = isset($_POST['login_logout']) ? $_POST['login_logout'] : ''; $this->logout = $_POST['login_logout'] ?? '';
// password change vars // password change vars
$this->change_password = isset($_POST['change_password']) ? $_POST['change_password'] : ''; $this->change_password = $_POST['change_password'] ?? '';
$this->pw_username = isset($_POST['pw_username']) ? $_POST['pw_username'] : ''; $this->pw_username = $_POST['pw_username'] ?? '';
$this->pw_old_password = isset($_POST['pw_old_password']) ? $_POST['pw_old_password'] : ''; $this->pw_old_password = $_POST['pw_old_password'] ?? '';
$this->pw_new_password = isset($_POST['pw_new_password']) ? $_POST['pw_new_password'] : ''; $this->pw_new_password = $_POST['pw_new_password'] ?? '';
$this->pw_new_password_confirm = isset($_POST['pw_new_password_confirm']) ? $_POST['pw_new_password_confirm'] : ''; $this->pw_new_password_confirm = $_POST['pw_new_password_confirm'] ?? '';
// logout target (from config) // logout target (from config)
$this->logout_target = LOGOUT_TARGET; $this->logout_target = LOGOUT_TARGET;
// disallow user list for password change // disallow user list for password change
@@ -345,7 +345,7 @@ class Login extends \CoreLibs\DB\IO
* if user pressed login button this script is called, but only if there is no preview euid set] * if user pressed login button this script is called, but only if there is no preview euid set]
* @return void has not return * @return void has not return
*/ */
private function loginLoginUser() private function loginLoginUser(): void
{ {
// have to get the global stuff here for setting it later // have to get the global stuff here for setting it later
if (!$this->euid && $this->login) { if (!$this->euid && $this->login) {
@@ -418,8 +418,8 @@ class Login extends \CoreLibs\DB\IO
$_SESSION['GROUP_ACL_LEVEL'] = $res['group_level']; $_SESSION['GROUP_ACL_LEVEL'] = $res['group_level'];
$_SESSION['GROUP_ACL_TYPE'] = $res['group_type']; $_SESSION['GROUP_ACL_TYPE'] = $res['group_type'];
// deprecated TEMPLATE setting // deprecated TEMPLATE setting
$_SESSION['TEMPLATE'] = ($res['template']) ? $res['template'] : ''; $_SESSION['TEMPLATE'] = $res['template'] ? $res['template'] : '';
$_SESSION['HEADER_COLOR'] = ($res['second_header_color']) ? $res['second_header_color'] : $res['first_header_color']; $_SESSION['HEADER_COLOR'] = $res['second_header_color'] ? $res['second_header_color'] : $res['first_header_color'];
$_SESSION['LANG'] = $res['lang_short']; $_SESSION['LANG'] = $res['lang_short'];
$_SESSION['DEFAULT_CHARSET'] = $res['lang_iso']; $_SESSION['DEFAULT_CHARSET'] = $res['lang_iso'];
$_SESSION['DEFAULT_LANG'] = $res['lang_short'].'_'.strtolower(str_replace('-', '', $res['lang_iso'])); $_SESSION['DEFAULT_LANG'] = $res['lang_short'].'_'.strtolower(str_replace('-', '', $res['lang_iso']));
@@ -587,7 +587,7 @@ class Login extends \CoreLibs\DB\IO
* for every page the user access this script checks if he is allowed to do so * for every page the user access this script checks if he is allowed to do so
* @return bool permission okay as true/false * @return bool permission okay as true/false
*/ */
public function loginCheckPermissions() public function loginCheckPermissions(): bool
{ {
if ($this->euid && $this->login_error != 103) { if ($this->euid && $this->login_error != 103) {
$q = "SELECT filename "; $q = "SELECT filename ";
@@ -613,7 +613,7 @@ class Login extends \CoreLibs\DB\IO
* if a user pressed on logout, destroyes session and unsets all global vars * if a user pressed on logout, destroyes session and unsets all global vars
* @return void has no return * @return void has no return
*/ */
public function loginLogoutUser() public function loginLogoutUser(): void
{ {
if ($this->logout || $this->login_error) { if ($this->logout || $this->login_error) {
// unregister and destroy session vars // unregister and destroy session vars
@@ -673,7 +673,7 @@ class Login extends \CoreLibs\DB\IO
* set all base ACL levels as a list keyword -> ACL number * set all base ACL levels as a list keyword -> ACL number
* @return void has no return * @return void has no return
*/ */
private function loginSetAcl() private function loginSetAcl(): void
{ {
// only set acl if we have permission okay // only set acl if we have permission okay
if ($this->permission_okay) { if ($this->permission_okay) {
@@ -766,8 +766,8 @@ class Login extends \CoreLibs\DB\IO
/** /**
* checks if this edit access id is valid * checks if this edit access id is valid
* @param int $edit_access_id access id pk to check * @param int|null $edit_access_id access id pk to check
* @return bool true/false: if the edit access is not in the valid list: false * @return bool true/false: if the edit access is not in the valid list: false
*/ */
public function loginCheckEditAccess($edit_access_id): bool public function loginCheckEditAccess($edit_access_id): bool
{ {
@@ -783,7 +783,7 @@ class Login extends \CoreLibs\DB\IO
* @param string $password the new password * @param string $password the new password
* @return bool true or false if valid password or not * @return bool true or false if valid password or not
*/ */
private function loginPasswordChangeValidPassword($password) private function loginPasswordChangeValidPassword($password): bool
{ {
$is_valid_password = true; $is_valid_password = true;
// check for valid in regex arrays in list // check for valid in regex arrays in list
@@ -805,7 +805,7 @@ class Login extends \CoreLibs\DB\IO
* dummy declare for password forget * dummy declare for password forget
* @return void has no return * @return void has no return
*/ */
private function loginPasswordForgot() private function loginPasswordForgot(): void
{ {
// will do some password recovert, eg send email // will do some password recovert, eg send email
} }
@@ -831,7 +831,7 @@ class Login extends \CoreLibs\DB\IO
* changes a user password * changes a user password
* @return void has no return * @return void has no return
*/ */
private function loginPasswordChange() private function loginPasswordChange(): void
{ {
if ($this->change_password) { if ($this->change_password) {
$event = 'Password Change'; $event = 'Password Change';
@@ -1013,7 +1013,7 @@ class Login extends \CoreLibs\DB\IO
* checks if there are external templates, if not uses internal fallback ones * checks if there are external templates, if not uses internal fallback ones
* @return void has no return * @return void has no return
*/ */
private function loginSetTemplates() private function loginSetTemplates(): void
{ {
$strings = array( $strings = array(
'HTML_TITLE' => $this->l->__('LOGIN'), 'HTML_TITLE' => $this->l->__('LOGIN'),
@@ -1172,7 +1172,7 @@ EOM;
* @param string $username login user username * @param string $username login user username
* @return void has no return * @return void has no return
*/ */
private function writeLog(string $event, string $data, $error = '', string $username = '') private function writeLog(string $event, string $data, $error = '', string $username = ''): void
{ {
if ($this->login) { if ($this->login) {
$this->action = 'Login'; $this->action = 'Login';
@@ -1194,7 +1194,7 @@ EOM;
$q .= "(username, password, euid, event_date, event, error, data, data_binary, page, "; $q .= "(username, password, euid, event_date, event, error, data, data_binary, page, ";
$q .= "ip, user_agent, referer, script_name, query_string, server_name, http_host, http_accept, http_accept_charset, http_accept_encoding, session_id, "; $q .= "ip, user_agent, referer, script_name, query_string, server_name, http_host, http_accept, http_accept_charset, http_accept_encoding, session_id, ";
$q .= "action, action_id, action_yes, action_flag, action_menu, action_loaded, action_value, action_error) "; $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 .= "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."', "; $q .= "NOW(), '".$this->dbEscapeString($event)."', '".$this->dbEscapeString((string)$error)."', '".$this->dbEscapeString($data)."', '".$data_binary."', '".$this->page_name."', ";
foreach (array( foreach (array(
'REMOTE_ADDR', 'HTTP_USER_AGENT', 'HTTP_REFERER', 'SCRIPT_FILENAME', 'QUERY_STRING', 'SERVER_NAME', 'HTTP_HOST', 'HTTP_ACCEPT', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_ENCODING' 'REMOTE_ADDR', 'HTTP_USER_AGENT', 'HTTP_REFERER', 'SCRIPT_FILENAME', 'QUERY_STRING', 'SERVER_NAME', 'HTTP_HOST', 'HTTP_ACCEPT', 'HTTP_ACCEPT_CHARSET', 'HTTP_ACCEPT_ENCODING'
@@ -1217,28 +1217,33 @@ EOM;
} }
/** /**
*checks that the given edit access id is valid for this user * checks that the given edit access id is valid for this user
* @param int $edit_access_id edit access id to check * @param int|null $edit_access_id edit access id to check
* @return int same edit access id if ok, or the default edit access id if given one is not valid * @return int|null same edit access id if ok
* or the default edit access id if given one is not valid
*/ */
public function loginCheckEditAccessId(int $edit_access_id) public function loginCheckEditAccessId(?int $edit_access_id): ?int
{ {
if (!array_key_exists($edit_access_id, $_SESSION["UNIT"])) { if (isset($_SESSION['UNIT']) &&
return $_SESSION["UNIT_DEFAULT"]; is_array($_SESSION['UNIT']) &&
!array_key_exists($edit_access_id, $_SESSION['UNIT'])
) {
return (int)$_SESSION['UNIT_DEFAULT'];
} else { } else {
return $edit_access_id; return $edit_access_id;
} }
} }
/** /**
* [loginSetEditAccessData description] * retunrn a set entry from the UNIT session for an edit access_id
* if not found return false
* @param int $edit_access_id edit access id * @param int $edit_access_id edit access id
* @param string|int $data_key key value to search for * @param string|int $data_key key value to search for
* @return bool|string false for not found or string for found data * @return bool|string false for not found or string for found data
*/ */
public function loginSetEditAccessData(int $edit_access_id, $data_key) public function loginSetEditAccessData(int $edit_access_id, $data_key)
{ {
if (!$_SESSION['UNIT'][$edit_access_id]['data'][$data_key]) { if (!isset($_SESSION['UNIT'][$edit_access_id]['data'][$data_key])) {
return false; return false;
} else { } else {
return $_SESSION['UNIT'][$edit_access_id]['data'][$data_key]; return $_SESSION['UNIT'][$edit_access_id]['data'][$data_key];

View File

@@ -82,7 +82,7 @@ class Backend extends \CoreLibs\DB\IO
// set the action ids // set the action ids
foreach ($this->action_list as $_action) { foreach ($this->action_list as $_action) {
$this->$_action = (isset($_POST[$_action])) ? $_POST[$_action] : ''; $this->$_action = $_POST[$_action] ?? '';
} }
$this->default_acl = DEFAULT_ACL_LEVEL; $this->default_acl = DEFAULT_ACL_LEVEL;
@@ -189,14 +189,14 @@ class Backend extends \CoreLibs\DB\IO
$q .= "NOW(), "; $q .= "NOW(), ";
$q .= "'".$this->dbEscapeString((string)$event)."', '".$data."', '".$data_binary."', '".$this->dbEscapeString((string)$this->page_name)."', "; $q .= "'".$this->dbEscapeString((string)$event)."', '".$data."', '".$data_binary."', '".$this->dbEscapeString((string)$this->page_name)."', ";
$q .= "'".@$_SERVER["REMOTE_ADDR"]."', '".$this->dbEscapeString(@$_SERVER['HTTP_USER_AGENT'])."', "; $q .= "'".@$_SERVER["REMOTE_ADDR"]."', '".$this->dbEscapeString(@$_SERVER['HTTP_USER_AGENT'])."', ";
$q .= "'".$this->dbEscapeString(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '')."', "; $q .= "'".$this->dbEscapeString($_SERVER['HTTP_REFERER'] ?? '')."', ";
$q .= "'".$this->dbEscapeString(isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '')."', "; $q .= "'".$this->dbEscapeString($_SERVER['SCRIPT_FILENAME'] ?? '')."', ";
$q .= "'".$this->dbEscapeString(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '')."', "; $q .= "'".$this->dbEscapeString($_SERVER['QUERY_STRING'] ?? '')."', ";
$q .= "'".$this->dbEscapeString(isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '')."', "; $q .= "'".$this->dbEscapeString($_SERVER['SERVER_NAME'] ?? '')."', ";
$q .= "'".$this->dbEscapeString(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '')."', "; $q .= "'".$this->dbEscapeString($_SERVER['HTTP_HOST'] ?? '')."', ";
$q .= "'".$this->dbEscapeString(isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : '')."', "; $q .= "'".$this->dbEscapeString($_SERVER['HTTP_ACCEPT'] ?? '')."', ";
$q .= "'".$this->dbEscapeString(isset($_SERVER['HTTP_ACCEPT_CHARSET']) ? $_SERVER['HTTP_ACCEPT_CHARSET'] : '')."', "; $q .= "'".$this->dbEscapeString($_SERVER['HTTP_ACCEPT_CHARSET'] ?? '')."', ";
$q .= "'".$this->dbEscapeString(isset($_SERVER['HTTP_ACCEPT_ENCODING']) ? $_SERVER['HTTP_ACCEPT_ENCODING'] : '')."', "; $q .= "'".$this->dbEscapeString($_SERVER['HTTP_ACCEPT_ENCODING'] ?? '')."', ";
$q .= "'".session_id()."', "; $q .= "'".session_id()."', ";
$q .= "'".$this->dbEscapeString($this->action)."', "; $q .= "'".$this->dbEscapeString($this->action)."', ";
$q .= "'".$this->dbEscapeString($this->action_id)."', "; $q .= "'".$this->dbEscapeString($this->action_id)."', ";
@@ -221,7 +221,7 @@ class Backend extends \CoreLibs\DB\IO
} }
// get the session pages array // get the session pages array
$PAGES = isset($_SESSION['PAGES']) ? $_SESSION['PAGES'] : null; $PAGES = $_SESSION['PAGES'] ?? null;
if (!isset($PAGES) || !is_array($PAGES)) { if (!isset($PAGES) || !is_array($PAGES)) {
$PAGES = array(); $PAGES = array();
} }
@@ -256,6 +256,7 @@ class Backend extends \CoreLibs\DB\IO
$type = 'popup'; $type = 'popup';
} else { } else {
$type = 'normal'; $type = 'normal';
/** @phan-suppress-next-line PhanTypeArraySuspicious */
$data['popup'] = 0; $data['popup'] = 0;
} }
$query_string = ''; $query_string = '';
@@ -291,11 +292,11 @@ class Backend extends \CoreLibs\DB\IO
if (isset($data['hostname']) && $data['hostname']) { if (isset($data['hostname']) && $data['hostname']) {
$url .= $data['hostname']; $url .= $data['hostname'];
} }
$url .= isset($data['filename']) ? $data['filename'] : ''; $url .= $data['filename'] ?? '';
if (strlen($query_string)) { if (strlen($query_string)) {
$url .= '?'.$query_string; $url .= '?'.$query_string;
} }
$name = isset($data['page_name']) ? $data['page_name'] : ''; $name = $data['page_name'] ?? '';
// if page name matchs -> set selected flag // if page name matchs -> set selected flag
$selected = 0; $selected = 0;
if (isset($data['filename']) && if (isset($data['filename']) &&

View File

@@ -686,6 +686,63 @@ class Basic
} }
} }
/**
* checks if we have a need to work on certain debug output
* Needs debug/echo/print ad target for which of the debug flag groups we check
* also needs level string to check in the per level output flag check.
* In case we have invalid target it will return false
* @param string $target target group to check debug/echo/print
* @param string $level level to check in detailed level flag
* @return bool true on access allowed or false on no access
*/
private function doDebugTrigger(string $target, string $level): bool
{
$access = false;
// check if we do debug, echo or print
switch ($target) {
case 'debug':
if ((
(isset($this->debug_output[$level]) && $this->debug_output[$level]) ||
$this->debug_output_all
) &&
(!isset($this->debug_output_not[$level]) ||
(isset($this->debug_output_not[$level]) && !$this->debug_output_not[$level])
)
) {
$access = true;
}
break;
case 'echo':
if ((
(isset($this->echo_output[$level]) && $this->echo_output[$level]) ||
$this->echo_output_all
) &&
(!isset($this->echo_output_not[$level]) ||
(isset($this->echo_output_not[$level]) && !$this->echo_output_not[$level])
)
) {
$access = true;
}
break;
case 'print':
if ((
(isset($this->print_output[$level]) && $this->print_output[$level]) ||
$this->print_output_all
) &&
(!isset($this->print_output_not[$level]) ||
(isset($this->print_output_not[$level]) && !$this->print_output_not[$level])
)
) {
$access = true;
}
break;
default:
// fall through with access false
break;
}
return $access;
}
/** /**
* write debug data to error_msg array * write debug data to error_msg array
* @param string $level id for error message, groups messages together * @param string $level id for error message, groups messages together
@@ -697,7 +754,7 @@ class Basic
*/ */
public function debug(string $level, string $string, bool $strip = false): void public function debug(string $level, string $string, bool $strip = false): void
{ {
if (($this->debug_output[$level] || $this->debug_output_all) && !$this->debug_output_not[$level]) { if ($this->doDebugTrigger('debug', $level)) {
if (!isset($this->error_msg[$level])) { if (!isset($this->error_msg[$level])) {
$this->error_msg[$level] = ''; $this->error_msg[$level] = '';
} }
@@ -721,7 +778,7 @@ class Basic
// write to file if set // write to file if set
$this->writeErrorMsg($level, $error_string_print); $this->writeErrorMsg($level, $error_string_print);
// write to error level // write to error level
if (($this->echo_output[$level] || $this->echo_output_all) && !$this->echo_output_not[$level]) { if ($this->doDebugTrigger('echo', $level)) {
$this->error_msg[$level] .= $error_string; $this->error_msg[$level] .= $error_string;
} }
} }
@@ -782,9 +839,9 @@ class Basic
} }
$script_end = microtime(true) - $this->script_starttime; $script_end = microtime(true) - $this->script_starttime;
foreach ($this->error_msg as $level => $temp_debug_output) { foreach ($this->error_msg as $level => $temp_debug_output) {
if (($this->debug_output[$level] || $this->debug_output_all) && !$this->debug_output_not[$level]) { if ($this->doDebugTrigger('debug', $level)) {
if (($this->echo_output[$level] || $this->echo_output_all) && !$this->echo_output_not[$level]) { if ($this->doDebugTrigger('echo', $level)) {
$string_output .= '<div style="font-size: 12px;">[<span style="font-style: italic; color: #c56c00;">'.$level.'</span>] '.(($string) ? "<b>**** ".$this->htmlent($string)." ****</b>\n" : "").'</div>'; $string_output .= '<div style="font-size: 12px;">[<span style="font-style: italic; color: #c56c00;">'.$level.'</span>] '.($string ? "<b>**** ".$this->htmlent($string)." ****</b>\n" : "").'</div>';
$string_output .= $temp_debug_output; $string_output .= $temp_debug_output;
} // echo it out } // echo it out
} // do printout } // do printout
@@ -809,9 +866,9 @@ class Basic
*/ */
private function writeErrorMsg(string $level, string $error_string): void private function writeErrorMsg(string $level, string $error_string): void
{ {
if (($this->debug_output[$level] || $this->debug_output_all) && !$this->debug_output_not[$level]) { if ($this->doDebugTrigger('debug', $level)) {
// only write if write is requested // only write if write is requested
if (($this->print_output[$level] || $this->print_output_all) && !$this->print_output_not[$level]) { if ($this->doDebugTrigger('print', $level)) {
// replace all html tags // replace all html tags
// $error_string = preg_replace("/(<\/?)(\w+)([^>]*>)/", "##\\2##", $error_string); // $error_string = preg_replace("/(<\/?)(\w+)([^>]*>)/", "##\\2##", $error_string);
// $error_string = preg_replace("/(<\/?)(\w+)([^>]*>)/", "", $error_string); // $error_string = preg_replace("/(<\/?)(\w+)([^>]*>)/", "", $error_string);
@@ -1030,11 +1087,11 @@ class Basic
{ {
if (is_array($haystack)) { if (is_array($haystack)) {
if (in_array((string)$needle, $haystack)) { if (in_array((string)$needle, $haystack)) {
return (($type) ? "checked" : "selected"); return $type ? 'checked' : 'selected';
} }
} else { } else {
if ($haystack == $needle) { if ($haystack == $needle) {
return (($type) ? "checked" : "selected"); return $type ? 'checked' : 'selected';
} }
} }
return null; return null;
@@ -1135,7 +1192,7 @@ class Basic
} }
// if it is a link already just return the original link do not touch anything // if it is a link already just return the original link do not touch anything
if (!$href && !$atag) { if (!$href && !$atag) {
return "##LT##a href=##QUOT##".$_1.$_2.$_3."##QUOT##".(($class) ? ' class=##QUOT##'.$class.'##QUOT##' : '').(($target) ? " target=##QUOT##".$target."##QUOT##" : '')."##GT##".(($name) ? $name : $_2.$_3)."##LT##/a##GT##"; return "##LT##a href=##QUOT##".$_1.$_2.$_3."##QUOT##".($class ? ' class=##QUOT##'.$class.'##QUOT##' : '').($target ? " target=##QUOT##".$target."##QUOT##" : '')."##GT##".($name ? $name : $_2.$_3)."##LT##/a##GT##";
} elseif ($href && !$atag) { } elseif ($href && !$atag) {
return "href=##QUOT##$_1$_2$_3##QUOT##"; return "href=##QUOT##$_1$_2$_3##QUOT##";
} elseif ($atag) { } elseif ($atag) {
@@ -1160,7 +1217,7 @@ class Basic
{ {
$email = $_1."@".$_2.".".$_3; $email = $_1."@".$_2.".".$_3;
if (!$mailto && !$atag) { if (!$mailto && !$atag) {
return "##LT##a href=##QUOT##mailto:".$email."##QUOT##".(($class) ? ' class=##QUOT##'.$class.'##QUOT##' : '')."##GT##".(($title) ? $title : $email)."##LT##/a##GT##"; return "##LT##a href=##QUOT##mailto:".$email."##QUOT##".($class ? ' class=##QUOT##'.$class.'##QUOT##' : '')."##GT##".($title ? $title : $email)."##LT##/a##GT##";
} elseif ($mailto && !$atag) { } elseif ($mailto && !$atag) {
return "mailto:".$email; return "mailto:".$email;
} elseif ($atag) { } elseif ($atag) {
@@ -1198,7 +1255,7 @@ class Basic
public static function getPageName(int $strip_ext = 0): string public static function getPageName(int $strip_ext = 0): string
{ {
// get the file info // get the file info
$page_temp = pathinfo($_SERVER["PHP_SELF"]); $page_temp = pathinfo($_SERVER['PHP_SELF']);
if ($strip_ext == 1) { if ($strip_ext == 1) {
return $page_temp['filename']; return $page_temp['filename'];
} elseif ($strip_ext == 2) { } elseif ($strip_ext == 2) {
@@ -1216,7 +1273,7 @@ class Basic
public static function getFilenameEnding(string $filename): string public static function getFilenameEnding(string $filename): string
{ {
$page_temp = pathinfo($filename); $page_temp = pathinfo($filename);
return isset($page_temp['extension']) ? $page_temp['extension'] : ''; return $page_temp['extension'] ?? '';
} }
/** /**
@@ -1256,7 +1313,12 @@ class Basic
$path[] = $key; $path[] = $key;
break; break;
} elseif (is_array($val) && } elseif (is_array($val) &&
$path = Basic::arraySearchRecursive($needle, $val, $key_lookin) $path = Basic::arraySearchRecursive(
$needle,
(array)$val,
// to avoid PhanTypeMismatchArgumentNullable
($key_lookin === null ? $key_lookin : (string)$key_lookin)
)
) { ) {
array_unshift($path, $key); array_unshift($path, $key);
break; break;
@@ -1271,10 +1333,10 @@ class Basic
* @param string|int $needle needle (search for) * @param string|int $needle needle (search for)
* @param array $haystack haystack (search in) * @param array $haystack haystack (search in)
* @param string|int $key the key to look for in * @param string|int $key the key to look for in
* @param array $path recursive call for previous path * @param array|null $path recursive call for previous path
* @return ?array all array elements paths where the element was found * @return ?array all array elements paths where the element was found
*/ */
public static function arraySearchRecursiveAll($needle, array $haystack, $key, $path = null): ?array public static function arraySearchRecursiveAll($needle, array $haystack, $key, ?array $path = null): ?array
{ {
// init if not set on null // init if not set on null
if ($path === null) { if ($path === null) {
@@ -1562,6 +1624,31 @@ class Basic
return $array; return $array;
} }
/**
* 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;
}
/** /**
* wrapper function for mb mime convert, for correct conversion with long strings * wrapper function for mb mime convert, for correct conversion with long strings
* @param string $string string to encode * @param string $string string to encode
@@ -1698,7 +1785,7 @@ class Basic
$exp ++; $exp ++;
} }
// label name, including leading space if flagged // label name, including leading space if flagged
$pre = ($space ? ' ' : '').(isset($labels[$exp]) ? $labels[$exp] : '>E').($si ? 'i' : '').'B'; $pre = ($space ? ' ' : '').($labels[$exp] ?? '>E').($si ? 'i' : '').'B';
$bytes_calc = $abs_bytes / pow($unit, $exp); $bytes_calc = $abs_bytes / pow($unit, $exp);
if ($adjust) { if ($adjust) {
return sprintf("%.2f%sB", $bytes_calc, $pre); return sprintf("%.2f%sB", $bytes_calc, $pre);
@@ -1793,26 +1880,33 @@ class Basic
{ {
// check if the timestamp has any h/m/s/ms inside, if yes skip // check if the timestamp has any h/m/s/ms inside, if yes skip
if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) { if (!preg_match("/(h|m|s|ms)/", (string)$timestamp)) {
$ms = 0; list ($timestamp, $ms) = array_pad(explode('.', (string)round($timestamp, 4)), 2, null);
list ($timestamp, $ms) = explode('.', (string)round($timestamp, 4));
$timegroups = array(86400, 3600, 60, 1); $timegroups = array(86400, 3600, 60, 1);
$labels = array('d', 'h', 'm', 's'); $labels = array('d', 'h', 'm', 's');
$time_string = ''; $time_string = '';
for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i ++) { // if timestamp is zero, return zero string
$output = floor((float)$timestamp / $timegroups[$i]); if ($timestamp == 0) {
$timestamp = (float)$timestamp % $timegroups[$i]; $time_string = '0s';
// output has days|hours|min|sec } else {
if ($output || $time_string) { for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i ++) {
$time_string .= $output.$labels[$i].(($i + 1) != count($timegroups) ? ' ' : ''); $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) ? ' ' : '');
}
} }
} }
// if we have ms and it has leading zeros, remove them // only add ms if we have an ms value
$ms = preg_replace("/^0+/", '', $ms); if ($ms !== null) {
// add ms if there // if we have ms and it has leading zeros, remove them, but only if it is nut just 0
if ($show_micro) { $ms = preg_replace("/^0+(\d+)$/", '${1}', $ms);
$time_string .= ' '.(!$ms ? 0 : $ms).'ms'; // add ms if there
} elseif (!$time_string) { if ($show_micro) {
$time_string .= (!$ms ? 0 : $ms).'ms'; $time_string .= ' '.(!$ms ? 0 : $ms).'ms';
} elseif (!$time_string) {
$time_string .= (!$ms ? 0 : $ms).'ms';
}
} }
} else { } else {
$time_string = $timestamp; $time_string = $timestamp;
@@ -1861,7 +1955,7 @@ class Basic
if (!$date) { if (!$date) {
return false; return false;
} }
list ($year, $month, $day) = preg_split("/[\/-]/", $date); list ($year, $month, $day) = array_pad(preg_split("/[\/-]/", $date), 3, null);
if (!$year || !$month || !$day) { if (!$year || !$month || !$day) {
return false; return false;
} }
@@ -1881,7 +1975,7 @@ class Basic
if (!$datetime) { if (!$datetime) {
return false; return false;
} }
list ($year, $month, $day, $hour, $min, $sec) = preg_split("/[\/\- :]/", $datetime); list ($year, $month, $day, $hour, $min, $sec) = array_pad(preg_split("/[\/\- :]/", $datetime), 6, null);
if (!$year || !$month || !$day) { if (!$year || !$month || !$day) {
return false; return false;
} }
@@ -1919,13 +2013,13 @@ class Basic
} }
// splits the data up with / or - // splits the data up with / or -
list ($start_year, $start_month, $start_day) = preg_split('/[\/-]/', $start_date); list ($start_year, $start_month, $start_day) = array_pad(preg_split('/[\/-]/', $start_date), 3, null);
list ($end_year, $end_month, $end_day) = preg_split('/[\/-]/', $end_date); 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 // check that month & day are two digits and then combine
foreach (array('start', 'end') as $prefix) { foreach (array('start', 'end') as $prefix) {
foreach (array('month', 'day') as $date_part) { foreach (array('month', 'day') as $date_part) {
$_date = $prefix.'_'.$date_part; $_date = $prefix.'_'.$date_part;
if ($$_date < 10 && !preg_match("/^0/", $$_date)) { if (isset($$_date) && $$_date < 10 && !preg_match("/^0/", $$_date)) {
$$_date = '0'.$$_date; $$_date = '0'.$$_date;
} }
} }
@@ -1951,7 +2045,7 @@ class Basic
* returns int/bool in: * returns int/bool in:
* -1 if the first date is smaller the last * -1 if the first date is smaller the last
* 0 if both are equal * 0 if both are equal
* 1 if the end date is bigger than the last * 1 if the first date is bigger than the last
* false if no valid date/times chould be found * 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 $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 * @param string $end_datetime end date/time in YYYY-MM-DD HH:mm:ss
@@ -2616,6 +2710,35 @@ class Basic
); );
} }
/**
* TODO: make this a proper uniq ID creation
* add uuidv4 subcall to the uuid function too
* creates a uniq id
* @param string $type uniq id type, currently md5 or sha256 allowed
* if not set will use DEFAULT_HASH if set
* @return string uniq id
*/
public function uniqId(string $type = ''): string
{
$uniq_id = '';
switch ($type) {
case 'md5':
$uniq_id = md5(uniqid((string)rand(), true));
break;
case 'sha256':
$uniq_id = hash('sha256', uniqid((string)rand(), true));
break;
default:
$hash = 'sha256';
if (defined(DEFAULT_HASH)) {
$hash = DEFAULT_HASH;
}
$uniq_id = hash($hash, uniqid((string)rand(), true));
break;
}
return $uniq_id;
}
// [!!! DEPRECATED !!!] // [!!! DEPRECATED !!!]
// ALL crypt* methids are DEPRECATED and SHALL NOT BE USED // ALL crypt* methids are DEPRECATED and SHALL NOT BE USED
// use the new password* instead // use the new password* instead
@@ -2877,7 +3000,7 @@ class Basic
// convert to HEX value // convert to HEX value
$$color = dechex($$color); $$color = dechex($$color);
// prefix with 0 if only one char // prefix with 0 if only one char
$$color = ((strlen($$color) < 2) ? '0' : '').$$color; $$color = (strlen($$color) < 2 ? '0' : '').$$color;
} }
// prefix hex parts with 0 if they are just one char long and return the html color string // prefix hex parts with 0 if they are just one char long and return the html color string
return '#'.$red.$green.$blue; return '#'.$red.$green.$blue;
@@ -2921,7 +3044,11 @@ class Basic
$HUE += 360; $HUE += 360;
} }
return array(round($HUE), round((($MAX - $MIN) / $MAX) * 100), round($MAX * 100)); return array(
(int)round($HUE),
(int)round((($MAX - $MIN) / $MAX) * 100),
(int)round($MAX * 100)
);
} }
/** /**
@@ -2992,7 +3119,11 @@ class Basic
$blue = 0; $blue = 0;
} }
return array(round($red * 255), round($green * 255), round($blue * 255)); return array(
(int)round($red * 255),
(int)round($green * 255),
(int)round($blue * 255)
);
} }
/** /**
@@ -3039,7 +3170,11 @@ class Basic
// H, S, L // H, S, L
// S= L <= 0.5 ? C/2L : C/2 - 2L // S= L <= 0.5 ? C/2L : C/2 - 2L
return array(round($HUE), round((($MAX - $MIN) / (($L <= 0.5) ? ($MAX + $MIN) : (2 - $MAX - $MIN))) * 100), $L); return array(
(int)round($HUE),
(int)round((($MAX - $MIN) / ($L <= 0.5 ? ($MAX + $MIN) : (2 - $MAX - $MIN))) * 100),
(int)$L
);
} }
} }
@@ -3057,11 +3192,11 @@ class Basic
if ($s == 0) { if ($s == 0) {
return array($l * 255, $l * 255, $l * 255); return array($l * 255, $l * 255, $l * 255);
} else { } else {
$m2 = ($l < 0.5) ? $l * ($s + 1) : ($l + $s) - ($l * $s); $m2 = $l < 0.5 ? $l * ($s + 1) : ($l + $s) - ($l * $s);
$m1 = $l * 2 - $m2; $m1 = $l * 2 - $m2;
$hue = function ($base) use ($m1, $m2) { $hue = function ($base) use ($m1, $m2) {
// base = hue, hue > 360 (1) - 360 (1), else < 0 + 360 (1) // base = hue, hue > 360 (1) - 360 (1), else < 0 + 360 (1)
$base = ($base < 0) ? $base + 1 : (($base > 1) ? $base - 1 : $base); $base = $base < 0 ? $base + 1 : ($base > 1 ? $base - 1 : $base);
// 6: 60, 2: 180, 3: 240 // 6: 60, 2: 180, 3: 240
// 2/3 = 240 // 2/3 = 240
// 1/3 = 120 (all from 360) // 1/3 = 120 (all from 360)
@@ -3077,7 +3212,11 @@ class Basic
return $m1; return $m1;
}; };
return array(round(255 * $hue($h + (1 / 3))), round(255 * $hue($h)), round(255 * $hue($h - (1 / 3)))); return array(
(int)round(255 * $hue($h + (1 / 3))),
(int)round(255 * $hue($h)),
(int)round(255 * $hue($h - (1 / 3)))
);
} }
} }
@@ -3161,13 +3300,13 @@ class Basic
$max_year = (int)date("Y", $timestamp) + 1; $max_year = (int)date("Y", $timestamp) + 1;
// preset year, month, ... // preset year, month, ...
$year = (!$year) ? date("Y", $timestamp) : $year; $year = !$year ? date('Y', $timestamp) : $year;
$month = (!$month) ? date("m", $timestamp) : $month; $month = !$month ? date('m', $timestamp) : $month;
$day = (!$day) ? date("d", $timestamp) : $day; $day = !$day ? date('d', $timestamp) : $day;
$hour = (!$hour) ? date("H", $timestamp) : $hour; $hour = !$hour ? date('H', $timestamp) : $hour;
$min = (!$min) ? date("i", $timestamp) : $min; // add to five min? $min = !$min ? date('i', $timestamp) : $min; // add to five min?
// max days in selected month // max days in selected month
$days_in_month = date("t", strtotime($year."-".$month."-".$day." ".$hour.":".$min.":0")); $days_in_month = date('t', strtotime($year.'-'.$month.'-'.$day.' '.$hour.':'.$min.':0'));
$string = ''; $string = '';
// from now to ? // from now to ?
if ($name_pos_back === false) { if ($name_pos_back === false) {
@@ -3175,7 +3314,7 @@ class Basic
} }
$string .= '<select id="year'.$suffix.'" name="year'.$suffix.'" onChange="'.$on_change_call.'">'; $string .= '<select id="year'.$suffix.'" name="year'.$suffix.'" onChange="'.$on_change_call.'">';
for ($i = date("Y"); $i <= $max_year; $i ++) { for ($i = date("Y"); $i <= $max_year; $i ++) {
$string .= '<option value="'.$i.'" '.(($year == $i) ? 'selected' : '').'>'.$i.'</option>'; $string .= '<option value="'.$i.'" '.($year == $i ? 'selected' : '').'>'.$i.'</option>';
} }
$string .= '</select> '; $string .= '</select> ';
if ($name_pos_back === true) { if ($name_pos_back === true) {
@@ -3186,7 +3325,7 @@ class Basic
} }
$string .= '<select id="month'.$suffix.'" name="month'.$suffix.'" onChange="'.$on_change_call.'">'; $string .= '<select id="month'.$suffix.'" name="month'.$suffix.'" onChange="'.$on_change_call.'">';
for ($i = 1; $i <= 12; $i ++) { for ($i = 1; $i <= 12; $i ++) {
$string .= '<option value="'.(($i < 10) ? '0'.$i : $i).'" '.(($month == $i) ? 'selected' : '').'>'.$i.'</option>'; $string .= '<option value="'.($i < 10 ? '0'.$i : $i).'" '.($month == $i ? 'selected' : '').'>'.$i.'</option>';
} }
$string .= '</select> '; $string .= '</select> ';
if ($name_pos_back === true) { if ($name_pos_back === true) {
@@ -3198,7 +3337,7 @@ class Basic
$string .= '<select id="day'.$suffix.'" name="day'.$suffix.'" onChange="'.$on_change_call.'">'; $string .= '<select id="day'.$suffix.'" name="day'.$suffix.'" onChange="'.$on_change_call.'">';
for ($i = 1; $i <= $days_in_month; $i ++) { for ($i = 1; $i <= $days_in_month; $i ++) {
// set weekday text based on current month ($month) and year ($year) // set weekday text based on current month ($month) and year ($year)
$string .= '<option value="'.(($i < 10) ? '0'.$i : $i).'" '.(($day == $i) ? 'selected' : '').'>'.$i.' ('.date('D', mktime(0, 0, 0, $month, $i, $year)).')</option>'; $string .= '<option value="'.($i < 10 ? '0'.$i : $i).'" '.($day == $i ? 'selected' : '').'>'.$i.' ('.date('D', mktime(0, 0, 0, $month, $i, $year)).')</option>';
} }
$string .= '</select> '; $string .= '</select> ';
if ($name_pos_back === true) { if ($name_pos_back === true) {
@@ -3209,7 +3348,7 @@ class Basic
} }
$string .= '<select id="hour'.$suffix.'" name="hour'.$suffix.'" onChange="'.$on_change_call.'">'; $string .= '<select id="hour'.$suffix.'" name="hour'.$suffix.'" onChange="'.$on_change_call.'">';
for ($i = 0; $i <= 23; $i += $min_steps) { for ($i = 0; $i <= 23; $i += $min_steps) {
$string .= '<option value="'.(($i < 10) ? '0'.$i : $i).'" '.(($hour == $i) ? 'selected' : '').'>'.$i.'</option>'; $string .= '<option value="'.($i < 10 ? '0'.$i : $i).'" '.($hour == $i ? 'selected' : '').'>'.$i.'</option>';
} }
$string .= '</select> '; $string .= '</select> ';
if ($name_pos_back === true) { if ($name_pos_back === true) {
@@ -3220,7 +3359,7 @@ class Basic
} }
$string .= '<select id="min'.$suffix.'" name="min'.$suffix.'" onChange="'.$on_change_call.'">'; $string .= '<select id="min'.$suffix.'" name="min'.$suffix.'" onChange="'.$on_change_call.'">';
for ($i = 0; $i <= 59; $i ++) { for ($i = 0; $i <= 59; $i ++) {
$string .= '<option value="'.(( $i < 10) ? '0'.$i : $i).'" '.(($min == $i) ? 'selected' : '').'>'.$i.'</option>'; $string .= '<option value="'.($i < 10 ? '0'.$i : $i).'" '.($min == $i ? 'selected' : '').'>'.$i.'</option>';
} }
$string .= '</select>'; $string .= '</select>';
if ($name_pos_back === true) { if ($name_pos_back === true) {
@@ -3232,10 +3371,10 @@ class Basic
/** /**
* full wrapper for html entities * full wrapper for html entities
* @param string $string string to html encode * @param mixed $string string to html encode
* @return mixed if string, encoded, else as is * @return mixed if string, encoded, else as is (eg null)
*/ */
public function htmlent(string $string) public function htmlent($string)
{ {
if (is_string($string)) { if (is_string($string)) {
return htmlentities($string, ENT_COMPAT|ENT_HTML401, 'UTF-8', false); return htmlentities($string, ENT_COMPAT|ENT_HTML401, 'UTF-8', false);

View File

@@ -957,6 +957,28 @@ class IO extends \CoreLibs\Basic
return $this->dbReturnRow('SHOW client_encoding')['client_encoding']; return $this->dbReturnRow('SHOW client_encoding')['client_encoding'];
} }
/**
* get certain settings like username, db name
* @param string $name what setting to query
* @return mixed setting value, if not allowed name return false
*/
public function dbGetSetting(string $name)
{
$setting = '';
switch ($name) {
case 'name':
$setting = $this->db_name;
break;
case 'user':
$setting = $this->db_user;
break;
default:
$setting = false;
break;
}
return $setting;
}
/** /**
* prints out status info from the connected DB (might be usefull for debug stuff) * prints out status info from the connected DB (might be usefull for debug stuff)
* @param bool|boolean $show show db connection info, default true * @param bool|boolean $show show db connection info, default true
@@ -972,7 +994,7 @@ class IO extends \CoreLibs\Basic
$string .= 'at host <b>\''.$this->db_host.'\'</b> '; $string .= 'at host <b>\''.$this->db_host.'\'</b> ';
$string .= 'on port <b>\''.$this->db_port.'\'</b> '; $string .= 'on port <b>\''.$this->db_port.'\'</b> ';
$string .= 'with ssl mode <b>\''.$this->db_ssl.'\'</b><br>'; $string .= 'with ssl mode <b>\''.$this->db_ssl.'\'</b><br>';
$string .= '<b>-DB-info-></b> DB IO Class debug output: <b>'.(($this->db_debug) ? 'Yes' : 'No').'</b>'; $string .= '<b>-DB-info-></b> DB IO Class debug output: <b>'.($this->db_debug ? 'Yes' : 'No').'</b>';
if ($show === true) { if ($show === true) {
$this->__dbDebug('db', $string, 'dbInfo'); $this->__dbDebug('db', $string, 'dbInfo');
} else { } else {
@@ -1385,7 +1407,7 @@ class IO extends \CoreLibs\Basic
return false; return false;
} }
$md5 = md5($query); $md5 = md5($query);
return $this->cursor_ext[$md5]['pos']; return (int)$this->cursor_ext[$md5]['pos'];
} }
/** /**
@@ -1401,7 +1423,7 @@ class IO extends \CoreLibs\Basic
return false; return false;
} }
$md5 = md5($query); $md5 = md5($query);
return $this->cursor_ext[$md5]['num_rows']; return (int)$this->cursor_ext[$md5]['num_rows'];
} }
/** /**
@@ -1462,7 +1484,7 @@ class IO extends \CoreLibs\Basic
if (!$pk_name) { if (!$pk_name) {
// read the primary key from the table, if we do not have one, we get nothing in return // read the primary key from the table, if we do not have one, we get nothing in return
list($schema, $table) = $this->__dbReturnTable($query); list($schema, $table) = $this->__dbReturnTable($query);
if (!$this->pk_name_table[$table]) { if (empty($this->pk_name_table[$table])) {
$this->pk_name_table[$table] = $this->db_functions->__dbPrimaryKey($table, $schema); $this->pk_name_table[$table] = $this->db_functions->__dbPrimaryKey($table, $schema);
} }
$pk_name = $this->pk_name_table[$table]; $pk_name = $this->pk_name_table[$table];
@@ -1846,7 +1868,7 @@ class IO extends \CoreLibs\Basic
} }
// write data into sql string // write data into sql string
if (strstr($table_data[$field]['type'], 'int')) { if (strstr($table_data[$field]['type'], 'int')) {
$q_sub_data .= (is_numeric($_data)) ? $_data : 'NULL'; $q_sub_data .= is_numeric($_data) ? $_data : 'NULL';
} else { } else {
// if bool -> set bool, else write data // if bool -> set bool, else write data
$q_sub_data .= isset($_data) ? "'".($is_bool ? $this->dbBoolean($_data, true) : $this->dbEscapeString($_data))."'" : 'NULL'; $q_sub_data .= isset($_data) ? "'".($is_bool ? $this->dbBoolean($_data, true) : $this->dbEscapeString($_data))."'" : 'NULL';
@@ -1876,7 +1898,7 @@ class IO extends \CoreLibs\Basic
$primary_key['value'] = $this->insert_id; $primary_key['value'] = $this->insert_id;
} }
// if there is not priamry key value field return false // if there is not priamry key value field return false
return isset($primary_key['value']) ? $primary_key['value'] : false; return $primary_key['value'] ?? false;
} }
/** /**
@@ -1929,19 +1951,19 @@ class IO extends \CoreLibs\Basic
{ {
switch ($kbn) { switch ($kbn) {
case 'i': case 'i':
$value = ($value === '') ? "NULL" : intval($value); $value = $value === '' ? "NULL" : intval($value);
break; break;
case 'f': case 'f':
$value = ($value === '') ? "NULL" : floatval($value); $value = $value === '' ? "NULL" : floatval($value);
break; break;
case 't': case 't':
$value = ($value === '') ? "NULL" : "'".$this->dbEscapeString($value)."'"; $value = $value === '' ? "NULL" : "'".$this->dbEscapeString($value)."'";
break; break;
case 'd': case 'd':
$value = ($value === '') ? "NULL" : "'".$this->dbEscapeString($value)."'"; $value = $value === '' ? "NULL" : "'".$this->dbEscapeString($value)."'";
break; break;
case 'i2': case 'i2':
$value = ($value === '') ? 0 : intval($value); $value = $value === '' ? 0 : intval($value);
break; break;
} }
return $value; return $value;

View File

@@ -260,7 +260,7 @@ class PgSQL
// set pk_name to "id" // set pk_name to "id"
$pk_name = $table."_id"; $pk_name = $table."_id";
} }
$seq = (($schema) ? $schema.'.' : '').$table."_".$pk_name."_seq"; $seq = ($schema ? $schema.'.' : '').$table."_".$pk_name."_seq";
$q = "SELECT CURRVAL('$seq') AS insert_id"; $q = "SELECT CURRVAL('$seq') AS insert_id";
// I have to do manually or I overwrite the original insert internal vars ... // I have to do manually or I overwrite the original insert internal vars ...
if ($q = $this->__dbQuery($q)) { if ($q = $this->__dbQuery($q)) {

View File

@@ -316,16 +316,16 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
$this->table_width = $table_width; $this->table_width = $table_width;
// set button vars // set button vars
$this->archive = isset($_POST['archive']) ? $_POST['archive'] : ''; $this->archive = $_POST['archive'] ?? '';
$this->new = isset($_POST['new']) ? $_POST['new'] : ''; $this->new = $_POST['new'] ?? '';
$this->really_new = isset($_POST['really_new']) ? $_POST['really_new'] : ''; $this->really_new = $_POST['really_new'] ?? '';
$this->delete = isset($_POST['delete']) ? $_POST['delete'] : ''; $this->delete = $_POST['delete'] ?? '';
$this->really_delete = isset($_POST['really_delete']) ? $_POST['really_delete'] : ''; $this->really_delete = $_POST['really_delete'] ?? '';
$this->save = isset($_POST['save']) ? $_POST['save'] : ''; $this->save = $_POST['save'] ?? '';
$this->remove_button = isset($_POST['remove_button']) ? $_POST['remove_button'] : ''; $this->remove_button = $_POST['remove_button'] ?? '';
// security settings // security settings
$this->base_acl_level = isset($_SESSION['BASE_ACL_LEVEL']) ? $_SESSION['BASE_ACL_LEVEL'] : 0; $this->base_acl_level = $_SESSION['BASE_ACL_LEVEL'] ?? 0;
// security levels for buttons/actions // security levels for buttons/actions
// if array does not exists create basic // if array does not exists create basic
if (!isset($config_array['security_level']) || if (!isset($config_array['security_level']) ||
@@ -689,7 +689,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
$t_string .= $field_array['before_value']; $t_string .= $field_array['before_value'];
} }
// must have res element set // must have res element set
if (isset($res[$field_array['name']])) { if (isset($field_array['name']) &&
isset($res[$field_array['name']])
) {
if (isset($field_array['binary'])) { if (isset($field_array['binary'])) {
if (isset($field_array['binary'][0])) { if (isset($field_array['binary'][0])) {
$t_string .= $field_array['binary'][0]; $t_string .= $field_array['binary'][0];
@@ -850,16 +852,16 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
// normal text element // normal text element
if ($this->table_array[$element_name]['type'] == 'text') { if ($this->table_array[$element_name]['type'] == 'text') {
$data['name'] = $element_name; $data['name'] = $element_name;
$data['value'] = isset($this->table_array[$element_name]['value']) ? $this->table_array[$element_name]['value'] : ''; $data['value'] = $this->table_array[$element_name]['value'] ?? '';
$data['size'] = isset($this->table_array[$element_name]['size']) ? $this->table_array[$element_name]['size'] : ''; $data['size'] = $this->table_array[$element_name]['size'] ?? '';
$data['length'] = isset($this->table_array[$element_name]['length']) ? $this->table_array[$element_name]['length'] : ''; $data['length'] = $this->table_array[$element_name]['length'] ?? '';
} }
// password element, does not write back the value // password element, does not write back the value
if ($this->table_array[$element_name]['type'] == 'password') { if ($this->table_array[$element_name]['type'] == 'password') {
$data['name'] = $element_name; $data['name'] = $element_name;
$data['HIDDEN_value'] = $this->table_array[$element_name]['HIDDEN_value']; $data['HIDDEN_value'] = $this->table_array[$element_name]['HIDDEN_value'];
$data['size'] = isset($this->table_array[$element_name]['size']) ? $this->table_array[$element_name]['size'] : ''; $data['size'] = $this->table_array[$element_name]['size'] ?? '';
$data['length'] = isset($this->table_array[$element_name]['length']) ? $this->table_array[$element_name]['length'] : ''; $data['length'] = $this->table_array[$element_name]['length'] ?? '';
} }
// date (YYYY-MM-DD) // date (YYYY-MM-DD)
if ($this->table_array[$element_name]['type'] == 'date') { if ($this->table_array[$element_name]['type'] == 'date') {
@@ -872,9 +874,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
// textarea // textarea
if ($this->table_array[$element_name]['type'] == 'textarea') { if ($this->table_array[$element_name]['type'] == 'textarea') {
$data['name'] = $element_name; $data['name'] = $element_name;
$data['value'] = isset($this->table_array[$element_name]['value']) ? $this->table_array[$element_name]['value'] : ''; $data['value'] = $this->table_array[$element_name]['value'] ?? '';
$data['rows'] = isset($this->table_array[$element_name]['rows']) ? $this->table_array[$element_name]['rows'] : ''; $data['rows'] = $this->table_array[$element_name]['rows'] ?? '';
$data['cols'] = isset($this->table_array[$element_name]['cols']) ? $this->table_array[$element_name]['cols'] : ''; $data['cols'] = $this->table_array[$element_name]['cols'] ?? '';
} }
// for drop_down_* // for drop_down_*
if (preg_match("/^drop_down_/", $this->table_array[$element_name]['type'])) { if (preg_match("/^drop_down_/", $this->table_array[$element_name]['type'])) {
@@ -980,7 +982,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
if ($this->table_array[$element_name]['type'] == 'order') { if ($this->table_array[$element_name]['type'] == 'order') {
$data['output_name'] = $this->table_array[$element_name]['output_name']; $data['output_name'] = $this->table_array[$element_name]['output_name'];
$data['name'] = $element_name; $data['name'] = $element_name;
$data['value'] = isset($this->table_array[$element_name]['value']) ? $this->table_array[$element_name]['value'] : 0; $data['value'] = $this->table_array[$element_name]['value'] ?? 0;
$data['col_name'] = $this->col_name; $data['col_name'] = $this->col_name;
$data['table_name'] = $this->table_name; $data['table_name'] = $this->table_name;
$data['query'] = $query !== null ? urlencode($query) : ''; $data['query'] = $query !== null ? urlencode($query) : '';
@@ -1183,7 +1185,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
// get the leasy of keys from the elements array // get the leasy of keys from the elements array
$keys = array_keys($reference_array['elements']); $keys = array_keys($reference_array['elements']);
// prefix // prefix
$prfx = ($reference_array['prefix']) ? $reference_array['prefix'].'_' : ''; $prfx = $reference_array['prefix'] ? $reference_array['prefix'].'_' : '';
// get max elements // get max elements
$max = 0; $max = 0;
foreach ($keys as $key) { foreach ($keys as $key) {
@@ -1545,7 +1547,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
// get the number of keys from the elements array // get the number of keys from the elements array
$keys = array_keys($reference_array['elements']); $keys = array_keys($reference_array['elements']);
// element prefix name // element prefix name
$prfx = ($reference_array['prefix']) ? $reference_array['prefix'].'_' : ''; $prfx = $reference_array['prefix'] ? $reference_array['prefix'].'_' : '';
// get max elements // get max elements
$max = 0; $max = 0;
foreach ($keys as $key) { foreach ($keys as $key) {
@@ -1650,7 +1652,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
$_value = 'NULL'; $_value = 'NULL';
} }
} else { } else {
$_value = isset($_POST[$prfx.$el_name][$i]) ? $_POST[$prfx.$el_name][$i] : ''; $_value = $_POST[$prfx.$el_name][$i] ?? '';
} }
// pre write data set. if int value, unset flagged need to be set null or 0 depending on settings // pre write data set. if int value, unset flagged need to be set null or 0 depending on settings
if (isset($data_array['int']) || isset($data_array['int_null'])) { if (isset($data_array['int']) || isset($data_array['int_null'])) {
@@ -1683,15 +1685,15 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
// if tpye is update // if tpye is update
if (isset($type[$i]) && $type[$i] == 'update') { if (isset($type[$i]) && $type[$i] == 'update') {
$q = $q_begin[$i]. $q = $q_begin[$i].
(isset($q_data[$i]) ? $q_data[$i] : ''). ($q_data[$i] ?? '').
$q_end[$i]; $q_end[$i];
// or if we have block write, then it is insert (new) // or if we have block write, then it is insert (new)
} elseif (isset($block_write[$i]) && $block_write[$i]) { } elseif (isset($block_write[$i]) && $block_write[$i]) {
$q = $q_begin[$i]. $q = $q_begin[$i].
(isset($q_names[$i]) ? $q_names[$i] : '').', '. ($q_names[$i] ?? '').', '.
$this->int_pk_name. $this->int_pk_name.
(isset($q_middle[$i]) ? $q_middle[$i] : ''). ($q_middle[$i] ?? '').
(isset($q_values[$i]) ? $q_values[$i] : '').', '. ($q_values[$i] ?? '').', '.
$this->table_array[$this->int_pk_name]['value']. $this->table_array[$this->int_pk_name]['value'].
$q_end[$i]; $q_end[$i];
} }
@@ -1770,7 +1772,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
$this->table_array[$key]['type'] == 'hidden' $this->table_array[$key]['type'] == 'hidden'
) { ) {
if (array_key_exists($key, $this->table_array)) { if (array_key_exists($key, $this->table_array)) {
$hidden_array[$key] = isset($this->table_array[$key]['value']) ? $this->table_array[$key]['value'] : ''; $hidden_array[$key] = $this->table_array[$key]['value'] ?? '';
} else { } else {
$hidden_array[$key] = ''; $hidden_array[$key] = '';
} }
@@ -1805,7 +1807,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
$data['value'][] = $res[0]; $data['value'][] = $res[0];
$data['output'][] = $res[1]; $data['output'][] = $res[1];
$data['selected'][] = ($this->checked( $data['selected'][] = ($this->checked(
isset($this->reference_array[$table_name]['selected']) ? $this->reference_array[$table_name]['selected'] : '', $this->reference_array[$table_name]['selected'] ?? '',
$res[0] $res[0]
)) ? $res[0] : ''; )) ? $res[0] : '';
} }
@@ -1880,9 +1882,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
// prefix the name for any further data parts // prefix the name for any further data parts
$el_name = $data['prefix'].$el_name; $el_name = $data['prefix'].$el_name;
// this are the output names (if given) // this are the output names (if given)
$data['output_name'][$el_name] = isset($data_array['output_name']) ? $data_array['output_name'] : ''; $data['output_name'][$el_name] = $data_array['output_name'] ?? '';
// this is the type of the field // this is the type of the field
$data['type'][$el_name] = isset($data_array['type']) ? $data_array['type'] : ''; $data['type'][$el_name] = $data_array['type'] ?? '';
// set the primary key name // set the primary key name
if (isset($data_array['pk_id'])) { if (isset($data_array['pk_id'])) {
$data['pk_name'] = $el_name; $data['pk_name'] = $el_name;
@@ -1896,7 +1898,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
$md_q = md5($data_array['query']); $md_q = md5($data_array['query']);
while ($res = $this->dbReturn($data_array['query'])) { while ($res = $this->dbReturn($data_array['query'])) {
/** @phan-suppress-next-line PhanTypeInvalidDimOffset */ /** @phan-suppress-next-line PhanTypeInvalidDimOffset */
$this->debug('edit', 'Q['.$md_q.'] pos: '.$this->cursor_ext[$md_q]['pos'].' | want: '.(isset($data_array['preset']) ? $data_array['preset'] : '-').' | set: '.(isset($data['preset'][$el_name]) ? $data['preset'][$el_name] : '-')); $this->debug('edit', 'Q['.$md_q.'] pos: '.$this->cursor_ext[$md_q]['pos'].' | want: '.($data_array['preset'] ?? '-').' | set: '.($data['preset'][$el_name] ?? '-'));
// first is default for this element // first is default for this element
if (isset($data_array['preset']) && if (isset($data_array['preset']) &&
(!isset($data['preset'][$el_name]) || empty($data['preset'][$el_name])) && (!isset($data['preset'][$el_name]) || empty($data['preset'][$el_name])) &&
@@ -1918,7 +1920,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
if ($this->error) { if ($this->error) {
if (isset($_POST[$el_name]) && is_array($_POST[$el_name])) { if (isset($_POST[$el_name]) && is_array($_POST[$el_name])) {
// this is for the new line // this is for the new line
$proto[$el_name] = isset($_POST[$el_name][(count($_POST[$el_name]) - 1)]) ? $_POST[$el_name][(count($_POST[$el_name]) - 1)] : 0; $proto[$el_name] = $_POST[$el_name][(count($_POST[$el_name]) - 1)] ?? 0;
} else { } else {
$proto[$el_name] = 0; $proto[$el_name] = 0;
} }

View File

@@ -78,6 +78,9 @@ class ProgressBar
) )
*/ */
// output strings
public $prefix_message = '';
/** /**
* progress bar constructor * progress bar constructor
* @param integer $width progress bar width, default 0 * @param integer $width progress bar width, default 0
@@ -110,7 +113,8 @@ class ProgressBar
$clear_buffer_size = $this->clear_buffer_size; $clear_buffer_size = $this->clear_buffer_size;
} }
echo str_repeat(' ', $clear_buffer_size); echo str_repeat(' ', $clear_buffer_size);
ob_flush(); // a small hack to avoid warnings about no buffer to flush
@ob_flush();
flush(); flush();
} }
@@ -541,6 +545,7 @@ class ProgressBar
$html = ''; $html = '';
$js = ''; $js = '';
$html_button = ''; $html_button = '';
$html_percent = '';
$this->__setStep($this->step); $this->__setStep($this->step);
$this->position = $this->__calculatePosition($this->step); $this->position = $this->__calculatePosition($this->step);
@@ -636,7 +641,7 @@ class ProgressBar
case 'percent': case 'percent':
// only one inner percent // only one inner percent
// print "STYLE[$name]: ".$style_lbl."<br>"; // print "STYLE[$name]: ".$style_lbl."<br>";
if (!isset($html_percent)) { if (empty($html_percent)) {
$html_percent = '<div id="plbl'.$name.$this->code.'" style="'.$style_lbl.'width:'.$data['width'].'px;line-height:1;text-shadow: 0 0 .2em white, 0 0 .5em white;">'.$this->__calculatePercent($this->step).'%</div>'."\n"; $html_percent = '<div id="plbl'.$name.$this->code.'" style="'.$style_lbl.'width:'.$data['width'].'px;line-height:1;text-shadow: 0 0 .2em white, 0 0 .5em white;">'.$this->__calculatePercent($this->step).'%</div>'."\n";
} }
break; break;

View File

@@ -46,6 +46,7 @@ class SmartyExtend extends SmartyBC
public $USE_TINY_MCE = false; public $USE_TINY_MCE = false;
public $JS_DATEPICKR = false; public $JS_DATEPICKR = false;
public $JS_FLATPICKR = false; public $JS_FLATPICKR = false;
public $JS_FILE_UPLOADER = false;
public $DEBUG_TMPL = false; public $DEBUG_TMPL = false;
public $USE_INCLUDE_TEMPLATE = false; public $USE_INCLUDE_TEMPLATE = false;
// cache & compile // cache & compile
@@ -344,7 +345,7 @@ class SmartyExtend extends SmartyBC
// special for admin // special for admin
if ($admin_call === true) { if ($admin_call === true) {
// set ACL extra show // set ACL extra show
$this->DATA['show_ea_extra'] = isset($cms->acl['show_ea_extra']) ? $cms->acl['show_ea_extra'] : false; $this->DATA['show_ea_extra'] = $cms->acl['show_ea_extra'] ?? false;
$this->DATA['ADMIN'] = !empty($cms->acl['admin']) ? $cms->acl['admin'] : 0; $this->DATA['ADMIN'] = !empty($cms->acl['admin']) ? $cms->acl['admin'] : 0;
// set style sheets // set style sheets
$this->HEADER['STYLESHEET'] = $this->ADMIN_STYLESHEET ? $this->ADMIN_STYLESHEET : ADMIN_STYLESHEET; $this->HEADER['STYLESHEET'] = $this->ADMIN_STYLESHEET ? $this->ADMIN_STYLESHEET : ADMIN_STYLESHEET;
@@ -353,10 +354,10 @@ class SmartyExtend extends SmartyBC
$this->DATA['nav_menu'] = $cms->adbTopMenu(); $this->DATA['nav_menu'] = $cms->adbTopMenu();
$this->DATA['nav_menu_count'] = is_array($this->DATA['nav_menu']) ? count($this->DATA['nav_menu']) : 0; $this->DATA['nav_menu_count'] = is_array($this->DATA['nav_menu']) ? count($this->DATA['nav_menu']) : 0;
// messages = array('msg' =>, 'class' => 'error/warning/...') // messages = array('msg' =>, 'class' => 'error/warning/...')
$this->DATA['messages'] = isset($cms->messages) ? $cms->messages : $cms->messages; $this->DATA['messages'] = $cms->messages ?? array();
// the page name // the page name
$this->DATA['page_name'] = $this->page_name; $this->DATA['page_name'] = $this->page_name;
$this->DATA['table_width'] = isset($this->PAGE_WIDTH) ? $this->PAGE_WIDTH : PAGE_WIDTH; $this->DATA['table_width'] = $this->PAGE_WIDTH ?? PAGE_WIDTH;
// for tinymce special // for tinymce special
$this->DATA['TINYMCE_LANG'] = $this->lang_short; $this->DATA['TINYMCE_LANG'] = $this->lang_short;
// include flags // include flags
@@ -383,12 +384,13 @@ class SmartyExtend extends SmartyBC
// include flags // include flags
$this->DATA['JS_DATEPICKR'] = $this->JS_DATEPICKR; $this->DATA['JS_DATEPICKR'] = $this->JS_DATEPICKR;
$this->DATA['JS_FLATPICKR'] = $this->JS_FLATPICKR; $this->DATA['JS_FLATPICKR'] = $this->JS_FLATPICKR;
$this->DATA['JS_FILE_UPLOADER'] = $this->JS_FILE_UPLOADER;
// user name // user name
$this->DATA['USER_NAME'] = !empty($_SESSION['USER_NAME']) ? $_SESSION['USER_NAME'] : ''; $this->DATA['USER_NAME'] = !empty($_SESSION['USER_NAME']) ? $_SESSION['USER_NAME'] : '';
// the template part to include into the body // the template part to include into the body
$this->DATA['TEMPLATE_NAME'] = $this->TEMPLATE_NAME; $this->DATA['TEMPLATE_NAME'] = $this->TEMPLATE_NAME;
$this->DATA['CONTENT_INCLUDE'] = $this->CONTENT_INCLUDE; $this->DATA['CONTENT_INCLUDE'] = $this->CONTENT_INCLUDE;
$this->DATA['TEMPLATE_TRANSLATE'] = isset($this->TEMPLATE_TRANSLATE) ? $this->TEMPLATE_TRANSLATE : null; $this->DATA['TEMPLATE_TRANSLATE'] = $this->TEMPLATE_TRANSLATE ?? null;
$this->DATA['PAGE_FILE_NAME'] = str_replace('.php', '', $this->page_name).'.tpl'; $this->DATA['PAGE_FILE_NAME'] = str_replace('.php', '', $this->page_name).'.tpl';
// render page // render page
$this->renderSmarty(); $this->renderSmarty();

View File

@@ -35,8 +35,8 @@ class qqUploadedFileXhr
} }
public function getSize() public function getSize()
{ {
if (isset($_SERVER["CONTENT_LENGTH"])) { if (isset($_SERVER['CONTENT_LENGTH'])) {
return (int)$_SERVER["CONTENT_LENGTH"]; return (int)$_SERVER['CONTENT_LENGTH'];
} else { } else {
throw new \Exception('Getting content length is not supported.'); throw new \Exception('Getting content length is not supported.');
} }

View File

@@ -2,7 +2,7 @@
namespace FileUpload; namespace FileUpload;
use \FileUpload\Core; // use \FileUpload\Core;
class qqFileUploader class qqFileUploader
{ {
@@ -84,7 +84,7 @@ class qqFileUploader
$pathinfo = pathinfo($this->file->getName()); $pathinfo = pathinfo($this->file->getName());
$filename = $pathinfo['filename']; $filename = $pathinfo['filename'];
//$filename = md5(uniqid()); //$filename = md5(uniqid());
$ext = $pathinfo['extension']; $ext = $pathinfo['extension'] ?? '';
if ($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)) { if ($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)) {
$these = implode(', ', $this->allowedExtensions); $these = implode(', ', $this->allowedExtensions);