Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4bbbd653cd | ||
|
|
4c28e6d0ec | ||
|
|
66b7e81463 | ||
|
|
cf58f86802 | ||
|
|
ff644310cd | ||
|
|
58988b9c0f | ||
|
|
fe75f1d724 | ||
|
|
0607cdc3be | ||
|
|
6cb14daf49 | ||
|
|
330582f273 | ||
|
|
b0293b52bd | ||
|
|
00591deb00 | ||
|
|
737f70fac5 | ||
|
|
0328ccd2fe | ||
|
|
eba1e2885f | ||
|
|
53813261fb | ||
|
|
df2ae66942 | ||
|
|
78e1d73cd9 | ||
|
|
620a5878c1 | ||
|
|
5a0b09a916 | ||
|
|
98c6033c75 | ||
|
|
6dcebc9b67 | ||
|
|
c97520e186 | ||
|
|
764ca1f098 | ||
|
|
3d23e5b066 | ||
|
|
90e418ba24 | ||
|
|
b6a0937e0c | ||
|
|
b3f6f8ef18 | ||
|
|
d9d5400498 | ||
|
|
b1be681afb | ||
|
|
8ef309d479 | ||
|
|
6e59b63791 | ||
|
|
9c7b3cea83 | ||
|
|
26af6a07f4 | ||
|
|
b7c6d4b478 | ||
|
|
9936fc04da | ||
|
|
1e0dfa2106 | ||
|
|
3af6f6a8f0 | ||
|
|
1e793c0d16 | ||
|
|
5be34453ce |
@@ -26,6 +26,7 @@
|
|||||||
use Phan\Config;
|
use Phan\Config;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
// "target_php_version" => "8.2",
|
||||||
// turn color on (-C)
|
// turn color on (-C)
|
||||||
"color_issue_messages_if_supported" => true,
|
"color_issue_messages_if_supported" => true,
|
||||||
// If true, missing properties will be created when
|
// If true, missing properties will be created when
|
||||||
@@ -95,7 +96,7 @@ return [
|
|||||||
'www/vendor',
|
'www/vendor',
|
||||||
'www/tests',
|
'www/tests',
|
||||||
'www/lib/Smarty',
|
'www/lib/Smarty',
|
||||||
'www/lib/smarty-4.1.0',
|
'www/lib/smarty-4.3.0',
|
||||||
'www/templates_c',
|
'www/templates_c',
|
||||||
'www/log',
|
'www/log',
|
||||||
'www/tmp',
|
'www/tmp',
|
||||||
@@ -117,7 +118,9 @@ return [
|
|||||||
'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 ignore
|
// symlink ignore
|
||||||
'www/lib/smarty-4.1.0/libs/Smarty.class.php'
|
'www/lib/smarty-4.3.0/libs/Smarty.class.php',
|
||||||
|
// legacy edit base (until removal)
|
||||||
|
'www/includes/edit_base.LEGACY.php'
|
||||||
],
|
],
|
||||||
|
|
||||||
// what not to show as problem
|
// what not to show as problem
|
||||||
|
|||||||
169
4dev/bin/mo_to_js.sh
Executable file
169
4dev/bin/mo_to_js.sh
Executable file
@@ -0,0 +1,169 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# read source mo files and writes target js files in object form
|
||||||
|
|
||||||
|
# check for ARG 1 is "mv"
|
||||||
|
# then move the files directly and don't do manual check (don't create temp files)
|
||||||
|
FILE_MOVE=0;
|
||||||
|
if [ "${1}" = "mv" ]; then
|
||||||
|
echo "*** Direct write ***";
|
||||||
|
FILE_MOVE=1;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
target='';
|
||||||
|
BASE_FOLDER=$(dirname $(readlink -f $0))"/";
|
||||||
|
# Assume script is in 4dev/bin
|
||||||
|
base_folder="${BASE_FOLDER}../../www/";
|
||||||
|
po_folder='../4dev/locale/'
|
||||||
|
mo_folder='includes/locale/';
|
||||||
|
target_folder='';
|
||||||
|
template_file_stump='##SUFFIX##translate-##LANGUAGE##.TMP.js';
|
||||||
|
# for output file names
|
||||||
|
source_list=(iw);
|
||||||
|
language_list=(en ja);
|
||||||
|
# set target names
|
||||||
|
if [ "${target}" == '' ]; then
|
||||||
|
echo "*** Non smarty ***";
|
||||||
|
TEXTDOMAINDIR=${base_folder}${mo_folder}.
|
||||||
|
# default is admin
|
||||||
|
TEXTDOMAIN=admin;
|
||||||
|
fi;
|
||||||
|
js_folder="layout/${TEXTDOMAIN}/javascript/";
|
||||||
|
|
||||||
|
error=0;
|
||||||
|
# this checks if the TEXTDOMAIN target actually exists
|
||||||
|
if [ ! -d "${base_folder}${js_folder}" ]; then
|
||||||
|
echo "Cannot find target javascript folder ${base_folder}${js_folder}";
|
||||||
|
error=1;
|
||||||
|
else
|
||||||
|
target_folder="${base_folder}${js_folder}";
|
||||||
|
fi;
|
||||||
|
|
||||||
|
if [ ${error} -eq 1 ]; then
|
||||||
|
exit;
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# locale gettext po to mo translator master
|
||||||
|
for file in $(ls -1 ${base_folder}../4dev/locale/*.po); do
|
||||||
|
file=$(basename $file .po);
|
||||||
|
echo "Translate language ${file}";
|
||||||
|
locale=$(echo "${file}" | cut -d "-" -f 1);
|
||||||
|
domain=$(echo "${file}" | cut -d "-" -f 2);
|
||||||
|
if [ ! -d "${base_folder}/includes/locale/${locale}/LC_MESSAGES/" ]; then
|
||||||
|
mkdir -p "${base_folder}/includes/locale/${locale}/LC_MESSAGES/";
|
||||||
|
fi;
|
||||||
|
msgfmt -o ${base_folder}/includes/locale/${locale}/LC_MESSAGES/${domain}.mo ${base_folder}${po_folder}${locale}-${domain}.po;
|
||||||
|
done;
|
||||||
|
|
||||||
|
rx_msgid_empty="^msgid \"\"";
|
||||||
|
rx_msgid="^msgid \"";
|
||||||
|
rx_msgstr="^msgstr \""
|
||||||
|
|
||||||
|
# quick copy string at the end
|
||||||
|
quick_copy='';
|
||||||
|
|
||||||
|
for language in ${language_list[*]}; do
|
||||||
|
# I don't know which one must be set, but I think at least LANGUAGE
|
||||||
|
case ${language} in
|
||||||
|
ja)
|
||||||
|
LANG=ja_JP.UTF-8;
|
||||||
|
ENCODING=UTF-8;
|
||||||
|
LANGUAGE=ja;
|
||||||
|
;;
|
||||||
|
en)
|
||||||
|
# was en_JP.UTF-8
|
||||||
|
LANG=en_US.UTF-8;
|
||||||
|
ENCODING=UTF-8;
|
||||||
|
LANGUAGE=en;
|
||||||
|
;;
|
||||||
|
esac;
|
||||||
|
# write only one for language and then symlink files
|
||||||
|
template_file=$(echo ${template_file_stump} | sed -e "s/##SUFFIX##//" | sed -e "s/##LANGUAGE##/${LANG}/");
|
||||||
|
original_file=$(echo ${template_file} | sed -e 's/\.TMP//g');
|
||||||
|
if [ "${FILE_MOVE}" -eq 0 ]; then
|
||||||
|
file=${target_folder}${template_file};
|
||||||
|
else
|
||||||
|
file=${target_folder}${original_file};
|
||||||
|
fi;
|
||||||
|
echo "===> Write translation file ${file}";
|
||||||
|
echo ". = normal, : = escape, x = skip";
|
||||||
|
# init line [aka don't touch this file]
|
||||||
|
echo "// AUTO FILL, changes will be overwritten" > $file;
|
||||||
|
echo "// source: ${suffix}, language: ${language}" >> $file;
|
||||||
|
echo "// Translation strings in the format" >> $file;
|
||||||
|
echo "// \"Original\":\"Translated\""$'\n' >> $file;
|
||||||
|
echo "var i18n = {" >> $file;
|
||||||
|
# translations stuff
|
||||||
|
# read the po file
|
||||||
|
pos=0; # do we add a , for the next line
|
||||||
|
cat "${base_folder}${po_folder}${language}-${TEXTDOMAIN}.po" |
|
||||||
|
while read str; do
|
||||||
|
# echo "S: ${str}";
|
||||||
|
# skip empty
|
||||||
|
if [[ "${str}" =~ ${rx_msgid_empty} ]]; then
|
||||||
|
# skip on empty
|
||||||
|
echo -n "x";
|
||||||
|
# msgid is left, msgstr is right
|
||||||
|
elif [[ "${str}" =~ ${rx_msgid} ]]; then
|
||||||
|
echo -n ".";
|
||||||
|
# open left side
|
||||||
|
# TODO: how to handle multi line strings: or don't use them
|
||||||
|
# extract from between ""
|
||||||
|
str_source=$(echo "${str}" | sed -e "s/^msgid \"//" | sed -e "s/\"$//");
|
||||||
|
# close right side, if not last add ,
|
||||||
|
if [ "${pos}" -eq 1 ]; then
|
||||||
|
echo -n "," >> $file;
|
||||||
|
fi;
|
||||||
|
# all " inside string need to be escaped
|
||||||
|
str_source=$(echo "${str_source}" | sed -e 's/"/\\"/g');
|
||||||
|
# fix with proper layout
|
||||||
|
echo -n "\"$str_source\":\"$(TEXTDOMAINDIR=${TEXTDOMAINDIR} LANGUAGE=${language} LANG=${LANG} gettext ${TEXTDOMAIN} "${str_source}")\"" >> $file;
|
||||||
|
pos=1;
|
||||||
|
elif [[ "${str}" =~ ${rx_msgstr} ]]; then
|
||||||
|
# open right side (ignore)
|
||||||
|
echo -n "";
|
||||||
|
else
|
||||||
|
# general ignore (anything between or comments)
|
||||||
|
echo -n "";
|
||||||
|
fi;
|
||||||
|
done;
|
||||||
|
|
||||||
|
echo "" >> $file;
|
||||||
|
echo "};" >> $file;
|
||||||
|
echo " [DONE]";
|
||||||
|
|
||||||
|
# on no move
|
||||||
|
if [ "${FILE_MOVE}" -eq 0 ]; then
|
||||||
|
echo "===> Confirm all changes in ${file} and then move data to original";
|
||||||
|
echo "";
|
||||||
|
quick_copy=${quick_copy}"mv ${template_file} ${original_file}"$'\n';
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# symlink to master file
|
||||||
|
for suffix in ${source_list[*]}; do
|
||||||
|
# symlink with full lang name
|
||||||
|
symlink_file[0]=$(echo ${template_file_stump} | sed -e "s/##SUFFIX##/${suffix}_/" | sed -e "s/##LANGUAGE##/${LANG}/" | sed -e 's/\.TMP//g');
|
||||||
|
# create second one with lang (no country) + encoding
|
||||||
|
symlink_file[1]=$(echo ${template_file_stump} | sed -e "s/##SUFFIX##/${suffix}_/" | sed -e "s/##LANGUAGE##/${LANGUAGE}\.${ENCODING}/" | sed -e 's/\.TMP//g');
|
||||||
|
for template_file in ${symlink_file[@]}; do
|
||||||
|
# if this is not symlink, create them
|
||||||
|
if [ ! -h "${template_file}" ]; then
|
||||||
|
echo "Create symlink: ${template_file}";
|
||||||
|
# symlik to original
|
||||||
|
cd "${target_folder}";
|
||||||
|
ln -sf "${original_file}" "${template_file}";
|
||||||
|
cd - >/dev/null;
|
||||||
|
fi;
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
done;
|
||||||
|
|
||||||
|
if [ "${FILE_MOVE}" -eq 0 ]; then
|
||||||
|
echo "";
|
||||||
|
echo "-- IN FOLDER: ${target_folder}";
|
||||||
|
echo "-- START: copy lines below to copy created over original --";
|
||||||
|
echo "${quick_copy}";
|
||||||
|
echo "-- END ----------------------------------------------------";
|
||||||
|
fi;
|
||||||
|
|
||||||
|
# __END__
|
||||||
@@ -3,7 +3,7 @@ base="/storage/var/www/html/developers/clemens/core_data/php_libraries/trunk/";
|
|||||||
# --testdox
|
# --testdox
|
||||||
# call with "t" to give verbose testdox output
|
# call with "t" to give verbose testdox output
|
||||||
# SUPPORTED: https://www.php.net/supported-versions.php
|
# SUPPORTED: https://www.php.net/supported-versions.php
|
||||||
# call with 7.3, 7.4, 8.0, 8.1 to force a certain php version
|
# call with 7.4, 8.0, 8.1 to force a certain php version
|
||||||
|
|
||||||
opt_testdox="";
|
opt_testdox="";
|
||||||
if [ "${1}" = "t" ] || [ "${2}" = "t" ]; then
|
if [ "${1}" = "t" ] || [ "${2}" = "t" ]; then
|
||||||
@@ -16,6 +16,7 @@ if [ ! -z "${1}" ]; then
|
|||||||
"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
||||||
"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
||||||
"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
||||||
|
"8.2") php_bin="/usr/bin/php8.2 "; ;;
|
||||||
*) echo "Not support PHP: ${1}"; exit; ;;
|
*) echo "Not support PHP: ${1}"; exit; ;;
|
||||||
esac;
|
esac;
|
||||||
fi;
|
fi;
|
||||||
@@ -25,6 +26,7 @@ if [ ! -z "${2}" ] && [ -z "${php_bin}" ]; then
|
|||||||
"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
"7.4") php_bin="/usr/bin/php7.4 "; ;;
|
||||||
"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
"8.0") php_bin="/usr/bin/php8.0 "; ;;
|
||||||
"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
"8.1") php_bin="/usr/bin/php8.1 "; ;;
|
||||||
|
"8.2") php_bin="/usr/bin/php8.2 "; ;;
|
||||||
*) echo "Not support PHP: ${1}"; exit; ;;
|
*) echo "Not support PHP: ${1}"; exit; ;;
|
||||||
esac;
|
esac;
|
||||||
fi;
|
fi;
|
||||||
|
|||||||
@@ -3,26 +3,26 @@
|
|||||||
CREATE OR REPLACE FUNCTION set_edit_access_uid() RETURNS TRIGGER AS
|
CREATE OR REPLACE FUNCTION set_edit_access_uid() RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
myrec RECORD;
|
myrec RECORD;
|
||||||
v_uid VARCHAR;
|
v_uid VARCHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
-- skip if NEW.name is not set
|
-- skip if NEW.name is not set
|
||||||
IF NEW.name IS NOT NULL AND NEW.name <> '' THEN
|
IF NEW.name IS NOT NULL AND NEW.name <> '' THEN
|
||||||
-- use NEW.name as base, remove all spaces
|
-- use NEW.name as base, remove all spaces
|
||||||
-- name data is already unique, so we do not need to worry about this here
|
-- name data is already unique, so we do not need to worry about this here
|
||||||
v_uid := REPLACE(NEW.name, ' ', '');
|
v_uid := REPLACE(NEW.name, ' ', '');
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
-- always set
|
-- always set
|
||||||
NEW.uid := v_uid;
|
NEW.uid := v_uid;
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
-- check if not set, then set
|
-- check if not set, then set
|
||||||
SELECT INTO myrec t.* FROM edit_access t WHERE edit_access_id = NEW.edit_access_id;
|
SELECT INTO myrec t.* FROM edit_access t WHERE edit_access_id = NEW.edit_access_id;
|
||||||
IF FOUND THEN
|
IF FOUND THEN
|
||||||
NEW.uid := v_uid;
|
NEW.uid := v_uid;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -3,26 +3,26 @@
|
|||||||
CREATE OR REPLACE FUNCTION set_edit_group_uid() RETURNS TRIGGER AS
|
CREATE OR REPLACE FUNCTION set_edit_group_uid() RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
myrec RECORD;
|
myrec RECORD;
|
||||||
v_uid VARCHAR;
|
v_uid VARCHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
-- skip if NEW.name is not set
|
-- skip if NEW.name is not set
|
||||||
IF NEW.name IS NOT NULL AND NEW.name <> '' THEN
|
IF NEW.name IS NOT NULL AND NEW.name <> '' THEN
|
||||||
-- use NEW.name as base, remove all spaces
|
-- use NEW.name as base, remove all spaces
|
||||||
-- name data is already unique, so we do not need to worry about this here
|
-- name data is already unique, so we do not need to worry about this here
|
||||||
v_uid := REPLACE(NEW.name, ' ', '');
|
v_uid := REPLACE(NEW.name, ' ', '');
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
-- always set
|
-- always set
|
||||||
NEW.uid := v_uid;
|
NEW.uid := v_uid;
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
-- check if not set, then set
|
-- check if not set, then set
|
||||||
SELECT INTO myrec t.* FROM edit_group t WHERE edit_group_id = NEW.edit_group_id;
|
SELECT INTO myrec t.* FROM edit_group t WHERE edit_group_id = NEW.edit_group_id;
|
||||||
IF FOUND THEN
|
IF FOUND THEN
|
||||||
NEW.uid := v_uid;
|
NEW.uid := v_uid;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -9,142 +9,142 @@ CREATE OR REPLACE FUNCTION edit_log_insert_trigger ()
|
|||||||
RETURNS TRIGGER AS
|
RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
start_date DATE := '2010-01-01';
|
start_date DATE := '2010-01-01';
|
||||||
end_date DATE;
|
end_date DATE;
|
||||||
timeformat TEXT := 'YYYY';
|
timeformat TEXT := 'YYYY';
|
||||||
selector TEXT := 'year';
|
selector TEXT := 'year';
|
||||||
base_table TEXT := 'edit_log';
|
base_table TEXT := 'edit_log';
|
||||||
_interval INTERVAL := '1 ' || selector;
|
_interval INTERVAL := '1 ' || selector;
|
||||||
_interval_next INTERVAL := '2 ' || selector;
|
_interval_next INTERVAL := '2 ' || selector;
|
||||||
table_name TEXT;
|
table_name TEXT;
|
||||||
-- compare date column
|
-- compare date column
|
||||||
compare_date DATE := NEW.event_date;
|
compare_date DATE := NEW.event_date;
|
||||||
compare_date_name TEXT := 'event_date';
|
compare_date_name TEXT := 'event_date';
|
||||||
-- the create commands
|
-- 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_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_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_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()';
|
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
|
||||||
-- 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
|
-- current table name
|
||||||
table_name := base_table || '_' || to_char(NEW.event_date, timeformat);
|
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
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
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 table 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 format(REPLACE( -- end date
|
EXECUTE format(REPLACE( -- end date
|
||||||
REPLACE( -- start date
|
REPLACE( -- start date
|
||||||
REPLACE( -- compare date name
|
REPLACE( -- compare date name
|
||||||
REPLACE( -- base name (inherit)
|
REPLACE( -- base name (inherit)
|
||||||
REPLACE( -- table name
|
REPLACE( -- table name
|
||||||
command_create_table,
|
command_create_table,
|
||||||
'{TABLE_NAME}',
|
'{TABLE_NAME}',
|
||||||
table_name
|
table_name
|
||||||
),
|
),
|
||||||
'{BASE_NAME}',
|
'{BASE_NAME}',
|
||||||
base_table
|
base_table
|
||||||
),
|
),
|
||||||
'{COMPARE_DATE_NAME}',
|
'{COMPARE_DATE_NAME}',
|
||||||
compare_date_name
|
compare_date_name
|
||||||
),
|
),
|
||||||
'{START_DATE}',
|
'{START_DATE}',
|
||||||
quote_literal(start_date)
|
quote_literal(start_date)
|
||||||
),
|
),
|
||||||
'{END_DATE}',
|
'{END_DATE}',
|
||||||
quote_literal(end_date)
|
quote_literal(end_date)
|
||||||
));
|
));
|
||||||
-- create all indexes and triggers
|
-- create all indexes and triggers
|
||||||
EXECUTE format(REPLACE(
|
EXECUTE format(REPLACE(
|
||||||
REPLACE(
|
REPLACE(
|
||||||
command_create_primary_key,
|
command_create_primary_key,
|
||||||
'{TABLE_NAME}',
|
'{TABLE_NAME}',
|
||||||
table_name
|
table_name
|
||||||
),
|
),
|
||||||
'{BASE_TABLE}',
|
'{BASE_TABLE}',
|
||||||
base_table
|
base_table
|
||||||
));
|
));
|
||||||
-- FK constraints
|
-- FK constraints
|
||||||
EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name));
|
EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name));
|
||||||
-- generic trigger
|
-- generic trigger
|
||||||
EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name));
|
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;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
-- 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;
|
||||||
-- other errors, insert into overlow
|
-- other errors, insert into overlow
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
-- 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
|
-- main insert run done, check if we have to create next months table
|
||||||
BEGIN
|
BEGIN
|
||||||
-- check if next month table exists
|
-- check if next month table exists
|
||||||
table_name := base_table || '_' || to_char((SELECT NEW.event_date + _interval)::DATE, timeformat);
|
table_name := base_table || '_' || to_char((SELECT NEW.event_date + _interval)::DATE, timeformat);
|
||||||
-- RAISE NOTICE 'SEARCH NEXT: %', table_name;
|
-- RAISE NOTICE 'SEARCH NEXT: %', table_name;
|
||||||
IF (SELECT to_regclass(table_name)) IS NULL THEN
|
IF (SELECT to_regclass(table_name)) IS NULL THEN
|
||||||
-- move inner interval same
|
-- move inner interval same
|
||||||
start_date := date_trunc(selector, NEW.event_date + _interval);
|
start_date := date_trunc(selector, NEW.event_date + _interval);
|
||||||
end_date := date_trunc(selector, NEW.event_date + _interval_next);
|
end_date := date_trunc(selector, NEW.event_date + _interval_next);
|
||||||
-- RAISE NOTICE 'CREATE NEXT: %', table_name;
|
-- RAISE NOTICE 'CREATE NEXT: %', table_name;
|
||||||
-- create table
|
-- create table
|
||||||
EXECUTE format(REPLACE( -- end date
|
EXECUTE format(REPLACE( -- end date
|
||||||
REPLACE( -- start date
|
REPLACE( -- start date
|
||||||
REPLACE( -- compare date name
|
REPLACE( -- compare date name
|
||||||
REPLACE( -- base name (inherit)
|
REPLACE( -- base name (inherit)
|
||||||
REPLACE( -- table name
|
REPLACE( -- table name
|
||||||
command_create_table,
|
command_create_table,
|
||||||
'{TABLE_NAME}',
|
'{TABLE_NAME}',
|
||||||
table_name
|
table_name
|
||||||
),
|
),
|
||||||
'{BASE_NAME}',
|
'{BASE_NAME}',
|
||||||
base_table
|
base_table
|
||||||
),
|
),
|
||||||
'{COMPARE_DATE_NAME}',
|
'{COMPARE_DATE_NAME}',
|
||||||
compare_date_name
|
compare_date_name
|
||||||
),
|
),
|
||||||
'{START_DATE}',
|
'{START_DATE}',
|
||||||
quote_literal(start_date)
|
quote_literal(start_date)
|
||||||
),
|
),
|
||||||
'{END_DATE}',
|
'{END_DATE}',
|
||||||
quote_literal(end_date)
|
quote_literal(end_date)
|
||||||
));
|
));
|
||||||
-- create all indexes and triggers
|
-- create all indexes and triggers
|
||||||
EXECUTE format(REPLACE(
|
EXECUTE format(REPLACE(
|
||||||
REPLACE(
|
REPLACE(
|
||||||
command_create_primary_key,
|
command_create_primary_key,
|
||||||
'{TABLE_NAME}',
|
'{TABLE_NAME}',
|
||||||
table_name
|
table_name
|
||||||
),
|
),
|
||||||
'{BASE_TABLE}',
|
'{BASE_TABLE}',
|
||||||
base_table
|
base_table
|
||||||
));
|
));
|
||||||
-- FK constraints
|
-- FK constraints
|
||||||
EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name));
|
EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name));
|
||||||
-- generic trigger
|
-- generic trigger
|
||||||
EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name));
|
EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name));
|
||||||
END IF;
|
END IF;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
RAISE NOTICE 'Failed to create next table: %', table_name;
|
RAISE NOTICE 'Failed to create next table: %', table_name;
|
||||||
END;
|
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.*);
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NULL;
|
RETURN NULL;
|
||||||
END
|
END
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -5,22 +5,22 @@ CREATE OR REPLACE FUNCTION set_login_user_id_set_date()
|
|||||||
RETURNS TRIGGER AS
|
RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
BEGIN
|
BEGIN
|
||||||
-- if new is not null/empty
|
-- if new is not null/empty
|
||||||
-- and old one is null or old one different new one
|
-- and old one is null or old one different new one
|
||||||
-- set NOW()
|
-- set NOW()
|
||||||
-- if new one is NULL
|
-- if new one is NULL
|
||||||
-- set NULL
|
-- set NULL
|
||||||
IF
|
IF
|
||||||
NEW.login_user_id IS NOT NULL AND NEW.login_user_id <> '' AND
|
NEW.login_user_id IS NOT NULL AND NEW.login_user_id <> '' AND
|
||||||
(OLD.login_user_id IS NULL OR NEW.login_user_id <> OLD.login_user_id)
|
(OLD.login_user_id IS NULL OR NEW.login_user_id <> OLD.login_user_id)
|
||||||
THEN
|
THEN
|
||||||
NEW.login_user_id_set_date = NOW();
|
NEW.login_user_id_set_date = NOW();
|
||||||
NEW.login_user_id_last_revalidate = NOW();
|
NEW.login_user_id_last_revalidate = NOW();
|
||||||
ELSIF NEW.login_user_id IS NULL OR NEW.login_user_id = '' THEN
|
ELSIF NEW.login_user_id IS NULL OR NEW.login_user_id = '' THEN
|
||||||
NEW.login_user_id_set_date = NULL;
|
NEW.login_user_id_set_date = NULL;
|
||||||
NEW.login_user_id_last_revalidate = NULL;
|
NEW.login_user_id_last_revalidate = NULL;
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ CREATE FUNCTION random_string(randomLength int)
|
|||||||
RETURNS text AS
|
RETURNS text AS
|
||||||
$$
|
$$
|
||||||
SELECT array_to_string(
|
SELECT array_to_string(
|
||||||
ARRAY(
|
ARRAY(
|
||||||
SELECT substring(
|
SELECT substring(
|
||||||
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
|
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
|
||||||
trunc(random() * 62)::int + 1,
|
trunc(random() * 62)::int + 1,
|
||||||
1
|
1
|
||||||
)
|
)
|
||||||
FROM generate_series(1, randomLength) AS gs(x)
|
FROM generate_series(1, randomLength) AS gs(x)
|
||||||
),
|
),
|
||||||
''
|
''
|
||||||
)
|
)
|
||||||
$$
|
$$
|
||||||
LANGUAGE SQL
|
LANGUAGE SQL
|
||||||
|
|||||||
@@ -4,12 +4,12 @@ CREATE OR REPLACE FUNCTION set_date()
|
|||||||
RETURNS TRIGGER AS
|
RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
BEGIN
|
BEGIN
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
NEW.date_created := 'now';
|
NEW.date_created := 'now';
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
NEW.date_updated := 'now';
|
NEW.date_updated := 'now';
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ CREATE OR REPLACE FUNCTION set_edit_generic()
|
|||||||
RETURNS TRIGGER AS
|
RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
random_length INT = 12; -- that should be long enough
|
random_length INT = 25; -- that should be long enough
|
||||||
BEGIN
|
BEGIN
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
NEW.date_created := 'now';
|
NEW.date_created := 'now';
|
||||||
NEW.cuid := random_string(random_length);
|
NEW.cuid := random_string(random_length);
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
NEW.date_updated := 'now';
|
NEW.date_updated := 'now';
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -5,17 +5,17 @@ CREATE OR REPLACE FUNCTION set_generic()
|
|||||||
RETURNS TRIGGER AS
|
RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
random_length INT = 32; -- long for massive data
|
random_length INT = 32; -- long for massive data
|
||||||
BEGIN
|
BEGIN
|
||||||
IF TG_OP = 'INSERT' THEN
|
IF TG_OP = 'INSERT' THEN
|
||||||
NEW.date_created := 'now';
|
NEW.date_created := 'now';
|
||||||
IF NEW.uid IS NULL THEN
|
IF NEW.uid IS NULL THEN
|
||||||
NEW.uid := random_string(random_length);
|
NEW.uid := random_string(random_length);
|
||||||
END IF;
|
END IF;
|
||||||
ELSIF TG_OP = 'UPDATE' THEN
|
ELSIF TG_OP = 'UPDATE' THEN
|
||||||
NEW.date_updated := 'now';
|
NEW.date_updated := 'now';
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -4,12 +4,12 @@ CREATE OR REPLACE FUNCTION set_uid()
|
|||||||
RETURNS TRIGGER AS
|
RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
DECLARE
|
DECLARE
|
||||||
random_length INT = 32; -- 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);
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -6,14 +6,14 @@
|
|||||||
-- RETURNS TRIGGER AS
|
-- RETURNS TRIGGER AS
|
||||||
-- $$
|
-- $$
|
||||||
-- BEGIN
|
-- BEGIN
|
||||||
-- IF TG_OP = 'INSERT' THEN
|
-- IF TG_OP = 'INSERT' THEN
|
||||||
-- NEW.date_created := clock_timestamp();
|
-- NEW.date_created := clock_timestamp();
|
||||||
-- NEW.user_created := current_user;
|
-- NEW.user_created := current_user;
|
||||||
-- ELSIF TG_OP = 'UPDATE' THEN
|
-- ELSIF TG_OP = 'UPDATE' THEN
|
||||||
-- NEW.date_updated := clock_timestamp();
|
-- NEW.date_updated := clock_timestamp();
|
||||||
-- NEW.user_updated := current_user;
|
-- NEW.user_updated := current_user;
|
||||||
-- END IF;
|
-- END IF;
|
||||||
-- RETURN NEW;
|
-- RETURN NEW;
|
||||||
-- END;
|
-- END;
|
||||||
-- $$
|
-- $$
|
||||||
-- LANGUAGE 'plpgsql';
|
-- LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
|
|
||||||
-- 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,
|
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||||
protected SMALLINT DEFAULT 0,
|
protected SMALLINT DEFAULT 0,
|
||||||
deleted SMALLINT DEFAULT 0,
|
deleted SMALLINT DEFAULT 0,
|
||||||
uid VARCHAR,
|
uid VARCHAR,
|
||||||
name VARCHAR UNIQUE,
|
name VARCHAR UNIQUE,
|
||||||
description VARCHAR,
|
description VARCHAR,
|
||||||
color VARCHAR,
|
color VARCHAR,
|
||||||
additional_acl JSONB
|
additional_acl JSONB
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,12 +7,12 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_access_data;
|
-- DROP TABLE edit_access_data;
|
||||||
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,
|
||||||
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,
|
||||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||||
name VARCHAR,
|
name VARCHAR,
|
||||||
value VARCHAR
|
value VARCHAR
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|
||||||
-- create a unique index for each attached data block for each edit access can
|
-- create a unique index for each attached data block for each edit access can
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_access_right;
|
-- DROP TABLE edit_access_right;
|
||||||
CREATE TABLE edit_access_right (
|
CREATE TABLE edit_access_right (
|
||||||
edit_access_right_id SERIAL PRIMARY KEY,
|
edit_access_right_id SERIAL PRIMARY KEY,
|
||||||
name VARCHAR,
|
name VARCHAR,
|
||||||
level SMALLINT,
|
level SMALLINT,
|
||||||
type VARCHAR,
|
type VARCHAR,
|
||||||
UNIQUE (level,type)
|
UNIQUE (level,type)
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
|
|
||||||
-- 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_access_id INT NOT NULL,
|
edit_access_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
edit_user_id INT NOT NULL,
|
edit_user_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
edit_access_right_id INT NOT NULL,
|
edit_access_right_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
edit_default SMALLINT DEFAULT 0,
|
edit_default SMALLINT DEFAULT 0,
|
||||||
enabled SMALLINT NOT NULL DEFAULT 0
|
enabled SMALLINT NOT NULL DEFAULT 0
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_generic;
|
-- DROP TABLE edit_generic;
|
||||||
CREATE TABLE edit_generic (
|
CREATE TABLE edit_generic (
|
||||||
cuid VARCHAR,
|
cuid VARCHAR,
|
||||||
date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(),
|
date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(),
|
||||||
date_updated TIMESTAMP WITHOUT TIME ZONE
|
date_updated TIMESTAMP WITHOUT TIME ZONE
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||
|
|
||||||
-- 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,
|
||||||
edit_scheme_id INT,
|
edit_scheme_id INT,
|
||||||
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,
|
||||||
edit_access_right_id INT NOT NULL,
|
edit_access_right_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||||
deleted SMALLINT DEFAULT 0,
|
deleted SMALLINT DEFAULT 0,
|
||||||
uid VARCHAR,
|
uid VARCHAR,
|
||||||
name VARCHAR,
|
name VARCHAR,
|
||||||
additional_acl JSONB
|
additional_acl JSONB
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
|
|
||||||
-- 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,
|
||||||
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,
|
long_name VARCHAR,
|
||||||
short_name VARCHAR, -- en_US, en or en_US@latin without encoding
|
short_name VARCHAR, -- en_US, en or en_US@latin without encoding
|
||||||
iso_name VARCHAR, -- should actually be encoding
|
iso_name VARCHAR, -- should actually be encoding
|
||||||
order_number INT
|
order_number INT
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,35 +7,35 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_log;
|
-- DROP TABLE edit_log;
|
||||||
CREATE TABLE edit_log (
|
CREATE TABLE edit_log (
|
||||||
edit_log_id SERIAL PRIMARY KEY,
|
edit_log_id SERIAL PRIMARY KEY,
|
||||||
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
euid INT, -- this is a foreign key, but I don't nedd to reference to it
|
||||||
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
|
FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL,
|
||||||
username VARCHAR,
|
username VARCHAR,
|
||||||
password VARCHAR,
|
password VARCHAR,
|
||||||
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||||
ip VARCHAR,
|
ip VARCHAR,
|
||||||
error TEXT,
|
error TEXT,
|
||||||
event TEXT,
|
event TEXT,
|
||||||
data_binary BYTEA,
|
data_binary BYTEA,
|
||||||
data TEXT,
|
data TEXT,
|
||||||
page VARCHAR,
|
page VARCHAR,
|
||||||
action VARCHAR,
|
action VARCHAR,
|
||||||
action_id VARCHAR,
|
action_id VARCHAR,
|
||||||
action_yes VARCHAR,
|
action_yes VARCHAR,
|
||||||
action_flag VARCHAR,
|
action_flag VARCHAR,
|
||||||
action_menu VARCHAR,
|
action_menu VARCHAR,
|
||||||
action_loaded VARCHAR,
|
action_loaded VARCHAR,
|
||||||
action_value VARCHAR,
|
action_value VARCHAR,
|
||||||
action_type VARCHAR,
|
action_type VARCHAR,
|
||||||
action_error VARCHAR,
|
action_error VARCHAR,
|
||||||
user_agent VARCHAR,
|
user_agent VARCHAR,
|
||||||
referer VARCHAR,
|
referer VARCHAR,
|
||||||
script_name VARCHAR,
|
script_name VARCHAR,
|
||||||
query_string VARCHAR,
|
query_string VARCHAR,
|
||||||
server_name VARCHAR,
|
server_name VARCHAR,
|
||||||
http_host VARCHAR,
|
http_host VARCHAR,
|
||||||
http_accept VARCHAR,
|
http_accept VARCHAR,
|
||||||
http_accept_charset VARCHAR,
|
http_accept_charset VARCHAR,
|
||||||
http_accept_encoding VARCHAR,
|
http_accept_encoding VARCHAR,
|
||||||
session_id VARCHAR
|
session_id VARCHAR
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,10 +7,10 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_menu_group;
|
-- DROP TABLE edit_menu_group;
|
||||||
CREATE TABLE edit_menu_group (
|
CREATE TABLE edit_menu_group (
|
||||||
edit_menu_group_id SERIAL PRIMARY KEY,
|
edit_menu_group_id SERIAL PRIMARY KEY,
|
||||||
name VARCHAR,
|
name VARCHAR,
|
||||||
flag VARCHAR,
|
flag VARCHAR,
|
||||||
order_number INT NOT NULL
|
order_number INT NOT NULL
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,16 +7,16 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_page;
|
-- DROP TABLE edit_page;
|
||||||
CREATE TABLE edit_page (
|
CREATE TABLE edit_page (
|
||||||
edit_page_id SERIAL PRIMARY KEY,
|
edit_page_id SERIAL PRIMARY KEY,
|
||||||
content_alias_edit_page_id INT, -- alias for page content, if the page content is defined on a different page, ege for ajax backend pages
|
content_alias_edit_page_id INT, -- alias for page content, if the page content is defined on a different page, ege for ajax backend pages
|
||||||
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE,
|
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||||
filename VARCHAR,
|
filename VARCHAR,
|
||||||
name VARCHAR UNIQUE,
|
name VARCHAR UNIQUE,
|
||||||
order_number INT NOT NULL,
|
order_number INT NOT NULL,
|
||||||
online SMALLINT NOT NULL DEFAULT 0,
|
online SMALLINT NOT NULL DEFAULT 0,
|
||||||
menu SMALLINT NOT NULL DEFAULT 0,
|
menu SMALLINT NOT NULL DEFAULT 0,
|
||||||
popup SMALLINT NOT NULL DEFAULT 0,
|
popup SMALLINT NOT NULL DEFAULT 0,
|
||||||
popup_x SMALLINT,
|
popup_x SMALLINT,
|
||||||
popup_y SMALLINT,
|
popup_y SMALLINT,
|
||||||
hostname VARCHAR
|
hostname VARCHAR
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||
|
|
||||||
-- 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,
|
||||||
edit_group_id INT NOT NULL,
|
edit_group_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
edit_page_id INT NOT NULL,
|
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,
|
||||||
edit_access_right_id INT NOT NULL,
|
edit_access_right_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
enabled SMALLINT NOT NULL DEFAULT 0
|
enabled SMALLINT NOT NULL DEFAULT 0
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,13 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_page_content;
|
-- DROP TABLE edit_page_content;
|
||||||
CREATE TABLE edit_page_content (
|
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,
|
||||||
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,
|
||||||
edit_access_right_id INT NOT NULL,
|
edit_access_right_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
uid VARCHAR UNIQUE,
|
uid VARCHAR UNIQUE,
|
||||||
name VARCHAR,
|
name VARCHAR,
|
||||||
order_number INT NOT NULL,
|
order_number INT NOT NULL,
|
||||||
online SMALLINT NOT NULL DEFAULT 0
|
online SMALLINT NOT NULL DEFAULT 0
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_page_menu_group;
|
-- DROP TABLE edit_page_menu_group;
|
||||||
CREATE TABLE edit_page_menu_group (
|
CREATE TABLE edit_page_menu_group (
|
||||||
edit_page_id INT NOT NULL,
|
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,
|
||||||
edit_menu_group_id INT NOT NULL,
|
edit_menu_group_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_menu_group_id) REFERENCES edit_menu_group (edit_menu_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
FOREIGN KEY (edit_menu_group_id) REFERENCES edit_menu_group (edit_menu_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_page_visible_group;
|
-- DROP TABLE edit_page_visible_group;
|
||||||
CREATE TABLE edit_page_visible_group (
|
CREATE TABLE edit_page_visible_group (
|
||||||
edit_page_id INT NOT NULL,
|
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,
|
||||||
edit_visible_group_id INT NOT NULL,
|
edit_visible_group_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_visible_group_id) REFERENCES edit_visible_group (edit_visible_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
FOREIGN KEY (edit_visible_group_id) REFERENCES edit_visible_group (edit_visible_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -7,11 +7,11 @@
|
|||||||
|
|
||||||
-- 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,
|
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,
|
||||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||||
name VARCHAR,
|
name VARCHAR,
|
||||||
value VARCHAR,
|
value VARCHAR,
|
||||||
dynamic SMALLINT NOT NULL DEFAULT 0
|
dynamic SMALLINT NOT NULL DEFAULT 0
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,10 +7,10 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_scheme;
|
-- DROP TABLE edit_scheme;
|
||||||
CREATE TABLE edit_scheme (
|
CREATE TABLE edit_scheme (
|
||||||
edit_scheme_id SERIAL PRIMARY KEY,
|
edit_scheme_id SERIAL PRIMARY KEY,
|
||||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||||
name VARCHAR,
|
name VARCHAR,
|
||||||
header_color VARCHAR,
|
header_color VARCHAR,
|
||||||
css_file VARCHAR,
|
css_file VARCHAR,
|
||||||
template VARCHAR
|
template VARCHAR
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,6 +7,6 @@
|
|||||||
|
|
||||||
-- DROP TABLE temp_files;
|
-- DROP TABLE temp_files;
|
||||||
CREATE TABLE temp_files (
|
CREATE TABLE temp_files (
|
||||||
filename VARCHAR,
|
filename VARCHAR,
|
||||||
folder VARCHAR
|
folder VARCHAR
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -7,63 +7,63 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_user;
|
-- DROP TABLE edit_user;
|
||||||
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
|
||||||
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
edit_language_id INT NOT NULL,
|
edit_language_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
edit_group_id INT NOT NULL,
|
edit_group_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
edit_scheme_id INT,
|
edit_scheme_id INT,
|
||||||
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,
|
||||||
edit_access_right_id INT NOT NULL,
|
edit_access_right_id INT NOT NULL,
|
||||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
-- username/password
|
-- username/password
|
||||||
username VARCHAR UNIQUE,
|
username VARCHAR UNIQUE,
|
||||||
password VARCHAR,
|
password VARCHAR,
|
||||||
-- name block
|
-- name block
|
||||||
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,
|
||||||
-- email
|
-- email
|
||||||
email VARCHAR,
|
email VARCHAR,
|
||||||
-- eanbled/deleted flag
|
-- eanbled/deleted flag
|
||||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||||
deleted SMALLINT NOT NULL DEFAULT 0,
|
deleted SMALLINT NOT NULL DEFAULT 0,
|
||||||
-- general flags
|
-- general flags
|
||||||
strict SMALLINT DEFAULT 0,
|
strict SMALLINT DEFAULT 0,
|
||||||
locked SMALLINT DEFAULT 0,
|
locked SMALLINT DEFAULT 0,
|
||||||
protected SMALLINT NOT NULL DEFAULT 0,
|
protected SMALLINT NOT NULL DEFAULT 0,
|
||||||
-- legacy, debug flags
|
-- legacy, debug flags
|
||||||
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,
|
||||||
-- is admin user
|
-- is admin user
|
||||||
admin SMALLINT NOT NULL DEFAULT 0,
|
admin SMALLINT NOT NULL DEFAULT 0,
|
||||||
-- last login log
|
-- last login log
|
||||||
last_login TIMESTAMP WITHOUT TIME ZONE,
|
last_login TIMESTAMP WITHOUT TIME ZONE,
|
||||||
-- login error
|
-- login error
|
||||||
login_error_count INT DEFAULT 0,
|
login_error_count INT DEFAULT 0,
|
||||||
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,
|
||||||
-- time locked
|
-- time locked
|
||||||
lock_until TIMESTAMP WITHOUT TIME ZONE,
|
lock_until TIMESTAMP WITHOUT TIME ZONE,
|
||||||
lock_after TIMESTAMP WITHOUT TIME ZONE,
|
lock_after TIMESTAMP WITHOUT TIME ZONE,
|
||||||
-- password change
|
-- password change
|
||||||
password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed
|
password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed
|
||||||
password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval
|
password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval
|
||||||
password_reset_time TIMESTAMP WITHOUT TIME ZONE, -- when the password reset was requested
|
password_reset_time TIMESTAMP WITHOUT TIME ZONE, -- when the password reset was requested
|
||||||
password_reset_uid VARCHAR, -- the uid to access the password reset page
|
password_reset_uid VARCHAR, -- the uid to access the password reset page
|
||||||
-- _GET login id for direct login
|
-- _GET login id for direct login
|
||||||
login_user_id VARCHAR UNIQUE, -- the loginUserId, at least 32 chars
|
login_user_id VARCHAR UNIQUE, -- the loginUserId, at least 32 chars
|
||||||
login_user_id_set_date TIMESTAMP WITHOUT TIME ZONE, -- when above uid was set
|
login_user_id_set_date TIMESTAMP WITHOUT TIME ZONE, -- when above uid was set
|
||||||
login_user_id_last_revalidate TIMESTAMP WITHOUT TIME ZONE, -- when the last login was done with user name and password
|
login_user_id_last_revalidate TIMESTAMP WITHOUT TIME ZONE, -- when the last login was done with user name and password
|
||||||
login_user_id_valid_from TIMESTAMP WITHOUT TIME ZONE, -- if set, from when the above uid is valid
|
login_user_id_valid_from TIMESTAMP WITHOUT TIME ZONE, -- if set, from when the above uid is valid
|
||||||
login_user_id_valid_until TIMESTAMP WITHOUT TIME ZONE, -- if set, until when the above uid is valid
|
login_user_id_valid_until TIMESTAMP WITHOUT TIME ZONE, -- if set, until when the above uid is valid
|
||||||
login_user_id_revalidate_after INTERVAL, -- user must login to revalidated loginUserId after set days, 0 for forever
|
login_user_id_revalidate_after INTERVAL, -- user must login to revalidated loginUserId after set days, 0 for forever
|
||||||
login_user_id_locked SMALLINT DEFAULT 0, -- lock for loginUserId, but still allow normal login
|
login_user_id_locked SMALLINT DEFAULT 0, -- lock for loginUserId, but still allow normal login
|
||||||
-- additional ACL json block
|
-- additional ACL json block
|
||||||
additional_acl JSONB -- additional ACL as JSON string (can be set by other pages)
|
additional_acl JSONB -- additional ACL as JSON string (can be set by other pages)
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|
||||||
-- create unique index
|
-- create unique index
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
-- DROP TABLE edit_visible_group;
|
-- DROP TABLE edit_visible_group;
|
||||||
CREATE TABLE edit_visible_group (
|
CREATE TABLE edit_visible_group (
|
||||||
edit_visible_group_id SERIAL PRIMARY KEY,
|
edit_visible_group_id SERIAL PRIMARY KEY,
|
||||||
name VARCHAR,
|
name VARCHAR,
|
||||||
flag VARCHAR
|
flag VARCHAR
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
-- DROP TABLE generic;
|
-- DROP TABLE generic;
|
||||||
CREATE TABLE generic (
|
CREATE TABLE generic (
|
||||||
date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(),
|
date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(),
|
||||||
date_updated TIMESTAMP WITHOUT TIME ZONE,
|
date_updated TIMESTAMP WITHOUT TIME ZONE,
|
||||||
uid VARCHAR
|
uid VARCHAR
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ rm -f $tmpf_web;
|
|||||||
echo ".*.swp" >> $tmpf_web;
|
echo ".*.swp" >> $tmpf_web;
|
||||||
echo "._*" >> $tmpf_web;
|
echo "._*" >> $tmpf_web;
|
||||||
echo ".DS_Store" >> $tmpf_web;
|
echo ".DS_Store" >> $tmpf_web;
|
||||||
|
echo ".user.ini" >> $tmpf_web;
|
||||||
echo ".svn" >> $tmpf_web;
|
echo ".svn" >> $tmpf_web;
|
||||||
echo ".svnignore" >> $tmpf_web;
|
echo ".svnignore" >> $tmpf_web;
|
||||||
echo ".git" >> $tmpf_web;
|
echo ".git" >> $tmpf_web;
|
||||||
|
|||||||
47
4dev/tests/CoreLibsAdminEditPageTest.php
Normal file
47
4dev/tests/CoreLibsAdminEditPageTest.php
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace tests;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for Admin\EditPage
|
||||||
|
* @coversDefaultClass \CoreLibs\Admin\EditPage
|
||||||
|
* @testdox \CoreLibs\Admin\EditPage method tests
|
||||||
|
*/
|
||||||
|
final class CoreLibsAdminEditPageTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
if (!extension_loaded('pgsql')) {
|
||||||
|
$this->markTestSkipped(
|
||||||
|
'The PgSQL extension is not available.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @testdox Admin\EditPage Class tests
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testAdminEditPage()
|
||||||
|
{
|
||||||
|
/* $this->assertTrue(true, 'ACL Login Tests not implemented');
|
||||||
|
$this->markTestIncomplete(
|
||||||
|
'ACL\Login Tests have not yet been implemented'
|
||||||
|
); */
|
||||||
|
$this->markTestSkipped('No implementation for Admin\EditPage at the moment');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
329
4dev/tests/CoreLibsCheckColorsTest.php
Normal file
329
4dev/tests/CoreLibsCheckColorsTest.php
Normal file
@@ -0,0 +1,329 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace tests;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for Check\Colors
|
||||||
|
* @coversDefaultClass \CoreLibs\Check\Colors
|
||||||
|
* @testdox \CoreLibs\Check\Colors method tests
|
||||||
|
*/
|
||||||
|
final class CoreLibsCheckColorsTest extends TestCase
|
||||||
|
{
|
||||||
|
public function validateColorProvider(): array
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
0: input color string
|
||||||
|
1: flag (or flags to set)
|
||||||
|
2: expected result (bool)
|
||||||
|
*/
|
||||||
|
return [
|
||||||
|
// * hex
|
||||||
|
'valid hex rgb, flag ALL (default)' => [
|
||||||
|
'#ab12cd',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hex rgb, flag ALL' => [
|
||||||
|
'#ab12cd',
|
||||||
|
\CoreLibs\Check\Colors::ALL,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hex rgb, flag HEX_RGB' => [
|
||||||
|
'#ab12cd',
|
||||||
|
\CoreLibs\Check\Colors::HEX_RGB,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hex rgb, wrong flag' => [
|
||||||
|
'#ab12cd',
|
||||||
|
\CoreLibs\Check\Colors::RGB,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
// error
|
||||||
|
'invalid hex rgb A' => [
|
||||||
|
'#ab12zz',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'invalid hex rgb B' => [
|
||||||
|
'#ZyQfo',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
// other valid hex checks
|
||||||
|
'valid hex rgb, alt A' => [
|
||||||
|
'#AB12cd',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// * hax alpha
|
||||||
|
'valid hex rgb alpha, flag ALL (default)' => [
|
||||||
|
'#ab12cd12',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hex rgb alpha, flag ALL' => [
|
||||||
|
'#ab12cd12',
|
||||||
|
\CoreLibs\Check\Colors::ALL,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hex rgb alpha, flag HEX_RGBA' => [
|
||||||
|
'#ab12cd12',
|
||||||
|
\CoreLibs\Check\Colors::HEX_RGBA,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hex rgb alpha, wrong flag' => [
|
||||||
|
'#ab12cd12',
|
||||||
|
\CoreLibs\Check\Colors::RGB,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
// error
|
||||||
|
'invalid hex rgb alpha A' => [
|
||||||
|
'#ab12dd1',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'invalid hex rgb alpha B' => [
|
||||||
|
'#ab12ddzz',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'valid hex rgb alpha, alt A' => [
|
||||||
|
'#ab12cdEE',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// * rgb
|
||||||
|
'valid rgb, flag ALL (default)' => [
|
||||||
|
'rgb(255, 10, 20)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid rgb, flag ALL' => [
|
||||||
|
'rgb(255, 10, 20)',
|
||||||
|
\CoreLibs\Check\Colors::ALL,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid rgb, flag RGB' => [
|
||||||
|
'rgb(255, 10, 20)',
|
||||||
|
\CoreLibs\Check\Colors::RGB,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid rgb, wrong flag' => [
|
||||||
|
'rgb(255, 10, 20)',
|
||||||
|
\CoreLibs\Check\Colors::HEX_RGB,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
// error
|
||||||
|
'invalid rgb A' => [
|
||||||
|
'rgb(356, 10, 20)',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
// other valid rgb conbinations
|
||||||
|
'valid rgb, alt A (percent)' => [
|
||||||
|
'rgb(100%, 10%, 20%)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// TODO check all % and non percent combinations
|
||||||
|
'valid rgb, alt B (percent, mix)' => [
|
||||||
|
'rgb(100%, 10, 40)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// * rgb alpha
|
||||||
|
'valid rgba, flag ALL (default)' => [
|
||||||
|
'rgba(255, 10, 20, 0.5)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid rgba, flag ALL' => [
|
||||||
|
'rgba(255, 10, 20, 0.5)',
|
||||||
|
\CoreLibs\Check\Colors::ALL,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid rgba, flag RGB' => [
|
||||||
|
'rgba(255, 10, 20, 0.5)',
|
||||||
|
\CoreLibs\Check\Colors::RGBA,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid rgba, wrong flag' => [
|
||||||
|
'rgba(255, 10, 20, 0.5)',
|
||||||
|
\CoreLibs\Check\Colors::HEX_RGB,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
// error
|
||||||
|
'invalid rgba A' => [
|
||||||
|
'rgba(356, 10, 20, 0.5)',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
// other valid rgba combinations
|
||||||
|
'valid rgba, alt A (percent)' => [
|
||||||
|
'rgba(100%, 10%, 20%, 0.5)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// TODO check all % and non percent combinations
|
||||||
|
'valid rgba, alt B (percent, mix)' => [
|
||||||
|
'rgba(100%, 10, 40, 0.5)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// TODO check all % and non percent combinations with percent transparent
|
||||||
|
'valid rgba, alt C (percent transparent)' => [
|
||||||
|
'rgba(100%, 10%, 20%, 50%)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
/*
|
||||||
|
// hsl
|
||||||
|
'hsl(100, 50%, 60%)',
|
||||||
|
'hsl(100, 50.5%, 60.5%)',
|
||||||
|
'hsla(100, 50%, 60%)',
|
||||||
|
'hsla(100, 50.5%, 60.5%)',
|
||||||
|
'hsla(100, 50%, 60%, 0.5)',
|
||||||
|
'hsla(100, 50.5%, 60.5%, 0.5)',
|
||||||
|
'hsla(100, 50%, 60%, 50%)',
|
||||||
|
'hsla(100, 50.5%, 60.5%, 50%)',
|
||||||
|
*/
|
||||||
|
// * hsl
|
||||||
|
'valid hsl, flag ALL (default)' => [
|
||||||
|
'hsl(100, 50%, 60%)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hsl, flag ALL' => [
|
||||||
|
'hsl(100, 50%, 60%)',
|
||||||
|
\CoreLibs\Check\Colors::ALL,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hsl, flag RGB' => [
|
||||||
|
'hsl(100, 50%, 60%)',
|
||||||
|
\CoreLibs\Check\Colors::HSL,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hsl, wrong flag' => [
|
||||||
|
'hsl(100, 50%, 60%)',
|
||||||
|
\CoreLibs\Check\Colors::HEX_RGB,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'invalid hsl A' => [
|
||||||
|
'hsl(500, 50%, 60%)',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'valid hsl, alt A' => [
|
||||||
|
'hsl(100, 50.5%, 60.5%)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// * hsl alpha
|
||||||
|
'valid hsla, flag ALL (default)' => [
|
||||||
|
'hsla(100, 50%, 60%, 0.5)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hsla, flag ALL' => [
|
||||||
|
'hsla(100, 50%, 60%, 0.5)',
|
||||||
|
\CoreLibs\Check\Colors::ALL,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hsla, flag RGB' => [
|
||||||
|
'hsla(100, 50%, 60%, 0.5)',
|
||||||
|
\CoreLibs\Check\Colors::HSLA,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hsla, wrong flag' => [
|
||||||
|
'hsla(100, 50%, 60%, 0.5)',
|
||||||
|
\CoreLibs\Check\Colors::HEX_RGB,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'invalid hsla A' => [
|
||||||
|
'hsla(500, 50%, 60%, 0.5)',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'valid hsla, alt A (percent alpha' => [
|
||||||
|
'hsla(100, 50%, 60%, 50%)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
'valid hsla, alt A (percent alpha' => [
|
||||||
|
'hsla(100, 50.5%, 60.5%, 50%)',
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// * combined flag checks
|
||||||
|
'valid rgb, flag RGB|RGBA' => [
|
||||||
|
'rgb(100%, 10%, 20%)',
|
||||||
|
\CoreLibs\Check\Colors::RGB | \CoreLibs\Check\Colors::RGBA,
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
// TODO other combined flag checks all combinations
|
||||||
|
// * invalid string
|
||||||
|
'invalid string A' => [
|
||||||
|
'invalid string',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'invalid string B' => [
|
||||||
|
'(hsla(100, 100, 100))',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
'invalid string C' => [
|
||||||
|
'hsla(100, 100, 100',
|
||||||
|
null,
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @covers ::validateColor
|
||||||
|
* @dataProvider validateColorProvider
|
||||||
|
* @testdox validateColor $input with flags $flags be $expected [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $input
|
||||||
|
* @param int|null $flags
|
||||||
|
* @param bool $expected
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testValidateColor(string $input, ?int $flags, bool $expected)
|
||||||
|
{
|
||||||
|
if ($flags === null) {
|
||||||
|
$result = \CoreLibs\Check\Colors::validateColor($input);
|
||||||
|
} else {
|
||||||
|
$result = \CoreLibs\Check\Colors::validateColor($input, $flags);
|
||||||
|
}
|
||||||
|
$this->assertEquals(
|
||||||
|
$expected,
|
||||||
|
$result
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @covers ::validateColor
|
||||||
|
* @testWith [99]
|
||||||
|
* @testdox Check Exception throw for $flag
|
||||||
|
*
|
||||||
|
* @param int $flag
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testValidateColorException(int $flag): void
|
||||||
|
{
|
||||||
|
$this->expectException(\Exception::class);
|
||||||
|
\CoreLibs\Check\Colors::validateColor('#ffffff', $flag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -16,7 +16,6 @@ use PHPUnit\Framework\TestCase;
|
|||||||
*/
|
*/
|
||||||
final class CoreLibsConvertByteTest extends TestCase
|
final class CoreLibsConvertByteTest extends TestCase
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undocumented function
|
* Undocumented function
|
||||||
*
|
*
|
||||||
@@ -24,7 +23,31 @@ final class CoreLibsConvertByteTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function byteProvider(): array
|
public function byteProvider(): array
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* 0: input string
|
||||||
|
* 1: default flags
|
||||||
|
* 2: BYTE_FORMAT_SI
|
||||||
|
* 3: BYTE_FORMAT_NOSPACE
|
||||||
|
* 4: BYTE_FORMAT_ADJUST
|
||||||
|
* 5: BYTE_FORMAT_SI | BYTE_FORMAT_NOSPACE
|
||||||
|
*/
|
||||||
return [
|
return [
|
||||||
|
'string number' => [
|
||||||
|
0 => '1024',
|
||||||
|
1 => '1 KB',
|
||||||
|
2 => '1.02 KiB',
|
||||||
|
3 => '1KB',
|
||||||
|
4 => '1.00 KB',
|
||||||
|
5 => '1.02KiB',
|
||||||
|
],
|
||||||
|
'invalud string number' => [
|
||||||
|
0 => '1024 MB',
|
||||||
|
1 => '1024 MB',
|
||||||
|
2 => '1024 MB',
|
||||||
|
3 => '1024 MB',
|
||||||
|
4 => '1024 MB',
|
||||||
|
5 => '1024 MB',
|
||||||
|
],
|
||||||
'negative number' => [
|
'negative number' => [
|
||||||
0 => -123123123,
|
0 => -123123123,
|
||||||
1 => '-117.42 MB',
|
1 => '-117.42 MB',
|
||||||
@@ -217,6 +240,41 @@ final class CoreLibsConvertByteTest extends TestCase
|
|||||||
\CoreLibs\Convert\Byte::stringByteFormat($input, \CoreLibs\Convert\Byte::BYTE_FORMAT_SI)
|
\CoreLibs\Convert\Byte::stringByteFormat($input, \CoreLibs\Convert\Byte::BYTE_FORMAT_SI)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exceptions tests
|
||||||
|
*
|
||||||
|
* @covers ::humanReadableByteFormat
|
||||||
|
* @testWith [99]
|
||||||
|
* @testdox Test exception for humanReadableByteFormat with flag $flag
|
||||||
|
*
|
||||||
|
* @param int $flag
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testHumanReadableByteFormatException(int $flag): void
|
||||||
|
{
|
||||||
|
$this->expectException(\Exception::class);
|
||||||
|
\CoreLibs\Convert\Byte::humanReadableByteFormat(12, $flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exceptions tests
|
||||||
|
* can only be 4, try 1,2 and over
|
||||||
|
*
|
||||||
|
* @covers ::stringByteFormat
|
||||||
|
* @testWith [1]
|
||||||
|
* [2]
|
||||||
|
* [99]
|
||||||
|
* @testdox Test exception for stringByteFormat with flag $flag
|
||||||
|
*
|
||||||
|
* @param int $flag
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testStringByteFormatException(int $flag): void
|
||||||
|
{
|
||||||
|
$this->expectException(\Exception::class);
|
||||||
|
\CoreLibs\Convert\Byte::stringByteFormat(12, $flag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// __END__
|
// __END__
|
||||||
|
|||||||
@@ -122,6 +122,8 @@ final class CoreLibsConvertColorsTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function rgb2hslAndhsbList(): array
|
public function rgb2hslAndhsbList(): array
|
||||||
{
|
{
|
||||||
|
// if hsb_from or hsl_from is set, this will be used in hsb/hsl convert
|
||||||
|
// hsb_rgb is used for adjusted rgb valus due to round error to in
|
||||||
return [
|
return [
|
||||||
'valid gray' => [
|
'valid gray' => [
|
||||||
'rgb' => [12, 12, 12],
|
'rgb' => [12, 12, 12],
|
||||||
@@ -137,6 +139,16 @@ final class CoreLibsConvertColorsTest extends TestCase
|
|||||||
'hsl' => [211.6, 90.5, 41.2],
|
'hsl' => [211.6, 90.5, 41.2],
|
||||||
'valid' => true,
|
'valid' => true,
|
||||||
],
|
],
|
||||||
|
// hsg/hsl with 360 which is seen as 0
|
||||||
|
'valid color hue 360' => [
|
||||||
|
'rgb' => [200, 10, 10],
|
||||||
|
'hsb' => [0, 95, 78.0],
|
||||||
|
'hsb_from' => [360, 95, 78.0],
|
||||||
|
'hsb_rgb' => [199, 10, 10], // should be rgb, but rounding error
|
||||||
|
'hsl' => [0.0, 90.5, 41.2],
|
||||||
|
'hsl_from' => [360.0, 90.5, 41.2],
|
||||||
|
'valid' => true,
|
||||||
|
],
|
||||||
// invalid values
|
// invalid values
|
||||||
'invalid color' => [
|
'invalid color' => [
|
||||||
'rgb' => [-12, 300, 12],
|
'rgb' => [-12, 300, 12],
|
||||||
@@ -176,9 +188,9 @@ final class CoreLibsConvertColorsTest extends TestCase
|
|||||||
$list = [];
|
$list = [];
|
||||||
foreach ($this->rgb2hslAndhsbList() as $name => $values) {
|
foreach ($this->rgb2hslAndhsbList() as $name => $values) {
|
||||||
$list[$name . ', hsb to rgb'] = [
|
$list[$name . ', hsb to rgb'] = [
|
||||||
0 => $values['hsb'][0],
|
0 => $values['hsb_from'][0] ?? $values['hsb'][0],
|
||||||
1 => $values['hsb'][1],
|
1 => $values['hsb_from'][1] ?? $values['hsb'][1],
|
||||||
2 => $values['hsb'][2],
|
2 => $values['hsb_from'][2] ?? $values['hsb'][2],
|
||||||
3 => $values['valid'] ? $values['hsb_rgb'] : false
|
3 => $values['valid'] ? $values['hsb_rgb'] : false
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -214,9 +226,9 @@ final class CoreLibsConvertColorsTest extends TestCase
|
|||||||
$list = [];
|
$list = [];
|
||||||
foreach ($this->rgb2hslAndhsbList() as $name => $values) {
|
foreach ($this->rgb2hslAndhsbList() as $name => $values) {
|
||||||
$list[$name . ', hsl to rgb'] = [
|
$list[$name . ', hsl to rgb'] = [
|
||||||
0 => $values['hsl'][0],
|
0 => $values['hsl_from'][0] ?? $values['hsl'][0],
|
||||||
1 => $values['hsl'][1],
|
1 => $values['hsl_from'][1] ?? $values['hsl'][1],
|
||||||
2 => $values['hsl'][2],
|
2 => $values['hsl_from'][2] ?? $values['hsl'][2],
|
||||||
3 => $values['valid'] ? $values['rgb'] : false
|
3 => $values['valid'] ? $values['rgb'] : false
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -382,6 +394,27 @@ final class CoreLibsConvertColorsTest extends TestCase
|
|||||||
\CoreLibs\Convert\Colors::hsl2rgb($input_h, $input_s, $input_l)
|
\CoreLibs\Convert\Colors::hsl2rgb($input_h, $input_s, $input_l)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* edge case check hsl/hsb and hue 360 (= 0)
|
||||||
|
*
|
||||||
|
* @covers ::hsl2rgb
|
||||||
|
* @covers ::hsb2rgb
|
||||||
|
* @testdox hsl2rgb/hsb2rgb hue 360 valid check
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testHslHsb360hue(): void
|
||||||
|
{
|
||||||
|
$this->assertNotFalse(
|
||||||
|
\CoreLibs\Convert\Colors::hsl2rgb(360.0, 90.5, 41.2),
|
||||||
|
'HSL to RGB with 360 hue'
|
||||||
|
);
|
||||||
|
$this->assertNotFalse(
|
||||||
|
\CoreLibs\Convert\Colors::hsb2rgb(360, 95, 78.0),
|
||||||
|
'HSB to RGB with 360 hue'
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// __END__
|
// __END__
|
||||||
|
|||||||
@@ -113,7 +113,10 @@ final class CoreLibsCreateEmailTest extends TestCase
|
|||||||
'日本語カタカナパ',
|
'日本語カタカナパ',
|
||||||
'ISO-2022-JP',
|
'ISO-2022-JP',
|
||||||
true,
|
true,
|
||||||
'"=?ISO-2022-JP?B?GyRCRnxLXDhsGyhCPz8/Pz8=?=" <test@test.com>'
|
// was ok php 8.1
|
||||||
|
// '"=?ISO-2022-JP?B?GyRCRnxLXDhsGyhCPz8/Pz8=?=" <test@test.com>'
|
||||||
|
// below ok php 8.1.12, 2022/12/9
|
||||||
|
'"=?ISO-2022-JP?B?GyRCRnxLXDhsGyhCPz8/Pz8/?=" <test@test.com>'
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -124,6 +127,11 @@ final class CoreLibsCreateEmailTest extends TestCase
|
|||||||
* @dataProvider encodeEmailNameProvider
|
* @dataProvider encodeEmailNameProvider
|
||||||
* @testdox encode email $email, name $name, encoding $encoding, folding $kv_folding will be $expected [$_dataName]
|
* @testdox encode email $email, name $name, encoding $encoding, folding $kv_folding will be $expected [$_dataName]
|
||||||
*
|
*
|
||||||
|
* @param string $email
|
||||||
|
* @param string|null $name
|
||||||
|
* @param string|null $encoding
|
||||||
|
* @param bool|null $kv_folding
|
||||||
|
* @param string $expected
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function testEncodeEmailName(
|
public function testEncodeEmailName(
|
||||||
|
|||||||
@@ -155,37 +155,57 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
$db->dbExec("DROP TABLE table_without_primary_key");
|
$db->dbExec("DROP TABLE table_without_primary_key");
|
||||||
$db->dbExec("DROP TABLE test_meta");
|
$db->dbExec("DROP TABLE test_meta");
|
||||||
}
|
}
|
||||||
$base_table = "uid VARCHAR, " // uid is for internal reference tests
|
// uid is for internal reference tests
|
||||||
. "row_int INT, "
|
$base_table = <<<EOM
|
||||||
. "row_numeric NUMERIC, "
|
uid VARCHAR,
|
||||||
. "row_varchar VARCHAR, "
|
row_int INT,
|
||||||
. "row_varchar_literal VARCHAR, "
|
row_numeric NUMERIC,
|
||||||
. "row_json JSON, "
|
row_varchar VARCHAR,
|
||||||
. "row_jsonb JSONB, "
|
row_varchar_literal VARCHAR,
|
||||||
. "row_bytea BYTEA, "
|
row_json JSON,
|
||||||
. "row_timestamp TIMESTAMP WITHOUT TIME ZONE, "
|
row_jsonb JSONB,
|
||||||
. "row_date DATE, "
|
row_bytea BYTEA,
|
||||||
. "row_interval INTERVAL, "
|
row_timestamp TIMESTAMP WITHOUT TIME ZONE,
|
||||||
. "row_array_int INT ARRAY, "
|
row_date DATE,
|
||||||
. "row_array_varchar VARCHAR ARRAY"
|
row_interval INTERVAL,
|
||||||
. ") WITHOUT OIDS";
|
row_array_int INT ARRAY,
|
||||||
|
row_array_varchar VARCHAR ARRAY
|
||||||
|
)
|
||||||
|
WITHOUT OIDS
|
||||||
|
EOM;
|
||||||
// create the tables
|
// create the tables
|
||||||
$db->dbExec(
|
$db->dbExec(
|
||||||
"CREATE TABLE table_with_primary_key ("
|
// primary key name is table + '_id'
|
||||||
|
<<<EOM
|
||||||
|
CREATE TABLE table_with_primary_key (
|
||||||
|
table_with_primary_key_id SERIAL PRIMARY KEY,
|
||||||
|
$base_table
|
||||||
|
EOM
|
||||||
|
/* "CREATE TABLE table_with_primary_key ("
|
||||||
// primary key name is table + '_id'
|
// primary key name is table + '_id'
|
||||||
. "table_with_primary_key_id SERIAL PRIMARY KEY, "
|
. "table_with_primary_key_id SERIAL PRIMARY KEY, "
|
||||||
. $base_table
|
. $base_table */
|
||||||
);
|
);
|
||||||
$db->dbExec(
|
$db->dbExec(
|
||||||
"CREATE TABLE table_without_primary_key ("
|
<<<EOM
|
||||||
. $base_table
|
CREATE TABLE table_without_primary_key (
|
||||||
|
$base_table
|
||||||
|
EOM
|
||||||
|
/* "CREATE TABLE table_without_primary_key ("
|
||||||
|
. $base_table */
|
||||||
);
|
);
|
||||||
// create simple table for meta test
|
// create simple table for meta test
|
||||||
$db->dbExec(
|
$db->dbExec(
|
||||||
"CREATE TABLE test_meta ("
|
<<<EOM
|
||||||
|
CREATE TABLE test_meta (
|
||||||
|
row_1 VARCHAR,
|
||||||
|
row_2 INT
|
||||||
|
) WITHOUT OIDS
|
||||||
|
EOM
|
||||||
|
/* "CREATE TABLE test_meta ("
|
||||||
. "row_1 VARCHAR, "
|
. "row_1 VARCHAR, "
|
||||||
. "row_2 INT"
|
. "row_2 INT"
|
||||||
. ") WITHOUT OIDS"
|
. ") WITHOUT OIDS" */
|
||||||
);
|
);
|
||||||
// set some test schema
|
// set some test schema
|
||||||
$db->dbExec("CREATE SCHEMA IF NOT EXISTS testschema");
|
$db->dbExec("CREATE SCHEMA IF NOT EXISTS testschema");
|
||||||
@@ -1189,7 +1209,13 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$expected,
|
$expected,
|
||||||
$db->dbEscapeBytea($input)
|
$db->dbEscapeBytea($input),
|
||||||
|
'Assert error to bytea'
|
||||||
|
);
|
||||||
|
$this->assertEquals(
|
||||||
|
$input,
|
||||||
|
$db->dbUnescapeBytea($expected),
|
||||||
|
'Assert error from bytes'
|
||||||
);
|
);
|
||||||
|
|
||||||
$db->dbClose();
|
$db->dbClose();
|
||||||
@@ -1570,6 +1596,13 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
// clear any current query
|
// clear any current query
|
||||||
// $db->dbResetQuery();
|
// $db->dbResetQuery();
|
||||||
|
|
||||||
|
// assert never called query is 0
|
||||||
|
$this->assertEquals(
|
||||||
|
0,
|
||||||
|
$db->dbGetQueryCalled($query),
|
||||||
|
'Assert never called query is null'
|
||||||
|
);
|
||||||
|
|
||||||
// if expected result is not a bool
|
// if expected result is not a bool
|
||||||
// for PHP 8.1 or higher it has to be an object
|
// for PHP 8.1 or higher it has to be an object
|
||||||
// for anything before PHP 8.1 this has to be a resource
|
// for anything before PHP 8.1 this has to be a resource
|
||||||
@@ -2757,7 +2790,7 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
// - prepared query execute
|
// - prepared query execute
|
||||||
// dbPrepare, dbExecute, dbFetchArray
|
// dbPrepare, dbExecute, dbFetchArray, dbGetPrepareCursorValue
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undocumented function
|
* Undocumented function
|
||||||
@@ -2782,6 +2815,7 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
// 11: read query (if insert/update)
|
// 11: read query (if insert/update)
|
||||||
// 11: execute data to check (array)
|
// 11: execute data to check (array)
|
||||||
// 12: insert data
|
// 12: insert data
|
||||||
|
// 13: prepated cursor array data match values
|
||||||
return [
|
return [
|
||||||
// insert
|
// insert
|
||||||
'prepare query insert' => [
|
'prepare query insert' => [
|
||||||
@@ -2805,6 +2839,14 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
],
|
],
|
||||||
// insert data (for select)
|
// insert data (for select)
|
||||||
'',
|
'',
|
||||||
|
// get prepared data
|
||||||
|
[
|
||||||
|
'pk_name' => 'table_with_primary_key_id',
|
||||||
|
'count' => 2,
|
||||||
|
'query' => 'INSERT INTO table_with_primary_key (row_int, uid) '
|
||||||
|
. 'VALUES ($1, $2) RETURNING table_with_primary_key_id',
|
||||||
|
'returning_id' => true,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
// update
|
// update
|
||||||
'prepare query update' => [
|
'prepare query update' => [
|
||||||
@@ -2831,6 +2873,14 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
//
|
//
|
||||||
"INSERT INTO table_with_primary_key (row_int, uid) VALUES "
|
"INSERT INTO table_with_primary_key (row_int, uid) VALUES "
|
||||||
. "(111, 'TEST A')",
|
. "(111, 'TEST A')",
|
||||||
|
//
|
||||||
|
[
|
||||||
|
'pk_name' => '',
|
||||||
|
'count' => 3,
|
||||||
|
'query' => 'UPDATE table_with_primary_key SET row_int = $1, '
|
||||||
|
. 'row_varchar = $2 WHERE uid = $3',
|
||||||
|
'returning_id' => false,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
// select
|
// select
|
||||||
'prepare select query' => [
|
'prepare select query' => [
|
||||||
@@ -2852,7 +2902,14 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
//
|
//
|
||||||
$insert_query
|
$insert_query,
|
||||||
|
//
|
||||||
|
[
|
||||||
|
'pk_name' => '',
|
||||||
|
'count' => 1,
|
||||||
|
'query' => 'SELECT row_int, uid FROM table_with_primary_key WHERE uid = $1',
|
||||||
|
'returning_id' => false,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
// any query but with no parameters
|
// any query but with no parameters
|
||||||
'prepare select query no parameter' => [
|
'prepare select query no parameter' => [
|
||||||
@@ -2877,7 +2934,14 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
//
|
//
|
||||||
$insert_query
|
$insert_query,
|
||||||
|
//
|
||||||
|
[
|
||||||
|
'pk_name' => '',
|
||||||
|
'count' => 0,
|
||||||
|
'query' => 'SELECT row_int, uid FROM table_with_primary_key',
|
||||||
|
'returning_id' => false,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
// no statement name (25)
|
// no statement name (25)
|
||||||
'empty statement' => [
|
'empty statement' => [
|
||||||
@@ -2894,6 +2958,13 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
[],
|
[],
|
||||||
//
|
//
|
||||||
'',
|
'',
|
||||||
|
//
|
||||||
|
[
|
||||||
|
'pk_name' => '',
|
||||||
|
'count' => 0,
|
||||||
|
'query' => '',
|
||||||
|
'returning_id' => false,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
// no query (prepare 11)
|
// no query (prepare 11)
|
||||||
// no prepared cursor found with statement name (execute 24)
|
// no prepared cursor found with statement name (execute 24)
|
||||||
@@ -2911,6 +2982,13 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
[],
|
[],
|
||||||
//
|
//
|
||||||
'',
|
'',
|
||||||
|
//
|
||||||
|
[
|
||||||
|
'pk_name' => '',
|
||||||
|
'count' => 0,
|
||||||
|
'query' => '',
|
||||||
|
'returning_id' => false,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
// no db connection (prepare/execute 16)
|
// no db connection (prepare/execute 16)
|
||||||
// TODO no db connection test
|
// TODO no db connection test
|
||||||
@@ -2931,8 +3009,15 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
// no query but data for data only compare
|
// no query but data for data only compare
|
||||||
'',
|
'',
|
||||||
[],
|
[],
|
||||||
//,
|
//
|
||||||
$insert_query
|
$insert_query,
|
||||||
|
//
|
||||||
|
[
|
||||||
|
'pk_name' => '',
|
||||||
|
'count' => 0,
|
||||||
|
'query' => 'SELECT row_int, uid FROM table_with_primary_key',
|
||||||
|
'returning_id' => false,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
// insert wrong data count compared to needed (execute 23)
|
// insert wrong data count compared to needed (execute 23)
|
||||||
'wrong parmeter count' => [
|
'wrong parmeter count' => [
|
||||||
@@ -2949,7 +3034,15 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
'',
|
'',
|
||||||
[],
|
[],
|
||||||
//
|
//
|
||||||
''
|
'',
|
||||||
|
//
|
||||||
|
[
|
||||||
|
'pk_name' => 'table_with_primary_key_id',
|
||||||
|
'count' => 2,
|
||||||
|
'query' => 'INSERT INTO table_with_primary_key (row_int, uid) VALUES '
|
||||||
|
. '($1, $2) RETURNING table_with_primary_key_id',
|
||||||
|
'returning_id' => true,
|
||||||
|
],
|
||||||
],
|
],
|
||||||
// execute does not return a result (22)
|
// execute does not return a result (22)
|
||||||
// TODO execute does not return a result
|
// TODO execute does not return a result
|
||||||
@@ -2962,6 +3055,7 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
* @covers ::dbPrepare
|
* @covers ::dbPrepare
|
||||||
* @covers ::dbExecute
|
* @covers ::dbExecute
|
||||||
* @covers ::dbFetchArray
|
* @covers ::dbFetchArray
|
||||||
|
* @covers ::dbGetPrepareCursorValue
|
||||||
* @dataProvider preparedProvider
|
* @dataProvider preparedProvider
|
||||||
* @testdox prepared query $stm_name with $expected_prepare (warning $warning_prepare/error $error_prepare) and $expected_execute (warning $warning_execute/error $error_execute) [$_dataName]
|
* @testdox prepared query $stm_name with $expected_prepare (warning $warning_prepare/error $error_prepare) and $expected_execute (warning $warning_execute/error $error_execute) [$_dataName]
|
||||||
*
|
*
|
||||||
@@ -2978,6 +3072,7 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
* @param string $expected_data_query
|
* @param string $expected_data_query
|
||||||
* @param array $expected_data
|
* @param array $expected_data
|
||||||
* @param string $insert_data
|
* @param string $insert_data
|
||||||
|
* @param array $prepare_cursor
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function testDbPrepared(
|
public function testDbPrepared(
|
||||||
@@ -2993,7 +3088,8 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
string $error_execute,
|
string $error_execute,
|
||||||
string $expected_data_query,
|
string $expected_data_query,
|
||||||
array $expected_data,
|
array $expected_data,
|
||||||
string $insert_data
|
string $insert_data,
|
||||||
|
array $prepare_cursor,
|
||||||
): void {
|
): void {
|
||||||
// self::$log->setLogLevelAll('debug', true);
|
// self::$log->setLogLevelAll('debug', true);
|
||||||
// self::$log->setLogLevelAll('print', true);
|
// self::$log->setLogLevelAll('print', true);
|
||||||
@@ -3103,6 +3199,15 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check dbGetPrepareCursorValue
|
||||||
|
foreach (['pk_name', 'count', 'query', 'returning_id'] as $key) {
|
||||||
|
$this->assertEquals(
|
||||||
|
$prepare_cursor[$key],
|
||||||
|
$db->dbGetPrepareCursorValue($stm_name, $key),
|
||||||
|
'Prepared cursor: ' . $key . ': failed assertion'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// reset all data
|
// reset all data
|
||||||
$db->dbExec("TRUNCATE table_with_primary_key");
|
$db->dbExec("TRUNCATE table_with_primary_key");
|
||||||
$db->dbExec("TRUNCATE table_without_primary_key");
|
$db->dbExec("TRUNCATE table_without_primary_key");
|
||||||
@@ -3110,6 +3215,90 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
$db->dbClose();
|
$db->dbClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dedicated error checks for prepare cursor return
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function preparedProviderValue(): array
|
||||||
|
{
|
||||||
|
// 1: query (can be empty for do not set)
|
||||||
|
// 2: stm name
|
||||||
|
// 3: key
|
||||||
|
// 4: expected error return
|
||||||
|
return [
|
||||||
|
'no error' => [
|
||||||
|
"SELECT row_int, uid FROM table_with_primary_key",
|
||||||
|
'read',
|
||||||
|
'pk_name',
|
||||||
|
''
|
||||||
|
],
|
||||||
|
'statement name empty' => [
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'101',
|
||||||
|
],
|
||||||
|
'key empty' => [
|
||||||
|
'',
|
||||||
|
'read',
|
||||||
|
'',
|
||||||
|
'102',
|
||||||
|
],
|
||||||
|
'key invalid' => [
|
||||||
|
'',
|
||||||
|
'read',
|
||||||
|
'invalid',
|
||||||
|
'102',
|
||||||
|
],
|
||||||
|
'statement name not found' => [
|
||||||
|
'',
|
||||||
|
'invalid',
|
||||||
|
'pk_name',
|
||||||
|
'103',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test return prepare cursor errors
|
||||||
|
*
|
||||||
|
* @covers ::dbGetPrepareCursorValue
|
||||||
|
* @dataProvider preparedProviderValue
|
||||||
|
* @testdox prepared query $stm_name with $key expect error id $error_id [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $query
|
||||||
|
* @param string $stm_name
|
||||||
|
* @param string $key
|
||||||
|
* @param string $error_id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testDbGetPrepareCursorValue(
|
||||||
|
string $query,
|
||||||
|
string $stm_name,
|
||||||
|
string $key,
|
||||||
|
$error_id
|
||||||
|
): void {
|
||||||
|
$db = new \CoreLibs\DB\IO(
|
||||||
|
self::$db_config['valid'],
|
||||||
|
self::$log
|
||||||
|
);
|
||||||
|
if (!empty($query)) {
|
||||||
|
$db->dbPrepare($stm_name, $query);
|
||||||
|
$db->dbExecute($stm_name);
|
||||||
|
}
|
||||||
|
$db->dbGetPrepareCursorValue($stm_name, $key);
|
||||||
|
// match check error
|
||||||
|
$last_error = $db->dbGetLastError();
|
||||||
|
$this->assertEquals(
|
||||||
|
$error_id,
|
||||||
|
$last_error,
|
||||||
|
'get prepare cursor value error check'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// - schema set/get tests
|
// - schema set/get tests
|
||||||
// dbGetSchema, dbSetSchema
|
// dbGetSchema, dbSetSchema
|
||||||
|
|
||||||
@@ -3724,6 +3913,38 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
// same but as EOM
|
||||||
|
'single insert (PK), EOM string' => [
|
||||||
|
<<<EOM
|
||||||
|
INSERT INTO table_with_primary_key (
|
||||||
|
row_varchar, row_varchar_literal, row_int, row_date
|
||||||
|
) VALUES (
|
||||||
|
'Text', 'Other', 123, '2022-03-01'
|
||||||
|
)
|
||||||
|
RETURNING row_varchar, row_varchar_literal, row_int, row_date
|
||||||
|
EOM,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
'row_varchar' => 'Text',
|
||||||
|
'row_varchar_literal' => 'Other',
|
||||||
|
'row_int' => 123,
|
||||||
|
'row_date' => '2022-03-01',
|
||||||
|
// 'table_with_primary_key_id' => "/^\d+$/",
|
||||||
|
'table_with_primary_key_id' => $table_with_primary_key_id + 2,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0 => [
|
||||||
|
'row_varchar' => 'Text',
|
||||||
|
'row_varchar_literal' => 'Other',
|
||||||
|
'row_int' => 123,
|
||||||
|
'row_date' => '2022-03-01',
|
||||||
|
// 'table_with_primary_key_id' => "/^\d+$/",
|
||||||
|
'table_with_primary_key_id' => $table_with_primary_key_id + 2,
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
// double insert (PK)
|
// double insert (PK)
|
||||||
'dobule insert (PK)' => [
|
'dobule insert (PK)' => [
|
||||||
"INSERT INTO table_with_primary_key "
|
"INSERT INTO table_with_primary_key "
|
||||||
@@ -3741,14 +3962,14 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
'row_varchar_literal' => 'Other',
|
'row_varchar_literal' => 'Other',
|
||||||
'row_int' => 123,
|
'row_int' => 123,
|
||||||
'row_date' => '2022-03-01',
|
'row_date' => '2022-03-01',
|
||||||
'table_with_primary_key_id' => $table_with_primary_key_id + 2,
|
'table_with_primary_key_id' => $table_with_primary_key_id + 3,
|
||||||
],
|
],
|
||||||
1 => [
|
1 => [
|
||||||
'row_varchar' => 'Foxtrott',
|
'row_varchar' => 'Foxtrott',
|
||||||
'row_varchar_literal' => 'Tango',
|
'row_varchar_literal' => 'Tango',
|
||||||
'row_int' => 789,
|
'row_int' => 789,
|
||||||
'row_date' => '1982-10-15',
|
'row_date' => '1982-10-15',
|
||||||
'table_with_primary_key_id' => $table_with_primary_key_id + 3,
|
'table_with_primary_key_id' => $table_with_primary_key_id + 4,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -3757,14 +3978,14 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
'row_varchar_literal' => 'Other',
|
'row_varchar_literal' => 'Other',
|
||||||
'row_int' => 123,
|
'row_int' => 123,
|
||||||
'row_date' => '2022-03-01',
|
'row_date' => '2022-03-01',
|
||||||
'table_with_primary_key_id' => $table_with_primary_key_id + 2,
|
'table_with_primary_key_id' => $table_with_primary_key_id + 3,
|
||||||
],
|
],
|
||||||
1 => [
|
1 => [
|
||||||
'row_varchar' => 'Foxtrott',
|
'row_varchar' => 'Foxtrott',
|
||||||
'row_varchar_literal' => 'Tango',
|
'row_varchar_literal' => 'Tango',
|
||||||
'row_int' => 789,
|
'row_int' => 789,
|
||||||
'row_date' => '1982-10-15',
|
'row_date' => '1982-10-15',
|
||||||
'table_with_primary_key_id' => $table_with_primary_key_id + 3,
|
'table_with_primary_key_id' => $table_with_primary_key_id + 4,
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
@@ -3792,7 +4013,35 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
'row_date' => '2022-03-01',
|
'row_date' => '2022-03-01',
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
|
// same as above but as EOM string
|
||||||
|
'single insert (No PK), EOM string' => [
|
||||||
|
<<<EOM
|
||||||
|
INSERT INTO table_without_primary_key (
|
||||||
|
row_varchar, row_varchar_literal, row_int, row_date
|
||||||
|
) VALUES (
|
||||||
|
'Text', 'Other', 123, '2022-03-01'
|
||||||
|
)
|
||||||
|
RETURNING row_varchar, row_varchar_literal, row_int, row_date
|
||||||
|
EOM,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
'row_varchar' => 'Text',
|
||||||
|
'row_varchar_literal' => 'Other',
|
||||||
|
'row_int' => 123,
|
||||||
|
'row_date' => '2022-03-01',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0 => [
|
||||||
|
'row_varchar' => 'Text',
|
||||||
|
'row_varchar_literal' => 'Other',
|
||||||
|
'row_int' => 123,
|
||||||
|
'row_date' => '2022-03-01',
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3839,11 +4088,13 @@ final class CoreLibsDBIOTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$expected_ret_ext,
|
$expected_ret_ext,
|
||||||
$returning_ext
|
$returning_ext,
|
||||||
|
'Returning extended failed'
|
||||||
);
|
);
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$expected_ret_arr,
|
$expected_ret_arr,
|
||||||
$returning_arr
|
$returning_arr,
|
||||||
|
'Returning Array failed'
|
||||||
);
|
);
|
||||||
|
|
||||||
// print "EXT: " . print_r($returning_ext, true) . "\n";
|
// print "EXT: " . print_r($returning_ext, true) . "\n";
|
||||||
|
|||||||
@@ -26,22 +26,22 @@ CREATE OR REPLACE FUNCTION set_login_user_id_set_date()
|
|||||||
RETURNS TRIGGER AS
|
RETURNS TRIGGER AS
|
||||||
$$
|
$$
|
||||||
BEGIN
|
BEGIN
|
||||||
-- if new is not null/empty
|
-- if new is not null/empty
|
||||||
-- and old one is null or old one different new one
|
-- and old one is null or old one different new one
|
||||||
-- set NOW()
|
-- set NOW()
|
||||||
-- if new one is NULL
|
-- if new one is NULL
|
||||||
-- set NULL
|
-- set NULL
|
||||||
IF
|
IF
|
||||||
NEW.login_user_id IS NOT NULL AND NEW.login_user_id <> '' AND
|
NEW.login_user_id IS NOT NULL AND NEW.login_user_id <> '' AND
|
||||||
(OLD.login_user_id IS NULL OR NEW.login_user_id <> OLD.login_user_id)
|
(OLD.login_user_id IS NULL OR NEW.login_user_id <> OLD.login_user_id)
|
||||||
THEN
|
THEN
|
||||||
NEW.login_user_id_set_date = NOW();
|
NEW.login_user_id_set_date = NOW();
|
||||||
NEW.login_user_id_last_revalidate = NOW();
|
NEW.login_user_id_last_revalidate = NOW();
|
||||||
ELSIF NEW.login_user_id IS NULL OR NEW.login_user_id = '' THEN
|
ELSIF NEW.login_user_id IS NULL OR NEW.login_user_id = '' THEN
|
||||||
NEW.login_user_id_set_date = NULL;
|
NEW.login_user_id_set_date = NULL;
|
||||||
NEW.login_user_id_last_revalidate = NULL;
|
NEW.login_user_id_last_revalidate = NULL;
|
||||||
END IF;
|
END IF;
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE 'plpgsql';
|
LANGUAGE 'plpgsql';
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# Files to be changed
|
||||||
|
|
||||||
|
Change: Update edit_page and template/css
|
||||||
|
Date: 2023/1/6
|
||||||
|
|
||||||
|
## Detail
|
||||||
|
|
||||||
|
* add stripes to sub table entries (edit.css)
|
||||||
|
* fix cellspacing and cellpadding in sub tables (edit_element.tpl)
|
||||||
|
* doctype added (edit_order.tpl)
|
||||||
|
* code clean up in edit base, move to class system (edit_base.php)
|
||||||
|
|
||||||
|
## File List
|
||||||
|
|
||||||
|
```sh
|
||||||
|
includes/templates/admin/edit_elements.tpl
|
||||||
|
includes/templates/admin/edit_order.tpl
|
||||||
|
includes/edit_base.php
|
||||||
|
layout/admin/css/edit.css
|
||||||
|
```
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
-- Fixes for column types
|
||||||
|
|
||||||
|
-- edit group
|
||||||
|
ALTER TABLE edit_group ALTER name TYPE VARCHAR;
|
||||||
|
-- edit language
|
||||||
|
ALTER TABLE edit_language ALTER short_name TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_language ALTER long_name TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_language ALTER iso_name TYPE VARCHAR;
|
||||||
|
-- edit menu group
|
||||||
|
ALTER TABLE edit_menu_group ALTER name TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_menu_group ALTER flag TYPE VARCHAR;
|
||||||
|
-- edit page
|
||||||
|
ALTER TABLE edit_page ALTER filename TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_page ALTER name TYPE VARCHAR;
|
||||||
|
-- edit query string
|
||||||
|
ALTER TABLE edit_query_string ALTER name TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_query_string ALTER value TYPE VARCHAR;
|
||||||
|
-- edit scheme
|
||||||
|
ALTER TABLE edit_scheme ALTER name TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_scheme ALTER header_color TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_scheme ALTER css_file TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_scheme ALTER template TYPE VARCHAR;
|
||||||
|
-- edit visible group
|
||||||
|
ALTER TABLE edit_visible_group ALTER name TYPE VARCHAR;
|
||||||
|
ALTER TABLE edit_visible_group ALTER flag TYPE VARCHAR;
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
-- Fix for edit_schemes.php DB settings
|
||||||
|
|
||||||
|
-- will not change file name only visual name
|
||||||
|
UPDATE edit_page SET name = 'Edit Schemas' WHERE filename = 'edit_schemes.php';
|
||||||
|
|
||||||
|
-- will change BOTH, must have file name renamed too
|
||||||
|
UPDATE edit_page SET name = 'Edit Schemas', filename = 'edit_schemas.php' WHERE filename = 'edit_schemes.php';
|
||||||
@@ -1,103 +1,128 @@
|
|||||||
# Upgrade to Version 6
|
# Upgrade to Version 6
|
||||||
|
|
||||||
* remove old `lib/CoreLibs` and copy the new over
|
* remove old `lib/CoreLibs` and copy the new over
|
||||||
* copy `config/config.php`
|
* copy `config/config.php`
|
||||||
* install composer if not installed `composer init` and `composer install`
|
* install composer if not installed `composer init` and `composer install`
|
||||||
* update composer.json
|
* update composer.json
|
||||||
```json
|
|
||||||
|
```json
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"lib/"
|
"lib/"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
```
|
```
|
||||||
|
|
||||||
Run to update autoloader list
|
Run to update autoloader list
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
composer dump-autoload
|
composer dump-autoload
|
||||||
```
|
```
|
||||||
|
|
||||||
* copy `includes/edit_base.inc`
|
* copy `includes/edit_base.inc`
|
||||||
* add session start in the top header block where the `header()` calls are
|
* add session start in the top header block where the `header()` calls are
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// start session
|
// start session
|
||||||
CoreLibs\Create\Session::startSession();
|
CoreLibs\Create\Session::startSession();
|
||||||
```
|
```
|
||||||
* update all header calls if needed to add new log type call
|
|
||||||
```php
|
* update all header calls if needed to add new log type call
|
||||||
|
|
||||||
|
```php
|
||||||
// create logger
|
// create logger
|
||||||
$log = new CoreLibs\Debug\Logging([
|
$log = new CoreLibs\Debug\Logging([
|
||||||
'log_folder' => BASE . LOG,
|
'log_folder' => BASE . LOG,
|
||||||
'file_id' => LOG_FILE_ID,
|
'file_id' => LOG_FILE_ID,
|
||||||
'print_file_date' => true,
|
'print_file_date' => true,
|
||||||
'debug_all' => $DEBUG_ALL ?? false,
|
'debug_all' => $DEBUG_ALL ?? false,
|
||||||
'echo_all' => $ECHO_ALL ?? false,
|
'echo_all' => $ECHO_ALL ?? false,
|
||||||
'print_all' => $PRINT_ALL ?? false,
|
'print_all' => $PRINT_ALL ?? false,
|
||||||
]);
|
]);
|
||||||
```
|
```
|
||||||
* add a db class
|
|
||||||
|
* add a db class
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// db config with logger
|
// db config with logger
|
||||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||||
```
|
```
|
||||||
* login class needs to have db and logger added
|
|
||||||
|
* login class needs to have db and logger added
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// login & page access check
|
// login & page access check
|
||||||
$login = new CoreLibs\ACL\Login($db, $log);
|
$login = new CoreLibs\ACL\Login($db, $log);
|
||||||
```
|
```
|
||||||
|
|
||||||
* update language class
|
* update language class
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// pre auto detect language after login
|
// pre auto detect language after login
|
||||||
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||||
// set lang and pass to smarty/backend
|
// set lang and pass to smarty/backend
|
||||||
$l10n = new \CoreLibs\Language\L10n(
|
$l10n = new \CoreLibs\Language\L10n(
|
||||||
$locale['locale'],
|
$locale['locale'],
|
||||||
$locale['domain'],
|
$locale['domain'],
|
||||||
$locale['path'],
|
$locale['path'],
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
* smarty needs language
|
* smarty needs language
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$smarty = new CoreLibs\Template\SmartyExtend($l10n, $locale);
|
$smarty = new CoreLibs\Template\SmartyExtend($l10n, $locale);
|
||||||
```
|
```
|
||||||
|
|
||||||
* admin backend also needs logger
|
* admin backend also needs logger
|
||||||
|
|
||||||
```php
|
```php
|
||||||
$cms = new CoreLibs\Admin\Backend($db, $log, $l10n, $locale);
|
$cms = new CoreLibs\Admin\Backend($db, $log, $l10n, $locale);
|
||||||
```
|
```
|
||||||
|
|
||||||
* update and `$cms` or similar calls so db is in `$cms->db->...` and log are in `$cms->log->...`
|
* update and `$cms` or similar calls so db is in `$cms->db->...` and log are in `$cms->log->...`
|
||||||
* update all `config.*.php` files where needed
|
* update all `config.*.php` files where needed
|
||||||
* check config.master.php for `BASE_NAME` and `G_TITLE` and set them in the `.env` file so the `config.master.php` can be copied as os
|
* check config.master.php for `BASE_NAME` and `G_TITLE` and set them in the `.env` file so the `config.master.php` can be copied as os
|
||||||
* If not doable, see changed below in `config.master.php` must remove old auto loder and `FLASH` constant at least
|
* If not doable, see changed below in `config.master.php` must remove old auto loder and `FLASH` constant at least
|
||||||
|
|
||||||
**REMOVE:**
|
**REMOVE:**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
/************* AUTO LOADER *******************/
|
/************* AUTO LOADER *******************/
|
||||||
// read auto loader
|
// read auto loader
|
||||||
require BASE . LIB . 'autoloader.php';
|
require BASE . LIB . 'autoloader.php';
|
||||||
```
|
```
|
||||||
|
|
||||||
**UPDATE:**
|
**UPDATE:**
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// po langs [DEPRECAED: use LOCALE]
|
// po langs [DEPRECAED: use LOCALE]
|
||||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||||
// po locale file
|
// po locale file
|
||||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// SSL host name
|
// SSL host name
|
||||||
// define('SSL_HOST', $_ENV['SSL_HOST'] ?? '');
|
// define('SSL_HOST', $_ENV['SSL_HOST'] ?? '');
|
||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// define full regex
|
// define full regex
|
||||||
define('PASSWORD_REGEX', "/^"
|
define('PASSWORD_REGEX', "/^"
|
||||||
. (defined('PASSWORD_LOWER') ? PASSWORD_LOWER : '')
|
. (defined('PASSWORD_LOWER') ? PASSWORD_LOWER : '')
|
||||||
. (defined('PASSWORD_UPPER') ? PASSWORD_UPPER : '')
|
. (defined('PASSWORD_UPPER') ? PASSWORD_UPPER : '')
|
||||||
. (defined('PASSWORD_NUMBER') ? PASSWORD_NUMBER : '')
|
. (defined('PASSWORD_NUMBER') ? PASSWORD_NUMBER : '')
|
||||||
. (defined('PASSWORD_SPECIAL') ? PASSWORD_SPECIAL : '')
|
. (defined('PASSWORD_SPECIAL') ? PASSWORD_SPECIAL : '')
|
||||||
. "[A-Za-z\d" . PASSWORD_SPECIAL_RANGE . "]{" . PASSWORD_MIN_LENGTH . "," . PASSWORD_MAX_LENGTH . "}$/");
|
. "[A-Za-z\d" . PASSWORD_SPECIAL_RANGE . "]{" . PASSWORD_MIN_LENGTH . "," . PASSWORD_MAX_LENGTH . "}$/");
|
||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
/************* LAYOUT WIDTHS *************/
|
/************* LAYOUT WIDTHS *************/
|
||||||
define('PAGE_WIDTH', '100%');
|
define('PAGE_WIDTH', '100%');
|
||||||
define('CONTENT_WIDTH', '100%');
|
define('CONTENT_WIDTH', '100%');
|
||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
/************* OVERALL CONTROL NAMES *************/
|
/************* OVERALL CONTROL NAMES *************/
|
||||||
// BELOW has HAS to be changed
|
// BELOW has HAS to be changed
|
||||||
@@ -105,6 +130,7 @@ define('CONTENT_WIDTH', '100%');
|
|||||||
// only alphanumeric characters, strip all others
|
// only alphanumeric characters, strip all others
|
||||||
define('BASE_NAME', preg_replace('/[^A-Za-z0-9]/', '', $_ENV['BASE_NAME'] ?? ''));
|
define('BASE_NAME', preg_replace('/[^A-Za-z0-9]/', '', $_ENV['BASE_NAME'] ?? ''));
|
||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
/************* LANGUAGE / ENCODING *******/
|
/************* LANGUAGE / ENCODING *******/
|
||||||
// default lang + encoding
|
// default lang + encoding
|
||||||
@@ -112,53 +138,63 @@ define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
|||||||
// default web page encoding setting
|
// default web page encoding setting
|
||||||
define('DEFAULT_ENCODING', 'UTF-8');
|
define('DEFAULT_ENCODING', 'UTF-8');
|
||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// BAIL ON MISSING DB CONFIG:
|
// BAIL ON MISSING DB CONFIG:
|
||||||
// we have either no db selction for this host but have db config entries
|
// we have either no db selction for this host but have db config entries
|
||||||
// or we have a db selection but no db config as array or empty
|
// or we have a db selection but no db config as array or empty
|
||||||
// or we have a selection but no matching db config entry
|
// or we have a selection but no matching db config entry
|
||||||
if (
|
if (
|
||||||
(!isset($SITE_CONFIG[HOST_NAME]['db_host']) && count($DB_CONFIG)) ||
|
(!isset($SITE_CONFIG[HOST_NAME]['db_host']) && count($DB_CONFIG)) ||
|
||||||
(isset($SITE_CONFIG[HOST_NAME]['db_host']) &&
|
(isset($SITE_CONFIG[HOST_NAME]['db_host']) &&
|
||||||
// missing DB CONFIG
|
// missing DB CONFIG
|
||||||
((is_array($DB_CONFIG) && !count($DB_CONFIG)) ||
|
((is_array($DB_CONFIG) && !count($DB_CONFIG)) ||
|
||||||
!is_array($DB_CONFIG) ||
|
!is_array($DB_CONFIG) ||
|
||||||
// has DB CONFIG but no match
|
// has DB CONFIG but no match
|
||||||
empty($DB_CONFIG[$SITE_CONFIG[HOST_NAME]['db_host']]))
|
empty($DB_CONFIG[$SITE_CONFIG[HOST_NAME]['db_host']]))
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
echo 'No matching DB config found for: "' . HOST_NAME . '". Contact Administrator';
|
echo 'No matching DB config found for: "' . HOST_NAME . '". Contact Administrator';
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// remove SITE_LANG
|
// remove SITE_LANG
|
||||||
define('SITE_LOCALE', $SITE_CONFIG[HOST_NAME]['site_locale'] ?? DEFAULT_LOCALE);
|
define('SITE_LOCALE', $SITE_CONFIG[HOST_NAME]['site_locale'] ?? DEFAULT_LOCALE);
|
||||||
define('SITE_ENCODING', $SITE_CONFIG[HOST_NAME]['site_encoding'] ?? DEFAULT_ENCODING);
|
define('SITE_ENCODING', $SITE_CONFIG[HOST_NAME]['site_encoding'] ?? DEFAULT_ENCODING);
|
||||||
```
|
```
|
||||||
|
|
||||||
```php
|
```php
|
||||||
/************* GENERAL PAGE TITLE ********/
|
/************* GENERAL PAGE TITLE ********/
|
||||||
define('G_TITLE', $_ENV['G_TITLE'] ?? '');
|
define('G_TITLE', $_ENV['G_TITLE'] ?? '');
|
||||||
```
|
```
|
||||||
|
|
||||||
* move all login passweords into the `.env` file in the `configs/` folder
|
* move all login passweords into the `.env` file in the `configs/` folder
|
||||||
in the `.env` file
|
in the `.env` file
|
||||||
```
|
|
||||||
|
```sql
|
||||||
DB_NAME.TEST=some_database
|
DB_NAME.TEST=some_database
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
In the config then
|
In the config then
|
||||||
|
|
||||||
```php
|
```php
|
||||||
'db_name' => $_ENV['DB_NAME.TEST'] ?? '',
|
'db_name' => $_ENV['DB_NAME.TEST'] ?? '',
|
||||||
```
|
```
|
||||||
|
|
||||||
* config.host.php update
|
* config.host.php update
|
||||||
must add site_locale (site_lang + site_encoding)
|
must add site_locale (site_lang + site_encoding)
|
||||||
remove site_lang
|
remove site_lang
|
||||||
|
|
||||||
```php
|
```php
|
||||||
// lang + encoding
|
// lang + encoding
|
||||||
'site_locale' => 'en_US.UTF-8',
|
'site_locale' => 'en_US.UTF-8',
|
||||||
// site language
|
// site language
|
||||||
'site_encoding' => 'UTF-8',
|
'site_encoding' => 'UTF-8',
|
||||||
```
|
```
|
||||||
|
|
||||||
* copy `layout/admin/javascript/edit.jq.js`
|
* copy `layout/admin/javascript/edit.jq.js`
|
||||||
* check other javacsript files if needed (`edit.jq.js`)
|
* check other javacsript files if needed (`edit.jq.js`)
|
||||||
|
|
||||||
|
|||||||
57
README.md
57
README.md
@@ -2,19 +2,20 @@
|
|||||||
|
|
||||||
## Code Standard
|
## Code Standard
|
||||||
|
|
||||||
* Uses PSR-12
|
* Uses PSR-12
|
||||||
* tab indent instead of 4 spaces indent
|
* tab indent instead of 4 spaces indent
|
||||||
* Warning at 120 character length, error at 240 character length
|
* Warning at 120 character length, error at 240 character length
|
||||||
|
|
||||||
## General information
|
## General information
|
||||||
|
|
||||||
Base PHP class files to setup any project
|
Base PHP class files to setup any project
|
||||||
* login
|
|
||||||
* database wrapper
|
* login
|
||||||
* basic helper class for debugging and other features
|
* database wrapper
|
||||||
* admin/frontend split
|
* basic helper class for debugging and other features
|
||||||
* domain controlled database/settings split
|
* admin/frontend split
|
||||||
* dynamic layout groups
|
* domain controlled database/settings split
|
||||||
|
* dynamic layout groups
|
||||||
|
|
||||||
## NOTE
|
## NOTE
|
||||||
|
|
||||||
@@ -50,7 +51,6 @@ pslam is setup but not configured
|
|||||||
With phpunit (`4dev/checking/phpunit.sh`)
|
With phpunit (`4dev/checking/phpunit.sh`)
|
||||||
`phpunit -c $phpunit.xml 4dev/tests/`
|
`phpunit -c $phpunit.xml 4dev/tests/`
|
||||||
|
|
||||||
|
|
||||||
## Other Notes
|
## Other Notes
|
||||||
|
|
||||||
### Session used
|
### Session used
|
||||||
@@ -58,29 +58,38 @@ With phpunit (`4dev/checking/phpunit.sh`)
|
|||||||
The following classes use _SESSION
|
The following classes use _SESSION
|
||||||
The main one is ACL\Login, this class will fail without a session started
|
The main one is ACL\Login, this class will fail without a session started
|
||||||
|
|
||||||
* \CoreLibs\ACL\Login
|
* \CoreLibs\ACL\Login
|
||||||
* \CoreLibs\Admin\Backend
|
* \CoreLibs\Admin\Backend
|
||||||
* \CoreLibs\Output\Form\Generate
|
* \CoreLibs\Output\Form\Generate
|
||||||
* \CoreLibs\Output\Form\Token
|
* \CoreLibs\Output\Form\Token
|
||||||
* \CoreLibs\Template\SmartyExtend
|
* \CoreLibs\Template\SmartyExtend
|
||||||
|
|
||||||
### Class extends
|
### Class extends
|
||||||
|
|
||||||
The following classes extend these classes
|
The following classes extend these classes
|
||||||
|
|
||||||
* \CoreLibs\ACL\Login extends \CoreLibs\DB\IO
|
* \CoreLibs\ACL\Login extends \CoreLibs\DB\IO
|
||||||
* \CoreLibs\Admin\Backend extends \CoreLibs\DB\IO
|
* \CoreLibs\Admin\Backend extends \CoreLibs\DB\IO
|
||||||
* \CoreLibs\DB\Extended\ArrayIO extends \CoreLibs\DB\IO
|
* \CoreLibs\DB\Extended\ArrayIO extends \CoreLibs\DB\IO
|
||||||
* \CoreLibs\Output\Form\Generate extends \CoreLibs\DB\Extended\ArrayIO
|
* \CoreLibs\Output\Form\Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||||
* \CoreLibs\Template\SmartyExtend extends SmartyBC
|
* \CoreLibs\Template\SmartyExtend extends SmartyBC
|
||||||
|
|
||||||
### Class used
|
### Class used
|
||||||
|
|
||||||
The following classes use the following classes
|
The following classes use the following classes
|
||||||
|
|
||||||
* \CoreLibs\ACL\Login uses \CoreLibs\Debug\Logger, \CoreLibs\Language\L10n
|
* \CoreLibs\ACL\Login uses \CoreLibs\Debug\Logging, \CoreLibs\Language\L10n
|
||||||
* \CoreLibs\DB\IO uses \CoreLibs\Debug\Logger, \CoreLibs\DB\SQL\PgSQL
|
* \CoreLibs\DB\IO uses \CoreLibs\Debug\Logging, \CoreLibs\DB\SQL\PgSQL
|
||||||
* \CoreLibs\Admin\Backend uses \CoreLibs\Debug\Logger, \CoreLibs\Language\L10n
|
* \CoreLibs\Admin\Backend uses \CoreLibs\Debug\Logging, \CoreLibs\Language\L10n
|
||||||
* \CoreLibs\Output\Form\Generate uses \CoreLibs\Debug\Logger, \CoreLibs\Language\L10n
|
* \CoreLibs\Output\Form\Generate uses \CoreLibs\Debug\Logging, \CoreLibs\Language\L10n
|
||||||
* \CoreLibs\Template\SmartyExtend uses \CoreLibs\Language\L10n
|
* \CoreLibs\Template\SmartyExtend uses \CoreLibs\Language\L10n
|
||||||
* \CoreLibs\Language\L10n uses FileReader, GetTextReader
|
* \CoreLibs\Language\L10n uses FileReader, GetTextReader
|
||||||
|
* \CoreLibs\Admin\EditBase uses \CoreLibs\Debug\Logging, \CoreLibs\Language\L10n
|
||||||
|
|
||||||
|
### Class internal load
|
||||||
|
|
||||||
|
Loads classes internal (not passed in, not extend)
|
||||||
|
|
||||||
|
* \CoreLibs\Admin\EditBase loads \CoreLibs\Template\SmartyExtend, \CoreLibs\Output\Form\Generate
|
||||||
|
* \CoreLibs\Output\From\Generate loads \CoreLibs\Debug\Logging, \CoreLibs\Language\L10n if not passed on
|
||||||
|
* \CoreLibs\Output\From\Generate loads \CoreLibs\Output\From\TableArrays
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ parameters:
|
|||||||
# deprecated files
|
# deprecated files
|
||||||
- www/includes/admin_set_paths.php # ignore the admin include stuff
|
- www/includes/admin_set_paths.php # ignore the admin include stuff
|
||||||
- www/includes/admin_smarty.php # ignore the admin include stuff
|
- www/includes/admin_smarty.php # ignore the admin include stuff
|
||||||
|
- www/includes/edit_base.LEGACY.php # old style
|
||||||
# folders with data no check needed
|
# folders with data no check needed
|
||||||
- www/templates_c
|
- www/templates_c
|
||||||
- www/cache
|
- www/cache
|
||||||
|
|||||||
@@ -50,21 +50,22 @@ print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
|||||||
$byte = 254779258;
|
$byte = 254779258;
|
||||||
$string = '242.98 MB';
|
$string = '242.98 MB';
|
||||||
// static
|
// static
|
||||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte) . "<br>";
|
print "S::BYTE TO (calls as var): $byte: " . $byte_class::humanReadableByteFormat($byte) . "<br>";
|
||||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_SI) . "<br>";
|
print "S::BYTE TO: $byte: " . Byte::humanReadableByteFormat($byte) . "<br>";
|
||||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST) . "<br>";
|
print "S::BYTE TO: $byte: " . Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_SI) . "<br>";
|
||||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
print "S::BYTE TO: $byte: " . Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST) . "<br>";
|
||||||
print "S::BYTE FROM: $string: " . $byte_class::stringByteFormat($string) . "<br>";
|
print "S::BYTE TO: $byte: " . Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
||||||
|
print "S::BYTE FROM: $string: " . Byte::stringByteFormat($string) . "<br>";
|
||||||
//
|
//
|
||||||
$byte = 314572800;
|
$byte = 314572800;
|
||||||
$string = '300 MB';
|
$string = '300 MB';
|
||||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte) . "<br>";
|
print "S::BYTE TO: $byte: " . Byte::humanReadableByteFormat($byte) . "<br>";
|
||||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_SI) . "<br>";
|
print "S::BYTE TO: $byte: " . Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_SI) . "<br>";
|
||||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST) . "<br>";
|
print "S::BYTE TO: $byte: " . Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST) . "<br>";
|
||||||
print "S::BYTE TO: $byte: "
|
print "S::BYTE TO: $byte: "
|
||||||
. $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST | Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
. Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_ADJUST | Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
||||||
print "S::BYTE TO: $byte: " . $byte_class::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
print "S::BYTE TO: $byte: " . Byte::humanReadableByteFormat($byte, Byte::BYTE_FORMAT_NOSPACE) . "<br>";
|
||||||
print "S::BYTE FROM: $string: " . $byte_class::stringByteFormat($string) . "<br>";
|
print "S::BYTE FROM: $string: " . Byte::stringByteFormat($string) . "<br>";
|
||||||
|
|
||||||
// *** BYTES TEST ***
|
// *** BYTES TEST ***
|
||||||
$bytes = [
|
$bytes = [
|
||||||
|
|||||||
123
www/admin/class_test.check.colors.php
Normal file
123
www/admin/class_test.check.colors.php
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
<?php // phpcs:ignore warning
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||||
|
$DEBUG_ALL = 1;
|
||||||
|
$PRINT_ALL = 1;
|
||||||
|
$DB_DEBUG = 1;
|
||||||
|
|
||||||
|
if ($DEBUG_ALL) {
|
||||||
|
error_reporting(E_ALL | E_STRICT | E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
// basic class test file
|
||||||
|
define('USE_DATABASE', false);
|
||||||
|
// sample config
|
||||||
|
require 'config.php';
|
||||||
|
// define log file id
|
||||||
|
$LOG_FILE_ID = 'classTest-check-colors';
|
||||||
|
ob_end_flush();
|
||||||
|
|
||||||
|
use CoreLibs\Check\Colors;
|
||||||
|
// use CoreLibs\Debug\Support as DgS;
|
||||||
|
|
||||||
|
$log = new CoreLibs\Debug\Logging([
|
||||||
|
'log_folder' => BASE . LOG,
|
||||||
|
'file_id' => $LOG_FILE_ID,
|
||||||
|
// add file date
|
||||||
|
'print_file_date' => true,
|
||||||
|
// set debug and print flags
|
||||||
|
'debug_all' => $DEBUG_ALL ?? false,
|
||||||
|
'echo_all' => $ECHO_ALL ?? false,
|
||||||
|
'print_all' => $PRINT_ALL ?? false,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$PAGE_NAME = 'TEST CLASS: CHECK COLORS';
|
||||||
|
print "<!DOCTYPE html>";
|
||||||
|
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||||
|
print "<body>";
|
||||||
|
print '<div><a href="class_test.php">Class Test Master</a></div>';
|
||||||
|
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||||
|
|
||||||
|
// list of colors to check
|
||||||
|
$css_colors = [
|
||||||
|
// base hex
|
||||||
|
'#ab12cd',
|
||||||
|
'#ab12cd12',
|
||||||
|
// rgb
|
||||||
|
'rgb(255, 10, 20)',
|
||||||
|
'rgb(100%, 10%, 20%)',
|
||||||
|
'rgba(255, 10, 20)',
|
||||||
|
'rgba(100%, 10%, 20%)',
|
||||||
|
'rgba(255, 10, 20, 0.5)',
|
||||||
|
'rgba(100%, 10%, 20%, 0.5)',
|
||||||
|
'rgba(255, 10, 20, 50%)',
|
||||||
|
'rgba(100%, 10%, 20%, 50%)',
|
||||||
|
// hsl
|
||||||
|
'hsl(100, 50%, 60%)',
|
||||||
|
'hsl(100, 50.5%, 60.5%)',
|
||||||
|
'hsla(100, 50%, 60%)',
|
||||||
|
'hsla(100, 50.5%, 60.5%)',
|
||||||
|
'hsla(100, 50%, 60%, 0.5)',
|
||||||
|
'hsla(100, 50.5%, 60.5%, 0.5)',
|
||||||
|
'hsla(100, 50%, 60%, 50%)',
|
||||||
|
'hsla(100, 50.5%, 60.5%, 50%)',
|
||||||
|
// invalid here
|
||||||
|
'invalid string',
|
||||||
|
'(hsla(100, 100, 100))',
|
||||||
|
'hsla(100, 100, 100',
|
||||||
|
// invalid numbers
|
||||||
|
'#zzab99',
|
||||||
|
'#abcdef0',
|
||||||
|
'rgb(255%, 100, 100)',
|
||||||
|
'rgb(255%, 100, -10)',
|
||||||
|
'rgb(100%, 100, -10)',
|
||||||
|
'hsl(370, 100, 10)',
|
||||||
|
'hsl(200, 100%, 160%)',
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($css_colors as $color) {
|
||||||
|
$check = Colors::validateColor($color);
|
||||||
|
print "Color check: $color with (" . Colors::ALL . "): ";
|
||||||
|
if ($check) {
|
||||||
|
print '<span style="color: green;">OK</span>';
|
||||||
|
} else {
|
||||||
|
print '<span style="color: red;">ERROR</span>';
|
||||||
|
}
|
||||||
|
print "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<hr>";
|
||||||
|
|
||||||
|
// valid rgb/hsl checks
|
||||||
|
$color = 'hsla(360, 100%, 60%, 0.556)';
|
||||||
|
$check = Colors::validateColor($color);
|
||||||
|
print "Color check: $color with (" . Colors::ALL . "): ";
|
||||||
|
if ($check) {
|
||||||
|
print '<span style="color: green;">OK</span>';
|
||||||
|
} else {
|
||||||
|
print '<span style="color: red;">ERROR</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// invalid flag
|
||||||
|
echo "<hr>";
|
||||||
|
try {
|
||||||
|
$check = Colors::validateColor('#ab12cd', 99);
|
||||||
|
print "No Exception";
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
print "ERROR: " . $e->getCode() . ": " . $e->getMessage() . "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// error message
|
||||||
|
print $log->printErrorMsg();
|
||||||
|
|
||||||
|
print "</body></html>";
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -22,7 +22,7 @@ define('USE_DATABASE', false);
|
|||||||
// sample config
|
// sample config
|
||||||
require 'config.php';
|
require 'config.php';
|
||||||
// define log file id
|
// define log file id
|
||||||
$LOG_FILE_ID = 'classTest-colors';
|
$LOG_FILE_ID = 'classTest-convert-colors';
|
||||||
ob_end_flush();
|
ob_end_flush();
|
||||||
|
|
||||||
use CoreLibs\Convert\Colors;
|
use CoreLibs\Convert\Colors;
|
||||||
@@ -40,7 +40,7 @@ $log = new CoreLibs\Debug\Logging([
|
|||||||
]);
|
]);
|
||||||
$color_class = 'CoreLibs\Convert\Colors';
|
$color_class = 'CoreLibs\Convert\Colors';
|
||||||
|
|
||||||
$PAGE_NAME = 'TEST CLASS: COLORS';
|
$PAGE_NAME = 'TEST CLASS: CONVERT COLORS';
|
||||||
print "<!DOCTYPE html>";
|
print "<!DOCTYPE html>";
|
||||||
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
print "<html><head><title>" . $PAGE_NAME . "</title><head>";
|
||||||
print "<body>";
|
print "<body>";
|
||||||
@@ -118,7 +118,8 @@ print "<b>TRUNCATE test_foobar</b><br>";
|
|||||||
$query = "TRUNCATE test_foobar";
|
$query = "TRUNCATE test_foobar";
|
||||||
$db->dbExec($query);
|
$db->dbExec($query);
|
||||||
|
|
||||||
$status = $db->dbExec("INSERT INTO test_foo (test) VALUES ('FOO TEST " . time() . "') RETURNING test");
|
$status = $db->dbExec("INSERT INTO test_foo (test, number_a) VALUES "
|
||||||
|
. "('FOO TEST " . time() . "', 1) RETURNING test, number_a");
|
||||||
print "DIRECT INSERT STATUS: " . Support::printToString($status) . " |<br>"
|
print "DIRECT INSERT STATUS: " . Support::printToString($status) . " |<br>"
|
||||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||||
. "DB OBJECT: <pre>" . print_r($status, true) . "</pre>| "
|
. "DB OBJECT: <pre>" . print_r($status, true) . "</pre>| "
|
||||||
@@ -127,6 +128,29 @@ print "DIRECT INSERT STATUS: " . Support::printToString($status) . " |<br>"
|
|||||||
. "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | "
|
. "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | "
|
||||||
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||||
|
|
||||||
|
var_dump($db->dbGetReturningExt());
|
||||||
|
|
||||||
|
// same as above but use an EOM string
|
||||||
|
$some_time = time();
|
||||||
|
$query = <<<EOM
|
||||||
|
INSERT INTO test_foo (
|
||||||
|
test, number_a
|
||||||
|
) VALUES (
|
||||||
|
'EOM FOO TEST $some_time', 1
|
||||||
|
)
|
||||||
|
RETURNING test, number_a
|
||||||
|
EOM;
|
||||||
|
$status = $db->dbExec($query);
|
||||||
|
print "EOM STRING DIRECT INSERT STATUS: " . Support::printToString($status) . " |<br>"
|
||||||
|
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||||
|
. "DB OBJECT: <pre>" . print_r($status, true) . "</pre>| "
|
||||||
|
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
||||||
|
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||||
|
. "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | "
|
||||||
|
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||||
|
|
||||||
|
var_dump($db->dbGetReturningExt());
|
||||||
|
|
||||||
// should throw deprecated error
|
// should throw deprecated error
|
||||||
// $db->getReturningExt();
|
// $db->getReturningExt();
|
||||||
print "DIRECT INSERT PREVIOUS INSERTED: "
|
print "DIRECT INSERT PREVIOUS INSERTED: "
|
||||||
@@ -137,7 +161,7 @@ print "DIRECT INSERT PREVIOUS INSERTED: "
|
|||||||
$db->dbPrepare("ins_test_foo", "INSERT INTO test_foo (test) VALUES ($1) RETURNING test");
|
$db->dbPrepare("ins_test_foo", "INSERT INTO test_foo (test) VALUES ($1) RETURNING test");
|
||||||
$status = $db->dbExecute("ins_test_foo", ['BAR TEST ' . time()]);
|
$status = $db->dbExecute("ins_test_foo", ['BAR TEST ' . time()]);
|
||||||
print "PREPARE INSERT[ins_test_foo] STATUS: " . Support::printToString($status) . " |<br>"
|
print "PREPARE INSERT[ins_test_foo] STATUS: " . Support::printToString($status) . " |<br>"
|
||||||
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
. "QUERY: " . $db->dbGetPrepareCursorValue('ins_test_foo', 'query') . " |<br>"
|
||||||
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
||||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||||
. "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
. "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||||
@@ -145,6 +169,28 @@ print "PREPARE INSERT[ins_test_foo] STATUS: " . Support::printToString($status)
|
|||||||
print "PREPARE INSERT PREVIOUS INSERTED: "
|
print "PREPARE INSERT PREVIOUS INSERTED: "
|
||||||
. print_r($db->dbReturnRow("SELECT test_foo_id, test FROM test_foo "
|
. print_r($db->dbReturnRow("SELECT test_foo_id, test FROM test_foo "
|
||||||
. "WHERE test_foo_id = " . $db->dbGetInsertPK()), true) . "<br>";
|
. "WHERE test_foo_id = " . $db->dbGetInsertPK()), true) . "<br>";
|
||||||
|
|
||||||
|
print "PREPARE CURSOR RETURN:<br>";
|
||||||
|
foreach (['pk_name', 'count', 'query', 'returning_id'] as $key) {
|
||||||
|
print "KEY: " . $key . ': ' . $db->dbGetPrepareCursorValue('ins_test_foo', $key) . "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = <<<EOM
|
||||||
|
INSERT INTO test_foo (
|
||||||
|
test
|
||||||
|
) VALUES (
|
||||||
|
$1
|
||||||
|
)
|
||||||
|
RETURNING test
|
||||||
|
EOM;
|
||||||
|
$db->dbPrepare("ins_test_foo_eom", $query);
|
||||||
|
$status = $db->dbExecute("ins_test_foo_eom", ['EOM BAR TEST ' . time()]);
|
||||||
|
print "EOM STRING PREPARE INSERT[ins_test_foo_eom] STATUS: " . Support::printToString($status) . " |<br>"
|
||||||
|
. "QUERY: " . $db->dbGetPrepareCursorValue('ins_test_foo_eom', 'query') . " |<br>"
|
||||||
|
. "PRIMARY KEY: " . $db->dbGetInsertPK() . " | "
|
||||||
|
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||||
|
. "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||||
|
|
||||||
// returning test with multiple entries
|
// returning test with multiple entries
|
||||||
// $status = $db->db_exec(
|
// $status = $db->db_exec(
|
||||||
// "INSERT INTO test_foo (test) VALUES "
|
// "INSERT INTO test_foo (test) VALUES "
|
||||||
@@ -167,6 +213,26 @@ print "DIRECT MULTIPLE INSERT WITH RETURN STATUS: " . Support::printToString($st
|
|||||||
. "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | "
|
. "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | "
|
||||||
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||||
|
|
||||||
|
$t_1 = time();
|
||||||
|
$t_2 = time();
|
||||||
|
$t_3 = time();
|
||||||
|
$query = <<<EOM
|
||||||
|
INSERT INTO test_foo (
|
||||||
|
test
|
||||||
|
) VALUES
|
||||||
|
('EOM BAR 1 $t_1'),
|
||||||
|
('EOM BAR 2 $t_2'),
|
||||||
|
('EOM BAR 3 $t_3')
|
||||||
|
RETURNING test_foo_id, test
|
||||||
|
EOM;
|
||||||
|
$status = $db->dbExec($query);
|
||||||
|
print "EOM STRING DIRECT MULTIPLE INSERT WITH RETURN STATUS: " . Support::printToString($status) . " |<br>"
|
||||||
|
. "QUERY: " . $db->dbGetQuery() . " |<br>"
|
||||||
|
. "PRIMARY KEYS: " . print_r($db->dbGetInsertPK(), true) . " | "
|
||||||
|
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||||
|
. "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | "
|
||||||
|
. "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||||
|
|
||||||
// no returning, but not needed ;
|
// no returning, but not needed ;
|
||||||
$status = $db->dbExec("INSERT INTO test_foo (test) VALUES ('FOO; TEST " . time() . "')");
|
$status = $db->dbExec("INSERT INTO test_foo (test) VALUES ('FOO; TEST " . time() . "')");
|
||||||
print "DIRECT INSERT NO RETURN STATUS: " . Support::printToString($status) . " |<br>"
|
print "DIRECT INSERT NO RETURN STATUS: " . Support::printToString($status) . " |<br>"
|
||||||
@@ -235,6 +301,24 @@ if ($db->dbPrepare('sel_test_foo', $q_prep) === false) {
|
|||||||
. $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/"
|
. $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/"
|
||||||
. "<pre>" . print_r($db->dbGetCombinedErrorHistory(), true) . "</pre><br>";
|
. "<pre>" . print_r($db->dbGetCombinedErrorHistory(), true) . "</pre><br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "<hr>";
|
||||||
|
print "EOM STYLE STRINGS<br>";
|
||||||
|
$test_bar = $db->dbEscapeLiteral('SOMETHING DIFFERENT');
|
||||||
|
// Test EOM block
|
||||||
|
$q = <<<EOM
|
||||||
|
SELECT test_foo_id, test, some_bool, string_a, number_a,
|
||||||
|
-- comment
|
||||||
|
number_a_numeric, some_time
|
||||||
|
FROM test_foo
|
||||||
|
WHERE test = $test_bar
|
||||||
|
ORDER BY test_foo_id DESC LIMIT 5
|
||||||
|
EOM;
|
||||||
|
while (is_array($res = $db->dbReturn($q))) {
|
||||||
|
print "ROW: <pre>" . print_r($res, true) . "</pre><br>";
|
||||||
|
}
|
||||||
|
echo "<hr>";
|
||||||
|
|
||||||
// NOTE: try to replacate connection still exists if script is run a second time
|
// NOTE: try to replacate connection still exists if script is run a second time
|
||||||
// open pg bouncer connection
|
// open pg bouncer connection
|
||||||
$db_pgb = new CoreLibs\DB\IO($DB_CONFIG['test_pgbouncer'], $log);
|
$db_pgb = new CoreLibs\DB\IO($DB_CONFIG['test_pgbouncer'], $log);
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ $ECHO_ALL = true;
|
|||||||
$LOG_FILE_ID = 'classTest-form';
|
$LOG_FILE_ID = 'classTest-form';
|
||||||
ob_end_flush();
|
ob_end_flush();
|
||||||
|
|
||||||
|
// start session, needed for Form\Generate
|
||||||
|
$SET_SESSION_NAME = EDIT_SESSION_NAME;
|
||||||
|
$session = new CoreLibs\Create\Session($SET_SESSION_NAME);
|
||||||
|
|
||||||
// define an array for page use
|
// define an array for page use
|
||||||
$table_arrays = [];
|
$table_arrays = [];
|
||||||
$table_arrays[\CoreLibs\Get\System::getPageName(1)] = [
|
$table_arrays[\CoreLibs\Get\System::getPageName(1)] = [
|
||||||
|
|||||||
@@ -54,8 +54,9 @@ print "<html><head><title>TEST CLASS</title><head>";
|
|||||||
print "<body>";
|
print "<body>";
|
||||||
|
|
||||||
print '<div><a href="class_test.db.php">Class Test: DB</a></div>';
|
print '<div><a href="class_test.db.php">Class Test: DB</a></div>';
|
||||||
print '<div><a href="class_test.db.DbReturn.php">Class Test: DB dbReturn</a></div>';
|
print '<div><a href="class_test.db.dbReturn.php">Class Test: DB dbReturn</a></div>';
|
||||||
print '<div><a href="class_test.colors.php">Class Test: COLORS</a></div>';
|
print '<div><a href="class_test.convert.colors.php">Class Test: CONVERT COLORS</a></div>';
|
||||||
|
print '<div><a href="class_test.check.colors.php">Class Test: CHECK COLORS</a></div>';
|
||||||
print '<div><a href="class_test.mime.php">Class Test: MIME</a></div>';
|
print '<div><a href="class_test.mime.php">Class Test: MIME</a></div>';
|
||||||
print '<div><a href="class_test.json.php">Class Test: JSON</a></div>';
|
print '<div><a href="class_test.json.php">Class Test: JSON</a></div>';
|
||||||
print '<div><a href="class_test.token.php">Class Test: FORM TOKEN</a></div>';
|
print '<div><a href="class_test.token.php">Class Test: FORM TOKEN</a></div>';
|
||||||
@@ -84,6 +85,7 @@ print '<div><a href="class_test.output.form.php">Class Test: OUTPUT FORM</a></di
|
|||||||
print '<div><a href="class_test.admin.backend.php">Class Test: BACKEND ADMIN CLASS</a></div>';
|
print '<div><a href="class_test.admin.backend.php">Class Test: BACKEND ADMIN CLASS</a></div>';
|
||||||
print '<div><a href="class_test.lang.php">Class Test: LANG/L10n</a></div>';
|
print '<div><a href="class_test.lang.php">Class Test: LANG/L10n</a></div>';
|
||||||
print '<div><a href="class_test.session.php">Class Test: SESSION</a></div>';
|
print '<div><a href="class_test.session.php">Class Test: SESSION</a></div>';
|
||||||
|
print '<div><a href="class_test.session.read.php">Class Test: SESSION: READ</a></div>';
|
||||||
print '<div><a href="class_test.smarty.php">Class Test: SMARTY</a></div>';
|
print '<div><a href="class_test.smarty.php">Class Test: SMARTY</a></div>';
|
||||||
print '<div><a href="class_test.login.php">Class Test: LOGIN</a></div>';
|
print '<div><a href="class_test.login.php">Class Test: LOGIN</a></div>';
|
||||||
print '<div><a href="class_test.autoloader.php">Class Test: AUTOLOADER</a></div>';
|
print '<div><a href="class_test.autoloader.php">Class Test: AUTOLOADER</a></div>';
|
||||||
|
|||||||
52
www/composer.lock
generated
52
www/composer.lock
generated
@@ -9,30 +9,30 @@
|
|||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
"name": "doctrine/instantiator",
|
"name": "doctrine/instantiator",
|
||||||
"version": "1.4.1",
|
"version": "1.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/doctrine/instantiator.git",
|
"url": "https://github.com/doctrine/instantiator.git",
|
||||||
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
|
"reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
|
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
|
||||||
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
|
"reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.1 || ^8.0"
|
"php": "^7.1 || ^8.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"doctrine/coding-standard": "^9",
|
"doctrine/coding-standard": "^9 || ^11",
|
||||||
"ext-pdo": "*",
|
"ext-pdo": "*",
|
||||||
"ext-phar": "*",
|
"ext-phar": "*",
|
||||||
"phpbench/phpbench": "^0.16 || ^1",
|
"phpbench/phpbench": "^0.16 || ^1",
|
||||||
"phpstan/phpstan": "^1.4",
|
"phpstan/phpstan": "^1.4",
|
||||||
"phpstan/phpstan-phpunit": "^1",
|
"phpstan/phpstan-phpunit": "^1",
|
||||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
||||||
"vimeo/psalm": "^4.22"
|
"vimeo/psalm": "^4.30 || ^5.4"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/doctrine/instantiator/issues",
|
"issues": "https://github.com/doctrine/instantiator/issues",
|
||||||
"source": "https://github.com/doctrine/instantiator/tree/1.4.1"
|
"source": "https://github.com/doctrine/instantiator/tree/1.5.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-03-03T08:28:38+00:00"
|
"time": "2022-12-30T00:15:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "myclabs/deep-copy",
|
"name": "myclabs/deep-copy",
|
||||||
@@ -138,16 +138,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nikic/php-parser",
|
"name": "nikic/php-parser",
|
||||||
"version": "v4.15.1",
|
"version": "v4.15.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||||
"reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900"
|
"reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900",
|
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc",
|
||||||
"reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900",
|
"reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -188,9 +188,9 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1"
|
"source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2"
|
||||||
},
|
},
|
||||||
"time": "2022-09-04T07:30:47+00:00"
|
"time": "2022-11-12T15:38:23+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phar-io/manifest",
|
"name": "phar-io/manifest",
|
||||||
@@ -305,16 +305,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-code-coverage",
|
"name": "phpunit/php-code-coverage",
|
||||||
"version": "9.2.17",
|
"version": "9.2.23",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||||
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8"
|
"reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8",
|
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c",
|
||||||
"reference": "aa94dc41e8661fe90c7316849907cba3007b10d8",
|
"reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -370,7 +370,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17"
|
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.23"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -378,7 +378,7 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-08-30T12:24:04+00:00"
|
"time": "2022-12-28T12:41:10+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-file-iterator",
|
"name": "phpunit/php-file-iterator",
|
||||||
@@ -623,16 +623,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "9.5.25",
|
"version": "9.5.27",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d"
|
"reference": "a2bc7ffdca99f92d959b3f2270529334030bba38"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38",
|
||||||
"reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d",
|
"reference": "a2bc7ffdca99f92d959b3f2270529334030bba38",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -705,7 +705,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -721,7 +721,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-09-25T03:44:45+00:00"
|
"time": "2022-12-09T07:31:23+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/cli-parser",
|
"name": "sebastian/cli-parser",
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ if ($is_secure) {
|
|||||||
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', $DB_CONFIG[DB_CONFIG_NAME] ?? []);
|
define('DB_CONFIG', $DB_CONFIG[DB_CONFIG_NAME] ?? []);
|
||||||
// because we can't change constant, but we want to for db debug flag
|
// because we can't change constant, but we want to for db debug flag
|
||||||
$GLOBALS['DB_CONFIG_SET'] = DB_CONFIG;
|
$GLOBALS['DB_CONFIG_SET'] = DB_CONFIG;
|
||||||
@@ -268,9 +268,9 @@ define('SITE_ENCODING', $SITE_CONFIG[HOST_NAME]['site_encoding'] ?? DEFAULT_ENCO
|
|||||||
define('LOGIN_ENABLED', $SITE_CONFIG[HOST_NAME]['login_enabled'] ?? false);
|
define('LOGIN_ENABLED', $SITE_CONFIG[HOST_NAME]['login_enabled'] ?? false);
|
||||||
define('AUTH', $SITE_CONFIG[HOST_NAME]['auth'] ?? false);
|
define('AUTH', $SITE_CONFIG[HOST_NAME]['auth'] ?? false);
|
||||||
// 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);
|
||||||
|
|||||||
@@ -23,23 +23,8 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
$DEBUG_ALL = true;
|
|
||||||
$PRINT_ALL = true;
|
|
||||||
$ECHO_ALL = false;
|
|
||||||
$DB_DEBUG = true;
|
|
||||||
|
|
||||||
// TODO: only extract _POST data that is needed
|
|
||||||
extract($_POST, EXTR_SKIP);
|
|
||||||
|
|
||||||
ob_start();
|
ob_start();
|
||||||
require 'config.php';
|
require 'config.php';
|
||||||
// overrride debug flags
|
|
||||||
if (!DEBUG) {
|
|
||||||
$DEBUG_ALL = false;
|
|
||||||
$PRINT_ALL = false;
|
|
||||||
$DB_DEBUG = false;
|
|
||||||
$ECHO_ALL = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// should be utf8
|
// should be utf8
|
||||||
header("Content-type: text/html; charset=" . DEFAULT_ENCODING);
|
header("Content-type: text/html; charset=" . DEFAULT_ENCODING);
|
||||||
@@ -51,14 +36,16 @@ $log = new CoreLibs\Debug\Logging([
|
|||||||
'file_id' => LOG_FILE_ID . 'EditBase',
|
'file_id' => LOG_FILE_ID . 'EditBase',
|
||||||
'print_file_date' => true,
|
'print_file_date' => true,
|
||||||
'per_class' => true,
|
'per_class' => true,
|
||||||
'debug_all' => $DEBUG_ALL,
|
'debug_all' => $DEBUG_ALL ?? false,
|
||||||
'echo_all' => $ECHO_ALL,
|
'echo_all' => $ECHO_ALL ?? false,
|
||||||
'print_all' => $PRINT_ALL,
|
'print_all' => $PRINT_ALL ?? false,
|
||||||
]);
|
]);
|
||||||
// db connection
|
// db connection
|
||||||
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
$db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||||
// login page
|
// login page
|
||||||
$login = new CoreLibs\ACL\Login($db, $log, $session);
|
$login = new CoreLibs\ACL\Login($db, $log, $session);
|
||||||
|
// space for setting special debug flags
|
||||||
|
// $login->log->setLogLevelAll('debug', true);
|
||||||
// lang, path, domain
|
// lang, path, domain
|
||||||
// pre auto detect language after login
|
// pre auto detect language after login
|
||||||
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||||
@@ -70,493 +57,10 @@ $l10n = new \CoreLibs\Language\L10n(
|
|||||||
);
|
);
|
||||||
// flush and start
|
// flush and start
|
||||||
ob_end_flush();
|
ob_end_flush();
|
||||||
// turn off set log per class
|
|
||||||
$log->setLogPer('class', false);
|
|
||||||
// create form class
|
|
||||||
$form = new CoreLibs\Output\Form\Generate(DB_CONFIG, $log, $l10n, $locale);
|
|
||||||
if ($form->mobile_phone) {
|
|
||||||
echo "I am sorry, but this page cannot be viewed by a mobile phone";
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
// smarty template engine (extended Translation version)
|
|
||||||
$smarty = new CoreLibs\Template\SmartyExtend($l10n, $locale);
|
|
||||||
|
|
||||||
// $form->log->debug('POST', $form->log->prAr($_POST));
|
// init smarty and form class
|
||||||
|
$edit_base = new CoreLibs\Admin\EditBase(DB_CONFIG, $log, $l10n, $locale);
|
||||||
if (TARGET == 'live' || TARGET == 'remote') {
|
// creates edit pages and runs actions
|
||||||
// login
|
$edit_base->editBaseRun();
|
||||||
$login->log->setLogLevelAll('debug', DEBUG ? true : false);
|
|
||||||
$login->log->setLogLevelAll('echo', false);
|
|
||||||
$login->log->setLogLevelAll('print', DEBUG ? true : false);
|
|
||||||
// form
|
|
||||||
$form->log->setLogLevelAll('debug', DEBUG ? true : false);
|
|
||||||
$form->log->setLogLevelAll('echo', false);
|
|
||||||
$form->log->setLogLevelAll('print', DEBUG ? true : false);
|
|
||||||
}
|
|
||||||
// space for setting special debug flags
|
|
||||||
$login->log->setLogLevelAll('debug', true);
|
|
||||||
// set smarty arrays
|
|
||||||
$HEADER = [];
|
|
||||||
$DATA = [];
|
|
||||||
$DEBUG_DATA = [];
|
|
||||||
// set the template dir
|
|
||||||
// WARNING: this has a special check for the mailing tool layout (old layout)
|
|
||||||
if (defined('LAYOUT')) {
|
|
||||||
$smarty->setTemplateDir(BASE . INCLUDES . TEMPLATES . CONTENT_PATH);
|
|
||||||
$DATA['css'] = LAYOUT . CSS;
|
|
||||||
$DATA['js'] = LAYOUT . JS;
|
|
||||||
} else {
|
|
||||||
$smarty->setTemplateDir(TEMPLATES);
|
|
||||||
$DATA['css'] = CSS;
|
|
||||||
$DATA['js'] = JS;
|
|
||||||
}
|
|
||||||
// set table width
|
|
||||||
$table_width = '100%';
|
|
||||||
|
|
||||||
// define all needed smarty stuff for the general HTML/page building
|
|
||||||
$HEADER['CSS'] = CSS;
|
|
||||||
$HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING;
|
|
||||||
$HEADER['STYLESHEET'] = $ADMIN_STYLESHEET ?? ADMIN_STYLESHEET;
|
|
||||||
|
|
||||||
if ($form->my_page_name == 'edit_order') {
|
|
||||||
// get is for "table_name" and "where" only
|
|
||||||
$table_name = $_GET['table_name'] ?? '';
|
|
||||||
// $where = $_GET['where'] ?? '';
|
|
||||||
// order name is _always_ order_number for the edit interface
|
|
||||||
|
|
||||||
// follwing arrays do exist here:
|
|
||||||
// $position ... has the positions of the [0..max], cause in a <select>
|
|
||||||
// I can't put an number into the array field, in this array,
|
|
||||||
// there are the POSITION stored, that should CHANGE there order (up/down)
|
|
||||||
// $row_data_id ... has ALL ids from the sorting part
|
|
||||||
// $row_data_order ... has ALL order positions from the soirting part
|
|
||||||
if (!isset($position)) {
|
|
||||||
$position = [];
|
|
||||||
}
|
|
||||||
$row_data_id = $_POST['row_data_id'] ?? [];
|
|
||||||
$original_id = $row_data_id;
|
|
||||||
if (count($position)) {
|
|
||||||
$row_data_order = $_POST['row_data_order'];
|
|
||||||
|
|
||||||
// FIRST u have to put right sort, then read again ...
|
|
||||||
// hast to be >0 or the first one is selected and then there is no move
|
|
||||||
if (isset($up) && isset($position[0]) && $position[0] > 0) {
|
|
||||||
for ($i = 0; $i < count($position); $i++) {
|
|
||||||
// change position order
|
|
||||||
// this gets temp, id before that, gets actual (moves one "down")
|
|
||||||
// this gets the old before (moves one "up")
|
|
||||||
// is done for every element in row
|
|
||||||
// echo "A: ".$row_data_id[$position[$i]]
|
|
||||||
// ." (".$row_data_order[$position[$i]].") -- ".$row_data_id[$position[$i]-1]
|
|
||||||
// ." (".$row_data_order[$position[$i]-1].")<br>";
|
|
||||||
$temp_id = $row_data_id[$position[$i]] ?? null;
|
|
||||||
$row_data_id[$position[$i]] = $row_data_id[$position[$i] - 1] ?? null;
|
|
||||||
$row_data_id[$position[$i] - 1] = $temp_id;
|
|
||||||
// echo "A: ".$row_data_id[$position[$i]]
|
|
||||||
// ." (".$row_data_order[$position[$i]].") -- "
|
|
||||||
// .$row_data_id[$position[$i]-1]." (".$row_data_order[$position[$i]-1].")<br>";
|
|
||||||
} // for
|
|
||||||
} // if up
|
|
||||||
|
|
||||||
// the last position id from position array is not to be the count - 1 of
|
|
||||||
// row_data_id array, or it is the last element
|
|
||||||
if (isset($down) && ($position[count($position) - 1] != (count($row_data_id) - 1))) {
|
|
||||||
for ($i = count($position) - 1; $i >= 0; $i--) {
|
|
||||||
// same as up, just up in other way, starts from bottom (last element) and moves "up"
|
|
||||||
// element before actuel gets temp, this element, becomes element after this,
|
|
||||||
// element after this, gets this
|
|
||||||
$temp_id = $row_data_id[$position[$i] + 1] ?? null;
|
|
||||||
$row_data_id[$position[$i] + 1] = $row_data_id[$position[$i]] ?? null;
|
|
||||||
$row_data_id[$position[$i]] = $temp_id;
|
|
||||||
} // for
|
|
||||||
} // if down
|
|
||||||
|
|
||||||
// write data ... (which has to be abstrackt ...)
|
|
||||||
if (
|
|
||||||
(isset($up) && $position[0] > 0) ||
|
|
||||||
(isset($down) && ($position[count($position) - 1] != (count($row_data_id) - 1)))
|
|
||||||
) {
|
|
||||||
for ($i = 0; $i < count($row_data_id); $i++) {
|
|
||||||
if (isset($row_data_order[$i]) && isset($row_data_id[$i])) {
|
|
||||||
$q = "UPDATE " . $table_name
|
|
||||||
. " SET order_number = " . $row_data_order[$i]
|
|
||||||
. " WHERE " . $table_name . "_id = " . $row_data_id[$i];
|
|
||||||
$q = $form->dbExec($q);
|
|
||||||
}
|
|
||||||
} // for all article ids ...
|
|
||||||
} // if write
|
|
||||||
} // if there is something to move
|
|
||||||
|
|
||||||
// get ...
|
|
||||||
$q = "SELECT " . $table_name . "_id, name, order_number FROM " . $table_name . " ";
|
|
||||||
if (!empty($where_string)) {
|
|
||||||
$q .= "WHERE $where_string ";
|
|
||||||
}
|
|
||||||
$q .= "ORDER BY order_number";
|
|
||||||
|
|
||||||
// init arrays
|
|
||||||
$row_data = [];
|
|
||||||
$options_id = [];
|
|
||||||
$options_name = [];
|
|
||||||
$options_selected = [];
|
|
||||||
// DB read data for menu
|
|
||||||
while (is_array($res = $form->dbReturn($q))) {
|
|
||||||
$row_data[] = [
|
|
||||||
"id" => $res[$table_name . "_id"],
|
|
||||||
"name" => $res["name"],
|
|
||||||
"order" => $res["order_number"]
|
|
||||||
];
|
|
||||||
} // while read data ...
|
|
||||||
|
|
||||||
// html title
|
|
||||||
$HEADER['HTML_TITLE'] = $form->l->__('Edit Order');
|
|
||||||
|
|
||||||
$messages = [];
|
|
||||||
// error msg
|
|
||||||
if (isset($error)) {
|
|
||||||
if (!isset($msg)) {
|
|
||||||
$msg = [];
|
|
||||||
}
|
|
||||||
$messages[] = [
|
|
||||||
'msg' => $msg,
|
|
||||||
'class' => 'error',
|
|
||||||
'width' => '100%'
|
|
||||||
];
|
|
||||||
}
|
|
||||||
$DATA['form_error_msg'] = $messages;
|
|
||||||
|
|
||||||
// all the row data
|
|
||||||
for ($i = 0; $i < count($row_data); $i++) {
|
|
||||||
$options_id[] = $i;
|
|
||||||
$options_name[] = $row_data[$i]['name'];
|
|
||||||
// list of points to order
|
|
||||||
for ($j = 0; $j < count($position); $j++) {
|
|
||||||
// if matches, put into select array
|
|
||||||
if (
|
|
||||||
isset($original_id[$position[$j]]) && isset($row_data[$i]['id']) &&
|
|
||||||
$original_id[$position[$j]] == $row_data[$i]['id']
|
|
||||||
) {
|
|
||||||
$options_selected[] = $i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$DATA['options_id'] = $options_id;
|
|
||||||
$DATA['options_name'] = $options_name;
|
|
||||||
$DATA['options_selected'] = $options_selected;
|
|
||||||
|
|
||||||
// hidden list for the data (id, order number)
|
|
||||||
$row_data_id = [];
|
|
||||||
$row_data_order = [];
|
|
||||||
for ($i = 0; $i < count($row_data); $i++) {
|
|
||||||
$row_data_id[] = $row_data[$i]['id'];
|
|
||||||
$row_data_order[] = $row_data[$i]['order'];
|
|
||||||
}
|
|
||||||
$DATA['row_data_id'] = $row_data_id;
|
|
||||||
$DATA['row_data_order'] = $row_data_order;
|
|
||||||
|
|
||||||
// hidden names for the table & where string
|
|
||||||
$DATA['table_name'] = $table_name;
|
|
||||||
$DATA['where_string'] = $where_string ?? '';
|
|
||||||
|
|
||||||
$EDIT_TEMPLATE = 'edit_order.tpl';
|
|
||||||
} else {
|
|
||||||
// load call only if id is set
|
|
||||||
if (isset(${$form->archive_pk_name})) {
|
|
||||||
$form->formProcedureLoad(${$form->archive_pk_name});
|
|
||||||
}
|
|
||||||
$form->formProcedureNew();
|
|
||||||
$form->formProcedureSave();
|
|
||||||
$form->formProcedureDelete();
|
|
||||||
// delete call only if those two are set
|
|
||||||
if (isset($element_list) && isset($remove_name)) {
|
|
||||||
$form->formProcedureDeleteFromElementList($element_list, $remove_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
$DATA['table_width'] = $table_width;
|
|
||||||
|
|
||||||
$messages = [];
|
|
||||||
// write out error / status messages
|
|
||||||
$messages[] = $form->formPrintMsg();
|
|
||||||
$DATA['form_error_msg'] = $messages;
|
|
||||||
|
|
||||||
// MENU START
|
|
||||||
// request some session vars
|
|
||||||
if (!isset($HEADER_COLOR)) {
|
|
||||||
$DATA['HEADER_COLOR'] = '#E0E2FF';
|
|
||||||
} else {
|
|
||||||
$DATA['HEADER_COLOR'] = $_SESSION['HEADER_COLOR'];
|
|
||||||
}
|
|
||||||
$DATA['USER_NAME'] = $_SESSION['USER_NAME'];
|
|
||||||
$DATA['EUID'] = $_SESSION['EUID'];
|
|
||||||
$DATA['GROUP_NAME'] = $_SESSION['GROUP_NAME'];
|
|
||||||
$DATA['GROUP_LEVEL'] = $_SESSION['GROUP_ACL_LEVEL'];
|
|
||||||
$PAGES = $_SESSION['PAGES'];
|
|
||||||
|
|
||||||
//$form->log->debug('menu', $form->log->prAr($PAGES));
|
|
||||||
|
|
||||||
// build nav from $PAGES ...
|
|
||||||
if (!isset($PAGES) || !is_array($PAGES)) {
|
|
||||||
$PAGES = [];
|
|
||||||
}
|
|
||||||
$menuarray = [];
|
|
||||||
foreach ($PAGES as $PAGE_CUID => $PAGE_DATA) {
|
|
||||||
if ($PAGE_DATA['menu'] && $PAGE_DATA['online']) {
|
|
||||||
$menuarray[] = $PAGE_DATA;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// split point for nav points
|
|
||||||
$COUNT_NAV_POINTS = count($menuarray);
|
|
||||||
$SPLIT_FACTOR = 3;
|
|
||||||
$START_SPLIT_COUNT = 3;
|
|
||||||
// WTF ?? I dunno what I am doing here ...
|
|
||||||
for ($i = 9; $i < $COUNT_NAV_POINTS; $i += $START_SPLIT_COUNT) {
|
|
||||||
if ($COUNT_NAV_POINTS > $i) {
|
|
||||||
$SPLIT_FACTOR += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$position = 0;
|
|
||||||
$menu_data = [];
|
|
||||||
// for ($i = 1; $i <= count($menuarray); $i ++) {
|
|
||||||
foreach ($menuarray as $i => $data) {
|
|
||||||
// do that for new array
|
|
||||||
$j = $i + 1;
|
|
||||||
$menu_data[$i]['pagename'] = htmlentities($data['page_name']);
|
|
||||||
$menu_data[$i]['filename'] =
|
|
||||||
// prefix folder or host name
|
|
||||||
(isset($data['hostname']) && $data['hostname'] ?
|
|
||||||
$data['hostname'] :
|
|
||||||
''
|
|
||||||
)
|
|
||||||
// filename
|
|
||||||
. ($data['filename'] ?? '')
|
|
||||||
// query string
|
|
||||||
. (isset($data['query_string']) && $data['query_string'] ?
|
|
||||||
$data['query_string'] :
|
|
||||||
''
|
|
||||||
);
|
|
||||||
if ($j == 1 || !($i % $SPLIT_FACTOR)) {
|
|
||||||
$menu_data[$i]['splitfactor_in'] = 1;
|
|
||||||
} else {
|
|
||||||
$menu_data[$i]['splitfactor_in'] = 0;
|
|
||||||
}
|
|
||||||
// on matching, we also need to check if we are in the same folder
|
|
||||||
if (
|
|
||||||
isset($data['filename']) &&
|
|
||||||
$data['filename'] == \CoreLibs\Get\System::getPageName() &&
|
|
||||||
(!isset($data['hostname']) || (
|
|
||||||
isset($data['hostname']) &&
|
|
||||||
(!$data['hostname'] || strstr($data['hostname'], CONTENT_PATH) !== false)
|
|
||||||
))
|
|
||||||
) {
|
|
||||||
$position = $i;
|
|
||||||
$menu_data[$i]['position'] = 1;
|
|
||||||
$menu_data[$i]['popup'] = 0;
|
|
||||||
} else {
|
|
||||||
// add query stuff
|
|
||||||
// HAS TO DONE LATER ... set urlencode, etc ...
|
|
||||||
// check if popup needed
|
|
||||||
if (isset($data['popup']) && $data['popup'] == 1) {
|
|
||||||
$menu_data[$i]['popup'] = 1;
|
|
||||||
$menu_data[$i]['rand'] = uniqid((string)rand());
|
|
||||||
$menu_data[$i]['width'] = $data['popup_x'];
|
|
||||||
$menu_data[$i]['height'] = $data['popup_y'];
|
|
||||||
} else {
|
|
||||||
$menu_data[$i]['popup'] = 0;
|
|
||||||
}
|
|
||||||
$menu_data[$i]['position'] = 0;
|
|
||||||
} // highlight or not
|
|
||||||
if (!($j % $SPLIT_FACTOR) || (($j + 1) > count($menuarray))) {
|
|
||||||
$menu_data[$i]['splitfactor_out'] = 1;
|
|
||||||
} else {
|
|
||||||
$menu_data[$i]['splitfactor_out'] = 0;
|
|
||||||
}
|
|
||||||
} // for
|
|
||||||
// $form->log->debug('MENU ARRAY', $form->log->prAr($menu_data));
|
|
||||||
$DATA['menu_data'] = $menu_data;
|
|
||||||
$DATA['page_name'] = $menuarray[$position]['page_name'] ?? '-Undefined [' . $position . '] -';
|
|
||||||
$L_TITLE = $DATA['page_name'];
|
|
||||||
// html title
|
|
||||||
$HEADER['HTML_TITLE'] = $form->l->__($L_TITLE);
|
|
||||||
// END MENU
|
|
||||||
// LOAD AND NEW
|
|
||||||
$DATA['load'] = $form->formCreateLoad();
|
|
||||||
$DATA['new'] = $form->formCreateNew();
|
|
||||||
// SHOW DATA PART
|
|
||||||
if ($form->yes) {
|
|
||||||
$DATA['form_yes'] = $form->yes;
|
|
||||||
$DATA['form_my_page_name'] = $form->my_page_name;
|
|
||||||
$DATA['filename_exist'] = 0;
|
|
||||||
$DATA['drop_down_input'] = 0;
|
|
||||||
$elements = [];
|
|
||||||
// depending on the "getPageName()" I show different stuff
|
|
||||||
switch ($form->my_page_name) {
|
|
||||||
case 'edit_users':
|
|
||||||
$elements[] = $form->formCreateElement('login_error_count');
|
|
||||||
$elements[] = $form->formCreateElement('login_error_date_last');
|
|
||||||
$elements[] = $form->formCreateElement('login_error_date_first');
|
|
||||||
$elements[] = $form->formCreateElement('enabled');
|
|
||||||
$elements[] = $form->formCreateElement('deleted');
|
|
||||||
$elements[] = $form->formCreateElement('protected');
|
|
||||||
$elements[] = $form->formCreateElement('username');
|
|
||||||
$elements[] = $form->formCreateElement('password');
|
|
||||||
$elements[] = $form->formCreateElement('password_change_interval');
|
|
||||||
$elements[] = $form->formCreateElement('login_user_id');
|
|
||||||
$elements[] = $form->formCreateElement('login_user_id_set_date');
|
|
||||||
$elements[] = $form->formCreateElement('login_user_id_last_revalidate');
|
|
||||||
$elements[] = $form->formCreateElement('login_user_id_locked');
|
|
||||||
$elements[] = $form->formCreateElement('login_user_id_revalidate_after');
|
|
||||||
$elements[] = $form->formCreateElement('login_user_id_valid_from');
|
|
||||||
$elements[] = $form->formCreateElement('login_user_id_valid_until');
|
|
||||||
$elements[] = $form->formCreateElement('email');
|
|
||||||
$elements[] = $form->formCreateElement('last_name');
|
|
||||||
$elements[] = $form->formCreateElement('first_name');
|
|
||||||
$elements[] = $form->formCreateElement('edit_group_id');
|
|
||||||
$elements[] = $form->formCreateElement('edit_access_right_id');
|
|
||||||
$elements[] = $form->formCreateElement('strict');
|
|
||||||
$elements[] = $form->formCreateElement('locked');
|
|
||||||
$elements[] = $form->formCreateElement('lock_until');
|
|
||||||
$elements[] = $form->formCreateElement('lock_after');
|
|
||||||
$elements[] = $form->formCreateElement('admin');
|
|
||||||
$elements[] = $form->formCreateElement('debug');
|
|
||||||
$elements[] = $form->formCreateElement('db_debug');
|
|
||||||
$elements[] = $form->formCreateElement('edit_language_id');
|
|
||||||
$elements[] = $form->formCreateElement('edit_scheme_id');
|
|
||||||
$elements[] = $form->formCreateElementListTable('edit_access_user');
|
|
||||||
$elements[] = $form->formCreateElement('additional_acl');
|
|
||||||
break;
|
|
||||||
case 'edit_schemes':
|
|
||||||
$elements[] = $form->formCreateElement('enabled');
|
|
||||||
$elements[] = $form->formCreateElement('name');
|
|
||||||
$elements[] = $form->formCreateElement('header_color');
|
|
||||||
$elements[] = $form->formCreateElement('template');
|
|
||||||
break;
|
|
||||||
case 'edit_pages':
|
|
||||||
if (!isset($form->table_array['edit_page_id']['value'])) {
|
|
||||||
$q = "DELETE FROM temp_files";
|
|
||||||
$form->dbExec($q);
|
|
||||||
// gets all files in the current dir and dirs given ending with .php
|
|
||||||
$folders = ['../admin/', '../frontend/'];
|
|
||||||
$files = ['*.php'];
|
|
||||||
$search_glob = [];
|
|
||||||
foreach ($folders as $folder) {
|
|
||||||
// make sure this folder actually exists
|
|
||||||
if (is_dir(ROOT . $folder)) {
|
|
||||||
foreach ($files as $file) {
|
|
||||||
$search_glob[] = $folder . $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$crap = exec('ls ' . join(' ', $search_glob), $output, $status);
|
|
||||||
// now get all that are NOT in de DB
|
|
||||||
$q = "INSERT INTO temp_files (folder, filename) VALUES ";
|
|
||||||
$t_q = '';
|
|
||||||
foreach ($output as $output_file) {
|
|
||||||
// split the ouput into folder and file
|
|
||||||
$pathinfo = pathinfo($output_file);
|
|
||||||
if (!empty($pathinfo['dirname'])) {
|
|
||||||
$pathinfo['dirname'] .= DIRECTORY_SEPARATOR;
|
|
||||||
} else {
|
|
||||||
$pathinfo['dirname'] = '';
|
|
||||||
}
|
|
||||||
if ($t_q) {
|
|
||||||
$t_q .= ', ';
|
|
||||||
}
|
|
||||||
$t_q .= "('" . $form->dbEscapeString($pathinfo['dirname']) . "', '"
|
|
||||||
. $form->dbEscapeString($pathinfo['basename']) . "')";
|
|
||||||
}
|
|
||||||
$form->dbExec($q . $t_q, 'NULL');
|
|
||||||
$elements[] = $form->formCreateElement('filename');
|
|
||||||
} else {
|
|
||||||
// show file menu
|
|
||||||
// just show name of file ...
|
|
||||||
$DATA['filename_exist'] = 1;
|
|
||||||
$DATA['filename'] = $form->table_array['filename']['value'];
|
|
||||||
} // File Name View IF
|
|
||||||
$elements[] = $form->formCreateElement('hostname');
|
|
||||||
$elements[] = $form->formCreateElement('name');
|
|
||||||
// $elements[] = $form->formCreateElement('tag');
|
|
||||||
// $elements[] = $form->formCreateElement('min_acl');
|
|
||||||
$elements[] = $form->formCreateElement('order_number');
|
|
||||||
$elements[] = $form->formCreateElement('online');
|
|
||||||
$elements[] = $form->formCreateElement('menu');
|
|
||||||
$elements[] = $form->formCreateElementListTable('edit_query_string');
|
|
||||||
$elements[] = $form->formCreateElement('content_alias_edit_page_id');
|
|
||||||
$elements[] = $form->formCreateElementListTable('edit_page_content');
|
|
||||||
$elements[] = $form->formCreateElement('popup');
|
|
||||||
$elements[] = $form->formCreateElement('popup_x');
|
|
||||||
$elements[] = $form->formCreateElement('popup_y');
|
|
||||||
$elements[] = $form->formCreateElementReferenceTable('edit_visible_group');
|
|
||||||
$elements[] = $form->formCreateElementReferenceTable('edit_menu_group');
|
|
||||||
break;
|
|
||||||
case 'edit_languages':
|
|
||||||
$elements[] = $form->formCreateElement('enabled');
|
|
||||||
$elements[] = $form->formCreateElement('short_name');
|
|
||||||
$elements[] = $form->formCreateElement('long_name');
|
|
||||||
$elements[] = $form->formCreateElement('iso_name');
|
|
||||||
break;
|
|
||||||
case 'edit_groups':
|
|
||||||
$elements[] = $form->formCreateElement('enabled');
|
|
||||||
$elements[] = $form->formCreateElement('name');
|
|
||||||
$elements[] = $form->formCreateElement('edit_access_right_id');
|
|
||||||
$elements[] = $form->formCreateElement('edit_scheme_id');
|
|
||||||
$elements[] = $form->formCreateElementListTable('edit_page_access');
|
|
||||||
$elements[] = $form->formCreateElement('additional_acl');
|
|
||||||
break;
|
|
||||||
case 'edit_visible_group':
|
|
||||||
$elements[] = $form->formCreateElement('name');
|
|
||||||
$elements[] = $form->formCreateElement('flag');
|
|
||||||
break;
|
|
||||||
case 'edit_menu_group':
|
|
||||||
$elements[] = $form->formCreateElement('name');
|
|
||||||
$elements[] = $form->formCreateElement('flag');
|
|
||||||
$elements[] = $form->formCreateElement('order_number');
|
|
||||||
break;
|
|
||||||
case 'edit_access':
|
|
||||||
$elements[] = $form->formCreateElement('name');
|
|
||||||
$elements[] = $form->formCreateElement('enabled');
|
|
||||||
$elements[] = $form->formCreateElement('protected');
|
|
||||||
$elements[] = $form->formCreateElement('color');
|
|
||||||
$elements[] = $form->formCreateElement('description');
|
|
||||||
// add name/value list here
|
|
||||||
$elements[] = $form->formCreateElementListTable('edit_access_data');
|
|
||||||
$elements[] = $form->formCreateElement('additional_acl');
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
print '[No valid page definition given]';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// $form->log->debug('edit', "Elements: <pre>".$form->log->prAr($elements));
|
|
||||||
$DATA['elements'] = $elements;
|
|
||||||
$DATA['hidden'] = $form->formCreateHiddenFields();
|
|
||||||
$DATA['save_delete'] = $form->formCreateSaveDelete();
|
|
||||||
} else {
|
|
||||||
$DATA['form_yes'] = 0;
|
|
||||||
}
|
|
||||||
$EDIT_TEMPLATE = 'edit_body.tpl';
|
|
||||||
}
|
|
||||||
|
|
||||||
// debug data, if DEBUG flag is on, this data is print out
|
|
||||||
$DEBUG_DATA['DEBUG'] = $DEBUG_TMPL ?? '';
|
|
||||||
|
|
||||||
// create main data array
|
|
||||||
$CONTENT_DATA = array_merge($HEADER, $DATA, $DEBUG_DATA);
|
|
||||||
// data is 1:1 mapping (all vars, values, etc)
|
|
||||||
foreach ($CONTENT_DATA as $key => $value) {
|
|
||||||
$smarty->assign($key, $value);
|
|
||||||
}
|
|
||||||
if (is_dir(BASE . TEMPLATES_C)) {
|
|
||||||
$smarty->setCompileDir(BASE . TEMPLATES_C);
|
|
||||||
}
|
|
||||||
if (is_dir(BASE . CACHE)) {
|
|
||||||
$smarty->setCacheDir(BASE . CACHE);
|
|
||||||
}
|
|
||||||
$smarty->display($EDIT_TEMPLATE, 'editAdmin_' . $smarty->lang, 'editAdmin_' . $smarty->lang);
|
|
||||||
|
|
||||||
$form->log->debug('DEBUGEND', '==================================== [Form END]');
|
|
||||||
// debug output
|
|
||||||
echo $login->log->printErrorMsg();
|
|
||||||
echo $form->log->printErrorMsg();
|
|
||||||
|
|
||||||
// __END__
|
// __END__
|
||||||
|
|||||||
@@ -1,110 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
$edit_access = [
|
|
||||||
'table_array' => [
|
|
||||||
'edit_access_id' => [
|
|
||||||
'value' => $GLOBALS['edit_access_id'] ?? '',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk' => 1
|
|
||||||
],
|
|
||||||
'name' => [
|
|
||||||
'value' => $GLOBALS['name'] ?? '',
|
|
||||||
'output_name' => 'Access Group Name',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'alphanumericspace|unique'
|
|
||||||
],
|
|
||||||
'description' => [
|
|
||||||
'value' => $GLOBALS['description'] ?? '',
|
|
||||||
'output_name' => 'Description',
|
|
||||||
'type' => 'textarea'
|
|
||||||
],
|
|
||||||
'color' => [
|
|
||||||
'value' => $GLOBALS['color'] ?? '',
|
|
||||||
'output_name' => 'Color',
|
|
||||||
'mandatory' => 0,
|
|
||||||
'type' => 'text',
|
|
||||||
'size' => 6,
|
|
||||||
'length' => 6,
|
|
||||||
'error_check' => 'custom',
|
|
||||||
'error_regex' => "/[\dA-Fa-f]{6}/",
|
|
||||||
'error_example' => 'F6A544'
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'value' => $GLOBALS['enabled'] ?? 0,
|
|
||||||
'output_name' => 'Enabled',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1, // OR 'bool' => 1
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'protected' => [
|
|
||||||
'value' => $GLOBALS['protected'] ?? 0,
|
|
||||||
'output_name' => 'Protected',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'additional_acl' => [
|
|
||||||
'value' => $GLOBALS['additional_acl'] ?? '',
|
|
||||||
'output_name' => 'Additional ACL (as JSON)',
|
|
||||||
'type' => 'textarea',
|
|
||||||
'error_check' => 'json',
|
|
||||||
'rows' => 10,
|
|
||||||
'cols' => 60
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'table_name' => 'edit_access',
|
|
||||||
"load_query" => "SELECT edit_access_id, name FROM edit_access ORDER BY name",
|
|
||||||
'show_fields' => [
|
|
||||||
[
|
|
||||||
'name' => 'name'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'element_list' => [
|
|
||||||
'edit_access_data' => [
|
|
||||||
'output_name' => 'Edit Access Data',
|
|
||||||
'delete_name' => 'remove_edit_access_data',
|
|
||||||
// 'type' => 'reference_data', // is not a sub table read and connect, but only a sub table with data
|
|
||||||
'max_empty' => 5, // maxium visible if no data is set, if filled add this number to visible
|
|
||||||
'prefix' => 'ead',
|
|
||||||
'elements' => [
|
|
||||||
'name' => [
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'alphanumeric|unique',
|
|
||||||
'output_name' => 'Name',
|
|
||||||
'mandatory' => 1
|
|
||||||
],
|
|
||||||
'value' => [
|
|
||||||
'type' => 'text',
|
|
||||||
'output_name' => 'Value'
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'output_name' => 'Activate',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [1]
|
|
||||||
],
|
|
||||||
/*'edit_access_id' => [
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'hidden',
|
|
||||||
'fk_id' => 1 // reference main key from master table above
|
|
||||||
],*/
|
|
||||||
'edit_access_data_id' => [
|
|
||||||
'type' => 'hidden',
|
|
||||||
'int' => 1,
|
|
||||||
'pk_id' => 1
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
// __END__
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
$edit_groups = [
|
|
||||||
'table_array' => [
|
|
||||||
'edit_group_id' => [
|
|
||||||
'value' => $GLOBALS['edit_group_id'] ?? '',
|
|
||||||
'pk' => 1,
|
|
||||||
'type' => 'hidden'
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'value' => $GLOBALS['enabled'] ?? '',
|
|
||||||
'output_name' => 'Enabled',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'binary',
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'name' => [
|
|
||||||
'value' => $GLOBALS['name'] ?? '',
|
|
||||||
'output_name' => 'Group Name',
|
|
||||||
'type' => 'text',
|
|
||||||
'mandatory' => 1
|
|
||||||
],
|
|
||||||
'edit_access_right_id' => [
|
|
||||||
'value' => $GLOBALS['edit_access_right_id'] ?? '',
|
|
||||||
'output_name' => 'Group Level',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
|
||||||
],
|
|
||||||
'edit_scheme_id' => [
|
|
||||||
'value' => $GLOBALS['edit_scheme_id'] ?? '',
|
|
||||||
'output_name' => 'Group Scheme',
|
|
||||||
'int_null' => 1,
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'query' => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
|
|
||||||
],
|
|
||||||
'additional_acl' => [
|
|
||||||
'value' => $GLOBALS['additional_acl'] ?? '',
|
|
||||||
'output_name' => 'Additional ACL (as JSON)',
|
|
||||||
'type' => 'textarea',
|
|
||||||
'error_check' => 'json',
|
|
||||||
'rows' => 10,
|
|
||||||
'cols' => 60
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'load_query' => "SELECT edit_group_id, name, enabled FROM edit_group ORDER BY name",
|
|
||||||
'table_name' => 'edit_group',
|
|
||||||
'show_fields' => [
|
|
||||||
[
|
|
||||||
'name' => 'name'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'enabled',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'Enabled: '
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'element_list' => [
|
|
||||||
'edit_page_access' => [
|
|
||||||
'output_name' => 'Pages',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'delete' => 0, // set then reference entries are deleted, else the 'enable' flag is only set
|
|
||||||
'enable_name' => 'enable_page_access',
|
|
||||||
'prefix' => 'epa',
|
|
||||||
'read_data' => [
|
|
||||||
'table_name' => 'edit_page',
|
|
||||||
'pk_id' => 'edit_page_id',
|
|
||||||
'name' => 'name',
|
|
||||||
'order' => 'order_number'
|
|
||||||
],
|
|
||||||
'elements' => [
|
|
||||||
'edit_page_access_id' => [
|
|
||||||
'type' => 'hidden',
|
|
||||||
'int' => 1,
|
|
||||||
'pk_id' => 1
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'output_name' => 'Activate',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [1],
|
|
||||||
],
|
|
||||||
'edit_access_right_id' => [
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'output_name' => 'Access Level',
|
|
||||||
'int' => 1,
|
|
||||||
'preset' => 1, // first of the select
|
|
||||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
|
||||||
],
|
|
||||||
'edit_page_id' => [
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'hidden'
|
|
||||||
],
|
|
||||||
/*,
|
|
||||||
'edit_default' => [
|
|
||||||
'output_name' => 'Default',
|
|
||||||
'type' => 'radio',
|
|
||||||
'mandatory' => 1
|
|
||||||
],*/
|
|
||||||
],
|
|
||||||
], // edit pages ggroup
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
// __END__
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
$edit_languages = [
|
|
||||||
'table_array' => [
|
|
||||||
'edit_language_id' => [
|
|
||||||
'value' => $GLOBALS['edit_language_id'] ?? '',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk' => 1
|
|
||||||
],
|
|
||||||
'short_name' => [
|
|
||||||
'value' => $GLOBALS['short_name'] ?? '',
|
|
||||||
'output_name' => 'Language (short)',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text',
|
|
||||||
'size' => 2,
|
|
||||||
'length' => 2
|
|
||||||
],
|
|
||||||
'long_name' => [
|
|
||||||
'value' => $GLOBALS['long_name'] ?? '',
|
|
||||||
'output_name' => 'Language (long)',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text',
|
|
||||||
'size' => 40
|
|
||||||
],
|
|
||||||
'iso_name' => [
|
|
||||||
'value' => $GLOBALS['iso_name'] ?? '',
|
|
||||||
'output_name' => 'ISO Code',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text'
|
|
||||||
],
|
|
||||||
'order_number' => [
|
|
||||||
'value' => $GLOBALS['order_number'] ?? '',
|
|
||||||
'int' => 1,
|
|
||||||
'order' => 1
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'value' => $GLOBALS['enabled'] ?? '',
|
|
||||||
'output_name' => 'Enabled',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'binary',
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'lang_default' => [
|
|
||||||
'value' => $GLOBALS['lang_default'] ?? '',
|
|
||||||
'output_name' => 'Default Language',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'binary',
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'load_query' => "SELECT edit_language_id, long_name, iso_name, enabled FROM edit_language ORDER BY long_name",
|
|
||||||
'show_fields' => [
|
|
||||||
[
|
|
||||||
'name' => 'long_name'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'iso_name',
|
|
||||||
'before_value' => 'ISO: '
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'enabled',
|
|
||||||
'before_value' => 'Enabled: ',
|
|
||||||
'binary' => ['Yes','No'],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'table_name' => 'edit_language'
|
|
||||||
];
|
|
||||||
|
|
||||||
// __END__
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
$edit_menu_group = [
|
|
||||||
'table_array' => [
|
|
||||||
'edit_menu_group_id' => [
|
|
||||||
'value' => $GLOBALS['edit_menu_group_id'] ?? '',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk' => 1
|
|
||||||
],
|
|
||||||
'name' => [
|
|
||||||
'value' => $GLOBALS['name'] ?? '',
|
|
||||||
'output_name' => 'Group name',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text'
|
|
||||||
],
|
|
||||||
'flag' => [
|
|
||||||
'value' => $GLOBALS['flag'] ?? '',
|
|
||||||
'output_name' => 'Flag',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'alphanumeric|unique'
|
|
||||||
],
|
|
||||||
'order_number' => [
|
|
||||||
'value' => $GLOBALS['order_number'] ?? '',
|
|
||||||
'output_name' => 'Group order',
|
|
||||||
'type' => 'order',
|
|
||||||
'int' => 1,
|
|
||||||
'order' => 1
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'table_name' => 'edit_menu_group',
|
|
||||||
'load_query' => "SELECT edit_menu_group_id, name FROM edit_menu_group ORDER BY name",
|
|
||||||
'show_fields' => [
|
|
||||||
[
|
|
||||||
'name' => 'name'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
// __END__
|
|
||||||
@@ -1,249 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
$edit_pages = [
|
|
||||||
'table_array' => [
|
|
||||||
'edit_page_id' => [
|
|
||||||
'value' => $GLOBALS['edit_page_id'] ?? '',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk' => 1
|
|
||||||
],
|
|
||||||
'filename' => [
|
|
||||||
'value' => $GLOBALS['filename'] ?? '',
|
|
||||||
'output_name' => 'Add File ...',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'query' => "SELECT DISTINCT temp_files.filename AS id, temp_files.folder || temp_files.filename AS name "
|
|
||||||
. "FROM temp_files "
|
|
||||||
. "LEFT JOIN edit_page ep ON temp_files.filename = ep.filename "
|
|
||||||
. "WHERE ep.filename IS NULL"
|
|
||||||
],
|
|
||||||
'hostname' => [
|
|
||||||
'value' => $GLOBALS['hostname'] ?? '',
|
|
||||||
'output_name' => 'Hostname or folder',
|
|
||||||
'type' => 'text'
|
|
||||||
],
|
|
||||||
'name' => [
|
|
||||||
'value' => $GLOBALS['name'] ?? '',
|
|
||||||
'output_name' => 'Page name',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text'
|
|
||||||
],
|
|
||||||
'order_number' => [
|
|
||||||
'value' => $GLOBALS['order_number'] ?? '',
|
|
||||||
'output_name' => 'Page order',
|
|
||||||
'type' => 'order',
|
|
||||||
'int' => 1,
|
|
||||||
'order' => 1
|
|
||||||
],
|
|
||||||
/* 'flag' => [
|
|
||||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
|
||||||
'output_name' => 'Page Flag',
|
|
||||||
'type' => 'drop_down_array',
|
|
||||||
'query' => [
|
|
||||||
'0' => '0',
|
|
||||||
'1' => '1',
|
|
||||||
'2' => '2',
|
|
||||||
'3' => '3',
|
|
||||||
'4' => '4',
|
|
||||||
'5' => '5'
|
|
||||||
],
|
|
||||||
],*/
|
|
||||||
'online' => [
|
|
||||||
'value' => $GLOBALS['online'] ?? '',
|
|
||||||
'output_name' => 'Online',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'binary',
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'menu' => [
|
|
||||||
'value' => $GLOBALS['menu'] ?? '',
|
|
||||||
'output_name' => 'Menu',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'binary',
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'popup' => [
|
|
||||||
'value' => $GLOBALS['popup'] ?? '',
|
|
||||||
'output_name' => 'Popup',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'binary',
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'popup_x' => [
|
|
||||||
'value' => $GLOBALS['popup_x'] ?? '',
|
|
||||||
'output_name' => 'Popup Width',
|
|
||||||
'int_null' => 1,
|
|
||||||
'type' => 'text',
|
|
||||||
'size' => 4,
|
|
||||||
'length' => 4
|
|
||||||
],
|
|
||||||
'popup_y' => [
|
|
||||||
'value' => $GLOBALS['popup_y'] ?? '',
|
|
||||||
'output_name' => 'Popup Height',
|
|
||||||
'int_null' => 1,
|
|
||||||
'type' => 'text',
|
|
||||||
'size' => 4,
|
|
||||||
'length' => 4
|
|
||||||
],
|
|
||||||
'content_alias_edit_page_id' => [
|
|
||||||
'value' => $GLOBALS['content_alias_edit_page_id'] ?? '',
|
|
||||||
'output_name' => 'Content Alias Source',
|
|
||||||
'int_null' => 1,
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
// query creation
|
|
||||||
'select_distinct' => 0,
|
|
||||||
'pk_name' => 'edit_page_id AS content_alias_edit_page_id',
|
|
||||||
'input_name' => 'name',
|
|
||||||
'table_name' => 'edit_page',
|
|
||||||
'where_not_self' => 1,
|
|
||||||
'order_by' => 'order_number'
|
|
||||||
// 'query' => "SELECT edit_page_id AS content_alias_edit_page_id, name ".
|
|
||||||
// "FROM edit_page ".
|
|
||||||
// (isset($GLOBALS['edit_page_id']) ? " WHERE edit_page_id <> ".$GLOBALS['edit_page_id'] : "")." ".
|
|
||||||
// "ORDER BY order_number"
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'load_query' => "SELECT edit_page_id, "
|
|
||||||
. "CASE WHEN hostname IS NOT NULL THEN hostname ELSE ''::VARCHAR END || filename AS filename, "
|
|
||||||
. "name, online, menu, popup "
|
|
||||||
. "FROM edit_page "
|
|
||||||
. "ORDER BY order_number",
|
|
||||||
'table_name' => 'edit_page',
|
|
||||||
'show_fields' => [
|
|
||||||
[
|
|
||||||
'name' => 'name'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'filename',
|
|
||||||
'before_value' => 'Filename: '
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'online',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'Online: '
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'menu',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'Menu: '
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'popup',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'Popup: '
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'reference_arrays' => [
|
|
||||||
'edit_visible_group' => [
|
|
||||||
'table_name' => 'edit_page_visible_group',
|
|
||||||
'other_table_pk' => 'edit_visible_group_id',
|
|
||||||
'output_name' => 'Visible Groups (access)',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'select_size' => 10,
|
|
||||||
'selected' => $GLOBALS['edit_visible_group_id'] ?? '',
|
|
||||||
'query' => "SELECT edit_visible_group_id, 'Name: ' || name || ', ' || 'Flag: ' || flag "
|
|
||||||
. "FROM edit_visible_group ORDER BY name"
|
|
||||||
],
|
|
||||||
'edit_menu_group' => [
|
|
||||||
'table_name' => 'edit_page_menu_group',
|
|
||||||
'other_table_pk' => 'edit_menu_group_id',
|
|
||||||
'output_name' => 'Menu Groups (grouping)',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'select_size' => 10,
|
|
||||||
'selected' => $GLOBALS['edit_menu_group_id'] ?? '',
|
|
||||||
'query' => "SELECT edit_menu_group_id, 'Name: ' || name || ', ' || 'Flag: ' || flag "
|
|
||||||
. "FROM edit_menu_group ORDER BY order_number"
|
|
||||||
],
|
|
||||||
|
|
||||||
],
|
|
||||||
'element_list' => [
|
|
||||||
'edit_query_string' => [
|
|
||||||
'output_name' => 'Query Strings',
|
|
||||||
'delete_name' => 'remove_query_string',
|
|
||||||
'prefix' => 'eqs',
|
|
||||||
'elements' => [
|
|
||||||
'name' => [
|
|
||||||
'output_name' => 'Name',
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'unique|alphanumeric',
|
|
||||||
'mandatory' => 1
|
|
||||||
],
|
|
||||||
'value' => [
|
|
||||||
'output_name' => 'Value',
|
|
||||||
'type' => 'text'
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'output_name' => 'Enabled',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'element_list' => [1],
|
|
||||||
],
|
|
||||||
'dynamic' => [
|
|
||||||
'output_name' => 'Dynamic',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'element_list' => [1],
|
|
||||||
],
|
|
||||||
'edit_query_string_id' => [
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk_id' => 1
|
|
||||||
],
|
|
||||||
], // elements
|
|
||||||
], // query_string element list
|
|
||||||
'edit_page_content' => [
|
|
||||||
'output_name' => 'Page Content',
|
|
||||||
'delete_name' => 'remove_page_content',
|
|
||||||
'prefix' => 'epc',
|
|
||||||
'elements' => [
|
|
||||||
'name' => [
|
|
||||||
'output_name' => 'Content',
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'alphanumeric',
|
|
||||||
'mandatory' => 1
|
|
||||||
],
|
|
||||||
'uid' => [
|
|
||||||
'output_name' => 'UID',
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'unique|alphanumeric',
|
|
||||||
'mandatory' => 1
|
|
||||||
],
|
|
||||||
'order_number' => [
|
|
||||||
'output_name' => 'Order',
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'int',
|
|
||||||
'mandatory' => 1
|
|
||||||
],
|
|
||||||
'online' => [
|
|
||||||
'output_name' => 'Online',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'element_list' => [1],
|
|
||||||
],
|
|
||||||
'edit_access_right_id' => [
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'output_name' => 'Access Level',
|
|
||||||
'int' => 1,
|
|
||||||
'preset' => 1, // first of the select
|
|
||||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
|
||||||
],
|
|
||||||
'edit_page_content_id' => [
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk_id' => 1
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
], // element list
|
|
||||||
];
|
|
||||||
|
|
||||||
// __END__
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
$edit_schemes = [
|
|
||||||
'table_array' => [
|
|
||||||
'edit_scheme_id' => [
|
|
||||||
'value' => $GLOBALS['edit_scheme_id'] ?? '',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk' => 1
|
|
||||||
],
|
|
||||||
'name' => [
|
|
||||||
'value' => $GLOBALS['name'] ?? '',
|
|
||||||
'output_name' => 'Scheme Name',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text'
|
|
||||||
],
|
|
||||||
'header_color' => [
|
|
||||||
'value' => $GLOBALS['header_color'] ?? '',
|
|
||||||
'output_name' => 'Header Color',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text',
|
|
||||||
'size' => 6,
|
|
||||||
'length' => 6,
|
|
||||||
'error_check' => 'custom',
|
|
||||||
'error_regex' => '/[\dA-Fa-f]{6}/',
|
|
||||||
'error_example' => 'F6A544'
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'value' => $GLOBALS['enabled'] ?? '',
|
|
||||||
'output_name' => 'Enabled',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'binary',
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'template' => [
|
|
||||||
'value' => $GLOBALS['template'] ?? '',
|
|
||||||
'output_name' => 'Template',
|
|
||||||
'type' => 'text'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'table_name' => 'edit_scheme',
|
|
||||||
'load_query' => "SELECT edit_scheme_id, name, enabled FROM edit_scheme ORDER BY name",
|
|
||||||
'show_fields' => [
|
|
||||||
[
|
|
||||||
'name' => 'name'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'enabled',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'Enabled: '
|
|
||||||
],
|
|
||||||
],
|
|
||||||
]; // main array
|
|
||||||
|
|
||||||
// __END__
|
|
||||||
@@ -1,426 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
$edit_users = [
|
|
||||||
'table_array' => [
|
|
||||||
'edit_user_id' => [
|
|
||||||
'value' => $GLOBALS['edit_user_id'] ?? '',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk' => 1,
|
|
||||||
'int' => 1
|
|
||||||
],
|
|
||||||
'username' => [
|
|
||||||
'value' => $GLOBALS['username'] ?? '',
|
|
||||||
'output_name' => 'Username',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'error_check' => 'unique|alphanumericextended',
|
|
||||||
'type' => 'text',
|
|
||||||
// if not min_edit_acl only read
|
|
||||||
// if not min_show_acl not visible
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '-1',
|
|
||||||
],
|
|
||||||
'password' => [
|
|
||||||
'value' => $GLOBALS['password'] ?? '',
|
|
||||||
'HIDDEN_value' => $GLOBALS['HIDDEN_password'] ?? '',
|
|
||||||
'CONFIRM_value' => $GLOBALS['CONFIRM_password'] ?? '',
|
|
||||||
'output_name' => 'Password',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'password', // later has to be password for encryption in database
|
|
||||||
'update' => [ // connected field updates, and update data
|
|
||||||
'password_change_date' => [ // db row to update
|
|
||||||
'type' => 'date', // type of field (int/text/date/etc)
|
|
||||||
'value' => 'NOW()' // value [todo: complex reference
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
// password date when first insert and password is set, needs special field with connection to password
|
|
||||||
// password reset force interval, if set, user needs to reset password after X time period
|
|
||||||
'password_change_interval' => [
|
|
||||||
'value' => $GLOBALS['password_change_interval'] ?? '',
|
|
||||||
'output_name' => 'Password change interval',
|
|
||||||
// can be any date length format. n Y/M/D [not H/M/S], only one set, no combination
|
|
||||||
'error_check' => 'intervalshort',
|
|
||||||
'type' => 'text',
|
|
||||||
'interval' => 1, // interval needs NULL write for empty
|
|
||||||
'size' => 5, // make it 5 chars long
|
|
||||||
'length' => 5,
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'value' => $GLOBALS['enabled'] ?? '',
|
|
||||||
'output_name' => 'Enabled',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '-1',
|
|
||||||
],
|
|
||||||
'deleted' => [
|
|
||||||
'value' => $GLOBALS['deleted'] ?? '',
|
|
||||||
'output_name' => 'Deleted',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'strict' => [
|
|
||||||
'value' => $GLOBALS['strict'] ?? '',
|
|
||||||
'output_name' => 'Strict (Lock after errors)',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'locked' => [
|
|
||||||
'value' => $GLOBALS['locked'] ?? '',
|
|
||||||
'output_name' => 'Locked (auto set if strict with errors)',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'admin' => [
|
|
||||||
'value' => $GLOBALS['admin'] ?? '',
|
|
||||||
'output_name' => 'Admin',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'debug' => [
|
|
||||||
'value' => $GLOBALS['debug'] ?? '',
|
|
||||||
'output_name' => 'Debug',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'db_debug' => [
|
|
||||||
'value' => $GLOBALS['db_debug'] ?? '',
|
|
||||||
'output_name' => 'DB Debug',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'email' => [
|
|
||||||
'value' => $GLOBALS['email'] ?? '',
|
|
||||||
'output_name' => 'E-Mail',
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'email',
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'last_name' => [
|
|
||||||
'value' => $GLOBALS['last_name'] ?? '',
|
|
||||||
'output_name' => 'Last Name',
|
|
||||||
'type' => 'text',
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'first_name' => [
|
|
||||||
'value' => $GLOBALS['first_name'] ?? '',
|
|
||||||
'output_name' => 'First Name',
|
|
||||||
'type' => 'text',
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'lock_until' => [
|
|
||||||
'value' => $GLOBALS['lock_until'] ?? '',
|
|
||||||
'output_name' => 'Lock account until',
|
|
||||||
'type' => 'datetime',
|
|
||||||
'error_check' => 'datetime',
|
|
||||||
'sql_read' => 'YYYY-MM-DD HH24:MI',
|
|
||||||
'datetime' => 1,
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'lock_after' => [
|
|
||||||
'value' => $GLOBALS['lock_after'] ?? '',
|
|
||||||
'output_name' => 'Lock account after',
|
|
||||||
'type' => 'datetime',
|
|
||||||
'error_check' => 'datetime',
|
|
||||||
'sql_read' => 'YYYY-MM-DD HH24:MI',
|
|
||||||
'datetime' => 1,'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_user_id' => [
|
|
||||||
'value' => $GLOBALS['login_user_id'] ?? '',
|
|
||||||
'output_name' => '_GET/_POST loginUserId direct login ID',
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'unique|custom',
|
|
||||||
'error_regex' => "/^[A-Za-z0-9]+$/",
|
|
||||||
'emptynull' => 1,'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_user_id_set_date' => [
|
|
||||||
'output_name' => 'loginUserId set date',
|
|
||||||
'value' => $GLOBALS['login_user_id_set_date'] ?? '',
|
|
||||||
'type' => 'view',
|
|
||||||
'empty' => '-',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_user_id_last_revalidate' => [
|
|
||||||
'output_name' => 'loginUserId last revalidate date',
|
|
||||||
'value' => $GLOBALS['login_user_id_last_revalidate'] ?? '',
|
|
||||||
'type' => 'view',
|
|
||||||
'empty' => '-',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_user_id_locked' => [
|
|
||||||
'value' => $GLOBALS['login_user_id_locked'] ?? '',
|
|
||||||
'output_name' => 'loginUserId usage locked',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_user_id_revalidate_after' => [
|
|
||||||
'value' => $GLOBALS['login_user_id_revalidate_after'] ?? '',
|
|
||||||
'output_name' => 'loginUserId, User must login after n days',
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'intervalshort',
|
|
||||||
'interval' => 1, // interval needs NULL write for empty
|
|
||||||
'size' => 5, // make it 5 chars long
|
|
||||||
'length' => 5,
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_user_id_valid_from' => [
|
|
||||||
'value' => $GLOBALS['login_user_id_valid_from'] ?? '',
|
|
||||||
'output_name' => 'loginUserId valid from',
|
|
||||||
'type' => 'datetime',
|
|
||||||
'error_check' => 'datetime',
|
|
||||||
'sql_read' => 'YYYY-MM-DD HH24:MI',
|
|
||||||
'datetime' => 1,
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_user_id_valid_until' => [
|
|
||||||
'value' => $GLOBALS['login_user_id_valid_until'] ?? '',
|
|
||||||
'output_name' => 'loginUserId valid until',
|
|
||||||
'type' => 'datetime',
|
|
||||||
'error_check' => 'datetime',
|
|
||||||
'sql_read' => 'YYYY-MM-DD HH24:MI',
|
|
||||||
'datetime' => 1,
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'edit_language_id' => [
|
|
||||||
'value' => $GLOBALS['edit_language_id'] ?? '',
|
|
||||||
'output_name' => 'Language',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'query' => "SELECT edit_language_id, long_name FROM edit_language WHERE enabled = 1 ORDER BY order_number",
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'edit_scheme_id' => [
|
|
||||||
'value' => $GLOBALS['edit_scheme_id'] ?? '',
|
|
||||||
'output_name' => 'Scheme',
|
|
||||||
'int_null' => 1,
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'query' => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name",
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'edit_group_id' => [
|
|
||||||
'value' => $GLOBALS['edit_group_id'] ?? '',
|
|
||||||
'output_name' => 'Group',
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'query' => "SELECT edit_group_id, name FROM edit_group WHERE enabled = 1 ORDER BY name",
|
|
||||||
'mandatory' => 1,
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'edit_access_right_id' => [
|
|
||||||
'value' => $GLOBALS['edit_access_right_id'] ?? '',
|
|
||||||
'output_name' => 'User Level',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'int' => 1,
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level",
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_error_count' => [
|
|
||||||
'output_name' => 'Login error count',
|
|
||||||
'value' => $GLOBALS['login_error_count'] ?? '',
|
|
||||||
'type' => 'view',
|
|
||||||
'empty' => '0',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_error_date_last' => [
|
|
||||||
'output_name' => 'Last login error',
|
|
||||||
'value' => $GLOBALS['login_error_date_liast'] ?? '',
|
|
||||||
'type' => 'view',
|
|
||||||
'empty' => '-',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'login_error_date_first' => [
|
|
||||||
'output_name' => 'First login error',
|
|
||||||
'value' => $GLOBALS['login_error_date_first'] ?? '',
|
|
||||||
'type' => 'view',
|
|
||||||
'empty' => '-',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'protected' => [
|
|
||||||
'value' => $GLOBALS['protected'] ?? '',
|
|
||||||
'output_name' => 'Protected',
|
|
||||||
'type' => 'binary',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [
|
|
||||||
'1' => 'Yes',
|
|
||||||
'0' => 'No'
|
|
||||||
],
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
'additional_acl' => [
|
|
||||||
'value' => $GLOBALS['additional_acl'] ?? '',
|
|
||||||
'output_name' => 'Additional ACL (as JSON)',
|
|
||||||
'type' => 'textarea',
|
|
||||||
'error_check' => 'json',
|
|
||||||
'rows' => 10,
|
|
||||||
'cols' => 60,
|
|
||||||
'min_edit_acl' => '100',
|
|
||||||
'min_show_acl' => '100',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'load_query' => "SELECT edit_user_id, username, enabled, deleted, "
|
|
||||||
. "strict, locked, login_error_count "
|
|
||||||
. "FROM edit_user "
|
|
||||||
// if base acl is not 90 only list enabled
|
|
||||||
// if not admin flag, do not list admin flagged
|
|
||||||
. (
|
|
||||||
!$GLOBALS['acl_admin'] ?
|
|
||||||
"WHERE admin = 0 "
|
|
||||||
. (
|
|
||||||
$GLOBALS['base_acl_level'] < 90 ?
|
|
||||||
"AND enabled = 1 " :
|
|
||||||
""
|
|
||||||
)
|
|
||||||
: ''
|
|
||||||
)
|
|
||||||
. "ORDER BY username",
|
|
||||||
'table_name' => 'edit_user',
|
|
||||||
'show_fields' => [
|
|
||||||
[
|
|
||||||
'name' => 'username'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'enabled',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'ENBL: '
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'deleted',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'DEL: '
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'strict',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'STRC: '
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'locked',
|
|
||||||
'binary' => ['Yes', 'No'],
|
|
||||||
'before_value' => 'LCK: '
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'login_error_count',
|
|
||||||
'before_value' => 'ERR: '
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'element_list' => [
|
|
||||||
'edit_access_user' => [
|
|
||||||
'output_name' => 'Accounts',
|
|
||||||
'mandatory' => 1,
|
|
||||||
// set then reference entries are deleted, else the 'enable' flag is only set
|
|
||||||
'delete' => 0,
|
|
||||||
// acl
|
|
||||||
'min_edit_acl' => '40',
|
|
||||||
'min_show_acl' => '20',
|
|
||||||
// table read prefix
|
|
||||||
'prefix' => 'ecu',
|
|
||||||
'read_data' => [
|
|
||||||
'table_name' => 'edit_access',
|
|
||||||
'pk_id' => 'edit_access_id',
|
|
||||||
'name' => 'name',
|
|
||||||
'order' => 'name'
|
|
||||||
],
|
|
||||||
'elements' => [
|
|
||||||
'edit_access_user_id' => [
|
|
||||||
'output_name' => 'Activate',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'int' => 1,
|
|
||||||
'pk_id' => 1
|
|
||||||
],
|
|
||||||
'enabled' => [
|
|
||||||
'type' => 'checkbox',
|
|
||||||
'output_name' => 'Activate',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => [1],
|
|
||||||
],
|
|
||||||
'edit_access_right_id' => [
|
|
||||||
'type' => 'drop_down_db',
|
|
||||||
'output_name' => 'Access Level',
|
|
||||||
'preset' => 1, // first of the select
|
|
||||||
'int' => 1,
|
|
||||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
|
||||||
],
|
|
||||||
'edit_default' => [
|
|
||||||
'type' => 'radio_group',
|
|
||||||
'output_name' => 'Default',
|
|
||||||
'int' => 1,
|
|
||||||
'element_list' => 'radio_group'
|
|
||||||
],
|
|
||||||
'edit_access_id' => [
|
|
||||||
'type' => 'hidden',
|
|
||||||
'int' => 1
|
|
||||||
],
|
|
||||||
],
|
|
||||||
], // edit pages ggroup
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
// __END__
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
$edit_visible_group = [
|
|
||||||
'table_array' => [
|
|
||||||
'edit_visible_group_id' => [
|
|
||||||
'value' => $GLOBALS['edit_visible_group_id'] ?? '',
|
|
||||||
'type' => 'hidden',
|
|
||||||
'pk' => 1
|
|
||||||
],
|
|
||||||
'name' => [
|
|
||||||
'value' => $GLOBALS['name'] ?? '',
|
|
||||||
'output_name' => 'Group name',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text'
|
|
||||||
],
|
|
||||||
'flag' => [
|
|
||||||
'value' => $GLOBALS['flag'] ?? '',
|
|
||||||
'output_name' => 'Flag',
|
|
||||||
'mandatory' => 1,
|
|
||||||
'type' => 'text',
|
|
||||||
'error_check' => 'alphanumeric|unique'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'table_name' => 'edit_visible_group',
|
|
||||||
'load_query' => "SELECT edit_visible_group_id, name FROM edit_visible_group ORDER BY name",
|
|
||||||
'show_fields' => [
|
|
||||||
[
|
|
||||||
'name' => 'name'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
// __END__
|
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
********************************************************************
|
********************************************************************
|
||||||
*}
|
*}
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{$HTML_TITLE}</title>
|
<title>{$HTML_TITLE}</title>
|
||||||
|
|||||||
@@ -51,7 +51,6 @@
|
|||||||
{* not yet implemented *}
|
{* not yet implemented *}
|
||||||
{/if}
|
{/if}
|
||||||
{if $element.type == 'order'}
|
{if $element.type == 'order'}
|
||||||
{* <input type="button" name="order" value="{$element.data.output_name}" OnClick="pop('order.php?col_name={$element.data.col_name}&table_name={$element.data.table_name}&where={$element.data.query}','Order','status=no,scrollbars=yes,width=700,height=500');"> *}
|
|
||||||
<input type="button" name="order" value="{$element.data.output_name}" OnClick="pop('edit_order.php?table_name={$element.data.table_name}&where={$element.data.query}','Order','status=no,scrollbars=yes,width=700,height=500');">
|
<input type="button" name="order" value="{$element.data.output_name}" OnClick="pop('edit_order.php?table_name={$element.data.table_name}&where={$element.data.query}','Order','status=no,scrollbars=yes,width=700,height=500');">
|
||||||
<input type="hidden" name="{$element.data.name}" value="{$element.data.value}">
|
<input type="hidden" name="{$element.data.name}" value="{$element.data.value}">
|
||||||
{/if}
|
{/if}
|
||||||
@@ -69,8 +68,20 @@
|
|||||||
</select>
|
</select>
|
||||||
{/if}
|
{/if}
|
||||||
{if $element.type == 'element_list'}
|
{if $element.type == 'element_list'}
|
||||||
|
<script language="JavaScript">
|
||||||
|
function deleteElement(delete_name, line_item)
|
||||||
|
{
|
||||||
|
let confirm_val = confirm('{t}Do you want to remove this entry?{/t}');
|
||||||
|
if (confirm_val === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
document.getElementById(delete_name).value = line_item;
|
||||||
|
document.getElementById(delete_name + '_flag').value = confirm_val;
|
||||||
|
document.edit_form.submit();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
{* each row of data *}
|
{* each row of data *}
|
||||||
<table width="100%" border="0">
|
<table width="100%" border="0" cellspacing="0" cellpadding="2">
|
||||||
{foreach from=$element.data.content item=line key=key}
|
{foreach from=$element.data.content item=line key=key}
|
||||||
<tr>
|
<tr>
|
||||||
{* now each line of data *}
|
{* now each line of data *}
|
||||||
@@ -107,7 +118,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
{* if there is a hidden key, set delete, but only if we have a delete string *}
|
{* if there is a hidden key, set delete, but only if we have a delete string *}
|
||||||
{if $element.data.type.$line_key == 'hidden' && $line_item && $element.data.delete_name}
|
{if $element.data.type.$line_key == 'hidden' && $line_item && $element.data.delete_name}
|
||||||
<input type="submit" name="remove_button" value="{t}Delete{/t}" onClick="document.edit_form.{$element.data.delete_name}.value={$line_item};document.edit_form.{$element.data.delete_name}_flag.value=confirm('{t}Do you want to remove this entry?{/t}');document.edit_form.submit();">
|
<input type="button" name="remove_button" value="{t}Delete{/t}" onClick="deleteElement('{$element.data.delete_name}', '{$line_item}');">
|
||||||
{/if}
|
{/if}
|
||||||
{if $element.data.type.$line_key == 'hidden' && $element.data.enable_name && $element.data.delete && $element.data.output_name.$line_key}
|
{if $element.data.type.$line_key == 'hidden' && $element.data.enable_name && $element.data.delete && $element.data.output_name.$line_key}
|
||||||
<input type="checkbox" name="{$element.data.enable_name}[{$key}]" value="1" {if $line_item}checked{/if}> {$element.data.output_name.$line_key}
|
<input type="checkbox" name="{$element.data.enable_name}[{$key}]" value="1" {if $line_item}checked{/if}> {$element.data.output_name.$line_key}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
********************************************************************
|
********************************************************************
|
||||||
*}
|
*}
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{$HTML_TITLE}</title>
|
<title>{$HTML_TITLE}</title>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
********************************************************************
|
********************************************************************
|
||||||
*}
|
*}
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{$HTML_TITLE}</title>
|
<title>{$HTML_TITLE}</title>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
********************************************************************
|
********************************************************************
|
||||||
*}
|
*}
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>{$HTML_TITLE}</title>
|
<title>{$HTML_TITLE}</title>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ body {
|
|||||||
background-color: white;
|
background-color: white;
|
||||||
color: black;
|
color: black;
|
||||||
font-family: Verdana,Arial,Helvetica,sans-serif;
|
font-family: Verdana,Arial,Helvetica,sans-serif;
|
||||||
font-size : 8pt;
|
font-size : 9pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
.large {
|
.large {
|
||||||
@@ -455,4 +455,11 @@ input[type="text"]:focus, textarea:focus, select:focus {
|
|||||||
background-color: #FFDF6F;
|
background-color: #FFDF6F;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
td.edit_fgcolor tr:nth-child(odd) {
|
||||||
|
background-color: #e2e2c5;
|
||||||
|
}
|
||||||
|
td.edit_fgcolor tr:nth-child(even) {
|
||||||
|
background-color: #ffffcd;
|
||||||
|
}
|
||||||
|
|
||||||
/* ***************************** ADMIN EDIT INTERFACE COLORS ********************************* */
|
/* ***************************** ADMIN EDIT INTERFACE COLORS ********************************* */
|
||||||
|
|||||||
@@ -1014,8 +1014,12 @@ function phfo(tree)
|
|||||||
} else if (tree.content) {
|
} else if (tree.content) {
|
||||||
content.push(tree.content);
|
content.push(tree.content);
|
||||||
}
|
}
|
||||||
// if not input close
|
// if not input, image or br, then close
|
||||||
if (tree.tag != 'input') {
|
if (
|
||||||
|
tree.tag != 'input' ||
|
||||||
|
tree.tag != 'img' ||
|
||||||
|
tree.tag != 'br'
|
||||||
|
) {
|
||||||
content.push('</' + tree.tag + '>');
|
content.push('</' + tree.tag + '>');
|
||||||
}
|
}
|
||||||
// combine to string
|
// combine to string
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
(function (global, factory) {
|
(function (global, factory) {
|
||||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||||
(global = global || self, factory(global.ja = {}));
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ja = {}));
|
||||||
}(this, function (exports) { 'use strict';
|
}(this, (function (exports) { 'use strict';
|
||||||
|
|
||||||
var fp = typeof window !== "undefined" && window.flatpickr !== undefined
|
var fp = typeof window !== "undefined" && window.flatpickr !== undefined
|
||||||
? window.flatpickr
|
? window.flatpickr
|
||||||
: {
|
: {
|
||||||
l10ns: {}
|
l10ns: {},
|
||||||
};
|
};
|
||||||
var Japanese = {
|
var Japanese = {
|
||||||
weekdays: {
|
weekdays: {
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
"木曜日",
|
"木曜日",
|
||||||
"金曜日",
|
"金曜日",
|
||||||
"土曜日",
|
"土曜日",
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
months: {
|
months: {
|
||||||
shorthand: [
|
shorthand: [
|
||||||
@@ -50,11 +50,15 @@
|
|||||||
"10月",
|
"10月",
|
||||||
"11月",
|
"11月",
|
||||||
"12月",
|
"12月",
|
||||||
]
|
],
|
||||||
},
|
},
|
||||||
time_24hr: true,
|
time_24hr: true,
|
||||||
rangeSeparator: " から ",
|
rangeSeparator: " から ",
|
||||||
firstDayOfWeek: 1
|
monthAriaLabel: "月",
|
||||||
|
amPM: ["午前", "午後"],
|
||||||
|
yearAriaLabel: "年",
|
||||||
|
hourAriaLabel: "時間",
|
||||||
|
minuteAriaLabel: "分",
|
||||||
};
|
};
|
||||||
fp.l10ns.ja = Japanese;
|
fp.l10ns.ja = Japanese;
|
||||||
var ja = fp.l10ns;
|
var ja = fp.l10ns;
|
||||||
@@ -64,4 +68,4 @@
|
|||||||
|
|
||||||
Object.defineProperty(exports, '__esModule', { value: true });
|
Object.defineProperty(exports, '__esModule', { value: true });
|
||||||
|
|
||||||
}));
|
})));
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -677,9 +677,20 @@ class Login
|
|||||||
$_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'] ?
|
$_SESSION['HEADER_COLOR'] = !empty($res['second_header_color']) ?
|
||||||
$res['second_header_color'] :
|
$res['second_header_color'] :
|
||||||
$res['first_header_color'];
|
$res['first_header_color'];
|
||||||
|
// missing # before, this is for legacy data, will be deprecated
|
||||||
|
if (preg_match("/^[\dA-Fa-f]{6,8}$/", $_SESSION['HEADER_COLOR'])) {
|
||||||
|
$_SESSION['HEADER_COLOR'] = '#' . $_SESSION['HEADER_COLOR'];
|
||||||
|
}
|
||||||
|
// TODO: make sure that header color is valid:
|
||||||
|
// # + 6 hex
|
||||||
|
// # + 8 hex (alpha)
|
||||||
|
// rgb(), rgba(), hsl(), hsla()
|
||||||
|
// rgb: nnn.n for each
|
||||||
|
// hsl: nnn.n for first, nnn.n% for 2nd, 3rd
|
||||||
|
// Check\Colors::validateColor()
|
||||||
$_SESSION['LANG'] = $res['locale'] ?? 'en';
|
$_SESSION['LANG'] = $res['locale'] ?? 'en';
|
||||||
$_SESSION['DEFAULT_CHARSET'] = $res['encoding'] ?? 'UTF-8';
|
$_SESSION['DEFAULT_CHARSET'] = $res['encoding'] ?? 'UTF-8';
|
||||||
$_SESSION['DEFAULT_LOCALE'] = $_SESSION['LANG']
|
$_SESSION['DEFAULT_LOCALE'] = $_SESSION['LANG']
|
||||||
@@ -1622,7 +1633,7 @@ EOM;
|
|||||||
$this->session->checkActiveSession() === true &&
|
$this->session->checkActiveSession() === true &&
|
||||||
!empty($_SESSION['DEFAULT_LOCALE'])
|
!empty($_SESSION['DEFAULT_LOCALE'])
|
||||||
) {
|
) {
|
||||||
$locale = $_SESSION['DEFAULT_LOCALE'] ?? '';
|
$locale = $_SESSION['DEFAULT_LOCALE'];
|
||||||
} else {
|
} else {
|
||||||
$locale = (defined('SITE_LOCALE') && !empty(SITE_LOCALE)) ?
|
$locale = (defined('SITE_LOCALE') && !empty(SITE_LOCALE)) ?
|
||||||
SITE_LOCALE :
|
SITE_LOCALE :
|
||||||
|
|||||||
588
www/lib/CoreLibs/Admin/EditBase.php
Normal file
588
www/lib/CoreLibs/Admin/EditBase.php
Normal file
@@ -0,0 +1,588 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* AUTHOR: Clemens Schwaighofer
|
||||||
|
* CREATED: 2023/1/6
|
||||||
|
* DESCRIPTION:
|
||||||
|
* Original created: 2003/06/10
|
||||||
|
* This is the edit_base.php data as is moved into a class so we can
|
||||||
|
* more easy update this and also move to a different AJAX style more
|
||||||
|
* easy
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Admin;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use SmartyException;
|
||||||
|
|
||||||
|
class EditBase
|
||||||
|
{
|
||||||
|
/** @var array<mixed> */
|
||||||
|
private $HEADER = [];
|
||||||
|
/** @var array<mixed> */
|
||||||
|
private $DATA = [];
|
||||||
|
/** @var array<mixed> */
|
||||||
|
private $DEBUG_DATA = [];
|
||||||
|
|
||||||
|
/** @var string the template name */
|
||||||
|
private $EDIT_TEMPLATE = '';
|
||||||
|
|
||||||
|
/** @var \CoreLibs\Template\SmartyExtend smarty system */
|
||||||
|
private $smarty;
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate form generate system */
|
||||||
|
private $form;
|
||||||
|
/** @var \CoreLibs\Debug\Logging */
|
||||||
|
public $log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* construct form generator
|
||||||
|
*
|
||||||
|
* @param array<mixed> $db_config db config array, mandatory
|
||||||
|
* @param \CoreLibs\Debug\Logging $log Logging class, null auto set
|
||||||
|
* @param \CoreLibs\Language\L10n $l10n l10n language class, null auto set
|
||||||
|
* @param array<string,string> $locale locale array from ::setLocale,
|
||||||
|
* null auto set
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
array $db_config,
|
||||||
|
\CoreLibs\Debug\Logging $log,
|
||||||
|
\CoreLibs\Language\L10n $l10n,
|
||||||
|
array $locale
|
||||||
|
) {
|
||||||
|
$this->log = $log;
|
||||||
|
// smarty template engine (extended Translation version)
|
||||||
|
$this->smarty = new \CoreLibs\Template\SmartyExtend($l10n, $locale);
|
||||||
|
// turn off set log per class
|
||||||
|
$log->setLogPer('class', false);
|
||||||
|
|
||||||
|
// create form class
|
||||||
|
$this->form = new \CoreLibs\Output\Form\Generate(
|
||||||
|
$db_config,
|
||||||
|
$log,
|
||||||
|
$l10n,
|
||||||
|
$locale
|
||||||
|
);
|
||||||
|
if ($this->form->mobile_phone) {
|
||||||
|
echo "I am sorry, but this page cannot be viewed by a mobile phone";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
// $this->form->log->debug('POST', $this->form->log->prAr($_POST));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* edit order page
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function editOrderPage(): void
|
||||||
|
{
|
||||||
|
// get is for "table_name" and "where" only
|
||||||
|
$table_name = $_GET['table_name'] ?? $_POST['table_name'] ?? '';
|
||||||
|
// not in use
|
||||||
|
// $where_string = $_GET['where'] ?? $_POST['where'] ?? '';
|
||||||
|
// order name is _always_ order_number for the edit interface
|
||||||
|
|
||||||
|
// follwing arrays do exist here:
|
||||||
|
// $position ... has the positions of the [0..max], cause in a <select>
|
||||||
|
// I can't put an number into the array field, in this array,
|
||||||
|
// there are the POSITION stored,
|
||||||
|
// that should CHANGE there order (up/down)
|
||||||
|
// $row_data_id ... has ALL ids from the sorting part
|
||||||
|
// $row_data_order ... has ALL order positions from the soirting part
|
||||||
|
$position = $_POST['position'] ?? [];
|
||||||
|
$row_data_id = $_POST['row_data_id'] ?? [];
|
||||||
|
$original_id = $row_data_id;
|
||||||
|
$row_data_order = $_POST['row_data_order'] ?? [];
|
||||||
|
// direction
|
||||||
|
$up = $_POST['up'] ?? '';
|
||||||
|
$down = $_POST['down'] ?? '';
|
||||||
|
if (count($position)) {
|
||||||
|
// FIRST u have to put right sort, then read again ...
|
||||||
|
// hast to be >0 or the first one is selected and then there is no move
|
||||||
|
if (!empty($up) && isset($position[0]) && $position[0] > 0) {
|
||||||
|
for ($i = 0; $i < count($position); $i++) {
|
||||||
|
// change position order
|
||||||
|
// this gets temp, id before that, gets actual (moves one "down")
|
||||||
|
// this gets the old before (moves one "up")
|
||||||
|
// is done for every element in row
|
||||||
|
// echo "A: ".$row_data_id[$position[$i]]
|
||||||
|
// ." (".$row_data_order[$position[$i]].") -- ".$row_data_id[$position[$i]-1]
|
||||||
|
// ." (".$row_data_order[$position[$i]-1].")<br>";
|
||||||
|
$temp_id = $row_data_id[$position[$i]] ?? null;
|
||||||
|
$row_data_id[$position[$i]] = $row_data_id[(int)$position[$i] - 1] ?? null;
|
||||||
|
$row_data_id[(int)$position[$i] - 1] = $temp_id;
|
||||||
|
// echo "A: ".$row_data_id[$position[$i]]
|
||||||
|
// ." (".$row_data_order[$position[$i]].") -- "
|
||||||
|
// .$row_data_id[$position[$i]-1]." (".$row_data_order[$position[$i]-1].")<br>";
|
||||||
|
} // for
|
||||||
|
} // if up
|
||||||
|
|
||||||
|
// the last position id from position array is not to be the count - 1 of
|
||||||
|
// row_data_id array, or it is the last element
|
||||||
|
if (!empty($down) && ($position[count($position) - 1] != (count($row_data_id) - 1))) {
|
||||||
|
for ($i = count($position) - 1; $i >= 0; $i--) {
|
||||||
|
// same as up, just up in other way, starts from bottom (last element) and moves "up"
|
||||||
|
// element before actuel gets temp, this element, becomes element after this,
|
||||||
|
// element after this, gets this
|
||||||
|
$temp_id = $row_data_id[(int)$position[$i] + 1] ?? null;
|
||||||
|
$row_data_id[(int)$position[$i] + 1] = $row_data_id[$position[$i]] ?? null;
|
||||||
|
$row_data_id[$position[$i]] = $temp_id;
|
||||||
|
} // for
|
||||||
|
} // if down
|
||||||
|
|
||||||
|
// write data ... (which has to be abstrackt ...)
|
||||||
|
if (
|
||||||
|
(!empty($up) && $position[0] > 0) ||
|
||||||
|
(!empty($down) && ($position[count($position) - 1] != (count($row_data_id) - 1)))
|
||||||
|
) {
|
||||||
|
for ($i = 0; $i < count($row_data_id); $i++) {
|
||||||
|
if (isset($row_data_order[$i]) && isset($row_data_id[$i])) {
|
||||||
|
$q = "UPDATE " . $table_name
|
||||||
|
. " SET order_number = " . $row_data_order[$i]
|
||||||
|
. " WHERE " . $table_name . "_id = " . $row_data_id[$i];
|
||||||
|
$q = $this->form->dbExec($q);
|
||||||
|
}
|
||||||
|
} // for all article ids ...
|
||||||
|
} // if write
|
||||||
|
} // if there is something to move
|
||||||
|
|
||||||
|
// get ...
|
||||||
|
$q = "SELECT " . $table_name . "_id, name, order_number FROM " . $table_name . " ";
|
||||||
|
// /* if (!empty($where_string)) {
|
||||||
|
// $q .= "WHERE $where_string ";
|
||||||
|
// } */
|
||||||
|
$q .= "ORDER BY order_number";
|
||||||
|
|
||||||
|
// init arrays
|
||||||
|
$row_data = [];
|
||||||
|
$options_id = [];
|
||||||
|
$options_name = [];
|
||||||
|
$options_selected = [];
|
||||||
|
// DB read data for menu
|
||||||
|
while (is_array($res = $this->form->dbReturn($q))) {
|
||||||
|
$row_data[] = [
|
||||||
|
"id" => $res[$table_name . "_id"],
|
||||||
|
"name" => $res["name"],
|
||||||
|
"order" => $res["order_number"]
|
||||||
|
];
|
||||||
|
} // while read data ...
|
||||||
|
|
||||||
|
// html title
|
||||||
|
$this->HEADER['HTML_TITLE'] = $this->form->l->__('Edit Order');
|
||||||
|
|
||||||
|
$messages = [];
|
||||||
|
$error = $_POST['error'] ?? 0;
|
||||||
|
// error msg
|
||||||
|
if (!empty($error)) {
|
||||||
|
$msg = $_POST['msg'] ?? [];
|
||||||
|
if (!is_array($msg)) {
|
||||||
|
$msg = [];
|
||||||
|
}
|
||||||
|
$messages[] = [
|
||||||
|
'msg' => $msg,
|
||||||
|
'class' => 'error',
|
||||||
|
'width' => '100%'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$this->DATA['form_error_msg'] = $messages;
|
||||||
|
|
||||||
|
// all the row data
|
||||||
|
for ($i = 0; $i < count($row_data); $i++) {
|
||||||
|
$options_id[] = $i;
|
||||||
|
$options_name[] = $row_data[$i]['name'];
|
||||||
|
// list of points to order
|
||||||
|
for ($j = 0; $j < count($position); $j++) {
|
||||||
|
// if matches, put into select array
|
||||||
|
if (
|
||||||
|
isset($original_id[$position[$j]]) && isset($row_data[$i]['id']) &&
|
||||||
|
$original_id[$position[$j]] == $row_data[$i]['id']
|
||||||
|
) {
|
||||||
|
$options_selected[] = $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->DATA['options_id'] = $options_id;
|
||||||
|
$this->DATA['options_name'] = $options_name;
|
||||||
|
$this->DATA['options_selected'] = $options_selected;
|
||||||
|
|
||||||
|
// hidden list for the data (id, order number)
|
||||||
|
$row_data_id = [];
|
||||||
|
$row_data_order = [];
|
||||||
|
for ($i = 0; $i < count($row_data); $i++) {
|
||||||
|
$row_data_id[] = $row_data[$i]['id'];
|
||||||
|
$row_data_order[] = $row_data[$i]['order'];
|
||||||
|
}
|
||||||
|
$this->DATA['row_data_id'] = $row_data_id;
|
||||||
|
$this->DATA['row_data_order'] = $row_data_order;
|
||||||
|
|
||||||
|
// hidden names for the table & where string
|
||||||
|
$this->DATA['table_name'] = $table_name;
|
||||||
|
$this->DATA['where_string'] = '';
|
||||||
|
// $this->DATA['where_string'] = $where_string ?? '';
|
||||||
|
|
||||||
|
$this->EDIT_TEMPLATE = 'edit_order.tpl';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* all edit pages
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function editPageFlow(): void
|
||||||
|
{
|
||||||
|
// set table width
|
||||||
|
$table_width = '100%';
|
||||||
|
// load call only if id is set
|
||||||
|
if (!empty($_POST[$this->form->archive_pk_name])) {
|
||||||
|
$this->form->formProcedureLoad($_POST[$this->form->archive_pk_name]);
|
||||||
|
}
|
||||||
|
$this->form->formProcedureNew();
|
||||||
|
$this->form->formProcedureSave();
|
||||||
|
$this->form->formProcedureDelete();
|
||||||
|
// delete call only if those two are set
|
||||||
|
// and we are not in new/save/master delete
|
||||||
|
if (
|
||||||
|
!$this->form->new &&
|
||||||
|
!$this->form->save &&
|
||||||
|
!$this->form->delete &&
|
||||||
|
!empty($_POST['element_list']) &&
|
||||||
|
!empty($_POST['remove_name'])
|
||||||
|
) {
|
||||||
|
$this->form->formProcedureDeleteFromElementList(
|
||||||
|
$_POST['element_list'],
|
||||||
|
$_POST['remove_name']
|
||||||
|
);
|
||||||
|
// run a load post element delete to not end up with empty page
|
||||||
|
$this->form->formLoadTableArray($_POST[$this->form->archive_pk_name]);
|
||||||
|
$this->form->yes = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->DATA['table_width'] = $table_width;
|
||||||
|
|
||||||
|
$messages = [];
|
||||||
|
// write out error / status messages
|
||||||
|
$messages[] = $this->form->formPrintMsg();
|
||||||
|
$this->DATA['form_error_msg'] = $messages;
|
||||||
|
|
||||||
|
// MENU START
|
||||||
|
// request some session vars
|
||||||
|
if (empty($_SESSION['HEADER_COLOR'])) {
|
||||||
|
$this->DATA['HEADER_COLOR'] = '#E0E2FF';
|
||||||
|
} else {
|
||||||
|
$this->DATA['HEADER_COLOR'] = $_SESSION['HEADER_COLOR'];
|
||||||
|
}
|
||||||
|
$this->DATA['USER_NAME'] = $_SESSION['USER_NAME'];
|
||||||
|
$this->DATA['EUID'] = $_SESSION['EUID'];
|
||||||
|
$this->DATA['GROUP_NAME'] = $_SESSION['GROUP_NAME'];
|
||||||
|
$this->DATA['GROUP_LEVEL'] = $_SESSION['GROUP_ACL_LEVEL'];
|
||||||
|
$PAGES = $_SESSION['PAGES'];
|
||||||
|
|
||||||
|
//$this->form->log->debug('menu', $this->form->log->prAr($PAGES));
|
||||||
|
|
||||||
|
// build nav from $PAGES ...
|
||||||
|
if (!isset($PAGES) || !is_array($PAGES)) {
|
||||||
|
$PAGES = [];
|
||||||
|
}
|
||||||
|
$menuarray = [];
|
||||||
|
foreach ($PAGES as $PAGE_CUID => $PAGE_DATA) {
|
||||||
|
if ($PAGE_DATA['menu'] && $PAGE_DATA['online']) {
|
||||||
|
$menuarray[] = $PAGE_DATA;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// split point for nav points
|
||||||
|
$COUNT_NAV_POINTS = count($menuarray);
|
||||||
|
$SPLIT_FACTOR = 3;
|
||||||
|
$START_SPLIT_COUNT = 3;
|
||||||
|
// WTF ?? I dunno what I am doing here ...
|
||||||
|
for ($i = 9; $i < $COUNT_NAV_POINTS; $i += $START_SPLIT_COUNT) {
|
||||||
|
if ($COUNT_NAV_POINTS > $i) {
|
||||||
|
$SPLIT_FACTOR += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$position = 0;
|
||||||
|
$menu_data = [];
|
||||||
|
// for ($i = 1; $i <= count($menuarray); $i ++) {
|
||||||
|
foreach ($menuarray as $i => $menu_element) {
|
||||||
|
// do that for new array
|
||||||
|
$j = $i + 1;
|
||||||
|
$menu_data[$i]['pagename'] = htmlentities($menu_element['page_name']);
|
||||||
|
$menu_data[$i]['filename'] =
|
||||||
|
// prefix folder or host name
|
||||||
|
(isset($menu_element['hostname']) && $menu_element['hostname'] ?
|
||||||
|
$menu_element['hostname'] :
|
||||||
|
''
|
||||||
|
)
|
||||||
|
// filename
|
||||||
|
. ($menu_element['filename'] ?? '')
|
||||||
|
// query string
|
||||||
|
. (isset($menu_element['query_string']) && $menu_element['query_string'] ?
|
||||||
|
$menu_element['query_string'] :
|
||||||
|
''
|
||||||
|
);
|
||||||
|
if ($j == 1 || !($i % $SPLIT_FACTOR)) {
|
||||||
|
$menu_data[$i]['splitfactor_in'] = 1;
|
||||||
|
} else {
|
||||||
|
$menu_data[$i]['splitfactor_in'] = 0;
|
||||||
|
}
|
||||||
|
// on matching, we also need to check if we are in the same folder
|
||||||
|
if (
|
||||||
|
isset($menu_element['filename']) &&
|
||||||
|
$menu_element['filename'] == \CoreLibs\Get\System::getPageName() &&
|
||||||
|
(!isset($menu_element['hostname']) || (
|
||||||
|
isset($menu_element['hostname']) &&
|
||||||
|
(!$menu_element['hostname'] || strstr($menu_element['hostname'], CONTENT_PATH) !== false)
|
||||||
|
))
|
||||||
|
) {
|
||||||
|
$position = $i;
|
||||||
|
$menu_data[$i]['position'] = 1;
|
||||||
|
$menu_data[$i]['popup'] = 0;
|
||||||
|
} else {
|
||||||
|
// add query stuff
|
||||||
|
// HAS TO DONE LATER ... set urlencode, etc ...
|
||||||
|
// check if popup needed
|
||||||
|
if (isset($menu_element['popup']) && $menu_element['popup'] == 1) {
|
||||||
|
$menu_data[$i]['popup'] = 1;
|
||||||
|
$menu_data[$i]['rand'] = uniqid((string)rand());
|
||||||
|
$menu_data[$i]['width'] = $menu_element['popup_x'];
|
||||||
|
$menu_data[$i]['height'] = $menu_element['popup_y'];
|
||||||
|
} else {
|
||||||
|
$menu_data[$i]['popup'] = 0;
|
||||||
|
}
|
||||||
|
$menu_data[$i]['position'] = 0;
|
||||||
|
} // highlight or not
|
||||||
|
if (!($j % $SPLIT_FACTOR) || (($j + 1) > count($menuarray))) {
|
||||||
|
$menu_data[$i]['splitfactor_out'] = 1;
|
||||||
|
} else {
|
||||||
|
$menu_data[$i]['splitfactor_out'] = 0;
|
||||||
|
}
|
||||||
|
} // for
|
||||||
|
// $this->form->log->debug('MENU ARRAY', $this->form->log->prAr($menu_data));
|
||||||
|
$this->DATA['menu_data'] = $menu_data;
|
||||||
|
$this->DATA['page_name'] = $menuarray[$position]['page_name'] ?? '-Undefined [' . $position . '] -';
|
||||||
|
$L_TITLE = $this->DATA['page_name'];
|
||||||
|
// html title
|
||||||
|
$this->HEADER['HTML_TITLE'] = $this->form->l->__($L_TITLE);
|
||||||
|
// END MENU
|
||||||
|
// LOAD AND NEW
|
||||||
|
$this->DATA['load'] = $this->form->formCreateLoad();
|
||||||
|
$this->DATA['new'] = $this->form->formCreateNew();
|
||||||
|
// SHOW DATA PART
|
||||||
|
if ($this->form->yes) {
|
||||||
|
$this->DATA['form_yes'] = $this->form->yes;
|
||||||
|
$this->DATA['form_my_page_name'] = $this->form->my_page_name;
|
||||||
|
$this->DATA['filename_exist'] = 0;
|
||||||
|
$this->DATA['drop_down_input'] = 0;
|
||||||
|
$elements = [];
|
||||||
|
// depending on the "getPageName()" I show different stuff
|
||||||
|
switch ($this->form->my_page_name) {
|
||||||
|
case 'edit_users':
|
||||||
|
$elements[] = $this->form->formCreateElement('login_error_count');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_error_date_last');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_error_date_first');
|
||||||
|
$elements[] = $this->form->formCreateElement('enabled');
|
||||||
|
$elements[] = $this->form->formCreateElement('deleted');
|
||||||
|
$elements[] = $this->form->formCreateElement('protected');
|
||||||
|
$elements[] = $this->form->formCreateElement('username');
|
||||||
|
$elements[] = $this->form->formCreateElement('password');
|
||||||
|
$elements[] = $this->form->formCreateElement('password_change_interval');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_user_id');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_user_id_set_date');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_user_id_last_revalidate');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_user_id_locked');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_user_id_revalidate_after');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_user_id_valid_from');
|
||||||
|
$elements[] = $this->form->formCreateElement('login_user_id_valid_until');
|
||||||
|
$elements[] = $this->form->formCreateElement('email');
|
||||||
|
$elements[] = $this->form->formCreateElement('last_name');
|
||||||
|
$elements[] = $this->form->formCreateElement('first_name');
|
||||||
|
$elements[] = $this->form->formCreateElement('edit_group_id');
|
||||||
|
$elements[] = $this->form->formCreateElement('edit_access_right_id');
|
||||||
|
$elements[] = $this->form->formCreateElement('strict');
|
||||||
|
$elements[] = $this->form->formCreateElement('locked');
|
||||||
|
$elements[] = $this->form->formCreateElement('lock_until');
|
||||||
|
$elements[] = $this->form->formCreateElement('lock_after');
|
||||||
|
$elements[] = $this->form->formCreateElement('admin');
|
||||||
|
$elements[] = $this->form->formCreateElement('debug');
|
||||||
|
$elements[] = $this->form->formCreateElement('db_debug');
|
||||||
|
$elements[] = $this->form->formCreateElement('edit_language_id');
|
||||||
|
$elements[] = $this->form->formCreateElement('edit_scheme_id');
|
||||||
|
$elements[] = $this->form->formCreateElementListTable('edit_access_user');
|
||||||
|
$elements[] = $this->form->formCreateElement('additional_acl');
|
||||||
|
break;
|
||||||
|
case 'edit_schemes':
|
||||||
|
$elements[] = $this->form->formCreateElement('enabled');
|
||||||
|
$elements[] = $this->form->formCreateElement('name');
|
||||||
|
$elements[] = $this->form->formCreateElement('header_color');
|
||||||
|
$elements[] = $this->form->formCreateElement('template');
|
||||||
|
break;
|
||||||
|
case 'edit_pages':
|
||||||
|
if (!isset($this->form->table_array['edit_page_id']['value'])) {
|
||||||
|
$q = "DELETE FROM temp_files";
|
||||||
|
$this->form->dbExec($q);
|
||||||
|
// gets all files in the current dir and dirs given ending with .php
|
||||||
|
$folders = ['../admin/', '../frontend/'];
|
||||||
|
$files = ['*.php'];
|
||||||
|
$search_glob = [];
|
||||||
|
foreach ($folders as $folder) {
|
||||||
|
// make sure this folder actually exists
|
||||||
|
if (is_dir(ROOT . $folder)) {
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$search_glob[] = $folder . $file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$crap = exec('ls ' . join(' ', $search_glob), $output, $status);
|
||||||
|
// now get all that are NOT in de DB
|
||||||
|
$q = "INSERT INTO temp_files (folder, filename) VALUES ";
|
||||||
|
$t_q = '';
|
||||||
|
foreach ($output as $output_file) {
|
||||||
|
// split the ouput into folder and file
|
||||||
|
$pathinfo = pathinfo($output_file);
|
||||||
|
if (!empty($pathinfo['dirname'])) {
|
||||||
|
$pathinfo['dirname'] .= DIRECTORY_SEPARATOR;
|
||||||
|
} else {
|
||||||
|
$pathinfo['dirname'] = '';
|
||||||
|
}
|
||||||
|
if ($t_q) {
|
||||||
|
$t_q .= ', ';
|
||||||
|
}
|
||||||
|
$t_q .= "('" . $this->form->dbEscapeString($pathinfo['dirname']) . "', '"
|
||||||
|
. $this->form->dbEscapeString($pathinfo['basename']) . "')";
|
||||||
|
}
|
||||||
|
$this->form->dbExec($q . $t_q, 'NULL');
|
||||||
|
$elements[] = $this->form->formCreateElement('filename');
|
||||||
|
} else {
|
||||||
|
// show file menu
|
||||||
|
// just show name of file ...
|
||||||
|
$this->DATA['filename_exist'] = 1;
|
||||||
|
$this->DATA['filename'] = $this->form->table_array['filename']['value'];
|
||||||
|
} // File Name View IF
|
||||||
|
$elements[] = $this->form->formCreateElement('hostname');
|
||||||
|
$elements[] = $this->form->formCreateElement('name');
|
||||||
|
// $elements[] = $this->form->formCreateElement('tag');
|
||||||
|
// $elements[] = $this->form->formCreateElement('min_acl');
|
||||||
|
$elements[] = $this->form->formCreateElement('order_number');
|
||||||
|
$elements[] = $this->form->formCreateElement('online');
|
||||||
|
$elements[] = $this->form->formCreateElement('menu');
|
||||||
|
$elements[] = $this->form->formCreateElementListTable('edit_query_string');
|
||||||
|
$elements[] = $this->form->formCreateElement('content_alias_edit_page_id');
|
||||||
|
$elements[] = $this->form->formCreateElementListTable('edit_page_content');
|
||||||
|
$elements[] = $this->form->formCreateElement('popup');
|
||||||
|
$elements[] = $this->form->formCreateElement('popup_x');
|
||||||
|
$elements[] = $this->form->formCreateElement('popup_y');
|
||||||
|
$elements[] = $this->form->formCreateElementReferenceTable('edit_visible_group');
|
||||||
|
$elements[] = $this->form->formCreateElementReferenceTable('edit_menu_group');
|
||||||
|
break;
|
||||||
|
case 'edit_languages':
|
||||||
|
$elements[] = $this->form->formCreateElement('enabled');
|
||||||
|
$elements[] = $this->form->formCreateElement('short_name');
|
||||||
|
$elements[] = $this->form->formCreateElement('long_name');
|
||||||
|
$elements[] = $this->form->formCreateElement('iso_name');
|
||||||
|
break;
|
||||||
|
case 'edit_groups':
|
||||||
|
$elements[] = $this->form->formCreateElement('enabled');
|
||||||
|
$elements[] = $this->form->formCreateElement('name');
|
||||||
|
$elements[] = $this->form->formCreateElement('edit_access_right_id');
|
||||||
|
$elements[] = $this->form->formCreateElement('edit_scheme_id');
|
||||||
|
$elements[] = $this->form->formCreateElementListTable('edit_page_access');
|
||||||
|
$elements[] = $this->form->formCreateElement('additional_acl');
|
||||||
|
break;
|
||||||
|
case 'edit_visible_group':
|
||||||
|
$elements[] = $this->form->formCreateElement('name');
|
||||||
|
$elements[] = $this->form->formCreateElement('flag');
|
||||||
|
break;
|
||||||
|
case 'edit_menu_group':
|
||||||
|
$elements[] = $this->form->formCreateElement('name');
|
||||||
|
$elements[] = $this->form->formCreateElement('flag');
|
||||||
|
$elements[] = $this->form->formCreateElement('order_number');
|
||||||
|
break;
|
||||||
|
case 'edit_access':
|
||||||
|
$elements[] = $this->form->formCreateElement('name');
|
||||||
|
$elements[] = $this->form->formCreateElement('enabled');
|
||||||
|
$elements[] = $this->form->formCreateElement('protected');
|
||||||
|
$elements[] = $this->form->formCreateElement('color');
|
||||||
|
$elements[] = $this->form->formCreateElement('description');
|
||||||
|
// add name/value list here
|
||||||
|
$elements[] = $this->form->formCreateElementListTable('edit_access_data');
|
||||||
|
$elements[] = $this->form->formCreateElement('additional_acl');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
print '[No valid page definition given]';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// $this->form->log->debug('edit', "Elements: <pre>".$this->form->log->prAr($elements));
|
||||||
|
$this->DATA['elements'] = $elements;
|
||||||
|
$this->DATA['hidden'] = $this->form->formCreateHiddenFields();
|
||||||
|
$this->DATA['save_delete'] = $this->form->formCreateSaveDelete();
|
||||||
|
} else {
|
||||||
|
$this->DATA['form_yes'] = 0;
|
||||||
|
}
|
||||||
|
$this->EDIT_TEMPLATE = 'edit_body.tpl';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* main method that either calls edit order page method or general page
|
||||||
|
* builds the smarty content and runs smarty display output
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
* @throws Exception
|
||||||
|
* @throws SmartyException
|
||||||
|
*/
|
||||||
|
public function editBaseRun()
|
||||||
|
{
|
||||||
|
// set the template dir
|
||||||
|
// WARNING: this has a special check for the mailing tool layout (old layout)
|
||||||
|
if (defined('LAYOUT')) {
|
||||||
|
$this->smarty->setTemplateDir(BASE . INCLUDES . TEMPLATES . CONTENT_PATH);
|
||||||
|
$this->DATA['css'] = LAYOUT . CSS;
|
||||||
|
$this->DATA['js'] = LAYOUT . JS;
|
||||||
|
} else {
|
||||||
|
$this->smarty->setTemplateDir(TEMPLATES);
|
||||||
|
$this->DATA['css'] = CSS;
|
||||||
|
$this->DATA['js'] = JS;
|
||||||
|
}
|
||||||
|
$ADMIN_STYLESHEET = 'edit.css';
|
||||||
|
// define all needed smarty stuff for the general HTML/page building
|
||||||
|
$this->HEADER['CSS'] = CSS;
|
||||||
|
$this->HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING;
|
||||||
|
/** @phpstan-ignore-next-line because ADMIN_STYLESHEET can be null */
|
||||||
|
$this->HEADER['STYLESHEET'] = $ADMIN_STYLESHEET ?? ADMIN_STYLESHEET;
|
||||||
|
|
||||||
|
// main run
|
||||||
|
if ($this->form->my_page_name == 'edit_order') {
|
||||||
|
$this->editOrderPage();
|
||||||
|
} else {
|
||||||
|
$this->editPageFlow();
|
||||||
|
}
|
||||||
|
|
||||||
|
// debug data, if DEBUG flag is on, this data is print out
|
||||||
|
// $this->DEBUG_DATA['DEBUG'] = $DEBUG_TMPL ?? '';
|
||||||
|
$this->DEBUG_DATA['DEBUG'] = '';
|
||||||
|
|
||||||
|
// create main data array
|
||||||
|
$CONTENT_DATA = array_merge($this->HEADER, $this->DATA, $this->DEBUG_DATA);
|
||||||
|
// data is 1:1 mapping (all vars, values, etc)
|
||||||
|
foreach ($CONTENT_DATA as $key => $value) {
|
||||||
|
$this->smarty->assign($key, $value);
|
||||||
|
}
|
||||||
|
if (is_dir(BASE . TEMPLATES_C)) {
|
||||||
|
$this->smarty->setCompileDir(BASE . TEMPLATES_C);
|
||||||
|
}
|
||||||
|
if (is_dir(BASE . CACHE)) {
|
||||||
|
$this->smarty->setCacheDir(BASE . CACHE);
|
||||||
|
}
|
||||||
|
$this->smarty->display(
|
||||||
|
$this->EDIT_TEMPLATE,
|
||||||
|
'editAdmin_' . $this->smarty->lang,
|
||||||
|
'editAdmin_' . $this->smarty->lang
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->form->log->debug('DEBUGEND', '==================================== [Form END]');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
187
www/lib/CoreLibs/Check/Colors.php
Normal file
187
www/lib/CoreLibs/Check/Colors.php
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* valid checks for css/html based colors
|
||||||
|
* # hex
|
||||||
|
* # hex + alpha
|
||||||
|
* rgb
|
||||||
|
* rgba
|
||||||
|
* hsl
|
||||||
|
* hsla
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Check;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class Colors
|
||||||
|
{
|
||||||
|
/** @var int 1 for HEX rgb */
|
||||||
|
public const HEX_RGB = 1;
|
||||||
|
/** @var int 2 for HEX rgb with alpha */
|
||||||
|
public const HEX_RGBA = 2;
|
||||||
|
/** @var int 4 for rgb() */
|
||||||
|
public const RGB = 4;
|
||||||
|
/** @var int 8 for rgba() */
|
||||||
|
public const RGBA = 8;
|
||||||
|
/** @var int 16 for hsl() */
|
||||||
|
public const HSL = 16;
|
||||||
|
/** @var int 32 for hsla() */
|
||||||
|
public const HSLA = 32;
|
||||||
|
/** @var int 63 for all bits set (sum of above) */
|
||||||
|
public const ALL = 63;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check rgb/hsl content values in detail
|
||||||
|
* will abort and return false on first error found
|
||||||
|
*
|
||||||
|
* @param string $color html/css tring to check
|
||||||
|
* @param int|false $rgb_flag flag to check for rgb
|
||||||
|
* @param int|false $hsl_flag flag to check for hsl type
|
||||||
|
* @return bool True if no error, False if error
|
||||||
|
*/
|
||||||
|
private static function rgbHslContentCheck(string $color, $rgb_flag, $hsl_flag): bool
|
||||||
|
{
|
||||||
|
// extract string between () and split into elements
|
||||||
|
preg_match("/\((.*)\)/", $color, $matches);
|
||||||
|
if (
|
||||||
|
!is_array($color_list = preg_split("/,\s*/", $matches[1] ?? ''))
|
||||||
|
) {
|
||||||
|
throw new \Exception("Could not extract color list from rgg/hsl", 3);
|
||||||
|
}
|
||||||
|
// based on rgb/hsl settings check that entries are valid
|
||||||
|
// rgb: either 0-255 OR 0-100%
|
||||||
|
// hsl: first: 0-360
|
||||||
|
foreach ($color_list as $pos => $color_check) {
|
||||||
|
if (empty($color_check)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$percent_check = false;
|
||||||
|
if (strrpos($color_check, '%', -1) !== false) {
|
||||||
|
$percent_check = true;
|
||||||
|
$color_check = str_replace('%', '', $color_check);
|
||||||
|
}
|
||||||
|
// first three normal percent or valid number
|
||||||
|
if ($rgb_flag !== false) {
|
||||||
|
if ($percent_check === true) {
|
||||||
|
// for ALL pos
|
||||||
|
if ($color_check < 0 || $color_check > 100) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} elseif (
|
||||||
|
$pos < 3 &&
|
||||||
|
($color_check < 0 || $color_check > 255)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
} elseif (
|
||||||
|
// RGBA set pos 3 if not percent
|
||||||
|
$pos == 3 &&
|
||||||
|
($color_check < 0 || $color_check > 1)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} elseif ($hsl_flag !== false) {
|
||||||
|
// pos 0: 0-360
|
||||||
|
// pos 1,2: %
|
||||||
|
// pos 3: % or 0-1 (float)
|
||||||
|
if (
|
||||||
|
$pos == 0 &&
|
||||||
|
($color_check < 0 || $color_check > 360)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
} elseif (
|
||||||
|
// if pos 1/2 are not percent
|
||||||
|
($pos == 1 || $pos == 2) &&
|
||||||
|
($percent_check != true ||
|
||||||
|
($color_check < 0 || $color_check > 100))
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
} elseif (
|
||||||
|
// 3 is either percent or 0~1
|
||||||
|
$pos == 3 &&
|
||||||
|
(
|
||||||
|
($percent_check == false &&
|
||||||
|
($color_check < 0 || $color_check > 1)) ||
|
||||||
|
($percent_check === true &&
|
||||||
|
($color_check < 0 || $color_check > 100))
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check if html/css color string is valid
|
||||||
|
* @param string $color A color string of any format
|
||||||
|
* @param int $flags defaults to ALL, else use | to combined from
|
||||||
|
* HEX_RGB, HEX_RGBA, RGB, RGBA, HSL, HSLA
|
||||||
|
* @return bool True if valid, False if not
|
||||||
|
* @throws Exception 1: no valid flag set
|
||||||
|
*/
|
||||||
|
public static function validateColor(string $color, int $flags = self::ALL): bool
|
||||||
|
{
|
||||||
|
// blocks for each check
|
||||||
|
$regex_blocks = [];
|
||||||
|
// set what to check
|
||||||
|
if ($flags & self::HEX_RGB) {
|
||||||
|
$regex_blocks[] = '#[\dA-Fa-f]{6}';
|
||||||
|
}
|
||||||
|
if ($flags & self::HEX_RGBA) {
|
||||||
|
$regex_blocks[] = '#[\dA-Fa-f]{8}';
|
||||||
|
}
|
||||||
|
if ($flags & self::RGB) {
|
||||||
|
$regex_blocks[] = 'rgb\(\d{1,3}%?,\s*\d{1,3}%?,\s*\d{1,3}%?\)';
|
||||||
|
}
|
||||||
|
if ($flags & self::RGBA) {
|
||||||
|
$regex_blocks[] = 'rgba\(\d{1,3}%?,\s*\d{1,3}%?,\s*\d{1,3}%?(,\s*(0\.\d{1,2}|1(\.0)?|\d{1,3}%))?\)';
|
||||||
|
}
|
||||||
|
if ($flags & self::HSL) {
|
||||||
|
$regex_blocks[] = 'hsl\(\d{1,3},\s*\d{1,3}(\.\d{1})?%,\s*\d{1,3}(\.\d{1})?%\)';
|
||||||
|
}
|
||||||
|
if ($flags & self::HSLA) {
|
||||||
|
$regex_blocks[] = 'hsla\(\d{1,3},\s*\d{1,3}(\.\d{1})?%,\s*\d{1,3}'
|
||||||
|
. '(\.\d{1})?%(,\s*(0\.\d{1,2}|1(\.0)?|\d{1,3}%))?\)';
|
||||||
|
}
|
||||||
|
// wrong flag set
|
||||||
|
if ($flags > self::ALL) {
|
||||||
|
throw new \Exception("Invalid flags parameter: $flags", 1);
|
||||||
|
}
|
||||||
|
if (!count($regex_blocks)) {
|
||||||
|
throw new \Exception("No regex blocks set: $flags", 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// build regex
|
||||||
|
$regex = '^('
|
||||||
|
. join('|', $regex_blocks)
|
||||||
|
// close regex
|
||||||
|
. ')$';
|
||||||
|
// print "C: $color, F: $flags, R: $regex\n";
|
||||||
|
|
||||||
|
if (preg_match("/$regex/", $color)) {
|
||||||
|
// if valid regex, we now need to check if the content is actually valid
|
||||||
|
// only for rgb/hsl type
|
||||||
|
/** @var int|false */
|
||||||
|
$rgb_flag = strpos($color, 'rgb');
|
||||||
|
/** @var int|false */
|
||||||
|
$hsl_flag = strpos($color, 'hsl');
|
||||||
|
// if both not match, return true
|
||||||
|
if (
|
||||||
|
$rgb_flag === false &&
|
||||||
|
$hsl_flag === false
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// run detaul rgb/hsl content check
|
||||||
|
return self::rgbHslContentCheck($color, $rgb_flag, $hsl_flag);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -26,14 +26,18 @@ class Byte
|
|||||||
* Source Idea: SOURCE: https://programming.guide/worlds-most-copied-so-snippet.html
|
* Source Idea: SOURCE: https://programming.guide/worlds-most-copied-so-snippet.html
|
||||||
*
|
*
|
||||||
* The class itself hast the following defined
|
* The class itself hast the following defined
|
||||||
* BYTE_FORMAT_NOSPACE [1] turn off spaces between number and extension
|
* BYTE_FORMAT_NOSPACE [1] turn off spaces between number and suffix
|
||||||
* BYTE_FORMAT_ADJUST [2] use sprintf to always print two decimals
|
* BYTE_FORMAT_ADJUST [2] use sprintf to always print two decimals
|
||||||
* BYTE_FORMAT_SI [3] use si standard 1000 instead of bytes 1024
|
* BYTE_FORMAT_SI [4] use si standard 1000 instead of bytes 1024
|
||||||
* To use the constant from outside use class::CONSTANT
|
* To use the constant from outside use class::CONSTANT
|
||||||
*
|
*
|
||||||
* @param string|int|float $bytes bytes as string int or pure int
|
* @param string|int|float $bytes bytes as string int or pure int
|
||||||
* @param int $flags bitwise flag with use space turned on
|
* @param int $flags bitwise flag with use space turned on
|
||||||
|
* BYTE_FORMAT_NOSPACE: no space between number and suffix
|
||||||
|
* BYTE_FORMAT_ADJUST: sprintf adjusted two 2 decimals
|
||||||
|
* BYTE_FORMAT_SI: use 1000 instead of 1024
|
||||||
* @return string converted byte number (float) with suffix
|
* @return string converted byte number (float) with suffix
|
||||||
|
* @throws \Exception 1: no valid flag set
|
||||||
*/
|
*/
|
||||||
public static function humanReadableByteFormat($bytes, int $flags = 0): string
|
public static function humanReadableByteFormat($bytes, int $flags = 0): string
|
||||||
{
|
{
|
||||||
@@ -58,11 +62,14 @@ class Byte
|
|||||||
} else {
|
} else {
|
||||||
$si = false;
|
$si = false;
|
||||||
}
|
}
|
||||||
|
if ($flags > 7) {
|
||||||
|
throw new \Exception("Invalid flags parameter: $flags", 1);
|
||||||
|
}
|
||||||
|
|
||||||
// si or normal
|
// si or normal
|
||||||
$unit = $si ? 1000 : 1024;
|
$unit = $si ? 1000 : 1024;
|
||||||
// always positive
|
// always positive
|
||||||
$abs_bytes = $bytes == PHP_INT_MIN ? PHP_INT_MAX : abs($bytes);
|
$abs_bytes = $bytes == PHP_INT_MIN ? PHP_INT_MAX : abs((float)$bytes);
|
||||||
// smaller than unit is always B
|
// smaller than unit is always B
|
||||||
if ($abs_bytes < $unit) {
|
if ($abs_bytes < $unit) {
|
||||||
return $bytes . 'B';
|
return $bytes . 'B';
|
||||||
@@ -106,11 +113,13 @@ class Byte
|
|||||||
* calculates the bytes based on a string with nnG, nnGB, nnM, etc
|
* calculates the bytes based on a string with nnG, nnGB, nnM, etc
|
||||||
* NOTE: large exabyte numbers will overflow
|
* NOTE: large exabyte numbers will overflow
|
||||||
* flag allowed:
|
* flag allowed:
|
||||||
* BYTE_FORMAT_SI [3] use si standard 1000 instead of bytes 1024
|
* BYTE_FORMAT_SI [4] use si standard 1000 instead of bytes 1024
|
||||||
*
|
*
|
||||||
* @param string|int|float $number any string or number to convert
|
* @param string|int|float $number any string or number to convert
|
||||||
* @param int $flags bitwise flag with use space turned on
|
* @param int $flags bitwise flag with use space turned on
|
||||||
|
* BYTE_FORMAT_SI: use 1000 instead of 1024
|
||||||
* @return string|int|float converted value or original value
|
* @return string|int|float converted value or original value
|
||||||
|
* @throws \Exception 1: no valid flag set
|
||||||
*/
|
*/
|
||||||
public static function stringByteFormat($number, int $flags = 0)
|
public static function stringByteFormat($number, int $flags = 0)
|
||||||
{
|
{
|
||||||
@@ -120,6 +129,9 @@ class Byte
|
|||||||
} else {
|
} else {
|
||||||
$si = false;
|
$si = false;
|
||||||
}
|
}
|
||||||
|
if ($flags != 0 && $flags != 4) {
|
||||||
|
throw new \Exception("Invalid flags parameter: $flags", 1);
|
||||||
|
}
|
||||||
// matches in regex
|
// matches in regex
|
||||||
$matches = [];
|
$matches = [];
|
||||||
// all valid units
|
// all valid units
|
||||||
|
|||||||
@@ -150,6 +150,9 @@ class Colors
|
|||||||
{
|
{
|
||||||
// check that H is 0 to 359, 360 = 0
|
// check that H is 0 to 359, 360 = 0
|
||||||
// and S and V are 0 to 1
|
// and S and V are 0 to 1
|
||||||
|
if ($H == 360) {
|
||||||
|
$H = 0;
|
||||||
|
}
|
||||||
if ($H < 0 || $H > 359) {
|
if ($H < 0 || $H > 359) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -287,6 +290,9 @@ class Colors
|
|||||||
if (!is_numeric($hue)) {
|
if (!is_numeric($hue)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if ($hue == 360) {
|
||||||
|
$hue = 0;
|
||||||
|
}
|
||||||
if ($hue < 0 || $hue > 359) {
|
if ($hue < 0 || $hue > 359) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
* you don't have to write any SQL queries, worry over update/insert
|
* you don't have to write any SQL queries, worry over update/insert
|
||||||
*
|
*
|
||||||
* HISTORY:
|
* HISTORY:
|
||||||
* 2019/9/11 (cs) error string 21->91, 22->92 for not overlapping with IO
|
* 2019/9/11 (cs) error string 21->1021, 22->1022 for not overlapping with IO
|
||||||
* 2005/07/07 (cs) updated array class for postgres: set 0 & NULL if int field given, insert uses () values () syntax
|
* 2005/07/07 (cs) updated array class for postgres: set 0 & NULL if int field given, insert uses () values () syntax
|
||||||
* 2005/03/31 (cs) fixed the class call with all debug vars
|
* 2005/03/31 (cs) fixed the class call with all debug vars
|
||||||
* 2003-03-10: error_ids where still wrong chagned 11->21 and 12->22
|
* 2003-03-10: error_ids where still wrong chagned 11->21 and 12->22
|
||||||
@@ -72,20 +72,24 @@ class ArrayIO extends \CoreLibs\DB\IO
|
|||||||
// instance db_io class
|
// instance db_io class
|
||||||
parent::__construct($db_config, $log ?? new \CoreLibs\Debug\Logging());
|
parent::__construct($db_config, $log ?? new \CoreLibs\Debug\Logging());
|
||||||
// more error vars for this class
|
// more error vars for this class
|
||||||
$this->error_string['91'] = 'No Primary Key given';
|
$this->error_string['1999'] = 'No table array or table name set';
|
||||||
$this->error_string['92'] = 'Could not run Array Query';
|
$this->error_string['1021'] = 'No Primary Key given';
|
||||||
|
$this->error_string['1022'] = 'Could not run Array Query';
|
||||||
|
|
||||||
$this->table_array = $table_array;
|
$this->table_array = $table_array;
|
||||||
$this->table_name = $table_name;
|
$this->table_name = $table_name;
|
||||||
|
|
||||||
|
// error abort if no table array or no table name
|
||||||
|
if (empty($table_array) || empty($table_name)) {
|
||||||
|
$this->__dbError(1999, false, 'MAJOR ERROR: Core settings missing');
|
||||||
|
}
|
||||||
|
|
||||||
// set primary key for given table_array
|
// set primary key for given table_array
|
||||||
if (is_array($this->table_array)) {
|
foreach ($this->table_array as $key => $value) {
|
||||||
foreach ($this->table_array as $key => $value) {
|
if (!empty($value['pk'])) {
|
||||||
if (isset($value['pk'])) {
|
$this->pk_name = $key;
|
||||||
$this->pk_name = $key;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} // set pk_name IF table_array was given
|
}
|
||||||
$this->dbArrayIOSetAcl($base_acl_level, $acl_admin);
|
$this->dbArrayIOSetAcl($base_acl_level, $acl_admin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,7 +201,7 @@ class ArrayIO extends \CoreLibs\DB\IO
|
|||||||
// if not set ... produce error
|
// if not set ... produce error
|
||||||
if (!$this->table_array[$this->pk_name]['value']) {
|
if (!$this->table_array[$this->pk_name]['value']) {
|
||||||
// if no PK found, error ...
|
// if no PK found, error ...
|
||||||
$this->__dbError(91);
|
$this->__dbError(1021);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
@@ -282,7 +286,7 @@ class ArrayIO extends \CoreLibs\DB\IO
|
|||||||
// if 0, error
|
// if 0, error
|
||||||
$this->pk_id = null;
|
$this->pk_id = null;
|
||||||
if (!$this->dbExec($q)) {
|
if (!$this->dbExec($q)) {
|
||||||
$this->__dbError(92);
|
$this->__dbError(1022);
|
||||||
}
|
}
|
||||||
return $this->table_array;
|
return $this->table_array;
|
||||||
}
|
}
|
||||||
@@ -369,7 +373,7 @@ class ArrayIO extends \CoreLibs\DB\IO
|
|||||||
// possible dbFetchArray errors ...
|
// possible dbFetchArray errors ...
|
||||||
$this->pk_id = $this->table_array[$this->pk_name]['value'];
|
$this->pk_id = $this->table_array[$this->pk_name]['value'];
|
||||||
} else {
|
} else {
|
||||||
$this->__dbError(92);
|
$this->__dbError(1022);
|
||||||
}
|
}
|
||||||
return $this->table_array;
|
return $this->table_array;
|
||||||
}
|
}
|
||||||
@@ -631,7 +635,7 @@ class ArrayIO extends \CoreLibs\DB\IO
|
|||||||
}
|
}
|
||||||
// return success or not
|
// return success or not
|
||||||
if (!$this->dbExec($q)) {
|
if (!$this->dbExec($q)) {
|
||||||
$this->__dbError(92);
|
$this->__dbError(1022);
|
||||||
}
|
}
|
||||||
// set primary key
|
// set primary key
|
||||||
if ($insert) {
|
if ($insert) {
|
||||||
|
|||||||
@@ -266,16 +266,18 @@ class IO
|
|||||||
// 1: read new, keep at end, clean before new run
|
// 1: read new, keep at end, clean before new run
|
||||||
// 2: read new, clean at the end (temporary cache)
|
// 2: read new, clean at the end (temporary cache)
|
||||||
// 3: never cache
|
// 3: never cache
|
||||||
/** @var int */
|
/** @var int use cache (default) in dbReturn */
|
||||||
public const USE_CACHE = 0;
|
public const USE_CACHE = 0;
|
||||||
/** @var int */
|
/** @var int reset cache and read new in dbReturn */
|
||||||
public const READ_NEW = 1;
|
public const READ_NEW = 1;
|
||||||
/** @var int */
|
/** @var int clear cache after read in dbeEturn */
|
||||||
public const CLEAR_CACHE = 2;
|
public const CLEAR_CACHE = 2;
|
||||||
/** @var int */
|
/** @var int do not use any cache in dbReturn */
|
||||||
public const NO_CACHE = 3;
|
public const NO_CACHE = 3;
|
||||||
/** @var string */
|
/** @var string default hash type */
|
||||||
public const ERROR_HASH_TYPE = 'adler32';
|
public const ERROR_HASH_TYPE = 'adler32';
|
||||||
|
/** @var string regex to get returning with matches at position 1 */
|
||||||
|
public const REGEX_RETURNING = '/\s?returning(?: (.+?));?$/i';
|
||||||
|
|
||||||
// recommend to set private/protected and only allow setting via method
|
// recommend to set private/protected and only allow setting via method
|
||||||
// can bet set from outside
|
// can bet set from outside
|
||||||
@@ -452,6 +454,11 @@ class IO
|
|||||||
'71' => 'Failed to set search path/schema',
|
'71' => 'Failed to set search path/schema',
|
||||||
'80' => 'Trying to set an empty encoding',
|
'80' => 'Trying to set an empty encoding',
|
||||||
'81' => 'Failed to set client encoding',
|
'81' => 'Failed to set client encoding',
|
||||||
|
// for prepared cursor return
|
||||||
|
'101' => 'Statement name empty for get prepare cursor',
|
||||||
|
'102' => 'Key empty for get prepare cursir',
|
||||||
|
'103' => 'No prepared cursor with this name',
|
||||||
|
'104' => 'No Key with this name in the prepared cursor array'
|
||||||
];
|
];
|
||||||
|
|
||||||
// load the core DB functions wrapper class
|
// load the core DB functions wrapper class
|
||||||
@@ -568,14 +575,14 @@ class IO
|
|||||||
/**
|
/**
|
||||||
* checks if query is a SELECT, SHOW or WITH, if not error, 0 return
|
* checks if query is a SELECT, SHOW or WITH, if not error, 0 return
|
||||||
* NOTE:
|
* NOTE:
|
||||||
* Query needs to start with SELECT, SHOW or WITH. if starts with "with" it is ignored
|
* Query needs to start with SELECT, SHOW or WITH
|
||||||
* @param string $query query to check
|
* @param string $query query to check
|
||||||
* @return bool true if matching, false if not
|
* @return bool true if matching, false if not
|
||||||
*/
|
*/
|
||||||
private function __checkQueryForSelect(string $query): bool
|
private function __checkQueryForSelect(string $query): bool
|
||||||
{
|
{
|
||||||
// perhaps allow spaces before select ?!?
|
// change to string starts with?
|
||||||
if (preg_match("/^(select|show|with) /i", $query)) {
|
if (preg_match("/^(?:SELECT|SHOW|WITH)\s/i", $query)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -592,10 +599,10 @@ class IO
|
|||||||
*/
|
*/
|
||||||
private function __checkQueryForInsert(string $query, bool $pure = false): bool
|
private function __checkQueryForInsert(string $query, bool $pure = false): bool
|
||||||
{
|
{
|
||||||
if ($pure && preg_match("/^insert /i", $query)) {
|
if ($pure && preg_match("/^INSERT\s+?INTO\s/i", $query)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!$pure && preg_match("/^(insert|update|delete) /i", $query)) {
|
if (!$pure && preg_match("/^(?:INSERT\s+?INTO|DELETE\s+?FROM|UPDATE)\s/i", $query)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -609,7 +616,7 @@ class IO
|
|||||||
*/
|
*/
|
||||||
private function __checkQueryForUpdate(string $query): bool
|
private function __checkQueryForUpdate(string $query): bool
|
||||||
{
|
{
|
||||||
if (preg_match("/^update /i", $query)) {
|
if (preg_match("/^UPDATE\s?(.+)/i", $query)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -874,12 +881,32 @@ class IO
|
|||||||
private function __dbReturnTable(string $query): array
|
private function __dbReturnTable(string $query): array
|
||||||
{
|
{
|
||||||
$matches = [];
|
$matches = [];
|
||||||
if (preg_match("/^SELECT /i", $query)) {
|
$schema_table = [];
|
||||||
preg_match("/ (FROM) \"?(([\w_]+)\.)?([\w_]+)\"? /i", $query, $matches);
|
if ($this->__checkQueryForSelect($query)) {
|
||||||
|
// only selects the first one, this is more a fallback
|
||||||
|
// MATCHES 1 (call), 3 (schema), 4 (table)
|
||||||
|
preg_match("/\s+?(FROM)\s+?([\"'])?(?:([\w_]+)\.)?([\w_]+)(?:\2)?\s?/i", $query, $matches);
|
||||||
|
$schema_table = [
|
||||||
|
$matches[3] ?? '',
|
||||||
|
$matches[4] ?? '',
|
||||||
|
];
|
||||||
} else {
|
} else {
|
||||||
preg_match("/(INSERT INTO|DELETE FROM|UPDATE) \"?(([\w_]+)\.)?([\w_]+)\"? /i", $query, $matches);
|
preg_match(
|
||||||
|
// must start with
|
||||||
|
// INSERT INTO (table)
|
||||||
|
// DELETE FROM (table)
|
||||||
|
// UPDATE (table) SET
|
||||||
|
// MATCHES 1 (call), 4 (schema), 5 (table)
|
||||||
|
"/^(INSERT\s+?INTO|DELETE\s+?FROM|(UPDATE))\s+?([\"'])?(?:([\w_]+)\.)?([\w_]+)(?:\3)?\s?(?(2)SET|)/i",
|
||||||
|
$query,
|
||||||
|
$matches
|
||||||
|
);
|
||||||
|
$schema_table = [
|
||||||
|
$matches[4] ?? '',
|
||||||
|
$matches[5] ?? ''
|
||||||
|
];
|
||||||
}
|
}
|
||||||
return [$matches[3] ?? '', $matches[4] ?? ''];
|
return $schema_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1002,7 +1029,7 @@ class IO
|
|||||||
$this->pk_name_table[$table] : 'NULL';
|
$this->pk_name_table[$table] : 'NULL';
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
!preg_match("/ returning /i", $this->query) &&
|
!preg_match(self::REGEX_RETURNING, $this->query) &&
|
||||||
$this->pk_name && $this->pk_name != 'NULL'
|
$this->pk_name && $this->pk_name != 'NULL'
|
||||||
) {
|
) {
|
||||||
// check if this query has a ; at the end and remove it
|
// check if this query has a ; at the end and remove it
|
||||||
@@ -1011,7 +1038,9 @@ class IO
|
|||||||
$this->query = !is_string($__query) ? $this->query : $__query;
|
$this->query = !is_string($__query) ? $this->query : $__query;
|
||||||
$this->query .= " RETURNING " . $this->pk_name;
|
$this->query .= " RETURNING " . $this->pk_name;
|
||||||
$this->returning_id = true;
|
$this->returning_id = true;
|
||||||
} elseif (preg_match("/ returning (.*)/i", $this->query, $matches)) {
|
} elseif (
|
||||||
|
preg_match(self::REGEX_RETURNING, $this->query, $matches)
|
||||||
|
) {
|
||||||
if ($this->pk_name && $this->pk_name != 'NULL') {
|
if ($this->pk_name && $this->pk_name != 'NULL') {
|
||||||
// add the primary key if it is not in the returning set
|
// add the primary key if it is not in the returning set
|
||||||
if (!preg_match("/$this->pk_name/", $matches[1])) {
|
if (!preg_match("/$this->pk_name/", $matches[1])) {
|
||||||
@@ -1025,7 +1054,7 @@ class IO
|
|||||||
// if we have an UPDATE and RETURNING, flag for true, but do not add anything
|
// if we have an UPDATE and RETURNING, flag for true, but do not add anything
|
||||||
if (
|
if (
|
||||||
$this->__checkQueryForUpdate($this->query) &&
|
$this->__checkQueryForUpdate($this->query) &&
|
||||||
preg_match("/ returning (.*)/i", $this->query, $matches)
|
preg_match(self::REGEX_RETURNING, $this->query, $matches)
|
||||||
) {
|
) {
|
||||||
$this->returning_id = true;
|
$this->returning_id = true;
|
||||||
}
|
}
|
||||||
@@ -1481,19 +1510,29 @@ class IO
|
|||||||
* @param string $string string to escape
|
* @param string $string string to escape
|
||||||
* @return string escaped string
|
* @return string escaped string
|
||||||
*/
|
*/
|
||||||
public function dbEscapeIdentifier($string): string
|
public function dbEscapeIdentifier(string $string): string
|
||||||
{
|
{
|
||||||
return $this->db_functions->__dbEscapeIdentifier($string);
|
return $this->db_functions->__dbEscapeIdentifier($string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* escape data for writing to bytea type column field
|
* escape data for writing to bytea type column field
|
||||||
* @param string $bytea bytea to escape
|
* @param string $data data to escape to bytea
|
||||||
* @return string escaped bytea
|
* @return string escaped bytea string
|
||||||
*/
|
*/
|
||||||
public function dbEscapeBytea($bytea)
|
public function dbEscapeBytea(string $data): string
|
||||||
{
|
{
|
||||||
return $this->db_functions->__dbEscapeBytea($bytea);
|
return $this->db_functions->__dbEscapeBytea($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* unescape bytea data back to normal binrary data
|
||||||
|
* @param string $bytea bytea data stream
|
||||||
|
* @return string binary data string
|
||||||
|
*/
|
||||||
|
public function dbUnescapeBytea(string $bytea): string
|
||||||
|
{
|
||||||
|
return $this->db_functions->__dbUnescapeBytea($bytea);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1811,6 +1850,7 @@ class IO
|
|||||||
|
|
||||||
// if cursor exists ...
|
// if cursor exists ...
|
||||||
if ($this->cursor_ext[$query_hash]['cursor']) {
|
if ($this->cursor_ext[$query_hash]['cursor']) {
|
||||||
|
/** @phpstan-ignore-next-line claims this is always false, but can be true */
|
||||||
if ($first_call === true) {
|
if ($first_call === true) {
|
||||||
$this->cursor_ext[$query_hash]['log'][] = 'First call';
|
$this->cursor_ext[$query_hash]['log'][] = 'First call';
|
||||||
// count the rows returned (if select)
|
// count the rows returned (if select)
|
||||||
@@ -2195,7 +2235,7 @@ class IO
|
|||||||
public function dbGetQueryCalled(string $query): int
|
public function dbGetQueryCalled(string $query): int
|
||||||
{
|
{
|
||||||
$query_hash = $this->dbGetQueryHash($query);
|
$query_hash = $this->dbGetQueryHash($query);
|
||||||
if ($this->query_called[$query_hash]) {
|
if (!empty($this->query_called[$query_hash])) {
|
||||||
return $this->query_called[$query_hash];
|
return $this->query_called[$query_hash];
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2272,11 +2312,14 @@ class IO
|
|||||||
$this->prepare_cursor[$stm_name]['pk_name'] = $pk_name;
|
$this->prepare_cursor[$stm_name]['pk_name'] = $pk_name;
|
||||||
}
|
}
|
||||||
// if no returning, then add it
|
// if no returning, then add it
|
||||||
if (!preg_match("/ returning /i", $query) && $this->prepare_cursor[$stm_name]['pk_name']) {
|
if (
|
||||||
|
!preg_match(self::REGEX_RETURNING, $query) &&
|
||||||
|
$this->prepare_cursor[$stm_name]['pk_name']
|
||||||
|
) {
|
||||||
$query .= " RETURNING " . $this->prepare_cursor[$stm_name]['pk_name'];
|
$query .= " RETURNING " . $this->prepare_cursor[$stm_name]['pk_name'];
|
||||||
$this->prepare_cursor[$stm_name]['returning_id'] = true;
|
$this->prepare_cursor[$stm_name]['returning_id'] = true;
|
||||||
} elseif (
|
} elseif (
|
||||||
preg_match("/ returning (.*)/i", $query, $matches) &&
|
preg_match(self::REGEX_RETURNING, $query, $matches) &&
|
||||||
$this->prepare_cursor[$stm_name]['pk_name']
|
$this->prepare_cursor[$stm_name]['pk_name']
|
||||||
) {
|
) {
|
||||||
// if returning exists but not pk_name, add it
|
// if returning exists but not pk_name, add it
|
||||||
@@ -3055,6 +3098,60 @@ class IO
|
|||||||
return $this->field_names;
|
return $this->field_names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value for given key in statement
|
||||||
|
* Will write error if statemen id does not exist
|
||||||
|
* or key is invalid
|
||||||
|
*
|
||||||
|
* @param string $stm_name The name of the stored statement
|
||||||
|
* @param string $key Key field name in prepared cursor array
|
||||||
|
* Allowed are: pk_name, count, query, returning_id
|
||||||
|
* @return null|string|int|bool Entry from each of the valid keys
|
||||||
|
* Will return false on error
|
||||||
|
* Not ethat returnin_id also can return false
|
||||||
|
* but will not set an error entry
|
||||||
|
*/
|
||||||
|
public function dbGetPrepareCursorValue(string $stm_name, string $key)
|
||||||
|
{
|
||||||
|
// if no statement name
|
||||||
|
if (empty($stm_name)) {
|
||||||
|
$this->__dbError(
|
||||||
|
101,
|
||||||
|
false,
|
||||||
|
'No statement name given'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// if not a valid key
|
||||||
|
if (!in_array($key, ['pk_name', 'count', 'query', 'returning_id'])) {
|
||||||
|
$this->__dbError(
|
||||||
|
102,
|
||||||
|
false,
|
||||||
|
'Invalid key name'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// statement name not in prepared list
|
||||||
|
if (empty($this->prepare_cursor[$stm_name])) {
|
||||||
|
$this->__dbError(
|
||||||
|
103,
|
||||||
|
false,
|
||||||
|
'Statement name does not exist in prepare cursor array'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// key doest not exists, this will never hit as we filter out invalid ones
|
||||||
|
if (!isset($this->prepare_cursor[$stm_name][$key])) {
|
||||||
|
$this->__dbError(
|
||||||
|
104,
|
||||||
|
false,
|
||||||
|
'Key does not exist in prepare cursor array'
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $this->prepare_cursor[$stm_name][$key];
|
||||||
|
}
|
||||||
|
|
||||||
// ***************************
|
// ***************************
|
||||||
// ERROR AND WARNING DATA
|
// ERROR AND WARNING DATA
|
||||||
// ***************************
|
// ***************************
|
||||||
|
|||||||
@@ -559,15 +559,26 @@ class PgSQL implements \CoreLibs\DB\SQL\SqlInterface\SqlFunctions
|
|||||||
/**
|
/**
|
||||||
* wrapper for pg_escape_byte
|
* wrapper for pg_escape_byte
|
||||||
*
|
*
|
||||||
* @param string $bytea bytea data stream
|
* @param string $data data stream
|
||||||
* @return string escaped bytea string
|
* @return string escaped bytea string
|
||||||
*/
|
*/
|
||||||
public function __dbEscapeBytea(string $bytea): string
|
public function __dbEscapeBytea(string $data): string
|
||||||
{
|
{
|
||||||
if ($this->dbh === false || is_bool($this->dbh)) {
|
if ($this->dbh === false || is_bool($this->dbh)) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
return pg_escape_bytea($this->dbh, $bytea);
|
return pg_escape_bytea($this->dbh, $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* unescape bytea data from postgesql
|
||||||
|
*
|
||||||
|
* @param string $bytea Bytea data stream
|
||||||
|
* @return string Unescaped bytea data
|
||||||
|
*/
|
||||||
|
public function __dbUnescapeBytea(string $bytea): string
|
||||||
|
{
|
||||||
|
return pg_unescape_bytea($bytea);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -214,10 +214,18 @@ interface SqlFunctions
|
|||||||
/**
|
/**
|
||||||
* Undocumented function
|
* Undocumented function
|
||||||
*
|
*
|
||||||
* @param string $bytea
|
* @param string $data
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function __dbEscapeBytea(string $bytea): string;
|
public function __dbEscapeBytea(string $data): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @param string $bytea
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __dbUnescapeBytea(string $bytea): string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undocumented function
|
* Undocumented function
|
||||||
|
|||||||
@@ -94,6 +94,10 @@ class DotEnv
|
|||||||
// strip ending " and EVERYTHING that follows after that
|
// strip ending " and EVERYTHING that follows after that
|
||||||
$line = $matches[1];
|
$line = $matches[1];
|
||||||
}
|
}
|
||||||
|
// just be sure it is init before we fill
|
||||||
|
if (!isset($_ENV[$var])) {
|
||||||
|
$_ENV[$var] = '';
|
||||||
|
}
|
||||||
// strip line of slashes
|
// strip line of slashes
|
||||||
$_ENV[$var] .= stripslashes($line);
|
$_ENV[$var] .= stripslashes($line);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -294,6 +294,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// language
|
// language
|
||||||
/** @var \CoreLibs\Language\L10n */
|
/** @var \CoreLibs\Language\L10n */
|
||||||
public $l;
|
public $l;
|
||||||
|
// log
|
||||||
|
/** @var \CoreLibs\Debug\Logging */
|
||||||
|
public $log;
|
||||||
|
|
||||||
// now some default error msgs (english)
|
// now some default error msgs (english)
|
||||||
/** @var array<mixed> */
|
/** @var array<mixed> */
|
||||||
@@ -307,17 +310,22 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
* @param \CoreLibs\Language\L10n|null $l10n l10n language class, null auto set
|
* @param \CoreLibs\Language\L10n|null $l10n l10n language class, null auto set
|
||||||
* @param array<string,string>|null $locale locale array from ::setLocale,
|
* @param array<string,string>|null $locale locale array from ::setLocale,
|
||||||
* null auto set
|
* null auto set
|
||||||
|
* @param array<mixed>|null $table_arrays Override table array data
|
||||||
|
* instead of try to load from
|
||||||
|
* include file
|
||||||
|
* @throws \Exception 1: No table_arrays set/no class found for my page name
|
||||||
*/
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
array $db_config,
|
array $db_config,
|
||||||
?\CoreLibs\Debug\Logging $log = null,
|
?\CoreLibs\Debug\Logging $log = null,
|
||||||
?\CoreLibs\Language\L10n $l10n = null,
|
?\CoreLibs\Language\L10n $l10n = null,
|
||||||
?array $locale = null
|
?array $locale = null,
|
||||||
|
?array $table_arrays = null,
|
||||||
) {
|
) {
|
||||||
global $table_arrays;
|
// init logger if not set
|
||||||
// replace any non valid variable names
|
$this->log = $log ?? new \CoreLibs\Debug\Logging();
|
||||||
// TODO extract only alphanumeric and _ after . to _ replacement
|
// don't log per class
|
||||||
$this->my_page_name = str_replace(['.'], '_', System::getPageName(System::NO_EXTENSION));
|
$this->log->setLogPer('class', false);
|
||||||
// if pass on locale is null
|
// if pass on locale is null
|
||||||
if ($locale === null) {
|
if ($locale === null) {
|
||||||
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||||
@@ -341,58 +349,39 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// security settings
|
// security settings
|
||||||
$this->base_acl_level = (int)$_SESSION['BASE_ACL_LEVEL'];
|
$this->base_acl_level = (int)$_SESSION['BASE_ACL_LEVEL'];
|
||||||
$this->acl_admin = (int)$_SESSION['ADMIN'];
|
$this->acl_admin = (int)$_SESSION['ADMIN'];
|
||||||
$GLOBALS['base_acl_level'] = $this->base_acl_level;
|
|
||||||
$GLOBALS['acl_admin'] = $this->acl_admin;
|
// replace any non valid variable names and set my page name
|
||||||
|
$this->my_page_name = str_replace(
|
||||||
|
['.'],
|
||||||
|
'_',
|
||||||
|
System::getPageName(System::NO_EXTENSION)
|
||||||
|
);
|
||||||
|
|
||||||
// first check if we have a in page override as $table_arrays[page name]
|
// first check if we have a in page override as $table_arrays[page name]
|
||||||
if (
|
if (
|
||||||
/* isset($GLOBALS['table_arrays']) &&
|
|
||||||
is_array($GLOBALS['table_arrays']) &&
|
|
||||||
isset($GLOBALS['table_arrays'][System::getPageName(System::NO_EXTENSION)]) &&
|
|
||||||
is_array($GLOBALS['table_arrays'][System::getPageName(System::NO_EXTENSION)]) */
|
|
||||||
isset($table_arrays[System::getPageName(System::NO_EXTENSION)]) &&
|
isset($table_arrays[System::getPageName(System::NO_EXTENSION)]) &&
|
||||||
is_array($table_arrays[System::getPageName(System::NO_EXTENSION)])
|
is_array($table_arrays[System::getPageName(System::NO_EXTENSION)])
|
||||||
) {
|
) {
|
||||||
// $config_array = $GLOBALS['table_arrays'][System::getPageName(1)];
|
// $config_array = $GLOBALS['table_arrays'][System::getPageName(1)];
|
||||||
$config_array = $table_arrays[System::getPageName(1)];
|
$config_array = $table_arrays[System::getPageName(1)];
|
||||||
} else {
|
} else {
|
||||||
// WARNING: auto spl load does not work with this as it is an array
|
// primary try to load the class
|
||||||
// and not a function/object
|
/** @var \CoreLibs\Output\Form\TableArraysInterface|false $content_class */
|
||||||
// check if this is the old path or the new path
|
$content_class = $this->loadTableArray();
|
||||||
// check local folder in current path
|
if (is_object($content_class)) {
|
||||||
// then check general global folder
|
$config_array = $content_class->setTableArray();
|
||||||
if (
|
|
||||||
is_dir(TABLE_ARRAYS) &&
|
|
||||||
is_file(TABLE_ARRAYS . 'array_' . $this->my_page_name . '.php')
|
|
||||||
) {
|
|
||||||
include(TABLE_ARRAYS . 'array_' . $this->my_page_name . '.php');
|
|
||||||
} elseif (
|
|
||||||
is_dir(BASE . INCLUDES . TABLE_ARRAYS) &&
|
|
||||||
is_file(BASE . INCLUDES . TABLE_ARRAYS . 'array_' . $this->my_page_name . '.php')
|
|
||||||
) {
|
|
||||||
include(BASE . INCLUDES . TABLE_ARRAYS . 'array_' . $this->my_page_name . '.php');
|
|
||||||
}
|
|
||||||
// in the include file there must be a variable with the page name matching
|
|
||||||
if (isset(${$this->my_page_name}) && is_array(${$this->my_page_name})) {
|
|
||||||
$config_array = ${$this->my_page_name};
|
|
||||||
} else {
|
} else {
|
||||||
// dummy created
|
// throw an error here as we cannot load the class at all
|
||||||
$config_array = [
|
throw new \Exception("Cannot load " . $this->my_page_name, 1);
|
||||||
'table_array' => [],
|
|
||||||
'table_name' => '',
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// don't log per class
|
// $log->debug('CONFIG ARRAY', $log->prAr($config_array));
|
||||||
if ($log !== null) {
|
|
||||||
$log->setLogPer('class', false);
|
|
||||||
}
|
|
||||||
// start the array_io class which will start db_io ...
|
// start the array_io class which will start db_io ...
|
||||||
parent::__construct(
|
parent::__construct(
|
||||||
$db_config,
|
$db_config,
|
||||||
$config_array['table_array'],
|
$config_array['table_array'],
|
||||||
$config_array['table_name'],
|
$config_array['table_name'],
|
||||||
$log ?? new \CoreLibs\Debug\Logging(),
|
$this->log,
|
||||||
// set the ACL
|
// set the ACL
|
||||||
$this->base_acl_level,
|
$this->base_acl_level,
|
||||||
$this->acl_admin
|
$this->acl_admin
|
||||||
@@ -474,8 +463,67 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
parent::__destruct();
|
parent::__destruct();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PRIVATE METHODS |=================================================>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* load table array class based on my page name converted to camel case
|
||||||
|
* class files are in \TableArrays folder in \Output\Form
|
||||||
|
* @return object|bool Return class object or false on failure
|
||||||
|
*/
|
||||||
|
private function loadTableArray()
|
||||||
|
{
|
||||||
|
// note: it schould be Schemas but an original type made it to this
|
||||||
|
// this file is kept for the old usage, new one should be EditSchemas
|
||||||
|
$table_array_shim = [
|
||||||
|
'EditSchemes' => 'EditSchemas'
|
||||||
|
];
|
||||||
|
// camel case $this->my_page_name from foo_bar_note to FooBarNote
|
||||||
|
$page_name_camel_case = '';
|
||||||
|
foreach (explode('_', $this->my_page_name) as $part) {
|
||||||
|
$page_name_camel_case .= ucfirst($part);
|
||||||
|
}
|
||||||
|
$class_string = __NAMESPACE__ . "\\TableArrays\\"
|
||||||
|
. (
|
||||||
|
// shim lookup
|
||||||
|
$table_array_shim[$page_name_camel_case] ??
|
||||||
|
$page_name_camel_case
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
/** @var \CoreLibs\Output\Form\TableArraysInterface|false $class */
|
||||||
|
$class = new $class_string($this);
|
||||||
|
} catch (\Throwable $t) {
|
||||||
|
$this->log->debug('CLASS LOAD', 'Failed loading: ' . $class_string . ' => ' . $t->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (is_object($class)) {
|
||||||
|
return $class;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// PUBLIC METHODS |=================================================>
|
// PUBLIC METHODS |=================================================>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return current acl admin flag (1/0)
|
||||||
|
*
|
||||||
|
* @return int Admin flag 1 for on or 0 for off
|
||||||
|
*/
|
||||||
|
public function getAclAdmin(): int
|
||||||
|
{
|
||||||
|
return $this->acl_admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check if current acl level is match to requested on
|
||||||
|
*
|
||||||
|
* @param int $level Requested ACL level
|
||||||
|
* @return bool if current level equal or larger return tru, else false
|
||||||
|
*/
|
||||||
|
public function checkBaseACL(int $level): bool
|
||||||
|
{
|
||||||
|
return $this->base_acl_level >= $level ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dumps all values into output (for error msg)
|
* dumps all values into output (for error msg)
|
||||||
*
|
*
|
||||||
@@ -1478,7 +1526,8 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// $this->log->debug('edit_error', 'QS: <pre>' . print_r($_POST, true) . '</pre>');
|
// $this->log->debug('edit_error', 'QS: <pre>' . print_r($_POST, true) . '</pre>');
|
||||||
if (is_array($this->element_list)) {
|
if (is_array($this->element_list)) {
|
||||||
// check the mandatory stuff
|
// check the mandatory stuff
|
||||||
// if mandatory, check that at least on pk exists or if at least the mandatory field is filled
|
// if mandatory, check that at least on pk exists or
|
||||||
|
// if at least the mandatory field is filled
|
||||||
foreach ($this->element_list as $table_name => $reference_array) {
|
foreach ($this->element_list as $table_name => $reference_array) {
|
||||||
if (!is_array($reference_array)) {
|
if (!is_array($reference_array)) {
|
||||||
$reference_array = [];
|
$reference_array = [];
|
||||||
@@ -1518,7 +1567,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// . count($_POST[$prfx.$key]) . ' | M: $max');
|
// . count($_POST[$prfx.$key]) . ' | M: $max');
|
||||||
// $this->log->debug('edit_error_chk', 'K: ' . $_POST[$prfx.$key] . ' | ' . $_POST[$prfx.$key][0]);
|
// $this->log->debug('edit_error_chk', 'K: ' . $_POST[$prfx.$key] . ' | ' . $_POST[$prfx.$key][0]);
|
||||||
}
|
}
|
||||||
$this->log->debug('POST ARRAY', $this->log->prAr($_POST));
|
// $this->log->debug('POST ARRAY', $this->log->prAr($_POST));
|
||||||
// init variables before inner loop run
|
// init variables before inner loop run
|
||||||
$mand_okay = 0;
|
$mand_okay = 0;
|
||||||
$mand_name = '';
|
$mand_name = '';
|
||||||
@@ -1530,15 +1579,17 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
for ($i = 0; $i < $max; $i++) {
|
for ($i = 0; $i < $max; $i++) {
|
||||||
// either one of the post pks is set, or the mandatory
|
// either one of the post pks is set, or the mandatory
|
||||||
foreach ($reference_array['elements'] as $el_name => $data_array) {
|
foreach ($reference_array['elements'] as $el_name => $data_array) {
|
||||||
if (isset($data_array['mandatory']) && $data_array['mandatory']) {
|
if (
|
||||||
|
isset($data_array['mandatory']) &&
|
||||||
|
$data_array['mandatory']
|
||||||
|
) {
|
||||||
$mand_name = $data_array['output_name'];
|
$mand_name = $data_array['output_name'];
|
||||||
}
|
}
|
||||||
// check if there is a primary ket inside, so it is okay
|
// check if there is a primary ket inside, so it is okay
|
||||||
if (
|
if (
|
||||||
isset($data_array['pk_id']) &&
|
isset($data_array['pk_id']) &&
|
||||||
count($_POST[$prfx . $el_name]) &&
|
count($_POST[$prfx . $el_name]) &&
|
||||||
isset($reference_array['mandatory']) &&
|
!empty($reference_array['mandatory'])
|
||||||
$reference_array['mandatory']
|
|
||||||
) {
|
) {
|
||||||
$mand_okay = 1;
|
$mand_okay = 1;
|
||||||
}
|
}
|
||||||
@@ -1549,15 +1600,14 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// . $_POST[$prfx . $el_name] . ' - ' . $reference_array['enable_name'] . ' - '
|
// . $_POST[$prfx . $el_name] . ' - ' . $reference_array['enable_name'] . ' - '
|
||||||
// . $_POST[$reference_array['enable_name']][$_POST[$prfx . $el_name][$i]]);
|
// . $_POST[$reference_array['enable_name']][$_POST[$prfx . $el_name][$i]]);
|
||||||
if (
|
if (
|
||||||
isset($data_array['mandatory']) &&
|
!empty($data_array['mandatory']) &&
|
||||||
$data_array['mandatory'] &&
|
!empty($_POST[$prfx . $el_name][$i])
|
||||||
isset($_POST[$prfx . $el_name][$i]) &&
|
|
||||||
$_POST[$prfx . $el_name][$i]
|
|
||||||
) {
|
) {
|
||||||
$mand_okay = 1;
|
$mand_okay = 1;
|
||||||
$row_okay[$i] = 1;
|
$row_okay[$i] = 1;
|
||||||
} elseif (
|
} elseif (
|
||||||
!empty($data_array['type']) && $data_array['type'] == 'radio_group' &&
|
!empty($data_array['type']) &&
|
||||||
|
$data_array['type'] == 'radio_group' &&
|
||||||
!isset($_POST[$prfx . $el_name])
|
!isset($_POST[$prfx . $el_name])
|
||||||
) {
|
) {
|
||||||
// radio group and set where one not active
|
// radio group and set where one not active
|
||||||
@@ -1565,20 +1615,22 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
$row_okay[$_POST[$prfx . $el_name][$i] ?? 0] = 0;
|
$row_okay[$_POST[$prfx . $el_name][$i] ?? 0] = 0;
|
||||||
$default_wrong[$_POST[$prfx . $el_name][$i] ?? 0] = 1;
|
$default_wrong[$_POST[$prfx . $el_name][$i] ?? 0] = 1;
|
||||||
$error[$_POST[$prfx . $el_name][$i] ?? 0] = 1;
|
$error[$_POST[$prfx . $el_name][$i] ?? 0] = 1;
|
||||||
} elseif (isset($_POST[$prfx . $el_name][$i]) && !isset($error[$i])) {
|
} elseif (
|
||||||
|
isset($_POST[$prfx . $el_name][$i]) &&
|
||||||
|
!isset($error[$i])
|
||||||
|
) {
|
||||||
// $this->log->debug('edit_error_chk', '[$i]');
|
// $this->log->debug('edit_error_chk', '[$i]');
|
||||||
$element_set[$i] = 1;
|
$element_set[$i] = 1;
|
||||||
$row_okay[$i] = 1;
|
$row_okay[$i] = 1;
|
||||||
} elseif (
|
} elseif (
|
||||||
isset($data_array['mandatory']) &&
|
!empty($data_array['mandatory']) &&
|
||||||
$data_array['mandatory'] &&
|
|
||||||
!$_POST[$prfx . $el_name][$i]
|
!$_POST[$prfx . $el_name][$i]
|
||||||
) {
|
) {
|
||||||
$row_okay[$i] = 0;
|
$row_okay[$i] = 0;
|
||||||
}
|
}
|
||||||
// do optional error checks like for normal fields
|
// do optional error checks like for normal fields
|
||||||
// currently active: unique/alphanumeric
|
// currently active: unique/alphanumeric
|
||||||
if (isset($data_array['error_check'])) {
|
if (!empty($data_array['error_check'])) {
|
||||||
foreach (explode('|', $data_array['error_check']) as $error_check) {
|
foreach (explode('|', $data_array['error_check']) as $error_check) {
|
||||||
switch ($error_check) {
|
switch ($error_check) {
|
||||||
// check unique, check if field is filled and not same in _POST set
|
// check unique, check if field is filled and not same in _POST set
|
||||||
@@ -1597,6 +1649,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
$reference_array['output_name'],
|
$reference_array['output_name'],
|
||||||
$i
|
$i
|
||||||
);
|
);
|
||||||
|
$_POST['ERROR'][$prfx][$i] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'alphanumericspace':
|
case 'alphanumericspace':
|
||||||
@@ -1612,6 +1665,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
$reference_array['output_name'],
|
$reference_array['output_name'],
|
||||||
$i
|
$i
|
||||||
);
|
);
|
||||||
|
$_POST['ERROR'][$prfx][$i] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1623,8 +1677,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
// main mandatory is met -> error msg
|
// main mandatory is met -> error msg
|
||||||
if (
|
if (
|
||||||
!$mand_okay &&
|
!$mand_okay &&
|
||||||
isset($reference_array['mandatory']) &&
|
!empty($reference_array['mandatory'])
|
||||||
$reference_array['mandatory']
|
|
||||||
) {
|
) {
|
||||||
$this->msg .= sprintf(
|
$this->msg .= sprintf(
|
||||||
$this->l->__('You need to enter at least one data set for field <b>%s</b>!<br>'),
|
$this->l->__('You need to enter at least one data set for field <b>%s</b>!<br>'),
|
||||||
@@ -2533,12 +2586,13 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
}
|
}
|
||||||
// $this->log->debug('CFG QUERY', 'Q: ' . $q);
|
// $this->log->debug('CFG QUERY', 'Q: ' . $q);
|
||||||
// only run if we have query strnig
|
// only run if we have query strnig
|
||||||
|
$written_pos = [];
|
||||||
if (isset($q)) {
|
if (isset($q)) {
|
||||||
|
$prfx = $data['prefix']; // short
|
||||||
$pos = 0; // position in while for overwrite if needed
|
$pos = 0; // position in while for overwrite if needed
|
||||||
// read out the list and add the selected data if needed
|
// read out the list and add the selected data if needed
|
||||||
while (is_array($res = $this->dbReturn($q))) {
|
while (is_array($res = $this->dbReturn($q))) {
|
||||||
$_data = [];
|
$_data = [];
|
||||||
$prfx = $data['prefix']; // short
|
|
||||||
// go through each res
|
// go through each res
|
||||||
for ($i = 0, $i_max = count($q_select); $i < $i_max; $i++) {
|
for ($i = 0, $i_max = count($q_select); $i < $i_max; $i++) {
|
||||||
// query select part, set to the element name
|
// query select part, set to the element name
|
||||||
@@ -2568,13 +2622,48 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
|||||||
}
|
}
|
||||||
$data['content'][] = $_data;
|
$data['content'][] = $_data;
|
||||||
$data['pos'][] = [0 => $pos]; // this is for the checkboxes
|
$data['pos'][] = [0 => $pos]; // this is for the checkboxes
|
||||||
|
$written_pos[] = $pos;
|
||||||
$pos++; // move up one
|
$pos++; // move up one
|
||||||
// reset and unset before next run
|
// reset and unset before next run
|
||||||
unset($_data);
|
unset($_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// add lost error ones
|
||||||
|
$this->log->debug('ERROR', 'P: ' . $data['prefix'] . ', '
|
||||||
|
. $this->log->prAr($_POST['ERROR'][$data['prefix']] ?? []));
|
||||||
|
if ($this->error && !empty($_POST['ERROR'][$data['prefix']])) {
|
||||||
|
$prfx = $data['prefix']; // short
|
||||||
|
$_post_data = [];
|
||||||
|
// MAX entries defined via $data['pk_name'] entry (must exist)
|
||||||
|
$_max_pos = count($_POST[$data['pk_name']] ?? []);
|
||||||
|
// write all excte previous loaded @ $pos
|
||||||
|
foreach ($q_select as $_el_name) {
|
||||||
|
for ($_pos = 0; $_pos <= $_max_pos; $_pos++) {
|
||||||
|
// if not in data pos
|
||||||
|
if (!in_array($_pos, $written_pos)) {
|
||||||
|
$_post_data[$_pos][$prfx . $_el_name] =
|
||||||
|
$_POST[$prfx . $_el_name][$_pos] ?? '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// only add if all fields in data are filled, else skip
|
||||||
|
// pk_name field is excluded of check
|
||||||
|
foreach ($_post_data as $_pos => $_data) {
|
||||||
|
$filled = false;
|
||||||
|
foreach ($_data as $_name => $_value) {
|
||||||
|
if ($_name != $data['pk_name'] && !empty($_value)) {
|
||||||
|
$filled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($filled == true) {
|
||||||
|
$data['content'][] = $_data;
|
||||||
|
$data['pos'][] = [0 => $_pos];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// if this is normal single reference data check the content on the element count
|
// if this is normal single reference data check the content on the element count
|
||||||
// if there is a max_empty is set, then fill up new elements (unfilled) until we reach max empty
|
// if there is a max_empty is set, then fill up new elements (unfilled)
|
||||||
|
// until we reach max empty
|
||||||
if (
|
if (
|
||||||
/*isset($this->element_list[$table_name]['type']) &&
|
/*isset($this->element_list[$table_name]['type']) &&
|
||||||
$this->element_list[$table_name]['type'] == 'reference_data' &&*/
|
$this->element_list[$table_name]['type'] == 'reference_data' &&*/
|
||||||
|
|||||||
140
www/lib/CoreLibs/Output/Form/TableArrays/EditAccess.php
Normal file
140
www/lib/CoreLibs/Output/Form/TableArrays/EditAccess.php
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form\TableArrays;
|
||||||
|
|
||||||
|
class EditAccess implements \CoreLibs\Output\Form\TableArraysInterface
|
||||||
|
{
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate */
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @param \CoreLibs\Output\Form\Generate $form base form class
|
||||||
|
*/
|
||||||
|
public function __construct(\CoreLibs\Output\Form\Generate $form)
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
$this->form->log->debug('CLASS LOAD', __NAMESPACE__ . __CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the table array
|
||||||
|
*
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table_array' => [
|
||||||
|
'edit_access_id' => [
|
||||||
|
'value' => $_POST['edit_access_id'] ?? '',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk' => 1
|
||||||
|
],
|
||||||
|
'name' => [
|
||||||
|
'value' => $_POST['name'] ?? '',
|
||||||
|
'output_name' => 'Access Group Name',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'alphanumericspace|unique'
|
||||||
|
],
|
||||||
|
'description' => [
|
||||||
|
'value' => $_POST['description'] ?? '',
|
||||||
|
'output_name' => 'Description',
|
||||||
|
'type' => 'textarea'
|
||||||
|
],
|
||||||
|
'color' => [
|
||||||
|
'value' => $_POST['color'] ?? '',
|
||||||
|
'output_name' => 'Color',
|
||||||
|
'mandatory' => 0,
|
||||||
|
'type' => 'text',
|
||||||
|
'size' => 10,
|
||||||
|
'length' => 9,
|
||||||
|
'error_check' => 'custom',
|
||||||
|
// FIXME: update regex check for hex/rgb/hsl with color check class
|
||||||
|
'error_regex' => '/^#([\dA-Fa-f]{6}|[\dA-Fa-f]{8})$/',
|
||||||
|
'error_example' => '#F6A544'
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'value' => $_POST['enabled'] ?? 0,
|
||||||
|
'output_name' => 'Enabled',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1, // OR 'bool' => 1
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'protected' => [
|
||||||
|
'value' => $_POST['protected'] ?? 0,
|
||||||
|
'output_name' => 'Protected',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'additional_acl' => [
|
||||||
|
'value' => $_POST['additional_acl'] ?? '',
|
||||||
|
'output_name' => 'Additional ACL (as JSON)',
|
||||||
|
'type' => 'textarea',
|
||||||
|
'error_check' => 'json',
|
||||||
|
'rows' => 10,
|
||||||
|
'cols' => 60
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'table_name' => 'edit_access',
|
||||||
|
"load_query" => "SELECT edit_access_id, name FROM edit_access ORDER BY name",
|
||||||
|
'show_fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'name'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'element_list' => [
|
||||||
|
'edit_access_data' => [
|
||||||
|
'output_name' => 'Edit Access Data',
|
||||||
|
'delete_name' => 'remove_edit_access_data',
|
||||||
|
// is not a sub table read and connect, but only a sub table with data
|
||||||
|
// 'type' => 'reference_data',
|
||||||
|
// maxium visible if no data is set, if filled add this number to visible
|
||||||
|
'max_empty' => 5,
|
||||||
|
'prefix' => 'ead',
|
||||||
|
'elements' => [
|
||||||
|
'name' => [
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'alphanumeric|unique',
|
||||||
|
'output_name' => 'Name',
|
||||||
|
'mandatory' => 1
|
||||||
|
],
|
||||||
|
'value' => [
|
||||||
|
'type' => 'text',
|
||||||
|
'output_name' => 'Value'
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'output_name' => 'Activate',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [1]
|
||||||
|
],
|
||||||
|
/*'edit_access_id' => [
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'hidden',
|
||||||
|
// reference main key from master table above
|
||||||
|
'fk_id' => 1
|
||||||
|
],*/
|
||||||
|
'edit_access_data_id' => [
|
||||||
|
'type' => 'hidden',
|
||||||
|
'int' => 1,
|
||||||
|
'pk_id' => 1
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
137
www/lib/CoreLibs/Output/Form/TableArrays/EditGroups.php
Normal file
137
www/lib/CoreLibs/Output/Form/TableArrays/EditGroups.php
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form\TableArrays;
|
||||||
|
|
||||||
|
class EditGroups implements \CoreLibs\Output\Form\TableArraysInterface
|
||||||
|
{
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate */
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @param \CoreLibs\Output\Form\Generate $form base form class
|
||||||
|
*/
|
||||||
|
public function __construct(\CoreLibs\Output\Form\Generate $form)
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
$this->form->log->debug('CLASS LOAD', __NAMESPACE__ . __CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the table array
|
||||||
|
*
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table_array' => [
|
||||||
|
'edit_group_id' => [
|
||||||
|
'value' => $_POST['edit_group_id'] ?? '',
|
||||||
|
'pk' => 1,
|
||||||
|
'type' => 'hidden'
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'value' => $_POST['enabled'] ?? '',
|
||||||
|
'output_name' => 'Enabled',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'binary',
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'name' => [
|
||||||
|
'value' => $_POST['name'] ?? '',
|
||||||
|
'output_name' => 'Group Name',
|
||||||
|
'type' => 'text',
|
||||||
|
'mandatory' => 1
|
||||||
|
],
|
||||||
|
'edit_access_right_id' => [
|
||||||
|
'value' => $_POST['edit_access_right_id'] ?? '',
|
||||||
|
'output_name' => 'Group Level',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||||
|
],
|
||||||
|
'edit_scheme_id' => [
|
||||||
|
'value' => $_POST['edit_scheme_id'] ?? '',
|
||||||
|
'output_name' => 'Group Scheme',
|
||||||
|
'int_null' => 1,
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'query' => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
|
||||||
|
],
|
||||||
|
'additional_acl' => [
|
||||||
|
'value' => $_POST['additional_acl'] ?? '',
|
||||||
|
'output_name' => 'Additional ACL (as JSON)',
|
||||||
|
'type' => 'textarea',
|
||||||
|
'error_check' => 'json',
|
||||||
|
'rows' => 10,
|
||||||
|
'cols' => 60
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'load_query' => "SELECT edit_group_id, name, enabled FROM edit_group ORDER BY name",
|
||||||
|
'table_name' => 'edit_group',
|
||||||
|
'show_fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'name'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'enabled',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'Enabled: '
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'element_list' => [
|
||||||
|
'edit_page_access' => [
|
||||||
|
'output_name' => 'Pages',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'delete' => 0, // set then reference entries are deleted, else the 'enable' flag is only set
|
||||||
|
'enable_name' => 'enable_page_access',
|
||||||
|
'prefix' => 'epa',
|
||||||
|
'read_data' => [
|
||||||
|
'table_name' => 'edit_page',
|
||||||
|
'pk_id' => 'edit_page_id',
|
||||||
|
'name' => 'name',
|
||||||
|
'order' => 'order_number'
|
||||||
|
],
|
||||||
|
'elements' => [
|
||||||
|
'edit_page_access_id' => [
|
||||||
|
'type' => 'hidden',
|
||||||
|
'int' => 1,
|
||||||
|
'pk_id' => 1
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'output_name' => 'Activate',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [1],
|
||||||
|
],
|
||||||
|
'edit_access_right_id' => [
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'output_name' => 'Access Level',
|
||||||
|
'int' => 1,
|
||||||
|
'preset' => 1, // first of the select
|
||||||
|
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||||
|
],
|
||||||
|
'edit_page_id' => [
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'hidden'
|
||||||
|
],
|
||||||
|
/*,
|
||||||
|
'edit_default' => [
|
||||||
|
'output_name' => 'Default',
|
||||||
|
'type' => 'radio',
|
||||||
|
'mandatory' => 1
|
||||||
|
],*/
|
||||||
|
],
|
||||||
|
], // edit pages ggroup
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
105
www/lib/CoreLibs/Output/Form/TableArrays/EditLanguages.php
Normal file
105
www/lib/CoreLibs/Output/Form/TableArrays/EditLanguages.php
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form\TableArrays;
|
||||||
|
|
||||||
|
class EditLanguages implements \CoreLibs\Output\Form\TableArraysInterface
|
||||||
|
{
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate */
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @param \CoreLibs\Output\Form\Generate $form base form class
|
||||||
|
*/
|
||||||
|
public function __construct(\CoreLibs\Output\Form\Generate $form)
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
$this->form->log->debug('CLASS LOAD', __NAMESPACE__ . __CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the table array
|
||||||
|
*
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table_array' => [
|
||||||
|
'edit_language_id' => [
|
||||||
|
'value' => $_POST['edit_language_id'] ?? '',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk' => 1
|
||||||
|
],
|
||||||
|
'short_name' => [
|
||||||
|
'value' => $_POST['short_name'] ?? '',
|
||||||
|
'output_name' => 'Language (short)',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text',
|
||||||
|
'size' => 2,
|
||||||
|
'length' => 2
|
||||||
|
],
|
||||||
|
'long_name' => [
|
||||||
|
'value' => $_POST['long_name'] ?? '',
|
||||||
|
'output_name' => 'Language (long)',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text',
|
||||||
|
'size' => 40
|
||||||
|
],
|
||||||
|
'iso_name' => [
|
||||||
|
'value' => $_POST['iso_name'] ?? '',
|
||||||
|
'output_name' => 'ISO Code',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text'
|
||||||
|
],
|
||||||
|
'order_number' => [
|
||||||
|
'value' => $_POST['order_number'] ?? '',
|
||||||
|
'int' => 1,
|
||||||
|
'order' => 1
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'value' => $_POST['enabled'] ?? '',
|
||||||
|
'output_name' => 'Enabled',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'binary',
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'lang_default' => [
|
||||||
|
'value' => $_POST['lang_default'] ?? '',
|
||||||
|
'output_name' => 'Default Language',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'binary',
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'load_query' => "SELECT edit_language_id, long_name, iso_name, enabled "
|
||||||
|
. "FROM edit_language "
|
||||||
|
. "ORDER BY long_name",
|
||||||
|
'show_fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'long_name'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'iso_name',
|
||||||
|
'before_value' => 'ISO: '
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'enabled',
|
||||||
|
'before_value' => 'Enabled: ',
|
||||||
|
'binary' => ['Yes','No'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'table_name' => 'edit_language'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
68
www/lib/CoreLibs/Output/Form/TableArrays/EditMenuGroup.php
Normal file
68
www/lib/CoreLibs/Output/Form/TableArrays/EditMenuGroup.php
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form\TableArrays;
|
||||||
|
|
||||||
|
class EditMenuGroup implements \CoreLibs\Output\Form\TableArraysInterface
|
||||||
|
{
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate */
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @param \CoreLibs\Output\Form\Generate $form base form class
|
||||||
|
*/
|
||||||
|
public function __construct(\CoreLibs\Output\Form\Generate $form)
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
$this->form->log->debug('CLASS LOAD', __NAMESPACE__ . __CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the table array
|
||||||
|
*
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table_array' => [
|
||||||
|
'edit_menu_group_id' => [
|
||||||
|
'value' => $_POST['edit_menu_group_id'] ?? '',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk' => 1
|
||||||
|
],
|
||||||
|
'name' => [
|
||||||
|
'value' => $_POST['name'] ?? '',
|
||||||
|
'output_name' => 'Group name',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text'
|
||||||
|
],
|
||||||
|
'flag' => [
|
||||||
|
'value' => $_POST['flag'] ?? '',
|
||||||
|
'output_name' => 'Flag',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'alphanumeric|unique'
|
||||||
|
],
|
||||||
|
'order_number' => [
|
||||||
|
'value' => $_POST['order_number'] ?? '',
|
||||||
|
'output_name' => 'Group order',
|
||||||
|
'type' => 'order',
|
||||||
|
'int' => 1,
|
||||||
|
'order' => 1
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'table_name' => 'edit_menu_group',
|
||||||
|
'load_query' => "SELECT edit_menu_group_id, name FROM edit_menu_group ORDER BY name",
|
||||||
|
'show_fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'name'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
275
www/lib/CoreLibs/Output/Form/TableArrays/EditPages.php
Normal file
275
www/lib/CoreLibs/Output/Form/TableArrays/EditPages.php
Normal file
@@ -0,0 +1,275 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form\TableArrays;
|
||||||
|
|
||||||
|
class EditPages implements \CoreLibs\Output\Form\TableArraysInterface
|
||||||
|
{
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate */
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @param \CoreLibs\Output\Form\Generate $form base form class
|
||||||
|
*/
|
||||||
|
public function __construct(\CoreLibs\Output\Form\Generate $form)
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
$this->form->log->debug('CLASS LOAD', __NAMESPACE__ . __CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the table array
|
||||||
|
*
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table_array' => [
|
||||||
|
'edit_page_id' => [
|
||||||
|
'value' => $_POST['edit_page_id'] ?? '',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk' => 1
|
||||||
|
],
|
||||||
|
'filename' => [
|
||||||
|
'value' => $_POST['filename'] ?? '',
|
||||||
|
'output_name' => 'Add File ...',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'query' => "SELECT DISTINCT temp_files.filename AS id, "
|
||||||
|
. "temp_files.folder || temp_files.filename AS name "
|
||||||
|
. "FROM temp_files "
|
||||||
|
. "LEFT JOIN edit_page ep ON temp_files.filename = ep.filename "
|
||||||
|
. "WHERE ep.filename IS NULL"
|
||||||
|
],
|
||||||
|
'hostname' => [
|
||||||
|
'value' => $_POST['hostname'] ?? '',
|
||||||
|
'output_name' => 'Hostname or folder',
|
||||||
|
'type' => 'text'
|
||||||
|
],
|
||||||
|
'name' => [
|
||||||
|
'value' => $_POST['name'] ?? '',
|
||||||
|
'output_name' => 'Page name',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text'
|
||||||
|
],
|
||||||
|
'order_number' => [
|
||||||
|
'value' => $_POST['order_number'] ?? '',
|
||||||
|
'output_name' => 'Page order',
|
||||||
|
'type' => 'order',
|
||||||
|
'int' => 1,
|
||||||
|
'order' => 1
|
||||||
|
],
|
||||||
|
/* 'flag' => [
|
||||||
|
'value' => $_POST['flag']) ?? '',
|
||||||
|
'output_name' => 'Page Flag',
|
||||||
|
'type' => 'drop_down_array',
|
||||||
|
'query' => [
|
||||||
|
'0' => '0',
|
||||||
|
'1' => '1',
|
||||||
|
'2' => '2',
|
||||||
|
'3' => '3',
|
||||||
|
'4' => '4',
|
||||||
|
'5' => '5'
|
||||||
|
],
|
||||||
|
],*/
|
||||||
|
'online' => [
|
||||||
|
'value' => $_POST['online'] ?? '',
|
||||||
|
'output_name' => 'Online',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'binary',
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'menu' => [
|
||||||
|
'value' => $_POST['menu'] ?? '',
|
||||||
|
'output_name' => 'Menu',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'binary',
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'popup' => [
|
||||||
|
'value' => $_POST['popup'] ?? '',
|
||||||
|
'output_name' => 'Popup',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'binary',
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'popup_x' => [
|
||||||
|
'value' => $_POST['popup_x'] ?? '',
|
||||||
|
'output_name' => 'Popup Width',
|
||||||
|
'int_null' => 1,
|
||||||
|
'type' => 'text',
|
||||||
|
'size' => 4,
|
||||||
|
'length' => 4
|
||||||
|
],
|
||||||
|
'popup_y' => [
|
||||||
|
'value' => $_POST['popup_y'] ?? '',
|
||||||
|
'output_name' => 'Popup Height',
|
||||||
|
'int_null' => 1,
|
||||||
|
'type' => 'text',
|
||||||
|
'size' => 4,
|
||||||
|
'length' => 4
|
||||||
|
],
|
||||||
|
'content_alias_edit_page_id' => [
|
||||||
|
'value' => $_POST['content_alias_edit_page_id'] ?? '',
|
||||||
|
'output_name' => 'Content Alias Source',
|
||||||
|
'int_null' => 1,
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
// query creation
|
||||||
|
'select_distinct' => 0,
|
||||||
|
'pk_name' => 'edit_page_id AS content_alias_edit_page_id',
|
||||||
|
'input_name' => 'name',
|
||||||
|
'table_name' => 'edit_page',
|
||||||
|
'where_not_self' => 1,
|
||||||
|
'order_by' => 'order_number'
|
||||||
|
// 'query' => "SELECT edit_page_id AS content_alias_edit_page_id, name ".
|
||||||
|
// "FROM edit_page ".
|
||||||
|
// (!empty($_POST['edit_page_id']) ? " WHERE edit_page_id <> ".$_POST['edit_page_id'] : "")." ".
|
||||||
|
// "ORDER BY order_number"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'load_query' => "SELECT edit_page_id, "
|
||||||
|
. "CASE WHEN hostname IS NOT NULL THEN hostname ELSE ''::VARCHAR END || filename AS filename, "
|
||||||
|
. "name, online, menu, popup "
|
||||||
|
. "FROM edit_page "
|
||||||
|
. "ORDER BY order_number",
|
||||||
|
'table_name' => 'edit_page',
|
||||||
|
'show_fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'name'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'filename',
|
||||||
|
'before_value' => 'Filename: '
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'online',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'Online: '
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'menu',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'Menu: '
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'popup',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'Popup: '
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'reference_arrays' => [
|
||||||
|
'edit_visible_group' => [
|
||||||
|
'table_name' => 'edit_page_visible_group',
|
||||||
|
'other_table_pk' => 'edit_visible_group_id',
|
||||||
|
'output_name' => 'Visible Groups (access)',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'select_size' => 10,
|
||||||
|
'selected' => $_POST['edit_visible_group_id'] ?? '',
|
||||||
|
'query' => "SELECT edit_visible_group_id, 'Name: ' || name || ', ' || 'Flag: ' || flag "
|
||||||
|
. "FROM edit_visible_group ORDER BY name"
|
||||||
|
],
|
||||||
|
'edit_menu_group' => [
|
||||||
|
'table_name' => 'edit_page_menu_group',
|
||||||
|
'other_table_pk' => 'edit_menu_group_id',
|
||||||
|
'output_name' => 'Menu Groups (grouping)',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'select_size' => 10,
|
||||||
|
'selected' => $_POST['edit_menu_group_id'] ?? '',
|
||||||
|
'query' => "SELECT edit_menu_group_id, 'Name: ' || name || ', ' || 'Flag: ' || flag "
|
||||||
|
. "FROM edit_menu_group ORDER BY order_number"
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'element_list' => [
|
||||||
|
'edit_query_string' => [
|
||||||
|
'output_name' => 'Query Strings',
|
||||||
|
'delete_name' => 'remove_query_string',
|
||||||
|
'prefix' => 'eqs',
|
||||||
|
'elements' => [
|
||||||
|
'name' => [
|
||||||
|
'output_name' => 'Name',
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'unique|alphanumeric',
|
||||||
|
'mandatory' => 1
|
||||||
|
],
|
||||||
|
'value' => [
|
||||||
|
'output_name' => 'Value',
|
||||||
|
'type' => 'text'
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'output_name' => 'Enabled',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'element_list' => [1],
|
||||||
|
],
|
||||||
|
'dynamic' => [
|
||||||
|
'output_name' => 'Dynamic',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'element_list' => [1],
|
||||||
|
],
|
||||||
|
'edit_query_string_id' => [
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk_id' => 1
|
||||||
|
],
|
||||||
|
], // elements
|
||||||
|
], // query_string element list
|
||||||
|
'edit_page_content' => [
|
||||||
|
'output_name' => 'Page Content',
|
||||||
|
'delete_name' => 'remove_page_content',
|
||||||
|
'prefix' => 'epc',
|
||||||
|
'elements' => [
|
||||||
|
'name' => [
|
||||||
|
'output_name' => 'Content',
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'alphanumeric',
|
||||||
|
'mandatory' => 1
|
||||||
|
],
|
||||||
|
'uid' => [
|
||||||
|
'output_name' => 'UID',
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'unique|alphanumeric',
|
||||||
|
'mandatory' => 1
|
||||||
|
],
|
||||||
|
'order_number' => [
|
||||||
|
'output_name' => 'Order',
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'int',
|
||||||
|
'mandatory' => 1
|
||||||
|
],
|
||||||
|
'online' => [
|
||||||
|
'output_name' => 'Online',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'element_list' => [1],
|
||||||
|
],
|
||||||
|
'edit_access_right_id' => [
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'output_name' => 'Access Level',
|
||||||
|
'int' => 1,
|
||||||
|
'preset' => 1, // first of the select
|
||||||
|
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||||
|
],
|
||||||
|
'edit_page_content_id' => [
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk_id' => 1
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
], // element list
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
86
www/lib/CoreLibs/Output/Form/TableArrays/EditSchemas.php
Normal file
86
www/lib/CoreLibs/Output/Form/TableArrays/EditSchemas.php
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form\TableArrays;
|
||||||
|
|
||||||
|
class EditSchemas implements \CoreLibs\Output\Form\TableArraysInterface
|
||||||
|
{
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate */
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @param \CoreLibs\Output\Form\Generate $form base form class
|
||||||
|
*/
|
||||||
|
public function __construct(\CoreLibs\Output\Form\Generate $form)
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
$this->form->log->debug('CLASS LOAD', __NAMESPACE__ . __CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the table array
|
||||||
|
*
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table_array' => [
|
||||||
|
'edit_scheme_id' => [
|
||||||
|
'value' => $_POST['edit_scheme_id'] ?? '',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk' => 1
|
||||||
|
],
|
||||||
|
'name' => [
|
||||||
|
'value' => $_POST['name'] ?? '',
|
||||||
|
'output_name' => 'Scheme Name',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text'
|
||||||
|
],
|
||||||
|
'header_color' => [
|
||||||
|
'value' => $_POST['header_color'] ?? '',
|
||||||
|
'output_name' => 'Header Color',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text',
|
||||||
|
'size' => 10,
|
||||||
|
'length' => 9,
|
||||||
|
'error_check' => 'custom',
|
||||||
|
// FIXME: update regex check for hex/rgb/hsl with color check class
|
||||||
|
'error_regex' => '/^#([\dA-Fa-f]{6}|[\dA-Fa-f]{8})$/',
|
||||||
|
'error_example' => '#F6A544'
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'value' => $_POST['enabled'] ?? '',
|
||||||
|
'output_name' => 'Enabled',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'binary',
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'template' => [
|
||||||
|
'value' => $_POST['template'] ?? '',
|
||||||
|
'output_name' => 'Template',
|
||||||
|
'type' => 'text'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'table_name' => 'edit_scheme',
|
||||||
|
'load_query' => "SELECT edit_scheme_id, name, enabled FROM edit_scheme ORDER BY name",
|
||||||
|
'show_fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'name'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'enabled',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'Enabled: '
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
456
www/lib/CoreLibs/Output/Form/TableArrays/EditUsers.php
Normal file
456
www/lib/CoreLibs/Output/Form/TableArrays/EditUsers.php
Normal file
@@ -0,0 +1,456 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form\TableArrays;
|
||||||
|
|
||||||
|
class EditUsers implements \CoreLibs\Output\Form\TableArraysInterface
|
||||||
|
{
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate */
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @param \CoreLibs\Output\Form\Generate $form base form class
|
||||||
|
*/
|
||||||
|
public function __construct(\CoreLibs\Output\Form\Generate $form)
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
$this->form->log->debug('CLASS LOAD', __NAMESPACE__ . __CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the table array
|
||||||
|
*
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table_array' => [
|
||||||
|
'edit_user_id' => [
|
||||||
|
'value' => $_POST['edit_user_id'] ?? '',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk' => 1,
|
||||||
|
'int' => 1
|
||||||
|
],
|
||||||
|
'username' => [
|
||||||
|
'value' => $_POST['username'] ?? '',
|
||||||
|
'output_name' => 'Username',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'error_check' => 'unique|alphanumericextended',
|
||||||
|
'type' => 'text',
|
||||||
|
// if not min_edit_acl only read
|
||||||
|
// if not min_show_acl not visible
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '-1',
|
||||||
|
],
|
||||||
|
'password' => [
|
||||||
|
'value' => $_POST['password'] ?? '',
|
||||||
|
'HIDDEN_value' => $_POST['HIDDEN_password'] ?? '',
|
||||||
|
'CONFIRM_value' => $_POST['CONFIRM_password'] ?? '',
|
||||||
|
'output_name' => 'Password',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'password', // later has to be password for encryption in database
|
||||||
|
'update' => [ // connected field updates, and update data
|
||||||
|
'password_change_date' => [ // db row to update
|
||||||
|
'type' => 'date', // type of field (int/text/date/etc)
|
||||||
|
'value' => 'NOW()' // value [todo: complex reference
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
// password date when first insert and password is set, needs special field with connection to password
|
||||||
|
// password reset force interval, if set, user needs to reset password after X time period
|
||||||
|
'password_change_interval' => [
|
||||||
|
'value' => $_POST['password_change_interval'] ?? '',
|
||||||
|
'output_name' => 'Password change interval',
|
||||||
|
// can be any date length format. n Y/M/D [not H/M/S], only one set, no combination
|
||||||
|
'error_check' => 'intervalshort',
|
||||||
|
'type' => 'text',
|
||||||
|
'interval' => 1, // interval needs NULL write for empty
|
||||||
|
'size' => 5, // make it 5 chars long
|
||||||
|
'length' => 5,
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'value' => $_POST['enabled'] ?? '',
|
||||||
|
'output_name' => 'Enabled',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '-1',
|
||||||
|
],
|
||||||
|
'deleted' => [
|
||||||
|
'value' => $_POST['deleted'] ?? '',
|
||||||
|
'output_name' => 'Deleted',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'strict' => [
|
||||||
|
'value' => $_POST['strict'] ?? '',
|
||||||
|
'output_name' => 'Strict (Lock after errors)',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'locked' => [
|
||||||
|
'value' => $_POST['locked'] ?? '',
|
||||||
|
'output_name' => 'Locked (auto set if strict with errors)',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'admin' => [
|
||||||
|
'value' => $_POST['admin'] ?? '',
|
||||||
|
'output_name' => 'Admin',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'debug' => [
|
||||||
|
'value' => $_POST['debug'] ?? '',
|
||||||
|
'output_name' => 'Debug',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'db_debug' => [
|
||||||
|
'value' => $_POST['db_debug'] ?? '',
|
||||||
|
'output_name' => 'DB Debug',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'email' => [
|
||||||
|
'value' => $_POST['email'] ?? '',
|
||||||
|
'output_name' => 'E-Mail',
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'email',
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'last_name' => [
|
||||||
|
'value' => $_POST['last_name'] ?? '',
|
||||||
|
'output_name' => 'Last Name',
|
||||||
|
'type' => 'text',
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'first_name' => [
|
||||||
|
'value' => $_POST['first_name'] ?? '',
|
||||||
|
'output_name' => 'First Name',
|
||||||
|
'type' => 'text',
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'lock_until' => [
|
||||||
|
'value' => $_POST['lock_until'] ?? '',
|
||||||
|
'output_name' => 'Lock account until',
|
||||||
|
'type' => 'datetime',
|
||||||
|
'error_check' => 'datetime',
|
||||||
|
'sql_read' => 'YYYY-MM-DD HH24:MI',
|
||||||
|
'datetime' => 1,
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'lock_after' => [
|
||||||
|
'value' => $_POST['lock_after'] ?? '',
|
||||||
|
'output_name' => 'Lock account after',
|
||||||
|
'type' => 'datetime',
|
||||||
|
'error_check' => 'datetime',
|
||||||
|
'sql_read' => 'YYYY-MM-DD HH24:MI',
|
||||||
|
'datetime' => 1,'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_user_id' => [
|
||||||
|
'value' => $_POST['login_user_id'] ?? '',
|
||||||
|
'output_name' => '_GET/_POST loginUserId direct login ID',
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'unique|custom',
|
||||||
|
'error_regex' => "/^[A-Za-z0-9]+$/",
|
||||||
|
'emptynull' => 1,'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_user_id_set_date' => [
|
||||||
|
'output_name' => 'loginUserId set date',
|
||||||
|
'value' => $_POST['login_user_id_set_date'] ?? '',
|
||||||
|
'type' => 'view',
|
||||||
|
'empty' => '-',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_user_id_last_revalidate' => [
|
||||||
|
'output_name' => 'loginUserId last revalidate date',
|
||||||
|
'value' => $_POST['login_user_id_last_revalidate'] ?? '',
|
||||||
|
'type' => 'view',
|
||||||
|
'empty' => '-',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_user_id_locked' => [
|
||||||
|
'value' => $_POST['login_user_id_locked'] ?? '',
|
||||||
|
'output_name' => 'loginUserId usage locked',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_user_id_revalidate_after' => [
|
||||||
|
'value' => $_POST['login_user_id_revalidate_after'] ?? '',
|
||||||
|
'output_name' => 'loginUserId, User must login after n days',
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'intervalshort',
|
||||||
|
'interval' => 1, // interval needs NULL write for empty
|
||||||
|
'size' => 5, // make it 5 chars long
|
||||||
|
'length' => 5,
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_user_id_valid_from' => [
|
||||||
|
'value' => $_POST['login_user_id_valid_from'] ?? '',
|
||||||
|
'output_name' => 'loginUserId valid from',
|
||||||
|
'type' => 'datetime',
|
||||||
|
'error_check' => 'datetime',
|
||||||
|
'sql_read' => 'YYYY-MM-DD HH24:MI',
|
||||||
|
'datetime' => 1,
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_user_id_valid_until' => [
|
||||||
|
'value' => $_POST['login_user_id_valid_until'] ?? '',
|
||||||
|
'output_name' => 'loginUserId valid until',
|
||||||
|
'type' => 'datetime',
|
||||||
|
'error_check' => 'datetime',
|
||||||
|
'sql_read' => 'YYYY-MM-DD HH24:MI',
|
||||||
|
'datetime' => 1,
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'edit_language_id' => [
|
||||||
|
'value' => $_POST['edit_language_id'] ?? '',
|
||||||
|
'output_name' => 'Language',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'query' => "SELECT edit_language_id, long_name "
|
||||||
|
. "FROM edit_language "
|
||||||
|
. "WHERE enabled = 1"
|
||||||
|
. "ORDER BY order_number",
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'edit_scheme_id' => [
|
||||||
|
'value' => $_POST['edit_scheme_id'] ?? '',
|
||||||
|
'output_name' => 'Scheme',
|
||||||
|
'int_null' => 1,
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'query' => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name",
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'edit_group_id' => [
|
||||||
|
'value' => $_POST['edit_group_id'] ?? '',
|
||||||
|
'output_name' => 'Group',
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'query' => "SELECT edit_group_id, name FROM edit_group WHERE enabled = 1 ORDER BY name",
|
||||||
|
'mandatory' => 1,
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'edit_access_right_id' => [
|
||||||
|
'value' => $_POST['edit_access_right_id'] ?? '',
|
||||||
|
'output_name' => 'User Level',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'int' => 1,
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level",
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_error_count' => [
|
||||||
|
'output_name' => 'Login error count',
|
||||||
|
'value' => $_POST['login_error_count'] ?? '',
|
||||||
|
'type' => 'view',
|
||||||
|
'empty' => '0',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_error_date_last' => [
|
||||||
|
'output_name' => 'Last login error',
|
||||||
|
'value' => $_POST['login_error_date_liast'] ?? '',
|
||||||
|
'type' => 'view',
|
||||||
|
'empty' => '-',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'login_error_date_first' => [
|
||||||
|
'output_name' => 'First login error',
|
||||||
|
'value' => $_POST['login_error_date_first'] ?? '',
|
||||||
|
'type' => 'view',
|
||||||
|
'empty' => '-',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'protected' => [
|
||||||
|
'value' => $_POST['protected'] ?? '',
|
||||||
|
'output_name' => 'Protected',
|
||||||
|
'type' => 'binary',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [
|
||||||
|
'1' => 'Yes',
|
||||||
|
'0' => 'No'
|
||||||
|
],
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
'additional_acl' => [
|
||||||
|
'value' => $_POST['additional_acl'] ?? '',
|
||||||
|
'output_name' => 'Additional ACL (as JSON)',
|
||||||
|
'type' => 'textarea',
|
||||||
|
'error_check' => 'json',
|
||||||
|
'rows' => 10,
|
||||||
|
'cols' => 60,
|
||||||
|
'min_edit_acl' => '100',
|
||||||
|
'min_show_acl' => '100',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'load_query' => "SELECT edit_user_id, username, enabled, deleted, "
|
||||||
|
. "strict, locked, login_error_count "
|
||||||
|
. "FROM edit_user "
|
||||||
|
// if base acl is not 90 only list enabled
|
||||||
|
// if not admin flag, do not list admin flagged
|
||||||
|
. (
|
||||||
|
!$this->form->getAclAdmin() ?
|
||||||
|
"WHERE admin = 0 "
|
||||||
|
. (
|
||||||
|
!$this->form->checkBaseACL(90) ?
|
||||||
|
// $_POST['base_acl_level'] < 90 ?
|
||||||
|
"AND enabled = 1 " :
|
||||||
|
""
|
||||||
|
)
|
||||||
|
: ''
|
||||||
|
)
|
||||||
|
. "ORDER BY username",
|
||||||
|
'table_name' => 'edit_user',
|
||||||
|
'show_fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'username'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'enabled',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'ENBL: '
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'deleted',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'DEL: '
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'strict',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'STRC: '
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'locked',
|
||||||
|
'binary' => ['Yes', 'No'],
|
||||||
|
'before_value' => 'LCK: '
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'name' => 'login_error_count',
|
||||||
|
'before_value' => 'ERR: '
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'element_list' => [
|
||||||
|
'edit_access_user' => [
|
||||||
|
'output_name' => 'Accounts',
|
||||||
|
'mandatory' => 1,
|
||||||
|
// set then reference entries are deleted, else the 'enable' flag is only set
|
||||||
|
'delete' => 0,
|
||||||
|
// acl
|
||||||
|
'min_edit_acl' => '40',
|
||||||
|
'min_show_acl' => '20',
|
||||||
|
// table read prefix
|
||||||
|
'prefix' => 'ecu',
|
||||||
|
'read_data' => [
|
||||||
|
'table_name' => 'edit_access',
|
||||||
|
'pk_id' => 'edit_access_id',
|
||||||
|
'name' => 'name',
|
||||||
|
'order' => 'name'
|
||||||
|
],
|
||||||
|
'elements' => [
|
||||||
|
'edit_access_user_id' => [
|
||||||
|
'output_name' => 'Activate',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'int' => 1,
|
||||||
|
'pk_id' => 1
|
||||||
|
],
|
||||||
|
'enabled' => [
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'output_name' => 'Activate',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => [1],
|
||||||
|
],
|
||||||
|
'edit_access_right_id' => [
|
||||||
|
'type' => 'drop_down_db',
|
||||||
|
'output_name' => 'Access Level',
|
||||||
|
'preset' => 1, // first of the select
|
||||||
|
'int' => 1,
|
||||||
|
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||||
|
],
|
||||||
|
'edit_default' => [
|
||||||
|
'type' => 'radio_group',
|
||||||
|
'output_name' => 'Default',
|
||||||
|
'int' => 1,
|
||||||
|
'element_list' => 'radio_group'
|
||||||
|
],
|
||||||
|
'edit_access_id' => [
|
||||||
|
'type' => 'hidden',
|
||||||
|
'int' => 1
|
||||||
|
],
|
||||||
|
],
|
||||||
|
], // edit pages ggroup
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form\TableArrays;
|
||||||
|
|
||||||
|
class EditVisibleGroup implements \CoreLibs\Output\Form\TableArraysInterface
|
||||||
|
{
|
||||||
|
/** @var \CoreLibs\Output\Form\Generate */
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @param \CoreLibs\Output\Form\Generate $form base form class
|
||||||
|
*/
|
||||||
|
public function __construct(\CoreLibs\Output\Form\Generate $form)
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
$this->form->log->debug('CLASS LOAD', __NAMESPACE__ . __CLASS__);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the table array
|
||||||
|
*
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'table_array' => [
|
||||||
|
'edit_visible_group_id' => [
|
||||||
|
'value' => $_POST['edit_visible_group_id'] ?? '',
|
||||||
|
'type' => 'hidden',
|
||||||
|
'pk' => 1
|
||||||
|
],
|
||||||
|
'name' => [
|
||||||
|
'value' => $_POST['name'] ?? '',
|
||||||
|
'output_name' => 'Group name',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text'
|
||||||
|
],
|
||||||
|
'flag' => [
|
||||||
|
'value' => $_POST['flag'] ?? '',
|
||||||
|
'output_name' => 'Flag',
|
||||||
|
'mandatory' => 1,
|
||||||
|
'type' => 'text',
|
||||||
|
'error_check' => 'alphanumeric|unique'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'table_name' => 'edit_visible_group',
|
||||||
|
'load_query' => "SELECT edit_visible_group_id, name FROM edit_visible_group ORDER BY name",
|
||||||
|
'show_fields' => [
|
||||||
|
[
|
||||||
|
'name' => 'name'
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
16
www/lib/CoreLibs/Output/TableArraysInterface.php
Normal file
16
www/lib/CoreLibs/Output/TableArraysInterface.php
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace CoreLibs\Output\Form;
|
||||||
|
|
||||||
|
interface TableArraysInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* setTableArray interface, set the table array
|
||||||
|
* @return array<mixed>
|
||||||
|
*/
|
||||||
|
public function setTableArray(): array;
|
||||||
|
}
|
||||||
|
|
||||||
|
// __END__
|
||||||
@@ -465,7 +465,7 @@ class SmartyExtend extends \Smarty
|
|||||||
$this->HEADER['JAVASCRIPT'] = $this->ADMIN_JAVASCRIPT ? $this->ADMIN_JAVASCRIPT : ADMIN_JAVASCRIPT;
|
$this->HEADER['JAVASCRIPT'] = $this->ADMIN_JAVASCRIPT ? $this->ADMIN_JAVASCRIPT : ADMIN_JAVASCRIPT;
|
||||||
// the page name
|
// the page name
|
||||||
$this->DATA['page_name'] = $this->page_name;
|
$this->DATA['page_name'] = $this->page_name;
|
||||||
$this->DATA['table_width'] = empty($this->PAGE_WIDTH) ?: PAGE_WIDTH;
|
$this->DATA['table_width'] = !empty($this->PAGE_WIDTH) ?: PAGE_WIDTH;
|
||||||
$this->DATA['form_name'] = $this->DATA['FORM_NAME'];
|
$this->DATA['form_name'] = $this->DATA['FORM_NAME'];
|
||||||
// for tinymce special
|
// for tinymce special
|
||||||
$this->DATA['TINYMCE_LANG'] = $this->lang_short;
|
$this->DATA['TINYMCE_LANG'] = $this->lang_short;
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
smarty-4.1.0/libs/
|
smarty-4.3.0/libs/
|
||||||
77
www/lib/smarty-4.1.0/.github/workflows/ci.yml
vendored
77
www/lib/smarty-4.1.0/.github/workflows/ci.yml
vendored
@@ -1,77 +0,0 @@
|
|||||||
# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
|
|
||||||
|
|
||||||
on:
|
|
||||||
- pull_request
|
|
||||||
- push
|
|
||||||
|
|
||||||
name: CI
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tests:
|
|
||||||
name: Tests
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
env:
|
|
||||||
PHP_EXTENSIONS: dom, json, libxml, mbstring, pdo_sqlite, soap, xml, xmlwriter
|
|
||||||
PHP_INI_VALUES: assert.exception=1, zend.assertions=1
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os:
|
|
||||||
- ubuntu-latest
|
|
||||||
|
|
||||||
php-version:
|
|
||||||
- "7.1"
|
|
||||||
- "7.2"
|
|
||||||
- "7.3"
|
|
||||||
- "7.4"
|
|
||||||
- "8.0"
|
|
||||||
- "8.1"
|
|
||||||
|
|
||||||
compiler:
|
|
||||||
- default
|
|
||||||
|
|
||||||
include:
|
|
||||||
- os: ubuntu-latest
|
|
||||||
php-version: "8.0"
|
|
||||||
compiler: jit
|
|
||||||
- os: ubuntu-latest
|
|
||||||
php-version: "8.1"
|
|
||||||
compiler: jit
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Override PHP ini values for JIT compiler
|
|
||||||
if: matrix.compiler == 'jit'
|
|
||||||
run: echo "PHP_INI_VALUES::assert.exception=1, zend.assertions=1, opcache.enable=1, opcache.enable_cli=1, opcache.optimization_level=-1, opcache.jit=1255, opcache.jit_buffer_size=32M" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Install PHP with extensions
|
|
||||||
uses: shivammathur/setup-php@v2
|
|
||||||
with:
|
|
||||||
php-version: ${{ matrix.php-version }}
|
|
||||||
coverage: pcov
|
|
||||||
extensions: ${{ env.PHP_EXTENSIONS }}
|
|
||||||
ini-values: ${{ env.PHP_INI_VALUES }}
|
|
||||||
|
|
||||||
- name: Validate composer.json and composer.lock
|
|
||||||
run: composer validate
|
|
||||||
|
|
||||||
- name: Cache Composer packages
|
|
||||||
id: composer-cache
|
|
||||||
uses: actions/cache@v2
|
|
||||||
with:
|
|
||||||
path: vendor
|
|
||||||
key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ hashFiles('**/composer.lock') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-php-${{ matrix.php-version }}-
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
if: steps.composer-cache.outputs.cache-hit != 'true'
|
|
||||||
run: composer install --prefer-dist --no-progress --no-suggest
|
|
||||||
|
|
||||||
- name: Run tests with phpunit
|
|
||||||
run: ./phpunit.sh
|
|
||||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user