Compare commits
37 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
@@ -9,6 +9,7 @@ php_value xdebug.show_local_vars 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
|
||||
|
||||
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
|
||||
|
||||
@@ -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 "「クラス」これは翻訳です?"
|
||||
|
||||
|
||||
@@ -1,7 +1,90 @@
|
||||
-- 2019/9/10 update edit_page with reference
|
||||
-- 2019/9/10 update edit_page with reference and additional ACLs, update core functions
|
||||
|
||||
-- page content reference settings
|
||||
-- * 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;
|
||||
|
||||
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 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,36 +17,43 @@ 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');
|
||||
$LOG_FILE_ID = 'classTest';
|
||||
// set language for l10n
|
||||
$lang = 'en_utf8';
|
||||
|
||||
// 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, $lang);
|
||||
$basic = new CoreLibs\Admin\Backend(DB_CONFIG, $lang);
|
||||
$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: ".$basic->hrRunningTime()."<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'])) {
|
||||
if (is_object($login) && isset($login->acl['unit'])) {
|
||||
print "ACL UNIT: ".print_r(array_keys($login->acl['unit']), true)."<br>";
|
||||
print "ACCESS CHECK: ".$login->loginCheckEditAccess($edit_access_id)."<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 {
|
||||
@@ -77,7 +87,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>";
|
||||
@@ -91,9 +101,13 @@ 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, true)."<br>";
|
||||
@@ -117,20 +131,20 @@ print "UPDATE STATUS: $status | RETURNING EXT: ".print_r($basic->insert_id_ext,
|
||||
$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>";
|
||||
|
||||
@@ -222,8 +236,63 @@ $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>";
|
||||
|
||||
// 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',
|
||||
);
|
||||
echo "<hr>";
|
||||
$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
|
||||
@@ -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>";
|
||||
|
||||
@@ -5,13 +5,25 @@
|
||||
// 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,7 +1,5 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
$DEBUG_ALL_OVERRIDE = 0; // set to 1 to debug on live/remote server locations
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
@@ -12,30 +10,33 @@ 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, $lang);
|
||||
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 "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();
|
||||
|
||||
|
||||
@@ -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'];
|
||||
|
||||
@@ -9,25 +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;
|
||||
$JS_DATEPICKR = false;
|
||||
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 (
|
||||
@@ -46,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,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2003/06/10
|
||||
@@ -78,33 +78,26 @@ DEFINE('TEMPLATES', 'templates'.DS);
|
||||
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');
|
||||
// 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);
|
||||
// DEFINE('ERROR_STRICT', 3);
|
||||
// allow page caching in general, set to 'FALSE' if you do debugging or development!
|
||||
// DEFINE('ALLOW_SMARTY_CACHE', FALSE);
|
||||
// DEFINE('ALLOW_SMARTY_CACHE', FALSE);
|
||||
// cache life time, in second', default here is 2 days (172800s)
|
||||
// -1 is never expire cache
|
||||
// DEFINE('SMARTY_CACHE_LIFETIME', -1);
|
||||
// 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);
|
||||
@@ -113,38 +106,46 @@ DEFINE('PASSWORD_MAX_LENGTH', 255);
|
||||
// ajax request type
|
||||
DEFINE('AJAX_REQUEST_TYPE', 'POST');
|
||||
// what AJAX type to use
|
||||
DEFINE('USE_PROTOTYPE', true);
|
||||
DEFINE('USE_PROTOTYPE', false);
|
||||
DEFINE('USE_SCRIPTACULOUS', false);
|
||||
DEFINE('USE_JQUERY', false);
|
||||
DEFINE('USE_JQUERY', true);
|
||||
|
||||
/************* LAYOUT WIDTHS *************/
|
||||
DEFINE('PAGE_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', 'ADMIN_SESSION_NAME'.SERVER_NAME_HASH);
|
||||
DEFINE('EDIT_SESSION_NAME', BASE_NAME.'Admin'.SERVER_NAME_HASH.SERVER_PATH_HASH);
|
||||
// frontend
|
||||
DEFINE('SESSION_NAME', 'SESSION_NAME'.SERVER_NAME_HASH);
|
||||
DEFINE('SESSION_NAME', BASE_NAME.SERVER_NAME_HASH.SERVER_PATH_HASH);
|
||||
// SET_SESSION_NAME should be set in the header if a special session name is needed
|
||||
// DEFINE('SET_SESSION_NAME', SESSION_NAME);
|
||||
DEFINE('SET_SESSION_NAME', SESSION_NAME);
|
||||
|
||||
/************* CACHE/COMPILE IDS *************/
|
||||
DEFINE('CACHE_ID', 'CACHE_'.SERVER_NAME_HASH);
|
||||
DEFINE('COMPILE_ID', 'COMPILE_'.SERVER_NAME_HASH);
|
||||
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
|
||||
/************* LOGGING *******************/
|
||||
// DEFINE('LOG_FILE_ID', '');
|
||||
// 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
|
||||
@@ -157,7 +158,7 @@ define('CLASS_VARIABLE_ERROR_MODE', 3);
|
||||
// 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');
|
||||
// DEFINE('QUEUE', 'live_queue');
|
||||
|
||||
/************* DB PATHS (PostgreSQL) *****************/
|
||||
// schema names, can also be defined per <DB INFO>
|
||||
@@ -166,32 +167,53 @@ 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';
|
||||
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.inc')) {
|
||||
require BASE.CONFIGS.'config.path.inc';
|
||||
if (file_exists(BASE.CONFIGS.'config.path.php')) {
|
||||
require BASE.CONFIGS.'config.path.php';
|
||||
}
|
||||
|
||||
// set the USE_DATABASE var, if there is nothing set, we assume TRUE
|
||||
$USE_DATABASE = defined('USE_DATABASE') ? USE_DATABASE : true;
|
||||
|
||||
/************* 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);
|
||||
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);
|
||||
// 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) {
|
||||
@@ -201,26 +223,26 @@ if ((array_key_exists('HTTPS', $_SERVER) && !empty($_SERVER['HTTPS']) && $_SERVE
|
||||
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 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']);
|
||||
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
|
||||
// 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>');
|
||||
@@ -233,11 +255,14 @@ DEFINE('JAVASCRIPT', 'frontend.js');
|
||||
|
||||
// anything optional
|
||||
/************* INTERNAL ******************/
|
||||
// any other global definitons here
|
||||
// DEFINE('SOME_ID', <SOME VALUE>);
|
||||
// any other global definitons in the config.other.php
|
||||
if (file_exists(BASE.CONFIGS.'config.other.php')) {
|
||||
require BASE.CONFIGS.'config.other.php';
|
||||
}
|
||||
|
||||
/************* CONVERT *******************/
|
||||
$paths = array (
|
||||
// this only needed if the external thumbnail create is used
|
||||
$paths = array(
|
||||
'/bin',
|
||||
'/usr/bin',
|
||||
'/usr/local/bin'
|
||||
@@ -249,22 +274,27 @@ foreach ($paths as $path) {
|
||||
DEFINE('CONVERT', $path.DS.'convert');
|
||||
}
|
||||
}
|
||||
unset($paths);
|
||||
|
||||
/************* DEBUG *******************/
|
||||
// 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;
|
||||
$ECHO_ALL = false;
|
||||
$DEBUG_ALL = false;
|
||||
$PRINT_ALL = false;
|
||||
$DB_DEBUG = false;
|
||||
$ENABLE_ERROR_HANDLING = false;
|
||||
$DEBUG_ALL_OVERRIDE = false;
|
||||
} else {
|
||||
$ECHO_ALL = 0;
|
||||
$DEBUG_ALL = 1;
|
||||
$PRINT_ALL = 1;
|
||||
$DB_DEBUG = 1;
|
||||
$ENABLE_ERROR_HANDLING = 0;
|
||||
$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';
|
||||
|
||||
12
www/configs/config.other.php
Executable file
@@ -0,0 +1,12 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2019/10/28
|
||||
* SHORT DESCRIPTION:
|
||||
* other global constant variables
|
||||
* HISTORY:
|
||||
*********************************************************************/
|
||||
|
||||
// DEFINE('SOME_ID', <SOME VALUE>);
|
||||
|
||||
// __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__
|
||||
@@ -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;
|
||||
|
||||
@@ -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',
|
||||
@@ -10,59 +10,66 @@
|
||||
//------------------------------ 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 ();
|
||||
$LANG = '';
|
||||
$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
|
||||
define('SET_SESSION_NAME', EDIT_SESSION_NAME);
|
||||
$SET_SESSION_NAME = EDIT_SESSION_NAME;
|
||||
$LOG_FILE_ID = BASE_NAME.'Admin';
|
||||
//------------------------------ library include end
|
||||
|
||||
//------------------------------ basic variable settings start
|
||||
if (!isset($AJAX_PAGE)) {
|
||||
$AJAX_PAGE = false;
|
||||
}
|
||||
if (!isset($ZIP_STREAM)) {
|
||||
$ZIP_STREAM = false;
|
||||
}
|
||||
// set encoding
|
||||
if (!isset($encoding)) {
|
||||
$encoding = DEFAULT_ENCODING;
|
||||
if (!isset($ENCODING) || !$ENCODING) {
|
||||
$ENCODING = DEFAULT_ENCODING;
|
||||
}
|
||||
// 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 (session_id() && isset($_SESSION['DEFAULT_LANG']) && $_SESSION['DEFAULT_LANG']) {
|
||||
$LANG = $_SESSION['DEFAULT_LANG'];
|
||||
} else {
|
||||
$LANG = defined('SITE_LANG') ? SITE_LANG : DEFAULT_LANG;
|
||||
}
|
||||
// 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 (isset($AJAX_PAGE) && isset($ZIP_STREAM) && $AJAX_PAGE && !$ZIP_STREAM) {
|
||||
if ($AJAX_PAGE && !$ZIP_STREAM) {
|
||||
header("Content-Type: application/json; charset=UTF-8");
|
||||
}
|
||||
//------------------------------ basic variable settings start
|
||||
|
||||
//------------------------------ class init start
|
||||
// login & page access check
|
||||
$login = new CoreLibs\ACL\Login($DB_CONFIG[LOGIN_DB], $lang);
|
||||
$login = new CoreLibs\ACL\Login(DB_CONFIG, $LANG);
|
||||
// post login lang check
|
||||
if ($_SESSION['DEFAULT_LANG']) {
|
||||
$lang = $_SESSION['DEFAULT_LANG'];
|
||||
if (isset($_SESSION['DEFAULT_LANG'])) {
|
||||
$LANG = $_SESSION['DEFAULT_LANG'];
|
||||
}
|
||||
// create smarty object
|
||||
$smarty = new CoreLibs\Template\SmartyExtend($lang);
|
||||
$smarty = new CoreLibs\Template\SmartyExtend($LANG);
|
||||
// create new DB class
|
||||
$cms = new CoreLibs\Admin\Backend($DB_CONFIG[MAIN_DB], $lang);
|
||||
$cms = new CoreLibs\Admin\Backend(DB_CONFIG, $LANG);
|
||||
// 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
|
||||
@@ -70,7 +77,7 @@ ob_end_flush();
|
||||
//------------------------------ logging start
|
||||
// log backend data
|
||||
// data part creation
|
||||
$data = array (
|
||||
$data = array(
|
||||
'_SESSION' => $_SESSION,
|
||||
'_GET' => $_GET,
|
||||
'_POST' => $_POST,
|
||||
@@ -83,22 +90,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['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 declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* 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))).(defined(G_TITLE) ? ' - '.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 (isset($AJAX_PAGE) && !$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 (isset($AJAX_PAGE) && !$AJAX_PAGE) {
|
||||
// javascript translate data as template for auto translate
|
||||
if (empty($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,108 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* 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
|
||||
|
||||
// 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);
|
||||
}
|
||||
// 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;
|
||||
}
|
||||
|
||||
// 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;
|
||||
$cms->DATA['USE_TINY_MCE'] = isset($USE_TINY_MCE) ? $USE_TINY_MCE : false;
|
||||
$cms->DATA['JS_DATEPICKR'] = isset($JS_DATEPICKR) ? $JS_DATEPICKR : false;
|
||||
$cms->DATA['JS_FLATPICKR'] = isset($JS_FLATPICKR) ? $JS_FLATPICKR : false;
|
||||
|
||||
// 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__
|
||||
@@ -24,14 +24,10 @@ $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);
|
||||
$SET_SESSION_NAME = EDIT_SESSION_NAME;
|
||||
// overrride debug flags
|
||||
if (!DEBUG) {
|
||||
$DEBUG_ALL = 0;
|
||||
@@ -47,10 +43,10 @@ if (!isset($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);
|
||||
$login = new CoreLibs\ACL\Login(DB_CONFIG, $lang);
|
||||
|
||||
// create form class
|
||||
$form = new CoreLibs\Output\Form\Generate($DB_CONFIG[MAIN_DB], $lang);
|
||||
$form = new CoreLibs\Output\Form\Generate(DB_CONFIG, $lang);
|
||||
if ($form->mobile_phone) {
|
||||
echo "I am sorry, but this page cannot be viewed by a mobile phone";
|
||||
exit;
|
||||
@@ -70,6 +66,12 @@ if (TARGET == 'live' || TARGET == 'remote') {
|
||||
$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')) {
|
||||
@@ -81,32 +83,8 @@ if (defined('LAYOUT')) {
|
||||
$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));
|
||||
// set table width
|
||||
$table_width = '100%';
|
||||
|
||||
// define all needed smarty stuff for the general HTML/page building
|
||||
$HEADER['CSS'] = CSS;
|
||||
@@ -120,20 +98,22 @@ if ($form->my_page_name == 'edit_order') {
|
||||
// order name is _always_ order_number for the edit interface
|
||||
|
||||
// follwing arrays do exist here:
|
||||
// $position ... has the positions of the array (0..max), cause in a <select>
|
||||
// $position ... has the positions of the 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 ();
|
||||
$position = array();
|
||||
}
|
||||
$row_data_id = $_POST['row_data_id'];
|
||||
$original_id = $row_data_id;
|
||||
if (count($position)) {
|
||||
$original_id = $row_data_id;
|
||||
$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) && $position[0] > 0) {
|
||||
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")
|
||||
@@ -141,8 +121,8 @@ if ($form->my_page_name == 'edit_order') {
|
||||
// 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;
|
||||
$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
|
||||
@@ -177,8 +157,14 @@ if ($form->my_page_name == 'edit_order') {
|
||||
}
|
||||
$q .= "ORDER BY order_number";
|
||||
|
||||
// init arrays
|
||||
$row_data = array();
|
||||
$options_id = array();
|
||||
$options_name = array();
|
||||
$options_selected = array();
|
||||
// DB read data for menu
|
||||
while ($res = $form->dbReturn($q)) {
|
||||
$row_data[] = array (
|
||||
$row_data[] = array(
|
||||
"id" => $res[$table_name."_id"],
|
||||
"name" => $res["name"],
|
||||
"order" => $res["order_number"]
|
||||
@@ -188,20 +174,17 @@ if ($form->my_page_name == 'edit_order') {
|
||||
// html title
|
||||
$HEADER['HTML_TITLE'] = $form->l->__('Edit Order');
|
||||
|
||||
$messages = array ();
|
||||
$messages = array();
|
||||
// error msg
|
||||
if (isset($error)) {
|
||||
$messages[] = array ('msg' => $msg, 'class' => 'error', 'width' => '100%');
|
||||
if (!isset($msg)) {
|
||||
$msg = array();
|
||||
}
|
||||
$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'];
|
||||
@@ -218,8 +201,8 @@ if ($form->my_page_name == 'edit_order') {
|
||||
$DATA['options_selected'] = $options_selected;
|
||||
|
||||
// hidden list for the data (id, order number)
|
||||
$row_data_id = array ();
|
||||
$row_data_order = array ();
|
||||
$row_data_id = 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'];
|
||||
@@ -247,6 +230,7 @@ if ($form->my_page_name == 'edit_order') {
|
||||
|
||||
$DATA['table_width'] = $table_width;
|
||||
|
||||
$messages = array();
|
||||
// write out error / status messages
|
||||
$messages[] = $form->formPrintMsg();
|
||||
$DATA['form_error_msg'] = $messages;
|
||||
@@ -268,8 +252,9 @@ if ($form->my_page_name == 'edit_order') {
|
||||
|
||||
// build nav from $PAGES ...
|
||||
if (!isset($PAGES) || !is_array($PAGES)) {
|
||||
$PAGES = array ();
|
||||
$PAGES = array();
|
||||
}
|
||||
$menuarray = array();
|
||||
foreach ($PAGES as $PAGE_CUID => $PAGE_DATA) {
|
||||
if ($PAGE_DATA['menu'] && $PAGE_DATA['online']) {
|
||||
$menuarray[] = $PAGE_DATA;
|
||||
@@ -288,6 +273,7 @@ if ($form->my_page_name == 'edit_order') {
|
||||
}
|
||||
|
||||
$position = 0;
|
||||
$menu_data = array();
|
||||
for ($i = 1; $i <= count($menuarray); $i ++) {
|
||||
// do that for new array
|
||||
$j = $i - 1;
|
||||
@@ -338,7 +324,7 @@ if ($form->my_page_name == 'edit_order') {
|
||||
$DATA['form_my_page_name'] = $form->my_page_name;
|
||||
$DATA['filename_exist'] = 0;
|
||||
$DATA['drop_down_input'] = 0;
|
||||
|
||||
$elements = array();
|
||||
// depending on the "getPageName()" I show different stuff
|
||||
switch ($form->my_page_name) {
|
||||
case 'edit_users':
|
||||
@@ -1,27 +1,27 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_access = array (
|
||||
'table_array' => array (
|
||||
'edit_access_id' => array (
|
||||
$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 (
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => $this->l->__('Access Group Name'),
|
||||
'output_name' => 'Access Group Name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumericspace|unique'
|
||||
),
|
||||
'description' => array (
|
||||
'description' => array(
|
||||
'value' => isset($GLOBALS['description']) ? $GLOBALS['description'] : '',
|
||||
'output_name' => $this->l->__('Description'),
|
||||
'output_name' => 'Description',
|
||||
'type' => 'textarea'
|
||||
),
|
||||
'color' => array (
|
||||
'color' => array(
|
||||
'value' => isset($GLOBALS['color']) ? $GLOBALS['color'] : '',
|
||||
'output_name' => $this->l->__('Color'),
|
||||
'output_name' => 'Color',
|
||||
'mandatory' => 0,
|
||||
'type' => 'text',
|
||||
'size' => 6,
|
||||
@@ -30,27 +30,27 @@ $edit_access = array (
|
||||
'error_regex' => "/[\dA-Fa-f]{6}/",
|
||||
'error_example' => 'F6A544'
|
||||
),
|
||||
'enabled' => array (
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : 0,
|
||||
'output_name' => 'Enabled',
|
||||
'type' => 'binary',
|
||||
'int' => 1, // OR 'bool' => 1
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'protected' => array (
|
||||
'protected' => array(
|
||||
'value' => isset($GLOBALS['protected']) ? $GLOBALS['protected'] : 0,
|
||||
'output_name' => 'Protected',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'additional_acl' => array (
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
@@ -61,41 +61,41 @@ $edit_access = array (
|
||||
),
|
||||
'table_name' => 'edit_access',
|
||||
"load_query" => "SELECT edit_access_id, name FROM edit_access ORDER BY name",
|
||||
'show_fields' => array (
|
||||
array (
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
)
|
||||
),
|
||||
'element_list' => array (
|
||||
'edit_access_data' => array (
|
||||
'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 (
|
||||
'elements' => array(
|
||||
'name' => array(
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique',
|
||||
'output_name' => 'Name',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'value' => array (
|
||||
'value' => array(
|
||||
'type' => 'text',
|
||||
'output_name' => 'Value'
|
||||
),
|
||||
'enabled' => array (
|
||||
'enabled' => array(
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array(1)
|
||||
),
|
||||
/*'edit_access_id' => array (
|
||||
/*'edit_access_id' => array(
|
||||
'int' => 1,
|
||||
'type' => 'hidden',
|
||||
'fk_id' => 1 # reference main key from master table above
|
||||
),*/
|
||||
'edit_access_data_id' => array (
|
||||
'edit_access_data_id' => array(
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
@@ -1,29 +1,29 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_groups = array (
|
||||
'table_array' => array (
|
||||
'edit_group_id' => array (
|
||||
$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 (
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'name' => array (
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Group Name',
|
||||
'type' => 'text',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'edit_access_right_id' => array (
|
||||
'edit_access_right_id' => array(
|
||||
'value' => isset($GLOBALS['edit_access_right_id']) ? $GLOBALS['edit_access_right_id'] : '',
|
||||
'output_name' => 'Group Level',
|
||||
'mandatory' => 1,
|
||||
@@ -31,14 +31,14 @@ $edit_groups = array (
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'edit_scheme_id' => array (
|
||||
'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 (
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
@@ -49,54 +49,54 @@ $edit_groups = array (
|
||||
),
|
||||
'load_query' => "SELECT edit_group_id, name, enabled FROM edit_group ORDER BY name",
|
||||
'table_name' => 'edit_group',
|
||||
'show_fields' => array (
|
||||
array (
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'enabled',
|
||||
'binary' => array ('Yes', 'No'),
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Enabled: '
|
||||
)
|
||||
),
|
||||
'element_list' => array (
|
||||
'edit_page_access' => array (
|
||||
'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 (
|
||||
'read_data' => array(
|
||||
'table_name' => 'edit_page',
|
||||
'pk_id' => 'edit_page_id',
|
||||
'name' => 'name',
|
||||
'order' => 'order_number'
|
||||
),
|
||||
'elements' => array (
|
||||
'edit_page_access_id' => array (
|
||||
'elements' => array(
|
||||
'edit_page_access_id' => array(
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
),
|
||||
'enabled' => array (
|
||||
'enabled' => array(
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array (
|
||||
'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 (
|
||||
'edit_page_id' => array(
|
||||
'int' => 1,
|
||||
'type' => 'hidden'
|
||||
)
|
||||
/*,
|
||||
'edit_default' => array (
|
||||
'edit_default' => array(
|
||||
'output_name' => 'Default',
|
||||
'type' => 'radio',
|
||||
'mandatory' => 1
|
||||
@@ -1,13 +1,13 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_languages=array (
|
||||
'table_array' => array (
|
||||
'edit_language_id' => array (
|
||||
$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 (
|
||||
'short_name' => array(
|
||||
'value' => isset($GLOBALS['short_name']) ? $GLOBALS['short_name'] : '',
|
||||
'output_name' => 'Language (short)',
|
||||
'mandatory' => 1,
|
||||
@@ -15,58 +15,58 @@ $edit_languages=array (
|
||||
'size' => 2,
|
||||
'length' => 2
|
||||
),
|
||||
'long_name' => array (
|
||||
'long_name' => array(
|
||||
'value' => isset($GLOBALS['long_name']) ? $GLOBALS['long_name'] : '',
|
||||
'output_name' => 'Language (long)',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'size' => 40
|
||||
),
|
||||
'iso_name' => array (
|
||||
'iso_name' => array(
|
||||
'value' => isset($GLOBALS['iso_name']) ? $GLOBALS['iso_name'] : '',
|
||||
'output_name' => 'ISO Code',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'order_number' => array (
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
'int' => 1,
|
||||
'order' => 1
|
||||
),
|
||||
'enabled' => array (
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'lang_default' => array (
|
||||
'lang_default' => array(
|
||||
'value' => isset($GLOBALS['lang_default']) ? $GLOBALS['lang_default'] : '',
|
||||
'output_name' => 'Default Language',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array (
|
||||
'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 (
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'long_name'
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'iso_name',
|
||||
'before_value' => 'ISO: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'enabled',
|
||||
'before_value' => 'Enabled: ',
|
||||
'binary' => array ('Yes','No')
|
||||
'binary' => array('Yes','No')
|
||||
)
|
||||
),
|
||||
'table_name' => 'edit_language'
|
||||
@@ -1,26 +1,26 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_menu_group = array (
|
||||
'table_array' => array (
|
||||
'edit_menu_group_id' => array (
|
||||
$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 (
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => $this->l->__('Group name'),
|
||||
'output_name' => 'Group name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'flag' => array (
|
||||
'flag' => array(
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
'output_name' => $this->l->__('Flag'),
|
||||
'output_name' => 'Flag',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique'
|
||||
),
|
||||
'order_number' => array (
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
'output_name' => 'Group order',
|
||||
'type' => 'order',
|
||||
@@ -30,8 +30,8 @@ $edit_menu_group = array (
|
||||
),
|
||||
'table_name' => 'edit_menu_group',
|
||||
'load_query' => "SELECT edit_menu_group_id, name FROM edit_menu_group ORDER BY name",
|
||||
'show_fields' => array (
|
||||
array (
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
)
|
||||
)
|
||||
@@ -1,13 +1,13 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_pages = array (
|
||||
'table_array' => array (
|
||||
'edit_page_id' => array (
|
||||
$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 (
|
||||
'filename' => array(
|
||||
'value' => isset($GLOBALS['filename']) ? $GLOBALS['filename'] : '',
|
||||
'output_name' => 'Add File ...',
|
||||
'mandatory' => 1,
|
||||
@@ -17,24 +17,24 @@ $edit_pages = array (
|
||||
"LEFT JOIN edit_page ep ON temp_files.filename = ep.filename ".
|
||||
"WHERE ep.filename IS NULL"
|
||||
),
|
||||
'name' => array (
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Page name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'order_number' => array (
|
||||
'order_number' => array(
|
||||
'value' => isset($GLOBALS['order_number']) ? $GLOBALS['order_number'] : '',
|
||||
'output_name' => 'Page order',
|
||||
'type' => 'order',
|
||||
'int' => 1,
|
||||
'order' => 1
|
||||
),
|
||||
/* 'flag' => array (
|
||||
/* 'flag' => array(
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
'output_name' => 'Page Flag',
|
||||
'type' => 'drop_down_array',
|
||||
'query' => array (
|
||||
'query' => array(
|
||||
'0' => '0',
|
||||
'1' => '1',
|
||||
'2' => '2',
|
||||
@@ -43,37 +43,37 @@ $edit_pages = array (
|
||||
'5' => '5'
|
||||
)
|
||||
),*/
|
||||
'online' => array (
|
||||
'online' => array(
|
||||
'value' => isset($GLOBALS['online']) ? $GLOBALS['online'] : '',
|
||||
'output_name' => 'Online',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'menu' => array (
|
||||
'menu' => array(
|
||||
'value' => isset($GLOBALS['menu']) ? $GLOBALS['menu'] : '',
|
||||
'output_name' => 'Menu',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'popup' => array (
|
||||
'popup' => array(
|
||||
'value' => isset($GLOBALS['popup']) ? $GLOBALS['popup'] : '',
|
||||
'output_name' => 'Popup',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'popup_x' => array (
|
||||
'popup_x' => array(
|
||||
'value' => isset($GLOBALS['popup_x']) ? $GLOBALS['popup_x'] : '',
|
||||
'output_name' => 'Popup Width',
|
||||
'int_null' => 1,
|
||||
@@ -81,7 +81,7 @@ $edit_pages = array (
|
||||
'size' => 4,
|
||||
'length' => 4
|
||||
),
|
||||
'popup_y' => array (
|
||||
'popup_y' => array(
|
||||
'value' => isset($GLOBALS['popup_y']) ? $GLOBALS['popup_y'] : '',
|
||||
'output_name' => 'Popup Height',
|
||||
'int_null' => 1,
|
||||
@@ -89,7 +89,7 @@ $edit_pages = array (
|
||||
'size' => 4,
|
||||
'length' => 4
|
||||
),
|
||||
'content_alias_edit_page_id' => array (
|
||||
'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,
|
||||
@@ -109,32 +109,32 @@ $edit_pages = array (
|
||||
),
|
||||
'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 (
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'filename',
|
||||
'before_value' => 'Filename: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'online',
|
||||
'binary' => array ('Yes','No'),
|
||||
'binary' => array('Yes','No'),
|
||||
'before_value' => 'Online: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'menu',
|
||||
'binary' => array ('Yes','No'),
|
||||
'binary' => array('Yes','No'),
|
||||
'before_value' => 'Menu: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'popup',
|
||||
'binary' => array ('Yes','No'),
|
||||
'binary' => array('Yes','No'),
|
||||
'before_value' => 'Popup: '
|
||||
)
|
||||
),
|
||||
'reference_arrays' => array (
|
||||
'edit_visible_group' => array (
|
||||
'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)',
|
||||
@@ -143,7 +143,7 @@ $edit_pages = array (
|
||||
'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 (
|
||||
'edit_menu_group' => array(
|
||||
'table_name' => 'edit_page_menu_group',
|
||||
'other_table_pk' => 'edit_menu_group_id',
|
||||
'output_name' => 'Menu Groups (grouping)',
|
||||
@@ -154,77 +154,77 @@ $edit_pages = array (
|
||||
)
|
||||
|
||||
),
|
||||
'element_list' => array (
|
||||
'edit_query_string' => array (
|
||||
'element_list' => array(
|
||||
'edit_query_string' => array(
|
||||
'output_name' => 'Query Strings',
|
||||
'delete_name' => 'remove_query_string',
|
||||
'prefix' => 'eqs',
|
||||
'elements' => array (
|
||||
'name' => array (
|
||||
'elements' => array(
|
||||
'name' => array(
|
||||
'output_name' => 'Name',
|
||||
'type' => 'text',
|
||||
'error_check' => 'unique|alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'value' => array (
|
||||
'value' => array(
|
||||
'output_name' => 'Value',
|
||||
'type' => 'text'
|
||||
),
|
||||
'enabled' => array (
|
||||
'enabled' => array(
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array (1)
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'dynamic' => array (
|
||||
'dynamic' => array(
|
||||
'output_name' => 'Dynamic',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array (1)
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_query_string_id' => array (
|
||||
'edit_query_string_id' => array(
|
||||
'type' => 'hidden',
|
||||
'pk_id' => 1
|
||||
)
|
||||
) // elements
|
||||
), // query_string element list
|
||||
'edit_page_content' => array (
|
||||
'edit_page_content' => array(
|
||||
'output_name' => 'Page Content',
|
||||
'delete_name' => 'remove_page_content',
|
||||
'prefix' => 'epc',
|
||||
'elements' => array (
|
||||
'name' => array (
|
||||
'elements' => array(
|
||||
'name' => array(
|
||||
'output_name' => 'Content',
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'uid' => array (
|
||||
'uid' => array(
|
||||
'output_name' => 'UID',
|
||||
'type' => 'text',
|
||||
'error_check' => 'unique|alphanumeric',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'order_number' => array (
|
||||
'order_number' => array(
|
||||
'output_name' => 'Order',
|
||||
'type' => 'text',
|
||||
'error_check' => 'int',
|
||||
'mandatory' => 1
|
||||
),
|
||||
'online' => array (
|
||||
'online' => array(
|
||||
'output_name' => 'Online',
|
||||
'int' => 1,
|
||||
'type' => 'checkbox',
|
||||
'element_list' => array (1)
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array (
|
||||
'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 (
|
||||
'edit_page_content_id' => array(
|
||||
'type' => 'hidden',
|
||||
'pk_id' => 1
|
||||
)
|
||||
@@ -1,19 +1,19 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_schemes = array (
|
||||
'table_array' => array (
|
||||
'edit_scheme_id' => array (
|
||||
$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 (
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => 'Scheme Name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'header_color' => array (
|
||||
'header_color' => array(
|
||||
'value' => isset($GLOBALS['header_color']) ? $GLOBALS['header_color'] : '',
|
||||
'output_name' => 'Header Color',
|
||||
'mandatory' => 1,
|
||||
@@ -24,17 +24,17 @@ $edit_schemes = array (
|
||||
'error_regex' => '/[\dA-Fa-f]{6}/',
|
||||
'error_example' => 'F6A544'
|
||||
),
|
||||
'enabled' => array (
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
'output_name' => 'Enabled',
|
||||
'int' => 1,
|
||||
'type' => 'binary',
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'template' => array (
|
||||
'template' => array(
|
||||
'value' => isset($GLOBALS['template']) ? $GLOBALS['template'] : '',
|
||||
'output_name' => 'Template',
|
||||
'type' => 'text'
|
||||
@@ -42,13 +42,13 @@ $edit_schemes = array (
|
||||
),
|
||||
'table_name' => 'edit_scheme',
|
||||
'load_query' => "SELECT edit_scheme_id, name, enabled FROM edit_scheme ORDER BY name",
|
||||
'show_fields' => array (
|
||||
array (
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'enabled',
|
||||
'binary' => array ('Yes', 'No'),
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Enabled: '
|
||||
)
|
||||
)
|
||||
@@ -1,29 +1,29 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_users = array (
|
||||
'table_array' => array (
|
||||
'edit_user_id' => array (
|
||||
$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 (
|
||||
'username' => array(
|
||||
'value' => isset($GLOBALS['username']) ? $GLOBALS['username'] : '',
|
||||
'output_name' => 'Username',
|
||||
'mandatory' => 1,
|
||||
'error_check' => 'unique|alphanumericextended',
|
||||
'type' => 'text'
|
||||
),
|
||||
'password' => array (
|
||||
'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
|
||||
'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
|
||||
)
|
||||
@@ -31,7 +31,7 @@ $edit_users = array (
|
||||
),
|
||||
// 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 (
|
||||
'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
|
||||
@@ -40,83 +40,83 @@ $edit_users = array (
|
||||
'size' => 5, // make it 5 chars long
|
||||
'length' => 5
|
||||
),
|
||||
'enabled' => array (
|
||||
'enabled' => array(
|
||||
'value' => isset($GLOBALS['enabled']) ? $GLOBALS['enabled'] : '',
|
||||
'output_name' => 'Enabled',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'strict' => array (
|
||||
'strict' => array(
|
||||
'value' => isset($GLOBALS['strict']) ? $GLOBALS['strict'] : '',
|
||||
'output_name' => 'Strict (Lock after errors)',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'locked' => array (
|
||||
'locked' => array(
|
||||
'value' => isset($GLOBALS['locked']) ? $GLOBALS['locked'] : '',
|
||||
'output_name' => 'Locked (auto set if strict with errors)',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'admin' => array (
|
||||
'admin' => array(
|
||||
'value' => isset($GLOBALS['admin']) ? $GLOBALS['admin'] : '',
|
||||
'output_name' => 'Admin',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'debug' => array (
|
||||
'debug' => array(
|
||||
'value' => isset($GLOBALS['debug']) ? $GLOBALS['debug'] : '',
|
||||
'output_name' => 'Debug',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'db_debug' => array (
|
||||
'db_debug' => array(
|
||||
'value' => isset($GLOBALS['db_debug']) ? $GLOBALS['db_debug'] : '',
|
||||
'output_name' => 'DB Debug',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'email' => array (
|
||||
'email' => array(
|
||||
'value' => isset($GLOBALS['email']) ? $GLOBALS['email'] : '',
|
||||
'output_name' => 'E-Mail',
|
||||
'type' => 'text',
|
||||
'error_check' => 'email'
|
||||
),
|
||||
'last_name' => array (
|
||||
'last_name' => array(
|
||||
'value' => isset($GLOBALS['last_name']) ? $GLOBALS['last_name'] : '',
|
||||
'output_name' => 'Last Name',
|
||||
'type' => 'text'
|
||||
),
|
||||
'first_name' => array (
|
||||
'first_name' => array(
|
||||
'value' => isset($GLOBALS['first_name']) ? $GLOBALS['first_name'] : '',
|
||||
'output_name' => 'First Name',
|
||||
'type' => 'text'
|
||||
),
|
||||
'edit_language_id' => array (
|
||||
'edit_language_id' => array(
|
||||
'value' => isset($GLOBALS['edit_language_id']) ? $GLOBALS['edit_language_id'] : '',
|
||||
'output_name' => 'Language',
|
||||
'mandatory' => 1,
|
||||
@@ -124,14 +124,14 @@ $edit_users = array (
|
||||
'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 (
|
||||
'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 (
|
||||
'edit_group_id' => array(
|
||||
'value' => isset($GLOBALS['edit_group_id']) ? $GLOBALS['edit_group_id'] : '',
|
||||
'output_name' => 'Group',
|
||||
'int' => 1,
|
||||
@@ -139,7 +139,7 @@ $edit_users = array (
|
||||
'query' => "SELECT edit_group_id, name FROM edit_group WHERE enabled = 1 ORDER BY name",
|
||||
'mandatory' => 1
|
||||
),
|
||||
'edit_access_right_id' => array (
|
||||
'edit_access_right_id' => array(
|
||||
'value' => isset($GLOBALS['edit_access_right_id']) ? $GLOBALS['edit_access_right_id'] : '',
|
||||
'output_name' => 'User Level',
|
||||
'mandatory' => 1,
|
||||
@@ -147,35 +147,35 @@ $edit_users = array (
|
||||
'type' => 'drop_down_db',
|
||||
'query' => "SELECT edit_access_right_id, name FROM edit_access_right ORDER BY level"
|
||||
),
|
||||
'login_error_count' => array (
|
||||
'login_error_count' => 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 (
|
||||
'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 (
|
||||
'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 (
|
||||
'protected' => array(
|
||||
'value' => isset($GLOBALS['protected']) ? $GLOBALS['protected'] : '',
|
||||
'output_name' => 'Protected',
|
||||
'type' => 'binary',
|
||||
'int' => 1,
|
||||
'element_list' => array (
|
||||
'element_list' => array(
|
||||
'1' => 'Yes',
|
||||
'0' => 'No'
|
||||
)
|
||||
),
|
||||
'additional_acl' => array (
|
||||
'additional_acl' => array(
|
||||
'value' => isset($GLOBALS['additional_acl']) ? $GLOBALS['additional_acl'] : '',
|
||||
'output_name' => 'Additional ACL (as JSON)',
|
||||
'type' => 'textarea',
|
||||
@@ -186,79 +186,79 @@ $edit_users = array (
|
||||
),
|
||||
'load_query' => "SELECT edit_user_id, username, enabled, debug, db_debug, strict, locked, login_error_count FROM edit_user ORDER BY username",
|
||||
'table_name' => 'edit_user',
|
||||
'show_fields' => array (
|
||||
array (
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'username'
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'enabled',
|
||||
'binary' => array ('Yes', 'No'),
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Enabled: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'debug',
|
||||
'binary' => array ('Yes', 'No'),
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Debug: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'db_debug',
|
||||
'binary' => array ('Yes', 'No'),
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'DB Debug: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'strict',
|
||||
'binary' => array ('Yes', 'No'),
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Strict: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'locked',
|
||||
'binary' => array ('Yes', 'No'),
|
||||
'binary' => array('Yes', 'No'),
|
||||
'before_value' => 'Locked: '
|
||||
),
|
||||
array (
|
||||
array(
|
||||
'name' => 'login_error_count',
|
||||
'before_value' => 'Errors: '
|
||||
)
|
||||
),
|
||||
'element_list' => array (
|
||||
'edit_access_user' => array (
|
||||
'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 (
|
||||
'read_data' => array(
|
||||
'table_name' => 'edit_access',
|
||||
'pk_id' => 'edit_access_id',
|
||||
'name' => 'name',
|
||||
'order' => 'name'
|
||||
),
|
||||
'elements' => array (
|
||||
'edit_access_user_id' => array (
|
||||
'elements' => array(
|
||||
'edit_access_user_id' => array(
|
||||
'output_name' => 'Activate',
|
||||
'type' => 'hidden',
|
||||
'int' => 1,
|
||||
'pk_id' => 1
|
||||
),
|
||||
'enabled' => array (
|
||||
'enabled' => array(
|
||||
'type' => 'checkbox',
|
||||
'output_name' => 'Activate',
|
||||
'int' => 1,
|
||||
'element_list' => array (1)
|
||||
'element_list' => array(1)
|
||||
),
|
||||
'edit_access_right_id' => array (
|
||||
'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 (
|
||||
'edit_default' => array(
|
||||
'type' => 'radio_group',
|
||||
'output_name' => 'Default',
|
||||
'int' => 1,
|
||||
'element_list' => 'radio_group'
|
||||
),
|
||||
'edit_access_id' => array (
|
||||
'edit_access_id' => array(
|
||||
'type' => 'hidden',
|
||||
'int' => 1
|
||||
)
|
||||
@@ -1,21 +1,21 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
$edit_visible_group = array (
|
||||
'table_array' => array (
|
||||
'edit_visible_group_id' => array (
|
||||
$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 (
|
||||
'name' => array(
|
||||
'value' => isset($GLOBALS['name']) ? $GLOBALS['name'] : '',
|
||||
'output_name' => $this->l->__('Group name'),
|
||||
'output_name' => 'Group name',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text'
|
||||
),
|
||||
'flag' => array (
|
||||
'flag' => array(
|
||||
'value' => isset($GLOBALS['flag']) ? $GLOBALS['flag'] : '',
|
||||
'output_name' => $this->l->__('Flag'),
|
||||
'output_name' => 'Flag',
|
||||
'mandatory' => 1,
|
||||
'type' => 'text',
|
||||
'error_check' => 'alphanumeric|unique'
|
||||
@@ -23,8 +23,8 @@ $edit_visible_group = array (
|
||||
),
|
||||
'table_name' => 'edit_visible_group',
|
||||
'load_query' => "SELECT edit_visible_group_id, name FROM edit_visible_group ORDER BY name",
|
||||
'show_fields' => array (
|
||||
array (
|
||||
'show_fields' => array(
|
||||
array(
|
||||
'name' => 'name'
|
||||
)
|
||||
)
|
||||
@@ -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,47 +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)
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 (key in object) ? true : false;
|
||||
}*/
|
||||
return (Object.prototype.hasOwnProperty.call(object, key)) ? true : false;
|
||||
}
|
||||
|
||||
// METHOD: getKeyByValue
|
||||
// PARAMS: object, value
|
||||
// RETURN: key found
|
||||
// DESC : returns matching key of 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 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;
|
||||
// });
|
||||
}
|
||||
|
||||
// METHOD: valueInObject
|
||||
// PARAMS: obj, value
|
||||
// RETURN: true/false
|
||||
// DESC : returns true if value is found in object with a key
|
||||
const valueInObject = (obj, value) => (Object.keys(obj).find(key => obj[key] === value)) ? true : false;
|
||||
/**
|
||||
* 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;
|
||||
}
|
||||
|
||||
// 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 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;
|
||||
@@ -312,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
|
||||
@@ -345,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
|
||||
@@ -393,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
|
||||
@@ -403,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();
|
||||
@@ -417,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 = '';
|
||||
@@ -429,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]
|
||||
@@ -447,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) {
|
||||
@@ -475,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 ++) {
|
||||
@@ -489,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);
|
||||
@@ -511,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);
|
||||
@@ -524,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
|
||||
@@ -603,33 +681,44 @@ 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 [drop down string, multi select array]
|
||||
// multiple [def 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
|
||||
// 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: 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 = [];
|
||||
@@ -700,11 +789,13 @@ function html_options_block(name, data, selected = '', multiple = 0, options_onl
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
@@ -738,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');
|
||||
@@ -756,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,47 +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: getKeyByValue
|
||||
// PARAMS: object, value
|
||||
// RETURN: key found
|
||||
// DESC : returns matching key of value
|
||||
/**
|
||||
* 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);
|
||||
// }
|
||||
|
||||
// METHOD: valueInObject
|
||||
// PARAMS: obj, value
|
||||
// RETURN: true/false
|
||||
// DESC : returns true if value is found in object with a key
|
||||
/**
|
||||
* 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;
|
||||
|
||||
// METHOD: exists
|
||||
// PARAMS: uid
|
||||
// RETURN: true/false
|
||||
// DESC : checks if a DOM element actually exists
|
||||
const exists = (id) => $('#' + id).length > 0 ? 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;
|
||||
@@ -394,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
|
||||
@@ -423,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()) {
|
||||
@@ -436,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);
|
||||
@@ -450,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);
|
||||
@@ -458,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
|
||||
@@ -471,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
|
||||
@@ -481,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();
|
||||
@@ -495,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 = '';
|
||||
@@ -507,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,
|
||||
@@ -526,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) {
|
||||
@@ -553,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) {
|
||||
@@ -567,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);
|
||||
@@ -589,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);
|
||||
@@ -602,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);
|
||||
@@ -614,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
|
||||
@@ -681,33 +740,44 @@ 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 [drop down string, multi select array]
|
||||
// multiple [def 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
|
||||
// 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: 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 = [];
|
||||
@@ -778,11 +848,13 @@ function html_options_block(name, data, selected = '', multiple = 0, options_onl
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
@@ -816,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');
|
||||
|
||||
2
www/layout/frontend/cache/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
2
www/layout/frontend/cache/images/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -1 +1 @@
|
||||
../../../admin/default/javascript/debug.js
|
||||
../../admin/javascript/debug.js
|
||||
@@ -1 +1 @@
|
||||
../../../admin/default/javascript/fineuploader/
|
||||
../../admin/javascript/fineuploader/
|
||||
@@ -1 +1 @@
|
||||
../../../admin/default/javascript/firebug.js
|
||||
../../admin/javascript/firebug.js
|
||||
@@ -62,8 +62,9 @@ namespace CoreLibs\ACL;
|
||||
class Login extends \CoreLibs\DB\IO
|
||||
{
|
||||
private $euid; // the user id var
|
||||
private $permission_okay = 0; // is set to one if login okay, or EUID is set and user is okay to access this page
|
||||
private $permission_okay = false; // is set to one if login okay, or EUID is set and user is okay to access this page
|
||||
public $login; // pressed login
|
||||
private $action; // master action command
|
||||
private $username; // login name
|
||||
private $password; // login password
|
||||
private $logout; // logout button
|
||||
@@ -77,49 +78,54 @@ class Login extends \CoreLibs\DB\IO
|
||||
private $pw_old_password;
|
||||
private $pw_new_password;
|
||||
private $pw_new_password_confirm;
|
||||
private $pw_change_deny_users = array (); // array of users for which the password change is forbidden
|
||||
private $pw_change_deny_users = array(); // array of users for which the password change is forbidden
|
||||
private $logout_target;
|
||||
private $max_login_error_count = -1;
|
||||
private $lock_deny_users = array ();
|
||||
private $lock_deny_users = array();
|
||||
|
||||
// if we have password change we need to define some rules
|
||||
private $password_min_length = PASSWORD_MIN_LENGTH;
|
||||
// max length is fixed as 255 (for input type max), if set highter, it will be set back to 255
|
||||
private $password_max_length = PASSWORD_MAX_LENGTH;
|
||||
// can have several regexes, if nothing set, all is ok
|
||||
private $password_valid_chars = array (
|
||||
private $password_valid_chars = array(
|
||||
// '^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,}$',
|
||||
// '^(?.*(\pL)u)(?=.*(\pN)u)(?=.*([^\pL\pN])u).{8,}',
|
||||
);
|
||||
|
||||
// all possible login error conditions
|
||||
private $login_error_msg = array ();
|
||||
private $login_error_msg = array();
|
||||
// this is an array holding all strings & templates passed from the outside (translation)
|
||||
private $login_template = array (
|
||||
'strings' => array (),
|
||||
private $login_template = array(
|
||||
'strings' => array(),
|
||||
'password_change' => '',
|
||||
'template' => ''
|
||||
);
|
||||
|
||||
// acl vars
|
||||
public $acl = array ();
|
||||
public $default_acl_list = array ();
|
||||
public $acl = array();
|
||||
public $default_acl_list = array();
|
||||
// login html, if we are on an ajax page
|
||||
private $login_html = '';
|
||||
private $login_is_ajax_page = false;
|
||||
|
||||
// language
|
||||
public $l;
|
||||
|
||||
// METHOD: login
|
||||
// PARAMS: db_config -> array for logging in to DB where edit_users tables are
|
||||
// db_debug -> sets debug output for db_io (can be overruled with DB_DEBUG)
|
||||
// RETURN: none
|
||||
// DESC : cunstroctuor, does ALL, opens db, works through connection checks, closes itself
|
||||
/**
|
||||
* constructor, does ALL, opens db, works through connection checks, closes itself
|
||||
* @param array $db_config db config array
|
||||
* @param string $lang language string (default en_utf8)
|
||||
* @param int $set_control_flag class variable check flags
|
||||
*/
|
||||
public function __construct(array $db_config, string $lang = 'en_utf8', int $set_control_flag = 0)
|
||||
{
|
||||
// log login data for this class only
|
||||
$this->log_per_class = 1;
|
||||
|
||||
// create db connection and init base class
|
||||
if (!parent::__construct($db_config, $set_control_flag)) {
|
||||
parent::__construct($db_config, $set_control_flag);
|
||||
if ($this->db_init_error === true) {
|
||||
echo 'Could not connect to DB<br>';
|
||||
// if I can't connect to the DB to auth exit hard. No access allowed
|
||||
exit;
|
||||
@@ -142,16 +148,21 @@ class Login extends \CoreLibs\DB\IO
|
||||
exit;
|
||||
}
|
||||
|
||||
// set global is ajax page for if we show the data directly, or need to pass it back
|
||||
// to the continue AJAX class for output back to the user
|
||||
$this->login_is_ajax_page = isset($GLOBALS['AJAX_PAGE']) && $GLOBALS['AJAX_PAGE'] ? true : false;
|
||||
|
||||
$this->l = new \CoreLibs\Language\L10n($lang);
|
||||
|
||||
// if we have a search path we need to set it, to use the correct DB to login
|
||||
// check what schema to use. if there is a login schema use this, else check if there is a schema set in the config, or fall back to DB_SCHEMA if this exists, if this also does not exists use public schema
|
||||
if (defined('LOGIN_DB_SCHEMA')) {
|
||||
/** @phan-suppress-next-line PhanUndeclaredConstant */
|
||||
$SCHEMA = LOGIN_DB_SCHEMA;
|
||||
} elseif ($db_config['db_schema']) {
|
||||
} elseif (isset($db_config['db_schema']) && $db_config['db_schema']) {
|
||||
$SCHEMA = $db_config['db_schema'];
|
||||
} elseif (defined('DB_SCHEMA')) {
|
||||
$SCHEMA = DB_SCHEMA;
|
||||
} elseif (defined('PUBLIC_SCHEMA')) {
|
||||
$SCHEMA = PUBLIC_SCHEMA;
|
||||
} else {
|
||||
$SCHEMA = 'public';
|
||||
}
|
||||
@@ -203,7 +214,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
// logout target (from config)
|
||||
$this->logout_target = LOGOUT_TARGET;
|
||||
// disallow user list for password change
|
||||
$this->pw_change_deny_users = array ('admin');
|
||||
$this->pw_change_deny_users = array('admin');
|
||||
// set flag if password change is okay
|
||||
if (defined('PASSWORD_CHANGE')) {
|
||||
$this->password_change = PASSWORD_CHANGE;
|
||||
@@ -215,23 +226,15 @@ class Login extends \CoreLibs\DB\IO
|
||||
// max login counts before error reporting
|
||||
$this->max_login_error_count = 10;
|
||||
// users that never get locked, even if they are set strict
|
||||
$this->lock_deny_users = array ('admin');
|
||||
|
||||
// internal
|
||||
$this->class_info['login'] = array(
|
||||
'class_name' => 'Login',
|
||||
'class_version' => '5.0.0',
|
||||
'class_created' => '2000-06-01',
|
||||
'class_author' => 'Clemens Schwaighofer'
|
||||
);
|
||||
$this->lock_deny_users = array('admin');
|
||||
|
||||
// init default ACL list array
|
||||
$_SESSION['DEFAULT_ACL_LIST'] = array ();
|
||||
$_SESSION['DEFAULT_ACL_LIST'] = array();
|
||||
// read the current edit_access_right list into an array
|
||||
$q = "SELECT level, type, name FROM edit_access_right WHERE level >= 0 ORDER BY level";
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
// level to description format (numeric)
|
||||
$this->default_acl_list[$res['level']] = array (
|
||||
$this->default_acl_list[$res['level']] = array(
|
||||
'type' => $res['type'],
|
||||
'name' => $res['name']
|
||||
);
|
||||
@@ -254,40 +257,60 @@ class Login extends \CoreLibs\DB\IO
|
||||
$this->loginPasswordForgot();
|
||||
}
|
||||
// if !$euid || permission not okay, print login screan
|
||||
echo $this->loginPrintLogin();
|
||||
$this->login_html = $this->loginPrintLogin();
|
||||
// closing all connections, depending on error status, exit
|
||||
if (!$this->loginCloseClass()) {
|
||||
// do not go anywhere, quit processing here
|
||||
// do something with possible debug data?
|
||||
if (TARGET == 'live' || TARGET == 'remote') {
|
||||
// login
|
||||
$this->debug_output_all = DEBUG ? 1 : 0;
|
||||
$this->echo_output_all = 0;
|
||||
$this->print_output_all = DEBUG ? 1 : 0;
|
||||
// if variable AJAX flag is not set, show output, else pass through for ajax work
|
||||
if ($this->login_is_ajax_page !== true) {
|
||||
// the login screen if we hav no login permission & login screen html data
|
||||
if ($this->login_html !== null) {
|
||||
echo $this->login_html;
|
||||
}
|
||||
// do not go anywhere, quit processing here
|
||||
// do something with possible debug data?
|
||||
if (TARGET == 'live' || TARGET == 'remote') {
|
||||
// login
|
||||
$this->debug_output_all = DEBUG ? 1 : 0;
|
||||
$this->echo_output_all = 0;
|
||||
$this->print_output_all = DEBUG ? 1 : 0;
|
||||
}
|
||||
$status_msg = $this->printErrorMsg();
|
||||
if ($this->echo_output_all) {
|
||||
echo $status_msg;
|
||||
}
|
||||
// exit so we don't process anything further, at all
|
||||
exit;
|
||||
} else {
|
||||
// if we are on an ajax page reset any POST/GET array data to avoid
|
||||
// any accidentical processing going on
|
||||
$_POST = array();
|
||||
$_GET = array();
|
||||
// set the action to login so we can trigger special login html return
|
||||
$_POST['action'] = 'login';
|
||||
$_POST['login_html'] = $this->login_html;
|
||||
// NOTE: this part needs to be catched by the frontend AJAX
|
||||
// and some function needs to then set something like this
|
||||
// document.getElementsByTagName('html')[0].innerHTML = data.content.login_html;
|
||||
}
|
||||
$status_msg = $this->printErrorMsg();
|
||||
if ($this->echo_output_all) {
|
||||
echo $status_msg;
|
||||
}
|
||||
exit;
|
||||
}
|
||||
// set acls for this user/group and this page
|
||||
$this->loginSetAcl();
|
||||
}
|
||||
|
||||
// METHOD: _login
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : deconstructory, called with the last function to close DB connection
|
||||
/**
|
||||
* deconstructory, called with the last function to close DB connection
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
parent::__destruct();
|
||||
}
|
||||
|
||||
// METHOD: loginPasswordCheck
|
||||
// PARAMS: hash, optional password, to override
|
||||
// RETURN: true or false
|
||||
// DESC : checks if password is valid, sets internal error login variable
|
||||
/**
|
||||
* checks if password is valid, sets internal error login variable
|
||||
* @param string $hash password hash
|
||||
* @param string $password submitted password
|
||||
* @return bool true or false on password ok or not
|
||||
*/
|
||||
private function loginPasswordCheck(string $hash, string $password = ''): bool
|
||||
{
|
||||
// check with what kind of prefix the password begins:
|
||||
@@ -312,6 +335,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
(preg_match("/^\\$2(y)\\$/", $hash) && preg_match("/\\$07\\$/", $hash)) ||
|
||||
preg_match("/^\\$1\\$/", $hash) ||
|
||||
preg_match("/^\\$[0-9A-Za-z.]{12}$/", $hash)) &&
|
||||
/** @phan-suppress-next-line PhanDeprecatedFunction */
|
||||
!$this->verifyCryptString($password, $hash)
|
||||
) {
|
||||
// check passwword as crypted, $2a$ or $2y$ is blowfish start, $1$ is MD5 start, $\w{12} is standard DES
|
||||
@@ -339,11 +363,10 @@ class Login extends \CoreLibs\DB\IO
|
||||
return $password_ok;
|
||||
}
|
||||
|
||||
// METHOD: loginLoginUser
|
||||
// WAS : login_login_user
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : if user pressed login button this script is called, but only if there is no preview euid set
|
||||
/**
|
||||
* if user pressed login button this script is called, but only if there is no preview euid set]
|
||||
* @return void has not return
|
||||
*/
|
||||
private function loginLoginUser()
|
||||
{
|
||||
// have to get the global stuff here for setting it later
|
||||
@@ -372,7 +395,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
$q .= "(LOWER(username) = '".$this->dbEscapeString(strtolower($this->username))."') ";
|
||||
$res = $this->dbReturn($q);
|
||||
// username is wrong, but we throw for wrong username and wrong password the same error
|
||||
if (!$this->cursor_ext[md5($q)]["num_rows"]) {
|
||||
if (!$this->cursor_ext[md5($q)]['num_rows']) {
|
||||
$this->login_error = 1010;
|
||||
} else {
|
||||
// if login errors is half of max errors and the last login error was less than 10s ago, forbid any new login try
|
||||
@@ -429,8 +452,9 @@ class Login extends \CoreLibs\DB\IO
|
||||
$q .= "WHERE edit_user_id = ".$res['edit_user_id'];
|
||||
$this->dbExec($q);
|
||||
}
|
||||
$pages = array();
|
||||
$edit_page_ids = array();
|
||||
$pages = array();
|
||||
$pages_acl = array();
|
||||
// set pages access
|
||||
$q = "SELECT ep.edit_page_id, ep.cuid, epca.cuid AS content_alias_uid, ep.filename, ep.name AS edit_page_name, ep.order_number AS edit_page_order, ep.menu, ";
|
||||
$q .= "ep.popup, ep.popup_x, ep.popup_y, ep.online, ear.level, ear.type ";
|
||||
@@ -444,7 +468,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
// page id array for sub data readout
|
||||
$edit_page_ids[$res['edit_page_id']] = $res['cuid'];
|
||||
// create the array for pages
|
||||
$pages[$res['cuid']] = array (
|
||||
$pages[$res['cuid']] = array(
|
||||
'edit_page_id' => $res['edit_page_id'],
|
||||
'cuid' => $res['cuid'],
|
||||
'content_alias_uid' => $res['content_alias_uid'], // for reference of content data on a differen page
|
||||
@@ -458,8 +482,8 @@ class Login extends \CoreLibs\DB\IO
|
||||
'online' => $res['online'],
|
||||
'acl_level' => $res['level'],
|
||||
'acl_type' => $res['type'],
|
||||
'query' => array (),
|
||||
'visible' => array ()
|
||||
'query' => array(),
|
||||
'visible' => array()
|
||||
);
|
||||
// make reference filename -> level
|
||||
$pages_acl[$res['filename']] = $res['level'];
|
||||
@@ -479,7 +503,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
$q .= "WHERE enabled = 1 AND edit_page_id IN (".join(', ', array_keys($edit_page_ids)).") ";
|
||||
$q .= "ORDER BY eqs.edit_page_id";
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
$pages[$edit_page_ids[$res['edit_page_id']]]['query'][] = array (
|
||||
$pages[$edit_page_ids[$res['edit_page_id']]]['query'][] = array(
|
||||
'name' => $res['name'],
|
||||
'value' => $res['value'],
|
||||
'dynamic' => $res['dynamic']
|
||||
@@ -493,7 +517,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
$q .= "epc.edit_page_id IN (".join(', ', array_keys($edit_page_ids)).") ";
|
||||
$q .= "ORDER BY epc.order_number";
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
$pages[$edit_page_ids[$res['edit_page_id']]]['content'][$res['uid']] = array (
|
||||
$pages[$edit_page_ids[$res['edit_page_id']]]['content'][$res['uid']] = array(
|
||||
'name' => $res['name'],
|
||||
'uid' => $res['uid'],
|
||||
'online' => $res['online'],
|
||||
@@ -518,12 +542,12 @@ class Login extends \CoreLibs\DB\IO
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
// read edit access data fields and drop them into the unit access array
|
||||
$q_sub ="SELECT name, value FROM edit_access_data WHERE enabled = 1 AND edit_access_id = ".$res['edit_access_id'];
|
||||
$ea_data = array ();
|
||||
$ea_data = array();
|
||||
while ($res_sub = $this->dbReturn($q_sub)) {
|
||||
$ea_data[$res_sub['name']] = $res_sub['value'];
|
||||
}
|
||||
// build master unit array
|
||||
$unit_access[$res['edit_access_id']] = array (
|
||||
$unit_access[$res['edit_access_id']] = array(
|
||||
'id' => $res['edit_access_id'],
|
||||
'acl_level' => $res['level'],
|
||||
'acl_type' => $res['type'],
|
||||
@@ -573,16 +597,15 @@ class Login extends \CoreLibs\DB\IO
|
||||
// if there was an login error, show login screen
|
||||
if ($this->login_error) {
|
||||
// reset the perm var, to confirm logout
|
||||
$this->permission_okay = 0;
|
||||
$this->permission_okay = false;
|
||||
}
|
||||
} // if he pressed login at least and is not yet loggined in
|
||||
}
|
||||
|
||||
// METHOD: loginCheckPermissions
|
||||
// WAS : login_check_permission
|
||||
// PARAMS: none
|
||||
// RETUNR none
|
||||
// DESC : for every page the user access this script checks if he is allowed to do so
|
||||
/**
|
||||
* for every page the user access this script checks if he is allowed to do so
|
||||
* @return bool permission okay as true/false
|
||||
*/
|
||||
public function loginCheckPermissions()
|
||||
{
|
||||
if ($this->euid && $this->login_error != 103) {
|
||||
@@ -595,21 +618,20 @@ class Login extends \CoreLibs\DB\IO
|
||||
// if (($GLOBALS["DEBUG_ALL"] || $GLOBALS["DB_DEBUG"] || $_SESSION["DEBUG_ALL"] || $_SESSION["DB_DEBUG"]) && ini_get('memory_limit') != -1)
|
||||
// ini_set('memory_limit', -1);
|
||||
if ($res['filename'] == $this->page_name) {
|
||||
$this->permission_okay = 1;
|
||||
$this->permission_okay = true;
|
||||
} else {
|
||||
$this->login_error = 103;
|
||||
$this->permission_okay = 0;
|
||||
$this->permission_okay = false;
|
||||
}
|
||||
}
|
||||
// if called from public, so we can check if the permissions are ok
|
||||
return $this->permission_okay;
|
||||
}
|
||||
|
||||
// METHOD: loginLogoutUser
|
||||
// WAS : login_logout_user
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : if a user pressed on logout, destroyes session and unsets all global vars
|
||||
/**
|
||||
* if a user pressed on logout, destroyes session and unsets all global vars
|
||||
* @return void has no return
|
||||
*/
|
||||
public function loginLogoutUser()
|
||||
{
|
||||
if ($this->logout || $this->login_error) {
|
||||
@@ -631,7 +653,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
unset($_SESSION['HEADER_COLOR']);
|
||||
session_destroy();
|
||||
// then prints the login screen again
|
||||
$this->permission_okay = 0;
|
||||
$this->permission_okay = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -653,10 +675,30 @@ class Login extends \CoreLibs\DB\IO
|
||||
// * if an account ACL is set, set this parallel, account ACL overrides user ACL if it applies
|
||||
// * if edit access ACL level is set, use this, else use page
|
||||
// set all base ACL levels as a list keyword -> ACL number
|
||||
/**
|
||||
* sets all the basic ACLs
|
||||
* init set the basic acl the user has, based on the following rules
|
||||
* - init set from config DEFAULT ACL
|
||||
* - if page ACL is set, it overrides the default ACL
|
||||
* - if group ACL is set, it overrides the page ACL
|
||||
* - if user ACL is set, it overrides the group ACL
|
||||
* set the page ACL
|
||||
* - default ACL set
|
||||
* - set group ACL if not default overrides default ACL
|
||||
* - set page ACL if not default overrides group ACL
|
||||
* set edit access ACL and set default edit access group
|
||||
* - if an account ACL is set, set this parallel, account ACL overrides user ACL if it applies
|
||||
* - if edit access ACL level is set, use this, else use page
|
||||
* set all base ACL levels as a list keyword -> ACL number
|
||||
* @return void has no return
|
||||
*/
|
||||
private function loginSetAcl()
|
||||
{
|
||||
// only set acl if we have permission okay
|
||||
if ($this->permission_okay) {
|
||||
// username (login), group name
|
||||
$this->acl['user_name'] = $_SESSION['USER_NAME'];
|
||||
$this->acl['group_name'] = $_SESSION['GROUP_NAME'];
|
||||
// we start with the default acl
|
||||
$this->acl['base'] = DEFAULT_ACL_LEVEL;
|
||||
|
||||
@@ -708,7 +750,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
// detail name/level set
|
||||
$this->acl['unit_detail'][$ea_id] = array (
|
||||
$this->acl['unit_detail'][$ea_id] = array(
|
||||
'name' => $unit['name'],
|
||||
'uid' => $unit['uid'],
|
||||
'level' => $this->default_acl_list[$this->acl['unit'][$ea_id]]['name'],
|
||||
@@ -724,9 +766,9 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
// flag if to show extra edit access drop downs (because user has multiple groups assigned)
|
||||
if (count($_SESSION['UNIT']) > 1) {
|
||||
$this->acl['show_ea_extra'] = 1;
|
||||
$this->acl['show_ea_extra'] = true;
|
||||
} else {
|
||||
$this->acl['show_ea_extra'] = 0;
|
||||
$this->acl['show_ea_extra'] = false;
|
||||
}
|
||||
// set the default edit access
|
||||
$this->acl['default_edit_access'] = $_SESSION['UNIT_DEFAULT'];
|
||||
@@ -741,11 +783,11 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: loginCheckEditAccess
|
||||
// WAS : login_check_edit_access
|
||||
// PARAMS: edit_access_id to check
|
||||
// RETURN: true/false: if the edit access is not in the valid list: false
|
||||
// DESC : checks if this edit access id is valid
|
||||
/**
|
||||
* checks if this edit access id is valid
|
||||
* @param int $edit_access_id access id pk to check
|
||||
* @return bool true/false: if the edit access is not in the valid list: false
|
||||
*/
|
||||
public function loginCheckEditAccess($edit_access_id): bool
|
||||
{
|
||||
if (array_key_exists($edit_access_id, $this->acl['unit'])) {
|
||||
@@ -755,10 +797,11 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: loginPasswordChangeValidPassword
|
||||
// PARAMS: the new password
|
||||
// RETURN: true or false
|
||||
// DESC : checks if the password is in a valid format
|
||||
/**
|
||||
* checks if the password is in a valid format
|
||||
* @param string $password the new password
|
||||
* @return bool true or false if valid password or not
|
||||
*/
|
||||
private function loginPasswordChangeValidPassword($password)
|
||||
{
|
||||
$is_valid_password = true;
|
||||
@@ -777,10 +820,20 @@ class Login extends \CoreLibs\DB\IO
|
||||
return $is_valid_password;
|
||||
}
|
||||
|
||||
// METHOD: loginSetPasswordMinLength
|
||||
// PARAMS: set the minimum length
|
||||
// RETURN: true/false on success
|
||||
// DESC : sets the minium length and checks on valid
|
||||
/**
|
||||
* dummy declare for password forget
|
||||
* @return void has no return
|
||||
*/
|
||||
private function loginPasswordForgot()
|
||||
{
|
||||
// will do some password recovert, eg send email
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the minium length and checks on valid
|
||||
* @param int $length set the minimum length
|
||||
* @return bool true/false on success
|
||||
*/
|
||||
public function loginSetPasswordMinLength(int $length): bool
|
||||
{
|
||||
// check that numeric, positive numeric, not longer than max input string lenght
|
||||
@@ -793,17 +846,20 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: loginPasswordChange
|
||||
// WAS : login_password_change
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : changes a user password
|
||||
/**
|
||||
* changes a user password
|
||||
* @return void has no return
|
||||
*/
|
||||
private function loginPasswordChange()
|
||||
{
|
||||
if ($this->change_password) {
|
||||
$event = 'Password Change';
|
||||
$data = '';
|
||||
// check that given username is NOT in the deny list, else silent skip (with error log)
|
||||
if (!in_array($this->pw_username, $this->pw_change_deny_users)) {
|
||||
// init the edit user id variable
|
||||
$edit_user_id = '';
|
||||
// cehck if either username or old password is not set
|
||||
if (!$this->pw_username || !$this->pw_old_password) {
|
||||
$this->login_error = 200;
|
||||
$data = 'Missing username or old password.';
|
||||
@@ -850,7 +906,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
// no error change this users password
|
||||
if (!$this->login_error) {
|
||||
if (!$this->login_error && $edit_user_id) {
|
||||
// update the user (edit_user_id) with the new password
|
||||
$q = "UPDATE edit_user SET password = '".$this->dbEscapeString($this->passwordSet($this->pw_new_password))."' WHERE edit_user_id = ".$edit_user_id;
|
||||
$this->dbExec($q);
|
||||
@@ -859,7 +915,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
} else {
|
||||
// illegal user error
|
||||
$this->login_error = '220';
|
||||
$this->login_error = 220;
|
||||
$data = 'Illegal user for password change: '.$this->pw_username;
|
||||
}
|
||||
// log this password change attempt
|
||||
@@ -867,96 +923,81 @@ class Login extends \CoreLibs\DB\IO
|
||||
} // button pressed
|
||||
}
|
||||
|
||||
// METHOD: loginPrintLogin
|
||||
// WAS : login_print_login
|
||||
// PARAMS: none
|
||||
// RETURN: html data for login page
|
||||
// DESC : prints out login html part if no permission (error) is set
|
||||
/**
|
||||
* prints out login html part if no permission (error) is set
|
||||
* @return ?string html data for login page, or null for nothing
|
||||
*/
|
||||
private function loginPrintLogin()
|
||||
{
|
||||
$html_string = null;
|
||||
if (!$this->permission_okay) {
|
||||
// get global AJAX page trigger
|
||||
// if true, return error ajax
|
||||
global $AJAX_PAGE;
|
||||
if ($AJAX_PAGE === true) {
|
||||
$data = array (
|
||||
'status' => 'error',
|
||||
'error_code' => $this->loging_error,
|
||||
'msg' => array (
|
||||
'level' => 'error',
|
||||
'str' => $this->l->__('Login necessary')
|
||||
)
|
||||
);
|
||||
$html_string = json_encode($data);
|
||||
// set the templates now
|
||||
$this->loginSetTemplates();
|
||||
// if there is a global logout target ...
|
||||
if (file_exists($this->logout_target) && $this->logout_target) {
|
||||
$LOGOUT_TARGET = $this->logout_target;
|
||||
} else {
|
||||
// set the templates now
|
||||
$this->loginSetTemplates();
|
||||
// if there is a global logout target ...
|
||||
if (file_exists($this->logout_target) && $this->logout_target) {
|
||||
$LOGOUT_TARGET = $this->logout_target;
|
||||
} else {
|
||||
$LOGOUT_TARGET = "";
|
||||
}
|
||||
$LOGOUT_TARGET = "";
|
||||
}
|
||||
|
||||
$html_string = $this->login_template['template'];
|
||||
$html_string = $this->login_template['template'];
|
||||
|
||||
// if password change is okay
|
||||
if ($this->password_change) {
|
||||
$html_string_password_change = $this->login_template['password_change'];
|
||||
// if password change is okay
|
||||
if ($this->password_change) {
|
||||
$html_string_password_change = $this->login_template['password_change'];
|
||||
|
||||
// pre change the data in the PASSWORD_CHANGE_DIV first
|
||||
foreach ($this->login_template['strings'] as $string => $data) {
|
||||
if ($data) {
|
||||
$html_string_password_change = str_replace('{'.$string.'}', $data, $html_string_password_change);
|
||||
}
|
||||
// pre change the data in the PASSWORD_CHANGE_DIV first
|
||||
foreach ($this->login_template['strings'] as $string => $data) {
|
||||
if ($data) {
|
||||
$html_string_password_change = str_replace('{'.$string.'}', $data, $html_string_password_change);
|
||||
}
|
||||
// print error messagae
|
||||
if ($this->login_error) {
|
||||
$html_string_password_change = str_replace('{ERROR_MSG}', $this->login_error_msg[$this->login_error].'<br>', $html_string_password_change);
|
||||
} else {
|
||||
$html_string_password_change = str_replace('{ERROR_MSG}', '<br>', $html_string_password_change);
|
||||
}
|
||||
// if pw change action, show the float again
|
||||
if ($this->change_password && !$this->password_change_ok) {
|
||||
$html_string_password_change = str_replace('{PASSWORD_CHANGE_SHOW}', '<script language="JavaScript">ShowHideDiv(\'pw_change_div\');</script>', $html_string_password_change);
|
||||
} else {
|
||||
$html_string_password_change = str_replace('{PASSWORD_CHANGE_SHOW}', '', $html_string_password_change);
|
||||
}
|
||||
$this->login_template['strings']['PASSWORD_CHANGE_DIV'] = $html_string_password_change;
|
||||
}
|
||||
|
||||
// put in the logout redirect string
|
||||
if ($this->logout && $LOGOUT_TARGET) {
|
||||
$html_string = str_replace('{LOGOUT_TARGET}', '<meta http-equiv="refresh" content="0; URL='.$LOGOUT_TARGET.'">', $html_string);
|
||||
} else {
|
||||
$html_string = str_replace('{LOGOUT_TARGET}', '', $html_string);
|
||||
}
|
||||
|
||||
// print error messagae
|
||||
if ($this->login_error) {
|
||||
$html_string = str_replace('{ERROR_MSG}', $this->login_error_msg[$this->login_error].'<br>', $html_string);
|
||||
} elseif ($this->password_change_ok && $this->password_change) {
|
||||
$html_string = str_replace('{ERROR_MSG}', $this->login_error_msg[300].'<br>', $html_string);
|
||||
$html_string_password_change = str_replace('{ERROR_MSG}', $this->login_error_msg[$this->login_error].'<br>', $html_string_password_change);
|
||||
} else {
|
||||
$html_string = str_replace('{ERROR_MSG}', '<br>', $html_string);
|
||||
$html_string_password_change = str_replace('{ERROR_MSG}', '<br>', $html_string_password_change);
|
||||
}
|
||||
|
||||
// create the replace array context
|
||||
foreach ($this->login_template['strings'] as $string => $data) {
|
||||
$html_string = str_replace('{'.$string.'}', $data, $html_string);
|
||||
// if pw change action, show the float again
|
||||
if ($this->change_password && !$this->password_change_ok) {
|
||||
$html_string_password_change = str_replace('{PASSWORD_CHANGE_SHOW}', '<script language="JavaScript">ShowHideDiv(\'pw_change_div\');</script>', $html_string_password_change);
|
||||
} else {
|
||||
$html_string_password_change = str_replace('{PASSWORD_CHANGE_SHOW}', '', $html_string_password_change);
|
||||
}
|
||||
$this->login_template['strings']['PASSWORD_CHANGE_DIV'] = $html_string_password_change;
|
||||
}
|
||||
|
||||
// put in the logout redirect string
|
||||
if ($this->logout && $LOGOUT_TARGET) {
|
||||
$html_string = str_replace('{LOGOUT_TARGET}', '<meta http-equiv="refresh" content="0; URL='.$LOGOUT_TARGET.'">', $html_string);
|
||||
} else {
|
||||
$html_string = str_replace('{LOGOUT_TARGET}', '', $html_string);
|
||||
}
|
||||
|
||||
// print error messagae
|
||||
if ($this->login_error) {
|
||||
$html_string = str_replace('{ERROR_MSG}', $this->login_error_msg[$this->login_error].'<br>', $html_string);
|
||||
} elseif ($this->password_change_ok && $this->password_change) {
|
||||
$html_string = str_replace('{ERROR_MSG}', $this->login_error_msg[300].'<br>', $html_string);
|
||||
} else {
|
||||
$html_string = str_replace('{ERROR_MSG}', '<br>', $html_string);
|
||||
}
|
||||
|
||||
// create the replace array context
|
||||
foreach ($this->login_template['strings'] as $string => $data) {
|
||||
$html_string = str_replace('{'.$string.'}', $data, $html_string);
|
||||
}
|
||||
// return the created HTML here
|
||||
return $html_string;
|
||||
} // if permission is 0 then print out login
|
||||
// return the created HTML here or null for nothing
|
||||
return $html_string;
|
||||
}
|
||||
|
||||
// METHOD: loginCloseClass
|
||||
// WAS : login_close_class
|
||||
// PARAMS: none
|
||||
// RETURN: true on permission ok, false on permission wrong
|
||||
// DESC : last function called, writes log and prints out error msg and exists script if permission 0
|
||||
private function loginCloseClass()
|
||||
/**
|
||||
* last function called, writes log and prints out error msg and
|
||||
* exists script if permission 0
|
||||
* @return bool true on permission ok, false on permission wrong
|
||||
*/
|
||||
private function loginCloseClass(): bool
|
||||
{
|
||||
// write to LOG table ...
|
||||
if ($this->login_error || $this->login || $this->logout) {
|
||||
@@ -987,14 +1028,13 @@ class Login extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: loginSetTemplates
|
||||
// WAS : login_set_templates
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : checks if there are external templates, if not uses internal fallback ones
|
||||
/**
|
||||
* checks if there are external templates, if not uses internal fallback ones
|
||||
* @return void has no return
|
||||
*/
|
||||
private function loginSetTemplates()
|
||||
{
|
||||
$strings = array (
|
||||
$strings = array(
|
||||
'HTML_TITLE' => $this->l->__('LOGIN'),
|
||||
'TITLE' => $this->l->__('LOGIN'),
|
||||
'USERNAME' => $this->l->__('Username'),
|
||||
@@ -1005,7 +1045,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
'PASSWORD_CHANGE_BUTTON_VALUE' => $this->l->__('Change Password')
|
||||
);
|
||||
|
||||
$error_msgs = array (
|
||||
$error_msgs = array(
|
||||
'100' => $this->l->__('Fatal Error: <b>[EUID] came in as GET/POST!</b>'), // actually obsolete
|
||||
'1010' => $this->l->__('Fatal Error: <b>Login Failed - Wrong Username or Password</b>'), // user not found
|
||||
'1011' => $this->l->__('Fatal Error: <b>Login Failed - Wrong Username or Password</b>'), // blowfish password wrong
|
||||
@@ -1028,7 +1068,7 @@ class Login extends \CoreLibs\DB\IO
|
||||
|
||||
// if password change is okay
|
||||
if ($this->password_change) {
|
||||
$strings = array_merge($strings, array (
|
||||
$strings = array_merge($strings, array(
|
||||
'TITLE_PASSWORD_CHANGE' => 'Change Password for User',
|
||||
'OLD_PASSWORD' => $this->l->__('Old Password'),
|
||||
'NEW_PASSWORD' => $this->l->__('New Password'),
|
||||
@@ -1055,7 +1095,7 @@ EOM;
|
||||
if ($this->password_forgot) {
|
||||
}
|
||||
if (!$this->password_change && !$this->password_forgot) {
|
||||
$strings = array_merge($strings, array (
|
||||
$strings = array_merge($strings, array(
|
||||
'JS_SHOW_HIDE' => '',
|
||||
'PASSWORD_CHANGE_BUTTON' => '',
|
||||
'PASSWORD_CHANGE_DIV' => ''
|
||||
@@ -1143,14 +1183,15 @@ EOM;
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: writeLog
|
||||
// WAS : write_log
|
||||
// PARAMS: event -> string of what has been done
|
||||
// data -> data information (id, etc)
|
||||
// error -> if error, write error string (not enougth data, etc)
|
||||
// RETURN: none
|
||||
// DESC : writes detailed data into the edit user log table (keep log what user does)
|
||||
private function writeLog($event, $data, $error = '', $username = '')
|
||||
/**
|
||||
* writes detailed data into the edit user log table (keep log what user does)
|
||||
* @param string $event string of what has been done
|
||||
* @param string $data data information (id, etc)
|
||||
* @param string|int $error error id (mostly an int)
|
||||
* @param string $username login user username
|
||||
* @return void has no return
|
||||
*/
|
||||
private function writeLog(string $event, string $data, $error = '', string $username = '')
|
||||
{
|
||||
if ($this->login) {
|
||||
$this->action = 'Login';
|
||||
@@ -1159,7 +1200,7 @@ EOM;
|
||||
} else {
|
||||
$this->action = '';
|
||||
}
|
||||
$_data_binary = array (
|
||||
$_data_binary = array(
|
||||
'_SESSION' => $_SESSION,
|
||||
'_GET' => $_GET,
|
||||
'_POST' => $_POST,
|
||||
@@ -1194,12 +1235,12 @@ EOM;
|
||||
$this->dbExec($q, 'NULL');
|
||||
}
|
||||
|
||||
// METHOD: loginCheckEditAccessId
|
||||
// WAS : login_check_edit_access_id
|
||||
// PARAMS: edit access id to check
|
||||
// RETURN: same edit access id if ok, or the default edit access id if given one is not valud
|
||||
// DESC : checks that the given edit access id is valid for this user
|
||||
public function loginCheckEditAccessId($edit_access_id)
|
||||
/**
|
||||
*checks that the given edit access id is valid for this user
|
||||
* @param int $edit_access_id edit access id to check
|
||||
* @return int same edit access id if ok, or the default edit access id if given one is not valid
|
||||
*/
|
||||
public function loginCheckEditAccessId(int $edit_access_id)
|
||||
{
|
||||
if (!array_key_exists($edit_access_id, $_SESSION["UNIT"])) {
|
||||
return $_SESSION["UNIT_DEFAULT"];
|
||||
@@ -1208,12 +1249,13 @@ EOM;
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: loginSetEditAccessData
|
||||
// WAS : login_set_edit_access_data
|
||||
// PARAMS: edit access id, key value to search for
|
||||
// RETURN: false for not found or string for found data
|
||||
// DESC : searchs in the data set for the unit for the data key and returns the value asociated with it
|
||||
public function loginSetEditAccessData($edit_access_id, $data_key)
|
||||
/**
|
||||
* [loginSetEditAccessData description]
|
||||
* @param int $edit_access_id edit access id
|
||||
* @param string|int $data_key key value to search for
|
||||
* @return bool|string false for not found or string for found data
|
||||
*/
|
||||
public function loginSetEditAccessData(int $edit_access_id, $data_key)
|
||||
{
|
||||
if (!$_SESSION['UNIT'][$edit_access_id]['data'][$data_key]) {
|
||||
return false;
|
||||
@@ -30,7 +30,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
public $menu = array();
|
||||
public $menu_show_flag = 0; // top menu flag (mostly string)
|
||||
// action ids
|
||||
public $action_list = array ('action', 'action_id', 'action_sub_id', 'action_yes', 'action_flag', 'action_menu', 'action_value', 'action_error', 'action_loaded');
|
||||
public $action_list = array('action', 'action_id', 'action_sub_id', 'action_yes', 'action_flag', 'action_menu', 'action_value', 'action_error', 'action_loaded');
|
||||
public $action;
|
||||
public $action_id;
|
||||
public $action_sub_id;
|
||||
@@ -41,66 +41,46 @@ class Backend extends \CoreLibs\DB\IO
|
||||
public $action_value;
|
||||
public $action_error;
|
||||
// ACL array variable if we want to set acl data from outisde
|
||||
public $acl = array ();
|
||||
public $acl = array();
|
||||
public $default_acl;
|
||||
// queue key
|
||||
public $queue_key;
|
||||
// the current active edit access id
|
||||
public $edit_access_id;
|
||||
// error/warning/info messages
|
||||
public $messages = array ();
|
||||
public $messages = array();
|
||||
public $error = 0;
|
||||
public $warning = 0;
|
||||
public $info = 0;
|
||||
// smarty publics
|
||||
// internal lang & encoding vars
|
||||
public $lang_dir = '';
|
||||
public $lang;
|
||||
public $lang_short;
|
||||
public $encoding;
|
||||
// smarty publics [end processing in smarty class]
|
||||
public $DATA;
|
||||
public $HEADER;
|
||||
public $DEBUG_DATA;
|
||||
public $CONTENT_DATA;
|
||||
// smarty include/set var
|
||||
public $INC_TEMPLATE_NAME;
|
||||
public $JS_TEMPLATE_NAME;
|
||||
public $CSS_TEMPLATE_NAME;
|
||||
public $CSS_SPECIAL_TEMPLATE_NAME;
|
||||
public $JS_SPECIAL_TEMPLATE_NAME;
|
||||
public $CACHE_ID;
|
||||
public $COMPILE_ID;
|
||||
public $includes;
|
||||
public $template_path;
|
||||
public $lang_dir;
|
||||
public $javascript;
|
||||
public $css;
|
||||
public $pictures;
|
||||
public $cache_pictures;
|
||||
public $cache_pictures_root;
|
||||
public $JS_INCLUDE;
|
||||
public $JS_SPECIAL_INCLUDE;
|
||||
public $CSS_INCLUDE;
|
||||
public $CSS_SPECIAL_INCLUDE;
|
||||
// language
|
||||
public $l;
|
||||
|
||||
// CONSTRUCTOR / DECONSTRUCTOR |====================================>
|
||||
// METHOD: __construct
|
||||
// PARAMS: array db config
|
||||
// string for language set
|
||||
// int set control flag (for core basic set/get var error control)
|
||||
/**
|
||||
* main class constructor
|
||||
* @param array $db_config db config array
|
||||
* @param string $lang language string
|
||||
* @param int|integer $set_control_flag class variable check flag
|
||||
*/
|
||||
public function __construct(array $db_config, string $lang, int $set_control_flag = 0)
|
||||
{
|
||||
$this->setLangEncoding();
|
||||
// get the language sub class & init it
|
||||
$this->l = new \CoreLibs\Language\L10n($lang);
|
||||
|
||||
// init the database class
|
||||
parent::__construct($db_config, $set_control_flag);
|
||||
|
||||
// internal
|
||||
$this->class_info["adbBackend"] = array(
|
||||
"class_name" => "Admin Interface Backend",
|
||||
"class_version" => "1.0.0",
|
||||
"class_created" => "2006/08/15",
|
||||
"class_author" => "Clemens Schwaighofer"
|
||||
);
|
||||
|
||||
// set the action ids
|
||||
foreach ($this->action_list as $_action) {
|
||||
$this->$_action = (isset($_POST[$_action])) ? $_POST[$_action] : '';
|
||||
@@ -114,7 +94,9 @@ class Backend extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
|
||||
// deconstructor
|
||||
/**
|
||||
* class deconstructor
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
parent::__destruct();
|
||||
@@ -125,13 +107,55 @@ class Backend extends \CoreLibs\DB\IO
|
||||
|
||||
// PUBLIC METHODS |=================================================>
|
||||
|
||||
// METHOD: adbEditLog()
|
||||
// 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
|
||||
public function adbEditLog(string $event = '', $data = '', string $write_type = 'STRING')
|
||||
/**
|
||||
* set the language encoding and language settings
|
||||
* the default charset from _SESSION login or from
|
||||
* config DEFAULT ENCODING
|
||||
* the lang full name for mo loading from _SESSION login
|
||||
* or SITE LANG or DEFAULT LANG from config
|
||||
* creates short lang (only first two chars) from the lang
|
||||
* @return void
|
||||
*/
|
||||
public function setLangEncoding(): void
|
||||
{
|
||||
// just emergency fallback for language
|
||||
// set encoding
|
||||
if (isset($_SESSION['DEFAULT_CHARSET'])) {
|
||||
$this->encoding = $_SESSION['DEFAULT_CHARSET'];
|
||||
} else {
|
||||
$this->encoding = DEFAULT_ENCODING;
|
||||
}
|
||||
// just emergency fallback for language
|
||||
if (isset($_SESSION['DEFAULT_LANG'])) {
|
||||
$this->lang = $_SESSION['DEFAULT_LANG'];
|
||||
} else {
|
||||
$this->lang = defined('SITE_LANG') ? SITE_LANG : DEFAULT_LANG;
|
||||
}
|
||||
// create the char lang encoding
|
||||
$this->lang_short = substr($this->lang, 0, 2);
|
||||
// set the language folder
|
||||
$this->lang_dir = BASE.INCLUDES.LANG.CONTENT_PATH;
|
||||
}
|
||||
|
||||
/**
|
||||
* set internal ACL from login ACL
|
||||
* @param array $acl login acl array
|
||||
*/
|
||||
public function setACL(array $acl): void
|
||||
{
|
||||
$this->acl = $acl;
|
||||
}
|
||||
|
||||
/**
|
||||
* writes all action vars plus other info into edit_log tabl
|
||||
* @param string $event any kind of event description,
|
||||
* @param string|array $data any kind of data related to that event
|
||||
* @param string $write_type write type can bei STRING or BINARY
|
||||
* @return void has no return
|
||||
*/
|
||||
public function adbEditLog(string $event = '', $data = '', string $write_type = 'STRING'): void
|
||||
{
|
||||
$data_binary = '';
|
||||
if ($write_type == 'BINARY') {
|
||||
$data_binary = $this->dbEscapeBytea(bzcompress(serialize($data)));
|
||||
$data = 'see bzip compressed data_binary field';
|
||||
@@ -141,14 +165,26 @@ class Backend extends \CoreLibs\DB\IO
|
||||
$data = $this->dbEscapeString(serialize($data));
|
||||
}
|
||||
|
||||
$q = "INSERT INTO ".LOGIN_DB_SCHEMA.".edit_log ";
|
||||
// check schema
|
||||
if (defined('LOGIN_DB_SCHEMA')) {
|
||||
/** @phan-suppress-next-line PhanUndeclaredConstant */
|
||||
$SCHEMA = LOGIN_DB_SCHEMA;
|
||||
} elseif ($this->dbGetSchema()) {
|
||||
$SCHEMA = $this->dbGetSchema();
|
||||
} elseif (defined('PUBLIC_SCHEMA')) {
|
||||
$SCHEMA = PUBLIC_SCHEMA;
|
||||
} else {
|
||||
$SCHEMA = 'public';
|
||||
}
|
||||
|
||||
$q = "INSERT INTO ".$SCHEMA.".edit_log ";
|
||||
$q .= "(euid, event_date, event, data, data_binary, page, ";
|
||||
$q .= "ip, user_agent, referer, script_name, query_string, server_name, http_host, http_accept, http_accept_charset, http_accept_encoding, session_id, ";
|
||||
$q .= "action, action_id, action_yes, action_flag, action_menu, action_loaded, action_value, action_error) ";
|
||||
$q .= "VALUES ";
|
||||
$q .= "(".$this->dbEscapeString(isset($_SESSION['EUID']) ? $_SESSION['EUID'] : '').", ";
|
||||
$q .= "(".$this->dbEscapeString(isset($_SESSION['EUID']) && is_numeric($_SESSION['EUID']) ? $_SESSION['EUID'] : 'NULL').", ";
|
||||
$q .= "NOW(), ";
|
||||
$q .= "'".$this->dbEscapeString($event)."', '".$data."', '".$data_binary."', '".$this->dbEscapeString($this->page_name)."', ";
|
||||
$q .= "'".$this->dbEscapeString((string)$event)."', '".$data."', '".$data_binary."', '".$this->dbEscapeString($this->page_name)."', ";
|
||||
$q .= "'".@$_SERVER["REMOTE_ADDR"]."', '".$this->dbEscapeString(@$_SERVER['HTTP_USER_AGENT'])."', ";
|
||||
$q .= "'".$this->dbEscapeString(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '')."', ";
|
||||
$q .= "'".$this->dbEscapeString(isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '')."', ";
|
||||
@@ -170,10 +206,47 @@ class Backend extends \CoreLibs\DB\IO
|
||||
$this->dbExec($q, 'NULL');
|
||||
}
|
||||
|
||||
// METHOD: adbTopMenu
|
||||
// PARAMS: level
|
||||
// RETURN: returns an array for the top menu with all correct settings
|
||||
// DESC : menu creater
|
||||
/**
|
||||
* helper function for PHP file upload error messgaes to messge string
|
||||
* @param int $error_code integer _FILE upload error code
|
||||
* @return string message string, translated
|
||||
*/
|
||||
public function fileUploadErrorMessage(int $error_code): string
|
||||
{
|
||||
switch ($error_code) {
|
||||
case UPLOAD_ERR_INI_SIZE:
|
||||
$message = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
|
||||
break;
|
||||
case UPLOAD_ERR_FORM_SIZE:
|
||||
$message = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
|
||||
break;
|
||||
case UPLOAD_ERR_PARTIAL:
|
||||
$message = 'The uploaded file was only partially uploaded';
|
||||
break;
|
||||
case UPLOAD_ERR_NO_FILE:
|
||||
$message = 'No file was uploaded';
|
||||
break;
|
||||
case UPLOAD_ERR_NO_TMP_DIR:
|
||||
$message = 'Missing a temporary folder';
|
||||
break;
|
||||
case UPLOAD_ERR_CANT_WRITE:
|
||||
$message = 'Failed to write file to disk';
|
||||
break;
|
||||
case UPLOAD_ERR_EXTENSION:
|
||||
$message = 'File upload stopped by extension';
|
||||
break;
|
||||
default:
|
||||
$message = 'Unknown upload error';
|
||||
break;
|
||||
}
|
||||
return $this->l->__($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* menu creater (from login menu session pages)
|
||||
* @param int $flag visible flag trigger
|
||||
* @return array menu array for output on page (smarty)
|
||||
*/
|
||||
public function adbTopMenu(int $flag = 0): array
|
||||
{
|
||||
if ($this->menu_show_flag) {
|
||||
@@ -181,10 +254,11 @@ class Backend extends \CoreLibs\DB\IO
|
||||
}
|
||||
|
||||
// get the session pages array
|
||||
$PAGES = $_SESSION['PAGES'];
|
||||
$PAGES = isset($_SESSION['PAGES']) ? $_SESSION['PAGES'] : null;
|
||||
if (!isset($PAGES) || !is_array($PAGES)) {
|
||||
$PAGES = array ();
|
||||
$PAGES = array();
|
||||
}
|
||||
$pages = array();
|
||||
foreach ($PAGES as $PAGE_CUID => $PAGE_DATA) {
|
||||
$pages[] = $PAGE_DATA;
|
||||
}
|
||||
@@ -217,7 +291,7 @@ class Backend extends \CoreLibs\DB\IO
|
||||
$pages[$i]['popup'] = 0;
|
||||
}
|
||||
$query_string = '';
|
||||
if (count($pages[$i]['query'])) {
|
||||
if (isset($pages[$i]['query']) && count($pages[$i]['query'])) {
|
||||
for ($j = 0, $jMax = count($pages[$i]['query']); $j < $jMax; $j ++) {
|
||||
if (strlen($query_string)) {
|
||||
$query_string .= '&';
|
||||
@@ -261,10 +335,11 @@ class Backend extends \CoreLibs\DB\IO
|
||||
return $this->menu;
|
||||
}
|
||||
|
||||
// METHOD: adbShowMenuPoint
|
||||
// PARAMS: filename
|
||||
// RETURN: returns boolean true/false
|
||||
// DESC : checks if this filename is in the current situation (user id, etc) available
|
||||
/**
|
||||
* checks if this filename is in the current situation (user id, etc) available
|
||||
* @param string $filename filename
|
||||
* @return bool true for visible/accessable menu point, false for not
|
||||
*/
|
||||
public function adbShowMenuPoint(string $filename): bool
|
||||
{
|
||||
$enabled = false;
|
||||
@@ -276,57 +351,62 @@ class Backend extends \CoreLibs\DB\IO
|
||||
return $enabled;
|
||||
}
|
||||
|
||||
// REMARK: below function has moved to "Class.Basic"
|
||||
// METHOD: adbAssocArray
|
||||
// PARAMS: db array, key, value part
|
||||
// RETURN: returns and associative array
|
||||
// DESC : creates out of a normal db_return array an assoc array
|
||||
/**
|
||||
* @deprecated
|
||||
* creates out of a normal db_return array an assoc array
|
||||
* @param array $db_array input array
|
||||
* @param string|int|bool $key key
|
||||
* @param string|int|bool $value value
|
||||
* @return array associative array
|
||||
*/
|
||||
public function adbAssocArray(array $db_array, $key, $value): array
|
||||
{
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->genAssocArray($db_array, $key, $value);
|
||||
}
|
||||
|
||||
// REMARK: below function has moved to "Class.Basic"
|
||||
// METHOD: adbByteStringFormat
|
||||
// PARAMS: int
|
||||
// RETURN: string
|
||||
// DESC : converts bytes into formated string with KB, MB, etc
|
||||
/**
|
||||
* @deprecated
|
||||
* converts bytes into formated string with KB, MB, etc
|
||||
* @param string|int|float $number string or int or number
|
||||
* @return string formatted string
|
||||
*/
|
||||
public function adbByteStringFormat($number): string
|
||||
{
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->byteStringFormat($number);
|
||||
}
|
||||
|
||||
// REMARK: below function has moved to "Class.Basic"
|
||||
// METHOD: adbCreateThumbnail
|
||||
// PARAMS: id from picture where from we create a thumbnail
|
||||
// x -> max x size of thumbnail
|
||||
// y -> max y size of thumbnail
|
||||
// dummy -> if set to true, then if no images was found we show a dummy image
|
||||
// path -> if source start is not ROOT path, if empty ROOT is choosen
|
||||
// cache -> cache path, if not given TMP is used
|
||||
// RETURN: thumbnail name
|
||||
// DESC : converts picture to a thumbnail with max x and max y size
|
||||
public function adbCreateThumbnail($pic, $size_x, $size_y, $dummy = false, $path = "", $cache = "")
|
||||
/**
|
||||
* @deprecated
|
||||
* converts picture to a thumbnail with max x and max y size
|
||||
* @param string $pic source image file with or without path
|
||||
* @param int $size_x maximum size width
|
||||
* @param int $size_y maximum size height
|
||||
* @param string $dummy empty, or file_type to show an icon instead of nothing if file is not found
|
||||
* @param string $path if source start is not ROOT path, if empty ROOT is choosen
|
||||
* @return string|bool thumbnail name, or false for error
|
||||
*/
|
||||
public function adbCreateThumbnail($pic, $size_x, $size_y, $dummy = '', $path = "", $cache = "")
|
||||
{
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->createThumbnail($pic, $size_x, $size_y, $dummy, $path, $cache);
|
||||
}
|
||||
|
||||
// METHOD: adbMsg
|
||||
// PARAMS: level -> info/warning/error
|
||||
// msg -> string, can be printf formated
|
||||
// var array -> optional data for a possible printf formated msg
|
||||
// RETURN: none
|
||||
// DESC : wrapper function to fill up the mssages array
|
||||
public function adbMsg(string $level, string $msg, array $vars = array ()): void
|
||||
/**
|
||||
* wrapper function to fill up the mssages array
|
||||
* @param string $level info/warning/error
|
||||
* @param string $msg string, can be printf formated
|
||||
* @param array $vars optional data for a possible printf formated msg
|
||||
* @return void has no return
|
||||
*/
|
||||
public function adbMsg(string $level, string $msg, array $vars = array()): void
|
||||
{
|
||||
if (!preg_match("/^info|warning|error$/", $level)) {
|
||||
$level = "info";
|
||||
}
|
||||
$this->messages[] = array (
|
||||
'msg' => sprintf($this->l->__($msg), $vars),
|
||||
$this->messages[] = array(
|
||||
'msg' => vsprintf($this->l->__($msg), $vars),
|
||||
'class' => $level
|
||||
);
|
||||
switch ($level) {
|
||||
@@ -342,50 +422,64 @@ class Backend extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: adbLiveQueue
|
||||
// PARAMS: queue_key -> string to identfy the queue
|
||||
// type -> INSERT/UPDATE/DELETE
|
||||
// target -> target table to write to
|
||||
// data -> SQL part to write, this can include #KEY_VALUE#, #KEY_NAME# for delete sub queries
|
||||
// key_name -> key name, mostly used for update search
|
||||
// key_value -> data for the key
|
||||
// associate -> NULL for free, LOCK for first insert, group key for reference to first entry
|
||||
// file -> string for special file copy actions; mostyle "test#live;..."
|
||||
// RETURN: none
|
||||
// DESC : writes live queue
|
||||
/**
|
||||
* writes live queue
|
||||
* @param string $queue_key string to identfy the queue
|
||||
* @param string $type [description]
|
||||
* @param string $target [description]
|
||||
* @param string $data [description]
|
||||
* @param string $key_name [description]
|
||||
* @param string $key_value [description]
|
||||
* @param ?string $associate [description]
|
||||
* @param ?string $file [description]
|
||||
* @return void has no return
|
||||
*/
|
||||
public function adbLiveQueue(
|
||||
$queue_key,
|
||||
$type,
|
||||
$target,
|
||||
$data,
|
||||
$key_name,
|
||||
$key_value,
|
||||
$associate = null,
|
||||
$file = null
|
||||
) {
|
||||
$q = "INSERT INTO ".GLOBAL_DB_SCHEMA.".live_queue (";
|
||||
string $queue_key,
|
||||
string $type,
|
||||
string $target,
|
||||
string $data,
|
||||
string $key_name,
|
||||
string $key_value,
|
||||
string $associate = null,
|
||||
string $file = null
|
||||
): void {
|
||||
if (defined('GLOBAL_DB_SCHEMA')) {
|
||||
/** @phan-suppress-next-line PhanUndeclaredConstant */
|
||||
$SCHEMA = GLOBAL_DB_SCHEMA;
|
||||
} elseif ($this->dbGetSchema()) {
|
||||
$SCHEMA = $this->dbGetSchema();
|
||||
} elseif (defined('PUBLIC_SCHEMA')) {
|
||||
$SCHEMA = PUBLIC_SCHEMA;
|
||||
} else {
|
||||
$SCHEMA = 'public';
|
||||
}
|
||||
$q = "INSERT INTO ".$SCHEMA.".live_queue (";
|
||||
$q .= "queue_key, key_value, key_name, type, target, data, group_key, action, associate, file";
|
||||
$q .= ") VALUES (";
|
||||
$q .= "'".$this->dbEscapeString($queue_key)."', '".$this->dbEscapeString($key_value)."', ";
|
||||
$q .= "'".$this->dbEscapeString($key_name)."', '".$this->dbEscapeString($type)."', ";
|
||||
$q .= "'".$this->dbEscapeString($target)."', '".$this->dbEscapeString($data)."', ";
|
||||
$q .= "'".$this->queue_key."', '".$this->action."', '".$this->dbEscapeString($associate)."', ";
|
||||
$q .= "'".$this->dbEscapeString($file)."')";
|
||||
$this->db_exec($q);
|
||||
$q .= "'".$this->queue_key."', '".$this->action."', '".$this->dbEscapeString((string)$associate)."', ";
|
||||
$q .= "'".$this->dbEscapeString((string)$file)."')";
|
||||
$this->dbExec($q);
|
||||
}
|
||||
|
||||
// METHOD: adbPrintDateTime
|
||||
// PARAMS: year, month, day, hour, min: the date and time values
|
||||
// suffix: additional info printed after the date time variable in the drop down,
|
||||
// also used for ID in the on change JS call
|
||||
// minute steps: can be 1 (default), 5, 10, etc, if invalid (outside 1h range,
|
||||
// it falls back to 1min)
|
||||
// name pos back: default false, if set to true, the name will be printend
|
||||
// after the drop down and not before the drop down
|
||||
// RETURN: HTML formated strings for drop down lists of date and time
|
||||
// DESC : print the date/time drop downs, used in any queue/send/insert at date/time place
|
||||
// NOTE : Basic class holds exact the same, except the Year/Month/Day/etc strings
|
||||
// are translated in this call
|
||||
/**
|
||||
* Basic class holds exact the same, except the Year/Month/Day/etc strings
|
||||
* are translated in this call
|
||||
* @param int $year year YYYY
|
||||
* @param int $month month m
|
||||
* @param int $day day d
|
||||
* @param int $hour hour H
|
||||
* @param int $min min i
|
||||
* @param string $suffix additional info printed after the date time variable in the drop down
|
||||
* also used for ID in the on change JS call
|
||||
* @param int $min_steps default is 1 (minute), can set to anything, is used as sum up from 0
|
||||
* @param bool $name_pos_back default false, if set to true, the name will be printend
|
||||
* after the drop down and not before the drop down
|
||||
* @return string HTML formated strings for drop down lists of date and time
|
||||
*/
|
||||
public function adbPrintDateTime(
|
||||
$year,
|
||||
$month,
|
||||
@@ -6,7 +6,7 @@
|
||||
* RELEASED LICENSE: GNU GPL 3
|
||||
* SHORT DESC :RIPTION:
|
||||
* DB Array IO Class:
|
||||
* writes, reads or deletes a complete array (one data set) in/out a
|
||||
* writes, reads or deletes a complete array(one data set) in/out a
|
||||
* table from the connected DB.
|
||||
* you don't have to write any SQL queries, worry over update/insert
|
||||
*
|
||||
@@ -48,14 +48,14 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
public $pk_name; // the primary key from this table
|
||||
public $pk_id; // the PK id
|
||||
|
||||
// METHOD: db_array_io
|
||||
// PARAMS: db_config -> db_io class init vars
|
||||
// table_array -> the array from the table
|
||||
// table_name -> name of the table (for the array)
|
||||
// set_control_flag -> set basic class set/get variable error flags
|
||||
// RETURN: none
|
||||
// DESC : constructor for the array io class, set the
|
||||
// primary key name automatically (from array)
|
||||
/**
|
||||
* constructor for the array io class, set the
|
||||
* primary key name automatically (from array)
|
||||
* @param array $db_config db connection config
|
||||
* @param array $table_array table array config
|
||||
* @param string $table_name table name string
|
||||
* @param int|integer $set_control_flag set basic class set/get variable error flags
|
||||
*/
|
||||
public function __construct(array $db_config, array $table_array, string $table_name, int $set_control_flag = 0)
|
||||
{
|
||||
// instance db_io class
|
||||
@@ -75,31 +75,25 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
} // set pk_name IF table_array was given
|
||||
// internal
|
||||
$this->class_info['db_array_io'] = array (
|
||||
'class_name' => 'DB Array IO',
|
||||
'class_version' => '1.0.0',
|
||||
'class_created' => '2002/12/17',
|
||||
'class_author' => 'Clemens Schwaighofer'
|
||||
);
|
||||
// echo "CALSS INFO POST [A]: <pre>".print_r($this->class_info, true)."</pre><br>";
|
||||
}
|
||||
|
||||
// deconstruktor
|
||||
/**
|
||||
* class deconstructor
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
parent::__destruct();
|
||||
}
|
||||
|
||||
// METHOD: convertData
|
||||
// WAS : convert_data
|
||||
// PARAMS: string -> the string that should be changed
|
||||
// RETURN: string -> the altered string
|
||||
// DESC : changes all previously alterd HTML code into visible one,
|
||||
// works for <b>,<i>, and <a> (thought <a> can be / or should
|
||||
// be handled with the magic links functions
|
||||
// used with the read function
|
||||
public function convertData($text)
|
||||
/**
|
||||
* changes all previously alterd HTML code into visible one,
|
||||
* works for <b>,<i>, and <a> (thought <a> can be / or should
|
||||
* be handled with the magic links functions
|
||||
* used with the read function
|
||||
* @param string $text any html encoded string
|
||||
* @return string decoded html string
|
||||
*/
|
||||
public function convertData($text): string
|
||||
{
|
||||
$text = str_replace('<b>', '<b>', $text);
|
||||
$text = str_replace('</b>', '</b>', $text);
|
||||
@@ -117,7 +111,12 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
// PARAMS: string -> string to be changed
|
||||
// RETURN: string -> altered string
|
||||
// DESC : changeds all HTML entities into non HTML ones
|
||||
public function convertEntities($text)
|
||||
/**
|
||||
* changeds all HTML entities into non HTML ones
|
||||
* @param string $text encoded html string
|
||||
* @return string decoded html string
|
||||
*/
|
||||
public function convertEntities($text): string
|
||||
{
|
||||
$text = str_replace('<', '<', $text);
|
||||
$text = str_replace('>', '>', $text);
|
||||
@@ -127,12 +126,12 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
return $text;
|
||||
}
|
||||
|
||||
// METHOD: dbDumpArray
|
||||
// WAS : db_dump_array
|
||||
// PARAMS: none
|
||||
// RETURN: returns the current array
|
||||
// DESC : dumps the current data
|
||||
public function dbDumpArray($write = 0)
|
||||
/**
|
||||
* dumps the current data
|
||||
* @param bool $write write to error message, default false
|
||||
* @return string the array data as html string entry
|
||||
*/
|
||||
public function dbDumpArray($write = false): string
|
||||
{
|
||||
reset($this->table_array);
|
||||
$string = '';
|
||||
@@ -140,17 +139,16 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
$string .= '<b>'.$column.'</b> -> '.$data_array['value'].'<br>';
|
||||
}
|
||||
// add output to internal error_msg
|
||||
if ($write) {
|
||||
if ($write === true) {
|
||||
$this->error_msg['db'] .= $string;
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
// METHOD: dbCheckPkSet
|
||||
// WAS : db_check_pk_set
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : checks if pk is set and if not, set from pk_id and if this also not set return 0
|
||||
/**
|
||||
* checks if pk is set and if not, set from pk_id and if this also not set return 0
|
||||
* @return bool true if pk value is set, else false
|
||||
*/
|
||||
public function dbCheckPkSet()
|
||||
{
|
||||
// if pk_id is set, overrule ...
|
||||
@@ -162,18 +160,18 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
// if no PK found, error ...
|
||||
$this->error_id = 91;
|
||||
$this->__dbError();
|
||||
return 0;
|
||||
return false;
|
||||
} else {
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: dbResetArray
|
||||
// WAS : db_reset_array
|
||||
// PARAMS: reset_pk -> if set reset the pk too
|
||||
// RETURN: none
|
||||
// DESC : resets the whole array
|
||||
public function dbResetArray($reset_pk = 0)
|
||||
/**
|
||||
* resets the whole array values
|
||||
* @param boolean $reset_pk true if we want to reset the pk too
|
||||
* @return void has no return
|
||||
*/
|
||||
public function dbResetArray($reset_pk = false): void
|
||||
{
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $column => $data_array) {
|
||||
@@ -185,14 +183,16 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: dbDelete
|
||||
// WAS : db_delete
|
||||
// PARAMS: optional the table_array, if not given uses class var
|
||||
// RETURN: 1 for successfull delete or 0 for error
|
||||
// DESC : deletes one dataset
|
||||
public function dbDelete($table_array = 0)
|
||||
/**
|
||||
* deletes one dataset
|
||||
* @param array $table_array optional override for table array set
|
||||
* set this as new table array too
|
||||
* @return array returns the table array that was deleted
|
||||
*/
|
||||
public function dbDelete($table_array = array())
|
||||
{
|
||||
if (is_array($table_array)) {
|
||||
// is array and has values, override set and set new
|
||||
if (is_array($table_array) && count($table_array)) {
|
||||
$this->table_array = $table_array;
|
||||
}
|
||||
if (!$this->dbCheckPkSet()) {
|
||||
@@ -234,7 +234,7 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
$q .= ' AND '.$q_where;
|
||||
}
|
||||
// if 0, error
|
||||
unset($this->pk_id);
|
||||
$this->pk_id = null;
|
||||
if (!$this->dbExec($q)) {
|
||||
$this->error_id = 92;
|
||||
$this->__dbError();
|
||||
@@ -242,15 +242,16 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
return $this->table_array;
|
||||
}
|
||||
|
||||
// METHOD: dbRead
|
||||
// WAS : db_read
|
||||
// PARAMS: edit -> if 1 data will not be altered for output, optional the table_array, if not given uses class var
|
||||
// RETURN: true or false for reading
|
||||
// DESC : reads one row into the array
|
||||
public function dbRead($edit = 0, $table_array = 0)
|
||||
/**
|
||||
* reads one row into the array
|
||||
* @param boolean $edit on true convert data, else as is
|
||||
* @param array $table_array optional table array, overwrites internal set array
|
||||
* @return array set table array with values
|
||||
*/
|
||||
public function dbRead($edit = false, $table_array = array())
|
||||
{
|
||||
// if array give, overrules internal array
|
||||
if (is_array($table_array)) {
|
||||
if (is_array($table_array) && count($table_array)) {
|
||||
$this->table_array = $table_array;
|
||||
}
|
||||
if (!$this->dbCheckPkSet()) {
|
||||
@@ -288,7 +289,7 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
if ($res = $this->dbFetchArray()) {
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $column => $data_array) {
|
||||
// wenn "edit" dann gib daten wie in DB zurck, ansonten aufbereiten fr ausgabe
|
||||
// wenn "edit" dann gib daten wie in DB zurück, ansonten aufbereiten fr ausgabe
|
||||
// ?? sollte das nicht drauen ??? man weis ja net was da drin steht --> is noch zu berlegen
|
||||
// echo 'EDIT: $edit | Spalte: $column | type: '.$this->table_array[$column]['type'].' | Res: '.$res[$column].'<br>';
|
||||
if ($edit) {
|
||||
@@ -314,14 +315,15 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
return $this->table_array;
|
||||
}
|
||||
|
||||
// METHOD: dbWrite
|
||||
// WAS : db_write
|
||||
// PARAMS: addslashes -> if 1 will make an addslashes for each array field, optional the table_array, if not given uses class var
|
||||
// RETURN: true or false on write
|
||||
// DESC : writes on set into DB or updates one set (if PK exists)
|
||||
public function dbWrite($addslashes = 0, $table_array = 0)
|
||||
/**
|
||||
* writes one set into DB or updates one set (if PK exists)
|
||||
* @param boolean $addslashes old convert entities and set set escape
|
||||
* @param array $table_array optional table array, overwrites internal one
|
||||
* @return array table array or null
|
||||
*/
|
||||
public function dbWrite($addslashes = false, $table_array = array())
|
||||
{
|
||||
if (is_array($table_array)) {
|
||||
if (is_array($table_array) && count($table_array)) {
|
||||
$this->table_array = $table_array;
|
||||
}
|
||||
// PK ID check
|
||||
@@ -419,7 +421,9 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
}
|
||||
// integer is different
|
||||
if (isset($this->table_array[$column]['int']) || isset($this->table_array[$column]['int_null'])) {
|
||||
$this->debug('write_check', '['.$column.']['.$this->table_array[$column]['value'].']['.$this->table_array[$column]['type'].'] VALUE SET: '.isset($this->table_array[$column]['value']).' | INT NULL: '.isset($this->table_array[$column]['int_null']));
|
||||
$this->debug('write_check', '['.$column.']['.$this->table_array[$column]['value'].']['.$this->table_array[$column]['type'].'] '.
|
||||
'VALUE SET: '.(string)isset($this->table_array[$column]['value']).
|
||||
' | INT NULL: '.(string)isset($this->table_array[$column]['int_null']));
|
||||
if (isset($this->table_array[$column]['value']) &&
|
||||
!$this->table_array[$column]['value'] &&
|
||||
isset($this->table_array[$column]['int_null'])
|
||||
@@ -444,6 +448,9 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
$_value = 'NULL';
|
||||
} elseif (isset($this->table_array[$column]['value'])) {
|
||||
$_value = $this->table_array[$column]['value'];
|
||||
} else {
|
||||
// fallback
|
||||
$_value = 'NULL';
|
||||
}
|
||||
$q_data .= $_value;
|
||||
} else {
|
||||
@@ -522,73 +529,11 @@ class ArrayIO extends \CoreLibs\DB\IO
|
||||
// set primary key
|
||||
if ($insert) {
|
||||
$this->table_array[$this->pk_name]['value'] = $this->insert_id;
|
||||
$this->ok = $this->insert_id;
|
||||
$this->pk_id = $this->insert_id;
|
||||
}
|
||||
// return the table if needed
|
||||
return $this->table_array;
|
||||
}
|
||||
|
||||
// *************************************************************
|
||||
// COMPATIBILITY METHODS
|
||||
// those methods are deprecated function call names
|
||||
// they exist for backwards compatibility only
|
||||
// *************************************************************
|
||||
|
||||
public function convert_data($text)
|
||||
{
|
||||
error_log('DEPRECATED CALL: '.__METHOD__.', '.__FILE__.':'.__LINE__.', '.debug_backtrace()[0]['file'].':'.debug_backtrace()[0]['line']);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->convertData($text);
|
||||
}
|
||||
|
||||
public function convert_entities($text)
|
||||
{
|
||||
error_log('DEPRECATED CALL: '.__METHOD__.', '.__FILE__.':'.__LINE__.', '.debug_backtrace()[0]['file'].':'.debug_backtrace()[0]['line']);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->convertEntities($text);
|
||||
}
|
||||
|
||||
public function db_dump_array($write = 0)
|
||||
{
|
||||
error_log('DEPRECATED CALL: '.__METHOD__.', '.__FILE__.':'.__LINE__.', '.debug_backtrace()[0]['file'].':'.debug_backtrace()[0]['line']);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->dbDumpArray($write);
|
||||
}
|
||||
|
||||
public function db_check_pk_set()
|
||||
{
|
||||
error_log('DEPRECATED CALL: '.__METHOD__.', '.__FILE__.':'.__LINE__.', '.debug_backtrace()[0]['file'].':'.debug_backtrace()[0]['line']);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->dbCheckPkSet();
|
||||
}
|
||||
|
||||
public function db_reset_array($reset_pk = 0)
|
||||
{
|
||||
error_log('DEPRECATED CALL: '.__METHOD__.', '.__FILE__.':'.__LINE__.', '.debug_backtrace()[0]['file'].':'.debug_backtrace()[0]['line']);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->dbResetArray($reset_pk);
|
||||
}
|
||||
|
||||
public function db_delete($table_array = 0)
|
||||
{
|
||||
error_log('DEPRECATED CALL: '.__METHOD__.', '.__FILE__.':'.__LINE__.', '.debug_backtrace()[0]['file'].':'.debug_backtrace()[0]['line']);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->dbDelete($table_array);
|
||||
}
|
||||
|
||||
public function db_read($edit = 0, $table_array = 0)
|
||||
{
|
||||
error_log('DEPRECATED CALL: '.__METHOD__.', '.__FILE__.':'.__LINE__.', '.debug_backtrace()[0]['file'].':'.debug_backtrace()[0]['line']);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->dbRead($edit, $table_array);
|
||||
}
|
||||
|
||||
public function db_write($addslashes = 0, $table_array = 0)
|
||||
{
|
||||
error_log('DEPRECATED CALL: '.__METHOD__.', '.__FILE__.':'.__LINE__.', '.debug_backtrace()[0]['file'].':'.debug_backtrace()[0]['line']);
|
||||
trigger_error('Method '.__METHOD__.' is deprecated', E_USER_DEPRECATED);
|
||||
return $this->dbWrite($addslashes, $table_array);
|
||||
}
|
||||
} // end of class
|
||||
|
||||
// __END__
|
||||
@@ -1,446 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/*********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2003/04/09
|
||||
* SHORT DESCRIPTION:
|
||||
* 2018/3/23, the whole class system is transformed to namespaces
|
||||
* also all internal class calls are converted to camel case
|
||||
*
|
||||
* pgsql wrapper calls
|
||||
*
|
||||
* HISTORY:
|
||||
* 2008/04/16 (cs) wrapper for pg escape string
|
||||
* 2007/01/11 (cs) add prepare/execute for postgres
|
||||
* 2006/09/12 (cs) in case db_query retuns false, save the query and run the query through the send/get procedure to get correct error data from the db
|
||||
* 2006/06/26 (cs) added port for db connection
|
||||
* 2006/04/03 (cs) added meta data for table
|
||||
* 2005/07/25 (cs) removed the plural s remove, not needed and not 100% working
|
||||
* 2005/07/07 (cs) the default it is table_name _ id
|
||||
* 2005/01/19 (cs) changed the pgsql connect, so it dies if it can't connect to the DB
|
||||
* 2004/09/30 (cs) layout cleanup
|
||||
* /
|
||||
|
||||
* collection of PostgreSQL wrappers
|
||||
* REQUIRES 5.x PHP!!!
|
||||
*
|
||||
* pg_prepare
|
||||
* pg_execute
|
||||
* pg_num_rows
|
||||
* pg_num_fields
|
||||
* pg_field_name
|
||||
* pg_affected_rows (*)
|
||||
* pg_fetch_array
|
||||
* pg_query
|
||||
* pg_send_query
|
||||
* pg_get_result
|
||||
* pg_connection_busy
|
||||
* pg_close
|
||||
* pg_connect (*)
|
||||
* pg_meta_data
|
||||
* pg_escape_string
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CoreLibs\DB\SQL;
|
||||
|
||||
class PgSQL
|
||||
{
|
||||
private $last_error_query;
|
||||
private $dbh;
|
||||
|
||||
// METHOD: __construct
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : class constructor
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
// METHOD: __dbLastErrorQuery
|
||||
// WAS : _db_last_error_query
|
||||
// PARAMS: none
|
||||
// RETURN: true/false if last error is set
|
||||
// DESC : queries last error query and returns true or false if error was set
|
||||
public function __dbLastErrorQuery()
|
||||
{
|
||||
if ($this->last_error_query) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: __dbQuery
|
||||
// WAS : _db_query
|
||||
// PARAMS: query
|
||||
// RETURN: query result
|
||||
// DESC : wrapper for gp_query, catches error and stores it in class var
|
||||
public function __dbQuery($query)
|
||||
{
|
||||
$this->last_error_query = '';
|
||||
// read out the query status and save the query if needed
|
||||
$result = pg_query($this->dbh, $query);
|
||||
if (!$result) {
|
||||
$this->last_error_query = $query;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// METHOD: __dbSendQuery
|
||||
// WAS : _db_send_query
|
||||
// PARAMS: query
|
||||
// RETURN: true/false if query was sent successful
|
||||
// DESC : sends an async query to the server
|
||||
public function __dbSendQuery($query)
|
||||
{
|
||||
return pg_send_query($this->dbh, $query);
|
||||
}
|
||||
|
||||
// METHOD: __dbGetResult
|
||||
// WAS : _db_get_result
|
||||
// PARAMS: none
|
||||
// RETURN: resource handler
|
||||
// DESC : wrapper for pg_get_result
|
||||
public function __dbGetResult()
|
||||
{
|
||||
$this->last_error_query = '';
|
||||
$result = pg_get_result($this->dbh);
|
||||
if ($error = pg_result_error($result)) {
|
||||
$this->last_error_query = $error;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// METHOD: __dbClose
|
||||
// WAS : _db_close
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : wrapper for pg_close
|
||||
public function __dbClose()
|
||||
{
|
||||
if (is_resource($this->dbh)) {
|
||||
if (pg_connection_status($this->dbh) === PGSQL_CONNECTION_OK) {
|
||||
pg_close($this->dbh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: __dbPrepare
|
||||
// WAS : _db_prepare
|
||||
// PARAMS: prepare name, query
|
||||
// RETURN: prepared statement handler
|
||||
// DESC : wrapper for pg_prepare
|
||||
public function __dbPrepare($name, $query)
|
||||
{
|
||||
$result = pg_prepare($this->dbh, $name, $query);
|
||||
if (!$result) {
|
||||
$this->last_error_query = $query;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// METHOD: __dbExecute
|
||||
// WAS : _db_execute
|
||||
// PARAMS: prepare name, data for query
|
||||
// RETURN: returns status
|
||||
// DESC : wrapper for pg_execute for running a prepared statement
|
||||
public function __dbExecute($name, $data)
|
||||
{
|
||||
$result = pg_execute($this->dbh, $name, $data);
|
||||
if (!$result) {
|
||||
$this->last_error_query = $name;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// METHOD: __dbNumRows
|
||||
// WAS : _db_num_rows
|
||||
// PARAMS: cursor
|
||||
// RETURN: rows
|
||||
// DESC : wrapper for pg_num_rows
|
||||
public function __dbNumRows($cursor)
|
||||
{
|
||||
return pg_num_rows($cursor);
|
||||
}
|
||||
|
||||
// METHOD: __dbNumFields
|
||||
// WAS : _db_num_fields
|
||||
// PARAMS: cursor
|
||||
// RETURN: number for fields in query
|
||||
// DESC : wrapper for pg_num_fields
|
||||
public function __dbNumFields($cursor)
|
||||
{
|
||||
return pg_num_fields($cursor);
|
||||
}
|
||||
|
||||
// METHOD: __dbFieldName
|
||||
// WAS : _db_field_name
|
||||
// PARAMS: cursor, field position
|
||||
// RETURN: name of field
|
||||
// DESC : wrapper for pg_field_name
|
||||
public function __dbFieldName($cursor, $i)
|
||||
{
|
||||
return pg_field_name($cursor, $i);
|
||||
}
|
||||
|
||||
// METHOD: __dbFetchArray
|
||||
// WAS : _db_fetch_array
|
||||
// PARAMS: cursor, opt result type
|
||||
// RETURN: row
|
||||
// DESC : wrapper for pg_fetch_array
|
||||
public function __dbFetchArray($cursor, $result_type = '')
|
||||
{
|
||||
if ($result_type == true) {
|
||||
$result_type = PGSQL_ASSOC;
|
||||
}
|
||||
// result type is passed on as is [should be checked]
|
||||
if ($result_type) {
|
||||
return pg_fetch_array($cursor, null, $result_type);
|
||||
} else {
|
||||
return pg_fetch_array($cursor);
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: __dbResultType
|
||||
// PARAMS: true/false for ASSOC only or BOTH
|
||||
// RETURN: PGSQL assoc type
|
||||
// DESC : simple match up between assoc true/false
|
||||
public function __dbResultType($assoc_type)
|
||||
{
|
||||
if ($assoc_type == true) {
|
||||
return PGSQL_ASSOC;
|
||||
}
|
||||
return ''; // fallback to default
|
||||
}
|
||||
|
||||
// METHOD: __dbFetchAll
|
||||
// WAS : _db_fetch_all
|
||||
// PARAMS: cursor
|
||||
// RETURN: all rows as array
|
||||
// DESC : wrapper for pg_fetch_array
|
||||
public function __dbFetchAll($cursor)
|
||||
{
|
||||
return pg_fetch_all($cursor);
|
||||
}
|
||||
|
||||
// METHOD: __dbAffectedRows
|
||||
// WAS : _db_affected_rows
|
||||
// PARAMS: cursor
|
||||
// RETURN: number for rows
|
||||
// DESC : wrapper for pg_affected_rows
|
||||
public function __dbAffectedRows($cursor)
|
||||
{
|
||||
return pg_affected_rows($cursor);
|
||||
}
|
||||
|
||||
// METHOD: __dbInsertId
|
||||
// WAS : _db_insert_id
|
||||
// PARAMS: query, primary key name
|
||||
// RETURN: last insert primary key
|
||||
// DESC : reads the last inserted primary key for the query
|
||||
// if ther is no pk_name tries to auto built it from the table name
|
||||
// this only works if db schema is after "no plural names. and pk name is table name + _id
|
||||
// detects schema prefix in table name
|
||||
public function __dbInsertId($query, $pk_name)
|
||||
{
|
||||
// only if an insert has been done
|
||||
if (preg_match("/^insert /i", $query)) {
|
||||
$schema = '';
|
||||
// get table name from insert
|
||||
$array = explode(' ', $query);
|
||||
$_table = $array[2];
|
||||
// if there is a dot inside, we need to split
|
||||
if (strstr($_table, '.')) {
|
||||
list($schema, $table) = explode('.', $_table);
|
||||
} else {
|
||||
$table = $_table;
|
||||
}
|
||||
// no PK name given at all
|
||||
if (!$pk_name) {
|
||||
// if name is plurar, make it singular
|
||||
// if (preg_match("/.*s$/i", $table))
|
||||
// $table = substr($table, 0, -1);
|
||||
// set pk_name to "id"
|
||||
$pk_name = $table."_id";
|
||||
}
|
||||
$seq = (($schema) ? $schema.'.' : '').$table."_".$pk_name."_seq";
|
||||
$q = "SELECT CURRVAL('$seq') AS insert_id";
|
||||
// I have to do manually or I overwrite the original insert internal vars ...
|
||||
if ($q = $this->__dbQuery($q)) {
|
||||
list($id) = $this->__dbFetchArray($q);
|
||||
} else {
|
||||
$id = array(-1, $q);
|
||||
}
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: __dbPrimaryKey
|
||||
// WAS : _db_primary_key
|
||||
// PARAMS: table and optional schema
|
||||
// RETURN: primary key name OR false if not possible
|
||||
// DESC : queries database for the primary key name to this table in the selected schema
|
||||
public function __dbPrimaryKey($table, $schema = '')
|
||||
{
|
||||
if ($table) {
|
||||
// check if schema set is different from schema given, only needed if schema is not empty
|
||||
$table_prefix = '';
|
||||
if ($schema) {
|
||||
$q = "SHOW search_path";
|
||||
$cursor = $this->__dbQuery($q);
|
||||
$search_path = $this->__dbFetchArray($cursor)['search_path'];
|
||||
if ($search_path != $schema) {
|
||||
$table_prefix = $schema.'.';
|
||||
}
|
||||
}
|
||||
// read from table the PK name
|
||||
// faster primary key get
|
||||
$q = "SELECT pg_attribute.attname AS column_name, format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS type ";
|
||||
$q .= "FROM pg_index, pg_class, pg_attribute ";
|
||||
if ($schema) {
|
||||
$q .= ", pg_namespace ";
|
||||
}
|
||||
$q .= "WHERE ";
|
||||
// regclass translates the OID to the name
|
||||
$q .= "pg_class.oid = '".$table_prefix.$table."'::regclass AND ";
|
||||
$q .= "indrelid = pg_class.oid AND ";
|
||||
if ($schema) {
|
||||
$q .= "nspname = '".$schema."' AND ";
|
||||
$q .= "pg_class.relnamespace = pg_namespace.oid AND ";
|
||||
}
|
||||
$q .= "pg_attribute.attrelid = pg_class.oid AND ";
|
||||
$q .= "pg_attribute.attnum = any(pg_index.indkey) ";
|
||||
$q .= "AND indisprimary";
|
||||
$cursor = $this->__dbQuery($q);
|
||||
if ($cursor) {
|
||||
return $this->__dbFetchArray($cursor)['column_name'];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: __dbConnect
|
||||
// WAS : _db_connect
|
||||
// PARAMS: host name, user name, password, database name, optional port (defaults to default postgres port), optional ssl (default allow)
|
||||
// RETURN: database handler
|
||||
// DESC : wrapper for pg_connect, writes out failure to screen if error occurs (hidden var)
|
||||
public function __dbConnect($db_host, $db_user, $db_pass, $db_name, $db_port = 5432, $db_ssl = 'allow')
|
||||
{
|
||||
// to avoid empty db_port
|
||||
if (!$db_port) {
|
||||
$db_port = 5432;
|
||||
}
|
||||
$this->dbh = pg_connect("host=".$db_host." port=".$db_port." user=".$db_user." password=".$db_pass." dbname=".$db_name." sslmode=".$db_ssl);
|
||||
if (!$this->dbh) {
|
||||
die("<!-- Can't connect [host=".$db_host." port=".$db_port." user=".$db_user." password=XXXX dbname=".$db_name." sslmode=".$db_ssl."] //-->");
|
||||
}
|
||||
return $this->dbh;
|
||||
}
|
||||
|
||||
// METHOD: __dbPrintError
|
||||
// WAS : _db_print_error
|
||||
// PARAMS: database handler, cursor
|
||||
// RETURN: error string (HTML)
|
||||
// DESC : reads the last error for this cursor
|
||||
public function __dbPrintError($cursor = '')
|
||||
{
|
||||
// run the query again for the error result here
|
||||
if (!$cursor && $this->last_error_query) {
|
||||
pg_send_query($this->dbh, $this->last_error_query);
|
||||
$this->last_error_query = '';
|
||||
$cursor = pg_get_result($this->dbh);
|
||||
}
|
||||
if (pg_result_error($cursor)) {
|
||||
return "<span style=\"color: red;\"><b>-PostgreSQL-Error-></b> ".pg_result_error($cursor)."</span><br>";
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: __dbMetaData
|
||||
// WAS : _db_meta_data
|
||||
// PARAMS: table name
|
||||
// RETURN: array with table data
|
||||
// DESC : wrapper for pg_emta_data
|
||||
public function __dbMetaData($table)
|
||||
{
|
||||
// needs to prefixed with @ or it throws a warning on not existing table
|
||||
return @pg_meta_data($this->dbh, $table);
|
||||
}
|
||||
|
||||
// METHOD: __dbEscapeString
|
||||
// WAS : _db_escape_string
|
||||
// PARAMS: string
|
||||
// RETURN: escaped string for postgres
|
||||
// DESC : wrapper for pg_escape_string
|
||||
public function __dbEscapeString($string)
|
||||
{
|
||||
return pg_escape_string($this->dbh, (string)$string);
|
||||
}
|
||||
|
||||
// METHOD: __dbEscapeBytea
|
||||
// WAS : _db_escape_bytea
|
||||
// PARAMS: string
|
||||
// RETURN: escape bytes for postgres
|
||||
// DESC : wrapper for pg_escape_bytea
|
||||
public function __dbEscapeBytea($bytea)
|
||||
{
|
||||
return pg_escape_bytea($this->dbh, $bytea);
|
||||
}
|
||||
|
||||
// METHOD: __dbConnectionBusy
|
||||
// WAS : _db_connection_busy
|
||||
// PARAMS: none
|
||||
// RETURN: true/false for busy connection
|
||||
// DESC : wrapper for pg_connection_busy
|
||||
public function __dbConnectionBusy()
|
||||
{
|
||||
return pg_connection_busy($this->dbh);
|
||||
}
|
||||
|
||||
// METHOD: __dbVersion
|
||||
// WAS : _db_version
|
||||
// PARAMS: none
|
||||
// RETURN: databse version
|
||||
// DESC : wrapper for pg_version
|
||||
public function __dbVersion()
|
||||
{
|
||||
// array has client, protocol, server
|
||||
// we just need the server
|
||||
$v = pg_version($this->dbh);
|
||||
return $v['server'];
|
||||
}
|
||||
|
||||
// METHOD: __dbArrayParse
|
||||
// WAS : _db_array_parse
|
||||
// PARAMS: input text, output array [needed]
|
||||
// [internal] limit: are we at the end of the parse
|
||||
// [internal] offset: shift for {}
|
||||
// RETURN: array with the elements
|
||||
// DESC : postgresql array to php array
|
||||
public function __dbArrayParse($text, &$output, $limit = false, $offset = 1)
|
||||
{
|
||||
if (false === $limit) {
|
||||
$limit = strlen($text) - 1;
|
||||
$output = array();
|
||||
}
|
||||
if ('{}' != $text) {
|
||||
do {
|
||||
if ('{' != $text{$offset}) {
|
||||
preg_match("/(\\{?\"([^\"\\\\]|\\\\.)*\"|[^,{}]+)+([,}]+)/", $text, $match, 0, $offset);
|
||||
$offset += strlen($match[0]);
|
||||
$output[] = ('"' != $match[1]{0} ? $match[1] : stripcslashes(substr($match[1], 1, -1)));
|
||||
if ('},' == $match[3]) {
|
||||
return $offset;
|
||||
}
|
||||
} else {
|
||||
$offset = pg_array_parse($text, $output[], $limit, $offset + 1);
|
||||
}
|
||||
} while ($limit > $offset);
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
467
www/lib/CoreLibs/DB/SQL/PgSQL.php
Normal file
@@ -0,0 +1,467 @@
|
||||
<?php declare(strict_types=1);
|
||||
/*********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2003/04/09
|
||||
* SHORT DESCRIPTION:
|
||||
* 2018/3/23, the whole class system is transformed to namespaces
|
||||
* also all internal class calls are converted to camel case
|
||||
*
|
||||
* pgsql wrapper calls
|
||||
*
|
||||
* HISTORY:
|
||||
* 2008/04/16 (cs) wrapper for pg escape string
|
||||
* 2007/01/11 (cs) add prepare/execute for postgres
|
||||
* 2006/09/12 (cs) in case db_query retuns false, save the query and run the query through the send/get procedure to get correct error data from the db
|
||||
* 2006/06/26 (cs) added port for db connection
|
||||
* 2006/04/03 (cs) added meta data for table
|
||||
* 2005/07/25 (cs) removed the plural s remove, not needed and not 100% working
|
||||
* 2005/07/07 (cs) the default it is table_name _ id
|
||||
* 2005/01/19 (cs) changed the pgsql connect, so it dies if it can't connect to the DB
|
||||
* 2004/09/30 (cs) layout cleanup
|
||||
* /
|
||||
|
||||
* collection of PostgreSQL wrappers
|
||||
* REQUIRES 5.x PHP!!!
|
||||
*
|
||||
* pg_prepare
|
||||
* pg_execute
|
||||
* pg_num_rows
|
||||
* pg_num_fields
|
||||
* pg_field_name
|
||||
* pg_affected_rows (*)
|
||||
* pg_fetch_array
|
||||
* pg_query
|
||||
* pg_send_query
|
||||
* pg_get_result
|
||||
* pg_connection_busy
|
||||
* pg_close
|
||||
* pg_connect (*)
|
||||
* pg_meta_data
|
||||
* pg_escape_string
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CoreLibs\DB\SQL;
|
||||
|
||||
class PgSQL
|
||||
{
|
||||
private $last_error_query;
|
||||
private $dbh;
|
||||
|
||||
/**
|
||||
* class constructor, empty does nothing
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* queries last error query and returns true or false if error was set
|
||||
* @return bool true/false if last error is set
|
||||
*/
|
||||
public function __dbLastErrorQuery()
|
||||
{
|
||||
if ($this->last_error_query) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for gp_query, catches error and stores it in class var
|
||||
* @param string $query query string
|
||||
* @return resource|bool query result
|
||||
*/
|
||||
public function __dbQuery(string $query)
|
||||
{
|
||||
$this->last_error_query = '';
|
||||
// read out the query status and save the query if needed
|
||||
$result = pg_query($this->dbh, $query);
|
||||
if (!$result) {
|
||||
$this->last_error_query = $query;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* sends an async query to the server
|
||||
* @param string $query query string
|
||||
* @return bool true/false if query was sent successful
|
||||
*/
|
||||
public function __dbSendQuery(string $query): bool
|
||||
{
|
||||
return pg_send_query($this->dbh, $query);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_get_result
|
||||
* @return resource|bool resource handler or false for error
|
||||
*/
|
||||
public function __dbGetResult()
|
||||
{
|
||||
$this->last_error_query = '';
|
||||
$result = pg_get_result($this->dbh);
|
||||
if ($error = pg_result_error($result)) {
|
||||
$this->last_error_query = $error;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_close
|
||||
* @return void has no return
|
||||
*/
|
||||
public function __dbClose(): void
|
||||
{
|
||||
if (is_resource($this->dbh)) {
|
||||
if (pg_connection_status($this->dbh) === PGSQL_CONNECTION_OK) {
|
||||
pg_close($this->dbh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_prepare
|
||||
* @param string $name statement name
|
||||
* @param string $query query string
|
||||
* @return resource|bool prepare statement handler or false for error
|
||||
*/
|
||||
public function __dbPrepare(string $name, string $query)
|
||||
{
|
||||
$result = pg_prepare($this->dbh, $name, $query);
|
||||
if (!$result) {
|
||||
$this->last_error_query = $query;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_execute for running a prepared statement
|
||||
* @param string $name statement name
|
||||
* @param array $data data array
|
||||
* @return resource|bool returns status or false for error
|
||||
*/
|
||||
public function __dbExecute(string $name, array $data)
|
||||
{
|
||||
$result = pg_execute($this->dbh, $name, $data);
|
||||
if (!$result) {
|
||||
$this->last_error_query = $name;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_num_rows
|
||||
* @param resource $cursor cursor resource
|
||||
* @return int number of rows, -1 on error
|
||||
*/
|
||||
public function __dbNumRows($cursor): int
|
||||
{
|
||||
return pg_num_rows($cursor);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_num_fields
|
||||
* @param resource $cursor cursor resource
|
||||
* @return int number for fields in result, -1 on error
|
||||
*/
|
||||
public function __dbNumFields($cursor): int
|
||||
{
|
||||
return pg_num_fields($cursor);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_field_name
|
||||
* @param resource $cursor cursor resource
|
||||
* @param int $i field position
|
||||
* @return string|bool name or false on error
|
||||
*/
|
||||
public function __dbFieldName($cursor, $i)
|
||||
{
|
||||
return pg_field_name($cursor, $i);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_fetch_array
|
||||
* if through/true false, use __dbResultType(true)
|
||||
* @param resource $cursor cursor resource
|
||||
* @param int $result_type result type as int number
|
||||
* @return array|bool array result data or false on end/error
|
||||
*/
|
||||
public function __dbFetchArray($cursor, int $result_type = PGSQL_BOTH)
|
||||
{
|
||||
// result type is passed on as is [should be checked]
|
||||
return pg_fetch_array($cursor, null, $result_type);
|
||||
}
|
||||
|
||||
/**
|
||||
* simple match up between assoc true/false
|
||||
* @param bool $assoc_type true (default) for PGSQL_ASSOC, false for PGSQL_BOTH
|
||||
* @return int valid result type for fetch array
|
||||
*/
|
||||
public function __dbResultType(bool $assoc_type = true): int
|
||||
{
|
||||
if ($assoc_type == true) {
|
||||
return PGSQL_ASSOC;
|
||||
}
|
||||
// fallback to default
|
||||
return PGSQL_BOTH;
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_fetch_all
|
||||
* @param resource $cursor cursor resource
|
||||
* @return array|bool data array or false for end/error
|
||||
*/
|
||||
public function __dbFetchAll($cursor)
|
||||
{
|
||||
return pg_fetch_all($cursor);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_affected_rows
|
||||
* @param resource $cursor cursor resource
|
||||
* @return int affected rows, 0 for none
|
||||
*/
|
||||
public function __dbAffectedRows($cursor): int
|
||||
{
|
||||
return pg_affected_rows($cursor);
|
||||
}
|
||||
|
||||
/**
|
||||
* reads the last inserted primary key for the query
|
||||
* if there is no pk_name tries to auto built it from the table name
|
||||
* this only works if db schema is after "no plural names. and pk name is table name + _id
|
||||
* detects schema prefix in table name
|
||||
* @param string $query query string
|
||||
* @param string $pk_name primary key name, if '' then auto detect
|
||||
* @return string|int primary key value
|
||||
*/
|
||||
public function __dbInsertId(string $query, string $pk_name)
|
||||
{
|
||||
// only if an insert has been done
|
||||
if (preg_match("/^insert /i", $query)) {
|
||||
$schema = '';
|
||||
// get table name from insert
|
||||
$array = explode(' ', $query);
|
||||
$_table = $array[2];
|
||||
// if there is a dot inside, we need to split
|
||||
if (strstr($_table, '.')) {
|
||||
list($schema, $table) = explode('.', $_table);
|
||||
} else {
|
||||
$table = $_table;
|
||||
}
|
||||
// no PK name given at all
|
||||
if (!$pk_name) {
|
||||
// if name is plurar, make it singular
|
||||
// if (preg_match("/.*s$/i", $table))
|
||||
// $table = substr($table, 0, -1);
|
||||
// set pk_name to "id"
|
||||
$pk_name = $table."_id";
|
||||
}
|
||||
$seq = (($schema) ? $schema.'.' : '').$table."_".$pk_name."_seq";
|
||||
$q = "SELECT CURRVAL('$seq') AS insert_id";
|
||||
// I have to do manually or I overwrite the original insert internal vars ...
|
||||
if ($q = $this->__dbQuery($q)) {
|
||||
list($id) = $this->__dbFetchArray($q);
|
||||
} else {
|
||||
$id = array(-1, $q);
|
||||
}
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* queries database for the primary key name to this table in the selected schema
|
||||
* @param string $table table name
|
||||
* @param string $schema optional schema name, '' for default
|
||||
* @return string|bool primary key name or false if not found
|
||||
*/
|
||||
public function __dbPrimaryKey(string $table, string $schema = '')
|
||||
{
|
||||
if ($table) {
|
||||
// check if schema set is different from schema given, only needed if schema is not empty
|
||||
$table_prefix = '';
|
||||
if ($schema) {
|
||||
$q = "SHOW search_path";
|
||||
$cursor = $this->__dbQuery($q);
|
||||
$search_path = $this->__dbFetchArray($cursor)['search_path'];
|
||||
if ($search_path != $schema) {
|
||||
$table_prefix = $schema.'.';
|
||||
}
|
||||
}
|
||||
// read from table the PK name
|
||||
// faster primary key get
|
||||
$q = "SELECT pg_attribute.attname AS column_name, format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS type ";
|
||||
$q .= "FROM pg_index, pg_class, pg_attribute ";
|
||||
if ($schema) {
|
||||
$q .= ", pg_namespace ";
|
||||
}
|
||||
$q .= "WHERE ";
|
||||
// regclass translates the OID to the name
|
||||
$q .= "pg_class.oid = '".$table_prefix.$table."'::regclass AND ";
|
||||
$q .= "indrelid = pg_class.oid AND ";
|
||||
if ($schema) {
|
||||
$q .= "nspname = '".$schema."' AND ";
|
||||
$q .= "pg_class.relnamespace = pg_namespace.oid AND ";
|
||||
}
|
||||
$q .= "pg_attribute.attrelid = pg_class.oid AND ";
|
||||
$q .= "pg_attribute.attnum = any(pg_index.indkey) ";
|
||||
$q .= "AND indisprimary";
|
||||
$cursor = $this->__dbQuery($q);
|
||||
if ($cursor) {
|
||||
return $this->__dbFetchArray($cursor)['column_name'];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_connect, writes out failure to screen if error occurs (hidden var)
|
||||
* @param string $db_host host name
|
||||
* @param string $db_user user name
|
||||
* @param string $db_pass password
|
||||
* @param string $db_name databse name
|
||||
* @param integer $db_port port (int, 5432 is default)
|
||||
* @param string $db_ssl SSL (allow is default)
|
||||
* @return ?resource db handler resource or null on error
|
||||
*/
|
||||
public function __dbConnect(string $db_host, string $db_user, string $db_pass, string $db_name, int $db_port = 5432, string $db_ssl = 'allow')
|
||||
{
|
||||
// to avoid empty db_port
|
||||
if (!$db_port) {
|
||||
$db_port = 5432;
|
||||
}
|
||||
$this->dbh = pg_connect("host=".$db_host." port=".$db_port." user=".$db_user." password=".$db_pass." dbname=".$db_name." sslmode=".$db_ssl);
|
||||
if (!$this->dbh) {
|
||||
die("<!-- Can't connect [host=".$db_host." port=".$db_port." user=".$db_user." password=XXXX dbname=".$db_name." sslmode=".$db_ssl."] //-->");
|
||||
return null;
|
||||
}
|
||||
return $this->dbh;
|
||||
}
|
||||
|
||||
/**
|
||||
* reads the last error for this cursor and returns
|
||||
* html formatted string with error name
|
||||
* @param ?resource $cursor cursor resource or null
|
||||
* @return string error string
|
||||
*/
|
||||
public function __dbPrintError($cursor = null): string
|
||||
{
|
||||
// run the query again for the error result here
|
||||
if (!$cursor && $this->last_error_query) {
|
||||
pg_send_query($this->dbh, $this->last_error_query);
|
||||
$this->last_error_query = '';
|
||||
$cursor = pg_get_result($this->dbh);
|
||||
}
|
||||
if ($cursor && pg_result_error($cursor)) {
|
||||
return "<span style=\"color: red;\"><b>-PostgreSQL-Error-></b> ".pg_result_error($cursor)."</span><br>";
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_meta_data
|
||||
* @param string $table table name
|
||||
* @param bool $extended show extended info (default false)
|
||||
* @return array|bool array data for the table info or false on error
|
||||
*/
|
||||
public function __dbMetaData(string $table, $extended = false)
|
||||
{
|
||||
// needs to prefixed with @ or it throws a warning on not existing table
|
||||
return @pg_meta_data($this->dbh, $table, $extended);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_escape_string
|
||||
* @param string|int|float|bool $string any string/int/float/bool
|
||||
* @return string excaped string
|
||||
*/
|
||||
public function __dbEscapeString($string): string
|
||||
{
|
||||
return pg_escape_string($this->dbh, (string)$string);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_escape_literal
|
||||
* difference to escape string is that this one adds quotes ('') around
|
||||
* the string too
|
||||
* @param string|int|float|bool $string any string/int/float/bool
|
||||
* @return string excaped string including quites
|
||||
*/
|
||||
public function __dbEscapeLiteral($string): string
|
||||
{
|
||||
return pg_escape_string($this->dbh, (string)$string);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_escape_byte
|
||||
* @param string $bytea bytea data stream
|
||||
* @return string escaped bytea string
|
||||
*/
|
||||
public function __dbEscapeBytea($bytea): string
|
||||
{
|
||||
return pg_escape_bytea($this->dbh, $bytea);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_connection_busy
|
||||
* @return bool true/false for busy connection
|
||||
*/
|
||||
public function __dbConnectionBusy(): bool
|
||||
{
|
||||
return pg_connection_busy($this->dbh);
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper for pg_version
|
||||
* Note: this only returns server version
|
||||
* not connection version OR client version
|
||||
* @return string version string
|
||||
*/
|
||||
public function __dbVersion(): string
|
||||
{
|
||||
// array has client, protocol, server
|
||||
// we just need the server
|
||||
$v = pg_version($this->dbh);
|
||||
return $v['server'];
|
||||
}
|
||||
|
||||
/**
|
||||
* postgresql array to php array
|
||||
* @param string $text array text from PostgreSQL
|
||||
* @param array $output (internal) recursive pass on for nested arrays
|
||||
* @param bool|int $limit (internal) max limit to not overshoot the end, start with false
|
||||
* @param integer $offset (internal) shift offset for {}
|
||||
* @return array|int converted PHP array, interal recusrive int position
|
||||
*/
|
||||
public function __dbArrayParse($text, &$output, $limit = false, $offset = 1)
|
||||
{
|
||||
if (false === $limit) {
|
||||
$limit = strlen($text) - 1;
|
||||
$output = array();
|
||||
}
|
||||
if ('{}' != $text) {
|
||||
do {
|
||||
if ('{' != $text[$offset]) {
|
||||
preg_match("/(\\{?\"([^\"\\\\]|\\\\.)*\"|[^,{}]+)+([,}]+)/", $text, $match, 0, $offset);
|
||||
$offset += strlen($match[0]);
|
||||
$output[] = ('"' != $match[1][0] ? $match[1] : stripcslashes(substr($match[1], 1, -1)));
|
||||
if ('},' == $match[3]) {
|
||||
return $offset;
|
||||
}
|
||||
} else {
|
||||
$offset = $this->__dbArrayParse($text, $output, $limit, $offset + 1);
|
||||
}
|
||||
} while ($limit > $offset);
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
@@ -24,23 +24,25 @@ namespace CoreLibs\Language\Core;
|
||||
|
||||
// Preloads entire file in memory first, then creates a StringReader
|
||||
// over it (it assumes knowledge of StringReader internals)
|
||||
class CachedFileReader extends CoreLibs\Language\Core\StringReader
|
||||
class CachedFileReader extends \CoreLibs\Language\Core\StringReader
|
||||
{
|
||||
public $error = 0;
|
||||
public $_str = '';
|
||||
|
||||
public function __construct($filename)
|
||||
{
|
||||
parent::__construct();
|
||||
if (file_exists($filename)) {
|
||||
$length = filesize($filename);
|
||||
$fd = fopen($filename, 'rb');
|
||||
|
||||
if (!$fd) {
|
||||
$this->error = 3; // Cannot read file, probably permissions
|
||||
return false;
|
||||
}
|
||||
$this->_str = fread($fd, $length);
|
||||
fclose($fd);
|
||||
} else {
|
||||
$this->error = 2; // File doesn't exist
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -27,7 +27,12 @@ class FileReader
|
||||
public $fr_pos;
|
||||
public $fr_fd;
|
||||
public $fr_length;
|
||||
public $error = 0;
|
||||
|
||||
/**
|
||||
* file read constructor
|
||||
* @param string $filename file name to load
|
||||
*/
|
||||
public function __construct($filename)
|
||||
{
|
||||
if (file_exists($filename)) {
|
||||
@@ -36,14 +41,17 @@ class FileReader
|
||||
$this->fr_fd = fopen($filename, 'rb');
|
||||
if (!$this->fr_fd) {
|
||||
$this->error = 3; // Cannot read file, probably permissions
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$this->error = 2; // File doesn't exist
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* read byte data length
|
||||
* @param int $bytes how many bytes to read
|
||||
* @return string read data as string
|
||||
*/
|
||||
public function read($bytes)
|
||||
{
|
||||
if ($bytes) {
|
||||
@@ -65,6 +73,11 @@ class FileReader
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* seek to a position in the file
|
||||
* @param int $pos position where to go to
|
||||
* @return int file position after seek done
|
||||
*/
|
||||
public function seekto($pos)
|
||||
{
|
||||
fseek($this->fr_fd, $pos);
|
||||
@@ -72,17 +85,29 @@ class FileReader
|
||||
return $this->fr_pos;
|
||||
}
|
||||
|
||||
/**
|
||||
* get current position in file
|
||||
* @return int current position in bytes
|
||||
*/
|
||||
public function currentpos()
|
||||
{
|
||||
return $this->fr_pos;
|
||||
}
|
||||
|
||||
/**
|
||||
* file length/size
|
||||
* @return int file size in bytes
|
||||
*/
|
||||
public function length()
|
||||
{
|
||||
return $this->fr_length;
|
||||
}
|
||||
|
||||
public function close()
|
||||
/**
|
||||
* close open file handler
|
||||
* @return void has no return
|
||||
*/
|
||||
public function close(): void
|
||||
{
|
||||
fclose($this->fr_fd);
|
||||
}
|
||||
@@ -39,7 +39,7 @@ class GetTextReader
|
||||
// public:
|
||||
public $error = 0; // public variable that holds error code (0 if no error)
|
||||
|
||||
//private:
|
||||
// private:
|
||||
private $BYTEORDER = 0; // 0: low endian, 1: big endian
|
||||
private $STREAM = null;
|
||||
private $short_circuit = false;
|
||||
@@ -50,7 +50,7 @@ class GetTextReader
|
||||
private $total = 0; // total string count
|
||||
private $table_originals = null; // table for original strings (offsets)
|
||||
private $table_translations = null; // table for translated strings (offsets)
|
||||
private $cache_translations = array (); // original -> translation mapping
|
||||
private $cache_translations = array(); // original -> translation mapping
|
||||
|
||||
|
||||
/* Methods */
|
||||
@@ -60,7 +60,7 @@ class GetTextReader
|
||||
* Reads a 32bit Integer from the Stream
|
||||
*
|
||||
* @access private
|
||||
* @return Integer from the Stream
|
||||
* @return int Integer from the Stream
|
||||
*/
|
||||
private function readint()
|
||||
{
|
||||
@@ -75,6 +75,11 @@ class GetTextReader
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* read bytes
|
||||
* @param int $bytes byte length to read
|
||||
* @return string return data, possible string
|
||||
*/
|
||||
public function read($bytes)
|
||||
{
|
||||
return $this->STREAM->read($bytes);
|
||||
@@ -83,8 +88,8 @@ class GetTextReader
|
||||
/**
|
||||
* Reads an array of Integers from the Stream
|
||||
*
|
||||
* @param int count How many elements should be read
|
||||
* @return Array of Integers
|
||||
* @param int $count How many elements should be read
|
||||
* @return array Array of Integers
|
||||
*/
|
||||
public function readintarray($count)
|
||||
{
|
||||
@@ -100,13 +105,13 @@ class GetTextReader
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param object Reader the StreamReader object
|
||||
* @param boolean enable_cache Enable or disable caching of strings (default on)
|
||||
* @param object $Reader the StreamReader object
|
||||
* @param bool $enable_cache Enable or disable caching of strings (default on)
|
||||
*/
|
||||
public function __construct($Reader, $enable_cache = true)
|
||||
{
|
||||
// If there isn't a StreamReader, turn on short circuit mode.
|
||||
if (!$Reader || isset($Reader->error)) {
|
||||
if (!$Reader || $Reader->error) {
|
||||
$this->short_circuit = true;
|
||||
return;
|
||||
}
|
||||
@@ -125,7 +130,6 @@ class GetTextReader
|
||||
$this->BYTEORDER = 0;
|
||||
} else {
|
||||
$this->error = 1; // not MO file
|
||||
return false;
|
||||
}
|
||||
|
||||
// FIXME: Do we care about revision? We should.
|
||||
@@ -162,7 +166,7 @@ class GetTextReader
|
||||
}
|
||||
|
||||
if ($this->enable_cache) {
|
||||
$this->cache_translations = array ();
|
||||
$this->cache_translations = array();
|
||||
/* read all strings in the cache */
|
||||
for ($i = 0; $i < $this->total; $i++) {
|
||||
$this->STREAM->seekto($this->table_originals[$i * 2 + 2]);
|
||||
@@ -178,8 +182,8 @@ class GetTextReader
|
||||
* Returns a string from the "originals" table
|
||||
*
|
||||
* @access private
|
||||
* @param int num Offset number of original string
|
||||
* @return string Requested string if found, otherwise ''
|
||||
* @param int $num Offset number of original string
|
||||
* @return string Requested string if found, otherwise ''
|
||||
*/
|
||||
private function get_original_string($num)
|
||||
{
|
||||
@@ -197,8 +201,8 @@ class GetTextReader
|
||||
* Returns a string from the "translations" table
|
||||
*
|
||||
* @access private
|
||||
* @param int num Offset number of original string
|
||||
* @return string Requested string if found, otherwise ''
|
||||
* @param int $num Offset number of original string
|
||||
* @return string Requested string if found, otherwise ''
|
||||
*/
|
||||
private function get_translation_string($num)
|
||||
{
|
||||
@@ -216,10 +220,10 @@ class GetTextReader
|
||||
* Binary search for string
|
||||
*
|
||||
* @access private
|
||||
* @param string string
|
||||
* @param int start (internally used in recursive function)
|
||||
* @param int end (internally used in recursive function)
|
||||
* @return int string number (offset in originals table)
|
||||
* @param string $string string to find
|
||||
* @param int $start (internally used in recursive function)
|
||||
* @param int $end (internally used in recursive function)
|
||||
* @return int|string|float (offset in originals table)
|
||||
*/
|
||||
private function find_string($string, $start = -1, $end = -1)
|
||||
{
|
||||
@@ -260,8 +264,8 @@ class GetTextReader
|
||||
* Translates a string
|
||||
*
|
||||
* @access public
|
||||
* @param string string to be translated
|
||||
* @return string translated string (or original, if not found)
|
||||
* @param string $string to be translated
|
||||
* @return string translated string (or original, if not found)
|
||||
*/
|
||||
public function translate($string)
|
||||
{
|
||||
@@ -292,7 +296,8 @@ class GetTextReader
|
||||
* Sanitize plural form expression for use in PHP eval call.
|
||||
*
|
||||
* @access private
|
||||
* @return string sanitized plural form expression
|
||||
* @param string $expr an expression to match
|
||||
* @return string sanitized plural form expression
|
||||
*/
|
||||
private function sanitize_plural_expression($expr)
|
||||
{
|
||||
@@ -328,7 +333,8 @@ class GetTextReader
|
||||
* Parse full PO header and extract only plural forms line.
|
||||
*
|
||||
* @access private
|
||||
* @return string verbatim plural form header field
|
||||
* @param string $header header search in plurals
|
||||
* @return string verbatim plural form header field
|
||||
*/
|
||||
private function extract_plural_forms_header_from_po_header($header)
|
||||
{
|
||||
@@ -369,8 +375,8 @@ class GetTextReader
|
||||
* Detects which plural form to take
|
||||
*
|
||||
* @access private
|
||||
* @param n count
|
||||
* @return int array index of the right plural form
|
||||
* @param string $n count
|
||||
* @return int array index of the right plural form
|
||||
*/
|
||||
private function select_string($n)
|
||||
{
|
||||
@@ -393,10 +399,10 @@ class GetTextReader
|
||||
* Plural version of gettext
|
||||
*
|
||||
* @access public
|
||||
* @param string single
|
||||
* @param string plural
|
||||
* @param string number
|
||||
* @return translated plural form
|
||||
* @param string $single
|
||||
* @param string $plural
|
||||
* @param string $number
|
||||
* @return string plural form
|
||||
*/
|
||||
public function ngettext($single, $plural, $number)
|
||||
{
|
||||
@@ -434,6 +440,12 @@ class GetTextReader
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* p get text
|
||||
* @param string $context [description]
|
||||
* @param string $msgid [description]
|
||||
* @return string [description]
|
||||
*/
|
||||
public function pgettext($context, $msgid)
|
||||
{
|
||||
$key = $context.chr(4).$msgid;
|
||||
@@ -445,6 +457,14 @@ class GetTextReader
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* np get text
|
||||
* @param string $context [description]
|
||||
* @param string $singular [description]
|
||||
* @param string $plural [description]
|
||||
* @param string $number [description]
|
||||
* @return string [description]
|
||||
*/
|
||||
public function npgettext($context, $singular, $plural, $number)
|
||||
{
|
||||
$key = $context.chr(4).$singular;
|
||||
@@ -26,25 +26,47 @@ namespace CoreLibs\Language\Core;
|
||||
// seek is essential, and it should be byte stream
|
||||
class StreamReader
|
||||
{
|
||||
// should return a string [FIXME: perhaps return array of bytes?]
|
||||
/**
|
||||
* constructor, empty
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
/**
|
||||
* should return a string [FIXME: perhaps return array of bytes?]
|
||||
* @param int $bytes bytes to read
|
||||
* @return bool dummy false
|
||||
*/
|
||||
public function read($bytes)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// should return new position
|
||||
/**
|
||||
* should return new position
|
||||
* @param int $position seek to position
|
||||
* @return bool dummy false
|
||||
*/
|
||||
public function seekto($position)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// returns current position
|
||||
/**
|
||||
* returns current position
|
||||
* @return bool dummy false
|
||||
*/
|
||||
public function currentpos()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// returns length of entire stream (limit for seekto()s)
|
||||
/**
|
||||
* returns length of entire stream (limit for seekto()s)
|
||||
* @return bool dummy false
|
||||
*/
|
||||
public function length()
|
||||
{
|
||||
return false;
|
||||
@@ -27,12 +27,21 @@ class StringReader
|
||||
public $sr_pos;
|
||||
public $sr_str;
|
||||
|
||||
/**
|
||||
* constructor for string reader
|
||||
* @param string $str basic string
|
||||
*/
|
||||
public function __construct($str = '')
|
||||
{
|
||||
$this->sr_str = $str;
|
||||
$this->sr_pos = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* read bytes in string
|
||||
* @param int $bytes bytes to read in string
|
||||
* @return string data read in length of bytes as string
|
||||
*/
|
||||
public function read($bytes)
|
||||
{
|
||||
$data = substr($this->sr_str, $this->sr_pos, $bytes);
|
||||
@@ -44,6 +53,11 @@ class StringReader
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* go to position in string
|
||||
* @param int $pos position in string
|
||||
* @return int new position in string after seek
|
||||
*/
|
||||
public function seekto($pos)
|
||||
{
|
||||
$this->sr_pos = $pos;
|
||||
@@ -53,11 +67,19 @@ class StringReader
|
||||
return $this->sr_pos;
|
||||
}
|
||||
|
||||
/**
|
||||
* get current position in string
|
||||
* @return int position in string
|
||||
*/
|
||||
public function currentpos()
|
||||
{
|
||||
return $this->sr_pos;
|
||||
}
|
||||
|
||||
/**
|
||||
* get length of string
|
||||
* @return int return length of assigned string
|
||||
*/
|
||||
public function length()
|
||||
{
|
||||
return strlen($this->sr_str);
|
||||
@@ -35,8 +35,15 @@ class L10n extends \CoreLibs\Basic
|
||||
private $input;
|
||||
private $l10n;
|
||||
|
||||
public function __construct(string $lang = '', string $path = '')
|
||||
/**
|
||||
* class constructor call for language getstring
|
||||
* @param string $lang language name (optional), fallback is en
|
||||
* @param string $path path, if empty fallback on default internal path
|
||||
* @param int|integer $set_control_flag control flags for Basic class set/get checks
|
||||
*/
|
||||
public function __construct(string $lang = '', string $path = '', int $set_control_flag = 0)
|
||||
{
|
||||
parent::__construct($set_control_flag);
|
||||
if (!$lang) {
|
||||
$this->lang = 'en';
|
||||
} else {
|
||||
@@ -59,7 +66,12 @@ class L10n extends \CoreLibs\Basic
|
||||
$this->l10n = new GetTextReader($this->input);
|
||||
}
|
||||
|
||||
// reloads the mofile, if the location of the lang file changes
|
||||
/**
|
||||
* reloads the mofile, if the location of the lang file changes
|
||||
* @param string $lang language to reload data
|
||||
* @param string $path optional path, if not set fallback on internal
|
||||
* @return bool successfull reload true/false
|
||||
*/
|
||||
public function l10nReloadMOfile(string $lang, string $path = ''): bool
|
||||
{
|
||||
$success = false;
|
||||
@@ -89,27 +101,52 @@ class L10n extends \CoreLibs\Basic
|
||||
return $success;
|
||||
}
|
||||
|
||||
public function __($text)
|
||||
/**
|
||||
* translates a string and returns translated text
|
||||
* @param string $text text to translate
|
||||
* @return string translated text
|
||||
*/
|
||||
public function __($text): string
|
||||
{
|
||||
return $this->l10n->translate($text);
|
||||
}
|
||||
|
||||
public function __e($text)
|
||||
/**
|
||||
* prints translated string out to the screen
|
||||
* @param string $text text to translate
|
||||
* @return void has no return
|
||||
*/
|
||||
public function __e($text): void
|
||||
{
|
||||
echo $this->l10n->translate($text);
|
||||
}
|
||||
|
||||
// Return the plural form.
|
||||
/**
|
||||
* Return the plural form.
|
||||
* @param string $single string for single word
|
||||
* @param string $plural string for plural word
|
||||
* @param string $number number value
|
||||
* @return string translated plural string
|
||||
*/
|
||||
public function __ngettext($single, $plural, $number)
|
||||
{
|
||||
return $this->l10n->ngettext($single, $plural, $number);
|
||||
}
|
||||
|
||||
/**
|
||||
* get current set language
|
||||
* @return string current set language string
|
||||
*/
|
||||
public function __getLang()
|
||||
{
|
||||
return $this->lang;
|
||||
}
|
||||
|
||||
/**
|
||||
* get current set mo file
|
||||
* @return string current set mo language file
|
||||
*/
|
||||
public function __getMoFile()
|
||||
{
|
||||
return $this->mofile;
|
||||
@@ -35,7 +35,7 @@
|
||||
* 'order_by' => 'order bY' string for drop_down_db(_input) if no query given but fields set
|
||||
* 'query' => for drop_down_db/array if no outer query given
|
||||
* 'preset' => value to preset when array is unset (available for all types)
|
||||
* 'element_list' => array ( 'true', 'false') - MUST (!) be set for binary
|
||||
* 'element_list' => array( 'true', 'false') - MUST (!) be set for binary
|
||||
* 'length' => 'nr' - only available for 'text' (maxlength)
|
||||
* 'size' => 'nr' - only available for 'text' (size of input field)
|
||||
* 'rows' => 'nr' - only available for 'textarea'
|
||||
@@ -69,7 +69,7 @@
|
||||
* array(
|
||||
* 'name' => 'name_of_col_in_query' - col from the query that should be shown
|
||||
* 'before_value' => 'text' - if set this text will be put in FRONT of the value from the col
|
||||
* 'binary' => array ('true','false') - for 1/0 fields in DB changes it int human readable format
|
||||
* 'binary' => array('true','false') - for 1/0 fields in DB changes it int human readable format
|
||||
* ),
|
||||
* ...
|
||||
* ),
|
||||
@@ -173,7 +173,7 @@
|
||||
* only a certain field list. If where is filled out and used in combination with insert (not same_db)
|
||||
* then this key will be SET when inserted into the DB !!!
|
||||
* 2003-04-09: added open_dir for download of file (URL), save_dir is only for upload (absolute path)
|
||||
* added require once for class_db_array_io.inc
|
||||
* added require once for class_db_array_io.php
|
||||
* 2003-03-31: added a file upload module (type==file)
|
||||
* 2003-03-20: added form_procedure_new, etc functions so for default calls it is easier to write
|
||||
* also added security levels to all functions where it is needed
|
||||
@@ -215,7 +215,7 @@ namespace CoreLibs\Output\Form;
|
||||
class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
{
|
||||
// rest
|
||||
public $field_array = array (); // for the load statetment describes which elements from the load query should be shown and i which format
|
||||
public $field_array = array(); // for the load statetment describes which elements from the load query should be shown and i which format
|
||||
public $load_query; // the query needed for loading a data set (one row in the table)
|
||||
public $col_name; // the name of the columen (before _<type>) [used for order button]
|
||||
public $yes; // the yes flag that triggers the template to show ALL and not only new/load
|
||||
@@ -224,8 +224,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
public $warning; // warning flag, for information (saved, loaded, etc)
|
||||
public $archive_pk_name; // the pk name for the load select form
|
||||
private $int_pk_name; // primary key, only internal usage
|
||||
public $reference_array = array (); // reference arrays -> stored in $this->reference_array[$table_name]=>array();
|
||||
public $reference_array = array(); // reference arrays -> stored in $this->reference_array[$table_name]=>array();
|
||||
public $element_list; // element list for elements next to each other as a special sub group
|
||||
public $table_array = array();
|
||||
public $my_page_name; // the name of the page without .php extension
|
||||
public $mobile_phone = false;
|
||||
// buttons and checkboxes
|
||||
@@ -241,15 +242,19 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
public $security_level;
|
||||
// layout publics
|
||||
public $table_width;
|
||||
// language
|
||||
public $l;
|
||||
|
||||
// now some default error msgs (english)
|
||||
public $language_array = array ();
|
||||
public $language_array = array();
|
||||
|
||||
// METHOD: constructor
|
||||
// PARAMS: $db_config -> connect to DB
|
||||
// $lang -> language code ('en', 'ja', etc)
|
||||
// $table_width -> width of table
|
||||
// $set_control_flag -> basic class set/get variable error flags
|
||||
/**
|
||||
* construct form generator
|
||||
* @param array $db_config db config array
|
||||
* @param string $lang interface language
|
||||
* @param int|integer $table_width table/div width (default 750)
|
||||
* @param int|integer $set_control_flag basic class set/get variable error flags
|
||||
*/
|
||||
public function __construct(array $db_config, string $lang, int $table_width = 750, int $set_control_flag = 0)
|
||||
{
|
||||
$this->my_page_name = $this->getPageName(1);
|
||||
@@ -260,20 +265,20 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// WARNING: auto spl load does not work with this as it is an array and not a function/object
|
||||
// check if this is the old path or the new path
|
||||
if (is_dir(TABLE_ARRAYS)) {
|
||||
if (is_file(TABLE_ARRAYS.'array_'.$this->my_page_name.'.inc')) {
|
||||
include(TABLE_ARRAYS.'array_'.$this->my_page_name.'.inc');
|
||||
if (is_file(TABLE_ARRAYS.'array_'.$this->my_page_name.'.php')) {
|
||||
include(TABLE_ARRAYS.'array_'.$this->my_page_name.'.php');
|
||||
}
|
||||
} else {
|
||||
if (is_file(BASE.INCLUDES.TABLE_ARRAYS.'array_'.$this->my_page_name.'.inc')) {
|
||||
include(BASE.INCLUDES.TABLE_ARRAYS.'array_'.$this->my_page_name.'.inc');
|
||||
if (is_file(BASE.INCLUDES.TABLE_ARRAYS.'array_'.$this->my_page_name.'.php')) {
|
||||
include(BASE.INCLUDES.TABLE_ARRAYS.'array_'.$this->my_page_name.'.php');
|
||||
}
|
||||
}
|
||||
if (isset(${$this->my_page_name}) && is_array(${$this->my_page_name})) {
|
||||
$config_array = ${$this->my_page_name};
|
||||
} else {
|
||||
// dummy created
|
||||
$config_array = array (
|
||||
'table_array' => array (),
|
||||
$config_array = array(
|
||||
'table_array' => array(),
|
||||
'table_name' => '',
|
||||
);
|
||||
}
|
||||
@@ -321,7 +326,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if (!isset($config_array['security_level']) || !is_array($config_array['security_level']) ||
|
||||
(is_array($config_array['security_level']) && count($config_array['security_level']) < 4)
|
||||
) {
|
||||
$config_array['security_level'] = array (
|
||||
$config_array['security_level'] = array(
|
||||
'load' => 100,
|
||||
'new' => 100,
|
||||
'save' => 100,
|
||||
@@ -330,21 +335,27 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
// write array to class var
|
||||
$this->security_level = $config_array['security_level'];
|
||||
|
||||
// internal
|
||||
$this->class_info['form'] = array(
|
||||
'class_name' => 'Form create',
|
||||
'class_version' => '3.0.0',
|
||||
'class_created' => '2002-10-22',
|
||||
'class_author' => 'Clemens Schwaighofer'
|
||||
);
|
||||
}
|
||||
|
||||
// dumps all values into output (for error msg)
|
||||
/**
|
||||
* deconstructor
|
||||
* writes out error msg to global var
|
||||
* closes db connectio
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
// close DB connection
|
||||
parent::__destruct();
|
||||
}
|
||||
|
||||
/**
|
||||
* dumps all values into output (for error msg)
|
||||
* @return string full table array data output as string html formatted
|
||||
*/
|
||||
public function formDumpTableArray()
|
||||
{
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
$string = '<b>TABLE ARRAY DUMP:</b> '.$this->table_name.'<br>';
|
||||
@@ -354,49 +365,42 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
return $string;
|
||||
}
|
||||
|
||||
// dekonstruktor
|
||||
// writes out error msg to global var
|
||||
// closes db connection
|
||||
public function __destruct()
|
||||
{
|
||||
// close DB connection
|
||||
parent::__destruct();
|
||||
}
|
||||
|
||||
// METHOD: formGetColNameFromKey
|
||||
// WAS : form_get_col_name_from_key
|
||||
// PARAMS: $want_key: the key where you want the data from
|
||||
// $key_value: if set searches for special right value
|
||||
// RETURN: the value of the $want_key array field
|
||||
// works only with fields that appear only ONCE
|
||||
// if multiple gets only FIRST
|
||||
public function formGetColNameFromKey($want_key, $key_value = '')
|
||||
/**
|
||||
* the value of the $want_key array field
|
||||
* works only with fields that appear only ONCE
|
||||
* if multiple gets only FIRST
|
||||
* @param string $want_key key to search for
|
||||
* @param string|null $key_value value to match to (optional)
|
||||
* @return string|null returns key found or empty string
|
||||
*/
|
||||
public function formGetColNameFromKey(string $want_key, ?string $key_value = null): ?string
|
||||
{
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $key => $value) {
|
||||
if (isset($value[$want_key]) && !isset($key_value)) {
|
||||
if (isset($value[$want_key]) && !$key_value) {
|
||||
return $key;
|
||||
} elseif (isset($value[$want_key]) && $value[$want_key] == $key_value && isset($key_value)) {
|
||||
} elseif (isset($value[$want_key]) && $value[$want_key] == $key_value && $key_value) {
|
||||
return $key;
|
||||
}
|
||||
}
|
||||
// return nothing on nothing
|
||||
return '';
|
||||
return null;
|
||||
}
|
||||
|
||||
// METHOD: formGetColNameArrayFromKey
|
||||
// WAS : form_get_col_name_array_from_key
|
||||
// PARAMS: $want_key: the key where u want the data from
|
||||
// $key_value: if set searches for special right value
|
||||
// RETURN: array of fields
|
||||
public function formGetColNameArrayFromKey($want_key, $key_value = '')
|
||||
/**
|
||||
* array of fields
|
||||
* @param string $want_key the key where you want the data from
|
||||
* @param string|null $key_value if set searches for special right value
|
||||
* @return array found key fields
|
||||
*/
|
||||
public function formGetColNameArrayFromKey(string $want_key, ?string $key_value = null): array
|
||||
{
|
||||
$key_array = array();
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $key => $value) {
|
||||
@@ -410,11 +414,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
return $key_array;
|
||||
}
|
||||
|
||||
// METHOD: formPrintMsg
|
||||
// WAS : form_print_msg
|
||||
// PARAMS: none
|
||||
// RETURN: formated output for the error && warning msg
|
||||
public function formPrintMsg()
|
||||
/**
|
||||
* formated output for the error && warning msg
|
||||
* @return array error message with msg, width, clas
|
||||
*/
|
||||
public function formPrintMsg(): array
|
||||
{
|
||||
$class = '';
|
||||
if ($this->error) {
|
||||
@@ -423,7 +427,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if ($this->warning) {
|
||||
$class = 'warning';
|
||||
}
|
||||
return array (
|
||||
return array(
|
||||
'msg' => $this->msg,
|
||||
'width' => $this->table_width,
|
||||
'class' => $class
|
||||
@@ -431,12 +435,12 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
|
||||
// next for functions are pre_test fkts for easier default new,load, etc handling
|
||||
// METHOD: formProcedureLoad
|
||||
// WAS : form_procedure_load
|
||||
// PARAMS: archive_id - which ID should be loaded
|
||||
// RETURN: none
|
||||
// DESC : default load procedure
|
||||
public function formProcedureLoad($archive_id)
|
||||
/**
|
||||
* default load procedure
|
||||
* @param string $archive_id archive id to load
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formProcedureLoad(string $archive_id): void
|
||||
{
|
||||
if ($this->archive && $archive_id && $this->base_acl_level >= $this->security_level['load']) {
|
||||
$this->formLoadTableArray($archive_id);
|
||||
@@ -444,12 +448,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: formProcedureNew
|
||||
// WAS : form_procedure_new
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : default new procedure
|
||||
public function formProcedureNew()
|
||||
/**
|
||||
* default new procedure
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formProcedureNew(): void
|
||||
{
|
||||
if ($this->new && $this->base_acl_level >= $this->security_level['new']) {
|
||||
if ($this->really_new == 'yes') {
|
||||
@@ -462,12 +465,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: formProcedureSave
|
||||
// WAS : form_procedure_save
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : default save procedure
|
||||
public function formProcedureSave()
|
||||
/**
|
||||
* default save procedure
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formProcedureSave(): void
|
||||
{
|
||||
if ($this->save && $this->base_acl_level >= $this->security_level['save']) {
|
||||
$this->formErrorCheck();
|
||||
@@ -478,12 +480,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: formProcedureDelete
|
||||
// WAS : form_procedure_delete
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : default delete procedure
|
||||
public function formProcedureDelete()
|
||||
/**
|
||||
* default delete procedure
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formProcedureDelete(): void
|
||||
{
|
||||
// delete is also by 'protected'
|
||||
if ($this->delete && $this->base_acl_level >= $this->security_level['delete']) {
|
||||
@@ -501,15 +502,16 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: formProcedureDeleteFromElementList
|
||||
// WAS : form_procedure_delete_from_element_list
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : default delete procedure
|
||||
public function formProcedureDeleteFromElementList($element_list, $remove_name)
|
||||
/**
|
||||
* default delete procedure
|
||||
* @param array $element_list element array that should be removed
|
||||
* @param array $remove_name key names that should be removed
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formProcedureDeleteFromElementList(array $element_list, array $remove_name): void
|
||||
{
|
||||
$this->debug('REMOVE ELEMENT', 'Remove REF ELEMENT: '.$this->base_acl_level.' >= '.$this->security_level['delete']);
|
||||
$this->debug('REMOVE ELEMENT', 'Protected Value set: '.isset($this->table_array['protected']['value']));
|
||||
$this->debug('REMOVE ELEMENT', 'Protected Value set: '.(string)isset($this->table_array['protected']['value']));
|
||||
$this->debug('REMOVE ELEMENT', 'Error: '.$this->error);
|
||||
// only do if the user is allowed to delete
|
||||
if ($this->base_acl_level >= $this->security_level['delete'] &&
|
||||
@@ -518,16 +520,18 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
!$this->error
|
||||
) {
|
||||
if (!is_array($element_list)) {
|
||||
$element_list = array ();
|
||||
$element_list = array();
|
||||
}
|
||||
for ($i = 0, $i_max = count($element_list); $i < $i_max; $i ++) {
|
||||
// $this->debug('form_error', 'Array: '.is_array($this->element_list[$element_list[$i]]['read_data']).' | '.$this->element_list[$element_list[$i]]['delete']);
|
||||
// if prefix, set it
|
||||
$prfx = ($this->element_list[$element_list[$i]]['prefix']) ? $this->element_list[$element_list[$i]]['prefix'].'_' : '';
|
||||
// get the primary key
|
||||
$pk_name = '';
|
||||
foreach ($this->element_list[$element_list[$i]]['elements'] as $el_name => $data) {
|
||||
if (isset($data['pk_id'])) {
|
||||
$pk_name = $el_name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// which key should be deleted
|
||||
@@ -547,7 +551,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
!$this->element_list[$element_list[$i]]['delete']
|
||||
) {
|
||||
if (!isset($_POST[$id])) {
|
||||
$_POST[$id] = array ();
|
||||
$_POST[$id] = array();
|
||||
}
|
||||
for ($j = 0, $j_max = count($_POST[$id]); $j < $j_max; $j ++) {
|
||||
// if it is not activated
|
||||
@@ -582,16 +586,16 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: formCreateLoad
|
||||
// WAS : form_create_load
|
||||
// PARAMS: none
|
||||
// RETURN: string from 'load' part of form ...
|
||||
public function formCreateLoad()
|
||||
/**
|
||||
* create the load list and return it as an array
|
||||
* @return array load list array with primary key, name and selected entry
|
||||
*/
|
||||
public function formCreateLoad(): array
|
||||
{
|
||||
$pk_selected = '';
|
||||
$t_pk_name = '';
|
||||
$pk_names = array ();
|
||||
$pk_ids = array ();
|
||||
$pk_names = array();
|
||||
$pk_ids = array();
|
||||
// when security level is okay ...
|
||||
if ($this->base_acl_level >= $this->security_level['load']) {
|
||||
$t_pk_name = $this->archive_pk_name;
|
||||
@@ -622,7 +626,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$pk_names[] = $t_string;
|
||||
}
|
||||
} // show it at all
|
||||
return array (
|
||||
return array(
|
||||
't_pk_name' => $t_pk_name,
|
||||
'pk_ids' => $pk_ids,
|
||||
'pk_names' => $pk_names,
|
||||
@@ -630,11 +634,12 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
);
|
||||
}
|
||||
|
||||
// METHOD: formCreateNew
|
||||
// WAS : form_create_new
|
||||
// PARAMS: none
|
||||
// RETURN: part for new
|
||||
public function formCreateNew($hide_new_checkbox = 0)
|
||||
/**
|
||||
* Create new entry element for HTML output
|
||||
* @param bool $hide_new_checkbox show or hide the new checkbox, default is false
|
||||
* @return array return the new create array with name & checkbox show flag
|
||||
*/
|
||||
public function formCreateNew($hide_new_checkbox = false): array
|
||||
{
|
||||
$show_checkbox = 0;
|
||||
$new_name = '';
|
||||
@@ -650,17 +655,19 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$new_name = $this->l->__('New');
|
||||
}
|
||||
} // security level okay
|
||||
return array (
|
||||
return array(
|
||||
'new_name' => $new_name,
|
||||
'show_checkbox' => $show_checkbox
|
||||
);
|
||||
}
|
||||
|
||||
// METHOD: formCreateSaveDelete
|
||||
// WAS : form_create_save_delete
|
||||
// PARAMS: none
|
||||
// RETURN: string for delete / save part
|
||||
public function formCreateSaveDelete($hide_delete = 0, $hide_delete_checkbox = 0)
|
||||
/**
|
||||
* create the save and delete element html group data
|
||||
* @param bool $hide_delete hide the delete button (default false)
|
||||
* @param bool $hide_delete_checkbox hide the delete checkbox (default false)
|
||||
* @return array return the hide/show delete framework for html creation
|
||||
*/
|
||||
public function formCreateSaveDelete($hide_delete = false, $hide_delete_checkbox = false): array
|
||||
{
|
||||
$seclevel_okay = 0;
|
||||
$save = '';
|
||||
@@ -702,15 +709,17 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
);
|
||||
} // end of function
|
||||
|
||||
// METHOD: formCreateElement
|
||||
// WAS : form_create_element
|
||||
// PARAMS: $element_name: the name from the array, you want to have build
|
||||
// $query: can overrule internal query data,
|
||||
// for drop down, as data comes from a reference table
|
||||
// for drop_down_text it has to be an array with $key->$value
|
||||
// RETURN: element in HTML
|
||||
public function formCreateElement($element_name, $query = '')
|
||||
/**
|
||||
* create a form element based on the settings in the element array entry
|
||||
* @param string $element_name the name from the array, you want to have build
|
||||
* @param string|null $query can overrule internal query data,
|
||||
* for drop down, as data comes from a reference table
|
||||
* for drop_down_text it has to be an array with $key->$valu
|
||||
* @return array html settings array
|
||||
*/
|
||||
public function formCreateElement(string $element_name, ?string $query = null): array
|
||||
{
|
||||
$data = array();
|
||||
// special 2nd color for 'binary' attribut
|
||||
if ($this->table_array[$element_name]['type'] == 'binary' && !isset($this->table_array[$element_name]['value'])) {
|
||||
$EDIT_FGCOLOR_T = 'edit_fgcolor_no';
|
||||
@@ -718,7 +727,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$EDIT_FGCOLOR_T = 'edit_fgcolor';
|
||||
}
|
||||
$output_name = $this->table_array[$element_name]['output_name'];
|
||||
if (isset($this->table_array[$element_name]['mandatory'])) {
|
||||
if (isset($this->table_array[$element_name]['mandatory']) &&
|
||||
$this->table_array[$element_name]['mandatory']
|
||||
) {
|
||||
$output_name .= ' *';
|
||||
}
|
||||
// create right side depending on 'definiton' in table_array
|
||||
@@ -734,13 +745,14 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$data['value'][] = $i;
|
||||
$data['output'][] = $this->table_array[$element_name]['element_list'][$i];
|
||||
$data['name'] = $element_name;
|
||||
if ((isset($i) && isset($this->table_array[$element_name]['value'])) ||
|
||||
(!isset($i) && !isset($this->table_array[$element_name]['value']))
|
||||
if (isset($this->table_array[$element_name]['value']) &&
|
||||
(($i && $this->table_array[$element_name]['value']) ||
|
||||
(!$i && !$this->table_array[$element_name]['value']))
|
||||
) {
|
||||
$data['checked'] = $this->table_array[$element_name]['value'];
|
||||
}
|
||||
|
||||
if (isset($i)) {
|
||||
if ($i) {
|
||||
$data['separator'] = '';
|
||||
}
|
||||
}
|
||||
@@ -797,7 +809,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$query = "SELECT ".((isset($this->table_array[$element_name]['select_distinct']) && $this->table_array[$element_name]['select_distinct']) ? "DISTINCT" : '');
|
||||
$query .= " ".$this->table_array[$element_name]['pk_name'].", ".$this->table_array[$element_name]['input_name']." ";
|
||||
if (!empty($this->table_array[$element_name]['order_by'])) {
|
||||
$query .", ".$this->table_array[$element_name]['order_by']." ";
|
||||
$query .= ", ".$this->table_array[$element_name]['order_by']." ";
|
||||
}
|
||||
$query .= "FROM ".$this->table_array[$element_name]['table_name'];
|
||||
// possible where statements
|
||||
@@ -900,20 +912,26 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$data['value'] = $this->table_array[$element_name]['value'];
|
||||
}
|
||||
}
|
||||
return array('output_name' => $output_name, 'color' => $EDIT_FGCOLOR_T, 'type' => $type, 'data' => $data);
|
||||
return array(
|
||||
'output_name' => $output_name,
|
||||
'color' => $EDIT_FGCOLOR_T,
|
||||
'type' => $type,
|
||||
'data' => $data
|
||||
);
|
||||
}
|
||||
|
||||
// METHOD: formErrorCheck
|
||||
// WAS : form_error_check
|
||||
// PARAMS: none
|
||||
// RETURN: full error message string for output
|
||||
// should be cought like this ...
|
||||
// if ($msg=$form->form_error_check())
|
||||
// $error=1;
|
||||
public function formErrorCheck()
|
||||
/**
|
||||
* full error message string for output
|
||||
* checks each filled entry to the table array defined error checks
|
||||
* should be cought like this ...
|
||||
* if ($msg = $form->form_error_check())
|
||||
* $error=1;
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formErrorCheck(): void
|
||||
{
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $key => $value) {
|
||||
@@ -931,12 +949,12 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
break;
|
||||
case 'date': // YYYY-MM-DD
|
||||
if (!check_date($this->table_array[$key]['value'], 1)) {
|
||||
if (!$this->checkDate($this->table_array[$key]['value'])) {
|
||||
$this->msg .= sprintf($this->l->__('Please enter a vailid date (YYYY-MM-DD) for the <b>%s</b> Field!<br>'), $this->table_array[$key]['output_name']);
|
||||
}
|
||||
break;
|
||||
case 'time': // HH:MM[:SS]
|
||||
if (!check_time($this->table_array[$key]['value'])) {
|
||||
if (!$this->checkDateTime($this->table_array[$key]['value'])) {
|
||||
$this->msg .= sprintf($this->l->__('Please enter a vailid time (HH:MM[:SS]) for the <b>%s</b> Field!<br>'), $this->table_array[$key]['output_name']);
|
||||
}
|
||||
break;
|
||||
@@ -945,7 +963,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
break;
|
||||
case 'intervalshort': // ony interval n [Y/M/D] only
|
||||
if (preg_match("/^\d{1,3}\ ?[YMDymd]{1}$/", $this->table_array[$key]['value'])) {
|
||||
$this->msg .= sprintf($this->l->__('Please enter a valid time interval in the format <length> Y|M|D for the <b>%s</b> Field!<br>'), $this->table[$key]['output_name']);
|
||||
$this->msg .= sprintf($this->l->__('Please enter a valid time interval in the format <length> Y|M|D for the <b>%s</b> Field!<br>'), $this->table_array[$key]['output_name']);
|
||||
}
|
||||
break;
|
||||
case 'email':
|
||||
@@ -1006,6 +1024,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
} // switch
|
||||
} // for each error to check
|
||||
} elseif (isset($value['mandatory']) &&
|
||||
$value['mandatory'] &&
|
||||
(
|
||||
// for all 'normal' fields
|
||||
($this->table_array[$key]['type'] != 'password' && $this->table_array[$key]['type'] != 'drop_down_db_input' && !$this->table_array[$key]['value']) ||
|
||||
@@ -1045,24 +1064,30 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
} // while
|
||||
// do check for reference tables
|
||||
if (is_array($this->reference_array)) {
|
||||
// do check for reference tables
|
||||
if (!is_array($this->reference_array)) {
|
||||
$this->reference_array = array ();
|
||||
}
|
||||
reset($this->reference_array);
|
||||
foreach ($this->reference_array as $key => $value) {
|
||||
if ($this->reference_array[$key]['mandatory'] && !$this->reference_array[$key]['selected'][0]) {
|
||||
if (isset($this->reference_array[$key]['mandatory']) &&
|
||||
$this->reference_array[$key]['mandatory'] &&
|
||||
!$this->reference_array[$key]['selected'][0]) {
|
||||
$this->msg .= sprintf($this->l->__('Please select at least one Element from field <b>%s</b>!<br>'), $this->reference_array[$key]['output_name']);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->reference_array = array();
|
||||
}
|
||||
// $this->debug('edit_error', 'QS: <pre>'.print_r($_POST, true).'</pre>');
|
||||
if (is_array($this->element_list)) {
|
||||
// check the mandatory stuff
|
||||
// if mandatory, check that at least on pk exists or if at least the mandatory field is filled
|
||||
foreach ($this->element_list as $table_name => $reference_array) {
|
||||
if (!is_array($reference_array)) {
|
||||
$reference_array = array();
|
||||
}
|
||||
// set pk/fk id for this
|
||||
$_pk_name = '';
|
||||
$_fk_name = '';
|
||||
foreach ($reference_array['elements'] as $_name => $_data) {
|
||||
if (isset($_data['pk_id'])) {
|
||||
$_pk_name = $_name;
|
||||
@@ -1088,25 +1113,36 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// $this->debug('edit_error_chk', 'K: '.$_POST[$prfx.$key].' | '.$_POST[$prfx.$key][0]);
|
||||
}
|
||||
$this->debug('POST ARRAY', $this->printAr($_POST));
|
||||
// init variables before inner loop run
|
||||
$mand_okay = 0;
|
||||
$mand_name = '';
|
||||
$row_okay = array();
|
||||
$default_wrong = array();
|
||||
$error = array();
|
||||
$element_set = array();
|
||||
# check each row
|
||||
for ($i = 0; $i < $max; $i ++) {
|
||||
// either one of the post pks is set, or the mandatory
|
||||
foreach ($reference_array['elements'] as $el_name => $data_array) {
|
||||
if (isset($data_array['mandatory'])) {
|
||||
if (isset($data_array['mandatory']) && $data_array['mandatory']) {
|
||||
$mand_name = $data_array['output_name'];
|
||||
}
|
||||
// check if there is a primary ket inside, so it is okay
|
||||
if (isset($data_array['pk_id']) &&
|
||||
count($_POST[$prfx.$el_name]) &&
|
||||
isset($reference_array['mandatory'])
|
||||
isset($reference_array['mandatory']) &&
|
||||
$reference_array['mandatory']
|
||||
) {
|
||||
$mand_okay = 1;
|
||||
}
|
||||
// we found a mandatory field. check now if one is set to satisfy the main mandatory
|
||||
// also check, if this field is mandatory and its not set, but any other, throw an error
|
||||
// $this->debug('edit_error_chk', 'RG error - Data['.$prfx.$el_name.': '.$_POST[$prfx.$el_name][$i].' | '.$_POST[$prfx.$el_name].' - '.$reference_array['enable_name'].' - '.$_POST[$reference_array['enable_name']][$_POST[$prfx.$el_name][$i]]);
|
||||
if (isset($data_array['mandatory']) && $_POST[$prfx.$el_name][$i]) {
|
||||
if (isset($data_array['mandatory']) &&
|
||||
$data_array['mandatory'] &&
|
||||
isset($_POST[$prfx.$el_name][$i]) &&
|
||||
$_POST[$prfx.$el_name][$i]
|
||||
) {
|
||||
$mand_okay = 1;
|
||||
$row_okay[$i] = 1;
|
||||
} elseif ($data_array['type'] == 'radio_group' && !isset($_POST[$prfx.$el_name])) {
|
||||
@@ -1119,7 +1155,10 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// $this->debug('edit_error_chk', '[$i]');
|
||||
$element_set[$i] = 1;
|
||||
$row_okay[$i] = 1;
|
||||
} elseif (isset($data_array['mandatory']) && !$_POST[$prfx.$el_name][$i]) {
|
||||
} elseif (isset($data_array['mandatory']) &&
|
||||
$data_array['mandatory'] &&
|
||||
!$_POST[$prfx.$el_name][$i]
|
||||
) {
|
||||
$row_okay[$i] = 0;
|
||||
}
|
||||
// do optional error checks like for normal fields
|
||||
@@ -1127,19 +1166,20 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if (isset($data_array['error_check'])) {
|
||||
foreach (explode('|', $data_array['error_check']) as $error_check) {
|
||||
switch ($error_check) {
|
||||
// check unique, check if field in table is not yet exist
|
||||
// check unique, check if field is filled and not same in _POST set
|
||||
case 'unique':
|
||||
$q = 'SELECT '.$_pk_name.' FROM '.$table_name.' WHERE '.$el_name.' = '."'".$this->dbEscapeString($_POST[$prfx.$el_name][$i])."'";
|
||||
if ($this->table_array[$this->int_pk_name]['value']) {
|
||||
$q .= ' AND '.$this->int_pk_name.' <> '.$this->table_array[$this->int_pk_name]['value'];
|
||||
}
|
||||
list($$key) = $this->dbReturnRow($q);
|
||||
if ($$key) {
|
||||
// must be set for double check
|
||||
if ($_POST[$prfx.$el_name][$i] &&
|
||||
count(array_keys($_POST[$prfx.$el_name], $_POST[$prfx.$el_name][$i])) >= 2
|
||||
) {
|
||||
$this->msg .= sprintf($this->l->__('The field <b>%s</b> in row <b>%s</b> can be used only once!<br>'), $reference_array['output_name'], $i);
|
||||
}
|
||||
break;
|
||||
case 'alphanumericspace':
|
||||
if (!preg_match("/^[0-9A-Za-z\ ]+$/", $_POST[$prfx.$el_name][$i])) {
|
||||
// only check if set
|
||||
if ($_POST[$prfx.$el_name][$i] &&
|
||||
!preg_match("/^[0-9A-Za-z\ ]+$/", $_POST[$prfx.$el_name][$i])
|
||||
) {
|
||||
$this->msg .= sprintf($this->l->__('Please enter a valid alphanumeric (Numbers and Letters, spaces allowed) value for the <b>%s</b> Field and row <b>%s</b>!<br>'), $reference_array['output_name'], $i);
|
||||
}
|
||||
break;
|
||||
@@ -1150,7 +1190,9 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
|
||||
// main mandatory is met -> error msg
|
||||
if (!isset($mand_okay) && isset($reference_array['mandatory'])) {
|
||||
if (!$mand_okay &&
|
||||
isset($reference_array['mandatory']) &&
|
||||
$reference_array['mandatory']) {
|
||||
$this->msg .= sprintf($this->l->__('You need to enter at least one data set for field <b>%s</b>!<Br>'), $reference_array['output_name']);
|
||||
}
|
||||
for ($i = 0; $i < $max; $i ++) {
|
||||
@@ -1168,12 +1210,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
|
||||
// METHOD: formSetOrder
|
||||
// WAS: form_set_order
|
||||
// PARAMS: none
|
||||
// RETURN: the table array
|
||||
// DESC : sets the order to the maximum, if order flag is set in array
|
||||
public function formSetOrder()
|
||||
/**
|
||||
* sets the order to the maximum, if order flag is set in array
|
||||
* @return array table array with set order number
|
||||
*/
|
||||
public function formSetOrder(): array
|
||||
{
|
||||
// get order name
|
||||
$order_name = $this->formGetColNameFromKey('order');
|
||||
@@ -1196,16 +1237,15 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
return $this->table_array;
|
||||
}
|
||||
|
||||
// METHOD: formUnsetTableArray
|
||||
// WAS : form_unsert_table_array
|
||||
// PARAMS: none
|
||||
// RETURN: none
|
||||
// DESC : resets all values in table_array and in the reference tables
|
||||
public function formUnsetTableArray()
|
||||
/**
|
||||
* resets all values in table_array and in the reference tables
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formUnsetTableArray(): void
|
||||
{
|
||||
unset($this->pk_id);
|
||||
$this->pk_id = null;
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $key => $value) {
|
||||
@@ -1218,7 +1258,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
if (is_array($this->reference_array)) {
|
||||
if (!is_array($this->reference_array)) {
|
||||
$this->reference_array = array ();
|
||||
$this->reference_array = array();
|
||||
}
|
||||
reset($this->reference_array);
|
||||
foreach ($this->reference_array as $key => $value) {
|
||||
@@ -1229,21 +1269,21 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$this->msg = $this->l->__('Cleared for new Dataset!');
|
||||
}
|
||||
|
||||
// METHOD: formLoadTableArray
|
||||
// WAS : form_load_table_array
|
||||
// PARAMS: pk_id - overrule pk_id
|
||||
// RETURN: none
|
||||
// DESC : load a table & reference
|
||||
public function formLoadTableArray($pk_id = 0)
|
||||
/**
|
||||
* load a table & reference
|
||||
* @param string|null $pk_id overrule pk_id
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formLoadTableArray(?string $pk_id = null): void
|
||||
{
|
||||
if ($pk_id) {
|
||||
$this->pk_id = $pk_id;
|
||||
}
|
||||
$this->table_array = $this->dbRead(1);
|
||||
$this->table_array = $this->dbRead(true);
|
||||
|
||||
// reset all temp fields
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $key => $value) {
|
||||
@@ -1253,7 +1293,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if (is_array($this->reference_array)) {
|
||||
// load each reference_table
|
||||
if (!is_array($this->reference_array)) {
|
||||
$this->reference_array = array ();
|
||||
$this->reference_array = array();
|
||||
}
|
||||
reset($this->reference_array);
|
||||
foreach ($this->reference_array as $key => $value) {
|
||||
@@ -1268,17 +1308,19 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$this->msg = $this->l->__('Dataset has been loaded!<br>');
|
||||
}
|
||||
|
||||
// METHOD: formSaveTableArray
|
||||
// WAS : form_save_table_array
|
||||
// PARAMS: addslashes - if one, passes 1 to the db_write function
|
||||
// RETURN: none
|
||||
// DESC : save a table, reference and all input fields
|
||||
public function formSaveTableArray($addslashes = 0)
|
||||
/**
|
||||
* save a table, reference and all input fields
|
||||
* note that the addslashes flag here is passed on to the dbWrite method
|
||||
* it only does html conversion, add slashes for DB is done automatically
|
||||
* @param bool $addslashes override internal addslasahes flag (default false)
|
||||
* @return void has no return
|
||||
*/
|
||||
public function formSaveTableArray($addslashes = false)
|
||||
{
|
||||
// for drop_down_db_input check if text field is filled and if, if not yet in db ...
|
||||
// and upload files
|
||||
if (!isset($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $key => $value) {
|
||||
@@ -1353,7 +1395,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
if (move_uploaded_file($GLOBALS['_FILES'][$key.'_file']['tmp_name'], $this->table_array[$key]['save_dir'].$GLOBALS['_FILES'][$key.'_file']['name'])) {
|
||||
// make it unique with a unique number at the beginning
|
||||
$this->table_array[$key]['value'] = uniqid(rand(), 1).'_'.$GLOBALS['_FILES'][$key.'_file']['name'];
|
||||
$this->table_array[$key]['value'] = uniqid((string)rand(), true).'_'.$GLOBALS['_FILES'][$key.'_file']['name'];
|
||||
} else {
|
||||
$this->msg .= $this->l->__('File could not be copied to target directory! Perhaps wrong directory permissions.');
|
||||
$this->error = 1;
|
||||
@@ -1389,7 +1431,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// write reference array(s) if necessary
|
||||
if (is_array($this->reference_array)) {
|
||||
if (!is_array($this->reference_array)) {
|
||||
$this->reference_array = array ();
|
||||
$this->reference_array = array();
|
||||
}
|
||||
reset($this->reference_array);
|
||||
foreach ($this->reference_array as $reference_array) {
|
||||
@@ -1404,15 +1446,18 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
} // if reference arrays
|
||||
// write element list
|
||||
if (isset($this->element_list) && is_array($this->element_list)) {
|
||||
$type = array ();
|
||||
$type = array();
|
||||
reset($this->element_list);
|
||||
foreach ($this->element_list as $table_name => $reference_array) {
|
||||
// init arrays
|
||||
$q_names = array ();
|
||||
$q_data = array ();
|
||||
$q_values = array ();
|
||||
$no_write = array ();
|
||||
$block_write = array ();
|
||||
$q_begin = array();
|
||||
$q_middle = array();
|
||||
$q_end = array();
|
||||
$q_names = array();
|
||||
$q_data = array();
|
||||
$q_values = array();
|
||||
$no_write = array();
|
||||
$block_write = array();
|
||||
// get the number of keys from the elements array
|
||||
$keys = array_keys($reference_array['elements']);
|
||||
// element prefix name
|
||||
@@ -1443,6 +1488,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// if we have enable name & delete set, then only insert/update those which are flagged as active
|
||||
// check if mandatory field is set, if not set 'do not write flag'
|
||||
if (isset($data_array['mandatory']) &&
|
||||
$data_array['mandatory'] &&
|
||||
(!isset($_POST[$prfx.$el_name][$i]) || (isset($_POST[$prfx.$el_name][$i]) && empty($_POST[$prfx.$el_name][$i])))
|
||||
) {
|
||||
$no_write[$i] = 1;
|
||||
@@ -1574,7 +1620,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// remove any reference arrays
|
||||
if (is_array($this->reference_array)) {
|
||||
if (!is_array($this->reference_array)) {
|
||||
$this->reference_array = array ();
|
||||
$this->reference_array = array();
|
||||
}
|
||||
reset($this->reference_array);
|
||||
foreach ($this->reference_array as $reference_array) {
|
||||
@@ -1585,7 +1631,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// remove any element list references
|
||||
if (is_array($this->element_list)) {
|
||||
if (!is_array($this->element_list)) {
|
||||
$this->element_list = array ();
|
||||
$this->element_list = array();
|
||||
}
|
||||
reset($this->element_list);
|
||||
foreach ($this->element_list as $table_name => $data_array) {
|
||||
@@ -1595,7 +1641,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
// unlink ALL files
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $key => $value) {
|
||||
@@ -1613,11 +1659,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// PARAMS: $hidden_array
|
||||
// RETURN: the input fields (html)
|
||||
// DESC : creates HTML hidden input fields out of an hash array
|
||||
public function formCreateHiddenFields($hidden_array = array ())
|
||||
public function formCreateHiddenFields($hidden_array = array())
|
||||
{
|
||||
$hidden = array ();
|
||||
$hidden = array();
|
||||
if (!is_array($this->table_array)) {
|
||||
$this->table_array = array ();
|
||||
$this->table_array = array();
|
||||
}
|
||||
reset($this->table_array);
|
||||
foreach ($this->table_array as $key => $value) {
|
||||
@@ -1647,8 +1693,11 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// DESC : creates the multiple select part for a reference_table
|
||||
public function formCreateElementReferenceTable($table_name)
|
||||
{
|
||||
$data = array();
|
||||
$output_name = $this->reference_array[$table_name]['output_name'];
|
||||
if ($this->reference_array[$table_name]['mandatory']) {
|
||||
if (isset($this->reference_array[$table_name]['mandatory']) &&
|
||||
$this->reference_array[$table_name]['mandatory']
|
||||
) {
|
||||
$output_name .= ' *';
|
||||
}
|
||||
$data['name'] = $this->reference_array[$table_name]['other_table_pk'];
|
||||
@@ -1665,18 +1714,22 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
return array('output_name' => $output_name, 'type' => $type, 'color' => 'edit_fgcolor', 'data' => $data);
|
||||
}
|
||||
|
||||
// METHOD: formCreateElementListTable
|
||||
// WAS : form_create_element_list_table
|
||||
// PARAMS: show which element list
|
||||
// RETURN: array for output
|
||||
// DESC : create list of elements next to each other for a group of data in an input field
|
||||
// this currently only works for a list that is filled from a sub table and creates only a connection to this one
|
||||
// new version will allow a sub list with free input fields to directly fill a sub table to a master table
|
||||
public function formCreateElementListTable($table_name)
|
||||
/**
|
||||
* create list of elements next to each other for a group of data in an input field
|
||||
* this currently only works for a list that is filled from a sub table and creates
|
||||
* only a connection to this one new version will allow a sub list with free input
|
||||
* fields to directly fill a sub table to a master table
|
||||
* @param string $table_name which element entry to create
|
||||
* @return array element for html creation
|
||||
*/
|
||||
public function formCreateElementListTable(string $table_name): array
|
||||
{
|
||||
$data = array();
|
||||
// output name for the viewable left table td box, prefixed with * if mandatory
|
||||
$output_name = $this->element_list[$table_name]['output_name'];
|
||||
if (isset($this->element_list[$table_name]['mandatory'])) {
|
||||
if (isset($this->element_list[$table_name]['mandatory']) &&
|
||||
$this->element_list[$table_name]['mandatory']
|
||||
) {
|
||||
$output_name .= ' *';
|
||||
}
|
||||
// delete button name, if there is one set
|
||||
@@ -1705,11 +1758,13 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
|
||||
// build the select part
|
||||
if (!isset($this->element_list[$table_name]['elements']) || !is_array($this->element_list[$table_name]['elements'])) {
|
||||
$this->element_list[$table_name]['elements'] = array ();
|
||||
$this->element_list[$table_name]['elements'] = array();
|
||||
}
|
||||
reset($this->element_list[$table_name]['elements']);
|
||||
// generic data read in (counts for all rows)
|
||||
// visible list data output
|
||||
$q_select = array();
|
||||
$proto = array();
|
||||
foreach ($this->element_list[$table_name]['elements'] as $el_name => $data_array) {
|
||||
// $this->debug('CFG', 'El: '.$el_name.' -> '.$this->printAr($data_array));
|
||||
// if the element name matches the read array, then set the table as a name prefix
|
||||
@@ -1730,7 +1785,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
// if drop down db read data for element list from the given sub table as from the query
|
||||
// only two elements are allowed: pos 0 is key, pso 1 is visible output name
|
||||
if ($data_array['type'] == 'drop_down_db') {
|
||||
if (isset($data_array['type']) && $data_array['type'] == 'drop_down_db') {
|
||||
$md_q = md5($data_array['query']);
|
||||
while ($res = $this->dbReturn($data_array['query'])) {
|
||||
$this->debug('edit', 'Q['.$md_q.'] pos: '.$this->cursor_ext[$md_q]['pos'].' | want: '.(isset($data_array['preset']) ? $data_array['preset'] : '-').' | set: '.(isset($data['preset'][$el_name]) ? $data['preset'][$el_name] : '-'));
|
||||
@@ -1755,7 +1810,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if ($this->error) {
|
||||
if (isset($_POST[$el_name]) && is_array($_POST[$el_name])) {
|
||||
// this is for the new line
|
||||
$proto[$el_name] = $_POST[$el_name][(count($_POST[$el_name]) - 1)];
|
||||
$proto[$el_name] = isset($_POST[$el_name][(count($_POST[$el_name]) - 1)]) ? $_POST[$el_name][(count($_POST[$el_name]) - 1)] : 0;
|
||||
} else {
|
||||
$proto[$el_name] = 0;
|
||||
}
|
||||
@@ -1773,6 +1828,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if (isset($this->element_list[$table_name]['read_data'])) {
|
||||
// we need a second one for the query build only
|
||||
// prefix all elements with the $table name
|
||||
$_q_select = array();
|
||||
foreach ($q_select as $_pos => $element) {
|
||||
$_q_select[$_pos] = $table_name.'.'.$element;
|
||||
}
|
||||
@@ -1818,7 +1874,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
$pos = 0; // position in while for overwrite if needed
|
||||
// read out the list and add the selected data if needed
|
||||
while ($res = $this->dbReturn($q)) {
|
||||
$_data = array ();
|
||||
$_data = array();
|
||||
$prfx = $data['prefix']; // short
|
||||
// go through each res
|
||||
for ($i = 0, $i_max = count($q_select); $i < $i_max; $i ++) {
|
||||
@@ -1869,7 +1925,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
// set if we need more open entries or if we do not have any entries yet
|
||||
if (($missing_empty_count < $this->element_list[$table_name]['max_empty']) || $element_count == 0) {
|
||||
for ($pos = $element_count, $pos_max = $this->element_list[$table_name]['max_empty'] + $element_count; $pos <= $pos_max; $pos ++) {
|
||||
$_data = array ();
|
||||
$_data = array();
|
||||
// the fields that need to be filled are in data->type array:
|
||||
// pk fields are unfilled
|
||||
// fk fields are filled with the fk_id 'int_pk_name' value
|
||||
@@ -1885,7 +1941,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
}
|
||||
}
|
||||
$data['content'][] = $_data;
|
||||
$data['pos'][] = array (0 => $pos); // this is for the checkboxes
|
||||
$data['pos'][] = array(0 => $pos); // this is for the checkboxes
|
||||
// $this->debug('CFG ELEMENT LIST FILL', 'Pos: '.$pos.'/'.$pos_max.', Content: '.count($data['content']).', Pos: '.count($data['pos']));
|
||||
}
|
||||
}
|
||||
@@ -1895,13 +1951,13 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
|
||||
if (isset($data['delete_name']) && !empty($data['delete_name'])) {
|
||||
$data['content'][] = $proto;
|
||||
// we also need the pos add or we through an error in smarty
|
||||
$data['pos'][] = array (
|
||||
$data['pos'][] = array(
|
||||
0 => isset($data['pos']) ? count($data['pos']) : 0
|
||||
);
|
||||
}
|
||||
// $this->debug('CFG ELEMENT LIST FILL', 'Data array: '.$this->printAr($data));
|
||||
$type = 'element_list';
|
||||
return array (
|
||||
return array(
|
||||
'output_name' => $output_name,
|
||||
'type' => $type,
|
||||
'color' => 'edit_fgcolor',
|
||||
@@ -22,7 +22,12 @@ class ProgressBar
|
||||
public $code; // unique code
|
||||
public $status = 'new'; // current status (new,show,hide)
|
||||
public $step = 0; // current step
|
||||
public $position = array(); // current bar position
|
||||
public $position = array( // current bar position
|
||||
'left' => null,
|
||||
'top' => null,
|
||||
'width' => null,
|
||||
'height' => null,
|
||||
);
|
||||
|
||||
public $clear_buffer_size = 1; // we need to send this before the lfush to get browser output
|
||||
public $clear_buffer_size_init = 1024*1024; // if I don't send that junk, it won't send anything
|
||||
@@ -73,8 +78,12 @@ class ProgressBar
|
||||
)
|
||||
*/
|
||||
|
||||
// constructor
|
||||
public function __construct($width = 0, $height = 0)
|
||||
/**
|
||||
* progress bar constructor
|
||||
* @param integer $width progress bar width, default 0
|
||||
* @param integer $height progress bar height, default 0
|
||||
*/
|
||||
public function __construct(int $width = 0, int $height = 0)
|
||||
{
|
||||
$this->code = substr(md5(microtime()), 0, 6);
|
||||
if ($width > 0) {
|
||||
@@ -90,7 +99,12 @@ class ProgressBar
|
||||
|
||||
// private functions
|
||||
|
||||
private function __flushCache($clear_buffer_size = 0)
|
||||
/**
|
||||
* flush cache hack for IE and others
|
||||
* @param integer $clear_buffer_size buffer size override
|
||||
* @return void has not return
|
||||
*/
|
||||
private function __flushCache(int $clear_buffer_size = 0): void
|
||||
{
|
||||
if (!$clear_buffer_size) {
|
||||
$clear_buffer_size = $this->clear_buffer_size;
|
||||
@@ -100,7 +114,12 @@ class ProgressBar
|
||||
flush();
|
||||
}
|
||||
|
||||
private function __calculatePercent($step)
|
||||
/**
|
||||
* [__calculatePercent description]
|
||||
* @param float $step percent step to do
|
||||
* @return float percent step done
|
||||
*/
|
||||
private function __calculatePercent(float $step): float
|
||||
{
|
||||
// avoid divison through 0
|
||||
if ($this->max - $this->min == 0) {
|
||||
@@ -113,8 +132,14 @@ class ProgressBar
|
||||
return $percent;
|
||||
}
|
||||
|
||||
private function __calculatePosition($step)
|
||||
/**
|
||||
* calculate position in bar step
|
||||
* @param float $step percent step to do
|
||||
* @return array bar position as array
|
||||
*/
|
||||
private function __calculatePosition(float $step): array
|
||||
{
|
||||
$bar = 0;
|
||||
switch ($this->direction) {
|
||||
case 'right':
|
||||
case 'left':
|
||||
@@ -137,6 +162,7 @@ class ProgressBar
|
||||
$pixel = $bar - ($this->pedding * 2);
|
||||
}
|
||||
|
||||
$position = array();
|
||||
switch ($this->direction) {
|
||||
case 'right':
|
||||
$position['left'] = $this->pedding;
|
||||
@@ -166,7 +192,12 @@ class ProgressBar
|
||||
return $position;
|
||||
}
|
||||
|
||||
private function __setStep($step)
|
||||
/**
|
||||
* set the step
|
||||
* @param float $step percent step to do
|
||||
* @return void has no return
|
||||
*/
|
||||
private function __setStep(float $step): void
|
||||
{
|
||||
if ($step > $this->max) {
|
||||
$step = $this->max;
|
||||
@@ -178,9 +209,15 @@ class ProgressBar
|
||||
}
|
||||
|
||||
// public functions
|
||||
public function setFrame($width = 0, $height = 0)
|
||||
/**
|
||||
* set frame layout
|
||||
* @param integer $width bar width
|
||||
* @param integer $height bar height
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setFrame(int $width = 0, int $height = 0): void
|
||||
{
|
||||
$this->frame = array (
|
||||
$this->frame = array(
|
||||
'show' => true,
|
||||
'left' => 20,
|
||||
'top' => 35,
|
||||
@@ -199,7 +236,15 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function addLabel($type, $name, $value = ' ')
|
||||
/**
|
||||
* set bar label text
|
||||
* allowed types are: text, button, step, percent, percentlbl, crossbar
|
||||
* @param string $type label type
|
||||
* @param string $name label name (internal)
|
||||
* @param string $value label output name (optional)
|
||||
* @return void has no return
|
||||
*/
|
||||
public function addLabel(string $type, string $name, string $value = ' '): void
|
||||
{
|
||||
switch ($type) {
|
||||
case 'text':
|
||||
@@ -274,7 +319,6 @@ class ProgressBar
|
||||
'color' => '#000000',
|
||||
'bgr_color' => ''
|
||||
);
|
||||
// print "THIS[$name]: ".$this->label[$name]['left']." | ".$this->label[$name]['width']."<br>";
|
||||
break;
|
||||
case 'crossbar':
|
||||
$this->label[$name] = array(
|
||||
@@ -295,14 +339,32 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function addButton($name, $value, $action, $target = 'self')
|
||||
/**
|
||||
* add a button to the progress bar
|
||||
* @param string $name button name (internal)
|
||||
* @param string $value button text (output)
|
||||
* @param string $action button action (link)
|
||||
* @param string $target button action target (default self)
|
||||
* @return void has no return
|
||||
*/
|
||||
public function addButton(string $name, string $value, string $action, string $target = 'self'): void
|
||||
{
|
||||
$this->addLabel('button', $name, $value);
|
||||
$this->label[$name]['action'] = $action;
|
||||
$this->label[$name]['target'] = $target;
|
||||
}
|
||||
|
||||
public function setLabelPosition($name, $left, $top, $width, $height, $align = '')
|
||||
/**
|
||||
* set the label position
|
||||
* @param string $name label name to set
|
||||
* @param int $left left px
|
||||
* @param int $top top px
|
||||
* @param int $width width px
|
||||
* @param int $height height px
|
||||
* @param string $align alignment (left/right/etc), default empty
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setLabelPosition(string $name, int $left, int $top, int $width, int $height, string $align = ''): void
|
||||
{
|
||||
// print "SET POSITION[$name]: $left<br>";
|
||||
// if this is percent, we ignore anything, it is auto positioned
|
||||
@@ -331,7 +393,13 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function setLabelColor($name, $color)
|
||||
/**
|
||||
* set label color
|
||||
* @param string $name label name to set
|
||||
* @param string $color color value in rgb html hex
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setLabelColor(string $name, string $color): void
|
||||
{
|
||||
$this->label[$name]['color'] = $color;
|
||||
if ($this->status != 'new') {
|
||||
@@ -340,7 +408,13 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function setLabelBackground($name, $color)
|
||||
/**
|
||||
* set the label background color
|
||||
* @param string $name label name to set
|
||||
* @param string $color background color to set in rgb html hex
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setLabelBackground(string $name, string $color): void
|
||||
{
|
||||
$this->label[$name]['bgr_color'] = $color;
|
||||
if ($this->status != 'new') {
|
||||
@@ -349,7 +423,15 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function setLabelFont($name, $size, $family = '', $weight = '')
|
||||
/**
|
||||
* [setLabelFont description]
|
||||
* @param string $name label name to set
|
||||
* @param int $size font size in px
|
||||
* @param string $family font family (default empty)
|
||||
* @param string $weight font weight (default empty)
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setLabelFont(string $name, int $size, string $family = '', string $weight = ''): void
|
||||
{
|
||||
// just in case if it is too small
|
||||
if (intval($size) < 0) {
|
||||
@@ -384,7 +466,13 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function setLabelValue($name, $value)
|
||||
/**
|
||||
* set the label valeu
|
||||
* @param string $name label name to set
|
||||
* @param string $value label value (output)
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setLabelValue(string $name, string $value): void
|
||||
{
|
||||
$this->label[$name]['value'] = $value;
|
||||
// print "NAME[$name], Status: ".$this->status.": ".$value."<Br>";
|
||||
@@ -394,7 +482,12 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function setBarColor($color)
|
||||
/**
|
||||
* set the bar color
|
||||
* @param string $color color for the progress bar in rgb html hex
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setBarColor(string $color): void
|
||||
{
|
||||
$this->color = $color;
|
||||
if ($this->status != 'new') {
|
||||
@@ -403,7 +496,12 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function setBarBackground($color)
|
||||
/**
|
||||
* set the progress bar background color
|
||||
* @param string $color background color in rgb html hex
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setBarBackground(string $color): void
|
||||
{
|
||||
$this->bgr_color = $color;
|
||||
if ($this->status != 'new') {
|
||||
@@ -412,7 +510,12 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function setBarDirection($direction)
|
||||
/**
|
||||
* progress bar direct (left/right)
|
||||
* @param string $direction set direction as left/right
|
||||
* @return void has no return
|
||||
*/
|
||||
public function setBarDirection(string $direction): void
|
||||
{
|
||||
$this->direction = $direction;
|
||||
|
||||
@@ -429,7 +532,11 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function getHtml()
|
||||
/**
|
||||
* get the progress bar base HTML
|
||||
* @return string progress bar HTML code
|
||||
*/
|
||||
public function getHtml(): string
|
||||
{
|
||||
$html = '';
|
||||
$js = '';
|
||||
@@ -438,6 +545,7 @@ class ProgressBar
|
||||
$this->__setStep($this->step);
|
||||
$this->position = $this->__calculatePosition($this->step);
|
||||
|
||||
$style_master = '';
|
||||
if ($this->top || $this->left) {
|
||||
$style_master = 'position:relative;top:'.$this->top.'px;left:'.$this->left.'px;width:'.($this->width + 10).'px;';
|
||||
}
|
||||
@@ -459,6 +567,7 @@ class ProgressBar
|
||||
}
|
||||
|
||||
if ($this->frame['show'] == true) {
|
||||
$border = '';
|
||||
if ($this->frame['border'] > 0) {
|
||||
$border = 'border:'.$this->frame['border'].'px solid;border-color:'.$this->frame['brd_color'].';margin-top:2px;-webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px;';
|
||||
}
|
||||
@@ -578,14 +687,24 @@ class ProgressBar
|
||||
return $html;
|
||||
}
|
||||
|
||||
public function show()
|
||||
/**
|
||||
* show the progress bar after initialize
|
||||
* @return void has no return
|
||||
*/
|
||||
public function show(): void
|
||||
{
|
||||
$this->status = 'show';
|
||||
echo $this->getHtml();
|
||||
$this->__flushCache();
|
||||
}
|
||||
|
||||
public function moveStep($step)
|
||||
/**
|
||||
* move the progress bar by one step
|
||||
* prints out javascript to move progress bar
|
||||
* @param float $step percent step
|
||||
* @return void has no return
|
||||
*/
|
||||
public function moveStep(float $step): void
|
||||
{
|
||||
$last_step = $this->step;
|
||||
$this->__setStep($step);
|
||||
@@ -632,17 +751,29 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function moveNext()
|
||||
/**
|
||||
* moves progress bar by one step (1)
|
||||
* @return void has no return
|
||||
*/
|
||||
public function moveNext(): void
|
||||
{
|
||||
$this->moveStep($this->step + 1);
|
||||
}
|
||||
|
||||
public function moveMin()
|
||||
/**
|
||||
* moves the progress bar back to the beginning
|
||||
* @return void has no return
|
||||
*/
|
||||
public function moveMin(): void
|
||||
{
|
||||
$this->moveStep($this->min);
|
||||
}
|
||||
|
||||
public function hide()
|
||||
/**
|
||||
* hide the progress bar if it is visible
|
||||
* @return void has no return
|
||||
*/
|
||||
public function hide(): void
|
||||
{
|
||||
if ($this->status == 'show') {
|
||||
$this->status = 'hide';
|
||||
@@ -655,7 +786,11 @@ class ProgressBar
|
||||
}
|
||||
}
|
||||
|
||||
public function unhide()
|
||||
/**
|
||||
* show progress bar again after it was hidden with hide()
|
||||
* @return void has no return
|
||||
*/
|
||||
public function unhide(): void
|
||||
{
|
||||
if ($this->status == 'hide') {
|
||||
$this->status = 'show';
|
||||
@@ -1,32 +0,0 @@
|
||||
<?php declare(strict_types=1);
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2004/12/21
|
||||
* SHORT DESCRIPTION:
|
||||
* extends smarty with the l10n class so I can use __(, etc calls
|
||||
* HISTORY:
|
||||
* 2005/06/22 (cs) include smarty class here, so there is no need to include it in the main file
|
||||
*********************************************************************/
|
||||
|
||||
namespace CoreLibs\Template;
|
||||
|
||||
// I need to manually load Smarty BC here (it is not namespaced)
|
||||
require_once(BASE.LIB.SMARTY.'SmartyBC.class.php');
|
||||
// So it doesn't start looking around in the wrong naemspace as smarty doesn't have one
|
||||
use SmartyBC;
|
||||
|
||||
class SmartyExtend extends SmartyBC
|
||||
{
|
||||
public $l10n;
|
||||
|
||||
// constructor class, just sets the language stuff
|
||||
public function __construct(string $lang)
|
||||
{
|
||||
SmartyBC::__construct();
|
||||
$this->l10n = new \CoreLibs\Language\L10n($lang);
|
||||
// variable variable register
|
||||
$this->register_modifier('getvar', array(&$this, 'get_template_vars'));
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
413
www/lib/CoreLibs/Template/SmartyExtend.php
Normal file
@@ -0,0 +1,413 @@
|
||||
<?php declare(strict_types=1);
|
||||
// because smarty is symlinked folder
|
||||
/**
|
||||
* @phan-file-suppress PhanRedefinedExtendedClass
|
||||
*/
|
||||
|
||||
/********************************************************************
|
||||
* AUTHOR: Clemens Schwaighofer
|
||||
* CREATED: 2004/12/21
|
||||
* SHORT DESCRIPTION:
|
||||
* extends smarty with the l10n class so I can use __(, etc calls
|
||||
* HISTORY:
|
||||
* 2005/06/22 (cs) include smarty class here, so there is no need to include it in the main file
|
||||
*********************************************************************/
|
||||
|
||||
namespace CoreLibs\Template;
|
||||
|
||||
// I need to manually load Smarty BC here (it is not namespaced)
|
||||
require_once(BASE.LIB.SMARTY.'SmartyBC.class.php');
|
||||
// So it doesn't start looking around in the wrong naemspace as smarty doesn't have one
|
||||
use SmartyBC;
|
||||
|
||||
class SmartyExtend extends SmartyBC
|
||||
{
|
||||
// internal translation engine
|
||||
public $l10n;
|
||||
|
||||
// lang & encoding
|
||||
public $lang_dir = '';
|
||||
public $lang;
|
||||
public $lang_short;
|
||||
public $encoding;
|
||||
// page name
|
||||
public $page_name;
|
||||
|
||||
// array for data parsing
|
||||
public $HEADER = array();
|
||||
public $DATA = array();
|
||||
public $DEBUG_DATA = array();
|
||||
private $CONTENT_DATA = array();
|
||||
// control vars
|
||||
public $USE_PROTOTYPE = USE_PROTOTYPE;
|
||||
public $USE_JQUERY = USE_JQUERY;
|
||||
public $USE_SCRIPTACULOUS = USE_SCRIPTACULOUS;
|
||||
// sub content input vars
|
||||
public $USE_TINY_MCE = false;
|
||||
public $JS_DATEPICKR = false;
|
||||
public $JS_FLATPICKR = false;
|
||||
public $DEBUG_TMPL = false;
|
||||
public $USE_INCLUDE_TEMPLATE = false;
|
||||
// cache & compile
|
||||
public $CACHE_ID = '';
|
||||
public $COMPILE_ID = '';
|
||||
// template vars
|
||||
public $MASTER_TEMPLATE_NAME;
|
||||
public $PAGE_FILE_NAME;
|
||||
public $CONTENT_INCLUDE;
|
||||
public $FORM_NAME;
|
||||
public $FORM_ACTION;
|
||||
public $L_TITLE;
|
||||
public $PAGE_WIDTH;
|
||||
// smarty include/set var
|
||||
public $TEMPLATE_PATH;
|
||||
public $TEMPLATE_NAME;
|
||||
public $INC_TEMPLATE_NAME;
|
||||
public $JS_TEMPLATE_NAME;
|
||||
public $CSS_TEMPLATE_NAME;
|
||||
public $TEMPLATE_TRANSLATE;
|
||||
// local names
|
||||
public $JS_SPECIAL_TEMPLATE_NAME = '';
|
||||
public $CSS_SPECIAL_TEMPLATE_NAME = '';
|
||||
public $JS_INCLUDE;
|
||||
public $CSS_INCLUDE;
|
||||
public $JS_SPECIAL_INCLUDE;
|
||||
public $CSS_SPECIAL_INCLUDE;
|
||||
public $ADMIN_JAVASCRIPT;
|
||||
public $ADMIN_STYLESHEET;
|
||||
public $FRONTEND_JAVASCRIPT;
|
||||
public $FRONTEND_STYLESHEET;
|
||||
// other smarty folder vars
|
||||
public $INCLUDES;
|
||||
public $JAVASCRIPT;
|
||||
public $CSS;
|
||||
public $PICTURES;
|
||||
public $CACHE_PICTURES;
|
||||
public $CACHE_PICTURES_ROOT;
|
||||
|
||||
// constructor class, just sets the language stuff
|
||||
/**
|
||||
* constructor class, just sets the language stuff
|
||||
* calls L10 for pass on internaly in smarty
|
||||
* also registers the getvar caller pliugin
|
||||
* @param string $lang language string to set
|
||||
*/
|
||||
public function __construct(string $lang)
|
||||
{
|
||||
// call basic smarty
|
||||
parent::__construct();
|
||||
// set lang vars
|
||||
$this->setLangEncoding();
|
||||
// iinit lang
|
||||
$this->l10n = new \CoreLibs\Language\L10n($this->lang);
|
||||
// variable variable register
|
||||
// $this->register_modifier('getvar', array(&$this, 'get_template_vars'));
|
||||
$this->registerPlugin('modifier', 'getvar', array(&$this, 'get_template_vars'));
|
||||
|
||||
$this->page_name = pathinfo($_SERVER["PHP_SELF"])['basename'];
|
||||
|
||||
// set internal settings
|
||||
$this->CACHE_ID = defined('CACHE_ID') ? CACHE_ID : '';
|
||||
$this->COMPILE_ID = defined('COMPILE_ID') ? COMPILE_ID : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* ORIGINAL in \CoreLibs\Admin\Backend
|
||||
* set the language encoding and language settings
|
||||
* the default charset from _SESSION login or from
|
||||
* config DEFAULT ENCODING
|
||||
* the lang full name for mo loading from _SESSION login
|
||||
* or SITE LANG or DEFAULT LANG from config
|
||||
* creates short lang (only first two chars) from the lang
|
||||
* @return void
|
||||
*/
|
||||
public function setLangEncoding(): void
|
||||
{
|
||||
// just emergency fallback for language
|
||||
// set encoding
|
||||
if (isset($_SESSION['DEFAULT_CHARSET'])) {
|
||||
$this->encoding = $_SESSION['DEFAULT_CHARSET'];
|
||||
} else {
|
||||
$this->encoding = DEFAULT_ENCODING;
|
||||
}
|
||||
// just emergency fallback for language
|
||||
if (isset($_SESSION['DEFAULT_LANG'])) {
|
||||
$this->lang = $_SESSION['DEFAULT_LANG'];
|
||||
} else {
|
||||
$this->lang = defined('SITE_LANG') ? SITE_LANG : DEFAULT_LANG;
|
||||
}
|
||||
// create the char lang encoding
|
||||
$this->lang_short = substr($this->lang, 0, 2);
|
||||
// set the language folder
|
||||
$this->lang_dir = BASE.INCLUDES.LANG.CONTENT_PATH;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* sets all internal paths and names that need to be passed on to the smarty template
|
||||
* @return void
|
||||
*/
|
||||
public function setSmartyPaths(): void
|
||||
{
|
||||
// master template
|
||||
if (!isset($this->MASTER_TEMPLATE_NAME)) {
|
||||
$this->MASTER_TEMPLATE_NAME = MASTER_TEMPLATE_NAME;
|
||||
}
|
||||
|
||||
// set include & template names
|
||||
if (!isset($this->CONTENT_INCLUDE)) {
|
||||
$this->CONTENT_INCLUDE = str_replace('.php', '', $this->page_name).'.tpl';
|
||||
}
|
||||
// strip tpl and replace it with php
|
||||
// php include file per page
|
||||
$this->INC_TEMPLATE_NAME = str_replace('.tpl', '.php', $this->CONTENT_INCLUDE);
|
||||
// javascript include per page
|
||||
$this->JS_TEMPLATE_NAME = str_replace('.tpl', '.js', $this->CONTENT_INCLUDE);
|
||||
// css per page
|
||||
$this->CSS_TEMPLATE_NAME = str_replace('.tpl', '.css', $this->CONTENT_INCLUDE);
|
||||
|
||||
// set basic template path (tmp)
|
||||
$this->INCLUDES = BASE.INCLUDES; // no longer in templates, only global
|
||||
$this->TEMPLATE_PATH = BASE.INCLUDES.TEMPLATES.CONTENT_PATH;
|
||||
$this->setTemplateDir($this->TEMPLATE_PATH);
|
||||
$this->JAVASCRIPT = LAYOUT.JS;
|
||||
$this->CSS = LAYOUT.CSS;
|
||||
$this->PICTURES = LAYOUT.IMAGES;
|
||||
$this->CACHE_PICTURES = LAYOUT.CACHE;
|
||||
$this->CACHE_PICTURES_ROOT = ROOT.$this->CACHE_PICTURES;
|
||||
// check if we have an external file with the template name
|
||||
if (file_exists($this->INCLUDES.$this->INC_TEMPLATE_NAME) &&
|
||||
is_file($this->INCLUDES.$this->INC_TEMPLATE_NAME)
|
||||
) {
|
||||
include($this->INCLUDES.$this->INC_TEMPLATE_NAME);
|
||||
}
|
||||
// check for template include
|
||||
if ($this->USE_INCLUDE_TEMPLATE === true &&
|
||||
!$this->TEMPLATE_NAME
|
||||
) {
|
||||
$this->TEMPLATE_NAME = $this->CONTENT_INCLUDE;
|
||||
// add to cache & compile id
|
||||
$this->COMPILE_ID .= '_'.$this->TEMPLATE_NAME;
|
||||
$this->CACHE_ID .= '_'.$this->TEMPLATE_NAME;
|
||||
}
|
||||
// additional per page Javascript include
|
||||
$this->JS_INCLUDE = '';
|
||||
if (file_exists($this->JAVASCRIPT.$this->JS_TEMPLATE_NAME) &&
|
||||
is_file($this->JAVASCRIPT.$this->JS_TEMPLATE_NAME)
|
||||
) {
|
||||
$this->JS_INCLUDE = $this->JAVASCRIPT.$this->JS_TEMPLATE_NAME;
|
||||
}
|
||||
// per page css file
|
||||
$this->CSS_INCLUDE = '';
|
||||
if (file_exists($this->CSS.$this->CSS_TEMPLATE_NAME) &&
|
||||
is_file($this->CSS.$this->CSS_TEMPLATE_NAME)
|
||||
) {
|
||||
$this->CSS_INCLUDE = $this->CSS.$this->CSS_TEMPLATE_NAME;
|
||||
}
|
||||
// optional CSS file
|
||||
$this->CSS_SPECIAL_INCLUDE = '';
|
||||
if (file_exists($this->CSS.$this->CSS_SPECIAL_TEMPLATE_NAME) &&
|
||||
is_file($this->CSS.$this->CSS_SPECIAL_TEMPLATE_NAME)
|
||||
) {
|
||||
$this->CSS_SPECIAL_INCLUDE = $this->CSS.$this->CSS_SPECIAL_TEMPLATE_NAME;
|
||||
}
|
||||
// optional JS file
|
||||
$this->JS_SPECIAL_INCLUDE = '';
|
||||
if (file_exists($this->JAVASCRIPT.$this->JS_SPECIAL_TEMPLATE_NAME) &&
|
||||
is_file($this->JAVASCRIPT.$this->JS_SPECIAL_TEMPLATE_NAME)
|
||||
) {
|
||||
$this->JS_SPECIAL_INCLUDE = $this->JAVASCRIPT.$this->JS_SPECIAL_TEMPLATE_NAME;
|
||||
}
|
||||
// check if template names exist
|
||||
if (!$this->MASTER_TEMPLATE_NAME) {
|
||||
exit('MASTER TEMPLATE is not set');
|
||||
} elseif (!file_exists($this->getTemplateDir()[0].DS.$this->MASTER_TEMPLATE_NAME)) {
|
||||
// abort if master template could not be found
|
||||
exit('MASTER TEMPLATE: '.$this->MASTER_TEMPLATE_NAME.' could not be found');
|
||||
}
|
||||
if ($this->TEMPLATE_NAME &&
|
||||
!file_exists($this->getTemplateDir()[0].DS.$this->TEMPLATE_NAME)
|
||||
) {
|
||||
exit('INCLUDE TEMPLATE: '.$this->TEMPLATE_NAME.' could not be found');
|
||||
}
|
||||
// javascript translate data as template for auto translate
|
||||
if (empty($this->TEMPLATE_TRANSLATE)) {
|
||||
$this->TEMPLATE_TRANSLATE = 'jsTranslate_'.$this->lang.'.tpl';
|
||||
} else {
|
||||
// we assume we have some fixed set
|
||||
// we must add _<$this->lang>
|
||||
// if .tpl, put before .tpl
|
||||
// if not .tpl, add _<$this->lang>.tpl
|
||||
if (strpos($this->TEMPLATE_TRANSLATE, '.tpl')) {
|
||||
$this->TEMPLATE_TRANSLATE = str_replace('.tpl', '_'.$this->lang.'.tpl', $this->TEMPLATE_TRANSLATE);
|
||||
} else {
|
||||
$this->TEMPLATE_TRANSLATE .= '_'.$this->lang.'.tpl';
|
||||
}
|
||||
}
|
||||
// if we can't find it, dump it
|
||||
if (!file_exists($this->getTemplateDir()[0].DS.$this->TEMPLATE_TRANSLATE)) {
|
||||
$this->TEMPLATE_TRANSLATE = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper call for setSmartyVars
|
||||
* this is for frontend type and will not set any only admin needed variables
|
||||
* @return void
|
||||
*/
|
||||
public function setSmartyVarsFrontend(): void
|
||||
{
|
||||
$this->setSmartyVars();
|
||||
}
|
||||
|
||||
/**
|
||||
* wrapper call for setSmartyVars
|
||||
* this is only for admin interface and will set additional variables
|
||||
*/
|
||||
public function setSmartyVarsAdmin(): void
|
||||
{
|
||||
$this->setSmartyVars(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* set smarty pass on variables, sub template names and finally calls the smarty parser
|
||||
* @param boolean $admin_call default false, will set admin only variables
|
||||
* @return void
|
||||
*/
|
||||
private function setSmartyVars($admin_call = false): void
|
||||
{
|
||||
global $cms;
|
||||
// array merge HEADER, DATA, DEBUG DATA
|
||||
foreach (array('HEADER', 'DATA', 'DEBUG_DATA') as $ext_smarty) {
|
||||
if (is_array($cms->{$ext_smarty})) {
|
||||
$this->{$ext_smarty} = array_merge($this->{$ext_smarty}, $cms->{$ext_smarty});
|
||||
}
|
||||
}
|
||||
|
||||
// trigger flags
|
||||
$this->HEADER['USE_PROTOTYPE'] = $this->USE_PROTOTYPE;
|
||||
// scriptacolous, can only be used with prototype
|
||||
if ($this->HEADER['USE_PROTOTYPE']) {
|
||||
$this->HEADER['USE_SCRIPTACULOUS'] = $this->USE_SCRIPTACULOUS;
|
||||
}
|
||||
// jquery and prototype should not be used together
|
||||
$this->HEADER['USE_JQUERY'] = $this->USE_JQUERY;
|
||||
|
||||
// additional per page Javascript include
|
||||
$this->JS_INCLUDE = '';
|
||||
if (file_exists($this->JAVASCRIPT.$this->JS_TEMPLATE_NAME) &&
|
||||
is_file($this->JAVASCRIPT.$this->JS_TEMPLATE_NAME)
|
||||
) {
|
||||
$this->JS_INCLUDE = $this->JAVASCRIPT.$this->JS_TEMPLATE_NAME;
|
||||
}
|
||||
// per page css file
|
||||
$this->CSS_INCLUDE = '';
|
||||
if (file_exists($this->CSS.$this->CSS_TEMPLATE_NAME) &&
|
||||
is_file($this->CSS.$this->CSS_TEMPLATE_NAME)
|
||||
) {
|
||||
$this->CSS_INCLUDE = $this->CSS.$this->CSS_TEMPLATE_NAME;
|
||||
}
|
||||
// optional CSS file
|
||||
$this->CSS_SPECIAL_INCLUDE = '';
|
||||
if (file_exists($this->CSS.$this->CSS_SPECIAL_TEMPLATE_NAME) &&
|
||||
is_file($this->CSS.$this->CSS_SPECIAL_TEMPLATE_NAME)
|
||||
) {
|
||||
$this->CSS_SPECIAL_INCLUDE = $this->CSS.$this->CSS_SPECIAL_TEMPLATE_NAME;
|
||||
}
|
||||
// optional JS file
|
||||
$this->JS_SPECIAL_INCLUDE = '';
|
||||
if (file_exists($this->JAVASCRIPT.$this->JS_SPECIAL_TEMPLATE_NAME) &&
|
||||
is_file($this->JAVASCRIPT.$this->JS_SPECIAL_TEMPLATE_NAME)
|
||||
) {
|
||||
$this->JS_SPECIAL_INCLUDE = $this->JAVASCRIPT.$this->JS_SPECIAL_TEMPLATE_NAME;
|
||||
}
|
||||
|
||||
// the actual include files for javascript (per page)
|
||||
$this->HEADER['JS_INCLUDE'] = $this->JS_INCLUDE;
|
||||
$this->HEADER['CSS_INCLUDE'] = $this->CSS_INCLUDE;
|
||||
$this->HEADER['CSS_SPECIAL_INCLUDE'] = $this->CSS_SPECIAL_INCLUDE;
|
||||
$this->HEADER['JS_SPECIAL_INCLUDE'] = $this->JS_SPECIAL_INCLUDE;
|
||||
// paths to the files
|
||||
$this->DATA['includes'] = $this->INCLUDES;
|
||||
$this->DATA['js'] = $this->JAVASCRIPT;
|
||||
$this->DATA['css'] = $this->CSS;
|
||||
$this->DATA['pictures'] = $this->PICTURES;
|
||||
|
||||
// default CMS settings
|
||||
// define all needed smarty stuff for the general HTML/page building
|
||||
$this->HEADER['CSS'] = CSS;
|
||||
$this->HEADER['JS'] = JS;
|
||||
$this->HEADER['ENCODING'] = $this->encoding;
|
||||
$this->HEADER['DEFAULT_ENCODING'] = DEFAULT_ENCODING;
|
||||
|
||||
// special for admin
|
||||
if ($admin_call === true) {
|
||||
// set ACL extra show
|
||||
$this->DATA['show_ea_extra'] = isset($cms->acl['show_ea_extra']) ? $cms->acl['show_ea_extra'] : false;
|
||||
$this->DATA['ADMIN'] = !empty($cms->acl['admin']) ? $cms->acl['admin'] : 0;
|
||||
// set style sheets
|
||||
$this->HEADER['STYLESHEET'] = $this->ADMIN_STYLESHEET ? $this->ADMIN_STYLESHEET : ADMIN_STYLESHEET;
|
||||
$this->HEADER['JAVASCRIPT'] = $this->ADMIN_JAVASCRIPT ? $this->ADMIN_JAVASCRIPT : ADMIN_JAVASCRIPT;
|
||||
// top menu
|
||||
$this->DATA['nav_menu'] = $cms->adbTopMenu();
|
||||
$this->DATA['nav_menu_count'] = is_array($this->DATA['nav_menu']) ? count($this->DATA['nav_menu']) : 0;
|
||||
// messages = array('msg' =>, 'class' => 'error/warning/...')
|
||||
$this->DATA['messages'] = isset($cms->messages) ? $cms->messages : $cms->messages;
|
||||
// the page name
|
||||
$this->DATA['page_name'] = $this->page_name;
|
||||
$this->DATA['table_width'] = isset($this->PAGE_WIDTH) ? $this->PAGE_WIDTH : PAGE_WIDTH;
|
||||
// for tinymce special
|
||||
$this->DATA['TINYMCE_LANG'] = $this->lang_short;
|
||||
// include flags
|
||||
$this->DATA['USE_TINY_MCE'] = $this->USE_TINY_MCE;
|
||||
// debug data, if DEBUG flag is on, this data is print out
|
||||
$this->DEBUG_DATA['DEBUG'] = $this->DEBUG_TMPL;
|
||||
} else {
|
||||
$this->HEADER['STYLESHEET'] = $this->FRONTEND_STYLESHEET ? $this->FRONTEND_STYLESHEET : STYLESHEET;
|
||||
$this->HEADER['JAVASCRIPT'] = $this->FRONTEND_JAVASCRIPT ? $this->FRONTEND_JAVASCRIPT : JAVASCRIPT;
|
||||
}
|
||||
// html title
|
||||
// set local page title
|
||||
$this->HEADER['HTML_TITLE'] = !$this->L_TITLE ?
|
||||
ucfirst(str_replace('_', ' ', $cms->getPageName(1))).(defined(G_TITLE) ? ' - '.$this->l10n->__(G_TITLE) : '') :
|
||||
$this->l10n->__($this->L_TITLE);
|
||||
|
||||
// LANG
|
||||
$this->DATA['LANG'] = $this->lang;
|
||||
// form name
|
||||
$this->DATA['FORM_NAME'] = !$this->FORM_NAME ?
|
||||
str_replace('.php', '', $this->page_name) :
|
||||
$this->FORM_NAME;
|
||||
$this->DATA['FORM_ACTION'] = $this->FORM_ACTION;
|
||||
// include flags
|
||||
$this->DATA['JS_DATEPICKR'] = $this->JS_DATEPICKR;
|
||||
$this->DATA['JS_FLATPICKR'] = $this->JS_FLATPICKR;
|
||||
// user name
|
||||
$this->DATA['USER_NAME'] = !empty($_SESSION['USER_NAME']) ? $_SESSION['USER_NAME'] : '';
|
||||
// the template part to include into the body
|
||||
$this->DATA['TEMPLATE_NAME'] = $this->TEMPLATE_NAME;
|
||||
$this->DATA['CONTENT_INCLUDE'] = $this->CONTENT_INCLUDE;
|
||||
$this->DATA['TEMPLATE_TRANSLATE'] = isset($this->TEMPLATE_TRANSLATE) ? $this->TEMPLATE_TRANSLATE : null;
|
||||
$this->DATA['PAGE_FILE_NAME'] = str_replace('.php', '', $this->page_name).'.tpl';
|
||||
|
||||
// create main data array
|
||||
$this->CONTENT_DATA = array_merge($this->HEADER, $this->DATA, $this->DEBUG_DATA);
|
||||
// data is 1:1 mapping (all vars, values, etc)
|
||||
foreach ($this->CONTENT_DATA as $key => $value) {
|
||||
$this->assign($key, $value);
|
||||
}
|
||||
if (is_dir(BASE.TEMPLATES_C)) {
|
||||
$this->setCompileDir(BASE.TEMPLATES_C);
|
||||
}
|
||||
if (is_dir(BASE.CACHE)) {
|
||||
$this->setCacheDir(BASE.CACHE);
|
||||
}
|
||||
$this->display(
|
||||
$this->MASTER_TEMPLATE_NAME,
|
||||
$this->CACHE_ID.($this->CACHE_ID ? '_' : '').$this->lang,
|
||||
$this->COMPILE_ID.($this->COMPILE_ID ? '_' : '').$this->lang
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
@@ -32,7 +32,7 @@ function MyErrorHandler($type, $message, $file, $line, $context)
|
||||
return;
|
||||
}
|
||||
// ERROR LEVEL
|
||||
$error_level = array (
|
||||
$error_level = array(
|
||||
1 => 'E_ERROR',
|
||||
2 => 'E_WARNING',
|
||||
4 => 'E_PARSE',
|
||||
@@ -60,7 +60,7 @@ function MyErrorHandler($type, $message, $file, $line, $context)
|
||||
// <> the line number in this file
|
||||
// [|] error name and error number
|
||||
// : the php error message
|
||||
$output = '['.date("Y-m-d H:i:s").'] {'.array_pop($page_temp).'} ['.$file.'] <'.$line.'> ['.$error_level[$type].'|'.$type.']: '.$message;
|
||||
$output = '{'.array_pop($page_temp).'} ['.$file.'] <'.$line.'> ['.$error_level[$type].'|'.$type.']: '.$message;
|
||||
# try to open file
|
||||
$ROOT = CURRENT_WORKING_DIR;
|
||||
$LOG = 'log/';
|
||||
@@ -76,7 +76,7 @@ function MyErrorHandler($type, $message, $file, $line, $context)
|
||||
$fp = @fopen($fn, 'a');
|
||||
// write if we have a file pointer, else set error flag
|
||||
if ($fp) {
|
||||
fwrite($fp, $output."\n");
|
||||
fwrite($fp, '['.date("Y-m-d H:i:s").'] '.$output."\n");
|
||||
fclose($fp);
|
||||
} else {
|
||||
$error = 1;
|
||||
@@ -92,13 +92,13 @@ function MyErrorHandler($type, $message, $file, $line, $context)
|
||||
if (ini_get("display_errors")) {
|
||||
echo "<div style='border: 1px dotted red; background-color: #ffffe5; color: #000000; padding: 5px; margin-bottom: 2px;'>";
|
||||
echo "<div style='color: orange; font-weight: bold;'>".$error_level[$type].":</div>";
|
||||
echo "<b>$message</b> on line <b>$line</b> in <b>$file</b>";
|
||||
echo "<b>".$message."</b> on line <b>".$line."</b> in <b>".$file."</b>";
|
||||
echo "</div>";
|
||||
}
|
||||
// if write to log is on
|
||||
// simplified, remove datetime for log file
|
||||
if (ini_get('log_errors')) {
|
||||
error_log('{'.$page_temp.'} ['.$file.'] <'.$line.'> ['.$error_level[$type].'|'.$type.']: '.$message);
|
||||
error_log($output);
|
||||
}
|
||||
}
|
||||
// return true, to avoid that php calls its own error stuff
|
||||