Compare commits
63 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9e13ae14c | ||
|
|
50db770992 | ||
|
|
e439945a54 | ||
|
|
8223441ca9 | ||
|
|
0153c9721f | ||
|
|
b6f6eeac9b | ||
|
|
beedf629e5 | ||
|
|
04b47574eb | ||
|
|
ecc52e2dbd | ||
|
|
12e335c69c | ||
|
|
3ae3b1b761 | ||
|
|
3c9ca025f5 | ||
|
|
96afa463e0 | ||
|
|
5195212fae | ||
|
|
e990d6b410 | ||
|
|
b5dd85bc75 | ||
|
|
b2945a8fa0 | ||
|
|
c77562b595 | ||
|
|
2210f62441 | ||
|
|
dfb2a93fbd | ||
|
|
ca073c1b56 | ||
|
|
f316dde8b7 | ||
|
|
13b18c3a62 | ||
|
|
18bf829c6b | ||
|
|
723b6345bb | ||
|
|
e235721c8b | ||
|
|
fd0af5a294 | ||
|
|
fd8caaf5de | ||
|
|
3d842d4107 | ||
|
|
c895beb35f | ||
|
|
b6a35d15cf | ||
|
|
20c44694e8 | ||
|
|
f6424bdd35 | ||
|
|
ea3a8edae6 | ||
|
|
d04cc380b2 | ||
|
|
98bf11e0c9 | ||
|
|
a6918bac6f | ||
|
|
86c5085f92 | ||
|
|
63bcdc0eff | ||
|
|
ef1df6f171 | ||
|
|
8ade113070 | ||
|
|
4508692330 | ||
|
|
98c87a755a | ||
|
|
bf96eb755d | ||
|
|
9ea8364aab | ||
|
|
25941f4b49 | ||
|
|
56612cb13b | ||
|
|
d9ad041c47 | ||
|
|
5558a21824 | ||
|
|
05c48bce60 | ||
|
|
b25f280849 | ||
|
|
745faacb30 | ||
|
|
fd2e0937b5 | ||
|
|
6be1b3008e | ||
|
|
46554e6965 | ||
|
|
c8686024e2 | ||
|
|
605ea06bf0 | ||
|
|
9ec19f5940 | ||
|
|
a27e4603a8 | ||
|
|
54b7af348b | ||
|
|
c5d624a318 | ||
|
|
47ffec1fd4 | ||
|
|
72c6844e74 |
29
.htaccess
Normal file
@@ -0,0 +1,29 @@
|
||||
# PHP XDEBUG SETTINGS
|
||||
# php_value xdebug.profiler_output_dir xdebug/
|
||||
# php_value xdebug.profiler_output_name timestamp
|
||||
# php_value xdebug.profiler_enable 1
|
||||
php_value xdebug.collect_params 2
|
||||
php_value xdebug.collect_vars 0
|
||||
php_value xdebug.show_local_vars 0
|
||||
#php_value xdebug.dump_globals 0
|
||||
# allowed COOKIE, FILES, GET, POST, REQUEST, SERVER, SESSION
|
||||
#php_value xdebug.dump.GET *
|
||||
# PHP ERROR SETTINGS
|
||||
php_flag short_open_tag off
|
||||
php_flag display_startup_errors on
|
||||
php_flag display_errors on
|
||||
php_flag html_errors on
|
||||
php_flag log_errors on
|
||||
php_flag ignore_repeated_errors off
|
||||
php_flag ignore_repeated_source off
|
||||
php_flag report_memleaks on
|
||||
php_flag track_errors on
|
||||
php_value docref_root 0
|
||||
php_value docref_ext 0
|
||||
# Turn this on to redirect log to different folder
|
||||
#php_value error_log /var/www/html/developers/clemens/php/php-error/php-errors.log
|
||||
# this is E_ALL reporting ON
|
||||
php_value error_reporting -1
|
||||
# this is E_ALL | ~E_NOTICE
|
||||
#php_value error_reporting 2039
|
||||
php_value log_errors_max_len 0
|
||||
124
.phan/config.php
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
use Phan\Config;
|
||||
|
||||
/**
|
||||
* This configuration will be read and overlaid on top of the
|
||||
* default configuration. Command line arguments will be applied
|
||||
* after this file is read.
|
||||
*
|
||||
* @see src/Phan/Config.php
|
||||
* See Config for all configurable options.
|
||||
*
|
||||
* A Note About Paths
|
||||
* ==================
|
||||
*
|
||||
* Files referenced from this file should be defined as
|
||||
*
|
||||
* ```
|
||||
* Config::projectPath('relative_path/to/file')
|
||||
* ```
|
||||
*
|
||||
* where the relative path is relative to the root of the
|
||||
* project which is defined as either the working directory
|
||||
* of the phan executable or a path passed in via the CLI
|
||||
* '-d' flag.
|
||||
*/
|
||||
return [
|
||||
// If true, missing properties will be created when
|
||||
// they are first seen. If false, we'll report an
|
||||
// error message.
|
||||
"allow_missing_properties" => false,
|
||||
|
||||
// Allow null to be cast as any type and for any
|
||||
// type to be cast to null.
|
||||
"null_casts_as_any_type" => false,
|
||||
|
||||
// Backwards Compatibility Checking
|
||||
'backward_compatibility_checks' => true,
|
||||
|
||||
// Run a quick version of checks that takes less
|
||||
// time
|
||||
"quick_mode" => false,
|
||||
|
||||
// Only emit critical issues to start with
|
||||
// (0 is low severity, 5 is normal severity, 10 is critical)
|
||||
"minimum_severity" => 0,
|
||||
|
||||
// default false for include path check
|
||||
"enable_include_path_checks" => true,
|
||||
"include_paths" => [
|
||||
'.', '../configs/'
|
||||
],
|
||||
'ignore_undeclared_variables_in_global_scope' => true,
|
||||
|
||||
"file_list" => [
|
||||
"./www/configs/config.db.php",
|
||||
"./www/configs/config.host.php",
|
||||
"./www/configs/config.path.php",
|
||||
"./www/configs/config.master.php",
|
||||
"./www/includes/admin_header.php",
|
||||
],
|
||||
|
||||
// A list of directories that should be parsed for class and
|
||||
// method information. After excluding the directories
|
||||
// defined in exclude_analysis_directory_list, the remaining
|
||||
// files will be statically analyzed for errors.
|
||||
//
|
||||
// Thus, both first-party and third-party code being used by
|
||||
// your application should be included in this list.
|
||||
'directory_list' => [
|
||||
// Change this to include the folders you wish to analyze
|
||||
// (and the folders of their dependencies)
|
||||
'www',
|
||||
// To speed up analysis, we recommend going back later and
|
||||
// limiting this to only the vendor/ subdirectories your
|
||||
// project depends on.
|
||||
// `phan --init` will generate a list of folders for you
|
||||
//'www/vendor',
|
||||
],
|
||||
|
||||
|
||||
// A list of directories holding code that we want
|
||||
// to parse, but not analyze
|
||||
"exclude_analysis_directory_list" => [
|
||||
'www/vendor',
|
||||
'www/lib/FileUpload',
|
||||
'www/lib/pChart',
|
||||
'www/lib/pChart2.1.4',
|
||||
'www/lib/Smarty',
|
||||
'www/lib/smarty-3.1.30',
|
||||
'www/templates_c',
|
||||
'www/log',
|
||||
'www/tmp',
|
||||
'www/cache',
|
||||
'www/media',
|
||||
],
|
||||
'exclude_file_list' => [
|
||||
// ignore all symlink files to edit
|
||||
'www/admin/edit_access.php',
|
||||
'www/admin/edit_groups.php',
|
||||
'www/admin/edit_languages.php',
|
||||
'www/admin/edit_menu_group.php',
|
||||
'www/admin/edit_order.php',
|
||||
'www/admin/edit_pages.php',
|
||||
'www/admin/edit_schemes.php',
|
||||
'www/admin/edit_users.php',
|
||||
'www/admin/edit_visible_group.php',
|
||||
// ignore the old qq tests
|
||||
'www/admin/qq_file_upload_front.php',
|
||||
'www/admin/qq_file_upload_ajax.php',
|
||||
],
|
||||
|
||||
// what not to show as problem
|
||||
'suppress_issue_types' => [
|
||||
// 'PhanUndeclaredMethod',
|
||||
'PhanEmptyFile',
|
||||
],
|
||||
|
||||
// Override to hardcode existence and types of (non-builtin) globals in the global scope.
|
||||
// Class names should be prefixed with `\`.
|
||||
//
|
||||
// (E.g. `['_FOO' => '\FooClass', 'page' => '\PageClass', 'userId' => 'int']`)
|
||||
'globals_type_map' => [],
|
||||
];
|
||||
@@ -16,6 +16,7 @@ table/edit_scheme.sql
|
||||
table/edit_language.sql
|
||||
table/edit_group.sql
|
||||
table/edit_page_access.sql
|
||||
table/edit_page_content.sql
|
||||
table/edit_user.sql
|
||||
table/edit_log.sql
|
||||
table/edit_access.sql
|
||||
@@ -31,6 +32,7 @@ trigger/trg_edit_group.sql
|
||||
trigger/trg_edit_language.sql
|
||||
trigger/trg_edit_log.sql
|
||||
trigger/trg_edit_page_access.sql
|
||||
trigger/trg_edit_page_content.sql
|
||||
trigger/trg_edit_page.sql
|
||||
trigger/trg_edit_query_string.sql
|
||||
trigger/trg_edit_scheme.sql
|
||||
|
||||
@@ -51,6 +51,7 @@ INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHE
|
||||
DELETE FROM edit_access_right;
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Default', -1, 'default');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('No Access', 0, 'none');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('List', 10, 'list');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Read', 20, 'read');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Translator', 30, 'mod_trans');
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('Modify', 40, 'mod');
|
||||
|
||||
@@ -14,5 +14,6 @@ CREATE TABLE edit_access (
|
||||
uid VARCHAR,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
protected INT,
|
||||
deleted SMALLINT DEFAULT 0
|
||||
deleted SMALLINT DEFAULT 0,
|
||||
additional_acl JSONB
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -10,8 +10,10 @@ CREATE TABLE edit_group (
|
||||
edit_group_id SERIAL PRIMARY KEY,
|
||||
name VARCHAR,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
deleted SMALLINT DEFAULT 0,
|
||||
edit_scheme_id INT,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
additional_acl JSONB,
|
||||
FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
-- DATE: 2005/07/05
|
||||
-- DESCRIPTION:
|
||||
-- edit tables, this table contains all pages in the edit interface and allocates rights + values to it
|
||||
-- TABLE: edit_table
|
||||
-- TABLE: edit_page
|
||||
-- HISTORY:
|
||||
|
||||
-- DROP TABLE edit_page;
|
||||
CREATE TABLE edit_page (
|
||||
edit_page_id SERIAL PRIMARY KEY,
|
||||
content_alias_edit_page_id INT, -- alias for page content, if the page content is defined on a different page, ege for ajax backend pages
|
||||
filename VARCHAR,
|
||||
name VARCHAR UNIQUE,
|
||||
order_number INT NOT NULL,
|
||||
@@ -15,5 +16,6 @@ CREATE TABLE edit_page (
|
||||
menu SMALLINT NOT NULL DEFAULT 0,
|
||||
popup SMALLINT NOT NULL DEFAULT 0,
|
||||
popup_x SMALLINT,
|
||||
popup_y SMALLINT
|
||||
popup_y SMALLINT,
|
||||
FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
|
||||
20
4dev/database/table/edit_page_content.sql
Executable file
@@ -0,0 +1,20 @@
|
||||
-- AUTHOR: Clemens Schwaighofer
|
||||
-- DATE: 2019/9/9
|
||||
-- DESCRIPTION:
|
||||
-- sub content to one page with additional edit access right set
|
||||
-- can be eg JS content groups on one page
|
||||
-- TABLE: edit_page_content
|
||||
-- HISTORY:
|
||||
|
||||
-- DROP TABLE edit_page_content;
|
||||
CREATE TABLE edit_page_content (
|
||||
edit_page_content_id SERIAL PRIMARY KEY,
|
||||
edit_page_id INT NOT NULL,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
name VARCHAR,
|
||||
uid VARCHAR UNIQUE,
|
||||
order_number INT NOT NULL,
|
||||
online SMALLINT NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
@@ -16,6 +16,7 @@ CREATE TABLE edit_user (
|
||||
first_name_furigana VARCHAR,
|
||||
last_name_furigana VARCHAR,
|
||||
enabled SMALLINT NOT NULL DEFAULT 0,
|
||||
deleted SMALLINT NOT NULL DEFAULT 0,
|
||||
debug SMALLINT NOT NULL DEFAULT 0,
|
||||
db_debug SMALLINT NOT NULL DEFAULT 0,
|
||||
email VARCHAR,
|
||||
@@ -32,6 +33,7 @@ CREATE TABLE edit_user (
|
||||
locked SMALLINT DEFAULT 0,
|
||||
password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed
|
||||
password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval
|
||||
additional_acl JSONB, -- additional ACL as JSON string (can be set by other pages)
|
||||
FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
|
||||
4
4dev/database/trigger/trg_edit_page_content.sql
Executable file
@@ -0,0 +1,4 @@
|
||||
DROP TRIGGER trg_edit_page_content ON edit_page_content;
|
||||
CREATE TRIGGER trg_edit_page_content
|
||||
BEFORE INSERT OR UPDATE ON edit_page_content
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
14
4dev/database/update/edit_tables_missing_columns.sql
Executable file
@@ -0,0 +1,14 @@
|
||||
-- update missing edit_* table data
|
||||
|
||||
ALTER TABLE edit_generic ADD cuid VARCHAR;
|
||||
|
||||
ALTER TABLE edit_access ADD enabled SMALLINT DEFAULT 0;
|
||||
ALTER TABLE edit_access ADD protected SMALLINT DEFAULT 0;
|
||||
|
||||
ALTER TABLE edit_group ADD uid VARCHAR;
|
||||
ALTER TABLE edit_group ADD deleted SMALLINT DEFAULT 0;
|
||||
|
||||
ALTER TABLE temp_files ADD folder varchar;
|
||||
ALTER TABLE edit_page ADD hostname varchar;
|
||||
|
||||
ALTER TABLE edit_user ADD deleted SMALLINT DEFAULT 0;
|
||||
17
4dev/database/update/edit_update_missing_cuid.sql
Executable file
@@ -0,0 +1,17 @@
|
||||
-- 2019/9/10 UPDATE missing cuid in edit_* tables
|
||||
|
||||
UPDATE edit_access SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_data SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_right SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_user SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_language SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_log SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_menu_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page_access SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page_content SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_query_string SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_scheme SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_user SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_visible_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
@@ -1,11 +1,11 @@
|
||||
#********************************************************************
|
||||
# ********************************************************************
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# CREATED: 2005/08/09
|
||||
# SHORT DESCRIPTION:
|
||||
# Backned English Messages file for gettext
|
||||
# to craete: msgfmt -o ja.mo messages_en.po
|
||||
# HISTORY:
|
||||
#********************************************************************/
|
||||
# ********************************************************************/
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -24,3 +24,6 @@ msgstr "Year"
|
||||
|
||||
msgid "Month"
|
||||
msgstr "Month"
|
||||
|
||||
msgid "INPUT TEST"
|
||||
msgstr "OUTPUT TEST EN"
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#********************************************************************
|
||||
# ********************************************************************
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# CREATED: 2018/03/28
|
||||
# SHORT DESCRIPTION:
|
||||
# Backend Japanese Messages file for gettext
|
||||
# to craete: msgfmt -o ja.mo messages_ja.po
|
||||
# HISTORY:
|
||||
#********************************************************************/
|
||||
# ********************************************************************/
|
||||
|
||||
msgid ""
|
||||
msgstr ""
|
||||
@@ -61,3 +61,17 @@ msgstr "土"
|
||||
|
||||
msgid "Sun"
|
||||
msgstr "日"
|
||||
|
||||
msgid "INPUT TEST"
|
||||
msgstr "OUTPUT TEST JA"
|
||||
|
||||
# login string
|
||||
msgid "Hello %s"
|
||||
msgstr "こにちは %s"
|
||||
|
||||
msgid "I should be translated"
|
||||
msgstr "「スマーティー」これは正しいです"
|
||||
|
||||
msgid "Are we translated?"
|
||||
msgstr "「クラス」これは翻訳です?"
|
||||
|
||||
|
||||
92
4dev/update/20190910_page_content/20190910_page_content_updates.sql
Executable file
@@ -0,0 +1,92 @@
|
||||
-- 2019/9/10 update edit_page with reference and additional ACLs, update core functions
|
||||
|
||||
-- * random_string function
|
||||
-- * add cuid column in edit_generic
|
||||
-- * update generic trigger function
|
||||
-- * edit_page_content table/trigger
|
||||
-- * edit_* additional_acl entries
|
||||
-- * edit_page content alias link
|
||||
-- * update any missing cuid entries
|
||||
|
||||
-- create random string with length X
|
||||
CREATE FUNCTION random_string(randomLength int)
|
||||
RETURNS text AS $$
|
||||
SELECT array_to_string(
|
||||
ARRAY(
|
||||
SELECT substring(
|
||||
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
|
||||
trunc(random() * 62)::int + 1,
|
||||
1
|
||||
)
|
||||
FROM generate_series(1, randomLength) AS gs(x)
|
||||
),
|
||||
''
|
||||
)
|
||||
$$ LANGUAGE SQL
|
||||
RETURNS NULL ON NULL INPUT
|
||||
VOLATILE;
|
||||
-- edit_gneric update
|
||||
ALTER TABLE edit_generic ADD cuid VARCHAR;
|
||||
-- adds the created or updated date tags
|
||||
CREATE OR REPLACE FUNCTION set_edit_generic() RETURNS TRIGGER AS '
|
||||
DECLARE
|
||||
random_length INT = 12; -- that should be long enough
|
||||
BEGIN
|
||||
IF TG_OP = ''INSERT'' THEN
|
||||
NEW.date_created := ''now'';
|
||||
NEW.cuid := random_string(random_length);
|
||||
ELSIF TG_OP = ''UPDATE'' THEN
|
||||
NEW.date_updated := ''now'';
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
' LANGUAGE 'plpgsql';
|
||||
|
||||
-- DROP TABLE edit_page_content;
|
||||
CREATE TABLE edit_page_content (
|
||||
edit_page_content_id SERIAL PRIMARY KEY,
|
||||
edit_page_id INT NOT NULL,
|
||||
edit_access_right_id INT NOT NULL,
|
||||
name VARCHAR,
|
||||
uid VARCHAR UNIQUE,
|
||||
order_number INT NOT NULL,
|
||||
online SMALLINT NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
|
||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||
DROP TRIGGER trg_edit_page_content ON edit_page_content;
|
||||
CREATE TRIGGER trg_edit_page_content
|
||||
BEFORE INSERT OR UPDATE ON edit_page_content
|
||||
FOR EACH ROW EXECUTE PROCEDURE set_edit_generic();
|
||||
|
||||
-- INSERT new list entry
|
||||
INSERT INTO edit_access_right (name, level, type) VALUES ('List', 10, 'list');
|
||||
|
||||
-- UPDATE
|
||||
ALTER TABLE edit_user ADD additional_acl JSONB;
|
||||
ALTER TABLE edit_group ADD additional_acl JSONB;
|
||||
ALTER TABLE edit_access ADD additional_acl JSONB;
|
||||
|
||||
-- page content reference settings
|
||||
ALTER TABLE edit_page ADD content_alias_edit_page_id INT;
|
||||
ALTER TABLE edit_page ADD CONSTRAINT edit_page_content_alias_edit_page_id_fkey FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
|
||||
-- 2019/9/10 UPDATE missing cuid in edit_* tables
|
||||
UPDATE edit_access SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_data SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_right SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_access_user SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_language SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_log SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_menu_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page_access SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_page_content SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_query_string SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_scheme SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_user SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
UPDATE edit_visible_group SET cuid = random_string(12) WHERE cuid IS NULL;
|
||||
|
||||
-- update all triggers
|
||||
498
bin/Progress.pm
Normal file
@@ -0,0 +1,498 @@
|
||||
package Progress;
|
||||
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# DATE CREATED: 2009/6/16
|
||||
# DESCRIPTION: progress percent class
|
||||
|
||||
# METHODS
|
||||
# * init
|
||||
# my $prg = Progress->new();
|
||||
# will init a new progress class in the var $prg
|
||||
# the following parameters can be set directly during a new call
|
||||
# - verbose (1/0)
|
||||
# - precision (-1~10)
|
||||
# - wide_time (0/1)
|
||||
# - microtime (0/1)
|
||||
# setting is done via
|
||||
# my $prg = Progress->new(verbose => 1, microtime = 1);
|
||||
# * setting methods
|
||||
# verbose($level int)
|
||||
# $level has to be int, if not set there is no output show, at least 1 has to be given to see visible output
|
||||
# precision($decimals int)
|
||||
# $decimals has to be int, if set to -1 then the steps are done in 10 increase, else it sets how many decimals are visible, 0 for no decimals
|
||||
# wide_time(0/1 int)
|
||||
# sets the flag for wide time, if set to 1 the estimated time to end and time run is left prefixed with 15 chars
|
||||
# microtime(0/1 int)
|
||||
# sets the flag to always show microtime (1) or only if the previous time was the same (0)
|
||||
# reset()
|
||||
# resets all the internal vars for another new run
|
||||
# SetStartTime(optional timestamp)
|
||||
# sets the start times for this progress run, the overall start/end time is set, and the time used for the actual progress
|
||||
# in case there is some processing done before the run starts, it is highly recommended to call SetETAStartTime before the actual processing starts
|
||||
# if no timestamp is given, internal timestamp is used (this is recommended)
|
||||
# SetETAStartTime(optional timestamp)
|
||||
# only sets the start/end time for the actual "estimated time" calculation. It is recommended to call this right before the processing loop starts
|
||||
# eg if there is a big query running that takes a lot of time, this method should be called before the reading loop
|
||||
# as with SetStartTime a timestamp can be given, if not then the internal timestamp is used (this is recommended)
|
||||
# SetEndTime(optional timestamp)
|
||||
# sets the end time for the overall processing. This should be called at the very end of the script before any final stat data is printed
|
||||
# linecount($lines int)
|
||||
# sets the maximum lines that will be processed, used for percentage calculation. If non int is given, will set to 1. This will be only set once, to
|
||||
# reset used reset() method.
|
||||
# Either this or filesize NEED to be set
|
||||
# filesize($bytes int)
|
||||
# filesize in bytes, if non valid data is given, then it is set to 1.
|
||||
# filesize() and linecount() can both be set, but at least one of them has to be set.
|
||||
# if filesize is set a byte data output is added, if only linecount is given, only the linecount output will be given (no bytes per second, etc)
|
||||
# ShowPosition(optional current byte position int)
|
||||
# this is the main processing and has to be called at the end of the loop where the data is processed. If no bytes are given the internal counter (linecount)
|
||||
# is used.
|
||||
# for bytes it is recommended to use IO::File and $FH->tell to pass on the bytes
|
||||
#
|
||||
# VARIABLES
|
||||
# * internal set
|
||||
# change: flagged 1 if output is given or would be given. can be used for any post processing after the ShowPosition is called
|
||||
# precision_ten_step: flagged 1 if the precision was set to -1
|
||||
# start: overall start time
|
||||
# end: overall end time
|
||||
# count: count of processed lines
|
||||
# [TODO: describe the others too, at the moment only below in %fields]
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
BEGIN {
|
||||
use POSIX;
|
||||
use Carp;
|
||||
use Time::HiRes qw(time);
|
||||
use File::Basename;
|
||||
use Number::Format qw(format_number);
|
||||
use vars qw($AUTOLOAD);
|
||||
push(@INC, File::Basename::dirname($0).'/');
|
||||
}
|
||||
|
||||
# important includes
|
||||
use functions;
|
||||
|
||||
# variable declarationf or access
|
||||
# * can be set
|
||||
# = only for read
|
||||
# unmarked are internal only, but can be read if they are needed in further processing in the script
|
||||
my %fields = (
|
||||
linecount => 0, # * max lines in input
|
||||
filesize => 0, # * max file size
|
||||
precision => 1, # * comma after percent
|
||||
wide_time => 0, # * if flagged 1, then the wide 15 char left bound format is used
|
||||
verbose => 0, # * verbose status from outside
|
||||
microtime => 0, # * microtime output for last run time (1 for enable, 0 for auto, -1 for disable)
|
||||
change => 0, # = flag if output was given
|
||||
start => undef, # = global start for the full script running time
|
||||
start_run => undef, # = for the eta time, can be set after a query or long read in, to not create a wrong ETA time
|
||||
start_time => undef, # loop start
|
||||
end => undef, # = global end
|
||||
end_time => undef, # loop end
|
||||
count_size => undef, # = filesize current
|
||||
count => 0, # = position current
|
||||
current_count => 0, # last count (position)
|
||||
lines_processed => 0, # lines processed in the last run
|
||||
last_group => 0, # time in seconds for the last group run (until percent change)
|
||||
lines_in_last_group => 0, # float value, lines processed per second to the last group run
|
||||
lines_in_global => 0, # float values, lines processed per second to complete run
|
||||
bytes_in_last_group => 0, # flaot value, bytes processes per second in the last group run
|
||||
bytes_in_global => 0, # float value, bytes processed per second to complete run
|
||||
size_in_last_group => 0, # bytes processed in last run (in bytes)
|
||||
current_size => 0, # current file position (size)
|
||||
last_percent => 0, # last percent position
|
||||
precision_ten_step => 0, # if we have normal % or in steps of 10
|
||||
percent_print => 5, # the default size, this is precision + 4
|
||||
percent_precision => 1, # this is 1 if it is 1 or 0 for precision, or precision size
|
||||
eta => undef, # estimated time to finish
|
||||
full_time_needed => undef, # run time since start
|
||||
lg_microtime => 0 # last group microtime, this is auto set during process.
|
||||
);
|
||||
|
||||
# class init
|
||||
sub new
|
||||
{
|
||||
my $proto = shift;
|
||||
my $class = ref($proto) || $proto;
|
||||
my %data = @_;
|
||||
my $self = {
|
||||
_permitted => \%fields,
|
||||
%fields,
|
||||
};
|
||||
# vars to init
|
||||
bless ($self, $class);
|
||||
if ($data{'verbose'} && $data{'verbose'} =~ /^\d{1}$/) {
|
||||
$self->{verbose} = $data{'verbose'};
|
||||
}
|
||||
if (exists($data{'precision'}) && (($data{'precision'} || $data{'precision'} == 0) && $data{'precision'} =~ /^\-?\d{1,2}$/)) {
|
||||
$self->precision($data{'precision'});
|
||||
}
|
||||
if ($data{'microtime'} && $data{'microtime'} =~ /^(0|1)$/) {
|
||||
$self->microtime($data{'microtime'});
|
||||
}
|
||||
if ($data{'wide_time'} && $data{'wide_time'} =~ /^(0|1)$/) {
|
||||
$self->wide_time($data{'wide_time'});
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
|
||||
# auto load for vars
|
||||
sub AUTOLOAD
|
||||
{
|
||||
my $self = shift;
|
||||
my $type = ref($self) || croak "$self is not an object";
|
||||
my $name = $AUTOLOAD;
|
||||
$name =~ s/.*://;
|
||||
|
||||
unless (exists $self->{_permitted}->{$name}) {
|
||||
croak "Can't access '$name' field in class $type";
|
||||
}
|
||||
|
||||
if (@_) {
|
||||
return $self->{$name} = shift;
|
||||
} else {
|
||||
return $self->{$name};
|
||||
}
|
||||
}
|
||||
|
||||
# destructor
|
||||
sub DESTROY
|
||||
{
|
||||
# do nothing, there is nothing to close or finish
|
||||
}
|
||||
|
||||
# SUB: reset
|
||||
# PARAMS: none
|
||||
# DESC: resets all the current counters only and current start times
|
||||
sub reset
|
||||
{
|
||||
my $self = shift;
|
||||
# reset what always gets reset
|
||||
$self->{count} = 0;
|
||||
$self->{count_size} = undef;
|
||||
$self->{current_count} = 0;
|
||||
$self->{linecount} = 0;
|
||||
$self->{lines_processed} = 0;
|
||||
$self->{last_group} = 0;
|
||||
$self->{lines_in_last_group} = 0;
|
||||
$self->{lines_in_global} = 0;
|
||||
$self->{bytes_in_last_group} = 0;
|
||||
$self->{bytes_in_global} = 0;
|
||||
$self->{size_in_last_group} = 0;
|
||||
$self->{filesize} = 0;
|
||||
$self->{current_size} = 0;
|
||||
$self->{last_percent} = 0;
|
||||
$self->{eta} = 0;
|
||||
$self->{full_time_needed} = 0;
|
||||
$self->{start_run} = undef;
|
||||
$self->{start_time} = undef;
|
||||
$self->{end_time} = undef;
|
||||
}
|
||||
|
||||
# SUB: microtime
|
||||
# PARAMS: 1/0
|
||||
# DESC: flag to set microtime on or off in the time output
|
||||
# if not 1 or 0, set to 0
|
||||
sub microtime
|
||||
{
|
||||
my $self = shift;
|
||||
my $microtime;
|
||||
if (@_) {
|
||||
$microtime = shift;
|
||||
if ($microtime == 1 || $microtime == 0) {
|
||||
$self->{microtime} = $microtime;
|
||||
} else {
|
||||
$self->{microtime} = 0;
|
||||
}
|
||||
}
|
||||
return $self->{microtime};
|
||||
}
|
||||
|
||||
|
||||
# SUB: wide_time
|
||||
# PARAMS: 1/0
|
||||
# DESC: flag to set wide_time (15 char spacer).
|
||||
# if not 1 or 0, set to 0
|
||||
sub wide_time
|
||||
{
|
||||
my $self = shift;
|
||||
my $wide;
|
||||
if (@_) {
|
||||
$wide = shift;
|
||||
if ($wide == 1 || $wide == 0) {
|
||||
$self->{wide_time} = $wide;
|
||||
} else {
|
||||
$self->{wide_time} = 0;
|
||||
}
|
||||
}
|
||||
return $self->{wide_time};
|
||||
}
|
||||
|
||||
# SUB: precision
|
||||
# PARAMS: precision in int
|
||||
# DESC: sets the output percent precision calculation and printf width
|
||||
# if negative, to ten step, if bigger 10, set to one
|
||||
sub precision
|
||||
{
|
||||
my $self = shift;
|
||||
my $comma;
|
||||
if (@_) {
|
||||
$comma = shift;
|
||||
$comma = 0 if ($comma !~ /^\-?\d{1,}$/);
|
||||
if ($comma < 0) {
|
||||
# -2 is 5 step
|
||||
# -1 is 10 step
|
||||
if ($comma < -1) {
|
||||
$self->{precision_ten_step} = 5;
|
||||
} else {
|
||||
$self->{precision_ten_step} = 10;
|
||||
}
|
||||
$self->{precision} = 0; # no comma
|
||||
$self->{percent_precision} = 0; # no print precision
|
||||
$self->{percent_print} = 3; # max 3 length
|
||||
} else {
|
||||
$self->{precision} = $comma < 0 || $comma > 10 ? 10 : $comma;
|
||||
$self->{percent_precision} = $comma < 0 || $comma > 10 ? 10 : $comma;
|
||||
$self->{percent_print} = ($comma == 0 ? 3 : 4) + $self->{percent_precision};
|
||||
}
|
||||
}
|
||||
return $self->{precision};
|
||||
}
|
||||
|
||||
# SUB: linecount
|
||||
# PARAMS: max number of lines to be processed
|
||||
# DESC: sets the max number for lines for the percent calculation, if negative or not number, set to 1
|
||||
# can only be set ONCE
|
||||
sub linecount
|
||||
{
|
||||
my $self = shift;
|
||||
my $linecount;
|
||||
if (!$self->{linecount}) {
|
||||
if (@_) {
|
||||
$linecount = shift;
|
||||
$self->{linecount} = $linecount;
|
||||
$self->{linecount} = 1 if ($linecount < 0 || $linecount !~ /\d+/)
|
||||
}
|
||||
}
|
||||
return $self->{linecount};
|
||||
}
|
||||
|
||||
# SUB: filesize
|
||||
# PARAMS: max filesize for the to processed data
|
||||
# DESC: sets the max filesize for the to processed data, if negative or not number, set to 1
|
||||
# input data has to be in bytes without any suffix (no b, kb, etc)
|
||||
# can only be set ONCE
|
||||
sub filesize
|
||||
{
|
||||
my $self = shift;
|
||||
my $filesize;
|
||||
if (!$self->{filesize}) {
|
||||
if (@_) {
|
||||
$filesize = shift;
|
||||
$self->{filesize} = $filesize;
|
||||
$self->{filesize} = 1 if ($filesize < 0 || $filesize !~ /\d+/)
|
||||
}
|
||||
}
|
||||
return $self->{filesize};
|
||||
}
|
||||
|
||||
# SUB: SetStartTime
|
||||
# PARAMS: time, or nothing
|
||||
# DESC: sets all the start times
|
||||
sub SetStartTime
|
||||
{
|
||||
my $self = shift;
|
||||
if (@_) {
|
||||
$self->{start} = shift;
|
||||
} else {
|
||||
$self->{start} = time();
|
||||
}
|
||||
$self->{start_time} = $self->{start};
|
||||
$self->{start_run} = $self->{start};
|
||||
}
|
||||
|
||||
# SUB: SetETAStartTime
|
||||
# PARAMS: time, or nothing
|
||||
# DESC: sets the loop & run time, for correct ETA callculation
|
||||
sub SetETAStartTime
|
||||
{
|
||||
my $self = shift;
|
||||
if (@_) {
|
||||
$self->{start_time} = shift;
|
||||
} else {
|
||||
$self->{start_time} = time();
|
||||
}
|
||||
$self->{start_run} = $self->{start_time};
|
||||
}
|
||||
|
||||
# SUB: SetEndTime
|
||||
# PARAMS: time, or nothing
|
||||
# DESC: sets the end time for running time calculation
|
||||
sub SetEndTime
|
||||
{
|
||||
my $self = shift;
|
||||
if (@_) {
|
||||
$self->{end} = shift;
|
||||
} else {
|
||||
$self->{end} = time();
|
||||
}
|
||||
}
|
||||
|
||||
# SUB: ShowPosition
|
||||
# PARAMS: optiona; file position (via file pointer)
|
||||
# RETURN: string for percent position output
|
||||
# DESC: calculates the current percent position based on the passed parameter, if no parameter uses intneral counter
|
||||
sub ShowPosition
|
||||
{
|
||||
my $self = shift;
|
||||
# set local vars
|
||||
my $percent; # current percent
|
||||
my $full_time_needed; # complete process time
|
||||
my $full_time_per_line; # time per line
|
||||
my $eta; # estimated end time
|
||||
my $string = ''; # percent string that gets output
|
||||
my $show_filesize = 1;
|
||||
# microtime flags
|
||||
my $eta_microtime = 0;
|
||||
my $ftn_microtime = 0;
|
||||
my $lg_microtime = 0;
|
||||
# percent precision calc
|
||||
my $_p_spf = "%.".$self->{precision}."f";
|
||||
# output format for percent
|
||||
my $_pr_p_spf = "%".$self->{percent_print}.".".$self->{percent_precision}."f";
|
||||
# set the linecount precision based on the final linecount, if not, leave it empty
|
||||
my $_pr_lc = "%s";
|
||||
$_pr_lc = "%".length(format_number($self->{linecount}))."s" if ($self->{linecount});
|
||||
# time format, if flag is set, the wide format is used
|
||||
my $_pr_tf = "%s";
|
||||
$_pr_tf = "%-15s" if ($self->{'wide_time'});
|
||||
# do the smae for file size
|
||||
# my $_pr_fs = "%s";
|
||||
# $_pr_fs = "%".length(function::convert_number($self->{filesize}))."s" if ($self->{filesize});
|
||||
|
||||
# increase position by one
|
||||
$self->{count} ++;
|
||||
# see if we get anything from IO tell
|
||||
if (@_) {
|
||||
$self->{file_pos} = shift;
|
||||
} else {
|
||||
# we did not, so we set internal value
|
||||
$self->{file_pos} = $self->{count};
|
||||
# we also check if the filesize was set now
|
||||
if (!$self->{filesize}) {
|
||||
$self->{filesize} = $self->{linecount};
|
||||
}
|
||||
# set ignore filesize output (no data)
|
||||
$show_filesize = 0;
|
||||
}
|
||||
# set the count size based on the file pos, is only used if we have filesize
|
||||
$self->{count_size} = $self->{file_pos};
|
||||
|
||||
# do normal or down to 10 (0, 10, ...) %
|
||||
if ($self->{precision_ten_step}) {
|
||||
# calc 0 comma precision, so just do a floor
|
||||
my $_percent = sprintf("%d", ($self->{file_pos} / $self->{filesize}) * 100);
|
||||
# mod that to 10
|
||||
my $mod = $_percent % $self->{precision_ten_step};
|
||||
# either write this one, or write the previous, old one
|
||||
$percent = $mod == 0 ? $_percent : $self->last_percent;
|
||||
# print "P: $percent, Last: ".$self->last_percent.", Mod: ".$mod.", Calc: ".$_percent."\n";
|
||||
} else {
|
||||
$percent = sprintf($_p_spf, ($self->{file_pos} / $self->{filesize}) * 100);
|
||||
}
|
||||
# print "POS: ".$self->{file_pos}.", PERCENT: $percent / ".$self->last_percent."\n";
|
||||
if ($percent != $self->last_percent) {
|
||||
$self->{end_time} = time();
|
||||
# for from the beginning
|
||||
$full_time_needed = $self->{end_time} - $self->{start_run}; # how long from the start;
|
||||
$self->{last_group} = $self->{end_time} - $self->{start_time};
|
||||
$self->{lines_processed} = $self->{count} - $self->{current_count};
|
||||
# lines in last group
|
||||
$self->{lines_in_last_group} = $self->{'last_group'} ? ($self->{lines_processed} / $self->{last_group}) : 0;
|
||||
# lines in global
|
||||
$self->{lines_in_global} = $full_time_needed ? ($self->{'count'} / $full_time_needed) : 0;
|
||||
# if we have linecount
|
||||
if (!$self->{linecount}) {
|
||||
$full_time_per_line = (($full_time_needed) ? $full_time_needed : 1) / $self->{count_size}; # how long for all
|
||||
$eta = $full_time_per_line * ($self->{filesize} - $self->{count_size}); # estimate for the rest
|
||||
} else {
|
||||
$full_time_per_line = (($full_time_needed) ? $full_time_needed : 1) / $self->{count}; # how long for all
|
||||
$eta = $full_time_per_line * ($self->{linecount} - $self->{count}); # estimate for the rest
|
||||
}
|
||||
|
||||
# just in case ...
|
||||
$eta = '0' if ($eta < 0);
|
||||
# check if to show microtime
|
||||
# ON: if microtime is flagged as one
|
||||
$eta_microtime = $ftn_microtime = $lg_microtime = 1 if ($self->{microtime} == 1);
|
||||
# AUTO: foir microtime
|
||||
if ($self->{microtime} == 0) {
|
||||
$eta_microtime = 1 if ($eta > 0 && $eta < 1);
|
||||
$ftn_microtime = 1 if ($full_time_needed > 0 && $full_time_needed < 1);
|
||||
# pre check last group: if pre comma part is same add microtime anyway
|
||||
$lg_microtime = 1 if ($self->{last_group} > 0 && $self->{last_group} < 1);
|
||||
}
|
||||
# print out
|
||||
if ($show_filesize) {
|
||||
# last group size
|
||||
$self->{size_in_last_group} = $self->{count_size} - $self->{current_size};
|
||||
# calc kb/s if there is any filesize data
|
||||
# last group
|
||||
$self->{bytes_in_last_group} = $self->{'last_group'} ? ($self->{size_in_last_group} / $self->{last_group}) : 0;
|
||||
# global
|
||||
$self->{bytes_in_global} = $full_time_needed ? ($self->{count_size} / $full_time_needed) : 0;
|
||||
# only used if we run with file size for the next check
|
||||
$self->{current_size} = $self->{count_size};
|
||||
|
||||
$string = sprintf(
|
||||
"Processed ".$_pr_p_spf."%% [%s / %s] | ".$_pr_lc." / ".$_pr_lc." Lines | ETA: ".$_pr_tf." / TR: ".$_pr_tf." / LR: %s lines (%s) in %s, %s (%s) lines/s, %s (%s) b/s\n",
|
||||
$percent,
|
||||
function::convert_number($self->{count_size}),
|
||||
function::convert_number($self->{filesize}),
|
||||
format_number($self->{count}),
|
||||
format_number($self->{linecount}),
|
||||
function::convert_time($eta, $eta_microtime),
|
||||
function::convert_time($full_time_needed, $ftn_microtime),
|
||||
format_number($self->{lines_processed}),
|
||||
function::convert_number($self->{size_in_last_group}),
|
||||
function::convert_time($self->{last_group}, $lg_microtime),
|
||||
format_number($self->{lines_in_global}, 2, 1),
|
||||
format_number($self->{lines_in_last_group}, 2, 1),
|
||||
function::convert_number($self->{bytes_in_global}),
|
||||
function::convert_number($self->{bytes_in_last_group})
|
||||
) if ($self->{verbose} >= 1);
|
||||
} else {
|
||||
$string = sprintf(
|
||||
"Processed ".$_pr_p_spf."%% | ".$_pr_lc." / ".$_pr_lc." Lines | ETA: ".$_pr_tf." / TR: ".$_pr_tf." / LR: %s lines in %s, %s (%s) lines/s\n",
|
||||
$percent,
|
||||
format_number($self->{count}),
|
||||
format_number($self->{linecount}),
|
||||
function::convert_time($eta, $eta_microtime),
|
||||
function::convert_time($full_time_needed, $ftn_microtime),
|
||||
format_number($self->{lines_processed}),
|
||||
function::convert_time($self->{last_group}, $lg_microtime),
|
||||
format_number($self->{lines_in_global}, 2, 1),
|
||||
format_number($self->{lines_in_last_group}, 2, 1)
|
||||
) if ($self->{verbose} >= 1);
|
||||
}
|
||||
# write back vars
|
||||
$self->{last_percent} = $percent;
|
||||
$self->{eta} = $eta;
|
||||
$self->{full_time_needed} = $full_time_needed;
|
||||
$self->{lg_microtime} = $lg_microtime;
|
||||
# for the next run, check data
|
||||
$self->{start_time} = time();
|
||||
$self->{current_count} = $self->{count};
|
||||
# trigger if this is a change
|
||||
$self->{change} = 1;
|
||||
} else {
|
||||
# trigger if this is a change
|
||||
$self->{change} = 0;
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
1;
|
||||
501
bin/functions.pm
Normal file
@@ -0,0 +1,501 @@
|
||||
package function;
|
||||
|
||||
# AUTHOR: Clemens Schwaighofer
|
||||
# DATE CREATED: 2004/11/09
|
||||
# DESCRIPTION: functions collection for Adidas scripts
|
||||
# HISTORY:
|
||||
# 2005/06/22 (cs) added header key check function
|
||||
# 2005/02/10 (cs) added debug flag to print output, added two new functions to format a number into B, KB, etc
|
||||
# 2005/01/13 (cs) fixed array problem with the clean up and int function
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use 5.000_000;
|
||||
use POSIX qw(floor);
|
||||
use File::Copy;
|
||||
use Digest::SHA qw(sha1_hex);
|
||||
use utf8;
|
||||
#require Exporter;
|
||||
#our @ISA = qw(Exporter);
|
||||
#our @EXPORT = qw();
|
||||
|
||||
# depending on the options given to the program, it gets the correct settings
|
||||
# to which db it should connect
|
||||
sub get_db_user
|
||||
{
|
||||
my ($target, $db) = @_;
|
||||
|
||||
# the parts of the hash array (tab seperated)
|
||||
my @array_names = qw{db_name db_port db_user db_pass db_host db_type db_test db_ssl};
|
||||
my %db_out = ();
|
||||
|
||||
# based on the two parameters find the correct vars
|
||||
# each level can hold data, higher level data overrules lower data
|
||||
# eg $config::db{'test'}{'db_user'} overrules $config::db{'db_user'}
|
||||
for (my $i = 1; $i <= 3; $i ++) {
|
||||
foreach my $name (@array_names) {
|
||||
# depending on the level check the level of data
|
||||
if ($i == 1) {
|
||||
$db_out{$name} = $config::db{$name} if (defined($config::db{$name}));
|
||||
} elsif ($i == 2) {
|
||||
$db_out{$name} = $config::db{$target}{$name} if (defined($config::db{$target}{$name}));
|
||||
} elsif ($i == 3) {
|
||||
$db_out{$name} = $config::db{$target}{$db}{$name} if (defined($config::db{$target}{$db}{$name}));
|
||||
}
|
||||
} # for each db data var
|
||||
} # for each data level in the hash
|
||||
|
||||
return (
|
||||
$db_out{'db_name'},
|
||||
$db_out{'db_port'},
|
||||
$db_out{'db_user'},
|
||||
$db_out{'db_pass'},
|
||||
$db_out{'db_host'},
|
||||
$db_out{'db_type'},
|
||||
$db_out{'db_test'},
|
||||
$db_out{'db_ssl'}
|
||||
);
|
||||
}
|
||||
|
||||
# get the DSN string for the DB connect
|
||||
sub get_db_dsn
|
||||
{
|
||||
my (
|
||||
$db_name,
|
||||
$db_port,
|
||||
$db_user,
|
||||
$db_pass,
|
||||
$db_host,
|
||||
$db_type,
|
||||
$db_ssl
|
||||
) = @_;
|
||||
my $dsn = '';
|
||||
|
||||
if ($db_type eq 'mysql' && $db_name && $db_host && $db_user) {
|
||||
$dsn = "DBI:mysql:database=".$db_name.";host=".$db_host.";port=".$db_port;
|
||||
} elsif ($db_type eq 'pgsql' && $db_name && $db_host && $db_user) {
|
||||
$dsn = "DBI:Pg:dbname=".$db_name.";host=".$db_host.";port=".$db_port.";sslmode=".$db_ssl;
|
||||
} else {
|
||||
# invalid db type
|
||||
$dsn = -1;
|
||||
}
|
||||
return $dsn;
|
||||
}
|
||||
|
||||
sub strip_white_spaces
|
||||
{
|
||||
my ($element) = @_;
|
||||
# get rid of spaces at the end and at the beginning of each bloack
|
||||
$element =~ s/^\s+//g;
|
||||
$element =~ s/\s+$//g;
|
||||
return $element;
|
||||
}
|
||||
|
||||
sub prepare_hash_keys
|
||||
{
|
||||
my($csv, $data, $csv_header) = @_;
|
||||
|
||||
# unset value starts at 1000 and goes up ...
|
||||
my $unset_value = 1000;
|
||||
my %keys = ();
|
||||
|
||||
# parse header
|
||||
if ($csv->parse($data)) {
|
||||
my @cols = $csv->fields();
|
||||
for (my $i = 0; $i < @cols; $i ++) {
|
||||
# remove all spaces before and afterward
|
||||
$cols[$i] = function::strip_white_spaces($cols[$i]);
|
||||
# write key - id number
|
||||
$keys{$cols[$i]} = $i;
|
||||
print $::DEBUG "\tPostion [".$i."]: ".$cols[$i]."\n" if ($::debug);
|
||||
print "\tPosition [".$i."]: ".$cols[$i]."\n" if ($::verbose > 1);
|
||||
}
|
||||
} else {
|
||||
die "ERROR[".$csv->error_diag()."]: ".$csv->error_input()."\n";
|
||||
}
|
||||
# add empty values
|
||||
foreach my $csv_header_value (@$csv_header) {
|
||||
if (!defined($keys{$csv_header_value})) {
|
||||
$keys{$csv_header_value} = $unset_value;
|
||||
$unset_value ++;
|
||||
print $::DEBUG "\tKey [$csv_header_value] gets position [".$keys{$csv_header_value}."]\n" if ($::debug);
|
||||
print "\tKey [$csv_header_value] gets position [".$keys{$csv_header_value}."]\n" if ($::verbose > 1);
|
||||
}
|
||||
}
|
||||
|
||||
return %keys;
|
||||
}
|
||||
|
||||
sub error_check_keys
|
||||
{
|
||||
my($csv_header, $keys) = @_;
|
||||
|
||||
if ((keys %$keys) != @$csv_header) {
|
||||
print $::ERR "TOTAL WRONG COUNT: CSV header ".(keys %$keys)." vs Needed headers ".@$csv_header.": perhaps your input file is not fitting this?\n";
|
||||
print "TOTAL WRONG COUNT: CSV header ".(keys %$keys)." vs Needed headers ".@$csv_header.": perhaps your input file is not fitting this?\n";
|
||||
|
||||
# if there are more keys in CSV file, then in the header defined in here
|
||||
if ((keys %$keys) > @$csv_header) {
|
||||
print $::ERR "Listing Perl Header missing\n";
|
||||
print "Listing Perl Header missing\n";
|
||||
foreach my $key (keys %$keys) {
|
||||
print $::ERR "Missing in perl Header list: $key\n" if (!grep {$_ eq $key} @$csv_header);
|
||||
print "Missing in perl Header list: $key\n" if (!grep {$_ eq $key} @$csv_header);
|
||||
}
|
||||
# if more keys are in the header defined than in the csv file
|
||||
} else {
|
||||
print $::ERR "Listing CSV Header missing\n";
|
||||
print "Listing CSV Header missing\n";
|
||||
for (my $i = 0; $i < @$csv_header; $i ++) {
|
||||
print $::ERR "Missing in CSV file: ".$$csv_header[$i]."\n" if (!defined($$keys{$$csv_header[$i]}));
|
||||
print "Missing in CSV file: ".$$csv_header[$i]."\n" if (!defined($$keys{$$csv_header[$i]}));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub clean_up_row
|
||||
{
|
||||
my ($row) = @_;
|
||||
|
||||
for (my $i = 0; $i < @$row; $i++) {
|
||||
# get rid of spaces at the end and at the beginning of each bloack
|
||||
$$row[$i] =~ s/^\s+//g;
|
||||
$$row[$i] =~ s/\s+$//g;
|
||||
# convert all half width Katakan to Full width Katakana
|
||||
$$row[$i] = Unicode::Japanese->new($$row[$i])->h2zKana->get;
|
||||
# need to decode the converted string, somehow Unicode::Japanese does not return proper utf8 if use utf8 is on
|
||||
utf8::decode($$row[$i]);
|
||||
}
|
||||
|
||||
return @$row;
|
||||
}
|
||||
|
||||
sub set_int_fields
|
||||
{
|
||||
my ($row, $keys, $int_fields) = @_;
|
||||
|
||||
# check ALL smallint/int/etc rows to be set to a number
|
||||
for (my $i = 0; $i < @$int_fields; $i++) {
|
||||
print "\t\tCheck ".$$int_fields[$i]." {".$$keys{$$int_fields[$i]}."} ... " if ($::verbose > 1);
|
||||
if (!$$row[$$keys{$$int_fields[$i]}]) {
|
||||
$$row[$$keys{$$int_fields[$i]}] = 0;
|
||||
}
|
||||
# if its filled, but not a digit, set to 1
|
||||
if ($$row[$$keys{$$int_fields[$i]}] =~ /\D/) {
|
||||
$$row[$$keys{$$int_fields[$i]}] = 1;
|
||||
}
|
||||
print "[".$$row[$$keys{$$int_fields[$i]}]."] [DONE]\n" if ($::verbose > 1);
|
||||
}
|
||||
return @$row;
|
||||
}
|
||||
|
||||
# formats a number with dots and ,
|
||||
sub format_number
|
||||
{
|
||||
my ($number) = @_;
|
||||
# dummy, does nothing now
|
||||
# should put . or , every 3 digits later
|
||||
return $number;
|
||||
}
|
||||
|
||||
# converts bytes to human readable format
|
||||
sub convert_number
|
||||
{
|
||||
my ($number) = @_;
|
||||
my $pos; # the original position in the labels array
|
||||
# divied number until its division would be < 1024. count that position for label usage
|
||||
for ($pos = 0; $number > 1024; $pos ++) {
|
||||
$number = $number / 1024;
|
||||
}
|
||||
# before we return it, we format it [rounded to 2 digits, if has decimals, else just int]
|
||||
# we add the right label to it and return
|
||||
return sprintf(!$pos ? '%d' : '%.2f', $number)." ".qw(B KB MB GB TB PB EB)[$pos];
|
||||
}
|
||||
|
||||
# make time from seconds string
|
||||
sub convert_time
|
||||
{
|
||||
my ($timestamp, $show_micro) = @_;
|
||||
my $ms = '';
|
||||
# cut of the ms, but first round them up to four
|
||||
$timestamp = sprintf("%.4f", $timestamp);
|
||||
# print "T: ".$timestamp."\n";
|
||||
($timestamp, $ms) = split(/\./, $timestamp);
|
||||
my @timegroups = ("86400", "3600", "60", "1");
|
||||
my @output = ();
|
||||
for (my $i = 0; $i < @timegroups; $i ++) {
|
||||
push(@output, floor($timestamp / $timegroups[$i]));
|
||||
$timestamp = $timestamp % $timegroups[$i];
|
||||
}
|
||||
# output has days|hours|min|sec
|
||||
return (($output[0]) ? $output[0]."d " : "").
|
||||
(($output[1] || $output[0]) ? $output[1]."h " : "").
|
||||
(($output[2] ||$output[1] || $output[0]) ? $output[2]."m " : "").
|
||||
$output[3]."s".
|
||||
(($show_micro) ? " ".((!$ms) ? 0 : $ms)."ms" : "");
|
||||
}
|
||||
|
||||
# get a timestamp and create a proper formated date/time field
|
||||
sub create_time
|
||||
{
|
||||
my ($timestamp, $show_micro) = @_;
|
||||
my $ms = '';
|
||||
$timestamp = 0 if (!$timestamp);
|
||||
# round ms to 4 numbers
|
||||
$timestamp = sprintf("%.4f", $timestamp);
|
||||
($timestamp, $ms) = split(/\./, $timestamp);
|
||||
# array for time
|
||||
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime($timestamp);
|
||||
# year, month fix
|
||||
$year += 1900;
|
||||
$month += 1;
|
||||
# string for return
|
||||
return $year."-".
|
||||
($month < 10 ? '0'.$month : $month)."-".
|
||||
($day < 10 ? '0'.$day : $day)." ".
|
||||
($hour < 10 ? '0'.$hour : $hour).":".
|
||||
($min < 10 ? '0'.$min : $min).":".
|
||||
($sec < 10 ? '0'.$sec : $sec).
|
||||
(($ms && $show_micro) ? ".".$ms : "");
|
||||
}
|
||||
|
||||
# create YYYYMMDD data
|
||||
sub create_date
|
||||
{
|
||||
my ($timestamp, $split_string) = @_;
|
||||
my $split = $split_string ? $split_string : '';
|
||||
$timestamp = time() if (!$timestamp);
|
||||
# array for time
|
||||
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime($timestamp);
|
||||
# year, month fix
|
||||
$year += 1900;
|
||||
$month += 1;
|
||||
# string for return
|
||||
return $year.$split.
|
||||
($month < 10 ? '0'.$month : $month).$split.
|
||||
($day < 10 ? '0'.$day : $day);
|
||||
}
|
||||
|
||||
# create YYYYMMDD_HHMMSS data
|
||||
sub create_datetime
|
||||
{
|
||||
my ($timestamp, $split_string) = @_;
|
||||
my $split = $split_string ? $split_string : '';
|
||||
$timestamp = time() if (!$timestamp);
|
||||
# array for time
|
||||
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime($timestamp);
|
||||
# year, month fix
|
||||
$year += 1900;
|
||||
$month += 1;
|
||||
# string for return
|
||||
return $year.$split.
|
||||
($month < 10 ? '0'.$month : $month).$split.
|
||||
($day < 10 ? '0'.$day : $day).'_'.
|
||||
($hour < 10 ? '0'.$hour : $hour).$split.
|
||||
($min < 10 ? '0'.$min : $min).$split.
|
||||
($sec < 10 ? '0'.$sec : $sec);
|
||||
}
|
||||
|
||||
sub left_fill
|
||||
{
|
||||
my($number, $size, $char) = @_;
|
||||
return sprintf($char x ($size - length($number)).$number);
|
||||
}
|
||||
|
||||
# wrapper to flip the crc32 hex string, so it is like buggy php one (php <= 5.2.6)
|
||||
sub crc32b_fix
|
||||
{
|
||||
my ($crc) = @_;
|
||||
# left pad with 0 to 8 chars
|
||||
$crc = ('0' x (8 - length($crc))).$crc;
|
||||
# flip two chars (byte hex)
|
||||
$crc =~ s/^([a-z0-9]{2})([a-z0-9]{2})([a-z0-9]{2})([a-z0-9]{2})$/$4$3$2$1/;
|
||||
return $crc;
|
||||
}
|
||||
|
||||
# short sha1 (9 char) function
|
||||
sub sha1_short
|
||||
{
|
||||
my ($string) = @_;
|
||||
return substr(sha1_hex($string), 0, 9);
|
||||
}
|
||||
|
||||
# DEBUG helpers for dumping data
|
||||
# from: http://www.perlmonks.org/?node_id=390153
|
||||
# alternative use Dump::Dumper and print Dump(VAR);
|
||||
sub dump_data
|
||||
{
|
||||
my ($level, $base, $data) = @_;
|
||||
my $nextlevel = $level + 1;
|
||||
if (ref($data) eq 'ARRAY') {
|
||||
foreach my $k (0 .. $#{$data}) {
|
||||
my $baseval = $base.'['.$k.']';
|
||||
dump_it($nextlevel, $baseval, $data->[$k]);
|
||||
}
|
||||
} elsif (ref($data) eq 'HASH') {
|
||||
foreach my $k (sort(keys(%{$data}))) {
|
||||
my $baseval = $base.'{'.$k.'}';
|
||||
dump_it($nextlevel, $baseval, $data->{$k});
|
||||
}
|
||||
} elsif (ref($data) eq 'SCALAR') {
|
||||
my $baseval = $base;
|
||||
dump_it($nextlevel, $baseval, ${$data});
|
||||
}
|
||||
}
|
||||
|
||||
sub dump_it
|
||||
{
|
||||
my ($nextlevel, $baseval, $datum) = @_;
|
||||
my $reftype = ref($datum);
|
||||
if ($reftype eq 'HASH') {
|
||||
dump_data($nextlevel, $baseval, \%{$datum});
|
||||
} elsif ($reftype eq 'ARRAY') {
|
||||
dump_data($nextlevel, $baseval, \@{$datum});
|
||||
} else {
|
||||
process_data($nextlevel, $baseval, $datum);
|
||||
}
|
||||
}
|
||||
|
||||
sub process_data
|
||||
{
|
||||
my ($nextlevel, $baseval, $datum) = @_;
|
||||
my $indentation = ' ' x $nextlevel;
|
||||
print $indentation, $baseval, ' = ', $datum, "\n";
|
||||
}
|
||||
|
||||
# METHOD: lock_run
|
||||
# PARAMS: file (plus path) to lock to
|
||||
# the current running pid (if not given will be set in script)
|
||||
# the current name of the script (auto set if not given)
|
||||
# optional write encoding (set to utf8 if not given)
|
||||
# RETURN: nothing
|
||||
# DESC: checks if this script is already running based on the lock file, if if yes will abort
|
||||
# if file is there but pid not find it automatically cleans up the stale lock file
|
||||
sub lock_run
|
||||
{
|
||||
my ($file, $run_pid, $name, $encoding) = @_;
|
||||
# if no encoding, set utf8
|
||||
$encoding = 'utf8' if (!$encoding);
|
||||
# set the run pid if no pid is given
|
||||
$run_pid = $$ if (!$run_pid);
|
||||
# set the script base name
|
||||
$name = File::Basename::fileparse($0) if (!$name);
|
||||
# if lock file exists
|
||||
if (-f $file) {
|
||||
my $exists = 0;
|
||||
my $pid = `cat $file`;
|
||||
chomp($pid);
|
||||
# printDebug("Lock file found for $pid", 1);
|
||||
# check if process excists with this pid
|
||||
# better todo A for ALL processes
|
||||
# ps axu OR short ps a
|
||||
open(PS, 'ps axu|') || die("$!");
|
||||
while (<PS>) {
|
||||
# search for pid and run file name
|
||||
if ($_ =~ /\ $pid\ / && $_ =~ /$name/) {
|
||||
$exists = 1;
|
||||
}
|
||||
last if ($exists);
|
||||
}
|
||||
close(PS);
|
||||
if (!$exists) {
|
||||
# printDebug("Lock file cleaned up for $pid", 1);
|
||||
unlink($file);
|
||||
} else {
|
||||
die("Script is already running with PID $pid\n");
|
||||
}
|
||||
}
|
||||
# write current PID into lock file
|
||||
open(FP, '>:encoding('.$encoding.')', $file) || die ("Cannot open run lock file '$file' for writing\n");
|
||||
print FP $run_pid;
|
||||
close(FP);
|
||||
}
|
||||
|
||||
# METHOD: printDebug
|
||||
# PARAMS: message, verbose level
|
||||
# RETURN: nothing
|
||||
# DESC: depeding on the verbose and debug settings it will print out message and or write it to a debug file
|
||||
sub printDebug
|
||||
{
|
||||
my($msg, $vrb, $dbg) = @_;
|
||||
# print debug only if debug is on and debug file is available
|
||||
print $::DEBUG '['.create_time(time(), 1).'] '.$msg."\n" if ($::debug && $::DEBUG);
|
||||
# print to log if log is accessable and the verbose flag matches, or for debug flag if debug statement is set and not log only, or if log only, if not debug statement
|
||||
print $::LOG $msg."\n" if (($::verbose >= $vrb || (!$::log_only && $dbg && $::debug) || ($::log_only && !$dbg)) && $::LOG);
|
||||
# print to screen if verbose matches, but it is not a log only, or if it is debug statement and debug flag is set
|
||||
print $msg."\n" if (($::verbose >= $vrb && !$::log_only) || ($dbg && $::debug));
|
||||
}
|
||||
|
||||
# METHOD: waitAbort
|
||||
# PARAMS: time in seconds, if not provided set to 5
|
||||
# RETURN: nothing
|
||||
# DESC: simple prints out a char while waiting for an abort command
|
||||
sub waitAbort
|
||||
{
|
||||
my($sleep) = @_;
|
||||
$sleep = 5 if ($sleep !~ /\d/);
|
||||
print "Waiting $sleep seconds (Press CTRL + C to abort)\n";
|
||||
for (my $i = 1; $i <= $sleep; $i ++) {
|
||||
print ".";
|
||||
sleep 1;
|
||||
}
|
||||
print "\n\n";
|
||||
}
|
||||
|
||||
# METHOD: copyToTemporary
|
||||
# PARAMS: file to copy, and target file name
|
||||
# RETURN: the target file name
|
||||
# DESC : sets the source to read only and makes a copy, the copy is also set to read only
|
||||
sub copyToTemporary
|
||||
{
|
||||
my ($source, $target) = @_;
|
||||
# get the current rights
|
||||
my $current_chmod = (stat $source)[2];
|
||||
# set source file ARGV to read only
|
||||
# we skip that, the source might be NOT from the same user as the script read, just copy the file and set the target read only
|
||||
chmod(0444, $source);
|
||||
# create tmp backup file from which we read, data gets removed at the end of an run, or during an abort call
|
||||
copy($source, $target) || die("Copy failed: $!\n");
|
||||
# set read rights to r only for the copied file
|
||||
chmod(0444, $target);
|
||||
# set old access rights for ARGV file
|
||||
chmod($current_chmod, $source);
|
||||
# return target file name
|
||||
return $target;
|
||||
}
|
||||
|
||||
# METHOD: uniq
|
||||
# PARAMS: @array
|
||||
# RETURN: array with only unique entries
|
||||
# DESC : used in uniq(@array) to get only unique data back
|
||||
sub uniq
|
||||
{
|
||||
my %seen;
|
||||
grep !$seen{$_}++, @_;
|
||||
}
|
||||
|
||||
# METHOD: clean_test
|
||||
# PARAMS: array of data
|
||||
# RETURN: cleaned up array of data
|
||||
# DESC : sets all undefs to '' for debug output
|
||||
sub clean_test
|
||||
{
|
||||
my (@data) = @_;
|
||||
# map check for defined, if not, return ''
|
||||
return map { defined($_) ? $_ : '' } @data;
|
||||
}
|
||||
|
||||
# METHOD: clean_test_string
|
||||
# PARAMS: string to be checked
|
||||
# RETURN: data or empty for output
|
||||
# DESC : sets all input data to '' if it is undefined
|
||||
sub clean_test_string
|
||||
{
|
||||
my ($data) = @_;
|
||||
return defined($data) ? $data : '';
|
||||
}
|
||||
|
||||
1;
|
||||
6
phpstan-bootstrap.php
Executable file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
// Boostrap file for PHPstand
|
||||
// sets the _SERVER['HTTP_HOST'] var so we can have DB detection
|
||||
$_SERVER['HTTP_HOST'] = 'soba.tokyo.tequila.jp';
|
||||
|
||||
// __END__
|
||||
55
phpstan.neon
Normal file
@@ -0,0 +1,55 @@
|
||||
# PHP Stan Config
|
||||
|
||||
parameters:
|
||||
tmpDir: /tmp/phpstan-corelibs
|
||||
level: 1
|
||||
paths:
|
||||
- %currentWorkingDirectory%/www
|
||||
#bootstrap: %currentWorkingDirectory%/phpstan-bootstrap.php
|
||||
#bootstrap: phpstan-bootstrap.php
|
||||
autoload_directories:
|
||||
autoload_files:
|
||||
- %currentWorkingDirectory%/phpstan-bootstrap.php
|
||||
- www/configs/config.master.php
|
||||
- www/lib/autoloader.php
|
||||
- www/vendor/autoload.php
|
||||
excludes_analyse:
|
||||
# no check admin
|
||||
- www/admin/qq_file_upload_front.php
|
||||
- www/admin/qq_file_upload_ajax.php
|
||||
# admin synlink files
|
||||
- www/admin/edit_access.php
|
||||
- www/admin/edit_groups.php
|
||||
- www/admin/edit_languages.php
|
||||
- www/admin/edit_menu_group.php
|
||||
- www/admin/edit_order.php
|
||||
- www/admin/edit_pages.php
|
||||
- www/admin/edit_schemes.php
|
||||
- www/admin/edit_users.php
|
||||
- www/admin/edit_visible_group.php
|
||||
# ignore admin header stuff
|
||||
- www/includes/admin_header.php # ignore the admin include stuff
|
||||
- www/includes/admin_footer.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
|
||||
# folders with data no check needed
|
||||
- www/templates_c
|
||||
- www/cache
|
||||
- www/log
|
||||
- www/media
|
||||
- www/tmp
|
||||
- www/lib/pChart
|
||||
- www/lib/pChart2.1.4
|
||||
- www/lib/Smarty/
|
||||
- www/lib/smarty-3.1.30/
|
||||
# ignore composer
|
||||
- www/vendor
|
||||
# ignore errores with
|
||||
# ignoreErrors:
|
||||
#- 'error regex'
|
||||
#-
|
||||
# message: 'error regex'
|
||||
# path: %currentWorkingDirectory%/www/some/*
|
||||
# paths:
|
||||
# - ...
|
||||
# - ...
|
||||
9
static_checkers.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
# main static checker
|
||||
phan --progress-bar -C -o 4dev/tmp/analysis.txt
|
||||
# sub static checker
|
||||
phpstan analyse -c phpstan.neon --memory-limit=4G -l 0 www
|
||||
# only if we work with composer only
|
||||
www/: psalm (this needs the composer autoloader defined)
|
||||
|
||||
# for linting
|
||||
parallel-lint www/
|
||||
@@ -1,4 +1,7 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
@@ -14,27 +17,41 @@ ob_start();
|
||||
// basic class test file
|
||||
define('USE_DATABASE', true);
|
||||
// sample config
|
||||
// require("config.inc");
|
||||
require 'config.php';
|
||||
// set session name
|
||||
if (!defined('SET_SESSION_NAME')) {
|
||||
DEFINE('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
}
|
||||
// define log file id
|
||||
DEFINE('LOG_FILE_ID', 'classTest');
|
||||
// set language for l10n
|
||||
$lang = 'en_utf8';
|
||||
$LOG_FILE_ID = 'classTest';
|
||||
|
||||
// init login & backend class
|
||||
$login = new CoreLibs\ACL\Login($DB_CONFIG[LOGIN_DB], $lang);
|
||||
$basic = new CoreLibs\Admin\Backend($DB_CONFIG[MAIN_DB], $lang);
|
||||
$basic->dbInfo(1);
|
||||
$login = new CoreLibs\ACL\Login(DB_CONFIG);
|
||||
$basic = new CoreLibs\Admin\Backend(DB_CONFIG);
|
||||
$basic->dbInfo(true);
|
||||
ob_end_flush();
|
||||
|
||||
echo "DB_CONFIG_SET constant: <pre>".print_r(DB_CONFIG, true)."</pre><br>";
|
||||
|
||||
$basic->hrRunningTime();
|
||||
$basic->runningTime();
|
||||
echo "RANDOM KEY [50]: ".$basic->randomKeyGen(50)."<br>";
|
||||
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
|
||||
echo "TIMED [def]: ".$basic->runningTime()."<br>";
|
||||
echo "TIMED [string]: ".$basic->runningtime_string."<br>";
|
||||
$basic->hrRunningTime();
|
||||
echo "RANDOM KEY [default]: ".$basic->randomKeyGen()."<br>";
|
||||
echo "TIMED [hr]: ".$basic->hrRunningTime()."<br>";
|
||||
|
||||
// color
|
||||
print "COLOR: -1, -1, -1: ".$basic->rgb2hex(-1, -1, -1)."<br>";
|
||||
print "COLOR: 10, 20, 30: ".$basic->rgb2hex(10, 20, 30)."<br>";
|
||||
|
||||
// set + check edit access id
|
||||
$edit_access_id = 3;
|
||||
if (isset($login) && is_object($login) && isset($login->acl['unit'])) {
|
||||
print "ACL UNIT: ".print_r(array_keys($login->acl['unit']), 1)."<br>";
|
||||
print "ACCESS CHECK: ".$login->loginCheckEditAccess($edit_access_id)."<br>";
|
||||
if (is_object($login) && isset($login->acl['unit'])) {
|
||||
print "ACL UNIT: ".print_r(array_keys($login->acl['unit']), true)."<br>";
|
||||
print "ACCESS CHECK: ".(string)$login->loginCheckEditAccess($edit_access_id)."<br>";
|
||||
if ($login->loginCheckEditAccess($edit_access_id)) {
|
||||
$basic->edit_access_id = $edit_access_id;
|
||||
} else {
|
||||
@@ -68,7 +85,7 @@ print "CALLER BACKTRACE: ".$basic->getCallerMethod()."<br>";
|
||||
$basic->debug('SOME MARK', 'Some error output');
|
||||
|
||||
print "EDIT ACCESS ID: ".$basic->edit_access_id."<br>";
|
||||
if (isset($login)) {
|
||||
if (is_object($login)) {
|
||||
// print "ACL: <br>".$basic->print_ar($login->acl)."<br>";
|
||||
$basic->debug('ACL', "ACL: ".$basic->printAr($login->acl));
|
||||
// print "DEFAULT ACL: <br>".$basic->print_ar($login->default_acl_list)."<br>";
|
||||
@@ -82,49 +99,58 @@ if (isset($login)) {
|
||||
// DB client encoding
|
||||
print "DB Client encoding: ".$basic->dbGetEncoding()."<br>";
|
||||
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test")) {
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test", 0, true)) {
|
||||
print "TIME: ".$res['time']."<br>";
|
||||
}
|
||||
print "CACHED DATA: <pre>".print_r($basic->cursor_ext, true)."</pre><br>";
|
||||
while ($res = $basic->dbReturn("SELECT * FROM max_test")) {
|
||||
print "[CACHED] TIME: ".$res['time']."<br>";
|
||||
}
|
||||
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO TEST ".time()."') RETURNING test");
|
||||
print "DIRECT INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
|
||||
print "DIRECT INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), 1)."<br>";
|
||||
print "DIRECT INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
print "DIRECT INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>";
|
||||
$basic->dbPrepare("ins_foo", "INSERT INTO foo (test) VALUES ($1)");
|
||||
$status = $basic->dbExecute("ins_foo", array('BAR TEST '.time()));
|
||||
print "PREPARE INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
|
||||
print "PREPARE INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), 1)."<br>";
|
||||
print "PREPARE INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
print "PREPARE INSERT PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>";
|
||||
// returning test with multiple entries
|
||||
// $status = $basic->db_exec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id");
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) values ('BAR 1 ".time()."'), ('BAR 2 ".time()."'), ('BAR 3 ".time()."') RETURNING foo_id, test");
|
||||
print "DIRECT MULTIPLE INSERT STATUS: $status | PRIMARY KEYS: ".print_r($basic->insert_id, 1)." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
|
||||
print "DIRECT MULTIPLE INSERT STATUS: $status | PRIMARY KEYS: ".print_r($basic->insert_id, true)." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
// no returning, but not needed ;
|
||||
$status = $basic->dbExec("INSERT INTO foo (test) VALUES ('FOO; TEST ".time()."');");
|
||||
print "DIRECT INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
|
||||
print "DIRECT INSERT STATUS: $status | PRIMARY KEY: ".$basic->insert_id." | PRIMARY KEY EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
// UPDATE WITH RETURNING
|
||||
$status = $basic->dbExec("UPDATE foo SET test = 'SOMETHING DIFFERENT' WHERE foo_id = 3688452 RETURNING test");
|
||||
print "UPDATE STATUS: $status | RETURNING EXT: ".print_r($basic->insert_id_ext, 1)."<br>";
|
||||
print "UPDATE STATUS: $status | RETURNING EXT: ".print_r($basic->insert_id_ext, true)."<br>";
|
||||
|
||||
# db write class test
|
||||
$table = 'foo';
|
||||
print "TABLE META DATA: ".$basic->printAr($basic->dbShowTableMetaData($table))."<br>";
|
||||
$primary_key = ''; # unset
|
||||
$db_write_table = array ('test', 'string_a', 'number_a', 'some_bool');
|
||||
// $db_write_table = array ('test');
|
||||
$object_fields_not_touch = array ();
|
||||
$object_fields_not_update = array ();
|
||||
$data = array ('test' => 'BOOL TEST SOMETHING '.time(), 'string_a' => 'SOME TEXT', 'number_a' => 5);
|
||||
$db_write_table = array('test', 'string_a', 'number_a', 'some_bool');
|
||||
// $db_write_table = array('test');
|
||||
$object_fields_not_touch = array();
|
||||
$object_fields_not_update = array();
|
||||
$data = array('test' => 'BOOL TEST SOMETHING '.time(), 'string_a' => 'SOME TEXT', 'number_a' => 5);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array ('test' => 'BOOL TEST ON '.time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1);
|
||||
$data = array('test' => 'BOOL TEST ON '.time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array ('test' => 'BOOL TEST OFF '.time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0);
|
||||
$data = array('test' => 'BOOL TEST OFF '.time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0);
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
$data = array ('test' => 'BOOL TEST UNSET '.time());
|
||||
$data = array('test' => 'BOOL TEST UNSET '.time());
|
||||
$primary_key = $basic->dbWriteDataExt($db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data);
|
||||
print "Wrote to DB tabel $table and got primary key $primary_key<br>";
|
||||
|
||||
// return Array Test
|
||||
$query = "SELECT type, sdate, integer FROM foobar";
|
||||
$data = $basic->dbReturnArray($query, true);
|
||||
print "Full foobar list: <br><pre>".print_r($data, true)."</pre><br>";
|
||||
|
||||
# async test queries
|
||||
/* $basic->dbExecAsync("SELECT test FROM foo, (SELECT pg_sleep(10)) as sub WHERE foo_id IN (27, 50, 67, 44, 10)");
|
||||
echo "WAITING FOR ASYNC: ";
|
||||
@@ -156,7 +182,7 @@ while (($ret = $basic->dbCheckAsync()) === true)
|
||||
flush();
|
||||
}
|
||||
print "<br>END STATUS: ".$ret." | PK: ".$basic->insert_id."<br>";
|
||||
print "ASYNC PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), 1)."<br>"; */
|
||||
print "ASYNC PREVIOUS INSERTED: ".print_r($basic->dbReturnRow("SELECT foo_id, test FROM foo WHERE foo_id = ".$basic->insert_id), true)."<br>"; */
|
||||
|
||||
$to_db_version = '9.1.9';
|
||||
print "VERSION DB: ".$basic->dbVersion()."<br>";
|
||||
@@ -198,6 +224,13 @@ if (round($timestamp, 4) == $basic->stringToTime($time_string)) {
|
||||
} else {
|
||||
print "REVERSE TRIME STRING DO NOT MATCH<br>";
|
||||
}
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(0, true)."<br>";
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(0.0, true)."<br>";
|
||||
print "ZERO TIME STRING: ".$basic->timeStringFormat(1.005, true)."<br>";
|
||||
|
||||
echo "HTML ENT INT: ".$basic->htmlent(5)."<br>";
|
||||
echo "HTML ENT STRING: ".$basic->htmlent('5<<>')."<br>";
|
||||
echo "HTML ENT NULL: ".$basic->htmlent(null)."<br>";
|
||||
|
||||
// magic links test
|
||||
print $basic->magicLinks('user@bubu.at').'<br>';
|
||||
@@ -208,8 +241,101 @@ $date_1 = '2017/1/5';
|
||||
$date_2 = '2017-01-05';
|
||||
print "COMPARE DATE: ".$basic->compareDate($date_1, $date_2)."<br>";
|
||||
|
||||
// recursive array search
|
||||
$test_array = array(
|
||||
'foo' => 'bar',
|
||||
'input' => array(
|
||||
'element_a' => array(
|
||||
'type' => 'text'
|
||||
),
|
||||
'element_b' => array(
|
||||
'type' => 'email'
|
||||
),
|
||||
'element_c' => array(
|
||||
'type' => 'email'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// array re
|
||||
echo "SOURCE ARRAY: ".$basic->printAr($test_array)."<br>";
|
||||
echo "FOUND ELEMENTS [base]: ".$basic->printAr($basic->arraySearchRecursive('email', $test_array, 'type'))."<br>";
|
||||
echo "FOUND ELEMENTS [input]: ".$basic->printAr($basic->arraySearchRecursive('email', $test_array['input'], 'type'))."<br>";
|
||||
|
||||
// *** BYTES TEST ***
|
||||
$bytes = array(
|
||||
-123123123,
|
||||
999999, // KB-1
|
||||
999999999, // MB-1
|
||||
254779258, // MB-n
|
||||
999999999999999, // TB-1
|
||||
588795544887632, // TB-n
|
||||
999999999999999999, // PB-1
|
||||
9223372036854775807, // MAX INT
|
||||
999999999999999999999, // EB-1
|
||||
);
|
||||
print "<b>BYTE FORMAT TESTS</b><br>";
|
||||
foreach ($bytes as $byte) {
|
||||
print '<div style="display: flex; border-bottom: 1px dashed gray;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "(".number_format($byte)."/".$byte.") bytes :";
|
||||
print '</div><div style="width: 40%;">';
|
||||
print $basic->humanReadableByteFormat($byte);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
//
|
||||
print '<div style="display: flex; border-bottom: 1px dotted red;">';
|
||||
//
|
||||
print '<div style="width: 35%; text-align: right; padding-right: 2px;">';
|
||||
print "bytes [si]:";
|
||||
print '</div><div style="width: 40%;">';
|
||||
// print $basic->byteStringFormat($byte, true, false, true);
|
||||
print $basic->humanReadableByteFormat($byte, $basic::BYTE_FORMAT_SI);
|
||||
print "</div>";
|
||||
//
|
||||
print "</div>";
|
||||
}
|
||||
|
||||
|
||||
// *** IMAGE TESTS ***
|
||||
echo "<hr>";
|
||||
// image thumbnail
|
||||
$images = array(
|
||||
// height bigger
|
||||
// 'no_picture.jpg',
|
||||
// 'no_picture.png',
|
||||
// width bigger
|
||||
// 'no_picture_width_bigger.jpg',
|
||||
// 'no_picture_width_bigger.png',
|
||||
// square
|
||||
// 'no_picture_square.jpg',
|
||||
// 'no_picture_square.png',
|
||||
// other sample images
|
||||
// '5c501af48da6c.jpg',
|
||||
// Apple HEIC files
|
||||
// 'img_2145.heic',
|
||||
// Photoshop
|
||||
'photoshop_test.psd',
|
||||
);
|
||||
$thumb_width = 250;
|
||||
$thumb_height = 300;
|
||||
// return mime type ala mimetype
|
||||
$finfo = new finfo(FILEINFO_MIME_TYPE);
|
||||
foreach ($images as $image) {
|
||||
$image = BASE.LAYOUT.CONTENT_PATH.IMAGES.$image;
|
||||
list ($height, $width, $img_type) = getimagesize($image);
|
||||
echo "<div>IMAGE INFO: ".$height."x".$width.", TYPE: ".$img_type." [".$finfo->file($image)."]</div>";
|
||||
// rotate image first
|
||||
$basic->correctImageOrientation($image);
|
||||
// thumbnail tests
|
||||
echo "<div>".basename($image).": WIDTH: $thumb_width<br><img src=".$basic->createThumbnailSimple($image, $thumb_width)."></div>";
|
||||
echo "<div>".basename($image).": HEIGHT: $thumb_height<br><img src=".$basic->createThumbnailSimple($image, 0, $thumb_height)."></div>";
|
||||
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height<br><img src=".$basic->createThumbnailSimple($image, $thumb_width, $thumb_height)."></div>";
|
||||
// test with dummy
|
||||
echo "<div>".basename($image).": WIDTH/HEIGHT: $thumb_width x $thumb_height (+DUMMY)<br><img src=".$basic->createThumbnailSimple($image, $thumb_width, $thumb_height, null, true, false)."></div>";
|
||||
echo "<hr>";
|
||||
}
|
||||
|
||||
// print error messages
|
||||
// print $login->printErrorMsg();
|
||||
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1 +1 @@
|
||||
../includes/edit_base.inc
|
||||
../includes/edit_base.php
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
@@ -11,8 +11,8 @@ if ($DEBUG_ALL) {
|
||||
|
||||
// sample config
|
||||
require 'config.php';
|
||||
echo "FILE: ".BASE.LIB."Error.Handling.inc<br>";
|
||||
require(BASE.LIB."Error.Handling.inc");
|
||||
echo "FILE: ".BASE.LIB."Error.Handling.php<br>";
|
||||
require(BASE.LIB."Error.Handling.php");
|
||||
|
||||
if ($var) {
|
||||
echo "OUT<br>";
|
||||
|
||||
@@ -1,17 +1,29 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
// debug for L10n issues in php 7.3
|
||||
|
||||
// namespace test
|
||||
ob_start();
|
||||
|
||||
// init language
|
||||
$lang = 'en_utf8';
|
||||
|
||||
// admin class tests
|
||||
require 'config.php';
|
||||
$l = new CoreLibs\Language\L10n($lang);
|
||||
|
||||
echo "OK<br>";
|
||||
|
||||
ob_end_flush();
|
||||
|
||||
$string = 'INPUT TEST';
|
||||
|
||||
echo "LANGUAGE SET: ".$l->__getLang()."<br>";
|
||||
echo "LANGUAGE FILE: ".$l->__getMoFile()."<br>";
|
||||
echo "INPUT TEST: ".$string." => ".$l->__($string)."<br>";
|
||||
|
||||
// switch to other language
|
||||
$lang = 'ja_utf8';
|
||||
$l->l10nReloadMOfile($lang);
|
||||
|
||||
echo "LANGUAGE SET: ".$l->__getLang()."<br>";
|
||||
echo "LANGUAGE FILE: ".$l->__getMoFile()."<br>";
|
||||
echo "INPUT TEST: ".$string." => ".$l->__($string)."<br>";
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
@@ -12,30 +10,32 @@ ob_start();
|
||||
|
||||
// admin class tests
|
||||
require 'config.php';
|
||||
DEFINE('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
$SET_SESSION_NAME = EDIT_SESSION_NAME;
|
||||
|
||||
echo "DIR: ".DIR."<br>ROOT: ".ROOT."<br>BASE: ".BASE."<br>";
|
||||
|
||||
$lang = 'ja_utf8';
|
||||
$base = new CoreLibs\Admin\Backend($DB_CONFIG[MAIN_DB], $lang);
|
||||
$base = new CoreLibs\Admin\Backend(DB_CONFIG);
|
||||
ob_end_flush();
|
||||
if ($base->getConnectionStatus()) {
|
||||
die("Cannot connect to database");
|
||||
}
|
||||
|
||||
print "Start time: ".$base->runningTime()."<br>";
|
||||
print "ByteStringFormat: ".$base->ByteStringFormat(1234567.12)."<br>";
|
||||
print "byteStringFormat: ".$base->byteStringFormat(1234567.12)."<br>";
|
||||
print "get_page_name [DEPRECATED]: ".$base->get_page_name()."<br>";
|
||||
print "HumanReadableByteFormat: ".$base->HumanReadableByteFormat(1234567.12)."<br>";
|
||||
print "humanReadableByteFormat: ".$base->humanReadableByteFormat(1234567.12)."<br>";
|
||||
// print "get_page_name [DEPRECATED]: ".$base->get_page_name()."<br>";
|
||||
print "getPageName: ".$base->getPageName()."<br>";
|
||||
|
||||
print "DB Info: ".$base->dbInfo(1)."<br>";
|
||||
print "DB Info: ".$base->dbInfo(true)."<br>";
|
||||
|
||||
|
||||
print "End Time: ".$base->runningTime()."<br>";
|
||||
print "Run Time: ".$base->runningTime()."<br>";
|
||||
$base->resetRunningtime();
|
||||
print "Start Time: ".$base->runningTime()."<br>";
|
||||
|
||||
print "Lang: ".$base->l->__getLang().", MO File: ".$base->l->__getMoFile()."<br>";
|
||||
print "Translate test: Year -> ".$base->l->__('Year')."<br>";
|
||||
|
||||
print "End Time: ".$base->runningTime()."<br>";
|
||||
// end error print
|
||||
print $base->printErrorMsg();
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Foo;
|
||||
|
||||
@@ -21,3 +21,14 @@ class FooBar
|
||||
echo "B: $wrong<br>";
|
||||
}
|
||||
}
|
||||
|
||||
$foo = $bar ?? 'EMPTY';
|
||||
echo "BAR: ".$foo."<br>";
|
||||
// define('DS', DIRECTORY_SEPARATOR);
|
||||
$ds = defined('DS') ? DS : DIRECTORY_SEPARATOR;
|
||||
$du = DS ?? DIRECTORY_SEPARATOR;
|
||||
echo "DS is: ".$ds."<br>";
|
||||
|
||||
echo "SERVER HOST: ".$_SERVER['HTTP_HOST']."<br>";
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -16,7 +16,7 @@ $MAX_UPLOAD_SIZE = $base->StringByteFormat(ini_get('upload_max_filesize'));
|
||||
$allowedExtensions = array ('csv', 'zip', 'jpg', 'pdf', 'bz2');
|
||||
$sizeLimit = $MAX_UPLOAD_SIZE; // as set in php ini
|
||||
$base->debug('AJAX UPLOAD', 'Size: '.$sizeLimit.', Memory Limit: '.ini_get('memory_limit'));
|
||||
$uploader = new CoreLibs\Upload\qqFileUploader($allowedExtensions, $sizeLimit);
|
||||
$uploader = new FileUpload\qqFileUploader($allowedExtensions, $sizeLimit);
|
||||
// either in post or get
|
||||
$_action= $_POST['action'] ? $_POST['action'] : $_GET['action'];
|
||||
$_task_uid = $_POST['task_uid'] ? $_POST['task_uid'] : $_GET['task_uid'];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
$ENABLE_ERROR_HANDLING = 0;
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
@@ -9,24 +9,27 @@ $LOG_PER_RUN = 1;
|
||||
define('USE_DATABASE', true);
|
||||
define('USE_HEADER', true);
|
||||
require 'config.php';
|
||||
require BASE.INCLUDES.'admin_header.inc';
|
||||
$MASTER_TEMPLATE_NAME = 'main_body.tpl';
|
||||
$TEMPLATE_NAME = 'smarty_test.tpl';
|
||||
$CSS_NAME = 'smart_test.css';
|
||||
$USE_PROTOTYPE = false;
|
||||
$USE_JQUERY = true;
|
||||
if ($USE_PROTOTYPE) {
|
||||
$ADMIN_JAVASCRIPT = 'edit.pt.js';
|
||||
$JS_NAME = 'prototype.test.js';
|
||||
} elseif ($USE_JQUERY) {
|
||||
$ADMIN_JAVASCRIPT = 'edit.jq.js';
|
||||
$JS_NAME = 'jquery.test.js';
|
||||
require BASE.INCLUDES.'admin_header.php';
|
||||
$smarty->MASTER_TEMPLATE_NAME = 'main_body.tpl';
|
||||
$smarty->TEMPLATE_NAME = 'smarty_test.tpl';
|
||||
$smarty->CSS_SPECIAL_TEMPLATE_NAME = 'smart_test.css';
|
||||
$smarty->USE_PROTOTYPE = false;
|
||||
$smarty->USE_JQUERY = true;
|
||||
$smarty->JS_DATEPICKR = false;
|
||||
if ($smarty->USE_PROTOTYPE) {
|
||||
$smarty->ADMIN_JAVASCRIPT = 'edit.pt.js';
|
||||
$smarty->JS_SPECIAL_TEMPLATE_NAME = 'prototype.test.js';
|
||||
} elseif ($smarty->USE_JQUERY) {
|
||||
$smarty->ADMIN_JAVASCRIPT = 'edit.jq.js';
|
||||
$smarty->JS_SPECIAL_TEMPLATE_NAME = 'jquery.test.js';
|
||||
}
|
||||
$PAGE_WIDTH = "100%";
|
||||
require BASE.INCLUDES.'admin_set_paths.inc';
|
||||
$smarty->PAGE_WIDTH = "100%";
|
||||
// require BASE.INCLUDES.'admin_set_paths.php';
|
||||
$smarty->setSmartyPaths();
|
||||
|
||||
// smarty test
|
||||
$cms->DATA['SMARTY_TEST'] = 'Test Data';
|
||||
$smarty->DATA['SMARTY_TEST'] = 'Test Data';
|
||||
$smarty->DATA['TRANSLATE_TEST'] = $cms->l->__('Are we translated?');
|
||||
|
||||
// drop down test with optgroups
|
||||
$options = array (
|
||||
@@ -45,7 +48,8 @@ $options = array (
|
||||
)
|
||||
);
|
||||
|
||||
$cms->DATA['drop_down_test'] = $options;
|
||||
$smarty->DATA['drop_down_test'] = $options;
|
||||
|
||||
require BASE.INCLUDES.'admin_smarty.inc';
|
||||
require BASE.INCLUDES.'admin_footer.inc';
|
||||
// require BASE.INCLUDES.'admin_smarty.php';
|
||||
$smarty->setSmartyVarsAdmin();
|
||||
require BASE.INCLUDES.'admin_footer.php';
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
<?php
|
||||
/**
|
||||
* @phan-file-suppress PhanTypeSuspiciousStringExpression
|
||||
*/
|
||||
|
||||
namespace CoreLibs;
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
@@ -6,16 +11,15 @@ $PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
// admin class tests
|
||||
// require 'config.inc';
|
||||
require 'config.php';
|
||||
DEFINE('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
$base = new CoreLibs\Basic();
|
||||
$SET_SESSION_NAME = EDIT_SESSION_NAME;
|
||||
$base = new Basic();
|
||||
|
||||
print "THIS HOST: ".HOST_NAME.", with PROTOCOL: ".HOST_PROTOCOL." is running SSL: ".HOST_SSL."<br>";
|
||||
print "DIR: ".DIR."<br>";
|
||||
print "BASE: ".BASE."<br>";
|
||||
print "ROOT: ".ROOT."<br>";
|
||||
print "HOST: ".$HOST_NAME." => DB HOST: ".$DB_HOST[$HOST_NAME]." => ".MAIN_DB."<br>";
|
||||
print "HOST: ".HOST_NAME." => DB HOST: ".DB_CONFIG_NAME." => ".print_r(DB_CONFIG, true)."<br>";
|
||||
|
||||
$text = 'I am some text
|
||||
with some
|
||||
@@ -43,7 +47,7 @@ print "LB remove: ".$base->removeLB($text, '##BR##')."<br>";
|
||||
// )
|
||||
// );
|
||||
|
||||
$base->debug('ARRAY', $base->printAr($test));
|
||||
// $base->debug('ARRAY', $base->printAr($test));
|
||||
|
||||
function rec($pre, $cur, $node = array ())
|
||||
{
|
||||
@@ -82,6 +86,7 @@ function flattenArrayKey(array $array, array $return = array ())
|
||||
return $return;
|
||||
}
|
||||
|
||||
$test = array ();
|
||||
// core
|
||||
$test = rec('', 'A', $test);
|
||||
$test = rec('', '1', $test);
|
||||
|
||||
12
www/composer.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "gullevek/www",
|
||||
"description": "CoreLibs",
|
||||
"type": "library",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Clemens Schwaighofer",
|
||||
"email": "clemens.schwaighofer@egplusww.com"
|
||||
}
|
||||
],
|
||||
"require": {}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2018/10/11
|
||||
@@ -8,13 +8,13 @@
|
||||
*********************************************************************/
|
||||
|
||||
// please be VERY carefull only to change the right side
|
||||
$DB_CONFIG = array (
|
||||
'test' => array (
|
||||
$DB_CONFIG = array(
|
||||
'test' => array(
|
||||
'db_name' => 'gullevek',
|
||||
'db_user' => 'gullevek',
|
||||
'db_pass' => 'gullevek',
|
||||
'db_host' => 'db.tokyo.tequila.jp',
|
||||
'db_port' => '5432',
|
||||
'db_port' => 5432,
|
||||
'db_schema' => 'public',
|
||||
'db_type' => 'pgsql',
|
||||
'db_encoding' => '',
|
||||
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2018/10/11
|
||||
* SHORT DESCRIPTION:
|
||||
* configuration file for core host settings
|
||||
* - DB access name (array group from config.db)
|
||||
* - location (test/stage/live)
|
||||
* - debug flag (true/false)
|
||||
* - DB path (eg PUBLIC_SCHEMA)
|
||||
* - stie lang
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
// each host has a different db_host
|
||||
// development host
|
||||
$DB_HOST['soba.tokyo.tequila.jp'] = 'test';
|
||||
// target host (live)
|
||||
// $DB_TARGET_HOST['soba'] = '<DB ID>';
|
||||
// url redirect database
|
||||
// $DB_URL_REDIRECT_HOST['soba'] = '<DB ID>';
|
||||
// location flagging
|
||||
// test/dev/live
|
||||
$LOCATION['soba.tokyo.tequila.jp'] = 'test';
|
||||
// show DEBUG override
|
||||
// true/false
|
||||
$DEBUG_FLAG['soba.tokyo.tequila.jp'] = true;
|
||||
// set postgresql paths (schemas)
|
||||
$DB_PATH['soba.tokyo.tequila.jp'] = PUBLIC_SCHEMA;
|
||||
// site language
|
||||
$SITE_LANG['soba.tokyo.tequila.jp'] = 'en_utf8';
|
||||
|
||||
// __END__
|
||||
44
www/configs/config.host.php
Executable file
@@ -0,0 +1,44 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2018/10/11
|
||||
* SHORT DESCRIPTION:
|
||||
* configuration file for core host settings
|
||||
* - DB access name (array group from config.db)
|
||||
* - location (test/stage/live)
|
||||
* - debug flag (true/false)
|
||||
* - site lang
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
// other master config to attach
|
||||
// $__LOCAL_CONFIG = array(
|
||||
// 'db_host' => '',
|
||||
// 'location' => '',
|
||||
// 'debug_flag' => true,
|
||||
// 'site_lang' => 'en_utf8',
|
||||
// 'login_enabled' => true
|
||||
// );
|
||||
|
||||
// each host has a different db_host
|
||||
$SITE_CONFIG = array(
|
||||
// development host
|
||||
'soba.tokyo.tequila.jp' => array(
|
||||
// db config selection
|
||||
'db_host' => 'test',
|
||||
// other db connections
|
||||
// 'db_host_target' => '',
|
||||
// 'db_host_other' => '',
|
||||
// location flagging (test/dev/live) for debug output
|
||||
'location' => 'test',
|
||||
// show DEBUG override
|
||||
'debug_flag' => true,
|
||||
// site language
|
||||
'site_lang' => 'en_utf8',
|
||||
// enable/disable login override
|
||||
'login_enabled' => true
|
||||
),
|
||||
// 'other.host.com' => $__LOCAL_CONFIG
|
||||
);
|
||||
|
||||
// __END__
|
||||
@@ -1,263 +0,0 @@
|
||||
<?php
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2003/06/10
|
||||
* SHORT DESCRIPTION:
|
||||
* configuration file
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
/************* PATHS *********************/
|
||||
// directory seperator
|
||||
DEFINE('DS', DIRECTORY_SEPARATOR);
|
||||
// ** NEW/BETTER DIR DECLARATIONS **
|
||||
// path to original file (if symlink)
|
||||
DEFINE('DIR', __DIR__.DS);
|
||||
// base dir root folder level
|
||||
DEFINE('BASE', str_replace('/configs', '', __DIR__).DS);
|
||||
|
||||
// ** OLD DIR DECLARATIONS **
|
||||
// path to document root of file called
|
||||
DEFINE('ROOT', getcwd().DS);
|
||||
// libs path
|
||||
DEFINE('LIB', 'lib'.DS);
|
||||
DEFINE('LIBS', 'lib'.DS);
|
||||
// configs folder
|
||||
DEFINE('CONFIGS', 'configs'.DS);
|
||||
// includes (strings, arrays for static, etc)
|
||||
DEFINE('INCLUDES', 'includes'.DS);
|
||||
// data folder (mostly in includes)
|
||||
DEFINE('DATA', 'data'.DS);
|
||||
// layout base path
|
||||
DEFINE('LAYOUT', 'layout'.DS);
|
||||
// pic-root (compatible to CMS)
|
||||
DEFINE('PICTURES', 'images'.DS);
|
||||
// images
|
||||
DEFINE('IMAGES', 'images'.DS);
|
||||
// icons (below the images/ folder)
|
||||
DEFINE('ICONS', 'icons'.DS);
|
||||
// media
|
||||
DEFINE('MEDIA', 'media'.DS);
|
||||
// flash-root (below media)
|
||||
DEFINE('FLASH', 'flash'.DS);
|
||||
// uploads (anything to keep)
|
||||
DEFINE('UPLOADS', 'uploads'.DS);
|
||||
// files (binaries) (below media)
|
||||
DEFINE('BINARIES', 'binaries'.DS);
|
||||
// files (videos) (below media)
|
||||
DEFINE('VIDEOS', 'videos'.DS);
|
||||
// files (documents) (below media)
|
||||
DEFINE('DOCUMENTS', 'documents'.DS);
|
||||
// files (pdfs) (below media)
|
||||
DEFINE('PDFS', 'documents'.DS);
|
||||
// CSV
|
||||
DEFINE('CSV', 'csv'.DS);
|
||||
// css
|
||||
DEFINE('CSS', 'css'.DS);
|
||||
// js
|
||||
DEFINE('JS', 'javascript'.DS);
|
||||
// table arrays
|
||||
DEFINE('TABLE_ARRAYS', 'table_arrays'.DS);
|
||||
// smarty libs path
|
||||
DEFINE('SMARTY', 'Smarty'.DS);
|
||||
// po langs
|
||||
DEFINE('LANG', 'lang'.DS);
|
||||
// cache path
|
||||
DEFINE('CACHE', 'cache'.DS);
|
||||
// temp path
|
||||
DEFINE('TMP', 'tmp'.DS);
|
||||
// log files
|
||||
DEFINE('LOG', 'log'.DS);
|
||||
// compiled template folder
|
||||
DEFINE('TEMPLATES_C', 'templates_c'.DS);
|
||||
// template base
|
||||
DEFINE('TEMPLATES', 'templates'.DS);
|
||||
|
||||
/************* HASH / ACL DEFAULT / ERROR SETTINGS / SMARTY *************/
|
||||
// default hash type
|
||||
DEFINE('DEFAULT_HASH', 'sha256');
|
||||
// default acl level
|
||||
DEFINE('DEFAULT_ACL_LEVEL', 80);
|
||||
// default levels for certain actions
|
||||
/* DEFINE('DEFAULT_ACL_READ', 20);
|
||||
DEFINE('DEFAULT_ACL_CONFIRM', 35);
|
||||
DEFINE('DEFAULT_ACL_MOD', 40);
|
||||
DEFINE('DEFAULT_ACL_WRITE', 60);
|
||||
DEFINE('DEFAULT_ACL_SEND', 70);
|
||||
DEFINE('DEFAULT_ACL_DEL', 80);
|
||||
DEFINE('DEFAULT_ACL_ADMIN', 100); */
|
||||
// SSL host name
|
||||
// DEFINE('SSL_HOST', 'ssl.host.name');
|
||||
// error page strictness, Default is 3
|
||||
// 1: only show error page as the last mesure if really no mid & aid can be loaded and found at all
|
||||
// 2: if template not found, do not search, show error template
|
||||
// 3: if default template is not found, show error template, do not fall back to default tree
|
||||
// 4: very strict, even on normal fixable errors through error
|
||||
// DEFINE('ERROR_STRICT', 3);
|
||||
// allow page caching in general, set to 'FALSE' if you do debugging or development!
|
||||
// DEFINE('ALLOW_SMARTY_CACHE', FALSE);
|
||||
// cache life time, in second', default here is 2 days (172800s)
|
||||
// -1 is never expire cache
|
||||
// DEFINE('SMARTY_CACHE_LIFETIME', -1);
|
||||
|
||||
/************* LOGOUT ********************/
|
||||
// logout target
|
||||
DEFINE('LOGOUT_TARGET', '');
|
||||
// password change allowed
|
||||
DEFINE('PASSWORD_CHANGE', false);
|
||||
// min/max password length
|
||||
DEFINE('PASSWORD_MIN_LENGTH', 8);
|
||||
DEFINE('PASSWORD_MAX_LENGTH', 255);
|
||||
|
||||
/************* AJAX / ACCESS *************/
|
||||
// ajax request type
|
||||
DEFINE('AJAX_REQUEST_TYPE', 'POST');
|
||||
// what AJAX type to use
|
||||
DEFINE('USE_PROTOTYPE', true);
|
||||
DEFINE('USE_SCRIPTACULOUS', false);
|
||||
DEFINE('USE_JQUERY', false);
|
||||
|
||||
/************* LAYOUT WIDTHS *************/
|
||||
DEFINE('PAGE_WIDTH', 800);
|
||||
// the default template name
|
||||
DEFINE('MASTER_TEMPLATE_NAME', 'main_body.tpl');
|
||||
|
||||
/************* SESSION NAMES *************/
|
||||
// server name HASH
|
||||
DEFINE('SERVER_NAME_HASH', hash('crc32b', $_SERVER['HTTP_HOST']));
|
||||
// backend
|
||||
DEFINE('EDIT_SESSION_NAME', 'ADMIN_SESSION_NAME'.SERVER_NAME_HASH);
|
||||
// frontend
|
||||
DEFINE('SESSION_NAME', 'SESSION_NAME'.SERVER_NAME_HASH);
|
||||
// SET_SESSION_NAME should be set in the header if a special session name is needed
|
||||
// DEFINE('SET_SESSION_NAME', SESSION_NAME);
|
||||
|
||||
/************* CACHE/COMPILE IDS *************/
|
||||
DEFINE('CACHE_ID', 'CACHE_'.SERVER_NAME_HASH);
|
||||
DEFINE('COMPILE_ID', 'COMPILE_'.SERVER_NAME_HASH);
|
||||
|
||||
/************* LANGUAGE / ENCODING *******/
|
||||
DEFINE('DEFAULT_LANG', 'en_utf8');
|
||||
// default web page encoding setting
|
||||
DEFINE('DEFAULT_ENCODING', 'UTF-8');
|
||||
|
||||
// below two can be defined here, but they should be
|
||||
// defined in either the header file or the file itself
|
||||
/************* LOGGING *******************/
|
||||
// DEFINE('LOG_FILE_ID', '');
|
||||
|
||||
/************* QUEUE TABLE *************/
|
||||
// if we have a dev/live system
|
||||
// set_live is a per page/per item
|
||||
// live_queue is a global queue system
|
||||
// DEFINE('QUEUE', 'live_queue');
|
||||
|
||||
/************* DB PATHS (PostgreSQL) *****************/
|
||||
// schema names, can also be defined per <DB INFO>
|
||||
DEFINE('PUBLIC_SCHEMA', 'public');
|
||||
DEFINE('DEV_SCHEMA', 'public');
|
||||
DEFINE('TEST_SCHEMA', 'public');
|
||||
DEFINE('LIVE_SCHEMA', 'public');
|
||||
|
||||
/************* DB ACCESS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.db.inc')) {
|
||||
require BASE.CONFIGS.'config.db.inc';
|
||||
}
|
||||
/************* CORE HOST SETTINGS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.host.inc')) {
|
||||
require BASE.CONFIGS.'config.host.inc';
|
||||
}
|
||||
/************* OTHER PATHS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.path.inc')) {
|
||||
require BASE.CONFIGS.'config.path.inc';
|
||||
}
|
||||
|
||||
// set the USE_DATABASE var, if there is nothing set, we assume TRUE
|
||||
$USE_DATABASE = defined('USE_DATABASE') ? USE_DATABASE : true;
|
||||
|
||||
// live frontend pages
|
||||
// ** missing live domains **
|
||||
// get the name without the port
|
||||
list($HOST_NAME) = array_pad(explode(':', $_SERVER['HTTP_HOST'], 2), 2, null);
|
||||
if (!isset($DB_HOST[$HOST_NAME]) && $USE_DATABASE) {
|
||||
echo 'No matching DB config found. Contact Admin<br>';
|
||||
exit -1;
|
||||
}
|
||||
// set HOST name
|
||||
DEFINE('HOST_NAME', $HOST_NAME);
|
||||
// set SSL on
|
||||
if ((array_key_exists('HTTPS', $_SERVER) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ||
|
||||
$_SERVER['SERVER_PORT'] == 443) {
|
||||
DEFINE('HOST_SSL', true);
|
||||
DEFINE('HOST_PROTOCOL', 'https://');
|
||||
} else {
|
||||
DEFINE('HOST_SSL', false);
|
||||
DEFINE('HOST_PROTOCOL', 'http://');
|
||||
}
|
||||
// define the static names
|
||||
DEFINE('LOGIN_DB', $DB_HOST[$HOST_NAME]);
|
||||
DEFINE('MAIN_DB', $DB_HOST[$HOST_NAME]);
|
||||
DEFINE('DB_SCHEMA', $DB_PATH[$HOST_NAME]);
|
||||
// DEFINE('TARGET_DB', $DB_TARGET_HOST[$HOST_NAME]);
|
||||
// DEFINE('URL_REDIRECT_DB', $DB_URL_REDIRECT_HOST[$HOST_NAME]);
|
||||
// next three if top is not set
|
||||
// DEFINE('TEST_SCHEMA', $DB_CONFIG[MAIN_DB]['db_schema']);
|
||||
// DEFINE('DEV_SCHEMA', $DB_CONFIG[MAIN_DB]['db_schema']);
|
||||
// DEFINE('PUBLIC_SCHEMA', $DB_CONFIG[TARGET_DB]['db_schema']);
|
||||
DEFINE('LOGIN_DB_SCHEMA', PUBLIC_SCHEMA); // where the edit* tables are
|
||||
DEFINE('GLOBAL_DB_SCHEMA', PUBLIC_SCHEMA); // where global tables are that are used by all schemas (eg queue tables for online, etc)
|
||||
DEFINE('TARGET', $LOCATION[$HOST_NAME]);
|
||||
// DEFINE('CSV_PATH', $PATHS[TARGET]['csv_path']);
|
||||
// DEFINE('EXPORT_SCRIPT', $PATHS[TARGET]['perl_bin']);
|
||||
// DEFINE('REDIRECT_URL', $PATHS[TARGET]['redirect_url']);
|
||||
DEFINE('DEBUG', $DEBUG_FLAG[$HOST_NAME]);
|
||||
DEFINE('SITE_LANG', $SITE_LANG[$HOST_NAME]);
|
||||
|
||||
DEFINE('SHOW_ALL_ERRORS', true); // show all errors if debug_all & show_error_handling are enabled
|
||||
|
||||
/************* GENERAL PAGE TITLE ********/
|
||||
DEFINE('G_TITLE', '<OVERALL FALLBACK PAGE TITLE>');
|
||||
|
||||
/************ STYLE SHEETS / JS **********/
|
||||
DEFINE('ADMIN_STYLESHEET', 'edit.css');
|
||||
DEFINE('ADMIN_JAVASCRIPT', 'edit.js');
|
||||
DEFINE('STYLESHEET', 'frontend.css');
|
||||
DEFINE('JAVASCRIPT', 'frontend.js');
|
||||
|
||||
// anything optional
|
||||
/************* INTERNAL ******************/
|
||||
// any other global definitons here
|
||||
// DEFINE('SOME_ID', <SOME VALUE>);
|
||||
|
||||
/************* CONVERT *******************/
|
||||
$paths = array (
|
||||
'/bin',
|
||||
'/usr/bin',
|
||||
'/usr/local/bin'
|
||||
);
|
||||
// find convert
|
||||
foreach ($paths as $path) {
|
||||
if (file_exists($path.DS.'convert') && is_file($path.DS.'convert')) {
|
||||
// image magick convert location
|
||||
DEFINE('CONVERT', $path.DS.'convert');
|
||||
}
|
||||
}
|
||||
|
||||
// turn off debug if debug flag is OFF
|
||||
if (defined('DEBUG') && DEBUG == false) {
|
||||
$ECHO_ALL = 0;
|
||||
$DEBUG_ALL = 0;
|
||||
$PRINT_ALL = 0;
|
||||
$DB_DEBUG = 0;
|
||||
$ENABLE_ERROR_HANDLING = 0;
|
||||
} else {
|
||||
$ECHO_ALL = 0;
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
}
|
||||
|
||||
// read auto loader
|
||||
require BASE.LIB.'autoloader.php';
|
||||
|
||||
// __END__
|
||||
288
www/configs/config.master.php
Normal file
@@ -0,0 +1,288 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2003/06/10
|
||||
* SHORT DESCRIPTION:
|
||||
* configuration file
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
/************* PATHS *********************/
|
||||
// directory seperator
|
||||
define('DS', DIRECTORY_SEPARATOR);
|
||||
// ** NEW/BETTER DIR DECLARATIONS **
|
||||
// path to original file (if symlink)
|
||||
define('DIR', __DIR__.DS);
|
||||
// base dir root folder level
|
||||
define('BASE', str_replace('/configs', '', __DIR__).DS);
|
||||
|
||||
// ** OLD DIR DECLARATIONS **
|
||||
// path to document root of file called
|
||||
define('ROOT', getcwd().DS);
|
||||
// libs path
|
||||
define('LIB', 'lib'.DS);
|
||||
define('LIBS', 'lib'.DS);
|
||||
// configs folder
|
||||
define('CONFIGS', 'configs'.DS);
|
||||
// includes (strings, arrays for static, etc)
|
||||
define('INCLUDES', 'includes'.DS);
|
||||
// data folder (mostly in includes)
|
||||
define('DATA', 'data'.DS);
|
||||
// layout base path
|
||||
define('LAYOUT', 'layout'.DS);
|
||||
// pic-root (compatible to CMS)
|
||||
define('PICTURES', 'images'.DS);
|
||||
// images
|
||||
define('IMAGES', 'images'.DS);
|
||||
// icons (below the images/ folder)
|
||||
define('ICONS', 'icons'.DS);
|
||||
// media
|
||||
define('MEDIA', 'media'.DS);
|
||||
// flash-root (below media)
|
||||
define('FLASH', 'flash'.DS);
|
||||
// uploads (anything to keep)
|
||||
define('UPLOADS', 'uploads'.DS);
|
||||
// files (binaries) (below media)
|
||||
define('BINARIES', 'binaries'.DS);
|
||||
// files (videos) (below media)
|
||||
define('VIDEOS', 'videos'.DS);
|
||||
// files (documents) (below media)
|
||||
define('DOCUMENTS', 'documents'.DS);
|
||||
// files (pdfs) (below media)
|
||||
define('PDFS', 'documents'.DS);
|
||||
// CSV
|
||||
define('CSV', 'csv'.DS);
|
||||
// css
|
||||
define('CSS', 'css'.DS);
|
||||
// font (web)
|
||||
define('FONT', 'font'.DS);
|
||||
// js
|
||||
define('JS', 'javascript'.DS);
|
||||
// table arrays
|
||||
define('TABLE_ARRAYS', 'table_arrays'.DS);
|
||||
// smarty libs path
|
||||
define('SMARTY', 'Smarty'.DS);
|
||||
// po langs
|
||||
define('LANG', 'lang'.DS);
|
||||
// cache path
|
||||
define('CACHE', 'cache'.DS);
|
||||
// temp path
|
||||
define('TMP', 'tmp'.DS);
|
||||
// log files
|
||||
define('LOG', 'log'.DS);
|
||||
// compiled template folder
|
||||
define('TEMPLATES_C', 'templates_c'.DS);
|
||||
// template base
|
||||
define('TEMPLATES', 'templates'.DS);
|
||||
|
||||
/************* HASH / ACL DEFAULT / ERROR SETTINGS / SMARTY *************/
|
||||
// default hash type
|
||||
define('DEFAULT_HASH', 'sha256');
|
||||
// default acl level
|
||||
define('DEFAULT_ACL_LEVEL', 80);
|
||||
// SSL host name
|
||||
// define('SSL_HOST', 'ssl.host.name');
|
||||
// error page strictness, Default is 3
|
||||
// 1: only show error page as the last mesure if really no mid & aid can be loaded and found at all
|
||||
// 2: if template not found, do not search, show error template
|
||||
// 3: if default template is not found, show error template, do not fall back to default tree
|
||||
// 4: very strict, even on normal fixable errors through error
|
||||
// define('ERROR_STRICT', 3);
|
||||
// allow page caching in general, set to 'FALSE' if you do debugging or development!
|
||||
// define('ALLOW_SMARTY_CACHE', false);
|
||||
// cache life time, in second', default here is 2 days (172800s)
|
||||
// -1 is never expire cache
|
||||
// define('SMARTY_CACHE_LIFETIME', -1);
|
||||
|
||||
/************* LOGOUT ********************/
|
||||
// logout target
|
||||
define('LOGOUT_TARGET', '');
|
||||
// password change allowed
|
||||
define('PASSWORD_CHANGE', false);
|
||||
define('PASSWORD_FORGOT', false);
|
||||
// min/max password length
|
||||
define('PASSWORD_MIN_LENGTH', 8);
|
||||
define('PASSWORD_MAX_LENGTH', 255);
|
||||
|
||||
/************* AJAX / ACCESS *************/
|
||||
// ajax request type
|
||||
define('AJAX_REQUEST_TYPE', 'POST');
|
||||
// what AJAX type to use
|
||||
define('USE_PROTOTYPE', false);
|
||||
define('USE_SCRIPTACULOUS', false);
|
||||
define('USE_JQUERY', true);
|
||||
|
||||
/************* LAYOUT WIDTHS *************/
|
||||
define('PAGE_WIDTH', 800);
|
||||
define('CONTENT_WIDTH', 800);
|
||||
// the default template name
|
||||
define('MASTER_TEMPLATE_NAME', 'main_body.tpl');
|
||||
|
||||
/************* OVERALL CONTROL NAMES *************/
|
||||
// BELOW has HAS to be changed
|
||||
// base name for all session and log names
|
||||
define('BASE_NAME', 'CoreLibs');
|
||||
|
||||
/************* SESSION NAMES *************/
|
||||
// server name HASH
|
||||
define('SERVER_NAME_HASH', hash('crc32b', $_SERVER['HTTP_HOST']));
|
||||
define('SERVER_PATH_HASH', hash('crc32b', BASE));
|
||||
// backend
|
||||
define('EDIT_SESSION_NAME', BASE_NAME.'Admin'.SERVER_NAME_HASH.SERVER_PATH_HASH);
|
||||
// frontend
|
||||
define('SESSION_NAME', BASE_NAME.SERVER_NAME_HASH.SERVER_PATH_HASH);
|
||||
// SET_SESSION_NAME should be set in the header if a special session name is needed
|
||||
define('SET_SESSION_NAME', SESSION_NAME);
|
||||
|
||||
/************* CACHE/COMPILE IDS *************/
|
||||
define('CACHE_ID', 'CACHE_'.BASE_NAME.'_'.SERVER_NAME_HASH);
|
||||
define('COMPILE_ID', 'COMPILE_'.BASE_NAME.'_'.SERVER_NAME_HASH);
|
||||
|
||||
/************* LANGUAGE / ENCODING *******/
|
||||
define('DEFAULT_LANG', 'en_utf8');
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
|
||||
/************* LOGGING *******************/
|
||||
// below two can be defined here, but they should be
|
||||
// defined in either the header file or the file itself
|
||||
// as $LOG_FILE_ID which takes presence over LOG_FILE_ID
|
||||
// see Basic class constructor
|
||||
define('LOG_FILE_ID', BASE_NAME);
|
||||
|
||||
/************* CLASS ERRORS *******************/
|
||||
// 0 = default all OFF
|
||||
// 1 = throw notice on unset class var
|
||||
// 2 = no notice on unset class var, but do not set undefined class var
|
||||
// 3 = throw error and do not set class var
|
||||
define('CLASS_VARIABLE_ERROR_MODE', 3);
|
||||
|
||||
/************* QUEUE TABLE *************/
|
||||
// if we have a dev/live system
|
||||
// set_live is a per page/per item
|
||||
// live_queue is a global queue system
|
||||
// define('QUEUE', 'live_queue');
|
||||
|
||||
/************* DB PATHS (PostgreSQL) *****************/
|
||||
// schema names, can also be defined per <DB INFO>
|
||||
define('PUBLIC_SCHEMA', 'public');
|
||||
define('DEV_SCHEMA', 'public');
|
||||
define('TEST_SCHEMA', 'public');
|
||||
define('LIVE_SCHEMA', 'public');
|
||||
|
||||
/************* CORE HOST SETTINGS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.host.php')) {
|
||||
require BASE.CONFIGS.'config.host.php';
|
||||
}
|
||||
if (!isset($SITE_CONFIG)) {
|
||||
$SITE_CONFIG = array();
|
||||
}
|
||||
/************* DB ACCESS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.db.php')) {
|
||||
require BASE.CONFIGS.'config.db.php';
|
||||
}
|
||||
if (!isset($DB_CONFIG)) {
|
||||
$DB_CONFIG = array();
|
||||
}
|
||||
/************* OTHER PATHS *****************/
|
||||
if (file_exists(BASE.CONFIGS.'config.path.php')) {
|
||||
require BASE.CONFIGS.'config.path.php';
|
||||
}
|
||||
|
||||
/************* MASTER INIT *****************/
|
||||
// live frontend pages
|
||||
// ** missing live domains **
|
||||
// get the name without the port
|
||||
list($HOST_NAME) = array_pad(explode(':', $_SERVER['HTTP_HOST'], 2), 2, null);
|
||||
// set HOST name
|
||||
define('HOST_NAME', $HOST_NAME);
|
||||
// BAIL ON MISSING MASTER SITE CONFIG
|
||||
if (!isset($SITE_CONFIG[HOST_NAME]['location'])) {
|
||||
echo 'Missing SITE_CONFIG entry for: "'.HOST_NAME.'". Contact Administrator';
|
||||
exit;
|
||||
}
|
||||
// BAIL ON MISSING DB CONFIG:
|
||||
// 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 selection but no matching db config entry
|
||||
if ((!isset($SITE_CONFIG[HOST_NAME]['db_host']) && count($DB_CONFIG)) ||
|
||||
(isset($SITE_CONFIG[HOST_NAME]['db_host']) &&
|
||||
// missing DB CONFIG
|
||||
((is_array($DB_CONFIG) && !count($DB_CONFIG)) ||
|
||||
!is_array($DB_CONFIG) ||
|
||||
// has DB CONFIG but no match
|
||||
(is_array($DB_CONFIG) && count($DB_CONFIG) && !isset($DB_CONFIG[$SITE_CONFIG[HOST_NAME]['db_host']])))
|
||||
)
|
||||
) {
|
||||
echo 'No matching DB config found for: "'.HOST_NAME.'". Contact Administrator';
|
||||
exit;
|
||||
}
|
||||
// set SSL on
|
||||
if ((array_key_exists('HTTPS', $_SERVER) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ||
|
||||
$_SERVER['SERVER_PORT'] == 443) {
|
||||
define('HOST_SSL', true);
|
||||
define('HOST_PROTOCOL', 'https://');
|
||||
} else {
|
||||
define('HOST_SSL', false);
|
||||
define('HOST_PROTOCOL', 'http://');
|
||||
}
|
||||
// define the db config set name, the db config and the db schema
|
||||
define('DB_CONFIG_NAME', $SITE_CONFIG[HOST_NAME]['db_host']);
|
||||
define('DB_CONFIG', isset($DB_CONFIG[DB_CONFIG_NAME]) ? $DB_CONFIG[DB_CONFIG_NAME] : array());
|
||||
// define('DB_CONFIG_TARGET', SITE_CONFIG[$HOST_NAME]['db_host_target']);
|
||||
// define('DB_CONFIG_OTHER', SITE_CONFIG[$HOST_NAME]['db_host_other']);
|
||||
// override for login and global schemas
|
||||
// define('LOGIN_DB_SCHEMA', PUBLIC_SCHEMA); // where the edit* tables are
|
||||
// define('GLOBAL_DB_SCHEMA', PUBLIC_SCHEMA); // where global tables are that are used by all schemas (eg queue tables for online, etc)
|
||||
// debug settings, site lang, etc
|
||||
define('TARGET', $SITE_CONFIG[HOST_NAME]['location']);
|
||||
define('DEBUG', $SITE_CONFIG[HOST_NAME]['debug_flag']);
|
||||
define('SITE_LANG', $SITE_CONFIG[HOST_NAME]['site_lang']);
|
||||
define('LOGIN_ENABLED', $SITE_CONFIG[HOST_NAME]['login_enabled']);
|
||||
// paths
|
||||
// define('CSV_PATH', $PATHS[TARGET]['csv_path']);
|
||||
// define('EXPORT_SCRIPT', $PATHS[TARGET]['perl_bin']);
|
||||
// define('REDIRECT_URL', $PATHS[TARGET]['redirect_url']);
|
||||
|
||||
// show all errors if debug_all & show_error_handling are enabled
|
||||
define('SHOW_ALL_ERRORS', true);
|
||||
|
||||
/************* GENERAL PAGE TITLE ********/
|
||||
define('G_TITLE', '<OVERALL FALLBACK PAGE TITLE>');
|
||||
|
||||
/************ STYLE SHEETS / JS **********/
|
||||
define('ADMIN_STYLESHEET', 'edit.css');
|
||||
define('ADMIN_JAVASCRIPT', 'edit.js');
|
||||
define('STYLESHEET', 'frontend.css');
|
||||
define('JAVASCRIPT', 'frontend.js');
|
||||
|
||||
// anything optional
|
||||
/************* INTERNAL ******************/
|
||||
// any other global definitons in the config.other.php
|
||||
if (file_exists(BASE.CONFIGS.'config.other.php')) {
|
||||
require BASE.CONFIGS.'config.other.php';
|
||||
}
|
||||
|
||||
/************* DEBUG *******************/
|
||||
// turn off debug if debug flag is OFF
|
||||
if (defined('DEBUG') && DEBUG == false) {
|
||||
$ECHO_ALL = false;
|
||||
$DEBUG_ALL = false;
|
||||
$PRINT_ALL = false;
|
||||
$DB_DEBUG = false;
|
||||
$ENABLE_ERROR_HANDLING = false;
|
||||
$DEBUG_ALL_OVERRIDE = false;
|
||||
} else {
|
||||
$ECHO_ALL = false;
|
||||
$DEBUG_ALL = true;
|
||||
$PRINT_ALL = true;
|
||||
$DB_DEBUG = true;
|
||||
$ENABLE_ERROR_HANDLING = false;
|
||||
$DEBUG_ALL_OVERRIDE = false;
|
||||
}
|
||||
|
||||
/************* AUTO LOADER *******************/
|
||||
// read auto loader
|
||||
require BASE.LIB.'autoloader.php';
|
||||
|
||||
// __END__
|
||||
28
www/configs/config.other.php
Executable file
@@ -0,0 +1,28 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2019/10/28
|
||||
* SHORT DESCRIPTION:
|
||||
* other global constant variables
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
// DEFINE('SOME_ID', <SOME VALUE>);
|
||||
|
||||
/************* CONVERT *******************/
|
||||
// this only needed if the external thumbnail create is used
|
||||
$paths = array(
|
||||
'/bin',
|
||||
'/usr/bin',
|
||||
'/usr/local/bin'
|
||||
);
|
||||
// find convert
|
||||
foreach ($paths as $path) {
|
||||
if (file_exists($path.DS.'convert') && is_file($path.DS.'convert')) {
|
||||
// image magick convert location
|
||||
DEFINE('CONVERT', $path.DS.'convert');
|
||||
}
|
||||
}
|
||||
unset($paths);
|
||||
|
||||
// __END__
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2018/10/11
|
||||
@@ -10,8 +10,12 @@
|
||||
|
||||
// File and Folder paths
|
||||
// ID is TARGET (first array element)
|
||||
// $PATHS['test']['csv_path'] = '';
|
||||
// $PATHS['test']['perl_bin'] = '';
|
||||
// $PATHS['test']['redirect_url'] = '';
|
||||
/*$PATHS = array(
|
||||
'test' => array(
|
||||
'csv_path' => '',
|
||||
'perl_bin' => '',
|
||||
'other_url' => '',
|
||||
)
|
||||
)*/
|
||||
|
||||
// __END__
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2018/10/11
|
||||
@@ -12,8 +12,8 @@ define('CONFIG_PATH', 'configs'.DIRECTORY_SEPARATOR);
|
||||
$CONFIG_PATH_PREFIX = '';
|
||||
for ($dir_pos = 0, $dir_max = count(explode(DIRECTORY_SEPARATOR, __DIR__)); $dir_pos <= $dir_max; $dir_pos ++) {
|
||||
$CONFIG_PATH_PREFIX .= '..'.DIRECTORY_SEPARATOR;
|
||||
if (file_exists($CONFIG_PATH_PREFIX.CONFIG_PATH.'config.inc')) {
|
||||
require $CONFIG_PATH_PREFIX.CONFIG_PATH.'config.inc';
|
||||
if (file_exists($CONFIG_PATH_PREFIX.CONFIG_PATH.'config.master.php')) {
|
||||
require $CONFIG_PATH_PREFIX.CONFIG_PATH.'config.master.php';
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,7 @@ if (!defined('DS')) {
|
||||
exit('Base config unloadable');
|
||||
}
|
||||
// find trigger name "admin/" or "frontend/" in the getcwd() folder
|
||||
foreach (array ('admin', 'frontend') as $folder) {
|
||||
foreach (array('admin', 'frontend') as $folder) {
|
||||
if (strstr(getcwd(), DS.$folder)) {
|
||||
define('CONTENT_PATH', $folder.DS);
|
||||
break;
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
require 'config.php';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2005/07/19
|
||||
@@ -7,7 +7,7 @@
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
$day_short = array (
|
||||
$day_short = array(
|
||||
1 => 'Mon',
|
||||
2 => 'Tue',
|
||||
3 => 'Wed',
|
||||
@@ -17,7 +17,7 @@ $day_short = array (
|
||||
7 => 'Sun'
|
||||
);
|
||||
|
||||
$day_long = array (
|
||||
$day_long = array(
|
||||
1 => 'Monday',
|
||||
2 => 'Tuesday',
|
||||
3 => 'Wednesday',
|
||||
@@ -28,7 +28,7 @@ $day_long = array (
|
||||
);
|
||||
|
||||
// months
|
||||
$month_long = array (
|
||||
$month_long = array(
|
||||
1 => 'January',
|
||||
2 => 'February',
|
||||
3 => 'March',
|
||||
@@ -43,7 +43,7 @@ $month_long = array (
|
||||
12 => 'December'
|
||||
);
|
||||
|
||||
$month_short = array (
|
||||
$month_short = array(
|
||||
1 => 'Jan',
|
||||
2 => 'Feb',
|
||||
3 => 'Mar',
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2008/08/14
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2008/08/01
|
||||
@@ -10,34 +10,36 @@
|
||||
//------------------------------ variable init start
|
||||
// for dev test we set full error reporting; writes everything, except E_ERROR into logs/php_error-<day>.log
|
||||
if ($DEBUG_ALL && $ENABLE_ERROR_HANDLING) {
|
||||
include BASE.LIBS."Error.Handling.inc";
|
||||
include BASE.LIBS."Error.Handling.php";
|
||||
}
|
||||
// predefine vars
|
||||
$lang = '';
|
||||
$messages = array ();
|
||||
$messages = array();
|
||||
// import all POST vars
|
||||
extract($_POST, EXTR_SKIP);
|
||||
// extract($_POST, EXTR_SKIP);
|
||||
//------------------------------ variable init end
|
||||
|
||||
//------------------------------ library include start
|
||||
// set output to quiet for load of classes & session settings
|
||||
ob_start();
|
||||
// set the session name
|
||||
$SET_SESSION_NAME = EDIT_SESSION_NAME;
|
||||
$LOG_FILE_ID = BASE_NAME.'Admin';
|
||||
//------------------------------ library include end
|
||||
|
||||
//------------------------------ basic variable settings start
|
||||
// set encoding
|
||||
if (!isset($encoding)) {
|
||||
$encoding = DEFAULT_ENCODING;
|
||||
if (!isset($AJAX_PAGE)) {
|
||||
$AJAX_PAGE = false;
|
||||
}
|
||||
// set the default lang, if not given
|
||||
if (session_id() && $_SESSION['DEFAULT_LANG']) {
|
||||
$lang = $_SESSION['DEFAULT_LANG'];
|
||||
} elseif (!$lang) {
|
||||
$lang = defined('SITE_LANG') ? SITE_LANG : DEFAULT_LANG;
|
||||
if (!isset($ZIP_STREAM)) {
|
||||
$ZIP_STREAM = false;
|
||||
}
|
||||
// set encoding
|
||||
if (!isset($ENCODING) || !$ENCODING) {
|
||||
$ENCODING = DEFAULT_ENCODING;
|
||||
}
|
||||
// end the stop of the output flow, but only if we didn't request a csv file download
|
||||
if (array_key_exists('action', $_POST) && $_POST['action'] != 'download_csv') {
|
||||
header("Content-type: text/html; charset=".$encoding);
|
||||
if (isset($_POST['action']) && $_POST['action'] != 'download_csv' && !$AJAX_PAGE) {
|
||||
header("Content-type: text/html; charset=".$ENCODING);
|
||||
}
|
||||
if ($AJAX_PAGE && !$ZIP_STREAM) {
|
||||
header("Content-Type: application/json; charset=UTF-8");
|
||||
@@ -46,21 +48,17 @@ if ($AJAX_PAGE && !$ZIP_STREAM) {
|
||||
|
||||
//------------------------------ class init start
|
||||
// login & page access check
|
||||
$login = new CoreLibs\ACL\Login($DB_CONFIG[LOGIN_DB], $lang);
|
||||
// post login lang check
|
||||
if ($_SESSION['DEFAULT_LANG']) {
|
||||
$lang = $_SESSION['DEFAULT_LANG'];
|
||||
}
|
||||
$login = new CoreLibs\ACL\Login(DB_CONFIG);
|
||||
// create smarty object
|
||||
$smarty = new CoreLibs\Template\SmartyExtend($lang);
|
||||
$smarty = new CoreLibs\Template\SmartyExtend();
|
||||
// create new DB class
|
||||
$cms = new CoreLibs\Admin\Backend($DB_CONFIG[MAIN_DB], $lang);
|
||||
$cms = new CoreLibs\Admin\Backend(DB_CONFIG);
|
||||
// the menu show flag (what menu to show)
|
||||
$cms->menu_show_flag = 'main';
|
||||
// db nfo
|
||||
$cms->dbInfo();
|
||||
// set acl
|
||||
$cms->acl = $login->acl;
|
||||
$cms->setACL($login->acl);
|
||||
// flush
|
||||
ob_end_flush();
|
||||
//------------------------------ class init end
|
||||
@@ -68,7 +66,7 @@ ob_end_flush();
|
||||
//------------------------------ logging start
|
||||
// log backend data
|
||||
// data part creation
|
||||
$data = array (
|
||||
$data = array(
|
||||
'_SESSION' => $_SESSION,
|
||||
'_GET' => $_GET,
|
||||
'_POST' => $_POST,
|
||||
@@ -81,22 +79,16 @@ if (!$login->login) {
|
||||
}
|
||||
//------------------------------ logging end
|
||||
|
||||
//------------------------------ page rights start
|
||||
// flag if to show the edit access id drop down list
|
||||
// check if we have more than one EA ID
|
||||
$cms->DATA['show_ea_extra'] = $login->acl['acl']['show_ea_extra'];
|
||||
//------------------------------ page rights ned
|
||||
|
||||
// automatic hide for DEBUG messages on live server
|
||||
// can be overridden when setting DEBUG_ALL_OVERRIDE on top of the script (for emergency debugging of one page only)
|
||||
if ((TARGET == 'live' || TARGET == 'remote') && !$DEBUG_ALL_OVERRIDE) {
|
||||
$login->debug_output_all = 0;
|
||||
$login->echo_output_all = 0;
|
||||
$login->print_output_all = 0;
|
||||
$cms->debug_output_all = 0;
|
||||
$cms->echo_output_all = 0;
|
||||
$cms->print_output_all = 0;
|
||||
$login->debug_output_all = false;
|
||||
$login->echo_output_all = false;
|
||||
$login->print_output_all = false;
|
||||
$cms->debug_output_all = false;
|
||||
$cms->echo_output_all = false;
|
||||
$cms->print_output_all = false;
|
||||
}
|
||||
$cms->DATA['JS_DEBUG'] = DEBUG;
|
||||
$smarty->DATA['JS_DEBUG'] = DEBUG;
|
||||
|
||||
// __END__
|
||||
@@ -1,166 +0,0 @@
|
||||
<?php
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2007/09/03
|
||||
* SHORT DESCRIPTION:
|
||||
* set paths & language variables
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
// master template
|
||||
if (!isset($MASTER_TEMPLATE_NAME)) {
|
||||
$MASTER_TEMPLATE_NAME = MASTER_TEMPLATE_NAME;
|
||||
}
|
||||
|
||||
// just emergency fallback for language
|
||||
// set encoding
|
||||
if (isset($_SESSION['DEFAULT_CHARSET'])) {
|
||||
$encoding = $_SESSION['DEFAULT_CHARSET'];
|
||||
} elseif (!isset($encoding)) {
|
||||
$encoding = DEFAULT_ENCODING;
|
||||
}
|
||||
// just emergency fallback for language
|
||||
if (isset($_SESSION['DEFAULT_LANG'])) {
|
||||
$lang = $_SESSION['DEFAULT_LANG'];
|
||||
} elseif (!isset($lang)) {
|
||||
$lang = defined('SITE_LANG') ? SITE_LANG : DEFAULT_LANG;
|
||||
}
|
||||
// create the char lang encoding
|
||||
$lang_short = substr($lang, 0, 2);
|
||||
|
||||
// set include & template names
|
||||
$PAGE_FILE_NAME = str_replace(".php", "", $cms->page_name);
|
||||
// set include & template names
|
||||
if (!isset($CONTENT_INCLUDE)) {
|
||||
$CONTENT_INCLUDE = $PAGE_FILE_NAME.'.tpl';
|
||||
}
|
||||
$FORM_NAME = !isset($FORM_NAME) || !$FORM_NAME ? str_replace(".php", "", $cms->page_name) : $FORM_NAME;
|
||||
// set local page title
|
||||
$L_TITLE = ucfirst(str_replace('_', ' ', $cms->getPageName(1))).' - '.$G_TITLE;
|
||||
// strip tpl and replace it with inc
|
||||
// php include file per page
|
||||
$cms->INC_TEMPLATE_NAME = str_replace(".tpl", ".inc", $CONTENT_INCLUDE);
|
||||
// javascript include per page
|
||||
$cms->JS_TEMPLATE_NAME = str_replace(".tpl", ".js", $CONTENT_INCLUDE);
|
||||
// css per page
|
||||
$cms->CSS_TEMPLATE_NAME = str_replace(".tpl", ".css", $CONTENT_INCLUDE);
|
||||
// special CSS file
|
||||
$cms->CSS_SPECIAL_TEMPLATE_NAME = $CSS_NAME;
|
||||
// special JS file
|
||||
$cms->JS_SPECIAL_TEMPLATE_NAME = $JS_NAME;
|
||||
// compile & cache id
|
||||
$cms->CACHE_ID = isset($CACHE_ID) ? $CACHE_ID : CACHE_ID;
|
||||
$cms->COMPILE_ID = isset($COMPILE_ID) ? $COMPILE_ID : CACHE_ID;
|
||||
|
||||
// set basic template path (tmp)
|
||||
$cms->includes = BASE.INCLUDES; // no longer in templates, only global
|
||||
$cms->template_path = BASE.INCLUDES.TEMPLATES.CONTENT_PATH;
|
||||
if ($smarty) {
|
||||
$smarty->setTemplateDir($cms->template_path);
|
||||
}
|
||||
if (isset($LANGUAGE_FOLDER)) {
|
||||
$cms->lang_dir = $LANGUAGE_FOLDER;
|
||||
} else {
|
||||
$cms->lang_dir = BASE.INCLUDES.LANG.CONTENT_PATH; // no outside
|
||||
}
|
||||
$cms->javascript = LAYOUT.JS;
|
||||
$cms->css = LAYOUT.CSS;
|
||||
$cms->pictures = LAYOUT.IMAGES;
|
||||
$cms->cache_pictures = LAYOUT.CACHE;
|
||||
$cms->cache_pictures_root = ROOT.$cms->cache_pictures;
|
||||
if (!is_dir($cms->cache_pictures_root)) {
|
||||
mkdir($cms->cache_pictures_root);
|
||||
}
|
||||
// check if we have an external file with the template name
|
||||
if (file_exists($cms->includes.$cms->INC_TEMPLATE_NAME) &&
|
||||
is_file($cms->includes.$cms->INC_TEMPLATE_NAME)
|
||||
) {
|
||||
include($cms->includes.$cms->INC_TEMPLATE_NAME);
|
||||
}
|
||||
// only CSS/JS/etc include stuff if we have non AJAX page
|
||||
if (!$AJAX_PAGE) {
|
||||
// check for template include
|
||||
if (isset($USE_INCLUDE_TEMPLATE) && $USE_INCLUDE_TEMPLATE === true && !isset($TEMPLATE_NAME)) {
|
||||
$TEMPLATE_NAME = $CONTENT_INCLUDE;
|
||||
// add to cache & compile id
|
||||
$cms->COMPILE_ID .= '_'.$TEMPLATE_NAME;
|
||||
$cms->CACHE_ID .= '_'.$TEMPLATE_NAME;
|
||||
}
|
||||
// additional per page Javascript include
|
||||
$cms->JS_INCLUDE = '';
|
||||
if (file_exists($cms->javascript.$cms->JS_TEMPLATE_NAME) && is_file($cms->javascript.$cms->JS_TEMPLATE_NAME)) {
|
||||
$cms->JS_INCLUDE = $cms->javascript.$cms->JS_TEMPLATE_NAME;
|
||||
}
|
||||
// per page css file
|
||||
$cms->CSS_INCLUDE = '';
|
||||
if (file_exists($cms->css.$cms->CSS_TEMPLATE_NAME) && is_file($cms->css.$cms->CSS_TEMPLATE_NAME)) {
|
||||
$cms->CSS_INCLUDE = $cms->css.$cms->CSS_TEMPLATE_NAME;
|
||||
}
|
||||
// optional CSS file
|
||||
$cms->CSS_SPECIAL_INCLUDE = '';
|
||||
if (file_exists($cms->css.$cms->CSS_SPECIAL_TEMPLATE_NAME) && is_file($cms->css.$cms->CSS_SPECIAL_TEMPLATE_NAME)) {
|
||||
$cms->CSS_SPECIAL_INCLUDE = $cms->css.$cms->CSS_SPECIAL_TEMPLATE_NAME;
|
||||
}
|
||||
// optional JS file
|
||||
$cms->JS_SPECIAL_INCLUDE = '';
|
||||
if (file_exists($cms->javascript.$cms->JS_SPECIAL_TEMPLATE_NAME) && is_file($cms->javascript.$cms->JS_SPECIAL_TEMPLATE_NAME)) {
|
||||
$cms->JS_SPECIAL_INCLUDE = $cms->javascript.$cms->JS_SPECIAL_TEMPLATE_NAME;
|
||||
}
|
||||
if ($smarty) {
|
||||
// check if template names exist
|
||||
if (!file_exists($smarty->getTemplateDir()[0].DS.$MASTER_TEMPLATE_NAME)) {
|
||||
// abort if master template could not be found
|
||||
exit('MASTER TEMPLATE: '.$MASTER_TEMPLATE_NAME.' could not be found');
|
||||
}
|
||||
if (isset($TEMPLATE_NAME) && !file_exists($smarty->getTemplateDir()[0].DS.$TEMPLATE_NAME)) {
|
||||
exit('INCLUDE TEMPLATE: '.$TEMPLATE_NAME.' could not be found');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if the lang folder is different to the default one
|
||||
// if the default lang is not like the lang given, switch lang
|
||||
if (false === strstr(BASE.INCLUDES.LANG.CONTENT_PATH, $cms->lang_dir) ||
|
||||
strcasecmp(defined('SITE_LANG') ? SITE_LANG : DEFAULT_LANG, $lang)
|
||||
) {
|
||||
$cms->debug('LANG', 'Orig: '.BASE.INCLUDES.LANG.CONTENT_PATH.', New: '.$cms->lang_dir.' | Orig Lang: '.(defined('SITE_LANG') ? SITE_LANG : DEFAULT_LANG).', New Lang: '.$lang);
|
||||
$cms->l->l10nReloadMOfile($lang, $cms->lang_dir);
|
||||
// if we have login class
|
||||
if ($login) {
|
||||
$login->l->l10nReloadMOfile($lang, $cms->lang_dir);
|
||||
}
|
||||
// if we have smarty template class
|
||||
if ($smarty) {
|
||||
$smarty->l10n->l10nReloadMOfile($lang, $cms->lang_dir);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$AJAX_PAGE) {
|
||||
// javascript translate data as template for auto translate
|
||||
if (!$TEMPLATE_TRANSLATE) {
|
||||
$TEMPLATE_TRANSLATE = 'jsTranslate_'.$lang.'.tpl';
|
||||
$cms->debug('LANG', 'Load lang: '.$lang.', for page file '.$TEMPLATE_TRANSLATE);
|
||||
} else {
|
||||
// we assume we have some fixed set
|
||||
// we must add _<$lang>
|
||||
// if .tpl, put before .tpl
|
||||
// if not .tpl, add _<$lang>.tpl
|
||||
if (strpos($TEMPLATE_TRANSLATE, '.tpl')) {
|
||||
$TEMPLATE_TRANSLATE = str_replace('.tpl', '_'.$lang.'.tpl', $TEMPLATE_TRANSLATE);
|
||||
} else {
|
||||
$TEMPLATE_TRANSLATE .= '_'.$lang.'.tpl';
|
||||
}
|
||||
}
|
||||
// if we can't find it, dump it
|
||||
if ($smarty && !file_exists($smarty->getTemplateDir()[0].DS.$TEMPLATE_TRANSLATE)) {
|
||||
unset($TEMPLATE_TRANSLATE);
|
||||
}
|
||||
}
|
||||
|
||||
// $cms->debug("LANGUAGE", "L: $lang | ".$cms->lang_dir." | MO File: ".$cms->l->mofile);
|
||||
$cms->debug("LANGUAGE", "SL: ".$_SESSION['DEFAULT_CHARSET']." | ".$_SESSION['LANG']." | ".$_SESSION['DEFAULT_LANG']);
|
||||
if ($smarty) {
|
||||
$cms->debug("TEMPLATE", "P: ".$smarty->getTemplateDir()[0]);
|
||||
}
|
||||
|
||||
// __END__
|
||||
19
www/includes/admin_set_paths.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2007/09/03
|
||||
* SHORT DESCRIPTION:
|
||||
* set paths & language variables
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
/******
|
||||
NOTE THAT THIS INCLUDE IS OBSOLETE
|
||||
USE THE BELOW FUNCTION CALL IN THE SCRIPT ITSELF
|
||||
*******/
|
||||
trigger_error('admin_set_paths.php is deprecated. Use SmartyExtended->setSmartyPaths();', E_USER_DEPRECATED);
|
||||
if ($smarty) {
|
||||
$smarty->setSmartyPaths();
|
||||
}
|
||||
|
||||
// __END__
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2005/07/12
|
||||
* SHORT DESCRIPTION:
|
||||
* default smarty vars, and create output template for smarty
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
// trigger flags
|
||||
$cms->HEADER['USE_PROTOTYPE'] = isset($USE_PROTOTYPE) ? $USE_PROTOTYPE : USE_PROTOTYPE;
|
||||
// scriptacolous, can only be used with prototype
|
||||
if ($cms->HEADER['USE_PROTOTYPE']) {
|
||||
$cms->HEADER['USE_SCRIPTACULOUS'] = isset($USE_SCRIPTACULOUS) ? $USE_SCRIPTACULOUS : USE_SCRIPTACULOUS;
|
||||
}
|
||||
// jquery and prototype should not be used together
|
||||
$cms->HEADER['USE_JQUERY'] = isset($USE_JQUERY) ? $USE_JQUERY : USE_JQUERY; // don't use either of those two together
|
||||
|
||||
// the actual include files for javascript (per page)
|
||||
$cms->HEADER['JS_INCLUDE'] = $cms->JS_INCLUDE;
|
||||
$cms->HEADER['CSS_INCLUDE'] = $cms->CSS_INCLUDE;
|
||||
$cms->HEADER['CSS_SPECIAL_INCLUDE'] = $cms->CSS_SPECIAL_INCLUDE;
|
||||
$cms->HEADER['JS_SPECIAL_INCLUDE'] = $cms->JS_SPECIAL_INCLUDE;
|
||||
// paths to the files
|
||||
$cms->DATA['includes'] = $cms->includes;
|
||||
$cms->DATA['js'] = $cms->javascript;
|
||||
$cms->DATA['css'] = $cms->css;
|
||||
$cms->DATA['pictures'] = $cms->pictures;
|
||||
|
||||
// default CMS settings
|
||||
// define all needed smarty stuff for the general HTML/page building
|
||||
$cms->HEADER['CSS'] = CSS;
|
||||
$cms->HEADER['JS'] = JS;
|
||||
$cms->HEADER['ENCODING'] = $encoding;
|
||||
$cms->HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING;
|
||||
$cms->HEADER['STYLESHEET'] = isset($ADMIN_STYLESHEET) ? $ADMIN_STYLESHEET : ADMIN_STYLESHEET;
|
||||
$cms->HEADER['JAVASCRIPT'] = isset($ADMIN_JAVASCRIPT) ? $ADMIN_JAVASCRIPT : ADMIN_JAVASCRIPT;
|
||||
// html title
|
||||
$cms->HEADER['HTML_TITLE'] = isset($L_TITLE) ? $cms->l->__($L_TITLE) : $cms->l->__(G_TITLE);
|
||||
$cms->DATA['table_width'] = isset($PAGE_WIDTH) ? $PAGE_WIDTH : PAGE_WIDTH;
|
||||
|
||||
// messages = array('msg' =>, 'class' => 'error/warning/...')
|
||||
$cms->DATA['messages'] = $cms->messages;
|
||||
|
||||
// top menu
|
||||
$cms->DATA['nav_menu'] = $cms->adbTopMenu();
|
||||
// the page name
|
||||
$cms->DATA['page_name'] = $cms->page_name;
|
||||
// user name
|
||||
$cms->DATA['USER_NAME'] = $_SESSION['USER_NAME'];
|
||||
// the template part to include into the body
|
||||
$cms->DATA['TEMPLATE_NAME'] = $TEMPLATE_NAME;
|
||||
$cms->DATA['CONTENT_INCLUDE'] = $CONTENT_INCLUDE;
|
||||
// LANG
|
||||
$cms->DATA['LANG'] = $lang;
|
||||
$cms->DATA['TINYMCE_LANG'] = $lang_short;
|
||||
|
||||
// debug data, if DEBUG flag is on, this data is print out
|
||||
$cms->DEBUG_DATA['debug_error_msg'] = $cms->runningTime();
|
||||
$cms->DEBUG_DATA['DEBUG'] = @$DEBUG_TMPL;
|
||||
|
||||
// create main data array
|
||||
$cms->CONTENT_DATA = array_merge($cms->HEADER, $cms->DATA, $cms->DEBUG_DATA);
|
||||
// data is 1:1 mapping (all vars, values, etc)
|
||||
foreach ($cms->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(
|
||||
$MASTER_TEMPLATE_NAME,
|
||||
$cms->CACHE_ID.($cms->CACHE_ID ? '_' : '').$lang,
|
||||
$cms->COMPILE_ID.($cms->COMPILE_ID ? '_' : '').$lang
|
||||
);
|
||||
|
||||
// __END__
|
||||
17
www/includes/admin_smarty.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2005/07/12
|
||||
* SHORT DESCRIPTION:
|
||||
* default smarty vars, and create output template for smarty
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
/******
|
||||
NOTE THAT THIS INCLUDE IS OBSOLETE
|
||||
USE THE BELOW FUNCTION CALL IN THE SCRIPT ITSELF
|
||||
*******/
|
||||
trigger_error('admin_smarty.php is deprecated. Use SmartyExtended->setSmartyVarsAdmin(); or setSmartyVarsFrontend();', E_USER_DEPRECATED);
|
||||
$smarty->setSmartyVarsAdmin();
|
||||
|
||||
// __END__
|
||||
@@ -1,446 +0,0 @@
|
||||
<?php
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens "Gullevek" Schwaighofer (www.gullevek.org)
|
||||
* CREATED: 2003/06/10
|
||||
* SHORT DESCRIPTION:
|
||||
* central include for all edit_pages
|
||||
* - edit_groups.php
|
||||
* - edit_languages.php
|
||||
* - edit_pages.php
|
||||
* - edit_schemes.php
|
||||
* - edit_users.php
|
||||
* - edit_visible_group.php
|
||||
* HISTORY:
|
||||
* 2005/06/30 (cs) remove color settings, they are in CSS File now
|
||||
* 2005/06/22 (cs) moved load of config array into form class, set lang and lang is must set var for form class; removed the page name setting, moved it into the form class, remove all HTML from main page
|
||||
* 2004/09/30 (cs) changed layout to fit default layout & changed LIBS, etc
|
||||
* 2003-06-10: creation of this page
|
||||
*********************************************************************/
|
||||
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
// TODO: only extract _POST data that is needed
|
||||
extract($_POST, EXTR_SKIP);
|
||||
|
||||
$table_width = '100%';
|
||||
// this is for certain CMS modules that set a relative path
|
||||
define('REL_PATH', '');
|
||||
|
||||
ob_start();
|
||||
require 'config.php';
|
||||
// set session name here
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
// overrride debug flags
|
||||
if (!DEBUG) {
|
||||
$DEBUG_ALL = 0;
|
||||
$PRINT_ALL = 0;
|
||||
$DB_DEBUG = 0;
|
||||
$ECHO_ALL = 0;
|
||||
}
|
||||
|
||||
// set default lang if not set otherwise
|
||||
if (!$lang) {
|
||||
$lang = DEFAULT_LANG;
|
||||
}
|
||||
// should be utf8
|
||||
header("Content-type: text/html; charset=".DEFAULT_ENCODING);
|
||||
ob_end_flush();
|
||||
$login = new CoreLibs\ACL\Login($DB_CONFIG[LOGIN_DB], $lang);
|
||||
|
||||
// create form class
|
||||
$form = new CoreLibs\Output\Form\Generate($DB_CONFIG[MAIN_DB], $lang);
|
||||
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($lang);
|
||||
|
||||
if (TARGET == 'live' || TARGET == 'remote') {
|
||||
// login
|
||||
$login->debug_output_all = DEBUG ? 1 : 0;
|
||||
$login->echo_output_all = 0;
|
||||
$login->print_output_all = DEBUG ? 1 : 0;
|
||||
// form
|
||||
$form->debug_output_all = DEBUG ? 1 : 0;
|
||||
$form->echo_output_all = 0;
|
||||
$form->print_output_all = DEBUG ? 1 : 0;
|
||||
}
|
||||
// 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;
|
||||
}
|
||||
|
||||
// space for setting special debug flags
|
||||
$login->debug_output_all = 1;
|
||||
|
||||
// define edit logging function. should be in a special edit interface class later
|
||||
// METHOD: EditLog()
|
||||
// PARAMS: event -> any kind of event description, data -> any kind of data related to that event
|
||||
// RETURN: none
|
||||
// DESC: writes all action vars plus other info into edit_log table
|
||||
function EditLog($event = '', $data = '')
|
||||
{
|
||||
$q = "INSERT INTO edit_log ";
|
||||
$q .= "(euid, event_date, ip, event, data, page) ";
|
||||
$q .= "VALUES (".$_SESSION['EUID'].", NOW(), '".$_SERVER["REMOTE_ADDR"]."', '".$GLOBALS['form']->dbEscapeString($event)."', '".$GLOBALS['form']->dbEscapeString($data)."', '".$GLOBALS['form']->getPageName()."')";
|
||||
}
|
||||
|
||||
// log backend data
|
||||
// data part creation
|
||||
$data = array (
|
||||
'_SESSION' => $_SESSION,
|
||||
'_GET' => $_GET,
|
||||
'_POST' => $_POST,
|
||||
'_FILES' => $_FILES
|
||||
);
|
||||
// log action
|
||||
EditLog('Edit Submit', serialize($data));
|
||||
|
||||
// define all needed smarty stuff for the general HTML/page building
|
||||
$HEADER['CSS'] = CSS;
|
||||
$HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING;
|
||||
$HEADER['STYLESHEET'] = isset($ADMIN_STYLESHEET) ? $ADMIN_STYLESHEET : ADMIN_STYLESHEET;
|
||||
|
||||
if ($form->my_page_name == 'edit_order') {
|
||||
// get is for "table_name" and "where" only
|
||||
$table_name = isset($_GET['table_name']) ? $_GET['table_name'] : '';
|
||||
// $where = isset($_GET['where']) ? $_GET['where'] : '';
|
||||
// order name is _always_ order_number for the edit interface
|
||||
|
||||
// follwing arrays do exist here:
|
||||
// $position ... has the positions of the array (0..max), cause in a <select>
|
||||
// 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 (!is_array($position)) {
|
||||
$position = array ();
|
||||
}
|
||||
if (count($position)) {
|
||||
$original_id = $row_data_id;
|
||||
|
||||
// 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 ($up && $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]];
|
||||
$row_data_id[$position[$i]] = $row_data_id[$position[$i]-1];
|
||||
$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 ($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];
|
||||
$row_data_id[$position[$i] + 1] = $row_data_id[$position[$i]];
|
||||
$row_data_id[$position[$i]] = $temp_id;
|
||||
} // for
|
||||
} // if down
|
||||
|
||||
// write data ... (which has to be abstrackt ...)
|
||||
if (($up && $position[0] > 0) || ($down && ($position[count($position) - 1]!=(count($row_data_id) - 1)))) {
|
||||
for ($i = 0; $i < count($row_data_id); $i ++) {
|
||||
$q = "UPDATE ".$table_name." SET order_number = ".$row_data_order[$i]." WHERE ".$table_name."_id = ".$row_data_id[$i];
|
||||
$q = $form->dbExec($q);
|
||||
} // 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 ($where_string) {
|
||||
$q .= "WHERE $where_string ";
|
||||
}
|
||||
$q .= "ORDER BY order_number";
|
||||
|
||||
while ($res = $form->dbReturn($q)) {
|
||||
$row_data[] = array (
|
||||
"id" => $res[$table_name."_id"],
|
||||
"name" => $res["name"],
|
||||
"order" => $res["order_number"]
|
||||
);
|
||||
} // while read data ...
|
||||
|
||||
// html title
|
||||
$HEADER['HTML_TITLE'] = $form->l->__('Edit Order');
|
||||
|
||||
// error msg
|
||||
if ($error) {
|
||||
$messages[] = array ('msg' => $msg, 'class' => 'error', 'width' => '100%');
|
||||
}
|
||||
$DATA['form_error_msg'] = $messages;
|
||||
|
||||
// all the row data
|
||||
$options_id = array ();
|
||||
$options_name = array ();
|
||||
$options_selected = array ();
|
||||
if (!is_array($row_data)) {
|
||||
$row_data = array ();
|
||||
}
|
||||
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 ($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 = array ();
|
||||
$row_data_order = array ();
|
||||
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 {
|
||||
$form->formProcedureLoad(${$form->archive_pk_name});
|
||||
$form->formProcedureNew();
|
||||
$form->formProcedureSave();
|
||||
$form->formProcedureDelete();
|
||||
$form->formProcedureDeleteFromElementList($element_list, $remove_name);
|
||||
|
||||
$DATA['table_width'] = $table_width;
|
||||
|
||||
// write out error / status messages
|
||||
$messages[] = $form->formPrintMsg();
|
||||
$DATA['form_error_msg'] = $messages;
|
||||
|
||||
// MENU START
|
||||
// request some session vars
|
||||
if (!$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_LEVEL"];
|
||||
$PAGES = $_SESSION["PAGES"];
|
||||
|
||||
//$form->debug('menu', $form->printAr($PAGES));
|
||||
|
||||
// build nav from $PAGES ...
|
||||
if (!is_array($PAGES)) {
|
||||
$PAGES = array ();
|
||||
}
|
||||
for ($i = 0, $i_max = count($PAGES); $i < $i_max; $i ++) {
|
||||
if ($PAGES[$i]["menu"] && $PAGES[$i]["online"]) {
|
||||
$menuarray[] = $PAGES[$i];
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
for ($i = 1; $i <= count($menuarray); $i ++) {
|
||||
// do that for new array
|
||||
$j = $i - 1;
|
||||
$menu_data[$j]['pagename'] = htmlentities($menuarray[($i-1)]["page_name"]);
|
||||
$menu_data[$j]['filename'] = $menuarray[($i-1)]["filename"].$menuarray[($i-1)]["query_string"];
|
||||
if ($i == 1 || !(($i - 1) % $SPLIT_FACTOR)) {
|
||||
$menu_data[$j]['splitfactor_in'] = 1;
|
||||
}
|
||||
if ($menuarray[($i - 1)]["filename"] == $form->getPageName()) {
|
||||
$position = $i - 1;
|
||||
$menu_data[$j]['position'] = 1;
|
||||
} else {
|
||||
// add query stuff
|
||||
// HAS TO DONE LATER ... set urlencode, etc ...
|
||||
// check if popup needed
|
||||
if ($menuarray[($i - 1)]["popup"]) {
|
||||
$menu_data[$j]['popup'] = 1;
|
||||
$menu_data[$j]['rand'] = uniqid(rand());
|
||||
$menu_data[$j]['width'] = $menuarray[($i-1)]["popup_x"];
|
||||
$menu_data[$j]['height'] = $menuarray[($i-1)]["popup_y"];
|
||||
} // popup or not
|
||||
} // highlight or not
|
||||
if (!($i % $SPLIT_FACTOR) || (($i + 1) > count($menuarray))) {
|
||||
$menu_data[$j]['splitfactor_out'] = 1;
|
||||
} // split
|
||||
} // for
|
||||
$DATA['menu_data'] = $menu_data;
|
||||
$DATA['page_name'] = $menuarray[$position]["page_name"];
|
||||
$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;
|
||||
|
||||
// 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("protected");
|
||||
$elements[] = $form->formCreateElement("username");
|
||||
$elements[] = $form->formCreateElement("password");
|
||||
$elements[] = $form->formCreateElement("password_change_interval");
|
||||
$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("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");
|
||||
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 (!$form->table_array["edit_page_id"]["value"]) {
|
||||
$q = "DELETE FROM temp_files";
|
||||
$form->dbExec($q);
|
||||
// gets all files in the current dir ending with .php
|
||||
$crap = exec("ls *.php", $output, $status);
|
||||
// now get all that are NOT in de DB
|
||||
$q = "INSERT INTO temp_files VALUES ";
|
||||
for ($i = 0; $i < count($output); $i ++) {
|
||||
$t_q = "('".$form->dbEscapeString($output[$i])."')";
|
||||
$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("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("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");
|
||||
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");
|
||||
break;
|
||||
default:
|
||||
print "[No valid page definition given]";
|
||||
break;
|
||||
}
|
||||
// $form->debug('edit', "Elements: <pre>".$form->printAr($elements));
|
||||
$DATA['elements'] = $elements;
|
||||
$DATA['hidden'] = $form->formCreateHiddenFields();
|
||||
$DATA['save_delete'] = $form->formCreateSaveDelete();
|
||||
}
|
||||
$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_'.$lang, 'editAdmin_'.$lang);
|
||||
|
||||
// debug output
|
||||
echo $login->printErrorMsg();
|
||||
echo $form->printErrorMsg();
|
||||
|
||||
// __END__
|
||||
499
www/includes/edit_base.php
Normal file
@@ -0,0 +1,499 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens "Gullevek" Schwaighofer (www.gullevek.org)
|
||||
* CREATED: 2003/06/10
|
||||
* SHORT DESCRIPTION:
|
||||
* central include for all edit_pages
|
||||
* - edit_groups.php
|
||||
* - edit_languages.php
|
||||
* - edit_pages.php
|
||||
* - edit_schemes.php
|
||||
* - edit_users.php
|
||||
* - edit_visible_group.php
|
||||
* HISTORY:
|
||||
* 2005/06/30 (cs) remove color settings, they are in CSS File now
|
||||
* 2005/06/22 (cs) moved load of config array into form class, set lang and lang is must set var for form class; removed the page name setting, moved it into the form class, remove all HTML from main page
|
||||
* 2004/09/30 (cs) changed layout to fit default layout & changed LIBS, etc
|
||||
* 2003-06-10: creation of this page
|
||||
*********************************************************************/
|
||||
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
|
||||
// TODO: only extract _POST data that is needed
|
||||
extract($_POST, EXTR_SKIP);
|
||||
|
||||
ob_start();
|
||||
require 'config.php';
|
||||
// set session name here
|
||||
$SET_SESSION_NAME = EDIT_SESSION_NAME;
|
||||
// overrride debug flags
|
||||
if (!DEBUG) {
|
||||
$DEBUG_ALL = 0;
|
||||
$PRINT_ALL = 0;
|
||||
$DB_DEBUG = 0;
|
||||
$ECHO_ALL = 0;
|
||||
}
|
||||
|
||||
// should be utf8
|
||||
header("Content-type: text/html; charset=".DEFAULT_ENCODING);
|
||||
ob_end_flush();
|
||||
$login = new CoreLibs\ACL\Login(DB_CONFIG);
|
||||
|
||||
// create form class
|
||||
$form = new CoreLibs\Output\Form\Generate(DB_CONFIG);
|
||||
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();
|
||||
|
||||
// $form->debug('POST', $form->printAr($_POST));
|
||||
|
||||
if (TARGET == 'live' || TARGET == 'remote') {
|
||||
// login
|
||||
$login->debug_output_all = DEBUG ? 1 : 0;
|
||||
$login->echo_output_all = 0;
|
||||
$login->print_output_all = DEBUG ? 1 : 0;
|
||||
// form
|
||||
$form->debug_output_all = DEBUG ? 1 : 0;
|
||||
$form->echo_output_all = 0;
|
||||
$form->print_output_all = DEBUG ? 1 : 0;
|
||||
}
|
||||
// space for setting special debug flags
|
||||
$login->debug_output_all = 1;
|
||||
// set smarty arrays
|
||||
$HEADER = array();
|
||||
$DATA = array();
|
||||
$DEBUG_DATA = array();
|
||||
// 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'] = isset($ADMIN_STYLESHEET) ? $ADMIN_STYLESHEET : ADMIN_STYLESHEET;
|
||||
|
||||
if ($form->my_page_name == 'edit_order') {
|
||||
// get is for "table_name" and "where" only
|
||||
$table_name = isset($_GET['table_name']) ? $_GET['table_name'] : '';
|
||||
// $where = isset($_GET['where']) ? $_GET['where'] : '';
|
||||
// order name is _always_ order_number for the edit interface
|
||||
|
||||
// follwing arrays do exist here:
|
||||
// $position ... has the positions of the array(0..max), cause in a <select>
|
||||
// I can't put an number into the array field, in this array,
|
||||
// there are the POSITION stored, that should CHANGE there order (up/down)
|
||||
// $row_data_id ... has ALL ids from the sorting part
|
||||
// $row_data_order ... has ALL order positions from the soirting part
|
||||
if (!isset($position)) {
|
||||
$position = array();
|
||||
}
|
||||
$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]];
|
||||
$row_data_id[$position[$i]] = $row_data_id[$position[$i] - 1];
|
||||
$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];
|
||||
$row_data_id[$position[$i] + 1] = $row_data_id[$position[$i]];
|
||||
$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 ++) {
|
||||
$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 = array();
|
||||
$options_id = array();
|
||||
$options_name = array();
|
||||
$options_selected = array();
|
||||
// DB read data for menu
|
||||
while ($res = $form->dbReturn($q)) {
|
||||
$row_data[] = array(
|
||||
"id" => $res[$table_name."_id"],
|
||||
"name" => $res["name"],
|
||||
"order" => $res["order_number"]
|
||||
);
|
||||
} // while read data ...
|
||||
|
||||
// html title
|
||||
$HEADER['HTML_TITLE'] = $form->l->__('Edit Order');
|
||||
|
||||
$messages = array();
|
||||
// error msg
|
||||
if (isset($error)) {
|
||||
if (!isset($msg)) {
|
||||
$msg = array();
|
||||
}
|
||||
$messages[] = array('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 ($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 = array();
|
||||
$row_data_order = array();
|
||||
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'] = isset($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 = array();
|
||||
// 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->debug('menu', $form->printAr($PAGES));
|
||||
|
||||
// build nav from $PAGES ...
|
||||
if (!isset($PAGES) || !is_array($PAGES)) {
|
||||
$PAGES = array();
|
||||
}
|
||||
$menuarray = array();
|
||||
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 = array();
|
||||
// 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 ($data['filename'] == $form->getPageName() &&
|
||||
(!isset($data['hostname']) || (
|
||||
isset($data['hostname']) &&
|
||||
(!$data['hostname'] || strstr($data['hostname'], CONTENT_PATH) !== false)
|
||||
))
|
||||
) {
|
||||
$position = $j;
|
||||
$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->debug('MENU ARRAY', $form->printAr($menu_data));
|
||||
$DATA['menu_data'] = $menu_data;
|
||||
$DATA['page_name'] = $menuarray[$position]['page_name'];
|
||||
$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 = array();
|
||||
// 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('protected');
|
||||
$elements[] = $form->formCreateElement('username');
|
||||
$elements[] = $form->formCreateElement('password');
|
||||
$elements[] = $form->formCreateElement('password_change_interval');
|
||||
$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('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 = array('../admin/', '../frontend/');
|
||||
$files = array('*.php');
|
||||
$search_glob = array();
|
||||
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
|
||||
// eg ../admin/test.php is ../admin/ and test.php
|
||||
preg_match("/([\.\/\w]+\/)+(\w+\.\w{1,})$/", $output_file, $matches);
|
||||
// if named config.php, skip
|
||||
if ($matches[2] != 'config.php') {
|
||||
if ($t_q) {
|
||||
$t_q .= ', ';
|
||||
}
|
||||
$t_q .= "('".$form->dbEscapeString($matches[1])."', '".$form->dbEscapeString($matches[2])."')";
|
||||
}
|
||||
}
|
||||
$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->debug('edit', "Elements: <pre>".$form->printAr($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'] = isset($DEBUG_TMPL) ? $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);
|
||||
|
||||
// debug output
|
||||
echo $login->printErrorMsg();
|
||||
echo $form->printErrorMsg();
|
||||
|
||||
// __END__
|
||||
@@ -1,99 +0,0 @@
|
||||
<?php
|
||||
|
||||
$edit_access = array (
|
||||
"table_array" => array (
|
||||
"edit_access_id" => array (
|
||||
"value" => $GLOBALS["edit_access_id"],
|
||||
"type" => "hidden",
|
||||
"pk" => 1
|
||||
),
|
||||
"name" => array (
|
||||
"value" => $GLOBALS["name"],
|
||||
"output_name" => $this->l->__("Access Group Name"),
|
||||
"mandatory" => 1,
|
||||
"type" => "text",
|
||||
"error_check" => "alphanumericspace|unique"
|
||||
),
|
||||
"description" => array (
|
||||
"value" => $GLOBALS["description"],
|
||||
"output_name" => $this->l->__("Description"),
|
||||
"type" => "textarea"
|
||||
),
|
||||
"color" => array (
|
||||
"value" => $GLOBALS["color"],
|
||||
"output_name" => $this->l->__("Color"),
|
||||
"mandatory" => 0,
|
||||
"type" => "text",
|
||||
"size" => 6,
|
||||
"length" => 6,
|
||||
"error_check" => "custom",
|
||||
"error_regex" => "/[\dA-Fa-f]{6}/",
|
||||
"error_example" => "F6A544"
|
||||
),
|
||||
"enabled" => array (
|
||||
"value" => $GLOBALS["enabled"],
|
||||
"output_name" => "Enabled",
|
||||
"type" => "binary",
|
||||
"int" => 1, // OR "bool" => 1
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"protected" => array (
|
||||
"value" => $GLOBALS["protected"],
|
||||
"output_name" => "Protected",
|
||||
"type" => "binary",
|
||||
"int" => 1,
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
)
|
||||
),
|
||||
"table_name" => "edit_access",
|
||||
"load_query" => "SELECT edit_access_id, name FROM edit_access ORDER BY name",
|
||||
"show_fields" => array (
|
||||
array (
|
||||
"name" => "name"
|
||||
)
|
||||
),
|
||||
"element_list" => array (
|
||||
"edit_access_data" => array (
|
||||
"output_name" => "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" => array (
|
||||
"edit_access_data_id" => array (
|
||||
"output_name" => "Activate",
|
||||
"type" => "hidden",
|
||||
"int" => 1,
|
||||
"pk_id" => 1
|
||||
),
|
||||
"name" => array (
|
||||
"type" => "text",
|
||||
"error_check" => "alphanumeric|unique",
|
||||
"output_name" => "Name"
|
||||
),
|
||||
"value" => array (
|
||||
"type" => "text",
|
||||
"output_name" => "Value"
|
||||
),
|
||||
"enabled" => array (
|
||||
"type" => "checkbox",
|
||||
"output_name" => "Activate",
|
||||
"int" => 1,
|
||||
"element_list" => array(1)
|
||||
),
|
||||
"edit_access_id" => array (
|
||||
"int" => 1,
|
||||
"type" => "hidden",
|
||||
"fk_id" => 1 # reference main key from master table above
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
108
www/includes/table_arrays/array_edit_access.php
Normal file
@@ -0,0 +1,108 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_access = array(
|
||||
'table_array' => array(
|
||||
'edit_access_id' => array(
|
||||
'value' => isset($GLOBALS['edit_access_id']) ? $GLOBALS['edit_access_id'] : '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Access Group Name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumericspace|unique'
|
||||
),
|
||||
'description' => array(
|
||||
'value' => isset($GLOBALS['description']) ? $GLOBALS['description'] : '',
|
||||
'output_name' => 'Description',
|
||||
'type' => 'textarea'
|
||||
),
|
||||
'color' => array(
|
||||
'value' => isset($GLOBALS['color']) ? $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' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : 0,
|
||||
'output_name' => 'Enabled',
|
||||
'type' => 'binary',
|
||||
'int' => 1, // OR 'bool' => 1
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'protected' => array(
|
||||
'value' => isset($GLOBALS['protected']) ? $GLOBALS['protected'] : 0,
|
||||
'output_name' => 'Protected',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
'error_check' => 'json',
|
||||
'rows' => 10,
|
||||
'cols' => 60
|
||||
),
|
||||
),
|
||||
'table_name' => 'edit_access',
|
||||
"load_query" => "SELECT edit_access_id, name FROM edit_access ORDER BY name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
)
|
||||
),
|
||||
'element_list' => array(
|
||||
'edit_access_data' => array(
|
||||
'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' => array(
|
||||
'name' => array(
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique',
|
||||
'output_name' => 'Name',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'value' => array(
|
||||
'type' => 'text',
|
||||
'output_name' => 'Value'
|
||||
),
|
||||
'enabled' => array(
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array(1)
|
||||
),
|
||||
/*'edit_access_id' => array(
|
||||
'int' => 1,
|
||||
'type' => 'hidden',
|
||||
'fk_id' => 1 # reference main key from master table above
|
||||
),*/
|
||||
'edit_access_data_id' => array(
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
@@ -1,102 +0,0 @@
|
||||
<?php
|
||||
|
||||
$edit_groups = array (
|
||||
"table_array" => array (
|
||||
"edit_group_id" => array (
|
||||
"value" => $GLOBALS["edit_group_id"],
|
||||
"pk" => 1,
|
||||
"type" => "hidden"
|
||||
),
|
||||
"enabled" => array (
|
||||
"value" => $GLOBALS["enabled"],
|
||||
"output_name" => "Enabled",
|
||||
"int" => 1,
|
||||
"type" => "binary",
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"name" => array (
|
||||
"value" => $GLOBALS["name"],
|
||||
"output_name" => "Group Name",
|
||||
"type" => "text",
|
||||
"mandatory" => 1
|
||||
),
|
||||
"edit_access_right_id" => array (
|
||||
"value" => $GLOBALS["edit_access_right_id"],
|
||||
"output_name" => "Group Level",
|
||||
"mandatory" => 1,
|
||||
"int" => 1,
|
||||
"type" => "drop_down_db",
|
||||
"query" => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
"edit_scheme_id" => array (
|
||||
"value" => $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"
|
||||
)
|
||||
),
|
||||
"load_query" => "SELECT edit_group_id, name, enabled FROM edit_group ORDER BY name",
|
||||
"table_name" => "edit_group",
|
||||
"show_fields" => array (
|
||||
array (
|
||||
"name" => "name"
|
||||
),
|
||||
array (
|
||||
"name" => "enabled",
|
||||
"binary" => array ("Yes", "No"),
|
||||
"before_value" => "Enabled: "
|
||||
)
|
||||
),
|
||||
"element_list" => array (
|
||||
"edit_page_access" => array (
|
||||
"output_name" => "Pages",
|
||||
"mandatory" => 1,
|
||||
"delete" => 0, // set then reference entries are deleted, else the "enable" flag is only set
|
||||
"enable_name" => "enable_page_access",
|
||||
"prefix" => "epa",
|
||||
"read_data" => array (
|
||||
"table_name" => "edit_page",
|
||||
"pk_id" => "edit_page_id",
|
||||
"name" => "name",
|
||||
"order" => "order_number"
|
||||
),
|
||||
"elements" => array (
|
||||
"edit_page_access_id" => array (
|
||||
"output_name" => "Activate",
|
||||
"type" => "hidden",
|
||||
"int" => 1,
|
||||
"pk_id" => 1
|
||||
),
|
||||
"enabled" => array (
|
||||
"type" => "checkbox",
|
||||
"output_name" => "Activate",
|
||||
"int" => 1,
|
||||
"element_list" => array(1)
|
||||
),
|
||||
"edit_access_right_id" => array (
|
||||
"type" => "drop_down_db",
|
||||
"output_name" => "Access Level",
|
||||
"int" => 1,
|
||||
"preset" => 1, // first of the select
|
||||
"query" => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
"edit_page_id" => array (
|
||||
"int" => 1,
|
||||
"type" => "hidden"
|
||||
)
|
||||
/*,
|
||||
"edit_default" => array (
|
||||
"output_name" => "Default",
|
||||
"type" => "radio",
|
||||
"mandatory" => 1
|
||||
)*/
|
||||
)
|
||||
) // edit pages ggroup
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
109
www/includes/table_arrays/array_edit_groups.php
Normal file
@@ -0,0 +1,109 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_groups = array(
|
||||
'table_array' => array(
|
||||
'edit_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_group_id']) ? $GLOBALS['edit_group_id'] : '',
|
||||
'pk' => 1,
|
||||
'type' => 'hidden'
|
||||
),
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Group Name',
|
||||
'type' => 'text',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'value' => isset($GLOBALS['edit_access_right_id']) ? $GLOBALS['edit_access_right_id'] : '',
|
||||
'output_name' => 'Group Level',
|
||||
'mandatory' => 1,
|
||||
'int' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_scheme_id' => array(
|
||||
'value' => isset($GLOBALS['edit_scheme_id']) ? $GLOBALS['edit_scheme_id'] : '',
|
||||
'output_name' => 'Group Scheme',
|
||||
'int_null' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
|
||||
),
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
'error_check' => 'json',
|
||||
'rows' => 10,
|
||||
'cols' => 60
|
||||
),
|
||||
),
|
||||
'load_query' => "SELECT edit_group_id, name, enabled FROM edit_group ORDER BY name",
|
||||
'table_name' => 'edit_group',
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
),
|
||||
array(
|
||||
'name' => 'enabled',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Enabled: '
|
||||
)
|
||||
),
|
||||
'element_list' => array(
|
||||
'edit_page_access' => array(
|
||||
'output_name' => 'Pages',
|
||||
'mandatory' => 1,
|
||||
'delete' => 0, // set then reference entries are deleted, else the 'enable' flag is only set
|
||||
'enable_name' => 'enable_page_access',
|
||||
'prefix' => 'epa',
|
||||
'read_data' => array(
|
||||
'table_name' => 'edit_page',
|
||||
'pk_id' => 'edit_page_id',
|
||||
'name' => 'name',
|
||||
'order' => 'order_number'
|
||||
),
|
||||
'elements' => array(
|
||||
'edit_page_access_id' => array(
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
),
|
||||
'enabled' => array(
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'type' => 'drop_down_db',
|
||||
'output_name' => 'Access Level',
|
||||
'int' => 1,
|
||||
'preset' => 1, // first of the select
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_page_id' => array(
|
||||
'int' => 1,
|
||||
'type' => 'hidden'
|
||||
)
|
||||
/*,
|
||||
'edit_default' => array(
|
||||
'output_name' => 'Default',
|
||||
'type' => 'radio',
|
||||
'mandatory' => 1
|
||||
)*/
|
||||
)
|
||||
) // edit pages ggroup
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
@@ -1,75 +0,0 @@
|
||||
<?php
|
||||
|
||||
$edit_languages=array (
|
||||
"table_array" => array (
|
||||
"edit_language_id" => array (
|
||||
"value" => $GLOBALS["edit_language_id"],
|
||||
"type" => "hidden",
|
||||
"pk" => 1
|
||||
),
|
||||
"short_name" => array (
|
||||
"value" => $GLOBALS["short_name"],
|
||||
"output_name" => "Language (short)",
|
||||
"mandatory" => 1,
|
||||
"type" => "text",
|
||||
"size" => 2,
|
||||
"length" => 2
|
||||
),
|
||||
"long_name" => array (
|
||||
"value" => $GLOBALS["long_name"],
|
||||
"output_name" => "Language (long)",
|
||||
"mandatory" => 1,
|
||||
"type" => "text",
|
||||
"size" => 40
|
||||
),
|
||||
"iso_name" => array (
|
||||
"value" => $GLOBALS["iso_name"],
|
||||
"output_name" => "ISO Code",
|
||||
"mandatory" => 1,
|
||||
"type" => "text"
|
||||
),
|
||||
"order_number" => array (
|
||||
"value" => $GLOBALS["order_number"],
|
||||
"int" => 1,
|
||||
"order" => 1
|
||||
),
|
||||
"enabled" => array (
|
||||
"value" => $GLOBALS["enabled"],
|
||||
"output_name" => "Enabled",
|
||||
"int" => 1,
|
||||
"type" => "binary",
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"lang_default" => array (
|
||||
"value" => $GLOBALS["lang_default"],
|
||||
"output_name" => "Default Language",
|
||||
"int" => 1,
|
||||
"type" => "binary",
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
)
|
||||
),
|
||||
"load_query" => "SELECT edit_language_id, long_name, iso_name, enabled FROM edit_language ORDER BY long_name",
|
||||
"show_fields" => array (
|
||||
array (
|
||||
"name" => "long_name"
|
||||
),
|
||||
array (
|
||||
"name" => "iso_name",
|
||||
"before_value" => "ISO: "
|
||||
),
|
||||
array (
|
||||
"name" => "enabled",
|
||||
"before_value" => "Enabled: ",
|
||||
"binary" => array ("Yes","No")
|
||||
)
|
||||
),
|
||||
"table_name" => "edit_language"
|
||||
);
|
||||
|
||||
// __END__
|
||||
75
www/includes/table_arrays/array_edit_languages.php
Normal file
@@ -0,0 +1,75 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_languages=array(
|
||||
'table_array' => array(
|
||||
'edit_language_id' => array(
|
||||
'value' => isset($GLOBALS['edit_language_id']) ? $GLOBALS['edit_language_id'] : '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'short_name' => array(
|
||||
'value' => isset($GLOBALS['short_name']) ? $GLOBALS['short_name'] : '',
|
||||
'output_name' => 'Language (short)',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 2,
|
||||
'length' => 2
|
||||
),
|
||||
'long_name' => array(
|
||||
'value' => isset($GLOBALS['long_name']) ? $GLOBALS['long_name'] : '',
|
||||
'output_name' => 'Language (long)',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 40
|
||||
),
|
||||
'iso_name' => array(
|
||||
'value' => isset($GLOBALS['iso_name']) ? $GLOBALS['iso_name'] : '',
|
||||
'output_name' => 'ISO Code',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
'int' => 1,
|
||||
'order' => 1
|
||||
),
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'lang_default' => array(
|
||||
'value' => isset($GLOBALS['lang_default']) ? $GLOBALS['lang_default'] : '',
|
||||
'output_name' => 'Default Language',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
)
|
||||
),
|
||||
'load_query' => "SELECT edit_language_id, long_name, iso_name, enabled FROM edit_language ORDER BY long_name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'long_name'
|
||||
),
|
||||
array(
|
||||
'name' => 'iso_name',
|
||||
'before_value' => 'ISO: '
|
||||
),
|
||||
array(
|
||||
'name' => 'enabled',
|
||||
'before_value' => 'Enabled: ',
|
||||
'binary' => array('Yes','No')
|
||||
)
|
||||
),
|
||||
'table_name' => 'edit_language'
|
||||
);
|
||||
|
||||
// __END__
|
||||
@@ -1,40 +0,0 @@
|
||||
<?php
|
||||
|
||||
$edit_menu_group = array (
|
||||
"table_array" => array (
|
||||
"edit_menu_group_id" => array (
|
||||
"value" => $GLOBALS["edit_menu_group_id"],
|
||||
"type" => "hidden",
|
||||
"pk" => 1
|
||||
),
|
||||
"name" => array (
|
||||
"value" => $GLOBALS["name"],
|
||||
"output_name" => $this->l->__("Group name"),
|
||||
"mandatory" => 1,
|
||||
"type" => "text"
|
||||
),
|
||||
"flag" => array (
|
||||
"value" => $GLOBALS["flag"],
|
||||
"output_name" => $this->l->__("Flag"),
|
||||
"mandatory" => 1,
|
||||
"type" => "text",
|
||||
"error_check" => "alphanumeric|unique"
|
||||
),
|
||||
"order_number" => array (
|
||||
"value" => $GLOBALS["order_number"],
|
||||
"output_name" => "Group order",
|
||||
"type" => "order",
|
||||
"int" => 1,
|
||||
"order" => 1
|
||||
)
|
||||
),
|
||||
"table_name" => "edit_menu_group",
|
||||
"load_query" => "SELECT edit_menu_group_id, name FROM edit_menu_group ORDER BY name",
|
||||
"show_fields" => array (
|
||||
array (
|
||||
"name" => "name"
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
40
www/includes/table_arrays/array_edit_menu_group.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_menu_group = array(
|
||||
'table_array' => array(
|
||||
'edit_menu_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_menu_group_id']) ? $GLOBALS['edit_menu_group_id'] : '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Group name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'flag' => array(
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
'output_name' => 'Flag',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique'
|
||||
),
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
'output_name' => 'Group order',
|
||||
'type' => 'order',
|
||||
'int' => 1,
|
||||
'order' => 1
|
||||
)
|
||||
),
|
||||
'table_name' => 'edit_menu_group',
|
||||
'load_query' => "SELECT edit_menu_group_id, name FROM edit_menu_group ORDER BY name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
@@ -1,180 +0,0 @@
|
||||
<?php
|
||||
|
||||
$edit_pages = array (
|
||||
"table_array" => array (
|
||||
"edit_page_id" => array (
|
||||
"value" => $GLOBALS["edit_page_id"],
|
||||
"type" => "hidden",
|
||||
"pk" => 1
|
||||
),
|
||||
"filename" => array (
|
||||
"value" => $GLOBALS["filename"],
|
||||
"output_name" => "Add File ...",
|
||||
"mandatory" => 1,
|
||||
"type" => "drop_down_db",
|
||||
"query" => "SELECT DISTINCT temp_files.filename AS id, temp_files.filename AS name FROM temp_files LEFT JOIN edit_page ep ON temp_files.filename = ep.filename WHERE ep.filename IS NULL"
|
||||
),
|
||||
"name" => array (
|
||||
"value" => $GLOBALS["name"],
|
||||
"output_name" => "Page name",
|
||||
"mandatory" => 1,
|
||||
"type" => "text"
|
||||
),
|
||||
"order_number" => array (
|
||||
"value" => $GLOBALS["order_number"],
|
||||
"output_name" => "Page order",
|
||||
"type" => "order",
|
||||
"int" => 1,
|
||||
"order" => 1
|
||||
),
|
||||
/* "flag" => array (
|
||||
"value" => $GLOBALS["flag"],
|
||||
"output_name" => "Page Flag",
|
||||
"type" => "drop_down_array",
|
||||
"query" => array (
|
||||
"0" => "0",
|
||||
"1" => "1",
|
||||
"2" => "2",
|
||||
"3" => "3",
|
||||
"4" => "4",
|
||||
"5" => "5"
|
||||
)
|
||||
),*/
|
||||
"online" => array (
|
||||
"value" => $GLOBALS["online"],
|
||||
"output_name" => "Online",
|
||||
"int" => 1,
|
||||
"type" => "binary",
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"menu" => array (
|
||||
"value" => $GLOBALS["menu"],
|
||||
"output_name" => "Menu",
|
||||
"int" => 1,
|
||||
"type" => "binary",
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"popup" => array (
|
||||
"value" => $GLOBALS["popup"],
|
||||
"output_name" => "Popup",
|
||||
"int" => 1,
|
||||
"type" => "binary",
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"popup_x" => array (
|
||||
"value" => $GLOBALS["popup_x"],
|
||||
"output_name" => "Popup Width",
|
||||
"int_null" => 1,
|
||||
"type" => "text",
|
||||
"size" => 4,
|
||||
"length" => 4
|
||||
),
|
||||
"popup_y" => array (
|
||||
"value" => $GLOBALS["popup_y"],
|
||||
"output_name" => "Popup Height",
|
||||
"int_null" => 1,
|
||||
"type" => "text",
|
||||
"size" => 4,
|
||||
"length" => 4
|
||||
)/*,
|
||||
"query_string" => array (
|
||||
"value" => $GLOBALS["query_string"],
|
||||
"output_name" => "Query String for Link",
|
||||
"type" => "text",
|
||||
"size" => "50"
|
||||
)*/
|
||||
),
|
||||
"load_query" => "SELECT edit_page_id, filename, name, online, menu, popup FROM edit_page ORDER BY order_number",
|
||||
"table_name" => "edit_page",
|
||||
"show_fields" => array (
|
||||
array (
|
||||
"name" => "name"
|
||||
),
|
||||
array (
|
||||
"name" => "filename",
|
||||
"before_value" => "Filename: "
|
||||
),
|
||||
array (
|
||||
"name" => "online",
|
||||
"binary" => array ("Yes","No"),
|
||||
"before_value" => "Online: "
|
||||
),
|
||||
array (
|
||||
"name" => "menu",
|
||||
"binary" => array ("Yes","No"),
|
||||
"before_value" => "Menu: "
|
||||
),
|
||||
array (
|
||||
"name" => "popup",
|
||||
"binary" => array ("Yes","No"),
|
||||
"before_value" => "Popup: "
|
||||
)
|
||||
),
|
||||
"reference_arrays" => array (
|
||||
"edit_visible_group" => array (
|
||||
"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" => array (
|
||||
"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" => array (
|
||||
"edit_query_string" => array (
|
||||
"output_name" => "Query Strings",
|
||||
"delete_name" => "remove_query_string",
|
||||
"prefix" => "eqs",
|
||||
"elements" => array (
|
||||
"name" => array (
|
||||
"output_name" => "Name",
|
||||
"type" => "text",
|
||||
"error_check" => "unique|alphanumeric",
|
||||
"mandatory" => 1
|
||||
),
|
||||
"value" => array (
|
||||
"output_name" => "Value",
|
||||
"type" => "text"
|
||||
),
|
||||
"enabled" => array (
|
||||
"output_name" => "Enabled",
|
||||
"int" => 1,
|
||||
"type" => "checkbox",
|
||||
"element_list" => array (1)
|
||||
),
|
||||
"dynamic" => array (
|
||||
"output_name" => "Dynamic",
|
||||
"int" => 1,
|
||||
"type" => "checkbox",
|
||||
"element_list" => array (1)
|
||||
),
|
||||
"edit_query_string_id" => array (
|
||||
"type" => "hidden",
|
||||
"pk_id" => 1
|
||||
)
|
||||
) // elements
|
||||
) // query_string element list
|
||||
) // element list
|
||||
);
|
||||
|
||||
// __END__
|
||||
241
www/includes/table_arrays/array_edit_pages.php
Normal file
@@ -0,0 +1,241 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_pages = array(
|
||||
'table_array' => array(
|
||||
'edit_page_id' => array(
|
||||
'value' => isset($GLOBALS['edit_page_id']) ? $GLOBALS['edit_page_id'] : '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'filename' => array(
|
||||
'value' => isset($GLOBALS['filename']) ? $GLOBALS['filename'] : '',
|
||||
'output_name' => 'Add File ...',
|
||||
'mandatory' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT DISTINCT temp_files.filename AS id, temp_files.folder || temp_files.filename AS name ".
|
||||
"FROM temp_files ".
|
||||
"LEFT JOIN edit_page ep ON temp_files.filename = ep.filename ".
|
||||
"WHERE ep.filename IS NULL"
|
||||
),
|
||||
'hostname' => array(
|
||||
'value' => isset($GLOBALS['hostname']) ? $GLOBALS['hostname'] : '',
|
||||
'output_name' => 'Hostname or folder',
|
||||
'type' => 'text'
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Page name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
'output_name' => 'Page order',
|
||||
'type' => 'order',
|
||||
'int' => 1,
|
||||
'order' => 1
|
||||
),
|
||||
/* 'flag' => array(
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
'output_name' => 'Page Flag',
|
||||
'type' => 'drop_down_array',
|
||||
'query' => array(
|
||||
'0' => '0',
|
||||
'1' => '1',
|
||||
'2' => '2',
|
||||
'3' => '3',
|
||||
'4' => '4',
|
||||
'5' => '5'
|
||||
)
|
||||
),*/
|
||||
'online' => array(
|
||||
'value' => isset($GLOBALS['online']) ? $GLOBALS['online'] : '',
|
||||
'output_name' => 'Online',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'menu' => array(
|
||||
'value' => isset($GLOBALS['menu']) ? $GLOBALS['menu'] : '',
|
||||
'output_name' => 'Menu',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'popup' => array(
|
||||
'value' => isset($GLOBALS['popup']) ? $GLOBALS['popup'] : '',
|
||||
'output_name' => 'Popup',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'popup_x' => array(
|
||||
'value' => isset($GLOBALS['popup_x']) ? $GLOBALS['popup_x'] : '',
|
||||
'output_name' => 'Popup Width',
|
||||
'int_null' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 4,
|
||||
'length' => 4
|
||||
),
|
||||
'popup_y' => array(
|
||||
'value' => isset($GLOBALS['popup_y']) ? $GLOBALS['popup_y'] : '',
|
||||
'output_name' => 'Popup Height',
|
||||
'int_null' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 4,
|
||||
'length' => 4
|
||||
),
|
||||
'content_alias_edit_page_id' => array(
|
||||
'value' => isset($GLOBALS['content_alias_edit_page_id']) ? $GLOBALS['content_alias_edit_page_id'] : '',
|
||||
'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' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
),
|
||||
array(
|
||||
'name' => 'filename',
|
||||
'before_value' => 'Filename: '
|
||||
),
|
||||
array(
|
||||
'name' => 'online',
|
||||
'binary' => array('Yes','No'),
|
||||
'before_value' => 'Online: '
|
||||
),
|
||||
array(
|
||||
'name' => 'menu',
|
||||
'binary' => array('Yes','No'),
|
||||
'before_value' => 'Menu: '
|
||||
),
|
||||
array(
|
||||
'name' => 'popup',
|
||||
'binary' => array('Yes','No'),
|
||||
'before_value' => 'Popup: '
|
||||
)
|
||||
),
|
||||
'reference_arrays' => array(
|
||||
'edit_visible_group' => array(
|
||||
'table_name' => 'edit_page_visible_group',
|
||||
'other_table_pk' => 'edit_visible_group_id',
|
||||
'output_name' => 'Visible Groups (access)',
|
||||
'mandatory' => 1,
|
||||
'select_size' => 10,
|
||||
'selected' => isset($GLOBALS['edit_visible_group_id']) ? $GLOBALS['edit_visible_group_id'] : '',
|
||||
'query' => "SELECT edit_visible_group_id, 'Name: ' || name || ', ' || 'Flag: ' || flag FROM edit_visible_group ORDER BY name"
|
||||
),
|
||||
'edit_menu_group' => array(
|
||||
'table_name' => 'edit_page_menu_group',
|
||||
'other_table_pk' => 'edit_menu_group_id',
|
||||
'output_name' => 'Menu Groups (grouping)',
|
||||
'mandatory' => 1,
|
||||
'select_size' => 10,
|
||||
'selected' => isset($GLOBALS['edit_menu_group_id']) ? $GLOBALS['edit_menu_group_id'] : '',
|
||||
'query' => "SELECT edit_menu_group_id, 'Name: ' || name || ', ' || 'Flag: ' || flag FROM edit_menu_group ORDER BY order_number"
|
||||
)
|
||||
|
||||
),
|
||||
'element_list' => array(
|
||||
'edit_query_string' => array(
|
||||
'output_name' => 'Query Strings',
|
||||
'delete_name' => 'remove_query_string',
|
||||
'prefix' => 'eqs',
|
||||
'elements' => array(
|
||||
'name' => array(
|
||||
'output_name' => 'Name',
|
||||
'type' => 'text',
|
||||
'error_check' => 'unique|alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'value' => array(
|
||||
'output_name' => 'Value',
|
||||
'type' => 'text'
|
||||
),
|
||||
'enabled' => array(
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'dynamic' => array(
|
||||
'output_name' => 'Dynamic',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_query_string_id' => array(
|
||||
'type' => 'hidden',
|
||||
'pk_id' => 1
|
||||
)
|
||||
) // elements
|
||||
), // query_string element list
|
||||
'edit_page_content' => array(
|
||||
'output_name' => 'Page Content',
|
||||
'delete_name' => 'remove_page_content',
|
||||
'prefix' => 'epc',
|
||||
'elements' => array(
|
||||
'name' => array(
|
||||
'output_name' => 'Content',
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'uid' => array(
|
||||
'output_name' => 'UID',
|
||||
'type' => 'text',
|
||||
'error_check' => 'unique|alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'order_number' => array(
|
||||
'output_name' => 'Order',
|
||||
'type' => 'text',
|
||||
'error_check' => 'int',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'online' => array(
|
||||
'output_name' => 'Online',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'type' => 'drop_down_db',
|
||||
'output_name' => 'Access Level',
|
||||
'int' => 1,
|
||||
'preset' => 1, // first of the select
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_page_content_id' => array(
|
||||
'type' => 'hidden',
|
||||
'pk_id' => 1
|
||||
)
|
||||
)
|
||||
)
|
||||
) // element list
|
||||
);
|
||||
|
||||
// __END__
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
$edit_schemes = array (
|
||||
"table_array" => array (
|
||||
"edit_scheme_id" => array (
|
||||
"value" => $GLOBALS["edit_scheme_id"],
|
||||
"type" => "hidden",
|
||||
"pk" => 1
|
||||
),
|
||||
"name" => array (
|
||||
"value" => $GLOBALS["name"],
|
||||
"output_name" => "Scheme Name",
|
||||
"mandatory" => 1,
|
||||
"type" => "text"
|
||||
),
|
||||
"header_color" => array (
|
||||
"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" => array (
|
||||
"value" => $GLOBALS["enabled"],
|
||||
"output_name" => "Enabled",
|
||||
"int" => 1,
|
||||
"type" => "binary",
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"template" => array (
|
||||
"value" => $GLOBALS["template"],
|
||||
"output_name" => "Template",
|
||||
"type" => "text"
|
||||
)
|
||||
),
|
||||
"table_name" => "edit_scheme",
|
||||
"load_query" => "SELECT edit_scheme_id, name, enabled FROM edit_scheme ORDER BY name",
|
||||
"show_fields" => array (
|
||||
array (
|
||||
"name" => "name"
|
||||
),
|
||||
array (
|
||||
"name" => "enabled",
|
||||
"binary" => array ("Yes", "No"),
|
||||
"before_value" => "Enabled: "
|
||||
)
|
||||
)
|
||||
); // main array
|
||||
|
||||
// __END__
|
||||
57
www/includes/table_arrays/array_edit_schemes.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_schemes = array(
|
||||
'table_array' => array(
|
||||
'edit_scheme_id' => array(
|
||||
'value' => isset($GLOBALS['edit_scheme_id']) ? $GLOBALS['edit_scheme_id'] : '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Scheme Name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'header_color' => array(
|
||||
'value' => isset($GLOBALS['header_color']) ? $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' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'template' => array(
|
||||
'value' => isset($GLOBALS['template']) ? $GLOBALS['template'] : '',
|
||||
'output_name' => 'Template',
|
||||
'type' => 'text'
|
||||
)
|
||||
),
|
||||
'table_name' => 'edit_scheme',
|
||||
'load_query' => "SELECT edit_scheme_id, name, enabled FROM edit_scheme ORDER BY name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
),
|
||||
array(
|
||||
'name' => 'enabled',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Enabled: '
|
||||
)
|
||||
)
|
||||
); // main array
|
||||
|
||||
// __END__
|
||||
@@ -1,261 +0,0 @@
|
||||
<?php
|
||||
|
||||
$edit_users = array (
|
||||
"table_array" => array (
|
||||
"edit_user_id" => array (
|
||||
"value" => $GLOBALS["edit_user_id"],
|
||||
"type" => "hidden",
|
||||
"pk" => 1,
|
||||
"int" => 1
|
||||
),
|
||||
"username" => array (
|
||||
"value" => $GLOBALS["username"],
|
||||
"output_name" => "Username",
|
||||
"mandatory" => 1,
|
||||
"error_check" => "unique|alphanumericextended",
|
||||
"type" => "text"
|
||||
),
|
||||
"password" => array (
|
||||
"value" => $GLOBALS["password"],
|
||||
"HIDDEN_value" => $GLOBALS["HIDDEN_password"],
|
||||
"CONFIRM_value" => $GLOBALS["CONFIRM_password"],
|
||||
"output_name" => "Password",
|
||||
"mandatory" => 1,
|
||||
"type" => "password", // later has to be password for encryption in database
|
||||
'update' => array ( // connected field updates, and update data
|
||||
'password_change_date' => array ( // db row to update
|
||||
'type' => 'date', // type of field (int/text/date/etc)
|
||||
'value' => 'NOW()' // value [todo: complex reference
|
||||
)
|
||||
)
|
||||
),
|
||||
// password date when first insert and password is set, needs special field with connection to password
|
||||
// password reset force interval, if set, user needs to reset password after X time period
|
||||
'password_change_interval' => array (
|
||||
'value' => $GLOBALS['password_change_interval'],
|
||||
'output_name' => 'Password change interval',
|
||||
'error_check' => 'intervalshort', // can be any date length format. n Y/M/D [not H/M/S], only one set, no combination
|
||||
'type' => 'text',
|
||||
'interval' => 1, // interval needs NULL write for empty
|
||||
'size' => 5, // make it 5 chars long
|
||||
'length' => 5
|
||||
),
|
||||
"enabled" => array (
|
||||
"value" => $GLOBALS["enabled"],
|
||||
"output_name" => "Enabled",
|
||||
"type" => "binary",
|
||||
"int" => 1,
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"strict" => array (
|
||||
"value" => $GLOBALS["strict"],
|
||||
"output_name" => "Strict (Lock after errors)",
|
||||
"type" => "binary",
|
||||
"int" => 1,
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"locked" => array (
|
||||
"value" => $GLOBALS["locked"],
|
||||
"output_name" => "Locked (auto set if strict with errors)",
|
||||
"type" => "binary",
|
||||
"int" => 1,
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"admin" => array (
|
||||
"value" => $GLOBALS["admin"],
|
||||
"output_name" => "Admin",
|
||||
"type" => "binary",
|
||||
"int" => 1,
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"debug" => array (
|
||||
"value" => $GLOBALS["debug"],
|
||||
"output_name" => "Debug",
|
||||
"type" => "binary",
|
||||
"int" => 1,
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"db_debug" => array (
|
||||
"value" => $GLOBALS["db_debug"],
|
||||
"output_name" => "DB Debug",
|
||||
"type" => "binary",
|
||||
"int" => 1,
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
),
|
||||
"email" => array (
|
||||
"value" => $GLOBALS["email"],
|
||||
"output_name" => "E-Mail",
|
||||
"type" => "text"
|
||||
),
|
||||
"last_name" => array (
|
||||
"value" => $GLOBALS["last_name"],
|
||||
"output_name" => "Last Name",
|
||||
"type" => "text"
|
||||
),
|
||||
"first_name" => array (
|
||||
"value" => $GLOBALS["first_name"],
|
||||
"output_name" => "First Name",
|
||||
"type" => "text"
|
||||
),
|
||||
"edit_language_id" => array (
|
||||
"value" => $GLOBALS["edit_language_id"],
|
||||
"output_name" => "Language",
|
||||
"mandatory" => 1,
|
||||
"int" => 1,
|
||||
"type" => "drop_down_db",
|
||||
"query" => "SELECT edit_language_id, long_name FROM edit_language WHERE enabled = 1 ORDER BY order_number"
|
||||
),
|
||||
"edit_scheme_id" => array (
|
||||
"value" => $GLOBALS["edit_scheme_id"],
|
||||
"output_name" => "Scheme",
|
||||
"int_null" => 1,
|
||||
"type" => "drop_down_db",
|
||||
"query" => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
|
||||
),
|
||||
"edit_group_id" => array (
|
||||
"value" => $GLOBALS["edit_group_id"],
|
||||
"output_name" => "Group",
|
||||
"int" => 1,
|
||||
"type" => "drop_down_db",
|
||||
"query" => "SELECT edit_group_id, name FROM edit_group WHERE enabled = 1 ORDER BY name",
|
||||
"mandatory" => 1
|
||||
),
|
||||
"edit_access_right_id" => array (
|
||||
"value" => $GLOBALS["edit_access_right_id"],
|
||||
"output_name" => "User Level",
|
||||
"mandatory" => 1,
|
||||
"int" => 1,
|
||||
"type" => "drop_down_db",
|
||||
"query" => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
"login_error_count" => array (
|
||||
"output_name" => "Login error count",
|
||||
"value" => $GLOBALS['login_error_count'],
|
||||
"type" => "view",
|
||||
"empty" => "0"
|
||||
),
|
||||
"login_error_date_last" => array (
|
||||
"output_name" => "Last login error",
|
||||
"value" => $GLOBALS['login_error_date_liast'],
|
||||
"type" => "view",
|
||||
"empty" => "-"
|
||||
),
|
||||
"login_error_date_first" => array (
|
||||
"output_name" => "First login error",
|
||||
"value" => $GLOBALS['login_error_date_first'],
|
||||
"type" => "view",
|
||||
"empty" => "-"
|
||||
),
|
||||
"protected" => array (
|
||||
"value" => $GLOBALS["protected"],
|
||||
"output_name" => "Protected",
|
||||
"type" => "binary",
|
||||
"int" => 1,
|
||||
"element_list" => array (
|
||||
"1" => "Yes",
|
||||
"0" => "No"
|
||||
)
|
||||
)
|
||||
),
|
||||
"load_query" => "SELECT edit_user_id, username, enabled, debug, db_debug, strict, locked, login_error_count FROM edit_user ORDER BY username",
|
||||
"table_name" => "edit_user",
|
||||
"show_fields" => array (
|
||||
array (
|
||||
"name" => "username"
|
||||
),
|
||||
array (
|
||||
"name" => "enabled",
|
||||
"binary" => array ("Yes", "No"),
|
||||
"before_value" => "Enabled: "
|
||||
),
|
||||
array (
|
||||
"name" => "debug",
|
||||
"binary" => array ("Yes", "No"),
|
||||
"before_value" => "Debug: "
|
||||
),
|
||||
array (
|
||||
"name" => "db_debug",
|
||||
"binary" => array ("Yes", "No"),
|
||||
"before_value" => "DB Debug: "
|
||||
),
|
||||
array (
|
||||
"name" => "strict",
|
||||
"binary" => array ("Yes", "No"),
|
||||
"before_value" => "Strict: "
|
||||
),
|
||||
array (
|
||||
"name" => "locked",
|
||||
"binary" => array ("Yes", "No"),
|
||||
"before_value" => "Locked: "
|
||||
),
|
||||
array (
|
||||
"name" => "login_error_count",
|
||||
"before_value" => "Errors: "
|
||||
)
|
||||
),
|
||||
"element_list" => array (
|
||||
"edit_access_user" => array (
|
||||
"output_name" => "Accounts",
|
||||
"mandatory" => 1,
|
||||
"delete" => 0, // set then reference entries are deleted, else the "enable" flag is only set
|
||||
"prefix" => "ecu",
|
||||
"read_data" => array (
|
||||
"table_name" => "edit_access",
|
||||
"pk_id" => "edit_access_id",
|
||||
"name" => "name",
|
||||
"order" => "name"
|
||||
),
|
||||
"elements" => array (
|
||||
"edit_access_user_id" => array (
|
||||
"output_name" => "Activate",
|
||||
"type" => "hidden",
|
||||
"int" => 1,
|
||||
"pk_id" => 1
|
||||
),
|
||||
"enabled" => array (
|
||||
"type" => "checkbox",
|
||||
"output_name" => "Activate",
|
||||
"int" => 1,
|
||||
"element_list" => array (1)
|
||||
),
|
||||
"edit_access_right_id" => array (
|
||||
"type" => "drop_down_db",
|
||||
"output_name" => "Access Level",
|
||||
"preset" => 1, // first of the select
|
||||
"int" => 1,
|
||||
"query" => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
"edit_default" => array (
|
||||
"type" => "radio_group",
|
||||
"output_name" => "Default",
|
||||
"int" => 1,
|
||||
"element_list" => "radio_group"
|
||||
),
|
||||
"edit_access_id" => array (
|
||||
"type" => "hidden",
|
||||
"int" => 1
|
||||
)
|
||||
)
|
||||
) // edit pages ggroup
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
270
www/includes/table_arrays/array_edit_users.php
Normal file
@@ -0,0 +1,270 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_users = array(
|
||||
'table_array' => array(
|
||||
'edit_user_id' => array(
|
||||
'value' => isset($GLOBALS['edit_user_id']) ? $GLOBALS['edit_user_id'] : '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1,
|
||||
'int' => 1
|
||||
),
|
||||
'username' => array(
|
||||
'value' => isset($GLOBALS['username']) ? $GLOBALS['username'] : '',
|
||||
'output_name' => 'Username',
|
||||
'mandatory' => 1,
|
||||
'error_check' => 'unique|alphanumericextended',
|
||||
'type' => 'text'
|
||||
),
|
||||
'password' => array(
|
||||
'value' => isset($GLOBALS['password']) ? $GLOBALS['password'] : '',
|
||||
'HIDDEN_value' => isset($GLOBALS['HIDDEN_password']) ? $GLOBALS['HIDDEN_password'] : '',
|
||||
'CONFIRM_value' => isset($GLOBALS['CONFIRM_password']) ? $GLOBALS['CONFIRM_password'] : '',
|
||||
'output_name' => 'Password',
|
||||
'mandatory' => 1,
|
||||
'type' => 'password', // later has to be password for encryption in database
|
||||
'update' => array( // connected field updates, and update data
|
||||
'password_change_date' => array( // db row to update
|
||||
'type' => 'date', // type of field (int/text/date/etc)
|
||||
'value' => 'NOW()' // value [todo: complex reference
|
||||
)
|
||||
)
|
||||
),
|
||||
// password date when first insert and password is set, needs special field with connection to password
|
||||
// password reset force interval, if set, user needs to reset password after X time period
|
||||
'password_change_interval' => array(
|
||||
'value' => isset($GLOBALS['password_change_interval']) ? $GLOBALS['password_change_interval'] : '',
|
||||
'output_name' => 'Password change interval',
|
||||
'error_check' => 'intervalshort', // can be any date length format. n Y/M/D [not H/M/S], only one set, no combination
|
||||
'type' => 'text',
|
||||
'interval' => 1, // interval needs NULL write for empty
|
||||
'size' => 5, // make it 5 chars long
|
||||
'length' => 5
|
||||
),
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
'output_name' => 'Enabled',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'strict' => array(
|
||||
'value' => isset($GLOBALS['strict']) ? $GLOBALS['strict'] : '',
|
||||
'output_name' => 'Strict (Lock after errors)',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'locked' => array(
|
||||
'value' => isset($GLOBALS['locked']) ? $GLOBALS['locked'] : '',
|
||||
'output_name' => 'Locked (auto set if strict with errors)',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'admin' => array(
|
||||
'value' => isset($GLOBALS['admin']) ? $GLOBALS['admin'] : '',
|
||||
'output_name' => 'Admin',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'debug' => array(
|
||||
'value' => isset($GLOBALS['debug']) ? $GLOBALS['debug'] : '',
|
||||
'output_name' => 'Debug',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'db_debug' => array(
|
||||
'value' => isset($GLOBALS['db_debug']) ? $GLOBALS['db_debug'] : '',
|
||||
'output_name' => 'DB Debug',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'email' => array(
|
||||
'value' => isset($GLOBALS['email']) ? $GLOBALS['email'] : '',
|
||||
'output_name' => 'E-Mail',
|
||||
'type' => 'text',
|
||||
'error_check' => 'email'
|
||||
),
|
||||
'last_name' => array(
|
||||
'value' => isset($GLOBALS['last_name']) ? $GLOBALS['last_name'] : '',
|
||||
'output_name' => 'Last Name',
|
||||
'type' => 'text'
|
||||
),
|
||||
'first_name' => array(
|
||||
'value' => isset($GLOBALS['first_name']) ? $GLOBALS['first_name'] : '',
|
||||
'output_name' => 'First Name',
|
||||
'type' => 'text'
|
||||
),
|
||||
'edit_language_id' => array(
|
||||
'value' => isset($GLOBALS['edit_language_id']) ? $GLOBALS['edit_language_id'] : '',
|
||||
'output_name' => 'Language',
|
||||
'mandatory' => 1,
|
||||
'int' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_language_id, long_name FROM edit_language WHERE enabled = 1 ORDER BY order_number"
|
||||
),
|
||||
'edit_scheme_id' => array(
|
||||
'value' => isset($GLOBALS['edit_scheme_id']) ? $GLOBALS['edit_scheme_id'] : '',
|
||||
'output_name' => 'Scheme',
|
||||
'int_null' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_scheme_id, name FROM edit_scheme WHERE enabled = 1 ORDER BY name"
|
||||
),
|
||||
'edit_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_group_id']) ? $GLOBALS['edit_group_id'] : '',
|
||||
'output_name' => 'Group',
|
||||
'int' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_group_id, name FROM edit_group WHERE enabled = 1 ORDER BY name",
|
||||
'mandatory' => 1
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'value' => isset($GLOBALS['edit_access_right_id']) ? $GLOBALS['edit_access_right_id'] : '',
|
||||
'output_name' => 'User Level',
|
||||
'mandatory' => 1,
|
||||
'int' => 1,
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'login_error_count' => array(
|
||||
'output_name' => 'Login error count',
|
||||
'value' => isset($GLOBALS['login_error_count']) ? $GLOBALS['login_error_count'] : '',
|
||||
'type' => 'view',
|
||||
'empty' => '0'
|
||||
),
|
||||
'login_error_date_last' => array(
|
||||
'output_name' => 'Last login error',
|
||||
'value' => isset($GLOBALS['login_error_date_liast']) ? $GLOBALS['login_error_date_liast'] : '',
|
||||
'type' => 'view',
|
||||
'empty' => '-'
|
||||
),
|
||||
'login_error_date_first' => array(
|
||||
'output_name' => 'First login error',
|
||||
'value' => isset($GLOBALS['login_error_date_first']) ? $GLOBALS['login_error_date_first'] : '',
|
||||
'type' => 'view',
|
||||
'empty' => '-'
|
||||
),
|
||||
'protected' => array(
|
||||
'value' => isset($GLOBALS['protected']) ? $GLOBALS['protected'] : '',
|
||||
'output_name' => 'Protected',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
'error_check' => 'json',
|
||||
'rows' => 10,
|
||||
'cols' => 60
|
||||
),
|
||||
),
|
||||
'load_query' => "SELECT edit_user_id, username, enabled, debug, db_debug, strict, locked, login_error_count FROM edit_user ORDER BY username",
|
||||
'table_name' => 'edit_user',
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'username'
|
||||
),
|
||||
array(
|
||||
'name' => 'enabled',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Enabled: '
|
||||
),
|
||||
array(
|
||||
'name' => 'debug',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Debug: '
|
||||
),
|
||||
array(
|
||||
'name' => 'db_debug',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'DB Debug: '
|
||||
),
|
||||
array(
|
||||
'name' => 'strict',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Strict: '
|
||||
),
|
||||
array(
|
||||
'name' => 'locked',
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Locked: '
|
||||
),
|
||||
array(
|
||||
'name' => 'login_error_count',
|
||||
'before_value' => 'Errors: '
|
||||
)
|
||||
),
|
||||
'element_list' => array(
|
||||
'edit_access_user' => array(
|
||||
'output_name' => 'Accounts',
|
||||
'mandatory' => 1,
|
||||
'delete' => 0, // set then reference entries are deleted, else the 'enable' flag is only set
|
||||
'prefix' => 'ecu',
|
||||
'read_data' => array(
|
||||
'table_name' => 'edit_access',
|
||||
'pk_id' => 'edit_access_id',
|
||||
'name' => 'name',
|
||||
'order' => 'name'
|
||||
),
|
||||
'elements' => array(
|
||||
'edit_access_user_id' => array(
|
||||
'output_name' => 'Activate',
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
),
|
||||
'enabled' => array(
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array(
|
||||
'type' => 'drop_down_db',
|
||||
'output_name' => 'Access Level',
|
||||
'preset' => 1, // first of the select
|
||||
'int' => 1,
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_default' => array(
|
||||
'type' => 'radio_group',
|
||||
'output_name' => 'Default',
|
||||
'int' => 1,
|
||||
'element_list' => 'radio_group'
|
||||
),
|
||||
'edit_access_id' => array(
|
||||
'type' => 'hidden',
|
||||
'int' => 1
|
||||
)
|
||||
)
|
||||
) // edit pages ggroup
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
$edit_visible_group = array (
|
||||
"table_array" => array (
|
||||
"edit_visible_group_id" => array (
|
||||
"value" => $GLOBALS["edit_visible_group_id"],
|
||||
"type" => "hidden",
|
||||
"pk" => 1
|
||||
),
|
||||
"name" => array (
|
||||
"value" => $GLOBALS["name"],
|
||||
"output_name" => $this->l->__("Group name"),
|
||||
"mandatory" => 1,
|
||||
"type" => "text"
|
||||
),
|
||||
"flag" => array (
|
||||
"value" => $GLOBALS["flag"],
|
||||
"output_name" => $this->l->__("Flag"),
|
||||
"mandatory" => 1,
|
||||
"type" => "text",
|
||||
"error_check" => "alphanumeric|unique"
|
||||
)
|
||||
),
|
||||
"table_name" => "edit_visible_group",
|
||||
"load_query" => "SELECT edit_visible_group_id, name FROM edit_visible_group ORDER BY name",
|
||||
"show_fields" => array (
|
||||
array (
|
||||
"name" => "name"
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
33
www/includes/table_arrays/array_edit_visible_group.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_visible_group = array(
|
||||
'table_array' => array(
|
||||
'edit_visible_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_visible_group_id']) ? $GLOBALS['edit_visible_group_id'] : '',
|
||||
'type' => 'hidden',
|
||||
'pk' => 1
|
||||
),
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Group name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'flag' => array(
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
'output_name' => 'Flag',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique'
|
||||
)
|
||||
),
|
||||
'table_name' => 'edit_visible_group',
|
||||
'load_query' => "SELECT edit_visible_group_id, name FROM edit_visible_group ORDER BY name",
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
// __END__
|
||||
@@ -114,8 +114,8 @@
|
||||
{/foreach}
|
||||
</table>
|
||||
{if $element.data.delete_name}
|
||||
<input type="hidden" value="" name="{$element.data.delete_name}">
|
||||
<input type="hidden" value="" name="{$element.data.delete_name}_flag">
|
||||
<input type="hidden" value="" id="{$element.data.delete_name}" name="{$element.data.delete_name}">
|
||||
<input type="hidden" value="" id="{$element.data.delete_name}_flag" name="{$element.data.delete_name}_flag">
|
||||
<input type="hidden" name="remove_name[]" value="{$element.data.delete_name}">
|
||||
{/if}
|
||||
{if $element.data.enable_name}
|
||||
|
||||
@@ -15,12 +15,6 @@
|
||||
{if $STYLESHEET}
|
||||
<link rel=stylesheet type="text/css" href="{$css}{$STYLESHEET}">
|
||||
{/if}
|
||||
{if $JAVASCRIPT}
|
||||
<script language="JavaScript" src="{$JS}{$JAVASCRIPT}"></script>
|
||||
{/if}
|
||||
{if $DATE_JAVASCRIPT}
|
||||
<script language="JavaScript" src="{$JS}{$DATE_JAVASCRIPT}"></script>
|
||||
{/if}
|
||||
</head>
|
||||
<body>
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="1">
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
{*
|
||||
********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* DATE: 2007/10/18
|
||||
* DESCRIPTION:
|
||||
* content main part (buttons, load, etc)
|
||||
* HISTORY:
|
||||
********************************************************************
|
||||
*}
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var form_name = '{$form_name}';
|
||||
var load_id = '{if $primary_key}{$primary_key}{else}0{/if}';
|
||||
var show_sort = {$show_sort};
|
||||
//-->
|
||||
</script>
|
||||
<div style="position:relative; width: {$table_width}px; margin-top: 5px; margin-bottom: 5px; top: 0px; left: 0px;">
|
||||
<div id="main_menu" style="position: absolute; top: 0px; left: 0px; width: 750px; height: 550px; z-index: 5; overflow: auto; padding: 2px; visibility: hidden;" class="sidemenu">
|
||||
<div style="position: absolute; top: 2px; left: 2px;">
|
||||
<input type="button" id="show_menu" name="show_menu" value="{t}Close Menu{/t}" OnClick="ShowHideMenu('hide', 'main_menu');"> {if $primary_key}<a href="#{$primary_key}">↓</a>{/if} <input type="text" id="search" name="search" value="{$search}" OnKeyup="QuickSearch(); return false;" {popup text="Search" width="150"}> <span id="search_status">{t}Enter Value{/t}</span>
|
||||
<div id="search_found">{t 1=$menu_elements}Found: %1{/t}</div>
|
||||
</div>
|
||||
<div id="search_results" style="position: relative; top: 32px; left: 2px; padding: 2px; margin: 2px; width: 95%; height: 90%; overflow: auto; visibility: hidden; display: none; z-index: 3;">
|
||||
</div>
|
||||
<div id="element_list" style="position: relative; top: 32px; left: 2px; padding: 2px; margin: 2px; width: 95%; height: 90%; overflow: auto; z-index: 3;">
|
||||
{foreach from=$table_menu key=key item=item}
|
||||
{if $s_title != $item.title && $item.title}
|
||||
{assign var='s_title' value=$item.title}
|
||||
<div style="font-weight: bold;">{$item.title}</div>
|
||||
{/if}
|
||||
{if $show_sort}
|
||||
{strip}
|
||||
<span style="font-family: monospace;">[
|
||||
{if $item.order_move == '-' || !$item.order_move}
|
||||
|
||||
{/if}
|
||||
{if $item.order_move == '+' || $item.order_move == '*'}
|
||||
<a href="javascript:me({$item.id}, '+');" {popup text="Up" width="20"}>↑</a>
|
||||
{/if}
|
||||
{if $item.order_move == '-' || $item.order_move == '*'}
|
||||
<a href="javascript:me({$item.id}, '-');" {popup text="Down" width="20"}>↓</a>
|
||||
{/if}
|
||||
{if $item.order_move == '+' || !$item.order_move}
|
||||
|
||||
{/if}
|
||||
]</span>
|
||||
{/strip}
|
||||
{/if}
|
||||
<a name="{$item.id}"></a>
|
||||
{if $item.key}[{$item.key}] {/if}{if $item.status}[{$item.status}] {/if}<a href="javascript:le('{$item.id}');" class="{if $item.deleted == 't' && $primary_key == $item.id}item_loaded_deleted{elseif $item.deleted == 't'}item_deleted{elseif $primary_key == $item.id}item_loaded{/if}" {popup text="`$item.desc`" caption="Info" width="350"}>{$item.name}</a><br>
|
||||
{/foreach}
|
||||
</div>
|
||||
<div style="position: absolute; bottom: 2px; left: 2px; z-index: 5;">
|
||||
<input type="button" id="show_menu" name="show_menu" value="{t}Close Menu{/t}" OnClick="ShowHideMenu('hide', 'main_menu');">
|
||||
</div>
|
||||
</div>
|
||||
<div style="position: relative; top: 0px; left: 0px; width: 790px; z-index: 0; margin: 2px; padding: 2px;">
|
||||
<form method="post" name="{$form_name}" enctype="multipart/form-data">
|
||||
{* menu button *}
|
||||
{if !$hide_menu}
|
||||
<div style="margin-bottom: 2px; padding: 2px; position: relative;">
|
||||
<input type="button" id="show_menu" name="show_menu" value="{t}Show Menu{/t}" OnClick="ShowHideMenu('show', 'main_menu');" {if $page_acl < 20}disabled{/if}>
|
||||
</div>
|
||||
{/if}
|
||||
{* save, delete commands *}
|
||||
<div style="margin-bottom: 2px; padding: 2px; position: relative;" class="buttongroup">
|
||||
<div style="margin-bottom: 2px; padding: 2px; position: relative; height: 20px;">
|
||||
<input type="button" name="new" value="{t}New{/t}" OnClick="document.{$form_name}.action.value='new';document.{$form_name}.action_yes.value=confirm('{t}Do you want to create a new entry entry?{/t}');if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 60}disabled{/if}>
|
||||
<input type="button" name="save" value="{t}Save{/t}" OnClick="document.{$form_name}.action.value='save';document.{$form_name}.submit();" {if $page_acl < 60}disabled{/if}>
|
||||
{if $show_delete_button && !$show_undelete_button}
|
||||
<input type="button" name="delete" value="{t}Delete{/t}" OnClick="document.{$form_name}.action.value='delete';document.{$form_name}.action_yes.value=confirm('{t}Do you want to delete this entry?{/t}');document.{$form_name}.action_id.value='{$primary_key}';if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 80}disabled{/if}>
|
||||
{/if}
|
||||
{if $show_delete_button && $show_undelete_button}
|
||||
<input type="button" name="un_delete" value="{t}Un-Delete{/t}" OnClick="document.{$form_name}.action.value='undelete';document.{$form_name}.action_yes.value=confirm('{t}Do you want to undelete this entry?{/t}');document.{$form_name}.action_id.value='{$primary_key}';if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 80}disabled{/if}>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{* status messages *}
|
||||
<div id="status_message" style="margin-bottom: 2px; padding: 2px; text-align: center; position: relative; visibility: hidden;">
|
||||
</div>
|
||||
{* main grouping *}
|
||||
<div style="margin-bottom: 5px; padding: 2px; position: relative; min-height: 400px;" class="{$status_color}">
|
||||
{include file=$CONTENT_INCLUDE}
|
||||
</div>
|
||||
|
||||
{* save, delete commands *}
|
||||
<div style="margin-bottom: 2px; padding: 2px; position: relative;" class="buttongroup">
|
||||
<div style="margin-bottom: 2px; padding: 2px; position: relative; height: 20px;">
|
||||
<input type="button" name="new" value="{t}New{/t}" OnClick="document.{$form_name}.action.value='new';document.{$form_name}.action_yes.value=confirm('{t}Do you want to create a new entry entry?{/t}');if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 60}disabled{/if}>
|
||||
<input type="button" name="save" value="{t}Save{/t}" OnClick="document.{$form_name}.action.value='save';document.{$form_name}.submit();" {if $page_acl < 60}disabled{/if}>
|
||||
{if $show_delete_button && !$show_undelete_button}
|
||||
<input type="button" name="delete" value="{t}Delete{/t}" OnClick="document.{$form_name}.action.value='delete';document.{$form_name}.action_yes.value=confirm('{t}Do you want to delete this entry?{/t}');document.{$form_name}.action_id.value='{$primary_key}';if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 80}disabled{/if}>
|
||||
{/if}
|
||||
{if $show_delete_button && $show_undelete_button}
|
||||
<input type="button" name="un_delete" value="{t}Un-Delete{/t}" OnClick="document.{$form_name}.action.value='undelete';document.{$form_name}.action_yes.value=confirm('{t}Do you want to undelete this entry?{/t}');document.{$form_name}.action_id.value='{$primary_key}';if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 80}disabled{/if}>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{* hidden group *}
|
||||
<input type="hidden" id="primary_key" name="primary_key" value="{$primary_key}">
|
||||
{* action var set *}
|
||||
<input type="hidden" id="action" name="action" value="">
|
||||
<input type="hidden" id="action_flag" name="action_flag" value="">
|
||||
<input type="hidden" id="action_yes" name="action_yes" value="">
|
||||
<input type="hidden" id="action_id" name="action_id" value="">
|
||||
<input type="hidden" id="action_value" name="action_value" value="">
|
||||
<input type="hidden" id="action_menu" name="action_menu" value="">
|
||||
<input type="hidden" id="action_error" name="action_error" value="">
|
||||
<input type="hidden" name="action_loaded" value="true">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,42 +0,0 @@
|
||||
{*
|
||||
********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* DATE: 2007/10/18
|
||||
* DESCRIPTION:
|
||||
* content main part (buttons, load, etc)
|
||||
* HISTORY:
|
||||
********************************************************************
|
||||
*}
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var form_name = '{$form_name}';
|
||||
var load_id = '{if $primary_key}{$primary_key}{/if}';
|
||||
var show_sort = {if $show_sort}{$show_sort}{else}0{/if};
|
||||
//-->
|
||||
</script>
|
||||
|
||||
<div style="width: {$table_width}px; margin-top: 5px; margin-bottom: 5px;">
|
||||
<form method="post" name="{$form_name}" enctype="multipart/form-data">
|
||||
{* save, delete commands *}
|
||||
<div style="margin-bottom: 2px; padding: 2px;" class="buttongroup">
|
||||
{include file=cms_buttons.tpl}
|
||||
</div>
|
||||
{include file=$CONTENT_INCLUDE}
|
||||
{* save, delete commands *}
|
||||
<div style="margin-bottom: 2px; padding: 2px;" class="buttongroup">
|
||||
{include file=cms_buttons.tpl}
|
||||
</div> <!-- button close //-->
|
||||
{* hidden group *}
|
||||
<input type="hidden" id="primary_key" name="primary_key" value="{$primary_key}">
|
||||
{* action var set *}
|
||||
<input type="hidden" id="action" name="action" value="">
|
||||
<input type="hidden" id="action_flag" name="action_flag" value="">
|
||||
<input type="hidden" id="action_yes" name="action_yes" value="">
|
||||
<input type="hidden" id="action_id" name="action_id" value="">
|
||||
<input type="hidden" id="action_value" name="action_value" value="">
|
||||
<input type="hidden" id="action_menu" name="action_menu" value="">
|
||||
<input type="hidden" id="action_error" name="action_error" value="">
|
||||
<input type="hidden" name="action_loaded" value="true">
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,19 +0,0 @@
|
||||
{*
|
||||
********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* DATE: 2007/10/18
|
||||
* DESCRIPTION:
|
||||
* content main part (buttons, load, etc)
|
||||
* HISTORY:
|
||||
********************************************************************
|
||||
*}
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var form_name = '{$form_name}';
|
||||
var load_id = {if $primary_key}{$primary_key}{else}0{/if};
|
||||
var show_sort = {if $show_sort}{$show_sort}{else}0{/if};
|
||||
//-->
|
||||
</script>
|
||||
|
||||
{include file=$CONTENT_INCLUDE}
|
||||
@@ -1,91 +0,0 @@
|
||||
{*
|
||||
********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* DATE: 2008/04/11
|
||||
* DESCRIPTION:
|
||||
* special content main part (buttons, load, etc)
|
||||
* HISTORY:
|
||||
********************************************************************
|
||||
*}
|
||||
|
||||
<script language="JavaScript">
|
||||
<!--
|
||||
var form_name = '{$form_name}';
|
||||
var load_id = {if $primary_key}{$primary_key}{else}0{/if};
|
||||
//-->
|
||||
</script>
|
||||
|
||||
<div style="position:relative; width: {$table_width}px; margin-top: 5px; margin-bottom: 5px; top: 0px; left: 0px;">
|
||||
<div style="position: relative; top: 0px; left: 0px; width: 790px; z-index: 0; margin: 2px; padding: 2px;">
|
||||
<form method="post" name="{$form_name}">
|
||||
{* save, delete commands *}
|
||||
<div style="margin: 2px; padding: 2px; position: relative;" class="buttongroup">
|
||||
<div style="padding: 2px; position: relative; height: 20px;">
|
||||
<input type="button" name="new" value="{t}New{/t}" OnClick="document.{$form_name}.action.value='new';document.{$form_name}.action_yes.value=confirm('{t}Do you want to create a new entry entry?{/t}');if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 60}disabled{/if}>
|
||||
<input type="button" name="save" value="{t}Save{/t}" OnClick="document.{$form_name}.action.value='save';document.{$form_name}.submit();" {if $page_acl < 60}disabled{/if}>
|
||||
{if $show_delete_button && !$show_undelete_button}
|
||||
<input type="button" name="delete" value="{t}Delete{/t}" OnClick="document.{$form_name}.action.value='delete';document.{$form_name}.action_yes.value=confirm('{t}Do you want to delete this entry?{/t}');document.{$form_name}.action_id.value={$primary_key};if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 80}disabled{/if}>
|
||||
{/if}
|
||||
{if $show_delete_button && $show_undelete_button}
|
||||
<input type="button" name="un_delete" value="{t}Un-Delete{/t}" OnClick="document.{$form_name}.action.value='undelete';document.{$form_name}.action_yes.value=confirm('{t}Do you want to undelete this entry?{/t}');document.{$form_name}.action_id.value={$primary_key};if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 80}disabled{/if}>
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{* status messages *}
|
||||
<div id="status_message" style="margin-bottom: 2px; padding: 2px; text-align: center; position: relative; visibility: hidden; display: none;">
|
||||
</div>
|
||||
{* main grouping *}
|
||||
<div>
|
||||
<div class="spacer"></div>
|
||||
<div id="main_menu" style="float: left; position: relative; width: 200px; height: 450px; z-index: 5; overflow: auto; padding: 2px; margin: 2px;" class="sidemenu">
|
||||
<div style="position: absolute; top: 2px; left: 2px;">
|
||||
{if $primary_key}<a href="#{$primary_key}">↓</a>{/if} <input type="text" id="search" name="search" size="15" value="{$search}" OnKeyup="QuickSearch(); return false;" {popup text="Search" width="150"}> <span id="search_status">{t}Search{/t}</span>
|
||||
<div id="search_found">{t}Found:{/t} {$menu_elements}</div>
|
||||
</div>
|
||||
<div id="search_results" style="position: relative; top: 32px; left: 2px; padding: 2px; margin: 2px; width: 95%; height: 90%; overflow: auto; visibility: hidden; display: none;">
|
||||
</div>
|
||||
<div id="element_list" style="position: relative; top: 32px; left: 2px; padding: 2px; margin: 2px; width: 95%; height: 90%; overflow: auto;">
|
||||
{foreach from=$table_menu key=key item=item}
|
||||
<a name="{$item.id}"></a>
|
||||
{if $item.key}[{$item.key}] {/if}{if $item.status}[{$item.status}] {/if}<a href="javascript:le({$item.id});" class="{if $item.deleted == 't' && $primary_key == $item.id}item_loaded_deleted{elseif $item.deleted == 't'}item_deleted{elseif $primary_key == $item.id}item_loaded{/if}">{$item.name}</a><br>
|
||||
{/foreach}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="float: left; margin: 2px; padding: 2px; position: relative; width: 570px; min-height: 450px;" class="{$status_color}">
|
||||
{* START CONTENT *}
|
||||
{include file="$CONTENT_INCLUDE"}
|
||||
{* END CONTENT *}
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
{* END MENU / CONTENT BLOCK *}
|
||||
</div>
|
||||
|
||||
{* save, delete commands *}
|
||||
<div style="margin: 2px; padding: 2px; position: relative;" class="buttongroup">
|
||||
<div style="padding: 2px; position: relative; height: 20px;">
|
||||
<input type="button" name="new" value="{t}New{/t}" OnClick="document.{$form_name}.action.value='new';document.{$form_name}.action_yes.value=confirm('{t}Do you want to create a new entry entry?{/t}');if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 60}disabled{/if}>
|
||||
<input type="button" name="save" value="{t}Save{/t}" OnClick="document.{$form_name}.action.value='save';document.{$form_name}.submit();" {if $page_acl < 60}disabled{/if}>
|
||||
{if $show_delete_button && !$show_undelete_button}
|
||||
<input type="button" name="delete" value="{t}Delete{/t}" OnClick="document.{$form_name}.action.value='delete';document.{$form_name}.action_yes.value=confirm('{t}Do you want to delete this entry?{/t}');document.{$form_name}.action_id.value={$primary_key};if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 80}disabled{/if}>
|
||||
{/if}
|
||||
{if $show_delete_button && $show_undelete_button}
|
||||
<input type="button" name="un_delete" value="{t}Un-Delete{/t}" OnClick="document.{$form_name}.action.value='undelete';document.{$form_name}.action_yes.value=confirm('{t}Do you want to undelete this entry?{/t}');document.{$form_name}.action_id.value={$primary_key};if (document.{$form_name}.action_yes.value == 'true') document.{$form_name}.submit();" {if $page_acl < 80}disabled{/if}>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
{* hidden group *}
|
||||
<input type="hidden" id="primary_key" name="primary_key" value="{$primary_key}">
|
||||
{* action var set *}
|
||||
<input type="hidden" id="action" name="action" value="">
|
||||
<input type="hidden" id="action_flag" name="action_flag" value="">
|
||||
<input type="hidden" id="action_yes" name="action_yes" value="">
|
||||
<input type="hidden" id="action_id" name="action_id" value="">
|
||||
<input type="hidden" id="action_value" name="action_value" value="">
|
||||
<input type="hidden" id="action_menu" name="action_menu" value="">
|
||||
<input type="hidden" id="action_error" name="action_error" value="">
|
||||
<input type="hidden" name="action_loaded" value="true">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,6 +1,9 @@
|
||||
<div>
|
||||
{$SMARTY_TEST}
|
||||
</div>
|
||||
<div>
|
||||
TRANSLATION CLASS: {$TRANSLATE_TEST}
|
||||
</div>
|
||||
<div>
|
||||
<select id="drop_down_test" name="drop_down_test">
|
||||
{html_options options=$drop_down_test selected=$drop_down_test_selected}
|
||||
@@ -11,6 +14,9 @@
|
||||
<div id="test-div" class="test-div">
|
||||
Some content ehre or asdfasdfasf
|
||||
</div>
|
||||
<div id="translate-div">
|
||||
TRANSLATION SMARTY: {t}I should be translated{/t}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{* progresss indicator *}
|
||||
|
||||
2
www/layout/admin/cache/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
2
www/layout/admin/cache/images/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
BIN
www/layout/admin/images/img_2145.heic
Executable file
BIN
www/layout/admin/images/jpeg_a.jpg
Executable file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
www/layout/admin/images/jpeg_b.jpg
Executable file
|
After Width: | Height: | Size: 489 KiB |
BIN
www/layout/admin/images/jpeg_c.jpg
Executable file
|
After Width: | Height: | Size: 807 KiB |
BIN
www/layout/admin/images/no_picture.jpg
Executable file
|
After Width: | Height: | Size: 26 KiB |
BIN
www/layout/admin/images/no_picture_square.jpg
Executable file
|
After Width: | Height: | Size: 34 KiB |
BIN
www/layout/admin/images/no_picture_square.png
Executable file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
www/layout/admin/images/no_picture_width_bigger.jpg
Executable file
|
After Width: | Height: | Size: 31 KiB |
BIN
www/layout/admin/images/no_picture_width_bigger.png
Executable file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
www/layout/admin/images/photoshop_test.psd
Executable file
BIN
www/layout/admin/images/tiff_compressed_lzw.tif
Executable file
BIN
www/layout/admin/images/tiff_compressed_zip.tif
Executable file
BIN
www/layout/admin/images/tiff_uncompressed.tif
Executable file
@@ -1,4 +1,5 @@
|
||||
/* general edit javascript */
|
||||
/* jquery version */
|
||||
|
||||
/* jshint esversion: 6 */
|
||||
|
||||
@@ -11,19 +12,21 @@ if (!DEBUG) {
|
||||
});
|
||||
}*/
|
||||
|
||||
// METHOD: pop
|
||||
// PARAMS: url, window name, features
|
||||
// RETURN: none
|
||||
// DESC : opens a popup window with winNAme and given features (string)
|
||||
/**
|
||||
* opens a popup window with winName and given features (string)
|
||||
* @param {String} theURL the url
|
||||
* @param {String} winName window name
|
||||
* @param {Object} features popup features
|
||||
*/
|
||||
function pop(theURL, winName, features) {
|
||||
winName = window.open(theURL, winName, features);
|
||||
winName.focus();
|
||||
}
|
||||
|
||||
// METHOD: expandTA
|
||||
// PARAMS: id
|
||||
// RETURN: none
|
||||
// DESC : automatically resize a text area based on the amount of lines in it
|
||||
/**
|
||||
* automatically resize a text area based on the amount of lines in it
|
||||
* @param {[string} ta_id element id
|
||||
*/
|
||||
function expandTA(ta_id) {
|
||||
var ta;
|
||||
// if a string comes, its a get by id, else use it as an element pass on
|
||||
@@ -44,10 +47,10 @@ function expandTA(ta_id) {
|
||||
ta.rows = numNewRows + theRows.length;
|
||||
}
|
||||
|
||||
// METHOD: getWindowSize
|
||||
// PARAMS: none
|
||||
// RETURN: array with width/height
|
||||
// DESC : wrapper to get the real window size for the current browser window
|
||||
/**
|
||||
* wrapper to get the real window size for the current browser window
|
||||
* @return {Object} object with width/height
|
||||
*/
|
||||
function getWindowSize()
|
||||
{
|
||||
var width, height;
|
||||
@@ -59,10 +62,10 @@ function getWindowSize()
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: getScrollOffset
|
||||
// PARAMS: none
|
||||
// RETURN: array with x/y px
|
||||
// DESC : wrapper to get the correct scroll offset
|
||||
/**
|
||||
* wrapper to get the correct scroll offset
|
||||
* @return {Object} object with x/y px
|
||||
*/
|
||||
function getScrollOffset()
|
||||
{
|
||||
var left, top;
|
||||
@@ -74,10 +77,12 @@ function getScrollOffset()
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: setCenter
|
||||
// PARAMS: id to set center
|
||||
// RETURN: none
|
||||
// DESC : centers div to current window size middle
|
||||
/**
|
||||
* centers div to current window size middle
|
||||
* @param {String} id element to center
|
||||
* @param {Boolean} left if true centers to the middle from the left
|
||||
* @param {Boolean} top if true centers to the middle from the top
|
||||
*/
|
||||
function setCenter(id, left, top)
|
||||
{
|
||||
// get size of id
|
||||
@@ -107,10 +112,11 @@ function setCenter(id, left, top)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: goToPos()
|
||||
// PARAMS: element, offset (default 0)
|
||||
// RETURN: none
|
||||
// DESC: goes to an element id position
|
||||
/**
|
||||
* goes to an element id position
|
||||
* @param {String} element element id to move to
|
||||
* @param {Number} offset offset from top, default is 0 (px)
|
||||
*/
|
||||
function goToPos(element, offset = 0)
|
||||
{
|
||||
try {
|
||||
@@ -125,10 +131,12 @@ function goToPos(element, offset = 0)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: __
|
||||
// PARAMS: text
|
||||
// RETURN: translated text (based on PHP selected language)
|
||||
// DESC : uses the i18n array created in the translation template, that is filled from gettext in PHP (Smarty)
|
||||
/**
|
||||
* uses the i18n object created in the translation template
|
||||
* that is filled from gettext in PHP
|
||||
* @param {String} string text to translate
|
||||
* @return {String} translated text (based on PHP selected language)
|
||||
*/
|
||||
function __(string)
|
||||
{
|
||||
if (typeof i18n !== 'undefined' && isObject(i18n) && i18n[string]) {
|
||||
@@ -138,12 +146,13 @@ function __(string)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: string.format
|
||||
// PARAMS: any, for string format
|
||||
// RETURN: formatted string
|
||||
// DESC : simple sprintf formater for replace
|
||||
// "{0} is cool, {1} is not".format("Alpha", "Beta");
|
||||
// First, checks if it isn't implemented yet.
|
||||
/**
|
||||
* simple sprintf formater for replace
|
||||
* usage: "{0} is cool, {1} is not".format("Alpha", "Beta");
|
||||
* First, checks if it isn't implemented yet.
|
||||
* @param {String} !String.prototype.format string with elements to be replaced
|
||||
* @return {String} Formated string
|
||||
*/
|
||||
if (!String.prototype.format) {
|
||||
String.prototype.format = function()
|
||||
{
|
||||
@@ -158,25 +167,33 @@ if (!String.prototype.format) {
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: numberWithCommas
|
||||
// PARAMS: number
|
||||
// RETURN: formatted with , in thousands
|
||||
// DESC : formats flat number 123456 to 123,456
|
||||
const numberWithCommas = (x) => {
|
||||
/**
|
||||
* formats flat number 123456 to 123,456
|
||||
* @param {Number} x number to be formated
|
||||
* @return {String} formatted with , in thousands
|
||||
*/
|
||||
function numberWithCommas(x)
|
||||
{
|
||||
var parts = x.toString().split(".");
|
||||
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
return parts.join(".");
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD:
|
||||
// PARAMS: string
|
||||
// RETURN: string with <br>
|
||||
// DESC : converts line breaks to br
|
||||
/**
|
||||
* converts line breaks to br
|
||||
* @param {String} string any string
|
||||
* @return {String} string with <br>
|
||||
*/
|
||||
function convertLBtoBR(string)
|
||||
{
|
||||
return string.replace(/(?:\r\n|\r|\n)/g, '<br>');
|
||||
}
|
||||
|
||||
/**
|
||||
* escape HTML string
|
||||
* @param {String} !String.prototype.escapeHTML HTML data string to be escaped
|
||||
* @return {String} escaped string
|
||||
*/
|
||||
if (!String.prototype.escapeHTML) {
|
||||
String.prototype.escapeHTML = function() {
|
||||
return this.replace(/[&<>"'\/]/g, function (s) {
|
||||
@@ -194,6 +211,11 @@ if (!String.prototype.escapeHTML) {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* unescape a HTML encoded string
|
||||
* @param {String} !String.prototype.unescapeHTML data with escaped entries
|
||||
* @return {String} HTML formated string
|
||||
*/
|
||||
if (!String.prototype.unescapeHTML) {
|
||||
String.prototype.unescapeHTML = function() {
|
||||
return this.replace(/&[#\w]+;/g, function (s) {
|
||||
@@ -211,31 +233,33 @@ if (!String.prototype.unescapeHTML) {
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: getTimestamp
|
||||
// PARAMS: none
|
||||
// RETURN: timestamp (in milliseconds)
|
||||
// DESC : returns current timestamp (unix timestamp)
|
||||
/**
|
||||
* returns current timestamp (unix timestamp)
|
||||
* @return {Number} timestamp (in milliseconds)
|
||||
*/
|
||||
function getTimestamp()
|
||||
{
|
||||
var date = new Date();
|
||||
return date.getTime();
|
||||
}
|
||||
|
||||
// METHOD: dec2hex
|
||||
// PARAMS: decimal string
|
||||
// RETURN: string
|
||||
// DESC : dec2hex :: Integer -> String
|
||||
// i.e. 0-255 -> '00'-'ff'
|
||||
/**
|
||||
* dec2hex :: Integer -> String
|
||||
* i.e. 0-255 -> '00'-'ff'
|
||||
* @param {Number} dec decimal string
|
||||
* @return {String} hex encdoded number
|
||||
*/
|
||||
function dec2hex(dec)
|
||||
{
|
||||
return ('0' + dec.toString(16)).substr(-2);
|
||||
}
|
||||
|
||||
// METHOD: generateId
|
||||
// PARAMS: lenght in int
|
||||
// RETURN: random string
|
||||
// DESC : generateId :: Integer -> String
|
||||
// only works on mondern browsers
|
||||
/**
|
||||
* generateId :: Integer -> String
|
||||
* only works on mondern browsers
|
||||
* @param {Number} len length of unique id string
|
||||
* @return {String} random string in length of len
|
||||
*/
|
||||
function generateId(len)
|
||||
{
|
||||
var arr = new Uint8Array((len || 40) / 2);
|
||||
@@ -243,20 +267,22 @@ function generateId(len)
|
||||
return Array.from(arr, dec2hex).join('');
|
||||
}
|
||||
|
||||
// METHOD: randomIdF()
|
||||
// PARAMS: none
|
||||
// RETURN: not true random string
|
||||
// DESC : creates a pseudo random string of 10 characters
|
||||
// after many runs it will create duplicates
|
||||
/**
|
||||
* creates a pseudo random string of 10 characters
|
||||
* works on all browsers
|
||||
* after many runs it will create duplicates
|
||||
* @return {String} not true random string
|
||||
*/
|
||||
function randomIdF()
|
||||
{
|
||||
return Math.random().toString(36).substring(2);
|
||||
}
|
||||
|
||||
// METHOD: isObject
|
||||
// PARAMS: possible object
|
||||
// RETURN: true/false if it is an object or not
|
||||
// DESC : checks if a variable is an object
|
||||
/**
|
||||
* checks if a variable is an object
|
||||
* @param {Mixed} val possible object
|
||||
* @return {Boolean} true/false if it is an object or not
|
||||
*/
|
||||
function isObject(val) {
|
||||
if (val === null) {
|
||||
return false;
|
||||
@@ -264,31 +290,70 @@ function isObject(val) {
|
||||
return ((typeof val === 'function') || (typeof val === 'object'));
|
||||
}
|
||||
|
||||
// METHOD: keyInObject
|
||||
// PARAMS: key name, object
|
||||
// RETURN: true/false if key exists in object
|
||||
// DESC : checks if a key exists in a given object
|
||||
const keyInObject = (key, object) => (key in object) ? true : false;
|
||||
/*function keyInObject(key, object)
|
||||
{
|
||||
return (key in object) ? true : false;
|
||||
}*/
|
||||
/**
|
||||
* get the length of an object (entries)
|
||||
* @param {Object} object object to check
|
||||
* @return {Number} number of entry
|
||||
*/
|
||||
function getObjectCount(object) {
|
||||
return Object.keys(object).length;
|
||||
}
|
||||
|
||||
// METHOD: exists
|
||||
// PARAMS: uid
|
||||
// RETURN: true/false
|
||||
// DESC : checks if a DOM element actually exists
|
||||
const exists = (id) => $('#' + id).length > 0 ? true : false;
|
||||
/*function exists(id)
|
||||
/**
|
||||
* checks if a key exists in a given object
|
||||
* @param {String} key key name
|
||||
* @param {Object} object object to search key in
|
||||
* @return {Boolean} true/false if key exists in object
|
||||
*/
|
||||
function keyInObject(key, object)
|
||||
{
|
||||
return (Object.prototype.hasOwnProperty.call(object, key)) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns matching key of value
|
||||
* @param {Object} obj object to search value in
|
||||
* @param {Mixed} value any value (String, Number, etc)
|
||||
* @return {String} the key found for the first matching value
|
||||
*/
|
||||
function getKeyByValue(object, value)
|
||||
{
|
||||
return Object.keys(object).find(key => object[key] === value);
|
||||
// return Object.keys(object).find(function (key) {
|
||||
// return object[key] === value;
|
||||
// });
|
||||
}
|
||||
|
||||
/**
|
||||
* returns true if value is found in object with a key
|
||||
* @param {Object} obj object to search value in
|
||||
* @param {Mixed} value any value (String, Number, etc)
|
||||
* @return {Boolean} true on value found, false on not found
|
||||
*/
|
||||
function valueInObject(object, value)
|
||||
{
|
||||
return (Object.keys(object).find(key => object[key] === value)) ? true : false;
|
||||
// return Object.keys(object).find(function (key) {
|
||||
// return object[key] === value;
|
||||
// }) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if a DOM element actually exists
|
||||
* @param {String} id Element id to check for
|
||||
* @return {Boolean} true if element exists, false on failure
|
||||
*/
|
||||
function exists(id)
|
||||
{
|
||||
return $('#' + id).length > 0 ? true : false;
|
||||
}*/
|
||||
}
|
||||
|
||||
// METHOD: formatBytes
|
||||
// PARAMS: bytes in int
|
||||
// RETURN: string in GB/MB/KB
|
||||
// DESC : converts a int number into bytes with prefix in two decimals precision
|
||||
// currently precision is fixed, if dynamic needs check for max/min precision
|
||||
/**
|
||||
* converts a int number into bytes with prefix in two decimals precision
|
||||
* currently precision is fixed, if dynamic needs check for max/min precision
|
||||
* @param {Number} bytes bytes in int
|
||||
* @return {String} string in GB/MB/KB
|
||||
*/
|
||||
function formatBytes(bytes)
|
||||
{
|
||||
var i = -1;
|
||||
@@ -296,14 +361,13 @@ function formatBytes(bytes)
|
||||
bytes = bytes / 1024;
|
||||
i++;
|
||||
} while (bytes > 99);
|
||||
|
||||
return parseFloat(Math.round(bytes * Math.pow(10, 2)) / Math.pow(10, 2)) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
|
||||
}
|
||||
|
||||
// METHOD: errorCatch
|
||||
// PARAMS: err (error from try/catch
|
||||
// RETURN: none
|
||||
// DESC : prints out error messages based on data available from the browser
|
||||
/**
|
||||
* prints out error messages based on data available from the browser
|
||||
* @param {Object} err error from try/catch block
|
||||
*/
|
||||
function errorCatch(err)
|
||||
{
|
||||
// for FF & Chrome
|
||||
@@ -329,45 +393,59 @@ function errorCatch(err)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: actionIndicator
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : show or hide the "do" overlay
|
||||
function actionIndicator(loc = '')
|
||||
/**
|
||||
* show or hide the "do" overlay
|
||||
* @param {String} loc location name for action indicator
|
||||
* default empty. for console.log
|
||||
* @param {Boolean} [overlay=true] override the auto hide/show over the overlay div block
|
||||
*/
|
||||
function actionIndicator(loc, overlay = true)
|
||||
{
|
||||
if ($('#overlayBox').is(':visible')) {
|
||||
actionIndicatorHide(loc);
|
||||
actionIndicatorHide(loc, overlay);
|
||||
} else {
|
||||
actionIndicatorShow(loc);
|
||||
actionIndicatorShow(loc, overlay);
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: actionIndicatorShow/actionIndicatorHide
|
||||
// PARAMS: loc for console log info
|
||||
// RETURN: none
|
||||
// DESC : explicit show/hide for action Indicator
|
||||
// instead of automatically show or hide, do
|
||||
// on command
|
||||
function actionIndicatorShow(loc = '')
|
||||
/**
|
||||
* explicit show for action Indicator
|
||||
* instead of automatically show or hide, do on command show
|
||||
* @param {String} loc location name for action indicator
|
||||
* default empty. for console.log
|
||||
* @param {Boolean} [overlay=true] override the auto hide/show over the overlay div block
|
||||
*/
|
||||
function actionIndicatorShow(loc, overlay = true)
|
||||
{
|
||||
console.log('Indicator: SHOW [%s]', loc);
|
||||
$('#indicator').addClass('progress');
|
||||
setCenter('indicator', true, true);
|
||||
$('#indicator').show();
|
||||
overlayBoxShow();
|
||||
if (overlay === true) {
|
||||
overlayBoxShow();
|
||||
}
|
||||
}
|
||||
function actionIndicatorHide(loc = '')
|
||||
|
||||
/**
|
||||
* explicit hide for action Indicator
|
||||
* instead of automatically show or hide, do on command hide
|
||||
* @param {String} loc location name for action indicator
|
||||
* default empty. for console.log
|
||||
* @param {Boolean} [overlay=true] override the auto hide/show over the overlay div block
|
||||
*/
|
||||
function actionIndicatorHide(loc, overlay = true)
|
||||
{
|
||||
console.log('Indicator: HIDE [%s]', loc);
|
||||
$('#indicator').hide();
|
||||
$('#indicator').removeClass('progress');
|
||||
overlayBoxHide();
|
||||
if (overlay === true) {
|
||||
overlayBoxHide();
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: overlayBoxView
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : shows or hides the overlay box
|
||||
/**
|
||||
* shows the overlay box
|
||||
*/
|
||||
function overlayBoxShow()
|
||||
{
|
||||
// check if overlay box exists and if yes set the z-index to 100
|
||||
@@ -377,6 +455,10 @@ function overlayBoxShow()
|
||||
$('#overlayBox').show();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* hides the overlay box
|
||||
*/
|
||||
function overlayBoxHide()
|
||||
{
|
||||
// if the overlay box z-index is 100, do no hide, but set to 98
|
||||
@@ -387,10 +469,9 @@ function overlayBoxHide()
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: setOverlayBox
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : position the overlay block box and shows it
|
||||
/**
|
||||
* position the overlay block box and shows it
|
||||
*/
|
||||
function setOverlayBox()
|
||||
{
|
||||
var viewport = document.viewport.getDimensions();
|
||||
@@ -401,10 +482,9 @@ function setOverlayBox()
|
||||
$('#overlayBox').show();
|
||||
}
|
||||
|
||||
// METHOD: ClearCall
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : the abort call, clears the action box and hides it and the overlay box
|
||||
/**
|
||||
* the abort call, clears the action box and hides it and the overlay box
|
||||
*/
|
||||
function ClearCall()
|
||||
{
|
||||
$('#actionBox').innerHTML = '';
|
||||
@@ -413,16 +493,18 @@ function ClearCall()
|
||||
}
|
||||
|
||||
// *** DOM MANAGEMENT FUNCTIONS
|
||||
// METHOD: cel [create element]
|
||||
// PARAMS: tag: must set tag (div, span, etc)
|
||||
// id: optional set for id, if input, select will be used for name
|
||||
// content: text content inside, is skipped if sub elements exist
|
||||
// css: array for css tags
|
||||
// options: anything else (value, placeholder, OnClick, style)
|
||||
// RETURN: object
|
||||
// DESC : creates object for DOM element creation flow
|
||||
const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
||||
_element = {
|
||||
/**
|
||||
* reates object for DOM element creation flow
|
||||
* @param {String} tag must set tag (div, span, etc)
|
||||
* @param {String} [id=''] optional set for id, if input, select will be used for name
|
||||
* @param {String} [content=''] text content inside, is skipped if sub elements exist
|
||||
* @param {Array} [css=[]] array for css tags
|
||||
* @param {Object} [options={}] anything else (value, placeholder, OnClick, style)
|
||||
* @return {Object} created element as an object
|
||||
*/
|
||||
function cel(tag, id = '', content = '', css = [], options = {})
|
||||
{
|
||||
return {
|
||||
tag: tag,
|
||||
id: id,
|
||||
name: options.name, // override name if set [name gets ignored in tree build anyway]
|
||||
@@ -431,13 +513,15 @@ const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
||||
options: options,
|
||||
sub: []
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: ael [attach element]
|
||||
// PARAMS: base: object where to attach/search
|
||||
// attach: the object to be attached
|
||||
// id: optional id, if given search in base for this id and attach there
|
||||
// RETURN: "none", technically there is no return needed
|
||||
// DESC : attach a cel created object to another to create a basic DOM tree
|
||||
/**
|
||||
* attach a cel created object to another to create a basic DOM tree
|
||||
* @param {Object} base object where to attach/search
|
||||
* @param {Object} attach the object to be attached
|
||||
* @param {String} [id=''] optional id, if given search in base for this id and attach there
|
||||
* @return {Object} "none", technically there is no return needed as it is global attach
|
||||
*/
|
||||
function ael(base, attach, id = '')
|
||||
{
|
||||
if (id) {
|
||||
@@ -459,12 +543,13 @@ function ael(base, attach, id = '')
|
||||
return base;
|
||||
}
|
||||
|
||||
// METHOD: aelx [attach n elements]
|
||||
// PARAMS: base: object to where we attach the elements
|
||||
// attach 1..n: attach directly to the base element those attachments
|
||||
// RETURN: "none", technically there is no return needed
|
||||
// DESC : directly attach n elements to one master base element
|
||||
// this type does not support attach with optional id
|
||||
/**
|
||||
* directly attach n elements to one master base element
|
||||
* this type does not support attach with optional id
|
||||
* @param {Object} base object to where we attach the elements
|
||||
* @param {...Object} attach attach 1..n: attach directly to the base element those attachments
|
||||
* @return {Object} "none", technically there is no return needed, global attach
|
||||
*/
|
||||
function aelx(base, ...attach)
|
||||
{
|
||||
for (var i = 0; i < attach.length; i ++) {
|
||||
@@ -473,19 +558,23 @@ function aelx(base, ...attach)
|
||||
return base;
|
||||
}
|
||||
|
||||
// METHOD: rel [reset element]
|
||||
// PARAMS: cel created element
|
||||
// RETURN: returns sub reset base element
|
||||
// DESC : resets the sub elements of the base element given
|
||||
const rel = (base) => {
|
||||
/**
|
||||
* resets the sub elements of the base element given
|
||||
* @param {Object} base cel created element
|
||||
* @return {Object} returns reset base element
|
||||
*/
|
||||
function rel(base)
|
||||
{
|
||||
base.sub = [];
|
||||
return base;
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: rcssel [remove a css from the element]
|
||||
// PARAMS: element, style sheet to remove
|
||||
// RETURN: "none", in place because of reference
|
||||
// DESC : searches and removes style from css array
|
||||
/**
|
||||
* searches and removes style from css array
|
||||
* @param {Object} _element element to work one
|
||||
* @param {String css style sheet to remove (name)
|
||||
* @return {Object} returns full element
|
||||
*/
|
||||
function rcssel(_element, css)
|
||||
{
|
||||
var css_index = _element.css.indexOf(css);
|
||||
@@ -495,10 +584,12 @@ function rcssel(_element, css)
|
||||
return _element;
|
||||
}
|
||||
|
||||
// METHOD: acssel [add css element]
|
||||
// PARAMS: element, style sheet to add
|
||||
// RETURN: "none", in place add because of reference
|
||||
// DESC : adds a new style sheet to the element given
|
||||
/**
|
||||
* adds a new style sheet to the element given
|
||||
* @param {Object} _element element to work on
|
||||
* @param {String} css style sheet to add (name)
|
||||
* @return {Object} returns full element
|
||||
*/
|
||||
function acssel(_element, css)
|
||||
{
|
||||
var css_index = _element.css.indexOf(css);
|
||||
@@ -508,23 +599,26 @@ function acssel(_element, css)
|
||||
return _element;
|
||||
}
|
||||
|
||||
// METHOD: scssel
|
||||
// PARAMS: element, style to remove, style to add
|
||||
// RETURN: "none", in place add because of reference
|
||||
// DESC : removes one css and adds another
|
||||
// is a wrapper around rcssel/acssel
|
||||
/**
|
||||
* removes one css and adds another
|
||||
* is a wrapper around rcssel/acssel
|
||||
* @param {Object} _element element to work on
|
||||
* @param {String} rcss style to remove (name)
|
||||
* @param {String} acss style to add (name)
|
||||
* @return {Object} returns full element
|
||||
*/
|
||||
function scssel(_element, rcss, acss)
|
||||
{
|
||||
rcssel(_element, rcss);
|
||||
acssel(_element, acss);
|
||||
}
|
||||
|
||||
// METHOD: phfo [produce html from object]
|
||||
// PARAMS: object tree with dom element declarations
|
||||
// RETURN: HTML string that can be used as innerHTML
|
||||
// DESC : parses the object tree created with cel/ael
|
||||
// and converts it into an HTML string that can
|
||||
// be inserted into the page
|
||||
/**
|
||||
* parses the object tree created with cel/ael and converts it into an HTML string
|
||||
* that can be inserted into the page
|
||||
* @param {Object} tree object tree with dom element declarations
|
||||
* @return {String} HTML string that can be used as innerHTML
|
||||
*/
|
||||
function phfo(tree)
|
||||
{
|
||||
// holds the elements
|
||||
@@ -587,33 +681,45 @@ function phfo(tree)
|
||||
|
||||
// BLOCK: html wrappers for quickly creating html data blocks
|
||||
|
||||
// NOTE : OLD FORMAT which misses multiple block set
|
||||
// METHOD: html_options
|
||||
// PARAMS: name/id, array for the options, selected item uid
|
||||
// options_only [def false] if this is true, it will not print the select part
|
||||
// return_string [def false]: return as string and not as element
|
||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
||||
// RETURN: html with build options block
|
||||
// DESC : creates an select/options drop down block.
|
||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
||||
/**
|
||||
* NOTE: OLD FORMAT which misses multiple block set
|
||||
* creates an select/options drop down block.
|
||||
* the array needs to be key -> value format.
|
||||
* key is for the option id and value is for the data output
|
||||
* @param {String} name name/id
|
||||
* @param {Object} data array for the options
|
||||
* @param {String} [selected=''] selected item uid
|
||||
* @param {Boolean} [options_only=false] if this is true, it will not print the select part
|
||||
* @param {Boolean} [return_string=false] return as string and not as element
|
||||
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||
* 'values' all others are ignored
|
||||
* @return {String} html with build options block
|
||||
*/
|
||||
function html_options(name, data, selected = '', options_only = false, return_string = false, sort = '')
|
||||
{
|
||||
// wrapper to new call
|
||||
return html_options_block(name, data, selected, false, options_only, return_string, sort);
|
||||
}
|
||||
|
||||
// NOTE : USE THIS CALL, the above one is deprecated
|
||||
// METHOD: html_options
|
||||
// PARAMS: name/id, array for the options,
|
||||
// selected item uid
|
||||
// multiple [def false] if this is true, the drop down will be turned into multiple select
|
||||
// options_only [def false] if this is true, it will not print the select part
|
||||
// return_string [def false]: return as string and not as element
|
||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
||||
// RETURN: html with build options block
|
||||
// DESC : creates an select/options drop down block.
|
||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
||||
function html_options_block(name, data, selected = '', multiple = false, options_only = false, return_string = false, sort = '')
|
||||
/**
|
||||
* NOTE: USE THIS CALL, the above one is deprecated
|
||||
* creates an select/options drop down block.
|
||||
* the array needs to be key -> value format.
|
||||
* key is for the option id and value is for the data output
|
||||
* @param {String} name name/id
|
||||
* @param {Object} data array for the options
|
||||
* @param {String} [selected=''] selected item uid
|
||||
* @param {Number} [multiple=0] if this is 1 or larger, the drop down
|
||||
* will be turned into multiple select
|
||||
* the number sets the size value unless it is 1,
|
||||
* then it is default
|
||||
* @param {Boolean} [options_only=false] if this is true, it will not print the select part
|
||||
* @param {Boolean} [return_string=false] return as string and not as element
|
||||
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||
* 'values' all others are ignored
|
||||
* @return {String} html with build options block
|
||||
*/
|
||||
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
||||
{
|
||||
var content = [];
|
||||
var element_select;
|
||||
@@ -622,8 +728,11 @@ function html_options_block(name, data, selected = '', multiple = false, options
|
||||
var data_list = []; // for sorted output
|
||||
var value;
|
||||
var option;
|
||||
if (multiple === true) {
|
||||
if (multiple > 0) {
|
||||
select_options.multiple = '';
|
||||
if (multiple > 1) {
|
||||
select_options.size = multiple;
|
||||
}
|
||||
}
|
||||
// set outside select, gets stripped on return if options only is true
|
||||
element_select = cel('select', name, '', [], select_options);
|
||||
@@ -640,14 +749,18 @@ function html_options_block(name, data, selected = '', multiple = false, options
|
||||
// for (const [key, value] of Object.entries(data)) {
|
||||
for (const key of data_list) {
|
||||
value = data[key];
|
||||
console.log('create [%s] options: key: %s, value: %s', name, key, value);
|
||||
// console.log('create [%s] options: key: %s, value: %s', name, key, value);
|
||||
// basic options init
|
||||
options = {
|
||||
'label': value,
|
||||
'value': key
|
||||
};
|
||||
// add selected if matching
|
||||
if (selected == key) {
|
||||
if (multiple == 0 && !Array.isArray(selected) && selected == key) {
|
||||
options.selected = '';
|
||||
}
|
||||
// for multiple, we match selected as array
|
||||
if (multiple == 1 && Array.isArray(selected) && selected.indexOf(key) != -1) {
|
||||
options.selected = '';
|
||||
}
|
||||
// create the element option
|
||||
@@ -676,11 +789,13 @@ function html_options_block(name, data, selected = '', multiple = false, options
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: html_options_refill
|
||||
// PARAMS: name/id, array of options, sort = ''
|
||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
||||
// RETURN: none
|
||||
// DESC : refills a select box with options and keeps the selected
|
||||
/**
|
||||
* refills a select box with options and keeps the selected
|
||||
* @param {String} name name/id
|
||||
* @param {Object} data array of options
|
||||
* @param {String} [sort=''] if empty as is, else allowed 'keys', 'values'
|
||||
* all others are ignored
|
||||
*/
|
||||
function html_options_refill(name, data, sort = '')
|
||||
{
|
||||
var element_option;
|
||||
@@ -714,11 +829,70 @@ function html_options_refill(name, data, sort = '')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* parses a query string from window.location.search.substring(1)
|
||||
* ALTERNATIVE CODE
|
||||
* var url = new URL(window.location.href);
|
||||
* param_uid = url.searchParams.get('uid');
|
||||
* @param {String} [query=''] the query string to parse
|
||||
* if not set will auto fill
|
||||
* @param {String} [return_key=''] if set only returns this key entry
|
||||
* or empty for none
|
||||
* @return {Object|String} parameter entry list
|
||||
*/
|
||||
function parseQueryString(query = '', return_key = '') {
|
||||
if (!query) {
|
||||
query = window.location.search.substring(1);
|
||||
}
|
||||
var vars = query.split("&");
|
||||
var query_string = {};
|
||||
for (var i = 0; i < vars.length; i++) {
|
||||
var pair = vars[i].split("=");
|
||||
var key = decodeURIComponent(pair[0]);
|
||||
var value = decodeURIComponent(pair[1]);
|
||||
// If first entry with this name
|
||||
if (typeof query_string[key] === "undefined") {
|
||||
query_string[key] = decodeURIComponent(value);
|
||||
// If second entry with this name
|
||||
} else if (typeof query_string[key] === "string") {
|
||||
var arr = [query_string[key], decodeURIComponent(value)];
|
||||
query_string[key] = arr;
|
||||
// If third or later entry with this name
|
||||
} else {
|
||||
query_string[key].push(decodeURIComponent(value));
|
||||
}
|
||||
}
|
||||
if (return_key) {
|
||||
if (keyInObject(return_key, query_string)) {
|
||||
return query_string[return_key];
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
} else {
|
||||
return query_string;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* searchs the current url for a parameter
|
||||
* @param {String} key uid key to get data for
|
||||
* @return {String} value for the key or '' for not found
|
||||
*/
|
||||
function getQueryStringParam(key)
|
||||
{
|
||||
var url = new URL(window.location.href);
|
||||
var param = url.searchParams.get(key);
|
||||
if (param) {
|
||||
return param;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
// *** MASTER logout call
|
||||
// METHOD: loginLogout
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : submits basic data for form logout
|
||||
/**
|
||||
* submits basic data for form logout
|
||||
*/
|
||||
function loginLogout()
|
||||
{
|
||||
const form = document.createElement('form');
|
||||
@@ -732,4 +906,80 @@ function loginLogout()
|
||||
form.submit();
|
||||
}
|
||||
|
||||
/**
|
||||
* create login string and logout button elements
|
||||
* @param {String} login_string the login string to show on the left
|
||||
* @param {String} [header_id='mainHeader'] the target for the main element block
|
||||
* if not set mainHeader is assumed
|
||||
* this is the target div for the "loginRow"
|
||||
*/
|
||||
function createLoginRow(login_string, header_id = 'mainHeader')
|
||||
{
|
||||
// if header does not exist, we do nothing
|
||||
if (exists(header_id)) {
|
||||
// that row must exist already, if not it must be the first in the "mainHeader"
|
||||
if (!exists('loginRow')) {
|
||||
$('#' + header_id).html(phfo(cel('div', 'loginRow', '', ['loginRow', 'flx-spbt'])));
|
||||
}
|
||||
// clear out just in case for first entry
|
||||
// fill with div name & login/logout button
|
||||
$('#loginRow').html(phfo(cel('div', '', login_string)));
|
||||
$('#loginRow').append(phfo(
|
||||
aelx(
|
||||
// outer div
|
||||
cel('div'),
|
||||
// inner element
|
||||
cel('input', 'logout', '', [], {
|
||||
value: __('Logout'),
|
||||
type: 'button',
|
||||
onClick: 'loginLogout()'
|
||||
})
|
||||
)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* create the top nav menu that switches physical between pages
|
||||
* (edit access data based)
|
||||
* @param {Object} nav_menu the built nav menu with highlight info
|
||||
* @param {String} [header_id='mainHeader'] the target for the main element block
|
||||
* if not set mainHeader is assumed
|
||||
* this is the target div for the "menuRow"
|
||||
*/
|
||||
function createNavMenu(nav_menu, header_id = 'mainHeader') {
|
||||
// must be an object
|
||||
if (isObject(nav_menu) && getObjectCount(nav_menu) > 1) {
|
||||
// do we have more than one entry, if not, do not show (single page)
|
||||
if (!exists('menuRow')) {
|
||||
$('#' + header_id).html(phfo(cel('div', 'menuRow', '', ['menuRow', 'flx-s'])));
|
||||
}
|
||||
var content = [];
|
||||
$.each(nav_menu, function(key, item) {
|
||||
// key is number
|
||||
// item is object with entries
|
||||
if (key != 0) {
|
||||
content.push(phfo(cel('div', '', '·', ['pd-2'])));
|
||||
}
|
||||
// ignore item.popup for now
|
||||
if (item.enabled) {
|
||||
// set selected based on window.location.href as the php set will not work
|
||||
if (window.location.href.indexOf(item.url) != -1) {
|
||||
item.selected = 1;
|
||||
}
|
||||
// create the entry
|
||||
content.push(phfo(
|
||||
aelx(
|
||||
cel('div'),
|
||||
cel('a', '', item.name, ['pd-2'].concat(item.selected ? 'highlight': ''), {
|
||||
href: item.url
|
||||
})
|
||||
)
|
||||
));
|
||||
}
|
||||
});
|
||||
$('#menuRow').html(content.join(''));
|
||||
}
|
||||
}
|
||||
|
||||
/* END */
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* general edit javascript */
|
||||
/* prototype version */
|
||||
|
||||
/* jshint esversion: 6 */
|
||||
|
||||
@@ -11,19 +12,21 @@ if (!DEBUG) {
|
||||
});
|
||||
}*/
|
||||
|
||||
// METHOD: pop
|
||||
// PARAMS: url, window name, features
|
||||
// RETURN: none
|
||||
// DESC : opens a popup window with winName and given features (string)
|
||||
/**
|
||||
* opens a popup window with winName and given features (string)
|
||||
* @param {String} theURL the url
|
||||
* @param {String} winName window name
|
||||
* @param {Object} features popup features
|
||||
*/
|
||||
function pop(theURL, winName, features) {
|
||||
winName = window.open(theURL, winName, features);
|
||||
winName.focus();
|
||||
}
|
||||
|
||||
// METHOD: expandTA
|
||||
// PARAMS: id
|
||||
// RETURN: none
|
||||
// DESC : automatically resize a text area based on the amount of lines in it
|
||||
/**
|
||||
* automatically resize a text area based on the amount of lines in it
|
||||
* @param {[string} ta_id element id
|
||||
*/
|
||||
function expandTA(ta_id) {
|
||||
var ta;
|
||||
// if a string comes, its a get by id, else use it as an element pass on
|
||||
@@ -44,12 +47,12 @@ function expandTA(ta_id) {
|
||||
ta.rows = numNewRows + theRows.length;
|
||||
}
|
||||
|
||||
// METHOD: ShowHideMenu
|
||||
// PARAMS: status -> show or hide
|
||||
// id -> id to work on
|
||||
// RETURN: none
|
||||
// DESC: shows or hides the menu
|
||||
// this is used in some old menu templates
|
||||
/**
|
||||
* shows or hides the menu
|
||||
* this is used in some old menu templates
|
||||
* @param {String} status show or hide
|
||||
* @param {String} id element id to work on
|
||||
*/
|
||||
function ShowHideMenu(status, id)
|
||||
{
|
||||
if (status == 'show') {
|
||||
@@ -65,8 +68,12 @@ function ShowHideMenu(status, id)
|
||||
}
|
||||
}
|
||||
|
||||
// used in old templates
|
||||
// move element action
|
||||
/**
|
||||
* used in old templates
|
||||
* move element action
|
||||
* @param {String} id element id to move
|
||||
* @param {String} direction move direction
|
||||
*/
|
||||
function mv(id, direction)
|
||||
{
|
||||
document.forms[form_name].action.value = 'move';
|
||||
@@ -75,7 +82,11 @@ function mv(id, direction)
|
||||
document.forms[form_name].submit();
|
||||
}
|
||||
|
||||
// load element action
|
||||
/**
|
||||
* used in old templates
|
||||
* load element action
|
||||
* @param {String} id the element id to load
|
||||
*/
|
||||
function le(id)
|
||||
{
|
||||
document.forms[form_name].action.value = 'load';
|
||||
@@ -91,13 +102,14 @@ function le(id)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: sh
|
||||
// PARAMS: id -> element to hide
|
||||
// showText -> text for the element if shown
|
||||
// hideText -> text for the element if hidden
|
||||
// RETURN: returns true if hidden, or false if not
|
||||
// DESC : hides an element, additional writes 1 (show) or 0 (hide) into <id>Flag field
|
||||
// this needs scriptacolous installed for BlindUp/BlindDown
|
||||
/**
|
||||
* hides an element, additional writes 1 (show) or 0 (hide) into <id>Flag field
|
||||
* this needs scriptacolous installed for BlindUp/BlindDown
|
||||
* @param {String} id element id to hide
|
||||
* @param {String} showText text for the element if shown
|
||||
* @param {String} hideText text for the element if hidden
|
||||
* @return {Boolean} returns true if hidden, or false if not
|
||||
*/
|
||||
function sh(id, showText, hideText)
|
||||
{
|
||||
flag = id + 'Flag';
|
||||
@@ -120,10 +132,10 @@ function sh(id, showText, hideText)
|
||||
return divStatus;
|
||||
}
|
||||
|
||||
// METHOD: getWindowSize
|
||||
// PARAMS: none
|
||||
// RETURN: array with width/height
|
||||
// DESC : wrapper to get the real window size for the current browser window
|
||||
/**
|
||||
* wrapper to get the real window size for the current browser window
|
||||
* @return {Object} object with width/height
|
||||
*/
|
||||
function getWindowSize()
|
||||
{
|
||||
var width, height;
|
||||
@@ -135,10 +147,10 @@ function getWindowSize()
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: getScrollOffset
|
||||
// PARAMS: none
|
||||
// RETURN: array with x/y px
|
||||
// DESC : wrapper to get the correct scroll offset
|
||||
/**
|
||||
* wrapper to get the correct scroll offset
|
||||
* @return {Object} object with x/y px
|
||||
*/
|
||||
function getScrollOffset()
|
||||
{
|
||||
var left, top;
|
||||
@@ -150,10 +162,12 @@ function getScrollOffset()
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: setCenter
|
||||
// PARAMS: id to set center
|
||||
// RETURN: none
|
||||
// DESC : centers div to current window size middle
|
||||
/**
|
||||
* centers div to current window size middle
|
||||
* @param {String} id element to center
|
||||
* @param {Boolean} left if true centers to the middle from the left
|
||||
* @param {Boolean} top if true centers to the middle from the top
|
||||
*/
|
||||
function setCenter(id, left, top)
|
||||
{
|
||||
// get size of id
|
||||
@@ -179,10 +193,11 @@ function setCenter(id, left, top)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: goToPos()
|
||||
// PARAMS: element, offset (default 0)
|
||||
// RETURN: none
|
||||
// DESC: goes to an element id position
|
||||
/**
|
||||
* goes to an element id position
|
||||
* @param {String} element element id to move to
|
||||
* @param {Number} [offset=0] offset from top, default is 0 (px)
|
||||
*/
|
||||
function goToPos(element, offset = 0)
|
||||
{
|
||||
try {
|
||||
@@ -203,10 +218,12 @@ function goToPos(element, offset = 0)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: __
|
||||
// PARAMS: text
|
||||
// RETURN: translated text (based on PHP selected language)
|
||||
// DESC : uses the i18n array created in the translation template, that is filled from gettext in PHP (Smarty)
|
||||
/**
|
||||
* uses the i18n object created in the translation template
|
||||
* that is filled from gettext in PHP
|
||||
* @param {String} string text to translate
|
||||
* @return {String} translated text (based on PHP selected language)
|
||||
*/
|
||||
function __(string)
|
||||
{
|
||||
if (typeof i18n !== 'undefined' && isObject(i18n) && i18n[string]) {
|
||||
@@ -216,12 +233,13 @@ function __(string)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: string.format
|
||||
// PARAMS: any, for string format
|
||||
// RETURN: formatted string
|
||||
// DESC : simple sprintf formater for replace
|
||||
// "{0} is cool, {1} is not".format("Alpha", "Beta");
|
||||
// First, checks if it isn't implemented yet.
|
||||
/**
|
||||
* simple sprintf formater for replace
|
||||
* usage: "{0} is cool, {1} is not".format("Alpha", "Beta");
|
||||
* First, checks if it isn't implemented yet.
|
||||
* @param {String} !String.prototype.format string with elements to be replaced
|
||||
* @return {String} Formated string
|
||||
*/
|
||||
if (!String.prototype.format) {
|
||||
String.prototype.format = function()
|
||||
{
|
||||
@@ -236,25 +254,32 @@ if (!String.prototype.format) {
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: numberWithCommas
|
||||
// PARAMS: number
|
||||
// RETURN: formatted with , in thousands
|
||||
// DESC : formats flat number 123456 to 123,456
|
||||
/**
|
||||
* formats flat number 123456 to 123,456
|
||||
* @param {Number} x number to be formated
|
||||
* @return {String} formatted with , in thousands
|
||||
*/
|
||||
const numberWithCommas = (x) => {
|
||||
var parts = x.toString().split(".");
|
||||
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
||||
return parts.join(".");
|
||||
};
|
||||
|
||||
// METHOD:
|
||||
// PARAMS: string
|
||||
// RETURN: string with <br>
|
||||
// DESC : converts line breaks to br
|
||||
/**
|
||||
* converts line breaks to br
|
||||
* @param {String} string any string
|
||||
* @return {String} string with <br>
|
||||
*/
|
||||
function convertLBtoBR(string)
|
||||
{
|
||||
return string.replace(/(?:\r\n|\r|\n)/g, '<br>');
|
||||
}
|
||||
|
||||
/**
|
||||
* escape HTML string
|
||||
* @param {String} !String.prototype.escapeHTML HTML data string to be escaped
|
||||
* @return {String} escaped string
|
||||
*/
|
||||
if (!String.prototype.escapeHTML) {
|
||||
String.prototype.escapeHTML = function() {
|
||||
return this.replace(/[&<>"'\/]/g, function (s) {
|
||||
@@ -272,6 +297,11 @@ if (!String.prototype.escapeHTML) {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* unescape a HTML encoded string
|
||||
* @param {String} !String.prototype.unescapeHTML data with escaped entries
|
||||
* @return {String} HTML formated string
|
||||
*/
|
||||
if (!String.prototype.unescapeHTML) {
|
||||
String.prototype.unescapeHTML = function() {
|
||||
return this.replace(/&[#\w]+;/g, function (s) {
|
||||
@@ -289,31 +319,33 @@ if (!String.prototype.unescapeHTML) {
|
||||
};
|
||||
}
|
||||
|
||||
// METHOD: getTimestamp
|
||||
// PARAMS: none
|
||||
// RETURN: timestamp (in milliseconds)
|
||||
// DESC : returns current timestamp (unix timestamp)
|
||||
/**
|
||||
* returns current timestamp (unix timestamp)
|
||||
* @return {Number} timestamp (in milliseconds)
|
||||
*/
|
||||
function getTimestamp()
|
||||
{
|
||||
var date = new Date();
|
||||
return date.getTime();
|
||||
}
|
||||
|
||||
// METHOD: dec2hex
|
||||
// PARAMS: decimal string
|
||||
// RETURN: string
|
||||
// DESC : dec2hex :: Integer -> String
|
||||
// i.e. 0-255 -> '00'-'ff'
|
||||
/**
|
||||
* dec2hex :: Integer -> String
|
||||
* i.e. 0-255 -> '00'-'ff'
|
||||
* @param {Number} dec decimal string
|
||||
* @return {String} hex encdoded number
|
||||
*/
|
||||
function dec2hex(dec)
|
||||
{
|
||||
return ('0' + dec.toString(16)).substr(-2);
|
||||
}
|
||||
|
||||
// METHOD: generateId
|
||||
// PARAMS: lenght in int
|
||||
// RETURN: random string
|
||||
// DESC : generateId :: Integer -> String
|
||||
// only works on mondern browsers
|
||||
/**
|
||||
* generateId :: Integer -> String
|
||||
* only works on mondern browsers
|
||||
* @param {Number} len length of unique id string
|
||||
* @return {String} random string in length of len
|
||||
*/
|
||||
function generateId(len)
|
||||
{
|
||||
var arr = new Uint8Array((len || 40) / 2);
|
||||
@@ -321,20 +353,22 @@ function generateId(len)
|
||||
return Array.from(arr, dec2hex).join('');
|
||||
}
|
||||
|
||||
// METHOD: randomIdF()
|
||||
// PARAMS: none
|
||||
// RETURN: not true random string
|
||||
// DESC : creates a pseudo random string of 10 characters
|
||||
// after many runs it will create duplicates
|
||||
/**
|
||||
* creates a pseudo random string of 10 characters
|
||||
* works on all browsers
|
||||
* after many runs it will create duplicates
|
||||
* @return {String} not true random string
|
||||
*/
|
||||
function randomIdF()
|
||||
{
|
||||
return Math.random().toString(36).substring(2);
|
||||
}
|
||||
|
||||
// METHOD: isObject
|
||||
// PARAMS: possible object
|
||||
// RETURN: true/false if it is an object or not
|
||||
// DESC : checks if a variable is an object
|
||||
/**
|
||||
* checks if a variable is an object
|
||||
* @param {Mixed} val possible object
|
||||
* @return {Boolean} true/false if it is an object or not
|
||||
*/
|
||||
function isObject(val) {
|
||||
if (val === null) {
|
||||
return false;
|
||||
@@ -342,31 +376,55 @@ function isObject(val) {
|
||||
return ((typeof val === 'function') || (typeof val === 'object'));
|
||||
}
|
||||
|
||||
// METHOD: keyInObject
|
||||
// PARAMS: key name, object
|
||||
// RETURN: true/false if key exists in object
|
||||
// DESC : checks if a key exists in a given object
|
||||
const keyInObject = (key, object) => (key in object) ? true : false;
|
||||
/**
|
||||
* checks if a key exists in a given object
|
||||
* @param {String} key key name
|
||||
* @param {Object} object object to search key in
|
||||
* @return {Boolean} true/false if key exists in object
|
||||
*/
|
||||
const keyInObject = (key, object) => (Object.prototype.hasOwnProperty.call(object, key)) ? true : false;
|
||||
/*function keyInObject(key, object)
|
||||
{
|
||||
return (key in object) ? true : false;
|
||||
return (Object.prototype.hasOwnProperty.call(object, key)) ? true : false;
|
||||
}*/
|
||||
|
||||
// METHOD: exists
|
||||
// PARAMS: uid
|
||||
// RETURN: true/false
|
||||
// DESC : checks if a DOM element actually exists
|
||||
const exists = (id) => $('#' + id).length > 0 ? true : false;
|
||||
/**
|
||||
* returns matching key of value
|
||||
* @param {Object} obj object to search value in
|
||||
* @param {Mixed} value any value (String, Number, etc)
|
||||
* @return {String} the key found for the first matching value
|
||||
*/
|
||||
const getKeyByValue = (obj, value) => Object.keys(obj).find(key => obj[key] === value);
|
||||
// function getKeyByValue(object, value)
|
||||
// {
|
||||
// return Object.keys(object).find(key => object[key] === value);
|
||||
// }
|
||||
|
||||
/**
|
||||
* returns true if value is found in object with a key
|
||||
* @param {Object} obj object to search value in
|
||||
* @param {Mixed} value any value (String, Number, etc)
|
||||
* @return {Boolean} true on value found, false on not found
|
||||
*/
|
||||
const valueInObject = (obj, value) => (Object.keys(obj).find(key => obj[key] === value)) ? true : false;
|
||||
|
||||
/**
|
||||
* checks if a DOM element actually exists
|
||||
* @param {String} id Element id to check for
|
||||
* @return {Boolean} true if element exists, false on failure
|
||||
*/
|
||||
const exists = (id) => $(id).length > 0 ? true : false;
|
||||
/*function exists(id)
|
||||
{
|
||||
return $('#' + id).length > 0 ? true : false;
|
||||
return $(id).length > 0 ? true : false;
|
||||
}*/
|
||||
|
||||
// METHOD: formatBytes
|
||||
// PARAMS: bytes in int
|
||||
// RETURN: string in GB/MB/KB
|
||||
// DESC : converts a int number into bytes with prefix in two decimals precision
|
||||
// currently precision is fixed, if dynamic needs check for max/min precision
|
||||
/**
|
||||
* converts a int number into bytes with prefix in two decimals precision
|
||||
* currently precision is fixed, if dynamic needs check for max/min precision
|
||||
* @param {Number} bytes bytes in int
|
||||
* @return {String} string in GB/MB/KB
|
||||
*/
|
||||
function formatBytes(bytes)
|
||||
{
|
||||
var i = -1;
|
||||
@@ -378,10 +436,10 @@ function formatBytes(bytes)
|
||||
return parseFloat(Math.round(bytes * Math.pow(10, 2)) / Math.pow(10, 2)) + ['kB', 'MB', 'GB', 'TB', 'PB', 'EB'][i];
|
||||
}
|
||||
|
||||
// METHOD: errorCatch
|
||||
// PARAMS: err (error from try/catch
|
||||
// RETURN: none
|
||||
// DESC : prints out error messages based on data available from the browser
|
||||
/**
|
||||
* prints out error messages based on data available from the browser
|
||||
* @param {Object} err error from try/catch block
|
||||
*/
|
||||
function errorCatch(err)
|
||||
{
|
||||
// for FF & Chrome
|
||||
@@ -407,10 +465,10 @@ function errorCatch(err)
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: actionIndicator
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : show or hide the "do" overlay
|
||||
/**
|
||||
* show or hide the "do" overlay
|
||||
* @param {String} [loc=''] location name for action indicator, default empty. for console.log
|
||||
*/
|
||||
function actionIndicator(loc = '')
|
||||
{
|
||||
if ($('overlayBox').visible()) {
|
||||
@@ -420,12 +478,11 @@ function actionIndicator(loc = '')
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: actionIndicatorShow/actionIndicatorHide
|
||||
// PARAMS: loc for console log info
|
||||
// RETURN: none
|
||||
// DESC : explicit show/hide for action Indicator
|
||||
// instead of automatically show or hide, do
|
||||
// on command
|
||||
/**
|
||||
* explicit show for action Indicator
|
||||
* instead of automatically show or hide, do on command show
|
||||
* @param {String} [loc=''] optional location name, empty if not set. for console.log
|
||||
*/
|
||||
function actionIndicatorShow(loc = '')
|
||||
{
|
||||
console.log('Indicator: SHOW [%s]', loc);
|
||||
@@ -434,6 +491,12 @@ function actionIndicatorShow(loc = '')
|
||||
$('indicator').show();
|
||||
overlayBoxShow();
|
||||
}
|
||||
|
||||
/**
|
||||
* explicit hide for action Indicator
|
||||
* instead of automatically show or hide, do on command hide
|
||||
* @param {String} [loc=''] optional location name, empty if not set. for console.log
|
||||
*/
|
||||
function actionIndicatorHide(loc = '')
|
||||
{
|
||||
console.log('Indicator: HIDE [%s]', loc);
|
||||
@@ -442,10 +505,9 @@ function actionIndicatorHide(loc = '')
|
||||
overlayBoxHide();
|
||||
}
|
||||
|
||||
// METHOD: overlayBoxView
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : shows or hides the overlay box
|
||||
/**
|
||||
* shows the overlay box
|
||||
*/
|
||||
function overlayBoxShow()
|
||||
{
|
||||
// check if overlay box exists and if yes set the z-index to 100
|
||||
@@ -455,6 +517,10 @@ function overlayBoxShow()
|
||||
$('overlayBox').show();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* hides the overlay box
|
||||
*/
|
||||
function overlayBoxHide()
|
||||
{
|
||||
// if the overlay box z-index is 100, do no hide, but set to 98
|
||||
@@ -465,10 +531,9 @@ function overlayBoxHide()
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: setOverlayBox
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : position the overlay block box and shows it
|
||||
/**
|
||||
* position the overlay block box and shows it
|
||||
*/
|
||||
function setOverlayBox()
|
||||
{
|
||||
var viewport = document.viewport.getDimensions();
|
||||
@@ -479,10 +544,9 @@ function setOverlayBox()
|
||||
$('overlayBox').show();
|
||||
}
|
||||
|
||||
// METHOD: ClearCall
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : the abort call, clears the action box and hides it and the overlay box
|
||||
/**
|
||||
* the abort call, clears the action box and hides it and the overlay box
|
||||
*/
|
||||
function ClearCall()
|
||||
{
|
||||
$('actionBox').innerHTML = '';
|
||||
@@ -491,14 +555,15 @@ function ClearCall()
|
||||
}
|
||||
|
||||
// *** DOM MANAGEMENT FUNCTIONS
|
||||
// METHOD: cel [create element]
|
||||
// PARAMS: tag: must set tag (div, span, etc)
|
||||
// id: optional set for id, if input, select will be used for name
|
||||
// content: text content inside, is skipped if sub elements exist
|
||||
// css: array for css tags
|
||||
// options: anything else (value, placeholder, OnClick, style)
|
||||
// RETURN: object
|
||||
// DESC : creates object for DOM element creation flow
|
||||
/**
|
||||
* reates object for DOM element creation flow
|
||||
* @param {String} tag must set tag (div, span, etc)
|
||||
* @param {String} [id=''] optional set for id, if input, select will be used for name
|
||||
* @param {String} [content=''] text content inside, is skipped if sub elements exist
|
||||
* @param {Array} [css=[]] array for css tags
|
||||
* @param {Object} [options={}] anything else (value, placeholder, OnClick, style)
|
||||
* @return {Object} created element as an object
|
||||
*/
|
||||
const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
||||
_element = {
|
||||
tag: tag,
|
||||
@@ -510,12 +575,13 @@ const cel = (tag, id = '', content = '', css = [], options = {}) =>
|
||||
sub: []
|
||||
};
|
||||
|
||||
// METHOD: ael [attach element]
|
||||
// PARAMS: base: object where to attach/search
|
||||
// attach: the object to be attached
|
||||
// id: optional id, if given search in base for this id and attach there
|
||||
// RETURN: "none", technically there is no return needed
|
||||
// DESC : attach a cel created object to another to create a basic DOM tree
|
||||
/**
|
||||
* attach a cel created object to another to create a basic DOM tree
|
||||
* @param {Object} base object where to attach/search
|
||||
* @param {Object} attach the object to be attached
|
||||
* @param {String} [id=''] optional id, if given search in base for this id and attach there
|
||||
* @return {Object} "none", technically there is no return needed as it is global attach
|
||||
*/
|
||||
function ael(base, attach, id = '')
|
||||
{
|
||||
if (id) {
|
||||
@@ -537,12 +603,13 @@ function ael(base, attach, id = '')
|
||||
return base;
|
||||
}
|
||||
|
||||
// METHOD: aelx [attach n elements]
|
||||
// PARAMS: base: object to where we attach the elements
|
||||
// attach 1..n: attach directly to the base element those attachments
|
||||
// RETURN: "none", technically there is no return needed
|
||||
// DESC : directly attach n elements to one master base element
|
||||
// this type does not support attach with optional id
|
||||
/**
|
||||
* directly attach n elements to one master base element
|
||||
* this type does not support attach with optional id
|
||||
* @param {Object} base object to where we attach the elements
|
||||
* @param {...Object} attach attach 1..n: attach directly to the base element those attachments
|
||||
* @return {Object} "none", technically there is no return needed, global attach
|
||||
*/
|
||||
function aelx(base, ...attach)
|
||||
{
|
||||
attach.each(function(t) {
|
||||
@@ -551,19 +618,22 @@ function aelx(base, ...attach)
|
||||
return base;
|
||||
}
|
||||
|
||||
// METHOD: rel [reset element]
|
||||
// PARAMS: cel created element
|
||||
// RETURN: returns reset base element
|
||||
// DESC : resets the sub elements of the base element given
|
||||
/**
|
||||
* resets the sub elements of the base element given
|
||||
* @param {Object} base cel created element
|
||||
* @return {Object} returns reset base element
|
||||
*/
|
||||
const rel = (base) => {
|
||||
base.sub = [];
|
||||
return base;
|
||||
};
|
||||
|
||||
// METHOD: rcssel [remove a css from the element]
|
||||
// PARAMS: element, style sheet to remove
|
||||
// RETURN: returns full element
|
||||
// DESC : searches and removes style from css array
|
||||
/**
|
||||
* searches and removes style from css array
|
||||
* @param {Object} _element element to work one
|
||||
* @param {String css style sheet to remove (name)
|
||||
* @return {Object} returns full element
|
||||
*/
|
||||
function rcssel(_element, css)
|
||||
{
|
||||
var css_index = _element.css.indexOf(css);
|
||||
@@ -573,10 +643,12 @@ function rcssel(_element, css)
|
||||
return _element;
|
||||
}
|
||||
|
||||
// METHOD: acssel [add css element]
|
||||
// PARAMS: element, style sheet to add
|
||||
// RETURN: returns full element
|
||||
// DESC : adds a new style sheet to the element given
|
||||
/**
|
||||
* adds a new style sheet to the element given
|
||||
* @param {Object} _element element to work on
|
||||
* @param {String} css style sheet to add (name)
|
||||
* @return {Object} returns full element
|
||||
*/
|
||||
function acssel(_element, css)
|
||||
{
|
||||
var css_index = _element.css.indexOf(css);
|
||||
@@ -586,11 +658,14 @@ function acssel(_element, css)
|
||||
return _element;
|
||||
}
|
||||
|
||||
// METHOD: scssel
|
||||
// PARAMS: element, style to remove, style to add
|
||||
// RETURN: returns full element
|
||||
// DESC : removes one css and adds another
|
||||
// is a wrapper around rcssel/acssel
|
||||
/**
|
||||
* removes one css and adds another
|
||||
* is a wrapper around rcssel/acssel
|
||||
* @param {Object} _element element to work on
|
||||
* @param {String} rcss style to remove (name)
|
||||
* @param {String} acss style to add (name)
|
||||
* @return {Object} returns full element
|
||||
*/
|
||||
function scssel(_element, rcss, acss)
|
||||
{
|
||||
rcssel(_element, rcss);
|
||||
@@ -598,12 +673,12 @@ function scssel(_element, rcss, acss)
|
||||
return _element;
|
||||
}
|
||||
|
||||
// METHOD: phfo [produce html from object]
|
||||
// PARAMS: object tree with dom element declarations
|
||||
// RETURN: HTML string that can be used as innerHTML
|
||||
// DESC : parses the object tree created with cel/ael
|
||||
// and converts it into an HTML string that can
|
||||
// be inserted into the page
|
||||
/**
|
||||
* parses the object tree created with cel/ael and converts it into an HTML string
|
||||
* that can be inserted into the page
|
||||
* @param {Object} tree object tree with dom element declarations
|
||||
* @return {String} HTML string that can be used as innerHTML
|
||||
*/
|
||||
function phfo(tree)
|
||||
{
|
||||
// holds the elements
|
||||
@@ -665,33 +740,45 @@ function phfo(tree)
|
||||
|
||||
// BLOCK: html wrappers for quickly creating html data blocks
|
||||
|
||||
// NOTE : OLD FORMAT which misses multiple block set
|
||||
// METHOD: html_options
|
||||
// PARAMS: name/id, array for the options, selected item uid
|
||||
// options_only [def false] if this is true, it will not print the select part
|
||||
// return_string [def false]: return as string and not as element
|
||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
||||
// RETURN: html with build options block
|
||||
// DESC : creates an select/options drop down block.
|
||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
||||
/**
|
||||
* NOTE: OLD FORMAT which misses multiple block set
|
||||
* creates an select/options drop down block.
|
||||
* the array needs to be key -> value format.
|
||||
* key is for the option id and value is for the data output
|
||||
* @param {String} name name/id
|
||||
* @param {Object} data array for the options
|
||||
* @param {String} [selected=''] selected item uid
|
||||
* @param {Boolean} [options_only=false] if this is true, it will not print the select part
|
||||
* @param {Boolean} [return_string=false] return as string and not as element
|
||||
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||
* 'values' all others are ignored
|
||||
* @return {String} html with build options block
|
||||
*/
|
||||
function html_options(name, data, selected = '', options_only = false, return_string = false, sort = '')
|
||||
{
|
||||
// wrapper to new call
|
||||
return html_options_block(name, data, selected, false, options_only, return_string, sort);
|
||||
}
|
||||
|
||||
// NOTE : USE THIS CALL, the above one is deprecated
|
||||
// METHOD: html_options
|
||||
// PARAMS: name/id, array for the options,
|
||||
// selected item uid
|
||||
// multiple [def false] if this is true, the drop down will be turned into multiple select
|
||||
// options_only [def false] if this is true, it will not print the select part
|
||||
// return_string [def false]: return as string and not as element
|
||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
||||
// RETURN: html with build options block
|
||||
// DESC : creates an select/options drop down block.
|
||||
// the array needs to be key -> value format. key is for the option id and value is for the data output
|
||||
function html_options_block(name, data, selected = '', multiple = false, options_only = false, return_string = false, sort = '')
|
||||
/**
|
||||
* NOTE: USE THIS CALL, the above one is deprecated
|
||||
* creates an select/options drop down block.
|
||||
* the array needs to be key -> value format.
|
||||
* key is for the option id and value is for the data output
|
||||
* @param {String} name name/id
|
||||
* @param {Object} data array for the options
|
||||
* @param {String} [selected=''] selected item uid
|
||||
* @param {Number} [multiple=0] if this is 1 or larger, the drop down
|
||||
* will be turned into multiple select
|
||||
* the number sets the size value unless it is 1,
|
||||
* then it is default
|
||||
* @param {Boolean} [options_only=false] if this is true, it will not print the select part
|
||||
* @param {Boolean} [return_string=false] return as string and not as element
|
||||
* @param {String} [sort=''] if empty as is, else allowed 'keys',
|
||||
* 'values' all others are ignored
|
||||
* @return {String} html with build options block
|
||||
*/
|
||||
function html_options_block(name, data, selected = '', multiple = 0, options_only = false, return_string = false, sort = '')
|
||||
{
|
||||
var content = [];
|
||||
var element_select;
|
||||
@@ -700,8 +787,11 @@ function html_options_block(name, data, selected = '', multiple = false, options
|
||||
var data_list = []; // for sorted output
|
||||
var value;
|
||||
var option;
|
||||
if (multiple === true) {
|
||||
if (multiple > 0) {
|
||||
select_options.multiple = '';
|
||||
if (multiple > 1) {
|
||||
select_options.size = multiple;
|
||||
}
|
||||
}
|
||||
// set outside select, gets stripped on return if options only is true
|
||||
element_select = cel('select', name, '', [], select_options);
|
||||
@@ -718,14 +808,18 @@ function html_options_block(name, data, selected = '', multiple = false, options
|
||||
// for (const [key, value] of Object.entries(data)) {
|
||||
for (const key of data_list) {
|
||||
value = data[key];
|
||||
console.log('create [%s] options: key: %s, value: %s', name, key, value);
|
||||
// console.log('create [%s] options: key: %s, value: %s', name, key, value);
|
||||
// basic options init
|
||||
options = {
|
||||
'label': value,
|
||||
'value': key
|
||||
};
|
||||
// add selected if matching
|
||||
if (selected == key) {
|
||||
if (multiple == 0 && !Array.isArray(selected) && selected == key) {
|
||||
options.selected = '';
|
||||
}
|
||||
// for multiple, we match selected as array
|
||||
if (multiple == 1 && Array.isArray(selected) && selected.indexOf(key) != -1) {
|
||||
options.selected = '';
|
||||
}
|
||||
// create the element option
|
||||
@@ -754,11 +848,13 @@ function html_options_block(name, data, selected = '', multiple = false, options
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: html_options_refill
|
||||
// PARAMS: name/id, array of options, sort = ''
|
||||
// sort [def '']: if empty as is, else allowed 'keys', 'values' all others are ignored
|
||||
// RETURN: none
|
||||
// DESC : refills a select box with options and keeps the selected
|
||||
/**
|
||||
* refills a select box with options and keeps the selected
|
||||
* @param {String} name name/id
|
||||
* @param {Object} data array of options
|
||||
* @param {String} [sort=''] if empty as is, else allowed 'keys', 'values'
|
||||
* all others are ignored
|
||||
*/
|
||||
function html_options_refill(name, data, sort = '')
|
||||
{
|
||||
var element_option;
|
||||
@@ -792,11 +888,70 @@ function html_options_refill(name, data, sort = '')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* parses a query string from window.location.search.substring(1)
|
||||
* ALTERNATIVE CODE
|
||||
* var url = new URL(window.location.href);
|
||||
* param_uid = url.searchParams.get('uid');
|
||||
* @param {String} [query=''] the query string to parse
|
||||
* if not set will auto fill
|
||||
* @param {String} [return_key=''] if set only returns this key entry
|
||||
* or empty for none
|
||||
* @return {Object|String} parameter entry list
|
||||
*/
|
||||
function parseQueryString(query = '', return_key = '') {
|
||||
if (!query) {
|
||||
query = window.location.search.substring(1);
|
||||
}
|
||||
var vars = query.split("&");
|
||||
var query_string = {};
|
||||
for (var i = 0; i < vars.length; i++) {
|
||||
var pair = vars[i].split("=");
|
||||
var key = decodeURIComponent(pair[0]);
|
||||
var value = decodeURIComponent(pair[1]);
|
||||
// If first entry with this name
|
||||
if (typeof query_string[key] === "undefined") {
|
||||
query_string[key] = decodeURIComponent(value);
|
||||
// If second entry with this name
|
||||
} else if (typeof query_string[key] === "string") {
|
||||
var arr = [query_string[key], decodeURIComponent(value)];
|
||||
query_string[key] = arr;
|
||||
// If third or later entry with this name
|
||||
} else {
|
||||
query_string[key].push(decodeURIComponent(value));
|
||||
}
|
||||
}
|
||||
if (return_key) {
|
||||
if (keyInObject(return_key, query_string)) {
|
||||
return query_string[return_key];
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
} else {
|
||||
return query_string;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* searchs the current url for a parameter
|
||||
* @param {String} key uid key to get data for
|
||||
* @return {String} value for the key or '' for not found
|
||||
*/
|
||||
function getQueryStringParam(key)
|
||||
{
|
||||
var url = new URL(window.location.href);
|
||||
var param = url.searchParams.get(key);
|
||||
if (param) {
|
||||
return param;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
// *** MASTER logout call
|
||||
// METHOD: loginLogout
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : submits basic data for form logout
|
||||
/**
|
||||
* submits basic data for form logout
|
||||
*/
|
||||
function loginLogout()
|
||||
{
|
||||
const form = document.createElement('form');
|
||||
|
||||